<?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>20858</bug_id>
          
          <creation_ts>2008-09-15 09:38:41 -0700</creation_ts>
          <short_desc>make each distinct C++ class get a distinct JSC::Structure</short_desc>
          <delta_ts>2008-09-20 19:33:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91218</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-15 09:38:41 -0700</bug_when>
    <thetext>This will allow us to move everything from virtual functions to functions based on things stored in Structure.

Some of this work is in JavaScriptCore, but the hard part of it is in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91219</commentid>
    <comment_count>1</comment_count>
      <attachid>23443</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-15 09:39:47 -0700</bug_when>
    <thetext>Created attachment 23443
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91724</commentid>
    <comment_count>2</comment_count>
      <attachid>23555</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-18 23:19:45 -0700</bug_when>
    <thetext>Created attachment 23555
patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91731</commentid>
    <comment_count>3</comment_count>
      <attachid>23555</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-18 23:44:31 -0700</bug_when>
    <thetext>Comment on attachment 23555
patch 1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91733</commentid>
    <comment_count>4</comment_count>
      <attachid>23555</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-18 23:49:52 -0700</bug_when>
    <thetext>Comment on attachment 23555
patch 1

Clearing the review flag since this part is landed now.

http://trac.webkit.org/changeset/36662</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91807</commentid>
    <comment_count>5</comment_count>
      <attachid>23578</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-19 12:47:57 -0700</bug_when>
    <thetext>Created attachment 23578
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91818</commentid>
    <comment_count>6</comment_count>
      <attachid>23578</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-19 14:16:23 -0700</bug_when>
    <thetext>Comment on attachment 23578
patch

Clearing the review flag since this part is landed now.

http://trac.webkit.org/changeset/36675</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91845</commentid>
    <comment_count>7</comment_count>
      <attachid>23587</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-19 17:50:08 -0700</bug_when>
    <thetext>Created attachment 23587
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91930</commentid>
    <comment_count>8</comment_count>
      <attachid>23587</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-20 13:53:37 -0700</bug_when>
    <thetext>Comment on attachment 23587
work in progress

Got a patch working now. Just running WebKit tests to make sure it doesn&apos;t break anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91934</commentid>
    <comment_count>9</comment_count>
      <attachid>23613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-20 14:33:28 -0700</bug_when>
    <thetext>Created attachment 23613
patch

Passes all tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91935</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-20 14:34:02 -0700</bug_when>
    <thetext>This patch takes care of all the rest! Once I land it, the task is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91957</commentid>
    <comment_count>11</comment_count>
      <attachid>23613</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-20 19:01:22 -0700</bug_when>
    <thetext>Comment on attachment 23613
patch

r=me

Excellent work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91959</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-20 19:33:10 -0700</bug_when>
    <thetext>http://trac.webkit.org/projects/webkit/changeset/36726</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23443</attachid>
            <date>2008-09-15 09:39:47 -0700</date>
            <delta_ts>2008-09-18 23:19:45 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>StructureWorkInProgressPatch.txt</filename>
            <type>text/plain</type>
            <size>79345</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM2NDIyKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiAr
MTEwLDcgQEAgX19aTjNKU0MxMVByb3BlcnR5TWFwRDFFdgogX19aTjNKU0MxMVN0cnVjdHVyZUlE
MjFhZGRQcm9wZXJ0eVRyYW5zaXRpb25FUFMwX1JLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1
ZUVqUE5TXzhKU09iamVjdEVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFUlBTNl8KIF9fWk4zSlNDMTFT
dHJ1Y3R1cmVJRDI0ZnJvbURpY3Rpb25hcnlUcmFuc2l0aW9uRVBTMF8KIF9fWk4zSlNDMTFTdHJ1
Y3R1cmVJRDI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVQUzBfUE5TXzdKU1ZhbHVlRQorX19a
TjNKU0MxMVN0cnVjdHVyZUlEQzFFUE5TXzdKU1ZhbHVlRU5TXzZKU1R5cGVFCiBfX1pOM0pTQzEx
U3RydWN0dXJlSUREMUV2CiBfX1pOM0pTQzEyRGF0ZUluc3RhbmNlNGluZm9FCiBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhNmNyZWF0ZUV2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMzY0MjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDcgKzI5NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0OwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBT
dHJ1Y3R1cmVJRDo6cHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSogZXhlYykgeworICAgIGlu
bGluZSBKU1ZhbHVlKiBTdHJ1Y3R1cmVJRDo6cHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSog
ZXhlYykKKyAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gT2JqZWN0VHlwZSkKICAgICAgICAg
ICAgIHJldHVybiBtX3Byb3RvdHlwZTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NS
dWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDQ2ICs1NCw0NCBAQCBKU1Zh
bHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NTUnVsZSogCiAgICAgaWYgKCFydWxlKQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBET01PYmplY3QqIHJldCA9IFNjcmlwdEludGVy
cHJldGVyOjpnZXRET01PYmplY3QocnVsZSk7CisgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0
Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihydWxlKTsKIAotICAgIGlmIChyZXQpCi0gICAgICAgIHJl
dHVybiByZXQ7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAg
ICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9S
VUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1N0eWxlUnVsZShKU0NTU1J1
bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUp
KTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMs
IENTU1N0eWxlUnVsZSwgcnVsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NSdWxlOjpNRURJQV9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU01l
ZGlhUnVsZShKU0NTU01lZGlhUnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01f
T0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTTWVkaWFSdWxlLCBydWxlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgotICAgICAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU0NTU0ZvbnRGYWNlUnVsZShKU0NTU0ZvbnRGYWNlUnVsZVByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSkpOwor
ICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NT
Rm9udEZhY2VSdWxlLCBydWxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENT
U1J1bGU6OlBBR0VfUlVMRToKLSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDU1NQYWdl
UnVsZShKU0NTU1BhZ2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NQ
YWdlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVD
VF9XUkFQUEVSKGV4ZWMsIENTU1BhZ2VSdWxlLCBydWxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3
IChleGVjKSBKU0NTU0ltcG9ydFJ1bGUoSlNDU1NJbXBvcnRSdWxlUHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTSW1wb3J0UnVsZSwgcnVs
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JV
TEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NTQ2hhcnNldFJ1bGUoSlNDU1ND
aGFyc2V0UnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGUqPihydWxlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JB
UFBFUihleGVjLCBDU1NDaGFyc2V0UnVsZSwgcnVsZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NSdWxlOjpWQVJJQUJMRVNfUlVMRToKLSAgICAgICAgICAgIHJldCA9IG5l
dyAoZXhlYykgSlNDU1NWYXJpYWJsZXNSdWxlKEpTQ1NTVmFyaWFibGVzUnVsZVByb3RvdHlwZTo6
c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVzUnVsZSo+KHJ1bGUpKTsKKyAgICAg
ICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIENTU1Zhcmlh
Ymxlc1J1bGUsIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUnVs
ZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlUHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqPihydWxlKSk7Cisg
ICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUsIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FU19SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3
IChleGVjKSBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUoSlNXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Kj4ocnVsZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQ
RVIoZXhlYywgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSwgcnVsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDU1NS
dWxlKEpTQ1NTUnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgcnVsZSk7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4
ZWMsIENTU1J1bGUsIHJ1bGUpOwogICAgIH0KIAotICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRE
T01PYmplY3QocnVsZSwgcmV0KTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiB3cmFwcGVy
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzNjQy
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDEzICsxNjIsMTQgQEAgYm9vbCBKU0NTU1N0eWxlRGVj
bGFyYXRpb246OmN1c3RvbVB1dChFeAogICAgIGlmICghaXNDU1NQcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRE9NRXhjZXB0aW9uVHJhbnNs
YXRvciBleGNlcHRpb24oZXhlYyk7CiAgICAgYm9vbCBwaXhlbE9yUG9zOwogICAgIFN0cmluZyBw
cm9wID0gY3NzUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgJnBpeGVsT3JQb3MpOwogICAgIFN0
cmluZyBwcm9wVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7
CiAgICAgaWYgKHBpeGVsT3JQb3MpCiAgICAgICAgIHByb3BWYWx1ZSArPSAicHgiOwotICAgIGlt
cGwoKS0+c2V0UHJvcGVydHkocHJvcCwgcHJvcFZhbHVlLCBleGNlcHRpb24pOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2V0UHJvcGVydHkocHJvcCwgcHJvcFZhbHVl
LCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZp
c2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDI4ICs0OSwyNyBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0
ZSogZXhlYywgQ1NTVmFsdWUqCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogCi0gICAgRE9NT2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2Jq
ZWN0KHZhbHVlKTsKKyAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RX
cmFwcGVyKHZhbHVlKTsKIAotICAgIGlmIChyZXQpCi0gICAgICAgIHJldHVybiByZXQ7CisgICAg
aWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgaWYgKHZhbHVlLT5p
c1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlUHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KHZhbHVl
KSk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLCB2YWx1ZSk7CiAgICAgZWxzZSBpZiAodmFsdWUtPmlzVmFs
dWVMaXN0KCkpCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDU1NWYWx1ZUxpc3QoSlNDU1NW
YWx1ZUxpc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKSk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4
ZWMsIENTU1ZhbHVlTGlzdCwgdmFsdWUpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAo
dmFsdWUtPmlzU1ZHUGFpbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1NWR1BhaW50
KEpTU1ZHUGFpbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFNWR1BhaW50Kj4o
dmFsdWUpKTsKKyAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhl
YywgU1ZHUGFpbnQsIHZhbHVlKTsKICAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQot
ICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTU1ZHQ29sb3IoSlNTVkdDb2xvclByb3RvdHlwZTo6
c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSkpOworICAgICAgICB3cmFw
cGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdDb2xvciwgdmFsdWUpOwog
I2VuZGlmCiAgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU0NTU1ByaW1pdGl2ZVZhbHVlKEpTQ1NTUHJpbWl0aXZlVmFsdWVQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpKTsKKyAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywg
Q1NTUHJpbWl0aXZlVmFsdWUsIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIHJldCA9IG5ldyAo
ZXhlYykgSlNDU1NWYWx1ZShKU0NTU1ZhbHVlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCB2YWx1ZSk7
CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIENTU1Zh
bHVlLCB2YWx1ZSk7CiAKLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KHZhbHVl
LCByZXQpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NDIyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCwxNyArNTgsMTUgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENhbnZhc1BpeAog
ICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgRE9N
T2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KHBpeGVscyk7Ci0g
ICAgaWYgKHJldCkKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICBET01PYmplY3QqIHdyYXBwZXIg
PSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKHBpeGVscyk7CisgICAgaWYgKHdyYXBwZXIpCisg
ICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIAotICAgIHJldCA9IG5ldyAoZXhlYykgSlNDYW52
YXNQaXhlbEFycmF5KEpTQ2FudmFzUGl4ZWxBcnJheVByb3RvdHlwZTo6c2VsZihleGVjKSwgcGl4
ZWxzKTsKKyAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBDYW52
YXNQaXhlbEFycmF5LCBwaXhlbHMpOwogICAgIAogICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHBpeGVscy0+bGVuZ3RoKCkpOwogICAgIAotICAgIFNjcmlwdEludGVycHJl
dGVyOjpwdXRET01PYmplY3QocGl4ZWxzLCByZXQpOwotICAgIAotICAgIHJldHVybiByZXQ7Cisg
ICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4
LDMwICsxMjgsMzAgQEAgc3RhdGljIERPTU9iamVjdE1hcCYgZG9tT2JqZWN0cygpCiAgICAgcmV0
dXJuIHN0YXRpY0RPTU9iamVjdHM7CiB9CiAKLURPTU9iamVjdCogU2NyaXB0SW50ZXJwcmV0ZXI6
OmdldERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5kbGUpIAorRE9NT2JqZWN0KiBnZXRDYWNoZWRE
T01PYmplY3RXcmFwcGVyKHZvaWQqIG9iamVjdEhhbmRsZSkgCiB7CiAgICAgcmV0dXJuIGRvbU9i
amVjdHMoKS5nZXQob2JqZWN0SGFuZGxlKTsKIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6
cHV0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSwgRE9NT2JqZWN0KiB3cmFwcGVyKSAKK3Zv
aWQgY2FjaGVET01PYmplY3RXcmFwcGVyKHZvaWQqIG9iamVjdEhhbmRsZSwgRE9NT2JqZWN0KiB3
cmFwcGVyKSAKIHsKICAgICBhZGRXcmFwcGVyKHdyYXBwZXIpOwogICAgIGRvbU9iamVjdHMoKS5z
ZXQob2JqZWN0SGFuZGxlLCB3cmFwcGVyKTsKIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6
Zm9yZ2V0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3ZvaWQgZm9yZ2V0RE9NT2JqZWN0
KHZvaWQqIG9iamVjdEhhbmRsZSkKIHsKICAgICByZW1vdmVXcmFwcGVyKGRvbU9iamVjdHMoKS50
YWtlKG9iamVjdEhhbmRsZSkpOwogfQogCi1KU05vZGUqIFNjcmlwdEludGVycHJldGVyOjpnZXRE
T01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJDb3JlOjpOb2RlKiBub2Rl
KQorSlNOb2RlKiBnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihEb2N1bWVudCogZG9jdW1lbnQsIE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTTm9kZSo+KGRvbU9iamVjdHMoKS5nZXQobm9kZSkpOwogICAgIHJldHVybiBkb2N1bWVu
dC0+d3JhcHBlckNhY2hlKCkuZ2V0KG5vZGUpOwogfQogCi12b2lkIFNjcmlwdEludGVycHJldGVy
Ojpmb3JnZXRET01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJDb3JlOjpO
b2RlKiBub2RlKQordm9pZCBmb3JnZXRET01Ob2RlKERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSog
bm9kZSkKIHsKICAgICBpZiAoIWRvY3VtZW50KSB7CiAgICAgICAgIHJlbW92ZVdyYXBwZXIoZG9t
T2JqZWN0cygpLnRha2Uobm9kZSkpOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgU2NyaXB0SW50
ZXJwcmV0ZXI6OmZvcmdldERPTU5vZGVGb3IKICAgICByZW1vdmVXcmFwcGVyKGRvY3VtZW50LT53
cmFwcGVyQ2FjaGUoKS50YWtlKG5vZGUpKTsKIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6
cHV0RE9NTm9kZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgV2ViQ29yZTo6Tm9kZSog
bm9kZSwgSlNOb2RlKiB3cmFwcGVyKQordm9pZCBjYWNoZURPTU5vZGVXcmFwcGVyKERvY3VtZW50
KiBkb2N1bWVudCwgTm9kZSogbm9kZSwgSlNOb2RlKiB3cmFwcGVyKQogewogICAgIGFkZFdyYXBw
ZXIod3JhcHBlcik7CiAgICAgaWYgKCFkb2N1bWVudCkgewpAQCAtMTcwLDEzICsxNzAsMTMgQEAg
dm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NTm9kZUZvckRvYwogICAgIGRvY3VtZW50LT53
cmFwcGVyQ2FjaGUoKS5zZXQobm9kZSwgd3JhcHBlcik7CiB9CiAKLXZvaWQgU2NyaXB0SW50ZXJw
cmV0ZXI6OmZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQor
dm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIHJlbW92ZVdyYXBwZXJzKGRvY3VtZW50LT53cmFw
cGVyQ2FjaGUoKSk7CiB9CiAKLXZvaWQgU2NyaXB0SW50ZXJwcmV0ZXI6Om1hcmtET01Ob2Rlc0Zv
ckRvY3VtZW50KERvY3VtZW50KiBkb2MpCit2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KERv
Y3VtZW50KiBkb2MpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgSlMgd3JhcHBlciBob2xkcyBjdXN0
b20gcHJvcGVydGllcywgdGhvc2UgcHJvcGVydGllcyBtdXN0CiAgICAgLy8gcGVyc2lzdCBldmVy
eSB0aW1lIHRoZSBub2RlIGlzIGZldGNoZWQgZnJvbSB0aGUgRE9NLiBTbywgd2Uga2VlcCBKUwpA
QCAtMTg2LDM0ICsxODYsMzUgQEAgdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVz
Rm9yRAogICAgIEpTV3JhcHBlckNhY2hlOjppdGVyYXRvciBub2RlRW5kID0gbm9kZURpY3QuZW5k
KCk7CiAgICAgZm9yIChKU1dyYXBwZXJDYWNoZTo6aXRlcmF0b3Igbm9kZUl0ID0gbm9kZURpY3Qu
YmVnaW4oKTsgbm9kZUl0ICE9IG5vZGVFbmQ7ICsrbm9kZUl0KSB7CiAgICAgICAgIEpTTm9kZSog
anNOb2RlID0gbm9kZUl0LT5zZWNvbmQ7Ci0gICAgICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBq
c05vZGUtPmltcGwoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGpzTm9kZS0+aW1wbCgpOwogCiAg
ICAgICAgIGlmIChqc05vZGUtPm1hcmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgLy8gTm8gbmVlZCB0byBwcmVzZXJ2ZSBhIHdyYXBwZXIgdGhhdCBoYXMgbm8gY3VzdG9t
IHByb3BlcnRpZXMgb3IgaXMgbm8KICAgICAgICAgLy8gbG9uZ2VyIGZldGNoYWJsZSB0aHJvdWdo
IHRoZSBET00uCi0gICAgICAgIGlmICghanNOb2RlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkgfHwg
IW5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKCFqc05vZGUtPmhhc0N1c3RvbVByb3Bl
cnRpZXMoKSB8fCAhbm9kZS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAvLy4uLiB1bmxl
c3MgdGhlIHdyYXBwZXIgd3JhcHMgYSBsb2FkaW5nIGltYWdlLCBzaW5jZSB0aGUgIm5ldyBJbWFn
ZSIKICAgICAgICAgICAgIC8vIHN5bnRheCBhbGxvd3MgYW4gb3JwaGFuIGltYWdlIHdyYXBwZXIg
dG8gYmUgdGhlIGxhc3QgcmVmZXJlbmNlCiAgICAgICAgICAgICAvLyB0byBhIGxvYWRpbmcgaW1h
Z2UsIHdob3NlIGxvYWQgZXZlbnQgbWlnaHQgaGF2ZSBpbXBvcnRhbnQgc2lkZS1lZmZlY3RzLgog
ICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykgfHwgc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGpzTm9kZS0+bWFyaygpOwog
ICAgIH0KIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6dXBkYXRlRE9NTm9kZURvY3VtZW50
KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIERvY3VtZW50KiBvbGREb2MsIERvY3VtZW50KiBuZXdEb2Mp
Cit2b2lkIHVwZGF0ZURPTU5vZGVEb2N1bWVudChOb2RlKiBub2RlLCBEb2N1bWVudCogb2xkRG9j
dW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkKIHsKLSAgICBBU1NFUlQob2xkRG9jICE9IG5l
d0RvYyk7Ci0gICAgSlNOb2RlKiB3cmFwcGVyID0gZ2V0RE9NTm9kZUZvckRvY3VtZW50KG9sZERv
Yywgbm9kZSk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAgcmVtb3ZlV3JhcHBlcih3cmFw
cGVyKTsKLSAgICAgICAgcHV0RE9NTm9kZUZvckRvY3VtZW50KG5ld0RvYywgbm9kZSwgd3JhcHBl
cik7Ci0gICAgICAgIGZvcmdldERPTU5vZGVGb3JEb2N1bWVudChvbGREb2MsIG5vZGUpOwotICAg
ICAgICBhZGRXcmFwcGVyKHdyYXBwZXIpOwotICAgIH0KKyAgICBBU1NFUlQob2xkRG9jdW1lbnQg
IT0gbmV3RG9jdW1lbnQpOworICAgIEpTTm9kZSogd3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVX
cmFwcGVyKG9sZERvY3VtZW50LCBub2RlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICByZW1vdmVXcmFwcGVyKHdyYXBwZXIpOworICAgIGNhY2hlRE9NTm9kZVdyYXBw
ZXIobmV3RG9jdW1lbnQsIG5vZGUsIHdyYXBwZXIpOworICAgIGZvcmdldERPTU5vZGUob2xkRG9j
dW1lbnQsIG5vZGUpOworICAgIGFkZFdyYXBwZXIod3JhcHBlcik7CiB9CiAKIEpTVmFsdWUqIGpz
U3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQpAQCAtMzcyLDQg
KzM3MywxNyBAQCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIH0K
IAorSlNDOjpTdHJ1Y3R1cmVJRCogZ2V0RE9NT2JqZWN0U3RydWN0dXJlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAm
IHN0cnVjdHVyZXMgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnN0cnVjdHVyZXMoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xh
c3NOYW1lKS5nZXQoKTsKK30KKworSlNDOjpTdHJ1Y3R1cmVJRCogY3JlYXRlRE9NT2JqZWN0U3Ry
dWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBjbGFzc05hbWUsIEpTQzo6
SlNPYmplY3QqIHByb3RvdHlwZSkKK3sKKyAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJl
cyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c3RydWN0dXJlcygpOworICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc05h
bWUpKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NOYW1lLCBTdHJ1Y3R1cmVJRDo6
Y3JlYXRlKHByb3RvdHlwZSkpLmZpcnN0LT5zZWNvbmQuZ2V0KCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24g
MzY0MjIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IEF0b21pY1N0cmluZzsKICAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBFdmVudDsKICAg
ICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5vZGU7CkBAIC02MSw2
MCArNTksMTA4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIH07CiAKLSAgICBj
bGFzcyBTY3JpcHRJbnRlcnByZXRlciA6IHB1YmxpYyBKU0M6OkludGVycHJldGVyIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBET01PYmplY3QqIGdldERPTU9iamVjdCh2b2lkKiBvYmpl
Y3RIYW5kbGUpOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXRET01PYmplY3Qodm9pZCogb2JqZWN0
SGFuZGxlLCBET01PYmplY3QqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0RE9NT2JqZWN0
KHZvaWQqIG9iamVjdEhhbmRsZSk7Ci0KLSAgICAgICAgc3RhdGljIEpTTm9kZSogZ2V0RE9NTm9k
ZUZvckRvY3VtZW50KERvY3VtZW50KiwgTm9kZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXRE
T01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBOb2RlKiwgSlNOb2RlKiBub2RlV3JhcHBlcik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldERPTU5vZGVGb3JEb2N1bWVudChEb2N1bWVudCos
IE5vZGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVu
dChEb2N1bWVudCopOwotICAgICAgICBzdGF0aWMgdm9pZCB1cGRhdGVET01Ob2RlRG9jdW1lbnQo
Tm9kZSosIERvY3VtZW50KiBvbGREb2MsIERvY3VtZW50KiBuZXdEb2MpOwotICAgICAgICBzdGF0
aWMgdm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIH07CisgICAg
RE9NT2JqZWN0KiBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKHZvaWQqIG9iamVjdEhhbmRsZSk7
CisgICAgdm9pZCBjYWNoZURPTU9iamVjdFdyYXBwZXIodm9pZCogb2JqZWN0SGFuZGxlLCBET01P
YmplY3QqIHdyYXBwZXIpOworICAgIHZvaWQgZm9yZ2V0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhh
bmRsZSk7CisKKyAgICBKU05vZGUqIGdldENhY2hlZERPTU5vZGVXcmFwcGVyKERvY3VtZW50Kiwg
Tm9kZSopOworICAgIHZvaWQgY2FjaGVET01Ob2RlV3JhcHBlcihEb2N1bWVudCosIE5vZGUqLCBK
U05vZGUqIHdyYXBwZXIpOworICAgIHZvaWQgZm9yZ2V0RE9NTm9kZShEb2N1bWVudCosIE5vZGUq
KTsKKyAgICB2b2lkIGZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKyAg
ICB2b2lkIHVwZGF0ZURPTU5vZGVEb2N1bWVudChOb2RlKiwgRG9jdW1lbnQqIG9sZERvY3VtZW50
LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpOworICAgIHZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1l
bnQoRG9jdW1lbnQqKTsKKworICAgIEpTQzo6U3RydWN0dXJlSUQqIGdldERPTU9iamVjdFN0cnVj
dHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSk7CisgICAgSlNDOjpT
dHJ1Y3R1cmVJRCogY3JlYXRlRE9NT2JqZWN0U3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgY2hhciogY2xhc3NOYW1lLCBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUpOwogCi0gICAgLy8g
UmV0cmlldmUgZnJvbSBjYWNoZSwgb3IgY3JlYXRlLCBhIEpTIHdyYXBwZXIgZm9yIGEgRE9NIG9i
amVjdC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBET01PYmosIGNsYXNzIEpTRE9NT2JqLCBjbGFzcyBK
U0RPTU9ialByb3RvdHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSogY2FjaGVET01PYmplY3QoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIERPTU9iaiogZG9tT2JqKQorICAgICNkZWZpbmUgQ1JFQVRFX0RP
TV9PQkpFQ1RfV1JBUFBFUihleGVjLCBjbGFzc05hbWUsIG9iamVjdCkgY3JlYXRlRE9NT2JqZWN0
V3JhcHBlcjxKUyMjY2xhc3NOYW1lPihleGVjLCAjY2xhc3NOYW1lLCBzdGF0aWNfY2FzdDxjbGFz
c05hbWUqPihvYmplY3QpKQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3Mg
RE9NQ2xhc3M+IGlubGluZSBET01PYmplY3QqIGNyZWF0ZURPTU9iamVjdFdyYXBwZXIoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgRE9NQ2xhc3MqIG9iamVjdCkK
ICAgICB7Ci0gICAgICAgIGlmICghZG9tT2JqKQorICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAg
ICAgICAgQVNTRVJUKCFnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKG9iamVjdCkpOworICAgICAg
ICBKU0M6OlN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmUgPSBnZXRET01PYmplY3RTdHJ1Y3R1cmUoZXhl
YywgY2xhc3NOYW1lKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgICAgICBzdHJ1
Y3R1cmUgPSBjcmVhdGVET01PYmplY3RTdHJ1Y3R1cmUoZXhlYywgY2xhc3NOYW1lLCBXcmFwcGVy
Q2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVjKSk7CisgICAgICAgIFdyYXBwZXJDbGFzcyogd3Jh
cHBlciA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKHN0cnVjdHVyZSwgb2JqZWN0KTsKKyAgICAg
ICAgY2FjaGVET01PYmplY3RXcmFwcGVyKG9iamVjdCwgd3JhcHBlcik7CisgICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgIH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNz
IERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlKiBnZXRET01PYmplY3RXcmFwcGVyKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBjbGFzc05hbWUsIERPTUNsYXNzKiBvYmplY3Qp
CisgICAgeworICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgICAgICBpZiAoRE9NT2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRlcjo6
Z2V0RE9NT2JqZWN0KGRvbU9iaikpCi0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICBE
T01PYmplY3QqIHJldCA9IG5ldyAoZXhlYykgSlNET01PYmooSlNET01PYmpQcm90b3R5cGU6OnNl
bGYoZXhlYyksIGRvbU9iaik7Ci0gICAgICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmpl
Y3QoZG9tT2JqLCByZXQpOwotICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBpZiAoRE9NT2Jq
ZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihvYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiBjcmVhdGVET01PYmplY3RXcmFw
cGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgY2xhc3NOYW1lLCBvYmplY3QpOwogICAgIH0KIAogI2lm
IEVOQUJMRShTVkcpCi0gICAgLy8gUmV0cmlldmUgZnJvbSBjYWNoZSwgb3IgY3JlYXRlLCBhIEpT
IHdyYXBwZXIgZm9yIGFuIFNWRyBET00gb2JqZWN0LgotICAgIHRlbXBsYXRlPGNsYXNzIERPTU9i
aiwgY2xhc3MgSlNET01PYmosIGNsYXNzIEpTRE9NT2JqUHJvdG90eXBlPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlKiBjYWNoZVNWR0RPTU9iamVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NT2JqKiBk
b21PYmosIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgI2RlZmluZSBDUkVBVEVfU1ZHX09CSkVD
VF9XUkFQUEVSKGV4ZWMsIGNsYXNzTmFtZSwgb2JqZWN0LCBjb250ZXh0KSBjcmVhdGVET01PYmpl
Y3RXcmFwcGVyPEpTIyNjbGFzc05hbWU+KGV4ZWMsICNjbGFzc05hbWUsIHN0YXRpY19jYXN0PGNs
YXNzTmFtZSo+KG9iamVjdCksIGNvbnRleHQpCisgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNs
YXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIERPTU9iamVjdCogY3JlYXRlRE9NT2JqZWN0V3Jh
cHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogY2xhc3NOYW1lLCBET01DbGFz
cyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgaWYgKCFkb21P
YmopCisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICBBU1NFUlQoIWdldENhY2hlZERP
TU9iamVjdFdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgIEpTQzo6U3RydWN0dXJlSUQqIHN0cnVj
dHVyZSA9IGdldERPTU9iamVjdFN0cnVjdHVyZShleGVjLCBjbGFzc05hbWUpOworICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGNyZWF0ZURPTU9iamVjdFN0
cnVjdHVyZShleGVjLCBjbGFzc05hbWUsIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKGV4
ZWMpKTsKKyAgICAgICAgV3JhcHBlckNsYXNzKiB3cmFwcGVyID0gbmV3IChleGVjKSBXcmFwcGVy
Q2xhc3Moc3RydWN0dXJlLCBvYmplY3QsIGNvbnRleHQpOworICAgICAgICBjYWNoZURPTU9iamVj
dFdyYXBwZXIob2JqZWN0LCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAg
fQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGlu
ZSBKU0M6OkpTVmFsdWUqIGdldERPTU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgRE9NQ2xhc3MqIG9iamVjdCwgU1ZHRWxlbWVudCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIGlmIChET01PYmplY3QqIHJldCA9IFNjcmlwdEludGVycHJl
dGVyOjpnZXRET01PYmplY3QoZG9tT2JqKSkKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAg
ICAgIERPTU9iamVjdCogcmV0ID0gbmV3IChleGVjKSBKU0RPTU9iaihKU0RPTU9ialByb3RvdHlw
ZTo6c2VsZihleGVjKSwgZG9tT2JqLCBjb250ZXh0KTsKLSAgICAgICAgU2NyaXB0SW50ZXJwcmV0
ZXI6OnB1dERPTU9iamVjdChkb21PYmosIHJldCk7Ci0gICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgIGlmIChET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKG9i
amVjdCkpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZURPTU9iamVjdFdyYXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBjbGFzc05hbWUsIG9iamVjdCwg
Y29udGV4dCk7CiAgICAgfQogI2VuZGlmCiAKKyAgICAjZGVmaW5lIENSRUFURV9ET01fTk9ERV9X
UkFQUEVSKGV4ZWMsIGNsYXNzTmFtZSwgb2JqZWN0KSBjcmVhdGVET01Ob2RlV3JhcHBlcjxKUyMj
Y2xhc3NOYW1lPihleGVjLCAjY2xhc3NOYW1lLCBzdGF0aWNfY2FzdDxjbGFzc05hbWUqPihvYmpl
Y3QpKQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlu
bGluZSBKU05vZGUqIGNyZWF0ZURPTU5vZGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBjaGFyKiBjbGFzc05hbWUsIERPTUNsYXNzKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG5vZGUpOworICAgICAgICBBU1NFUlQoIWdldENhY2hlZERPTU5vZGVXcmFwcGVyKG5vZGUt
PmRvY3VtZW50KCksIG5vZGUpKTsKKyAgICAgICAgSlNDOjpTdHJ1Y3R1cmVJRCogc3RydWN0dXJl
ID0gZ2V0RE9NT2JqZWN0U3RydWN0dXJlKGV4ZWMsIGNsYXNzTmFtZSk7CisgICAgICAgIGlmICgh
c3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0dXJlID0gY3JlYXRlRE9NT2JqZWN0U3RydWN0
dXJlKGV4ZWMsIGNsYXNzTmFtZSwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUoZXhlYykp
OworICAgICAgICBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIgPSBuZXcgKGV4ZWMpIFdyYXBwZXJDbGFz
cyhzdHJ1Y3R1cmUsIG5vZGUpOworICAgICAgICBjYWNoZURPTU5vZGVXcmFwcGVyKG5vZGUtPmRv
Y3VtZW50KCksIG5vZGUsIHdyYXBwZXIpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9
CisgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5l
IEpTQzo6SlNWYWx1ZSogZ2V0RE9NTm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IGNoYXIqIGNsYXNzTmFtZSwgRE9NQ2xhc3MqIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
IW5vZGUpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgaWYgKEpT
Tm9kZSogd3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKG5vZGUtPmRvY3VtZW50KCks
IG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiBjcmVh
dGVET01Ob2RlV3JhcHBlcjxXcmFwcGVyQ2xhc3M+KGV4ZWMsIGNsYXNzTmFtZSwgbm9kZSk7Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyB0ZW1wbGF0ZSBtZXRob2QgcmV0cmlldmVzIG9y
IGNyZWF0ZSBhbiBvYmplY3QgdGhhdCBpcyB1bmlxdWUKKyAgICAgKiAoZm9yIGEgZ2l2ZW4gZ2xv
YmFsIG9iamVjdCkgVGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBjYWxsZWQgKGZvciBhIGdpdmVuCisg
ICAgICogcHJvcGVydHkgbmFtZSksIHRoZSBPYmplY3Qgd2lsbCBiZSBjb25zdHJ1Y3RlZCwgYW5k
IHNldCBhcyBhIHByb3BlcnR5CisgICAgICogb2YgdGhlIGdsb2JhbCBvYmplY3QuIExhdGVyIGNh
bGxzIHdpbGwgc2ltcGx5IHJldHJpZXZlIHRoYXQgY2FjaGVkIG9iamVjdC4gCisgICAgICogTm90
ZSB0aGF0IHRoZSBvYmplY3QgY29uc3RydWN0b3IgbXVzdCB0YWtlIDEgYXJndW1lbnQsIGV4ZWMu
CisgICAgICovCisgICAgdGVtcGxhdGUgPGNsYXNzIFdyYXBwZXJDbGFzcz4gaW5saW5lIFdyYXBw
ZXJDbGFzcyogY2FjaGVHbG9iYWxPYmplY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAg
ICAgICBKU0M6OkpTVmFsdWUqIG9iaiA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0KHByb3BlcnR5
TmFtZSk7CisgICAgICAgIGlmIChvYmopIHsKKyAgICAgICAgICAgIEFTU0VSVChvYmotPmlzT2Jq
ZWN0KCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJDbGFzcyo+KG9i
aik7CisgICAgICAgIH0KKyAgICAgICAgV3JhcHBlckNsYXNzKiBuZXdPYmplY3QgPSBuZXcgKGV4
ZWMpIFdyYXBwZXJDbGFzcyhleGVjKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qo
cHJvcGVydHlOYW1lLCBuZXdPYmplY3QsIEpTQzo6RG9udEVudW0pOworICAgICAgICByZXR1cm4g
bmV3T2JqZWN0OworICAgIH0KKwogICAgIC8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24g
ZXhjZXB0aW9uIGNvZGUgaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVjdXRp
b24gc3RhdGUuCiAgICAgdm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNl
cHRpb25Db2RlKTsKIAotICAgIC8vIEhlbHBlciBjbGFzcyB0byBjYWxsIHNldERPTUV4Y2VwdGlv
biBvbiBleGl0IHdpdGhvdXQgYWRkaW5nIGxvdHMgb2Ygc2VwYXJhdGUgY2FsbHMgdG8gdGhhdCBm
dW5jdGlvbi4KLSAgICBjbGFzcyBET01FeGNlcHRpb25UcmFuc2xhdG9yIDogTm9uY29weWFibGUg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgRE9NRXhjZXB0aW9uVHJhbnNsYXRvcihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykgOiBtX2V4ZWMoZXhlYyksIG1fY29kZSgwKSB7IH0KLSAgICAg
ICAgfkRPTUV4Y2VwdGlvblRyYW5zbGF0b3IoKSB7IHNldERPTUV4Y2VwdGlvbihtX2V4ZWMsIG1f
Y29kZSk7IH0KLSAgICAgICAgb3BlcmF0b3IgRXhjZXB0aW9uQ29kZSYoKSB7IHJldHVybiBtX2Nv
ZGU7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVjOwotICAg
ICAgICBFeGNlcHRpb25Db2RlIG1fY29kZTsKLSAgICB9OwotCiAgICAgSlNDOjpKU1ZhbHVlKiBq
c1N0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBudWxsIGlm
IHRoZSBzdHJpbmcgaXMgbnVsbAogICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIG51bGwgaWYgdGhlIFVSTCBpcyBudWxsCiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM2
NDIyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw0MyArMjYsMzAgQEAKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRl
ICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgotI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFdmVudC5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJK
U0ltYWdlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGF1c2VkVGlt
ZW91dHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotI2luY2x1ZGUgIlBsdWdpbklu
Zm9TdG9yZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRB
Y3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCi0jaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlIDxranMvRXJyb3IuaD4K
ICNpbmNsdWRlIDxranMvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoWFNMVCkKQEAgLTE1NCw3
ICsxNDEsNiBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8gCiAKICMg
LS0gQXR0cmlidXRlcyAtLQogICBjcnlwdG8gICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01X
aW5kb3dCYXNlOjpDcnlwdG8gICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBldmVu
dCAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpFdmVudF8gICAgICAg
ICAgICAgRG9udERlbGV0ZQogIyAtLSBFdmVudCBMaXN0ZW5lcnMgLS0KICAgb25hYm9ydCAgICAg
ICAgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25hYm9ydCAgICAgICAgICAgIERv
bnREZWxldGUKICAgb25ibHVyICAgICAgICAgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFz
ZTo6T25ibHVyICAgICAgICAgICAgIERvbnREZWxldGUKQEAgLTE5NCwxMiArMTgwLDExIEBAIGNv
bnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNfaW5mbyAKIEBlbmQKICovCiAKLUpTRE9N
V2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6SlNET01XaW5kb3dCYXNlRGF0YShQYXNz
UmVmUHRyPERPTVdpbmRvdz4gd2luZG93XywgSlNET01XaW5kb3dCYXNlKiBqc1dpbmRvd18sIEpT
RE9NV2luZG93U2hlbGwqIHNoZWxsXykKLSAgICA6IEpTR2xvYmFsT2JqZWN0RGF0YShqc1dpbmRv
d18sIHNoZWxsXykKLSAgICAsIGltcGwod2luZG93XykKLSAgICAsIGV2dCgwKQorSlNET01XaW5k
b3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpKU0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQ
dHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93QmFzZSoganNXaW5kb3csIEpTRE9NV2lu
ZG93U2hlbGwqIHNoZWxsKQorICAgIDogSlNHbG9iYWxPYmplY3REYXRhKGpzV2luZG93LCBzaGVs
bCkKKyAgICAsIGltcGwod2luZG93KQorICAgICwgc2hlbGwoc2hlbGwpCiAgICAgLCByZXR1cm5W
YWx1ZVNsb3QoMCkKLSAgICAsIHNoZWxsKHNoZWxsXykKIHsKIH0KIApAQCAtNDM3LDEyICs0MjIs
NiBAQCBKU1ZhbHVlICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAgICAgc3dpdGNo
ICh0b2tlbikgewogICAgIGNhc2UgQ3J5cHRvOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzCi0gICAgY2FzZSBFdmVudF86Ci0gICAgICAgIGlm
ICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICBpZiAoIWQoKS0+ZXZ0KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGQoKS0+ZXZ0KTsKICAgICBjYXNlIElt
YWdlOgogICAgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTkwMCwxMSArODc5LDYgQEAgUGFzc1JlZlB0cjxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gSgogICAgIHJldHVybiBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwg
aHRtbCkuZ2V0KCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhckhlbHBlck9iamVj
dFByb3BlcnRpZXMoKQotewotICAgIGQoKS0+ZXZ0ID0gMDsKLX0KLQogdm9pZCBKU0RPTVdpbmRv
d0Jhc2U6OmNsZWFyKCkKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CkBAIC05MTMsMTcgKzg4
Nyw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhcigpCiAgICAgICAgICpkKCktPnJldHVy
blZhbHVlU2xvdCA9IGdldERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJldHVyblZh
bHVlIikpOwogCiAgICAgY2xlYXJBbGxUaW1lb3V0cygpOwotICAgIGNsZWFySGVscGVyT2JqZWN0
UHJvcGVydGllcygpOwotfQotCi12b2lkIEpTRE9NV2luZG93QmFzZTo6c2V0Q3VycmVudEV2ZW50
KEV2ZW50KiBldnQpCi17Ci0gICAgZCgpLT5ldnQgPSBldnQ7Ci19Ci0KLUV2ZW50KiBKU0RPTVdp
bmRvd0Jhc2U6OmN1cnJlbnRFdmVudCgpCi17Ci0gICAgcmV0dXJuIGQoKS0+ZXZ0OwogfQogCiBK
U09iamVjdCogSlNET01XaW5kb3dCYXNlOjp0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3QK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzY0MjIp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTRE9N
V2luZG93QmFzZVByaXZhdGU7CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJl
ZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiwgUHRySGFzaDxjb25zdCBjaGFyKj4gPiBKU0RPTVN0cnVj
dHVyZU1hcDsKKwogICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgV2ViQ29yZSBKUyBiaW5kaW5nIHdo
aWNoIGRvZXMgbm90IGluaGVyaXQgZnJvbSBET01PYmplY3QKICAgICBjbGFzcyBKU0RPTVdpbmRv
d0Jhc2UgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdCB7CiAgICAgICAgIHR5cGVkZWYgSlND
OjpKU0dsb2JhbE9iamVjdCBCYXNlOwpAQCAtOTEsOSArOTMsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgICAgIHZvaWQgc2V0Q3VycmVudEV2
ZW50KEV2ZW50Kik7Ci0gICAgICAgIEV2ZW50KiBjdXJyZW50RXZlbnQoKTsKLQogICAgICAgICAv
LyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIHdpbmRv
dyBpcyBjbGVhcmVkLgogICAgICAgICB2b2lkIHNldFJldHVyblZhbHVlU2xvdChKU0M6OkpTVmFs
dWUqKiBzbG90KTsKIApAQCAtMTI4LDkgKzEyNywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7CiAKKyAgICAgICAgSlNET01TdHJ1Y3R1
cmVNYXAmIHN0cnVjdHVyZXMoKSB7IHJldHVybiBkKCktPnN0cnVjdHVyZXM7IH0KKwogICAgICAg
ICBlbnVtIHsKICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMKLSAgICAgICAgICAgIENyeXB0bywg
RXZlbnRfLAorICAgICAgICAgICAgQ3J5cHRvLAogCiAgICAgICAgICAgICAvLyBFdmVudCBMaXN0
ZW5lcnMKICAgICAgICAgICAgIE9uYWJvcnQsIE9uYmx1ciwgT25jaGFuZ2UsIE9uY2xpY2ssCkBA
IC0xNDQsMjYgKzE0NSwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBPbldl
YktpdFRyYW5zaXRpb25FbmQsCiAKICAgICAgICAgICAgIC8vIENvbnN0cnVjdG9ycwotICAgICAg
ICAgICAgQXVkaW8sIEltYWdlLCBPcHRpb24sIFhNTEh0dHBSZXF1ZXN0LAotICAgICAgICAgICAg
WFNMVFByb2Nlc3NvcgorICAgICAgICAgICAgQXVkaW8sIEltYWdlLCBPcHRpb24sIFhNTEh0dHBS
ZXF1ZXN0LCBYU0xUUHJvY2Vzc29yCiAgICAgICAgIH07CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBzdHJ1Y3QgSlNET01XaW5kb3dCYXNlRGF0YSA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdERhdGEg
ewotICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlRGF0YShQYXNzUmVmUHRyPERPTVdpbmRvdz4g
d2luZG93XywgSlNET01XaW5kb3dCYXNlKiBqc1dpbmRvd18sIEpTRE9NV2luZG93U2hlbGwqIHNo
ZWxsXyk7CisgICAgICAgICAgICBKU0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiwgSlNET01XaW5kb3dCYXNlKiwgSlNET01XaW5kb3dTaGVsbCopOwogCiAgICAgICAgICAg
ICBSZWZQdHI8RE9NV2luZG93PiBpbXBsOworICAgICAgICAgICAgSlNET01XaW5kb3dTaGVsbCog
c2hlbGw7CiAKICAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZTo6TGlzdGVuZXJzTWFwIGpzRXZl
bnRMaXN0ZW5lcnM7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd0Jhc2U6Okxpc3RlbmVyc01hcCBq
c0hUTUxFdmVudExpc3RlbmVyczsKICAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZTo6VW5wcm90
ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzOwogICAgICAgICAg
ICAgSlNET01XaW5kb3dCYXNlOjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCBqc1VucHJvdGVjdGVk
SFRNTEV2ZW50TGlzdGVuZXJzOwotICAgICAgICAgICAgRXZlbnQqIGV2dDsKKwogICAgICAgICAg
ICAgSlNDOjpKU1ZhbHVlKiogcmV0dXJuVmFsdWVTbG90OwotICAgICAgICAgICAgSlNET01XaW5k
b3dTaGVsbCogc2hlbGw7CiAKICAgICAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERPTVdp
bmRvd1RpbWVyKj4gVGltZW91dHNNYXA7CiAgICAgICAgICAgICBUaW1lb3V0c01hcCB0aW1lb3V0
czsKKworICAgICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAgc3RydWN0dXJlczsKICAgICAgICAg
fTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6SlNWYWx1ZSogZ2V0TGlzdGVuZXIoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkBAIC0xNzMsNyAr
MTc1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
KiBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNv
bnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUqIG5h
bWVkSXRlbUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNv
bnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgdm9pZCBjbGVhckhlbHBlck9iamVj
dFByb3BlcnRpZXMoKTsKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KFNjaGVkdWxlZEFjdGlv
biosIGludCBpbnRlcnZhbCwgYm9vbCBzaW5nbGVTaG90KTsKIAogICAgICAgICBib29sIGFsbG93
c0FjY2Vzc0Zyb21Qcml2YXRlKGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAz
NjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtET01PYmplY3RXcmFw
cGVyKHZvaWQqIG8KIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwotICAgIERP
TU9iamVjdCogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3Qob2JqZWN0
KTsKKyAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKG9i
amVjdCk7CiAgICAgaWYgKCF3cmFwcGVyIHx8IHdyYXBwZXItPm1hcmtlZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgd3JhcHBlci0+bWFyaygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBKU0RvY3VtZW50OjptYXJrKCkKIHsKICAgICBKU0V2
ZW50VGFyZ2V0Tm9kZTo6bWFyaygpOwotICAgIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9k
ZXNGb3JEb2N1bWVudChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwoKSkpOworICAgIG1hcmtE
T01Ob2Rlc0ZvckRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKSk7CiB9CiAK
IEpTVmFsdWUqIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAg
LTEwNiwzNyArMTA2LDM1IEBAIEpTVmFsdWUqIEpTRG9jdW1lbnQ6OnF1ZXJ5U2VsZWN0b3JBbGwo
RXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgRG9jdW1lbnQqIGRvYykKK0pTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgaWYgKCFkb2MpCisgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNEb2N1bWVudCogcmV0ID0gc3RhdGljX2Nhc3Q8
SlNEb2N1bWVudCo+KFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoZG9jKSk7Ci0gICAg
aWYgKHJldCkKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICBET01PYmplY3QqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGRvY3VtZW50KTsKKyAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKLSAgICBpZiAoZG9jLT5pc0hUTUxEb2N1bWVudCgpKQot
ICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTSFRNTERvY3VtZW50KEpTSFRNTERvY3VtZW50UHJv
dG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2MpKTsKKyAg
ICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHdyYXBwZXIgPSBDUkVB
VEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIEhUTUxEb2N1bWVudCwgZG9jdW1lbnQpOwogI2lm
IEVOQUJMRShTVkcpCi0gICAgZWxzZSBpZiAoZG9jLT5pc1NWR0RvY3VtZW50KCkpCi0gICAgICAg
IHJldCA9IG5ldyAoZXhlYykgSlNTVkdEb2N1bWVudChKU1NWR0RvY3VtZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGRvYykpOworICAgIGVsc2UgaWYg
KGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9N
X09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR0RvY3VtZW50LCBkb2N1bWVudCk7CiAjZW5kaWYKICAg
ICBlbHNlCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNEb2N1bWVudChKU0RvY3VtZW50UHJv
dG90eXBlOjpzZWxmKGV4ZWMpLCBkb2MpOworICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9P
QkpFQ1RfV1JBUFBFUihleGVjLCBEb2N1bWVudCwgZG9jdW1lbnQpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBkb2N1bWVudCBpcyBrZXB0IGFyb3VuZCBieSB0aGUgd2luZG93IG9iamVjdCwgYW5k
IHdvcmtzIHJpZ2h0IHdpdGggdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIGlm
ICghZG9jLT5mcmFtZSgpKSB7CisgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkgewogICAgICAg
ICBzaXplX3Qgbm9kZUNvdW50ID0gMDsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gZG9jOyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBkb2N1bWVu
dDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKICAgICAgICAgICAgIG5vZGVDb3VudCsr
OwogICAgICAgICAKICAgICAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
bm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpKTsKICAgICB9CiAKLSAgICBTY3JpcHRJbnRlcnByZXRl
cjo6cHV0RE9NT2JqZWN0KGRvYywgcmV0KTsKLQotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJu
IHdyYXBwZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NDIyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjMg
KzE2MywxOSBAQCBKU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlCiAgICAg
aWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBBU1NFUlQoIVNj
cmlwdEludGVycHJldGVyOjpnZXRET01Ob2RlRm9yRG9jdW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQo
KSwgZWxlbWVudCkpOwotICAgIAotICAgIERvY3VtZW50KiBkb2MgPSBlbGVtZW50LT5kb2N1bWVu
dCgpOwotICAgIEpTTm9kZSogcmV0ID0gMDsKLSAgICAKKyAgICBBU1NFUlQoIWdldENhY2hlZERP
TU5vZGVXcmFwcGVyKGVsZW1lbnQtPmRvY3VtZW50KCksIGVsZW1lbnQpKTsKKworICAgIEpTTm9k
ZSogd3JhcHBlcjsgICAgICAgIAogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCi0g
ICAgICAgIHJldCA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihlbGVtZW50KSk7CisgICAgICAgIHdyYXBwZXIgPSBjcmVhdGVKU0hUTUxXcmFwcGVy
KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCkpOwogI2lmIEVOQUJMRShT
VkcpCiAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldCA9
IGNyZWF0ZUpTU1ZHV3JhcHBlcihleGVjLCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVu
dCkpOworICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNTVkdXcmFwcGVyKGV4ZWMsIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KSk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNFbGVtZW50KEpTRWxlbWVudFByb3RvdHlwZTo6c2VsZihleGVjKSwg
ZWxlbWVudCk7Ci0KLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NTm9kZUZvckRvY3VtZW50
KGRvYywgZWxlbWVudCwgcmV0KTsKKyAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fTk9ERV9X
UkFQUEVSKGV4ZWMsIEVsZW1lbnQsIGVsZW1lbnQpOwogCi0gICAgcmV0dXJuIHJldDsgICAgCisg
ICAgcmV0dXJuIHdyYXBwZXI7ICAgIAogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNjQyMikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDUwICs4NCw0OSBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnQq
IGV2CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgRE9N
T2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KGV2ZW50KTsKLSAg
ICBpZiAocmV0KQotICAgICAgICByZXR1cm4gcmV0OworICAgIERPTU9iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXZlbnQpOworICAgIGlmICh3cmFwcGVyKQorICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKIAogICAgIGlmIChldmVudC0+aXNVSUV2ZW50KCkpIHsKICAg
ICAgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgICAgIHJldCA9IG5l
dyAoZXhlYykgSlNLZXlib2FyZEV2ZW50KEpTS2V5Ym9hcmRFdmVudFByb3RvdHlwZTo6c2VsZihl
eGVjKSwgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICB3
cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBLZXlib2FyZEV2ZW50LCBl
dmVudCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQotICAgICAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU1RleHRFdmVudChKU1RleHRFdmVudFByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAgIHdy
YXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFRleHRFdmVudCwgZXZlbnQp
OwogICAgICAgICBlbHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgICAgICBy
ZXQgPSBuZXcgKGV4ZWMpIEpTTW91c2VFdmVudChKU01vdXNlRXZlbnRQcm90b3R5cGU6OnNlbGYo
ZXhlYyksIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgTW91c2VFdmVudCwgZXZlbnQp
OwogICAgICAgICBlbHNlIGlmIChldmVudC0+aXNXaGVlbEV2ZW50KCkpCi0gICAgICAgICAgICBy
ZXQgPSBuZXcgKGV4ZWMpIEpTV2hlZWxFdmVudChKU1doZWVsRXZlbnRQcm90b3R5cGU6OnNlbGYo
ZXhlYyksIHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgV2hlZWxFdmVudCwgZXZlbnQp
OwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1NWR1pvb21FdmVu
dCgpKQotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1NWR1pvb21FdmVudChKU1NWR1pv
b21FdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHWm9vbUV2ZW50Kj4o
ZXZlbnQpLCAwKTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQ
UEVSKGV4ZWMsIFNWR1pvb21FdmVudCwgZXZlbnQsIDApOwogI2VuZGlmCiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNVSUV2ZW50KEpTVUlFdmVudFByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8VUlFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAg
ICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBVSUV2ZW50LCBldmVu
dCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCi0gICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNNdXRhdGlvbkV2ZW50KEpTTXV0YXRpb25FdmVudFByb3RvdHlwZTo6
c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIE11dGF0aW9uRXZlbnQs
IGV2ZW50KTsKICAgICBlbHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50KCkpCi0gICAgICAg
IHJldCA9IG5ldyAoZXhlYykgSlNPdmVyZmxvd0V2ZW50KEpTT3ZlcmZsb3dFdmVudFByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8T3ZlcmZsb3dFdmVudCo+KGV2ZW50KSk7CisgICAg
ICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIE92ZXJmbG93RXZl
bnQsIGV2ZW50KTsKICAgICBlbHNlIGlmIChldmVudC0+aXNNZXNzYWdlRXZlbnQoKSkKLSAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU01lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudFByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgTWVzc2FnZUV2ZW50
LCBldmVudCk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzUHJvZ3Jlc3NFdmVudCgpKSB7CiAgICAg
ICAgIGlmIChldmVudC0+aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSkKLSAgICAgICAg
ICAgIHJldCA9IG5ldyAoZXhlYykgSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoSlNYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0
PFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICB3cmFw
cGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQsIGV2ZW50KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0ID0gbmV3IChl
eGVjKSBKU1Byb2dyZXNzRXZlbnQoSlNQcm9ncmVzc0V2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxQcm9ncmVzc0V2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAgIHdyYXBw
ZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFByb2dyZXNzRXZlbnQsIGV2ZW50
KTsKICAgICB9CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIGVsc2UgaWYgKGV2ZW50LT5p
c1N0b3JhZ2VFdmVudCgpKQotICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTU3RvcmFnZUV2ZW50
KEpTU3RvcmFnZUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTdG9yYWdl
RXZlbnQqPihldmVudCkpOworICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JB
UFBFUihleGVjLCBTdG9yYWdlRXZlbnQsIGV2ZW50KTsKICNlbmRpZgogICAgIGVsc2UgaWYgKGV2
ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykg
SlNXZWJLaXRBbmltYXRpb25FdmVudChKU1dlYktpdEFuaW1hdGlvbkV2ZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25FdmVudCo+KGV2ZW50KSk7Cisg
ICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFdlYktpdEFu
aW1hdGlvbkV2ZW50LCBldmVudCk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNp
dGlvbkV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQoSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PFdlYktpdFRyYW5zaXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHdyYXBwZXIg
PSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFdlYktpdFRyYW5zaXRpb25FdmVudCwg
ZXZlbnQpOwogICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0V2ZW50KEpTRXZl
bnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGV2ZW50KTsKKyAgICAgICAgd3JhcHBlciA9IENSRUFU
RV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgRXZlbnQsIGV2ZW50KTsKIAotICAgIFNjcmlwdElu
dGVycHJldGVyOjpwdXRET01PYmplY3QoZXZlbnQsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKKyAg
ICByZXR1cm4gd3JhcHBlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDggKzgwLDggQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgog
ICAgICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZXZl
bnQpKTsKIAotICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IHdpbmRvdy0+Y3VycmVudEV2ZW50
KCk7Ci0gICAgICAgIHdpbmRvdy0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKKyAgICAgICAgRXZl
bnQqIHNhdmVkRXZlbnQgPSBzY3JpcHQtPmN1cnJlbnRFdmVudCgpOworICAgICAgICBzY3JpcHQt
PnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAgICAgSlNWYWx1ZSogcmV0dmFsOwogICAg
ICAgICBpZiAoaGFuZGxlRXZlbnRGdW5jdGlvbikgewpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEpT
QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAgICAgICAgIH0KICAgICAgICAgd2lu
ZG93LT5zdG9wVGltZW91dENoZWNrKCk7CiAKLSAgICAgICAgd2luZG93LT5zZXRDdXJyZW50RXZl
bnQoc2F2ZWRFdmVudCk7CisgICAgICAgIHNjcmlwdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZl
bnQpOwogCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIGZy
YW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5yZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHJldmlz
aW9uIDM2NDIyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MSw4ICsxNjEsMTAgQEAgSlNWYWx1ZSoganNFdmVudFRhcmdl
dERpc3BhdGNoRXZlbnQoRXhlYwogICAgIGlmICghcmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJl
c3BvbmRpbmdOb2RlKGV4ZWMsIHRoaXNWYWx1ZSwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBET01FeGNl
cHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgICByZXR1cm4ganNCb29sZWFuKGV2
ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHRvRXZlbnQoYXJncy5hdChleGVjLCAwKSksIGV4Y2Vw
dGlvbikpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzQm9vbGVhbihldmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudCh0b0V2ZW50KGFyZ3MuYXQoZXhl
YywgMCkpLCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWVGb3JQcm9wZXJ0eVRv
a2VuKGludCB0b2tlbikKQEAgLTI3MSw3ICsyNzMsNyBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0
ZSogZXhlYywgRXZlbnRUYXJnCiAKICAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhociA9IHRhcmdl
dC0+dG9YTUxIdHRwUmVxdWVzdCgpKQogICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCBpcyBhbHdh
eXMgY3JlYXRlZCB2aWEgSlMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXNlIGNhY2hlRE9NT2JqZWN0
KCkgaGVyZS4KLSAgICAgICAgcmV0dXJuIFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3Qo
eGhyKTsKKyAgICAgICAgcmV0dXJuIGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoeGhyKTsKIAog
ICAgIGlmIChYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBS
ZXF1ZXN0VXBsb2FkKCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHVwbG9hZCk7CkBAIC0y
NzksNyArMjgxLDcgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZwog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgaWYgKERPTUFwcGxpY2F0
aW9uQ2FjaGUqIGNhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSkKICAgICAg
ICAgLy8gRE9NQXBwbGljYXRpb25DYWNoZSBpcyBhbHdheXMgY3JlYXRlZCB2aWEgSlMsIHNvIHdl
IGRvbid0IG5lZWQgdG8gdXNlIGNhY2hlRE9NT2JqZWN0KCkgaGVyZS4KLSAgICAgICAgcmV0dXJu
IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoY2FjaGUpOworICAgICAgICByZXR1cm4g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihjYWNoZSk7CiAjZW5kaWYKICAgICAKICAgICAvLyBU
aGVyZSBhcmUgdHdvIGtpbmRzIG9mIEV2ZW50VGFyZ2V0czogRXZlbnRUYXJnZXROb2RlIGFuZCBY
TUxIdHRwUmVxdWVzdC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5v
ZGUuY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNFdmVudFRhcmdldE5vZGUp
CiAKLUpTRXZlbnRUYXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0Tm9kZShKU09iamVjdCogcHJvdG90
eXBlLCBOb2RlKiBub2RlKQotICAgIDogSlNOb2RlKHByb3RvdHlwZSwgbm9kZSkKK0pTRXZlbnRU
YXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0Tm9kZShTdHJ1Y3R1cmVJRCogc3RydWN0dXJlLCBOb2Rl
KiBub2RlKQorICAgIDogSlNOb2RlKHN0cnVjdHVyZSwgbm9kZSkKIHsKIH0KIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24gMzY0MjIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNFdmVudFRh
cmdldE5vZGUgOiBwdWJsaWMgSlNOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTRXZlbnRU
YXJnZXROb2RlKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgTm9kZSopOworICAgICAgICBKU0V2
ZW50VGFyZ2V0Tm9kZShKU0M6OlN0cnVjdHVyZUlEKiwgTm9kZSopOwogCiAgICAgICAgIHZvaWQg
c2V0TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgSlNDOjpKU1ZhbHVlKiBmdW5jKSBjb25zdDsKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBnZXRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uaAkocmV2aXNpb24gMzY0MjIpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0hU
TUxBbGxDb2xsZWN0aW9uIDogcHVibGljIEpTSFRNTENvbGxlY3Rpb24gewogICAgIHB1YmxpYzoK
LSAgICAgICAgSlNIVE1MQWxsQ29sbGVjdGlvbihKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUsIEhU
TUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQotICAgICAgICAgICAgOiBKU0hUTUxDb2xsZWN0aW9u
KHByb3RvdHlwZSwgY29sbGVjdGlvbikKKyAgICAgICAgSlNIVE1MQWxsQ29sbGVjdGlvbihKU0M6
OlN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmUsIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgOiBKU0hUTUxDb2xsZWN0aW9uKHN0cnVjdHVyZSwgY29sbGVjdGlvbikKICAgICAg
ICAgewogICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMjUg
KzEyNywyNSBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSFRNTENvbGxlCiAgICAg
aWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBET01PYmpl
Y3QqIHJldCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoY29sbGVjdGlvbik7Cisg
ICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihjb2xsZWN0
aW9uKTsKIAotICAgIGlmIChyZXQpCi0gICAgICAgIHJldHVybiByZXQ7CisgICAgaWYgKHdyYXBw
ZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgc3dpdGNoIChjb2xsZWN0aW9uLT50
eXBlKCkpIHsKICAgICAgICAgY2FzZSBIVE1MQ29sbGVjdGlvbjo6U2VsZWN0T3B0aW9uczoKLSAg
ICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24oSlNIVE1M
T3B0aW9uc0NvbGxlY3Rpb25Qcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25zQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBD
UkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgY29s
bGVjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIVE1MQ29sbGVjdGlv
bjo6RG9jQWxsOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0hUTUxBbGxDb2xsZWN0
aW9uKEpTSFRNTENvbGxlY3Rpb25Qcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEhU
TUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAgdHlwZWRlZiBIVE1MQ29s
bGVjdGlvbiBIVE1MQWxsQ29sbGVjdGlvbjsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVf
RE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIEhUTUxBbGxDb2xsZWN0aW9uLCBjb2xsZWN0aW9uKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0g
bmV3IChleGVjKSBKU0hUTUxDb2xsZWN0aW9uKEpTSFRNTENvbGxlY3Rpb25Qcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAg
ICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgSFRNTENv
bGxlY3Rpb24sIGNvbGxlY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
U2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChjb2xsZWN0aW9uLCByZXQpOwotICAgIHJl
dHVybiByZXQ7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNl
LmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0
RWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIEBlbmQKICovCiAKLUpTQ19JTVBMRU1FTlRfUFJPVE9UWVBFKCJIVE1MSW5w
dXRFbGVtZW50QmFzZSIsIEpTSFRNTElucHV0RWxlbWVudEJhc2VQcm90b3R5cGUpCi0KIC8vIFNl
dFNlbGVjdGlvblJhbmdlIGlzIGltcGxlbWVudGVkIG9uIHRoZSBjbGFzcyBpbnN0ZWFkIG9mIG9u
IHRoZSBwcm90b3R5cGUKIC8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGVuYWJsZS9kaXNhYmxlIGxv
b2t1cCBvZiB0aGUgZnVuY3Rpb24gYmFzZWQgb24gaW5wdXQgdHlwZS4KIEpTVmFsdWUqIGpzSFRN
TElucHV0RWxlbWVudEJhc2VGdW5jdGlvblNldFNlbGVjdGlvblJhbmdlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBA
IC02MSw4ICs1OSw4IEBAIEpTVmFsdWUqIGpzSFRNTElucHV0RWxlbWVudEJhc2VGdW5jdGlvblMK
IAogY29uc3QgQ2xhc3NJbmZvIEpTSFRNTElucHV0RWxlbWVudEJhc2U6OnNfaW5mbyA9IHsgIkhU
TUxJbnB1dEVsZW1lbnRCYXNlIiwgJkpTSFRNTEVsZW1lbnQ6OnNfaW5mbywgJkpTSFRNTElucHV0
RWxlbWVudEJhc2VUYWJsZSwgMCB9OwogCi1KU0hUTUxJbnB1dEVsZW1lbnRCYXNlOjpKU0hUTUxJ
bnB1dEVsZW1lbnRCYXNlKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgUGFzc1JlZlB0cjxIVE1M
SW5wdXRFbGVtZW50PiBlKQotICAgIDogSlNIVE1MRWxlbWVudChwcm90b3R5cGUsIGUuZ2V0KCkp
CitKU0hUTUxJbnB1dEVsZW1lbnRCYXNlOjpKU0hUTUxJbnB1dEVsZW1lbnRCYXNlKEpTQzo6U3Ry
dWN0dXJlSUQqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlKQorICAg
IDogSlNIVE1MRWxlbWVudChzdHJ1Y3R1cmUsIGUuZ2V0KCkpCiB7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAzNjQy
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMjcgKzIxLDI5
IEBACiAjZGVmaW5lIEpTSFRNTElucHV0RWxlbWVudEJhc2VfaAogCiAjaW5jbHVkZSAiSlNIVE1M
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogCi0gICAgSlNDX0RFRklORV9QUk9U
T1RZUEVfV0lUSF9QUk9UT1RZUEUoSlNIVE1MSW5wdXRFbGVtZW50QmFzZVByb3RvdHlwZSwgSlNI
VE1MRWxlbWVudFByb3RvdHlwZSkKLQogICAgIGNsYXNzIEpTSFRNTElucHV0RWxlbWVudEJhc2Ug
OiBwdWJsaWMgSlNIVE1MRWxlbWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBKU0hUTUxJbnB1
dEVsZW1lbnRCYXNlKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgUGFzc1JlZlB0cjxIVE1MSW5w
dXRFbGVtZW50Pik7CisgICAgICAgIEpTSFRNTElucHV0RWxlbWVudEJhc2UoSlNDOjpTdHJ1Y3R1
cmVJRCosIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4pOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50
aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU0M6OkpTVmFsdWUqIGdldFZh
bHVlUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEpTQzo6RXhlY1N0YXRlKiwgaW50IHRva2VuLCBKU0M6OkpTVmFsdWUqKTsK
ICAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJnNfaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOwogICAgICAgICBlbnVtIHsgU2VsZWN0aW9uU3RhcnQsIFNlbGVjdGlvbkVuZCB9Owog
ICAgIH07CiAKKyAgICBjbGFzcyBKU0hUTUxJbnB1dEVsZW1lbnRCYXNlUHJvdG90eXBlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0
YXRlKiBleGVjKSB7IHJldHVybiBKU0hUTUxFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpOyB9
CisgICAgfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSlNIVE1MSW5w
dXRFbGVtZW50QmFzZV9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgSlNOb2RlOjptYXJrKCkKICAg
ICAgICAgLy8gQnV0IGlmIHRoZSBkb2N1bWVudCBpc24ndCBtYXJrZWQgd2UgaGF2ZSB0byBtYXJr
IGl0IHRvIGVuc3VyZSB0aGF0CiAgICAgICAgIC8vIG5vZGVzIHJlYWNoYWJsZSBmcm9tIHRoaXMg
b25lIGFyZSBhbHNvIG1hcmtlZAogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG5vZGUtPm93
bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGlmIChET01PYmplY3QqIGRvY1dyYXBwZXIgPSBT
Y3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KGRvYykpCisgICAgICAgICAgICBpZiAoRE9N
T2JqZWN0KiBkb2NXcmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihkb2MpKQogICAg
ICAgICAgICAgICAgIGlmICghZG9jV3JhcHBlci0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGRvY1dyYXBwZXItPm1hcmsoKTsKICAgICAgICAgRE9NT2JqZWN0OjptYXJrKCk7CkBAIC0x
NDEsNyArMTQxLDcgQEAgdm9pZCBKU05vZGU6Om1hcmsoKQogICAgIC8vIE1hcmsgdGhlIHdob2xl
IHRyZWU7IHVzZSB0aGUgZ2xvYmFsIHNldCBvZiByb290cyB0byBhdm9pZCByZWVudGVyaW5nLgog
ICAgIHJvb3QtPnNldEluU3VidHJlZU1hcmsodHJ1ZSk7CiAgICAgZm9yIChOb2RlKiBub2RlVG9N
YXJrID0gcm9vdDsgbm9kZVRvTWFyazsgbm9kZVRvTWFyayA9IG5vZGVUb01hcmstPnRyYXZlcnNl
TmV4dE5vZGUoKSkgewotICAgICAgICBKU05vZGUqIHdyYXBwZXIgPSBTY3JpcHRJbnRlcnByZXRl
cjo6Z2V0RE9NTm9kZUZvckRvY3VtZW50KG1faW1wbC0+ZG9jdW1lbnQoKSwgbm9kZVRvTWFyayk7
CisgICAgICAgIEpTTm9kZSogd3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKG1faW1w
bC0+ZG9jdW1lbnQoKSwgbm9kZVRvTWFyayk7CiAgICAgICAgIGlmICh3cmFwcGVyKSB7CiAgICAg
ICAgICAgICBpZiAoIXdyYXBwZXItPm1hcmtlZCgpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIt
Pm1hcmsoKTsKQEAgLTE2NCw2MiArMTY0LDU4IEBAIHZvaWQgSlNOb2RlOjptYXJrKCkKIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNyZWF0ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBO
b2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQoIVNjcmlwdEludGVy
cHJldGVyOjpnZXRET01Ob2RlRm9yRG9jdW1lbnQobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZSkpOwot
ICAgIAotICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIEpTTm9kZSog
cmV0ID0gMDsKKyAgICBBU1NFUlQoIWdldENhY2hlZERPTU5vZGVXcmFwcGVyKG5vZGUtPmRvY3Vt
ZW50KCksIG5vZGUpKTsKICAgICAKKyAgICBKU05vZGUqIHdyYXBwZXI7ICAgIAogICAgIHN3aXRj
aCAobm9kZS0+bm9kZVR5cGUoKSkgewogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToK
ICAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAg
cmV0ID0gY3JlYXRlSlNIVE1MV3JhcHBlcihleGVjLCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNIVE1MV3JhcHBlcihl
eGVjLCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpKTsKICNpZiBFTkFCTEUoU1ZHKQog
ICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAgICAg
ICAgcmV0ID0gY3JlYXRlSlNTVkdXcmFwcGVyKGV4ZWMsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
Pihub2RlKSk7CisgICAgICAgICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihl
eGVjLCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSkpOwogI2VuZGlmCiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0VsZW1lbnQoSlNFbGVt
ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOwor
ICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBF
bGVtZW50LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkFU
VFJJQlVURV9OT0RFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0F0dHIoSlNBdHRy
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSkpOworICAgICAg
ICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIEF0dHIsIG5vZGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAg
ICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1RleHQoSlNUZXh0UHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENS
RUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIFRleHQsIG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU0NEQVRBU2VjdGlvbihKU0NEQVRBU2VjdGlvblByb3RvdHlwZTo6
c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4obm9kZSkpOworICAgICAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIENEQVRBU2VjdGlvbiwg
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9E
RToKLSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNFbnRpdHkoSlNFbnRpdHlQcm90b3R5
cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEVudGl0eSo+KG5vZGUpKTsKKyAgICAgICAgICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBFbnRpdHksIG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVD
VElPTl9OT0RFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbihKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3Rh
dGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIFByb2Nlc3NpbmdJbnN0cnVjdGlv
biwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5U
X05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ29tbWVudChKU0NvbW1lbnRQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENvbW1lbnQqPihub2RlKSk7CisgICAg
ICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgQ29tbWVudCwg
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9O
T0RFOgogICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBjYWNoZSB0aGUgZG9jdW1lbnQg
aXRzZWxmIGluIHRoZSBwZXItZG9jdW1lbnQgZGljdGlvbmFyeQogICAgICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKSk7CiAgICAgICAgIGNhc2Ug
Tm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBK
U0RvY3VtZW50VHlwZShKU0RvY3VtZW50VHlwZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGlj
X2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFU
RV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIERvY3VtZW50VHlwZSwgbm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgotICAgICAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU05vdGF0aW9uKEpTTm90YXRpb25Qcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PE5vdGF0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlciA9
IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIE5vdGF0aW9uLCBub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRG9jdW1lbnRGcmFnbWVudChKU0RvY3VtZW50
RnJhZ21lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PERvY3VtZW50RnJhZ21l
bnQqPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQ
RVIoZXhlYywgRG9jdW1lbnRGcmFnbWVudCwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6Ci0gICAgICAgICAgICByZXQg
PSBuZXcgKGV4ZWMpIEpTRW50aXR5UmVmZXJlbmNlKEpTRW50aXR5UmVmZXJlbmNlUHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAg
ICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgRW50aXR5UmVm
ZXJlbmNlLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU05vZGUoSlNOb2RlUHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBub2RlKTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBF
UihleGVjLCBOb2RlLCBub2RlKTsKICAgICB9CiAKLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0
RE9NTm9kZUZvckRvY3VtZW50KGRvYywgbm9kZSwgcmV0KTsKLQotICAgIHJldHVybiByZXQ7ICAg
IAorICAgIHJldHVybiB3cmFwcGVyOyAgICAKIH0KICAgICAKIEpTVmFsdWUqIHRvSlNOZXdseUNy
ZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQpAQCAtMjM1LDEwICsyMzEsOSBAQCBK
U1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kCiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+ZG9j
dW1lbnQoKTsKLSAgICBKU05vZGUqIHJldCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01Ob2Rl
Rm9yRG9jdW1lbnQoZG9jLCBub2RlKTsKLSAgICBpZiAocmV0KQotICAgICAgICByZXR1cm4gcmV0
OworICAgIEpTTm9kZSogd3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKG5vZGUtPmRv
Y3VtZW50KCksIG5vZGUpOworICAgIGlmICh3cmFwcGVyKQorICAgICAgICByZXR1cm4gd3JhcHBl
cjsKIAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKGV4ZWMsIG5vZGUpOwogfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNpb24gMzY0MjIp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDUzICs1OSw1NiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2Vn
KiBvYmosIFNWR0VsZW1lbnQqIGNvbnRleHQpCitKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgU1ZHUGF0aFNlZyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQogewotICAgIGlmICgh
b2JqKQorICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgCi0g
ICAgc3dpdGNoIChvYmotPnBhdGhTZWdUeXBlKCkpIHsKKworICAgIGlmIChET01PYmplY3QqIHdy
YXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKG9iamVjdCkpCisgICAgICAgIHJldHVy
biB3cmFwcGVyOworCisgICAgc3dpdGNoIChvYmplY3QtPnBhdGhTZWdUeXBlKCkpIHsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOgotICAgICAgICByZXR1cm4gY2FjaGVT
VkdET01PYmplY3Q8U1ZHUGF0aFNlZ0Nsb3NlUGF0aCwgSlNTVkdQYXRoU2VnQ2xvc2VQYXRoLCBK
U1NWR1BhdGhTZWdDbG9zZVBhdGhQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdDbG9zZVBhdGgqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdf
T0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ0Nsb3NlUGF0aCwgb2JqZWN0LCBjb250ZXh0
KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoKLSAgICAgICAgcmV0
dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdNb3ZldG9BYnMsIEpTU1ZHUGF0aFNlZ01v
dmV0b0FicywgSlNTVkdQYXRoU2VnTW92ZXRvQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTW92ZXRvQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBD
UkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdNb3ZldG9BYnMsIG9iamVj
dCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19SRUw6Ci0g
ICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTW92ZXRvUmVsLCBKU1NW
R1BhdGhTZWdNb3ZldG9SZWwsIEpTU1ZHUGF0aFNlZ01vdmV0b1JlbFByb3RvdHlwZT4oZXhlYywg
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b1JlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAg
ICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnTW92ZXRv
UmVsLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5F
VE9fQUJTOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0
b0FicywgSlNTVkdQYXRoU2VnTGluZXRvQWJzLCBKU1NWR1BhdGhTZWdMaW5ldG9BYnNQcm90b3R5
cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihvYmopLCBjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0
aFNlZ0xpbmV0b0Ficywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfTElORVRPX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1Bh
dGhTZWdMaW5ldG9SZWwsIEpTU1ZHUGF0aFNlZ0xpbmV0b1JlbCwgSlNTVkdQYXRoU2VnTGluZXRv
UmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvUmVsKj4ob2Jq
KSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4
ZWMsIFNWR1BhdGhTZWdMaW5ldG9SZWwsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOgotICAgICAgICByZXR1cm4gY2FjaGVT
VkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicywgSlNTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNQcm90b3R5cGU+KGV4ZWMsIHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMqPihvYmopLCBjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0Ficywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVj
dDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWws
IEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1
cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
UmVsLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJW
RVRPX1FVQURSQVRJQ19BQlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fi
cywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fic1Byb3RvdHlwZT4oZXhlYywgc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMqPihvYmopLCBjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNBYnMsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2Vn
OjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZH
RE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLCBKU1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsUHJvdG90eXBl
PihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCo+KG9iaiks
IGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVj
LCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCwgb2JqZWN0LCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQVJDX0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZH
RE9NT2JqZWN0PFNWR1BhdGhTZWdBcmNBYnMsIEpTU1ZHUGF0aFNlZ0FyY0FicywgSlNTVkdQYXRo
U2VnQXJjQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjQWJzKj4o
b2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVS
KGV4ZWMsIFNWR1BhdGhTZWdBcmNBYnMsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0FSQ19SRUw6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVj
dDxTVkdQYXRoU2VnQXJjUmVsLCBKU1NWR1BhdGhTZWdBcmNSZWwsIEpTU1ZHUGF0aFNlZ0FyY1Jl
bFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY1JlbCo+KG9iaiksIGNv
bnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBT
VkdQYXRoU2VnQXJjUmVsLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RP
TU9iamVjdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicywgSlNTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbEFicywgSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFic1Byb3RvdHlwZT4o
ZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMqPihvYmopLCBj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywg
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDoKLSAgICAgICAgcmV0
dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLCBKU1NW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLCBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
UmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bFJlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1Rf
V1JBUFBFUihleGVjLCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCwgb2JqZWN0LCBjb250
ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzoK
LSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bEFicywgSlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMsIEpTU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVy
dGljYWxBYnMqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JK
RUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLCBvYmplY3QsIGNv
bnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVM
OgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsUmVsLCBKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCwgSlNTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWxQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbFJlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19P
QkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwsIG9iamVjdCwg
Y29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01P
T1RIX0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhBYnMsIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicywgSlNT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAg
ICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhBYnMsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2Vn
OjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hl
U1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwsIEpTU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aFJlbCwgSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
UHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9X
UkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwsIG9iamVjdCwgY29u
dGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NN
T09USF9BQlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFicywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFic1Byb3RvdHlwZT4oZXhl
Yywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMqPihvYmop
LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhl
YywgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMsIG9iamVjdCwgY29udGV4dCk7
CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9S
RUw6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbCwgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCwg
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbFByb3RvdHlwZT4oZXhlYywgc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwqPihvYmopLCBjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwsIG9iamVjdCwgY29udGV4dCk7CiAgICAg
Y2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX1VOS05PV046CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWcsIEpTU1ZHUGF0aFNlZywgSlNTVkdQ
YXRoU2VnUHJvdG90eXBlPihleGVjLCBvYmosIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JF
QVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnLCBvYmplY3QsIGNvbnRleHQp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE3ICszOSwxNiBAQCBKU1ZhbHVl
KiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVlCiAgICAgaWYgKCFzdHlsZVNoZWV0KQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBET01PYmplY3QqIHJldCA9IFNjcmlwdElu
dGVycHJldGVyOjpnZXRET01PYmplY3Qoc3R5bGVTaGVldCk7Ci0gICAgaWYgKHJldCkKLSAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmpl
Y3RXcmFwcGVyKHN0eWxlU2hlZXQpOworICAgIGlmICh3cmFwcGVyKQorICAgICAgICByZXR1cm4g
d3JhcHBlcjsKIAogICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1N0eWxlU2hlZXQoSlNDU1NTdHlsZVNoZWV0UHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkp
OworICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBDU1NT
dHlsZVNoZWV0LCBzdHlsZVNoZWV0KTsKICAgICBlbHNlCi0gICAgICAgIHJldCA9IG5ldyAoZXhl
YykgSlNTdHlsZVNoZWV0KEpTU3R5bGVTaGVldFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3R5bGVT
aGVldCk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMs
IFN0eWxlU2hlZXQsIHN0eWxlU2hlZXQpOwogCi0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERP
TU9iamVjdChzdHlsZVNoZWV0LCByZXQpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHdy
YXBwZXI7CiB9CiAKIHZvaWQgSlNTdHlsZVNoZWV0OjptYXJrKCkKQEAgLTYyLDcgKzYxLDcgQEAg
dm9pZCBKU1N0eWxlU2hlZXQ6Om1hcmsoKQogICAgIC8vIGJlIHRvIG1ha2UgcmVmL2RlcmVmIG9u
IHRoZSBzdHlsZSBzaGVldCByZWYvZGVyZWYgdGhlIG5vZGUgaW5zdGVhZCwgYnV0IHRoZXJlJ3MK
ICAgICAvLyBhIGxvdCBvZiBkaXNlbnRhbmdsaW5nIG9mIHRoZSBDU1MgRE9NIG9iamVjdHMgdGhh
dCB3b3VsZCBuZWVkIHRvIGhhcHBlbiBmaXJzdC4KICAgICBpZiAoTm9kZSogb3duZXJOb2RlID0g
aW1wbCgpLT5vd25lck5vZGUoKSkgewotICAgICAgICBpZiAoSlNOb2RlKiBvd25lck5vZGVXcmFw
cGVyID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU5vZGVGb3JEb2N1bWVudChvd25lck5vZGUt
PmRvY3VtZW50KCksIG93bmVyTm9kZSkpIHsKKyAgICAgICAgaWYgKEpTTm9kZSogb3duZXJOb2Rl
V3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKG93bmVyTm9kZS0+ZG9jdW1lbnQoKSwg
b3duZXJOb2RlKSkgewogICAgICAgICAgICAgaWYgKCFvd25lck5vZGVXcmFwcGVyLT5tYXJrZWQo
KSkKICAgICAgICAgICAgICAgICBvd25lck5vZGVXcmFwcGVyLT5tYXJrKCk7CiAgICAgICAgIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NDIyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMCArMzcsNyBAQCBKU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhl
CiAgICAgaWYgKCF0ZXh0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNO
b2RlKiByZXQgPSBuZXcgKGV4ZWMpIEpTVGV4dChKU1RleHRQcm90b3R5cGU6OnNlbGYoZXhlYyks
IHRleHQpOwotICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01Ob2RlRm9yRG9jdW1lbnQodGV4
dC0+ZG9jdW1lbnQoKSwgdGV4dCwgcmV0KTsKLQotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJu
IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIFRleHQsIHRleHQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsOSArNDIsNyBAQCBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6OkpTWE1MSHR0
cFJlCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBSZWZQ
dHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0
ZShzdGF0aWNfY2FzdDxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcikt
PmRvY3VtZW50KCkpOwotICAgIEpTWE1MSHR0cFJlcXVlc3QqIHJlc3VsdCA9IG5ldyAoZXhlYykg
SlNYTUxIdHRwUmVxdWVzdChKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCB4
bWxIdHRwUmVxdWVzdC5nZXQoKSk7Ci0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVj
dCh4bWxIdHRwUmVxdWVzdC5nZXQoKSwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFhNTEh0dHBSZXF1ZXN0LCB4
bWxIdHRwUmVxdWVzdC5nZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNYTUxIdHRwUmVxdWVz
dENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDM2NDIyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEpT
WE1MSHR0cFJlcXVlc3Q6Om1hcmsoKQogICAgIEJhc2U6Om1hcmsoKTsKIAogICAgIGlmIChYTUxI
dHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gbV9pbXBsLT5vcHRpb25hbFVwbG9hZCgpKSB7Ci0g
ICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmpl
Y3QodXBsb2FkKTsKKyAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2Jq
ZWN0V3JhcHBlcih1cGxvYWQpOwogICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFy
a2VkKCkpCiAgICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3Bw
CShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dFVwbG9hZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBK
U1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjptYXJrKCkKICAgICBCYXNlOjptYXJrKCk7CiAKICAgICBp
ZiAoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gbV9pbXBsLT5hc3NvY2lhdGVkWE1M
SHR0cFJlcXVlc3QoKSkgewotICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBTY3JpcHRJbnRl
cnByZXRlcjo6Z2V0RE9NT2JqZWN0KHhtbEh0dHBSZXF1ZXN0KTsKKyAgICAgICAgRE9NT2JqZWN0
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcih4bWxIdHRwUmVxdWVzdCk7CiAg
ICAgICAgIGlmICh3cmFwcGVyICYmICF3cmFwcGVyLT5tYXJrZWQoKSkKICAgICAgICAgICAgIHdy
YXBwZXItPm1hcmsoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3NvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6SlNYU0xU
UHJvY2VzCiAKIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0WFNMVFByb2Nlc3NvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4g
bmV3IChleGVjKSBKU1hTTFRQcm9jZXNzb3IoSlNYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoKS5nZXQoKSk7CisgICAgcmV0dXJuIENSRUFU
RV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgWFNMVFByb2Nlc3NvciwgWFNMVFByb2Nlc3Nvcjo6
Y3JlYXRlKCkuZ2V0KCkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM2
NDIyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9s
bGVyKEZyYW1lCiAgICAgLCBtX3NvdXJjZVVSTCgwKQogICAgICwgbV9wcm9jZXNzaW5nVGltZXJD
YWxsYmFjayhmYWxzZSkKICAgICAsIG1fcGF1c2VkKGZhbHNlKQorICAgICwgbV9jdXJyZW50RXZl
bnQoMCkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1fd2luZG93U2Ny
aXB0TlBPYmplY3QoMCkKICNlbmRpZgpAQCAtODIsNiArODMsOCBAQCBTY3JpcHRDb250cm9sbGVy
OjpTY3JpcHRDb250cm9sbGVyKEZyYW1lCiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250
cm9sbGVyKCkKIHsKKyAgICBBU1NFUlQoIW1fY3VycmVudEV2ZW50KTsKKwogICAgIGlmIChtX3dp
bmRvd1NoZWxsKSB7CiAgICAgICAgIG1fd2luZG93U2hlbGwgPSAwOwogICAgIApAQCAtMTY0LDEx
ICsxNjcsMTEgQEAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBTY3JpcHRDb250cm9sbAogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKIHsK
LSAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGhhcyBmaW5p
c2hlZCB3aXRoIGEgcGFydGljdWxhciBldmVudC4gVGhpcwotICAvLyBpcyB0aGUgY2FzZSBpbiBz
aXRhdGlvbnMgd2hlcmUgYW4gZXZlbnQgaGFzIGJlZW4gY3JlYXRlZCBqdXN0IGZvciB0ZW1wb3Jh
cnkgdXNhZ2UsCi0gIC8vIGUuZy4gYW4gaW1hZ2UgbG9hZCBvciBtb3VzZSBtb3ZlLiBPbmNlIHRo
ZSBldmVudCBoYXMgYmVlbiBkaXNwYXRjaGVkLCBpdCBpcyBmb3Jnb3R0ZW4KLSAgLy8gYnkgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBhbmQgc28gZG9lcyBub3QgbmVlZCB0byBiZSBjYWNoZWQgc3Rp
bGwgYnkgdGhlIGludGVycHJldGVyCi0gIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmpl
Y3QoZXZlbnQpOworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBoYXMgZmluaXNoZWQgd2l0aCBhIHBhcnRpY3VsYXIgZXZlbnQuIFRoaXMKKyAgICAvLyBp
cyB0aGUgY2FzZSBpbiBzaXRhdGlvbnMgd2hlcmUgYW4gZXZlbnQgaGFzIGJlZW4gY3JlYXRlZCBq
dXN0IGZvciB0ZW1wb3JhcnkgdXNhZ2UsCisgICAgLy8gZS5nLiBhbiBpbWFnZSBsb2FkIG9yIG1v
dXNlIG1vdmUuIE9uY2UgdGhlIGV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQsIGl0IGlzIGZvcmdv
dHRlbgorICAgIC8vIGJ5IHRoZSBET00gaW1wbGVtZW50YXRpb24gYW5kIHNvIGRvZXMgbm90IG5l
ZWQgdG8gYmUgY2FjaGVkIHN0aWxsIGJ5IHRoZSBpbnRlcnByZXRlci4KKyAgICBmb3JnZXRET01P
YmplY3QoZXZlbnQpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoKQpA
QCAtMTk0LDggKzE5Nyw4IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJH
ZXMKICAgICBpZiAoIW1fd2luZG93U2hlbGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChFdmVudCogZXZlbnQgPSBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+Y3VycmVudEV2ZW50
KCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZXZlbnQtPnR5cGUoKTsK
KyAgICBpZiAobV9jdXJyZW50RXZlbnQpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlID0gbV9jdXJyZW50RXZlbnQtPnR5cGUoKTsKICAgICAgICAgaWYgKCAvLyBtb3VzZSBldmVu
dHMKICAgICAgICAgICAgIHR5cGUgPT0gY2xpY2tFdmVudCB8fCB0eXBlID09IG1vdXNlZG93bkV2
ZW50IHx8CiAgICAgICAgICAgICB0eXBlID09IG1vdXNldXBFdmVudCB8fCB0eXBlID09IGRibGNs
aWNrRXZlbnQgfHwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDkgQEAgcHVibGljOgogCiAgICAgUGFzc1Jl
ZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0PiBjcmVhdGVSb290T2JqZWN0KHZvaWQqIG5h
dGl2ZUhhbmRsZSk7CiAKKyAgICBFdmVudCogY3VycmVudEV2ZW50KCkgeyByZXR1cm4gbV9jdXJy
ZW50RXZlbnQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRFdmVudChFdmVudCogZXZlbnQpIHsgbV9j
dXJyZW50RXZlbnQgPSBldmVudDsgfQorCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmIEVOQUJMRShN
QUNfSkFWQV9CUklER0UpCiAgICAgc3RhdGljIHZvaWQgaW5pdEphdmFKU0JpbmRpbmdzKCk7CkBA
IC0xNDYsNiArMTQ5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fcHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2s7CiAgICAgYm9vbCBtX3BhdXNlZDsKIAorICAgIEV2ZW50KiBtX2N1cnJlbnRFdmVudDsK
KwogICAgIC8vIFRoZSByb290IG9iamVjdCB1c2VkIGZvciBvYmplY3RzIGJvdW5kIG91dHNpZGUg
dGhlIGNvbnRleHQgb2YgYSBwbHVnaW4uCiAgICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+IG1fYmluZGluZ1Jvb3RPYmplY3Q7CiAgICAgUm9vdE9iamVjdE1hcCBtX3Jvb3RPYmpl
Y3RzOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMiArNDAyLDE4IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoJHBhc3NUeXBlLCBKU0RPTVdp
bmRvd1NoZWxsKik7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpKU09iamVjdCogcHJvdG90eXBlLCAkcGFzc1R5cGUi
IC4gKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSA/ICIs
IFNWR0VsZW1lbnQqIGNvbnRleHQiIDogIiIpIC4iKTtcbiIpOworICAgICAgICBpZiAoSXNTVkdU
eXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpTdHJ1Y3R1cmVJRCos
ICRwYXNzVHlwZSwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlN0
cnVjdHVyZUlEKiwgJHBhc3NUeXBlKTtcbiIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgIyBE
ZXN0cnVjdG9yCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NO
YW1lKCk7XG4iKSBpZiAoISRoYXNQYXJlbnQgb3IgJGludGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50
Iik7CiAKKyAgICAjIFByb3RvdHlwZQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7
CiAKICAgICAkaW1wbEluY2x1ZGVzeyIke2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZgogICAg
ICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0K
QEAgLTg2Nyw3ICs4NzMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYo
RXhlY1N0YXRlKiBleGVjKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVy
KiBwcm90b3R5cGVJZGVudGlmaWVyID0gbmV3IElkZW50aWZpZXIoZXhlYywgXCJbWyR7Y2xhc3NO
YW1lfS5wcm90b3R5cGVdXVwiKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNDOjpjYWNoZUdsb2JhbE9iamVjdDwke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4
ZWMsICpwcm90b3R5cGVJZGVudGlmaWVyKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gY2FjaGVHbG9iYWxPYmplY3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlPihl
eGVjLCAqcHJvdG90eXBlSWRlbnRpZmllcik7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwogICAgIH0KICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRv
dyIpIHsKQEAgLTkyNCwxNSArOTMwLDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKCRwYXNz
VHlwZSBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoJHtjbGFzc05hbWV9UHJvdG90eXBl
OjpzZWxmKCksIGltcGwsIHNoZWxsKVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoSlNPYmplY3QqIHByb3RvdHlw
ZSwgJHBhc3NUeXBlIGltcGwiIC4gKCRuZWVkc1NWR0NvbnRleHQgPyAiLCBTVkdFbGVtZW50KiBj
b250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2Ns
YXNzTmFtZX06OiRjbGFzc05hbWUoU3RydWN0dXJlSUQqIHN0cnVjdHVyZSwgJHBhc3NUeXBlIGlt
cGwiIC4gKCRuZWVkc1NWR0NvbnRleHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAu
ICIpXG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQpIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShwcm90b3R5cGUsIGltcGwiIC4gKCRw
YXJlbnROZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1
cmUsIGltcGwiIC4gKCRwYXJlbnROZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAu
ICIpXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShwcm90b3R5cGUpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUpXG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9jb250ZXh0KGNvbnRleHQp
XG4iKSBpZiAkbmVlZHNTVkdDb250ZXh0OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgLCBtX2ltcGwoaW1wbClcbiIpOyAgCiAgICAgICAgIH0KLQogICAgIH0KICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
QEAgLTk0Myw3ICs5NDgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBl
cSAiTm9kZSIpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNjcmlwdElu
dGVycHJldGVyOjpmb3JnZXRET01Ob2RlRm9yRG9jdW1lbnQobV9pbXBsLT5kb2N1bWVudCgpLCBt
X2ltcGwuZ2V0KCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBm
b3JnZXRET01Ob2RlKG1faW1wbC0+ZG9jdW1lbnQoKSwgbV9pbXBsLmdldCgpKTtcbiIpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgbXkgJGFuaW1hdGVkVHlwZSA9ICRpbXBsQ2xhc3NOYW1lOwpAQCAtOTU0LDcgKzk1OSw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8JHBvZFR5cGUs
ICRhbmltYXRlZFR5cGU+Ojpmb3JnZXRXcmFwcGVyKG1faW1wbC5nZXQoKSk7XG4iKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGZvcmdldERPTU9iamVj
dChtX2ltcGwuZ2V0KCkpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxufVxuXG4iKTsKQEAgLTk2NCw4ICs5NjksMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAjIGl0cyBvd24gc3BlY2lhbCBoYW5kbGluZyByYXRoZXIgdGhhbiByZWx5
aW5nIG9uIHRoZSBjYWNoaW5nIHRoYXQgTm9kZSBub3JtYWxseSBkb2VzLgogICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRG9jdW1lbnQiKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
JHtjbGFzc05hbWV9Ojp+JGNsYXNzTmFtZSgpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChzdGF0aWNfY2Fz
dDwke2ltcGxDbGFzc05hbWV9Kj4oaW1wbCgpKSk7XG59XG5cbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiAgICBmb3JnZXRET01PYmplY3Qoc3RhdGljX2Nhc3Q8JHtpbXBsQ2xh
c3NOYW1lfSo+KGltcGwoKSkpO1xufVxuXG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gbmV3IEpTRE9NV2luZG93UHJvdG90eXBlO1xuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIG5ldyAoZXhlYykgJHtjbGFz
c05hbWV9UHJvdG90eXBlKGV4ZWMpO1xuIik7CiAgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuIik7CiAKICAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwIAogICAg
ICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0
ZUNvbnN0cnVjdG9yIn0gCkBAIC0xMjA4LDcgKzEyMjIsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0
ZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAk
e2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYylcbntcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogY29u
c3RydWN0b3JJZGVudGlmaWVyID0gbmV3IElkZW50aWZpZXIoZXhlYywgXCJbWyR7aW50ZXJmYWNl
TmFtZX0uY29uc3RydWN0b3JdXVwiKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gSlNDOjpjYWNoZUdsb2JhbE9iamVjdDwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rv
cj4oZXhlYywgKmNvbnN0cnVjdG9ySWRlbnRpZmllcik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIGNhY2hlR2xvYmFsT2JqZWN0PCR7Y2xhc3NOYW1lfUNvbnN0
cnVjdG9yPihleGVjLCAqY29uc3RydWN0b3JJZGVudGlmaWVyKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCkBAIC0xMzU3LDExICsxMzcxLDExIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8SlNTVkdQT0RUeXBlV3JhcHBl
cjwkcG9kVHlwZT4sICRjbGFzc05hbWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhlYywgb2Jq
LCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIGdldERPTU9iamVjdFdyYXBwZXI8JGNsYXNzTmFtZSwgSlNTVkdQT0RUeXBlV3JhcHBlcjwk
cG9kVHlwZT4gPihleGVjLCBcIiRjbGFzc05hbWVcIiwgb2JqLCBjb250ZXh0KTtcbiIpOwogICAg
ICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNz
TmFtZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYWNo
ZVNWR0RPTU9iamVjdDwkaW1wbENsYXNzTmFtZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJv
dG90eXBlPihleGVjLCBvYmosIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjwkY2xhc3NOYW1lPihleGVj
LCBcIiRjbGFzc05hbWVcIiwgb2JqLCBjb250ZXh0KTtcbiIpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0
PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NOYW1lLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4ZWMs
IG9iaik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPCRjbGFzc05hbWU+KGV4ZWMsIFwiJGNsYXNzTmFtZVwiLCBvYmop
O1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAg
ICB9CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDEwICs0MDksNyBAQCBEb2N1bWVudDo6fkRv
Y3VtZW50KCkKICNlbmRpZgogCiAgICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKHRo
aXMpOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIFNj
cmlwdEludGVycHJldGVyOjpmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KHRoaXMpOwotICAg
IH0KKyAgICBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KHRoaXMpOwogCiAgICAgaWYgKG1f
ZG9jQ2hhbmdlZCAmJiBjaGFuZ2VkRG9jdW1lbnRzKQogICAgICAgICBjaGFuZ2VkRG9jdW1lbnRz
LT5yZW1vdmUodGhpcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzY0MjIpCisrKyBXZWJDb3JlL2RvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDEwICsxOTMsOCBAQCB2b2lkIE5vZGU6OnNl
dERvY3VtZW50KERvY3VtZW50KiBkb2MpCiAKICAgICB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOwogCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAg
U2NyaXB0SW50ZXJwcmV0ZXI6OnVwZGF0ZURPTU5vZGVEb2N1bWVudCh0aGlzLCBtX2RvY3VtZW50
LmdldCgpLCBkb2MpOwotICAgIH0gICAgCisgICAgdXBkYXRlRE9NTm9kZURvY3VtZW50KHRoaXMs
IG1fZG9jdW1lbnQuZ2V0KCksIGRvYyk7CisKICAgICBtX2RvY3VtZW50ID0gZG9jOwogCiAgICAg
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCShyZXZpc2lvbiAz
NjQyMikKKysrIFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwJKHdvcmtpbmcgY29weSkKQEAgLTcy
NCw4ICs3MjQsOCBAQCBzdWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCiBzdGF0aWMgSlNOb2RlKiBj
cmVhdGUke3VjTmFtZX1XcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjwkcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewogICAgIGlmICghTWVkaWFQbGF5
ZXI6OmlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudChKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIGVsZW1lbnQuZ2V0KCkpOwotICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9JHt1Y05hbWV9RWxlbWVudChKUyRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfSR7dWNOYW1lfUVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0
YXRpY19jYXN0PCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSR7dWNOYW1lfUVsZW1lbnQqPihlbGVt
ZW50LmdldCgpKSk7CisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVj
LCAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50LCBlbGVtZW50LmdldCgpKTsKKyAgICBy
ZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgJHBhcmFtZXRlcnN7J25hbWVzcGFj
ZSd9JHt1Y05hbWV9RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CiB9CiAKIEVORApAQCAtNzM0LDcg
KzczNCw3IEBAIEVORAogICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSog
Y3JlYXRlJHt1Y05hbWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8JHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gZWxlbWVudCkKIHsgICAKLSAgICByZXR1cm4gbmV3
IChleGVjKSBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSR7dWNOYW1lfUVsZW1lbnQoSlMkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50Kj4o
ZWxlbWVudC5nZXQoKSkpOworICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVj
LCAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50LCBlbGVtZW50LmdldCgp
KTsKIH0KIAogRU5ECkBAIC04MDgsNyArODA4LDcgQEAgRU5ECiAgICAgQ3JlYXRlJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVuY3Rp
b24gPSBtYXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGNyZWF0
ZVdyYXBwZXJGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihl
eGVjLCBlbGVtZW50KTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKUyRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnQoSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50UHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RF
X1dSQVBQRVIoZXhlYywgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudCwgZWxlbWVudC5n
ZXQoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAzNjQyMikKKysrIFdl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgIlNjcmVlbi5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtOTA3LDQgKzkwOCwxMSBAQCB2b2lkIERPTVdpbmRvdzo6
cmVzaXplVG8oZmxvYXQgd2lkdGgsIGZsCiAgICAgcGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1Jl
Y3QoZnIpOwogfQogCitFdmVudCogRE9NV2luZG93OjpldmVudCgpCit7CisgICAgaWYgKCFtX2Zy
YW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmN1
cnJlbnRFdmVudCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
CShyZXZpc2lvbiAzNjQyMikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRGF0
YWJhc2U7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFz
cyBFdmVudDsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xh
c3MgSGlzdG9yeTsKQEAgLTEzOSw2ICsxNDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFN0cmluZyBkZWZhdWx0c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gZGVmYXVsdFN0YXR1cygp
OyB9CiAgICAgICAgIHZvaWQgc2V0RGVmYXVsdHN0YXR1cyhjb25zdCBTdHJpbmcmIHN0YXR1cykg
eyBzZXREZWZhdWx0U3RhdHVzKHN0YXR1cyk7IH0KIAorICAgICAgICBFdmVudCogZXZlbnQoKTsK
KwogICAgICAgICAvLyBTZWxmIHJlZmVyZW50aWFsIGF0dHJpYnV0ZXMKICAgICAgICAgRE9NV2lu
ZG93KiBzZWxmKCkgY29uc3Q7CiAgICAgICAgIERPTVdpbmRvdyogd2luZG93KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZigpOyB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMzY0MjIpCisrKyBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw4
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlZmF1bHRz
dGF0dXM7CiAjZW5kaWYKIAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRXZlbnQgZXZlbnQ7
CisKICAgICAgICAgLy8gU2VsZiByZWZlcmVudGlhbCBhdHRyaWJ1dGVzCiAgICAgICAgIGF0dHJp
YnV0ZSBbUmVwbGFjZWFibGUsIERvTm90Q2hlY2tEb21haW5TZWN1cml0eU9uR2V0XSBET01XaW5k
b3cgc2VsZjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtEb05vdENoZWNrRG9tYWluU2Vj
dXJpdHldIERPTVdpbmRvdyB3aW5kb3c7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZp
c2lvbiAzNjQyMikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzY1LDcgKzc2NSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0
QXN5bmNocm8KICAgICAgICAgLy8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEphdmFT
Y3JpcHQgd3JhcHBlci4KICAgICAgICAgcmVmKCk7CiAKLSAgICAgICAgSlNDOjpnY1Byb3RlY3RO
dWxsVG9sZXJhbnQoU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh0aGlzKSk7CisgICAg
ICAgIEpTQzo6Z2NQcm90ZWN0TnVsbFRvbGVyYW50KGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIo
dGhpcykpOwogICAgIH0KIH0KIApAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRyb3BQcm90ZWN0aW9uKCkgICAKICAgICAvLyBjYW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0
aGUgbG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0
IHRoYXQgcG9pbnQuCiAKLSAgICBKU0M6OkpTVmFsdWUqIHdyYXBwZXIgPSBTY3JpcHRJbnRlcnBy
ZXRlcjo6Z2V0RE9NT2JqZWN0KHRoaXMpOworICAgIEpTQzo6SlNWYWx1ZSogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIodGhpcyk7CiAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAg
ICAgSlNDOjpnY1VucHJvdGVjdCh3cmFwcGVyKTsKICAgICAgICAgSlNDOjpIZWFwOjpoZWFwKHdy
YXBwZXIpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZVRleHQuc2l6ZSgpICogMik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23555</attachid>
            <date>2008-09-18 23:19:45 -0700</date>
            <delta_ts>2008-09-19 12:47:57 -0700</delta_ts>
            <desc>patch 1</desc>
            <filename>StructurePatch1.txt</filename>
            <type>text/plain</type>
            <size>81993</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDktMTggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gcGFydCAxIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDg1OAorICAgICAgICAgIG1ha2UgZWFjaCBkaXN0aW5jdCBDKysgY2xhc3Mg
Z2V0IGEgZGlzdGluY3QgSlNDOjpTdHJ1Y3R1cmUKKworICAgICAgICAqIGtqcy9sb29rdXAuaDog
UmVtb3ZlZCB0aGluZ3MgaGVyZSB0aGF0IHdlcmUgdXNlZCBvbmx5IGluIFdlYkNvcmU6CisgICAg
ICAgIGNhY2hlR2xvYmFsT2JqZWN0LCBKU0NfREVGSU5FX1BST1RPVFlQRSwgSlNDX0RFRklORV9Q
Uk9UT1RZUEVfV0lUSF9QUk9UT1RZUEUsCisgICAgICAgIGFuZCBKU0NfSU1QTEVNRU5UX1BST1RP
VFlQRS4KKwogMjAwOC0wOS0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEZpeCBzdHlsZS4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJKHJldmlzaW9uIDM2NjQ4KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNzkgKzIy
Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdGhpc09iai0+UGFyZW50SW1wOjpw
dXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7IC8vIG5vdCBmb3VuZDogZm9yd2Fy
ZCB0byBwYXJlbnQKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBUaGlzIHRlbXBsYXRlIG1ldGhv
ZCByZXRyaWV2ZXMgb3IgY3JlYXRlIGFuIG9iamVjdCB0aGF0IGlzIHVuaXF1ZQotICAgICAqIChm
b3IgYSBnaXZlbiBnbG9iYWwgb2JqZWN0KSBUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCAo
Zm9yIGEgZ2l2ZW4KLSAgICAgKiBwcm9wZXJ0eSBuYW1lKSwgdGhlIE9iamVjdCB3aWxsIGJlIGNv
bnN0cnVjdGVkLCBhbmQgc2V0IGFzIGEgcHJvcGVydHkKLSAgICAgKiBvZiB0aGUgZ2xvYmFsIG9i
amVjdC4gTGF0ZXIgY2FsbHMgd2lsbCBzaW1wbHkgcmV0cmlldmUgdGhhdCBjYWNoZWQgb2JqZWN0
LiAKLSAgICAgKiBOb3RlIHRoYXQgdGhlIG9iamVjdCBjb25zdHJ1Y3RvciBtdXN0IHRha2UgMSBh
cmd1bWVudCwgZXhlYy4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NDdG9yPgot
ICAgIGlubGluZSBKU09iamVjdCogY2FjaGVHbG9iYWxPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCi0gICAgewotICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAg
ICBKU1ZhbHVlKiBvYmogPSBnbG9iYWxPYmplY3QtPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqLT5pc09iamVjdCgpKTsK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCogPihvYmopOwotICAgICAg
ICB9Ci0gICAgICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSBuZXcgKGV4ZWMpIENsYXNzQ3Rvcihl
eGVjKTsKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QocHJvcGVydHlOYW1lLCBuZXdP
YmplY3QsIERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKLSAgICB9Ci0KIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCi0vKioKLSAqIEhlbHBlcnMgdG8gZGVmaW5lIHByb3RvdHlwZSBv
YmplY3RzIChlYWNoIG9mIHdoaWNoIHNpbXBseSBpbXBsZW1lbnRzCi0gKiB0aGUgZnVuY3Rpb25z
IGZvciBhIHR5cGUgb2Ygb2JqZWN0cykuCi0gKiBTb3JyeSBmb3IgdGhpcyBub3QgYmVpbmcgdmVy
eSByZWFkYWJsZSwgYnV0IGl0IGFjdHVhbGx5IHNhdmVzIG11Y2ggY29weS1uLXBhc3RlLgotICog
UGFyZW50UHJvdG90eXBlIGlzIG5vdCBvdXIgYmFzZSBjbGFzcywgaXQncyB0aGUgb2JqZWN0IHdl
IHVzZSBhcyBmYWxsYmFjay4KLSAqIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGVyZSBz
aG91bGQgb25seSBiZSBPTkUgRE9NTm9kZS5oYXNBdHRyaWJ1dGVzIChlLmcuKSwKLSAqIG5vdCBv
bmUgaW4gZWFjaCBkZXJpdmVkIGNsYXNzLiBTbyB3ZSBsaW5rIHRoZSAodW5pcXVlKSBwcm90b3R5
cGVzIGJldHdlZW4gdGhlbS4KLSAqCi0gKiBVc2luZyB0aG9zZSBtYWNyb3MgaXMgdmVyeSBzaW1w
bGU6IGRlZmluZSB0aGUgaGFzaHRhYmxlIChlLmcuICJET01Ob2RlUHJvdG90eXBlVGFibGUiKSwg
dGhlbgotICogSlNDX0RFRklORV9QUk9UT1RZUEUoRE9NTm9kZVByb3RvdHlwZSkKLSAqIEpTQ19J
TVBMRU1FTlRfUFJPVE9UWVBFKCJET01Ob2RlIiwgRE9NTm9kZVByb3RvdHlwZSwgRE9NTm9kZVBy
b3RvdHlwZUZ1bmN0aW9uKQotICogYW5kIHVzZSBET01Ob2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMp
IGFzIHByb3RvdHlwZSBpbiB0aGUgRE9NTm9kZSBjb25zdHJ1Y3Rvci4KLSAqIElmIHRoZSBwcm90
b3R5cGUgaGFzIGEgInBhcmVudCBwcm90b3R5cGUiLCBlLmcuIERPTUVsZW1lbnRQcm90b3R5cGUg
ZmFsbHMgYmFjayBvbiBET01Ob2RlUHJvdG90eXBlLAotICogdGhlbiB0aGUgZmlyc3QgbGluZSB3
aWxsIHVzZSBKU0NfREVGSU5FX1BST1RPVFlQRV9XSVRIX1BST1RPVFlQRSwgd2l0aCBET01Ob2Rl
UHJvdG90eXBlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCi0gKi8KLQotLy8gVGhlc2UgbWFjcm9z
IGFzc3VtZSB0aGF0IGEgcHJvdG90eXBlJ3Mgb25seSBwcm9wZXJ0aWVzIGFyZSBmdW5jdGlvbnMK
LSNkZWZpbmUgSlNDX0RFRklORV9QUk9UT1RZUEUoQ2xhc3NQcm90b3R5cGUpIFwKLSAgY2xhc3Mg
Q2xhc3NQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdCB7IFwKLSAgcHVibGljOiBcCi0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpOyBcCi0g
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0gXAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBpbmZvOyBcCi0g
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqICwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsgXAotICAgIENsYXNzUHJvdG90eXBlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjKSBcCi0gICAgICA6IEpTQzo6SlNPYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkgeyB9IFwKLSAgICBcCi0gIH07Ci0K
LSNkZWZpbmUgSlNDX0RFRklORV9QUk9UT1RZUEVfV0lUSF9QUk9UT1RZUEUoQ2xhc3NQcm90b3R5
cGUsIENsYXNzUHJvdG90eXBlUHJvdG90eXBlKSBcCi0gICAgY2xhc3MgQ2xhc3NQcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU09iamVjdCB7IFwKLSAgICBwdWJsaWM6IFwKLSAgICAgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpOyBcCi0gICAgICAgIHZp
cnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9IFwKLSAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIGluZm87IFwKLSAg
ICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOyBcCi0gICAgICAgIENsYXNzUHJvdG90
eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBcCi0gICAgICAgICAgICA6IEpTQzo6SlNPYmplY3Qo
Q2xhc3NQcm90b3R5cGVQcm90b3R5cGU6OnNlbGYoZXhlYykpIHsgfSBcCi0gICAgXAotICAgIH07
Ci0KLSNkZWZpbmUgSlNDX0lNUExFTUVOVF9QUk9UT1RZUEUoQ2xhc3NOYW1lLCBDbGFzc1Byb3Rv
dHlwZSkgXAotICAgIGNvbnN0IENsYXNzSW5mbyBDbGFzc1Byb3RvdHlwZTo6aW5mbyA9IHsgQ2xh
c3NOYW1lIlByb3RvdHlwZSIsIDAsICZDbGFzc1Byb3RvdHlwZSMjVGFibGUsIDAgIH07IFwKLSAg
ICBKU09iamVjdCogQ2xhc3NQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjKSBcCi0gICAg
eyBcCi0gICAgICAgIHJldHVybiBKU0M6OmNhY2hlR2xvYmFsT2JqZWN0PENsYXNzUHJvdG90eXBl
PihleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJbWyIgQ2xhc3NOYW1lICIucHJvdG90eXBlXV0iKSk7
IFwKLSAgICB9IFwKLSAgICBib29sIENsYXNzUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkgXAotICAgIHsgXAotICAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xv
dDxKU09iamVjdD4oZXhlYywgJkNsYXNzUHJvdG90eXBlIyNUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBzbG90KTsgXAotICAgIH0KLQogI2VuZGlmIC8vIEtKU19sb29rdXBfaApJbmRleDogV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDM2NjU2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MjQgQEAKKzIwMDgtMDktMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcGFydCAxIG9mIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1OAorICAgICAgICAgIG1h
a2UgZWFjaCBkaXN0aW5jdCBDKysgY2xhc3MgZ2V0IGEgZGlzdGluY3QgSlNDOjpTdHJ1Y3R1cmUK
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246OmN1c3RvbVB1dCk6IFVz
ZSBzZXRET01FeGNlcHRpb24KKyAgICAgICAgaW5zdGVhZCBvZiBET01FeGNlcHRpb25UcmFuc2xh
dG9yLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldENhY2hlZERPTU9iamVjdFdyYXBwZXIpOiBVcGRhdGVkIGZ1bmN0aW9uIG5h
bWUuCisgICAgICAgIChXZWJDb3JlOjpjYWNoZURPTU9iamVjdFdyYXBwZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmZvcmdldERPTU9iamVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmZv
cmdldERPTU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NTm9kZVdyYXBw
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1l
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVET01Ob2RlRG9jdW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZERPTVN0cnVjdHVyZSk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlRE9NU3RydWN0dXJlKTogRGl0dG8uCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaDogR2V0IHJpZCBvZiB0aGUgU2NyaXB0SW50ZXJwcmV0ZXIK
KyAgICAgICAgY2xhc3MgYW5kIHJlcGxhY2UgdGhlIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHdp
dGggbm9uLW1lbWJlcgorICAgICAgICBmdW5jdGlvbnMuIEFkZGVkIG1hbnkgb3RoZXIgZnVuY3Rp
b25zIGZvciBnZXR0aW5nIGF0IHN0cnVjdHVyZXMsCisgICAgICAgIHByb3RvdHlwZXMsIHdyYXBw
ZXJzLCBhbmQgY3JlYXRpbmcgdGhlbS4gQWxzbyBtb3ZlZCB0aGUKKyAgICAgICAgY2FjaGVHbG9i
YWxPYmplY3QgZnVuY3Rpb24gaGVyZSBmcm9tIEphdmFTY3JpcHRDb3JlOyBldmVudHVhbGx5Cisg
ICAgICAgIEknbGwgcmVtb3ZlIHRoYXQgb25jZSBJIGdldCByaWQgb2YgdGhlIHJlbWFpbmluZyBj
YWxsZXJzLiBBbHNvCisgICAgICAgIHJlbW92ZWQgdGhlIERPTUV4Y2VwdGlvblRyYW5zbGF0b3Ig
Y2xhc3MuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDogQWRkZWQg
SlNET01TdHJ1Y3R1cmVNYXAgdHlwZSwKKyAgICAgICAgYW5kIHB1dCBvbmUgb2YgdGhvc2UgbWFw
cyBpbiBlYWNoIHdpbmRvdy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtET01PYmplY3RXcmFwcGVyKTogVXBkYXRl
ZCBmb3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6bWFyayk6IEFkZGVkIGNvZGUgdG8gbWFyayBhbGwgdGhlIHN0cnVjdHVyZXMKKyAgICAgICAg
aW4gdGhlIHN0cnVjdHVyZSBtYXAuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6SlNFdmVu
dFRhcmdldE5vZGUpOiBDaGFuZ2VkIHRvIHRha2UKKyAgICAgICAgYSBzdHJ1Y3R1cmUgaW5zdGVh
ZCBvZiBhIHByb3RvdHlwZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9k
ZS5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBbGxDb2xsZWN0aW9uOjpKU0hUTUxBbGxDb2xsZWN0
aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRC
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRN
TElucHV0RWxlbWVudEJhc2UpOiBSZW1vdmVkCisgICAgICAgIHVzZSBvZiB0aGUgSlNDX0lNUExF
TUVOVF9QUk9UT1RZUEUgbWFjcm8sIGFuZCBjaGFuZ2VkIHRvIHRha2UgYQorICAgICAgICBzdHJ1
Y3R1cmUgaW5zdGVhZCBvZiBhIHByb3RvdHlwZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxJbnB1dEVsZW1lbnRCYXNlLmg6IFJlbW92ZWQgdXNlIG9mIHRoZQorICAgICAgICBKU0NfREVG
SU5FX1BST1RPVFlQRV9XSVRIX1BST1RPVFlQRSBtYWNybywgYW5kIGNoYW5nZWQgY29uc3RydWN0
b3IKKyAgICAgICAgdG8gdGFrZSBhIHN0cnVjdHVyZSBpbnN0ZWFkIG9mIGEgcHJvdG90eXBlLiBD
cmVhdGVkIGEgZHVtbXkgcHJvdG90eXBlCisgICAgICAgIGNsYXNzIHRoYXQgY2F1c2VzIHRoZSBI
VE1MSW5wdXRFbGVtZW50IHByb3RvdHlwZSB0byBoYXZlIHRoZQorICAgICAgICBIVE1MRWxlbWVu
dCBwcm90b3R5cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbTogQ2hhbmdlIGNvbnN0cnVjdG9ycyB0byB0YWtlCisgICAgICAgIHN0cnVjdHVyZXMgaW5z
dGVhZCBvZiBwcm90b3R5cGVzLiBDaGFuZ2VkIHRoZSBwcm90b3R5cGUgc2VsZiBmdW5jdGlvbgor
ICAgICAgICB0byB1c2UgdGhlIGdldERPTVByb3RvdHlwZSBmdW5jdGlvbiAtLSBsYXRlciB3ZSBj
YW4gZWxpbWluYXRlIGl0IGFuZAorICAgICAgICBoYXZlIGNhbGxlcnMgaW52b2tlIGdldERPTVBy
b3RvdHlwZSBkaXJlY3RseSBpbnN0ZWFkLiBVcGRhdGVkIG90aGVyCisgICAgICAgIGZ1bmN0aW9u
cyB0aGF0IGhhdmUgbmFtZSBjaGFuZ2VzLiBBZGRlZCBjb2RlIHRvIGdlbmVyYXRlIHRoZQorICAg
ICAgICBjcmVhdGVQcm90b3R5cGUgbWVtYmVyIGZ1bmN0aW9uLiBDaGFuZ2VkIHVzZSBvZiBjYWNo
ZUdsb2JhbE9iamVjdCB0bworICAgICAgICBnZXQgaXQgZnJvbSB0aGUgV2ViQ29yZSBuYW1lc3Bh
Y2UgaW5zdGVhZCBvZiB0aGUgSlNDIG5hbWVzcGFjZS4KKyAgICAgICAgQ2hhbmdlZCBjYWNoZURP
TU9iamVjdCBjYWxscyB0byB1c2UgZ2V0RE9NT2JqZWN0V3JhcHBlciBpbnN0ZWFkLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9j
dW1lbnQpOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZSBhbmQgYWxzbworICAgICAgICByZW1vdmVk
IHVubmVjZXNzYXJ5IEpTTG9jayB1c2UgLS0gdGhlcmUncyBubyBuZWVkIHRvIGxvY2sgYXJvdW5k
IHRoaXMuCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
c2V0RG9jdW1lbnQpOiBEaXR0by4KKworICAgICAgICAqIGRvbS9tYWtlX25hbWVzLnBsOiBDaGFu
Z2VkIHRvIHVzZSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUiBtYWNybworICAgICAgICBpbnN0ZWFk
IG9mIGNhbGxpbmcgbmV3IGRpcmVjdGx5LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NS
dWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOiBVcGRhdGVkIGZvciBmdW5j
dGlvbiBuYW1lIGNoYW5nZXMgYW5kIHVzZWQgdGhlCisgICAgICAgIENSRUFURV9ET01fT0JKRUNU
X1dSQVBQRVIgbWFjcm8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Om1hcmspOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9K
Uyk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzRXZlbnRUYXJnZXREaXNwYXRjaEV2ZW50KTogVXNlIHNldERP
TUV4Y2VwdGlvbiBpbnN0ZWFkCisgICAgICAgIG9mIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IuCisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKTogVXBkYXRlZCBmb3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2Vz
IGFuZCB1c2VkIHRoZQorICAgICAgICBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSIG1hY3JvLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6Om1hcmspOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hlZXQ6Om1hcmspOiBEaXR0by4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RYTUxIdHRwUmVx
dWVzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6bWFyayk6IERpdHRv
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6bWFyayk6IERpdHRv
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFhTTFRQcm9jZXNzb3IpOiBEaXR0by4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KTogRGl0dG8uCisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
Ojpsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOiBEaXR0by4KKwogMjAwOC0wOS0xOCAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkICJ0
aGUgSGFpciIgSHlhdHQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20u
Y3BwCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNDYgKzU0LDQ0IEBAIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBDU1NSdWxlKiAKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6Omdl
dERPTU9iamVjdChydWxlKTsKKyAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01P
YmplY3RXcmFwcGVyKHJ1bGUpOwogCi0gICAgaWYgKHJldCkKLSAgICAgICAgcmV0dXJuIHJldDsK
KyAgICBpZiAod3JhcHBlcikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBzd2l0Y2gg
KHJ1bGUtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6Ci0gICAg
ICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NTU3R5bGVSdWxlKEpTQ1NTUnVsZVByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAg
ICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTU3R5bGVS
dWxlLCBydWxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1J1bGU6Ok1F
RElBX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NTTWVkaWFSdWxlKEpT
Q1NTTWVkaWFSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1
bGUqPihydWxlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JB
UFBFUihleGVjLCBDU1NNZWRpYVJ1bGUsIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTUnVsZTo6Rk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcg
KGV4ZWMpIEpTQ1NTRm9udEZhY2VSdWxlKEpTQ1NTRm9udEZhY2VSdWxlUHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKSk7CisgICAgICAgICAg
ICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBDU1NGb250RmFjZVJ1
bGUsIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUnVsZTo6UEFH
RV9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1BhZ2VSdWxlKEpTQ1NT
UGFnZVJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4o
cnVsZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIo
ZXhlYywgQ1NTUGFnZVJ1bGUsIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTUnVsZTo6SU1QT1JUX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpT
Q1NTSW1wb3J0UnVsZShKU0NTU0ltcG9ydFJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JF
QVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBDU1NJbXBvcnRSdWxlLCBydWxlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKLSAgICAg
ICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDU1NDaGFyc2V0UnVsZShKU0NTU0NoYXJzZXRSdWxl
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZSo+KHJ1bGUp
KTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMs
IENTU0NoYXJzZXRSdWxlLCBydWxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1J1bGU6OlZBUklBQkxFU19SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBK
U0NTU1ZhcmlhYmxlc1J1bGUoSlNDU1NWYXJpYWJsZXNSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZXNSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTVmFyaWFibGVzUnVsZSwg
cnVsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRf
S0VZRlJBTUVfUlVMRToKLSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUoSlNXZWJLaXRDU1NLZXlmcmFtZVJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyks
IHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFdlYktpdENTU0tleWZy
YW1lUnVsZSwgcnVsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NSdWxl
OjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShKU1dlYktpdENTU0tleWZyYW1lc1J1bGVQcm90b3R5cGU6
OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihydWxlKSk7
CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLCBydWxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1J1bGUoSlNDU1NS
dWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBydWxlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTUnVs
ZSwgcnVsZSk7CiAgICAgfQogCi0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChy
dWxlLCByZXQpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NjQ4KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIsMTMgKzE2MiwxNCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Y3VzdG9tUHV0KEV4CiAgICAgaWYgKCFpc0NTU1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2Vw
dGlvbihleGVjKTsKICAgICBib29sIHBpeGVsT3JQb3M7CiAgICAgU3RyaW5nIHByb3AgPSBjc3NQ
cm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCAmcGl4ZWxPclBvcyk7CiAgICAgU3RyaW5nIHByb3BW
YWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAo
cGl4ZWxPclBvcykKICAgICAgICAgcHJvcFZhbHVlICs9ICJweCI7Ci0gICAgaW1wbCgpLT5zZXRQ
cm9wZXJ0eShwcm9wLCBwcm9wVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaW1wbCgpLT5zZXRQcm9wZXJ0eShwcm9wLCBwcm9wVmFsdWUsIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NjQ4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMjggKzQ5LDI3IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBD
U1NWYWx1ZSoKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAg
ICBET01PYmplY3QqIHJldCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QodmFsdWUp
OworICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIodmFs
dWUpOwogCi0gICAgaWYgKHJldCkKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICBpZiAod3JhcHBl
cikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1dlYktpdENTU1Ry
YW5zZm9ybVZhbHVlKEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVQcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4odmFsdWUpKTsKKyAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUsIHZhbHVlKTsKICAgICBlbHNlIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
LSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1ZhbHVlTGlzdChKU0NTU1ZhbHVlTGlzdFBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpKTsK
KyAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTVmFs
dWVMaXN0LCB2YWx1ZSk7CiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmICh2YWx1ZS0+aXNT
VkdQYWludCgpKQotICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTU1ZHUGFpbnQoSlNTVkdQYWlu
dFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSkpOwor
ICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYWlu
dCwgdmFsdWUpOwogICAgIGVsc2UgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNTVkdDb2xvcihKU1NWR0NvbG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVB
VEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR0NvbG9yLCB2YWx1ZSk7CiAjZW5kaWYKICAg
ICBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXQgPSBuZXcg
KGV4ZWMpIEpTQ1NTUHJpbWl0aXZlVmFsdWUoSlNDU1NQcmltaXRpdmVWYWx1ZVByb3RvdHlwZTo6
c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAg
ICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBDU1NQcmltaXRp
dmVWYWx1ZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NT
U1ZhbHVlKEpTQ1NTVmFsdWVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHZhbHVlKTsKKyAgICAgICAg
d3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgQ1NTVmFsdWUsIHZhbHVl
KTsKIAotICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QodmFsdWUsIHJldCk7Ci0g
ICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFy
cmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE3ICs1OCwx
NSBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2FudmFzUGl4CiAgICAgaWYgKCFw
aXhlbHMpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBET01PYmplY3QqIHJl
dCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QocGl4ZWxzKTsKLSAgICBpZiAocmV0
KQotICAgICAgICByZXR1cm4gcmV0OworICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hl
ZERPTU9iamVjdFdyYXBwZXIocGl4ZWxzKTsKKyAgICBpZiAod3JhcHBlcikKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXI7CiAgICAgCi0gICAgcmV0ID0gbmV3IChleGVjKSBKU0NhbnZhc1BpeGVsQXJy
YXkoSlNDYW52YXNQaXhlbEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBwaXhlbHMpOworICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIENhbnZhc1BpeGVsQXJy
YXksIHBpeGVscyk7CiAgICAgCiAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNv
c3QocGl4ZWxzLT5sZW5ndGgoKSk7CiAgICAgCi0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERP
TU9iamVjdChwaXhlbHMsIHJldCk7Ci0gICAgCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4g
d3JhcHBlcjsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDM2NjQ4KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMzAgKzEyOCwz
MCBAQCBzdGF0aWMgRE9NT2JqZWN0TWFwJiBkb21PYmplY3RzKCkKICAgICByZXR1cm4gc3RhdGlj
RE9NT2JqZWN0czsKIH0KIAotRE9NT2JqZWN0KiBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2Jq
ZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkgCitET01PYmplY3QqIGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIodm9pZCogb2JqZWN0SGFuZGxlKSAKIHsKICAgICByZXR1cm4gZG9tT2JqZWN0cygpLmdl
dChvYmplY3RIYW5kbGUpOwogfQogCi12b2lkIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmpl
Y3Qodm9pZCogb2JqZWN0SGFuZGxlLCBET01PYmplY3QqIHdyYXBwZXIpIAordm9pZCBjYWNoZURP
TU9iamVjdFdyYXBwZXIodm9pZCogb2JqZWN0SGFuZGxlLCBET01PYmplY3QqIHdyYXBwZXIpIAog
ewogICAgIGFkZFdyYXBwZXIod3JhcHBlcik7CiAgICAgZG9tT2JqZWN0cygpLnNldChvYmplY3RI
YW5kbGUsIHdyYXBwZXIpOwogfQogCi12b2lkIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01P
YmplY3Qodm9pZCogb2JqZWN0SGFuZGxlKQordm9pZCBmb3JnZXRET01PYmplY3Qodm9pZCogb2Jq
ZWN0SGFuZGxlKQogewogICAgIHJlbW92ZVdyYXBwZXIoZG9tT2JqZWN0cygpLnRha2Uob2JqZWN0
SGFuZGxlKSk7CiB9CiAKLUpTTm9kZSogU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU5vZGVGb3JE
b2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpCitKU05vZGUq
IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNOb2Rl
Kj4oZG9tT2JqZWN0cygpLmdldChub2RlKSk7CiAgICAgcmV0dXJuIGRvY3VtZW50LT53cmFwcGVy
Q2FjaGUoKS5nZXQobm9kZSk7CiB9CiAKLXZvaWQgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERP
TU5vZGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIFdlYkNvcmU6Ok5vZGUqIG5vZGUp
Cit2b2lkIGZvcmdldERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQogewog
ICAgIGlmICghZG9jdW1lbnQpIHsKICAgICAgICAgcmVtb3ZlV3JhcHBlcihkb21PYmplY3RzKCku
dGFrZShub2RlKSk7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6
Zm9yZ2V0RE9NTm9kZUZvcgogICAgIHJlbW92ZVdyYXBwZXIoZG9jdW1lbnQtPndyYXBwZXJDYWNo
ZSgpLnRha2Uobm9kZSkpOwogfQogCi12b2lkIFNjcmlwdEludGVycHJldGVyOjpwdXRET01Ob2Rl
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJDb3JlOjpOb2RlKiBub2RlLCBKU05v
ZGUqIHdyYXBwZXIpCit2b2lkIGNhY2hlRE9NTm9kZVdyYXBwZXIoRG9jdW1lbnQqIGRvY3VtZW50
LCBOb2RlKiBub2RlLCBKU05vZGUqIHdyYXBwZXIpCiB7CiAgICAgYWRkV3JhcHBlcih3cmFwcGVy
KTsKICAgICBpZiAoIWRvY3VtZW50KSB7CkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lkIFNjcmlw
dEludGVycHJldGVyOjpwdXRET01Ob2RlRm9yRG9jCiAgICAgZG9jdW1lbnQtPndyYXBwZXJDYWNo
ZSgpLnNldChub2RlLCB3cmFwcGVyKTsKIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6Zm9y
Z2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIGZvcmdl
dEFsbERPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VS
VChkb2N1bWVudCk7CiAgICAgcmVtb3ZlV3JhcHBlcnMoZG9jdW1lbnQtPndyYXBwZXJDYWNoZSgp
KTsKIH0KIAotdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVzRm9yRG9jdW1lbnQo
RG9jdW1lbnQqIGRvYykKK3ZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRv
YykKIHsKICAgICAvLyBJZiBhIG5vZGUncyBKUyB3cmFwcGVyIGhvbGRzIGN1c3RvbSBwcm9wZXJ0
aWVzLCB0aG9zZSBwcm9wZXJ0aWVzIG11c3QKICAgICAvLyBwZXJzaXN0IGV2ZXJ5IHRpbWUgdGhl
IG5vZGUgaXMgZmV0Y2hlZCBmcm9tIHRoZSBET00uIFNvLCB3ZSBrZWVwIEpTCkBAIC0xODYsMzQg
KzE4NiwzNSBAQCB2b2lkIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9kZXNGb3JECiAgICAg
SlNXcmFwcGVyQ2FjaGU6Oml0ZXJhdG9yIG5vZGVFbmQgPSBub2RlRGljdC5lbmQoKTsKICAgICBm
b3IgKEpTV3JhcHBlckNhY2hlOjppdGVyYXRvciBub2RlSXQgPSBub2RlRGljdC5iZWdpbigpOyBu
b2RlSXQgIT0gbm9kZUVuZDsgKytub2RlSXQpIHsKICAgICAgICAgSlNOb2RlKiBqc05vZGUgPSBu
b2RlSXQtPnNlY29uZDsKLSAgICAgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IGpzTm9kZS0+aW1w
bCgpOworICAgICAgICBOb2RlKiBub2RlID0ganNOb2RlLT5pbXBsKCk7CiAKICAgICAgICAgaWYg
KGpzTm9kZS0+bWFya2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBO
byBuZWVkIHRvIHByZXNlcnZlIGEgd3JhcHBlciB0aGF0IGhhcyBubyBjdXN0b20gcHJvcGVydGll
cyBvciBpcyBubwogICAgICAgICAvLyBsb25nZXIgZmV0Y2hhYmxlIHRocm91Z2ggdGhlIERPTS4K
LSAgICAgICAgaWYgKCFqc05vZGUtPmhhc0N1c3RvbVByb3BlcnRpZXMoKSB8fCAhbm9kZS0+aW5E
b2N1bWVudCgpKQorICAgICAgICBpZiAoIWpzTm9kZS0+aGFzQ3VzdG9tUHJvcGVydGllcygpIHx8
ICFub2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vLi4uIHVubGVzcyB0aGUgd3Jh
cHBlciB3cmFwcyBhIGxvYWRpbmcgaW1hZ2UsIHNpbmNlIHRoZSAibmV3IEltYWdlIgogICAgICAg
ICAgICAgLy8gc3ludGF4IGFsbG93cyBhbiBvcnBoYW4gaW1hZ2Ugd3JhcHBlciB0byBiZSB0aGUg
bGFzdCByZWZlcmVuY2UKICAgICAgICAgICAgIC8vIHRvIGEgbG9hZGluZyBpbWFnZSwgd2hvc2Ug
bG9hZCBldmVudCBtaWdodCBoYXZlIGltcG9ydGFudCBzaWRlLWVmZmVjdHMuCiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSB8fCBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRFdmVudCgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAganNOb2RlLT5tYXJrKCk7CiAgICAgfQogfQog
Ci12b2lkIFNjcmlwdEludGVycHJldGVyOjp1cGRhdGVET01Ob2RlRG9jdW1lbnQoV2ViQ29yZTo6
Tm9kZSogbm9kZSwgRG9jdW1lbnQqIG9sZERvYywgRG9jdW1lbnQqIG5ld0RvYykKK3ZvaWQgdXBk
YXRlRE9NTm9kZURvY3VtZW50KE5vZGUqIG5vZGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9j
dW1lbnQqIG5ld0RvY3VtZW50KQogewotICAgIEFTU0VSVChvbGREb2MgIT0gbmV3RG9jKTsKLSAg
ICBKU05vZGUqIHdyYXBwZXIgPSBnZXRET01Ob2RlRm9yRG9jdW1lbnQob2xkRG9jLCBub2RlKTsK
LSAgICBpZiAod3JhcHBlcikgewotICAgICAgICByZW1vdmVXcmFwcGVyKHdyYXBwZXIpOwotICAg
ICAgICBwdXRET01Ob2RlRm9yRG9jdW1lbnQobmV3RG9jLCBub2RlLCB3cmFwcGVyKTsKLSAgICAg
ICAgZm9yZ2V0RE9NTm9kZUZvckRvY3VtZW50KG9sZERvYywgbm9kZSk7Ci0gICAgICAgIGFkZFdy
YXBwZXIod3JhcHBlcik7Ci0gICAgfQorICAgIEFTU0VSVChvbGREb2N1bWVudCAhPSBuZXdEb2N1
bWVudCk7CisgICAgSlNOb2RlKiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIob2xk
RG9jdW1lbnQsIG5vZGUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAg
IHJlbW92ZVdyYXBwZXIod3JhcHBlcik7CisgICAgY2FjaGVET01Ob2RlV3JhcHBlcihuZXdEb2N1
bWVudCwgbm9kZSwgd3JhcHBlcik7CisgICAgZm9yZ2V0RE9NTm9kZShvbGREb2N1bWVudCwgbm9k
ZSk7CisgICAgYWRkV3JhcHBlcih3cmFwcGVyKTsKIH0KIAogSlNWYWx1ZSoganNTdHJpbmdPck51
bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCkBAIC0zNzIsNCArMzczLDE3IEBA
IEV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbU5vZGUoTm9kZSogbm9kZSkKICAgICByZXR1cm4gZnJh
bWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogfQogCitKU0M6OlN0
cnVjdHVyZUlEKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAm
IHN0cnVjdHVyZXMgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnN0cnVjdHVyZXMoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xh
c3NJbmZvKS5nZXQoKTsKK30KKworSlNDOjpTdHJ1Y3R1cmVJRCogY3JlYXRlRE9NU3RydWN0dXJl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvLCBK
U0M6OkpTT2JqZWN0KiBwcm90b3R5cGUpCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVj
dHVyZXMgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnN0cnVjdHVyZXMoKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xh
c3NJbmZvKSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgU3RydWN0dXJl
SUQ6OmNyZWF0ZShwcm90b3R5cGUpKS5maXJzdC0+c2Vjb25kLmdldCgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlz
aW9uIDM2NjQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xhc3MgRXZlbnQ7
CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBOb2RlOwpAQCAt
NjEsNjAgKzU5LDExMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICB9OwogCi0g
ICAgY2xhc3MgU2NyaXB0SW50ZXJwcmV0ZXIgOiBwdWJsaWMgSlNDOjpJbnRlcnByZXRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgRE9NT2JqZWN0KiBnZXRET01PYmplY3Qodm9pZCog
b2JqZWN0SGFuZGxlKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0RE9NT2JqZWN0KHZvaWQqIG9i
amVjdEhhbmRsZSwgRE9NT2JqZWN0Kik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldERPTU9i
amVjdCh2b2lkKiBvYmplY3RIYW5kbGUpOwotCi0gICAgICAgIHN0YXRpYyBKU05vZGUqIGdldERP
TU5vZGVGb3JEb2N1bWVudChEb2N1bWVudCosIE5vZGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
cHV0RE9NTm9kZUZvckRvY3VtZW50KERvY3VtZW50KiwgTm9kZSosIEpTTm9kZSogbm9kZVdyYXBw
ZXIpOwotICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRET01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1l
bnQqLCBOb2RlKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldEFsbERPTU5vZGVzRm9yRG9j
dW1lbnQoRG9jdW1lbnQqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlRE9NTm9kZURvY3Vt
ZW50KE5vZGUqLCBEb2N1bWVudCogb2xkRG9jLCBEb2N1bWVudCogbmV3RG9jKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB9Owor
ICAgIERPTU9iamVjdCogZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcih2b2lkKiBvYmplY3RIYW5k
bGUpOworICAgIHZvaWQgY2FjaGVET01PYmplY3RXcmFwcGVyKHZvaWQqIG9iamVjdEhhbmRsZSwg
RE9NT2JqZWN0KiB3cmFwcGVyKTsKKyAgICB2b2lkIGZvcmdldERPTU9iamVjdCh2b2lkKiBvYmpl
Y3RIYW5kbGUpOworCisgICAgSlNOb2RlKiBnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihEb2N1bWVu
dCosIE5vZGUqKTsKKyAgICB2b2lkIGNhY2hlRE9NTm9kZVdyYXBwZXIoRG9jdW1lbnQqLCBOb2Rl
KiwgSlNOb2RlKiB3cmFwcGVyKTsKKyAgICB2b2lkIGZvcmdldERPTU5vZGUoRG9jdW1lbnQqLCBO
b2RlKik7CisgICAgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50Kik7
CisgICAgdm9pZCB1cGRhdGVET01Ob2RlRG9jdW1lbnQoTm9kZSosIERvY3VtZW50KiBvbGREb2N1
bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KTsKKyAgICB2b2lkIG1hcmtET01Ob2Rlc0ZvckRv
Y3VtZW50KERvY3VtZW50Kik7CisKKyAgICBKU0M6OlN0cnVjdHVyZUlEKiBnZXRDYWNoZWRET01T
dHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOworICAgIEpT
Qzo6U3RydWN0dXJlSUQqIGNyZWF0ZURPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvKiwgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKTsKKworICAgIHRlbXBs
YXRlPGNsYXNzIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlSUQqIGdldERPTVN0
cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIGlmIChKU0M6OlN0
cnVjdHVyZUlEKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoZXhlYywgJldyYXBw
ZXJDbGFzczo6c19pbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgICAg
IHJldHVybiBjcmVhdGVET01TdHJ1Y3R1cmUoZXhlYywgJldyYXBwZXJDbGFzczo6c19pbmZvLCBX
cmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVjKSk7CisgICAgfQorICAgIHRlbXBsYXRl
PGNsYXNzIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlw
ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU0M6OkpTT2JqZWN0Kj4oZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYyktPnN0
b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CiAKLSAgICAvLyBSZXRyaWV2ZSBmcm9tIGNhY2hlLCBv
ciBjcmVhdGUsIGEgSlMgd3JhcHBlciBmb3IgYSBET00gb2JqZWN0LgotICAgIHRlbXBsYXRlPGNs
YXNzIERPTU9iaiwgY2xhc3MgSlNET01PYmosIGNsYXNzIEpTRE9NT2JqUHJvdG90eXBlPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlKiBjYWNoZURPTU9iamVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9N
T2JqKiBkb21PYmopCisgICAgI2RlZmluZSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMs
IGNsYXNzTmFtZSwgb2JqZWN0KSBjcmVhdGVET01PYmplY3RXcmFwcGVyPEpTIyNjbGFzc05hbWU+
KGV4ZWMsIHN0YXRpY19jYXN0PGNsYXNzTmFtZSo+KG9iamVjdCkpCisgICAgdGVtcGxhdGU8Y2xh
c3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIERPTU9iamVjdCogY3JlYXRl
RE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICBBU1NFUlQoIWdldENhY2hl
ZERPTU9iamVjdFdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgIFdyYXBwZXJDbGFzcyogd3JhcHBl
ciA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+
KGV4ZWMpLCBvYmplY3QpOworICAgICAgICBjYWNoZURPTU9iamVjdFdyYXBwZXIob2JqZWN0LCB3
cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorICAgIHRlbXBsYXRlPGNs
YXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUqIGdl
dERPTU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmplY3Qp
CiAgICAgewotICAgICAgICBpZiAoIWRvbU9iaikKKyAgICAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgaWYgKERPTU9iamVjdCogcmV0
ID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChkb21PYmopKQotICAgICAgICAgICAg
cmV0dXJuIHJldDsKLSAgICAgICAgRE9NT2JqZWN0KiByZXQgPSBuZXcgKGV4ZWMpIEpTRE9NT2Jq
KEpTRE9NT2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBkb21PYmopOwotICAgICAgICBTY3JpcHRJ
bnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KGRvbU9iaiwgcmV0KTsKLSAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1
cm4gY3JlYXRlRE9NT2JqZWN0V3JhcHBlcjxXcmFwcGVyQ2xhc3M+KGV4ZWMsIG9iamVjdCk7CiAg
ICAgfQogCiAjaWYgRU5BQkxFKFNWRykKLSAgICAvLyBSZXRyaWV2ZSBmcm9tIGNhY2hlLCBvciBj
cmVhdGUsIGEgSlMgd3JhcHBlciBmb3IgYW4gU1ZHIERPTSBvYmplY3QuCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRE9NT2JqLCBjbGFzcyBKU0RPTU9iaiwgY2xhc3MgSlNET01PYmpQcm90b3R5cGU+IGlu
bGluZSBKU0M6OkpTVmFsdWUqIGNhY2hlU1ZHRE9NT2JqZWN0KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBET01PYmoqIGRvbU9iaiwgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICAjZGVmaW5lIENSRUFU
RV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgY2xhc3NOYW1lLCBvYmplY3QsIGNvbnRleHQpIGNy
ZWF0ZURPTU9iamVjdFdyYXBwZXI8SlMjI2NsYXNzTmFtZT4oZXhlYywgc3RhdGljX2Nhc3Q8Y2xh
c3NOYW1lKj4ob2JqZWN0KSwgY29udGV4dCkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xh
c3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgRE9NT2JqZWN0KiBjcmVhdGVET01PYmplY3RXcmFw
cGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogb2JqZWN0LCBTVkdFbGVtZW50KiBj
b250ZXh0KQogICAgIHsKLSAgICAgICAgaWYgKCFkb21PYmopCisgICAgICAgIEFTU0VSVChvYmpl
Y3QpOworICAgICAgICBBU1NFUlQoIWdldENhY2hlZERPTU9iamVjdFdyYXBwZXIob2JqZWN0KSk7
CisgICAgICAgIFdyYXBwZXJDbGFzcyogd3JhcHBlciA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNz
KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMpLCBvYmplY3QsIGNvbnRleHQpOwor
ICAgICAgICBjYWNoZURPTU9iamVjdFdyYXBwZXIob2JqZWN0LCB3cmFwcGVyKTsKKyAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgfQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywg
Y2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUqIGdldERPTU9iamVjdFdyYXBwZXIo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICBpZiAoRE9NT2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRl
cjo6Z2V0RE9NT2JqZWN0KGRvbU9iaikpCi0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAg
ICBET01PYmplY3QqIHJldCA9IG5ldyAoZXhlYykgSlNET01PYmooSlNET01PYmpQcm90b3R5cGU6
OnNlbGYoZXhlYyksIGRvbU9iaiwgY29udGV4dCk7Ci0gICAgICAgIFNjcmlwdEludGVycHJldGVy
OjpwdXRET01PYmplY3QoZG9tT2JqLCByZXQpOwotICAgICAgICByZXR1cm4gcmV0OworICAgICAg
ICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihvYmpl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiBjcmVhdGVE
T01PYmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgb2JqZWN0LCBjb250ZXh0KTsKICAg
ICB9CiAjZW5kaWYKIAorICAgICNkZWZpbmUgQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywg
Y2xhc3NOYW1lLCBvYmplY3QpIGNyZWF0ZURPTU5vZGVXcmFwcGVyPEpTIyNjbGFzc05hbWU+KGV4
ZWMsIHN0YXRpY19jYXN0PGNsYXNzTmFtZSo+KG9iamVjdCkpCisgICAgdGVtcGxhdGU8Y2xhc3Mg
V3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTTm9kZSogY3JlYXRlRE9NTm9k
ZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBub2RlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBBU1NFUlQoIWdldENhY2hlZERPTU5vZGVXcmFw
cGVyKG5vZGUtPmRvY3VtZW50KCksIG5vZGUpKTsKKyAgICAgICAgV3JhcHBlckNsYXNzKiB3cmFw
cGVyID0gbmV3IChleGVjKSBXcmFwcGVyQ2xhc3MoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFz
cz4oZXhlYyksIG5vZGUpOworICAgICAgICBjYWNoZURPTU5vZGVXcmFwcGVyKG5vZGUtPmRvY3Vt
ZW50KCksIG5vZGUsIHdyYXBwZXIpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSogZ2V0RE9NTm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNs
YXNzKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisgICAgICAgIGlmIChKU05vZGUqIHdyYXBwZXIgPSBnZXRDYWNoZWRE
T01Ob2RlV3JhcHBlcihub2RlLT5kb2N1bWVudCgpLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgICAgICByZXR1cm4gY3JlYXRlRE9NTm9kZVdyYXBwZXI8V3JhcHBlckNs
YXNzPihleGVjLCBub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHRlbXBsYXRl
IG1ldGhvZCByZXRyaWV2ZXMgb3IgY3JlYXRlIGFuIG9iamVjdCB0aGF0IGlzIHVuaXF1ZQorICAg
ICAqIChmb3IgYSBnaXZlbiBnbG9iYWwgb2JqZWN0KSBUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNh
bGxlZCAoZm9yIGEgZ2l2ZW4KKyAgICAgKiBwcm9wZXJ0eSBuYW1lKSwgdGhlIE9iamVjdCB3aWxs
IGJlIGNvbnN0cnVjdGVkLCBhbmQgc2V0IGFzIGEgcHJvcGVydHkKKyAgICAgKiBvZiB0aGUgZ2xv
YmFsIG9iamVjdC4gTGF0ZXIgY2FsbHMgd2lsbCBzaW1wbHkgcmV0cmlldmUgdGhhdCBjYWNoZWQg
b2JqZWN0LiAKKyAgICAgKiBOb3RlIHRoYXQgdGhlIG9iamVjdCBjb25zdHJ1Y3RvciBtdXN0IHRh
a2UgMSBhcmd1bWVudCwgZXhlYy4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgV3JhcHBl
ckNsYXNzPiBpbmxpbmUgV3JhcHBlckNsYXNzKiBjYWNoZUdsb2JhbE9iamVjdChKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisgICAgewor
ICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSogb2JqID0gZ2xvYmFsT2JqZWN0
LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKG9iaikgeworICAgICAgICAg
ICAgQVNTRVJUKG9iai0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V3JhcHBlckNsYXNzKj4ob2JqKTsKKyAgICAgICAgfQorICAgICAgICBXcmFwcGVyQ2xhc3Mq
IG5ld09iamVjdCA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKGV4ZWMpOworICAgICAgICBnbG9i
YWxPYmplY3QtPnB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIG5ld09iamVjdCwgSlNDOjpEb250RW51
bSk7CisgICAgICAgIHJldHVybiBuZXdPYmplY3Q7CisgICAgfQorCiAgICAgLy8gQ29udmVydCBh
IERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRpb24gY29kZSBpbnRvIGEgSmF2YVNjcmlwdCBleGNl
cHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KICAgICB2b2lkIHNldERPTUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwogCi0gICAgLy8gSGVscGVyIGNsYXNzIHRv
IGNhbGwgc2V0RE9NRXhjZXB0aW9uIG9uIGV4aXQgd2l0aG91dCBhZGRpbmcgbG90cyBvZiBzZXBh
cmF0ZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLgotICAgIGNsYXNzIERPTUV4Y2VwdGlvblRyYW5z
bGF0b3IgOiBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBET01F
eGNlcHRpb25UcmFuc2xhdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjKSA6IG1fZXhlYyhleGVjKSwg
bV9jb2RlKDApIHsgfQotICAgICAgICB+RE9NRXhjZXB0aW9uVHJhbnNsYXRvcigpIHsgc2V0RE9N
RXhjZXB0aW9uKG1fZXhlYywgbV9jb2RlKTsgfQotICAgICAgICBvcGVyYXRvciBFeGNlcHRpb25D
b2RlJigpIHsgcmV0dXJuIG1fY29kZTsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6RXhl
Y1N0YXRlKiBtX2V4ZWM7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgbV9jb2RlOwotICAgIH07Ci0K
ICAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJik7IC8vIG51bGwgaWYgdGhlIHN0cmluZyBpcyBudWxsCiAgICAgSlNDOjpKU1ZhbHVl
KiBqc1N0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEtVUkwmKTsgLy8gbnVsbCBp
ZiB0aGUgVVJMIGlzIG51bGwKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxMiBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLSAg
ICBjbGFzcyBFeGVjU3RhdGU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEF0b21pY1N0cmluZzsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRE9NV2luZG93
VGltZXI7CisgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSlNE
T01XaW5kb3c7CiAgICAgY2xhc3MgSlNET01XaW5kb3dTaGVsbDsKQEAgLTQ3LDYgKzQ0LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNET01XaW5kb3dCYXNlUHJpdmF0ZTsK
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBKU0M6OkNsYXNzSW5mbyosIFJlZlB0cjxKU0M6
OlN0cnVjdHVyZUlEPiA+IEpTRE9NU3RydWN0dXJlTWFwOworCiAgICAgLy8gVGhpcyBpcyB0aGUg
b25seSBXZWJDb3JlIEpTIGJpbmRpbmcgd2hpY2ggZG9lcyBub3QgaW5oZXJpdCBmcm9tIERPTU9i
amVjdAogICAgIGNsYXNzIEpTRE9NV2luZG93QmFzZSA6IHB1YmxpYyBKU0M6OkpTR2xvYmFsT2Jq
ZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU0M6OkpTR2xvYmFsT2JqZWN0IEJhc2U7CkBAIC0xMjgs
NiArMTI3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2xlYXJBbGxU
aW1lb3V0cygpOwogCisgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyBy
ZXR1cm4gZCgpLT5zdHJ1Y3R1cmVzOyB9CisKICAgICAgICAgZW51bSB7CiAgICAgICAgICAgICAv
LyBBdHRyaWJ1dGVzCiAgICAgICAgICAgICBDcnlwdG8sIEV2ZW50XywKQEAgLTE0NCwxMyArMTQ1
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE9uV2ViS2l0VHJhbnNpdGlv
bkVuZCwKIAogICAgICAgICAgICAgLy8gQ29uc3RydWN0b3JzCi0gICAgICAgICAgICBBdWRpbywg
SW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsCi0gICAgICAgICAgICBYU0xUUHJvY2Vzc29y
CisgICAgICAgICAgICBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsIFhTTFRQ
cm9jZXNzb3IKICAgICAgICAgfTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0RP
TVdpbmRvd0Jhc2VEYXRhIDogcHVibGljIEpTR2xvYmFsT2JqZWN0RGF0YSB7Ci0gICAgICAgICAg
ICBKU0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3dfLCBKU0RP
TVdpbmRvd0Jhc2UqIGpzV2luZG93XywgSlNET01XaW5kb3dTaGVsbCogc2hlbGxfKTsKKyAgICAg
ICAgICAgIEpTRE9NV2luZG93QmFzZURhdGEoUGFzc1JlZlB0cjxET01XaW5kb3c+LCBKU0RPTVdp
bmRvd0Jhc2UqLCBKU0RPTVdpbmRvd1NoZWxsKik7CiAKICAgICAgICAgICAgIFJlZlB0cjxET01X
aW5kb3c+IGltcGw7CiAKQEAgLTE2NCw2ICsxNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERPTVdpbmRvd1RpbWVyKj4gVGltZW91
dHNNYXA7CiAgICAgICAgICAgICBUaW1lb3V0c01hcCB0aW1lb3V0czsKKworICAgICAgICAgICAg
SlNET01TdHJ1Y3R1cmVNYXAgc3RydWN0dXJlczsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAg
ICAgIEpTQzo6SlNWYWx1ZSogZ2V0TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBzdGF0aWMgdm9pZCBtYXJrRE9NT2JqZWN0V3JhcHBlcih2b2lkKiBvCiB7CiAgICAgaWYgKCFv
YmplY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBET01PYmplY3QqIHdyYXBwZXIgPSBTY3JpcHRJ
bnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KG9iamVjdCk7CisgICAgRE9NT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihvYmplY3QpOwogICAgIGlmICghd3JhcHBlciB8
fCB3cmFwcGVyLT5tYXJrZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZXItPm1hcmso
KTsKQEAgLTQ4LDcgKzQ4LDYgQEAgc3RhdGljIHZvaWQgbWFya0RPTU9iamVjdFdyYXBwZXIodm9p
ZCogbwogCiB2b2lkIEpTRE9NV2luZG93OjptYXJrKCkKIHsKLSAgICBCYXNlOjptYXJrKCk7CiAg
ICAgbWFya0RPTU9iamVjdFdyYXBwZXIoaW1wbCgpLT5vcHRpb25hbENvbnNvbGUoKSk7CiAgICAg
bWFya0RPTU9iamVjdFdyYXBwZXIoaW1wbCgpLT5vcHRpb25hbEhpc3RvcnkoKSk7CiAgICAgbWFy
a0RPTU9iamVjdFdyYXBwZXIoaW1wbCgpLT5vcHRpb25hbExvY2F0aW9uYmFyKCkpOwpAQCAtNjgs
NiArNjcsMTIgQEAgdm9pZCBKU0RPTVdpbmRvdzo6bWFyaygpCiAjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihpbXBsKCktPm9wdGlv
bmFsQXBwbGljYXRpb25DYWNoZSgpKTsKICNlbmRpZgorCisgICAgSlNET01TdHJ1Y3R1cmVNYXA6
Oml0ZXJhdG9yIGVuZCA9IHN0cnVjdHVyZXMoKS5lbmQoKTsKKyAgICBmb3IgKEpTRE9NU3RydWN0
dXJlTWFwOjppdGVyYXRvciBpdCA9IHN0cnVjdHVyZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIGl0LT5zZWNvbmQtPm1hcmsoKTsKKworICAgIEJhc2U6Om1hcmsoKTsKIH0K
IAogYm9vbCBKU0RPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NjQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEpTRG9jdW1lbnQ6Om1hcmsoKQogewogICAgIEpTRXZl
bnRUYXJnZXROb2RlOjptYXJrKCk7Ci0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6Om1hcmtET01Ob2Rl
c0ZvckRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKSk7CisgICAgbWFya0RP
TU5vZGVzRm9yRG9jdW1lbnQoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBsKCkpKTsKIH0KIAog
SlNWYWx1ZSogSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAt
MTA2LDM3ICsxMDYsMzUgQEAgSlNWYWx1ZSogSlNEb2N1bWVudDo6cXVlcnlTZWxlY3RvckFsbChF
eAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBEb2N1bWVudCogZG9jKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50
KiBkb2N1bWVudCkKIHsKLSAgICBpZiAoIWRvYykKKyAgICBpZiAoIWRvY3VtZW50KQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RvY3VtZW50KiByZXQgPSBzdGF0aWNfY2FzdDxK
U0RvY3VtZW50Kj4oU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChkb2MpKTsKLSAgICBp
ZiAocmV0KQotICAgICAgICByZXR1cm4gcmV0OworICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIoZG9jdW1lbnQpOworICAgIGlmICh3cmFwcGVyKQorICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKIAotICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCi0g
ICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNIVE1MRG9jdW1lbnQoSlNIVE1MRG9jdW1lbnRQcm90
b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvYykpOworICAg
IGlmIChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgd3JhcHBlciA9IENSRUFU
RV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgSFRNTERvY3VtZW50LCBkb2N1bWVudCk7CiAjaWYg
RU5BQkxFKFNWRykKLSAgICBlbHNlIGlmIChkb2MtPmlzU1ZHRG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU1NWR0RvY3VtZW50KEpTU1ZHRG9jdW1lbnRQcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oZG9jKSk7CisgICAgZWxzZSBpZiAo
ZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01f
T0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHRG9jdW1lbnQsIGRvY3VtZW50KTsKICNlbmRpZgogICAg
IGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0RvY3VtZW50KEpTRG9jdW1lbnRQcm90
b3R5cGU6OnNlbGYoZXhlYyksIGRvYyk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09C
SkVDVF9XUkFQUEVSKGV4ZWMsIERvY3VtZW50LCBkb2N1bWVudCk7CiAKICAgICAvLyBNYWtlIHN1
cmUgdGhlIGRvY3VtZW50IGlzIGtlcHQgYXJvdW5kIGJ5IHRoZSB3aW5kb3cgb2JqZWN0LCBhbmQg
d29ya3MgcmlnaHQgd2l0aCB0aGUKICAgICAvLyBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgaWYg
KCFkb2MtPmZyYW1lKCkpIHsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAg
IHNpemVfdCBub2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBkb2M7IG47IG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCisgICAgICAgIGZvciAoTm9kZSogbiA9IGRvY3VtZW50
OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKQogICAgICAgICAgICAgbm9kZUNvdW50Kys7
CiAgICAgICAgIAogICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChu
b2RlQ291bnQgKiBzaXplb2YoTm9kZSkpOwogICAgIH0KIAotICAgIFNjcmlwdEludGVycHJldGVy
OjpwdXRET01PYmplY3QoZG9jLCByZXQpOwotCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4g
d3JhcHBlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywyMyAr
MTYzLDE5IEBAIEpTVmFsdWUqIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGUKICAgICBp
ZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEFTU0VSVCghU2Ny
aXB0SW50ZXJwcmV0ZXI6OmdldERPTU5vZGVGb3JEb2N1bWVudChlbGVtZW50LT5kb2N1bWVudCgp
LCBlbGVtZW50KSk7Ci0gICAgCi0gICAgRG9jdW1lbnQqIGRvYyA9IGVsZW1lbnQtPmRvY3VtZW50
KCk7Ci0gICAgSlNOb2RlKiByZXQgPSAwOwotICAgIAorICAgIEFTU0VSVCghZ2V0Q2FjaGVkRE9N
Tm9kZVdyYXBwZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSwgZWxlbWVudCkpOworCisgICAgSlNOb2Rl
KiB3cmFwcGVyOyAgICAgICAgCiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0ID0gY3JlYXRlSlNIVE1MV3JhcHBlcihleGVjLCBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KGVsZW1lbnQpKTsKKyAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIo
ZXhlYywgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSk7CiAjaWYgRU5BQkxFKFNW
RykKICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0ID0g
Y3JlYXRlSlNTVkdXcmFwcGVyKGV4ZWMsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50
KSk7CisgICAgICAgIHdyYXBwZXIgPSBjcmVhdGVKU1NWR1dyYXBwZXIoZXhlYywgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpKTsKICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgcmV0
ID0gbmV3IChleGVjKSBKU0VsZW1lbnQoSlNFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBl
bGVtZW50KTsKLQotICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01Ob2RlRm9yRG9jdW1lbnQo
ZG9jLCBlbGVtZW50LCByZXQpOworICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RFX1dS
QVBQRVIoZXhlYywgRWxlbWVudCwgZWxlbWVudCk7CiAKLSAgICByZXR1cm4gcmV0OyAgICAKKyAg
ICByZXR1cm4gd3JhcHBlcjsgICAgCiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NjQ4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQsNTAgKzg0LDQ5IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCog
ZXYKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBET01P
YmplY3QqIHJldCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoZXZlbnQpOwotICAg
IGlmIChyZXQpCi0gICAgICAgIHJldHVybiByZXQ7CisgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihldmVudCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAg
ICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkgewogICAg
ICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICAgICAgcmV0ID0gbmV3
IChleGVjKSBKU0tleWJvYXJkRXZlbnQoSlNLZXlib2FyZEV2ZW50UHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAgIHdy
YXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIEtleWJvYXJkRXZlbnQsIGV2
ZW50KTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkpCi0gICAgICAgICAg
ICByZXQgPSBuZXcgKGV4ZWMpIEpTVGV4dEV2ZW50KEpTVGV4dEV2ZW50UHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkpOworICAgICAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgVGV4dEV2ZW50LCBldmVudCk7
CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKLSAgICAgICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNNb3VzZUV2ZW50KEpTTW91c2VFdmVudFByb3RvdHlwZTo6c2VsZihl
eGVjKSwgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICB3cmFw
cGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBNb3VzZUV2ZW50LCBldmVudCk7
CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1doZWVsRXZlbnQoKSkKLSAgICAgICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNXaGVlbEV2ZW50KEpTV2hlZWxFdmVudFByb3RvdHlwZTo6c2VsZihl
eGVjKSwgc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICB3cmFw
cGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBXaGVlbEV2ZW50LCBldmVudCk7
CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzU1ZHWm9vbUV2ZW50
KCkpCi0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTU1ZHWm9vbUV2ZW50KEpTU1ZHWm9v
bUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkdab29tRXZlbnQqPihl
dmVudCksIDApOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9TVkdfT0JKRUNUX1dSQVBQ
RVIoZXhlYywgU1ZHWm9vbUV2ZW50LCBldmVudCwgMCk7CiAjZW5kaWYKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1VJRXZlbnQoSlNVSUV2ZW50UHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFVJRXZlbnQsIGV2ZW50
KTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKLSAgICAgICAgcmV0
ID0gbmV3IChleGVjKSBKU011dGF0aW9uRXZlbnQoSlNNdXRhdGlvbkV2ZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAg
d3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgTXV0YXRpb25FdmVudCwg
ZXZlbnQpOwogICAgIGVsc2UgaWYgKGV2ZW50LT5pc092ZXJmbG93RXZlbnQoKSkKLSAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU092ZXJmbG93RXZlbnQoSlNPdmVyZmxvd0V2ZW50UHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKTsKKyAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgT3ZlcmZsb3dFdmVu
dCwgZXZlbnQpOwogICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQotICAgICAg
ICByZXQgPSBuZXcgKGV4ZWMpIEpTTWVzc2FnZUV2ZW50KEpTTWVzc2FnZUV2ZW50UHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQqPihldmVudCkpOworICAgICAg
ICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBNZXNzYWdlRXZlbnQs
IGV2ZW50KTsKICAgICBlbHNlIGlmIChldmVudC0+aXNQcm9ncmVzc0V2ZW50KCkpIHsKICAgICAg
ICAgaWYgKGV2ZW50LT5pc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpKQotICAgICAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChKU1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAgIHdyYXBw
ZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudCwgZXZlbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXQgPSBuZXcgKGV4
ZWMpIEpTUHJvZ3Jlc3NFdmVudChKU1Byb2dyZXNzRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyks
IHN0YXRpY19jYXN0PFByb2dyZXNzRXZlbnQqPihldmVudCkpOworICAgICAgICAgICAgd3JhcHBl
ciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgUHJvZ3Jlc3NFdmVudCwgZXZlbnQp
OwogICAgIH0KICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgZWxzZSBpZiAoZXZlbnQtPmlz
U3RvcmFnZUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNTdG9yYWdlRXZlbnQo
SlNTdG9yYWdlRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFN0b3JhZ2VF
dmVudCo+KGV2ZW50KSk7CisgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQ
UEVSKGV4ZWMsIFN0b3JhZ2VFdmVudCwgZXZlbnQpOwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXZl
bnQtPmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBK
U1dlYktpdEFuaW1hdGlvbkV2ZW50KEpTV2ViS2l0QW5pbWF0aW9uRXZlbnRQcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PFdlYktpdEFuaW1hdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAg
ICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgV2ViS2l0QW5p
bWF0aW9uRXZlbnQsIGV2ZW50KTsKICAgICBlbHNlIGlmIChldmVudC0+aXNXZWJLaXRUcmFuc2l0
aW9uRXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1dlYktpdFRyYW5zaXRpb25F
dmVudChKU1dlYktpdFRyYW5zaXRpb25FdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGlj
X2Nhc3Q8V2ViS2l0VHJhbnNpdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgd3JhcHBlciA9
IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgV2ViS2l0VHJhbnNpdGlvbkV2ZW50LCBl
dmVudCk7CiAgICAgZWxzZQotICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRXZlbnQoSlNFdmVu
dFByb3RvdHlwZTo6c2VsZihleGVjKSwgZXZlbnQpOworICAgICAgICB3cmFwcGVyID0gQ1JFQVRF
X0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBFdmVudCwgZXZlbnQpOwogCi0gICAgU2NyaXB0SW50
ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChldmVudCwgcmV0KTsKLSAgICByZXR1cm4gcmV0OworICAg
IHJldHVybiB3cmFwcGVyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcAkocmV2aXNpb24gMzY2NDgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYxLDggKzE2MSwxMCBAQCBKU1ZhbHVlKiBqc0V2ZW50VGFyZ2V0RGlzcGF0Y2hFdmVu
dChFeGVjCiAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUo
ZXhlYywgdGhpc1ZhbHVlLCBldmVudE5vZGUsIGV2ZW50VGFyZ2V0KSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpOwotICAgIHJldHVybiBqc0Jvb2xlYW4oZXZlbnRUYXJnZXQtPmRp
c3BhdGNoRXZlbnQodG9FdmVudChhcmdzLmF0KGV4ZWMsIDApKSwgZXhjZXB0aW9uKSk7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGV2
ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHRvRXZlbnQoYXJncy5hdChleGVjLCAwKSksIGVjKSk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUZvclByb3BlcnR5VG9rZW4oaW50IHRva2Vu
KQpAQCAtMjcxLDcgKzI3Myw3IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVu
dFRhcmcKIAogICAgIGlmIChYTUxIdHRwUmVxdWVzdCogeGhyID0gdGFyZ2V0LT50b1hNTEh0dHBS
ZXF1ZXN0KCkpCiAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBjcmVhdGVkIHZp
YSBKUywgc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgotICAg
ICAgICByZXR1cm4gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh4aHIpOworICAgICAg
ICByZXR1cm4gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcih4aHIpOwogCiAgICAgaWYgKFhNTEh0
dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3RVcGxvYWQo
KSkKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgdXBsb2FkKTsKQEAgLTI3OSw3ICsyODEsNyBA
QCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBpZiAoRE9NQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQogICAgICAgICAvLyBET01BcHBs
aWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBKUywgc28gd2UgZG9uJ3QgbmVlZCB0
byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgotICAgICAgICByZXR1cm4gU2NyaXB0SW50ZXJw
cmV0ZXI6OmdldERPTU9iamVjdChjYWNoZSk7CisgICAgICAgIHJldHVybiBnZXRDYWNoZWRET01P
YmplY3RXcmFwcGVyKGNhY2hlKTsKICNlbmRpZgogICAgIAogICAgIC8vIFRoZXJlIGFyZSB0d28g
a2luZHMgb2YgRXZlbnRUYXJnZXRzOiBFdmVudFRhcmdldE5vZGUgYW5kIFhNTEh0dHBSZXF1ZXN0
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlz
aW9uIDM2NjQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
QVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0V2ZW50VGFyZ2V0Tm9kZSkKIAotSlNFdmVudFRh
cmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKEpTT2JqZWN0KiBwcm90b3R5cGUsIE5vZGUqIG5v
ZGUpCi0gICAgOiBKU05vZGUocHJvdG90eXBlLCBub2RlKQorSlNFdmVudFRhcmdldE5vZGU6OkpT
RXZlbnRUYXJnZXROb2RlKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmUsIE5vZGUqIG5vZGUpCisgICAg
OiBKU05vZGUoc3RydWN0dXJlLCBub2RlKQogewogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0Tm9kZSA6IHB1
YmxpYyBKU05vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNFdmVudFRhcmdldE5vZGUoSlND
OjpKU09iamVjdCogcHJvdG90eXBlLCBOb2RlKik7CisgICAgICAgIEpTRXZlbnRUYXJnZXROb2Rl
KEpTQzo6U3RydWN0dXJlSUQqLCBOb2RlKik7CiAKICAgICAgICAgdm9pZCBzZXRMaXN0ZW5lcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFs
dWUqIGZ1bmMpIGNvbnN0OwogICAgICAgICBKU0M6OkpTVmFsdWUqIGdldExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTSFRNTEFsbENvbGxlY3Rp
b24gOiBwdWJsaWMgSlNIVE1MQ29sbGVjdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBKU0hU
TUxBbGxDb2xsZWN0aW9uKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgSFRNTENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24pCi0gICAgICAgICAgICA6IEpTSFRNTENvbGxlY3Rpb24ocHJvdG90eXBlLCBj
b2xsZWN0aW9uKQorICAgICAgICBKU0hUTUxBbGxDb2xsZWN0aW9uKEpTQzo6U3RydWN0dXJlSUQq
IHN0cnVjdHVyZSwgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCisgICAgICAgICAgICA6IEpT
SFRNTENvbGxlY3Rpb24oc3RydWN0dXJlLCBjb2xsZWN0aW9uKQogICAgICAgICB7CiAgICAgICAg
IH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29s
bGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNywyNSArMTI3LDI1IEBAIEpT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBIVE1MQ29sbGUKICAgICBpZiAoIWNvbGxlY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIERPTU9iamVjdCogcmV0ID0gU2Ny
aXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChjb2xsZWN0aW9uKTsKKyAgICBET01PYmplY3Qq
IHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGNvbGxlY3Rpb24pOwogCi0gICAg
aWYgKHJldCkKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICBpZiAod3JhcHBlcikKKyAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CiAKICAgICBzd2l0Y2ggKGNvbGxlY3Rpb24tPnR5cGUoKSkgewogICAg
ICAgICBjYXNlIEhUTUxDb2xsZWN0aW9uOjpTZWxlY3RPcHRpb25zOgotICAgICAgICAgICAgcmV0
ID0gbmV3IChleGVjKSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbihKU0hUTUxPcHRpb25zQ29sbGVj
dGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JK
RUNUX1dSQVBQRVIoZXhlYywgSFRNTE9wdGlvbnNDb2xsZWN0aW9uLCBjb2xsZWN0aW9uKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhUTUxDb2xsZWN0aW9uOjpEb2NBbGw6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTSFRNTEFsbENvbGxlY3Rpb24oSlNIVE1MQ29s
bGVjdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24q
Pihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICB0eXBlZGVmIEhUTUxDb2xsZWN0aW9uIEhUTUxB
bGxDb2xsZWN0aW9uOworICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dS
QVBQRVIoZXhlYywgSFRNTEFsbENvbGxlY3Rpb24sIGNvbGxlY3Rpb24pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpT
SFRNTENvbGxlY3Rpb24oSlNIVE1MQ29sbGVjdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3Rh
dGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICB3cmFw
cGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBIVE1MQ29sbGVjdGlvbiwgY29s
bGVjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBTY3JpcHRJbnRlcnBy
ZXRlcjo6cHV0RE9NT2JqZWN0KGNvbGxlY3Rpb24sIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKKyAg
ICByZXR1cm4gd3JhcHBlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwCShyZXZpc2lv
biAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
QGVuZAogKi8KIAotSlNDX0lNUExFTUVOVF9QUk9UT1RZUEUoIkhUTUxJbnB1dEVsZW1lbnRCYXNl
IiwgSlNIVE1MSW5wdXRFbGVtZW50QmFzZVByb3RvdHlwZSkKLQogLy8gU2V0U2VsZWN0aW9uUmFu
Z2UgaXMgaW1wbGVtZW50ZWQgb24gdGhlIGNsYXNzIGluc3RlYWQgb2Ygb24gdGhlIHByb3RvdHlw
ZQogLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gZW5hYmxlL2Rpc2FibGUgbG9va3VwIG9mIHRoZSBm
dW5jdGlvbiBiYXNlZCBvbiBpbnB1dCB0eXBlLgogSlNWYWx1ZSoganNIVE1MSW5wdXRFbGVtZW50
QmFzZUZ1bmN0aW9uU2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTYxLDggKzU5LDgg
QEAgSlNWYWx1ZSoganNIVE1MSW5wdXRFbGVtZW50QmFzZUZ1bmN0aW9uUwogCiBjb25zdCBDbGFz
c0luZm8gSlNIVE1MSW5wdXRFbGVtZW50QmFzZTo6c19pbmZvID0geyAiSFRNTElucHV0RWxlbWVu
dEJhc2UiLCAmSlNIVE1MRWxlbWVudDo6c19pbmZvLCAmSlNIVE1MSW5wdXRFbGVtZW50QmFzZVRh
YmxlLCAwIH07CiAKLUpTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElucHV0RWxlbWVudEJh
c2UoSlNDOjpKU09iamVjdCogcHJvdG90eXBlLCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGUpCi0gICAgOiBKU0hUTUxFbGVtZW50KHByb3RvdHlwZSwgZS5nZXQoKSkKK0pTSFRNTElucHV0
RWxlbWVudEJhc2U6OkpTSFRNTElucHV0RWxlbWVudEJhc2UoSlNDOjpTdHJ1Y3R1cmVJRCogc3Ry
dWN0dXJlLCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGUpCisgICAgOiBKU0hUTUxFbGVt
ZW50KHN0cnVjdHVyZSwgZS5nZXQoKSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHJldmlzaW9uIDM2NjQ4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwyNyArMjEsMjkgQEAKICNkZWZpbmUg
SlNIVE1MSW5wdXRFbGVtZW50QmFzZV9oCiAKICNpbmNsdWRlICJKU0hUTUxFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKLSAgICBKU0NfREVGSU5FX1BST1RPVFlQRV9XSVRIX1BS
T1RPVFlQRShKU0hUTUxJbnB1dEVsZW1lbnRCYXNlUHJvdG90eXBlLCBKU0hUTUxFbGVtZW50UHJv
dG90eXBlKQotCiAgICAgY2xhc3MgSlNIVE1MSW5wdXRFbGVtZW50QmFzZSA6IHB1YmxpYyBKU0hU
TUxFbGVtZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTSFRNTElucHV0RWxlbWVudEJhc2Uo
SlNDOjpKU09iamVjdCogcHJvdG90eXBlLCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KTsK
KyAgICAgICAgSlNIVE1MSW5wdXRFbGVtZW50QmFzZShKU0M6OlN0cnVjdHVyZUlEKiwgUGFzc1Jl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50Pik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShK
U0M6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBw
dXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSosIEpTQzo6UHV0UHJvcGVydHlTbG90JiBzbG90KTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTVmFsdWUq
LCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHko
SlNDOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTQzo6SlNWYWx1ZSopOwogICAgICAgICB2aXJ0
dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19p
bmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAg
ICAgIGVudW0geyBTZWxlY3Rpb25TdGFydCwgU2VsZWN0aW9uRW5kIH07CiAgICAgfTsKIAorICAg
IGNsYXNzIEpTSFRNTElucHV0RWxlbWVudEJhc2VQcm90b3R5cGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIHsg
cmV0dXJuIEpTSFRNTEVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyk7IH0KKyAgICB9OworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBKU0hUTUxJbnB1dEVsZW1lbnRCYXNl
X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NjQ4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBKU05vZGU6Om1hcmsoKQogICAgICAgICAvLyBCdXQg
aWYgdGhlIGRvY3VtZW50IGlzbid0IG1hcmtlZCB3ZSBoYXZlIHRvIG1hcmsgaXQgdG8gZW5zdXJl
IHRoYXQKICAgICAgICAgLy8gbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhpcyBvbmUgYXJlIGFsc28g
bWFya2VkCiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbm9kZS0+b3duZXJEb2N1bWVudCgp
KQotICAgICAgICAgICAgaWYgKERPTU9iamVjdCogZG9jV3JhcHBlciA9IFNjcmlwdEludGVycHJl
dGVyOjpnZXRET01PYmplY3QoZG9jKSkKKyAgICAgICAgICAgIGlmIChET01PYmplY3QqIGRvY1dy
YXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGRvYykpCiAgICAgICAgICAgICAgICAg
aWYgKCFkb2NXcmFwcGVyLT5tYXJrZWQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jV3JhcHBl
ci0+bWFyaygpOwogICAgICAgICBET01PYmplY3Q6Om1hcmsoKTsKQEAgLTE0MSw3ICsxNDEsNyBA
QCB2b2lkIEpTTm9kZTo6bWFyaygpCiAgICAgLy8gTWFyayB0aGUgd2hvbGUgdHJlZTsgdXNlIHRo
ZSBnbG9iYWwgc2V0IG9mIHJvb3RzIHRvIGF2b2lkIHJlZW50ZXJpbmcuCiAgICAgcm9vdC0+c2V0
SW5TdWJ0cmVlTWFyayh0cnVlKTsKICAgICBmb3IgKE5vZGUqIG5vZGVUb01hcmsgPSByb290OyBu
b2RlVG9NYXJrOyBub2RlVG9NYXJrID0gbm9kZVRvTWFyay0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIEpTTm9kZSogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01Ob2Rl
Rm9yRG9jdW1lbnQobV9pbXBsLT5kb2N1bWVudCgpLCBub2RlVG9NYXJrKTsKKyAgICAgICAgSlNO
b2RlKiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIobV9pbXBsLT5kb2N1bWVudCgp
LCBub2RlVG9NYXJrKTsKICAgICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICAgICAgIGlmICgh
d3JhcHBlci0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwpAQCAt
MTY0LDYyICsxNjQsNTggQEAgdm9pZCBKU05vZGU6Om1hcmsoKQogc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogY3JlYXRlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7
CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVCghU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERP
TU5vZGVGb3JEb2N1bWVudChub2RlLT5kb2N1bWVudCgpLCBub2RlKSk7Ci0gICAgCi0gICAgRG9j
dW1lbnQqIGRvYyA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAgSlNOb2RlKiByZXQgPSAwOworICAg
IEFTU0VSVCghZ2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZSkp
OwogICAgIAorICAgIEpTTm9kZSogd3JhcHBlcjsgICAgCiAgICAgc3dpdGNoIChub2RlLT5ub2Rl
VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXQgPSBjcmVhdGVK
U0hUTUxXcmFwcGVyKGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSkpOworICAg
ICAgICAgICAgICAgIHdyYXBwZXIgPSBjcmVhdGVKU0hUTUxXcmFwcGVyKGV4ZWMsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4obm9kZSkpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXQgPSBjcmVh
dGVKU1NWR1dyYXBwZXIoZXhlYywgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpKTsKKyAg
ICAgICAgICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNTVkdXcmFwcGVyKGV4ZWMsIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihub2RlKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRWxlbWVudChKU0VsZW1lbnRQcm90b3R5cGU6
OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIEVsZW1lbnQsIG5vZGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6
Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQXR0cihKU0F0dHJQcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PEF0dHIqPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVy
ID0gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgQXR0ciwgbm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6Ci0gICAgICAgICAgICByZXQg
PSBuZXcgKGV4ZWMpIEpTVGV4dChKU1RleHRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19j
YXN0PFRleHQqPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RF
X1dSQVBQRVIoZXhlYywgVGV4dCwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4
ZWMpIEpTQ0RBVEFTZWN0aW9uKEpTQ0RBVEFTZWN0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBz
dGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0g
Q1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgQ0RBVEFTZWN0aW9uLCBub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgotICAgICAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU0VudGl0eShKU0VudGl0eVByb3RvdHlwZTo6c2VsZihleGVj
KSwgc3RhdGljX2Nhc3Q8RW50aXR5Kj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlciA9IENS
RUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIEVudGl0eSwgbm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uKEpTUHJv
Y2Vzc2luZ0luc3RydWN0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRF
X0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBub2RlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAg
ICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDb21tZW50KEpTQ29tbWVudFByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgIHdyYXBw
ZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBDb21tZW50LCBub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CiAgICAgICAg
ICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBkb2N1bWVudCBpdHNlbGYgaW4gdGhl
IHBlci1kb2N1bWVudCBkaWN0aW9uYXJ5CiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpKTsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRG9jdW1lbnRUeXBl
KEpTRG9jdW1lbnRUeXBlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxEb2N1bWVu
dFR5cGUqPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9OT0RFX1dS
QVBQRVIoZXhlYywgRG9jdW1lbnRUeXBlLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgKGV4
ZWMpIEpTTm90YXRpb24oSlNOb3RhdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nh
c3Q8Tm90YXRpb24qPihub2RlKSk7CisgICAgICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9O
T0RFX1dSQVBQRVIoZXhlYywgTm90YXRpb24sIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKLSAgICAgICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNEb2N1bWVudEZyYWdtZW50KEpTRG9jdW1lbnRGcmFnbWVudFByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KG5vZGUpKTsK
KyAgICAgICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBEb2N1
bWVudEZyYWdtZW50LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5v
ZGU6OkVOVElUWV9SRUZFUkVOQ0VfTk9ERToKLSAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykg
SlNFbnRpdHlSZWZlcmVuY2UoSlNFbnRpdHlSZWZlcmVuY2VQcm90b3R5cGU6OnNlbGYoZXhlYyks
IHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KG5vZGUpKTsKKyAgICAgICAgICAgIHdyYXBw
ZXIgPSBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBFbnRpdHlSZWZlcmVuY2UsIG5vZGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQg
PSBuZXcgKGV4ZWMpIEpTTm9kZShKU05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIG5vZGUpOwor
ICAgICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIE5vZGUs
IG5vZGUpOwogICAgIH0KIAotICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01Ob2RlRm9yRG9j
dW1lbnQoZG9jLCBub2RlLCByZXQpOwotCi0gICAgcmV0dXJuIHJldDsgICAgCisgICAgcmV0dXJu
IHdyYXBwZXI7ICAgIAogfQogICAgIAogSlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3Rh
dGUqIGV4ZWMsIE5vZGUqIG5vZGUpCkBAIC0yMzUsMTAgKzIzMSw5IEBAIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1bWVudCgpOwotICAg
IEpTTm9kZSogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU5vZGVGb3JEb2N1bWVudChk
b2MsIG5vZGUpOwotICAgIGlmIChyZXQpCi0gICAgICAgIHJldHVybiByZXQ7CisgICAgSlNOb2Rl
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIobm9kZS0+ZG9jdW1lbnQoKSwgbm9k
ZSk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXIoZXhlYywgbm9kZSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NTMgKzU5LDU2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFNWR1BhdGhTZWcqIG9iaiwgU1ZHRWxl
bWVudCogY29udGV4dCkKK0pTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2Vn
KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFvYmopCisgICAgaWYg
KCFvYmplY3QpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAKLSAgICBzd2l0Y2ggKG9i
ai0+cGF0aFNlZ1R5cGUoKSkgeworCisgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENh
Y2hlZERPTU9iamVjdFdyYXBwZXIob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisK
KyAgICBzd2l0Y2ggKG9iamVjdC0+cGF0aFNlZ1R5cGUoKSkgewogICAgIGNhc2UgU1ZHUGF0aFNl
Zzo6UEFUSFNFR19DTE9TRVBBVEg6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxT
VkdQYXRoU2VnQ2xvc2VQYXRoLCBKU1NWR1BhdGhTZWdDbG9zZVBhdGgsIEpTU1ZHUGF0aFNlZ0Ns
b3NlUGF0aFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0Nsb3NlUGF0aCo+
KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBF
UihleGVjLCBTVkdQYXRoU2VnQ2xvc2VQYXRoLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2Ug
U1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJTOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdE
T01PYmplY3Q8U1ZHUGF0aFNlZ01vdmV0b0FicywgSlNTVkdQYXRoU2VnTW92ZXRvQWJzLCBKU1NW
R1BhdGhTZWdNb3ZldG9BYnNQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdN
b3ZldG9BYnMqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JK
RUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ01vdmV0b0Ficywgb2JqZWN0LCBjb250ZXh0KTsK
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX1JFTDoKLSAgICAgICAgcmV0dXJu
IGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdNb3ZldG9SZWwsIEpTU1ZHUGF0aFNlZ01vdmV0
b1JlbCwgSlNTVkdQYXRoU2VnTW92ZXRvUmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnTW92ZXRvUmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVB
VEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdNb3ZldG9SZWwsIG9iamVjdCwg
Y29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6Ci0gICAg
ICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvQWJzLCBKU1NWR1Bh
dGhTZWdMaW5ldG9BYnMsIEpTU1ZHUGF0aFNlZ0xpbmV0b0Fic1Byb3RvdHlwZT4oZXhlYywgc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficyo+KG9iaiksIGNvbnRleHQpOworICAgICAgICBy
ZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnTGluZXRvQWJz
LCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9f
UkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1Jl
bCwgSlNTVkdQYXRoU2VnTGluZXRvUmVsLCBKU1NWR1BhdGhTZWdMaW5ldG9SZWxQcm90b3R5cGU+
KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9SZWwqPihvYmopLCBjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNl
Z0xpbmV0b1JlbCwgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhT
RUdfQ1VSVkVUT19DVUJJQ19BQlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxT
VkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMsIEpT
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic1Byb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4g
Q1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJz
LCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRP
X0NVQklDX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCwgSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljUmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZH
X09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwsIG9iamVjdCwg
Y29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElD
X0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljQWJzLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLCBKU1NWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficyo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4g
Q1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y0Ficywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VS
VkVUT19RVUFEUkFUSUNfUkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWxQcm90b3R5cGU+KGV4ZWMsIHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKj4ob2JqKSwgY29udGV4dCk7Cisg
ICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNl
Zzo6UEFUSFNFR19BUkNfQUJTOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZH
UGF0aFNlZ0FyY0FicywgSlNTVkdQYXRoU2VnQXJjQWJzLCBKU1NWR1BhdGhTZWdBcmNBYnNQcm90
b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNBYnMqPihvYmopLCBjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0
aFNlZ0FyY0Ficywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhT
RUdfQVJDX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdB
cmNSZWwsIEpTU1ZHUGF0aFNlZ0FyY1JlbCwgSlNTVkdQYXRoU2VnQXJjUmVsUHJvdG90eXBlPihl
eGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjUmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAg
ICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWdBcmNS
ZWwsIG9iamVjdCwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVU
T19IT1JJWk9OVEFMX0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLCBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJz
LCBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyo+KG9iaiksIGNvbnRleHQpOworICAg
ICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbEFicywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdE
T01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwsIEpTU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxSZWwsIEpTU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxQcm90b3R5cGU+
KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKj4ob2JqKSwg
Y29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMs
IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLCBvYmplY3QsIGNvbnRleHQpOwogICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOgotICAgICAgICByZXR1
cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLCBKU1NWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbEFicywgSlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnNQcm90
b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyo+KG9i
aiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihl
eGVjLCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMsIG9iamVjdCwgY29udGV4dCk7CiAgICAg
Y2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw6Ci0gICAgICAgIHJl
dHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwsIEpTU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLCBKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbFBy
b3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4o
b2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVS
KGV4ZWMsIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCwgb2JqZWN0LCBjb250ZXh0KTsKICAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOgotICAg
ICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFicywgSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLCBKU1NWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhBYnNQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhBYnMqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENS
RUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFicywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VS
VkVUT19DVUJJQ19TTU9PVEhfUkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCwgSlNTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoUmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWxQcm90b3R5cGU+KGV4
ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwqPihvYmopLCBj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywg
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCwgb2JqZWN0LCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUzoKLSAg
ICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoQWJzLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLCBKU1NWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KG9iaiksIGNvbnRleHQpOwor
ICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aEFicywgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDoKLSAgICAgICAg
cmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
UmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLCBKU1NWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAg
ICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aFJlbCwgb2JqZWN0LCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhT
ZWc6OlBBVEhTRUdfVU5LTk9XTjoKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gY2FjaGVT
VkdET01PYmplY3Q8U1ZHUGF0aFNlZywgSlNTVkdQYXRoU2VnLCBKU1NWR1BhdGhTZWdQcm90b3R5
cGU+KGV4ZWMsIG9iaiwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVD
VF9XUkFQUEVSKGV4ZWMsIFNWR1BhdGhTZWcsIG9iamVjdCwgY29udGV4dCk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZp
c2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksMTcgKzM5LDE2IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0
YXRlKiBleGVjLCBTdHlsZVNoZWUKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6Omdl
dERPTU9iamVjdChzdHlsZVNoZWV0KTsKLSAgICBpZiAocmV0KQotICAgICAgICByZXR1cm4gcmV0
OworICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoc3R5
bGVTaGVldCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAg
ICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICByZXQgPSBuZXcg
KGV4ZWMpIEpTQ1NTU3R5bGVTaGVldChKU0NTU1N0eWxlU2hlZXRQcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgICAgIHdy
YXBwZXIgPSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIENTU1N0eWxlU2hlZXQsIHN0
eWxlU2hlZXQpOwogICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1N0eWxlU2hl
ZXQoSlNTdHlsZVNoZWV0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdHlsZVNoZWV0KTsKKyAgICAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgU3R5bGVTaGVldCwg
c3R5bGVTaGVldCk7CiAKLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KHN0eWxl
U2hlZXQsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAog
dm9pZCBKU1N0eWxlU2hlZXQ6Om1hcmsoKQpAQCAtNjIsNyArNjEsNyBAQCB2b2lkIEpTU3R5bGVT
aGVldDo6bWFyaygpCiAgICAgLy8gYmUgdG8gbWFrZSByZWYvZGVyZWYgb24gdGhlIHN0eWxlIHNo
ZWV0IHJlZi9kZXJlZiB0aGUgbm9kZSBpbnN0ZWFkLCBidXQgdGhlcmUncwogICAgIC8vIGEgbG90
IG9mIGRpc2VudGFuZ2xpbmcgb2YgdGhlIENTUyBET00gb2JqZWN0cyB0aGF0IHdvdWxkIG5lZWQg
dG8gaGFwcGVuIGZpcnN0LgogICAgIGlmIChOb2RlKiBvd25lck5vZGUgPSBpbXBsKCktPm93bmVy
Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChKU05vZGUqIG93bmVyTm9kZVdyYXBwZXIgPSBTY3JpcHRJ
bnRlcnByZXRlcjo6Z2V0RE9NTm9kZUZvckRvY3VtZW50KG93bmVyTm9kZS0+ZG9jdW1lbnQoKSwg
b3duZXJOb2RlKSkgeworICAgICAgICBpZiAoSlNOb2RlKiBvd25lck5vZGVXcmFwcGVyID0gZ2V0
Q2FjaGVkRE9NTm9kZVdyYXBwZXIob3duZXJOb2RlLT5kb2N1bWVudCgpLCBvd25lck5vZGUpKSB7
CiAgICAgICAgICAgICBpZiAoIW93bmVyTm9kZVdyYXBwZXItPm1hcmtlZCgpKQogICAgICAgICAg
ICAgICAgIG93bmVyTm9kZVdyYXBwZXItPm1hcmsoKTsKICAgICAgICAgfQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNyw3
IEBAIEpTVmFsdWUqIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoIXRl
eHQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU05vZGUqIHJldCA9IG5l
dyAoZXhlYykgSlNUZXh0KEpTVGV4dFByb3RvdHlwZTo6c2VsZihleGVjKSwgdGV4dCk7Ci0gICAg
U2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU5vZGVGb3JEb2N1bWVudCh0ZXh0LT5kb2N1bWVudCgp
LCB0ZXh0LCByZXQpOwotCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9O
T0RFX1dSQVBQRVIoZXhlYywgVGV4dCwgdGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM2NjQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0
Miw3IEBAIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6SlNYTUxIdHRwUmUKIHN0YXRpYyBK
U09iamVjdCogY29uc3RydWN0WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFJlZlB0cjxYTUxIdHRwUmVx
dWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKHN0YXRpY19jYXN0
PEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+ZG9jdW1lbnQoKSk7
Ci0gICAgSlNYTUxIdHRwUmVxdWVzdCogcmVzdWx0ID0gbmV3IChleGVjKSBKU1hNTEh0dHBSZXF1
ZXN0KEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHhtbEh0dHBSZXF1ZXN0
LmdldCgpKTsKLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KHhtbEh0dHBSZXF1
ZXN0LmdldCgpLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIENSRUFU
RV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgWE1MSHR0cFJlcXVlc3QsIHhtbEh0dHBSZXF1ZXN0
LmdldCgpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMzY2NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVz
dDo6bWFyaygpCiAgICAgQmFzZTo6bWFyaygpOwogCiAgICAgaWYgKFhNTEh0dHBSZXF1ZXN0VXBs
b2FkKiB1cGxvYWQgPSBtX2ltcGwtPm9wdGlvbmFsVXBsb2FkKCkpIHsKLSAgICAgICAgRE9NT2Jq
ZWN0KiB3cmFwcGVyID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh1cGxvYWQpOwor
ICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKHVw
bG9hZCk7CiAgICAgICAgIGlmICh3cmFwcGVyICYmICF3cmFwcGVyLT5tYXJrZWQoKSkKICAgICAg
ICAgICAgIHdyYXBwZXItPm1hcmsoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDM2
NjQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEpTWE1MSHR0cFJlcXVl
c3RVcGxvYWQ6Om1hcmsoKQogICAgIEJhc2U6Om1hcmsoKTsKIAogICAgIGlmIChYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBtX2ltcGwtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgp
KSB7Ci0gICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpnZXRE
T01PYmplY3QoeG1sSHR0cFJlcXVlc3QpOworICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKHhtbEh0dHBSZXF1ZXN0KTsKICAgICAgICAgaWYgKHdy
YXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQogICAgICAgICAgICAgd3JhcHBlci0+bWFyaygp
OwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yOjpKU1hTTFRQcm9jZXMKIAogc3Rh
dGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
WFNMVFByb2Nlc3NvcihKU1hTTFRQcm9jZXNzb3JQcm90b3R5cGU6OnNlbGYoZXhlYyksIFhTTFRQ
cm9jZXNzb3I6OmNyZWF0ZSgpLmdldCgpKTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1Rf
V1JBUFBFUihleGVjLCBYU0xUUHJvY2Vzc29yLCBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoKS5nZXQo
KSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsMTEgKzE2MCwxMSBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFNjcmlwdENvbnRyb2xs
CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqIGV2ZW50
KQogewotICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBET00gaW1wbGVtZW50YXRpb24gaGFz
IGZpbmlzaGVkIHdpdGggYSBwYXJ0aWN1bGFyIGV2ZW50LiBUaGlzCi0gIC8vIGlzIHRoZSBjYXNl
IGluIHNpdGF0aW9ucyB3aGVyZSBhbiBldmVudCBoYXMgYmVlbiBjcmVhdGVkIGp1c3QgZm9yIHRl
bXBvcmFyeSB1c2FnZSwKLSAgLy8gZS5nLiBhbiBpbWFnZSBsb2FkIG9yIG1vdXNlIG1vdmUuIE9u
Y2UgdGhlIGV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQsIGl0IGlzIGZvcmdvdHRlbgotICAvLyBi
eSB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGFuZCBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhY2hl
ZCBzdGlsbCBieSB0aGUgaW50ZXJwcmV0ZXIKLSAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERP
TU9iamVjdChldmVudCk7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGhhcyBmaW5pc2hlZCB3aXRoIGEgcGFydGljdWxhciBldmVudC4gVGhpcworICAg
IC8vIGlzIHRoZSBjYXNlIGluIHNpdGF0aW9ucyB3aGVyZSBhbiBldmVudCBoYXMgYmVlbiBjcmVh
dGVkIGp1c3QgZm9yIHRlbXBvcmFyeSB1c2FnZSwKKyAgICAvLyBlLmcuIGFuIGltYWdlIGxvYWQg
b3IgbW91c2UgbW92ZS4gT25jZSB0aGUgZXZlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZCwgaXQgaXMg
Zm9yZ290dGVuCisgICAgLy8gYnkgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBhbmQgc28gZG9lcyBu
b3QgbmVlZCB0byBiZSBjYWNoZWQgc3RpbGwgYnkgdGhlIGludGVycHJldGVyCisgICAgZm9yZ2V0
RE9NT2JqZWN0KGV2ZW50KTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0
KCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsMTIgKzQwMiwxOCBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKCRwYXNzVHlwZSwgSlNET01XaW5k
b3dTaGVsbCopO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgJHBhc3NUeXBlIiAu
IChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiLCBT
VkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAuIik7XG4iKTsKKyAgICAgICAgaWYgKElzU1ZHVHlw
ZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6U3RydWN0dXJlSUQqLCAk
cGFzc1R5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpTdHJ1
Y3R1cmVJRCosICRwYXNzVHlwZSk7XG4iKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgICMgRGVz
dHJ1Y3RvcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB+JGNsYXNzTmFt
ZSgpO1xuIikgaWYgKCEkaGFzUGFyZW50IG9yICRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIp
OwogCisgICAgIyBQcm90b3R5cGUKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwog
CiAgICAgJGltcGxJbmNsdWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgifSA9IDEgaWYKICAgICAg
ICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9CkBA
IC04NjYsOCArODcyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9IGVsc2Ug
ewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX1Qcm90
b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpYyBjb25z
dCBJZGVudGlmaWVyKiBwcm90b3R5cGVJZGVudGlmaWVyID0gbmV3IElkZW50aWZpZXIoZXhlYywg
XCJbWyR7Y2xhc3NOYW1lfS5wcm90b3R5cGVdXVwiKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gSlNDOjpjYWNoZUdsb2JhbE9iamVjdDwke2NsYXNzTmFtZX1Q
cm90b3R5cGU+KGV4ZWMsICpwcm90b3R5cGVJZGVudGlmaWVyKTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPCR7Y2xhc3NOYW1lfT4o
ZXhlYyk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0K
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTkyNCwxNSArOTI5
LDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKCRwYXNzVHlwZSBpbXBsLCBKU0RPTVdpbmRv
d1NoZWxsKiBzaGVsbClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRw
YXJlbnRDbGFzc05hbWUoJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKCksIGltcGwsIHNoZWxs
KVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNz
TmFtZX06OiRjbGFzc05hbWUoSlNPYmplY3QqIHByb3RvdHlwZSwgJHBhc3NUeXBlIGltcGwiIC4g
KCRuZWVkc1NWR0NvbnRleHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAuICIpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUo
U3RydWN0dXJlSUQqIHN0cnVjdHVyZSwgJHBhc3NUeXBlIGltcGwiIC4gKCRuZWVkc1NWR0NvbnRl
eHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKICAgICAgICAgaWYg
KCRoYXNQYXJlbnQpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBh
cmVudENsYXNzTmFtZShwcm90b3R5cGUsIGltcGwiIC4gKCRwYXJlbnROZWVkc1NWR0NvbnRleHQg
PyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUsIGltcGwiIC4gKCRwYXJlbnRO
ZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNz
TmFtZShwcm90b3R5cGUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICwgbV9jb250ZXh0KGNvbnRleHQpXG4iKSBpZiAkbmVlZHNTVkdDb250
ZXh0OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLCBtX2ltcGwoaW1wbClc
biIpOyAgCiAgICAgICAgIH0KLQogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTk0Myw3ICs5NDcsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIpIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01O
b2RlRm9yRG9jdW1lbnQobV9pbXBsLT5kb2N1bWVudCgpLCBtX2ltcGwuZ2V0KCkpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBmb3JnZXRET01Ob2RlKG1faW1wbC0+
ZG9jdW1lbnQoKSwgbV9pbXBsLmdldCgpKTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAgICAgbXkgJGFuaW1hdGVkVHlwZSA9
ICRpbXBsQ2xhc3NOYW1lOwpAQCAtOTU0LDcgKzk1OCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTU1ZH
RHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8JHBvZFR5cGUsICRhbmltYXRlZFR5cGU+Ojpmb3Jn
ZXRXcmFwcGVyKG1faW1wbC5nZXQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBTY3JpcHRJbnRlcnBy
ZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpO1xuIik7
CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxufVxuXG4iKTsKQEAg
LTk2NCw4ICs5NjgsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIGl0cyBv
d24gc3BlY2lhbCBoYW5kbGluZyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSBjYWNoaW5nIHRo
YXQgTm9kZSBub3JtYWxseSBkb2VzLgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRG9jdW1l
bnQiKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojp+JGNsYXNz
TmFtZSgpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4gICAgU2NyaXB0SW50
ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChzdGF0aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4o
aW1wbCgpKSk7XG59XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiAgICBm
b3JnZXRET01PYmplY3Qoc3RhdGljX2Nhc3Q8JHtpbXBsQ2xhc3NOYW1lfSo+KGltcGwoKSkpO1xu
fVxuXG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2Ns
YXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gbmV3IEpTRE9N
V2luZG93UHJvdG90eXBlO1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIG5ldyAoZXhlYykgJHtjbGFzc05hbWV9UHJvdG90eXBlKGV4ZWMp
O1xuIik7CiAgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAKICAgICBteSAk
aGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwIAogICAgICAgICAgICAgICAgICB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn0gCkBAIC0x
MjA4LDcgKzEyMjEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn0pIHsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2NsYXNzTmFtZX06OmdldENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYylcbntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogY29uc3RydWN0b3JJZGVudGlmaWVyID0g
bmV3IElkZW50aWZpZXIoZXhlYywgXCJbWyR7aW50ZXJmYWNlTmFtZX0uY29uc3RydWN0b3JdXVwi
KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNDOjpjYWNo
ZUdsb2JhbE9iamVjdDwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcj4oZXhlYywgKmNvbnN0cnVjdG9y
SWRlbnRpZmllcik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IGNhY2hlR2xvYmFsT2JqZWN0PCR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yPihleGVjLCAqY29uc3Ry
dWN0b3JJZGVudGlmaWVyKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CiAgICAgfQogCkBAIC0xMzU3LDExICsxMzcwLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgaWYg
KCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
Y2FjaGVTVkdET01PYmplY3Q8SlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4sICRjbGFzc05h
bWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhlYywgb2JqLCBjb250ZXh0KTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBw
ZXI8JGNsYXNzTmFtZSwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gPihleGVjLCBvYmos
IGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NO
YW1lLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RXcmFw
cGVyPCRjbGFzc05hbWU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDwkaW1wbENsYXNzTmFtZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihl
eGVjLCBvYmopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjwkY2xhc3NOYW1lPihleGVjLCBvYmopO1xuIik7CiAgICAg
ICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAzNjY0OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDA5LDEwICs0MDksNyBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICNl
bmRpZgogCiAgICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKHRoaXMpOwotICAgIHsK
LSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIFNjcmlwdEludGVycHJl
dGVyOjpmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KHRoaXMpOwotICAgIH0KKyAgICBmb3Jn
ZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KHRoaXMpOwogCiAgICAgaWYgKG1fZG9jQ2hhbmdlZCAm
JiBjaGFuZ2VkRG9jdW1lbnRzKQogICAgICAgICBjaGFuZ2VkRG9jdW1lbnRzLT5yZW1vdmUodGhp
cyk7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMzY2NDgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDEwICsxOTMsOCBAQCB2b2lkIE5vZGU6OnNldERvY3VtZW50KERv
Y3VtZW50KiBkb2MpCiAKICAgICB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCi0gICAg
ewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgU2NyaXB0SW50ZXJw
cmV0ZXI6OnVwZGF0ZURPTU5vZGVEb2N1bWVudCh0aGlzLCBtX2RvY3VtZW50LmdldCgpLCBkb2Mp
OwotICAgIH0gICAgCisgICAgdXBkYXRlRE9NTm9kZURvY3VtZW50KHRoaXMsIG1fZG9jdW1lbnQu
Z2V0KCksIGRvYyk7CisKICAgICBtX2RvY3VtZW50ID0gZG9jOwogCiAgICAgZGlkTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCShyZXZpc2lvbiAzNjY0OCkKKysrIFdl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwJKHdvcmtpbmcgY29weSkKQEAgLTcyNCw4ICs3MjQsOCBA
QCBzdWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUke3VjTmFt
ZX1XcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNw
YWNlJ31FbGVtZW50PiBlbGVtZW50KQogewogICAgIGlmICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTJHBhcmFtZXRlcnN7J25hbWVzcGFj
ZSd9RWxlbWVudChKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRQcm90b3R5cGU6OnNl
bGYoZXhlYyksIGVsZW1lbnQuZ2V0KCkpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9JHt1Y05hbWV9RWxlbWVudChKUyRwYXJhbWV0ZXJzeyduYW1lc3Bh
Y2UnfSR7dWNOYW1lfUVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PCRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfSR7dWNOYW1lfUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7
CisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCAkcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50LCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gQ1JFQVRF
X0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9JHt1Y05hbWV9
RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CiB9CiAKIEVORApAQCAtNzM0LDcgKzczNCw3IEBAIEVO
RAogICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSogY3JlYXRlJHt1Y05h
bWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9RWxlbWVudD4gZWxlbWVudCkKIHsgICAKLSAgICByZXR1cm4gbmV3IChleGVjKSBKUyRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfSR7dWNOYW1lfUVsZW1lbnQoSlMkcGFyYW1ldGVyc3snbmFt
ZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2Fz
dDwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50Kj4oZWxlbWVudC5nZXQo
KSkpOworICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCAkcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ30ke3VjTmFtZX1FbGVtZW50LCBlbGVtZW50LmdldCgpKTsKIH0KIAogRU5E
CkBAIC04MDgsNyArODA4LDcgQEAgRU5ECiAgICAgQ3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFj
ZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24gPSBtYXAuZ2V0
KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGNyZWF0ZVdyYXBwZXJGdW5j
dGlvbikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihleGVjLCBlbGVtZW50
KTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1l
bnQoSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhl
YywgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM2NjQ4KQorKysgV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsNyArNzY1LDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6bG9hZFJlcXVlc3RBc3luY2hybwogICAgICAgICAvLyBh
bmQgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSmF2YVNjcmlwdCB3cmFwcGVyLgogICAgICAg
ICByZWYoKTsKIAotICAgICAgICBKU0M6OmdjUHJvdGVjdE51bGxUb2xlcmFudChTY3JpcHRJbnRl
cnByZXRlcjo6Z2V0RE9NT2JqZWN0KHRoaXMpKTsKKyAgICAgICAgSlNDOjpnY1Byb3RlY3ROdWxs
VG9sZXJhbnQoZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcih0aGlzKSk7CiAgICAgfQogfQogCkBA
IC04NzIsNyArODcyLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAg
IAogICAgIC8vIGNhbid0IGJlIHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9u
bHkKICAgICAvLyByZXBvcnQgdGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KIAotICAgIEpT
Qzo6SlNWYWx1ZSogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QodGhp
cyk7CisgICAgSlNDOjpKU1ZhbHVlKiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBl
cih0aGlzKTsKICAgICBpZiAod3JhcHBlcikgewogICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KHdy
YXBwZXIpOwogICAgICAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlciktPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXplKCkgKiAyKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2
NjU2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTAgQEAKKzIwMDgtMDktMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2Zhc3QvZG9tL3dyYXBwZXItY2xhc3Nlcy1leHBlY3RlZC50eHQ6IFVwZGF0ZSByZXN1bHRzIHRv
CisgICAgICAgIHJlZmxlY3QgY29ycmVjdCBwcm90b3R5cGUgZm9yIENTU1N0eWxlUnVsZS4KKwog
MjAwOC0wOS0xOCAgQ29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8gYW5kIE1hcmsgUm93ZS4KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVyLWNsYXNzZXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVy
LWNsYXNzZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzNjY0OCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVyLWNsYXNzZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIFBBU1MganNXcmFwcGVyQ2xhc3Moc3R5bGVzaGVldC5j
c3NSdWxlcykKIFBBU1MganNXcmFwcGVyQ2xhc3Moc3R5bGVzaGVldC5jc3NSdWxlcy5fX3Byb3Rv
X18pIGlzICdDU1NSdWxlTGlzdFByb3RvdHlwZScKIFBBU1MganNXcmFwcGVyQ2xhc3Moc3R5bGVz
aGVldC5jc3NSdWxlcy5jb25zdHJ1Y3RvcikgaXMgJ0NTU1J1bGVMaXN0Q29uc3RydWN0b3InCiBQ
QVNTIGpzV3JhcHBlckNsYXNzKHN0eWxlc2hlZXQuY3NzUnVsZXMuaXRlbSgwKSkgaXMgJ0NTU1N0
eWxlUnVsZScKLUZBSUwganNXcmFwcGVyQ2xhc3Moc3R5bGVzaGVldC5jc3NSdWxlcy5pdGVtKDAp
Ll9fcHJvdG9fXykgc2hvdWxkIGJlIENTU1N0eWxlUnVsZVByb3RvdHlwZS4gV2FzIENTU1J1bGVQ
cm90b3R5cGUuCitQQVNTIGpzV3JhcHBlckNsYXNzKHN0eWxlc2hlZXQuY3NzUnVsZXMuaXRlbSgw
KS5fX3Byb3RvX18pIGlzICdDU1NTdHlsZVJ1bGVQcm90b3R5cGUnCiBQQVNTIGpzV3JhcHBlckNs
YXNzKHN0eWxlc2hlZXQuY3NzUnVsZXMuaXRlbSgwKS5jb25zdHJ1Y3RvcikgaXMgJ0NTU1N0eWxl
UnVsZUNvbnN0cnVjdG9yJwogUEFTUyBqc1dyYXBwZXJDbGFzcyhzdHlsZXNoZWV0LmNzc1J1bGVz
Lml0ZW0oMCkuc3R5bGUpIGlzICdDU1NTdHlsZURlY2xhcmF0aW9uJwogUEFTUyBqc1dyYXBwZXJD
bGFzcyhzdHlsZXNoZWV0LmNzc1J1bGVzLml0ZW0oMCkuc3R5bGUuX19wcm90b19fKSBpcyAnQ1NT
U3R5bGVEZWNsYXJhdGlvblByb3RvdHlwZScK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23578</attachid>
            <date>2008-09-19 12:47:57 -0700</date>
            <delta_ts>2008-09-19 17:50:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>StructurePatch2.txt</filename>
            <type>text/plain</type>
            <size>75285</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjY4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDktMTkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gcGFydCAyIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDg1OAorICAgICAgICAgIG1ha2UgZWFjaCBkaXN0aW5jdCBDKysgY2xhc3Mg
Z2V0IGEgZGlzdGluY3QgSlNDOjpTdHJ1Y3R1cmUKKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LmV4cDogRXhwb3J0ZWQgY29uc3RydWN0RW1wdHlPYmplY3QgZm9yIHVzZSBpbiBXZWJDb3JlLgor
CisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0Lmg6IENoYW5nZWQgdGhlIHByb3RlY3RlZCBj
b25zdHJ1Y3RvciB0byB0YWtlIGEKKyAgICAgICAgc3RydWN0dXJlIGluc3RlYWQgb2YgYSBwcm90
b3R5cGUuCisKKyAgICAgICAgKiBranMvSlNWYXJpYWJsZU9iamVjdC5oOiBSZW1vdmVkIGNvbnRy
dWN0b3IgdGhhdCB0YWtlcyBhIHByb3RvdHlwZS4KKwogMjAwOC0wOS0xOSAgSnVsaWVuIENoYWZm
cmFpeCAgPGpjaGFmZnJhaXhAcGxleW8uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lv
biAzNjY2OCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIF9fWk4zSlNDMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBO
U185RXhlY1MKIF9fWk4zSlNDMTdjb25zdHJ1Y3RGdW5jdGlvbkVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdFaQogX19aTjNKU0MxOWNv
bnN0cnVjdEVtcHR5QXJyYXlFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE5aW5pdGlhbGl6ZVRo
cmVhZGluZ0V2CitfX1pOM0pTQzIwY29uc3RydWN0RW1wdHlPYmplY3RFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOM0pTQzIwc3RhdGljRnVuY3Rpb25HZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElk
ZW50aWZpZXJFUktOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNU
b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RVBOU183SlNWYWx1ZUVSS05TXzdB
cmdMaXN0RQogX19aTjNKU0MyM3NldFVwU3RhdGljRnVuY3Rpb25TbG90RVBOU185RXhlY1N0YXRl
RVBLTlNfOUhhc2hFbnRyeUVQTlNfOEpTT2JqZWN0RVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlBy
b3BlcnR5U2xvdEUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAzNjY2OCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNHbG9iYWxPYmplY3QoSlNPYmplY3QqIHByb3RvdHlw
ZSwgSlNHbG9iYWxPYmplY3REYXRhKiBkLCBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKQotICAg
ICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KHByb3RvdHlwZSwgZCkKKyAgICAgICAgSlNHbG9i
YWxPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU0dsb2JhbE9iamVj
dERhdGEqIGRhdGEsIEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFsdWUpCisgICAgICAgICAgICA6IEpT
VmFyaWFibGVPYmplY3Qoc3RydWN0dXJlLCBkYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bml0KGdsb2JhbFRoaXNWYWx1ZSk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pT
VmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMzY2NjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
SlNWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiArOTEsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNWYXJpYWJsZU9i
amVjdChKU09iamVjdCogcHJvdG90eXBlLCBKU1ZhcmlhYmxlT2JqZWN0RGF0YSogZGF0YSkKLSAg
ICAgICAgICAgIDogSlNPYmplY3QocHJvdG90eXBlKQotICAgICAgICAgICAgLCBkKGRhdGEpIC8v
IFN1YmNsYXNzIG93bnMgdGhpcyBwb2ludGVyLgotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAg
ICAgICB2b2lkIGNvcHlSZWdpc3RlckFycmF5KFJlZ2lzdGVyKiBzcmMsIHNpemVfdCBjb3VudCk7
CiAgICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJBcnJheShSZWdpc3RlciogcmVnaXN0ZXJBcnJheSwg
c2l6ZV90IGNvdW50KTsKIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjY4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNTcgQEAKKzIwMDgtMDktMTkgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIC0gcGFydCAyIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDg1OAorICAgICAgICAgIG1ha2UgZWFjaCBkaXN0aW5jdCBDKysgY2xhc3MgZ2V0
IGEgZGlzdGluY3QgSlNDOjpTdHJ1Y3R1cmUKKworICAgICAgICAgICsgRml4ZWQgYWxsIGNhc2Vz
IHdoZXJlIHdlIHdlcmUgdXNpbmcgYSBzaGFyZWQgc3RydWN0dXJlIGZvciBtdWx0aXBsZQorICAg
ICAgICAgICAgQysrIGNsYXNzZXMgaW4gV2ViQ29yZS4gVGhpcyBzdGlsbCBoYXMgdG8gYmUgZG9u
ZSBpbiBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICAgICsgR290IHJpZCBvZiBjYWNoZUdsb2Jh
bE9iamVjdC4KKworICAgICAgICAgICsgSW1wcm92ZWQgdXNlIG9mIFBhc3NSZWZQdHIgaW4gYmlu
ZGluZ3MgY29kZS4KKworICAgICAgICAgICsgUmVtb3ZlZCBhIGNvdXBsZSBjYXNlcyB3aGVyZSB3
ZSB3ZXJlIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgcHJvdG90eXBlcworICAgICAgICAgICAgaW5z
aWRlIGEgSlNPYmplY3QncyBjb25zdHJ1Y3Rpb24gcHJvY2VzcyAtLSB0aGlzIGNhbiBsZWFkIHRv
IHRyb3VibGUgaWYKKyAgICAgICAgICAgIHdlIGRvIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHdoaWxl
IGFuIG9iamVjdCBpcyBvbmx5IHBhcnRseSBjb25zdHJ1Y3RlZC4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlv
Q29uc3RydWN0b3I6OkpTQXVkaW9Db25zdHJ1Y3Rvcik6IENyZWF0ZSBhIHN0cnVjdHVyZSBleHBs
aWNpdGx5CisgICAgICAgIHNvIHdlIGRvbid0IGltcGxpY2l0bHkgc2hhcmUgdGhlIHN0cnVjdHVy
ZSB3aXRoIG90aGVyIG9iamVjdHMgdGhhdCB1c2UgdGhlIG9iamVjdAorICAgICAgICBwcm90b3R5
cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0Q2FjaGVkRE9NQ29uc3RydWN0b3IpOiBBZGRlZC4gVG8gYmUgdXNlZCBmb3Ig
Y29uc3RydWN0b3JzIHNvIHdlCisgICAgICAgIGRvbid0IG5lZWQgY2FjaGVHbG9iYWxPYmplY3Qg
YW55IG1vcmUuCisgICAgICAgIChXZWJDb3JlOjpjYWNoZURPTUNvbnN0cnVjdG9yKTogRGl0dG8u
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDogUmVtb3ZlZCBET01PYmpl
Y3QgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHByb3RvdHlwZS4KKyAgICAgICAgQWRkZWQgZnVu
Y3Rpb25zIGFuZCBhIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBnZXR0aW5nIGNhY2hlZCBET00gY29u
c3RydWN0b3JzLgorICAgICAgICBSZW1vdmVkIGNhY2hlR2xvYmFsT2JqZWN0IGZ1bmN0aW9uIHRl
bXBsYXRlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKTogVGFrZSBh
IFBhc3NSZWZQdHI8RE9NV2luZG93PiBzaW5jZQorICAgICAgICB3ZSdyZSB0YWtpbmcgb3duZXJz
aGlwLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOiBDaGFuZ2VkIGNv
bnN0cnVjdG9yIHRvIHRha2UgUGFzc1JlZlB0ciwgc2luY2UKKyAgICAgICAgd2UncmUgdGFraW5n
IG93bmVyc2hpcC4gQWRkZWQgY29uc3RydWN0b3IgbWFwLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpt
YXJrKTogTWFyayB0aGUgY29uc3RydWN0b3JzIGluIHRoZSBtYXAuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwpOiBUYWtlIGEgUGFzc1JlZlB0cjxET01XaW5kb3c+
IHNpbmNlCisgICAgICAgIHdlJ3JlIHRha2luZyBvd25lcnNoaXAuIFVzZSB0aGUgbmV3IHNldFdp
bmRvdyBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIEpTRE9NV2luZG93OworICAgICAgICB0aGlzIGlz
IG5vdyBkb25lIGluIG9ubHkgdGhhdCBvbmUgcGxhY2UuCisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOiBBZGRlZC4gQ3JlYXRlcyB0aGUgSlNET01XaW5kb3cg
YmFzZWQgb24KKyAgICAgICAgdGhlIHBhc3NlZC1pbiBET01XaW5kb3cuIENvZGUgd2FzIG1vdmVk
IGhlcmUgYW5kIGNoYW5nZWQgdG8gYWxsb2NhdGUgdW5pcXVlCisgICAgICAgIHN0cnVjdHVyZXMg
Zm9yIGJvdGggdGhlIHdpbmRvdyBwcm90b3R5cGUgYW5kIHRoZSB3aW5kb3cuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oOiBEaXR0by4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmg6IENoYW5nZWQgY2xhc3MgdGVtcGxhdGUgYXJndW1l
bnQgc28gaXQgZG9lc24ndAorICAgICAgICBoYXZlIHRoZSBzYW1lIG5hbWUgKEpTRXZlbnRUYXJn
ZXQpIGFzIGFuIGFjdHVhbCBjbGFzcy4gUmVtb3ZlZCB1bmhlbHBmdWwgdXNlIG9mCisgICAgICAg
IHByaXZhdGUvZnJpZW5kIGluIEpTRXZlbnRUYXJnZXRCYXNlLiBSZW1vdmVkIGNvbW1lbnRzIHJl
ZmVycmluZyB0byBkZWZ1bmN0CisgICAgICAgIG1hY3Jvcy4gQ2hhbmdlZCBKU0V2ZW50VGFyZ2V0
QmFzZVByb3RvdHlwZSB0byBnZXQgdGhlIHByb3RvdHlwZSB3aXRoIHRoZSBuZXcKKyAgICAgICAg
cmF0aGVyIHRoYW4gaXRzIG93biBjb3B5IG9mIGNhY2hlR2xvYmFsT2JqZWN0IChJIG1pc3NlZCB0
aGlzIGR1cmluZyBwYXNzIDEpLgorICAgICAgICBDaGFuZ2VkIEpTRXZlbnRUYXJnZXRCYXNlUHJv
dG90eXBlIHNvIGl0IGRvZXNuJ3QgaGF2ZSBzbyBtYW55IHRlbXBsYXRlIGFyZ3VtZW50cy4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDogQWRkZWQgc19pbmZv
OyBuZWVkZWQgZm9yIHRoZSBuZXcgc2NoZW1lCisgICAgICAgIGZvciBjYWNoaW5nIHN0cnVjdHVy
ZXMgYW5kIHByb3RvdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
SlNFdmVudFRhcmdldE5vZGUpOiBVc2UgUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXROb2RlOjpjcmVhdGVQcm90b3R5cGUpOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oOiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6SlNIVE1MQWxsQ29sbGVjdGlvbik6IFVzZSBQ
YXNzUmVmUHRyLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmFtZWRJdGVtcyk6IFBhc3MgRXhlY1N0YXRlIGlu
c3RlYWQgb2YgcHJvdG90eXBlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZvcm1FbGVtZW50OjpuYW1l
R2V0dGVyKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnRCYXNlOjpKU0hU
TUxJbnB1dEVsZW1lbnRCYXNlKTogVXNlIFBhc3NSZWZQdHIuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpKU0hUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IpOgorICAgICAgICBDcmVhdGUgYSB1bmlxdWUgc3RydWN0dXJlIGluc3RlYWQgb2Ygc2hh
cmluZy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3IpOiBE
aXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXApOiBS
ZW1vdmVkIG92ZXJsb2FkIHRoYXQgdGFrZXMKKyAgICAgICAgYSBwcm90b3R5cGUgcmF0aGVyIHRo
YW4gYSBzdHJ1Y3R1cmUuIE1hZGUgdGhlIHVzZSBvZiBpbmhlcml0b3JJRCgpIGhlcmUKKyAgICAg
ICAgZXhwbGljaXQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFw
cGVyLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVy
Ojp3cmFwKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXIuaDogRGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246
OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb24pOiBDaGFuZ2VkIHRvCisgICAgICAgIHRha2UgYW4gRXhl
Y1N0YXRlIGFyZ3VtZW50IGluc3RlYWQgb2YgYSBwcm90b3R5cGUuIENyZWF0ZSBhIHVuaXF1ZQor
ICAgICAgICBTdHJ1Y3R1cmVJRCBpbnN0ZWFkIG9mIHNoYXJpbmcuCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oOiBEaXR0by4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDogUmVtb3ZlZCBvdmVybG9hZGVk
CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBwcm90b3R5cGUgaW5zdGVhZCBvZiBh
IHN0cnVjdHVyZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlci5oOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6SlNSR0JDb2xvcik6IFRha2UgRXhlY1N0YXRl
IGluc3RlYWQgb2YgYQorICAgICAgICBwcm90b3R5cGU7IGNyZWF0ZSBhIHVuaXF1ZSBzdHJ1Y3R1
cmUuCisgICAgICAgIChXZWJDb3JlOjpnZXRKU1JHQkNvbG9yKTogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvanMvSlNSR0JDb2xvci5oOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NR
TFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0pOiBVc2UgY29uc3RydWN0RW1wdHlPYmplY3QgaW5zdGVh
ZAorICAgICAgICBvZiBleHBsaWNpdCBjb2RpbmcgdGhlIGlkaW9tIGZvciBtYWtpbmcgYSBuZXcg
b2JqZWN0LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6
SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKToKKyAgICAgICAgQ3JlYXRlIGEgdW5pcXVlIHN0
cnVjdHVyZSBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgb25lLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yOjpKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKTog
TGV0IHRoZSB3aW5kb3cgc2hlbGwncworICAgICAgICBzZXRXaW5kb3cgZnVuY3Rpb24gY3JlYXRl
IHRoZSBKU0RPTVdpbmRvdyBpbnN0ZWFkIG9mIGRvaW5nIGl0IGhlcmUuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQ2hhbmdlZCB0byB1c2UgUGFzc1Jl
ZlB0ciBmb3IKKyAgICAgICAgdGhlIHN0cnVjdHVyZSBhbmQgdGhlIHdyYXBwZWQgb2JqZWN0IHdo
ZW4gY3JlYXRpbmcgd3JhcHBlcnMuCisgICAgICAgIFNpbXBsaWZpZWQgc29tZSBvZiB0aGUgc3Bl
Y2lhbCBjYXNlcyBmb3IgRE9NV2luZG93IHNvIHRoZXkgYXJlCisgICAgICAgIGRpZmZlcmVudCBv
bmx5IGluIHdheXMgdGhlIG5lZWQgdG8gYmUuIEVsaW1pbmF0ZWQgdGhlCisgICAgICAgIEpTRE9N
V2luZG93OjpjcmVhdGVQcm90b3R5cGUgYW5kIEpTRE9NV2luZG93UHJvdG90eXBlOjpzZWxmCisg
ICAgICAgIGZ1bmN0aW9ucy4gTW92ZWQgcmVzcG9uc2liaWxpdHkgZm9yIGNyZWF0aW5nIHRoZSBz
dHJ1Y3R1cmUgYW5kCisgICAgICAgIHBhcmVudCBwcm90b3R5cGUgb3V0IG9mIHRoZSBwcm90b3R5
cGUgY29uc3RydWN0b3IgaW50byB0aGUKKyAgICAgICAgY3JlYXRlUHJvdG90eXBlIGZ1bmN0aW9u
LiBSZW1vdmVkIHRoZSB1bnVzZWQgIkRvTm90Q2FjaGUiIGZsYWcgZm9yCisgICAgICAgIG9iamVj
dHMgb3RoZXIgdGhhbiBET01XaW5kb3cuIFVzZSBnZXRET01Db25zdHJ1Y3RvciBpbnN0ZWFkIG9m
CisgICAgICAgIGNhY2hlR2xvYmFsT2JqZWN0IGZvciBjb25zdHJ1Y3RvcnMuIE1ha2UgZWFjaCBj
b25zdHJ1Y3RvciBoYXZlCisgICAgICAgIGEgdW5pcXVlIHN0cnVjdHVyZSBJRC4KKworICAgICAg
ICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOiBBZGRlZCBjcmVhdGVQcm90b3R5cGUgYW5k
IGNoYW5nZWQgdGhlCisgICAgICAgIG5hbWUgb2YgdGhlIGluZm8gbWVtYmVyIHRvIHNfaW5mbyBz
byB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCBET00KKyAgICAgICAgYmluZGluZyBtYWNyb3MgdG8g
aGFuZGwgdGhlIHByb3RvdHlwZS4KKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
bW06IEZpeGVkIG5hbWVzcGFjaW5nIGEgYml0LgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wOjpPYmpjRmFsbGJhY2tPYmplY3RJbXApOgorICAgICAgICBDcmVh
dGUgYSB1bmlxdWUgc3RydWN0dXJlIHVzaW5nIGdldERPTVN0cnVjdHVyZS4KKworICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDogRml4ZWQgbmFtZXNwYWNpbmcgYSBiaXQuCisgICAg
ICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KTogQ3JlYXRlIGEgdW5pcXVlIHN0
cnVjdHVyZSB1c2luZworICAgICAgICBnZXRET01TdHJ1Y3R1cmUuCisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaDogQWRkZWQgY3JlYXRlUHJvdG90eXBlIHNvIGdldERPTVN0cnVjdHVy
ZQorICAgICAgICB3aWxsIHdvcmsuCisKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0SW1wKTog
Q3JlYXRlIGEgdW5pcXVlIHN0cnVjdHVyZSB1c2luZworICAgICAgICBnZXRET01TdHJ1Y3R1cmUu
CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6IEFkZGVkIGNyZWF0ZVByb3RvdHlw
ZSBzbyBnZXRET01TdHJ1Y3R1cmUKKyAgICAgICAgd2lsbCB3b3JrLgorCisgICAgICAgICogaGlz
dG9yeS9DYWNoZWRQYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFBhZ2U6OnJlc3Rv
cmUpOiBMZXQgdGhlIHdpbmRvdyBzaGVsbCdzCisgICAgICAgIHNldFdpbmRvdyBmdW5jdGlvbiBj
cmVhdGUgdGhlIEpTRE9NV2luZG93IGluc3RlYWQgb2YgZG9pbmcgaXQgaGVyZS4KKworICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmlkbDogUmVtb3ZlZCBEb05vdENhY2hlLCB3aGljaCBpcyBubyBs
b25nZXIgdXNlZC4KKwogMjAwOC0wOS0xOSAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6
ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDM2NjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNv
bnN0IENsYXNzSW5mbyBKU0F1ZGlvQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3Ry
dWN0b3IiLCAwLCAwLCAwIH07CiAKIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6SlNBdWRpb0NvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogRE9NT2JqZWN0
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCisgICAgOiBE
T01PYmplY3QoU3RydWN0dXJlSUQ6OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm9iamVjdFByb3RvdHlwZSgpKSkKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiAgICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEp
LCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDM2NjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgSlNWYWx1
ZSoganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTQzo6VVN0cmluZyYgcykKK0pTVmFsdWUqIGpzT3duZWRTdHJpbmdPck51bGwo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQogewogICAgIGlmIChzLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0zNzMsMTcgKzM3MywzMCBAQCBFeGVjU3Rh
dGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIGZyYW1lLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIH0KIAotSlNDOjpTdHJ1Y3R1cmVJ
RCogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6
OkNsYXNzSW5mbyogY2xhc3NJbmZvKQorU3RydWN0dXJlSUQqIGdldENhY2hlZERPTVN0cnVjdHVy
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewogICAgIEpT
RE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zdHJ1Y3R1cmVzKCk7CiAgICAgcmV0dXJuIHN0
cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7CiB9CiAKLUpTQzo6U3RydWN0dXJlSUQqIGNy
ZWF0ZURPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qIGNsYXNzSW5mbywgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKQorU3RydWN0dXJlSUQqIGNy
ZWF0ZURPTVN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvLCBKU09iamVjdCogcHJvdG90eXBlKQogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1
Y3R1cmVzID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zdHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNs
YXNzSW5mbykpOwogICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFN0cnVjdHVy
ZUlEOjpjcmVhdGUocHJvdG90eXBlKSkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KIAorSlNPYmpl
Y3QqIGdldENhY2hlZERPTUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29uc3RydWN0b3Jz
ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5jb25zdHJ1Y3RvcnMoKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3JzLmdldChjbGFzc0luZm8p
OworfQorCit2b2lkIGNhY2hlRE9NQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgSlNPYmplY3QqIGNvbnN0cnVjdG9yKQoreworICAgIEpTRE9N
Q29uc3RydWN0b3JNYXAmIGNvbnN0cnVjdG9ycyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+Y29uc3RydWN0b3JzKCk7CisgICAgQVNTRVJU
KCFjb25zdHJ1Y3RvcnMuY29udGFpbnMoY2xhc3NJbmZvKSk7CisgICAgY29uc3RydWN0b3JzLnNl
dChjbGFzc0luZm8sIGNvbnN0cnVjdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAzNjY2OCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEx
ICs0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgZXhwbGljaXQgRE9NT2JqZWN0KEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSkKLSAgICAg
ICAgICAgIDogSlNPYmplY3QocHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgdmlydHVhbCB+RE9NT2JqZWN0KCk7CiAjZW5kaWYKQEAgLTcz
LDYgKzY4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEpTQzo6U3RydWN0dXJlSUQqIGdl
dENhY2hlZERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
Kik7CiAgICAgSlNDOjpTdHJ1Y3R1cmVJRCogY3JlYXRlRE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUpOwog
CisgICAgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkRE9NQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOworICAgIHZvaWQgY2FjaGVET01Db25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiwgSlNDOjpKU09iamVjdCog
Y29uc3RydWN0b3IpOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzPiBpbmxpbmUg
SlNDOjpTdHJ1Y3R1cmVJRCogZ2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQog
ICAgIHsKICAgICAgICAgaWYgKEpTQzo6U3RydWN0dXJlSUQqIHN0cnVjdHVyZSA9IGdldENhY2hl
ZERPTVN0cnVjdHVyZShleGVjLCAmV3JhcHBlckNsYXNzOjpzX2luZm8pKQpAQCAtODMsNiArODEs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTQzo6SlNPYmplY3QqPihnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjKS0+
c3RvcmVkUHJvdG90eXBlKCkpOwogICAgIH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb25zdHJ1Y3Rv
ckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogY29uc3RydWN0
b3IgPSBnZXRDYWNoZWRET01Db25zdHJ1Y3RvcihleGVjLCAmQ29uc3RydWN0b3JDbGFzczo6c19p
bmZvKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICAgICAgSlNDOjpKU09i
amVjdCogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIENvbnN0cnVjdG9yQ2xhc3MoZXhlYyk7Cisg
ICAgICAgIGNhY2hlRE9NQ29uc3RydWN0b3IoZXhlYywgJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5m
bywgY29uc3RydWN0b3IpOworICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgfQogCiAg
ICAgI2RlZmluZSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGNsYXNzTmFtZSwgb2Jq
ZWN0KSBjcmVhdGVET01PYmplY3RXcmFwcGVyPEpTIyNjbGFzc05hbWU+KGV4ZWMsIHN0YXRpY19j
YXN0PGNsYXNzTmFtZSo+KG9iamVjdCkpCiAgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNz
LCBjbGFzcyBET01DbGFzcz4gaW5saW5lIERPTU9iamVjdCogY3JlYXRlRE9NT2JqZWN0V3JhcHBl
cihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCkKQEAgLTE0MCwyNiArMTQ2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gY3JlYXRlRE9NTm9kZVdy
YXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBub2RlKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAg
KiBUaGlzIHRlbXBsYXRlIG1ldGhvZCByZXRyaWV2ZXMgb3IgY3JlYXRlIGFuIG9iamVjdCB0aGF0
IGlzIHVuaXF1ZQotICAgICAqIChmb3IgYSBnaXZlbiBnbG9iYWwgb2JqZWN0KSBUaGUgZmlyc3Qg
dGltZSB0aGlzIGlzIGNhbGxlZCAoZm9yIGEgZ2l2ZW4KLSAgICAgKiBwcm9wZXJ0eSBuYW1lKSwg
dGhlIE9iamVjdCB3aWxsIGJlIGNvbnN0cnVjdGVkLCBhbmQgc2V0IGFzIGEgcHJvcGVydHkKLSAg
ICAgKiBvZiB0aGUgZ2xvYmFsIG9iamVjdC4gTGF0ZXIgY2FsbHMgd2lsbCBzaW1wbHkgcmV0cmll
dmUgdGhhdCBjYWNoZWQgb2JqZWN0LiAKLSAgICAgKiBOb3RlIHRoYXQgdGhlIG9iamVjdCBjb25z
dHJ1Y3RvciBtdXN0IHRha2UgMSBhcmd1bWVudCwgZXhlYy4KLSAgICAgKi8KLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgV3JhcHBlckNsYXNzPiBpbmxpbmUgV3JhcHBlckNsYXNzKiBjYWNoZUdsb2JhbE9i
amVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCi0gICAgewotICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSogb2Jq
ID0gZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKG9i
aikgewotICAgICAgICAgICAgQVNTRVJUKG9iai0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V3JhcHBlckNsYXNzKj4ob2JqKTsKLSAgICAgICAgfQotICAgICAg
ICBXcmFwcGVyQ2xhc3MqIG5ld09iamVjdCA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKGV4ZWMp
OwotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIG5ld09iamVj
dCwgSlNDOjpEb250RW51bSk7Ci0gICAgICAgIHJldHVybiBuZXdPYmplY3Q7Ci0gICAgfQotCiAg
ICAgLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRpb24gY29kZSBpbnRvIGEg
SmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KICAgICB2b2lkIHNl
dERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzNjY2OCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDE3ICsxOTQsMTcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93QmFzZTo6c19p
bmZvIAogQGVuZAogKi8KIAotSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpK
U0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3dfLCBKU0RPTVdp
bmRvd0Jhc2UqIGpzV2luZG93XywgSlNET01XaW5kb3dTaGVsbCogc2hlbGxfKQotICAgIDogSlNH
bG9iYWxPYmplY3REYXRhKGpzV2luZG93Xywgc2hlbGxfKQotICAgICwgaW1wbCh3aW5kb3dfKQor
SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpKU0RPTVdpbmRvd0Jhc2VEYXRh
KFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93QmFzZSoganNXaW5kb3cs
IEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQorICAgIDogSlNHbG9iYWxPYmplY3REYXRhKGpzV2lu
ZG93LCBzaGVsbCkKKyAgICAsIGltcGwod2luZG93KQogICAgICwgZXZ0KDApCiAgICAgLCByZXR1
cm5WYWx1ZVNsb3QoMCkKLSAgICAsIHNoZWxsKHNoZWxsXykKKyAgICAsIHNoZWxsKHNoZWxsKQog
ewogfQogCi1KU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShKU09iamVjdCogcHJvdG90
eXBlLCBET01XaW5kb3cqIHdpbmRvdywgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCi0gICAgOiBK
U0dsb2JhbE9iamVjdChwcm90b3R5cGUsIG5ldyBKU0RPTVdpbmRvd0Jhc2VEYXRhKHdpbmRvdywg
dGhpcywgc2hlbGwpLCBzaGVsbCkKK0pTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHdp
bmRvdywgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCisgICAgOiBKU0dsb2JhbE9iamVjdChzdHJ1
Y3R1cmUsIG5ldyBKU0RPTVdpbmRvd0Jhc2VEYXRhKHdpbmRvdywgdGhpcywgc2hlbGwpLCBzaGVs
bCkKIHsKICAgICAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHNjcmlwdCB0aW1l
b3V0IGhhbmRsZXIga2lja3MgaW4uCiAgICAgc2V0VGltZW91dFRpbWUoMTAwMDApOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzNjY2OCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRE9NV2luZG93QmFz
ZVByaXZhdGU7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSlNDOjpDbGFzc0luZm8qLCBS
ZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gPiBKU0RPTVN0cnVjdHVyZU1hcDsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OkpTT2JqZWN0Kj4gSlNET01Db25z
dHJ1Y3Rvck1hcDsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgV2ViQ29yZSBKUyBiaW5kaW5n
IHdoaWNoIGRvZXMgbm90IGluaGVyaXQgZnJvbSBET01PYmplY3QKICAgICBjbGFzcyBKU0RPTVdp
bmRvd0Jhc2UgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdCB7CkBAIC01Miw3ICs1Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBmcmllbmQgY2xhc3MgU2NoZWR1bGVkQWN0
aW9uOwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNET01XaW5kb3dCYXNlKEpTQzo6SlNPYmpl
Y3QqIHByb3RvdHlwZSwgRE9NV2luZG93KiwgSlNET01XaW5kb3dTaGVsbCopOworICAgICAgICBK
U0RPTVdpbmRvd0Jhc2UoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiwgUGFzc1JlZlB0cjxE
T01XaW5kb3c+LCBKU0RPTVdpbmRvd1NoZWxsKik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgfkpTRE9NV2luZG93QmFzZSgpOwpAQCAtMTI4LDYgKzEyOSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7CiAKICAgICAgICAgSlNE
T01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMoKSB7IHJldHVybiBkKCktPnN0cnVjdHVyZXM7IH0K
KyAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29uc3RydWN0b3JzKCkgeyByZXR1cm4gZCgp
LT5jb25zdHJ1Y3RvcnM7IH0KIAogICAgICAgICBlbnVtIHsKICAgICAgICAgICAgIC8vIEF0dHJp
YnV0ZXMKQEAgLTE2Niw2ICsxNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICBUaW1lb3V0c01hcCB0aW1lb3V0czsKIAogICAgICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAg
c3RydWN0dXJlczsKKyAgICAgICAgICAgIEpTRE9NQ29uc3RydWN0b3JNYXAgY29uc3RydWN0b3Jz
OwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBnZXRMaXN0ZW5l
cihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCB2b2lkIEpTRE9NV2luZG93OjptYXJrKCkK
ICAgICBmb3IgKEpTRE9NU3RydWN0dXJlTWFwOjppdGVyYXRvciBpdCA9IHN0cnVjdHVyZXMoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPm1hcmsoKTsKIAor
ICAgIEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSBjb25zdHJ1Y3RvcnMoKS5l
bmQoKTsKKyAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IGNvbnN0
cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikgeworICAgICAgICBpZiAoIWl0
Mi0+c2Vjb25kLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIGl0Mi0+c2Vjb25kLT5tYXJrKCk7Cisg
ICAgfQorCiAgICAgQmFzZTo6bWFyaygpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDM2NjY4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTggKzQzLDIz
IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNET01XaW5kb3dTaGUKIAogY29uc3QgQ2xh
c3NJbmZvIEpTRE9NV2luZG93U2hlbGw6OnNfaW5mbyA9IHsgIkpTRE9NV2luZG93U2hlbGwiLCAw
LCAwLCAwIH07CiAKLUpTRE9NV2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwoRE9NV2luZG93
KiBkb21XaW5kb3cpCi0gICAgOiBCYXNlKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+bnVsbFByb3RvU3RydWN0dXJlSUQpCi0gICAgLCBtX3dpbmRvdygwKQorSlNET01XaW5kb3dT
aGVsbDo6SlNET01XaW5kb3dTaGVsbChQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2luZG93KQorICAg
IDogQmFzZShTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpKSkKIHsKLSAgICBtX3dpbmRvdyA9
IG5ldyAoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKSBKU0RPTVdpbmRvdyhkb21X
aW5kb3csIHRoaXMpOwotICAgIHNldFByb3RvdHlwZShtX3dpbmRvdy0+cHJvdG90eXBlKCkpOwor
ICAgIHNldFdpbmRvdyh3aW5kb3cpOwogfQogCiBKU0RPTVdpbmRvd1NoZWxsOjp+SlNET01XaW5k
b3dTaGVsbCgpCiB7CiB9CiAKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFBhc3NS
ZWZQdHI8RE9NV2luZG93PiB3aW5kb3cpCit7CisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBwcm90
b3R5cGVTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpKTsKKyAgICBSZWZQ
dHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUobmV3IEpTRE9N
V2luZG93UHJvdG90eXBlKHByb3RvdHlwZVN0cnVjdHVyZS5yZWxlYXNlKCkpKTsKKyAgICBzZXRX
aW5kb3cobmV3IChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpIEpTRE9NV2luZG93
KHN0cnVjdHVyZS5yZWxlYXNlKCksIHdpbmRvdywgdGhpcykpOworfQorCiAvLyAtLS0tCiAvLyBK
U09iamVjdCBtZXRob2RzCiAvLyAtLS0tCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93U2hlbGwuaAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgSlNET01XaW5kb3dTaGVsbCA6IHB1YmxpYyBET01PYmplY3Qg
ewogICAgICAgICB0eXBlZGVmIERPTU9iamVjdCBCYXNlOwogICAgIHB1YmxpYzoKLSAgICAgICAg
SlNET01XaW5kb3dTaGVsbChET01XaW5kb3cqKTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVsbChQ
YXNzUmVmUHRyPERPTVdpbmRvdz4pOwogICAgICAgICB2aXJ0dWFsIH5KU0RPTVdpbmRvd1NoZWxs
KCk7CiAKICAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZG93OyB9CkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IG1fd2luZG93ID0gd2luZG93OwogICAgICAgICAgICAgc2V0UHJvdG90eXBlKHdpbmRvdy0+cHJv
dG90eXBlKCkpOwogICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0V2luZG93KFBhc3NSZWZQdHI8
RE9NV2luZG93Pik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5m
bzsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAkocmV2aXNp
b24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNCBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
ICNpbmNsdWRlICJKU0V2ZW50LmgiCiAKLW5hbWVzcGFjZSBKU0MgeworLy8gRklYTUU6IFRoZSBw
dXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBzaGFyZSB0aGlzIGJhc2Ugd2l0aCBtdWx0aXBsZSBj
bGFzc2VzLiBCdXQKKy8vIGl0IGlzIG5vdCBiZWluZyBzaGFyZWQgYXQgdGhpcyB0aW1lLgogCisv
LyBGSVhNRTogVGhlIG5hbWUgY2xhc2ggYmV0d2VlbiB0aGlzIGFuZCBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0UHJvdG90eXBlVGFibGUgaXMgb25seQorLy8gT0sgYmVjYXVzZSB0aGlzIGlzIGluIHRo
ZSBKU0MgbmFtZXNwYWNlOyBhbmQgdGhpcyBzaG91bGRuJ3QgYmUgaW4gdGhhdCBuYW1lc3BhY2Uh
CituYW1lc3BhY2UgSlNDIHsKICAgICBleHRlcm4gY29uc3Qgc3RydWN0IEhhc2hUYWJsZSBKU0V2
ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlOwogICAgIGV4dGVybiBjb25zdCBzdHJ1Y3QgSGFzaFRh
YmxlIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZTsKLQogfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC02MiwxMiArNjUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgZ2V0VmFsdWVQcm9wZXJ0eS9wdXRWYWx1ZVByb3BlcnR5CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWVGb3JQcm9wZXJ0eVRva2VuKGludCB0b2tlbik7CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBKU0V2ZW50VGFyZ2V0PgorICAgIHRlbXBsYXRlPGNsYXNzIEpT
U3BlY2lmaWNFdmVudFRhcmdldD4KICAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0QmFzZSB7CiAgICAg
cHVibGljOgotICAgICAgICBKU0V2ZW50VGFyZ2V0QmFzZSgpIHsgfQotCi0gICAgICAgIEpTQzo6
SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKKyAgICAgICAgSlNDOjpKU1ZhbHVl
KiBnZXRWYWx1ZVByb3BlcnR5KGNvbnN0IEpTU3BlY2lmaWNFdmVudFRhcmdldCogb3duZXIsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lID0gZXZlbnROYW1lRm9yUHJvcGVydHlU
b2tlbih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpCkBAIC03
Niw2NiArNzcsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbiwgSlNDOjpKU1ZhbHVlKiB2YWx1ZSkKKyAgICAgICAgdm9pZCBwdXRWYWx1ZVByb3Bl
cnR5KGNvbnN0IEpTU3BlY2lmaWNFdmVudFRhcmdldCogb3duZXIsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4sIEpTQzo6SlNWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lID0gZXZlbnROYW1lRm9yUHJvcGVydHlU
b2tlbih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGV2ZW50TmFtZSwgdmFsdWUpOwog
ICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgSlNFdmVudFRh
cmdldE5vZGU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKU0V2ZW50VGFyZ2V0U1ZHRWxlbWVudElu
c3RhbmNlOwotCiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIEpTUGFyZW50PgotICAgICAgICBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0V2ZW50VGFyZ2V0KiBvd25lciwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYgc2xvdCkKKyAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNTcGVjaWZpY0V2
ZW50VGFyZ2V0KiBvd25lciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6Z2V0U3RhdGljVmFsdWVTbG90PEpTRXZlbnRUYXJnZXQs
IEpTUGFyZW50PihleGVjLCAmSlNDOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlLCBvd25l
ciwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmdldFN0YXRp
Y1ZhbHVlU2xvdDxKU1NwZWNpZmljRXZlbnRUYXJnZXQsIEpTUGFyZW50PihleGVjLCAmSlNDOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlLCBvd25lciwgcHJvcGVydHlOYW1lLCBzbG90KTsK
ICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIEpTUGFyZW50PgotICAgICAgICB2
b2lkIHB1dChKU0V2ZW50VGFyZ2V0KiBvd25lciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqIHZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICAgICAgdm9pZCBwdXQoSlNTcGVjaWZpY0V2ZW50
VGFyZ2V0KiBvd25lciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqIHZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKICAgICAgICAgewotICAgICAgICAgICAgSlNDOjpsb29rdXBQdXQ8SlNFdmVudFRh
cmdldCwgSlNQYXJlbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsICZKU0M6OkpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzVGFibGUsIG93bmVyLCBzbG90KTsKKyAgICAgICAgICAgIEpTQzo6bG9v
a3VwUHV0PEpTU3BlY2lmaWNFdmVudFRhcmdldCwgSlNQYXJlbnQ+KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsICZKU0M6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzVGFibGUsIG93bmVyLCBzbG90
KTsKICAgICAgICAgfQogICAgIH07CiAKLSAgICAvLyBUaGlzIGNsYXNzIGlzIGEgbW9kaWZpZWQg
dmVyc2lvbiBvZiB0aGUgY29kZSB0aGUgSlNDX0RFRklORV9QUk9UT1RZUEVfV0lUSF9QUk9UT1RZ
UEUKLSAgICAvLyBhbmQgSlNDX0lNUExFTUVOVF9QUk9UT1RZUEUgbWFjcm9zIHByb2R1Y2UgLSB0
aGUgaWRlYSBpcyB0aGF0IGNsYXNzZXMgbGlrZSBKU0V2ZW50VGFyZ2V0Tm9kZQotICAgIC8vIGFu
ZCBKU0V2ZW50VGFyZ2V0U1ZHRWxlbWVudEluc3RhbmNlIGNhbiBzaGFyZSBhIHNpbmdsZSBwcm90
b3R5cGUganVzdCBkaWZmZXJpbmcgaW4gdGhlCi0gICAgLy8gbmFtaW5nICJFdmVudFRhcmdldE5v
ZGVQcm90b3R5cGUiIHZzICJFdmVudFRhcmdldFNWR0VsZW1lbnRJbnN0YW5jZVByb3RvdHlwZSIu
IEFib3ZlIG1lbnRpb25lZAotICAgIC8vIG1hY3JvcyBmb3JjZSB0aGUgZXhpc3RhbmNlIG9mIHNl
dmVyYWwgcHJvdG90eXBlIHRhYmxlcyBmb3IgZWFjaCBvZiB0aGUgY2xhc3NlcyAtIGF2b2lkIHRo
YXQuCi0gICAgdGVtcGxhdGU8Y2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZVBhcmVudCwgY2xh
c3MgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0aW9uPgotICAgIGNsYXNzIEpTRXZlbnRU
YXJnZXRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdCB7CisgICAgLy8gVGhlIGlkZWEg
aGVyZSBpcyB0aGF0IGNsYXNzZXMgbGlrZSBKU0V2ZW50VGFyZ2V0Tm9kZSBhbmQgSlNFdmVudFRh
cmdldFNWR0VsZW1lbnRJbnN0YW5jZQorICAgIC8vIGNhbiBzaGFyZSBhIHByb3RvdHlwZSB3aXRo
IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmVpbmcgdGhlIG5hbWUuCisgICAgdGVtcGxhdGU8Y2xhc3Mg
SlNTcGVjaWZpY0V2ZW50VGFyZ2V0PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRCYXNlUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNFdmVu
dFRhcmdldFByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogSlND
OjpKU09iamVjdChKU0V2ZW50VGFyZ2V0UHJvdG90eXBlUGFyZW50OjpzZWxmKGV4ZWMpKQorICAg
ICAgICBKU0V2ZW50VGFyZ2V0QmFzZVByb3RvdHlwZShQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJl
SUQ+IHN0cnVjdHVyZSkKKyAgICAgICAgICAgIDogSlNDOjpKU09iamVjdChzdHJ1Y3R1cmUpCiAg
ICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0aWMgSlND
OjpJZGVudGlmaWVyKiBwcm90b3R5cGVOYW1lID0gbmV3IEpTQzo6SWRlbnRpZmllcihleGVjLCBK
U0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb246OnByb3RvdHlwZUNsYXNzTmFtZSgpKTsK
LQotICAgICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSogb2Jq
ZWN0VmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldERpcmVjdCgqcHJvdG90eXBlTmFtZSkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQob2JqZWN0VmFsdWUtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0M6OkpTT2JqZWN0Kj4ob2JqZWN0VmFsdWUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBuZXdPYmplY3QgPSBu
ZXcgKGV4ZWMpIEpTRXZlbnRUYXJnZXRQcm90b3R5cGU8SlNFdmVudFRhcmdldFByb3RvdHlwZVBh
cmVudCwgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0aW9uPihleGVjKTsKLSAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KCpwcm90b3R5cGVOYW1lLCBuZXdPYmplY3QsIEpT
Qzo6RG9udEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKKyAgICAgICAgICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNTcGVjaWZpY0V2ZW50VGFyZ2V0PihleGVjKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmIHNsb3QpCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6Z2V0U3RhdGljRnVuY3Rpb25TbG90PEpTQzo6SlNPYmplY3Q+KGV4ZWMsICZKU0M6OkpTRXZl
bnRUYXJnZXRQcm90b3R5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2NsYXNzSW5mbyA9IHsgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0aW9uOjpwcm90
b3R5cGVDbGFzc05hbWUoKSwgMCwgJkpTQzo6SlNFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAw
IH07CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19jbGFzc0luZm8g
PSB7IEpTU3BlY2lmaWNFdmVudFRhcmdldDo6cHJvdG90eXBlQ2xhc3NOYW1lKCksIDAsICZKU0M6
OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwgMCB9OwogICAgICAgICAgICAgcmV0dXJuICZz
X2NsYXNzSW5mbzsKICAgICAgICAgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM2LDExICszNiwxOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTRXZlbnRUYXJn
ZXROb2RlKQogCi1KU0V2ZW50VGFyZ2V0Tm9kZTo6SlNFdmVudFRhcmdldE5vZGUoU3RydWN0dXJl
SUQqIHN0cnVjdHVyZSwgTm9kZSogbm9kZSkKK2NvbnN0IENsYXNzSW5mbyBKU0V2ZW50VGFyZ2V0
Tm9kZTo6c19pbmZvID0geyAiRXZlbnRUYXJnZXROb2RlIiwgJkpTTm9kZTo6c19pbmZvLCAwLCAw
IH07CisKK0pTRXZlbnRUYXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0Tm9kZShQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBub2RlKQog
ICAgIDogSlNOb2RlKHN0cnVjdHVyZSwgbm9kZSkKIHsKIH0KIAorSlNPYmplY3QqIEpTRXZlbnRU
YXJnZXROb2RlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlKEpTQzo6U3RydWN0dXJlSUQ6
OmNyZWF0ZShKU05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYykpKTsKK30KKwogdm9pZCBKU0V2ZW50
VGFyZ2V0Tm9kZTo6c2V0TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgSlNWYWx1ZSogZnVuYykgY29uc3QKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBpbXBsKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDcgKzM4LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgSlNFdmVudFRhcmdldE5vZGUgOiBwdWJsaWMgSlNOb2RlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEpTRXZlbnRUYXJnZXROb2RlKEpTQzo6U3RydWN0dXJlSUQq
LCBOb2RlKik7CisgICAgICAgIEpTRXZlbnRUYXJnZXROb2RlKFBhc3NSZWZQdHI8SlNDOjpTdHJ1
Y3R1cmVJRD4sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXROb2RlPik7CisKKyAgICAgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAg
ICAgIHZvaWQgc2V0TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgSlNDOjpKU1ZhbHVlKiBmdW5jKSBjb25zdDsKICAgICAgICAgSlNDOjpKU1Zh
bHVlKiBnZXRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkBA
IC00OSw2ICs1MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFs
dWUqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoSlNDOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTQzo6SlNWYWx1ZSopOwogCisgICAgICAg
IHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0ID0gMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogcHJvdG90eXBlQ2xhc3NOYW1lKCkgeyByZXR1cm4gIkV2ZW50VGFyZ2V0
Tm9kZVByb3RvdHlwZSI7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTRXZlbnRUYXJnZXRC
YXNlPEpTRXZlbnRUYXJnZXROb2RlPiBtX2Jhc2U7CiAgICAgfTsKQEAgLTczLDIwICs4MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbV9iYXNlLnB1dFZhbHVlUHJvcGVydHkodGhp
cywgZXhlYywgdG9rZW4sIHZhbHVlKTsKICAgICB9CiAKLQotICAgIHN0cnVjdCBKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlSW5mb3JtYXRpb24gewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcHJv
dG90eXBlQ2xhc3NOYW1lKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJFdmVudFRh
cmdldE5vZGVQcm90b3R5cGUiOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHByb3RvdHlwZUlkZW50aWZpZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
IltbRXZlbnRUYXJnZXROb2RlLnByb3RvdHlwZV1dIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0eXBlZGVmIEpTRXZlbnRUYXJnZXRQcm90b3R5cGU8SlNOb2RlUHJvdG90eXBlLCBKU0V2ZW50
VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb24+IEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlOwor
ICAgIHR5cGVkZWYgSlNFdmVudFRhcmdldEJhc2VQcm90b3R5cGU8SlNFdmVudFRhcmdldE5vZGU+
IEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlOwogICAgIEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVu
dFRhcmdldE5vZGUoSlNDOjpKU1ZhbHVlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAz
NjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEpTSFRNTEFsbENvbGxlY3Rpb24gOiBwdWJsaWMgSlNIVE1MQ29sbGVjdGlvbiB7CiAgICAgcHVi
bGljOgotICAgICAgICBKU0hUTUxBbGxDb2xsZWN0aW9uKEpTQzo6U3RydWN0dXJlSUQqIHN0cnVj
dHVyZSwgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCisgICAgICAgIEpTSFRNTEFsbENvbGxl
Y3Rpb24oUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24pCiAgICAgICAgICAgICA6IEpTSFRNTENvbGxlY3Rp
b24oc3RydWN0dXJlLCBjb2xsZWN0aW9uKQogICAgICAgICB7CiAgICAgICAgIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBnZXROYW1lZEl0ZW1zKEV4ZWNT
dGF0ZSoKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgbmFtZWRJdGVtc1swXS5nZXQoKSk7CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBK
U05hbWVkTm9kZXNDb2xsZWN0aW9uKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCksIG5hbWVkSXRlbXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTmFtZWRO
b2Rlc0NvbGxlY3Rpb24oZXhlYywgbmFtZWRJdGVtcyk7CiB9CiAKIC8vIEhUTUxDb2xsZWN0aW9u
cyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAg
SlNWYWx1ZSogSlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRQogICAgIGlmIChuYW1lZEl0
ZW1zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBuYW1lZEl0ZW1zWzBd
LmdldCgpKTsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPiAxKSAKLSAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBuYW1lZEl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLCBuYW1lZEl0ZW1zKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxJbnB1dEVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAzNjY2OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDggKzU5LDggQEAgSlNWYWx1ZSoganNIVE1MSW5wdXRFbGVtZW50QmFzZUZ1bmN0aW9uUwog
CiBjb25zdCBDbGFzc0luZm8gSlNIVE1MSW5wdXRFbGVtZW50QmFzZTo6c19pbmZvID0geyAiSFRN
TElucHV0RWxlbWVudEJhc2UiLCAmSlNIVE1MRWxlbWVudDo6c19pbmZvLCAmSlNIVE1MSW5wdXRF
bGVtZW50QmFzZVRhYmxlLCAwIH07CiAKLUpTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElu
cHV0RWxlbWVudEJhc2UoSlNDOjpTdHJ1Y3R1cmVJRCogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IGUpCi0gICAgOiBKU0hUTUxFbGVtZW50KHN0cnVjdHVyZSwgZS5nZXQo
KSkKK0pTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElucHV0RWxlbWVudEJhc2UoUGFzc1Jl
ZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gZSkKKyAgICA6IEpTSFRNTEVsZW1lbnQoc3RydWN0dXJlLCBlKQogewogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuaAkocmV2aXNp
b24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBKU0hUTUxJbnB1dEVsZW1lbnRCYXNlIDogcHVibGljIEpTSFRNTEVsZW1lbnQg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNIVE1MSW5wdXRFbGVtZW50QmFzZShKU0M6OlN0cnVj
dHVyZUlEKiwgUGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50Pik7CisgICAgICAgIEpTSFRNTElu
cHV0RWxlbWVudEJhc2UoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiwgUGFzc1JlZlB0cjxI
VE1MSW5wdXRFbGVtZW50Pik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShKU0M6OkV4
ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAz
NjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklU
U19JTl9DRUxMKEpTSFRNTE9wdGlvbkVsCiBjb25zdCBDbGFzc0luZm8gSlNIVE1MT3B0aW9uRWxl
bWVudENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJPcHRpb25Db25zdHJ1Y3RvciIsIDAsIDAsIDAg
fTsKIAogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpKU0hUTUxPcHRpb25FbGVtZW50
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBE
T01PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkK
KyAgICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
IHsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
ZXhlYywgNCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY2NjgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0ltYWdlQ29uc3Ry
dQogY29uc3QgQ2xhc3NJbmZvIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiSW1hZ2VD
b25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKIAogSlNJbWFnZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBET01P
YmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKKyAg
ICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsK
IH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3Jh
cHBlci5jcHAJKHJldmlzaW9uIDM2NjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMCArNjQsNyBAQCBK
U1ZhbHVlKiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoCiAKICAgICBpZiAocHJvdG90
eXBlLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG5ldyAodW53cmFwcGVkRXhlYykgSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgdW53cmFw
cGVkRXhlYy0+Z2xvYmFsRGF0YSgpLm51bGxQcm90b1N0cnVjdHVyZUlEKTsKLSAgICByZXR1cm4g
bmV3ICh1bndyYXBwZWRFeGVjKSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIodW53cmFwcGVkRXhl
YywgdW53cmFwcGVkT2JqZWN0LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHdyYXAodW53cmFwcGVk
RXhlYywgcHJvdG90eXBlKSkpOwotfQotCi1KU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OkpTSW5z
cGVjdGVkT2JqZWN0V3JhcHBlcihFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTT2JqZWN0KiB1
bndyYXBwZWRPYmplY3QsIEpTT2JqZWN0KiB3cmFwcGVkUHJvdG90eXBlKQotICAgIDogSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCB3cmFw
cGVkUHJvdG90eXBlKQotewotICAgIFdyYXBwZXJNYXAqIHdyYXBwZXJNYXAgPSB3cmFwcGVycygp
LmdldCh1bndyYXBwZWRHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKCF3cmFwcGVyTWFwKSB7Ci0g
ICAgICAgIHdyYXBwZXJNYXAgPSBuZXcgV3JhcHBlck1hcDsKLSAgICAgICAgd3JhcHBlcnMoKS5z
ZXQodW53cmFwcGVkR2xvYmFsT2JqZWN0KCksIHdyYXBwZXJNYXApOwotICAgIH0KLQotICAgIEFT
U0VSVCghd3JhcHBlck1hcC0+Y29udGFpbnModW53cmFwcGVkT2JqZWN0KSk7Ci0gICAgd3JhcHBl
ck1hcC0+c2V0KHVud3JhcHBlZE9iamVjdCwgdGhpcyk7CisgICAgcmV0dXJuIG5ldyAodW53cmFw
cGVkRXhlYykgSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBl
ZE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih3cmFwKHVud3JhcHBlZEV4ZWMsIHByb3Rv
dHlwZSkpLT5pbmhlcml0b3JJRCgpKTsKIH0KIAogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjpK
U0luc3BlY3RlZE9iamVjdFdyYXBwZXIoRXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU09iamVj
dCogdW53cmFwcGVkT2JqZWN0LCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCkK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIu
aAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2Jq
ZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNT
dGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBKU0M6
OkpTT2JqZWN0KiB3cmFwcGVkUHJvdG90eXBlKTsKICAgICAgICAgSlNJbnNwZWN0ZWRPYmplY3RX
cmFwcGVyKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTT2JqZWN0KiB1bndy
YXBwZWRPYmplY3QsIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4pOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NHZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIuY3BwCShyZXZpc2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0
b3JDYWxsYmFja1dyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxNCArNjIsNyBAQCBK
U1ZhbHVlKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhCiAKICAgICBpZiAocHJvdG90
eXBlLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG5ldyAodW53cmFwcGVkRXhlYykgSlNJbnNw
ZWN0b3JDYWxsYmFja1dyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCB1bndy
YXBwZWRFeGVjLT5nbG9iYWxEYXRhKCkubnVsbFByb3RvU3RydWN0dXJlSUQpOwotICAgIHJldHVy
biBuZXcgKHVud3JhcHBlZEV4ZWMpIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKHVud3JhcHBl
ZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih3cmFwKHVud3Jh
cHBlZEV4ZWMsIHByb3RvdHlwZSkpKTsKLX0KLQotSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6
OkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNP
YmplY3QqIHVud3JhcHBlZE9iamVjdCwgSlNPYmplY3QqIHdyYXBwZWRQcm90b3R5cGUpCi0gICAg
OiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcih1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRPYmpl
Y3QsIHdyYXBwZWRQcm90b3R5cGUpCi17Ci0gICAgQVNTRVJUKCF3cmFwcGVycygpLmNvbnRhaW5z
KHVud3JhcHBlZE9iamVjdCkpOwotICAgIHdyYXBwZXJzKCkuc2V0KHVud3JhcHBlZE9iamVjdCwg
dGhpcyk7CisgICAgcmV0dXJuIG5ldyAodW53cmFwcGVkRXhlYykgSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHdyYXAodW53cmFwcGVkRXhlYywgcHJvdG90eXBlKSktPmluaGVyaXRvcklEKCkpOwog
fQogCiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIoRXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCkKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgJKHJldmlzaW9uIDM2NjY4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIHVud3Jh
cHBlZEV4ZWMsIEpTQzo6SlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgSlNDOjpKU09iamVjdCog
d3JhcHBlZFByb3RvdHlwZSk7CiAgICAgICAgIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKEpT
Qzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTT2JqZWN0KiB1bndyYXBwZWRPYmpl
Y3QsIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4pOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBhbGxvd3NDYWxsQXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gMzY2NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uOjoKIC8vIFN1Y2ggYSBjb2xsZWN0aW9uIGlzIHVzdWFsbHkgdmVyeSBz
aG9ydC1saXZlZCwgaXQgb25seSBleGlzdHMKIC8vIGZvciBjb25zdHJ1Y3RzIGxpa2UgZG9jdW1l
bnQuZm9ybXMuPG5hbWU+WzFdLAogLy8gc28gaXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSB0aGF0
IGl0J3Mgc3RvcmluZyBhbGwgdGhlIG5vZGVzICh3aXRoIHRoZSBzYW1lIG5hbWUpLiAoRGF2aWQp
Ci1KU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uKEpTQzo6SlNP
YmplY3QqIHByb3RvdHlwZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBub2RlcykKLSAg
ICA6IERPTU9iamVjdChwcm90b3R5cGUpCitKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+JiBub2RlcykKKyAgICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQogICAgICwgbV9ub2Rlcyhu
ZXcgVmVjdG9yPFJlZlB0cjxOb2RlPiA+KG5vZGVzKSkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAzNjY2OCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyB3aGVuIG11bHRp
cGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUgbmFtZS4KICAgICBjbGFzcyBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+Jik7CisgICAgICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKTsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJldmlzaW9uIDM2NjY4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDE3ICs1Niw2IEBAIEpTVmFsdWUqIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyOjpjYWMKICAgICByZXR1cm4gdjsKIH0KIAotSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKEV4ZWNTdGF0ZSogdW53cmFwcGVk
RXhlYywgSlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgSlNPYmplY3QqIHdyYXBwZWRQcm90b3R5
cGUpCi0gICAgOiBKU09iamVjdCh3cmFwcGVkUHJvdG90eXBlKQotICAgICwgbV91bndyYXBwZWRH
bG9iYWxPYmplY3QodW53cmFwcGVkRXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKQotICAgICwg
bV91bndyYXBwZWRPYmplY3QodW53cmFwcGVkT2JqZWN0KQotewotICAgIEFTU0VSVF9BUkcodW53
cmFwcGVkRXhlYywgdW53cmFwcGVkRXhlYyk7Ci0gICAgQVNTRVJUX0FSRyh1bndyYXBwZWRPYmpl
Y3QsIHVud3JhcHBlZE9iamVjdCk7Ci0gICAgQVNTRVJUX0FSRyh3cmFwcGVkUHJvdG90eXBlLCB3
cmFwcGVkUHJvdG90eXBlKTsKLSAgICBBU1NFUlRfQVJHKHdyYXBwZWRQcm90b3R5cGUsIGFzV3Jh
cHBlcih3cmFwcGVkUHJvdG90eXBlKSk7Ci19Ci0KIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcihFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpT
T2JqZWN0KiB1bndyYXBwZWRPYmplY3QsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVy
ZUlEKQogICAgIDogSlNPYmplY3Qoc3RydWN0dXJlSUQpCiAgICAgLCBtX3Vud3JhcHBlZEdsb2Jh
bE9iamVjdCh1bndyYXBwZWRFeGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCShyZXZp
c2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0
YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QsIEpTQzo6
SlNPYmplY3QqIHdyYXBwZWRQcm90b3R5cGUpOwogICAgICAgICBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU09iamVjdCogdW53
cmFwcGVkT2JqZWN0LCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+KTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwCShy
ZXZpc2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxMiBAQCBjb25zdCBDbGFzc0luZm8gSlNSR0JDb2xv
cjo6c19pbmZvID0geyAiCiBAZW5kCiAqLwogCi1KU1JHQkNvbG9yOjpKU1JHQkNvbG9yKEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGNvbG9yKQotICAgIDogRE9NT2JqZWN0KHByb3RvdHlw
ZSkKK0pTUkdCQ29sb3I6OkpTUkdCQ29sb3IoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb2xv
cikKKyAgICA6IERPTU9iamVjdChnZXRET01TdHJ1Y3R1cmU8SlNSR0JDb2xvcj4oZXhlYykpCiAg
ICAgLCBtX2NvbG9yKGNvbG9yKQogewogfQogCi1KU1JHQkNvbG9yOjp+SlNSR0JDb2xvcigpCi17
Ci19Ci0KIGJvb2wgSlNSR0JDb2xvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1JHQkNvbG9yLCBET01PYmplY3Q+KGV4
ZWMsICZKU1JHQkNvbG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CkBAIC03OCw4
ICs3NCw3IEBAIEpTVmFsdWUqIEpTUkdCQ29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXgKIAogSlNW
YWx1ZSogZ2V0SlNSR0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZXF1YWxzIGZvciBSR0JDb2xvciBzaW5jZSB0aGV5J3Jl
IG5vdCByZWZjb3VudGVkIG9iamVjdHMuCi0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNSR0JDb2xv
cihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBjb2xvcik7
CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNSR0JDb2xvcihleGVjLCBjb2xvcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCShyZXZp
c2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMSArMjYsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Ly8gRklYTUU6IEpTUkdCQ29sb3Igc2hvdWxkIGhhdmUgYSBwcm9wZXIgUHJvdG90eXBlIGFuZCBD
b25zdHJ1Y3RvcgorICAgIC8vIEZJWE1FOiBKU1JHQkNvbG9yIHNob3VsZCBoYXZlIGEgcHJvcGVy
IHByb3RvdHlwZSBhbmQgYSBjb25zdHJ1Y3Rvci4KICAgICBjbGFzcyBKU1JHQkNvbG9yIDogcHVi
bGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU1JHQkNvbG9yKEpTQzo6SlNP
YmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgY29sb3IpOwotICAgICAgICB+SlNSR0JDb2xvcigp
OworICAgICAgICBKU1JHQkNvbG9yKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBK
U0M6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4p
IGNvbnN0OwpAQCAtNDIsNiArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHVuc2lnbmVkIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKKyAgICAgICAgc3Rh
dGljIEpTQzo6T2JqZWN0UHJvdG90eXBlKiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgog
ICAgICAgICB1bnNpZ25lZCBtX2NvbG9yOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAz
NjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlKiBKU1NRTFJlc3Vs
dFNldFJvd0xpc3Q6Oml0ZW0oRXhlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKIAogICAgIHVuc2lnbmVkIG51bUNv
bHVtbnMgPSBtX2ltcGwtPmNvbHVtbk5hbWVzKCkuc2l6ZSgpOwogICAgIHVuc2lnbmVkIHZhbHVl
c0luZGV4ID0gaW5kZXggKiBudW1Db2x1bW5zOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY2Njgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChKU1hNTEh0dHBSZXF1ZQogY29uc3QgQ2xhc3NJbmZvIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsK
IAogSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBET01PYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKKyAgICA6IERP
TU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNYTUxIdHRwUmVxdWVz
dFByb3RvdHlwZTo6c2VsZihleGVjKSwgTm9uZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY2Njgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTWFNMVFByb2Nlc3NvCiBjb25zdCBDbGFzc0luZm8gSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlhTTFRQcm9jZXNzb3JDb25zcnVjdG9yIiwgMCwgMCwgMCB9OwogCiBK
U1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6SlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQotICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+b2JqZWN0UHJvdG90eXBlKCkpCisgICAgOiBET01PYmplY3QoU3RydWN0dXJlSUQ6OmNyZWF0
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKIHsKICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNYU0xUUHJvY2Vz
c29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBOb25lKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyAr
MTMyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKICAgICBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+Y2xlYXIoKTsK
ICAgICBtX2xpdmVGb3JtZXJXaW5kb3dzLmFkZChtX3dpbmRvd1NoZWxsLT53aW5kb3coKSk7Ci0g
ICAgbV93aW5kb3dTaGVsbC0+c2V0V2luZG93KG5ldyAoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKSBKU0RPTVdpbmRvdyhtX2ZyYW1lLT5kb21XaW5kb3coKSwgbV93aW5kb3dTaGVs
bCkpOworICAgIG1fd2luZG93U2hlbGwtPnNldFdpbmRvdyhtX2ZyYW1lLT5kb21XaW5kb3coKSk7
CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgYXR0YWNo
RGVidWdnZXIocGFnZS0+ZGVidWdnZXIoKSk7CiAgICAgICAgIG1fd2luZG93U2hlbGwtPndpbmRv
dygpLT5zZXRQcm9maWxlR3JvdXAocGFnZS0+Z3JvdXAoKS5pZGVudGlmaWVyKCkpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAz
NjY2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTM3OCw3ICszNzgsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAg
ICMgR2V0IGNvcnJlY3QgcGFzcy9zdG9yZSB0eXBlcyByZXNwZWN0aW5nIFBPRFR5cGUgZmxhZwog
ICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlw
ZSJ9OwotICAgIG15ICRwYXNzVHlwZSA9ICRwb2RUeXBlID8gIkpTU1ZHUE9EVHlwZVdyYXBwZXI8
JHBvZFR5cGU+KiIgOiAiJGltcGxDbGFzc05hbWUqIjsKKyAgICBteSAkaW1wbFR5cGUgPSAkcG9k
VHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiAiIDogJGltcGxDbGFzc05hbWU7
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJHBvZFR5cGUuaFwi
XG4iKSBpZiAkcG9kVHlwZSBhbmQgJHBvZFR5cGUgbmUgImZsb2F0IjsKIAogICAgIHB1c2goQGhl
YWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIkpTU1ZHUE9EVHlwZVdyYXBwZXIuaFwiXG4i
KSBpZiAkcG9kVHlwZTsKQEAgLTQwMCwyMCArNDAwLDE4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoJHBhc3NU
eXBlLCBKU0RPTVdpbmRvd1NoZWxsKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4sIFBhc3NSZWZQ
dHI8JGltcGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CisgICAgfSBlbHNpZiAoSXNT
VkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShQYXNzUmVmUHRyPEpTQzo6U3Ry
dWN0dXJlSUQ+LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xu
Iik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFy
YW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6U3RydWN0dXJlSUQqLCAkcGFzc1R5cGUsIFNWR0VsZW1l
bnQqIGNvbnRleHQpO1xuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpTdHJ1Y3R1cmVJRCosICRwYXNzVHlw
ZSk7XG4iKTsKLSAgICAgICAgfQorICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRj
bGFzc05hbWUoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiwgUGFzc1JlZlB0cjwkaW1wbFR5
cGU+KTtcbiIpOwogICAgIH0KIAogICAgICMgRGVzdHJ1Y3RvcgogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdmlydHVhbCB+JGNsYXNzTmFtZSgpO1xuIikgaWYgKCEkaGFzUGFyZW50IG9y
ICRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIpOwogCiAgICAgIyBQcm90b3R5cGUKLSAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90
b3R5cGUoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSop
O1xuIikgaWYgJGludGVyZmFjZU5hbWUgbmUgIkRPTVdpbmRvdyI7CiAKICAgICAkaW1wbEluY2x1
ZGVzeyIke2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZgogICAgICAgICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0KQEAgLTYxOSw5ICs2MTcsOSBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50KiBjb250ZXh0KTtc
biIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigk
aW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6
OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkcGFzc1R5cGUsIFNWR0VsZW1lbnQqIGNv
bnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1Zh
bHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKiwgU1ZHRWxlbWVudCogY29udGV4
dCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkcGFzc1R5cGUpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKik7XG4iKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
JGludGVyZmFjZU5hbWUgZXEgIk5vZGUiKSB7CiAgICAgICAgICAgICAjIFJlc29sdmUgYW1iaWd1
aXR5IHdpdGggRXZlbnRUYXJnZXQgdGhhdCBvdGhlcndpc2UgZXhpc3RzLgpAQCAtNjQyLDExICs2
NDAsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJcbiIpOwogCi0gICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9uIC0tIGNvZGUgYWRv
cHRlZCBmcm9tIHRoZSBKU0NfREVGSU5FX1BST1RPVFlQRSBhbmQgSlNDX0RFRklORV9QUk9UT1RZ
UEVfV0lUSF9QUk9UT1RZUEUgbWFjcm9zCisgICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9u
LgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAke2NsYXNzTmFtZX1Qcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU09iamVjdCB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
cHVibGljOlxuIik7CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
bGYoKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQqIG9wZXJh
dG9yIG5ldyhzaXplX3QpO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSop
O1xuIik7CkBAIC02NTQsMjEgKzY1MSwxMiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH1cbiIpOwogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcbiIpOwogICAg
IGlmICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRzID4gMCkgewotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6
OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgfQogICAgIGlmICgkbnVtQ29uc3RhbnRzIG5lIDAp
IHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUqIGdldFZh
bHVlUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0O1xuIik7CiAgICAg
fQotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENhY2hlIn0p
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5
cGUoKSA6IEpTQzo6SlNPYmplY3QoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KS0+bnVsbFByb3RvU3RydWN0dXJlSUQpIHsgfVxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpXG4iKTsKLSAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJHBhcmVudENsYXNz
TmFtZSBuZSAiSlNDOjpET01Ob2RlRmlsdGVyIikgewotICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgOiBKU0M6OkpTT2JqZWN0KCR7cGFyZW50Q2xhc3NOYW1lfVByb3Rv
dHlwZTo6c2VsZihleGVjKSkgeyB9XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIDogSlNDOjpKU09iamVjdChleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSB7IH1cbiIpOwotICAgICAgICB9
Ci0gICAgfQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90
eXBlKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlKSA6IEpTQzo6SlNPYmpl
Y3Qoc3RydWN0dXJlKSB7IH1cbiIpOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5c
biIpOwogCkBAIC02ODAsNyArNjY4LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZVxuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5hbWVzcGFjZSBXZWJD
b3JlXG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRp
b25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsOwogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIjZW5kaWZcbiIpOwogfQpAQCAtODYwLDE2ICs4NDgsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaFNwZWNpYWxz
LCBcQGhhc2hQYXJhbWV0ZXJzKTsKIAogICAgIHB1c2goQGltcGxDb250ZW50LCAiY29uc3QgQ2xh
c3NJbmZvICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUNsYXNz
TmFtZX1Qcm90b3R5cGVcIiwgMCwgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCAwIH07XG5c
biIpOwotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENhY2hl
In0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9
UHJvdG90eXBlOjpzZWxmKCIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgICAgICJFeGVj
U3RhdGUqIGV4ZWMiKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAgICAgIilcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gbmV3
ICIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgICAgICAiKGV4ZWMpICIpIHVubGVzcyAk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IjsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICAgICAgIiR7Y2xhc3NOYW1lfVByb3RvdHlwZSgpO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKLSAgICB9IGVsc2UgeworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBu
ZSAiRE9NV2luZG93IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAk
e2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjKVxuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9PihleGVjKTtcbiIpOwpAQCAt
OTE4LDcgKzg5Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAjIEdldCBj
b3JyZWN0IHBhc3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKICAgICBteSAk
cG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKLSAg
ICBteSAkcGFzc1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBl
PioiIDogIiRpbXBsQ2xhc3NOYW1lKiI7CisgICAgbXkgJGltcGxUeXBlID0gJHBvZFR5cGUgPyAi
SlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gIiA6ICRpbXBsQ2xhc3NOYW1lOwogCiAgICAg
bXkgJG5lZWRzU1ZHQ29udGV4dCA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRp
bXBsQ2xhc3NOYW1lKTsKICAgICBteSAkcGFyZW50TmVlZHNTVkdDb250ZXh0ID0gKCRuZWVkc1NW
R0NvbnRleHQgYW5kICRwYXJlbnRDbGFzc05hbWUgPX4gL1NWRy8pOwpAQCAtOTI2LDEwICs5MDUs
MTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIENvbnN0cnVjdG9yCiAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZSgiSlNET01XaW5kb3dTaGVsbCIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZSgkcGFzc1R5cGUgaW1wbCwgSlNET01XaW5kb3dTaGVs
bCogc2hlbGwpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50
Q2xhc3NOYW1lKCR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZigpLCBpbXBsLCBzaGVsbClcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBp
bXBsLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBpbXBsLCBzaGVsbClcbiIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9
OjokY2xhc3NOYW1lKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmUsICRwYXNzVHlwZSBpbXBsIiAuICgk
bmVlZHNTVkdDb250ZXh0ID8gIiwgU1ZHRWxlbWVudCogY29udGV4dCIgOiAiIikgLiAiKVxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGlt
cGwiIC4gKCRuZWVkc1NWR0NvbnRleHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAu
ICIpXG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUsIGltcGwiIC4gKCRw
YXJlbnROZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTk3MSwxNCArOTUwLDE2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuICAgIGZvcmdldERPTU9iamVjdChz
dGF0aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4oaW1wbCgpKSk7XG59XG5cbiIpOwogICAgIH0K
IAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NOYW1lfTo6Y3JlYXRl
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYylcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBuZXcgSlNET01XaW5kb3dQcm90b3R5cGU7
XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gbmV3IChleGVjKSAke2NsYXNzTmFtZX1Qcm90b3R5cGUoZXhlYyk7XG4iKTsKKyAgICBpZiAo
JGludGVyZmFjZU5hbWUgbmUgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIGlm
ICgkaGFzUGFyZW50ICYmICRwYXJlbnRDbGFzc05hbWUgbmUgIkpTQzo6RE9NTm9kZUZpbHRlciIp
IHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBuZXcgKGV4ZWMp
ICR7Y2xhc3NOYW1lfVByb3RvdHlwZShKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUoJHtwYXJlbnRD
bGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKGV4ZWMpKSk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBuZXcgKGV4ZWMpICR7
Y2xhc3NOYW1lfVByb3RvdHlwZShKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpO1xuIik7CisgICAgICAgIH0KKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cbiIpOwogCiAgICAgbXkgJGhhc0dldHRlciA9ICRudW1BdHRyaWJ1dGVzID4g
MCAKICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
R2VuZXJhdGVDb25zdHJ1Y3RvciJ9IApAQCAtMTIyMCw4ICsxMjAxLDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJK
U1ZhbHVlKiAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYylcbntc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgSWRlbnRp
ZmllciogY29uc3RydWN0b3JJZGVudGlmaWVyID0gbmV3IElkZW50aWZpZXIoZXhlYywgXCJbWyR7
aW50ZXJmYWNlTmFtZX0uY29uc3RydWN0b3JdXVwiKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gY2FjaGVHbG9iYWxPYmplY3Q8JHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3I+KGV4ZWMsICpjb25zdHJ1Y3RvcklkZW50aWZpZXIpO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1D
b25zdHJ1Y3Rvcj4oZXhlYyk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOwogICAgIH0KIApAQCAtMTM2MSwyMCArMTM0MSwyMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgaWYgKCghJGhhc1BhcmVudCBvciAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJHZW5lcmF0ZVRvSlMifSkgYW5kICFVc2VzTWFudWFsVG9KU0ltcGxlbWVudGF0
aW9uKCRpbXBsQ2xhc3NOYW1lKSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogb2JqLCBTVkdFbGVtZW50KiBj
b250ZXh0KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1
ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlw
ZT4qIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOwogICAgICAgICB9IGVsc2lmIChJ
c1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgJHBhc3NUeXBlIG9iaiwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOworICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6
OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsICRwYXNzVHlwZSBvYmopXG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCAkaW1wbFR5cGUqIG9iamVjdClcbiIpOwogICAgICAgICB9CiAKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NT2JqZWN0
V3JhcHBlcjwkY2xhc3NOYW1lLCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiA+KGV4ZWMs
IG9iaiwgY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPCRjbGFzc05hbWUsIEpTU1ZHUE9EVHlwZVdyYXBw
ZXI8JHBvZFR5cGU+ID4oZXhlYywgb2JqZWN0LCBjb250ZXh0KTtcbiIpOwogICAgICAgICB9IGVs
c2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RX
cmFwcGVyPCRjbGFzc05hbWU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPCRjbGFz
c05hbWU+KGV4ZWMsIG9iamVjdCwgY29udGV4dCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RXcmFw
cGVyPCRjbGFzc05hbWU+KGV4ZWMsIG9iaik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPCRjbGFzc05hbWU+KGV4ZWMs
IG9iamVjdCk7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
biIpOwogICAgIH0KQEAgLTE4MzUsNyArMTgxNSw3IEBAIG15ICRpbXBsQ29udGVudCA9IDw8ICJF
T0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsK
IHB1YmxpYzoKICAgICAke2NsYXNzTmFtZX1Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCi0g
ICAgICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJv
dG90eXBlKCkpCisgICAgICAgIDogRE9NT2JqZWN0KFN0cnVjdHVyZUlEOjpjcmVhdGUoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCiAgICAgewogICAgICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtwcm90b0NsYXNz
TmFtZX06OnNlbGYoZXhlYyksIE5vbmUpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCShyZXZpc2lvbiAzNjY2OCkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEzICsyOCwxNiBAQAogCiAjaW5jbHVk
ZSA8a2pzL0FycmF5UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8a2pzL0Vycm9yLmg+CisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1l
QXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZKU0FycmF5OjppbmZvLCAwLCAwIH07
CiAKLVJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ3M6
OkFycmF5ICphKQotICAgIDogSlNPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheVByb3RvdHlwZSgpKQorUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBl
eGVjLCBCaW5kaW5nczo6QXJyYXkqIGEpCisgICAgOiBKU09iamVjdChnZXRET01TdHJ1Y3R1cmU8
UnVudGltZUFycmF5PihleGVjKSkKICAgICAsIF9hcnJheShhKQogewogfQpAQCAtMTE2LDMgKzEx
OSw1IEBAIGJvb2wgUnVudGltZUFycmF5OjpkZWxldGVQcm9wZXJ0eShFeGVjU3QKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9u
IDM2NjY4KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwxNiArMjYsMTQgQEAKICNpZm5kZWYgUlVOVElNRV9BUlJBWV9IXwog
I2RlZmluZSBSVU5USU1FX0FSUkFZX0hfCiAKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLSNp
bmNsdWRlIDxranMvSlNPYmplY3QuaD4KICNpbmNsdWRlICJydW50aW1lLmgiCisjaW5jbHVkZSA8
a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAogY2xhc3MgUnVu
dGltZUFycmF5IDogcHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBSdW50aW1lQXJyYXko
RXhlY1N0YXRlICpleGVjLCBCaW5kaW5nczo6QXJyYXkgKmkpOworICAgIFJ1bnRpbWVBcnJheShF
eGVjU3RhdGUqLCBCaW5kaW5nczo6QXJyYXkqKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwg
dW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwpAQCAtNTMsNiArNTEsMTEgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICBzdGF0aWMgQXJyYXlQcm90
b3R5cGUqIGNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNp
b24gMzY2NjgpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMTkgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAj
aW5jbHVkZSA8a2pzL0Vycm9yLmg+Ci0jaW5jbHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CiAj
aW5jbHVkZSA8a2pzL09iamVjdFByb3RvdHlwZS5oPgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBKU0MgeworCiB1c2luZyBuYW1l
c3BhY2UgQmluZGluZ3M7CiAKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lT2JqZWN0SW1wOjpzX2lu
Zm8gPSB7ICJSdW50aW1lT2JqZWN0IiwgMCwgMCwgMCB9OwogCi1SdW50aW1lT2JqZWN0SW1wOjpS
dW50aW1lT2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxCaW5kaW5nczo6SW5z
dGFuY2U+IGkpCi0gICAgOiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKQorUnVudGltZU9iamVjdEltcDo6UnVudGltZU9iamVjdEltcChFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGkpCisgICAgOiBKU09iamVjdChnZXRE
T01TdHJ1Y3R1cmU8UnVudGltZU9iamVjdEltcD4oZXhlYykpCiAgICAgLCBpbnN0YW5jZShpKQog
ewogICAgIGluc3RhbmNlLT5yb290T2JqZWN0KCktPmFkZFJ1bnRpbWVPYmplY3QodGhpcyk7CkBA
IC01OSw3ICs2Miw3IEBAIHZvaWQgUnVudGltZU9iamVjdEltcDo6aW52YWxpZGF0ZSgpCiBKU1Zh
bHVlKiBSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIFJ1bnRpbWVPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50
aW1lT2JqZWN0SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgUmVmUHRyPEJpbmRpbmdzOjpJ
bnN0YW5jZT4gaW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKKyAgICBSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQog
ICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkBAIC03Nyw3ICs4
MCw3IEBAIEpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWMKIEpTVmFsdWUq
IFJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7ICAgIAog
ICAgIFJ1bnRpbWVPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0
SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4g
aW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKKyAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3Rh
bmNlID0gdGhpc09iai0+aW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQogICAgICAgICBy
ZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkBAIC05Niw3ICs5OSw3IEBAIEpT
VmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEUKIEpTVmFsdWUqIFJ1bnRpbWVP
YmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVP
YmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wICo+KHNsb3Qu
c2xvdEJhc2UoKSk7Ci0gICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFuY2UgPSB0
aGlzT2JqLT5pbnN0YW5jZTsKKyAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09i
ai0+aW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQogICAgICAgICByZXR1cm4gdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkBAIC0xNjMsNyArMTY2LDcgQEAgdm9pZCBSdW50aW1l
T2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+IHByb3RlY3RvcihpbnN0YW5jZSk7Cisg
ICAgUmVmUHRyPEluc3RhbmNlPiBwcm90ZWN0b3IoaW5zdGFuY2UpOwogICAgIGluc3RhbmNlLT5i
ZWdpbigpOwogCiAgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCkBAIC0xODcs
NyArMTkwLDcgQEAgSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKAogICAg
IGlmICghaW5zdGFuY2UpCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihl
eGVjKTsKICAgICAKLSAgICBSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPiBwcm90ZWN0b3IoaW5z
dGFuY2UpOworICAgIFJlZlB0cjxJbnN0YW5jZT4gcHJvdGVjdG9yKGluc3RhbmNlKTsKICAgICBp
bnN0YW5jZS0+YmVnaW4oKTsKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+ZGVmYXVs
dFZhbHVlKGV4ZWMsIGhpbnQpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKQEAgLTE5Niw3ICsxOTks
NyBAQCBKU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoCiAKIHN0YXRpYyBK
U1ZhbHVlKiBjYWxsUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgUmVmUHRyPEJpbmRp
bmdzOjpJbnN0YW5jZT4gaW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGZ1
bmN0aW9uKS0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKKyAgICBSZWZQdHI8SW5zdGFuY2U+IGlu
c3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihmdW5jdGlvbiktPmdldEludGVy
bmFsSW5zdGFuY2UoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CiAgICAgaW5z
dGFuY2UtPmVuZCgpOwpAQCAtMjI3LDMgKzIzMCw1IEBAIEpTT2JqZWN0KiBSdW50aW1lT2JqZWN0
SW1wOjp0aHJvd0ludmFsaWQKIHsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVu
Y2VFcnJvciwgIlRyeWluZyB0byBhY2Nlc3Mgb2JqZWN0IGZyb20gZGVzdHJveWVkIHBsdWctaW4u
Iik7CiB9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMzY2Njgp
CisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjZGVmaW5lIEtKU19SVU5USU1FX09CSkVDVF9ICiAKICNpbmNsdWRlICJy
dW50aW1lLmgiCi0jaW5jbHVkZSA8a2pzL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8a2pzL0pTR2xv
YmFsT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00OSwxMSArNDksMTUgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLXByb3RlY3RlZDoK
LSAgICBmcmllbmQgY2xhc3MgQmluZGluZ3M6Okluc3RhbmNlOwotICAgIFJ1bnRpbWVPYmplY3RJ
bXAoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4pOyAvLyBP
bmx5IGFsbG93IEluc3RhbmNlcyBhbmQgZGVyaXZlZCBjbGFzc2VzIHRvIGNyZWF0ZSB1cworICAg
IHN0YXRpYyBPYmplY3RQcm90b3R5cGUqIGNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMp
CisgICAgeworICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKTsKKyAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJpbmRp
bmdzOjpJbnN0YW5jZTsKKyAgICBSdW50aW1lT2JqZWN0SW1wKEV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8QmluZGluZ3M6Okluc3RhbmNlPik7CisKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgIAogICAgIHN0YXRpYyBK
U1ZhbHVlKiBmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgJKHJldmlzaW9uIDM2NjY4KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAib2JqY19oZWFk
ZXIuaCIKICNpbmNsdWRlICJydW50aW1lLmgiCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29y
ZUZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxranMvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxranMv
SlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtOTQsMTIgKzkzLDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIE9iamNGYWxsYmFj
a09iamVjdEltcCA6IHB1YmxpYyBKU09iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqY0ZhbGxiYWNr
T2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgT2JqY0luc3RhbmNlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTsKKyAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoRXhlY1N0YXRlKiwg
T2JqY0luc3RhbmNlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAotICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIF9pdGVtOyB9CiAKKyAgICBzdGF0aWMgT2JqZWN0UHJvdG90eXBlKiBjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CisgICAgfQorCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90
Jik7CkBAIC0xMDksNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCB0b0Jv
b2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogCiAgICAgUmVm
UHRyPE9iamNJbnN0YW5jZT4gX2luc3RhbmNlOwogICAgIElkZW50aWZpZXIgX2l0ZW07CkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIm9iamNfcnVudGltZS5oIgog
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0T2JqZWN0Lmgi
CiAjaW5jbHVkZSAib2JqY19pbnN0YW5jZS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIK
QEAgLTM2LDE2ICszNywxOCBAQAogI2luY2x1ZGUgPGtqcy9PYmplY3RQcm90b3R5cGUuaD4KICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBu
YW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1leHRl
cm4gQ2xhc3NTdHJ1Y3RQdHIgQmluZGluZ3M6OndlYlNjcmlwdE9iamVjdENsYXNzKCkKK25hbWVz
cGFjZSBKU0MgeworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworQ2xhc3NTdHJ1Y3RQdHIgd2ViU2Ny
aXB0T2JqZWN0Q2xhc3MoKQogewogICAgIHN0YXRpYyBDbGFzc1N0cnVjdFB0cjxXZWJTY3JpcHRP
YmplY3Q+IHdlYlNjcmlwdE9iamVjdENsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJTY3Jp
cHRPYmplY3QiKTsKICAgICByZXR1cm4gd2ViU2NyaXB0T2JqZWN0Q2xhc3M7CiB9CiAKLWV4dGVy
biBDbGFzc1N0cnVjdFB0ciBCaW5kaW5nczo6d2ViVW5kZWZpbmVkQ2xhc3MoKQorQ2xhc3NTdHJ1
Y3RQdHIgd2ViVW5kZWZpbmVkQ2xhc3MoKQogewogICAgIHN0YXRpYyBDbGFzc1N0cnVjdFB0cjxX
ZWJVbmRlZmluZWQ+IHdlYlVuZGVmaW5lZENsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJV
bmRlZmluZWQiKTsKICAgICByZXR1cm4gd2ViVW5kZWZpbmVkQ2xhc3M7CkBAIC0yMDEsMTAgKzIw
NCwxMCBAQCB1bnNpZ25lZCBpbnQgT2JqY0FycmF5OjpnZXRMZW5ndGgoKSBjb25zCiAgICAgcmV0
dXJuIFtfYXJyYXkuZ2V0KCkgY291bnRdOwogfQogCi1jb25zdCBDbGFzc0luZm8gT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wOjppbmZvID0geyAiT2JqY0ZhbGxiYWNrT2JqZWN0IiwgMCwgMCwgMCB9Owor
Y29uc3QgQ2xhc3NJbmZvIE9iamNGYWxsYmFja09iamVjdEltcDo6c19pbmZvID0geyAiT2JqY0Zh
bGxiYWNrT2JqZWN0IiwgMCwgMCwgMCB9OwogCiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6Ok9iamNG
YWxsYmFja09iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIE9iamNJbnN0YW5jZSogaSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQotICAgIDogSlNPYmplY3QoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKKyAgICA6IEpTT2JqZWN0KGdldERPTVN0
cnVjdHVyZTxPYmpjRmFsbGJhY2tPYmplY3RJbXA+KGV4ZWMpKQogICAgICwgX2luc3RhbmNlKGkp
CiAgICAgLCBfaXRlbShwcm9wZXJ0eU5hbWUpCiB7CkBAIC0yODMsMyArMjg2LDYgQEAgYm9vbCBP
YmpjRmFsbGJhY2tPYmplY3RJbXA6OnRvQm9vbGVhbihFeAogICAgIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KKworfQorfQpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAkocmV2aXNpb24gMzY2Njgp
CisrKyBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCB2b2lkIENhY2hlZFBhZ2U6OnJlc3RvcmUoUGFnZSogcGFnZSkKICAgICAg
ICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cobV93aW5kb3cuZ2V0KCkpOwogICAgICAgICAg
ICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5yZXN1bWVUaW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRz
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3co
bmV3IChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpIEpTRE9NV2luZG93KG1haW5G
cmFtZS0+ZG9tV2luZG93KCksIHdpbmRvd1NoZWxsKSk7CisgICAgICAgICAgICB3aW5kb3dTaGVs
bC0+c2V0V2luZG93KG1haW5GcmFtZS0+ZG9tV2luZG93KCkpOwogICAgICAgICAgICAgcHJveHkt
PmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwogICAgICAgICAgICAgd2luZG93U2hl
bGwtPndpbmRvdygpLT5zZXRQcm9maWxlR3JvdXAocGFnZS0+Z3JvdXAoKS5pZGVudGlmaWVyKCkp
OwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMzY2NjgpCisrKyBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQCBt
b2R1bGUgd2luZG93IHsKICAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgICAgICBDdXN0
b21OYXRpdmVDb252ZXJ0ZXIsCiAgICAgICAgIEN1c3RvbVB1dEZ1bmN0aW9uLAotICAgICAgICBE
b05vdENhY2hlLAogICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKICAgICAgICAgTGVn
YWN5UGFyZW50PUpTRE9NV2luZG93QmFzZQogICAgIF0gRE9NV2luZG93IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23587</attachid>
            <date>2008-09-19 17:50:08 -0700</date>
            <delta_ts>2008-09-20 13:53:37 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>StructurePatch3.txt</filename>
            <type>text/plain</type>
            <size>33432</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM2Njc1KQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyAr
MTI2LDcgQEAgX19aTjNKU0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbAogX19aTjNK
U0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNf
MTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQog
X19aTjNKU0MxMlN0cmluZ09iamVjdDRpbmZvRQotX19aTjNKU0MxMlN0cmluZ09iamVjdEMyRVBO
U185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFUktOU183VVN0cmluZ0UKK19fWk4zSlNDMTJTdHJp
bmdPYmplY3RDMkVQTlNfOUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18xMVN0cnVjdHVy
ZUlERUVFUktOU183VVN0cmluZ0UKIF9fWk4zSlNDMTNDb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dl
bmVyYXRlZENvZGVFYgogX19aTjNKU0MxM1N0YXRlbWVudE5vZGU2c2V0TG9jRWlpCiBfX1pOM0pT
QzEzanNPd25lZFN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY2NzQpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDExICs1MCwxMSBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEFycmF5V2l0aFNpemVR
CiAgICAgICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihleGVjKTsK
ICAgICAgICAgaWYgKG4gIT0gYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAiQXJyYXkgc2l6ZSBp
cyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTsKLSAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5UHJv
dG90eXBlKCksIG4pOworICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgbik7CiAgICAgfQogCiAgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBhcnJheSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBhcmd1bWVudHMg
aW4gaXQKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgYXJncyk7CisgICAgcmV0dXJuIG5ldyAo
ZXhlYykgSlNBcnJheShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3Ry
dWN0dXJlKCksIGFyZ3MpOwogfQogCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdpdGhBcnJh
eUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAz
NjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDggKzkxLDggQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpp
bmZvID0gewogKi8KIAogLy8gRUNNQSAxNS40LjQKLUFycmF5UHJvdG90eXBlOjpBcnJheVByb3Rv
dHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSkKLSAgICA6
IEpTQXJyYXkob2JqZWN0UHJvdG90eXBlLCAwKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90
eXBlKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSkKKyAgICA6IEpTQXJyYXkoc3Ry
dWN0dXJlKQogewogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUuaAkocmV2
aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHB1YmxpYzoKLSAgICAgICAg
QXJyYXlQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKik7CisgICAgICAgIEFy
cmF5UHJvdG90eXBlKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKIAogICAgICAgICBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYsOSArMTA2LDkgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1
Y3REYXRlKEV4ZWNTdGF0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgRGF0ZUluc3RhbmNlKiBy
ZXQgPSBuZXcgKGV4ZWMpIERhdGVJbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmRhdGVQcm90b3R5cGUoKSk7Ci0gICAgcmV0LT5zZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKGV4
ZWMsIHRpbWVDbGlwKHZhbHVlKSkpOwotICAgIHJldHVybiByZXQ7CisgICAgRGF0ZUluc3RhbmNl
KiByZXN1bHQgPSBuZXcgKGV4ZWMpIERhdGVJbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSk7CisgICAgcmVzdWx0LT5zZXRJbnRlcm5hbFZhbHVlKGpz
TnVtYmVyKGV4ZWMsIHRpbWVDbGlwKHZhbHVlKSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IENvbnN0cnVjdFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZUluc3Rh
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZUluc3RhbmNlLmNw
cAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZUluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBzdHJ1Y3QgRGF0ZUluc3RhbmNlOjpD
YWNoZSB7CiAKIGNvbnN0IENsYXNzSW5mbyBEYXRlSW5zdGFuY2U6OmluZm8gPSB7IkRhdGUiLCAw
LCAwLCAwfTsKIAotRGF0ZUluc3RhbmNlOjpEYXRlSW5zdGFuY2UoSlNPYmplY3QqIHByb3RvdHlw
ZSkKLSAgICA6IEpTV3JhcHBlck9iamVjdChwcm90b3R5cGUpCitEYXRlSW5zdGFuY2U6OkRhdGVJ
bnN0YW5jZShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBw
ZXJPYmplY3Qoc3RydWN0dXJlKQogICAgICwgbV9jYWNoZSgwKQogewogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxMSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwotICAgIGNsYXNz
IE9iamVjdFByb3RvdHlwZTsKICAgICBzdHJ1Y3QgR3JlZ29yaWFuRGF0ZVRpbWU7CiAKICAgICBj
bGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIERhdGVJbnN0YW5jZShKU09iamVjdCogcHJvdG90eXBlKTsKKyAgICAgICAgRGF0
ZUluc3RhbmNlKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKICAgICAgICAgdmlydHVhbCB+RGF0
ZUluc3RhbmNlKCk7CiAKICAgICAgICAgZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLT51bmNoZWNrZWRHZXROdW1iZXIoKTsgfQpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw4ICsz
NDUsOCBAQCBjb25zdCBDbGFzc0luZm8gRGF0ZVByb3RvdHlwZTo6aW5mbyA9IHsiCiAqLwogLy8g
RUNNQSAxNS45LjQKIAotRGF0ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBlKQotICAgIDogRGF0ZUluc3RhbmNl
KG9iamVjdFByb3RvdHlwZSkKK0RhdGVQcm90b3R5cGU6OkRhdGVQcm90b3R5cGUoRXhlY1N0YXRl
KiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpCisgICAgOiBEYXRlSW5z
dGFuY2Uoc3RydWN0dXJlKQogewogICAgIHNldEludGVybmFsVmFsdWUoanNOYU4oZXhlYykpOwog
ICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBEYXRlQ29u
c3RydWN0b3IgaGFzIGJlZW4gYnVpbHQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZVBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlUHJvdG90eXBl
LmgJKHJldmlzaW9uIDM2Njc0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0RhdGVQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIERhdGVQcm90b3R5cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKik7Cisg
ICAgICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4p
OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTIgQEAgSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihFeGVjUwogICAgIHB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoZXhlYywgbmFtZS51c3Ry
aW5nKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKK0ludGVybmFs
RnVuY3Rpb246OkludGVybmFsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCisgICAgOiBKU09i
amVjdChzdHJ1Y3R1cmUpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5u
YW1lLCBqc1N0cmluZyhleGVjLCBuYW1lLnVzdHJpbmcoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKK30KKwogY29uc3QgVVN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFt
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSogdiA9IGdldERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubmFtZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJuYWxG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0
aW9uLmgJKHJldmlzaW9uIDM2Njc0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFsRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIEludGVybmFsRnVuY3Rpb24oUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlE
PiBzdCkgOiBKU09iamVjdChzdCl7fQorICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKFBhc3NSZWZQ
dHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSkgOiBKU09iamVjdChzdHJ1Y3R1cmUpIHsgfQogICAg
ICAgICBJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSopOwogICAgICAgICBJbnRlcm5hbEZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgY29uc3QgSWRlbnRpZmllciYpOwor
ICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+LCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJikgPSAwOwpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0Fy
cmF5LmNwcAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOCBAQCBKU0FycmF5OjpKU0FycmF5KFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi1KU0Fy
cmF5OjpKU0FycmF5KEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgp
Ci0gICAgOiBKU09iamVjdChwcm90b3R5cGUpCitKU0FycmF5OjpKU0FycmF5KFBhc3NSZWZQdHI8
U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICA6IEpT
T2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSBtaW4o
aW5pdGlhbExlbmd0aCwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAKQEAgLTE1Myw4ICsxNTMs
OCBAQCBKU0FycmF5OjpKU0FycmF5KEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuCiAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogfQogCi1KU0FycmF5OjpKU0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHByb3RvdHlwZSwgY29uc3QgQXJnTGlzdCYgbGlzdCkKLSAgICA6IEpTT2JqZWN0KHBy
b3RvdHlwZSkKK0pTQXJyYXk6OkpTQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIGxpc3QpCisgICAgOiBKU09iamVj
dChzdHJ1Y3R1cmUpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdC5zaXplKCk7CiAKQEAg
LTg4NywyNCArODg3LDI0IEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0
ZW4KIAogSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmFycmF5UHJvdG90eXBlKCksIDApOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKIH0KIAogSlNBcnJh
eSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBlKCksIGluaXRpYWxMZW5ndGgpOworICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0
cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsKIH0KIAogSlNBcnJheSogY29uc3RydWN0QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBzaW5nbGVJdGVtVmFsdWUpCiB7CiAgICAgQXJnTGlz
dCB2YWx1ZXM7CiAgICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJdGVtVmFsdWUpOwotICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheVByb3RvdHlwZSgpLCB2YWx1ZXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXko
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1
ZXMpOwogfQogCiBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIHZhbHVlcykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgdmFsdWVzKTsK
KyAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmgJKHJldmlzaW9uIDM2Njc0KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSlNBcnJheShQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPik7Ci0gICAgICAgIEpTQXJyYXkoSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIEpTQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogcHJvdG90eXBlLCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKTsKKyAgICAgICAg
SlNBcnJheShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7
CisgICAgICAgIEpTQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlE
PiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZhbHVlcyk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJy
YXkoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM2Njc0KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChKU1ZhbHVlKgog
ICAgICAgICB2LT5tYXJrKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQo
Y29uc3QgUmVmUHRyPFN0cnVjdHVyZUlEPiYgcykKK3sKKyAgICBpZiAocykKKyAgICAgICAgcy0+
bWFyaygpOworfQorCiBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKIHsKICAgICBB
U1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKQEAgLTE5NSw3ICsy
MDEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAgICAgZCgp
LT5mdW5jdGlvblByb3RvdHlwZSA9IDA7CiAgICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSAwOwog
Ci0gICAgZCgpLT5hcnJheVByb3RvdHlwZSA9IDA7CisgICAgZCgpLT5hcnJheVN0cnVjdHVyZS5j
bGVhcigpOwogICAgIGQoKS0+c3RyaW5nUHJvdG90eXBlID0gMDsKICAgICBkKCktPmJvb2xlYW5Q
cm90b3R5cGUgPSAwOwogICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gMDsKQEAgLTIyOCwxNCAr
MjM0LDE5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICAv
LyBQcm90b3R5cGVzCiAKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IChleGVjKSBG
dW5jdGlvblByb3RvdHlwZShleGVjKTsKLSAgICBkKCktPm9iamVjdFByb3RvdHlwZSA9IG5ldyAo
ZXhlYykgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAg
IGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IChl
eGVjKSBPYmplY3RQcm90b3R5cGUoZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSk7CiAgICAgZCgpLT5mdW5jdGlvblByb3RvdHlwZS0+c2V0UHJvdG90eXBlKGQoKS0+b2JqZWN0
UHJvdG90eXBlKTsKIAotICAgIGQoKS0+YXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEFycmF5
UHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBkKCktPnN0cmluZ1By
b3RvdHlwZSA9IG5ldyAoZXhlYykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJv
dG90eXBlKTsKKyAgICBBcnJheVByb3RvdHlwZSogYXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMp
IEFycmF5UHJvdG90eXBlKFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5cGUp
KTsKKyAgICBkKCktPmFycmF5U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShhcnJheVBy
b3RvdHlwZSk7CisgICAgZCgpLT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKGFycmF5UHJvdG90eXBlKTsKKyAgICBkKCktPnN0cmluZ1Byb3RvdHlwZSA9
IG5ldyAoZXhlYykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgp
LT5vYmplY3RQcm90b3R5cGUpKTsKKyAgICBkKCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSA9IFN0
cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5zdHJpbmdQcm90b3R5cGUpOwogICAgIGQoKS0+Ym9vbGVh
blByb3RvdHlwZSA9IG5ldyAoZXhlYykgQm9vbGVhblByb3RvdHlwZShleGVjLCBkKCktPm9iamVj
dFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgpLT5udW1iZXJQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIE51bWJlclByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3Rv
dHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgZCgpLT5kYXRlUHJvdG90eXBlID0g
bmV3IChleGVjKSBEYXRlUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKKyAg
ICBkKCktPmRhdGVQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIERhdGVQcm90b3R5cGUoZXhlYywgU3Ry
dWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSkpOworICAgIGQoKS0+ZGF0ZVN0
cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5kYXRlUHJvdG90eXBlKTsKICAgICBk
KCktPnJlZ0V4cFByb3RvdHlwZSA9IG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIGQo
KS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmVy
cm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBFcnJvclByb3RvdHlwZShleGVjLCBkKCktPm9iamVj
dFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgCkBAIC0yNTAsNyArMjYx
LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgSlNW
YWx1ZSogb2JqZWN0Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4
ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBK
U1ZhbHVlKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVj
dG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIGFycmF5Q29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5Q29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlv
blByb3RvdHlwZSwgZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgSlNWYWx1ZSogYXJyYXlDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9u
UHJvdG90eXBlLCBhcnJheVByb3RvdHlwZSk7CiAgICAgSlNWYWx1ZSogc3RyaW5nQ29uc3RydWN0
b3IgPSBuZXcgKGV4ZWMpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUsIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKICAgICBKU1ZhbHVlKiBib29sZWFuQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9u
UHJvdG90eXBlLCBkKCktPmJvb2xlYW5Qcm90b3R5cGUpOwogICAgIEpTVmFsdWUqIG51bWJlckNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0
aW9uUHJvdG90eXBlLCBkKCktPm51bWJlclByb3RvdHlwZSk7CkBAIC0yNzEsNyArMjgyLDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgZCgpLT5vYmpl
Y3RQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgZCgpLT5mdW5jdGlvblByb3RvdHlw
ZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuY3Rpb25D
b25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIGQoKS0+YXJyYXlQcm90b3R5cGUtPnB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5Q29uc3RydWN0b3IsIERv
bnRFbnVtKTsKKyAgICBhcnJheVByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0pOwogICAgIGQoKS0+
Ym9vbGVhblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgYm9vbGVhbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgZCgpLT5zdHJpbmdQcm90
b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmlu
Z0NvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgZCgpLT5udW1iZXJQcm90b3R5cGUtPnB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG51bWJlckNvbnN0cnVjdG9y
LCBEb250RW51bSk7CkBAIC0zODUsMTEgKzM5NiwxNSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpt
YXJrKCkKICAgICAKICAgICBtYXJrSWZOZWVkZWQoZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAg
IG1hcmtJZk5lZWRlZChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQo
ZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgbWFya0lmTmVlZGVkKGQoKS0+cHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUpOworICAgIG1hcmtJZk5lZWRlZChkKCktPmFycmF5U3RydWN0dXJlKTsK
KyAgICBtYXJrSWZOZWVkZWQoZCgpLT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUpOwogICAg
IG1hcmtJZk5lZWRlZChkKCktPmJvb2xlYW5Qcm90b3R5cGUpOwogICAgIG1hcmtJZk5lZWRlZChk
KCktPnN0cmluZ1Byb3RvdHlwZSk7CisgICAgbWFya0lmTmVlZGVkKGQoKS0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKTsKICAgICBtYXJrSWZOZWVkZWQoZCgpLT5udW1iZXJQcm90b3R5cGUpOwogICAg
IG1hcmtJZk5lZWRlZChkKCktPmRhdGVQcm90b3R5cGUpOworICAgIG1hcmtJZk5lZWRlZChkKCkt
PmRhdGVTdHJ1Y3R1cmUpOwogICAgIG1hcmtJZk5lZWRlZChkKCktPnJlZ0V4cFByb3RvdHlwZSk7
CiAgICAgbWFya0lmTmVlZGVkKGQoKS0+ZXJyb3JQcm90b3R5cGUpOwogICAgIG1hcmtJZk5lZWRl
ZChkKCktPmV2YWxFcnJvclByb3RvdHlwZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxP
YmplY3QuaAkocmV2aXNpb24gMzY2NzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotICAgIGNsYXNzIEFycmF5UHJvdG90eXBlOwogICAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5
cGU7CiAgICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKICAgICBjbGFzcyBEZWJ1Z2dlcjsKQEAgLTEw
NywxMSArMTA2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICBPYmplY3RQcm90
b3R5cGUqIG9iamVjdFByb3RvdHlwZTsKICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlKiBm
dW5jdGlvblByb3RvdHlwZTsKLSAgICAgICAgICAgIEFycmF5UHJvdG90eXBlKiBhcnJheVByb3Rv
dHlwZTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gcHJvdG90eXBlRnVuY3Rpb25T
dHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IGFycmF5U3RydWN0dXJl
OworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1
Y3R1cmU7CiAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlKiBib29sZWFuUHJvdG90eXBlOwog
ICAgICAgICAgICAgU3RyaW5nUHJvdG90eXBlKiBzdHJpbmdQcm90b3R5cGU7CisgICAgICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICAgICAgICAg
IE51bWJlclByb3RvdHlwZSogbnVtYmVyUHJvdG90eXBlOwogICAgICAgICAgICAgRGF0ZVByb3Rv
dHlwZSogZGF0ZVByb3RvdHlwZTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gZGF0
ZVN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZ0V4cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBl
OwogICAgICAgICAgICAgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlOwogICAgICAgICAg
ICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIGV2YWxFcnJvclByb3RvdHlwZTsKQEAgLTE3OSw3ICsx
ODIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBPYmplY3RQcm90b3R5cGUqIG9iamVj
dFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+b2JqZWN0UHJvdG90eXBlOyB9CiAgICAg
ICAgIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGU7IH0KLSAgICAgICAgQXJyYXlQcm90b3R5cGUqIGFycmF5
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5hcnJheVByb3RvdHlwZTsgfQogICAgICAg
ICBCb29sZWFuUHJvdG90eXBlKiBib29sZWFuUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gZCgp
LT5ib29sZWFuUHJvdG90eXBlOyB9CiAgICAgICAgIFN0cmluZ1Byb3RvdHlwZSogc3RyaW5nUHJv
dG90eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5zdHJpbmdQcm90b3R5cGU7IH0KICAgICAgICAg
TnVtYmVyUHJvdG90eXBlKiBudW1iZXJQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBkKCktPm51
bWJlclByb3RvdHlwZTsgfQpAQCAtMTkzLDYgKzE5NSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHR5cGVFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGQoKS0+dHlwZUVycm9yUHJvdG90eXBlOyB9CiAgICAgICAgIE5hdGl2ZUVycm9yUHJv
dG90eXBlKiBVUklFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+VVJJRXJyb3JQ
cm90b3R5cGU7IH0KIAorICAgICAgICBTdHJ1Y3R1cmVJRCogYXJyYXlTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBkKCktPmFycmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVy
ZUlEKiBkYXRlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5kYXRlU3RydWN0dXJlLmdl
dCgpOyB9CisgICAgICAgIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0K
KyAgICAgICAgU3RydWN0dXJlSUQqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIGQoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAg
ICAgIFN0cnVjdHVyZUlEKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBk
KCktPnN0cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorCiAgICAgICAgIHZvaWQgc2V0UHJv
ZmlsZUdyb3VwKHVuc2lnbmVkIHZhbHVlKSB7IGQoKS0+cHJvZmlsZUdyb3VwID0gdmFsdWU7IH0K
ICAgICAgICAgdW5zaWduZWQgcHJvZmlsZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gZCgpLT5wcm9m
aWxlR3JvdXA7IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAzNjY3
NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgSlNTdHJpbmcqIEpTU3RyaW5nOjp0b1RoaXNKU1N0cmluZyhFeGVjUwog
CiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIHN0cmlu
Zyk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7CiB9CiAKIEpTT2Jq
ZWN0KiBKU1N0cmluZzo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNXcmFwcGVyT2JqZWN0IDogcHVibGlj
IEpTT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTV3JhcHBlck9iamVjdChKU09iamVj
dCogcHJvdG90eXBlKTsKKyAgICAgICAgSlNXcmFwcGVyT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+KTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUqIGludGVybmFsVmFsdWUoKSBjb25z
dDsKICAgICAgICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWUqKTsKQEAgLTUxLDYgKzUy
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAgICAgCisgICAgaW5saW5lIEpT
V3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0
cnVjdHVyZSkKKyAgICAgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9pbnRl
cm5hbFZhbHVlKDApCisgICAgeworICAgIH0KKyAgICAKICAgICBpbmxpbmUgSlNWYWx1ZSogSlNX
cmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2ludGVybmFsVmFsdWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIk9iamVj
dFByb3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJGdW5jdGlvblBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVu
Y3Rpb24uaCIKIApAQCAtNDAsMjQgKzM5LDIzIEBAIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90
b0Z1bmNMb29rdXBTZXQKIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlz
RW51bWVyYWJsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7CiBzdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCi1PYmplY3RQcm90
b3R5cGU6Ok9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBl
KiBmdW5jdGlvblByb3RvdHlwZSkKK09iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gcHJvdG90eXBlRnVuY3Rpb25T
dHJ1Y3R1cmUpCiAgICAgOiBKU09iamVjdChleGVjLT5nbG9iYWxEYXRhKCkubnVsbFByb3RvU3Ry
dWN0dXJlSUQpCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVT
dHJpbmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywg
ZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mLCBvYmpl
Y3RQcm90b0Z1bmNWYWx1ZU9mKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4
ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUs
IDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNPd25Qcm9wZXJ0eSwgb2JqZWN0UHJvdG9GdW5j
SGFzT3duUHJvcGVydHkpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywg
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBvYmplY3RQcm90b0Z1
bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90
eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcm90b3R5cGVPZiwgb2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3Ry
dWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUs
IDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZywgb2JqZWN0UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywg
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVj
dHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1Zh
bHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmhhc093blByb3BlcnR5LCBvYmplY3RQcm90b0Z1bmNIYXNP
d25Qcm9wZXJ0eSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvcGVydHlJc0VudW1lcmFibGUsIG9iamVjdFBy
b3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1Byb3RvdHlwZU9m
LCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKSwgRG9udEVudW0pOwogCiAgICAgLy8gTW96
aWxsYSBleHRlbnNpb25zCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMiwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLl9fZGVmaW5lR2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlciks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAyLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuX19kZWZpbmVTZXR0ZXJfXywgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9u
dEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5fX2xvb2t1cEdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9f
bG9va3VwU2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlciksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuX19kZWZpbmVHZXR0ZXJfXywgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5fX2RlZmluZVNldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLl9fbG9va3VwR2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRl
ciksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuX19sb29rdXBTZXR0ZXJfXywgb2JqZWN0UHJvdG9GdW5jTG9va3Vw
U2V0dGVyKSwgRG9udEVudW0pOwogfQogCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNN
QSAxNS4yLjQuMiwgMTUuMi40LjQsIDE1LjIuNC41LCAxNS4yLjQuNwpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSw5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7Ci0KLSAg
ICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKgotICAgICAqIFRoZSBpbml0aWFsIHZhbHVl
IG9mIE9iamVjdC5wcm90b3R5cGUgKGFuZCB0aHVzIGFsbCBvYmplY3RzIGNyZWF0ZWQKLSAgICAg
KiB3aXRoIHRoZSBPYmplY3QgY29uc3RydWN0b3IKLSAgICAgKi8KICAgICBjbGFzcyBPYmplY3RQ
cm90b3R5cGUgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0
UHJvdG90eXBlKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CisgICAgICAgIE9iamVj
dFByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBwcm90b3R5cGVG
dW5jdGlvblN0cnVjdHVyZSk7CiAgICAgfTsKIAogICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Qcm90b3R5cGVGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUHJvdG90eXBlRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwxNSBAQCBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90
eXBlRnVuY3Rpb24oRXhlCiAgICAgQVNTRVJUX0FSRyhmdW5jdGlvbiwgZnVuY3Rpb24pOwogICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCBs
ZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9Ci0KKyAgICAKK1By
b3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBpbnQgbGVuZ3Ro
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKKyAgICA6
IEludGVybmFsRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIG5hbWUp
CisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQoreworICAgIEFTU0VSVF9BUkcoZnVuY3Rpb24s
IGZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoZXhlYywgbGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OworfQorICAgIAogQ2FsbFR5cGUgUHJvdG90eXBlRnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxE
YXRhJiBjYWxsRGF0YSkKIHsKICAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBtX2Z1bmN0
aW9uOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmgJKHJldmlzaW9u
IDM2Njc0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgog
ICAgICAgICBQcm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJ
ZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICBQcm90b3R5cGVGdW5jdGlvbihF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZp
ZXImLCBOYXRpdmVGdW5jdGlvbik7CisgICAgICAgIFByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVy
JiwgTmF0aXZlRnVuY3Rpb24pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDYWxs
VHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBA
QCBwcml2YXRlOgogfTsKIAogUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXko
RXhlY1N0YXRlKiBleGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGRhdGEpCi0gICAgOiBK
U0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgZGF0
YS0+bGFzdE51bVN1YlBhdHRlcm5zICsgMSkKKyAgICA6IEpTQXJyYXkoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgZGF0YS0+bGFzdE51
bVN1YlBhdHRlcm5zICsgMSkKIHsKICAgICBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGQgPSBu
ZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlOwogICAgIGQtPmlucHV0ID0gZGF0YS0+bGFzdElu
cHV0OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2Myw5IEBAIFN0cmluZ0NvbnN0cnVjdG9yOjpTdHJp
bmdDb25zdHJ1Y3RvcihFeGUKIC8vIEVDTUEgMTUuNS4yCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0
cnVjdFdpdGhTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU09iamVjdCogcHJvdG90eXBlID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsKICAgICBpZiAoYXJncy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBwcm90
b3R5cGUpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBwcm90b3R5
cGUsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09i
amVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0cnVj
dHVyZSgpLCBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSk7CiB9CiAKIENvbnN0cnVj
dFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuY3BwCShyZXZp
c2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwyMCArMjksMjAgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChT
dHJpbmdPYmplY3QpOwogCiBjb25zdCBDbGFzc0luZm8gU3RyaW5nT2JqZWN0OjppbmZvID0geyAi
U3RyaW5nIiwgMCwgMCwgMCB9OwogCi1TdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90b3R5cGUpCi0gICAgOiBKU1dyYXBwZXJPYmplY3QocHJv
dG90eXBlKQorU3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qoc3Ry
dWN0dXJlKQogewogICAgIHNldEludGVybmFsVmFsdWUoanNFbXB0eVN0cmluZyhleGVjKSk7CiB9
CiAKLVN0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KEpTT2JqZWN0KiBwcm90b3R5cGUsIEpTU3Ry
aW5nKiBzdHJpbmcpCi0gICAgOiBKU1dyYXBwZXJPYmplY3QocHJvdG90eXBlKQorU3RyaW5nT2Jq
ZWN0OjpTdHJpbmdPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU1N0
cmluZyogc3RyaW5nKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBz
ZXRJbnRlcm5hbFZhbHVlKHN0cmluZyk7CiB9CiAKLVN0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVVN0cmluZyYgc3Ry
aW5nKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvdHlwZSkKK1N0cmluZ09iamVjdDo6U3Ry
aW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0
dXJlLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qoc3RydWN0
dXJlKQogewogICAgIHNldEludGVybmFsVmFsdWUoanNTdHJpbmcoZXhlYywgc3RyaW5nKSk7CiB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAzNjY3NCkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1Ymxp
YyBKU1dyYXBwZXJPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaW5nT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBwcm90b3R5cGUpOwotICAgICAgICBTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVVN0cmluZyYpOworICAgICAgICBT
dHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOworICAgICAg
ICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIGNvbnN0
IFVTdHJpbmcmKTsKIAogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqKTsKIApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNTdHJpbmcqIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxKU1N0cmluZyo+KEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIFN0cmluZ09iamVjdChKU09iamVjdCogcHJvdG90eXBlLCBKU1N0
cmluZyopOworICAgICAgICBTdHJpbmdPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIEpT
U3RyaW5nKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJp
bmcoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2Jq
ZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAkocmV2aXNp
b24gMzY2NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAvLyBXZWJDb3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0eWxlLmZpbHRlciB1
bmRldGVjdGFibGUKICAgICBjbGFzcyBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA6IHB1YmxpYyBTdHJpbmdPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgICAgICA6IFN0cmlu
Z09iamVjdChleGVjLCBwcm90b3R5cGUsIHN0cmluZykKKyAgICAgICAgU3RyaW5nT2JqZWN0VGhh
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZUlEPiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKKyAgICAgICAgICAgIDog
U3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKQogICAgICAgICB7CiAgICAgICAg
IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDM2Njc0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw4ICsxMTYsOCBAQCBjb25zdCBDbGFzc0luZm8gU3RyaW5nUHJvdG90
eXBlOjppbmZvID0gCiAqLwogCiAvLyBFQ01BIDE1LjUuNAotU3RyaW5nUHJvdG90eXBlOjpTdHJp
bmdQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3Rv
dHlwZSkKLSAgICA6IFN0cmluZ09iamVjdChleGVjLCBvYmplY3RQcm90b3R5cGUpCitTdHJpbmdQ
cm90b3R5cGU6OlN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlSUQ+IHN0cnVjdHVyZSkKKyAgICA6IFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUp
CiB7CiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIFN0
cmluZ0NvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDApLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkgfCBEb250RW51bSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5oCShy
ZXZpc2lvbiAzNjY3NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFN0cmluZ1Byb3RvdHlwZSA6IHB1YmxpYyBTdHJpbmdPYmplY3QgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSopOwor
ICAgICAgICBTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4pOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMzY2NzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsOCBA
QCBKU1ZhbHVlKiBKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0CiAKICAgICAvLyBNYWtl
IHRoZSBTVkcgJ2ZpbHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0YWJsZSwgdG8gYXZvaWQgY29uZnVz
aW9uIHdpdGggdGhlIElFICdmaWx0ZXInIGF0dHJpYnV0ZS4KICAgICBpZiAocHJvcGVydHlOYW1l
ID09ICJmaWx0ZXIiKQotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3RUaGF0
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnN0cmluZ1Byb3RvdHlwZSgpLAorICAgICAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmpl
Y3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLAorICAgICAgICAgICAgU3RydWN0dXJl
SUQ6OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgp
KSwKICAgICAgICAgICAgIHRoaXNPYmotPmltcGwoKS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wKSk7
CiAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0
eVZhbHVlKHByb3ApKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDM2Njc1
KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw5ICs1MSw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCi0gICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRl
KiBleGVjKQorICAgIHN0YXRpYyBKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICB7Ci0gICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmFycmF5UHJvdG90eXBlKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJv
dG90eXBlKCkpOwogICAgIH0KIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23613</attachid>
            <date>2008-09-20 14:33:28 -0700</date>
            <delta_ts>2008-09-20 19:01:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>StructurePatch4.txt</filename>
            <type>text/plain</type>
            <size>135043</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NzEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTk3IEBACisyMDA4LTA5LTIwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGZpbmlzaCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA4NTgKKyAgICAgICAgICBtYWtlIGVhY2ggZGlzdGluY3QgQysrIGNsYXNzIGdl
dCBhIGRpc3RpbmN0IEpTQzo6U3RydWN0dXJlCisKKyAgICAgICAgVGhpcyBhbHNvIGluY2x1ZGVz
IHNvbWUgb3B0bWl6YXRpb25zIHRoYXQgbWFrZSB0aGUgY2hhbmdlIGFuIG92ZXJhbGwKKyAgICAg
ICAgc21hbGwgc3BlZWR1cC4gV2l0aG91dCB0aG9zZSBpdCB3YXMgYSBiaXQgb2YgYSBzbG93ZG93
bi4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6IFRha2Ug
YSBzdHJ1Y3R1cmUuCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOiBEaXR0
by4KKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24pOiBQYXNzIGEgc3RydWN0dXJl
LgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6IFRha2UgYSBzdHJ1Y3R1cmUuCisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja09iamVjdDo6SlNDYWxsYmFja09iamVjdCk6IERpdHRvLgorCisgICAgICAgICog
QVBJL0pTQ2xhc3NSZWYuY3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKTog
UGFzcyBpbiBhIHN0cnVjdHVyZS4gQ2FsbCBzZXRQcm90b3R5cGUKKyAgICAgICAgaWYgdGhlcmUn
cyBhIGN1c3RvbSBwcm90b3R5cGUgaW52b2x2ZWQuCisgICAgICAgICogQVBJL0pTT2JqZWN0UmVm
LmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZSk6IERpdHRvLgorICAgICAgICAoSlNPYmplY3RN
YWtlQ29uc3RydWN0b3IpOiBQYXNzIGluIGEgc3RydWN0dXJlLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUuZXhwOiBVcGRhdGVkLgorCisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAg
ICAgIChKU0M6OmpzTGVzcyk6IEFkZGVkIGEgc3BlY2lhbCBjYXNlIGZvciB3aGVuIGJvdGggYXJn
dW1lbnRzIGFyZSBzdHJpbmdzLgorICAgICAgICBUaGlzIGF2b2lkcyBjb252ZXJ0aW5nIGJvdGgg
c3RyaW5ncyB0byB3aXRoIFVTdHJpbmc6OnRvRG91YmxlLgorICAgICAgICAoSlNDOjpqc0xlc3NF
cSk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6IFBhc3Mg
aW4gYSBzdHJ1Y3R1cmUuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3Rf
SlNDb25zdHJ1Y3QpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX25ld19y
ZWdleHApOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2lzX3N0cmluZyk6
IERpdHRvLgorICAgICAgICAqIFZNL01hY2hpbmUuaDogTWFkZSBpc0pTU3RyaW5nIHB1YmxpYyBz
byBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgQ1RJLgorCisgICAgICAgICoga2pzL0FyZ3VtZW50cy5j
cHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRzKTogUGFzcyBpbiBhIHN0cnVj
dHVyZS4KKworICAgICAgICAqIGtqcy9KU0NlbGwuaDogTWFyayBjb25zdHJ1Y3RvciBleHBsaWNp
dC4KKworICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1h
cmtJZk5lZWRlZCk6IEFkZGVkIGFuIG92ZXJsb2FkIGZvciBtYXJraW5nIHN0cnVjdHVyZXMuCisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6IEVsaW1pbmF0ZSBjb2RlIHRvIHNl
dCBkYXRhIG1lbWJlcnMgdG8KKyAgICAgICAgemVyby4gV2Ugbm93IGRvIHRoYXQgaW4gdGhlIGNv
bnN0cnVjdG9yLCBhbmQgd2Ugbm8gbG9uZ2VyIHVzZSB0aGlzCisgICAgICAgIGFueXdoZXJlIGV4
Y2VwdCBpbiB0aGUgY29uc3RydWN0b3IuIEFkZGVkIGNvZGUgdG8gY3JlYXRlIHN0cnVjdHVyZXMu
CisgICAgICAgIFBhc3Mgc3RydWN0dXJlcyByYXRoZXIgdGhhbiBwcm90b3R5cGVzIHdoZW4gY3Jl
YXRpbmcgb2JqZWN0cy4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om1hcmspOiBNYXJr
IHRoZSBzdHJ1Y3R1cmVzLgorCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0Lmg6IFJlbW92
ZWQgdW5uZWVkZWQgY2xhc3MgZGVjbGFyYXRpb25zLgorICAgICAgICBBZGRlZCBpbml0aWFsaXpl
cnMgZm9yIHJhdyBwb2ludGVycyBpbiBKU0dsb2JhbE9iamVjdERhdGEgc28KKyAgICAgICAgZXZl
cnl0aGluZyBzdGFydHMgd2l0aCBhIDAuIEFkZGVkIHN0cnVjdHVyZSBkYXRhIGFuZCBhY2Nlc3Nv
cgorICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBranMvSlNJbW1lZGlhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bm9uSW5saW5lTmFOKTogQWRkZWQuCisgICAgICAg
ICoga2pzL0pTSW1tZWRpYXRlLmg6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp0b0RvdWJs
ZSk6IFJld3JvdGUgdG8gYXZvaWQgUElDIGJyYW5jaGVzLgorCisgICAgICAgICoga2pzL0pTTnVt
YmVyQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OmpzTnVtYmVyQ2VsbCk6IE1hZGUgbm9uLWlubGlu
ZSB0byBhdm9pZCBQSUMgYnJhbmNoZXMKKyAgICAgICAgaW4gZnVuY3Rpb25zIHRoYXQgY2FsbCB0
aGlzIG9uZS4KKyAgICAgICAgKEpTQzo6anNOYU4pOiBEaXR0by4KKyAgICAgICAgKiBranMvSlNO
dW1iZXJDZWxsLmg6IERpdHRvLgorCisgICAgICAgICoga2pzL0pTT2JqZWN0Lmg6IFJlbW92ZWQg
Y29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHByb3RvdHlwZS4KKyAgICAgICAgQWxsIGNhbGxlcnMg
bm93IHBhc3Mgc3RydWN0dXJlcy4KKworICAgICAgICAqIGtqcy9BcnJheUNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1Y3Rvcjo6QXJyYXlDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayk6CisgICAgICAgICoga2pz
L0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBranMvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAq
IGtqcy9BcnJheVByb3RvdHlwZS5oOgorICAgICAgICAqIGtqcy9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIGtqcy9Cb29sZWFu
Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBranMvQm9vbGVhbk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkJvb2xlYW5PYmplY3Q6OkJvb2xlYW5PYmplY3QpOgorICAgICAgICAqIGtqcy9Cb29s
ZWFuT2JqZWN0Lmg6CisgICAgICAgICoga2pzL0Jvb2xlYW5Qcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpCb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKToKKyAgICAgICAgKiBr
anMvQm9vbGVhblByb3RvdHlwZS5oOgorICAgICAgICAqIGtqcy9EYXRlQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdERhdGUpOgorICAgICAgICAqIGtqcy9EYXRlQ29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKiBranMvRGF0ZUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RGF0ZUlu
c3RhbmNlOjpEYXRlSW5zdGFuY2UpOgorICAgICAgICAqIGtqcy9EYXRlSW5zdGFuY2UuaDoKKyAg
ICAgICAgKiBranMvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5
cGU6OkRhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGtqcy9EYXRlUHJvdG90eXBlLmg6CisgICAg
ICAgICoga2pzL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckNvbnN0
cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RXJyb3Ip
OgorICAgICAgICAqIGtqcy9FcnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICoga2pzL0Vycm9y
SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNl
KToKKyAgICAgICAgKiBranMvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAqIGtqcy9FcnJvclBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlw
ZSk6CisgICAgICAgICoga2pzL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgICoga2pzL0Z1bmN0
aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpG
dW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAqIGtqcy9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMpOgorICAgICAgICAqIGtqcy9GdW5j
dGlvblByb3RvdHlwZS5oOgorICAgICAgICAqIGtqcy9HbG9iYWxFdmFsRnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpHbG9iYWxFdmFsRnVuY3Rpb246Okdsb2JhbEV2YWxGdW5jdGlvbik6Cisg
ICAgICAgICoga2pzL0dsb2JhbEV2YWxGdW5jdGlvbi5oOgorICAgICAgICAqIGtqcy9JbnRlcm5h
bEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxG
dW5jdGlvbik6CisgICAgICAgICoga2pzL0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgICoga2pzL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToK
KyAgICAgICAgKiBranMvSlNBcnJheS5oOgorICAgICAgICAqIGtqcy9KU0Z1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmNvbnN0cnVjdCk6CisgICAgICAgICoga2pzL0pTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0RW1wdHlPYmplY3QpOgorICAgICAgICAqIGtqcy9KU1N0cmluZy5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBranMv
SlNXcmFwcGVyT2JqZWN0Lmg6CisgICAgICAgICoga2pzL01hdGhPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpNYXRoT2JqZWN0OjpNYXRoT2JqZWN0KToKKyAgICAgICAgKiBranMvTWF0aE9iamVj
dC5oOgorICAgICAgICAqIGtqcy9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAg
ICoga2pzL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBranMvTmF0aXZlRXJy
b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvclByb3RvdHlwZTo6TmF0
aXZlRXJyb3JQcm90b3R5cGUpOgorICAgICAgICAqIGtqcy9OYXRpdmVFcnJvclByb3RvdHlwZS5o
OgorICAgICAgICAqIGtqcy9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok51
bWJlckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL051bWJlckNvbnN0cnVj
dG9yLmg6CisgICAgICAgICoga2pzL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ok51
bWJlck9iamVjdDo6TnVtYmVyT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVy
KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcik6Cisg
ICAgICAgICoga2pzL051bWJlck9iamVjdC5oOgorICAgICAgICAqIGtqcy9OdW1iZXJQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZSk6
CisgICAgICAgICoga2pzL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAqIGtqcy9PYmplY3RD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgICog
a2pzL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgICoga2pzL09iamVjdFByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKToKKyAg
ICAgICAgKiBranMvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgICoga2pzL1Byb3RvdHlwZUZ1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1
bmN0aW9uKToKKyAgICAgICAgKiBranMvUHJvdG90eXBlRnVuY3Rpb24uaDoKKyAgICAgICAgKiBr
anMvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rv
cjo6UmVnRXhwQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6
OlJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6Cisg
ICAgICAgICoga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmg6CisgICAgICAgICoga2pzL1JlZ0V4cE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0KToKKyAg
ICAgICAgKiBranMvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICoga2pzL1JlZ0V4cFByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJvdG90eXBlKToK
KyAgICAgICAgKiBranMvUmVnRXhwUHJvdG90eXBlLmg6CisgICAgICAgICoga2pzL1NoZWxsLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBranMv
U3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1Y3Rvcjo6
U3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29u
c3RydWN0b3IpOgorICAgICAgICAqIGtqcy9TdHJpbmdDb25zdHJ1Y3Rvci5oOgorICAgICAgICAq
IGtqcy9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OlN0cmlu
Z09iamVjdCk6CisgICAgICAgICoga2pzL1N0cmluZ09iamVjdC5oOgorICAgICAgICAqIGtqcy9T
dHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDo6U3RyaW5nT2JqZWN0VGhhdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpOgorICAgICAgICAqIGtqcy9TdHJpbmdQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3RvdHlwZSk6CisgICAg
ICAgICoga2pzL1N0cmluZ1Byb3RvdHlwZS5oOgorICAgICAgICBUYWtlIGFuZCBwYXNzIHN0cnVj
dHVyZXMuCisKIDIwMDgtMDktMTkgIEFscCBUb2tlciAgPGFscEBudWFudGkuY29tPgogCiAgICAg
ICAgIEJ1aWxkIGZpeCBmb3IgdGhlICdnb2xkJyBsaW5rZXIgYW5kIHJlY2VudCBiaW51dGlscy4g
TmV3IGJlaGF2aW91cgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24g
MzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDYgKzk4LDcgQEAgX19aTjNKU0MxMUludGVycHJldGVyMjFzaG91bGRQcmludEV4
Y2VwdAogX19aTjNKU0MxMUludGVycHJldGVyMjRzZXRTaG91bGRQcmludEV4Y2VwdGlvbnNFYgog
X19aTjNKU0MxMUludGVycHJldGVyOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVJOU18xMFNjb3Bl
Q2hhaW5FUktOU183VVN0cmluZ0VpTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTRTb3VyY2VQcm92aWRl
ckVFRVBOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTFJbnRlcnByZXRlcjhldmFsdWF0ZUVQTlNfOUV4
ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNfN1VTdHJpbmdFaVM3X1BOU183SlNWYWx1ZUUK
K19fWk4zSlNDMTFKU0ltbWVkaWF0ZTEybm9uSW5saW5lTmFORXYKIF9fWk4zSlNDMTFKU0ltbWVk
aWF0ZTh0b09iamVjdEVQS05TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxMUpT
SW1tZWRpYXRlOHRvU3RyaW5nRVBLTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExSlNJbW1lZGlhdGU5
cHJvdG90eXBlRVBLTlNfN0pTVmFsdWVFUE5TXzlFeGVjU3RhdGVFCkBAIC0xMjcsNyArMTI4LDgg
QEAgX19aTjNKU0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbAogX19aTjNKU0MxMlN0
cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9w
ZXJ0eVNsb3RFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNK
U0MxMlN0cmluZ09iamVjdDRpbmZvRQotX19aTjNKU0MxMlN0cmluZ09iamVjdEMyRVBOU185RXhl
Y1N0YXRlRVBOU184SlNPYmplY3RFUktOU183VVN0cmluZ0UKK19fWk4zSlNDMTJTdHJpbmdPYmpl
Y3RDMkVQTlNfOUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18xMVN0cnVjdHVyZUlERUVF
UktOU183VVN0cmluZ0UKK19fWk4zSlNDMTJqc051bWJlckNlbGxFUE5TXzlFeGVjU3RhdGVFZAog
X19aTjNKU0MxM0NvZGVHZW5lcmF0b3IyMXNldER1bXBzR2VuZXJhdGVkQ29kZUViCiBfX1pOM0pT
QzEzU3RhdGVtZW50Tm9kZTZzZXRMb2NFaWkKIF9fWk4zSlNDMTNqc093bmVkU3RyaW5nRVBOU185
RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCkBAIC0xNDYsMTQgKzE0OCwxNCBAQCBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3Rud0VtUE5TXzEySlNHbG9iCiBfX1pOM0pTQzE0Y29uc3RydWN0QXJyYXlF
UE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDMTVKU1dyYXBwZXJPYmplY3Q0
bWFya0V2CiBfX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbjRpbmZvRQotX19aTjNKU0MxNkludGVy
bmFsRnVuY3Rpb25DMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTdGdW5jdGlvblByb3RvdHlwZUVSS05T
XzEwSWRlbnRpZmllckUKK19fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzlFeGVjU3Rh
dGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFTdHJ1Y3R1cmVJREVFRVJLTlNfMTBJZGVudGlmaWVy
RQogX19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxNmdldFBy
b3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pO
M0pTQzE2SlNWYXJpYWJsZU9iamVjdDE2c2V0UmVnaXN0ZXJBcnJheUVQTlNfOFJlZ2lzdGVyRW0K
IF9fWk4zSlNDMTZQYXJzZXJSZWZDb3VudGVkM3JlZkV2CiBfX1pOM0pTQzE2UGFyc2VyUmVmQ291
bnRlZDVkZXJlZkV2CiBfX1pOM0pTQzE3UHJvcGVydHlOYW1lQXJyYXkzYWRkRVBOU183VVN0cmlu
ZzNSZXBFCi1fX1pOM0pTQzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
MTdGdW5jdGlvblByb3RvdHlwZUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNfN0pTVmFsdWVFUzJf
UE5TXzhKU09iamVjdEVTOV9SS05TXzdBcmdMaXN0RUUKK19fWk4zSlNDMTdQcm90b3R5cGVGdW5j
dGlvbkMxRVBOU185RXhlY1N0YXRlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzExU3RydWN0dXJlSURF
RUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNfN0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVTQl9S
S05TXzdBcmdMaXN0RUUKIF9fWk4zSlNDMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0
YXRlRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVM3
X1JLTlNfN0FyZ0xpc3RFRQogX19aTjNKU0MxN2NvbnN0cnVjdEZ1bmN0aW9uRVBOU185RXhlY1N0
YXRlRVJLTlNfN0FyZ0xpc3RFUktOU18xMElkZW50aWZpZXJFUktOU183VVN0cmluZ0VpCiBfX1pO
M0pTQzE5Y29uc3RydWN0RW1wdHlBcnJheUVQTlNfOUV4ZWNTdGF0ZUUKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjcwNSkK
KysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0lu
Zm8gSlNDYWxsYmFja0NvbnN0cnVjdG9yOjppbmZvID0geyAiQ2FsbGJhY2tDb25zdHJ1Y3RvciIs
IDAsIDAsIDAgfTsKIAotSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpKU0NhbGxiYWNrQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2JqZWN0Q2FsbEFzQ29u
c3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykKLSAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCitKU0NhbGxiYWNrQ29uc3RydWN0b3I6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUs
IEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNh
bGxiYWNrKQorICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogICAgICwgbV9jbGFzcyhqc0NsYXNz
KQogICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxiYWNrQ29uc3RydWN0b3Ig
OiBwdWJsaWMgSlNPYmplY3QgewogcHVibGljOgotICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqLCBKU0NsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sp
OworICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgSlND
bGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrKTsKICAgICB2aXJ0dWFs
IH5KU0NhbGxiYWNrQ29uc3RydWN0b3IoKTsKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmKCkgY29u
c3QgeyByZXR1cm4gbV9jbGFzczsgfQogICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxs
YmFjayBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNjcwNSkKKysr
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNDYWxsYmFja0Z1
bmMKIGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrRnVuY3Rpb246OmluZm8gPSB7ICJDYWxsYmFj
a0Z1bmN0aW9uIiwgJkludGVybmFsRnVuY3Rpb246OmluZm8sIDAsIDAgfTsKIAogSlNDYWxsYmFj
a0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdENh
bGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCi0g
ICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b3R5cGUoKSwgbmFtZSkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCks
IG5hbWUpCiAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewogfQpJbmRleDogSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNsYXNzIEpTQ2FsbGJh
Y2tPYmplY3QgOiBwdWJsaWMgQmFzZSB7CiBwdWJsaWM6Ci0gICAgSlNDYWxsYmFja09iamVjdChF
eGVjU3RhdGUqLCBKU0NsYXNzUmVmLCBKU09iamVjdCogcHJvdG90eXBlLCB2b2lkKiBkYXRhKTsK
KyAgICBKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
LCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFs
RGF0YSosIEpTQ2xhc3NSZWYpOwogICAgIHZpcnR1YWwgfkpTQ2FsbGJhY2tPYmplY3QoKTsKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKIG5hbWVzcGFjZSBK
U0MgewogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OkpT
Q2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIHZvaWQqIGRhdGEpCi0gICAgOiBCYXNlKHByb3RvdHlwZSkKK0pTQ2Fs
bGJhY2tPYmplY3Q8QmFzZT46OkpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYganNDbGFzcywgdm9pZCog
ZGF0YSkKKyAgICA6IEJhc2Uoc3RydWN0dXJlKQogICAgICwgbV9jYWxsYmFja09iamVjdERhdGEo
bmV3IEpTQ2FsbGJhY2tPYmplY3REYXRhKGRhdGEsIGpzQ2xhc3MpKQogewogICAgIGluaXQoZXhl
Yyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysr
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1
LDEyICsyMzUsMTEgQEAgSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZShFeGVjUwog
CiAgICAgaWYgKCFqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUpIHsKICAgICAgICAgLy8gUmVj
dXJzaXZlLCBidXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMKLSAgICAg
ICAgSlNPYmplY3QqIHBhcmVudFByb3RvdHlwZSA9IDA7Ci0gICAgICAgIGlmIChwYXJlbnRDbGFz
cykKLSAgICAgICAgICAgIHBhcmVudFByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUo
ZXhlYyk7IC8vIGNhbiBiZSBudWxsCi0gICAgICAgIGlmICghcGFyZW50UHJvdG90eXBlKQotICAg
ICAgICAgICAgcGFyZW50UHJvdG90eXBlID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5v
YmplY3RQcm90b3R5cGUoKTsKLSAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlID0g
bmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0PihleGVjLCBwcm90b3R5cGVDbGFz
cywgcGFyZW50UHJvdG90eXBlLCAmanNDbGFzc0RhdGEpOyAvLyBzZXQganNDbGFzc0RhdGEgYXMg
dGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ug
b24gZGVzdHJ1Y3Rpb24KKyAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlID0gbmV3
IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0PihleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAm
anNDbGFzc0RhdGEpOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUg
ZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICAg
ICAgaWYgKHBhcmVudENsYXNzKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlw
ZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykpCisgICAgICAgICAgICAgICAganNDbGFz
c0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQcm90b3R5cGUocHJvdG90eXBlKTsKKyAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4ganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlOwogfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEzICs3
MiwxMyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAgICAgSlNM
b2NrIGxvY2soZXhlYyk7CiAKICAgICBpZiAoIWpzQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b1Jl
ZihuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpKTsgLy8gc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQKKyAgICAgICAgcmV0dXJu
IHRvUmVmKG5ldyAoZXhlYykgSlNPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5l
bXB0eU9iamVjdFN0cnVjdHVyZSgpKSk7IC8vIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50CiAKLSAg
ICBKU09iamVjdCoganNQcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYyk7Ci0gICAg
aWYgKCFqc1Byb3RvdHlwZSkKLSAgICAgICAganNQcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOworICAgIEpTQ2FsbGJhY2tPYmplY3Q8SlNP
YmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3Q+KGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUo
KSwganNDbGFzcywgZGF0YSk7CisgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNz
LT5wcm90b3R5cGUoZXhlYykpCisgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKHByb3RvdHlw
ZSk7CiAKLSAgICByZXR1cm4gdG9SZWYobmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2Jq
ZWN0PihleGVjLCBqc0NsYXNzLCBqc1Byb3RvdHlwZSwgZGF0YSkpOworICAgIHJldHVybiB0b1Jl
ZihvYmplY3QpOwogfQogCiBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1lLCBKU09iamVjdENhbGxBc0Z1
bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24pCkBAIC0xMDIsNyArMTAyLDcgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDbwogICAgICAgICA/IGpzQ2xhc3MtPnBy
b3RvdHlwZShleGVjKQogICAgICAgICA6IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+b2Jq
ZWN0UHJvdG90eXBlKCk7CiAgICAgCi0gICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1
Y3RvciA9IG5ldyAoZXhlYykgSlNDYWxsYmFja0NvbnN0cnVjdG9yKGV4ZWMsIGpzQ2xhc3MsIGNh
bGxBc0NvbnN0cnVjdG9yKTsKKyAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBKU0NhbGxiYWNrQ29uc3RydWN0b3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxBc0Nv
bnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIGpzUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcmV0dXJuIHRvUmVmKGNvbnN0cnVjdG9yKTsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01h
Y2hpbmUuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBqc0xlc3MoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoZmFzdElzTnVtYmVyKHYxLCBuMSkgJiYg
ZmFzdElzTnVtYmVyKHYyLCBuMikpCiAgICAgICAgIHJldHVybiBuMSA8IG4yOwogCisgICAgTWFj
aGluZSogbWFjaGluZSA9IGV4ZWMtPm1hY2hpbmUoKTsKKyAgICBpZiAobWFjaGluZS0+aXNKU1N0
cmluZyh2MSkgJiYgbWFjaGluZS0+aXNKU1N0cmluZyh2MikpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHYxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0
IEpTU3RyaW5nKj4odjIpLT52YWx1ZSgpOworCiAgICAgSlNWYWx1ZSogcDE7CiAgICAgSlNWYWx1
ZSogcDI7CiAgICAgYm9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1pdGl2ZU51bWJlcihl
eGVjLCBuMSwgcDEpOwpAQCAtMTcxLDYgKzE3NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNM
ZXNzRXEoRXhlY1N0YXRlKiBlCiAgICAgaWYgKGZhc3RJc051bWJlcih2MSwgbjEpICYmIGZhc3RJ
c051bWJlcih2MiwgbjIpKQogICAgICAgICByZXR1cm4gbjEgPD0gbjI7CiAKKyAgICBNYWNoaW5l
KiBtYWNoaW5lID0gZXhlYy0+bWFjaGluZSgpOworICAgIGlmIChtYWNoaW5lLT5pc0pTU3RyaW5n
KHYxKSAmJiBtYWNoaW5lLT5pc0pTU3RyaW5nKHYyKSkKKyAgICAgICAgcmV0dXJuICEoc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih2MiktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxjb25zdCBK
U1N0cmluZyo+KHYxKS0+dmFsdWUoKSk7CisKICAgICBKU1ZhbHVlKiBwMTsKICAgICBKU1ZhbHVl
KiBwMjsKICAgICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4
ZWMsIG4xLCBwMSk7CkBAIC0xNTA0LDcgKzE1MTIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2
YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdFeHAgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIHJbZHN0XSA9IG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KHNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBQcm90b3R5cGUoKSwgY29kZUJsb2NrLT5yZWdleHBzW3JlZ0V4cF0p
OworICAgICAgICByW2RzdF0gPSBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChzY29wZUNoYWluLT5n
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIGNvZGVCbG9jay0+cmVnZXhwc1tyZWdF
eHBdKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0zMzg1LDEz
ICszMzkzLDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQogICAgICAgICAgICAgICAg
ICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoZXhlYywgY29uc3RydWN0
b3IpOwogCi0gICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlOwotICAgICAgICAgICAgSlNW
YWx1ZSogcCA9IHJbY29uc3RyUHJvdG9dLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAo
cC0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHApOworICAgICAgICAgICAgU3RydWN0dXJlSUQqIHN0cnVjdHVyZTsKKyAgICAg
ICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHJbY29uc3RyUHJvdG9dLmpzVmFsdWUoZXhlYyk7
CisgICAgICAgICAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKS0+aW5oZXJpdG9y
SUQoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBK
U09iamVjdCogbmV3T2JqZWN0ID0gbmV3IChleGVjKSBKU09iamVjdChwcm90b3R5cGUpOworICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5lbXB0
eU9iamVjdFN0cnVjdHVyZSgpOworICAgICAgICAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IG5l
dyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAogICAgICAgICAgICAgU2NvcGVDaGFpbk5v
ZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFpbjsKICAg
ICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUgPSBjb25zdHJ1Y3RE
YXRhLmpzLmZ1bmN0aW9uQm9keTsKQEAgLTQ1MzksMTMgKzQ1NDcsMTIgQEAgdm9pZCogTWFjaGlu
ZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogICAgIGlmICgqQVJHX3Byb2ZpbGVyUmVmZXJl
bmNlKQogICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMs
IGNvbnN0cnVjdG9yKTsKIAotICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7Ci0gICAgSlNWYWx1ZSog
cCA9IGNvbnN0clByb3RvVmFsOwotICAgIGlmIChwLT5pc09iamVjdCgpKQotICAgICAgICBwcm90
b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHApOworICAgIFN0cnVjdHVyZUlEKiBzdHJ1
Y3R1cmU7CisgICAgaWYgKGNvbnN0clByb3RvVmFsLT5pc09iamVjdCgpKQorICAgICAgICBzdHJ1
Y3R1cmUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNvbnN0clByb3RvVmFsKS0+aW5oZXJpdG9y
SUQoKTsKICAgICBlbHNlCi0gICAgICAgIHByb3RvdHlwZSA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKLSAgICBKU09iamVjdCogbmV3T2JqZWN0ID0gbmV3
IChleGVjKSBKU09iamVjdChwcm90b3R5cGUpOworICAgICAgICBzdHJ1Y3R1cmUgPSBzY29wZUNo
YWluLT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICBKU09iamVj
dCogbmV3T2JqZWN0ID0gbmV3IChleGVjKSBKU09iamVjdChzdHJ1Y3R1cmUpOwogCiAgICAgU2Nv
cGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGVD
aGFpbjsKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlID0gY29uc3RydWN0
RGF0YS5qcy5mdW5jdGlvbkJvZHk7CkBAIC01MTQ0LDcgKzUxNTEsNyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfYml0eG9yKENUSV9BUkdTCiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9u
ZXdfcmVnZXhwKENUSV9BUkdTKQogewotICAgIHJldHVybiBuZXcgKEFSR19leGVjKSBSZWdFeHBP
YmplY3QoQVJHX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBQcm90b3R5cGUoKSwg
QVJHX3JlZ2V4cDEpOworICAgIHJldHVybiBuZXcgKEFSR19leGVjKSBSZWdFeHBPYmplY3QoQVJH
X3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgQVJHX3JlZ2V4
cDEpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0b3IoQ1RJX0FSR1MpCkBAIC01
Mjc0LDcgKzUyODEsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfbnVtYmVyKENUSV9B
CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19zdHJpbmcoQ1RJX0FSR1MpCiB7Ci0gICAg
cmV0dXJuIGpzQm9vbGVhbihBUkdfc3JjMS0+aXNTdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzQm9v
bGVhbihBUkdfZXhlYy0+bWFjaGluZSgpLT5pc0pTU3RyaW5nKEFSR19zcmMxKSk7CiB9CiAKIEpT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19vYmplY3QoQ1RJX0FSR1MpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFj
aGluZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMyLDYgKzIzMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBEZWZhdWx0IG51bWJlciBvZiB0aWNrcyBiZWZvcmUgYSB0aW1lb3V0IGNoZWNrIHNob3Vs
ZCBiZSBkb25lLgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJl
c2hvbGQgPSAxMDI0OwogCisgICAgICAgIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUqIHYpIHsgcmV0
dXJuICFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxsKCktPnZwdHIoKSA9
PSBtX2pzQXJyYXlWcHRyOyB9CisgICAgICAgIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVlKiB2KSB7
IHJldHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRy
KCkgPT0gbV9qc1N0cmluZ1ZwdHI7IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07CiAKQEAg
LTI1Niw5ICsyNTksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSogY2hlY2tU
aW1lb3V0KEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcmVzZXRUaW1lb3V0Q2hlY2so
KTsKIAotICAgICAgICBib29sIGlzSlNBcnJheShKU1ZhbHVlKiB2KSB7IHJldHVybiAhSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0gbV9qc0FycmF5
VnB0cjsgfQotICAgICAgICBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSogdikgeyByZXR1cm4gIUpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0cigpID09IG1fanNT
dHJpbmdWcHRyOyB9Ci0gICAgICAgIAogICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChFeGVj
U3RhdGUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAg
ICAgICAgIHZvaWQgdW5jYWNoZUdldEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7
CiAgICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAzNjcwNSkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIGNvbnN0IENsYXNzSW5mbyBBcmd1bWVudHM6OmluZm8gPSB7ICJBcmcKIAog
Ly8gRUNNQSAxMC4xLjgKIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNG
dW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbikKLSAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2Jq
ZWN0UHJvdG90eXBlKCkpCisgICAgOiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQogICAgICwgZChuZXcgQXJndW1lbnRzRGF0YShhY3Rp
dmF0aW9uLCBmdW5jdGlvbiwgYXJncykpCiB7CiAgICAgQVNTRVJUKGFjdGl2YXRpb24pOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY3MDUp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAKICNp
bmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgotI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgImxvb2t1cC5oIgogCkBAIC0zMyw4ICsz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEFycmF5
Q29uc3RydWN0b3IpOwogCi1BcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlLCBBcnJheVBy
b3RvdHlwZSogYXJyYXlQcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uUHJvdG90eXBlLCBJZGVudGlmaWVyKGV4ZWMsIGFycmF5UHJvdG90eXBlLT5jbGFzc0lu
Zm8oKS0+Y2xhc3NOYW1lKSkKK0FycmF5Q29uc3RydWN0b3I6OkFycmF5Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEFycmF5UHJv
dG90eXBlKiBhcnJheVByb3RvdHlwZSkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgc3Ry
dWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lKSkKIHsKICAgICAvLyBFQ01BIDE1LjQuMy4xIEFycmF5LnByb3RvdHlwZQogICAgIHB1
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBhcnJheVByb3RvdHlwZSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwpAQCAtNTAsMTEgKzQ5LDExIEBAIHN0
YXRpYyBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVEKICAgICAgICAgdWludDMyX3Qg
biA9IGFyZ3MuYXQoZXhlYywgMCktPnRvVUludDMyKGV4ZWMpOwogICAgICAgICBpZiAobiAhPSBh
cmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkKICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3Vn
aCBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgbik7CisgICAg
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hcnJheVN0cnVjdHVyZSgpLCBuKTsKICAgICB9CiAKICAgICAvLyBvdGhlcndpc2UgdGhlIGFy
cmF5IGlzIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBpbiBpdAotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJh
eVByb3RvdHlwZSgpLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CiB9
CiAKIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvQXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMSArMjYsMTAgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGU7Ci0gICAgY2xhc3MgRnVu
Y3Rpb25Qcm90b3R5cGU7CiAKICAgICBjbGFzcyBBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIElu
dGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJyYXlDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIEFycmF5UHJvdG90eXBlKik7CisgICAgICAg
IEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIEFy
cmF5UHJvdG90eXBlKik7CiAKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENh
bGxEYXRhKENhbGxEYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9BcnJheVByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0FycmF5UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOCArOTEsOCBAQCBjb25zdCBDbGFzc0luZm8gQXJy
YXlQcm90b3R5cGU6OmluZm8gPSB7CiAqLwogCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5
cGU6OkFycmF5UHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJv
dG90eXBlKQotICAgIDogSlNBcnJheShvYmplY3RQcm90b3R5cGUsIDApCitBcnJheVByb3RvdHlw
ZTo6QXJyYXlQcm90b3R5cGUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlKQorICAg
IDogSlNBcnJheShzdHJ1Y3R1cmUpCiB7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9B
cnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9BcnJheVBy
b3RvdHlwZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9BcnJheVBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHVi
bGljOgotICAgICAgICBBcnJheVByb3RvdHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUq
KTsKKyAgICAgICAgZXhwbGljaXQgQXJyYXlQcm90b3R5cGUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4pOwogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQm9vbGVh
bkNvbnN0cnVjdG9yKTsKIAotQm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUsIEJv
b2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCBJZGVudGlmaWVyKGV4ZWMsIGJvb2xlYW5Qcm90b3R5
cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQorQm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFu
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1
Y3R1cmUsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5cGUpCisgICAgOiBJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBib29sZWFuUHJvdG90
eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKIHsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgYm9vbGVhblByb3RvdHlwZSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwogCkBAIC00MCw3ICs0MCw3IEBAIEJvb2xlYW5Db25zdHJ1Y3Rv
cjo6Qm9vbGVhbkNvbnN0cnVjdG9yKEUKIC8vIEVDTUEgMTUuNi4yCiBKU09iamVjdCogY29uc3Ry
dWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
Qm9vbGVhbk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2JqZWN0KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Ym9vbGVhblByb3RvdHlwZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0
KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZShqc0Jvb2xlYW4oYXJncy5hdChleGVjLCAwKS0+dG9Cb29sZWFuKGV4ZWMpKSk7CiAgICAgcmV0
dXJuIG9iajsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9y
OjpnZXRDYWxsRGF0YQogCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVC
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogaW1tZWRpYXRlQm9vbGVhblZhbHVlKQog
ewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKSk7CisgICAgQm9vbGVh
bk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmotPnNldEludGVy
bmFsVmFsdWUoaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKICAgICByZXR1cm4gb2JqOwogfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9Cb29sZWFuQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzY3MDUp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDExICsyNiwxMCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCb29s
ZWFuUHJvdG90eXBlOwotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogCiAgICAgY2xhc3Mg
Qm9vbGVhbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90
eXBlKiwgQm9vbGVhblByb3RvdHlwZSopOworICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIEJvb2xlYW5Qcm90b3R5cGUqKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Cb29sZWFuT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbk9iamVjdC5j
cHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Jvb2xlYW5PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoQm9vbGVhbk9iamVjdCkKIAogY29uc3QgQ2xhc3NJbmZvIEJvb2xlYW5PYmplY3Q6Omlu
Zm8gPSB7ICJCb29sZWFuIiwgMCwgMCwgMCB9OwogCi1Cb29sZWFuT2JqZWN0OjpCb29sZWFuT2Jq
ZWN0KEpTT2JqZWN0KiBwcm90b3R5cGUpCi0gICAgOiBKU1dyYXBwZXJPYmplY3QocHJvdG90eXBl
KQorQm9vbGVhbk9iamVjdDo6Qm9vbGVhbk9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBz
dHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qoc3RydWN0dXJlKQogewogfQogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMg
SlNXcmFwcGVyT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJvb2xlYW5PYmplY3QoSlNP
YmplY3QqIHByb3RvdHlwZSk7CisgICAgICAgIGV4cGxpY2l0IEJvb2xlYW5PYmplY3QoUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4pOwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Cb29sZWFuUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIkJvb2xl
YW5Qcm90b3R5cGUuaCIKIAogI2luY2x1ZGUgIkVycm9yLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25Q
cm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCkBAIC0zNywxMyArMzYsMTMg
QEAgc3RhdGljIEpTVmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKAogCiAvLyBFQ01BIDE1
LjYuNAogCi1Cb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJvdG90eXBlKiBm
dW5jdGlvblByb3RvdHlwZSkKLSAgICA6IEJvb2xlYW5PYmplY3Qob2JqZWN0UHJvdG90eXBlKQor
Qm9vbGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlKQorICAgIDogQm9vbGVhbk9iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgc2V0
SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5
cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgYm9vbGVhblByb3RvRnVuY1Rv
U3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS52YWx1ZU9mLCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZiksIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudG9TdHJpbmcsIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dmFsdWVPZiwgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CiB9CiAKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0Jvb2xlYW5Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAzNjcwNSkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9Cb29sZWFuUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEyICsyNSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRnVuY3Rpb25Q
cm90b3R5cGU7Ci0gICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwotCiAgICAgY2xhc3MgQm9vbGVh
blByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IEJvb2xlYW5Qcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiwgRnVuY3Rpb25Q
cm90b3R5cGUqKTsKKyAgICAgICAgQm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVm
UHRyPFN0cnVjdHVyZUlEPiwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9E
YXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTQgQEAg
c3RhdGljIEpTVmFsdWUqIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBKUwogc3RhdGljIEpTVmFsdWUq
IGRhdGVOb3coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owogc3RhdGljIEpTVmFsdWUqIGRhdGVVVEMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwogCi1EYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSwgRGF0
ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSkKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywg
ZnVuY3Rpb25Qcm90b3R5cGUsIElkZW50aWZpZXIoZXhlYywgZGF0ZVByb3RvdHlwZS0+Y2xhc3NJ
bmZvKCktPmNsYXNzTmFtZSkpCitEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgU3RydWN0dXJl
SUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBkYXRlUHJvdG90
eXBlKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIo
ZXhlYywgZGF0ZVByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7CiAgICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlwZSwg
RG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKLSAgICAgIHB1dERpcmVjdEZ1bmN0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5
cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wYXJzZSwgZGF0ZVBhcnNlKSwgRG9udEVudW0p
OwotICAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgNywgZXhlYy0+cHJvcGVydHlOYW1lcygpLlVU
QywgZGF0ZVVUQyksIERvbnRFbnVtKTsKLSAgICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ub3csIGRhdGVOb3cpLCBEb250RW51bSk7CisgICAgICBwdXRE
aXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucGFyc2Us
IGRhdGVQYXJzZSksIERvbnRFbnVtKTsKKyAgICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUsIDcsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5VVEMsIGRhdGVVVEMpLCBEb250RW51bSk7Cisg
ICAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubm93LCBkYXRlTm93KSwgRG9udEVudW0pOwogCiAgICAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgNyksIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKIH0KQEAgLTEwNiw5ICsxMDYsOSBAQCBzdGF0aWMgSlNPYmplY3Qq
IGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBEYXRlSW5z
dGFuY2UqIHJldCA9IG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZGF0ZVByb3RvdHlwZSgpKTsKLSAgICByZXQtPnNldEludGVybmFsVmFsdWUoanNO
dW1iZXIoZXhlYywgdGltZUNsaXAodmFsdWUpKSk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICBEYXRl
SW5zdGFuY2UqIHJlc3VsdCA9IG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpKTsKKyAgICByZXN1bHQtPnNldEludGVybmFs
VmFsdWUoanNOdW1iZXIoZXhlYywgdGltZUNsaXAodmFsdWUpKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogQ29uc3RydWN0VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9E
YXRlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZUNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0RhdGVD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTAgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKLSAgICBjbGFzcyBGdW5jdGlvblBy
b3RvdHlwZTsKIAogICAgIGNsYXNzIERhdGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
LCBGdW5jdGlvblByb3RvdHlwZSosIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgRGF0ZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBTdHJ1Y3R1cmVJRCog
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIERhdGVQcm90b3R5cGUqKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0
cnVjdERhdGEmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlSW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlSW5zdGFuY2UuY3BwCShyZXZpc2lv
biAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlSW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIHN0cnVjdCBEYXRlSW5zdGFuY2U6OkNhY2hlIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIERhdGVJbnN0YW5jZTo6aW5mbyA9IHsiRGF0ZSIsIDAsIDAsIDB9Owog
Ci1EYXRlSW5zdGFuY2U6OkRhdGVJbnN0YW5jZShKU09iamVjdCogcHJvdG90eXBlKQotICAgIDog
SlNXcmFwcGVyT2JqZWN0KHByb3RvdHlwZSkKK0RhdGVJbnN0YW5jZTo6RGF0ZUluc3RhbmNlKFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSkKKyAgICA6IEpTV3JhcHBlck9iamVjdChz
dHJ1Y3R1cmUpCiAgICAgLCBtX2NhY2hlKDApCiB7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvRGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0RhdGVJ
bnN0YW5jZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlSW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDExIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0gICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7Ci0gICAgY2xhc3MgT2JqZWN0UHJv
dG90eXBlOwogICAgIHN0cnVjdCBHcmVnb3JpYW5EYXRlVGltZTsKIAogICAgIGNsYXNzIERhdGVJ
bnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
RGF0ZUluc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5cGUpOworICAgICAgICBleHBsaWNpdCBEYXRl
SW5zdGFuY2UoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOwogICAgICAgICB2aXJ0dWFsIH5EYXRl
SW5zdGFuY2UoKTsKIAogICAgICAgICBkb3VibGUgaW50ZXJuYWxOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBpbnRlcm5hbFZhbHVlKCktPnVuY2hlY2tlZEdldE51bWJlcigpOyB9CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDggKzM0
NSw4IEBAIGNvbnN0IENsYXNzSW5mbyBEYXRlUHJvdG90eXBlOjppbmZvID0geyIKICovCiAvLyBF
Q01BIDE1LjkuNAogCi1EYXRlUHJvdG90eXBlOjpEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUpCi0gICAgOiBEYXRlSW5zdGFuY2Uo
b2JqZWN0UHJvdG90eXBlKQorRGF0ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSkKKyAgICA6IERhdGVJbnN0
YW5jZShzdHJ1Y3R1cmUpCiB7CiAgICAgc2V0SW50ZXJuYWxWYWx1ZShqc05hTihleGVjKSk7CiAg
ICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIERhdGVDb25z
dHJ1Y3RvciBoYXMgYmVlbiBidWlsdC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0RhdGVQcm90b3R5cGUu
aAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgRGF0ZVByb3RvdHlwZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewogICAgIHB1YmxpYzoK
LSAgICAgICAgRGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqKTsKKyAg
ICAgICAgRGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPik7
CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9FcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2
IEBACiAKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKIApAQCAtMzEsOCArMzAsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvckNvbnN0cnVjdG9y
KTsKIAotRXJyb3JDb25zdHJ1Y3Rvcjo6RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMs
IEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSwgRXJyb3JQcm90b3R5cGUqIGVy
cm9yUHJvdG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3Rv
dHlwZSwgSWRlbnRpZmllcihleGVjLCBlcnJvclByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNz
TmFtZSkpCitFcnJvckNvbnN0cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJy
b3JQcm90b3R5cGUpCisgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIHN0cnVjdHVyZSwgSWRl
bnRpZmllcihleGVjLCBlcnJvclByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7
CiAgICAgLy8gRUNNQSAxNS4xMS4zLjEgRXJyb3IucHJvdG90eXBlCiAgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJvdG90eXBlLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CkBAIC00Miw3ICs0MSw3IEBAIEVycm9yQ29uc3RydWN0
b3I6OkVycm9yQ29uc3RydWN0b3IoRXhlY1MKIC8vIEVDTUEgMTUuOS4zCiBzdGF0aWMgRXJyb3JJ
bnN0YW5jZSogY29uc3RydWN0RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEVycm9ySW5zdGFuY2UqIG9iaiA9IG5ldyAoZXhlYykgRXJyb3JJbnN0YW5j
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yUHJvdG90eXBlKCkpOworICAgIEVy
cm9ySW5zdGFuY2UqIG9iaiA9IG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZShleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwogICAgIGlmICghYXJncy5hdChleGVj
LCAwKS0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgb2JqLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm1lc3NhZ2UsIGpzU3RyaW5nKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3Ry
aW5nKGV4ZWMpKSk7CiAgICAgcmV0dXJuIG9iajsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9F
cnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Vycm9y
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXJy
b3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTAgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXJyb3JQcm90b3R5cGU7Ci0gICAgY2xhc3MgRnVuY3Rp
b25Qcm90b3R5cGU7CiAKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgRXJyb3JDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIEVycm9yUHJvdG90eXBlKik7CisgICAgICAgIEVy
cm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIEVycm9y
UHJvdG90eXBlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEVycm9ySW5zdGFuY2U6OmluZm8gPSB7ICJF
cnJvciIsIDAsIDAsIDAgfTsKIAotRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0YW5jZShKU09iamVj
dCogcHJvdG90eXBlKQotICAgIDogSlNPYmplY3QocHJvdG90eXBlKQorRXJyb3JJbnN0YW5jZTo6
RXJyb3JJbnN0YW5jZShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpCisgICAgOiBK
U09iamVjdChzdHJ1Y3R1cmUpCiB7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FcnJv
ckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Vycm9ySW5zdGFu
Y2UuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXJyb3JJbnN0YW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgRXJyb3JJbnN0YW5jZSA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAgcHVibGljOgot
ICAgICAgICBFcnJvckluc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5cGUpOworICAgICAgICBleHBs
aWNpdCBFcnJvckluc3RhbmNlKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKIAogICAgICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFcnJvclByb3RvdHlwZS5oIgogCi0j
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2lu
Y2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgi
CkBAIC0zNCwxNSArMzMsMTUgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvclByb3Rv
dHlwZQogc3RhdGljIEpTVmFsdWUqIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCiAvLyBFQ01BIDE1LjkuNAot
RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJv
dG90eXBlKiBvYmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3Rv
dHlwZSkKLSAgICA6IEVycm9ySW5zdGFuY2Uob2JqZWN0UHJvdG90eXBlKQorRXJyb3JQcm90b3R5
cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4gc3RydWN0dXJlLCBTdHJ1Y3R1cmVJRCogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCisg
ICAgOiBFcnJvckluc3RhbmNlKHN0cnVjdHVyZSkKIHsKICAgICAvLyBUaGUgY29uc3RydWN0b3Ig
d2lsbCBiZSBhZGRlZCBsYXRlciBpbiBFcnJvckNvbnN0cnVjdG9yJ3MgY29uc3RydWN0b3IKIAog
ICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJFcnJvciIpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5tZXNzYWdlLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIlVua25vd24gZXJy
b3IiKSwgRG9udEVudW0pOwogCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvU3RyaW5nLCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b1N0cmluZywgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKIH0KIAog
SlNWYWx1ZSogZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9FcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9FcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKICAgICBjbGFz
cyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBF
cnJvckluc3RhbmNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEVycm9yUHJvdG90eXBlKEV4ZWNT
dGF0ZSosIE9iamVjdFByb3RvdHlwZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CisgICAgICAgIEVy
cm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBTdHJ1Y3R1
cmVJRCogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRnVuY3Rpb25Db25zdHJ1Y3Rvcik7CiAKLUZ1
bmN0aW9uQ29uc3RydWN0b3I6OkZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBG
dW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCBJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uUHJv
dG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKK0Z1bmN0aW9uQ29uc3RydWN0b3I6OkZ1
bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlE
PiBzdHJ1Y3R1cmUsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSkKKyAgICA6
IEludGVybmFsRnVuY3Rpb24oZXhlYywgc3RydWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0
aW9uUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKIHsKICAgICBwdXREaXJlY3Qo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZnVuY3Rpb25Qcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L0Z1bmN0aW9uQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBA
CiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMzAsNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1
bmN0aW9uQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGlj
OgotICAgICAgICBGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90
eXBlKik7CisgICAgICAgIEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVJRD4sIEZ1bmN0aW9uUHJvdG90eXBlKik7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRh
Jik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEzIEBAIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5j
dGlvblByb3RvdHlwZShFeGUKICAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYykKIHsKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKK30KIAotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMCwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5n
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5
LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCksIERvbnRFbnVt
KTsKK3ZvaWQgRnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKK3sKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dG9TdHJpbmcsIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBw
cm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5
LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5jdGlvblBy
b3RvRnVuY0NhbGwpLCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlKiBjYWxsRnVuY3Rp
b25Qcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24g
MzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICsyOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb24gewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRl
Kik7CisgICAgICAgIHZvaWQgYWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMzY3MDUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdsb2Jh
bEV2YWxGdW5jdGlvbi5oIgogCi0jaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAg
LTMzLDggKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NF
TEwoR2xvYmFsRXZhbEZ1bmN0aW9uKTsKIAotR2xvYmFsRXZhbEZ1bmN0aW9uOjpHbG9iYWxFdmFs
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90
b3R5cGUsIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uLCBKU0dsb2JhbE9iamVjdCogY2FjaGVkR2xvYmFsT2JqZWN0KQotICAgIDogUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIGxlbiwgbmFtZSwgZnVuY3Rpb24p
CitHbG9iYWxFdmFsRnVuY3Rpb246Okdsb2JhbEV2YWxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgaW50IGxlbiwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEpTR2xvYmFsT2JqZWN0KiBjYWNo
ZWRHbG9iYWxPYmplY3QpCisgICAgOiBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUs
IGxlbiwgbmFtZSwgZnVuY3Rpb24pCiAgICAgLCBtX2NhY2hlZEdsb2JhbE9iamVjdChjYWNoZWRH
bG9iYWxPYmplY3QpCiB7CiAgICAgQVNTRVJUX0FSRyhjYWNoZWRHbG9iYWxPYmplY3QsIGNhY2hl
ZEdsb2JhbE9iamVjdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvR2xvYmFsRXZhbEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0dsb2JhbEV2YWxGdW5jdGlv
bi5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9HbG9iYWxFdmFsRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBl
OwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogCiAgICAgY2xhc3MgR2xvYmFsRXZhbEZ1bmN0
aW9uIDogcHVibGljIFByb3RvdHlwZUZ1bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEds
b2JhbEV2YWxGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBsZW4s
IGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbiwgSlNHbG9iYWxPYmplY3QqIGV4cGVj
dGVkVGhpc09iamVjdCk7CisgICAgICAgIEdsb2JhbEV2YWxGdW5jdGlvbihFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2
ZUZ1bmN0aW9uLCBKU0dsb2JhbE9iamVjdCogZXhwZWN0ZWRUaGlzT2JqZWN0KTsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGNhY2hlZEdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkR2xvYmFsT2JqZWN0OyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDgg
QEAgSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihFeGVjUwogICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm51bGxJZGVudGlmaWVyLnVzdHJpbmcoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKIH0KIAotSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBwcm90b3R5cGUsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUpCi0gICAgOiBKU09iamVjdChwcm90b3R5cGUpCitJbnRlcm5hbEZ1bmN0aW9u
OjpJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4gc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQorICAgIDogSlNPYmplY3Qoc3Ry
dWN0dXJlKQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNT
dHJpbmcoZXhlYywgbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlz
aW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFsRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29u
c3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAg
SW50ZXJuYWxGdW5jdGlvbihQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IHN0KSA6IEpTT2Jq
ZWN0KHN0KXt9CisgICAgICAgIEludGVybmFsRnVuY3Rpb24oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4gc3RydWN0dXJlKSA6IEpTT2JqZWN0KHN0cnVjdHVyZSkgeyB9CiAgICAgICAgIEludGVybmFs
RnVuY3Rpb24oRXhlY1N0YXRlKik7Ci0gICAgICAgIEludGVybmFsRnVuY3Rpb24oRXhlY1N0YXRl
KiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIEludGVy
bmFsRnVuY3Rpb24oRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIGNvbnN0IElk
ZW50aWZpZXImKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoQ2FsbERhdGEmKSA9IDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuY3BwCShyZXZp
c2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDggKzEzOCw4IEBAIEpTQXJyYXk6OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4KICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKLUpTQXJyYXk6OkpTQXJyYXko
SlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLSAgICA6IEpTT2Jq
ZWN0KHByb3RvdHlwZSkKK0pTQXJyYXk6OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4g
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIDogSlNPYmplY3Qoc3RydWN0
dXJlKQogewogICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IG1pbihpbml0aWFsTGVuZ3Ro
LCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKIApAQCAtMTUzLDggKzE1Myw4IEBAIEpTQXJyYXk6
OkpTQXJyYXkoSlNPYmplY3QqIHByb3RvdHlwZSwgdW4KICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiB9CiAKLUpTQXJyYXk6OkpTQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90
eXBlLCBjb25zdCBBcmdMaXN0JiBsaXN0KQotICAgIDogSlNPYmplY3QocHJvdG90eXBlKQorSlNB
cnJheTo6SlNBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0
cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgbGlzdCkKKyAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBsaXN0LnNpemUoKTsKIApAQCAtODg3LDI0ICs4ODcs
MjQgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbgogCiBKU0FycmF5
KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3
IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5
cGUoKSwgMCk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpOwogfQogCiBKU0FycmF5KiBjb25zdHJ1Y3RF
bXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
YXJyYXlQcm90b3R5cGUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCksIGlu
aXRpYWxMZW5ndGgpOwogfQogCiBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHNpbmdsZUl0ZW1WYWx1ZSkKIHsKICAgICBBcmdMaXN0IHZhbHVlczsKICAg
ICB2YWx1ZXMuYXBwZW5kKHNpbmdsZUl0ZW1WYWx1ZSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNBcnJheShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBl
KCksIHZhbHVlcyk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7CiB9CiAKIEpT
QXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgdmFs
dWVzKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpLCB2YWx1ZXMpOworICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJh
eVN0cnVjdHVyZSgpLCB2YWx1ZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0pTQXJyYXkuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBmcmllbmQgY2xhc3MgQ1RJOwogCiAgICAgcHVibGljOgotICAgICAgICBKU0FycmF5
KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKLSAgICAgICAgSlNBcnJheShKU09iamVjdCogcHJv
dG90eXBlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgSlNBcnJheShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1
ZXMpOworICAgICAgICBleHBsaWNpdCBKU0FycmF5KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsK
KyAgICAgICAgSlNBcnJheShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCk7CisgICAgICAgIEpTQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZhbHVlcyk7CiAgICAgICAgIHZpcnR1
YWwgfkpTQXJyYXkoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL0pTQ2VsbC5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hY2hpbmU7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBDVEk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNDZWxsKFN0cnVjdHVyZUlEKik7Cisg
ICAgICAgIGV4cGxpY2l0IEpTQ2VsbChTdHJ1Y3R1cmVJRCopOwogICAgICAgICB2aXJ0dWFsIH5K
U0NlbGwoKTsKIAogICAgIHB1YmxpYzoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwo
SlNGdW5jdGlvbik7CiBjb25zdCBDbGFzc0luZm8gSlNGdW5jdGlvbjo6aW5mbyA9IHsgIkZ1bmN0
aW9uIiwgMCwgMCwgMCB9OwogCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQotICAgIDogQmFzZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG90eXBlKCksIG5hbWUpCisgICAgOiBCYXNlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbmFt
ZSkKICAgICAsIG1fYm9keShib2R5KQogICAgICwgbV9zY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2Rl
KQogewpAQCAtMTU4LDE0ICsxNTgsMTMgQEAgQ29uc3RydWN0VHlwZSBKU0Z1bmN0aW9uOjpnZXRD
b25zdHJ1Y3REYQogCiBKU09iamVjdCogSlNGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU09iamVjdCogcHJvdG87Ci0gICAg
SlNWYWx1ZSogcCA9IGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsK
LSAgICBpZiAocC0+aXNPYmplY3QoKSkKLSAgICAgICAgcHJvdG8gPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHApOworICAgIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmU7CisgICAgSlNWYWx1ZSogcHJv
dG90eXBlID0gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAg
IGlmIChwcm90b3R5cGUtPmlzT2JqZWN0KCkpCisgICAgICAgIHN0cnVjdHVyZSA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKS0+aW5oZXJpdG9ySUQoKTsKICAgICBlbHNlCi0gICAg
ICAgIHByb3RvID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUo
KTsKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gbmV3IChleGVjKSBKU09iamVjdChwcm90byk7
CisgICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlP
YmplY3RTdHJ1Y3R1cmUoKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IG5ldyAoZXhlYykgSlNP
YmplY3Qoc3RydWN0dXJlKTsKIAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWMtPm1hY2hpbmUo
KS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNPYmosIGFyZ3MsIG1fc2Nv
cGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQtPmlzT2JqZWN0KCkpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTIgQEAg
c3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChKU1ZhbHVlKgogICAgICAgICB2LT5tYXJr
KCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoY29uc3QgUmVmUHRyPFN0
cnVjdHVyZUlEPiYgcykKK3sKKyAgICBpZiAocykKKyAgICAgICAgcy0+bWFyaygpOworfQorCiBK
U0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKIHsKICAgICBBU1NFUlQoSlNMb2NrOjpj
dXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKQEAgLTE5MSw4MSArMTk3LDY5IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICBzeW1ib2xUYWJsZSgpLmNs
ZWFyKCk7CiAgICAgc2V0UmVnaXN0ZXJBcnJheSgwLCAwKTsKIAotICAgIC8vIFByb3RvdHlwZXMK
LSAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlID0gMDsKLSAgICBkKCktPm9iamVjdFByb3RvdHlw
ZSA9IDA7Ci0KLSAgICBkKCktPmFycmF5UHJvdG90eXBlID0gMDsKLSAgICBkKCktPnN0cmluZ1By
b3RvdHlwZSA9IDA7Ci0gICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0gMDsKLSAgICBkKCktPm51
bWJlclByb3RvdHlwZSA9IDA7Ci0gICAgZCgpLT5kYXRlUHJvdG90eXBlID0gMDsKLSAgICBkKCkt
PnJlZ0V4cFByb3RvdHlwZSA9IDA7Ci0gICAgZCgpLT5lcnJvclByb3RvdHlwZSA9IDA7Ci0gICAg
Ci0gICAgZCgpLT5ldmFsRXJyb3JQcm90b3R5cGUgPSAwOwotICAgIGQoKS0+cmFuZ2VFcnJvclBy
b3RvdHlwZSA9IDA7Ci0gICAgZCgpLT5yZWZlcmVuY2VFcnJvclByb3RvdHlwZSA9IDA7Ci0gICAg
ZCgpLT5zeW50YXhFcnJvclByb3RvdHlwZSA9IDA7Ci0gICAgZCgpLT50eXBlRXJyb3JQcm90b3R5
cGUgPSAwOwotICAgIGQoKS0+VVJJRXJyb3JQcm90b3R5cGUgPSAwOwotCi0gICAgLy8gQ29uc3Ry
dWN0b3JzCi0gICAgZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciA9IDA7Ci0gICAgZCgpLT5lcnJvckNv
bnN0cnVjdG9yID0gMDsKLSAgICAKLSAgICBkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yID0gMDsK
LSAgICBkKCktPnJhbmdlRXJyb3JDb25zdHJ1Y3RvciA9IDA7Ci0gICAgZCgpLT5yZWZlcmVuY2VF
cnJvckNvbnN0cnVjdG9yID0gMDsKLSAgICBkKCktPnN5bnRheEVycm9yQ29uc3RydWN0b3IgPSAw
OwotICAgIGQoKS0+dHlwZUVycm9yQ29uc3RydWN0b3IgPSAwOwotICAgIGQoKS0+VVJJRXJyb3JD
b25zdHJ1Y3RvciA9IDA7Ci0KLSAgICBkKCktPmV2YWxGdW5jdGlvbiA9IDA7Ci0KICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBkKCktPmdsb2JhbEV4ZWMuZ2V0KCk7CiAKICAgICAvLyBQcm90b3R5cGVz
CiAKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IChleGVjKSBGdW5jdGlvblByb3Rv
dHlwZShleGVjKTsKLSAgICBkKCktPm9iamVjdFByb3RvdHlwZSA9IG5ldyAoZXhlYykgT2JqZWN0
UHJvdG90eXBlKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
OworICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVh
dGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Cisg
ICAgZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5hZGRG
dW5jdGlvblByb3BlcnRpZXMoZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3Rv
dHlwZShleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKKyAgICBk
KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlID0gZCgpLT5vYmplY3RQcm90b3R5cGUtPmluaGVyaXRv
cklEKCk7CiAgICAgZCgpLT5mdW5jdGlvblByb3RvdHlwZS0+c2V0UHJvdG90eXBlKGQoKS0+b2Jq
ZWN0UHJvdG90eXBlKTsKLQotICAgIGQoKS0+YXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEFy
cmF5UHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBkKCktPnN0cmlu
Z1Byb3RvdHlwZSA9IG5ldyAoZXhlYykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0
UHJvdG90eXBlKTsKLSAgICBkKCktPmJvb2xlYW5Qcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEJvb2xl
YW5Qcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpOwotICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gbmV3IChleGVjKSBOdW1iZXJQcm90
b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
OwotICAgIGQoKS0+ZGF0ZVByb3RvdHlwZSA9IG5ldyAoZXhlYykgRGF0ZVByb3RvdHlwZShleGVj
LCBkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0gICAgZCgpLT5yZWdFeHBQcm90b3R5cGUgPSBuZXcg
KGV4ZWMpIFJlZ0V4cFByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSwgZCgpLT5m
dW5jdGlvblByb3RvdHlwZSk7Ci0gICAgZCgpLT5lcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykg
RXJyb3JQcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUpOwotICAgIAotICAgIGQoKS0+ZXZhbEVycm9yUHJvdG90eXBlID0gbmV3IChleGVj
KSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBlLCAiRXZhbEVy
cm9yIiwgIkV2YWxFcnJvciIpOwotICAgIGQoKS0+cmFuZ2VFcnJvclByb3RvdHlwZSA9IG5ldyAo
ZXhlYykgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgZCgpLT5lcnJvclByb3RvdHlwZSwgIlJh
bmdlRXJyb3IiLCAiUmFuZ2VFcnJvciIpOwotICAgIGQoKS0+cmVmZXJlbmNlRXJyb3JQcm90b3R5
cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQcm90
b3R5cGUsICJSZWZlcmVuY2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIpOwotICAgIGQoKS0+c3lu
dGF4RXJyb3JQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMs
IGQoKS0+ZXJyb3JQcm90b3R5cGUsICJTeW50YXhFcnJvciIsICJTeW50YXhFcnJvciIpOwotICAg
IGQoKS0+dHlwZUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJvclByb3RvdHlw
ZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBlLCAiVHlwZUVycm9yIiwgIlR5cGVFcnJvciIpOwot
ICAgIGQoKS0+VVJJRXJyb3JQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90
eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQcm90b3R5cGUsICJVUklFcnJvciIsICJVUklFcnJvciIpOwor
ICAgIGQoKS0+YXJndW1lbnRzU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9i
amVjdFByb3RvdHlwZSk7CisgICAgZCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlID0g
U3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSk7CisgICAgZCgpLT5jYWxs
YmFja09iamVjdFN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90
b3R5cGUpOworICAgIGQoKS0+YXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEFycmF5UHJvdG90
eXBlKFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5cGUpKTsKKyAgICBkKCkt
PmFycmF5U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmFycmF5UHJvdG90eXBl
KTsKKyAgICBkKCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpj
cmVhdGUoZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgZCgpLT5zdHJpbmdQcm90b3R5cGUgPSBu
ZXcgKGV4ZWMpIFN0cmluZ1Byb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+
b2JqZWN0UHJvdG90eXBlKSk7CisgICAgZCgpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKKyAgICBkKCktPmJvb2xlYW5Q
cm90b3R5cGUgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6
OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCkpOworICAgIGQoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSA9IFN0cnVjdHVy
ZUlEOjpjcmVhdGUoZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKKyAgICBkKCktPm51bWJlclByb3Rv
dHlwZSA9IG5ldyAoZXhlYykgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVh
dGUoZCgpLT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LmdldCgpKTsKKyAgICBkKCktPm51bWJlck9iamVjdFN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpj
cmVhdGUoZCgpLT5udW1iZXJQcm90b3R5cGUpOworICAgIGQoKS0+ZGF0ZVByb3RvdHlwZSA9IG5l
dyAoZXhlYykgRGF0ZVByb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2Jq
ZWN0UHJvdG90eXBlKSk7CisgICAgZCgpLT5kYXRlU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNy
ZWF0ZShkKCktPmRhdGVQcm90b3R5cGUpOworICAgIGQoKS0+cmVnRXhwUHJvdG90eXBlID0gbmV3
IChleGVjKSBSZWdFeHBQcm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9i
amVjdFByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOwor
ICAgIGQoKS0+cmVnRXhwU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPnJlZ0V4
cFByb3RvdHlwZSk7CisgICAgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlID0gbmV3IChl
eGVjKSBFcnJvclByb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2JqZWN0
UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7CisgICAg
ZCgpLT5lcnJvclN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZXJyb3JQcm90b3R5cGUp
OworCisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVy
ZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZXJyb3JQcm90b3R5cGUpOworCisgICAgTmF0aXZlRXJy
b3JQcm90b3R5cGUqIGV2YWxFcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JQ
cm90b3R5cGUoZXhlYywgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJFdmFsRXJyb3Ii
LCAiRXZhbEVycm9yIik7CisgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHJhbmdlRXJyb3JQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIG5hdGl2ZUVycm9y
UHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIsICJSYW5nZUVycm9yIik7CisgICAgTmF0
aXZlRXJyb3JQcm90b3R5cGUqIHJlZmVyZW5jZUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBO
YXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwg
IlJlZmVyZW5jZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIik7CisgICAgTmF0aXZlRXJyb3JQcm90
b3R5cGUqIHN5bnRheEVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJvclByb3Rv
dHlwZShleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIiwg
IlN5bnRheEVycm9yIik7CisgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHR5cGVFcnJvclByb3Rv
dHlwZSA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgbmF0aXZlRXJyb3JQ
cm90b3R5cGVTdHJ1Y3R1cmUsICJUeXBlRXJyb3IiLCAiVHlwZUVycm9yIik7CisgICAgTmF0aXZl
RXJyb3JQcm90b3R5cGUqIFVSSUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJv
clByb3RvdHlwZShleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9y
IiwgIlVSSUVycm9yIik7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpTVmFsdWUqIG9i
amVjdENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCBkKCkt
Pm9iamVjdFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSog
ZnVuY3Rpb25Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRnVuY3Rpb25Db25zdHJ1Y3RvcihleGVj
LCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBhcnJheUNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUsIGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIHN0cmluZ0NvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLCBkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogYm9vbGVhbkNvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSwgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBudW1iZXJDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlv
blByb3RvdHlwZSwgZCgpLT5udW1iZXJQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIGRhdGVDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUsIGQoKS0+ZGF0ZVByb3RvdHlwZSk7Ci0KLSAgICBkKCktPnJlZ0V4cENvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJv
dG90eXBlLCBkKCktPnJlZ0V4cFByb3RvdHlwZSk7Ci0KLSAgICBkKCktPmVycm9yQ29uc3RydWN0
b3IgPSBuZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgZCgpLT5lcnJvclByb3RvdHlwZSk7Ci0gICAgCi0gICAgZCgpLT5ldmFsRXJyb3JDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1
bmN0aW9uUHJvdG90eXBlLCBkKCktPmV2YWxFcnJvclByb3RvdHlwZSk7Ci0gICAgZCgpLT5yYW5n
ZUVycm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhl
YywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5yYW5nZUVycm9yUHJvdG90eXBlKTsKLSAg
ICBkKCktPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5yZWZlcmVuY2VF
cnJvclByb3RvdHlwZSk7Ci0gICAgZCgpLT5zeW50YXhFcnJvckNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUs
IGQoKS0+c3ludGF4RXJyb3JQcm90b3R5cGUpOwotICAgIGQoKS0+dHlwZUVycm9yQ29uc3RydWN0
b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlv
blByb3RvdHlwZSwgZCgpLT50eXBlRXJyb3JQcm90b3R5cGUpOwotICAgIGQoKS0+VVJJRXJyb3JD
b25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPlVSSUVycm9yUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVl
KiBvYmplY3RDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywg
U3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5vYmplY3RQ
cm90b3R5cGUpOworICAgIEpTVmFsdWUqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMp
IEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgSlNWYWx1ZSogYXJy
YXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmFycmF5UHJvdG90eXBl
KTsKKyAgICBKU1ZhbHVlKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5nQ29u
c3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBl
KSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5zdHJpbmdQcm90
b3R5cGUpOworICAgIEpTVmFsdWUqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQm9v
bGVhbkNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7CisgICAgSlNWYWx1ZSogbnVtYmVyQ29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlE
OjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+bnVtYmVyUHJvdG90eXBlKTsK
KyAgICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3Rv
cihleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCkt
PnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPmRhdGVQcm90b3R5cGUpOwor
CisgICAgZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgUmVnRXhwQ29uc3RydWN0
b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgp
LT5yZWdFeHBQcm90b3R5cGUpOworCisgICAgZCgpLT5lcnJvckNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5j
dGlvblByb3RvdHlwZSksIGVycm9yUHJvdG90eXBlKTsKKworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJ
RD4gbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rp
b25Qcm90b3R5cGUpOworCisgICAgZCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhl
YykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgZXZh
bEVycm9yUHJvdG90eXBlKTsKKyAgICBkKCktPnJhbmdlRXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAo
ZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwg
cmFuZ2VFcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIG5hdGl2ZUVycm9yU3Ry
dWN0dXJlLCByZWZlcmVuY2VFcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5zeW50YXhFcnJvckNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIG5hdGl2
ZUVycm9yU3RydWN0dXJlLCBzeW50YXhFcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT50eXBlRXJy
b3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBu
YXRpdmVFcnJvclN0cnVjdHVyZSwgdHlwZUVycm9yUHJvdG90eXBlKTsKKyAgICBkKCktPlVSSUVy
cm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywg
bmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIFVSSUVycm9yUHJvdG90eXBlKTsKICAgICAKICAgICBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAKQEAgLTI3NywxMyArMjcx
LDEzIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICBkKCkt
Pm51bWJlclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBkKCktPmRhdGVQcm90b3R5
cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGRhdGVDb25z
dHJ1Y3RvciwgRG9udEVudW0pOwogICAgIGQoKS0+cmVnRXhwUHJvdG90eXBlLT5wdXREaXJlY3Qo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPnJlZ0V4cENvbnN0cnVjdG9y
LCBEb250RW51bSk7Ci0gICAgZCgpLT5lcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5lcnJvckNvbnN0cnVjdG9yLCBEb250RW51
bSk7Ci0gICAgZCgpLT5ldmFsRXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+ZXZhbEVycm9yQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKLSAgICBkKCktPnJhbmdlRXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yLCBEb250RW51
bSk7Ci0gICAgZCgpLT5yZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9y
LCBEb250RW51bSk7Ci0gICAgZCgpLT5zeW50YXhFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5zeW50YXhFcnJvckNvbnN0cnVj
dG9yLCBEb250RW51bSk7Ci0gICAgZCgpLT50eXBlRXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+dHlwZUVycm9yQ29uc3RydWN0
b3IsIERvbnRFbnVtKTsKLSAgICBkKCktPlVSSUVycm9yUHJvdG90eXBlLT5wdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPlVSSUVycm9yQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKKyAgICBlcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5lcnJvckNvbnN0cnVjdG9yLCBEb250RW51bSk7Cisg
ICAgZXZhbEVycm9yUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcmFu
Z2VFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgZCgpLT5yYW5nZUVycm9yQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICByZWZlcmVu
Y2VFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgc3lu
dGF4RXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIGQoKS0+c3ludGF4RXJyb3JDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHR5cGVF
cnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgZCgpLT50eXBlRXJyb3JDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIFVSSUVycm9yUHJv
dG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCkt
PlVSSUVycm9yQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKIAogICAgIC8vIFNldCBnbG9iYWwgY29u
c3RydWN0b3JzCiAKQEAgLTMwNyw3ICszMDEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNl
dChKU1ZhbHVlKiBwcm90CiAKICAgICAvLyBTZXQgZ2xvYmFsIHZhbHVlcy4KICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8oSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywg
ZCgpLT5vYmplY3RQcm90b3R5cGUpLCBEb250RW51bSB8IERvbnREZWxldGUpLAorICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1h
dGhPYmplY3QoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSkp
LCBEb250RW51bSB8IERvbnREZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRl
bnRpZmllcihleGVjLCAiTmFOIiksIGpzTmFOKGV4ZWMpLCBEb250RW51bSB8IERvbnREZWxldGUp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5maW5pdHki
KSwganNOdW1iZXIoZXhlYywgSW5mKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgInVuZGVmaW5lZCIpLCBqc1VuZGVm
aW5lZCgpLCBEb250RW51bSB8IERvbnREZWxldGUpCkBAIC0zMTcsMjAgKzMxMSwyMCBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICAvLyBTZXQgZ2xvYmFs
IGZ1bmN0aW9ucy4KIAotICAgIGQoKS0+ZXZhbEZ1bmN0aW9uID0gbmV3IChleGVjKSBHbG9iYWxF
dmFsRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmV2YWwsIGdsb2JhbEZ1bmNFdmFsLCB0aGlzKTsKKyAgICBkKCktPmV2YWxGdW5j
dGlvbiA9IG5ldyAoZXhlYykgR2xvYmFsRXZhbEZ1bmN0aW9uKGV4ZWMsIFN0cnVjdHVyZUlEOjpj
cmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5l
dmFsLCBnbG9iYWxGdW5jRXZhbCwgdGhpcyk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywg
ZCgpLT5ldmFsRnVuY3Rpb24sIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUsIDIsIElkZW50aWZpZXIoZXhlYywgInBhcnNlSW50IiksIGdsb2JhbEZ1bmNQYXJzZUludCks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsIElkZW50aWZpZXIo
ZXhlYywgInBhcnNlRmxvYXQiKSwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJpc05hTiIp
LCBnbG9iYWxGdW5jSXNOYU4pLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhl
YywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJpc0Zpbml0ZSIpLCBnbG9iYWxGdW5jSXNGaW5pdGUp
LCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCBJZGVudGlmaWVy
KGV4ZWMsICJlc2NhcGUiKSwgZ2xvYmFsRnVuY0VzY2FwZSksIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsIElkZW50aWZpZXIoZXhlYywgInVuZXNjYXBlIiksIGds
b2JhbEZ1bmNVbmVzY2FwZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUsIDEsIElkZW50aWZpZXIoZXhlYywgImRlY29kZVVSSSIpLCBnbG9iYWxGdW5jRGVjb2RlVVJJ
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgSWRlbnRpZmll
cihleGVjLCAiZGVjb2RlVVJJQ29tcG9uZW50IiksIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25l
bnQpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCBJZGVudGlm
aWVyKGV4ZWMsICJlbmNvZGVVUkkiKSwgZ2xvYmFsRnVuY0VuY29kZVVSSSksIERvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsIElkZW50aWZpZXIoZXhlYywgImVuY29k
ZVVSSUNvbXBvbmVudCIpLCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMiwgSWRlbnRp
ZmllcihleGVjLCAicGFyc2VJbnQiKSwgZ2xvYmFsRnVuY1BhcnNlSW50KSwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmll
cihleGVjLCAicGFyc2VGbG9hdCIpLCBnbG9iYWxGdW5jUGFyc2VGbG9hdCksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZp
ZXIoZXhlYywgImlzTmFOIiksIGdsb2JhbEZ1bmNJc05hTiksIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQo
KS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywg
ImlzRmluaXRlIiksIGdsb2JhbEZ1bmNJc0Zpbml0ZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImVz
Y2FwZSIpLCBnbG9iYWxGdW5jRXNjYXBlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5
cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVjLCAidW5lc2NhcGUi
KSwgZ2xvYmFsRnVuY1VuZXNjYXBlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVG
dW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVjLCAiZGVjb2RlVVJJIiks
IGdsb2JhbEZ1bmNEZWNvZGVVUkkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24o
ZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1
bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJkZWNvZGVVUklDb21w
b25lbnQiKSwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhl
YywgImVuY29kZVVSSSIpLCBnbG9iYWxGdW5jRW5jb2RlVVJJKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywg
ZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVj
LCAiZW5jb2RlVVJJQ29tcG9uZW50IiksIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpLCBE
b250RW51bSk7CiAjaWZuZGVmIE5ERUJVRwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwg
MSwgSWRlbnRpZmllcihleGVjLCAia2pzcHJpbnQiKSwgZ2xvYmFsRnVuY0tKU1ByaW50KSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwg
SWRlbnRpZmllcihleGVjLCAia2pzcHJpbnQiKSwgZ2xvYmFsRnVuY0tKU1ByaW50KSwgRG9udEVu
dW0pOwogI2VuZGlmCiAKICAgICByZXNldFByb3RvdHlwZShwcm90b3R5cGUpOwpAQCAtMzgwLDI0
ICszNzQsMjEgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6bWFyaygpCiAgICAgbWFya0lmTmVlZGVk
KGQoKS0+c3ludGF4RXJyb3JDb25zdHJ1Y3Rvcik7CiAgICAgbWFya0lmTmVlZGVkKGQoKS0+dHlw
ZUVycm9yQ29uc3RydWN0b3IpOwogICAgIG1hcmtJZk5lZWRlZChkKCktPlVSSUVycm9yQ29uc3Ry
dWN0b3IpOwotICAgIAorCiAgICAgbWFya0lmTmVlZGVkKGQoKS0+ZXZhbEZ1bmN0aW9uKTsKLSAg
ICAKKwogICAgIG1hcmtJZk5lZWRlZChkKCktPm9iamVjdFByb3RvdHlwZSk7CiAgICAgbWFya0lm
TmVlZGVkKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmFy
cmF5UHJvdG90eXBlKTsKICAgICBtYXJrSWZOZWVkZWQoZCgpLT5ib29sZWFuUHJvdG90eXBlKTsK
ICAgICBtYXJrSWZOZWVkZWQoZCgpLT5zdHJpbmdQcm90b3R5cGUpOwogICAgIG1hcmtJZk5lZWRl
ZChkKCktPm51bWJlclByb3RvdHlwZSk7CiAgICAgbWFya0lmTmVlZGVkKGQoKS0+ZGF0ZVByb3Rv
dHlwZSk7CiAgICAgbWFya0lmTmVlZGVkKGQoKS0+cmVnRXhwUHJvdG90eXBlKTsKLSAgICBtYXJr
SWZOZWVkZWQoZCgpLT5lcnJvclByb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZXZh
bEVycm9yUHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5yYW5nZUVycm9yUHJvdG90
eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5yZWZlcmVuY2VFcnJvclByb3RvdHlwZSk7Ci0g
ICAgbWFya0lmTmVlZGVkKGQoKS0+c3ludGF4RXJyb3JQcm90b3R5cGUpOwotICAgIG1hcmtJZk5l
ZWRlZChkKCktPnR5cGVFcnJvclByb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+VVJJ
RXJyb3JQcm90b3R5cGUpOworCisgICAgbWFya0lmTmVlZGVkKGQoKS0+ZXJyb3JTdHJ1Y3R1cmUp
OworCisgICAgLy8gTm8gbmVlZCB0byBtYXJrIHRoZSBvdGhlciBzdHJ1Y3R1cmVzLCBiZWNhdXNl
IHRoZWlyIHByb3RvdHlwZXMgYXJlIGFsbAorICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgcmVmZXJl
bmNlZCBlbHNld2hlcmUuCiB9CiAKIEpTR2xvYmFsT2JqZWN0KiBKU0dsb2JhbE9iamVjdDo6dG9H
bG9iYWxPYmplY3QoRXhlY1N0YXRlKikgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzMyArMzYsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKICAgICBjbGFzcyBEZWJ1Z2dlcjsKICAgICBj
bGFzcyBFcnJvckNvbnN0cnVjdG9yOwotICAgIGNsYXNzIEVycm9yUHJvdG90eXBlOwotICAgIGNs
YXNzIEV2YWxFcnJvcjsKLSAgICBjbGFzcyBFdmFsRXJyb3JQcm90b3R5cGU7CiAgICAgY2xhc3Mg
RnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgY2xhc3MgR2xvYmFsRXZhbEZ1bmN0aW9uOwotICAgIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I7Ci0g
ICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5cGU7Ci0gICAgY2xhc3MgTnVtYmVyUHJvdG90eXBl
OwotICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2Nr
OwotICAgIGNsYXNzIFJhbmdlRXJyb3I7Ci0gICAgY2xhc3MgUmFuZ2VFcnJvclByb3RvdHlwZTsK
LSAgICBjbGFzcyBSZWZlcmVuY2VFcnJvcjsKLSAgICBjbGFzcyBSZWZlcmVuY2VFcnJvcjsKLSAg
ICBjbGFzcyBSZWZlcmVuY2VFcnJvclByb3RvdHlwZTsKICAgICBjbGFzcyBSZWdFeHBDb25zdHJ1
Y3RvcjsKICAgICBjbGFzcyBSZWdFeHBQcm90b3R5cGU7CiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxl
OwotICAgIGNsYXNzIFJ1bnRpbWVNZXRob2Q7Ci0gICAgY2xhc3MgU2NvcGVDaGFpbjsKLSAgICBj
bGFzcyBTdHJpbmdQcm90b3R5cGU7Ci0gICAgY2xhc3MgU3ludGF4RXJyb3JQcm90b3R5cGU7Ci0g
ICAgY2xhc3MgVHlwZUVycm9yOwotICAgIGNsYXNzIFR5cGVFcnJvclByb3RvdHlwZTsKLSAgICBj
bGFzcyBVcmlFcnJvcjsKLSAgICBjbGFzcyBVcmlFcnJvclByb3RvdHlwZTsKIAogICAgIHN0cnVj
dCBBY3RpdmF0aW9uU3RhY2tOb2RlOwogICAgIHN0cnVjdCBIYXNoVGFibGU7CkBAIC03Nyw2ICs1
NywyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0RGF0YShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc1ZhbHVlKQogICAgICAg
ICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoJnN5bWJvbFRhYmxlLCAwKQogICAgICAg
ICAgICAgICAgICwgZ2xvYmFsU2NvcGVDaGFpbihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAsIHJlZ0V4cENvbnN0cnVjdG9yKDApCisgICAgICAgICAgICAgICAgLCBl
cnJvckNvbnN0cnVjdG9yKDApCisgICAgICAgICAgICAgICAgLCBldmFsRXJyb3JDb25zdHJ1Y3Rv
cigwKQorICAgICAgICAgICAgICAgICwgcmFuZ2VFcnJvckNvbnN0cnVjdG9yKDApCisgICAgICAg
ICAgICAgICAgLCByZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKDApCisgICAgICAgICAgICAgICAg
LCBzeW50YXhFcnJvckNvbnN0cnVjdG9yKDApCisgICAgICAgICAgICAgICAgLCB0eXBlRXJyb3JD
b25zdHJ1Y3RvcigwKQorICAgICAgICAgICAgICAgICwgVVJJRXJyb3JDb25zdHJ1Y3RvcigwKQor
ICAgICAgICAgICAgICAgICwgZXZhbEZ1bmN0aW9uKDApCisgICAgICAgICAgICAgICAgLCBvYmpl
Y3RQcm90b3R5cGUoMCkKKyAgICAgICAgICAgICAgICAsIGZ1bmN0aW9uUHJvdG90eXBlKDApCisg
ICAgICAgICAgICAgICAgLCBhcnJheVByb3RvdHlwZSgwKQorICAgICAgICAgICAgICAgICwgYm9v
bGVhblByb3RvdHlwZSgwKQorICAgICAgICAgICAgICAgICwgc3RyaW5nUHJvdG90eXBlKDApCisg
ICAgICAgICAgICAgICAgLCBudW1iZXJQcm90b3R5cGUoMCkKKyAgICAgICAgICAgICAgICAsIGRh
dGVQcm90b3R5cGUoMCkKKyAgICAgICAgICAgICAgICAsIHJlZ0V4cFByb3RvdHlwZSgwKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMTMsMTQgKzExMCwy
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIE51bWJlclByb3RvdHlwZSogbnVtYmVy
UHJvdG90eXBlOwogICAgICAgICAgICAgRGF0ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZTsKICAg
ICAgICAgICAgIFJlZ0V4cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBlOwotICAgICAgICAgICAg
RXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlOwotICAgICAgICAgICAgTmF0aXZlRXJyb3JQ
cm90b3R5cGUqIGV2YWxFcnJvclByb3RvdHlwZTsKLSAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJv
dG90eXBlKiByYW5nZUVycm9yUHJvdG90eXBlOwotICAgICAgICAgICAgTmF0aXZlRXJyb3JQcm90
b3R5cGUqIHJlZmVyZW5jZUVycm9yUHJvdG90eXBlOwotICAgICAgICAgICAgTmF0aXZlRXJyb3JQ
cm90b3R5cGUqIHN5bnRheEVycm9yUHJvdG90eXBlOwotICAgICAgICAgICAgTmF0aXZlRXJyb3JQ
cm90b3R5cGUqIHR5cGVFcnJvclByb3RvdHlwZTsKLSAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJv
dG90eXBlKiBVUklFcnJvclByb3RvdHlwZTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBS
ZWZQdHI8U3RydWN0dXJlSUQ+IGFyZ3VtZW50c1N0cnVjdHVyZTsKKyAgICAgICAgICAgIFJlZlB0
cjxTdHJ1Y3R1cmVJRD4gYXJyYXlTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0
dXJlSUQ+IGJvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0
dXJlSUQ+IGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8
U3RydWN0dXJlSUQ+IGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlSUQ+IGNhbGxiYWNrT2JqZWN0U3RydWN0dXJlOworICAgICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZUlEPiBkYXRlU3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZUlEPiBlbXB0eU9iamVjdFN0cnVjdHVyZTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1
cmVJRD4gZXJyb3JTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IGZ1
bmN0aW9uU3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBudW1iZXJP
YmplY3RTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiByZWdF
eHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+
IHJlZ0V4cFN0cnVjdHVyZTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RyaW5n
T2JqZWN0U3RydWN0dXJlOworCiAgICAgICAgICAgICBTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHByb2ZpbGVHcm91cDsKIApAQCAtMTg1LDEzICsxOTEsMjIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE51bWJlclByb3RvdHlwZSogbnVtYmVyUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5udW1iZXJQcm90b3R5cGU7IH0KICAgICAgICAgRGF0
ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+ZGF0ZVByb3Rv
dHlwZTsgfQogICAgICAgICBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGQoKS0+cmVnRXhwUHJvdG90eXBlOyB9Ci0gICAgICAgIEVycm9yUHJvdG90eXBl
KiBlcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+ZXJyb3JQcm90b3R5cGU7IH0K
LSAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIGV2YWxFcnJvclByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGQoKS0+ZXZhbEVycm9yUHJvdG90eXBlOyB9Ci0gICAgICAgIE5hdGl2ZUVycm9y
UHJvdG90eXBlKiByYW5nZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5yYW5n
ZUVycm9yUHJvdG90eXBlOyB9Ci0gICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiByZWZlcmVu
Y2VFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+cmVmZXJlbmNlRXJyb3JQcm90
b3R5cGU7IH0KLSAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHN5bnRheEVycm9yUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5zeW50YXhFcnJvclByb3RvdHlwZTsgfQotICAgICAg
ICBOYXRpdmVFcnJvclByb3RvdHlwZSogdHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gZCgpLT50eXBlRXJyb3JQcm90b3R5cGU7IH0KLSAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5
cGUqIFVSSUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5VUklFcnJvclByb3Rv
dHlwZTsgfQorCisgICAgICAgIFN0cnVjdHVyZUlEKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBkKCktPmFyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1
Y3R1cmVJRCogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmFycmF5U3RydWN0
dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZUlEKiBib29sZWFuT2JqZWN0U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gZCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9Cisg
ICAgICAgIFN0cnVjdHVyZUlEKiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gZCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CisgICAg
ICAgIFN0cnVjdHVyZUlEKiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVj
dHVyZUlEKiBjYWxsYmFja09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y2Fs
bGJhY2tPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlSUQqIGRhdGVT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmRhdGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAg
ICAgICAgU3RydWN0dXJlSUQqIGVtcHR5T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
ZCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1cmVJRCog
ZXJyb3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmVycm9yU3RydWN0dXJlLmdldCgp
OyB9CisgICAgICAgIFN0cnVjdHVyZUlEKiBmdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIGQoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlSUQq
IG51bWJlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+bnVtYmVyT2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlSUQqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdl
dCgpOyB9CisgICAgICAgIFN0cnVjdHVyZUlEKiByZWdFeHBTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBkKCktPnJlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1cmVJRCog
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHNldFByb2ZpbGVHcm91cCh1bnNpZ25l
ZCB2YWx1ZSkgeyBkKCktPnByb2ZpbGVHcm91cCA9IHZhbHVlOyB9CiAgICAgICAgIHVuc2lnbmVk
IHByb2ZpbGVHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+cHJvZmlsZUdyb3VwOyB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNJbW1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNCArNzMs
OSBAQCBVU3RyaW5nIEpTSW1tZWRpYXRlOjp0b1N0cmluZyhjb25zdCBKU1ZhCiAgICAgcmV0dXJu
ICJ1bmRlZmluZWQiOwogfQogCitORVZFUl9JTkxJTkUgZG91YmxlIEpTSW1tZWRpYXRlOjpub25J
bmxpbmVOYU4oKQoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0lt
bWVkaWF0ZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVk
aWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4odik7CiAgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZG91YmxlIG5vbklubGluZU5hTigp
OwogICAgIH07CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjp0cnVl
SW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUJvb2wodHJ1ZSk7IH0KQEAgLTQwNSwxMyArNDA3LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIEpTSW1tZWRpYXRl
Ojp0b0RvdWJsZShjb25zdCBKU1ZhbHVlKiB2KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW1t
ZWRpYXRlKHYpKTsKKyAgICAgICAgaW50IGk7CiAgICAgICAgIGlmIChpc051bWJlcih2KSkKLSAg
ICAgICAgICAgIHJldHVybiBpbnRWYWx1ZSh2KTsKLSAgICAgICAgaWYgKHJhd1ZhbHVlKHYpID09
IChGdWxsVGFnVHlwZUJvb2wgfCBFeHRlbmRlZFBheWxvYWRCaXRCb29sVmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIDEuMDsKLSAgICAgICAgaWYgKHJhd1ZhbHVlKHYpICE9IEZ1bGxUYWdUeXBl
VW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuIDAuMDsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgICAgICBpID0gaW50
VmFsdWUodik7CisgICAgICAgIGVsc2UgaWYgKHJhd1ZhbHVlKHYpID09IEZ1bGxUYWdUeXBlVW5k
ZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIG5vbklubGluZU5hTigpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBpID0gcmF3VmFsdWUodikgPj4gRXh0ZW5kZWRQYXlsb2FkU2hpZnQ7Cisg
ICAgICAgIHJldHVybiBpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVk
aWF0ZTo6Z2V0VUludDMyKGNvbnN0IEpTVmFsdWUqIHYsIHVpbnQzMl90JiBpKQpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0pTTnVtYmVyQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0pTTnVtYmVyQ2VsbC5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL0pTTnVtYmVyQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw0ICsxMDEs
MTQgQEAgSlNWYWx1ZSogSlNOdW1iZXJDZWxsOjpnZXRKU051bWJlcigpCiAgICAgcmV0dXJuIHRo
aXM7CiB9CiAKK05FVkVSX0lOTElORSBKU1ZhbHVlKiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiBl
eGVjLCBkb3VibGUgZCkKK3sKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU051bWJlckNlbGwoZXhl
YywgZCk7Cit9CisKK05FVkVSX0lOTElORSBKU1ZhbHVlKiBqc05hTihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOdW1iZXJDZWxsKGV4ZWMsIE5hTik7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTTnVtYmVyQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU051bWJlckNlbGwuaAkocmV2
aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U051bWJlckNlbGwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpz
TnVtYmVyQ2VsbChFeGVjU3RhdGUqLCBkb3VibGUpOworICAgICAgICBmcmllbmQgSlNWYWx1ZSog
anNOYU4oRXhlY1N0YXRlKik7CiAgICAgcHVibGljOgogICAgICAgICBkb3VibGUgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKQEAgLTg2LDE3ICs4Nyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOwogICAgIGV4dGVybiBjb25zdCBkb3Vi
bGUgSW5mOwogCi0gICAgLy8gQmV3YXJlIG1hcmtpbmcgdGhpcyBmdW5jdGlvbiBBTFdBWVNfSU5M
SU5FOiBJdCB0YWtlcyBhIFBJQyBicmFuY2gsIHNvCi0gICAgLy8gaW5saW5pbmcgaXQgbWF5IG5v
dCBhbHdheXMgYmUgYSB3aW4uCi0gICAgaW5saW5lIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNOdW1iZXJDZWxsKGV4ZWMsIGQpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlKiBqc05h
TihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgewotICAgICAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4
ZWMsIE5hTik7Ci0gICAgfQorICAgIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqLCBk
b3VibGUpOworICAgIEpTVmFsdWUqIGpzTmFOKEV4ZWNTdGF0ZSopOwogCiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQogICAgIHsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNyArNTE3LDcg
QEAgdm9pZCBKU09iamVjdDo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UocwogCiBKU09iamVjdCog
Y29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCkpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDVEk7CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIEpTT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKLSAgICAgICAgSlNP
YmplY3QoSlNPYmplY3QqIHByb3RvdHlwZSk7CisgICAgICAgIGV4cGxpY2l0IEpTT2JqZWN0KFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwog
CkBAIC0xOTcsMjEgKzE5NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICBKU09iamVjdCogY29u
c3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKik7CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmpl
Y3QoSlNPYmplY3QqIHByb3RvdHlwZSkKLSAgICA6IEpTQ2VsbChwcm90b3R5cGUtPmluaGVyaXRv
cklEKCkpCi0gICAgLCBtX3Byb3BlcnR5U3RvcmFnZShtX2lubGluZVN0b3JhZ2UpCi17Ci0gICAg
QVNTRVJUKG1fc3RydWN0dXJlSUQpOwotICAgIEFTU0VSVCh0aGlzLT5wcm90b3R5cGUoKSk7Ci0g
ICAgQVNTRVJUKHRoaXMtPnByb3RvdHlwZSgpLT5pc051bGwoKSB8fCBIZWFwOjpoZWFwKHRoaXMp
ID09IEhlYXA6OmhlYXAodGhpcy0+cHJvdG90eXBlKCkpKTsKLSAgICBtX3N0cnVjdHVyZUlELT5y
ZWYoKTsgLy8gfkpTT2JqZWN0IGJhbGFuY2VzIHRoaXMgcmVmKCkKLX0KLQogaW5saW5lIEpTT2Jq
ZWN0OjpKU09iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCkKICAgICA6
IEpTQ2VsbChzdHJ1Y3R1cmVJRC5yZWxlYXNlUmVmKCkpIC8vIH5KU09iamVjdCBiYWxhbmNlcyB0
aGlzIHJlZigpCiAgICAgLCBtX3Byb3BlcnR5U3RvcmFnZShtX2lubGluZVN0b3JhZ2UpCiB7CiAg
ICAgQVNTRVJUKG1fc3RydWN0dXJlSUQpOworICAgIEFTU0VSVChwcm90b3R5cGUoKS0+aXNOdWxs
KCkgfHwgSGVhcDo6aGVhcCh0aGlzKSA9PSBIZWFwOjpoZWFwKHByb3RvdHlwZSgpKSk7CiB9CiAK
IGlubGluZSBKU09iamVjdDo6fkpTT2JqZWN0KCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9K
U1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmNw
cAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6dG9UaGlz
SlNTdHJpbmcoRXhlY1MKIAogaW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIFN0cmluZ09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1By
b3RvdHlwZSgpLCBzdHJpbmcpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBzdHJp
bmcpOwogfQogCiBKU09iamVjdCogSlNTdHJpbmc6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDM2
NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxNyArMjYsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0gICAgLyoq
IAotICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIGNsYXNzZXMgc3VjaCBh
cyBTdHJpbmcsCi0gICAgICAgTnVtYmVyLCBCb29sZWFuIGFuZCBEYXRlIHdoaWNoIHdoaWNoIGFy
ZSB3cmFwcGVycyBmb3IgcHJpbWl0aXZlCi0gICAgICAgdHlwZXMuIFRoZXNlIGNsYXNzZXMgc3Rv
cmVzIHRoZSBpbnRlcm5hbCB2YWx1ZSwgd2hpY2ggaXMgdGhlCi0gICAgICAgYWN0dWFsIHZhbHVl
IHJlcHJlc2VudGVkIGJ5IHRoZSB3cmFwcGVyIG9iamVjdHMuCi0gICAgKi8gCisgICAgLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgY2xhc3NlcyBzdWNoIGFzIFN0cmluZywKKyAg
ICAvLyBOdW1iZXIsIEJvb2xlYW4gYW5kIERhdGUgd2hpY2ggYXJlIHdyYXBwZXJzIGZvciBwcmlt
aXRpdmUgdHlwZXMuCiAgICAgY2xhc3MgSlNXcmFwcGVyT2JqZWN0IDogcHVibGljIEpTT2JqZWN0
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTV3JhcHBlck9iamVjdChKU09iamVjdCogcHJvdG90
eXBlKTsKKyAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+KTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIGludGVybmFsVmFsdWUoKSBjb25z
dDsKKyAgICAgICAgSlNWYWx1ZSogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZXJuYWxWYWx1ZTsgfQogICAgICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSopOwog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKQEAgLTQ1LDIwICs0MSwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSogbV9pbnRlcm5hbFZhbHVlOwogICAg
IH07CiAgICAgCi0gICAgaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KEpT
T2JqZWN0KiBwcm90b3R5cGUpCi0gICAgICAgIDogSlNPYmplY3QocHJvdG90eXBlKQorICAgIGlu
bGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogICAgICAgICAs
IG1faW50ZXJuYWxWYWx1ZSgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTVmFs
dWUqIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9pbnRlcm5hbFZhbHVlOwotICAgIH0KLSAgICAKICAgICBpbmxpbmUgdm9pZCBK
U1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUoSlNWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBBU1NFUlQoIXZhbHVlLT5pc09iamVjdCgp
KTsKICAgICAgICAgbV9pbnRlcm5hbFZhbHVlID0gdmFsdWU7CiAgICAgfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBjb25z
dCBDbGFzc0luZm8gTWF0aE9iamVjdDo6aW5mbyA9IHsgIk1hCiBAZW5kCiAqLwogCi1NYXRoT2Jq
ZWN0OjpNYXRoT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQ
cm90b3R5cGUpCi0gICAgOiBKU09iamVjdChvYmplY3RQcm90b3R5cGUpCitNYXRoT2JqZWN0OjpN
YXRoT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0
dXJlKQorICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogewogICAgIHB1dERpcmVjdChJZGVudGlm
aWVyKGV4ZWMsICJFIiksIGpzTnVtYmVyKGV4ZWMsIGV4cCgxLjApKSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJMTjIi
KSwganNOdW1iZXIoZXhlYywgbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFk
T25seSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9NYXRoT2JqZWN0LmgJKHJldmlzaW9uIDM2NzA1KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL01hdGhPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTUg
KzIxLDE0IEBACiAjZGVmaW5lIE1hdGhPYmplY3RfaAogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
LSNpbmNsdWRlICJsb29rdXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNYXRo
T2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1hdGhPYmpl
Y3QoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKik7CisgICAgICAgIE1hdGhPYmplY3QoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOwogCi0gICAgICAgIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9O
YXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgogCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2ZUVycm9yUHJvdG90eXBl
LmgiCiAKQEAgLTMyLDE3ICszMSwxNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE5hdGl2
ZUVycm9yQ29uCiAKIGNvbnN0IENsYXNzSW5mbyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjppbmZv
ID0geyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwgMCB9OwogCi1OYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlLCBOYXRpdmVFcnJvclByb3Rv
dHlwZSogbmF0aXZlRXJyb3JQcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMs
IGZ1bmN0aW9uUHJvdG90eXBlLCBJZGVudGlmaWVyKGV4ZWMsIG5hdGl2ZUVycm9yUHJvdG90eXBl
LT5nZXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpLT5nZXRTdHJpbmcoKSkpCi0g
ICAgLCBtX3Byb3RvKG5hdGl2ZUVycm9yUHJvdG90eXBlKQorTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cjo6TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlSUQ+IHN0cnVjdHVyZSwgTmF0aXZlRXJyb3JQcm90b3R5cGUqIG5hdGl2ZUVycm9yUHJv
dG90eXBlKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZp
ZXIoZXhlYywgbmF0aXZlRXJyb3JQcm90b3R5cGUtPmdldERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubmFtZSktPmdldFN0cmluZygpKSkKKyAgICAsIG1fZXJyb3JTdHJ1Y3R1cmUoU3RydWN0
dXJlSUQ6OmNyZWF0ZShuYXRpdmVFcnJvclByb3RvdHlwZSkpCiB7CiAgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41Ci0gICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG1fcHJvdG8sIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgbmF0aXZlRXJyb3JQcm90b3R5cGUsIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKIH0KIAogRXJyb3JJbnN0YW5jZSogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBF
cnJvckluc3RhbmNlKiBvYmplY3QgPSBuZXcgKGV4ZWMpIEVycm9ySW5zdGFuY2UobV9wcm90byk7
CisgICAgRXJyb3JJbnN0YW5jZSogb2JqZWN0ID0gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKG1f
ZXJyb3JTdHJ1Y3R1cmUpOwogICAgIGlmICghYXJncy5hdChleGVjLCAwKS0+aXNVbmRlZmluZWQo
KSkKICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3Nh
Z2UsIGpzU3RyaW5nKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiAg
ICAgcmV0dXJuIG9iamVjdDsKQEAgLTcwLDExICs2OSw0IEBAIENhbGxUeXBlIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmdldENhbGwKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi12b2lk
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Om1hcmsoKQotewotICAgIEpTT2JqZWN0OjptYXJrKCk7
Ci0gICAgaWYgKG1fcHJvdG8gJiYgIW1fcHJvdG8tPm1hcmtlZCgpKQotICAgICAgICBtX3Byb3Rv
LT5tYXJrKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDkgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSos
IE5hdGl2ZUVycm9yUHJvdG90eXBlKik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiwgTmF0aXZlRXJyb3JQcm90b3R5cGUqKTsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87CiAKQEAgLTQ1LDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAKLSAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIG1fcHJvdG87Cisg
ICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gbV9lcnJvclN0cnVjdHVyZTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9OYXRpdmVFcnJvclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL05hdGl2ZUVycm9y
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTmF0
aXZlRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE5hdGl2ZUVycm9yUHJv
dG90eXBlKTsKIAotTmF0aXZlRXJyb3JQcm90b3R5cGU6Ok5hdGl2ZUVycm9yUHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlLCBjb25zdCBVU3Ry
aW5nJiBuYW1lLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQotICAgIDogSlNPYmplY3QoZXJyb3JQ
cm90b3R5cGUpCitOYXRpdmVFcnJvclByb3RvdHlwZTo6TmF0aXZlRXJyb3JQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIGNvbnN0IFVT
dHJpbmcmIG5hbWUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCisgICAgOiBKU09iamVjdChzdHJ1
Y3R1cmUpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc1N0
cmluZyhleGVjLCBuYW1lKSwgMCk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5tZXNzYWdlLCBqc1N0cmluZyhleGVjLCBtZXNzYWdlKSwgMCk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFcnJvclByb3Rv
dHlwZTsKLSAgICBjbGFzcyBVU3RyaW5nOwotCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5
cGUgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgTmF0aXZlRXJyb3JQ
cm90b3R5cGUoRXhlY1N0YXRlKiwgRXJyb3JQcm90b3R5cGUqLCBjb25zdCBVU3RyaW5nJiBuYW1l
LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUo
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIGNvbnN0IFVTdHJpbmcmIG5hbWUs
IGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAz
NjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAgY29uc3QgQ2xhc3NJbmZvIE51bWJlckNvbnN0cnVj
dG9yOjppbmZvIAogICBNSU5fVkFMVUUgICAgICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3I6Ok1p
blZhbHVlICAgICAgIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkKIEBlbmQKICovCi1OdW1i
ZXJDb25zdHJ1Y3Rvcjo6TnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlv
blByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUsIE51bWJlclByb3RvdHlwZSogbnVtYmVyUHJv
dG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwg
SWRlbnRpZmllcihleGVjLCBudW1iZXJQcm90b3R5cGUtPmluZm8uY2xhc3NOYW1lKSkKK051bWJl
ckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQ
dHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgTnVtYmVyUHJvdG90eXBlKiBudW1iZXJQcm90b3R5
cGUpCisgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihl
eGVjLCBudW1iZXJQcm90b3R5cGUtPmluZm8uY2xhc3NOYW1lKSkKIHsKICAgICAvLyBOdW1iZXIu
UHJvdG90eXBlCiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUs
IG51bWJlclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwpAQCAt
NzgsMTAgKzc4LDEwIEBAIEpTVmFsdWUqIE51bWJlckNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3AK
IC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKLSAgICBOdW1iZXJPYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyUHJvdG90eXBlKCkpOworICAgIE51bWJlck9i
amVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgZG91YmxlIG4gPSBhcmdz
LmlzRW1wdHkoKSA/IDAgOiBhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKTsKLSAgICBv
YmotPnNldEludGVybmFsVmFsdWUoanNOdW1iZXIoZXhlYywgbikpOwotICAgIHJldHVybiBvYmo7
CisgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKGV4ZWMsIG4pKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OwogfQogCiBDb25zdHJ1Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMiArMjUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKICAgICBjbGFzcyBOdW1iZXJQcm90b3R5
cGU7CiAKICAgICBjbGFzcyBOdW1iZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSos
IEZ1bmN0aW9uUHJvdG90eXBlKiwgTnVtYmVyUHJvdG90eXBlKik7CisgICAgICAgIE51bWJlckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBOdW1iZXJQcm90
b3R5cGUqKTsKIAogICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTVmFsdWUqIGdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9OdW1iZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9OdW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIEFT
U0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTnVtYmVyT2JqZWN0KTsKIAogY29uc3QgQ2xhc3NJbmZv
IE51bWJlck9iamVjdDo6aW5mbyA9IHsgIk51bWJlciIsIDAsIDAsIDAgfTsKIAotTnVtYmVyT2Jq
ZWN0OjpOdW1iZXJPYmplY3QoSlNPYmplY3QqIHByb3RvdHlwZSkKLSAgICA6IEpTV3JhcHBlck9i
amVjdChwcm90b3R5cGUpCitOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdChQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qoc3RydWN0dXJlKQog
ewogfQogCkBAIC00MywxNiArNDMsMTYgQEAgSlNWYWx1ZSogTnVtYmVyT2JqZWN0OjpnZXRKU051
bWJlcigpCiAKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNOdW1iZXJDZWxsKiBudW1iZXIpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmogPSBuZXcgKGV4
ZWMpIE51bWJlck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlclByb3Rv
dHlwZSgpKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUobnVtYmVyKTsKLSAgICByZXR1cm4g
b2JqOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7Cisg
ICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKG51bWJlcik7CisgICAgcmV0dXJuIG9iamVjdDsK
IH0KIAogTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRlTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmog
PSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51
bWJlclByb3RvdHlwZSgpKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUodmFsdWUpOwotICAg
IHJldHVybiBvYmo7CisgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJl
ck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVy
ZSgpKTsKKyAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUodmFsdWUpOworICAgIHJldHVybiBv
YmplY3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L051bWJlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJP
YmplY3QuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIE51bWJlck9iamVjdChKU09iamVjdCogcHJvdG90eXBlKTsKKyAgICAg
ICAgZXhwbGljaXQgTnVtYmVyT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKIAogICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw3IEBA
CiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJFcnJvci5oIgotI2lu
Y2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNs
dWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQcm90b3R5cGVGdW5jdGlvbi5oIgog
I2luY2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCkBAIC00NiwxOSArNDQs
MTkgQEAgc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaQogCiAvLyBFQ01B
IDE1LjcuNAogCi1OdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBlLCBGdW5jdGlvblByb3RvdHlwZSog
ZnVuY3Rpb25Qcm90b3R5cGUpCi0gICAgOiBOdW1iZXJPYmplY3Qob2JqZWN0UHJvdG90eXBlKQor
TnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVm
UHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSkKKyAgICA6IE51bWJlck9iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgc2V0SW50
ZXJuYWxWYWx1ZShqc051bWJlcihleGVjLCAwKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Ig
d2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgTnVtYmVyQ29uc3RydWN0b3IgaGFzIGJlZW4gY29u
c3RydWN0ZWQKIAotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b1N0cmluZywgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3Ry
aW5nLCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgbnVtYmVy
UHJvdG9GdW5jVmFsdWVPZiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAx
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZCks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudG9FeHBvbmVudGlhbCwgbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCksIERvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dG9QcmVjaXNpb24sIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50
b1N0cmluZywgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxl
U3RyaW5nLCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFs
dWVPZiwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCwgbnVt
YmVyUHJvdG9GdW5jVG9GaXhlZCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihl
eGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9FeHBvbmVudGlhbCwgbnVtYmVy
UHJvdG9GdW5jVG9FeHBvbmVudGlhbCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9QcmVjaXNpb24sIG51bWJl
clByb3RvRnVuY1RvUHJlY2lzaW9uKSwgRG9udEVudW0pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL051bWJlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMzY3MDUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFy
aWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTIgKzI1LDkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKLSAgICBjbGFzcyBPYmplY3RQ
cm90b3R5cGU7Ci0KICAgICBjbGFzcyBOdW1iZXJQcm90b3R5cGUgOiBwdWJsaWMgTnVtYmVyT2Jq
ZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqLCBP
YmplY3RQcm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOworICAgICAgICBOdW1iZXJQcm90
b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIFN0cnVjdHVyZUlEKiBw
cm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCiAKQEAgLTI5LDggKzI4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19G
SVRTX0lOX0NFTEwoT2JqZWN0Q29uc3RydWN0b3IpOwogCi1PYmplY3RDb25zdHJ1Y3Rvcjo6T2Jq
ZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFBy
b3RvdHlwZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQotICAgIDogSW50
ZXJuYWxGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgSWRlbnRpZmllcihleGVjLCAi
T2JqZWN0IikpCitPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIE9iamVjdFByb3RvdHlw
ZSogb2JqZWN0UHJvdG90eXBlKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1
cmUsIElkZW50aWZpZXIoZXhlYywgIk9iamVjdCIpKQogewogICAgIC8vIEVDTUEgMTUuMi4zLjEK
ICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgb2JqZWN0UHJv
dG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CkBAIC00NCw3ICs0Myw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3QKIHsKICAgICBKU1Zh
bHVlKiBhcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChhcmctPmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3Ry
dWN0dXJlKCkpOwogICAgIHJldHVybiBhcmctPnRvT2JqZWN0KGV4ZWMpOwogfQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMzY3MDUpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRnVuY3Rpb25Q
cm90b3R5cGU7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgT2JqZWN0
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgotICAg
ICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBGdW5j
dGlvblByb3RvdHlwZSopOworICAgICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgT2JqZWN0UHJvdG90eXBlKik7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1
Y3REYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIK
IApAQCAtNDAsMjQgKzM5LDIzIEBAIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29r
dXBTZXQKIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJs
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0
aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCi1PYmplY3RQcm90b3R5cGU6Ok9i
amVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlv
blByb3RvdHlwZSkKK09iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQogICAgIDogSlNP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLm51bGxQcm90b1N0cnVjdHVyZUlEKQogewotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywg
ZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgb2Jq
ZWN0UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
ZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlw
ZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAw
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZiks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaGFzT3duUHJvcGVydHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KSwgRG9u
dEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm9wZXJ0eUlzRW51bWVyYWJsZSwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFi
bGUpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmlzUHJvdG90eXBlT2YsIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudG9Mb2NhbGVTdHJpbmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS52YWx1ZU9mLCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKSwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5oYXNPd25Qcm9wZXJ0eSwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51
bWVyYWJsZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4
ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAx
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcm90b3R5cGVPZiwgb2JqZWN0UHJvdG9GdW5jSXNQ
cm90b3R5cGVPZiksIERvbnRFbnVtKTsKIAogICAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwotICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgZnVuY3Rpb25Qcm90b3R5cGUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2RlZmluZUdl
dHRlcl9fLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBm
dW5jdGlvblByb3RvdHlwZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fZGVmaW5lU2V0dGVy
X18sIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlciksIERvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0
aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19sb29rdXBHZXR0ZXJfXywg
b2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Q
cm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1cFNldHRlcl9fLCBvYmpl
Y3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rp
b24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fZGVmaW5lR2V0dGVyX18s
IG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlciksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0
ZXJfXywgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1
cEdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9f
bG9va3VwU2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlciksIERvbnRFbnVtKTsK
IH0KIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTUuMi40LjIsIDE1LjIuNC40
LCAxNS4yLjQuNSwgMTUuMi40LjcKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9PYmplY3RQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0UHJvdG90eXBl
LmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL09iamVjdFByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNyArMjUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwotCi0gICAgLyoqCi0gICAgICogQGludGVy
bmFsCi0gICAgICoKLSAgICAgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBPYmplY3QucHJvdG90eXBl
IChhbmQgdGh1cyBhbGwgb2JqZWN0cyBjcmVhdGVkCi0gICAgICogd2l0aCB0aGUgT2JqZWN0IGNv
bnN0cnVjdG9yCi0gICAgICovCiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpT
T2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUq
LCBGdW5jdGlvblByb3RvdHlwZSopOworICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKICAgICB9OwogCiAg
ICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1By
b3RvdHlwZUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUHJv
dG90eXBlRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9Qcm90b3R5cGVGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm90b3R5cGVGdW5jdGlvbi5oIgogCi0j
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTM0LDIxICszMywyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoUHJvdG90eXBlRnVuY3Rpb24p
OwogCiBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbikKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblByb3RvdHlwZSgpLCBuYW1lKQorICAgIDogSW50ZXJuYWxGdW5jdGlv
bihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb3RvdHlwZUZ1bmN0aW9uU3Ry
dWN0dXJlKCksIG5hbWUpCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFTU0VS
VF9BUkcoZnVuY3Rpb24sIGZ1bmN0aW9uKTsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOwogfQogCi1Qcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUs
IGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgbmFt
ZSkKK1Byb3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBpbnQg
bGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikK
KyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUs
IG5hbWUpCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFTU0VSVF9BUkcoZnVu
Y3Rpb24sIGZ1bmN0aW9uKTsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOwogfQotCisgICAgCiBDYWxsVHlwZSBQcm90b3R5cGVGdW5jdGlvbjo6Z2V0Q2FsbERh
dGEoQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9
IG1fZnVuY3Rpb247CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvUHJvdG90eXBlRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUHJvdG90eXBlRnVuY3Rpb24uaAko
cmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUHJvdG90eXBlRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBQcm90b3R5cGVGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIGludCBsZW5ndGgs
IGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7Ci0gICAgICAgIFByb3RvdHlwZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgaW50IGxlbmd0aCwgY29uc3Qg
SWRlbnRpZmllciYsIE5hdGl2ZUZ1bmN0aW9uKTsKKyAgICAgICAgUHJvdG90eXBlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIGludCBsZW5ndGgsIGNvbnN0IElk
ZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCAr
NzgsOCBAQCBzdHJ1Y3QgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlIHsKICAgICBib29sIG11bHRp
bGluZSA6IDE7CiB9OwogCi1SZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUsIFJlZ0V4
cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVj
LCBmdW5jdGlvblByb3RvdHlwZSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIikpCitSZWdFeHBD
b25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFJlZ0V4cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBl
KQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhl
YywgIlJlZ0V4cCIpKQogICAgICwgZChuZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKQogewog
ICAgIC8vIEVDTUEgMTUuMTAuNS4xIFJlZ0V4cC5wcm90b3R5cGUKQEAgLTEzMiw3ICsxMzIsNyBA
QCBwcml2YXRlOgogfTsKIAogUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXko
RXhlY1N0YXRlKiBleGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGRhdGEpCi0gICAgOiBK
U0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgZGF0
YS0+bGFzdE51bVN1YlBhdHRlcm5zICsgMSkKKyAgICA6IEpTQXJyYXkoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgZGF0YS0+bGFzdE51
bVN1YlBhdHRlcm5zICsgMSkKIHsKICAgICBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGQgPSBu
ZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlOwogICAgIGQtPmlucHV0ID0gZGF0YS0+bGFzdElu
cHV0OwpAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0UmVnRXhw
KEV4ZWNTdGEKICAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVj
LCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIFVTdHJpbmcoIkludmFsaWQgcmVn
dWxhciBleHByZXNzaW9uOiAiKS5hcHBlbmQocmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwotICAg
IHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnJlZ0V4cFByb3RvdHlwZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbmV3
IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnRXhwLnJlbGVhc2UoKSk7CiB9CiAKIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKICAgICBjbGFzcyBSZWdFeHA7CiAg
ICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlOwogICAgIHN0cnVjdCBSZWdFeHBDb25zdHJ1Y3RvclBy
aXZhdGU7CkBAIC01MSw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmln
aHRDb250ZXh0CiAgICAgICAgIH07CiAKLSAgICAgICAgUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBSZWdFeHBQcm90b3R5cGUqKTsKKyAgICAgICAgUmVn
RXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIFJlZ0V4
cFByb3RvdHlwZSopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpT
VmFsdWUqKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAz
NjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw4ICs0NCw4IEBAIGNvbnN0IENsYXNzSW5mbyBSZWdFeHBPYmplY3Q6OmluZm8g
PSB7ICIKIEBlbmQKICovCiAKLVJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0KFJlZ0V4cFByb3Rv
dHlwZSogcmVnRXhwUHJvdG90eXBlLCBQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwKQotICAgIDog
SlNPYmplY3QocmVnRXhwUHJvdG90eXBlKQorUmVnRXhwT2JqZWN0OjpSZWdFeHBPYmplY3QoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhw
KQorICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogICAgICwgZChuZXcgUmVnRXhwT2JqZWN0RGF0
YShyZWdFeHAsIDApKQogewogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBPYmplY3QuaAkocmV2
aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEzICsyNiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNs
YXNzIFJlZ0V4cFByb3RvdHlwZTsKLQogICAgIGNsYXNzIFJlZ0V4cE9iamVjdCA6IHB1YmxpYyBK
U09iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIHsgR2xvYmFsLCBJZ25vcmVDYXNl
LCBNdWx0aWxpbmUsIFNvdXJjZSwgTGFzdEluZGV4IH07CiAKLSAgICAgICAgUmVnRXhwT2JqZWN0
KFJlZ0V4cFByb3RvdHlwZSosIFBhc3NSZWZQdHI8UmVnRXhwPik7CisgICAgICAgIFJlZ0V4cE9i
amVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgUGFzc1JlZlB0cjxSZWdFeHA+KTsKICAgICAg
ICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdFeHAoUGFz
c1JlZlB0cjxSZWdFeHA+IHIpIHsgZC0+cmVnRXhwID0gcjsgfQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYg
QEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtNDUs
MTMgKzQ0LDEzIEBAIHN0YXRpYyBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZygKIAog
Y29uc3QgQ2xhc3NJbmZvIFJlZ0V4cFByb3RvdHlwZTo6aW5mbyA9IHsgIlJlZ0V4cFByb3RvdHlw
ZSIsIDAsIDAsIDAgfTsKIAotUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUoRXhlY1N0
YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSwgRnVuY3Rpb25Qcm90
b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQotICAgIDogSlNPYmplY3Qob2JqZWN0UHJvdG90eXBl
KQorUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSkKKyAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKIHsKLSAgICBwdXREaXJl
Y3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0
aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsZSwgcmVnRXhwUHJv
dG9GdW5jQ29tcGlsZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBu
ZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhlYywgcmVnRXhwUHJvdG9GdW5jRXhlYyksIERvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudGVz
dCwgcmVnRXhwUHJvdG9GdW5jVGVzdCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90
eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHJlZ0V4cFByb3RvRnVuY1Rv
U3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxlLCByZWdFeHBQcm90b0Z1bmNDb21waWxlKSwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5leGVjLCByZWdFeHBQcm90b0Z1bmNFeGVjKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50
ZXN0LCByZWdFeHBQcm90b0Z1bmNUZXN0KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgcmVnRXhw
UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAzNjcwNSkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTIgKzI1LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvblByb3Rv
dHlwZTsKLSAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7Ci0KICAgICBjbGFzcyBSZWdFeHBQcm90
b3R5cGUgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVnRXhwUHJv
dG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7
CisgICAgICAgIFJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPiwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKIAogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
U2hlbGwuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSwxNCArMTcxLDE0IEBAIEFTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoR2xvYmFsT2JqZWN0KTsKIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMpCiAg
ICAgOiBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRhKQogewotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJkZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFsRXhlYygp
LCBmdW5jdGlvblByb3RvdHlwZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInByaW50
IiksIGZ1bmN0aW9uUHJpbnQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCks
IG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0
aW9uUHJvdG90eXBlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5j
dGlvblF1aXQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xv
YmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90
eXBlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOwot
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFBy
b3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOwotICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3Rv
dHlwZUZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlv
bihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFs
RXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihn
bG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxF
eGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
cmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJkZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2Jh
bEV4ZWMoKSwgInByaW50IiksIGZ1bmN0aW9uUHJpbnQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9i
YWxFeGVjKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9i
YWxFeGVjKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9i
YWxFeGVjKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9i
YWxFeGVjKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOwogCiAgICAgSlNPYmpl
Y3QqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCkpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdDb25zdHJ1
Y3Rvci5oIgogCi0jaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
U3RyaW5nUHJvdG90eXBlLmgiCkBAIC00NywxNCArNDYsMTQgQEAgc3RhdGljIEpTVmFsdWUqIHN0
cmluZ0Zyb21DaGFyQ29kZShFeGVjUwogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFN0cmlu
Z0NvbnN0cnVjdG9yKTsKIAotU3RyaW5nQ29uc3RydWN0b3I6OlN0cmluZ0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlLCBTdHJp
bmdQcm90b3R5cGUqIHN0cmluZ1Byb3RvdHlwZSkKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZXhl
YywgZnVuY3Rpb25Qcm90b3R5cGUsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nUHJvdG90eXBlLT5j
bGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKK1N0cmluZ0NvbnN0cnVjdG9yOjpTdHJpbmdDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwg
U3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUq
IHN0cmluZ1Byb3RvdHlwZSkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgc3RydWN0dXJl
LCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1Byb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFt
ZSkpCiB7CiAgICAgLy8gRUNNQSAxNS41LjMuMSBTdHJpbmcucHJvdG90eXBlCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogCiAgICAgLy8gRUNNQSAxNS41LjMuMiBm
cm9tQ2hhckNvZGUoKQotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5mcm9tQ2hhckNvZGUsIHN0cmluZ0Zyb21DaGFyQ29kZSksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZnJvbUNoYXJDb2RlLCBzdHJpbmdGcm9tQ2hhckNvZGUpLCBEb250RW51bSk7CiAKICAgICAvLyBu
by4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgogICAgIHB1dERpcmVjdChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOwpAQCAtNjMsMTAgKzYyLDkgQEAgU3RyaW5nQ29uc3RydWN0b3I6OlN0
cmluZ0NvbnN0cnVjdG9yKEV4ZQogLy8gRUNNQSAxNS41LjIKIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpOwogICAgIGlmIChhcmdzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIHBy
b3RvdHlwZSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIHByb3Rv
dHlwZSwgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5n
T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKCksIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRh
JiBjb25zdHJ1Y3REYXRhKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ0NvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ0NvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ0NvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogICAgIGNsYXNzIFN0cmluZ1Byb3Rv
dHlwZTsKIAogICAgIGNsYXNzIFN0cmluZ0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBTdHJpbmdQcm90b3R5cGUqKTsKKyAgICAgICAgU3RyaW5n
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIFN0cnVjdHVy
ZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgU3RyaW5nUHJvdG90eXBlKik7CiAKICAg
ICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMzY3MDUpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MjAgKzI5LDIwIEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaW5nT2JqZWN0KTsKIAog
Y29uc3QgQ2xhc3NJbmZvIFN0cmluZ09iamVjdDo6aW5mbyA9IHsgIlN0cmluZyIsIDAsIDAsIDAg
fTsKIAotU3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogcHJvdG90eXBlKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvdHlwZSkKK1N0cmluZ09i
amVjdDo6U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4gc3RydWN0dXJlKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBz
ZXRJbnRlcm5hbFZhbHVlKGpzRW1wdHlTdHJpbmcoZXhlYykpOwogfQogCi1TdHJpbmdPYmplY3Q6
OlN0cmluZ09iamVjdChKU09iamVjdCogcHJvdG90eXBlLCBKU1N0cmluZyogc3RyaW5nKQotICAg
IDogSlNXcmFwcGVyT2JqZWN0KHByb3RvdHlwZSkKK1N0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0
KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgSlNTdHJpbmcqIHN0cmluZykKKyAg
ICA6IEpTV3JhcHBlck9iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgc2V0SW50ZXJuYWxWYWx1ZShz
dHJpbmcpOwogfQogCi1TdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKLSAgICA6IEpTV3Jh
cHBlck9iamVjdChwcm90b3R5cGUpCitTdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgY29uc3QgVVN0cmlu
ZyYgc3RyaW5nKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBzZXRJ
bnRlcm5hbFZhbHVlKGpzU3RyaW5nKGV4ZWMsIHN0cmluZykpOwogfQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMzY3MDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
U3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBTdHJpbmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU09iamVj
dCogcHJvdG90eXBlKTsKLSAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBwcm90b3R5cGUsIGNvbnN0IFVTdHJpbmcmKTsKKyAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKKyAgICAgICAgU3RyaW5nT2JqZWN0KEV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBjb25zdCBVU3RyaW5nJik7CiAKICAg
ICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7
CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTU3RyaW5nKiBp
bnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihKU1dy
YXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWUoKSk7fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAg
ICBTdHJpbmdPYmplY3QoSlNPYmplY3QqIHByb3RvdHlwZSwgSlNTdHJpbmcqKTsKKyAgICAgICAg
U3RyaW5nT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBKU1N0cmluZyopOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHJldmlzaW9uIDM2NzA1KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8g
V2ViQ29yZSB1c2VzIHRoaXMgdG8gbWFrZSBzdHlsZS5maWx0ZXIgdW5kZXRlY3RhYmxlCiAgICAg
Y2xhc3MgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgOiBwdWJsaWMgU3Ry
aW5nT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmluZ09iamVjdFRoYXRNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3RvdHlwZSwgY29u
c3QgVVN0cmluZyYgc3RyaW5nKQotICAgICAgICAgICAgOiBTdHJpbmdPYmplY3QoZXhlYywgcHJv
dG90eXBlLCBzdHJpbmcpCisgICAgICAgIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJl
LCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCisgICAgICAgICAgICA6IFN0cmluZ09iamVjdChleGVj
LCBzdHJ1Y3R1cmUsIHN0cmluZykKICAgICAgICAgewogICAgICAgICB9CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzNjcwNSkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
OCArMTE2LDggQEAgY29uc3QgQ2xhc3NJbmZvIFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9IAogKi8K
IAogLy8gRUNNQSAxNS41LjQKLVN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNT
dGF0ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUpCi0gICAgOiBTdHJp
bmdPYmplY3QoZXhlYywgb2JqZWN0UHJvdG90eXBlKQorU3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQ
cm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1
cmUpCisgICAgOiBTdHJpbmdPYmplY3QoZXhlYywgc3RydWN0dXJlKQogewogICAgIC8vIFRoZSBj
b25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBo
YXMgYmVlbiBidWlsdAogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcihleGVjLCAwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNpb24gMzY3MDUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTdHJpbmdQcm90b3R5
cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmluZ1By
b3RvdHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqKTsKKyAgICAgICAgU3RyaW5nUHJv
dG90eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjcxMikKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDgt
MDktMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZmluaXNoIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1OAorICAgICAgICAgIG1ha2UgZWFjaCBkaXN0aW5j
dCBDKysgY2xhc3MgZ2V0IGEgZGlzdGluY3QgSlNDOjpTdHJ1Y3R1cmUKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIpOiBQYXNzIGluIGEgc3RydWN0
dXJlCisgICAgICAgIElELiBOb3RlIHRoYXQgdGhpcyBtYWtlcyBhIG5ldyBzdHJ1Y3R1cmUgZXZl
cnkgdGltZSAtLSB3ZSBjb3VsZAorICAgICAgICBvcHRpbWl6ZSB0aGlzIHNsaWdodGx5IGJlIGNh
Y2hpbmcgYW5kIHJldXNpbmcgYSBzaW5nbGUgb25lLgorCisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6UnVudGltZU1ldGhv
ZCk6IENyZWF0ZSBhIHVuaXF1ZSBzdHJ1Y3R1cmUgdXNpbmcKKyAgICAgICAgZ2V0RE9NU3RydWN0
dXJlLgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oOgorICAgICAgICAoSlNDOjpS
dW50aW1lTWV0aG9kOjpjcmVhdGVQcm90b3R5cGUpOiBBZGRlZCBjcmVhdGVQcm90b3R5cGUgc28K
KyAgICAgICAgZ2V0RE9NU3RydWN0dXJlIHdpbGwgd29yay4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dT
aGVsbDo6SlNET01XaW5kb3dTaGVsbCk6IEluaXRpYWxpemUgbV93aW5kb3cgdG8KKyAgICAgICAg
MDsgbmVlZGVkIGluIGNhc2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGhhcHBlbnMgd2hpbGUgY3JlYXRp
bmcgdGhlCisgICAgICAgIEpTRE9NV2luZG93LgorCiAyMDA4LTA5LTIwICBOaWtvbGFzIFppbW1l
cm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4K
QEAgLTUyLDcgKzc2LDYgQEAKICAgICAgICAgQmFja0J1dHRvblBhcnQgd2FzIHNwbGl0IGludG8g
U3RhcnQgYW5kIEVuZCBQYXJ0CiAgICAgICAgIEZvcndhcmRCdXR0b25QYXJ0IHdhcyBzcGxpdCBp
bnRvIFN0YXJ0IGFuZCBFbmQgUGFydAogCi0KICAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxi
YXJUaGVtZVF0LmNwcDoKICAgICAgICAgKFdlYkNvcmU6OnNjUGFydCk6CiAgICAgICAgIChXZWJD
b3JlOjpzY3JvbGxiYXJQYXJ0KToKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNyArMTUwLDggQEAgSlNWYWx1ZSogSlNDU1NTdHlsZURlY2xhcmF0aW9u
OjpuYW1lR2V0dAogCiAgICAgLy8gTWFrZSB0aGUgU1ZHICdmaWx0ZXInIGF0dHJpYnV0ZSB1bmRl
dGVjdGFibGUsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSBJRSAnZmlsdGVyJyBhdHRyaWJ1
dGUuCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiZmlsdGVyIikKLSAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwKKyAgICAgICAgcmV0
dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhl
YywKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSksCiAgICAgICAgICAgICB0aGlzT2JqLT5pbXBsKCkt
PmdldFByb3BlcnR5VmFsdWUocHJvcCkpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRo
aXNPYmotPmltcGwoKS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wKSk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDM2NzA1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dTaGVsbDo6c19pbmZvCiAKIEpT
RE9NV2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwoUGFzc1JlZlB0cjxET01XaW5kb3c+IHdp
bmRvdykKICAgICA6IEJhc2UoU3RydWN0dXJlSUQ6OmNyZWF0ZShqc051bGwoKSkpCisgICAgLCBt
X3dpbmRvdygwKQogewogICAgIHNldFdpbmRvdyh3aW5kb3cpOwogfQpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMzY3MDUpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDEyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKIAorI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSA8a2pz
L0Vycm9yLmg+Ci0jaW5jbHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8a2pz
L0Z1bmN0aW9uUHJvdG90eXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMzYsOCArMzksMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEJpbmRpbmdz
OwogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJ1bnRpbWVNZXRob2QpOwogCi1SdW50aW1l
TWV0aG9kOjpSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
aWRlbnQsIEJpbmRpbmdzOjpNZXRob2RMaXN0ICZtKSAKLSAgICA6IEludGVybmFsRnVuY3Rpb24o
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvdHlwZSgpLCBp
ZGVudCkKK2NvbnN0IENsYXNzSW5mbyBSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJSdW50aW1l
TWV0aG9kIiwgMCwgMCwgMCB9OworCitSdW50aW1lTWV0aG9kOjpSdW50aW1lTWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEJpbmRpbmdzOjpNZXRob2RMaXN0
JiBtKSAKKyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgZ2V0RE9NU3RydWN0dXJlPFJ1bnRp
bWVNZXRob2Q+KGV4ZWMpLCBpZGVudCkKICAgICAsIF9tZXRob2RMaXN0KG5ldyBNZXRob2RMaXN0
KG0pKQogewogfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAzNjcwNSkK
KysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlIDxranMvSW50ZXJu
YWxGdW5jdGlvbi5oPgorI2luY2x1ZGUgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICszOCwxMyBAQCBwdWJs
aWM6CiAgICAgUnVudGltZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBCaW5kaW5nczo6TWV0aG9kTGlzdCYpOwogICAgIEJpbmRpbmdzOjpNZXRob2RMaXN0KiBtZXRo
b2RzKCkgY29uc3QgeyByZXR1cm4gX21ldGhvZExpc3QuZ2V0KCk7IH0KIAorICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBj
cmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7Cg==
</data>
<flag name="review"
          id="10580"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>