<?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>96969</bug_id>
          
          <creation_ts>2012-09-17 17:45:38 -0700</creation_ts>
          <short_desc>JSC: Deleting the now deprecated Classic Interpreter</short_desc>
          <delta_ts>2012-09-24 21:30:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mifenton</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>722390</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-09-17 17:45:38 -0700</bug_when>
    <thetext>The Classic Interpreter is now deprecated.  We will delete it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722892</commentid>
    <comment_count>1</comment_count>
      <attachid>164585</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-09-18 10:43:40 -0700</bug_when>
    <thetext>Created attachment 164585
work in progress 1: let&apos;s see if there are any bots that still rely on the classic interpreter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727154</commentid>
    <comment_count>2</comment_count>
      <attachid>165483</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-09-24 18:22:45 -0700</bug_when>
    <thetext>Created attachment 165483
Fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727158</commentid>
    <comment_count>3</comment_count>
      <attachid>165485</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-09-24 18:30:07 -0700</bug_when>
    <thetext>Created attachment 165485
Fix - some debug code that got accidentally included in the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727210</commentid>
    <comment_count>4</comment_count>
      <attachid>165485</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-24 19:41:58 -0700</bug_when>
    <thetext>Comment on attachment 165485
Fix - some debug code that got accidentally included in the last patch.

r=me

Goodbye, old friend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727260</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-09-24 21:30:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/129453.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164585</attachid>
            <date>2012-09-18 10:43:40 -0700</date>
            <delta_ts>2012-09-24 18:22:45 -0700</delta_ts>
            <desc>work in progress 1: let&apos;s see if there are any bots that still rely on the classic interpreter.</desc>
            <filename>bug-96969-wip1.patch</filename>
            <type>text/plain</type>
            <size>182046</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxMjg5MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg4LDI1ICs1ODgsNiBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0gd2hpbGUgKGkgPCBtX2dsb2JhbFJl
c29sdmVJbmZvcy5zaXplKCkpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShDTEFTU0lDX0lO
VEVSUFJFVEVSKQotICAgIGlmICghbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLmlzRW1wdHko
KSB8fCAhbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIGRh
dGFMb2coIlxuU3RydWN0dXJlczpcbiIpOwotCi0gICAgaWYgKCFtX2dsb2JhbFJlc29sdmVJbnN0
cnVjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgIHByaW50U3RydWN0dXJlcygmaW5zdHJ1Y3Rpb25zKClbbV9nbG9iYWxS
ZXNvbHZlSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdo
aWxlIChpIDwgbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLnNpemUoKSk7Ci0gICAgfQotICAg
IGlmICghbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
c2l6ZV90IGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmludFN0cnVjdHVyZXMo
Jmluc3RydWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dKTsKLSAgICAg
ICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zLnNpemUoKSk7Ci0gICAgfQotI2VuZGlmCiAKICAgICBpZiAobV9yYXJlRGF0YSAmJiAh
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0
YUxvZygiXG5FeGNlcHRpb24gSGFuZGxlcnM6XG4iKTsKQEAgLTIyNjAsMTQgKzIyNDEsNiBAQCB2
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX2Z1bmN0aW9uRXhwcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9m
dW5jdGlvbkRlY2xzW2ldKTsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBp
ZiAobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Y2xhc3NpY0VuYWJsZWQoKSAmJiAhIW51bWJl
ck9mSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIHZpc2l0U3RydWN0dXJlcyh2aXNpdG9yLCAmaW5zdHJ1Y3Rpb25zKClbbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uc1tpXV0pOwotICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9n
bG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICB2aXNpdFN0cnVjdHVyZXModmlzaXRvciwgJmluc3RydWN0aW9ucygpW21fZ2xv
YmFsUmVzb2x2ZUluc3RydWN0aW9uc1tpXV0pOwotICAgIH0KLSNlbmRpZgogCiAgICAgdXBkYXRl
QWxsUHJlZGljdGlvbnMoQ29sbGVjdGlvbik7CiB9CkBAIC0yNDQ0LDI3ICsyNDE3LDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIHJldHVybjsKIH0KIAot
I2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotYm9vbCBDb2RlQmxvY2s6Omhhc0dsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbkF0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgaWYgKG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0g
bV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGln
aCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAg
aWYgKG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uc1ttaWRdIDw9IGJ5dGVjb2RlT2Zmc2V0KQot
ICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGln
aCA9IG1pZDsKLSAgICB9Ci0KLSAgICBpZiAoIWxvdyB8fCBtX2dsb2JhbFJlc29sdmVJbnN0cnVj
dGlvbnNbbG93IC0gMV0gIT0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiBib29sIENvZGVC
bG9jazo6aGFzR2xvYmFsUmVzb2x2ZUluZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3Ry
dWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RydWN0aW9uLmgJKHJldmlzaW9uIDEyODkwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBJbnN0cnVjdGlvbihPcGNvZGUgb3Bj
b2RlKQogICAgICAgICB7Ci0jaWYgIUVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQ
UkVURVIpCisjaWYgIUVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIHRvIGluaXRpYWxpemUgb25lIG9mIHRoZSBwb2ludGVyIG1lbWJlcnMgdG8gZW5z
dXJlIHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgc3RydWN0IGlzIGluaXRpYWxpemVk
LCB3aGVuIG9wY29kZSBpcyBub3QgYSBwb2ludGVyLgogICAgICAgICAgICAgdS5qc0NlbGwuY2xl
YXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJz
dHJhY3RQQy5jcHAJKHJldmlzaW9uIDEyODkwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9BYnN0cmFjdFBDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDYg
QEAgQWJzdHJhY3RQQzo6QWJzdHJhY3RQQyhKU0dsb2JhbERhdGEmIGdsbwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIp
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOwotICAgIG1fcG9pbnRlciA9IGV4ZWMtPnJl
dHVyblZQQygpOwotICAgIG1fbW9kZSA9IEludGVycHJldGVyOwotI2VuZGlmCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fi
c3RyYWN0UEMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5oCShyZXZpc2lvbiAxMjg5MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwyMSArNjAs
NiBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBS
RVRFUikKLSAgICBBYnN0cmFjdFBDKEluc3RydWN0aW9uKiB2UEMpCi0gICAgICAgIDogbV9wb2lu
dGVyKHZQQykKLSAgICAgICAgLCBtX21vZGUoSW50ZXJwcmV0ZXIpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBib29sIGhhc0ludGVycHJldGVyUmV0dXJuQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kZSA9PSBJbnRlcnByZXRlcjsgfQotICAgIEluc3RydWN0aW9uKiBpbnRlcnByZXRlclJl
dHVybkFkZHJlc3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0ludGVycHJldGVy
UmV0dXJuQWRkcmVzcygpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9u
Kj4obV9wb2ludGVyKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKICAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlICE9IE5vbmU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDEyODkwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4
LDkgKzE0OCw2IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAg
SW5zdHJ1Y3Rpb24qIHJldHVyblZQQygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQ10udlBDKCk7IH0KLSNlbmRpZgogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIEluc3RydWN0aW9uKiBjdXJyZW50VlBDKCkgY29uc3QKICAgICAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAxMjg5MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAi
SklULmgiCiAjZW5kaWYKIAotI2RlZmluZSBXVEZfVVNFX0dDQ19DT01QVVRFRF9HT1RPX1dPUktB
Uk9VTkQgKChFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFC
TEUoTExJTlQpKSAmJiAhZGVmaW5lZChfX2xsdm1fXykpCisjZGVmaW5lIFdURl9VU0VfR0NDX0NP
TVBVVEVEX0dPVE9fV09SS0FST1VORCAoRU5BQkxFKExMSU5UKSAmJiAhZGVmaW5lZChfX2xsdm1f
XykpCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTg4LDE0ICs4OCw2IEBAIHN0YXRpYyBp
bnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEoKICAgICByZXR1cm4gc2MtPmxvY2FsRGVw
dGgoKTsKIH0KIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSAKLXN0YXRpYyBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSBjb25jYXRlbmF0ZVN0cmluZ3MoRXhlY1N0YXRlKiBleGVjLCBSZWdp
c3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQpCi17Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHN0cmluZ3MsIGNvdW50KTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDTEFTU0lDX0lOVEVS
UFJFVEVSKQotCiBBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsaWRlUmVn
aXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBSZWdpc3RlckZpbGUq
IHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewogICAgIC8vIFRoaXMgZW5zdXJl
cyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIG9mIHplcm8gYXJndW1l
bnRzIHBhc3NlZCBieSB0aGUgY2FsbGVyLgpAQCAtMTIzLDI0ICsxMTUsNiBAQCBBTFdBWVNfSU5M
SU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsCiAgICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsK
IH0KIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotc3RhdGljIE5FVkVSX0lOTElO
RSBib29sIGlzSW52YWxpZFBhcmFtRm9ySW4oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUg
dmFsdWUsIEpTVmFsdWUmIGV4Y2VwdGlvbkRhdGEpCi17Ci0gICAgaWYgKHZhbHVlLmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBleGNlcHRpb25EYXRhID0gY3JlYXRlSW52
YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiaW4iICwgdmFsdWUpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNJbnZhbGlkUGFyYW1Gb3JJbnN0YW5j
ZU9mKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlJiBleGNlcHRp
b25EYXRhKQotewotICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBleGNlcHRpb25EYXRhID0gY3JlYXRlSW52YWxpZFBhcmFtRXJy
b3IoY2FsbEZyYW1lLCAiaW5zdGFuY2VvZiIgLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZW5kaWYKLQogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGlm
ICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkBAIC0yODksNDMgKzI2MywxNCBAQCB2b2lk
IEludGVycHJldGVyOjppbml0aWFsaXplKGJvb2wgY2FuVXNlCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGNhblVzZUpJVCk7CiAKLSAgICAvLyBJZiB3ZSBoYXZlIExMSW50LCB0aGVuIHdlIHNob3VsZG4n
dCBiZSBidWlsZGluZyBhbnkga2luZCBvZiBjbGFzc2ljIGludGVycHJldGVyLgotI2lmIEVOQUJM
RShMTElOVCkgJiYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0jZXJyb3IgIkJ1aWxkaW5n
IGJvdGggTExJbnQgYW5kIHRoZSBDbGFzc2ljIEludGVycHJldGVyIGlzIG5vdCBzdXBwb3J0ZWQg
YmVjYXVzZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ09N
UFVURURfR09UT19PUENPREVTKQotI2lmIEVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoQ09NUFVU
RURfR09UT19PUENPREVTKSAmJiBFTkFCTEUoTExJTlQpCiAgICAgbV9vcGNvZGVUYWJsZSA9IExM
SW50OjpvcGNvZGVNYXAoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsg
KytpKQogICAgICAgICBtX29wY29kZUlEVGFibGUuYWRkKG1fb3Bjb2RlVGFibGVbaV0sIHN0YXRp
Y19jYXN0PE9wY29kZUlEPihpKSk7CiAgICAgbV9jbGFzc2ljRW5hYmxlZCA9IGZhbHNlOwotCi0j
ZWxpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmIChj
YW5Vc2VKSVQpIHsKLSAgICAgICAgLy8gSWYgdGhlIEpJVCBpcyBwcmVzZW50LCBkb24ndCB1c2Ug
anVtcCBkZXN0aW5hdGlvbnMgZm9yIG9wY29kZXMuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKLSAgICAgICAgICAgIE9wY29kZSBvcGNvZGUgPSBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaSkpOwotICAgICAgICAgICAg
bV9vcGNvZGVUYWJsZVtpXSA9IG9wY29kZTsKLSAgICAgICAgfQotICAgICAgICBtX2NsYXNzaWNF
bmFibGVkID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpdmF0ZUV4ZWN1dGUoSW5p
dGlhbGl6ZUFuZFJldHVybiwgMCwgMCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bU9wY29kZUlEczsgKytpKQotICAgICAgICAgICAgbV9vcGNvZGVJRFRhYmxlLmFk
ZChtX29wY29kZVRhYmxlW2ldLCBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oaSkpOwotICAgICAgICAK
LSAgICAgICAgbV9jbGFzc2ljRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJM
RShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0KLSNlbHNlIC8vICFFTkFCTEUo
Q09NUFVURURfR09UT19PUENPREVTKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQot
ICAgIG1fY2xhc3NpY0VuYWJsZWQgPSB0cnVlOwogI2Vsc2UKICAgICBtX2NsYXNzaWNFbmFibGVk
ID0gZmFsc2U7CiAjZW5kaWYKLSNlbmRpZiAvLyAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RF
UykKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKQEAg
LTQ5MywxMiArNDM4LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENh
bAogICAgIC8vIHRoZSBiZWdpbm5pbmcgb2YgbmV4dCBpbnN0cnVjdGlvbiB0byBleGVjdXRlLiBU
byBnZXQgYW4gb2Zmc2V0CiAgICAgLy8gaW5zaWRlIHRoZSBjYWxsIGluc3RydWN0aW9uIHRoYXQg
dHJpZ2dlcmVkIHRoZSBleGNlcHRpb24gd2UKICAgICAvLyBoYXZlIHRvIHN1YnRyYWN0IDEuCi0j
aWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgaWYgKGNh
bGxlckZyYW1lLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpCi0gICAgICAgIGJ5dGVjb2RlT2Zm
c2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5y
ZXR1cm5QQygpKTsKLSAgICBlbHNlCi0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblZQQygpKSAtIDE7Ci0jZWxpZiBFTkFC
TEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCisjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5U
KQogICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsZXJG
cmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKICNlbHNlCiAgICAgYnl0ZWNvZGVPZmZzZXQg
PSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpIC0gMTsK
QEAgLTU2NywxMCArNTA3LDYgQEAgc3RhdGljIGludCBnZXRMaW5lTnVtYmVyRm9yQ2FsbEZyYW1l
KEpTRwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIC0xOwotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAg
ICAgIHJldHVybiBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpIC0gMSk7Ci0jZW5kaWYKICNpZiBFTkFC
TEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGNv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKQEAgLTYwOSwxMyArNTQ1
LDYgQEAgc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2JhbAogICAgIGlmIChj
YWxsZnJhbWVJc0hvc3QpIHsKICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggaW5s
aW5lIGNhbGxmcmFtZXMgaGVyZSBhcyBieSBkZWZpbml0aW9uIHdlIGhhdmVuJ3QKICAgICAgICAg
Ly8gaW5saW5lZCBhIGNhbGwgd2l0aCBhbiBpbnRlcnZlbmluZyBuYXRpdmUgY2FsbCBmcmFtZS4K
LSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LT5jYW5Vc2VKSVQoKSkgewotICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJGcmFt
ZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7Ci0gICAgICAgICAgICBsaW5lTnVtYmVy
ID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKLSAgICAgICAgfQot
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQogI2lmIEVOQUJMRShERkdf
SklUKQogICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrICYmIGNhbGxlckNvZGVCbG9jay0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewpAQCAtNjI2LDEzICs1NTUsNiBAQCBzdGF0
aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFsCiAgICAgICAgICAgICBieXRlY29k
ZU9mZnNldCA9IGNhbGxlckZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKICNl
bmRpZgogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAg
ICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgICAgIGJ5dGVjb2Rl
T2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVy
blZQQygpKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2RlQmxvY2stPmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCAtIDEpOwotICAgICAgICAgICAg
cmV0dXJuIGNhbGxlckZyYW1lOwotICAgICAgICB9Ci0jZW5kaWYKICNpZiBFTkFCTEUoSklUKSB8
fCBFTkFCTEUoTExJTlQpCiAgICAgI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5pc0lubGluZUNhbGxGcmFtZSgpKSB7CkBAIC02NzAsMTYgKzU5Miw3IEBAIHN0YXRp
YyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oSlNHbG9iYWwKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGNvbnN0IFN0cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsK
LSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNpZiBFTkFCTEUoSklUKQotICAgIGlm
IChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKLSNl
bmRpZgotICAgIHJldHVybiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5zb3VyY2UoKS0+dXJsKCk7
Ci0KLSNlbHNlCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLT5zb3VyY2VVUkwoKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3RhY2tGcmFtZUNvZGVU
eXBlIGdldFN0YWNrRnJhbWVDb2RlVHlwZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTk4Niwx
NCArODk5LDkgQEAgZmFpbGVkSlNPTlA6CiAgICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKICNp
ZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4
ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlKTsKLSNlbHNlIC8vICFF
TkFCTEUoTExJTlRfQ19MT09QKQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGlmICghY2xhc3Np
Y0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENv
ZGUoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFs
RGF0YSgpKTsKLSAgICAgICAgZWxzZQorI2VsaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgcmVzdWx0
ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBu
ZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQp
Ci0gICAgICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZtX3JlZ2lzdGVy
RmlsZSwgbmV3Q2FsbEZyYW1lKTsKLSNlbmRpZiAvLyAhRU5BQkxFKExMSU5UX0NfTE9PUCkKIAog
ICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KQEAgLTEwNjIsMTQgKzk3MCw5IEBAIEpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAgICAgICAgIG1fcmVl
bnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAgICAgcmVz
dWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfcHJvbG9ndWUpOwotI2Vsc2UgLy8gRU5BQkxFKExMSU5UX0NfTE9PUCkKLSNpZiBF
TkFCTEUoSklUKQotICAgICAgICAgICAgaWYgKCFjbGFzc2ljRW5hYmxlZCgpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBj
YWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgZWxzZQorI2VsaWYgRU5B
QkxFKEpJVCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwg
bmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFs
LCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSk7Ci0jZW5kaWYgLy8gIUVOQUJMRShMTElO
VF9DX0xPT1ApCiAKICAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgICAgIH0KQEAg
LTExNjEsMTQgKzEwNjQsOSBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1
Y3QoCiAgICAgICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5BQkxFKExMSU5UX0Nf
TE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxs
RnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwotI2Vsc2UgLy8g
IUVOQUJMRShMTElOVF9DX0xPT1ApCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIGlmICgh
Y2xhc3NpY0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4
ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVjdERhdGFTY29wZS0+
Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIGVsc2UKKyNlbGlmIEVOQUJMRShKSVQpCisgICAg
ICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdD
YWxsRnJhbWUsIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1h
bCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUpOwotI2VuZGlmIC8vICFFTkFCTEUoTExJ
TlRfQ19MT09QKQogICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAgICAgICAgfQogCkBA
IC0xMjY4LDIwICsxMTY2LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJh
bWVDbAogICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9P
UCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2Fs
bEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7Ci0jZWxzZSAvLyAhRU5B
QkxFKExMSU5UX0NfTE9PUCkKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lO
VEVSUFJFVEVSKQotICAgICAgICBpZiAoY2xvc3VyZS5uZXdDYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5jYW5Vc2VKSVQoKSkKLSNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0gY2xvc3VyZS5mdW5j
dGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgmbV9yZWdp
c3RlckZpbGUsIGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBjbG9zdXJlLmdsb2JhbERhdGEpOwotI2lm
IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0jZW5kaWYKKyNlbGlm
IEVOQUJMRShKSVQpCisgICAgICAgIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBjbG9z
dXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICAgICAgcmVzdWx0
ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIGNsb3N1cmUubmV3Q2Fs
bEZyYW1lKTsKLSNlbmRpZgotI2VuZGlmIC8vICFFTkFCTEUoTExJTlRfQ19MT09QKQogCiAgICAg
ICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQpAQCAtMTM3MywyMCArMTI2MCw5IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgCiAjaWYgRU5BQkxF
KExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5l
d0NhbGxGcmFtZSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSk7Ci0jZWxzZSAvLyAhRU5BQkxFKExMSU5U
X0NfTE9PUCkKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVS
KQotICAgICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpCi0jZW5k
aWYKLSAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRl
KCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKLSNp
ZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgZWxzZQotI2VuZGlmCisjZWxp
ZiBFTkFCTEUoSklUKQorICAgICAgICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2RlKCku
ZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgc2NvcGUtPmdsb2JhbERhdGEo
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRF
UikKLSAgICAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0
ZXJGaWxlLCBuZXdDYWxsRnJhbWUpOwotI2VuZGlmCi0jZW5kaWYgLy8gIUVOQUJMRShMTElOVF9D
X0xPT1ApCiAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCkBAIC0xNDI1LDM3NDUg
KzEzMDEsNjMgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogICAg
IH0KIH0KICAgICAKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElO
RSBKU1Njb3BlKiBJbnRlcnByZXRlcjo6Y3JlYXRlTmFtZVNjb3BlKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQorCitKU1ZhbHVlIEludGVycHJldGVyOjpyZXRy
aWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKSBjb25zdAogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcih2UENbMV0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBKU05hbWVTY29wZSogc2NvcGUgPSBKU05hbWVTY29w
ZTo6Y3JlYXRlKGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICBy
ZXR1cm4gc2NvcGU7CisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5j
dGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgaWYgKCFm
dW5jdGlvbkNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZShmdW5jdGlvbkNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1
bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwogfQogCi1O
RVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgSW50ZXJw
cmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNG
dW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVjdXJzaXZlIGludm9jYXRpb24g
bWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9uLgotICAgIGlmICh2
UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47CisgICAg
Q2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21W
TUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICAvLyBVbmNhY2hlYWJsZTogZ2l2ZSB1
cC4KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkgewotICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZnVuY3Rpb25DYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAK
LSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAgaWYgKHN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9w
X3B1dF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENh
Y2hlIG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0IG5leHQgdGltZS4K
LSAgICBTdHJ1Y3R1cmUqIGxhc3RTdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgaWYgKHN0cnVjdHVyZSAhPSBsYXN0U3RydWN0dXJlKSB7Ci0gICAgICAgIC8vIEZpcnN0
IG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0IG5leHQgdGltZS4KLSAg
ICAgICAgaWYgKCFsYXN0U3RydWN0dXJlKSB7Ci0gICAgICAgICAgICB2UENbNF0udS5zdHJ1Y3R1
cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gU2Vjb25kIG1pc3M6IGdpdmUgdXAuCi0gICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShv
cF9wdXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBD
YWNoZSBoaXQ6IFNwZWNpYWxpemUgaW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1Y3R1cmVzLgotCi0g
ICAgLy8gSWYgYmFzZUNlbGwgIT0gc2xvdC5iYXNlKCksIHRoZW4gYmFzZUNlbGwgbXVzdCBiZSBh
IHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLSAgICBpZiAoYmFzZUNlbGwgIT0gc2xvdC5iYXNl
KCkpIHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN0cnVjdHVyZSB0cmFuc2l0aW9uLCBj
YWNoZSB0cmFuc2l0aW9uIGluZm8KLSAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlT
bG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgewotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmlj
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGludCBsaW5lTnVtYmVyOwor
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJh
bWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAoIWNhbGxlckZyYW1lKQor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgSlNWYWx1ZSBjYWxsZXIgPSBjYWxsZXJGcmFt
ZS0+Y2FsbGVlKCk7CisgICAgaWYgKCFjYWxsZXIpCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
IAotICAgICAgICAvLyBwdXRfYnlfaWRfdHJhbnNpdGlvbiBjaGVja3MgdGhlIHByb3RvdHlwZSBj
aGFpbiBmb3Igc2V0dGVycy4KLSAgICAgICAgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oY2FsbEZy
YW1lLCBiYXNlQ2VsbCk7Ci0gICAgICAgIEpTQ2VsbCogb3duZXIgPSBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgLy8gR2V0IHRoZSBwcm90b3R5cGUgaGVyZSBiZWNh
dXNlIHRoZSBjYWxsIHRvIHByb3RvdHlwZUNoYWluIGNvdWxkIGNhdXNlIGEgCi0gICAgICAgIC8v
IEdDIGFsbG9jYXRpb24sIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gaGFwcGVuIHdoaWxlIHdlJ3Jl
IGluIHRoZSBtaWRkbGUgb2YgCi0gICAgICAgIC8vIGluaXRpYWxpemluZyB0aGUgdW5pb24uCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uKTsKLSAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLnNldChnbG9iYWxE
YXRhLCBvd25lciwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwotICAgICAgICB2UENbNV0udS5z
dHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB2UENb
Nl0udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICAgICAgQVNTRVJUKHZQ
Q1s2XS51LnN0cnVjdHVyZUNoYWluKTsKLSAgICAgICAgdlBDWzddID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFNraXAgb3ZlciBmdW5jdGlvbiBiaW5kaW5n
cy4KKyAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkpOworICAgIHdoaWxlIChhc09iamVjdChj
YWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgIGNh
bGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxl
ckZyYW1lLCBsaW5lTnVtYmVyLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIGlmICghY2FsbGVy
RnJhbWUpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgIGNhbGxlciA9IGNh
bGxlckZyYW1lLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCFjYWxsZXIpCisgICAgICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9i
eV9pZF9yZXBsYWNlKTsKLSAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotfQotCi1O
RVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dW5jYWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiwg
SW5zdHJ1Y3Rpb24qIHZQQykKLXsKLSAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lk
KTsKLSAgICB2UENbNF0gPSAwOworICAgIHJldHVybiBjYWxsZXI7CiB9CiAKLU5FVkVSX0lOTElO
RSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit2b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBTdHJpbmcmIHNvdXJj
ZVVSTCwgSlNWYWx1ZSYgZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVjdXJzaXZlIGludm9j
YXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9uLgotICAg
IGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVk
aWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgdlBDWzBdID0g
Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gY2FsbEZy
YW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdldE9wY29k
ZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0
X3N0cmluZ19sZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVW5jYWNo
ZWFibGU6IGdpdmUgdXAuCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAg
dlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
KSB7Ci0gICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBtaXNzCi0gICAgU3RydWN0dXJl
KiBsYXN0U3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwotICAgIGlmIChzdHJ1
Y3R1cmUgIT0gbGFzdFN0cnVjdHVyZSkgewotICAgICAgICAvLyBGaXJzdCBtaXNzOiByZWNvcmQg
U3RydWN0dXJlIHRvIGNvbXBhcmUgYWdhaW5zdCBuZXh0IHRpbWUuCi0gICAgICAgIGlmICghbGFz
dFN0cnVjdHVyZSkgewotICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLnNldChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNlY29uZCBt
aXNzOiBnaXZlIHVwLgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dl
bmVyaWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgaGl0OiBTcGVj
aWFsaXplIGluc3RydWN0aW9uIGFuZCByZWYgU3RydWN0dXJlcy4KLQotICAgIGlmIChzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAoc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSkgewotICAgICAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0dGVyOgotICAgICAg
ICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZik7Ci0gICAg
ICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUHJvcGVydHlTbG90OjpDdXN0b206Ci0gICAgICAgICAgICB2UENbMF0g
PSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmKTsKLSAgICAgICAgICAgIHZQQ1s1
XSA9IHNsb3QuY3VzdG9tR2V0dGVyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRfc2VsZik7
Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9n
ZXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2xv
dC5zbG90QmFzZSgpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkp
IHsKLSAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKLQotICAgICAg
ICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAg
ICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBh
IGdvb2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEg
ZGljdGlvbmFyeS4KLSAgICAgICAgaWYgKGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rp
b25hcnkoKSkgewotICAgICAgICAgICAgYmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmpl
Y3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gYmFzZU9i
amVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lKTsKLSAgICAgICAgfQorICAgIGZ1bmN0aW9uID0gSlNWYWx1ZSgpOworICAgIGxpbmVOdW1i
ZXIgPSAtMTsKKyAgICBzb3VyY2VVUkwgPSBTdHJpbmcoKTsKIAotICAgICAgICBBU1NFUlQoIWJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIHN3aXRjaCAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSkgewotICAgICAg
ICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0dGVyOgotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bj
b2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8pOwotICAgICAgICAgICAgdlBDWzZdID0gb2Zm
c2V0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlTbG90OjpDdXN0
b206Ci0gICAgICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2N1c3RvbV9w
cm90byk7Ci0gICAgICAgICAgICB2UENbNl0gPSBzbG90LmN1c3RvbUdldHRlcigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfZ2V0X2J5X2lkX3Byb3RvKTsKLSAgICAgICAgICAgIHZQQ1s2XSA9IG9mZnNldDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZQQ1s1XS51LnN0cnVjdHVy
ZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsZXJGcmFtZS0+aGFzSG9z
dENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJh
c2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgIGlmICghY291bnQpIHsKLSAgICAgICAg
dlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzd2l0Y2ggKHNsb3QuY2Fj
aGVkUHJvcGVydHlUeXBlKCkpIHsKLSAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0dGVyOgotICAg
ICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbik7Ci0gICAg
ICAgIHZQQ1s3XSA9IG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9wZXJ0eVNs
b3Q6OkN1c3RvbToKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9jdXN0
b21fY2hhaW4pOwotICAgICAgICB2UENbN10gPSBzbG90LmN1c3RvbUdldHRlcigpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0
X2J5X2lkX2NoYWluKTsKLSAgICAgICAgdlBDWzddID0gb2Zmc2V0OwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgdlBDWzRdLnUuc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICB2UENbNV0u
dS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICB2UENbNl0gPSBjb3VudDsK
LX0KLQotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnVuY2FjaGVHZXRCeUlEKENvZGVC
bG9jayosIEluc3RydWN0aW9uKiB2UEMpCi17Ci0gICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dl
dF9ieV9pZCk7Ci0gICAgdlBDWzRdID0gMDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDTEFTU0lD
X0lOVEVSUFJFVEVSKQotCi0jaWYgIUVOQUJMRShMTElOVF9DX0xPT1ApCi0KLUpTVmFsdWUgSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxl
KiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIE9uZS10aW1l
IGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0byBwdXQgdGhp
cyBjb2RlCi0gICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJlbHMgYXJlIG9ubHkgaW4gc2NvcGUg
aW5zaWRlIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKFVOTElLRUxZKGZsYWcgPT0gSW5pdGlhbGl6
ZUFuZFJldHVybikpIHsKLSAgICAgICAgI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNf
SU5URVJQUkVURVIpCi0gICAgICAgICAgICAjZGVmaW5lIExJU1RfT1BDT0RFX0xBQkVMKGlkLCBs
ZW5ndGgpICYmaWQsCi0gICAgICAgICAgICAgICAgc3RhdGljIE9wY29kZSBsYWJlbHNbXSA9IHsg
Rk9SX0VBQ0hfT1BDT0RFX0lEKExJU1RfT1BDT0RFX0xBQkVMKSB9OwotICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChsYWJlbHMpOyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3Bjb2RlVGFibGVbaV0gPSBsYWJlbHNbaV07Ci0gICAgICAg
ICAgICAjdW5kZWYgTElTVF9PUENPREVfTEFCRUwKLSAgICAgICAgI2VuZGlmIC8vIEVOQUJMRShD
T01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChtX2luaXRpYWxpemVkKTsKLSAgICBBU1NFUlQo
bV9jbGFzc2ljRW5hYmxlZCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoQ0xB
U1NJQ19JTlRFUlBSRVRFUikKLSAgICAvLyBNaXhpbmcgSW50ZXJwcmV0ZXIgKyBKSVQgaXMgbm90
IHN1cHBvcnRlZC4KLSAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkp
Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotI2lmICFF
TkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBVTlVTRURfUEFSQU0ocmVnaXN0ZXJGaWxl
KTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gSlNWYWx1ZSgpOwot
I2Vsc2UKLQotICAgIEFTU0VSVChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS50b3BDYWxsRnJhbWUg
PT0gY2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlOwotICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICBDYWxsRnJhbWUqKiB0b3BDYWxsRnJhbWVTbG90ID0g
Jmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJbnN0cnVjdGlvbiogdlBDID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIHVuc2lnbmVkIHRpY2tDb3VudCA9IGdsb2Jh
bERhdGEtPnRpbWVvdXRDaGVja2VyLnRpY2tzVW50aWxOZXh0Q2hlY2soKTsKLSAgICBKU1ZhbHVl
IGZ1bmN0aW9uUmV0dXJuVmFsdWU7Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpIFwK
LSAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiAh
PSBKU1ZhbHVlKCkpKSB7IFwKLSAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uOyBcCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBcCi0gICAgICAgIH0g
XAotICAgIH0gd2hpbGUgKDApCi0KLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgIE9wY29k
ZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0KLSNkZWZpbmUgQ0hFQ0tf
Rk9SX1RJTUVPVVQoKSBcCi0gICAgaWYgKCEtLXRpY2tDb3VudCkgeyBcCi0gICAgICAgIGlmIChn
bG9iYWxEYXRhLT50ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpIHx8IGdsb2JhbERhdGEtPnRp
bWVvdXRDaGVja2VyLmRpZFRpbWVPdXQoY2FsbEZyYW1lKSkgeyBcCi0gICAgICAgICAgICBleGNl
cHRpb25WYWx1ZSA9IGpzTnVsbCgpOyBcCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBcCi0g
ICAgICAgIH0gXAotICAgICAgICB0aWNrQ291bnQgPSBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tl
ci50aWNrc1VudGlsTmV4dENoZWNrKCk7IFwKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKLSAgICAjZGVmaW5lIFNBTVBMRShjb2RlQmxvY2ssIHZQQykgbV9zYW1wbGVy
LT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCi0jZWxzZQotICAgICNkZWZpbmUgU0FNUExFKGNvZGVC
bG9jaywgdlBDKQotI2VuZGlmCi0KLSNkZWZpbmUgVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpIFwK
LSAgICBkbyB7XAotICAgICAgICBjYWxsRnJhbWUtPnNldEJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZH
Q29kZSh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmRhdGEoKSArIDEpO1wKLSAgICB9
IHdoaWxlICgwKQotCi0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRF
UikKLSAgICAjZGVmaW5lIE5FWFRfSU5TVFJVQ1RJT04oKSBTQU1QTEUoY29kZUJsb2NrLCB2UEMp
OyBnb3RvICp2UEMtPnUub3Bjb2RlCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKLSAgICAjZGVm
aW5lIERFRklORV9PUENPREUob3Bjb2RlKSBcCi0gICAgICAgIG9wY29kZTpcCi0gICAgICAgICAg
ICBPcGNvZGVTdGF0czo6cmVjb3JkSW5zdHJ1Y3Rpb24ob3Bjb2RlKTtcCi0gICAgICAgICAgICBV
UERBVEVfQllURUNPREVfT0ZGU0VUKCk7Ci0jZWxzZQotICAgICNkZWZpbmUgREVGSU5FX09QQ09E
RShvcGNvZGUpIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2VuZGlmIC8vICFF
TkFCTEUoT1BDT0RFX1NUQVRTKQotICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSNlbHNlIC8vICFF
TkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICNkZWZpbmUgTkVY
VF9JTlNUUlVDVElPTigpIFNBTVBMRShjb2RlQmxvY2ssIHZQQyk7IGdvdG8gaW50ZXJwcmV0ZXJM
b29wU3RhcnQKLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgICNkZWZpbmUgREVGSU5FX09Q
Q09ERShvcGNvZGUpIFwKLSAgICAgICAgY2FzZSBvcGNvZGU6XAotICAgICAgICAgICAgT3Bjb2Rl
U3RhdHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7XAotICAgICAgICAgICAgVVBEQVRFX0JZ
VEVDT0RFX09GRlNFVCgpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERFRklORV9PUENPREUob3Bjb2Rl
KSBjYXNlIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2VuZGlmCi0gICAgd2hp
bGUgKDEpIHsgLy8gaXRlcmF0b3IgbG9vcCBiZWdpbnMKLSAgICBpbnRlcnByZXRlckxvb3BTdGFy
dDo7Ci0gICAgc3dpdGNoICh2UEMtPnUub3Bjb2RlKQotI2VuZGlmIC8vICFFTkFCTEUoQ09NUFVU
RURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHsKLSAgICBERUZJTkVfT1BDT0RFKG9w
X25ld19vYmplY3QpIHsKLSAgICAgICAgLyogbmV3X29iamVjdCBkc3QocikKLQotICAgICAgICAg
ICBDb25zdHJ1Y3RzIGEgbmV3IGVtcHR5IE9iamVjdCBpbnN0YW5jZSB1c2luZyB0aGUgb3JpZ2lu
YWwKLSAgICAgICAgICAgY29uc3RydWN0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0
ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGNhbGxGcmFtZSkpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X25ld19vYmplY3QpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfbmV3X2FycmF5KSB7Ci0gICAgICAgIC8qIG5ld19hcnJheSBkc3Qocikg
Zmlyc3RBcmcocikgYXJnQ291bnQobikKLQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IEFy
cmF5IGluc3RhbmNlIHVzaW5nIHRoZSBvcmlnaW5hbAotICAgICAgICAgICBjb25zdHJ1Y3Rvciwg
YW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICAgIFRoZSBhcnJh
eSB3aWxsIGNvbnRhaW4gYXJnQ291bnQgZWxlbWVudHMgd2l0aCB2YWx1ZXMKLSAgICAgICAgICAg
dGFrZW4gZnJvbSByZWdpc3RlcnMgc3RhcnRpbmcgYXQgcmVnaXN0ZXIgZmlyc3RBcmcuCi0gICAg
ICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQg
Zmlyc3RBcmcgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENb
M10udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFs
dWUoY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigm
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmaXJzdEFyZ10pLCBhcmdDb3VudCkpOwotCi0gICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19hcnJheSk7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9uZXdfYXJyYXlfYnVmZmVyKSB7
Ci0gICAgICAgIC8qIG5ld19hcnJheV9idWZmZXIgZHN0KHIpIGluZGV4KG4pIGFyZ0NvdW50KG4p
Ci0gICAgICAgICAKLSAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgQXJyYXkgaW5zdGFuY2UgdXNp
bmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIHJlc3Vs
dCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICBUaGUgYXJyYXkgYmUgaW5pdGlhbGl6ZWQgd2l0
aCB0aGUgdmFsdWVzIGZyb20gY29uc3RhbnRCdWZmZXJbaW5kZXhdCi0gICAgICAgICAqLwotICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGZpcnN0QXJnID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzNdLnUub3BlcmFu
ZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGNvbnN0cnVj
dEFycmF5KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihmaXJzdEFyZyksIGFy
Z0NvdW50KSk7Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXdf
YXJyYXkpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfbmV3X3JlZ2V4cCkgewotICAgICAgICAvKiBuZXdfcmVnZXhwIGRzdChyKSByZWdF
eHAocmUpCi0KLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBSZWdFeHAgaW5zdGFuY2UgdXNp
bmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICAgIGNvbnN0cnVjdG9yIGZyb20gcmVnZXhwIHJlZ0V4
cCwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbgotICAgICAgICAgICByZWdpc3RlciBkc3QuCi0gICAg
ICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBSZWdF
eHAqIHJlZ0V4cCA9IGNvZGVCbG9jay0+cmVnZXhwKHZQQ1syXS51Lm9wZXJhbmQpOwotICAgICAg
ICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9
IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8g
UmVnRXhwIGNvbnN0cnVjdG9yLiIpOwotICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAg
ICAgfQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoUmVnRXhw
T2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUo
KSwgcmVnRXhwKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbmV3X3JlZ2V4
cCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF9tb3YpIHsKLSAgICAgICAgLyogbW92IGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBD
b3BpZXMgcmVnaXN0ZXIgc3JjIHRvIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBj
YWxsRnJhbWUtPnIoc3JjKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9tb3Yp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfZXEpIHsKLSAgICAgICAgLyogZXEgZHN0KHIpIHNyYzEocikgc3JjMihyKQotCi0gICAgICAg
ICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgYW5kIHJlZ2lzdGVyIHNyYzIgYXJlIGVx
dWFsLAotICAgICAgICAgICBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc9PScgb3BlcmF0b3IsIGFu
ZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAgICAgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRz
dC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5k
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIo
KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHNy
YzEuYXNJbnQzMigpID09IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihKU1ZhbHVlOjplcXVhbFNsb3dDYXNlKGNh
bGxGcmFtZSwgc3JjMSwgc3JjMikpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lcSk7Ci0gICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9lcV9udWxsKSB7
Ci0gICAgICAgIC8qIGVxX251bGwgZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIENoZWNrcyB3
aGV0aGVyIHJlZ2lzdGVyIHNyYyBpcyBudWxsLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICchPScK
LSAgICAgICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGlu
IHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJh
bmQpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoc3JjLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHRydWUp
OwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZXFfbnVsbCk7Ci0gICAgICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHNyYy5pc0NlbGwoKSAmJiBzcmMu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2VxX251bGwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklO
RV9PUENPREUob3BfbmVxKSB7Ci0gICAgICAgIC8qIG5lcSBkc3Qocikgc3JjMShyKSBzcmMyKHIp
Ci0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBhbmQgcmVnaXN0ZXIg
c3JjMiBhcmUgbm90Ci0gICAgICAgICAgIGVxdWFsLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICch
PScgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1bHQgYXMgYSBib29sZWFu
IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2
UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAm
JiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0ganNCb29sZWFuKHNyYzEuYXNJbnQzMigpICE9IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbighSlNWYWx1ZTo6
ZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
bmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX25lcV9udWxsKSB7Ci0gICAgICAgIC8qIG5lcV9udWxsIGRzdChyKSBzcmMocikKLQot
ICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMgaXMgbm90IG51bGwsIGFzIHdp
dGggdGhlIEVDTUFTY3JpcHQgJyE9JwotICAgICAgICAgICBvcGVyYXRvciwgYW5kIHB1dHMgdGhl
IHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMgPSBjYWxs
RnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChzcmMu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbmVxX251bGwpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9v
bGVhbighc3JjLmlzQ2VsbCgpIHx8ICFzcmMuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Ci0gICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25lcV9udWxsKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N0cmljdGVxKSB7Ci0gICAg
ICAgIC8qIHN0cmljdGVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDaGVj
a3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIGFyZSBzdHJpY3RseQot
ICAgICAgICAgICBlcXVhbCwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPT09JyBvcGVyYXRvciwg
YW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIg
ZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFs
dWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJh
bmQpLmpzVmFsdWUoKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBKU1ZhbHVlOjpzdHJpY3RFcXVh
bChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7
Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfc3RyaWN0ZXEpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbnN0cmljdGVx
KSB7Ci0gICAgICAgIC8qIG5zdHJpY3RlcSBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAg
ICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBhbmQgcmVnaXN0ZXIgc3JjMiBhcmUg
bm90Ci0gICAgICAgICAgIHN0cmljdGx5IGVxdWFsLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICch
PT0nIG9wZXJhdG9yLCBhbmQKLSAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVh
biBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0u
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUu
b3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIo
dlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBib29sIHJlc3VsdCA9ICFKU1Zh
bHVlOjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNC
b29sZWFuKHJlc3VsdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbnN0cmlj
dGVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2xlc3MpIHsKLSAgICAgICAgLyogbGVzcyBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0K
LSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gcmVn
aXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPCcgb3BlcmF0
b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGpz
TGVzczx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sZXNzKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xlc3NlcSkgewotICAg
ICAgICAvKiBsZXNzZXEgZHN0KHIpIHNyYzEocikgc3JjMihyKQotCi0gICAgICAgICAgIENoZWNr
cyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCi0gICAgICAg
ICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9JyBvcGVyYXRvciwg
YW5kCi0gICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIg
ZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFs
dWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJh
bmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNz
RXE8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0K
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbGVzc2VxKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dyZWF0ZXIpIHsKLSAg
ICAgICAgLyogZ3JlYXRlciBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ2hl
Y2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwg
YXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCBwdXRz
IHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAg
ICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1Zh
bHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGpzTGVzczxmYWxzZT4o
Y2FsbEZyYW1lLCBzcmMyLCBzcmMxKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
LSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ3JlYXRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9ncmVhdGVyZXEpIHsKLSAgICAgICAg
LyogZ3JlYXRlcmVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDaGVja3Mg
d2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bwotICAgICAg
ICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc+PScgb3BlcmF0b3Is
IGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVy
IGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1Zh
bHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVy
YW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGpzTGVz
c0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIsIHNyYzEpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9ncmVhdGVyZXEpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJlX2luYykg
ewotICAgICAgICAvKiBwcmVfaW5jIHNyY0RzdChyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJl
Z2lzdGVyIHNyY0RzdCB0byBudW1iZXIsIGFkZHMgb25lLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0g
ICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3JjRHN0LgotICAgICAgICAqLwotICAgICAgICBp
bnQgc3JjRHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZy
YW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAodi5pc0ludDMyKCkgJiYgdi5h
c0ludDMyKCkgPCBJTlRfTUFYKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNy
Y0RzdCkgPSBqc051bWJlcih2LmFzSW50MzIoKSArIDEpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodi50b051bWJlcihjYWxsRnJhbWUpICsg
MSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3ByZV9pbmMpOwotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJlX2RlYykgewotICAgICAgICAv
KiBwcmVfZGVjIHNyY0RzdChyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJlZ2lzdGVyIHNyY0Rz
dCB0byBudW1iZXIsIHN1YnRyYWN0cyBvbmUsIGFuZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAg
ICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBzcmNE
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIo
c3JjRHN0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAmJiB2LmFzSW50MzIo
KSA+IElOVF9NSU4pCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9
IGpzTnVtYmVyKHYuYXNJbnQzMigpIC0gMSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcih2LnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKLSAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzcmNEc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcHJlX2RlYyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wb3N0X2luYykgewotICAgICAgICAvKiBwb3N0
X2luYyBkc3Qocikgc3JjRHN0KHIpCi0KLSAgICAgICAgICAgQ29udmVydHMgcmVnaXN0ZXIgc3Jj
RHN0IHRvIG51bWJlci4gVGhlIG51bWJlciBpdHNlbGYgaXMKLSAgICAgICAgICAgd3JpdHRlbiB0
byByZWdpc3RlciBkc3QsIGFuZCB0aGUgbnVtYmVyIHBsdXMgb25lIGlzIHdyaXR0ZW4KLSAgICAg
ICAgICAgYmFjayB0byByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjRHN0ID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgp
OwotICAgICAgICBpZiAodi5pc0ludDMyKCkgJiYgdi5hc0ludDMyKCkgPCBJTlRfTUFYKSB7Ci0g
ICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpzTnVtYmVyKHYuYXNJ
bnQzMigpICsgMSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHY7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb3VibGUgbnVtYmVyID0gY2FsbEZyYW1l
LT5yKHNyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
c3JjRHN0KSA9IGpzTnVtYmVyKG51bWJlciArIDEpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcG9zdF9pbmMpOwotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcG9zdF9kZWMpIHsKLSAgICAgICAg
LyogcG9zdF9kZWMgZHN0KHIpIHNyY0RzdChyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJlZ2lz
dGVyIHNyY0RzdCB0byBudW1iZXIuIFRoZSBudW1iZXIgaXRzZWxmIGlzCi0gICAgICAgICAgIHdy
aXR0ZW4gdG8gcmVnaXN0ZXIgZHN0LCBhbmQgdGhlIG51bWJlciBtaW51cyBvbmUgaXMgd3JpdHRl
bgotICAgICAgICAgICBiYWNrIHRvIHJlZ2lzdGVyIHNyY0RzdC4KLSAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmNEc3QgPSB2UENb
Ml0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoc3JjRHN0KS5q
c1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAmJiB2LmFzSW50MzIoKSA+IElOVF9N
SU4pIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0ganNOdW1i
ZXIodi5hc0ludDMyKCkgLSAxKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gdjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBj
YWxsRnJhbWUtPnIoc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoY2FsbEZyYW1lKTsKLSAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihzcmNEc3QpID0ganNOdW1iZXIobnVtYmVyIC0gMSk7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKG51bWJlcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wb3N0X2RlYyk7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF90b19qc251bWJlcikg
ewotICAgICAgICAvKiB0b19qc251bWJlciBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgQ29u
dmVydHMgcmVnaXN0ZXIgc3JjIHRvIG51bWJlciwgYW5kIHB1dHMgdGhlIHJlc3VsdAotICAgICAg
ICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAg
ICAgICBKU1ZhbHVlIHNyY1ZhbCA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKTsKLQotICAg
ICAgICBpZiAoTElLRUxZKHNyY1ZhbC5pc051bWJlcigpKSkKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZyYW1lLT5yKHNyYyk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IHNyY1ZhbC50b051bWJlcihjYWxsRnJhbWUpOwot
ICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdG9fanNudW1iZXIpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbmVnYXRlKSB7Ci0gICAg
ICAgIC8qIG5lZ2F0ZSBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgQ29udmVydHMgcmVnaXN0
ZXIgc3JjIHRvIG51bWJlciwgbmVnYXRlcyBpdCwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJl
c3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYyA9IGNhbGxGcmFtZS0+cih2UENbMl0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMuaXNJbnQzMigpICYmIChzcmMu
YXNJbnQzMigpICYgMHg3ZmZmZmZmZikpIC8vIG5vbi16ZXJvIGFuZCBubyBvdmVyZmxvdwotICAg
ICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcigtc3JjLmFzSW50
MzIoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcigtc3JjLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1
bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9uZWdhdGUp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfYWRkKSB7Ci0gICAgICAgIC8qIGFkZCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAg
ICAgICAgQWRkcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyLCBhbmQgcHV0cyB0aGUg
cmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4gKEpTIGFkZCBtYXkgYmUgc3RyaW5n
IGNvbmNhdGVuYXRpb24gb3IKLSAgICAgICAgICAgbnVtZXJpYyBhZGQsIGRlcGVuZGluZyBvbiB0
aGUgdHlwZXMgb2YgdGhlIG9wZXJhbmRzLikKLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2
UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxG
cmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlz
SW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIoKSB8IHNyYzIuYXNJ
bnQzMigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSArIHNyYzIuYXNJ
bnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
QWRkKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9hZGQpOwotICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbXVsKSB7
Ci0gICAgICAgIC8qIG11bCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgTXVs
dGlwbGllcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIChjb252ZXJ0ZWQgdG8KLSAg
ICAgICAgICAgbnVtYmVycyksIGFuZCBwdXRzIHRoZSBwcm9kdWN0IGluIHJlZ2lzdGVyIGRzdC4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAm
JiAhKHNyYzEuYXNJbnQzMigpIHwgc3JjMi5hc0ludDMyKCkpID4+IDE1KSAvLyBubyBvdmVyZmxv
dwotICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIo
c3JjMS5hc0ludDMyKCkgKiBzcmMyLmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzcmMxLnRvTnVtYmVyKGNhbGxGcmFtZSkg
KiBzcmMyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9tdWwpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZGl2
KSB7Ci0gICAgICAgIC8qIGRpdiBkc3QocikgZGl2aWRlbmQocikgZGl2aXNvcihyKQotCi0gICAg
ICAgICAgIERpdmlkZXMgcmVnaXN0ZXIgZGl2aWRlbmQgKGNvbnZlcnRlZCB0byBudW1iZXIpIGJ5
IHRoZQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQgdG8gbnVtYmVyKSwg
YW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHF1b3RpZW50IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFs
dWUgZGl2aWRlbmQgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwot
ICAgICAgICBKU1ZhbHVlIGRpdmlzb3IgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZGl2aWRlbmQu
dG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3IudG9OdW1iZXIoY2FsbEZyYW1lKSk7Ci0gICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZGl2KTsK
LSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9w
X21vZCkgewotICAgICAgICAvKiBtb2QgZHN0KHIpIGRpdmlkZW5kKHIpIGRpdmlzb3IocikKLQot
ICAgICAgICAgICBEaXZpZGVzIHJlZ2lzdGVyIGRpdmlkZW5kIChjb252ZXJ0ZWQgdG8gbnVtYmVy
KSBieQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQgdG8gbnVtYmVyKSwg
YW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlbWFpbmRlciBpbiByZWdpc3RlciBkc3QuCi0gICAg
ICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlIGRpdmlkZW5kID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSBkaXZpc29yID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoZGl2aWRlbmQuaXNJbnQzMigpICYmIGRpdmlzb3Iu
aXNJbnQzMigpICYmIGRpdmlzb3IuYXNJbnQzMigpICE9IDAgJiYgZGl2aXNvci5hc0ludDMyKCkg
IT0gLTEpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZGl2aWRlbmQu
YXNJbnQzMigpICUgZGl2aXNvci5hc0ludDMyKCkpOwotICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAg
ICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX21vZCk7Ci0gICAgICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb252ZXJzaW9uIHRvIGRv
dWJsZSBtdXN0IGhhcHBlbiBvdXRzaWRlIHRoZSBjYWxsIHRvIGZtb2Qgc2luY2UgdGhlCi0gICAg
ICAgIC8vIG9yZGVyIG9mIGFyZ3VtZW50IGV2YWx1YXRpb24gaXMgbm90IGd1YXJhbnRlZWQuCi0g
ICAgICAgIGRvdWJsZSBkMSA9IGRpdmlkZW5kLnRvTnVtYmVyKGNhbGxGcmFtZSk7Ci0gICAgICAg
IGRvdWJsZSBkMiA9IGRpdmlzb3IudG9OdW1iZXIoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihmbW9kKGQxLCBkMikpOwotICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0Owot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9tb2QpOwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfc3ViKSB7Ci0gICAgICAgIC8q
IHN1YiBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgU3VidHJhY3RzIHJlZ2lz
dGVyIHNyYzIgKGNvbnZlcnRlZCB0byBudW1iZXIpIGZyb20gcmVnaXN0ZXIKLSAgICAgICAgICAg
c3JjMSAoY29udmVydGVkIHRvIG51bWJlciksIGFuZCBwdXRzIHRoZSBkaWZmZXJlbmNlIGluCi0g
ICAgICAgICAgIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENb
Ml0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFt
ZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50
MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIoKSB8IHNyYzIuYXNJbnQz
MigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSAtIHNyYzIuYXNJbnQz
MigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKHNyYzEudG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzIudG9OdW1iZXIoY2FsbEZyYW1lKSk7
Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9zdWIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfbHNoaWZ0KSB7Ci0gICAgICAgIC8qIGxzaGlmdCBkc3Qo
cikgdmFsKHIpIHNoaWZ0KHIpCi0KLSAgICAgICAgICAgUGVyZm9ybXMgbGVmdCBzaGlmdCBvZiBy
ZWdpc3RlciB2YWwgKGNvbnZlcnRlZCB0byBpbnQzMikgYnkKLSAgICAgICAgICAgcmVnaXN0ZXIg
c2hpZnQgKGNvbnZlcnRlZCB0byB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAg
ICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51
Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9IGNhbGxGcmFtZS0+
cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHZhbC5pc0ludDMy
KCkgJiYgc2hpZnQuaXNJbnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBqc051bWJlcih2YWwuYXNJbnQzMigpIDw8IChzaGlmdC5hc0ludDMyKCkgJiAweDFm
KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cigodmFsLnRvSW50MzIoY2FsbEZyYW1lKSkgPDwgKHNoaWZ0LnRvVUludDMyKGNhbGxGcmFtZSkg
JiAweDFmKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xzaGlmdCk7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yc2hpZnQpIHsKLSAgICAgICAg
LyogcnNoaWZ0IGRzdChyKSB2YWwocikgc2hpZnQocikKLQotICAgICAgICAgICBQZXJmb3JtcyBh
cml0aG1ldGljIHJpZ2h0IHNoaWZ0IG9mIHJlZ2lzdGVyIHZhbCAoY29udmVydGVkCi0gICAgICAg
ICAgIHRvIGludDMyKSBieSByZWdpc3RlciBzaGlmdCAoY29udmVydGVkIHRvCi0gICAgICAgICAg
IHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAq
LwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSB2
YWwgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBK
U1ZhbHVlIHNoaWZ0ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LQotICAgICAgICBpZiAodmFsLmlzSW50MzIoKSAmJiBzaGlmdC5pc0ludDMyKCkpCi0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHZhbC5hc0ludDMyKCkg
Pj4gKHNoaWZ0LmFzSW50MzIoKSAmIDB4MWYpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwudG9JbnQzMihjYWxsRnJhbWUpKSA+PiAo
c2hpZnQudG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKLSAgICAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
cmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcnNo
aWZ0KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX3Vyc2hpZnQpIHsKLSAgICAgICAgLyogcnNoaWZ0IGRzdChyKSB2YWwocikgc2hpZnQo
cikKLQotICAgICAgICAgICBQZXJmb3JtcyBsb2dpY2FsIHJpZ2h0IHNoaWZ0IG9mIHJlZ2lzdGVy
IHZhbCAoY29udmVydGVkCi0gICAgICAgICAgIHRvIHVpbnQzMikgYnkgcmVnaXN0ZXIgc2hpZnQg
KGNvbnZlcnRlZCB0bwotICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGlu
IHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJh
bmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9IGNhbGxGcmFtZS0+cih2UENb
M10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWwuaXNVSW50MzIoKSAmJiBz
aGlmdC5pc0ludDMyKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9
IGpzTnVtYmVyKHZhbC5hc0ludDMyKCkgPj4gKHNoaWZ0LmFzSW50MzIoKSAmIDB4MWYpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwu
dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFm
KSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX3Vyc2hpZnQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfYml0YW5kKSB7Ci0gICAgICAgIC8qIGJp
dGFuZCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ29tcHV0ZXMgYml0d2lz
ZSBBTkQgb2YgcmVnaXN0ZXIgc3JjMSAoY29udmVydGVkIHRvIGludDMyKQotICAgICAgICAgICBh
bmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRvIGludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3Vs
dAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUt
PnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBj
YWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoc3Jj
MS5pc0ludDMyKCkgJiYgc3JjMi5pc0ludDMyKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHNyYzEuYXNJbnQzMigpICYgc3JjMi5hc0ludDMyKCkp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
c3JjMS50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMyLnRvSW50MzIoY2FsbEZyYW1lKSk7Ci0gICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2JpdGFuZCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9
Ci0gICAgREVGSU5FX09QQ09ERShvcF9iaXR4b3IpIHsKLSAgICAgICAgLyogYml0eG9yIGRzdChy
KSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3aXNlIFhPUiBvZiBy
ZWdpc3RlciBzcmMxIChjb252ZXJ0ZWQgdG8gaW50MzIpCi0gICAgICAgICAgIGFuZCByZWdpc3Rl
ciBzcmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAg
ICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIo
KSAmJiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0ganNOdW1iZXIoc3JjMS5hc0ludDMyKCkgXiBzcmMyLmFzSW50MzIoKSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzcmMxLnRvSW50
MzIoY2FsbEZyYW1lKSBeIHNyYzIudG9JbnQzMihjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfYml0eG9yKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX2JpdG9yKSB7Ci0gICAgICAgIC8qIGJpdG9yIGRzdChyKSBzcmMxKHIpIHNy
YzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3aXNlIE9SIG9mIHJlZ2lzdGVyIHNyYzEg
KGNvbnZlcnRlZCB0byBpbnQzMikKLSAgICAgICAgICAgYW5kIHJlZ2lzdGVyIHNyYzIgKGNvbnZl
cnRlZCB0byBpbnQzMiksIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1bHQgaW4gcmVnaXN0
ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKHNyYzEuaXNJbnQzMigpICYmIHNyYzIuaXNJ
bnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJl
cihzcmMxLmFzSW50MzIoKSB8IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHNyYzEudG9JbnQzMihjYWxsRnJhbWUp
IHwgc3JjMi50b0ludDMyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9iaXRvcik7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9u
b3QpIHsKLSAgICAgICAgLyogbm90IGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBDb21wdXRl
cyBsb2dpY2FsIE5PVCBvZiByZWdpc3RlciBzcmMgKGNvbnZlcnRlZCB0bwotICAgICAgICAgICBi
b29sZWFuKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICov
Ci0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIWNh
bGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7Ci0gICAgICAg
IENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfbm90KTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2No
ZWNrX2hhc19pbnN0YW5jZSkgewotICAgICAgICAvKiBjaGVja19oYXNfaW5zdGFuY2UgY29uc3Ry
dWN0b3IocikKLQotICAgICAgICAgICBDaGVjayAnY29uc3RydWN0b3InIGlzIGFuIG9iamVjdCB3
aXRoIHRoZSBpbnRlcm5hbCBwcm9wZXJ0eQotICAgICAgICAgICBbSGFzSW5zdGFuY2VdIChpLmUu
IGlzIGEgZnVuY3Rpb24gLi4uICpzaGFrZXMgaGVhZCBzYWRseSBhdAotICAgICAgICAgICBKU0Mg
QVBJKikuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgcmVnaXN0ZXIgY29uc3RydWN0b3IgaXMgbm90
Ci0gICAgICAgICAgIGFuIHZhbGlkIHBhcmFtZXRlciBmb3IgaW5zdGFuY2VvZi4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
IGJhc2VWYWwgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChp
c0ludmFsaWRQYXJhbUZvckluc3RhbmNlT2YoY2FsbEZyYW1lLCBiYXNlVmFsLCBleGNlcHRpb25W
YWx1ZSkpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2NoZWNrX2hhc19pbnN0YW5jZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pbnN0YW5jZW9mKSB7Ci0gICAgICAg
IC8qIGluc3RhbmNlb2YgZHN0KHIpIHZhbHVlKHIpIGNvbnN0cnVjdG9yKHIpIGNvbnN0cnVjdG9y
UHJvdG8ocikKLQotICAgICAgICAgICBUZXN0cyB3aGV0aGVyIHJlZ2lzdGVyIHZhbHVlIGlzIGFu
IGluc3RhbmNlIG9mIHJlZ2lzdGVyCi0gICAgICAgICAgIGNvbnN0cnVjdG9yLCBhbmQgcHV0cyB0
aGUgYm9vbGVhbiByZXN1bHQgaW4gcmVnaXN0ZXIKLSAgICAgICAgICAgZHN0LiBSZWdpc3RlciBj
b25zdHJ1Y3RvclByb3RvIG11c3QgY29udGFpbiB0aGUgInByb3RvdHlwZSIKLSAgICAgICAgICAg
cHJvcGVydHkgKG5vdCB0aGUgYWN0dWFsIHByb3RvdHlwZSkgb2YgdGhlIG9iamVjdCBpbgotICAg
ICAgICAgICByZWdpc3RlciBjb25zdHJ1Y3Rvci4gVGhpcyBsb29rdXAgaXMgc2VwYXJhdGVkIHNv
IHRoYXQKLSAgICAgICAgICAgcG9seW1vcnBoaWMgaW5saW5lIGNhY2hpbmcgY2FuIGFwcGx5Lgot
Ci0gICAgICAgICAgIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgcmVnaXN0ZXIgY29uc3RydWN0b3Ig
aXMgbm90IGFuCi0gICAgICAgICAgIG9iamVjdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGJh
c2VQcm90byA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsID0g
Y2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLQotICAgICAgICBBU1NFUlQoIWlzSW52YWxp
ZFBhcmFtRm9ySW5zdGFuY2VPZihjYWxsRnJhbWUsIGJhc2VWYWwsIGV4Y2VwdGlvblZhbHVlKSk7
Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlVmFsKS0+bWV0aG9kVGFibGUo
KS0+aGFzSW5zdGFuY2UoYXNPYmplY3QoYmFzZVZhbCksIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5y
KHZhbHVlKS5qc1ZhbHVlKCksIGNhbGxGcmFtZS0+cihiYXNlUHJvdG8pLmpzVmFsdWUoKSk7Ci0g
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBqc0Jvb2xlYW4ocmVzdWx0KTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9pbnN0YW5jZW9mKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX3R5cGVvZikgewotICAgICAgICAvKiB0eXBlb2YgZHN0KHIp
IHNyYyhyKQotCi0gICAgICAgICAgIERldGVybWluZXMgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMg
YWNjb3JkaW5nIHRvIEVDTUFTY3JpcHQKLSAgICAgICAgICAgcnVsZXMsIGFuZCBwdXRzIHRoZSBy
ZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShqc1R5cGVTdHJpbmdGb3JW
YWx1ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKSkpOwotCi0gICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3R5cGVvZik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pc191bmRlZmluZWQpIHsKLSAgICAg
ICAgLyogaXNfdW5kZWZpbmVkIGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBEZXRlcm1pbmVz
IHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCi0gICAgICAgICAg
IHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJ1bmRlZmluZWQiLCBhbmQgcHV0cyB0aGUgcmVzdWx0
Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHYuaXNDZWxsKCkgPyB2
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChjYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkgOiB2LmlzVW5kZWZpbmVkKCkpOwotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2lzX3VuZGVmaW5lZCk7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pc19ib29sZWFuKSB7Ci0gICAg
ICAgIC8qIGlzX2Jvb2xlYW4gZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVybWluZXMg
d2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAgICAgICAg
dGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgImJvb2xlYW4iLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0g
ICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihjYWxsRnJhbWUt
PnIoc3JjKS5qc1ZhbHVlKCkuaXNCb29sZWFuKCkpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX2lzX2Jvb2xlYW4pOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfaXNfbnVtYmVyKSB7Ci0gICAgICAgIC8qIGlzX251bWJl
ciBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0eXBl
IHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bwotICAgICAgICAgICB0aGUgRUNNQVNjcmlwdCBy
dWxlcyBpcyAibnVtYmVyIiwgYW5kIHB1dHMgdGhlIHJlc3VsdAotICAgICAgICAgICBpbiByZWdp
c3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgp
LmlzTnVtYmVyKCkpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2lzX251bWJl
cik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF9pc19zdHJpbmcpIHsKLSAgICAgICAgLyogaXNfc3RyaW5nIGRzdChyKSBzcmMocikKLQot
ICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNj
b3JkaW5nIHRvCi0gICAgICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJzdHJpbmciLCBh
bmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9
IGpzQm9vbGVhbihjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkuaXNTdHJpbmcoKSk7Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfc3RyaW5nKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX29iamVjdCkgewot
ICAgICAgICAvKiBpc19vYmplY3QgZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVybWlu
ZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAgICAg
ICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgIm9iamVjdCIsIGFuZCBwdXRzIHRoZSByZXN1bHQK
LSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGpzSXNPYmpl
Y3RUeXBlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpKSk7Ci0KLSAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfb2JqZWN0KTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX2Z1bmN0aW9uKSB7Ci0g
ICAgICAgIC8qIGlzX2Z1bmN0aW9uIGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBEZXRlcm1p
bmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCi0gICAgICAg
ICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJmdW5jdGlvbiIsIGFuZCBwdXRzIHRoZSByZXN1
bHQKLSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQg
ZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGpzSXNG
dW5jdGlvblR5cGUoY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpKSk7Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfZnVuY3Rpb24pOwotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfaW4pIHsKLSAgICAgICAgLyogaW4g
ZHN0KHIpIHByb3BlcnR5KHIpIGJhc2UocikKLQotICAgICAgICAgICBUZXN0cyB3aGV0aGVyIHJl
Z2lzdGVyIGJhc2UgaGFzIGEgcHJvcGVydHkgbmFtZWQgcmVnaXN0ZXIKLSAgICAgICAgICAgcHJv
cGVydHksIGFuZCBwdXRzIHRoZSBib29sZWFuIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0KLSAg
ICAgICAgICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiByZWdpc3RlciBjb25zdHJ1Y3RvciBpcyBu
b3QgYW4KLSAgICAgICAgICAgb2JqZWN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IGJhc2UgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAgIEpTVmFs
dWUgYmFzZVZhbCA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChp
c0ludmFsaWRQYXJhbUZvckluKGNhbGxGcmFtZSwgYmFzZVZhbCwgZXhjZXB0aW9uVmFsdWUpKQot
ICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9
IGFzT2JqZWN0KGJhc2VWYWwpOwotCi0gICAgICAgIEpTVmFsdWUgcHJvcE5hbWUgPSBjYWxsRnJh
bWUtPnIocHJvcGVydHkpLmpzVmFsdWUoKTsKLQotICAgICAgICB1aW50MzJfdCBpOwotICAgICAg
ICBpZiAocHJvcE5hbWUuZ2V0VUludDMyKGkpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBp
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzTmFtZShwcm9wTmFtZSkpCi0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihwcm9wTmFtZS5hc0NlbGwoKSktPnByaXZh
dGVOYW1lKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5KGNhbGxGcmFtZSwgcHJvcE5hbWUudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0
eShjYWxsRnJhbWUsIHByb3BlcnR5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BD
T0RFX0xFTkdUSChvcF9pbik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0g
ICAgREVGSU5FX09QQ09ERShvcF9yZXNvbHZlKSB7Ci0gICAgICAgIC8qIHJlc29sdmUgZHN0KHIp
IHByb3BlcnR5KGlkKQotCi0gICAgICAgICAgIExvb2tzIHVwIHRoZSBwcm9wZXJ0eSBuYW1lZCBi
eSBpZGVudGlmaWVyIHByb3BlcnR5IGluIHRoZQotICAgICAgICAgICBzY29wZSBjaGFpbiwgYW5k
IHdyaXRlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHJlZ2lzdGVyCi0gICAgICAgICAgIGRzdC4g
SWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBw
cm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgaWRlbnQpOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29s
dmUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfcmVzb2x2ZV9za2lwKSB7Ci0gICAgICAgIC8qIHJlc29sdmVfc2tpcCBkc3QocikgcHJv
cGVydHkoaWQpIHNraXAobikKLQotICAgICAgICAgTG9va3MgdXAgdGhlIHByb3BlcnR5IG5hbWVk
IGJ5IGlkZW50aWZpZXIgcHJvcGVydHkgaW4gdGhlCi0gICAgICAgICBzY29wZSBjaGFpbiBza2lw
cGluZyB0aGUgdG9wICdza2lwJyBsZXZlbHMsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdGluZwotICAg
ICAgICAgdmFsdWUgdG8gcmVnaXN0ZXIgZHN0LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5k
LCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCBza2lwID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsK
LQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVTa2lwKGNhbGxGcmFt
ZSwgaWRlbnQsIHNraXApOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX3Jlc29sdmVfc2tpcCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yZXNvbHZlX2dsb2JhbCkgewotICAgICAg
ICAvKiByZXNvbHZlX3NraXAgZHN0KHIpIGdsb2JhbE9iamVjdChjKSBwcm9wZXJ0eShpZCkgc3Ry
dWN0dXJlKHNJRCkgb2Zmc2V0KG4pCi0gICAgICAgICAKLSAgICAgICAgICAgUGVyZm9ybXMgYSBk
eW5hbWljIHByb3BlcnR5IGxvb2t1cCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBvbiB0aGUgcHJv
dmlkZWQKLSAgICAgICAgICAgZ2xvYmFsIG9iamVjdC4gIElmIHN0cnVjdHVyZSBtYXRjaGVzIHRo
ZSBTdHJ1Y3R1cmUgb2YgdGhlIGdsb2JhbCB0aGVuIHBlcmZvcm0KLSAgICAgICAgICAgYSBmYXN0
IGxvb2t1cCB1c2luZyB0aGUgY2FzZSBvZmZzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYSBm
dWxsIHJlc29sdmUgYW5kCi0gICAgICAgICAgIGNhY2hlIHRoZSBuZXcgc3RydWN0dXJlIGFuZCBv
ZmZzZXQKLSAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlm
aWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkp
OwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUdsb2JhbCgKLSAg
ICAgICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgICAgIGlkZW50LAotICAgICAgICAgICAgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksCi0gICAgICAgICAgICAmdlBDWzNdLnUuc3Ry
dWN0dXJlLAotICAgICAgICAgICAgJnZQQ1s0XS51Lm9wZXJhbmQKLSAgICAgICAgKTsKLSAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZl
X2dsb2JhbCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5F
X09QQ09ERShvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKSB7Ci0gICAgICAgIC8qIHJlc29sdmVf
c2tpcCBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBv
ZmZzZXQobiksIGRlcHRoKG4pCi0gICAgICAgICAKLSAgICAgICAgIFBlcmZvcm1zIGEgZHluYW1p
YyBwcm9wZXJ0eSBsb29rdXAgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgb24gdGhlIHByb3ZpZGVk
Ci0gICAgICAgICBnbG9iYWwgb2JqZWN0LiAgSWYgc3RydWN0dXJlIG1hdGNoZXMgdGhlIFN0cnVj
dHVyZSBvZiB0aGUgZ2xvYmFsIHRoZW4gcGVyZm9ybQotICAgICAgICAgYSBmYXN0IGxvb2t1cCB1
c2luZyB0aGUgY2FzZSBvZmZzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYSBmdWxsIHJlc29s
dmUgYW5kCi0gICAgICAgICBjYWNoZSB0aGUgbmV3IHN0cnVjdHVyZSBhbmQgb2Zmc2V0LgotICAg
ICAgICAgCi0gICAgICAgICBUaGlzIHdhbGtzIHRocm91Z2ggbiBsZXZlbHMgb2YgdGhlIHNjb3Bl
IGNoYWluIHRvIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhvc2UgbGV2ZWxzCi0gICAgICAgICBpbiB0
aGUgc2NvcGUgY2hhaW4gaW5jbHVkZSBkeW5hbWljYWxseSBhZGRlZCBwcm9wZXJ0aWVzLgotICAg
ICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlu
dCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBza2lwID0gdlBDWzVd
LnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTU2NvcGU6OnJlc29sdmVHbG9iYWxEeW5hbWljKGNhbGxGcmFtZSwgaWRlbnQsIHNraXAsICZ2
UENbM10udS5zdHJ1Y3R1cmUsICZ2UENbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3Vs
dDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2dsb2JhbF9keW5h
bWljKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2dldF9nbG9iYWxfdmFyKSB7Ci0gICAgICAgIC8qIGdldF9nbG9iYWxfdmFyIGRzdChy
KSBnbG9iYWxPYmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4pCi0KLSAgICAgICAgICAgR2V0cyB0
aGUgZ2xvYmFsIHZhciBhdCBnbG9iYWwgc2xvdCBpbmRleCBhbmQgcGxhY2VzIGl0IGluIHJlZ2lz
dGVyIGRzdC4KLSAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1sy
XS51LnJlZ2lzdGVyUG9pbnRlcjsKLQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlZ2lzdGVyUG9pbnRlci0+Z2V0KCk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2dldF9nbG9iYWxfdmFyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9nbG9iYWxfdmFyX3dhdGNoYWJsZSkgewotICAgICAg
ICAvKiBnZXRfZ2xvYmFsX3Zhcl93YXRjaGFibGUgZHN0KHIpIGdsb2JhbE9iamVjdChjKSByZWdp
c3RlclBvaW50ZXIobikKLQotICAgICAgICAgICBHZXRzIHRoZSBnbG9iYWwgdmFyIGF0IGdsb2Jh
bCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAgKi8K
LSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gdlBDWzJdLnUucmVnaXN0ZXJQb2ludGVyOwot
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVnaXN0ZXJQb2ludGVyLT5n
ZXQoKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dsb2JhbF92YXJfd2F0
Y2hhYmxlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVf
T1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KQotICAgIERFRklORV9PUENPREUob3BfcHV0X2ds
b2JhbF92YXIpIHsKLSAgICAgICAgLyogcHV0X2dsb2JhbF92YXIgZ2xvYmFsT2JqZWN0KGMpIHJl
Z2lzdGVyUG9pbnRlcihuKSB2YWx1ZShyKQotICAgICAgICAgCi0gICAgICAgICAgIFB1dHMgdmFs
dWUgaW50byBnbG9iYWwgc2xvdCBpbmRleC4KLSAgICAgICAgICovCi0gICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIEFTU0VS
VChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyID0gdlBDWzFdLnUucmVnaXN0ZXJQb2ludGVyOwotICAgICAgICBp
bnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgcmVnaXN0ZXJQ
b2ludGVyLT5zZXQoKmdsb2JhbERhdGEsIHNjb3BlLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFs
dWUoKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKTsK
LSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9w
X2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKQotICAgIERFRklORV9PUENPREUob3BfcHV0X2dsb2Jh
bF92YXJfY2hlY2spIHsKLSAgICAgICAgLyogcHV0X2dsb2JhbF92YXJfY2hlY2sgZ2xvYmFsT2Jq
ZWN0KGMpIHJlZ2lzdGVyUG9pbnRlcihuKSB2YWx1ZShyKQotICAgICAgICAgCi0gICAgICAgICAg
IFB1dHMgdmFsdWUgaW50byBnbG9iYWwgc2xvdCBpbmRleC4gSW4gSklUIGNvbmZpZ3VyYXRpb25z
IHRoaXMgd2lsbAotICAgICAgICAgICBwZXJmb3JtIGEgd2F0Y2hwb2ludCBjaGVjay4gSWYgd2Un
cmUgcnVubmluZyB3aXRoIHRoZSBvbGQgaW50ZXJwcmV0ZXIsCi0gICAgICAgICAgIHRoaXMgaXMg
bm90IG5lY2Vzc2FyeTsgdGhlIGludGVycHJldGVyIG5ldmVyIHVzZXMgdGhlc2Ugd2F0Y2hwb2lu
dHMuCi0gICAgICAgICAqLwotICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0
KCkpOwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQ
Q1sxXS51LnJlZ2lzdGVyUG9pbnRlcjsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgCi0gICAgICAgIHJlZ2lzdGVyUG9pbnRlci0+c2V0KCpnbG9iYWxEYXRh
LCBzY29wZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayk7Ci0gICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfc2NvcGVkX3Zhcikg
ewotICAgICAgICAvKiBnZXRfc2NvcGVkX3ZhciBkc3QocikgaW5kZXgobikgc2tpcChuKQotCi0g
ICAgICAgICBMb2FkcyB0aGUgY29udGVudHMgb2YgdGhlIGluZGV4LXRoIGxvY2FsIGZyb20gdGhl
IHNjb3BlIHNraXAgbm9kZXMgZnJvbQotICAgICAgICAgdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hh
aW4sIGFuZCBwbGFjZXMgaXQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAgKi8KLSAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBpbmRleCA9IHZQQ1syXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBza2lwID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBzY29wZS0+YmVnaW4oKTsKLSAgICAgICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGVuZCA9IHNjb3BlLT5lbmQoKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIg
IT0gZW5kKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpKTsKLSAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAg
ICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgICAgICBpZiAoY2hlY2tU
b3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29kZUJs
b2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICsr
aXRlcjsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc2tpcC0tKSB7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOwotICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChpdGVyLT5pc1ZhcmlhYmxlT2JqZWN0KCkpOwotICAgICAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2Jq
ZWN0Kj4oaXRlci5nZXQoKSk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
dmFyaWFibGVPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLmdldCgpOwotICAgICAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5yKGRzdCkuanNWYWx1ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfZ2V0X3Njb3BlZF92YXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfcHV0X3Njb3BlZF92YXIpIHsKLSAgICAgICAgLyogcHV0
X3Njb3BlZF92YXIgaW5kZXgobikgc2tpcChuKSB2YWx1ZShyKQotCi0gICAgICAgICAqLwotICAg
ICAgICBpbnQgaW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc2tpcCA9IHZQ
Q1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0K
LSAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGUtPmJlZ2luKCk7Ci0gICAgICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBlbmQgPSBzY29wZS0+ZW5kKCk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2sg
PT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBp
dGVyICE9IGVuZCk7Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KCk7Ci0gICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICAgICAgaWYg
KGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5y
KGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHNraXAtLSkgewotICAgICAg
ICAgICAgKytpdGVyOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5k
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChpdGVyLT5pc1ZhcmlhYmxlT2JqZWN0KCkp
OwotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1Zh
cmlhYmxlT2JqZWN0Kj4oaXRlci5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIo
dmFsdWUpLmpzVmFsdWUoKSk7Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5yZWdpc3RlckF0KGlu
ZGV4KS5zZXQoKmdsb2JhbERhdGEsIHZhcmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUtPnIodmFsdWUp
LmpzVmFsdWUoKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9zY29wZWRf
dmFyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX3Jlc29sdmVfYmFzZSkgewotICAgICAgICAvKiByZXNvbHZlX2Jhc2UgZHN0KHIpIHBy
b3BlcnR5KGlkKSBpc1N0cmljdChib29sKQotCi0gICAgICAgICAgIFNlYXJjaGVzIHRoZSBzY29w
ZSBjaGFpbiBmb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcKLSAgICAgICAgICAgaWRlbnRpZmllciBw
cm9wZXJ0eSwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgd3JpdGVzIGl0IHRvCi0gICAgICAgICAgIHJl
Z2lzdGVyIGRzdC4gSWYgbm9uZSBpcyBmb3VuZCBhbmQgaXNTdHJpY3QgaXMgZmFsc2UsIHRoZQot
ICAgICAgICAgICBvdXRlcm1vc3Qgc2NvcGUgKHdoaWNoIHdpbGwgYmUgdGhlIGdsb2JhbCBvYmpl
Y3QpIGlzCi0gICAgICAgICAgIHN0b3JlZCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBib29sIGlzU3RyaWN0ID0gdlBDWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2Nv
cGU6OnJlc29sdmVCYXNlKGNhbGxGcmFtZSwgaWRlbnQsIGlzU3RyaWN0KTsKLSAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9
IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2Jhc2Up
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cykgewotICAgICAgICAvKiBlbnN1cmVfcHJvcGVydHlf
ZXhpc3RzIGJhc2UocikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgVGhyb3dzIGFuIGV4Y2Vw
dGlvbiBpZiBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCBvbiBiYXNlCi0gICAgICAgICAqLwotICAg
ICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZVZh
bCA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWwpOwotICAgICAgICBpZiAoIWJhc2VPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJh
bWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVF
cnJvckZvckludmFsaWRHbG9iYWxBc3NpZ25tZW50KGNhbGxGcmFtZSwgaWRlbnQuc3RyaW5nKCkp
OwotICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcmVzb2x2ZV93aXRo
X2Jhc2UpIHsKLSAgICAgICAgLyogcmVzb2x2ZV93aXRoX2Jhc2UgYmFzZURzdChyKSBwcm9wRHN0
KHIpIHByb3BlcnR5KGlkKQotCi0gICAgICAgICAgIFNlYXJjaGVzIHRoZSBzY29wZSBjaGFpbiBm
b3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcKLSAgICAgICAgICAgaWRlbnRpZmllciBwcm9wZXJ0eSwg
YW5kIGlmIG9uZSBpcyBmb3VuZCwgd3JpdGVzIGl0IHRvCi0gICAgICAgICAgIHJlZ2lzdGVyIHNy
Y0RzdCwgYW5kIHRoZSByZXRyaWV2ZWQgcHJvcGVydHkgdmFsdWUgdG8gcmVnaXN0ZXIKLSAgICAg
ICAgICAgcHJvcERzdC4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmFpc2VzIGFuIGV4
Y2VwdGlvbi4KLQotICAgICAgICAgICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gZG9pbmcg
cmVzb2x2ZV9iYXNlIGZvbGxvd2VkIGJ5Ci0gICAgICAgICAgIHJlc29sdmUsIG9yIHJlc29sdmVf
YmFzZSBmb2xsb3dlZCBieSBnZXRfYnlfaWQsIGFzIGl0Ci0gICAgICAgICAgIGF2b2lkcyBkdXBs
aWNhdGUgaGFzaCBsb29rdXBzLgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZURzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wRHN0ID0gdlBDWzJdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAg
IEpTVmFsdWUgcHJvcCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUsIGlkZW50
LCAmY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJhc2VEc3QpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvcERzdCkgPSBwcm9w
OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsK
LSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9w
X3Jlc29sdmVfd2l0aF90aGlzKSB7Ci0gICAgICAgIC8qIHJlc29sdmVfd2l0aF90aGlzIHRoaXNE
c3QocikgcHJvcERzdChyKSBwcm9wZXJ0eShpZCkKLQotICAgICAgICAgICBTZWFyY2hlcyB0aGUg
c2NvcGUgY2hhaW4gZm9yIGFuIG9iamVjdCBjb250YWluaW5nCi0gICAgICAgICAgIGlkZW50aWZp
ZXIgcHJvcGVydHksIGFuZCBpZiBvbmUgaXMgZm91bmQsIHdyaXRlcyB0aGUKLSAgICAgICAgICAg
cmV0cmlldmVkIHByb3BlcnR5IHZhbHVlIHRvIHJlZ2lzdGVyIHByb3BEc3QsIGFuZCB0aGUKLSAg
ICAgICAgICAgdGhpcyBvYmplY3QgdG8gcGFzcyBpbiBhIGNhbGwgdG8gdGhpc0RzdC4KLQotICAg
ICAgICAgICBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4gZXhjZXB0aW9u
LgotICAgICAgICAqLwotICAgICAgICBpbnQgdGhpc0RzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBwcm9wRHN0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3Bl
cnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2Rl
QmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEpTVmFsdWUgcHJvcCA9IEpT
U2NvcGU6OnJlc29sdmVXaXRoVGhpcyhjYWxsRnJhbWUsIGlkZW50LCAmY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHRoaXNEc3QpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvcERzdCkgPSBwcm9wOwotCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfd2l0aF90aGlzKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9pZF9vdXRfb2Zf
bGluZSkKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9pZCkgewotICAgICAgICAvKiBnZXRf
YnlfaWQgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIG5vcChuKSBu
b3Aobikgbm9wKG4pCi0KLSAgICAgICAgICAgR2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3M6IEdldHMg
dGhlIHByb3BlcnR5IG5hbWVkIGJ5IGlkZW50aWZpZXIKLSAgICAgICAgICAgcHJvcGVydHkgZnJv
bSB0aGUgdmFsdWUgYmFzZSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0g
ICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBp
bnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1sz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFt
ZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGlk
ZW50LCBzbG90KTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAgICAgIHRy
eUNhY2hlR2V0QnlJRChjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFsdWUsIGlkZW50
LCBzbG90KTsKLQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKLSAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9pZF9z
ZWxmKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9zZWxmIGRzdChyKSBiYXNlKHIpIHByb3Bl
cnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pIG5vcChuKQotCi0gICAgICAg
ICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIGdldCBhIGNhY2hlZCBwcm9w
ZXJ0eSBmcm9tIHRoZQotICAgICAgICAgICB2YWx1ZSBiYXNlLiBJZiB0aGUgY2FjaGUgbWlzc2Vz
LCBvcF9nZXRfYnlfaWRfc2VsZiByZXZlcnRzIHRvCi0gICAgICAgICAgIG9wX2dldF9ieV9pZC4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0KLSAg
ICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0Nl
bGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlm
IChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIEpT
T2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwpOwotICAgICAgICAgICAgICAg
IGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIGludCBvZmZzZXQg
PSB2UENbNV0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3Qt
PmdldChjYWxsRnJhbWUsIGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkg
PT0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShiYXNlT2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQob2Zmc2V0KSk7Ci0KLSAgICAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfaWRfc2VsZik7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29k
ZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfZ2V0X2J5X2lkX3Byb3RvKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9p
ZF9wcm90byBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgcHJvdG90
eXBlU3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4pIG5vcChuKQotCi0gICAgICAgICAgIENhY2hlZCBw
cm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIGdldCBhIGNhY2hlZCBwcm9wZXJ0eSBmcm9tIHRo
ZQotICAgICAgICAgICB2YWx1ZSBiYXNlJ3MgcHJvdG90eXBlLiBJZiB0aGUgY2FjaGUgbWlzc2Vz
LCBvcF9nZXRfYnlfaWRfcHJvdG8KLSAgICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRfYnlfaWQu
Ci0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotCi0g
ICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICAgICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwotCi0gICAgICAgICAgICBp
ZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSku
aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNP
YmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSB2UENbNV0udS5zdHJ1Y3R1
cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHByb3RvT2JqZWN0LT5zdHJ1
Y3R1cmUoKSA9PSBwcm90b3R5cGVTdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gdlBDWzZdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG9P
YmplY3QtPmdldChjYWxsRnJhbWUsIGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbM10udS5vcGVy
YW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBjb2RlQmxvY2stPmlk
ZW50aWZpZXIodlBDWzNdLnUub3BlcmFuZCkpID09IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZz
ZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gSlNWYWx1ZShwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZF9wcm90
byk7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmNhY2hlR2V0QnlJ
RChjb2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0j
aWYgVVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAqKCYmc2tpcF9p
ZF9nZXR0ZXJfcHJvdG8pOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRf
Z2V0dGVyX3Byb3RvKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8gZHN0
KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIHByb3RvdHlwZVN0cnVjdHVy
ZShzSUQpIG9mZnNldChuKSBub3AobikKLSAgICAgICAgIAotICAgICAgICAgQ2FjaGVkIHByb3Bl
cnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIGdldHRlciBwcm9wZXJ0eSBmcm9t
IHRoZQotICAgICAgICAgdmFsdWUgYmFzZSdzIHByb3RvdHlwZS4gSWYgdGhlIGNhY2hlIG1pc3Nl
cywgb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bwotICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRf
YnlfaWQuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUo
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewot
ICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUo
KSA9PSBzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkuaXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAg
SlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVT
dHJ1Y3R1cmUgPSB2UENbNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKExJS0VMWShwcm90b09iamVjdC0+c3RydWN0dXJlKCkgPT0gcHJv
dG90eXBlU3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s2XS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KS5h
c0NlbGwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBn
ZXR0ZXJTZXR0ZXItPmdldHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBnZXR0
ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXNPYmplY3QoYmFzZUNlbGwpLCBBcmdMaXN0KCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvKTsKLSAgICAgICAg
ICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQ
Qyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01Q
VVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgc2tpcF9pZF9nZXR0ZXJfcHJvdG86Ci0jZW5kaWYK
LSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICooJiZza2lw
X2lkX2N1c3RvbV9wcm90byk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9p
ZF9jdXN0b21fcHJvdG8pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90byBk
c3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgcHJvdG90eXBlU3RydWN0
dXJlKHNJRCkgb2Zmc2V0KG4pIG5vcChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJv
cGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byB1c2UgYSBjYWNoZWQgbmFtZWQgcHJvcGVydHkgZ2V0
dGVyCi0gICAgICAgICBmcm9tIHRoZSB2YWx1ZSBiYXNlJ3MgcHJvdG90eXBlLiBJZiB0aGUgY2Fj
aGUgbWlzc2VzLCBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvCi0gICAgICAgICByZXZlcnRzIHRv
IG9wX2dldF9ieV9pZC4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSku
anNWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxs
KCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUu
Z2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0
cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0
dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKS5pc09iamVjdCgpKTsKLSAgICAgICAg
ICAgICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHBy
b3RvdHlwZVN0cnVjdHVyZSA9IHZQQ1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUo
KSA9PSBwcm90b3R5cGVTdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcGVydHkgPSB2
UENbM10udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXIgPSB2
UENbNl0udS5nZXR0ZXJGdW5jOwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGdldHRlcihjYWxsRnJhbWUsIHByb3RvT2JqZWN0LCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG8pOwotICAgICAgICAgICAgICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dP
VE9fV09SS0FST1VORCkKLSAgICBza2lwX2lkX2N1c3RvbV9wcm90bzoKLSNlbmRpZgotI2lmIFVT
RShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIGdvdG8gKigmJnNraXBfZ2V0X2J5
X2lkX2NoYWluKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lkX2NoYWlu
KSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9jaGFpbiBkc3QocikgYmFzZShyKSBwcm9wZXJ0
eShpZCkgc3RydWN0dXJlKHNJRCkgc3RydWN0dXJlQ2hhaW4oY2hhaW4pIGNvdW50KG4pIG9mZnNl
dChuKQotCi0gICAgICAgICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIGdl
dCBhIGNhY2hlZCBwcm9wZXJ0eSBmcm9tIHRoZQotICAgICAgICAgICB2YWx1ZSBiYXNlJ3MgcHJv
dG90eXBlIGNoYWluLiBJZiB0aGUgY2FjaGUgbWlzc2VzLCBvcF9nZXRfYnlfaWRfY2hhaW4KLSAg
ICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRfYnlfaWQuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBj
YWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZh
bHVlLmlzQ2VsbCgpKSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUu
c3RydWN0dXJlLmdldCgpOwotCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gdlBDWzVdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKLSAgICAgICAg
ICAgICAgICBzaXplX3QgY291bnQgPSB2UENbNl0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBlbmQgPSBpdCArIGNvdW50OwotCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmplY3QgPSBhc09iamVjdChiYXNlQ2VsbC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZvckxvb2t1
cChjYWxsRnJhbWUpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZU9i
amVjdC0+c3RydWN0dXJlKCkgIT0gKCppdCkuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCsraXQgPT0gZW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY29kZUJs
b2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJhbmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZh
bHVlLmdldChjYWxsRnJhbWUsIGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5k
KSkgPT0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGJhc2VPYmpl
Y3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2NoYWluKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBiYXNlQ2VsbCwgc28gdGhhdCBuZXh0IHRpbWUg
YXJvdW5kIHRoZSBsb29wIHdlJ2xsIHBpY2sgdXAgdGhlIHByb3RvdHlwZSdzIHByb3RvdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlT2JqZWN0OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVuY2FjaGVHZXRCeUlE
KGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNp
ZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBza2lwX2dldF9ieV9pZF9j
aGFpbjoKLSAgICBnb3RvICooJiZza2lwX2lkX2dldHRlcl9zZWxmKTsKLSNlbmRpZgotICAgIERF
RklORV9PUENPREUob3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmKSB7Ci0gICAgICAgIC8qIG9wX2dl
dF9ieV9pZF9zZWxmIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBv
ZmZzZXQobikgbm9wKG4pIG5vcChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJvcGVy
dHkgYWNjZXNzOiBBdHRlbXB0cyB0byBnZXQgYSBjYWNoZWQgcHJvcGVydHkgZnJvbSB0aGUKLSAg
ICAgICAgIHZhbHVlIGJhc2UuIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9nZXR0
ZXJfc2VsZiByZXZlcnRzIHRvCi0gICAgICAgICBvcF9nZXRfYnlfaWQuCi0gICAgICAgICAqLwot
ICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICAgICAgSlNDZWxsKiBi
YXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VDZWxsLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAg
ICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsKTsKLSAgICAgICAg
ICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgICAgIGlmIChHZXR0ZXJT
ZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGJhc2VPYmplY3QtPmdldERpcmVj
dE9mZnNldChvZmZzZXQpLmFzQ2VsbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVj
dCogZ2V0dGVyID0gZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGNhbGxGcmFtZSwgZ2V0
dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJhc2VPYmplY3QsIEFyZ0xpc3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNV
bmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9ieV9pZF9nZXR0ZXJfc2VsZik7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVC
bG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBVU0Uo
R0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBza2lwX2lkX2dldHRlcl9zZWxmOgot
I2VuZGlmCi0jaWYgVVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAq
KCYmc2tpcF9pZF9jdXN0b21fc2VsZik7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dl
dF9ieV9pZF9jdXN0b21fc2VsZikgewotICAgICAgICAvKiBvcF9nZXRfYnlfaWRfY3VzdG9tX3Nl
bGYgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIG9mZnNldChuKSBu
b3Aobikgbm9wKG4pCi0gICAgICAgICAKLSAgICAgICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6
IEF0dGVtcHRzIHRvIHVzZSBhIGNhY2hlZCBuYW1lZCBwcm9wZXJ0eSBnZXR0ZXIKLSAgICAgICAg
IGZyb20gdGhlIHZhbHVlIGJhc2UuIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9j
dXN0b21fc2VsZiByZXZlcnRzIHRvCi0gICAgICAgICBvcF9nZXRfYnlfaWQuCi0gICAgICAgICAq
LwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICAgICAgSlNDZWxs
KiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VDZWxsLT5pc09iamVjdCgpKTsKLSAgICAgICAg
ICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpbnQg
cHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLQotICAgICAgICAgICAg
ICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9IHZQQ1s1XS51LmdldHRlckZ1
bmM7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXR0ZXIoY2FsbEZyYW1lLCBi
YXNlVmFsdWUsIGlkZW50KTsKLSAgICAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
Ci0gICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2N1c3RvbV9z
ZWxmKTsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURfR09U
T19XT1JLQVJPVU5EKQotc2tpcF9pZF9jdXN0b21fc2VsZjoKLSNlbmRpZgotICAgIERFRklORV9P
UENPREUob3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2dl
bmVyaWMgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIG5vcChzSUQpIG5vcChuKSBub3Aobikg
bm9wKG4pCi0KLSAgICAgICAgICAgR2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3M6IEdldHMgdGhlIHBy
b3BlcnR5IG5hbWVkIGJ5IGlkZW50aWZpZXIKLSAgICAgICAgICAgcHJvcGVydHkgZnJvbSB0aGUg
dmFsdWUgYmFzZSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAg
ICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYmFz
ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9w
ZXJhbmQ7Ci0KLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihi
YXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGlkZW50LCBz
bG90KTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAqKCYm
c2tpcF9pZF9nZXR0ZXJfY2hhaW4pOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRf
YnlfaWRfZ2V0dGVyX2NoYWluKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hh
aW4gZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIHN0cnVjdHVyZUNo
YWluKGNoYWluKSBjb3VudChuKSBvZmZzZXQobikKLSAgICAgICAgIAotICAgICAgICAgQ2FjaGVk
IHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIHByb3BlcnR5IGZyb20g
dGhlCi0gICAgICAgICB2YWx1ZSBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLiBJZiB0aGUgY2FjaGUg
bWlzc2VzLCBvcF9nZXRfYnlfaWRfZ2V0dGVyX2NoYWluCi0gICAgICAgICByZXZlcnRzIHRvIG9w
X2dldF9ieV9pZC4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNW
YWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkp
KSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSB2UENbNV0udS5zdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOwotICAgICAgICAg
ICAgICAgIHNpemVfdCBjb3VudCA9IHZQQ1s2XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGVuZCA9IGl0ICsgY291bnQ7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2VsbC0+c3RydWN0dXJlKCktPnBy
b3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSAhPSAo
Kml0KS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICgrK2l0ID09IGVuZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzddLnUub3BlcmFuZDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0
dGVyKGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLmFzQ2VsbCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXIt
PmdldHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRh
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVy
LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBnZXR0
ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZVZhbHVlLCBBcmdMaXN0KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW4p
OwotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAv
LyBVcGRhdGUgYmFzZUNlbGwsIHNvIHRoYXQgbmV4dCB0aW1lIGFyb3VuZCB0aGUgbG9vcCB3ZSds
bCBwaWNrIHVwIHRoZSBwcm90b3R5cGUncyBwcm90b3R5cGUuCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VDZWxsID0gYmFzZU9iamVjdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURfR09U
T19XT1JLQVJPVU5EKQotICAgIHNraXBfaWRfZ2V0dGVyX2NoYWluOgotI2VuZGlmCi0jaWYgVVNF
KEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAqKCYmc2tpcF9pZF9jdXN0
b21fY2hhaW4pOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfY3VzdG9t
X2NoYWluKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW4gZHN0KHIpIGJh
c2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIHN0cnVjdHVyZUNoYWluKGNoYWluKSBj
b3VudChuKSBvZmZzZXQobikKLSAgICAgICAgIAotICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFj
Y2VzczogQXR0ZW1wdHMgdG8gdXNlIGEgY2FjaGVkIG5hbWVkIHByb3BlcnR5IGdldHRlciBvbiB0
aGUKLSAgICAgICAgIHZhbHVlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4uIElmIHRoZSBjYWNoZSBt
aXNzZXMsIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW4KLSAgICAgICAgIHJldmVydHMgdG8gb3Bf
Z2V0X2J5X2lkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1Zh
bHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkp
IHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5nZXQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0
dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KiBpdCA9IHZQQ1s1XS51LnN0cnVjdHVyZUNoYWluLT5oZWFkKCk7Ci0gICAgICAgICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gdlBDWzZdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiogZW5kID0gaXQgKyBjb3VudDsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICBK
U09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpICE9ICgq
aXQpLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCsraXQgPT0gZW5kKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihw
cm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9IHZQQ1s3XS51LmdldHRlckZ1
bmM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldHRlcihjYWxs
RnJhbWUsIGJhc2VPYmplY3QsIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBiYXNlQ2VsbCwg
c28gdGhhdCBuZXh0IHRpbWUgYXJvdW5kIHRoZSBsb29wIHdlJ2xsIHBpY2sgdXAgdGhlIHByb3Rv
dHlwZSdzIHByb3RvdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlT2Jq
ZWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAg
c2tpcF9pZF9jdXN0b21fY2hhaW46Ci0gICAgZ290byAqKCYmc2tpcF9nZXRfYXJyYXlfbGVuZ3Ro
KTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfZ2V0X2FycmF5X2xlbmd0aCkgewotICAg
ICAgICAvKiBvcF9nZXRfYXJyYXlfbGVuZ3RoIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBu
b3Aoc0lEKSBub3Aobikgbm9wKG4pIG5vcChuKQotCi0gICAgICAgICAgIENhY2hlZCBwcm9wZXJ0
eSBhY2Nlc3M6IEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaW4gcmVnaXN0ZXIgYmFzZSwK
LSAgICAgICAgICAgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuIElmIHJlZ2lz
dGVyIGJhc2UgZG9lcyBub3QgaG9sZAotICAgICAgICAgICBhbiBhcnJheSwgb3BfZ2V0X2FycmF5
X2xlbmd0aCByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KLSAgICAgICAgKi8KLQotICAgICAgICBp
bnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
Y2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKExJS0VMWShpc0pTQXJy
YXkoYmFzZVZhbHVlKSkpIHsKLSAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihhc0Fy
cmF5KGJhc2VWYWx1ZSktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9hcnJheV9sZW5ndGgpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURf
R09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBnb3RvICoo
JiZza2lwX2dldF9zdHJpbmdfbGVuZ3RoKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3Bf
Z2V0X3N0cmluZ19sZW5ndGgpIHsKLSAgICAgICAgLyogb3BfZ2V0X3N0cmluZ19sZW5ndGggZHN0
KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIG5vcChzSUQpIG5vcChuKSBub3Aobikgbm9wKG4pCi0K
LSAgICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogR2V0cyB0aGUgbGVuZ3RoIG9mIHRo
ZSBzdHJpbmcgaW4gcmVnaXN0ZXIgYmFzZSwKLSAgICAgICAgICAgYW5kIHB1dHMgdGhlIHJlc3Vs
dCBpbiByZWdpc3RlciBkc3QuIElmIHJlZ2lzdGVyIGJhc2UgZG9lcyBub3QgaG9sZAotICAgICAg
ICAgICBhIHN0cmluZywgb3BfZ2V0X3N0cmluZ19sZW5ndGggcmV2ZXJ0cyB0byBvcF9nZXRfYnlf
aWQuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIGlmIChMSUtFTFkoaXNKU1N0cmluZyhiYXNlVmFsdWUpKSkgewotICAgICAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9zdHJpbmdfbGVuZ3RoKTsK
LSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVu
Y2FjaGVHZXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBza2lw
X2dldF9zdHJpbmdfbGVuZ3RoOgotICAgIGdvdG8gKigmJnNraXBfcHV0X2J5X2lkKTsKLSNlbmRp
ZgotICAgIERFRklORV9PUENPREUob3BfcHV0X2J5X2lkX291dF9vZl9saW5lKQotICAgIERFRklO
RV9PUENPREUob3BfcHV0X2J5X2lkKSB7Ci0gICAgICAgIC8qIHB1dF9ieV9pZCBiYXNlKHIpIHBy
b3BlcnR5KGlkKSB2YWx1ZShyKSBub3Aobikgbm9wKG4pIG5vcChuKSBub3AobikgZGlyZWN0KGIp
Ci0KLSAgICAgICAgICAgR2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3M6IFNldHMgdGhlIHByb3BlcnR5
IG5hbWVkIGJ5IGlkZW50aWZpZXIKLSAgICAgICAgICAgcHJvcGVydHksIGJlbG9uZ2luZyB0byBy
ZWdpc3RlciBiYXNlLCB0byByZWdpc3RlciB2YWx1ZS4KLQotICAgICAgICAgICBVbmxpa2UgbWFu
eSBvcGNvZGVzLCB0aGlzIG9uZSBkb2VzIG5vdCB3cml0ZSBhbnkgb3V0cHV0IHRvCi0gICAgICAg
ICAgIHRoZSByZWdpc3RlciBmaWxlLgotCi0gICAgICAgICAgIFRoZSAiZGlyZWN0IiBmbGFnIHNo
b3VsZCBvbmx5IGJlIHNldCB0aGlzIHB1dF9ieV9pZCBpcyB0byBpbml0aWFsaXplCi0gICAgICAg
ICAgIGFuIG9iamVjdCBsaXRlcmFsLgotICAgICAgICAqLwotCi0gICAgICAgIGludCBiYXNlID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGRp
cmVjdCA9IHZQQ1s4XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBj
YWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICBpZiAoZGlyZWN0KSB7
Ci0gICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgICAgICAgICAg
YXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBpZGVudCwgY2FsbEZy
YW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5q
c1ZhbHVlKCksIHNsb3QpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAg
ICAgdHJ5Q2FjaGVQdXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwg
c2xvdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X2lkKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dP
VE9fV09SS0FST1VORCkKLSAgICAgIHNraXBfcHV0X2J5X2lkOgotI2VuZGlmCi0gICAgREVGSU5F
X09QQ09ERShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QpCi0gICAgREVGSU5FX09QQ09E
RShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCi0gICAgREVGSU5FX09QQ09ERShvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmUpCi0gICAgREVGSU5FX09QQ09E
RShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUpCi0gICAgREVGSU5F
X09QQ09ERShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbikgewotICAgICAgICAvKiBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbiBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1ZShyKSBvbGRTdHJ1Y3R1cmUo
c0lEKSBuZXdTdHJ1Y3R1cmUoc0lEKSBzdHJ1Y3R1cmVDaGFpbihjaGFpbikgb2Zmc2V0KG4pIGRp
cmVjdChiKQotICAgICAgICAgCi0gICAgICAgICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6IEF0
dGVtcHRzIHRvIHNldCBhIG5ldyBwcm9wZXJ0eSB3aXRoIGEgY2FjaGVkIHRyYW5zaXRpb24KLSAg
ICAgICAgICAgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSwgYmVsb25naW5n
IHRvIHJlZ2lzdGVyIGJhc2UsCi0gICAgICAgICAgIHRvIHJlZ2lzdGVyIHZhbHVlLiBJZiB0aGUg
Y2FjaGUgbWlzc2VzLCBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbgotICAgICAgICAgICByZXZlcnRz
IHRvIG9wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgICAgICAgCi0gICAgICAgICAgIFVubGlrZSBt
YW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAg
ICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1l
LT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZh
bHVlLmlzQ2VsbCgpKSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdlBDWzRd
LnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2UENbNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IG9sZFN0cnVjdHVyZSkpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwpOwotICAgICAgICAgICAg
ICAgIGludCBkaXJlY3QgPSB2UENbOF0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmICghZGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHZQQ1s2XS51LnN0cnVjdHVyZUNoYWluLT5oZWFkKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90byA9IGJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCFwcm90by5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGFzT2JqZWN0KHByb3RvKS0+c3RydWN0dXJlKCkgIT0gKCppdCkuZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY29kZUJsb2NrLCB2UEMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICsraXQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm90byA9IGFzT2JqZWN0KHByb3RvKS0+c3RydWN0dXJlKCkt
PnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnNldFN0cnVjdHVy
ZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoKmdsb2JhbERhdGEsIG5ld1N0cnVjdHVy
ZSk7Ci0KLSAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwotICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXRE
aXJlY3RMb2NhdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1syXS51
Lm9wZXJhbmQpKSkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRE
aXJlY3RPZmZzZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9mZnNldCwgY2FsbEZyYW1lLT5y
KHZhbHVlKS5qc1ZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pOwotICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5j
YWNoZVB1dEJ5SUQoY29kZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHV0X2J5X2lkX3JlcGxhY2UpIHsKLSAgICAg
ICAgLyogb3BfcHV0X2J5X2lkX3JlcGxhY2UgYmFzZShyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikg
c3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4pIG5vcChuKSBub3AobikgZGlyZWN0KGIpCi0KLSAgICAg
ICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gc2V0IGEgcHJlLWV4aXN0
aW5nLCBjYWNoZWQKLSAgICAgICAgICAgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9w
ZXJ0eSwgYmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2UsCi0gICAgICAgICAgIHRvIHJlZ2lzdGVy
IHZhbHVlLiBJZiB0aGUgY2FjaGUgbWlzc2VzLCBvcF9wdXRfYnlfaWRfcmVwbGFjZQotICAgICAg
ICAgICByZXZlcnRzIHRvIG9wX3B1dF9ieV9pZC4KLQotICAgICAgICAgICBVbmxpa2UgbWFueSBv
cGNvZGVzLCB0aGlzIG9uZSBkb2VzIG5vdCB3cml0ZSBhbnkgb3V0cHV0IHRvCi0gICAgICAgICAg
IHRoZSByZWdpc3RlciBmaWxlLgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJh
c2UpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkp
IHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5nZXQo
KTsKLQotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgPT0gc3Ry
dWN0dXJlKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmplY3QoKSk7
Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2Vs
bCk7Ci0gICAgICAgICAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+b2Zmc2V0Rm9yTG9jYXRpb24o
YmFzZU9iamVjdC0+Z2V0RGlyZWN0TG9jYXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+aWRl
bnRpZmllcih2UENbMl0udS5vcGVyYW5kKSkpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
YmFzZU9iamVjdC0+cHV0RGlyZWN0T2Zmc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBvZmZz
ZXQsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9ieV9pZF9yZXBsYWNlKTsKLSAgICAgICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfYnlfaWRfZ2VuZXJpYykgewot
ICAgICAgICAvKiBvcF9wdXRfYnlfaWRfZ2VuZXJpYyBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1
ZShyKSBub3Aobikgbm9wKG4pIG5vcChuKSBub3AobikgZGlyZWN0KGIpCi0KLSAgICAgICAgICAg
R2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3M6IFNldHMgdGhlIHByb3BlcnR5IG5hbWVkIGJ5IGlkZW50
aWZpZXIKLSAgICAgICAgICAgcHJvcGVydHksIGJlbG9uZ2luZyB0byByZWdpc3RlciBiYXNlLCB0
byByZWdpc3RlciB2YWx1ZS4KLQotICAgICAgICAgICBVbmxpa2UgbWFueSBvcGNvZGVzLCB0aGlz
IG9uZSBkb2VzIG5vdCB3cml0ZSBhbnkgb3V0cHV0IHRvCi0gICAgICAgICAgIHRoZSByZWdpc3Rl
ciBmaWxlLgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2
YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBkaXJlY3QgPSB2UENbOF0udS5v
cGVyYW5kOwotCi0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2Up
LmpzVmFsdWUoKTsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50
aWZpZXIocHJvcGVydHkpOwotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgaWYgKGRpcmVjdCkgewotICAgICAgICAgICAgQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1
ZSktPnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgaWRlbnQsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNW
YWx1ZSgpLCBzbG90KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYXNlVmFsdWUucHV0
KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2RlbF9ieV9pZCkgewotICAgICAgICAvKiBk
ZWxfYnlfaWQgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgQ29udmVy
dHMgcmVnaXN0ZXIgYmFzZSB0byBPYmplY3QsIGRlbGV0ZXMgdGhlIHByb3BlcnR5Ci0gICAgICAg
ICAgIG5hbWVkIGJ5IGlkZW50aWZpZXIgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0LCBhbmQgd3Jp
dGVzIGEKLSAgICAgICAgICAgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3MgKGlmIHRydWUpIG9y
IGZhaWx1cmUgKGlmIGZhbHNlKQotICAgICAgICAgICB0byByZWdpc3RlciBkc3QuCi0gICAgICAg
ICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYmFz
ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9w
ZXJhbmQ7Ci0KLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBjYWxsRnJhbWUtPnIoYmFzZSku
anNWYWx1ZSgpLnRvT2JqZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgYm9vbCByZXN1bHQg
PSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBjYWxsRnJh
bWUsIGlkZW50KTsKLSAgICAgICAgaWYgKCFyZXN1bHQgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVUeXBlRXJyb3IoY2Fs
bEZyYW1lLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIGdvdG8g
dm1fdGhyb3c7Ci0gICAgICAgIH0KLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihyZXN1bHQpOwotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9kZWxfYnlfaWQpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X3BuYW1lKSB7
Ci0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYmFzZSA9
IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBleHBlY3RlZCA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlu
dCBpdGVyID0gdlBDWzVdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGkgPSB2UENbNl0udS5vcGVy
YW5kOwotCi0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpz
VmFsdWUoKTsKLSAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBjYWxsRnJhbWUt
PnIoaXRlcikucHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKLSAgICAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBjYWxsRnJhbWUtPnIocHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBl
eHBlY3RlZFN1YnNjcmlwdCA9IGNhbGxGcmFtZS0+cihleHBlY3RlZCkuanNWYWx1ZSgpOwotICAg
ICAgICBpbnQgaW5kZXggPSBjYWxsRnJhbWUtPnIoaSkuaSgpIC0gMTsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IDA7Ci0gICAgICAgIGlm
IChzdWJzY3JpcHQgPT0gZXhwZWN0ZWRTdWJzY3JpcHQgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpICYm
IChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IGl0LT5jYWNoZWRTdHJ1Y3R1cmUo
KSkgJiYgaXQtPmdldE9mZnNldChpbmRleCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGFzT2JqZWN0KGJhc2VWYWx1ZSktPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9ieV9wbmFtZSk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgewotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoY2FsbEZy
YW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB2UEMgKz0gT1BDT0RF
X0xFTkdUSChvcF9nZXRfYnlfcG5hbWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpIHsKLSAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmd1bWVudHNSZWdp
c3RlciA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGFyZ3Vt
ZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChhcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KTsKLSAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGFyZ3VtZW50cy5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7
Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYXJndW1l
bnRzX2xlbmd0aCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVG
SU5FX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKSB7Ci0gICAgICAgIGludCBkc3QgPSB2
UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSB2UENbMl0u
dS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihhcmd1bWVudHNSZWdpc3Rlciku
anNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IGNhbGxGcmFtZS0+cihwcm9w
ZXJ0eSkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50cyAmJiBzdWJzY3JpcHQuaXNV
SW50MzIoKSAmJiBzdWJzY3JpcHQuYXNVSW50MzIoKSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoc3Vic2NyaXB0LmFzVUludDMyKCkpOwotICAgICAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7Ci0gICAgICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoKmdsb2JhbERh
dGEsIGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1l
bnRzUmVnaXN0ZXIpID0gSlNWYWx1ZShhcmd1bWVudHMpOwotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cikpID0gSlNWYWx1ZShhcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZhbGx0aHJv
dWdoCi0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X3ZhbCkgewotICAgICAgICAv
KiBnZXRfYnlfdmFsIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KHIpCi0KLSAgICAgICAgICAgQ29u
dmVydHMgcmVnaXN0ZXIgYmFzZSB0byBPYmplY3QsIGdldHMgdGhlIHByb3BlcnR5IG5hbWVkCi0g
ICAgICAgICAgIGJ5IHJlZ2lzdGVyIHByb3BlcnR5IGZyb20gdGhlIG9iamVjdCwgYW5kIHB1dHMg
dGhlIHJlc3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuIHByb3BlcnR5IGlzIG5vbWlu
YWxseSBjb252ZXJ0ZWQgdG8gc3RyaW5nCi0gICAgICAgICAgIGJ1dCBudW1iZXJzIGFyZSB0cmVh
dGVkIG1vcmUgZWZmaWNpZW50bHkuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHByb3BlcnR5KS5qc1ZhbHVlKCk7Ci0K
LSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50
MzIoKTsKLSAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAg
ICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGpzQXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0ganNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+SlNBcnJheTo6
Z2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFz
ZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUs
IGkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1
ZS5nZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0
KSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8
TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1
YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfdmFsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX3B1dF9ieV92YWwpIHsKLSAgICAgICAgLyogcHV0X2J5X3ZhbCBiYXNl
KHIpIHByb3BlcnR5KHIpIHZhbHVlKHIpCi0KLSAgICAgICAgICAgU2V0cyByZWdpc3RlciB2YWx1
ZSBvbiByZWdpc3RlciBiYXNlIGFzIHRoZSBwcm9wZXJ0eSBuYW1lZAotICAgICAgICAgICBieSBy
ZWdpc3RlciBwcm9wZXJ0eS4gQmFzZSBpcyBjb252ZXJ0ZWQgdG8gb2JqZWN0Ci0gICAgICAgICAg
IGZpcnN0LiByZWdpc3RlciBwcm9wZXJ0eSBpcyBub21pbmFsbHkgY29udmVydGVkIHRvIHN0cmlu
ZwotICAgICAgICAgICBidXQgbnVtYmVycyBhcmUgdHJlYXRlZCBtb3JlIGVmZmljaWVudGx5Lgot
Ci0gICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRl
IGFueSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgICov
Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3Bl
cnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3Bl
cmFuZDsKLQotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHByb3Bl
cnR5KS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIo
KSkpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAg
ICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIEpT
QXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGpzQXJyYXktPmNhblNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICAgICAganNB
cnJheS0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCBjYWxsRnJhbWUtPnIodmFsdWUp
LmpzVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBq
c0FycmF5LT5KU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwgY2FsbEZy
YW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoY2Fs
bEZyYW1lLCBpLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgY29kZUJsb2NrLT5pc1N0
cmljdE1vZGUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFu
Y2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCBjYWxsRnJhbWUtPnIodmFs
dWUpLmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkt
PnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5leGNlcHRp
b24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNl
cHRpb24uCi0gICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUs
IHByb3BlcnR5LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9ieV92YWwpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZGVsX2J5X3ZhbCkgewot
ICAgICAgICAvKiBkZWxfYnlfdmFsIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KHIpCi0KLSAgICAg
ICAgICAgQ29udmVydHMgcmVnaXN0ZXIgYmFzZSB0byBPYmplY3QsIGRlbGV0ZXMgdGhlIHByb3Bl
cnR5Ci0gICAgICAgICAgIG5hbWVkIGJ5IHJlZ2lzdGVyIHByb3BlcnR5IGZyb20gdGhlIG9iamVj
dCwgYW5kIHdyaXRlcyBhCi0gICAgICAgICAgIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIChp
ZiB0cnVlKSBvciBmYWlsdXJlIChpZiBmYWxzZSkKLSAgICAgICAgICAgdG8gcmVnaXN0ZXIgZHN0
LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2
UENbM10udS5vcGVyYW5kOwotCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gY2FsbEZyYW1l
LT5yKGJhc2UpLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpOyAvLyBtYXkgdGhyb3cKLQot
ICAgICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IGNhbGxGcmFtZS0+cihwcm9wZXJ0eSkuanNWYWx1
ZSgpOwotICAgICAgICBib29sIHJlc3VsdDsKLSAgICAgICAgdWludDMyX3QgaTsKLSAgICAgICAg
aWYgKHN1YnNjcmlwdC5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICByZXN1bHQgPSBiYXNlT2Jq
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iaiwgY2FsbEZyYW1l
LCBpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBj
YWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2
YXRlTmFtZSgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2Ny
aXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgY2FsbEZyYW1lLCBwcm9wZXJ0eSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXN1bHQgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVUeXBlRXJyb3IoY2Fs
bEZyYW1lLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIGdvdG8g
dm1fdGhyb3c7Ci0gICAgICAgIH0KLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihyZXN1bHQpOwotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9kZWxfYnlfdmFsKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1dF9ieV9pbmRleCkg
ewotICAgICAgICAvKiBwdXRfYnlfaW5kZXggYmFzZShyKSBwcm9wZXJ0eShuKSB2YWx1ZShyKQot
Ci0gICAgICAgICAgIFNldHMgcmVnaXN0ZXIgdmFsdWUgb24gcmVnaXN0ZXIgYmFzZSBhcyB0aGUg
cHJvcGVydHkgbmFtZWQKLSAgICAgICAgICAgYnkgdGhlIGltbWVkaWF0ZSBudW1iZXIgcHJvcGVy
dHkuIEJhc2UgaXMgY29udmVydGVkIHRvCi0gICAgICAgICAgIG9iamVjdCBmaXJzdC4KLQotICAg
ICAgICAgICBVbmxpa2UgbWFueSBvcGNvZGVzLCB0aGlzIG9uZSBkb2VzIG5vdCB3cml0ZSBhbnkg
b3V0cHV0IHRvCi0gICAgICAgICAgIHRoZSByZWdpc3RlciBmaWxlLgotCi0gICAgICAgICAgIFRo
aXMgb3Bjb2RlIGlzIG1haW5seSB1c2VkIHRvIGluaXRpYWxpemUgYXJyYXkgbGl0ZXJhbHMuCi0g
ICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
dW5zaWduZWQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsdWUg
PSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAgIEpTVmFsdWUgYXJyYXlWYWx1ZSA9IGNhbGxG
cmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEFTU0VSVChpc0pTQXJyYXkoYXJyYXlW
YWx1ZSkpOwotICAgICAgICBhc0FycmF5KGFycmF5VmFsdWUpLT5wdXREaXJlY3RJbmRleChjYWxs
RnJhbWUsIHByb3BlcnR5LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7Ci0KLSAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X2luZGV4KTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3ApIHsKLSAgICAg
ICAgLyogbG9vcCB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0gICAgICAgICAgIEp1bXBzIHVu
Y29uZGl0aW9uYWxseSB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQKLSAgICAgICAg
ICAgaW5zdHJ1Y3Rpb24uCi0KLSAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0
cnVjdGlvbiBtYXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcwotICAgICAgICAgICB0aGUgSlMg
dGltZW91dCBpcyByZWFjaGVkLgotICAgICAgICAgKi8KLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRT
KQotICAgICAgICBPcGNvZGVTdGF0czo6cmVzZXRMYXN0SW5zdHJ1Y3Rpb24oKTsKLSNlbmRpZgot
ICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgQ0hFQ0tfRk9S
X1RJTUVPVVQoKTsKLSAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2ptcCkgewotICAgICAgICAvKiBq
bXAgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBKdW1wcyB1bmNvbmRpdGlvbmFsbHkgdG8g
b2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50Ci0gICAgICAgICAgIGluc3RydWN0aW9uLgot
ICAgICAgICAqLwotI2lmIEVOQUJMRShPUENPREVfU1RBVFMpCi0gICAgICAgIE9wY29kZVN0YXRz
OjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0gICAgICAgIGludCB0YXJnZXQgPSB2
UENbMV0udS5vcGVyYW5kOwotCi0gICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9sb29wX2hpbnQpIHsK
LSAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIHVubGVzcyB3ZSBpbnRlbmQgb24gZG9pbmcgT1NS
IGZyb20gdGhlIGludGVycHJldGVyLgotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9s
b29wX2hpbnQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklO
RV9PUENPREUob3BfbG9vcF9pZl90cnVlKSB7Ci0gICAgICAgIC8qIGxvb3BfaWZfdHJ1ZSBjb25k
KHIpIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAKLSAgICAgICAgICAgSnVtcHMgdG8gb2Zmc2V0
IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQKLSAgICAgICAgICAg
b25seSBpZiByZWdpc3RlciBjb25kIGNvbnZlcnRzIHRvIGJvb2xlYW4gYXMgdHJ1ZS4KLQotICAg
ICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUg
SlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0g
ICAgICAgICAqLwotICAgICAgICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5y
KGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgewotICAgICAgICAgICAgdlBD
ICs9IHRhcmdldDsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfdHJ1ZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9sb29wX2lmX2ZhbHNlKSB7Ci0gICAg
ICAgIC8qIGxvb3BfaWZfdHJ1ZSBjb25kKHIpIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAKLSAg
ICAgICAgICAgSnVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0
aW9uLCBpZiBhbmQKLSAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBjb25kIGNvbnZlcnRzIHRv
IGJvb2xlYW4gYXMgZmFsc2UuCi0KLSAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBp
bnN0cnVjdGlvbiBtYXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcwotICAgICAgICAgICB0aGUg
SlMgdGltZW91dCBpcyByZWFjaGVkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGNvbmQgPSB2
UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsK
LSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxs
RnJhbWUpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgQ0hFQ0tf
Rk9SX1RJTUVPVVQoKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVl
KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RF
KG9wX2p0cnVlKSB7Ci0gICAgICAgIC8qIGp0cnVlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKLQot
ICAgICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1
Y3Rpb24sIGlmIGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMg
dG8gYm9vbGVhbiBhcyB0cnVlLgotICAgICAgICAqLwotICAgICAgICBpbnQgY29uZCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1l
KSkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2p0
cnVlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2pmYWxzZSkgewotICAgICAgICAvKiBqZmFsc2UgY29uZChyKSB0YXJnZXQob2Zmc2V0
KQotCi0gICAgICAgICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBp
bnN0cnVjdGlvbiwgaWYgYW5kCi0gICAgICAgICAgIG9ubHkgaWYgcmVnaXN0ZXIgY29uZCBjb252
ZXJ0cyB0byBib29sZWFuIGFzIGZhbHNlLgotICAgICAgICAqLwotICAgICAgICBpbnQgY29uZCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNh
bGxGcmFtZSkpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9qZmFsc2UpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfamVxX251bGwpIHsKLSAgICAgICAgLyogamVxX251bGwgc3JjKHIpIHRh
cmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgSnVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRo
ZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQKLSAgICAgICAgICAgb25seSBpZiByZWdpc3Rl
ciBzcmMgaXMgbnVsbC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBK
U1ZhbHVlIHNyY1ZhbHVlID0gY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpOwotCi0gICAgICAg
IGlmIChzcmNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IChzcmNWYWx1ZS5pc0NlbGwoKSAm
JiBzcmNWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKSkgewotICAgICAgICAgICAgdlBDICs9
IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2puZXFfbnVsbCkgewot
ICAgICAgICAvKiBqbmVxX251bGwgc3JjKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAg
SnVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBh
bmQKLSAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBzcmMgaXMgbm90IG51bGwuCi0gICAgICAg
ICovCi0gICAgICAgIGludCBzcmMgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFy
Z2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmNWYWx1ZSA9IGNhbGxG
cmFtZS0+cihzcmMpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoIXNyY1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkgJiYgKCFzcmNWYWx1ZS5pc0NlbGwoKSB8fCAhKHNyY1ZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSkpKSkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2puZXFfbnVsbCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qbmVxX3B0cikgewotICAgICAgICAvKiBqbmVxX3B0
ciBzcmMocikgcHRyKGpzQ2VsbCkgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAotICAgICAgICAg
ICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlm
IHRoZSB2YWx1ZSByIGlzIGVxdWFsCi0gICAgICAgICAgIHRvIHB0ciwgdXNpbmcgcG9pbnRlciBl
cXVhbGl0eS4KLSAgICAgICAgICovCi0gICAgICAgIGludCBzcmMgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBzcmNWYWx1ZSA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKHNy
Y1ZhbHVlICE9IHZQQ1syXS51LmpzQ2VsbC5nZXQoKSkgewotICAgICAgICAgICAgdlBDICs9IHRh
cmdldDsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2puZXFfcHRyKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaWZfbGVzcykgewot
ICAgICAgICAvKiBsb29wX2lmX2xlc3Mgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0K
LSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gcmVn
aXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPCcgb3BlcmF0
b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUg
Y3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kIG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1
bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkg
dGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAg
ICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICAqLwotICAgICAgICBK
U1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwot
ICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNW
YWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPHRydWU+KGNhbGxGcmFtZSwgc3JjMSwgc3Jj
Mik7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBDSEVD
S19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xl
c3MpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfbG9vcF9pZl9sZXNzZXEpIHsKLSAgICAgICAgLyogbG9vcF9pZl9sZXNzZXEgc3JjMShy
KSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVn
aXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVnaXN0ZXIKLSAgICAgICAgICAg
c3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0nIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1w
cyB0bwotICAgICAgICAgICBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rp
b24sIGlmIGFuZCBvbmx5IGlmIHRoZSAKLSAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJp
c29uIGlzIHRydWUuCi0KLSAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVj
dGlvbiBtYXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcwotICAgICAgICAgICB0aGUgSlMgdGlt
ZW91dCBpcyByZWFjaGVkLgotICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxs
RnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNy
YzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBp
bnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzRXE8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAg
ICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7
Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfbGVzc2VxKTsKLSAgICAgICAg
TkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaWZf
Z3JlYXRlcikgewotICAgICAgICAvKiBsb29wX2lmX2dyZWF0ZXIgc3JjMShyKSBzcmMyKHIpIHRh
cmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBp
cyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNN
QVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAg
ICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kIG9ubHkgaWYgdGhl
IAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KLQotICAgICAg
ICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMg
ZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAg
ICAgICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3Bl
cmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBD
WzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPGZhbHNlPihj
YWxsRnJhbWUsIHNyYzIsIHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0
OwotICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKLSAgICAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfbG9vcF9pZl9ncmVhdGVyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaWZfZ3JlYXRlcmVxKSB7Ci0gICAgICAg
IC8qIGxvb3BfaWZfZ3JlYXRlcmVxIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQotCi0g
ICAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHJlZ2lzdGVyCi0gICAgICAgICAgIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3Jp
cHQgJz49JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8KLSAgICAgICAgICAgb2Zmc2V0IHRh
cmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0aGUgCi0g
ICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotCi0gICAgICAgICAg
IEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVj
dXRpb24gaXMKLSAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KLSAgICAgICAg
Ki8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51
Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIAotICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPGZhbHNlPihjYWxs
RnJhbWUsIHNyYzIsIHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0Owot
ICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbG9vcF9pZl9ncmVhdGVyZXEpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3Bfamxlc3MpIHsKLSAgICAgICAgLyogamxlc3Mgc3Jj
MShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIg
cmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAg
d2l0aCB0aGUgRUNNQVNjcmlwdCAnPCcgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNl
dAotICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5k
IG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgdHJ1
ZS4KLSAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sx
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8dHJ1ZT4oY2Fs
bEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsK
LSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2psZXNzKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2psZXNzZXEpIHsKLSAgICAgICAgLyogamxl
c3NlcSBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAotICAgICAgICAg
Q2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KLSAg
ICAgICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9JyBvcGVyYXRv
ciwKLSAgICAgICAgIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3Vy
cmVudCBpbnN0cnVjdGlvbiwKLSAgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRoZSByZXN1bHQgb2Yg
dGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KLSAgICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3Jj
MSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpT
VmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAg
Ym9vbCByZXN1bHQgPSBqc0xlc3NFcTx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0
KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9qbGVzc2VxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX2pncmVhdGVyKSB7Ci0gICAgICAgIC8qIGpncmVhdGVyIHNyYzEocikg
c3JjMihyKSB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lz
dGVyIHNyYzEgaXMgZ3JlYXRlciB0aGFuIHJlZ2lzdGVyIHNyYzIsIGFzCi0gICAgICAgICAgIHdp
dGggdGhlIEVDTUFTY3JpcHQgJz4nIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQK
LSAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBv
bmx5IGlmIHRoZSAKLSAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHRydWUu
Ci0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENb
M10udS5vcGVyYW5kOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPGZhbHNlPihjYWxs
RnJhbWUsIHNyYzIsIHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0Owot
ICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfamdyZWF0ZXJlcSkgewotICAgICAgICAv
KiBqZ3JlYXRlcmVxIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0g
ICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBl
cXVhbCB0bwotICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAn
Pj0nIG9wZXJhdG9yLAotICAgICAgICAgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRhcmdldCBm
cm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLAotICAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhl
IHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotICAgICAgICAgKi8KLSAgICAgICAg
SlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IAotICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIs
IHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAg
TkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2pubGVzcykgewotICAgICAgICAvKiBqbmxl
c3Mgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdo
ZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAg
ICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPCcgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRv
IG9mZnNldAotICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwg
aWYgYW5kIG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24g
aXMgZmFsc2UuCi0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+
cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNh
bGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJn
ZXQgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPHRy
dWU+KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0g
dGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2pubGVzc2VxKSB7Ci0gICAg
ICAgIC8qIGpubGVzc2VxIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAg
ICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRv
Ci0gICAgICAgICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9JyBv
cGVyYXRvciwKLSAgICAgICAgICAgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9t
IHRoZSBjdXJyZW50IGluc3RydWN0aW9uLAotICAgICAgICAgICBpZiBhbmQgb25seSBpZiB0aGVy
ZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgZmFsc2UuCi0gICAgICAgICovCi0gICAgICAgIEpT
VmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1Zh
bHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAg
IGJvb2wgcmVzdWx0ID0ganNMZXNzRXE8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9q
bmxlc3NlcSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5F
X09QQ09ERShvcF9qbmdyZWF0ZXIpIHsKLSAgICAgICAgLyogam5ncmVhdGVyIHNyYzEocikgc3Jj
MihyKSB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVy
IHNyYzEgaXMgZ3JlYXRlciB0aGFuIHJlZ2lzdGVyIHNyYzIsIGFzCi0gICAgICAgICAgIHdpdGgg
dGhlIEVDTUFTY3JpcHQgJz4nIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQKLSAg
ICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBvbmx5
IGlmIHRoZSAKLSAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIGZhbHNlLgot
ICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUu
b3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIo
dlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNd
LnUub3BlcmFuZDsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzczxmYWxzZT4oY2FsbEZy
YW1lLCBzcmMyLCBzcmMxKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0g
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5ncmVhdGVyZXEpIHsKLSAgICAgICAg
Lyogam5ncmVhdGVyZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAg
ICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8KLSAgICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPj0n
IG9wZXJhdG9yLAotICAgICAgICAgICBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZy
b20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRo
ZXJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBmYWxzZS4KLSAgICAgICAgKi8KLSAgICAgICAg
SlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcTxmYWxzZT4oY2FsbEZyYW1lLCBzcmMyLCBzcmMxKTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9qbmdyZWF0ZXJlcSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9zd2l0Y2hfaW1tKSB7Ci0gICAgICAgIC8qIHN3aXRjaF9pbW0gdGFi
bGVJbmRleChuKSBkZWZhdWx0T2Zmc2V0KG9mZnNldCkgc2NydXRpbmVlKHIpCi0KLSAgICAgICAg
ICAgUGVyZm9ybXMgYSByYW5nZSBjaGVja2VkIHN3aXRjaCBvbiB0aGUgc2NydXRpbmVlIHZhbHVl
LCB1c2luZwotICAgICAgICAgICB0aGUgdGFibGVJbmRleC10aCBpbW1lZGlhdGUgc3dpdGNoIGp1
bXAgdGFibGUuICBJZiB0aGUgc2NydXRpbmVlIHZhbHVlCi0gICAgICAgICAgIGlzIGFuIGltbWVk
aWF0ZSBudW1iZXIgaW4gdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIHJlZmVyZW5jZWQganVtcAot
ICAgICAgICAgICB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBhdCBqdW1wVGFibGVbc2NydXRpbmVlIHZh
bHVlXSBpcyBub24temVybywgdGhlbgotICAgICAgICAgICB0aGF0IHZhbHVlIGlzIHVzZWQgYXMg
dGhlIGp1bXAgb2Zmc2V0LCBvdGhlcndpc2UgZGVmYXVsdE9mZnNldCBpcyB1c2VkLgotICAgICAg
ICAgKi8KLSAgICAgICAgaW50IHRhYmxlSW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgZGVmYXVsdE9mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUg
c2NydXRpbmVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAg
ICAgICAgaWYgKHNjcnV0aW5lZS5pc0ludDMyKCkpCi0gICAgICAgICAgICB2UEMgKz0gY29kZUJs
b2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUo
c2NydXRpbmVlLmFzSW50MzIoKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgICAgIGVsc2UgaWYgKHNj
cnV0aW5lZS5pc0RvdWJsZSgpICYmIHNjcnV0aW5lZS5hc0RvdWJsZSgpID09IHN0YXRpY19jYXN0
PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSkKLSAgICAgICAgICAgIHZQQyArPSBjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzdGF0aWNfY2FzdDxpbnQzMl90PihzY3J1dGluZWUuYXNEb3VibGUoKSksIGRlZmF1bHRPZmZz
ZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N3
aXRjaF9jaGFyKSB7Ci0gICAgICAgIC8qIHN3aXRjaF9jaGFyIHRhYmxlSW5kZXgobikgZGVmYXVs
dE9mZnNldChvZmZzZXQpIHNjcnV0aW5lZShyKQotCi0gICAgICAgICAgIFBlcmZvcm1zIGEgcmFu
Z2UgY2hlY2tlZCBzd2l0Y2ggb24gdGhlIHNjcnV0aW5lZSB2YWx1ZSwgdXNpbmcKLSAgICAgICAg
ICAgdGhlIHRhYmxlSW5kZXgtdGggY2hhcmFjdGVyIHN3aXRjaCBqdW1wIHRhYmxlLiAgSWYgdGhl
IHNjcnV0aW5lZSB2YWx1ZQotICAgICAgICAgICBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5n
IGluIHRoZSByYW5nZSBjb3ZlcmVkIGJ5IHRoZSByZWZlcmVuY2VkIGp1bXAKLSAgICAgICAgICAg
dGFibGUsIGFuZCB0aGUgdmFsdWUgYXQganVtcFRhYmxlW3NjcnV0aW5lZSB2YWx1ZV0gaXMgbm9u
LXplcm8sIHRoZW4KLSAgICAgICAgICAgdGhhdCB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBqdW1wIG9m
ZnNldCwgb3RoZXJ3aXNlIGRlZmF1bHRPZmZzZXQgaXMgdXNlZC4KLSAgICAgICAgICovCi0gICAg
ICAgIGludCB0YWJsZUluZGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGRlZmF1
bHRPZmZzZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9
IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICgh
c2NydXRpbmVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5n
KHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpOwotICAgICAgICAgICAgaWYgKHZh
bHVlLT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZQQyArPSBjb2RlQmxvY2stPmNo
YXJhY3RlclN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZSgoKnZhbHVl
KVswXSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N3aXRjaF9zdHJpbmcpIHsKLSAgICAg
ICAgLyogc3dpdGNoX3N0cmluZyB0YWJsZUluZGV4KG4pIGRlZmF1bHRPZmZzZXQob2Zmc2V0KSBz
Y3J1dGluZWUocikKLQotICAgICAgICAgICBQZXJmb3JtcyBhIHNwYXJzZSBoYXNobWFwIGJhc2Vk
IHN3aXRjaCBvbiB0aGUgdmFsdWUgaW4gdGhlIHNjcnV0aW5lZQotICAgICAgICAgICByZWdpc3Rl
ciwgdXNpbmcgdGhlIHRhYmxlSW5kZXgtdGggc3RyaW5nIHN3aXRjaCBqdW1wIHRhYmxlLiAgSWYg
dGhlIAotICAgICAgICAgICBzY3J1dGluZWUgdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBleGlzdHMg
YXMgYSBrZXkgaW4gdGhlIHJlZmVyZW5jZWQgCi0gICAgICAgICAgIGp1bXAgdGFibGUsIHRoZW4g
dGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyaW5nIGlzIHVzZWQgYXMgdGhlIAotICAg
ICAgICAgICBqdW1wIG9mZnNldCwgb3RoZXJ3aXNlIGRlZmF1bHRPZmZzZXQgaXMgdXNlZC4KLSAg
ICAgICAgICovCi0gICAgICAgIGludCB0YWJsZUluZGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IGRlZmF1bHRPZmZzZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlIHNjcnV0aW5lZSA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIGlmICghc2NydXRpbmVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICB2UEMgKz0g
ZGVmYXVsdE9mZnNldDsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHZQQyArPSBjb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShhc1N0
cmluZyhzY3J1dGluZWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwgZGVmYXVsdE9mZnNldCk7
Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShv
cF9uZXdfZnVuYykgewotICAgICAgICAvKiBuZXdfZnVuYyBkc3QocikgZnVuYyhmKQotCi0gICAg
ICAgICAgIENvbnN0cnVjdHMgYSBuZXcgRnVuY3Rpb24gaW5zdGFuY2UgZnJvbSBmdW5jdGlvbiBm
dW5jIGFuZAotICAgICAgICAgICB0aGUgY3VycmVudCBzY29wZSBjaGFpbiB1c2luZyB0aGUgb3Jp
Z2luYWwgRnVuY3Rpb24KLSAgICAgICAgICAgY29uc3RydWN0b3IsIHVzaW5nIHRoZSBydWxlcyBm
b3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBhbmQKLSAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0
IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBmdW5jID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHNob3VsZENoZWNrID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgQVNTRVJUKGNvZGVC
bG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3Rl
cigpKS5qc1ZhbHVlKCkpOwotICAgICAgICBpZiAoIXNob3VsZENoZWNrIHx8ICFjYWxsRnJhbWUt
PnIoZHN0KS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IEpTVmFsdWUoSlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSwgY29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woZnVuYyksIGNhbGxGcmFtZS0+c2NvcGUoKSkpOwotCi0gICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX25ld19mdW5jKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX25ld19mdW5jX2V4cCkgewotICAgICAgICAvKiBu
ZXdfZnVuY19leHAgZHN0KHIpIGZ1bmMoZikKLQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3
IEZ1bmN0aW9uIGluc3RhbmNlIGZyb20gZnVuY3Rpb24gZnVuYyBhbmQKLSAgICAgICAgICAgdGhl
IGN1cnJlbnQgc2NvcGUgY2hhaW4gdXNpbmcgdGhlIG9yaWdpbmFsIEZ1bmN0aW9uCi0gICAgICAg
ICAgIGNvbnN0cnVjdG9yLCB1c2luZyB0aGUgcnVsZXMgZm9yIGZ1bmN0aW9uIGV4cHJlc3Npb25z
LCBhbmQKLSAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBm
dW5jSW5kZXggPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdp
c3RlcigpKS5qc1ZhbHVlKCkpOwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
ID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoZnVuY0luZGV4KTsKLSAgICAgICAgSlNGdW5jdGlv
biogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLCBjYWxsRnJh
bWUtPnNjb3BlKCkpOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNW
YWx1ZShmdW5jKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXdfZnVuY19l
eHApOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIC8qIGNhbGxfZXZhbCBmdW5jKHIpIGFyZ0NvdW50
KG4pIHJlZ2lzdGVyT2Zmc2V0KG4pCi0KLSAgICAgICAgICAgQ2FsbCBhIGZ1bmN0aW9uIG5hbWVk
ICJldmFsIiB3aXRoIG5vIGV4cGxpY2l0ICJ0aGlzIiB2YWx1ZQotICAgICAgICAgICAod2hpY2gg
bWF5IHRoZXJlZm9yZSBiZSB0aGUgZXZhbCBvcGVyYXRvcikuIElmIHJlZ2lzdGVyCi0gICAgICAg
ICAgIHRoaXNWYWwgaXMgdGhlIGdsb2JhbCBvYmplY3QsIGFuZCByZWdpc3RlciBmdW5jIGNvbnRh
aW5zCi0gICAgICAgICAgIHRoYXQgZ2xvYmFsIG9iamVjdCdzIG9yaWdpbmFsIGdsb2JhbCBldmFs
IGZ1bmN0aW9uLCB0aGVuCi0gICAgICAgICAgIHBlcmZvcm0gdGhlIGV2YWwgb3BlcmF0b3IgaW4g
bG9jYWwgc2NvcGUgKGludGVycHJldGluZwotICAgICAgICAgICB0aGUgYXJndW1lbnQgcmVnaXN0
ZXJzIGFzIGZvciB0aGUgImNhbGwiCi0gICAgICAgICAgIG9wY29kZSkuIE90aGVyd2lzZSwgYWN0
IGV4YWN0bHkgYXMgdGhlICJjYWxsIiBvcGNvZGUgd291bGQuCi0gICAgICAgICAqLwotCi0gICAg
ICAgIGludCBmdW5jID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmNvZGVUeXBlKCkg
IT0gRnVuY3Rpb25Db2RlIHx8ICFjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBj
YWxsRnJhbWUtPnIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsK
LSAgICAgICAgSlNWYWx1ZSBmdW5jVmFsID0gY2FsbEZyYW1lLT5yKGZ1bmMpLmpzVmFsdWUoKTsK
LQotICAgICAgICBpZiAoaXNIb3N0RnVuY3Rpb24oZnVuY1ZhbCwgZ2xvYmFsRnVuY0V2YWwpKSB7
Ci0gICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRl
KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBu
ZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX2V2YWwpLCBj
YWxsRnJhbWUtPnNjb3BlKCksIGNhbGxGcmFtZSwgYXJnQ291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZnVuY1ZhbCkpOwotCi0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwobmV3Q2Fs
bEZyYW1lKTsKLSAgICAgICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRhLT5l
eGNlcHRpb24pKQotICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgICAgICAgICBm
dW5jdGlvblJldHVyblZhbHVlID0gcmVzdWx0OwotCi0gICAgICAgICAgICB2UEMgKz0gT1BDT0RF
X0xFTkdUSChvcF9jYWxsX2V2YWwpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgdGhlIGJsZXNzZWQgdmVyc2lv
biBvZiBldmFsLCBzbyBwcm9jZXNzIHRoaXMKLSAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gYXMgYSBu
b3JtYWwgZnVuY3Rpb24gY2FsbC4KLSAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRvIG9wX2NhbGwK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jYWxsKSB7Ci0gICAgICAgIC8qIGNhbGwgZnVu
YyhyKSBhcmdDb3VudChuKSByZWdpc3Rlck9mZnNldChuKQotCi0gICAgICAgICAgIFBlcmZvcm0g
YSBmdW5jdGlvbiBjYWxsLgotICAgICAgICAgICAKLSAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
aXMgdGhlIGRpc3RhbmNlIHRoZSBjYWxsRnJhbWUgcG9pbnRlciBzaG91bGQgbW92ZQotICAgICAg
ICAgICBiZWZvcmUgdGhlIFZNIGluaXRpYWxpemVzIHRoZSBuZXcgY2FsbCBmcmFtZSdzIGhlYWRl
ci4KLSAgICAgICAgICAgCi0gICAgICAgICAgIGRzdCBpcyB3aGVyZSBvcF9yZXQgc2hvdWxkIHN0
b3JlIGl0cyByZXN1bHQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGludCBmdW5jID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAgICBK
U1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoZnVuYykuanNWYWx1ZSgpOwotCi0gICAgICAgIENhbGxE
YXRhIGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHYs
IGNhbGxEYXRhKTsKLQotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewotICAg
ICAgICAgICAgSlNTY29wZSogY2FsbERhdGFTY29wZSA9IGNhbGxEYXRhLmpzLnNjb3BlOwotCi0g
ICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZSk7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoISFlcnJvcikpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGVycm9yOwotICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxsRnJhbWUgPSBjYWxsRnJhbWU7
Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZjYWxsRGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOwotICAgICAgICAgICAg
Y2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdp
c3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghY2FsbEZyYW1lKSkgewotICAgICAgICAgICAgICAgIGNhbGxGcmFt
ZSA9IHByZXZpb3VzQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0
KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwgY2FsbERhdGFTY29w
ZSwgcHJldmlvdXNDYWxsRnJhbWUsIGFyZ0NvdW50LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsK
LSAgICAgICAgICAgIGNvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKLSAgICAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICAqdG9w
Q2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLQotI2lmIEVOQUJMRShPUENPREVfU1RBVFMpCi0g
ICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVzZXRMYXN0SW5zdHJ1Y3Rpb24oKTsKLSNlbmRpZgot
Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZy
YW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVy
T2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVf
TEVOR1RIKG9wX2NhbGwpLCBzY29wZSwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3Qodikp
OwotICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IG5ld0NhbGxGcmFtZTsKLSAgICAgICAgICAg
ICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgKnRv
cENhbGxGcmFtZVNsb3QgPSBjYWxsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJuVmFsdWUg
PSByZXR1cm5WYWx1ZTsKLQotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLQotICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGNhbGxGcmFtZSwgdik7Ci0gICAgICAgIGdv
dG8gdm1fdGhyb3c7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfY2FsbF92YXJhcmdzKSB7
Ci0gICAgICAgIC8qIGNhbGxfdmFyYXJncyBjYWxsZWUocikgdGhpc1ZhbHVlKHIpIGFyZ3VtZW50
cyhyKSBmaXJzdEZyZWVSZWdpc3RlcihuKQotICAgICAgICAgCi0gICAgICAgICBQZXJmb3JtIGEg
ZnVuY3Rpb24gY2FsbCB3aXRoIGEgZHluYW1pYyBzZXQgb2YgYXJndW1lbnRzLgotICAgICAgICAg
Ci0gICAgICAgICByZWdpc3Rlck9mZnNldCBpcyB0aGUgZGlzdGFuY2UgdGhlIGNhbGxGcmFtZSBw
b2ludGVyIHNob3VsZCBtb3ZlCi0gICAgICAgICBiZWZvcmUgdGhlIFZNIGluaXRpYWxpemVzIHRo
ZSBuZXcgY2FsbCBmcmFtZSdzIGhlYWRlciwgZXhjbHVkaW5nCi0gICAgICAgICBzcGFjZSBmb3Ig
YXJndW1lbnRzLgotICAgICAgICAgCi0gICAgICAgICBkc3QgaXMgd2hlcmUgb3BfcmV0IHNob3Vs
ZCBzdG9yZSBpdHMgcmVzdWx0LgotICAgICAgICAgKi8KLSAgICAgICAgCi0gICAgICAgIEpTVmFs
dWUgdiA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFs
dWUoKTsKLSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUu
b3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSB2UENb
NF0udS5vcGVyYW5kOwotCi0gICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbG9hZFZh
cmFyZ3MoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIHRoaXNWYWx1ZSwgYXJndW1lbnRzLCBmaXJz
dEZyZWVSZWdpc3Rlcik7Ci0gICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRh
LT5leGNlcHRpb24pKQotICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgaW50IGFy
Z0NvdW50ID0gbmV3Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOwotCi0g
ICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKHYsIGNhbGxEYXRhKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZUpTKSB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY2Fs
bERhdGEuanMuc2NvcGU7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNhbGxEYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBjYWxsRGF0
YVNjb3BlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewotICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90
aHJvdzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxv
Y2sgPSAmY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZv
ckNhbGwoKTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIDAsIGFyZ0Nv
dW50KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewotICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsRGF0YVNjb3BlLCBjYWxsRnJhbWUsIGFyZ0Nv
dW50LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLSAgICAgICAgICAgIGNvZGVCbG9jayA9IG5l
d0NvZGVCbG9jazsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9IG5ld0NhbGxGcmFtZTsKLSAgICAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0gICAg
ICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIHZQQyA9
IG5ld0NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLQotI2lmIEVOQUJMRShPUENP
REVfU1RBVFMpCi0gICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVzZXRMYXN0SW5zdHJ1Y3Rpb24o
KTsKLSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhv
c3QpIHsKLSAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwot
ICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbF92YXJhcmdzKSwgc2NvcGUsIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFzT2JqZWN0KHYpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZTsKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IG5ld0NhbGxGcmFtZTsK
LSAgICAgICAgICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQo
bV9zYW1wbGVyLmdldCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7Ci0gICAgICAg
ICAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBjYWxsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGZ1bmN0aW9uUmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKTsKLSAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNT
RVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7Ci0gICAgICAgIAotICAgICAgICBleGNlcHRp
b25WYWx1ZSA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGNhbGxGcmFtZSwgdik7Ci0gICAgICAg
IGdvdG8gdm1fdGhyb3c7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfdGVhcl9vZmZfYWN0
aXZhdGlvbikgewotICAgICAgICAvKiB0ZWFyX29mZl9hY3RpdmF0aW9uIGFjdGl2YXRpb24ocikK
LQotICAgICAgICAgICBDb3B5IGxvY2FscyBhbmQgbmFtZWQgcGFyYW1ldGVycyBmcm9tIHRoZSBy
ZWdpc3RlciBmaWxlIHRvIHRoZSBoZWFwLgotICAgICAgICAgICBQb2ludCB0aGUgYmluZGluZ3Mg
aW4gJ2FjdGl2YXRpb24nIHRvIHRoaXMgbmV3IGJhY2tpbmcgc3RvcmUuCi0KLSAgICAgICAgICAg
VGhpcyBvcGNvZGUgYXBwZWFycyBiZWZvcmUgb3BfcmV0IGluIGZ1bmN0aW9ucyB0aGF0IHJlcXVp
cmUgZnVsbCBzY29wZSBjaGFpbnMuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IGFjdGl2YXRp
b24gPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCkpOwotICAgICAgICBKU1ZhbHVlIGFjdGl2YXRpb25WYWx1ZSA9IGNhbGxG
cmFtZS0+cihhY3RpdmF0aW9uKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChhY3RpdmF0aW9uVmFs
dWUpCi0gICAgICAgICAgICBhc0FjdGl2YXRpb24oYWN0aXZhdGlvblZhbHVlKS0+dGVhck9mZigq
Z2xvYmFsRGF0YSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9vZmZf
YWN0aXZhdGlvbik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVG
SU5FX09QQ09ERShvcF90ZWFyX29mZl9hcmd1bWVudHMpIHsKLSAgICAgICAgLyogdGVhcl9vZmZf
YXJndW1lbnRzIGFyZ3VtZW50cyhyKSBhY3RpdmF0aW9uKHIpCi0KLSAgICAgICAgICAgQ29weSBu
YW1lZCBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlZ2lzdGVyIGZpbGUgdG8gdGhlIGhlYXAuIFBvaW50
IHRoZQotICAgICAgICAgICBiaW5kaW5ncyBpbiAnYXJndW1lbnRzJyB0byB0aGlzIG5ldyBiYWNr
aW5nIHN0b3JlLiAoSWYgJ2FjdGl2YXRpb24nCi0gICAgICAgICAgIHdhcyBhbHNvIGNvcGllZCB0
byB0aGUgaGVhcCwgJ2FyZ3VtZW50cycgd2lsbCBwb2ludCB0byBpdHMgc3RvcmFnZS4pCi0KLSAg
ICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyBiZWZvcmUgb3BfcmV0IGluIGZ1bmN0aW9ucyB0
aGF0IGRvbid0IHJlcXVpcmUgZnVsbAotICAgICAgICAgICBzY29wZSBjaGFpbnMsIGJ1dCBkbyB1
c2UgJ2FyZ3VtZW50cycuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IGFyZ3VtZW50cyA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhY3RpdmF0aW9uID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKTsKLSAgICAgICAg
aWYgKEpTVmFsdWUgYXJndW1lbnRzVmFsdWUgPSBjYWxsRnJhbWUtPnIodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAgaWYgKEpT
VmFsdWUgYWN0aXZhdGlvblZhbHVlID0gY2FsbEZyYW1lLT5yKGFjdGl2YXRpb24pLmpzVmFsdWUo
KSkKLSAgICAgICAgICAgICAgICBhc0FyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSktPmRpZFRlYXJP
ZmZBY3RpdmF0aW9uKGNhbGxGcmFtZSwgYXNBY3RpdmF0aW9uKGFjdGl2YXRpb25WYWx1ZSkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50c1Zh
bHVlKS0+dGVhck9mZihjYWxsRnJhbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3JldCkgewotICAgICAgICAvKiBy
ZXQgcmVzdWx0KHIpCi0gICAgICAgICAgIAotICAgICAgICAgICBSZXR1cm4gcmVnaXN0ZXIgcmVz
dWx0IGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgZnVuY3Rp
b24gY2FsbCwgd3JpdGluZyBpdCBpbnRvIGZ1bmN0aW9uUmV0dXJuVmFsdWUuCi0gICAgICAgICAg
IEluIGFkZGl0aW9uLCB1bndpbmQgb25lIGNhbGwgZnJhbWUgYW5kIHJlc3RvcmUgdGhlIHNjb3Bl
Ci0gICAgICAgICAgIGNoYWluLCBjb2RlIGJsb2NrIGluc3RydWN0aW9uIHBvaW50ZXIgYW5kIHJl
Z2lzdGVyIGJhc2UKLSAgICAgICAgICAgdG8gdGhvc2Ugb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24u
Ci0gICAgICAgICovCi0KLSAgICAgICAgaW50IHJlc3VsdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0K
LSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZS0+cihyZXN1bHQpLmpzVmFs
dWUoKTsKLQotICAgICAgICB2UEMgPSBjYWxsRnJhbWUtPnJldHVyblZQQygpOwotICAgICAgICBj
YWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0KLSAgICAgICAgaWYgKGNhbGxG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKLSAgICAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKLQotICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAg
ZnVuY3Rpb25SZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlOwotICAgICAgICBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCkpOwotCi0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9
Ci0gICAgREVGSU5FX09QQ09ERShvcF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgLyogb3Bf
Y2FsbF9wdXRfcmVzdWx0IHJlc3VsdChyKQotICAgICAgICAgICAKLSAgICAgICAgICAgTW92ZSBj
YWxsIHJlc3VsdCBmcm9tIGZ1bmN0aW9uUmV0dXJuVmFsdWUgdG8gY2FsbGVyJ3MKLSAgICAgICAg
ICAgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIHJlZ2lzdGVyLgotICAgICAgICAqLwotCi0gICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENbMV0udS5vcGVyYW5kKSA9IGZ1bmN0aW9uUmV0dXJu
VmFsdWU7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0
KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RF
KG9wX3JldF9vYmplY3Rfb3JfdGhpcykgewotICAgICAgICAvKiByZXQgcmVzdWx0KHIpCi0gICAg
ICAgICAgIAotICAgICAgICAgICBSZXR1cm4gcmVnaXN0ZXIgcmVzdWx0IGFzIHRoZSByZXR1cm4g
dmFsdWUgb2YgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgZnVuY3Rpb24gY2FsbCwgd3JpdGluZyBp
dCBpbnRvIHRoZSBjYWxsZXIncyBleHBlY3RlZCByZXR1cm4KLSAgICAgICAgICAgdmFsdWUgcmVn
aXN0ZXIuIEluIGFkZGl0aW9uLCB1bndpbmQgb25lIGNhbGwgZnJhbWUgYW5kCi0gICAgICAgICAg
IHJlc3RvcmUgdGhlIHNjb3BlIGNoYWluLCBjb2RlIGJsb2NrIGluc3RydWN0aW9uIHBvaW50ZXIg
YW5kCi0gICAgICAgICAgIHJlZ2lzdGVyIGJhc2UgdG8gdGhvc2Ugb2YgdGhlIGNhbGxpbmcgZnVu
Y3Rpb24uCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IHJlc3VsdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZS0+cihyZXN1bHQp
LmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoIXJldHVyblZhbHVlLmlzT2JqZWN0
KCkpKQotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3Bl
cmFuZCkuanNWYWx1ZSgpOwotCi0gICAgICAgIHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuVlBDKCk7
Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLQotICAgICAg
ICBpZiAoY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwotCi0gICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1l
OwotICAgICAgICBmdW5jdGlvblJldHVyblZhbHVlID0gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxv
Y2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2VudGVyKSB7Ci0gICAgICAgIC8qIGVu
dGVyCi0KLSAgICAgICAgICAgSW5pdGlhbGl6ZXMgbG9jYWwgdmFyaWFibGVzIHRvIHVuZGVmaW5l
ZC4gSWYgdGhlIGNvZGUgYmxvY2sgcmVxdWlyZXMKLSAgICAgICAgICAgYW4gYWN0aXZhdGlvbiwg
ZW50ZXJfd2l0aF9hY3RpdmF0aW9uIGlzIHVzZWQgaW5zdGVhZC4KLQotICAgICAgICAgICBUaGlz
IG9wY29kZSBhcHBlYXJzIG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvZGUgYmxvY2suCi0g
ICAgICAgICovCi0KLSAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihpKSA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfZW50ZXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfY3JlYXRlX2FjdGl2YXRpb24pIHsKLSAgICAg
ICAgLyogY3JlYXRlX2FjdGl2YXRpb24gZHN0KHIpCi0KLSAgICAgICAgICAgSWYgdGhlIGFjdGl2
YXRpb24gb2JqZWN0IGZvciB0aGlzIGNhbGxmcmFtZSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQs
Ci0gICAgICAgICAgIHRoaXMgY3JlYXRlcyBpdCBhbmQgd3JpdGVzIGl0IGJhY2sgdG8gZHN0Lgot
ICAgICAgICAqLwotCi0gICAgICAgIGludCBhY3RpdmF0aW9uUmVnID0gdlBDWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJlZykuanNWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnIoYWN0aXZhdGlvblJlZykgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9jcmVhdGVfYWN0aXZhdGlvbik7Ci0gICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jcmVhdGVfdGhpcykgewot
ICAgICAgICAvKiBvcF9jcmVhdGVfdGhpcyB0aGlzKHIpIHByb3RvKHIpCi0KLSAgICAgICAgICAg
QWxsb2NhdGUgYW4gb2JqZWN0IGFzICd0aGlzJywgZnIgdXNlIGluIGNvbnN0cnVjdGlvbi4KLQot
ICAgICAgICAgICBUaGlzIG9wY29kZSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBiZWdpbm5p
bmcgb2YgYSBjb2RlCi0gICAgICAgICAgIGJsb2NrLgotICAgICAgICAqLwotCi0gICAgICAgIGlu
dCB0aGlzUmVnaXN0ZXIgPSB2UENbMV0udS5vcGVyYW5kOwotCi0gICAgICAgIEpTRnVuY3Rpb24q
IGNvbnN0cnVjdG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKTsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0
YTsKLSAgICAgICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1
Y3REYXRhKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwot
I2VuZGlmCi0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+Y2Fj
aGVkSW5oZXJpdG9ySUQoY2FsbEZyYW1lKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHRoaXNSZWdpc3RlcikgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJhbWUsIHN0cnVjdHVy
ZSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY3JlYXRlX3RoaXMpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfY29u
dmVydF90aGlzKSB7Ci0gICAgICAgIC8qIGNvbnZlcnRfdGhpcyB0aGlzKHIpCi0KLSAgICAgICAg
ICAgVGFrZXMgdGhlIHZhbHVlIGluIHRoZSAndGhpcycgcmVnaXN0ZXIsIGNvbnZlcnRzIGl0IHRv
IGEKLSAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSAndGhp
cycgdmFsdWUsIGFuZAotICAgICAgICAgICBzdG9yZXMgaXQgaW4gdGhlICd0aGlzJyByZWdpc3Rl
ci4gVGhpcyBvcGNvZGUgaXMgZW1pdHRlZAotICAgICAgICAgICB0byBhdm9pZCBkb2luZyB0aGUg
Y29udmVyc2lvbiBpbiB0aGUgY2FsbGVyIHVubmVjZXNzYXJpbHkuCi0KLSAgICAgICAgICAgVGhp
cyBvcGNvZGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZQot
ICAgICAgICAgICBibG9jay4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgdGhpc1JlZ2lzdGVy
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSB0aGlzVmFsID0gY2FsbEZyYW1l
LT5yKHRoaXNSZWdpc3RlcikuanNWYWx1ZSgpOwotICAgICAgICBpZiAodGhpc1ZhbC5pc1ByaW1p
dGl2ZSgpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHRoaXNSZWdpc3Rlcikg
PSBKU1ZhbHVlKHRoaXNWYWwudG9UaGlzT2JqZWN0KGNhbGxGcmFtZSkpOwotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2NvbnZlcnRfdGhpcyk7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pbml0X2xhenlfcmVnKSB7Ci0g
ICAgICAgIC8qIGluaXRfbGF6eV9yZWcgZHN0KHIpCi0KLSAgICAgICAgICAgSW5pdGlhbGlzZXMg
ZHN0KHIpIHRvIEpTVmFsdWUoKS4KLQotICAgICAgICAgICBUaGlzIG9wY29kZSBhcHBlYXJzIG9u
bHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvZGUgYmxvY2suCi0gICAgICAgICAqLwotICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoZHN0KSA9IEpTVmFsdWUoKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
aW5pdF9sYXp5X3JlZyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9jcmVhdGVfYXJndW1lbnRzKSB7Ci0gICAgICAgIC8qIGNyZWF0ZV9h
cmd1bWVudHMgZHN0KHIpCi0KLSAgICAgICAgICAgQ3JlYXRlcyB0aGUgJ2FyZ3VtZW50cycgb2Jq
ZWN0IGFuZCBwbGFjZXMgaXQgaW4gYm90aCB0aGUKLSAgICAgICAgICAgJ2FyZ3VtZW50cycgY2Fs
bCBmcmFtZSBzbG90IGFuZCB0aGUgbG9jYWwgJ2FyZ3VtZW50cycKLSAgICAgICAgICAgcmVnaXN0
ZXIsIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIGluaXRpYWxpc2VkLgotICAgICAgICAgKi8K
LSAgICAgICAgCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotCi0gICAgICAg
IGlmICghY2FsbEZyYW1lLT5yKGRzdCkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUp
OwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGFyZ3Vt
ZW50cyk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGRzdCkpID0gSlNWYWx1ZShhcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV9hcmd1bWVudHMpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfY29uc3RydWN0
KSB7Ci0gICAgICAgIC8qIGNvbnN0cnVjdCBmdW5jKHIpIGFyZ0NvdW50KG4pIHJlZ2lzdGVyT2Zm
c2V0KG4pIHByb3RvKHIpIHRoaXNSZWdpc3RlcihyKQotCi0gICAgICAgICAgIEludm9rZSByZWdp
c3RlciAiZnVuYyIgYXMgYSBjb25zdHJ1Y3Rvci4gRm9yIEpTCi0gICAgICAgICAgIGZ1bmN0aW9u
cywgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpcyBleGFjdGx5IGFzIGZvciB0aGUKLSAgICAgICAg
ICAgImNhbGwiIG9wY29kZSwgZXhjZXB0IHRoYXQgdGhlICJ0aGlzIiB2YWx1ZSBpcyBhIG5ld2x5
Ci0gICAgICAgICAgIGNyZWF0ZWQgT2JqZWN0LiBGb3IgbmF0aXZlIGNvbnN0cnVjdG9ycywgbm8g
InRoaXMiCi0gICAgICAgICAgIHZhbHVlIGlzIHBhc3NlZC4gSW4gZWl0aGVyIGNhc2UsIHRoZSBh
cmdDb3VudCBhbmQgcmVnaXN0ZXJPZmZzZXQKLSAgICAgICAgICAgcmVnaXN0ZXJzIGFyZSBpbnRl
cnByZXRlZCBhcyBmb3IgdGhlICJjYWxsIiBvcGNvZGUuCi0KLSAgICAgICAgICAgUmVnaXN0ZXIg
cHJvdG8gbXVzdCBjb250YWluIHRoZSBwcm90b3R5cGUgcHJvcGVydHkgb2YKLSAgICAgICAgICAg
cmVnaXN0ZXIgZnVuYy4gVGhpcyBpcyB0byBlbmFibGUgcG9seW1vcnBoaWMgaW5saW5lCi0gICAg
ICAgICAgIGNhY2hpbmcgb2YgdGhpcyBsb29rdXAuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50
IGZ1bmMgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbMl0u
dS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10udS5vcGVyYW5k
OwotCi0gICAgICAgIEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihmdW5jKS5qc1ZhbHVlKCk7Ci0K
LSAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgICAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKHYsIGNvbnN0cnVjdERhdGEpOwot
Ci0gICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewotICAgICAg
ICAgICAgSlNTY29wZSogY2FsbERhdGFTY29wZSA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGU7Ci0K
LSAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yQ29uc3RydWN0KGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZSk7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoISFlcnJvcikpIHsKLSAgICAgICAgICAgICAgICBl
eGNlcHRpb25WYWx1ZSA9IGVycm9yOwotICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxsRnJhbWUg
PSBjYWxsRnJhbWU7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZjb25z
dHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25z
dHJ1Y3QoKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JD
YWxsKG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIHJlZ2lzdGVyT2Zmc2V0
LCBhcmdDb3VudCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZSkpIHsKLSAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBwcmV2aW91c0NhbGxGcmFtZTsKLSAgICAgICAgICAg
ICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUp
OwotICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgo
b3BfY29uc3RydWN0KSwgY2FsbERhdGFTY29wZSwgcHJldmlvdXNDYWxsRnJhbWUsIGFyZ0NvdW50
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLSAgICAgICAgICAgIGNvZGVCbG9jayA9IG5ld0Nv
ZGVCbG9jazsKLSAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAg
ICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotI2lm
IEVOQUJMRShPUENPREVfU1RBVFMpCi0gICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVzZXRMYXN0
SW5zdHJ1Y3Rpb24oKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBl
SG9zdCkgewotICAgICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7
Ci0gICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRl
KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBu
ZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBz
Y29wZSwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QodikpOwotCi0gICAgICAgICAgICBK
U1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICp0b3BD
YWxsRnJhbWVTbG90ID0gbmV3Q2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9v
bDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVT
bG90ID0gY2FsbEZyYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVl
OwotCi0gICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpOwotICAg
ICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJU
KGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwotCi0gICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoY2FsbEZyYW1lLCB2KTsKLSAgICAg
ICAgZ290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9zdHJjYXQpIHsK
LSAgICAgICAgLyogc3RyY2F0IGRzdChyKSBzcmMocikgY291bnQobikKLQotICAgICAgICAgICBD
b25zdHJ1Y3QgYSBuZXcgU3RyaW5nIGluc3RhbmNlIHVzaW5nIHRoZSBvcmlnaW5hbAotICAgICAg
ICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0g
ICAgICAgICAgIFRoZSBzdHJpbmcgd2lsbCBiZSB0aGUgcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcg
Y291bnQKLSAgICAgICAgICAgc3RyaW5ncyB3aXRoIHZhbHVlcyB0YWtlbiBmcm9tIHJlZ2lzdGVy
cyBzdGFydGluZyBhdAotICAgICAgICAgICByZWdpc3RlciBzcmMuCi0gICAgICAgICovCi0gICAg
ICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGNvdW50ID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGNvbmNhdGVuYXRlU3RyaW5ncyhjYWxs
RnJhbWUsICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY10sIGNvdW50KTsKLSAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9zdHJj
YXQpOwotCi0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF90b19wcmltaXRpdmUpIHsKLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotCi0gICAgICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpLnRvUHJp
bWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3RvX3By
aW1pdGl2ZSk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3B1c2hfd2l0aF9zY29wZSkgewotICAgICAgICAvKiBwdXNoX3dpdGhfc2Nv
cGUgc2NvcGUocikKLQotICAgICAgICAgICBDb252ZXJ0cyByZWdpc3RlciBzY29wZSB0byBvYmpl
Y3QsIGFuZCBwdXNoZXMgaXQgb250byB0aGUgdG9wCi0gICAgICAgICAgIG9mIHRoZSBzY29wZSBj
aGFpbi4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IHNjb3BlID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHNjb3BlKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBvID0gdi50b09iamVjdChjYWxsRnJhbWUpOwotICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShKU1dpdGhTY29w
ZTo6Y3JlYXRlKGNhbGxGcmFtZSwgbykpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX3B1c2hfd2l0aF9zY29wZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9
Ci0gICAgREVGSU5FX09QQ09ERShvcF9wb3Bfc2NvcGUpIHsKLSAgICAgICAgLyogcG9wX3Njb3Bl
Ci0KLSAgICAgICAgICAgUmVtb3ZlcyB0aGUgdG9wIGl0ZW0gZnJvbSB0aGUgY3VycmVudCBzY29w
ZSBjaGFpbi4KLSAgICAgICAgKi8KLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShjYWxsRnJh
bWUtPnNjb3BlKCktPm5leHQoKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
cG9wX3Njb3BlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX2dldF9wbmFtZXMpIHsKLSAgICAgICAgLyogZ2V0X3BuYW1lcyBkc3Qocikg
YmFzZShyKSBpKG4pIHNpemUobikgYnJlYWtUYXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIENy
ZWF0ZXMgYSBwcm9wZXJ0eSBuYW1lIGxpc3QgZm9yIHJlZ2lzdGVyIGJhc2UgYW5kIHB1dHMgaXQK
LSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LCBpbml0aWFsaXppbmcgaSBhbmQgc2l6ZSBmb3Ig
aXRlcmF0aW9uLiBJZgotICAgICAgICAgICBiYXNlIGlzIHVuZGVmaW5lZCBvciBudWxsLCBqdW1w
cyB0byBicmVha1RhcmdldC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IGkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgc2l6ZSA9IHZQQ1s0XS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCBicmVha1RhcmdldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7Ci0KLSAg
ICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgdlBDICs9IGJyZWFrVGFy
Z2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgSlNPYmplY3QqIG8gPSB2LnRvT2JqZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gby0+c3RydWN0dXJlKCk7Ci0gICAgICAgIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBzdHJ1Y3R1cmUtPmVudW1lcmF0aW9uQ2Fj
aGUoKTsKLSAgICAgICAgaWYgKCFqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yIHx8IGpzUHJvcGVydHlO
YW1lSXRlcmF0b3ItPmNhY2hlZFByb3RvdHlwZUNoYWluKCkgIT0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihjYWxsRnJhbWUpKQotICAgICAgICAgICAganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShjYWxsRnJhbWUsIG8pOwotCi0gICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKLSAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJhc2UpID0gSlNWYWx1ZShvKTsKLSAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGkpID0gUmVnaXN0ZXI6OndpdGhJbnQoMCk7Ci0gICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzaXplKSA9IFJlZ2lzdGVyOjp3aXRoSW50KGpzUHJvcGVy
dHlOYW1lSXRlcmF0b3ItPnNpemUoKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9wbmFtZXMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfbmV4dF9wbmFtZSkgewotICAgICAgICAvKiBuZXh0X3BuYW1lIGRzdChy
KSBiYXNlKHIpIGkobikgc2l6ZShuKSBpdGVyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAg
ICAgQ29waWVzIHRoZSBuZXh0IG5hbWUgZnJvbSB0aGUgcHJvcGVydHkgbmFtZSBsaXN0IGluCi0g
ICAgICAgICAgIHJlZ2lzdGVyIGl0ZXIgdG8gZHN0LCB0aGVuIGp1bXBzIHRvIG9mZnNldCB0YXJn
ZXQuIElmIHRoZXJlIGFyZSBubwotICAgICAgICAgICBuYW1lcyBsZWZ0LCBpbnZhbGlkYXRlcyB0
aGUgaXRlcmF0b3IgYW5kIGNvbnRpbnVlcyB0byB0aGUgbmV4dAotICAgICAgICAgICBpbnN0cnVj
dGlvbi4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGkgPSB2UENb
M10udS5vcGVyYW5kOwotICAgICAgICBpbnQgc2l6ZSA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBpdGVyID0gdlBDWzVdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQ
Q1s2XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBj
YWxsRnJhbWUtPnIoaXRlcikucHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUg
KGNhbGxGcmFtZS0+cihpKS5pKCkgIT0gY2FsbEZyYW1lLT5yKHNpemUpLmkoKSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSBrZXkgPSBpdC0+Z2V0KGNhbGxGcmFtZSwgYXNPYmplY3QoY2FsbEZyYW1l
LT5yKGJhc2UpLmpzVmFsdWUoKSksIGNhbGxGcmFtZS0+cihpKS5pKCkpOwotICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGkpID0gUmVnaXN0ZXI6OndpdGhJbnQoY2FsbEZyYW1lLT5yKGkpLmkoKSArIDEpOwotICAgICAg
ICAgICAgaWYgKGtleSkgewotICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7Ci0g
ICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBrZXk7Ci0gICAgICAg
ICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9uZXh0X3BuYW1lKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX2ptcF9zY29wZXMpIHsKLSAgICAgICAgLyogam1wX3Njb3Bl
cyBjb3VudChuKSB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIFJlbW92ZXMgdGhlIGEgbnVt
YmVyIG9mIGl0ZW1zIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUgY2hhaW4KLSAgICAgICAgICAgc3Bl
Y2lmaWVkIGJ5IGltbWVkaWF0ZSBudW1iZXIgY291bnQsIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0g
ICAgICAgICAgIHRhcmdldC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGNvdW50ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0KLSAg
ICAgICAgSlNTY29wZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICB3aGlsZSAo
Y291bnQtLSkKLSAgICAgICAgICAgIHRtcCA9IHRtcC0+bmV4dCgpOwotICAgICAgICBjYWxsRnJh
bWUtPnNldFNjb3BlKHRtcCk7Ci0KLSAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lD
X0lOVEVSUFJFVEVSKQotICAgIC8vIEFwcGVhc2UgR0NDCi0gICAgZ290byAqKCYmc2tpcF9uZXdf
c2NvcGUpOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXNoX25hbWVfc2NvcGUpIHsK
LSAgICAgICAgLyogbmV3X3Njb3BlIHByb3BlcnR5KGlkKSB2YWx1ZShyKSBhdHRyaWJ1dGVzKHVu
c2lnbmVkKQotICAgICAgICAgCi0gICAgICAgICAgIENvbnN0cnVjdHMgYSBuYW1lIHNjb3BlIG9m
IHRoZSBmb3JtIHsgcHJvcGVydHk8YXR0cmlidXRlcz46IHZhbHVlIH0sCi0gICAgICAgICAgIGFu
ZCBwdXNoZXMgaXQgb250byB0aGUgc2NvcGUgY2hhaW4uCi0gICAgICAgICAqLwotICAgICAgICBj
YWxsRnJhbWUtPnNldFNjb3BlKGNyZWF0ZU5hbWVTY29wZShjYWxsRnJhbWUsIHZQQykpOwotCi0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1c2hfbmFtZV9zY29wZSk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xB
U1NJQ19JTlRFUlBSRVRFUikKLSAgICBza2lwX25ld19zY29wZToKLSNlbmRpZgotICAgIERFRklO
RV9PUENPREUob3BfY2F0Y2gpIHsKLSAgICAgICAgLyogY2F0Y2ggZXgocikKLQotICAgICAgICAg
ICBSZXRyaWV2ZXMgdGhlIFZNJ3MgY3VycmVudCBleGNlcHRpb24gYW5kIHB1dHMgaXQgaW4gcmVn
aXN0ZXIKLSAgICAgICAgICAgZXguIFRoaXMgaXMgb25seSB2YWxpZCBhZnRlciBhbiBleGNlcHRp
b24gaGFzIGJlZW4gcmFpc2VkLAotICAgICAgICAgICBhbmQgdXN1YWxseSBmb3JtcyB0aGUgYmVn
aW5uaW5nIG9mIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgICAgICAqLwotICAgICAgICBBU1NF
UlQoZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEtPmV4Y2VwdGlv
bik7Ci0gICAgICAgIGludCBleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihleCkgPSBleGNlcHRpb25WYWx1ZTsKLSAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBKU1ZhbHVlKCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2F0Y2gp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfdGhyb3cpIHsKLSAgICAgICAgLyogdGhyb3cgZXgocikKLQotICAgICAgICAgICBUaHJvd3Mg
cmVnaXN0ZXIgZXggYXMgYW4gZXhjZXB0aW9uLiBUaGlzIGludm9sdmVzIHRocmVlCi0gICAgICAg
ICAgIHN0ZXBzOiBmaXJzdCwgaXQgaXMgc2V0IGFzIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpbiB0
aGUKLSAgICAgICAgICAgVk0ncyBpbnRlcm5hbCBzdGF0ZSwgdGhlbiB0aGUgc3RhY2sgaXMgdW53
b3VuZCB1bnRpbCBhbgotICAgICAgICAgICBleGNlcHRpb24gaGFuZGxlciBvciBhIG5hdGl2ZSBj
b2RlIGJvdW5kYXJ5IGlzIGZvdW5kLCBhbmQKLSAgICAgICAgICAgdGhlbiBjb250cm9sIHJlc3Vt
ZXMgYXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGlmIGFueSBvcgotICAgICAgICAgICBlbHNlIHRo
ZSBzY3JpcHQgcmV0dXJucyBjb250cm9sIHRvIHRoZSBuZWFyZXN0IG5hdGl2ZSBjYWxsZXIuCi0g
ICAgICAgICovCi0KLSAgICAgICAgaW50IGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
ZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPnIoZXgpLmpzVmFsdWUoKTsKLQotICAgICAgICBo
YW5kbGVyID0gdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDIC0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFoYW5kbGVy
KQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1
ZSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAg
ICAgdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgaGFuZGxlci0+dGFy
Z2V0OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKSB7Ci0gICAgICAgIC8qIG9wX3Rocm93X3JlZmVy
ZW5jZV9lcnJvciBtZXNzYWdlKGspCi0KLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyByZWZl
cmVuY2UgRXJyb3IgaW5zdGFuY2UgdXNpbmcgdGhlCi0gICAgICAgICAgIG9yaWdpbmFsIGNvbnN0
cnVjdG9yLCB1c2luZyBjb25zdGFudCBtZXNzYWdlIGFzIHRoZQotICAgICAgICAgICBtZXNzYWdl
IHN0cmluZy4gVGhlIHJlc3VsdCBpcyB0aHJvd24uCi0gICAgICAgICovCi0gICAgICAgIFN0cmlu
ZyBtZXNzYWdlID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKS50b1N0
cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IEpTVmFsdWUoY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKSk7Ci0g
ICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZW5kKSB7
Ci0gICAgICAgIC8qIGVuZCByZXN1bHQocikKLSAgICAgICAgICAgCi0gICAgICAgICAgIFJldHVy
biByZWdpc3RlciByZXN1bHQgYXMgdGhlIHZhbHVlIG9mIGEgZ2xvYmFsIG9yIGV2YWwKLSAgICAg
ICAgICAgcHJvZ3JhbS4gUmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNhbGxpbmcgbmF0aXZlIGNvZGUu
Ci0gICAgICAgICovCi0KLSAgICAgICAgaW50IHJlc3VsdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIocmVzdWx0KS5qc1ZhbHVlKCk7Ci0gICAgfQotICAg
IERFRklORV9PUENPREUob3BfcHV0X2dldHRlcl9zZXR0ZXIpIHsKLSAgICAgICAgLyogcHV0X2dl
dHRlcl9zZXR0ZXIgYmFzZShyKSBwcm9wZXJ0eShpZCkgZ2V0dGVyKHIpIHNldHRlcihyKQotCi0g
ICAgICAgICAgIFB1dHMgYWNjZXNzb3IgZGVzY3JpcHRvciB0byByZWdpc3RlciBiYXNlIGFzIHRo
ZSBuYW1lZAotICAgICAgICAgICBpZGVudGlmaWVyIHByb3BlcnR5LiBCYXNlIGFuZCBmdW5jdGlv
biBtYXkgYmUgb2JqZWN0cwotICAgICAgICAgICBvciB1bmRlZmluZWQsIHRoaXMgb3Agc2hvdWxk
IG9ubHkgYmUgdXNlZCBmb3IgYWNjZXNzb3JzCi0gICAgICAgICAgIGRlZmluZWQgaW4gb2JqZWN0
IGxpdGVyYWwgZm9ybS4KLQotICAgICAgICAgICBVbmxpa2UgbWFueSBvcGNvZGVzLCB0aGlzIG9u
ZSBkb2VzIG5vdCB3cml0ZSBhbnkgb3V0cHV0IHRvCi0gICAgICAgICAgIHRoZSByZWdpc3RlciBm
aWxlLgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBnZXR0
ZXJSZWcgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgc2V0dGVyUmVnID0gdlBDWzRd
LnUub3BlcmFuZDsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUo
KS5pc09iamVjdCgpKTsKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChjYWxs
RnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBj
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShjYWxsRnJhbWUpOwotCi0gICAgICAgIEpT
VmFsdWUgZ2V0dGVyID0gY2FsbEZyYW1lLT5yKGdldHRlclJlZykuanNWYWx1ZSgpOwotICAgICAg
ICBKU1ZhbHVlIHNldHRlciA9IGNhbGxGcmFtZS0+cihzZXR0ZXJSZWcpLmpzVmFsdWUoKTsKLSAg
ICAgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8IGdldHRlci5pc1VuZGVmaW5lZCgpKTsK
LSAgICAgICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpIHx8IHNldHRlci5pc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8IHNldHRlci5pc09iamVjdCgp
KTsKLQotICAgICAgICBpZiAoIWdldHRlci5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYWNj
ZXNzb3ItPnNldEdldHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QoZ2V0dGVy
KSk7Ci0gICAgICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBhY2Nl
c3Nvci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChzZXR0ZXIp
KTsKLSAgICAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBpZGVudCwg
YWNjZXNzb3IsIEFjY2Vzc29yKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9w
dXRfZ2V0dGVyX3NldHRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0g
ICAgREVGSU5FX09QQ09ERShvcF9tZXRob2RfY2hlY2spIHsKLSAgICAgICAgdlBDKys7Ci0gICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9kZWJ1
ZykgewotICAgICAgICAvKiBkZWJ1ZyBkZWJ1Z0hvb2tJRChuKSBmaXJzdExpbmUobikgbGFzdExp
bmUobikgY29sdW1uKG4pCi0KLSAgICAgICAgIE5vdGlmaWVzIHRoZSBkZWJ1Z2dlciBvZiB0aGUg
Y3VycmVudCBzdGF0ZSBvZiBleGVjdXRpb24uIFRoaXMgb3Bjb2RlCi0gICAgICAgICBpcyBvbmx5
IGdlbmVyYXRlZCB3aGlsZSB0aGUgZGVidWdnZXIgaXMgYXR0YWNoZWQuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkZWJ1Z0hvb2tJRCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBm
aXJzdExpbmUgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgbGFzdExpbmUgPSB2UENb
M10udS5vcGVyYW5kOwotICAgICAgICBpbnQgY29sdW1uID0gdlBDWzRdLnUub3BlcmFuZDsKLQot
Ci0gICAgICAgIGRlYnVnKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVn
SG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgY29sdW1uKTsKLQotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9kZWJ1Zyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wcm9maWxlX3dpbGxfY2FsbCkgewotICAgICAgICAv
KiBvcF9wcm9maWxlX3dpbGxfY2FsbCBmdW5jdGlvbihyKQotCi0gICAgICAgICBOb3RpZmllcyB0
aGUgcHJvZmlsZXIgb2YgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgb3Bj
b2RlCi0gICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJlIGVu
YWJsZWQuCi0gICAgICAgICovCi0gICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0KLSAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEtPmVuYWJs
ZWRQcm9maWxlcigpKQotICAgICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5yKGZ1bmN0aW9uKS5qc1ZhbHVlKCkpOwotCi0gICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3Byb2ZpbGVfZGlkX2NhbGwpIHsK
LSAgICAgICAgLyogb3BfcHJvZmlsZV9kaWRfY2FsbCBmdW5jdGlvbihyKQotCi0gICAgICAgICBO
b3RpZmllcyB0aGUgcHJvZmlsZXIgb2YgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMg
b3Bjb2RlCi0gICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJl
IGVuYWJsZWQuCi0gICAgICAgICovCi0gICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0KLSAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEtPmVu
YWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFsdWUoKSk7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgdm1fdGhyb3c6IHsKLSAgICAgICAgZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uID0gSlNWYWx1ZSgpOwotICAgICAgICBpZiAoIXRpY2tDb3VudCkgewotICAgICAgICAg
ICAgLy8gVGhlIGV4Y2VwdGlvblZhbHVlIGlzIGEgbGllISAoR0NDIHByb2R1Y2VzIGJhZCBjb2Rl
IGZvciByZWFzb25zIEkgCi0gICAgICAgICAgICAvLyBjYW5ub3QgZmF0aG9tIGlmIHdlIGRvbid0
IGFzc2lnbiB0byB0aGUgZXhjZXB0aW9uVmFsdWUgYmVmb3JlIGJyYW5jaGluZykKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24o
Z2xvYmFsRGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAgICBoYW5kbGVy
ID0gdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDIC0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFoYW5kbGVyKSB7Ci0g
ICAgICAgICAgICAvLyBDYW4ndCB1c2UgdGhlIGNhbGxmcmFtZSBhdCB0aGlzIHBvaW50IGFzIHRo
ZSBzY29wZWNoYWluLCBldGMgaGF2ZQotICAgICAgICAgICAgLy8gYmVlbiByZWxlYXNlZC4KLSAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBl
eGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyBoYW5kbGVyLT50YXJnZXQ7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgfQotI2lmICFFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJF
VEVSKQotICAgIH0gLy8gaXRlcmF0b3IgbG9vcCBlbmRzCi0jZW5kaWYKLSAgICAjdW5kZWYgTkVY
VF9JTlNUUlVDVElPTgotICAgICN1bmRlZiBERUZJTkVfT1BDT0RFCi0gICAgI3VuZGVmIENIRUNL
X0ZPUl9FWENFUFRJT04KLSAgICAjdW5kZWYgQ0hFQ0tfRk9SX1RJTUVPVVQKLSNlbmRpZiAvLyBF
TkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLX0KLQotI2VuZGlmIC8vICFFTkFCTEUoTExJTlRf
Q19MT09QKQotCi0KLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzRnJvbVZN
Q29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0Ci17
Ci0gICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFt
ZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7Ci0gICAgaWYgKCFmdW5jdGlvbkNhbGxG
cmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVu
dHMgPSBBcmd1bWVudHM6OmNyZWF0ZShmdW5jdGlvbkNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBm
dW5jdGlvbkNhbGxGcmFtZSk7Ci0gICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKLSAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwotfQotCi1KU1ZhbHVlIEludGVy
cHJldGVyOjpyZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAotewotICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxs
RnJhbWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rp
b24pOwotCi0gICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIAotICAgIGludCBsaW5lTnVtYmVyOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0OwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2Rl
T2Zmc2V0KTsKLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0gICAgSlNWYWx1ZSBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7Ci0gICAgaWYgKCFj
YWxsZXIpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIC8vIFNraXAgb3ZlciBmdW5j
dGlvbiBiaW5kaW5ncy4KLSAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkpOwotICAgIHdoaWxl
IChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpzX2luZm8pKSB7
Ci0gICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNhbGxlckZyYW1lLCBsaW5lTnVtYmVyLCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAg
IGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAg
IGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKLSAgICAgICAgaWYgKCFjYWxsZXIpCi0g
ICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNhbGxlcjsK
LX0KLQotdm9pZCBJbnRlcnByZXRlcjo6cmV0cmlldmVMYXN0Q2FsbGVyKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBzb3VyY2VJRCwgU3RyaW5nJiBzb3Vy
Y2VVUkwsIEpTVmFsdWUmIGZ1bmN0aW9uKSBjb25zdAotewotICAgIGZ1bmN0aW9uID0gSlNWYWx1
ZSgpOwotICAgIGxpbmVOdW1iZXIgPSAtMTsKLSAgICBzb3VyY2VVUkwgPSBTdHJpbmcoKTsKLQot
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBpZiAoIWNhbGxlckNvZGVCbG9jaykKKyAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoIWNhbGxlckNv
ZGVCbG9jaykKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBpZiAoIWNhbGxlckZyYW1l
LT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpCi0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2Fs
bGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblZQQygpKTsKLSNp
ZiBFTkFCTEUoSklUKQotICAgIGVsc2UKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJD
b2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblBD
KCkpOwotI2VuZGlmCi0jZWxzZQogICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKLSNl
bmRpZgogICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCAtIDEpOwogICAgIHNvdXJjZUlEID0gY2FsbGVyQ29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKTsKICAgICBzb3VyY2VVUkwgPSBj
YWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZp
c2lvbiAxMjg5MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDIwICsyMDQsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE9wY29kZUlEIGdldE9wY29kZUlEKE9wY29kZSBvcGNvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChtX2luaXRpYWxpemVkKTsKLSNpZiBFTkFCTEUoQ09NUFVU
RURfR09UT19PUENPREVTKQotI2lmIEVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoQ09NUFVURURf
R09UT19PUENPREVTKSAmJiBFTkFCTEUoTExJTlQpCiAgICAgICAgICAgICBBU1NFUlQoaXNPcGNv
ZGUob3Bjb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGVJRFRhYmxlLmdldChvcGNv
ZGUpOwotI2VsaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAg
ICAgICAgICAgIEFTU0VSVChpc09wY29kZShvcGNvZGUpKTsKLSAgICAgICAgICAgIGlmICghbV9j
bGFzc2ljRW5hYmxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T3Bjb2Rl
SUQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wY29kZSkpOwotCi0gICAgICAgICAgICByZXR1
cm4gbV9vcGNvZGVJRFRhYmxlLmdldChvcGNvZGUpOwotI2VuZGlmIC8vIEVOQUJMRShDT01QVVRF
RF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0jZWxzZSAvLyAhRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKKyNlbHNlCiAgICAgICAgICAgICByZXR1cm4gb3Bjb2RlOwotI2VuZGlmIC8v
ICFFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQorI2VuZGlmCiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGJvb2wgY2xhc3NpY0VuYWJsZWQoKQpAQCAtMjYwLDE1ICsyNTIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbmRSZXBlYXRDYWxsKENhbGxGcmFtZUNsb3N1
cmUmKTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKENhbGxGcmFtZUNsb3N1cmUmKTsKIAotI2lm
IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBORVZFUl9JTkxJTkUgSlNTY29w
ZSogY3JlYXRlTmFtZVNjb3BlKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpOwot
Ci0gICAgICAgIHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIElu
c3RydWN0aW9uKiwgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgdW5jYWNoZUdldEJ5SUQo
Q29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7Ci0gICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRC
eUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHVuY2FjaGVQdXRCeUlE
KENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpOyAgICAgICAgCi0jZW5kaWYgLy8gRU5BQkxF
KENMQVNTSUNfSU5URVJQUkVURVIpCi0KICAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgdW53aW5k
Q2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQs
IENvZGVCbG9jayomKTsKIAogICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBDYWxsRnJhbWUq
IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayosIFJlZ2lzdGVyRmlsZSosIENh
bGxGcmFtZSosIHNpemVfdCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ2MpOwpAQCAtMjkxLDE1ICsy
NzQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJGaWxlIG1fcmVnaXN0
ZXJGaWxlOwogICAgICAgICAKLSNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQotI2lm
IEVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKSAmJiBFTkFC
TEUoTExJTlQpCiAgICAgICAgIE9wY29kZSogbV9vcGNvZGVUYWJsZTsgLy8gTWFwcyBPcGNvZGVJ
RCA9PiBPcGNvZGUgZm9yIGNvbXBpbGluZwogICAgICAgICBIYXNoTWFwPE9wY29kZSwgT3Bjb2Rl
SUQ+IG1fb3Bjb2RlSURUYWJsZTsgLy8gTWFwcyBPcGNvZGUgPT4gT3Bjb2RlSUQgZm9yIGRlY29t
cGlsaW5nCi0jZWxpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQot
ICAgICAgICBPcGNvZGUgbV9vcGNvZGVUYWJsZVtudW1PcGNvZGVJRHNdOyAvLyBNYXBzIE9wY29k
ZUlEID0+IE9wY29kZSBmb3IgY29tcGlsaW5nCi0gICAgICAgIEhhc2hNYXA8T3Bjb2RlLCBPcGNv
ZGVJRD4gbV9vcGNvZGVJRFRhYmxlOyAvLyBNYXBzIE9wY29kZSA9PiBPcGNvZGVJRCBmb3IgZGVj
b21waWxpbmcKICNlbmRpZgotI2VuZGlmIC8vIEVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMp
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Q
b29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDEyODkwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogTWV0YUFsbG9j
YXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRv
IDMyIGJ5dGVzCiAgICAgewogICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9u
OjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUsIE9T
QWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVl
KTsKLSNpZiAhKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlQpKQor
I2lmICFFTkFCTEUoTExJTlQpCiAgICAgICAgIGlmICghbV9yZXNlcnZhdGlvbikKICAgICAgICAg
ICAgIENSQVNIKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMjg5MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDExICsy
MzIsNiBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAg
aWYgKCFtX2ppdENvZGVGb3JDYWxsKQotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRF
eHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2V2YWxDb2RlQmxvY2spKTsKLSAgICBlbHNlCi0jZW5k
aWYKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpt
X2V2YWxDb2RlQmxvY2spICsgbV9qaXRDb2RlRm9yQ2FsbC5zaXplKCkpOwogI2Vsc2UKICAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2V2YWxDb2Rl
QmxvY2spKTsKQEAgLTM1NywxMiArMzUyLDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlSW50ZQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICghbV9qaXRDb2RlRm9yQ2FsbCkKLSAgICAgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9wcm9ncmFtQ29k
ZUJsb2NrKSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fcHJvZ3JhbUNvZGVCbG9jaykgKyBtX2ppdENv
ZGVGb3JDYWxsLnNpemUoKSk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwuc2l6
ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CiAjZW5kaWYKQEAgLTUzNiwxMiArNTI2LDcg
QEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICgh
bV9qaXRDb2RlRm9yQ2FsbCkKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSk7Ci0gICAgZWxzZQotI2VuZGlm
Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2Yo
Km1fY29kZUJsb2NrRm9yQ2FsbCkgKyBtX2ppdENvZGVGb3JDYWxsLnNpemUoKSk7CisgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tG
b3JDYWxsKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxs
KSk7CiAjZW5kaWYKQEAgLTU3OSwxMSArNTY0LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvcgogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShD
TEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICghbV9qaXRDb2RlRm9yQ29uc3RydWN0KQotICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCkpOwotICAgIGVsc2UKLSNlbmRpZgogICAgIEhlYXA6OmhlYXAo
dGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KSArIG1faml0Q29kZUZvckNvbnN0cnVjdC5zaXplKCkpOwogI2Vsc2UKICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMTI4OTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVF9DX0xPT1ApCisjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAg
ICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rv
cikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgp
KTsKQEAgLTMxNiwxNSArMzE2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRp
ZgogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpOwotICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2ludHJpbnNpYyA9IE5vSW50
cmluc2ljOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAgICAgICAgIE5hdGl2
ZUV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgICAgICA6IEV4ZWN1dGFi
bGVCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEubmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5n
ZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTI4OTAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsMTEgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBQcm90b3R5
cGVUYQogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBzdHJpbmdUYWJsZTsKIGV4dGVybiBjb25zdCBI
YXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3JUYWJsZTsKIAotI2lmIEVOQUJMRShBU1NFTUJMRVIp
ICYmIChFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKSkKKy8vIE5v
dGU6IFBsYXRmb3JtLmggd2lsbCBlbmZvcmNlIHRoYXQgRU5BQkxFKEFTU0VNQkxFUikgaXMgdHJ1
ZSBpZiBlaXRoZXIKKy8vIEVOQUJMRShKSVQpIG9yIEVOQUJMRShZQVJSX0pJVCkgb3IgYm90aCBh
cmUgZW5hYmxlZC4gVGhlIGNvZGUgYmVsb3cKKy8vIGp1c3QgY2hlY2tzIGZvciBFTkFCTEUoSklU
KSBvciBFTkFCTEUoWUFSUl9KSVQpIHdpdGggdGhpcyBwcmVtaXNlIGluIG1pbmQuCisKKyNpZiBF
TkFCTEUoQVNTRU1CTEVSKQogc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVB
bGxvY2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCiB7CiAgICAgaWYgKCFleGVjdXRhYmxlQWxs
b2NhdG9yLmlzVmFsaWQoKSB8fCAoIU9wdGlvbnM6OnVzZUpJVCgpICYmICFPcHRpb25zOjp1c2VS
ZWdFeHBKSVQoKSkpCkBAIC0xMjQsNyArMTI4LDcgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1i
bGVyKEV4ZWN1dGFibGVBbAogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKIAogSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEo
R2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSB0aHJlYWRTdGFj
a1R5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDoKQEAgLTE4MCw5ICsxODQsMTMgQEAgSlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgbV90aW1lb3V0Q291
bnQoNTEyKQogI2VuZGlmCiAgICAgLCBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29uc3QoMCkK
LSNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8
IEVOQUJMRShMTElOVCkpCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIG1fY2FuVXNlQXNz
ZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihleGVjdXRhYmxlQWxsb2NhdG9yKSkKKyNlbmRpZgorI2lm
IEVOQUJMRShKSVQpCiAgICAgLCBtX2NhblVzZUpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRp
b25zOjp1c2VKSVQoKSkKKyNlbmRpZgorI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAsIG1fY2Fu
VXNlUmVnRXhwSklUKG1fY2FuVXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgp
KQogI2VuZGlmCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkBAIC0zNzAsMTAgKzM3OCw2IEBA
IHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckkKIAogTmF0aXZlRXhlY3V0
YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rp
b24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewotI2lmIEVOQUJMRShDTEFTU0lDX0lO
VEVSUFJFVEVSKQotICAgIGlmICghY2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBOYXRpdmVF
eGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0jZW5kaWYK
ICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24sIGNv
bnN0cnVjdG9yKTsKIH0KIE5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1
bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlz
aW9uIDEyODkwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsMjAgKzI4MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgfQogCi0jaWYg
IUVOQUJMRShKSVQpCi0gICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gZmFsc2U7IH0g
Ly8gaW50ZXJwcmV0ZXIgb25seQotI2VsaWYgIUVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSAm
JiAhRU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKKyAgICAg
ICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJVDsgfQorI2VsaWYgRU5BQkxF
KEpJVCkKICAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiB0cnVlOyB9IC8vIGppdCBv
bmx5CiAjZWxzZQotICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlSklU
OyB9CisgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gaW50ZXJw
cmV0ZXIgb25seQogI2VuZGlmCiAKLSNpZiAhRU5BQkxFKFlBUlJfSklUKQotICAgICAgICBib29s
IGNhblVzZVJlZ0V4cEpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkK
LSNlbGlmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgJiYgIUVOQUJMRShMTElOVCkKLSAg
ICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiB0cnVlOyB9IC8vIGppdCBvbmx5
Ci0jZWxzZQorI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBK
SVQoKSB7IHJldHVybiBtX2NhblVzZVJlZ0V4cEpJVDsgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBj
YW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5CiAj
ZW5kaWYKIAogICAgICAgICBQcml2YXRlTmFtZSBtX2luaGVyaXRvcklES2V5OwpAQCAtNDQwLDkg
KzQzOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERh
dGFUeXBlLCBUaHJlYWRTdGFja1R5cGUsIEhlYXBUeXBlKTsKICAgICAgICAgc3RhdGljIEpTR2xv
YmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICAgICAgdm9pZCBjcmVhdGVO
YXRpdmVUaHVuaygpOwotI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIChFTkFCTEUoQ0xBU1NJQ19J
TlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKSkKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAg
ICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOworI2VuZGlmCisjaWYgRU5BQkxFKEpJVCkKICAg
ICAgICAgYm9vbCBtX2NhblVzZUpJVDsKKyNlbmRpZgorI2lmIEVOQUJMRShZQVJSX0pJVCkKICAg
ICAgICAgYm9vbCBtX2NhblVzZVJlZ0V4cEpJVDsKICNlbmRpZgogI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQpJbmRleDogU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3JQb3NpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3JQb3NpeC5jcHAJKHJldmlzaW9uIDEy
ODkwMykKKysrIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCB2b2lkKiBPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENv
bW1pdChzaXplCiAKICAgICByZXN1bHQgPSBtbWFwKHJlc3VsdCwgYnl0ZXMsIHByb3RlY3Rpb24s
IGZsYWdzLCBmZCwgMCk7CiAgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgI2lm
IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlQpCisjaWYgRU5BQkxF
KExMSU5UKQogICAgICAgICBpZiAoZXhlY3V0YWJsZSkKICAgICAgICAgICAgIHJlc3VsdCA9IDA7
CiAgICAgICAgIGVsc2UKLSAgICAjZW5kaWYKKyNlbmRpZgogICAgICAgICAgICAgQ1JBU0goKTsK
ICAgICB9CiAgICAgaWYgKHJlc3VsdCAmJiBpbmNsdWRlc0d1YXJkUGFnZXMpIHsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkocmV2aXNpb24gMTI4OTAzKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAko
d29ya2luZyBjb3B5KQpAQCAtNjA0LDExICs2MDQsOSBAQAogI2RlZmluZSBXVEZfVVNFX1BUSFJF
QURTIDEKIAogI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCi0gICAgI2RlZmluZSBFTkFCTEVf
Q0xBU1NJQ19JTlRFUlBSRVRFUiAxCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDAKICAgICAjZGVm
aW5lIEVOQUJMRV9ZQVJSX0pJVCAwCiAjZWxzZQotICAgICNkZWZpbmUgRU5BQkxFX0NMQVNTSUNf
SU5URVJQUkVURVIgMAogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAgICAgI2RlZmluZSBFTkFC
TEVfTExJTlQgMQogICAgICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKQEAgLTY0MSw3ICs2Mzks
OSBAQAogCiAjaWYgUExBVEZPUk0oV1gpCiAjaWYgIUNQVShQUEMpCisjaWYgIWRlZmluZWQoRU5B
QkxFX0FTU0VNQkxFUikKICNkZWZpbmUgRU5BQkxFX0FTU0VNQkxFUiAxCisjZW5kaWYKICNkZWZp
bmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKICNkZWZpbmUgRU5BQkxFX0dMT0JBTF9GQVNUTUFMTE9D
X05FVyAwCkBAIC05NTMsMTMgKzk1Myw4IEBACiAjZGVmaW5lIEVOQUJMRV9XUklURV9CQVJSSUVS
X1BST0ZJTElORyAwCiAjZW5kaWYKIAotLyogRW5zdXJlIHRoYXQgZWl0aGVyIHRoZSBKSVQgb3Ig
dGhlIGludGVycHJldGVyIGhhcyBiZWVuIGVuYWJsZWQuICovCi0jaWYgIWRlZmluZWQoRU5BQkxF
X0NMQVNTSUNfSU5URVJQUkVURVIpICYmICFFTkFCTEUoSklUKSAmJiAhRU5BQkxFKExMSU5UKQot
I2RlZmluZSBFTkFCTEVfQ0xBU1NJQ19JTlRFUlBSRVRFUiAxCi0jZW5kaWYKLQogLyogSWYgdGhl
IGppdCBhbmQgY2xhc3NpYyBpbnRlcnByZXRlciBpcyBub3QgYXZhaWxhYmxlLCBlbmFibGUgdGhl
IExMSW50IEMgTG9vcDogKi8KLSNpZiAhRU5BQkxFKEpJVCkgJiYgIUVOQUJMRShDTEFTU0lDX0lO
VEVSUFJFVEVSKQorI2lmICFFTkFCTEUoSklUKQogICAgICNkZWZpbmUgRU5BQkxFX0xMSU5UIDEK
ICAgICAjZGVmaW5lIEVOQUJMRV9MTElOVF9DX0xPT1AgMQogICAgICNkZWZpbmUgRU5BQkxFX0RG
R19KSVQgMApAQCAtOTY3LDE0ICs5NjIsOSBAQAogCiAvKiBEbyBhIHNhbml0eSBjaGVjayB0byBt
YWtlIHN1cmUgdGhhdCB3ZSBhdCBsZWFzdCBoYXZlIG9uZSBleGVjdXRpb24gZW5naW5lIGluCiAg
ICB1c2U6ICovCi0jaWYgIShFTkFCTEUoSklUKSB8fCBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRF
UikgfHwgRU5BQkxFKExMSU5UKSkKKyNpZiAhKEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkp
CiAjZXJyb3IgWW91IGhhdmUgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZXhlY3V0aW9uIG1vZGVsIGVu
YWJsZWQgdG8gYnVpbGQgSlNDCiAjZW5kaWYKLS8qIERvIGEgc2FuaXR5IGNoZWNrIHRvIG1ha2Ug
c3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgYm90aCB0aGUgY2xhc3NpYyBpbnRlcnByZXRlcgotICAg
YW5kIHRoZSBsbGludCBDIGxvb3AgaW4gdXNlIGF0IHRoZSBzYW1lIHRpbWU6ICovCi0jaWYgRU5B
QkxFKENMQVNTSUNfSU5URVJQUkVURVIpICYmIEVOQUJMRShMTElOVF9DX0xPT1ApCi0jZXJyb3Ig
WW91IGNhbm5vdCBidWlsZCBib3RoIHRoZSBjbGFzc2ljIGludGVycHJldGVyIGFuZCB0aGUgbGxp
bnQgQyBsb29wIHRvZ2V0aGVyCi0jZW5kaWYKIAogLyogQ29uZmlndXJlIHRoZSBKSVQgKi8KICNp
ZiBDUFUoWDg2KSAmJiBDT01QSUxFUihNU1ZDKQpAQCAtOTg5LDEyICs5NzksOSBAQAogI2lmIENP
TVBJTEVSKEdDQykgfHwgKFJWQ1RfVkVSU0lPTl9BVF9MRUFTVCg0LCAwLCAwLCAwKSAmJiBkZWZp
bmVkKF9fR05VQ19fKSkKICNkZWZpbmUgSEFWRV9DT01QVVRFRF9HT1RPIDEKICNlbmRpZgotI2lm
IEhBVkUoQ09NUFVURURfR09UTykgJiYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0jZGVm
aW5lIEVOQUJMRV9DT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIgMQotI2VuZGlmCiAK
IC8qIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBDb21wdXRlZCBHb3RvIE9wY29kZXMg
b3Igbm90OiAqLwotI2lmIChIQVZFKENPTVBVVEVEX0dPVE8pICYmIEVOQUJMRShMTElOVCkpIHx8
IEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCisjaWYgSEFWRShDT01Q
VVRFRF9HT1RPKSAmJiBFTkFCTEUoTExJTlQpCiAjZGVmaW5lIEVOQUJMRV9DT01QVVRFRF9HT1RP
X09QQ09ERVMgMQogI2VuZGlmCiAKQEAgLTEwMDksOSArOTk2LDE2IEBACiAjZGVmaW5lIEVOQUJM
RV9ZQVJSX0pJVF9ERUJVRyAwCiAjZW5kaWYKIAorLyogSWYgZWl0aGVyIHRoZSBKSVQgb3IgdGhl
IFJlZ0V4cCBKSVQgaXMgZW5hYmxlZCwgdGhlbiB0aGUgQXNzZW1ibGVyIG11c3QgYmUKKyAgIGVu
YWJsZWQgYXMgd2VsbDogKi8KICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoWUFSUl9KSVQpCisj
aWYgZGVmaW5lZChFTkFCTEVfQVNTRU1CTEVSKSAmJiAhRU5BQkxFX0FTU0VNQkxFUgorI2Vycm9y
ICJDYW5ub3QgZW5hYmxlIHRoZSBKSVQgb3IgUmVnRXhwIEpJVCB3aXRob3V0IGVuYWJsaW5nIHRo
ZSBBc3NlbWJsZXIiCisjZWxzZQorI3VuZGVmIEVOQUJMRV9BU1NFTUJMRVIKICNkZWZpbmUgRU5B
QkxFX0FTU0VNQkxFUiAxCiAjZW5kaWYKKyNlbmRpZgogCiAvKiBQaWNrIHdoaWNoIGFsbG9jYXRv
ciB0byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBpZiB0aGUgYXNz
ZW1ibGVyIGlzIGNvbXBpbGVkIGluLgogICAgT24geDg2LTY0IHdlIHVzZSBhIHNpbmdsZSBmaXhl
ZCBtbWFwLCBvbiBvdGhlciBwbGF0Zm9ybXMgd2UgbW1hcCBvbiBkZW1hbmQuICovCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhRW5hYmxlRmVh
dHVyZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0Fib3V0RGF0YUVuYWJsZUZlYXR1cmVzLmluCShyZXZpc2lvbiAxMjg5MDMpCisrKyBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhRW5hYmxlRmVh
dHVyZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyLDExICsxMiw5IEBAIEJMT0IKIEJSQU5DSF9D
T01QQUNUSU9OCiBDQUxFTkRBUl9QSUNLRVIKIENIQU5ORUxfTUVTU0FHSU5HCi1DTEFTU0lDX0lO
VEVSUFJFVEVSCiBDT0RFQkxPQ0tfU0FNUExJTkcKIENPTVBBUkVfQU5EX1NXQVAKIENPTVBVVEVE
X0dPVE8KLUNPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUgogQ09NUFVURURfR09UT19J
TlRFUlBSRVRFUgogQ09OU0lTVEVOQ1lfQ0hFQ0sKIENPTlRFWFRfTUVOVVMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165483</attachid>
            <date>2012-09-24 18:22:45 -0700</date>
            <delta_ts>2012-09-24 18:30:07 -0700</delta_ts>
            <desc>Fix.</desc>
            <filename>bug-96969.patch</filename>
            <type>text/plain</type>
            <size>191317</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA5LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBE
ZWxldGluZyB0aGUgY2xhc3NpYyBpbnRlcnByZXRlciBhbmQgY2xlYW5pbmcgdXAgc29tZSBidWls
ZCBvcHRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTY5NjkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1
bXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAg
ICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5jcHA6CisgICAgICAgIChKU0M6OkFic3RyYWN0UEM6OkFic3RyYWN0UEMp
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuaDoKKyAgICAgICAgKEFic3RyYWN0
UEMpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoRXhlY1N0
YXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6fkludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6aXNPcGNvZGUpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6Z2V0TGluZU51bWJlckZvckNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OmdldENhbGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNv
ZGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXJGcm9tVk1Db2Rl
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcik6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmdldE9wY29kZUlEKToKKyAgICAgICAgKEludGVycHJldGVyKToKKyAgICAgICAgKiBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6Rml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Ip
OgorICAgICAgICAqIG9mZmxpbmVhc20vYXNtLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vb2Zm
c2V0cy5yYjoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRl
KToKKyAgICAgICAgKE5hdGl2ZUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y2FuVXNlSklUKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxEYXRhOjpjYW5Vc2VSZWdFeHBKSVQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorCiAyMDEyLTA5LTI0
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVmFsdWVUb0ludDMy
IGJvb2wgY2FzZSBkb2VzIGJhZCB0aGluZ3MgdG8gcmVnaXN0ZXJzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTI5NDM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4OCwyNSArNTg4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICB9IHdoaWxlIChpIDwgbV9nbG9iYWxSZXNvbHZlSW5mb3Muc2l6ZSgp
KTsKICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBp
ZiAoIW1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICBkYXRhTG9nKCJcblN0cnVjdHVy
ZXM6XG4iKTsKLQotICAgIGlmICghbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLmlzRW1wdHko
KSkgewotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICBw
cmludFN0cnVjdHVyZXMoJmluc3RydWN0aW9ucygpW21fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9u
c1tpXV0pOwotICAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fZ2xvYmFs
UmVzb2x2ZUluc3RydWN0aW9ucy5zaXplKCkpOwotICAgIH0KLSAgICBpZiAoIW1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgcHJpbnRTdHJ1Y3R1cmVzKCZpbnN0cnVjdGlvbnMoKVtt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgICAgICAgICAgKytpOwotICAg
ICAgICB9IHdoaWxlIChpIDwgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOwot
ICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFMb2coIlxuRXhjZXB0aW9u
IEhhbmRsZXJzOlxuIik7CkBAIC0yMDY1LDkgKzIwNDYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7Ci0gICAgLy8gaW50
ZXJwcmV0ZXItPmNsYXNzaWNFbmFibGVkKCkgcmV0dXJucyB0cnVlIGlmIHRoZSBvbGQgQysrIGlu
dGVycHJldGVyIGlzIGVuYWJsZWQuIElmIHRoYXQncyBlbmFibGVkCi0gICAgLy8gdGhlbiB3ZSdy
ZSBub3QgdXNpbmcgTExJbnQuCi0gICAgaWYgKCFpbnRlcnByZXRlci0+Y2xhc3NpY0VuYWJsZWQo
KSAmJiAhIW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKKyAgICBpZiAoISFudW1iZXJPZkluc3Ry
dWN0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
IEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSkgewpAQCAtMjI2MCwxNCAr
MjIzOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJF
VEVSKQotICAgIGlmIChtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5jbGFzc2ljRW5hYmxlZCgp
ICYmICEhbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBzaXpl
ID0gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgdmlzaXRTdHJ1Y3R1cmVzKHZpc2l0b3IsICZpbnN0cnVjdGlvbnMo
KVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgICAgIHZpc2l0U3RydWN0dXJlcyh2aXNpdG9yLCAmaW5zdHJ1Y3Rp
b25zKClbbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgfQotI2VuZGlmCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucyhDb2xsZWN0aW9uKTsKIH0KQEAgLTI0NDQsMjcgKzI0
MTUsNiBAQCB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvCiAgICAgcmV0
dXJuOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi1ib29sIENvZGVCbG9j
azo6aGFzR2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKLXsKLSAgICBpZiAobV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGxvdyA9IDA7Ci0gICAg
aW50IGhpZ2ggPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpOwotICAgIHdoaWxl
IChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAy
OwotICAgICAgICBpZiAobV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW21pZF0gPD0gYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93IHx8IG1fZ2xvYmFsUmVz
b2x2ZUluc3RydWN0aW9uc1tsb3cgLSAxXSAhPSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkK
IGJvb2wgQ29kZUJsb2NrOjpoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3
ICsxNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEluc3RydWN0aW9u
KE9wY29kZSBvcGNvZGUpCiAgICAgICAgIHsKLSNpZiAhRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xB
U1NJQ19JTlRFUlBSRVRFUikKKyNpZiAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBvbmUgb2YgdGhlIHBvaW50ZXIgbWVt
YmVycyB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBzdHJ1Y3QgaXMg
aW5pdGlhbGl6ZWQsIHdoZW4gb3Bjb2RlIGlzIG5vdCBhIHBvaW50ZXIuCiAgICAgICAgICAgICB1
LmpzQ2VsbC5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0Fic3RyYWN0UEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9BYnN0cmFjdFBDLmNwcAkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMiArNDUsNiBAQCBBYnN0cmFjdFBDOjpBYnN0cmFjdFBDKEpTR2xvYmFsRGF0YSYgZ2xvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICAKLSNpZiBFTkFCTEUoQ0xBU1NJQ19J
TlRFUlBSRVRFUikKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7Ci0gICAgbV9wb2ludGVy
ID0gZXhlYy0+cmV0dXJuVlBDKCk7Ci0gICAgbV9tb2RlID0gSW50ZXJwcmV0ZXI7Ci0jZW5kaWYK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQWJzdHJhY3RQQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDIxICs2MCw2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgIEFic3RyYWN0UEMoSW5zdHJ1Y3Rpb24qIHZQQykKLSAgICAg
ICAgOiBtX3BvaW50ZXIodlBDKQotICAgICAgICAsIG1fbW9kZShJbnRlcnByZXRlcikKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzSW50ZXJwcmV0ZXJSZXR1cm5BZGRyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlID09IEludGVycHJldGVyOyB9Ci0gICAgSW5zdHJ1Y3Rpb24qIGlu
dGVycHJldGVyUmV0dXJuQWRkcmVzcygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFz
SW50ZXJwcmV0ZXJSZXR1cm5BZGRyZXNzKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW5zdHJ1Y3Rpb24qPihtX3BvaW50ZXIpOwotICAgIH0KLSNlbmRpZgotICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGUgIT0gTm9uZTsgfQogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTI5NDM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsOSArMTQ4LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVS
KQotICAgICAgICBJbnN0cnVjdGlvbiogcmV0dXJuVlBDKCkgY29uc3QgeyByZXR1cm4gdGhpc1tS
ZWdpc3RlckZpbGU6OlJldHVyblBDXS52UEMoKTsgfQotI2VuZGlmCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRWUEMoKSBjb25zdAogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAK
ICNpbmNsdWRlICJKSVQuaCIKICNlbmRpZgogCi0jZGVmaW5lIFdURl9VU0VfR0NDX0NPTVBVVEVE
X0dPVE9fV09SS0FST1VORCAoKEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVCkpICYmICFkZWZpbmVkKF9fbGx2bV9fKSkKKyNkZWZpbmUgV1RG
X1VTRV9HQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EIChFTkFCTEUoTExJTlQpICYmICFkZWZp
bmVkKF9fbGx2bV9fKSkKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtODgsMTQgKzg4LDYg
QEAgc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSgogICAgIHJldHVybiBz
Yy0+bG9jYWxEZXB0aCgpOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIAot
c3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIGNvbmNhdGVuYXRlU3RyaW5ncyhFeGVjU3RhdGUq
IGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKLXsKLSAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgc3RyaW5ncywgY291bnQpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENM
QVNTSUNfSU5URVJQUkVURVIpCi0KIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRlcnByZXRl
cjo6c2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2ssIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc2l6ZV90IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiB7CiAgICAgLy8g
VGhpcyBlbnN1cmVzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gb2Yg
emVybyBhcmd1bWVudHMgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuCkBAIC0xMjMsMTYgKzExNSw2IEBA
IEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRlcnByZXRlcjo6c2wKICAgICByZXR1cm4gbmV3
Q2FsbEZyYW1lOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi1zdGF0aWMg
TkVWRVJfSU5MSU5FIGJvb2wgaXNJbnZhbGlkUGFyYW1Gb3JJbihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uRGF0YSkKLXsKLSAgICBpZiAodmFs
dWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGV4Y2VwdGlvbkRhdGEg
PSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJpbiIgLCB2YWx1ZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkBAIC0yNjgsNTkg
KzI1MCwyMiBAQCBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIG1fY2xhc3NpY0Vu
YWJsZWQoZmFsc2UpCiB7CiB9CiAKIEludGVycHJldGVyOjp+SW50ZXJwcmV0ZXIoKQogewotI2lm
IEVOQUJMRShMTElOVCkgJiYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSAgICBpZiAo
bV9jbGFzc2ljRW5hYmxlZCkKLSAgICAgICAgZGVsZXRlW10gbV9vcGNvZGVUYWJsZTsKLSNlbmRp
ZgogfQogCiB2b2lkIEludGVycHJldGVyOjppbml0aWFsaXplKGJvb2wgY2FuVXNlSklUKQogewog
ICAgIFVOVVNFRF9QQVJBTShjYW5Vc2VKSVQpOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBMTEludCwg
dGhlbiB3ZSBzaG91bGRuJ3QgYmUgYnVpbGRpbmcgYW55IGtpbmQgb2YgY2xhc3NpYyBpbnRlcnBy
ZXRlci4KLSNpZiBFTkFCTEUoTExJTlQpICYmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQot
I2Vycm9yICJCdWlsZGluZyBib3RoIExMSW50IGFuZCB0aGUgQ2xhc3NpYyBJbnRlcnByZXRlciBp
cyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgaXQgZG9lc24ndCBtYWtlIHNlbnNlLiIKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSNpZiBFTkFCTEUoTExJTlQpCisj
aWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykgJiYgRU5BQkxFKExMSU5UKQogICAgIG1f
b3Bjb2RlVGFibGUgPSBMTEludDo6b3Bjb2RlTWFwKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1PcGNvZGVJRHM7ICsraSkKICAgICAgICAgbV9vcGNvZGVJRFRhYmxlLmFkZChtX29wY29k
ZVRhYmxlW2ldLCBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oaSkpOwotICAgIG1fY2xhc3NpY0VuYWJs
ZWQgPSBmYWxzZTsKLQotI2VsaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBS
RVRFUikKLSAgICBpZiAoY2FuVXNlSklUKSB7Ci0gICAgICAgIC8vIElmIHRoZSBKSVQgaXMgcHJl
c2VudCwgZG9uJ3QgdXNlIGp1bXAgZGVzdGluYXRpb25zIGZvciBvcGNvZGVzLgotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7Ci0gICAgICAgICAgICBPcGNv
ZGUgb3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGkp
KTsKLSAgICAgICAgICAgIG1fb3Bjb2RlVGFibGVbaV0gPSBvcGNvZGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9jbGFzc2ljRW5hYmxlZCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBy
aXZhdGVFeGVjdXRlKEluaXRpYWxpemVBbmRSZXR1cm4sIDAsIDApOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkKLSAgICAgICAgICAgIG1f
b3Bjb2RlSURUYWJsZS5hZGQobV9vcGNvZGVUYWJsZVtpXSwgc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+
KGkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fY2xhc3NpY0VuYWJsZWQgPSB0cnVlOwotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotCi0j
ZWxzZSAvLyAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICBtX2NsYXNzaWNFbmFibGVkID0gdHJ1ZTsKLSNlbHNlCi0gICAg
bV9jbGFzc2ljRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCi0jZW5kaWYgLy8gIUVOQUJMRShDT01Q
VVRFRF9HT1RPX09QQ09ERVMpCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7CkBAIC00MzQsMTIgKzM3OSwxMiBAQCBib29sIEludGVycHJldGVyOjppc09w
Y29kZShPcGNvZGUgb3Bjb2RlCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
ICNpZiAhRU5BQkxFKExMSU5UKQotICAgIGlmICghbV9jbGFzc2ljRW5hYmxlZCkKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE9wY29kZUlEPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvcGNv
ZGUpKSA8PSBvcF9lbmQ7Ci0jZW5kaWYKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wY29kZSkpIDw9IG9wX2VuZDsKKyNlbHNlCiAgICAg
cmV0dXJuIG9wY29kZSAhPSBIYXNoVHJhaXRzPE9wY29kZT46OmVtcHR5VmFsdWUoKQogICAgICAg
ICAmJiAhSGFzaFRyYWl0czxPcGNvZGU+Ojppc0RlbGV0ZWRWYWx1ZShvcGNvZGUpCiAgICAgICAg
ICYmIG1fb3Bjb2RlSURUYWJsZS5jb250YWlucyhvcGNvZGUpOworI2VuZGlmCiAjZWxzZQogICAg
IHJldHVybiBvcGNvZGUgPj0gMCAmJiBvcGNvZGUgPD0gb3BfZW5kOwogI2VuZGlmCkBAIC00ODQs
MTkgKzQyOSw4IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAg
ICAvLyBCZWNhdXNlIG9mIGhvdyB0aGUgSklUIHJlY29yZHMgY2FsbCBzaXRlLT5ieXRlY29kZSBv
ZmZzZXQKICAgICAvLyBpbmZvcm1hdGlvbiB0aGUgSklUIHJlcG9ydHMgdGhlIGJ5dGVjb2RlT2Zm
c2V0IGZvciB0aGUgcmV0dXJuUEMKICAgICAvLyB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBvcGNvZGUgdGhhdCBoYXMgY2F1c2VkIHRoZSBjYWxsLgotICAgIC8vIEluIHRoZSBpbnRlcnBy
ZXRlciB3ZSBoYXZlIGFuIGFjdHVhbCByZXR1cm4gYWRkcmVzcywgd2hpY2ggaXMKLSAgICAvLyB0
aGUgYmVnaW5uaW5nIG9mIG5leHQgaW5zdHJ1Y3Rpb24gdG8gZXhlY3V0ZS4gVG8gZ2V0IGFuIG9m
ZnNldAotICAgIC8vIGluc2lkZSB0aGUgY2FsbCBpbnN0cnVjdGlvbiB0aGF0IHRyaWdnZXJlZCB0
aGUgZXhjZXB0aW9uIHdlCi0gICAgLy8gaGF2ZSB0byBzdWJ0cmFjdCAxLgotI2lmIEVOQUJMRShK
SVQpICYmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmIChjYWxsZXJGcmFtZS0+
Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNvZGVC
bG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7
Ci0gICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVP
ZmZzZXQoY2FsbEZyYW1lLT5yZXR1cm5WUEMoKSkgLSAxOwotI2VsaWYgRU5BQkxFKEpJVCkgfHwg
RU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKICAgICBieXRl
Y29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxG
cmFtZS0+cmV0dXJuUEMoKSk7Ci0jZWxzZQotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblZQQygpKSAtIDE7CiAjZW5kaWYKIAog
ICAgIGNhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwpAQCAtNTYyLDE4ICs0OTYsMTIgQEAgc3RhdGlj
IGludCBnZXRMaW5lTnVtYmVyRm9yQ2FsbEZyYW1lKEpTRwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAg
ICAgcmV0dXJuIC0xOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICgh
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZH
Q29kZSgpIC0gMSk7Ci0jZW5kaWYKICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsRnJhbWUtPmNvZGVPcmlnaW5J
bmRleEZvckRGRygpKS5ieXRlY29kZUluZGV4KTsKICNlbmRpZgogICAgIHJldHVybiBjb2RlQmxv
Y2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0
Rm9yTm9uREZHQ29kZSgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIC0xOwogI2VuZGlmCiB9CiAKQEAg
LTYwNCwxMyArNTMyLDYgQEAgc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2Jh
bAogICAgIGlmIChjYWxsZnJhbWVJc0hvc3QpIHsKICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBk
ZWFsIHdpdGggaW5saW5lIGNhbGxmcmFtZXMgaGVyZSBhcyBieSBkZWZpbml0aW9uIHdlIGhhdmVu
J3QKICAgICAgICAgLy8gaW5saW5lZCBhIGNhbGwgd2l0aCBhbiBpbnRlcnZlbmluZyBuYXRpdmUg
Y2FsbCBmcmFtZS4KLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgaWYg
KCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQg
PSBjYWxsZXJGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7Ci0gICAgICAgICAg
ICBsaW5lTnVtYmVyID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsK
LSAgICAgICAgfQotI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQogI2lm
IEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrICYmIGNhbGxlckNv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewpAQCAtNjIxLDEzICs1
NDIsNiBAQCBzdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFsCiAgICAgICAg
ICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxlckZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRG
R0NvZGUoKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQ
UkVURVIpCi0gICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxs
RnJhbWUtPnJldHVyblZQQygpKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2Rl
QmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCAtIDEpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhbGxlckZyYW1lOwotICAgICAgICB9Ci0jZW5kaWYKICNpZiBF
TkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAgICAgI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5pc0lubGluZUNhbGxGcmFtZSgpKSB7CkBAIC02NjUsMTYgKzU3
OSw3IEBAIHN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oSlNHbG9iYWwKIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGNvbnN0IFN0cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZy
YW1lRmxhZygpKTsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNpZiBFTkFCTEUo
SklUKQotICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3Vy
Y2VVUkwoKTsKLSNlbmRpZgotICAgIHJldHVybiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5zb3Vy
Y2UoKS0+dXJsKCk7Ci0KLSNlbHNlCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3Rh
Y2tGcmFtZUNvZGVUeXBlIGdldFN0YWNrRnJhbWVDb2RlVHlwZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTk4MSwxNCArODg2LDkgQEAgZmFpbGVkSlNPTlA6CiAgICAgICAgIG1fcmVlbnRyeURl
cHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTElu
dDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlKTsK
LSNlbHNlIC8vICFFTkFCTEUoTExJTlRfQ19MT09QKQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IGlmICghY2xhc3NpY0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdl
bmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBz
Y29wZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgZWxzZQorI2VsaWYgRU5BQkxFKEpJVCkKKyAg
ICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fcmVn
aXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0gICAgICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWws
ICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lKTsKLSNlbmRpZiAvLyAhRU5BQkxFKExMSU5U
X0NfTE9PUCkKIAogICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KQEAgLTEwNTcsMTQg
Kzk1Nyw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAg
ICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAg
ICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwotI2Vsc2UgLy8gRU5BQkxFKExMSU5UX0Nf
TE9PUCkKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgaWYgKCFjbGFzc2ljRW5hYmxlZCgp
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3
Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgZWxz
ZQorI2VsaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3Jl
Z2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4
ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSk7Ci0jZW5kaWYgLy8g
IUVOQUJMRShMTElOVF9DX0xPT1ApCiAKICAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAg
ICAgICAgIH0KQEAgLTExNTYsMTQgKzEwNTEsOSBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5B
QkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhl
Y3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUp
OwotI2Vsc2UgLy8gIUVOQUJMRShMTElOVF9DX0xPT1ApCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgICAgIGlmICghY2xhc3NpY0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNv
bnN0cnVjdCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVj
dERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIGVsc2UKKyNlbGlmIEVOQUJM
RShKSVQpCisgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fcmVnaXN0
ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVF
eGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUpOwotI2VuZGlmIC8v
ICFFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAg
ICAgICAgfQogCkBAIC0xMjYzLDIxICsxMTUzLDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShDYWxsRnJhbWVDbAogICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5BQkxF
KExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNs
b3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7Ci0j
ZWxzZSAvLyAhRU5BQkxFKExMSU5UX0NfTE9PUCkKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJM
RShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBpZiAoY2xvc3VyZS5uZXdDYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0g
Y2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhl
Y3V0ZSgmbV9yZWdpc3RlckZpbGUsIGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBjbG9zdXJlLmdsb2Jh
bERhdGEpOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0j
ZW5kaWYKKyNlbGlmIEVOQUJMRShKSVQpCisgICAgICAgIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fcmVnaXN0
ZXJGaWxlLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAg
ICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIGNs
b3N1cmUubmV3Q2FsbEZyYW1lKTsKLSNlbmRpZgotI2VuZGlmIC8vICFFTkFCTEUoTExJTlRfQ19M
T09QKQotCiAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCkBAIC0xMzY4LDIwICsx
MjQ2LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAg
ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xv
b3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9ldmFsX3Byb2xvZ3VlKTsKLSNlbHNlIC8v
ICFFTkFCTEUoTExJTlRfQ19MT09QKQotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKENMQVNT
SUNfSU5URVJQUkVURVIpCi0gICAgICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5V
c2VKSVQoKSkKLSNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0gZXZhbC0+Z2VuZXJhdGVkSklU
Q29kZSgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9i
YWxEYXRhKCkpOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBlbHNl
Ci0jZW5kaWYKKyNlbGlmIEVOQUJMRShKSVQpCisgICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVy
YXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29w
ZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSk7Ci0jZW5kaWYKLSNlbmRpZiAvLyAh
RU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAgICB9CiAK
QEAgLTE0MjAsMzc1OCArMTI4Nyw2MiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6
ZGVidWcoQ2FsCiAgICAgfQogfQogICAgIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVS
KQotTkVWRVJfSU5MSU5FIEpTU2NvcGUqIEludGVycHJldGVyOjpjcmVhdGVOYW1lU2NvcGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCitKU1ZhbHVlIEludGVy
cHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcih2UENbMV0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBKU05hbWVTY29wZSogc2NvcGUg
PSBKU05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1
dGVzKTsKLSAgICByZXR1cm4gc2NvcGU7CisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFt
ZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7
CisgICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwor
CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZShmdW5jdGlvbkNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgYXJndW1lbnRz
LT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVu
dHMpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlE
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24q
IHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgSW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVjdXJzaXZl
IGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9u
LgotICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNh
bGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICAvLyBVbmNhY2hl
YWJsZTogZ2l2ZSB1cC4KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkgewotICAgICAgICB2
UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZnVuY3Rpb25DYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAg
aWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgdlBDWzBdID0g
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENhY2hlIG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0
IG5leHQgdGltZS4KLSAgICBTdHJ1Y3R1cmUqIGxhc3RTdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1
Y3R1cmUuZ2V0KCk7Ci0gICAgaWYgKHN0cnVjdHVyZSAhPSBsYXN0U3RydWN0dXJlKSB7Ci0gICAg
ICAgIC8vIEZpcnN0IG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0IG5l
eHQgdGltZS4KLSAgICAgICAgaWYgKCFsYXN0U3RydWN0dXJlKSB7Ci0gICAgICAgICAgICB2UENb
NF0udS5zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gU2Vjb25kIG1pc3M6IGdpdmUgdXAuCi0gICAgICAgIHZQQ1swXSA9
IGdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBDYWNoZSBoaXQ6IFNwZWNpYWxpemUgaW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1
Y3R1cmVzLgotCi0gICAgLy8gSWYgYmFzZUNlbGwgIT0gc2xvdC5iYXNlKCksIHRoZW4gYmFzZUNl
bGwgbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLSAgICBpZiAoYmFzZUNlbGwg
IT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9p
ZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN0cnVjdHVyZSB0
cmFuc2l0aW9uLCBjYWNoZSB0cmFuc2l0aW9uIGluZm8KLSAgICBpZiAoc2xvdC50eXBlKCkgPT0g
UHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9i
eV9pZF9nZW5lcmljKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGludCBs
aW5lTnVtYmVyOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVu
Y3Rpb25DYWxsRnJhbWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAoIWNh
bGxlckZyYW1lKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgSlNWYWx1ZSBjYWxsZXIg
PSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CisgICAgaWYgKCFjYWxsZXIpCisgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgICAgICAvLyBwdXRfYnlfaWRfdHJhbnNpdGlvbiBjaGVja3MgdGhl
IHByb3RvdHlwZSBjaGFpbiBmb3Igc2V0dGVycy4KLSAgICAgICAgbm9ybWFsaXplUHJvdG90eXBl
Q2hhaW4oY2FsbEZyYW1lLCBiYXNlQ2VsbCk7Ci0gICAgICAgIEpTQ2VsbCogb3duZXIgPSBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgLy8gR2V0IHRoZSBwcm90b3R5
cGUgaGVyZSBiZWNhdXNlIHRoZSBjYWxsIHRvIHByb3RvdHlwZUNoYWluIGNvdWxkIGNhdXNlIGEg
Ci0gICAgICAgIC8vIEdDIGFsbG9jYXRpb24sIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gaGFwcGVu
IHdoaWxlIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgCi0gICAgICAgIC8vIGluaXRpYWxpemluZyB0
aGUgdW5pb24uCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bj
b2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKTsKLSAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJl
LnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwotICAgICAg
ICB2UENbNV0udS5zdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICB2UENbNl0udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICAg
ICAgQVNTRVJUKHZQQ1s2XS51LnN0cnVjdHVyZUNoYWluKTsKLSAgICAgICAgdlBDWzddID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFNraXAgb3ZlciBmdW5j
dGlvbiBiaW5kaW5ncy4KKyAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkpOworICAgIHdoaWxl
IChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpzX2luZm8pKSB7
CisgICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNhbGxlckZyYW1lLCBsaW5lTnVtYmVyLCBieXRlY29kZU9mZnNldCk7CisgICAgICAg
IGlmICghY2FsbGVyRnJhbWUpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAg
IGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCFjYWxsZXIpCisg
ICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgdlBDWzBdID0gZ2V0T3Bj
b2RlKG9wX3B1dF9ieV9pZF9yZXBsYWNlKTsKLSAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dW5jYWNoZVB1dEJ5SUQo
Q29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQykKLXsKLSAgICB2UENbMF0gPSBnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkKTsKLSAgICB2UENbNF0gPSAwOworICAgIHJldHVybiBjYWxsZXI7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBT
dHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSYgZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVj
dXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3Ry
dWN0aW9uLgotICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9p
ZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nl
c3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpIHsKLSAgICAg
ICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5h
bWUgPT0gY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHZQQ1sw
XSA9IGdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfZ2V0X3N0cmluZ19sZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gVW5jYWNoZWFibGU6IGdpdmUgdXAuCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
IHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRf
Z2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBtaXNzCi0g
ICAgU3RydWN0dXJlKiBsYXN0U3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwot
ICAgIGlmIChzdHJ1Y3R1cmUgIT0gbGFzdFN0cnVjdHVyZSkgewotICAgICAgICAvLyBGaXJzdCBt
aXNzOiByZWNvcmQgU3RydWN0dXJlIHRvIGNvbXBhcmUgYWdhaW5zdCBuZXh0IHRpbWUuCi0gICAg
ICAgIGlmICghbGFzdFN0cnVjdHVyZSkgewotICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJl
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFNlY29uZCBtaXNzOiBnaXZlIHVwLgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3Bf
Z2V0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2Fj
aGUgaGl0OiBTcGVjaWFsaXplIGluc3RydWN0aW9uIGFuZCByZWYgU3RydWN0dXJlcy4KLQotICAg
IGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAoc2xv
dC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSkgewotICAgICAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0
dGVyOgotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJf
c2VsZik7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlTbG90OjpDdXN0b206Ci0gICAgICAg
ICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmKTsKLSAgICAg
ICAgICAgIHZQQ1s1XSA9IHNsb3QuY3VzdG9tR2V0dGVyKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRf
YnlfaWRfc2VsZik7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdl
dE9wY29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGNhbGxGcmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgp
KTsKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJh
c2UoKSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0KLSAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEg
bG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0
cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KLSAgICAgICAgaWYgKGJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgYmFzZU9iamVjdC0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zm
c2V0ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQorICAgIGZ1bmN0aW9uID0gSlNWYWx1ZSgpOwor
ICAgIGxpbmVOdW1iZXIgPSAtMTsKKyAgICBzb3VyY2VVUkwgPSBTdHJpbmcoKTsKIAotICAgICAg
ICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUo
KSkgewotICAgICAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0dGVyOgotICAgICAgICAgICAgdlBD
WzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8pOwotICAgICAgICAgICAg
dlBDWzZdID0gb2Zmc2V0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVy
dHlTbG90OjpDdXN0b206Ci0gICAgICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5
X2lkX2N1c3RvbV9wcm90byk7Ci0gICAgICAgICAgICB2UENbNl0gPSBzbG90LmN1c3RvbUdldHRl
cigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2
UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX3Byb3RvKTsKLSAgICAgICAgICAgIHZQQ1s2
XSA9IG9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZQQ1s1
XS51LnN0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6
ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgIGlmICghY291bnQp
IHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzd2l0
Y2ggKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkpIHsKLSAgICBjYXNlIFByb3BlcnR5U2xvdDo6
R2V0dGVyOgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbik7Ci0gICAgICAgIHZQQ1s3XSA9IG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQcm9wZXJ0eVNsb3Q6OkN1c3RvbToKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dl
dF9ieV9pZF9jdXN0b21fY2hhaW4pOwotICAgICAgICB2UENbN10gPSBzbG90LmN1c3RvbUdldHRl
cigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfZ2V0X2J5X2lkX2NoYWluKTsKLSAgICAgICAgdlBDWzddID0gb2Zmc2V0OwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgdlBDWzRdLnUuc3RydWN0dXJlLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICB2UENbNV0udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICB2UENb
Nl0gPSBjb3VudDsKLX0KLQotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnVuY2FjaGVH
ZXRCeUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpCi17Ci0gICAgdlBDWzBdID0gZ2V0
T3Bjb2RlKG9wX2dldF9ieV9pZCk7Ci0gICAgdlBDWzRdID0gMDsKLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotCi0jaWYgIUVOQUJMRShMTElOVF9DX0xPT1ApCi0K
LUpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywg
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2
ZSB0byBwdXQgdGhpcyBjb2RlCi0gICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJlbHMgYXJlIG9u
bHkgaW4gc2NvcGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKFVOTElLRUxZKGZsYWcg
PT0gSW5pdGlhbGl6ZUFuZFJldHVybikpIHsKLSAgICAgICAgI2lmIEVOQUJMRShDT01QVVRFRF9H
T1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgICAgICAjZGVmaW5lIExJU1RfT1BDT0RF
X0xBQkVMKGlkLCBsZW5ndGgpICYmaWQsCi0gICAgICAgICAgICAgICAgc3RhdGljIE9wY29kZSBs
YWJlbHNbXSA9IHsgRk9SX0VBQ0hfT1BDT0RFX0lEKExJU1RfT1BDT0RFX0xBQkVMKSB9OwotICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChsYWJl
bHMpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG1fb3Bjb2RlVGFibGVbaV0gPSBsYWJlbHNb
aV07Ci0gICAgICAgICAgICAjdW5kZWYgTElTVF9PUENPREVfTEFCRUwKLSAgICAgICAgI2VuZGlm
IC8vIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChtX2luaXRpYWxpemVkKTsK
LSAgICBBU1NFUlQobV9jbGFzc2ljRW5hYmxlZCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSNp
ZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAvLyBNaXhpbmcgSW50ZXJwcmV0ZXIg
KyBKSVQgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
Y2FuVXNlSklUKCkpCi0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLQotI2lmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBVTlVTRURfUEFSQU0o
cmVnaXN0ZXJGaWxlKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLSAgICByZXR1cm4g
SlNWYWx1ZSgpOwotI2Vsc2UKLQotICAgIEFTU0VSVChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS50
b3BDYWxsRnJhbWUgPT0gY2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
OwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICBDYWxsRnJhbWUqKiB0b3BDYWxs
RnJhbWVTbG90ID0gJmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZTsKLQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJbnN0cnVjdGlvbiogdlBD
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIHVuc2lnbmVkIHRpY2tD
b3VudCA9IGdsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnRpY2tzVW50aWxOZXh0Q2hlY2soKTsK
LSAgICBKU1ZhbHVlIGZ1bmN0aW9uUmV0dXJuVmFsdWU7Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKGdsb2JhbERhdGEt
PmV4Y2VwdGlvbiAhPSBKU1ZhbHVlKCkpKSB7IFwKLSAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVl
ID0gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOyBcCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBc
Ci0gICAgICAgIH0gXAotICAgIH0gd2hpbGUgKDApCi0KLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRT
KQotICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0KLSNk
ZWZpbmUgQ0hFQ0tfRk9SX1RJTUVPVVQoKSBcCi0gICAgaWYgKCEtLXRpY2tDb3VudCkgeyBcCi0g
ICAgICAgIGlmIChnbG9iYWxEYXRhLT50ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpIHx8IGds
b2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLmRpZFRpbWVPdXQoY2FsbEZyYW1lKSkgeyBcCi0gICAg
ICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGpzTnVsbCgpOyBcCi0gICAgICAgICAgICBnb3RvIHZt
X3Rocm93OyBcCi0gICAgICAgIH0gXAotICAgICAgICB0aWNrQ291bnQgPSBnbG9iYWxEYXRhLT50
aW1lb3V0Q2hlY2tlci50aWNrc1VudGlsTmV4dENoZWNrKCk7IFwKLSAgICB9Ci0gICAgCi0jaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAjZGVmaW5lIFNBTVBMRShjb2RlQmxvY2ssIHZQ
QykgbV9zYW1wbGVyLT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCi0jZWxzZQotICAgICNkZWZpbmUg
U0FNUExFKGNvZGVCbG9jaywgdlBDKQotI2VuZGlmCi0KLSNkZWZpbmUgVVBEQVRFX0JZVEVDT0RF
X09GRlNFVCgpIFwKLSAgICBkbyB7XAotICAgICAgICBjYWxsRnJhbWUtPnNldEJ5dGVjb2RlT2Zm
c2V0Rm9yTm9uREZHQ29kZSh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmRhdGEoKSAr
IDEpO1wKLSAgICB9IHdoaWxlICgwKQotCi0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICAjZGVmaW5lIE5FWFRfSU5TVFJVQ1RJT04oKSBTQU1QTEUoY29k
ZUJsb2NrLCB2UEMpOyBnb3RvICp2UEMtPnUub3Bjb2RlCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFU
UykKLSAgICAjZGVmaW5lIERFRklORV9PUENPREUob3Bjb2RlKSBcCi0gICAgICAgIG9wY29kZTpc
Ci0gICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVjb3JkSW5zdHJ1Y3Rpb24ob3Bjb2RlKTtcCi0g
ICAgICAgICAgICBVUERBVEVfQllURUNPREVfT0ZGU0VUKCk7Ci0jZWxzZQotICAgICNkZWZpbmUg
REVGSU5FX09QQ09ERShvcGNvZGUpIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwot
I2VuZGlmIC8vICFFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSNlbHNlIC8vICFFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAg
ICNkZWZpbmUgTkVYVF9JTlNUUlVDVElPTigpIFNBTVBMRShjb2RlQmxvY2ssIHZQQyk7IGdvdG8g
aW50ZXJwcmV0ZXJMb29wU3RhcnQKLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgICNkZWZp
bmUgREVGSU5FX09QQ09ERShvcGNvZGUpIFwKLSAgICAgICAgY2FzZSBvcGNvZGU6XAotICAgICAg
ICAgICAgT3Bjb2RlU3RhdHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7XAotICAgICAgICAg
ICAgVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERFRklORV9P
UENPREUob3Bjb2RlKSBjYXNlIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2Vu
ZGlmCi0gICAgd2hpbGUgKDEpIHsgLy8gaXRlcmF0b3IgbG9vcCBiZWdpbnMKLSAgICBpbnRlcnBy
ZXRlckxvb3BTdGFydDo7Ci0gICAgc3dpdGNoICh2UEMtPnUub3Bjb2RlKQotI2VuZGlmIC8vICFF
TkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHsKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX25ld19vYmplY3QpIHsKLSAgICAgICAgLyogbmV3X29iamVjdCBkc3QocikK
LQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IGVtcHR5IE9iamVjdCBpbnN0YW5jZSB1c2lu
ZyB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgY29uc3RydWN0b3IsIGFuZCBwdXRzIHRoZSByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVl
KGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSkpOwotCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX25ld19vYmplY3QpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3BfbmV3X2FycmF5KSB7Ci0gICAgICAgIC8qIG5ld19h
cnJheSBkc3QocikgZmlyc3RBcmcocikgYXJnQ291bnQobikKLQotICAgICAgICAgICBDb25zdHJ1
Y3RzIGEgbmV3IEFycmF5IGluc3RhbmNlIHVzaW5nIHRoZSBvcmlnaW5hbAotICAgICAgICAgICBj
b25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAg
ICAgIFRoZSBhcnJheSB3aWxsIGNvbnRhaW4gYXJnQ291bnQgZWxlbWVudHMgd2l0aCB2YWx1ZXMK
LSAgICAgICAgICAgdGFrZW4gZnJvbSByZWdpc3RlcnMgc3RhcnRpbmcgYXQgcmVnaXN0ZXIgZmly
c3RBcmcuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgZmlyc3RBcmcgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJn
Q291bnQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IEpTVmFsdWUoY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCByZWludGVycHJldF9jYXN0
PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmaXJzdEFyZ10pLCBhcmdDb3VudCkp
OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19hcnJheSk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9uZXdfYXJy
YXlfYnVmZmVyKSB7Ci0gICAgICAgIC8qIG5ld19hcnJheV9idWZmZXIgZHN0KHIpIGluZGV4KG4p
IGFyZ0NvdW50KG4pCi0gICAgICAgICAKLSAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgQXJyYXkg
aW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1
dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICBUaGUgYXJyYXkgYmUgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUgdmFsdWVzIGZyb20gY29uc3RhbnRCdWZmZXJbaW5kZXhdCi0gICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZpcnN0QXJnID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBD
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1Zh
bHVlKGNvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihm
aXJzdEFyZyksIGFyZ0NvdW50KSk7Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9uZXdfYXJyYXkpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQot
ICAgIERFRklORV9PUENPREUob3BfbmV3X3JlZ2V4cCkgewotICAgICAgICAvKiBuZXdfcmVnZXhw
IGRzdChyKSByZWdFeHAocmUpCi0KLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBSZWdFeHAg
aW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICAgIGNvbnN0cnVjdG9yIGZyb20g
cmVnZXhwIHJlZ0V4cCwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbgotICAgICAgICAgICByZWdpc3Rl
ciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGNvZGVCbG9jay0+cmVnZXhwKHZQQ1syXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mg
c3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpOwotICAgICAgICAgICAgZ290byB2bV90
aHJvdzsKLSAgICAgICAgfQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpT
VmFsdWUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5yZWdF
eHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfbmV3X3JlZ2V4cCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9tb3YpIHsKLSAgICAgICAgLyogbW92IGRzdChyKSBzcmMocikKLQot
ICAgICAgICAgICBDb3BpZXMgcmVnaXN0ZXIgc3JjIHRvIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBjYWxsRnJhbWUtPnIoc3JjKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9tb3YpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfZXEpIHsKLSAgICAgICAgLyogZXEgZHN0KHIpIHNyYzEocikgc3JjMihy
KQotCi0gICAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgYW5kIHJlZ2lzdGVy
IHNyYzIgYXJlIGVxdWFsLAotICAgICAgICAgICBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc9PScg
b3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAgICAgYXMgYSBib29sZWFuIGlu
IHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVy
YW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENb
M10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBz
cmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
anNCb29sZWFuKHNyYzEuYXNJbnQzMigpID09IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihKU1ZhbHVlOjplcXVh
bFNsb3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwotICAgICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBy
ZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lcSk7
Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShv
cF9lcV9udWxsKSB7Ci0gICAgICAgIC8qIGVxX251bGwgZHN0KHIpIHNyYyhyKQotCi0gICAgICAg
ICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYyBpcyBudWxsLCBhcyB3aXRoIHRoZSBFQ01B
U2NyaXB0ICchPScKLSAgICAgICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMg
YSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjID0gY2FsbEZyYW1lLT5yKHZQ
Q1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoc3JjLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNC
b29sZWFuKHRydWUpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZXFfbnVs
bCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHNyYy5pc0Nl
bGwoKSAmJiBzcmMuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2VxX251bGwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfbmVxKSB7Ci0gICAgICAgIC8qIG5lcSBkc3Qocikgc3Jj
MShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBh
bmQgcmVnaXN0ZXIgc3JjMiBhcmUgbm90Ci0gICAgICAgICAgIGVxdWFsLCBhcyB3aXRoIHRoZSBF
Q01BU2NyaXB0ICchPScgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1bHQg
YXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+
cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNh
bGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMx
LmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0ganNCb29sZWFuKHNyYzEuYXNJbnQzMigpICE9IHNyYzIuYXNJbnQzMigp
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bighSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfbmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX25lcV9udWxsKSB7Ci0gICAgICAgIC8qIG5lcV9udWxsIGRzdChy
KSBzcmMocikKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMgaXMgbm90
IG51bGwsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJyE9JwotICAgICAgICAgICBvcGVyYXRvciwg
YW5kIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgotICAgICAg
ICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBzcmMgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotCi0gICAg
ICAgIGlmIChzcmMuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfbmVxX251bGwpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IGpzQm9vbGVhbighc3JjLmlzQ2VsbCgpIHx8ICFzcmMuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25lcV9udWxsKTsKLSAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N0cmlj
dGVxKSB7Ci0gICAgICAgIC8qIHN0cmljdGVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAg
ICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIGFy
ZSBzdHJpY3RseQotICAgICAgICAgICBlcXVhbCwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPT09
JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4g
aW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29s
ZWFuKHJlc3VsdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfc3RyaWN0ZXEp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfbnN0cmljdGVxKSB7Ci0gICAgICAgIC8qIG5zdHJpY3RlcSBkc3Qocikgc3JjMShyKSBzcmMy
KHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBhbmQgcmVnaXN0
ZXIgc3JjMiBhcmUgbm90Ci0gICAgICAgICAgIHN0cmljdGx5IGVxdWFsLCBhcyB3aXRoIHRoZSBF
Q01BU2NyaXB0ICchPT0nIG9wZXJhdG9yLCBhbmQKLSAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0
IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUt
PnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBj
YWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBib29sIHJl
c3VsdCA9ICFKU1ZhbHVlOjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbnN0cmljdGVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX2xlc3MpIHsKLSAgICAgICAgLyogbGVzcyBkc3Qocikgc3JjMShy
KSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBs
ZXNzIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlw
dCAnPCcgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29s
ZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNCb29sZWFuKGpzTGVzczx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sZXNzKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xl
c3NlcSkgewotICAgICAgICAvKiBsZXNzZXEgZHN0KHIpIHNyYzEocikgc3JjMihyKQotCi0gICAg
ICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvCi0gICAgICAgICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9
JyBvcGVyYXRvciwgYW5kCi0gICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4g
aW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oanNMZXNzRXE8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7Ci0gICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbGVzc2VxKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dy
ZWF0ZXIpIHsKLSAgICAgICAgLyogZ3JlYXRlciBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAg
ICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVn
aXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0
b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGpz
TGVzczxmYWxzZT4oY2FsbEZyYW1lLCBzcmMyLCBzcmMxKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9F
WENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7
Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ3JlYXRlcik7Ci0gICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9ncmVhdGVyZXEp
IHsKLSAgICAgICAgLyogZ3JlYXRlcmVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAg
ICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0bwotICAgICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc+
PScgb3BlcmF0b3IsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFu
IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2
UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGpzTGVzc0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIsIHNyYzEpKTsKLSAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9ncmVhdGVyZXEp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfcHJlX2luYykgewotICAgICAgICAvKiBwcmVfaW5jIHNyY0RzdChyKQotCi0gICAgICAgICAg
IENvbnZlcnRzIHJlZ2lzdGVyIHNyY0RzdCB0byBudW1iZXIsIGFkZHMgb25lLCBhbmQgcHV0cyB0
aGUgcmVzdWx0Ci0gICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3JjRHN0LgotICAgICAgICAq
LwotICAgICAgICBpbnQgc3JjRHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSB2ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAodi5pc0lu
dDMyKCkgJiYgdi5hc0ludDMyKCkgPCBJTlRfTUFYKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNyY0RzdCkgPSBqc051bWJlcih2LmFzSW50MzIoKSArIDEpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodi50b051bWJlcihj
YWxsRnJhbWUpICsgMSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IHJlc3VsdDsKLSAgICAgICAg
fQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3ByZV9pbmMpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJlX2RlYykg
ewotICAgICAgICAvKiBwcmVfZGVjIHNyY0RzdChyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJl
Z2lzdGVyIHNyY0RzdCB0byBudW1iZXIsIHN1YnRyYWN0cyBvbmUsIGFuZCBwdXRzIHRoZSByZXN1
bHQKLSAgICAgICAgICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0gICAg
ICAgIGludCBzcmNEc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBj
YWxsRnJhbWUtPnIoc3JjRHN0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAm
JiB2LmFzSW50MzIoKSA+IElOVF9NSU4pCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoc3JjRHN0KSA9IGpzTnVtYmVyKHYuYXNJbnQzMigpIC0gMSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcih2LnRvTnVtYmVyKGNhbGxGcmFt
ZSkgLSAxKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHJlX2RlYyk7Ci0gICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wb3N0X2luYykgewotICAg
ICAgICAvKiBwb3N0X2luYyBkc3Qocikgc3JjRHN0KHIpCi0KLSAgICAgICAgICAgQ29udmVydHMg
cmVnaXN0ZXIgc3JjRHN0IHRvIG51bWJlci4gVGhlIG51bWJlciBpdHNlbGYgaXMKLSAgICAgICAg
ICAgd3JpdHRlbiB0byByZWdpc3RlciBkc3QsIGFuZCB0aGUgbnVtYmVyIHBsdXMgb25lIGlzIHdy
aXR0ZW4KLSAgICAgICAgICAgYmFjayB0byByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjRHN0ID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHNyY0Rz
dCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAodi5pc0ludDMyKCkgJiYgdi5hc0ludDMyKCkgPCBJ
TlRfTUFYKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpz
TnVtYmVyKHYuYXNJbnQzMigpICsgMSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IHY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb3VibGUgbnVtYmVy
ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpzTnVtYmVyKG51bWJlciArIDEpOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcG9zdF9pbmMpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcG9zdF9kZWMp
IHsKLSAgICAgICAgLyogcG9zdF9kZWMgZHN0KHIpIHNyY0RzdChyKQotCi0gICAgICAgICAgIENv
bnZlcnRzIHJlZ2lzdGVyIHNyY0RzdCB0byBudW1iZXIuIFRoZSBudW1iZXIgaXRzZWxmIGlzCi0g
ICAgICAgICAgIHdyaXR0ZW4gdG8gcmVnaXN0ZXIgZHN0LCBhbmQgdGhlIG51bWJlciBtaW51cyBv
bmUgaXMgd3JpdHRlbgotICAgICAgICAgICBiYWNrIHRvIHJlZ2lzdGVyIHNyY0RzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBz
cmNEc3QgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUt
PnIoc3JjRHN0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAmJiB2LmFzSW50
MzIoKSA+IElOVF9NSU4pIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNE
c3QpID0ganNOdW1iZXIodi5hc0ludDMyKCkgLSAxKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gdjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSBjYWxsRnJhbWUtPnIoc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoY2FsbEZy
YW1lKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0ganNOdW1iZXIobnVtYmVyIC0gMSk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKG51bWJlcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wb3N0X2RlYyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF90
b19qc251bWJlcikgewotICAgICAgICAvKiB0b19qc251bWJlciBkc3Qocikgc3JjKHIpCi0KLSAg
ICAgICAgICAgQ29udmVydHMgcmVnaXN0ZXIgc3JjIHRvIG51bWJlciwgYW5kIHB1dHMgdGhlIHJl
c3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3Bl
cmFuZDsKLQotICAgICAgICBKU1ZhbHVlIHNyY1ZhbCA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFs
dWUoKTsKLQotICAgICAgICBpZiAoTElLRUxZKHNyY1ZhbC5pc051bWJlcigpKSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZyYW1lLT5yKHNyYyk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IHNyY1ZhbC50b051bWJlcihj
YWxsRnJhbWUpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdG9fanNudW1iZXIpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbmVn
YXRlKSB7Ci0gICAgICAgIC8qIG5lZ2F0ZSBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgQ29u
dmVydHMgcmVnaXN0ZXIgc3JjIHRvIG51bWJlciwgbmVnYXRlcyBpdCwgYW5kIHB1dHMgdGhlCi0g
ICAgICAgICAgIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYyA9IGNhbGxGcmFt
ZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMuaXNJbnQz
MigpICYmIChzcmMuYXNJbnQzMigpICYgMHg3ZmZmZmZmZikpIC8vIG5vbi16ZXJvIGFuZCBubyBv
dmVyZmxvdwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJl
cigtc3JjLmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcigtc3JjLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9uZWdhdGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfYWRkKSB7Ci0gICAgICAgIC8qIGFkZCBkc3Qocikgc3JjMShyKSBzcmMy
KHIpCi0KLSAgICAgICAgICAgQWRkcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyLCBh
bmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4gKEpTIGFkZCBt
YXkgYmUgc3RyaW5nIGNvbmNhdGVuYXRpb24gb3IKLSAgICAgICAgICAgbnVtZXJpYyBhZGQsIGRl
cGVuZGluZyBvbiB0aGUgdHlwZXMgb2YgdGhlIG9wZXJhbmRzLikKLSAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNh
bGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUg
c3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIo
KSB8IHNyYzIuYXNJbnQzMigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIo
KSArIHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQWRkKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0gICAgICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9h
ZGQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfbXVsKSB7Ci0gICAgICAgIC8qIG11bCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAg
ICAgICAgICAgTXVsdGlwbGllcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIChjb252
ZXJ0ZWQgdG8KLSAgICAgICAgICAgbnVtYmVycyksIGFuZCBwdXRzIHRoZSBwcm9kdWN0IGluIHJl
Z2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5k
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMy
LmlzSW50MzIoKSAmJiAhKHNyYzEuYXNJbnQzMigpIHwgc3JjMi5hc0ludDMyKCkpID4+IDE1KSAv
LyBubyBvdmVyZmxvdwotICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0ganNOdW1iZXIoc3JjMS5hc0ludDMyKCkgKiBzcmMyLmFzSW50MzIoKSk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzcmMxLnRvTnVtYmVy
KGNhbGxGcmFtZSkgKiBzcmMyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9tdWwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfZGl2KSB7Ci0gICAgICAgIC8qIGRpdiBkc3QocikgZGl2aWRlbmQocikgZGl2aXNv
cihyKQotCi0gICAgICAgICAgIERpdmlkZXMgcmVnaXN0ZXIgZGl2aWRlbmQgKGNvbnZlcnRlZCB0
byBudW1iZXIpIGJ5IHRoZQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQg
dG8gbnVtYmVyKSwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHF1b3RpZW50IGluIHJlZ2lzdGVy
IGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUgZGl2aWRlbmQgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIGRpdmlzb3IgPSBjYWxsRnJhbWUtPnIodlBDWzNd
LnUub3BlcmFuZCkuanNWYWx1ZSgpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoZGl2aWRlbmQudG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3IudG9OdW1iZXIoY2FsbEZy
YW1lKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfZGl2KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX21vZCkgewotICAgICAgICAvKiBtb2QgZHN0KHIpIGRpdmlkZW5kKHIpIGRp
dmlzb3IocikKLQotICAgICAgICAgICBEaXZpZGVzIHJlZ2lzdGVyIGRpdmlkZW5kIChjb252ZXJ0
ZWQgdG8gbnVtYmVyKSBieQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQg
dG8gbnVtYmVyKSwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlbWFpbmRlciBpbiByZWdpc3Rl
ciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlIGRpdmlkZW5kID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBkaXZpc29yID0gY2FsbEZyYW1lLT5yKHZQQ1sz
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoZGl2aWRlbmQuaXNJbnQzMigp
ICYmIGRpdmlzb3IuaXNJbnQzMigpICYmIGRpdmlzb3IuYXNJbnQzMigpICE9IDAgJiYgZGl2aXNv
ci5hc0ludDMyKCkgIT0gLTEpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoZGl2aWRlbmQuYXNJbnQzMigpICUgZGl2aXNvci5hc0ludDMyKCkpOwotICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9
IHJlc3VsdDsKLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX21vZCk7Ci0gICAg
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb252
ZXJzaW9uIHRvIGRvdWJsZSBtdXN0IGhhcHBlbiBvdXRzaWRlIHRoZSBjYWxsIHRvIGZtb2Qgc2lu
Y2UgdGhlCi0gICAgICAgIC8vIG9yZGVyIG9mIGFyZ3VtZW50IGV2YWx1YXRpb24gaXMgbm90IGd1
YXJhbnRlZWQuCi0gICAgICAgIGRvdWJsZSBkMSA9IGRpdmlkZW5kLnRvTnVtYmVyKGNhbGxGcmFt
ZSk7Ci0gICAgICAgIGRvdWJsZSBkMiA9IGRpdmlzb3IudG9OdW1iZXIoY2FsbEZyYW1lKTsKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihmbW9kKGQxLCBkMikpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gcmVzdWx0OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9tb2QpOwotICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfc3ViKSB7
Ci0gICAgICAgIC8qIHN1YiBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgU3Vi
dHJhY3RzIHJlZ2lzdGVyIHNyYzIgKGNvbnZlcnRlZCB0byBudW1iZXIpIGZyb20gcmVnaXN0ZXIK
LSAgICAgICAgICAgc3JjMSAoY29udmVydGVkIHRvIG51bWJlciksIGFuZCBwdXRzIHRoZSBkaWZm
ZXJlbmNlIGluCi0gICAgICAgICAgIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxG
cmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3Jj
MiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlm
IChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIoKSB8
IHNyYzIuYXNJbnQzMigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSAt
IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKHNyYzEudG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzIudG9OdW1iZXIo
Y2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9zdWIpOwotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbHNoaWZ0KSB7Ci0gICAgICAgIC8q
IGxzaGlmdCBkc3QocikgdmFsKHIpIHNoaWZ0KHIpCi0KLSAgICAgICAgICAgUGVyZm9ybXMgbGVm
dCBzaGlmdCBvZiByZWdpc3RlciB2YWwgKGNvbnZlcnRlZCB0byBpbnQzMikgYnkKLSAgICAgICAg
ICAgcmVnaXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0byB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVz
dWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50
IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9
IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYg
KHZhbC5pc0ludDMyKCkgJiYgc2hpZnQuaXNJbnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcih2YWwuYXNJbnQzMigpIDw8IChzaGlmdC5hc0lu
dDMyKCkgJiAweDFmKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcigodmFsLnRvSW50MzIoY2FsbEZyYW1lKSkgPDwgKHNoaWZ0LnRvVUludDMy
KGNhbGxGcmFtZSkgJiAweDFmKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xzaGlmdCk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yc2hpZnQp
IHsKLSAgICAgICAgLyogcnNoaWZ0IGRzdChyKSB2YWwocikgc2hpZnQocikKLQotICAgICAgICAg
ICBQZXJmb3JtcyBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0IG9mIHJlZ2lzdGVyIHZhbCAoY29udmVy
dGVkCi0gICAgICAgICAgIHRvIGludDMyKSBieSByZWdpc3RlciBzaGlmdCAoY29udmVydGVkIHRv
Ci0gICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0
LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSB2YWwgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNoaWZ0ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAodmFsLmlzSW50MzIoKSAmJiBzaGlmdC5pc0ludDMy
KCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHZh
bC5hc0ludDMyKCkgPj4gKHNoaWZ0LmFzSW50MzIoKSAmIDB4MWYpKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwudG9JbnQzMihjYWxs
RnJhbWUpKSA+PiAoc2hpZnQudG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKLSAgICAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfcnNoaWZ0KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX3Vyc2hpZnQpIHsKLSAgICAgICAgLyogcnNoaWZ0IGRzdChyKSB2
YWwocikgc2hpZnQocikKLQotICAgICAgICAgICBQZXJmb3JtcyBsb2dpY2FsIHJpZ2h0IHNoaWZ0
IG9mIHJlZ2lzdGVyIHZhbCAoY29udmVydGVkCi0gICAgICAgICAgIHRvIHVpbnQzMikgYnkgcmVn
aXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0bwotICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0
aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1lLT5yKHZQ
Q1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9IGNhbGxG
cmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWwuaXNV
SW50MzIoKSAmJiBzaGlmdC5pc0ludDMyKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoZHN0KSA9IGpzTnVtYmVyKHZhbC5hc0ludDMyKCkgPj4gKHNoaWZ0LmFzSW50MzIoKSAm
IDB4MWYpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKCh2YWwudG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LnRvVUludDMyKGNhbGxG
cmFtZSkgJiAweDFmKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Vyc2hpZnQpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfYml0YW5kKSB7Ci0g
ICAgICAgIC8qIGJpdGFuZCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ29t
cHV0ZXMgYml0d2lzZSBBTkQgb2YgcmVnaXN0ZXIgc3JjMSAoY29udmVydGVkIHRvIGludDMyKQot
ICAgICAgICAgICBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRvIGludDMyKSwgYW5kIHB1
dHMgdGhlIHJlc3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEg
PSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAg
ICAgICBpZiAoc3JjMS5pc0ludDMyKCkgJiYgc3JjMi5pc0ludDMyKCkpCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHNyYzEuYXNJbnQzMigpICYgc3Jj
Mi5hc0ludDMyKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoc3JjMS50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMyLnRvSW50MzIoY2FsbEZy
YW1lKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2JpdGFuZCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9iaXR4b3IpIHsKLSAgICAgICAgLyog
Yml0eG9yIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3
aXNlIFhPUiBvZiByZWdpc3RlciBzcmMxIChjb252ZXJ0ZWQgdG8gaW50MzIpCi0gICAgICAgICAg
IGFuZCByZWdpc3RlciBzcmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUgcmVz
dWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50
IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFt
ZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9
IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChz
cmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoc3JjMS5hc0ludDMyKCkgXiBzcmMyLmFzSW50MzIo
KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihzcmMxLnRvSW50MzIoY2FsbEZyYW1lKSBeIHNyYzIudG9JbnQzMihjYWxsRnJhbWUpKTsKLSAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfYml0eG9yKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2JpdG9yKSB7Ci0gICAgICAgIC8qIGJpdG9yIGRzdChy
KSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3aXNlIE9SIG9mIHJl
Z2lzdGVyIHNyYzEgKGNvbnZlcnRlZCB0byBpbnQzMikKLSAgICAgICAgICAgYW5kIHJlZ2lzdGVy
IHNyYzIgKGNvbnZlcnRlZCB0byBpbnQzMiksIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51
Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5y
KHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKHNyYzEuaXNJbnQzMigp
ICYmIHNyYzIuaXNJbnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSB8IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHNyYzEudG9JbnQz
MihjYWxsRnJhbWUpIHwgc3JjMi50b0ludDMyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9iaXRvcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5F
X09QQ09ERShvcF9ub3QpIHsKLSAgICAgICAgLyogbm90IGRzdChyKSBzcmMocikKLQotICAgICAg
ICAgICBDb21wdXRlcyBsb2dpY2FsIE5PVCBvZiByZWdpc3RlciBzcmMgKGNvbnZlcnRlZCB0bwot
ICAgICAgICAgICBib29sZWFuKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3Qu
Ci0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1l
KSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3Bfbm90KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVf
T1BDT0RFKG9wX2NoZWNrX2hhc19pbnN0YW5jZSkgewotICAgICAgICAvKiBjaGVja19oYXNfaW5z
dGFuY2UgY29uc3RydWN0b3IocikKLQotICAgICAgICAgICBDaGVjayAnY29uc3RydWN0b3InIGlz
IGFuIG9iamVjdCB3aXRoIHRoZSBpbnRlcm5hbCBwcm9wZXJ0eQotICAgICAgICAgICBbSGFzSW5z
dGFuY2VdIChpLmUuIGlzIGEgZnVuY3Rpb24gLi4uICpzaGFrZXMgaGVhZCBzYWRseSBhdAotICAg
ICAgICAgICBKU0MgQVBJKikuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgcmVnaXN0ZXIgY29uc3Ry
dWN0b3IgaXMgbm90Ci0gICAgICAgICAgIGFuIHZhbGlkIHBhcmFtZXRlciBmb3IgaW5zdGFuY2Vv
Zi4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBD
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0K
LSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsK
LQotICAgICAgICBpZiAoYmFzZVZhbC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBUeXBlSW5m
byBpbmZvID0gYXNPYmplY3QoYmFzZVZhbCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpOwotICAg
ICAgICAgICAgaWYgKGluZm8uaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2hlY2tfaGFzX2luc3RhbmNlKTsK
LSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaW5mby5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgYmFzZVZhbCA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlVmFsKS0+bWV0aG9kVGFibGUo
KS0+Y3VzdG9tSGFzSW5zdGFuY2UoYXNPYmplY3QoYmFzZVZhbCksIGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpz
Qm9vbGVhbihyZXN1bHQpOwotCi0gICAgICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAg
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxG
cmFtZSwgImluc3RhbmNlb2YiICwgYmFzZVZhbCk7Ci0gICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3BfaW5zdGFuY2VvZikgewotICAgICAgICAvKiBpbnN0
YW5jZW9mIGRzdChyKSB2YWx1ZShyKSBjb25zdHJ1Y3RvcihyKSBjb25zdHJ1Y3RvclByb3RvKHIp
Ci0KLSAgICAgICAgICAgVGVzdHMgd2hldGhlciByZWdpc3RlciB2YWx1ZSBpcyBhbiBpbnN0YW5j
ZSBvZiByZWdpc3RlcgotICAgICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIGJvb2xl
YW4gcmVzdWx0IGluIHJlZ2lzdGVyCi0gICAgICAgICAgIGRzdC4gUmVnaXN0ZXIgY29uc3RydWN0
b3JQcm90byBtdXN0IGNvbnRhaW4gdGhlICJwcm90b3R5cGUiCi0gICAgICAgICAgIHByb3BlcnR5
IChub3QgdGhlIGFjdHVhbCBwcm90b3R5cGUpIG9mIHRoZSBvYmplY3QgaW4KLSAgICAgICAgICAg
cmVnaXN0ZXIgY29uc3RydWN0b3IuIFRoaXMgbG9va3VwIGlzIHNlcGFyYXRlZCBzbyB0aGF0Ci0g
ICAgICAgICAgIHBvbHltb3JwaGljIGlubGluZSBjYWNoaW5nIGNhbiBhcHBseS4KLQotICAgICAg
ICAgICBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVyIGNvbnN0cnVjdG9yIGlzIG5vdCBh
bgotICAgICAgICAgICBvYmplY3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgYmFzZVByb3RvID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAgICBib29sIHJl
c3VsdCA9IEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnIodmFsdWUpLmpzVmFsdWUoKSwgY2FsbEZyYW1lLT5yKGJhc2VQcm90bykuanNWYWx1ZSgpKTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoZHN0KSA9IGpzQm9vbGVhbihyZXN1bHQpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX2luc3RhbmNlb2YpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfdHlwZW9mKSB7Ci0gICAgICAgIC8qIHR5cGVvZiBkc3Qo
cikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdHlwZSBzdHJpbmcgZm9yIHNy
YyBhY2NvcmRpbmcgdG8gRUNNQVNjcmlwdAotICAgICAgICAgICBydWxlcywgYW5kIHB1dHMgdGhl
IHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2
UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGpzVHlwZVN0cmluZ0Zv
clZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpKSk7Ci0KLSAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdHlwZW9mKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZCkgewotICAg
ICAgICAvKiBpc191bmRlZmluZWQgZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVybWlu
ZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAgICAg
ICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgInVuZGVmaW5lZCIsIGFuZCBwdXRzIHRoZSByZXN1
bHQKLSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQg
ZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKTsKLSAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4odi5pc0NlbGwoKSA/
IHYuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSA6IHYuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfdW5kZWZpbmVkKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX2Jvb2xlYW4pIHsKLSAg
ICAgICAgLyogaXNfYm9vbGVhbiBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJtaW5l
cyB3aGV0aGVyIHRoZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bwotICAgICAgICAg
ICB0aGUgRUNNQVNjcmlwdCBydWxlcyBpcyAiYm9vbGVhbiIsIGFuZCBwdXRzIHRoZSByZXN1bHQK
LSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGNhbGxGcmFt
ZS0+cihzcmMpLmpzVmFsdWUoKS5pc0Jvb2xlYW4oKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfaXNfYm9vbGVhbik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pc19udW1iZXIpIHsKLSAgICAgICAgLyogaXNfbnVt
YmVyIGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5
cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCi0gICAgICAgICAgIHRoZSBFQ01BU2NyaXB0
IHJ1bGVzIGlzICJudW1iZXIiLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJl
Z2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVl
KCkuaXNOdW1iZXIoKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfbnVt
YmVyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2lzX3N0cmluZykgewotICAgICAgICAvKiBpc19zdHJpbmcgZHN0KHIpIHNyYyhyKQot
Ci0gICAgICAgICAgIERldGVybWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBh
Y2NvcmRpbmcgdG8KLSAgICAgICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgInN0cmluZyIs
IGFuZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAg
ICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNy
YyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0ganNCb29sZWFuKGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS5pc1N0cmluZygpKTsKLQot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19zdHJpbmcpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfaXNfb2JqZWN0KSB7
Ci0gICAgICAgIC8qIGlzX29iamVjdCBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJt
aW5lcyB3aGV0aGVyIHRoZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bwotICAgICAg
ICAgICB0aGUgRUNNQVNjcmlwdCBydWxlcyBpcyAib2JqZWN0IiwgYW5kIHB1dHMgdGhlIHJlc3Vs
dAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oanNJc09i
amVjdFR5cGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkpKTsKLQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19vYmplY3QpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfaXNfZnVuY3Rpb24pIHsK
LSAgICAgICAgLyogaXNfZnVuY3Rpb24gZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVy
bWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAg
ICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgImZ1bmN0aW9uIiwgYW5kIHB1dHMgdGhlIHJl
c3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oanNJ
c0Z1bmN0aW9uVHlwZShjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkpKTsKLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19mdW5jdGlvbik7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pbikgewotICAgICAgICAvKiBp
biBkc3QocikgcHJvcGVydHkocikgYmFzZShyKQotCi0gICAgICAgICAgIFRlc3RzIHdoZXRoZXIg
cmVnaXN0ZXIgYmFzZSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCByZWdpc3RlcgotICAgICAgICAgICBw
cm9wZXJ0eSwgYW5kIHB1dHMgdGhlIGJvb2xlYW4gcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLQot
ICAgICAgICAgICBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVyIGNvbnN0cnVjdG9yIGlz
IG5vdCBhbgotICAgICAgICAgICBvYmplY3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNW
YWx1ZSBiYXNlVmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYg
KGlzSW52YWxpZFBhcmFtRm9ySW4oY2FsbEZyYW1lLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkp
Ci0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2Jq
ID0gYXNPYmplY3QoYmFzZVZhbCk7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wTmFtZSA9IGNhbGxG
cmFtZS0+cihwcm9wZXJ0eSkuanNWYWx1ZSgpOwotCi0gICAgICAgIHVpbnQzMl90IGk7Ci0gICAg
ICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUs
IGkpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNOYW1lKHByb3BOYW1lKSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5
KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHByb3BOYW1lLmFzQ2VsbCgpKS0+cHJp
dmF0ZU5hbWUoKSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxs
RnJhbWUpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX2luKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX3Jlc29sdmUpIHsKLSAgICAgICAgLyogcmVzb2x2ZSBkc3Qo
cikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgTG9va3MgdXAgdGhlIHByb3BlcnR5IG5hbWVk
IGJ5IGlkZW50aWZpZXIgcHJvcGVydHkgaW4gdGhlCi0gICAgICAgICAgIHNjb3BlIGNoYWluLCBh
bmQgd3JpdGVzIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gcmVnaXN0ZXIKLSAgICAgICAgICAgZHN0
LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLQotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmUoY2FsbEZyYW1lLCBpZGVudCk7Ci0g
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVz
b2x2ZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9yZXNvbHZlX3NraXApIHsKLSAgICAgICAgLyogcmVzb2x2ZV9za2lwIGRzdChyKSBw
cm9wZXJ0eShpZCkgc2tpcChuKQotCi0gICAgICAgICBMb29rcyB1cCB0aGUgcHJvcGVydHkgbmFt
ZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSBpbiB0aGUKLSAgICAgICAgIHNjb3BlIGNoYWluIHNr
aXBwaW5nIHRoZSB0b3AgJ3NraXAnIGxldmVscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0aW5nCi0g
ICAgICAgICB2YWx1ZSB0byByZWdpc3RlciBkc3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91
bmQsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0gICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlm
aWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkp
OwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVNraXAoY2FsbEZy
YW1lLCBpZGVudCwgc2tpcCk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9za2lwKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3Jlc29sdmVfZ2xvYmFsKSB7Ci0gICAg
ICAgIC8qIHJlc29sdmVfc2tpcCBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHByb3BlcnR5KGlkKSBz
dHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikKLSAgICAgICAgIAotICAgICAgICAgICBQZXJmb3JtcyBh
IGR5bmFtaWMgcHJvcGVydHkgbG9va3VwIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIG9uIHRoZSBw
cm92aWRlZAotICAgICAgICAgICBnbG9iYWwgb2JqZWN0LiAgSWYgc3RydWN0dXJlIG1hdGNoZXMg
dGhlIFN0cnVjdHVyZSBvZiB0aGUgZ2xvYmFsIHRoZW4gcGVyZm9ybQotICAgICAgICAgICBhIGZh
c3QgbG9va3VwIHVzaW5nIHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBh
IGZ1bGwgcmVzb2x2ZSBhbmQKLSAgICAgICAgICAgY2FjaGUgdGhlIG5ldyBzdHJ1Y3R1cmUgYW5k
IG9mZnNldAotICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIElkZW50
aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0
eSk7Ci0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKAot
ICAgICAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICAgICAgaWRlbnQsCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwKLSAgICAgICAgICAgICZ2UENbM10udS5z
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAmdlBDWzRdLnUub3BlcmFuZAotICAgICAgICApOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29s
dmVfZ2xvYmFsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpIHsKLSAgICAgICAgLyogcmVzb2x2
ZV9za2lwIGRzdChyKSBnbG9iYWxPYmplY3QoYykgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQp
IG9mZnNldChuKSwgZGVwdGgobikKLSAgICAgICAgIAotICAgICAgICAgUGVyZm9ybXMgYSBkeW5h
bWljIHByb3BlcnR5IGxvb2t1cCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBvbiB0aGUgcHJvdmlk
ZWQKLSAgICAgICAgIGdsb2JhbCBvYmplY3QuICBJZiBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgU3Ry
dWN0dXJlIG9mIHRoZSBnbG9iYWwgdGhlbiBwZXJmb3JtCi0gICAgICAgICBhIGZhc3QgbG9va3Vw
IHVzaW5nIHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhIGZ1bGwgcmVz
b2x2ZSBhbmQKLSAgICAgICAgIGNhY2hlIHRoZSBuZXcgc3RydWN0dXJlIGFuZCBvZmZzZXQuCi0g
ICAgICAgICAKLSAgICAgICAgIFRoaXMgd2Fsa3MgdGhyb3VnaCBuIGxldmVscyBvZiB0aGUgc2Nv
cGUgY2hhaW4gdG8gdmVyaWZ5IHRoYXQgbm9uZSBvZiB0aG9zZSBsZXZlbHMKLSAgICAgICAgIGlu
IHRoZSBzY29wZSBjaGFpbiBpbmNsdWRlIGR5bmFtaWNhbGx5IGFkZGVkIHByb3BlcnRpZXMuCi0g
ICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENb
NV0udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNTY29wZTo6cmVzb2x2ZUdsb2JhbER5bmFtaWMoY2FsbEZyYW1lLCBpZGVudCwgc2tpcCwg
JnZQQ1szXS51LnN0cnVjdHVyZSwgJnZQQ1s0XS51Lm9wZXJhbmQpOwotICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVz
dWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfZ2xvYmFsX2R5
bmFtaWMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfZ2V0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogZ2V0X2dsb2JhbF92YXIgZHN0
KHIpIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50ZXIobikKLQotICAgICAgICAgICBHZXRz
IHRoZSBnbG9iYWwgdmFyIGF0IGdsb2JhbCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4gcmVn
aXN0ZXIgZHN0LgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gdlBD
WzJdLnUucmVnaXN0ZXJQb2ludGVyOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gcmVnaXN0ZXJQb2ludGVyLT5nZXQoKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfZ2V0X2dsb2JhbF92YXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2dsb2JhbF92YXJfd2F0Y2hhYmxlKSB7Ci0gICAg
ICAgIC8qIGdldF9nbG9iYWxfdmFyX3dhdGNoYWJsZSBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHJl
Z2lzdGVyUG9pbnRlcihuKQotCi0gICAgICAgICAgIEdldHMgdGhlIGdsb2JhbCB2YXIgYXQgZ2xv
YmFsIHNsb3QgaW5kZXggYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICAq
LwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMl0udS5yZWdpc3RlclBvaW50ZXI7
Ci0KLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZWdpc3RlclBvaW50ZXIt
PmdldCgpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZ2xvYmFsX3Zhcl93
YXRjaGFibGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklO
RV9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3QpCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRf
Z2xvYmFsX3ZhcikgewotICAgICAgICAvKiBwdXRfZ2xvYmFsX3ZhciBnbG9iYWxPYmplY3QoYykg
cmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCi0gICAgICAgICAKLSAgICAgICAgICAgUHV0cyB2
YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LgotICAgICAgICAgKi8KLSAgICAgICAgSlNHbG9i
YWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgQVNT
RVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMV0udS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgICAg
IGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICByZWdpc3Rl
clBvaW50ZXItPnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNW
YWx1ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfZ2xv
YmFsX3Zhcl9jaGVjaykgewotICAgICAgICAvKiBwdXRfZ2xvYmFsX3Zhcl9jaGVjayBnbG9iYWxP
YmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCi0gICAgICAgICAKLSAgICAgICAg
ICAgUHV0cyB2YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LiBJbiBKSVQgY29uZmlndXJhdGlv
bnMgdGhpcyB3aWxsCi0gICAgICAgICAgIHBlcmZvcm0gYSB3YXRjaHBvaW50IGNoZWNrLiBJZiB3
ZSdyZSBydW5uaW5nIHdpdGggdGhlIG9sZCBpbnRlcnByZXRlciwKLSAgICAgICAgICAgdGhpcyBp
cyBub3QgbmVjZXNzYXJ5OyB0aGUgaW50ZXJwcmV0ZXIgbmV2ZXIgdXNlcyB0aGVzZSB3YXRjaHBv
aW50cy4KLSAgICAgICAgICovCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0g
dlBDWzFdLnUucmVnaXN0ZXJQb2ludGVyOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICAKLSAgICAgICAgcmVnaXN0ZXJQb2ludGVyLT5zZXQoKmdsb2JhbERh
dGEsIHNjb3BlLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7Ci0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9zY29wZWRfdmFy
KSB7Ci0gICAgICAgIC8qIGdldF9zY29wZWRfdmFyIGRzdChyKSBpbmRleChuKSBza2lwKG4pCi0K
LSAgICAgICAgIExvYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXgtdGggbG9jYWwgZnJvbSB0
aGUgc2NvcGUgc2tpcCBub2RlcyBmcm9tCi0gICAgICAgICB0aGUgdG9wIG9mIHRoZSBzY29wZSBj
aGFpbiwgYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICAqLwotICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAg
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICBTY29wZUNo
YWluSXRlcmF0b3IgaXRlciA9IHNjb3BlLT5iZWdpbigpOwotICAgICAgICBTY29wZUNoYWluSXRl
cmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRl
ciAhPSBlbmQpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpOwotICAgICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwot
ICAgICAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAgICAgIGlmIChjaGVj
a1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChza2lwLS0pIHsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGl0ZXItPmlzVmFyaWFibGVPYmplY3QoKSk7Ci0gICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVP
YmplY3QqPihpdGVyLmdldCgpKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSB2YXJpYWJsZU9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuZ2V0KCk7Ci0gICAgICAgIEFTU0VS
VChjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfc2NvcGVkX3Zhcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfc2NvcGVkX3ZhcikgewotICAgICAgICAvKiBw
dXRfc2NvcGVkX3ZhciBpbmRleChuKSBza2lwKG4pIHZhbHVlKHIpCi0KLSAgICAgICAgICovCi0g
ICAgICAgIGludCBpbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBza2lwID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsK
LQotICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICAgICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZS0+YmVnaW4oKTsKLSAgICAgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlLT5lbmQoKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQs
IGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKTsKLSAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgICAgICBp
ZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgICAgIGlmIChjYWxsRnJhbWUt
PnIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc2tpcC0tKSB7Ci0gICAg
ICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBl
bmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGl0ZXItPmlzVmFyaWFibGVPYmplY3Qo
KSk7Ci0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpT
VmFyaWFibGVPYmplY3QqPihpdGVyLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
cih2YWx1ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgdmFyaWFibGVPYmplY3QtPnJlZ2lzdGVyQXQo
aW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgdmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZS0+cih2YWx1
ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X3Njb3Bl
ZF92YXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfcmVzb2x2ZV9iYXNlKSB7Ci0gICAgICAgIC8qIHJlc29sdmVfYmFzZSBkc3Qocikg
cHJvcGVydHkoaWQpIGlzU3RyaWN0KGJvb2wpCi0KLSAgICAgICAgICAgU2VhcmNoZXMgdGhlIHNj
b3BlIGNoYWluIGZvciBhbiBvYmplY3QgY29udGFpbmluZwotICAgICAgICAgICBpZGVudGlmaWVy
IHByb3BlcnR5LCBhbmQgaWYgb25lIGlzIGZvdW5kLCB3cml0ZXMgaXQgdG8KLSAgICAgICAgICAg
cmVnaXN0ZXIgZHN0LiBJZiBub25lIGlzIGZvdW5kIGFuZCBpc1N0cmljdCBpcyBmYWxzZSwgdGhl
Ci0gICAgICAgICAgIG91dGVybW9zdCBzY29wZSAod2hpY2ggd2lsbCBiZSB0aGUgZ2xvYmFsIG9i
amVjdCkgaXMKLSAgICAgICAgICAgc3RvcmVkIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8K
LSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0
eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGJvb2wgaXNTdHJpY3QgPSB2UENbM10udS5v
cGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNT
Y29wZTo6cmVzb2x2ZUJhc2UoY2FsbEZyYW1lLCBpZGVudCwgaXNTdHJpY3QpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfYmFz
ZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKSB7Ci0gICAgICAgIC8qIGVuc3VyZV9wcm9wZXJ0
eV9leGlzdHMgYmFzZShyKSBwcm9wZXJ0eShpZCkKLQotICAgICAgICAgICBUaHJvd3MgYW4gZXhj
ZXB0aW9uIGlmIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0IG9uIGJhc2UKLSAgICAgICAgICovCi0g
ICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBiYXNl
VmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNPYmplY3QqIGJh
c2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbCk7Ci0gICAgICAgIGlmICghYmFzZU9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0
ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoY2FsbEZyYW1lLCBpZGVudC5zdHJpbmco
KSk7Ci0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyk7Ci0gICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yZXNvbHZlX3dp
dGhfYmFzZSkgewotICAgICAgICAvKiByZXNvbHZlX3dpdGhfYmFzZSBiYXNlRHN0KHIpIHByb3BE
c3QocikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgU2VhcmNoZXMgdGhlIHNjb3BlIGNoYWlu
IGZvciBhbiBvYmplY3QgY29udGFpbmluZwotICAgICAgICAgICBpZGVudGlmaWVyIHByb3BlcnR5
LCBhbmQgaWYgb25lIGlzIGZvdW5kLCB3cml0ZXMgaXQgdG8KLSAgICAgICAgICAgcmVnaXN0ZXIg
c3JjRHN0LCBhbmQgdGhlIHJldHJpZXZlZCBwcm9wZXJ0eSB2YWx1ZSB0byByZWdpc3RlcgotICAg
ICAgICAgICBwcm9wRHN0LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgotCi0gICAgICAgICAgIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBkb2lu
ZyByZXNvbHZlX2Jhc2UgZm9sbG93ZWQgYnkKLSAgICAgICAgICAgcmVzb2x2ZSwgb3IgcmVzb2x2
ZV9iYXNlIGZvbGxvd2VkIGJ5IGdldF9ieV9pZCwgYXMgaXQKLSAgICAgICAgICAgYXZvaWRzIGR1
cGxpY2F0ZSBoYXNoIGxvb2t1cHMuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlRHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BEc3QgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVu
dGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAg
ICAgSlNWYWx1ZSBwcm9wID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwgaWRl
bnQsICZjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYmFzZURzdCkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9wRHN0KSA9IHBy
b3A7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV93aXRoX2Jhc2Up
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfcmVzb2x2ZV93aXRoX3RoaXMpIHsKLSAgICAgICAgLyogcmVzb2x2ZV93aXRoX3RoaXMgdGhp
c0RzdChyKSBwcm9wRHN0KHIpIHByb3BlcnR5KGlkKQotCi0gICAgICAgICAgIFNlYXJjaGVzIHRo
ZSBzY29wZSBjaGFpbiBmb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcKLSAgICAgICAgICAgaWRlbnRp
ZmllciBwcm9wZXJ0eSwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgd3JpdGVzIHRoZQotICAgICAgICAg
ICByZXRyaWV2ZWQgcHJvcGVydHkgdmFsdWUgdG8gcmVnaXN0ZXIgcHJvcERzdCwgYW5kIHRoZQot
ICAgICAgICAgICB0aGlzIG9iamVjdCB0byBwYXNzIGluIGEgY2FsbCB0byB0aGlzRHN0LgotCi0g
ICAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJhaXNlcyBhbiBleGNlcHRp
b24uCi0gICAgICAgICovCi0gICAgICAgIGludCB0aGlzRHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHByb3BEc3QgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJv
cGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wID0g
SlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGNhbGxGcmFtZSwgaWRlbnQsICZjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIodGhpc0RzdCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9wRHN0KSA9IHByb3A7Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lkX291dF9v
Zl9saW5lKQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lkKSB7Ci0gICAgICAgIC8qIGdl
dF9ieV9pZCBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgbm9wKG4p
IG5vcChuKSBub3AobikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogR2V0
cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSBm
cm9tIHRoZSB2YWx1ZSBiYXNlLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBD
WzNdLnUub3BlcmFuZDsKLQotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZy
YW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwg
aWRlbnQsIHNsb3QpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAg
dHJ5Q2FjaGVHZXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QpOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0
OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lk
X3NlbGYpIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX3NlbGYgZHN0KHIpIGJhc2UocikgcHJv
cGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIG9mZnNldChuKSBub3Aobikgbm9wKG4pCi0KLSAgICAg
ICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIHBy
b3BlcnR5IGZyb20gdGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UuIElmIHRoZSBjYWNoZSBtaXNz
ZXMsIG9wX2dldF9ieV9pZF9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgICAgb3BfZ2V0X2J5X2lk
LgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLQot
ICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpIHsKLSAgICAgICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5nZXQoKTsKLQotICAgICAgICAgICAg
aWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2VsbCk7Ci0gICAgICAgICAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNl
dCA9IHZQQ1s1XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVj
dC0+Z2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJhbmQp
KSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGJhc2VPYmplY3QtPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKLQotICAgICAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9ieV9pZF9zZWxmKTsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmNhY2hlR2V0QnlJRChj
b2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfcHJvdG8pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5
X2lkX3Byb3RvIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBwcm90
b3R5cGVTdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pCi0KLSAgICAgICAgICAgQ2FjaGVk
IHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIHByb3BlcnR5IGZyb20g
dGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UncyBwcm90b3R5cGUuIElmIHRoZSBjYWNoZSBtaXNz
ZXMsIG9wX2dldF9ieV9pZF9wcm90bwotICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9p
ZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0K
LSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAg
IGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1l
KS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBh
c09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IHZQQ1s1XS51LnN0cnVj
dHVyZS5nZXQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocHJvdG9PYmplY3QtPnN0
cnVjdHVyZSgpID09IHByb3RvdHlwZVN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSB2UENbNl0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90
b09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9w
ZXJhbmQpKSA9PSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGNvZGVCbG9jay0+
aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBKU1ZhbHVlKHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX3By
b3RvKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVuY2FjaGVHZXRC
eUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICooJiZza2lw
X2lkX2dldHRlcl9wcm90byk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9p
ZF9nZXR0ZXJfcHJvdG8pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90byBk
c3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgcHJvdG90eXBlU3RydWN0
dXJlKHNJRCkgb2Zmc2V0KG4pIG5vcChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJv
cGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBnZXQgYSBjYWNoZWQgZ2V0dGVyIHByb3BlcnR5IGZy
b20gdGhlCi0gICAgICAgICB2YWx1ZSBiYXNlJ3MgcHJvdG90eXBlLiBJZiB0aGUgY2FjaGUgbWlz
c2VzLCBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvCi0gICAgICAgICByZXZlcnRzIHRvIG9wX2dl
dF9ieV9pZC4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1
ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7
Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSA9IHZQQ1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBw
cm90b3R5cGVTdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzZdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIocHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQp
LmFzQ2VsbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlciA9
IGdldHRlclNldHRlci0+Z2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChjYWxsRnJhbWUsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhc09iamVjdChiYXNlQ2VsbCksIEFyZ0xpc3QoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8pOwotICAgICAg
ICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9jaywg
dlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NP
TVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBza2lwX2lkX2dldHRlcl9wcm90bzoKLSNlbmRp
ZgotI2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIGdvdG8gKigmJnNr
aXBfaWRfY3VzdG9tX3Byb3RvKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5
X2lkX2N1c3RvbV9wcm90bykgewotICAgICAgICAvKiBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3Rv
IGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBwcm90b3R5cGVTdHJ1
Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pCi0gICAgICAgICAKLSAgICAgICAgIENhY2hlZCBw
cm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIHVzZSBhIGNhY2hlZCBuYW1lZCBwcm9wZXJ0eSBn
ZXR0ZXIKLSAgICAgICAgIGZyb20gdGhlIHZhbHVlIGJhc2UncyBwcm90b3R5cGUuIElmIHRoZSBj
YWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG8KLSAgICAgICAgIHJldmVydHMg
dG8gb3BfZ2V0X2J5X2lkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0u
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNl
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0Nl
bGwoKSkpIHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVy
ZS5nZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+
c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpLmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
cHJvdG90eXBlU3RydWN0dXJlID0gdlBDWzVdLnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocHJvdG9PYmplY3QtPnN0cnVjdHVy
ZSgpID09IHByb3RvdHlwZVN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9
IHZQQ1s2XS51LmdldHRlckZ1bmM7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gZ2V0dGVyKGNhbGxGcmFtZSwgcHJvdG9PYmplY3QsIGlkZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90byk7Ci0gICAgICAgICAgICAg
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURf
R09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfaWRfY3VzdG9tX3Byb3RvOgotI2VuZGlmCi0jaWYg
VVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAqKCYmc2tpcF9nZXRf
YnlfaWRfY2hhaW4pOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfY2hh
aW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2NoYWluIGRzdChyKSBiYXNlKHIpIHByb3Bl
cnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBzdHJ1Y3R1cmVDaGFpbihjaGFpbikgY291bnQobikgb2Zm
c2V0KG4pCi0KLSAgICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8g
Z2V0IGEgY2FjaGVkIHByb3BlcnR5IGZyb20gdGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UncyBw
cm90b3R5cGUgY2hhaW4uIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9jaGFpbgot
ICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KLSAgICAgICAgKi8KLSAgICAgICAg
aW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKExJS0VMWShiYXNl
VmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0u
dS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0
cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSB2UENbNV0udS5zdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOwotICAgICAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IHZQQ1s2XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGVuZCA9IGl0ICsgY291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogYmFz
ZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9v
a3VwKGNhbGxGcmFtZSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUoKSAhPSAoKml0KS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoKytpdCA9PSBlbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s3XS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBjb2Rl
QmxvY2stPmlkZW50aWZpZXIodlBDWzNdLnUub3BlcmFuZCkpID09IGJhc2VPYmplY3QtPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNl
VmFsdWUuZ2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJh
bmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYmFzZU9i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY2hhaW4pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGJhc2VDZWxsLCBzbyB0aGF0IG5leHQgdGlt
ZSBhcm91bmQgdGhlIGxvb3Agd2UnbGwgcGljayB1cCB0aGUgcHJvdG90eXBlJ3MgcHJvdG90eXBl
LgotICAgICAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VPYmplY3Q7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdW5jYWNoZUdldEJ5
SUQoY29kZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQot
I2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfZ2V0X2J5X2lk
X2NoYWluOgotICAgIGdvdG8gKigmJnNraXBfaWRfZ2V0dGVyX3NlbGYpOwotI2VuZGlmCi0gICAg
REVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGYpIHsKLSAgICAgICAgLyogb3Bf
Z2V0X2J5X2lkX3NlbGYgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQp
IG9mZnNldChuKSBub3Aobikgbm9wKG4pCi0gICAgICAgICAKLSAgICAgICAgIENhY2hlZCBwcm9w
ZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIGdldCBhIGNhY2hlZCBwcm9wZXJ0eSBmcm9tIHRoZQot
ICAgICAgICAgdmFsdWUgYmFzZS4gSWYgdGhlIGNhY2hlIG1pc3Nlcywgb3BfZ2V0X2J5X2lkX2dl
dHRlcl9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgIG9wX2dldF9ieV9pZC4KLSAgICAgICAgICov
Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwpOwotICAgICAg
ICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAgICAgaWYgKEdldHRl
clNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYmFzZU9iamVjdC0+Z2V0RGly
ZWN0T2Zmc2V0KG9mZnNldCkuYXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXItPmdldHRlcigpOwotICAgICAgICAgICAgICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBn
ZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZU9iamVjdCwgQXJnTGlzdCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBq
c1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2J5X2lkX2dldHRlcl9zZWxmKTsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29k
ZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVT
RShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfaWRfZ2V0dGVyX3NlbGY6
Ci0jZW5kaWYKLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3Rv
ICooJiZza2lwX2lkX2N1c3RvbV9zZWxmKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3Bf
Z2V0X2J5X2lkX2N1c3RvbV9zZWxmKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9jdXN0b21f
c2VsZiBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4p
IG5vcChuKSBub3AobikKLSAgICAgICAgIAotICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2Vz
czogQXR0ZW1wdHMgdG8gdXNlIGEgY2FjaGVkIG5hbWVkIHByb3BlcnR5IGdldHRlcgotICAgICAg
ICAgZnJvbSB0aGUgdmFsdWUgYmFzZS4gSWYgdGhlIGNhY2hlIG1pc3Nlcywgb3BfZ2V0X2J5X2lk
X2N1c3RvbV9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgIG9wX2dldF9ieV9pZC4KLSAgICAgICAg
ICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0Nl
bGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIGlu
dCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgICAg
ICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gdlBDWzVdLnUuZ2V0dGVy
RnVuYzsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldHRlcihjYWxsRnJhbWUs
IGJhc2VWYWx1ZSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LSAgICAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY3VzdG9t
X3NlbGYpOwotICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9H
T1RPX1dPUktBUk9VTkQpCi1za2lwX2lkX2N1c3RvbV9zZWxmOgotI2VuZGlmCi0gICAgREVGSU5F
X09QQ09ERShvcF9nZXRfYnlfaWRfZ2VuZXJpYykgewotICAgICAgICAvKiBvcF9nZXRfYnlfaWRf
Z2VuZXJpYyBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgbm9wKHNJRCkgbm9wKG4pIG5vcChu
KSBub3AobikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogR2V0cyB0aGUg
cHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSBmcm9tIHRo
ZSB2YWx1ZSBiYXNlLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBi
YXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLQotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5y
KGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsK
LSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQs
IHNsb3QpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICoo
JiZza2lwX2lkX2dldHRlcl9jaGFpbik7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dl
dF9ieV9pZF9nZXR0ZXJfY2hhaW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbiBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgc3RydWN0dXJl
Q2hhaW4oY2hhaW4pIGNvdW50KG4pIG9mZnNldChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNo
ZWQgcHJvcGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBnZXQgYSBjYWNoZWQgcHJvcGVydHkgZnJv
bSB0aGUKLSAgICAgICAgIHZhbHVlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4uIElmIHRoZSBjYWNo
ZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW4KLSAgICAgICAgIHJldmVydHMgdG8g
b3BfZ2V0X2J5X2lkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwo
KSkpIHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5n
ZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+c3Ry
dWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KiBpdCA9IHZQQ1s1XS51LnN0cnVjdHVyZUNoYWluLT5oZWFkKCk7Ci0gICAgICAg
ICAgICAgICAgc2l6ZV90IGNvdW50ID0gdlBDWzZdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogZW5kID0gaXQgKyBjb3VudDsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKS0+
cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpICE9
ICgqaXQpLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCsraXQgPT0gZW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJT
ZXR0ZXIoYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkuYXNDZWxsKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IGdldHRlclNldHRl
ci0+Z2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChjYWxsRnJhbWUsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlVmFsdWUsIEFyZ0xpc3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFp
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vIFVwZGF0ZSBiYXNlQ2VsbCwgc28gdGhhdCBuZXh0IHRpbWUgYXJvdW5kIHRoZSBsb29wIHdl
J2xsIHBpY2sgdXAgdGhlIHByb3RvdHlwZSdzIHByb3RvdHlwZS4KLSAgICAgICAgICAgICAgICAg
ICAgYmFzZUNlbGwgPSBiYXNlT2JqZWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9H
T1RPX1dPUktBUk9VTkQpCi0gICAgc2tpcF9pZF9nZXR0ZXJfY2hhaW46Ci0jZW5kaWYKLSNpZiBV
U0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICooJiZza2lwX2lkX2N1
c3RvbV9jaGFpbik7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9pZF9jdXN0
b21fY2hhaW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbiBkc3Qocikg
YmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgc3RydWN0dXJlQ2hhaW4oY2hhaW4p
IGNvdW50KG4pIG9mZnNldChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJvcGVydHkg
YWNjZXNzOiBBdHRlbXB0cyB0byB1c2UgYSBjYWNoZWQgbmFtZWQgcHJvcGVydHkgZ2V0dGVyIG9u
IHRoZQotICAgICAgICAgdmFsdWUgYmFzZSdzIHByb3RvdHlwZSBjaGFpbi4gSWYgdGhlIGNhY2hl
IG1pc3Nlcywgb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbgotICAgICAgICAgcmV2ZXJ0cyB0byBv
cF9nZXRfYnlfaWQuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpz
VmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgp
KSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdl
dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gdlBDWzVdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKLSAgICAgICAg
ICAgICAgICBzaXplX3QgY291bnQgPSB2UENbNl0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBlbmQgPSBpdCArIGNvdW50OwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwtPnN0cnVjdHVyZSgpLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZU9iamVjdC0+c3RydWN0dXJlKCkgIT0g
KCppdCkuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoKytpdCA9PSBlbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gdlBDWzddLnUuZ2V0dGVy
RnVuYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0dGVyKGNh
bGxGcmFtZSwgYmFzZU9iamVjdCwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGJhc2VDZWxs
LCBzbyB0aGF0IG5leHQgdGltZSBhcm91bmQgdGhlIGxvb3Agd2UnbGwgcGljayB1cCB0aGUgcHJv
dG90eXBlJ3MgcHJvdG90eXBlLgotICAgICAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VP
YmplY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAg
ICBza2lwX2lkX2N1c3RvbV9jaGFpbjoKLSAgICBnb3RvICooJiZza2lwX2dldF9hcnJheV9sZW5n
dGgpOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYXJyYXlfbGVuZ3RoKSB7Ci0g
ICAgICAgIC8qIG9wX2dldF9hcnJheV9sZW5ndGggZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQp
IG5vcChzSUQpIG5vcChuKSBub3Aobikgbm9wKG4pCi0KLSAgICAgICAgICAgQ2FjaGVkIHByb3Bl
cnR5IGFjY2VzczogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpbiByZWdpc3RlciBiYXNl
LAotICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4gSWYgcmVn
aXN0ZXIgYmFzZSBkb2VzIG5vdCBob2xkCi0gICAgICAgICAgIGFuIGFycmF5LCBvcF9nZXRfYXJy
YXlfbGVuZ3RoIHJldmVydHMgdG8gb3BfZ2V0X2J5X2lkLgotICAgICAgICAqLwotCi0gICAgICAg
IGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoTElLRUxZKGlzSlNB
cnJheShiYXNlVmFsdWUpKSkgewotICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKGFz
QXJyYXkoYmFzZVZhbHVlKS0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2FycmF5X2xlbmd0aCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7
Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRF
RF9HT1RPX1dPUktBUk9VTkQpCi0gICAgc2tpcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgIGdvdG8g
KigmJnNraXBfZ2V0X3N0cmluZ19sZW5ndGgpOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShv
cF9nZXRfc3RyaW5nX2xlbmd0aCkgewotICAgICAgICAvKiBvcF9nZXRfc3RyaW5nX2xlbmd0aCBk
c3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgbm9wKHNJRCkgbm9wKG4pIG5vcChuKSBub3AobikK
LQotICAgICAgICAgICBDYWNoZWQgcHJvcGVydHkgYWNjZXNzOiBHZXRzIHRoZSBsZW5ndGggb2Yg
dGhlIHN0cmluZyBpbiByZWdpc3RlciBiYXNlLAotICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVz
dWx0IGluIHJlZ2lzdGVyIGRzdC4gSWYgcmVnaXN0ZXIgYmFzZSBkb2VzIG5vdCBob2xkCi0gICAg
ICAgICAgIGEgc3RyaW5nLCBvcF9nZXRfc3RyaW5nX2xlbmd0aCByZXZlcnRzIHRvIG9wX2dldF9i
eV9pZC4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUo
KTsKLSAgICAgICAgaWYgKExJS0VMWShpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpKSB7Ci0gICAgICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoYXNTdHJpbmcoYmFzZVZhbHVlKS0+bGVuZ3RoKCkp
OwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3N0cmluZ19sZW5ndGgp
OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNr
aXBfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgZ290byAqKCYmc2tpcF9wdXRfYnlfaWQpOwotI2Vu
ZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpCi0gICAgREVG
SU5FX09QQ09ERShvcF9wdXRfYnlfaWQpIHsKLSAgICAgICAgLyogcHV0X2J5X2lkIGJhc2Uocikg
cHJvcGVydHkoaWQpIHZhbHVlKHIpIG5vcChuKSBub3Aobikgbm9wKG4pIG5vcChuKSBkaXJlY3Qo
YikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVy
dHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRv
IHJlZ2lzdGVyIGJhc2UsIHRvIHJlZ2lzdGVyIHZhbHVlLgotCi0gICAgICAgICAgIFVubGlrZSBt
YW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAg
ICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0KLSAgICAgICAgICAgVGhlICJkaXJlY3QiIGZsYWcg
c2hvdWxkIG9ubHkgYmUgc2V0IHRoaXMgcHV0X2J5X2lkIGlzIHRvIGluaXRpYWxpemUKLSAgICAg
ICAgICAgYW4gb2JqZWN0IGxpdGVyYWwuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IGJhc2Ug
PSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBpbnQg
ZGlyZWN0ID0gdlBDWzhdLnUub3BlcmFuZDsKLQotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIGlmIChkaXJlY3Qp
IHsKLSAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgICAgICAg
ICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoKmdsb2JhbERhdGEsIGlkZW50LCBjYWxs
RnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUp
LmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLQotICAg
ICAgICB0cnlDYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywgYmFzZVZhbHVl
LCBzbG90KTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfYnlfaWQpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURf
R09UT19XT1JLQVJPVU5EKQotICAgICAgc2tpcF9wdXRfYnlfaWQ6Ci0jZW5kaWYKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCkKLSAgICBERUZJTkVfT1BD
T0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCkKLSAgICBERUZJTkVfT1BDT0RFKG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZSkKLSAgICBERUZJTkVfT1BD
T0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKSB7Ci0gICAgICAgIC8qIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uIGJhc2UocikgcHJvcGVydHkoaWQpIHZhbHVlKHIpIG9sZFN0cnVjdHVy
ZShzSUQpIG5ld1N0cnVjdHVyZShzSUQpIHN0cnVjdHVyZUNoYWluKGNoYWluKSBvZmZzZXQobikg
ZGlyZWN0KGIpCi0gICAgICAgICAKLSAgICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2Vzczog
QXR0ZW1wdHMgdG8gc2V0IGEgbmV3IHByb3BlcnR5IHdpdGggYSBjYWNoZWQgdHJhbnNpdGlvbgot
ICAgICAgICAgICBwcm9wZXJ0eSBuYW1lZCBieSBpZGVudGlmaWVyIHByb3BlcnR5LCBiZWxvbmdp
bmcgdG8gcmVnaXN0ZXIgYmFzZSwKLSAgICAgICAgICAgdG8gcmVnaXN0ZXIgdmFsdWUuIElmIHRo
ZSBjYWNoZSBtaXNzZXMsIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uCi0gICAgICAgICAgIHJldmVy
dHMgdG8gb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgICAgICAKLSAgICAgICAgICAgVW5saWtl
IG1hbnkgb3Bjb2RlcywgdGhpcyBvbmUgZG9lcyBub3Qgd3JpdGUgYW55IG91dHB1dCB0bwotICAg
ICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNl
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNl
VmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2UENb
NF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IHZQQ1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgPT0gb2xkU3RydWN0dXJlKSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2VsbCk7Ci0gICAgICAgICAg
ICAgICAgaW50IGRpcmVjdCA9IHZQQ1s4XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gdlBDWzZdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsK
LQotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvID0gYmFzZU9iamVjdC0+c3RydWN0
dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIXByb3RvLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoYXNPYmplY3QocHJvdG8pLT5zdHJ1Y3R1cmUoKSAhPSAoKml0KS5nZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQ
Qyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3RvID0gYXNPYmplY3QocHJvdG8pLT5zdHJ1Y3R1cmUo
KS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+c2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgqZ2xvYmFsRGF0YSwgbmV3U3RydWN0
dXJlKTsKLQotICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s3XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxvY2F0aW9uKGJhc2VPYmplY3QtPmdl
dERpcmVjdExvY2F0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPmlkZW50aWZpZXIodlBDWzJd
LnUub3BlcmFuZCkpKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1
dERpcmVjdE9mZnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgb2Zmc2V0LCBjYWxsRnJhbWUt
PnIodmFsdWUpLmpzVmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1
bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfYnlfaWRfcmVwbGFjZSkgewotICAg
ICAgICAvKiBvcF9wdXRfYnlfaWRfcmVwbGFjZSBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1ZShy
KSBzdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pIG5vcChuKSBkaXJlY3QoYikKLQotICAg
ICAgICAgICBDYWNoZWQgcHJvcGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBzZXQgYSBwcmUtZXhp
c3RpbmcsIGNhY2hlZAotICAgICAgICAgICBwcm9wZXJ0eSBuYW1lZCBieSBpZGVudGlmaWVyIHBy
b3BlcnR5LCBiZWxvbmdpbmcgdG8gcmVnaXN0ZXIgYmFzZSwKLSAgICAgICAgICAgdG8gcmVnaXN0
ZXIgdmFsdWUuIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX3B1dF9ieV9pZF9yZXBsYWNlCi0gICAg
ICAgICAgIHJldmVydHMgdG8gb3BfcHV0X2J5X2lkLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55
IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAg
ICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIo
YmFzZSkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgp
KSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdl
dCgpOwotCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VDZWxsLT5pc09iamVjdCgp
KTsKLSAgICAgICAgICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VD
ZWxsKTsKLSAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwotICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlv
bihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHZQQ1syXS51Lm9wZXJhbmQpKSkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICBiYXNlT2JqZWN0LT5wdXREaXJlY3RPZmZzZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9m
ZnNldCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X2lkX3JlcGxhY2UpOwotICAgICAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHVuY2FjaGVQdXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB7
Ci0gICAgICAgIC8qIG9wX3B1dF9ieV9pZF9nZW5lcmljIGJhc2UocikgcHJvcGVydHkoaWQpIHZh
bHVlKHIpIG5vcChuKSBub3Aobikgbm9wKG4pIG5vcChuKSBkaXJlY3QoYikKLQotICAgICAgICAg
ICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRl
bnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2Us
IHRvIHJlZ2lzdGVyIHZhbHVlLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRo
aXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lz
dGVyIGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGRpcmVjdCA9IHZQQ1s4XS51
Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFz
ZSkuanNWYWx1ZSgpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICBpZiAoZGlyZWN0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgYXNPYmplY3QoYmFzZVZh
bHVlKS0+cHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5q
c1ZhbHVlKCksIHNsb3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhc2VWYWx1ZS5w
dXQoY2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3Qp
OwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZGVsX2J5X2lkKSB7Ci0gICAgICAgIC8q
IGRlbF9ieV9pZCBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkKLQotICAgICAgICAgICBDb252
ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZGVsZXRlcyB0aGUgcHJvcGVydHkKLSAgICAg
ICAgICAgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSBmcm9tIHRoZSBvYmplY3QsIGFuZCB3
cml0ZXMgYQotICAgICAgICAgICBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyAoaWYgdHJ1ZSkg
b3IgZmFpbHVyZSAoaWYgZmFsc2UpCi0gICAgICAgICAgIHRvIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBi
YXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGNhbGxGcmFtZS0+cihiYXNl
KS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBib29sIHJlc3Vs
dCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNhbGxG
cmFtZSwgaWRlbnQpOwotICAgICAgICBpZiAoIXJlc3VsdCAmJiBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVR5cGVFcnJvcihj
YWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2RlbF9ieV9pZCk7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfcG5hbWUp
IHsKLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNl
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IGV4cGVjdGVkID0gdlBDWzRdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IGl0ZXIgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgaSA9IHZQQ1s2XS51Lm9w
ZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSku
anNWYWx1ZSgpOwotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9IGNhbGxGcmFt
ZS0+cihpdGVyKS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IGNhbGxGcmFtZS0+cihwcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVl
IGV4cGVjdGVkU3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKGV4cGVjdGVkKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIGludCBpbmRleCA9IGNhbGxGcmFtZS0+cihpKS5pKCkgLSAxOwotICAgICAgICBKU1Zh
bHVlIHJlc3VsdDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
aWYgKHN1YnNjcmlwdCA9PSBleHBlY3RlZFN1YnNjcmlwdCAmJiBiYXNlVmFsdWUuaXNDZWxsKCkg
JiYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gaXQtPmNhY2hlZFN0cnVjdHVy
ZSgpKSAmJiBpdC0+Z2V0T2Zmc2V0KGluZGV4LCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXNPYmplY3QoYmFzZVZhbHVlKS0+Z2V0
RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAg
ICAgfQotICAgICAgICB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICB9Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9wbmFtZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCkgewotICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ3VtZW50c1Jl
Z2lzdGVyID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNd
LnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIoYXJn
dW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cykgewotICAg
ICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpOwotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gYXJndW1lbnRzLmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90
KTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9hcmd1
bWVudHNfbGVuZ3RoKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwpIHsKLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGFyZ3VtZW50c1JlZ2lzdGVy
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHBy
b3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRzICYmIHN1YnNjcmlwdC5p
c1VJbnQzMigpICYmIHN1YnNjcmlwdC5hc1VJbnQzMigpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZy
YW1lLT5hcmd1bWVudChzdWJzY3JpcHQuYXNVSW50MzIoKSk7Ci0gICAgICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKLSAgICAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWFyZ3VtZW50cykgewotICAg
ICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1
bWVudHNSZWdpc3RlcikgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmFsbHRo
cm91Z2gKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfdmFsKSB7Ci0gICAgICAg
IC8qIGdldF9ieV92YWwgZHN0KHIpIGJhc2UocikgcHJvcGVydHkocikKLQotICAgICAgICAgICBD
b252ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZ2V0cyB0aGUgcHJvcGVydHkgbmFtZWQK
LSAgICAgICAgICAgYnkgcmVnaXN0ZXIgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0LCBhbmQgcHV0
cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4gcHJvcGVydHkgaXMgbm9t
aW5hbGx5IGNvbnZlcnRlZCB0byBzdHJpbmcKLSAgICAgICAgICAgYnV0IG51bWJlcnMgYXJlIHRy
ZWF0ZWQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBjYWxsRnJhbWUtPnIocHJvcGVydHkpLmpzVmFsdWUoKTsK
LQotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLQotICAgICAgICBpZiAoTElLRUxZKHN1YnNjcmlw
dC5pc1VJbnQzMigpKSkgewotICAgICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJ
bnQzMigpOwotICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAg
ICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoanNBcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5KU0FycmF5
OjpnZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhi
YXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFt
ZSwgaSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICB9IGVsc2UgaWYgKGlzTmFtZShzdWJzY3Jp
cHQpKQotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2Fz
dDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwg
c3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2dldF9ieV92YWwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAg
IERFRklORV9PUENPREUob3BfcHV0X2J5X3ZhbCkgewotICAgICAgICAvKiBwdXRfYnlfdmFsIGJh
c2UocikgcHJvcGVydHkocikgdmFsdWUocikKLQotICAgICAgICAgICBTZXRzIHJlZ2lzdGVyIHZh
bHVlIG9uIHJlZ2lzdGVyIGJhc2UgYXMgdGhlIHByb3BlcnR5IG5hbWVkCi0gICAgICAgICAgIGJ5
IHJlZ2lzdGVyIHByb3BlcnR5LiBCYXNlIGlzIGNvbnZlcnRlZCB0byBvYmplY3QKLSAgICAgICAg
ICAgZmlyc3QuIHJlZ2lzdGVyIHByb3BlcnR5IGlzIG5vbWluYWxseSBjb252ZXJ0ZWQgdG8gc3Ry
aW5nCi0gICAgICAgICAgIGJ1dCBudW1iZXJzIGFyZSB0cmVhdGVkIG1vcmUgZWZmaWNpZW50bHku
Ci0KLSAgICAgICAgICAgVW5saWtlIG1hbnkgb3Bjb2RlcywgdGhpcyBvbmUgZG9lcyBub3Qgd3Jp
dGUgYW55IG91dHB1dCB0bwotICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJv
cGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5v
cGVyYW5kOwotCi0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2Up
LmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBjYWxsRnJhbWUtPnIocHJv
cGVydHkpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQz
MigpKSkgewotICAgICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwot
ICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
SlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoanNBcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAgICAgICAgICBq
c0FycmF5LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIGNhbGxGcmFtZS0+cih2YWx1
ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGpzQXJyYXktPkpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgY2FsbEZyYW1lLCBpLCBjYWxs
RnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChj
YWxsRnJhbWUsIGksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBjb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewot
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSk7Ci0gICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0
YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCksIGNhbGxGcmFtZS0+cih2
YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElk
ZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1l
KS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2Vw
dGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4
Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFt
ZSwgcHJvcGVydHksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9kZWxfYnlfdmFsKSB7
Ci0gICAgICAgIC8qIGRlbF9ieV92YWwgZHN0KHIpIGJhc2UocikgcHJvcGVydHkocikKLQotICAg
ICAgICAgICBDb252ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZGVsZXRlcyB0aGUgcHJv
cGVydHkKLSAgICAgICAgICAgbmFtZWQgYnkgcmVnaXN0ZXIgcHJvcGVydHkgZnJvbSB0aGUgb2Jq
ZWN0LCBhbmQgd3JpdGVzIGEKLSAgICAgICAgICAgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mg
KGlmIHRydWUpIG9yIGZhaWx1cmUgKGlmIGZhbHNlKQotICAgICAgICAgICB0byByZWdpc3RlciBk
c3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwot
Ci0gICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHByb3BlcnR5KS5qc1Zh
bHVlKCk7Ci0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICB1aW50MzJfdCBpOwotICAgICAg
ICBpZiAoc3Vic2NyaXB0LmdldFVJbnQzMihpKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VP
YmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBjYWxsRnJh
bWUsIGkpOwotICAgICAgICBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmos
IGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnBy
aXZhdGVOYW1lKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJz
Y3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBjYWxsRnJhbWUsIHByb3BlcnR5
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3VsdCAmJiBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVR5cGVFcnJvcihj
YWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2RlbF9ieV92YWwpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHV0X2J5X2luZGV4
KSB7Ci0gICAgICAgIC8qIHB1dF9ieV9pbmRleCBiYXNlKHIpIHByb3BlcnR5KG4pIHZhbHVlKHIp
Ci0KLSAgICAgICAgICAgU2V0cyByZWdpc3RlciB2YWx1ZSBvbiByZWdpc3RlciBiYXNlIGFzIHRo
ZSBwcm9wZXJ0eSBuYW1lZAotICAgICAgICAgICBieSB0aGUgaW1tZWRpYXRlIG51bWJlciBwcm9w
ZXJ0eS4gQmFzZSBpcyBjb252ZXJ0ZWQgdG8KLSAgICAgICAgICAgb2JqZWN0IGZpcnN0LgotCi0g
ICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFu
eSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0KLSAgICAgICAgICAg
VGhpcyBvcGNvZGUgaXMgbWFpbmx5IHVzZWQgdG8gaW5pdGlhbGl6ZSBhcnJheSBsaXRlcmFscy4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1
ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBhcnJheVZhbHVlID0gY2Fs
bEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgQVNTRVJUKGlzSlNBcnJheShhcnJh
eVZhbHVlKSk7Ci0gICAgICAgIGFzQXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVjdEluZGV4KGNh
bGxGcmFtZSwgcHJvcGVydHksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKLQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfYnlfaW5kZXgpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcCkgewotICAg
ICAgICAvKiBsb29wIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAKLSAgICAgICAgICAgSnVtcHMg
dW5jb25kaXRpb25hbGx5IHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudAotICAgICAg
ICAgICBpbnN0cnVjdGlvbi4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGlu
c3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBK
UyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICAqLwotI2lmIEVOQUJMRShPUENPREVfU1RB
VFMpCi0gICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlm
Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBDSEVDS19G
T1JfVElNRU9VVCgpOwotICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam1wKSB7Ci0gICAgICAgIC8q
IGptcCB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIEp1bXBzIHVuY29uZGl0aW9uYWxseSB0
byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgaW5zdHJ1Y3Rpb24u
Ci0gICAgICAgICovCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKLSAgICAgICAgT3Bjb2RlU3Rh
dHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCk7Ci0jZW5kaWYKLSAgICAgICAgaW50IHRhcmdldCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaGludCkg
ewotICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgdW5sZXNzIHdlIGludGVuZCBvbiBkb2luZyBP
U1IgZnJvbSB0aGUgaW50ZXJwcmV0ZXIuCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2xvb3BfaGludCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVG
SU5FX09QQ09ERShvcF9sb29wX2lmX3RydWUpIHsKLSAgICAgICAgLyogbG9vcF9pZl90cnVlIGNv
bmQocikgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAotICAgICAgICAgICBKdW1wcyB0byBvZmZz
ZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZAotICAgICAgICAg
ICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMgdG8gYm9vbGVhbiBhcyB0cnVlLgotCi0g
ICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0
ZSBKUyBleGVjdXRpb24gaXMKLSAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUt
PnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICB2
UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKLSAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaWZfZmFsc2UpIHsKLSAg
ICAgICAgLyogbG9vcF9pZl90cnVlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAot
ICAgICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1
Y3Rpb24sIGlmIGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMg
dG8gYm9vbGVhbiBhcyBmYWxzZS4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29w
IGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRo
ZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgY29uZCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNh
bGxGcmFtZSkpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBDSEVD
S19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX3Ry
dWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfanRydWUpIHsKLSAgICAgICAgLyoganRydWUgY29uZChyKSB0YXJnZXQob2Zmc2V0KQot
Ci0gICAgICAgICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0
cnVjdGlvbiwgaWYgYW5kCi0gICAgICAgICAgIG9ubHkgaWYgcmVnaXN0ZXIgY29uZCBjb252ZXJ0
cyB0byBib29sZWFuIGFzIHRydWUuCi0gICAgICAgICovCi0gICAgICAgIGludCBjb25kID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJh
bWUpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
anRydWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfamZhbHNlKSB7Ci0gICAgICAgIC8qIGpmYWxzZSBjb25kKHIpIHRhcmdldChvZmZz
ZXQpCi0KLSAgICAgICAgICAgSnVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50
IGluc3RydWN0aW9uLCBpZiBhbmQKLSAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBjb25kIGNv
bnZlcnRzIHRvIGJvb2xlYW4gYXMgZmFsc2UuCi0gICAgICAgICovCi0gICAgICAgIGludCBjb25k
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
Y2FsbEZyYW1lKSkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2pmYWxzZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9qZXFfbnVsbCkgewotICAgICAgICAvKiBqZXFfbnVsbCBzcmMocikg
dGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20g
dGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lz
dGVyIHNyYyBpcyBudWxsLgotICAgICAgICAqLwotICAgICAgICBpbnQgc3JjID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTVmFsdWUgc3JjVmFsdWUgPSBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCk7Ci0KLSAgICAg
ICAgaWYgKHNyY1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgKHNyY1ZhbHVlLmlzQ2VsbCgp
ICYmIHNyY1ZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpKSB7Ci0gICAgICAgICAgICB2UEMg
Kz0gdGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfamVxX251bGwpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5lcV9udWxsKSB7
Ci0gICAgICAgIC8qIGpuZXFfbnVsbCBzcmMocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAg
ICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlm
IGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIHNyYyBpcyBub3QgbnVsbC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0
YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyY1ZhbHVlID0gY2Fs
bEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmICghc3JjVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAoIXNyY1ZhbHVlLmlzQ2VsbCgpIHx8ICEoc3JjVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSkpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3Bfam5lcV9udWxsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2puZXFfcHRyKSB7Ci0gICAgICAgIC8qIGpuZXFf
cHRyIHNyYyhyKSBwdHIoanNDZWxsKSB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0gICAgICAg
ICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwg
aWYgdGhlIHZhbHVlIHIgaXMgZXF1YWwKLSAgICAgICAgICAgdG8gcHRyLCB1c2luZyBwb2ludGVy
IGVxdWFsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlIHNyY1ZhbHVlID0gY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpOwotICAgICAgICBpZiAo
c3JjVmFsdWUgIT0gdlBDWzJdLnUuanNDZWxsLmdldCgpKSB7Ci0gICAgICAgICAgICB2UEMgKz0g
dGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfam5lcV9wdHIpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9pZl9sZXNzKSB7
Ci0gICAgICAgIC8qIGxvb3BfaWZfbGVzcyBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkK
LQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBy
ZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAgICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVy
YXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRo
ZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJl
c3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotCi0gICAgICAgICAgIEFkZGl0aW9uYWxs
eSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRpb24gaXMKLSAg
ICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KLSAgICAgICAgICovCi0gICAgICAg
IEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBz
cmMyKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIENI
RUNLX0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZf
bGVzcyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9sb29wX2lmX2xlc3NlcSkgewotICAgICAgICAvKiBsb29wX2lmX2xlc3NlcSBzcmMx
KHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciBy
ZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWdpc3RlcgotICAgICAgICAg
ICBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8PScgb3BlcmF0b3IsIGFuZCB0aGVuIGp1
bXBzIHRvCi0gICAgICAgICAgIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVj
dGlvbiwgaWYgYW5kIG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBh
cmlzb24gaXMgdHJ1ZS4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3Ry
dWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBKUyB0
aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNh
bGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUg
c3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBqc0xlc3NFcTx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQo
KTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9sZXNzZXEpOwotICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9p
Zl9ncmVhdGVyKSB7Ci0gICAgICAgIC8qIGxvb3BfaWZfZ3JlYXRlciBzcmMxKHIpIHNyYzIocikg
dGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMx
IGlzIGdyZWF0ZXIgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAgICB3aXRoIHRoZSBF
Q01BU2NyaXB0ICc+JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAg
ICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0
aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotCi0gICAg
ICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBK
UyBleGVjdXRpb24gaXMKLSAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KLSAg
ICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2
UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10u
dS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8ZmFsc2U+
KGNhbGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7Ci0gICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RF
X0xFTkdUSChvcF9sb29wX2lmX2dyZWF0ZXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9pZl9ncmVhdGVyZXEpIHsKLSAgICAg
ICAgLyogbG9vcF9pZl9ncmVhdGVyZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0K
LSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4g
b3IgZXF1YWwgdG8gcmVnaXN0ZXIKLSAgICAgICAgICAgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNj
cmlwdCAnPj0nIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1wcyB0bwotICAgICAgICAgICBvZmZzZXQg
dGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBvbmx5IGlmIHRoZSAK
LSAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHRydWUuCi0KLSAgICAgICAg
ICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBtYXkgdGVybWluYXRlIEpTIGV4
ZWN1dGlvbiBpcwotICAgICAgICAgICB0aGUgSlMgdGltZW91dCBpcyByZWFjaGVkLgotICAgICAg
ICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFu
ZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJd
LnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXE8ZmFsc2U+KGNh
bGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
Ci0gICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9sb29wX2lmX2dyZWF0ZXJlcSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qbGVzcykgewotICAgICAgICAvKiBqbGVzcyBz
cmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhl
ciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAg
ICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zm
c2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBh
bmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0
cnVlLgotICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBD
WzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJh
bWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0g
dlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzczx0cnVlPihj
YWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0
OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfamxlc3NlcSkgewotICAgICAgICAvKiBq
bGVzc2VxIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0gICAgICAg
ICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bwot
ICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0nIG9wZXJh
dG9yLAotICAgICAgICAgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBj
dXJyZW50IGluc3RydWN0aW9uLAotICAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIHJlc3VsdCBv
ZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotICAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBz
cmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAg
SlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAg
ICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPHRydWU+KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0g
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1
bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2psZXNzZXEpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAg
IERFRklORV9PUENPREUob3BfamdyZWF0ZXIpIHsKLSAgICAgICAgLyogamdyZWF0ZXIgc3JjMShy
KSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVn
aXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAg
d2l0aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNl
dAotICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5k
IG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgdHJ1
ZS4KLSAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sx
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8ZmFsc2U+KGNh
bGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qZ3JlYXRlcmVxKSB7Ci0gICAgICAg
IC8qIGpncmVhdGVyZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAK
LSAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvCi0gICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0
ICc+PScgb3BlcmF0b3IsCi0gICAgICAgICBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQgdGFyZ2V0
IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sCi0gICAgICAgICBpZiBhbmQgb25seSBpZiB0
aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHRydWUuCi0gICAgICAgICAqLwotICAgICAg
ICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXE8ZmFsc2U+KGNhbGxGcmFtZSwgc3Jj
Miwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5sZXNzKSB7Ci0gICAgICAgIC8qIGpu
bGVzcyBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mg
d2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAg
ICAgICAgICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMg
dG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9u
LCBpZiBhbmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNv
biBpcyBmYWxzZS4KLSAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1l
LT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0g
Y2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRh
cmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8
dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyAr
PSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5sZXNzZXEpIHsKLSAg
ICAgICAgLyogam5sZXNzZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAg
ICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8KLSAgICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0n
IG9wZXJhdG9yLAotICAgICAgICAgICBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZy
b20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRo
ZXJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBmYWxzZS4KLSAgICAgICAgKi8KLSAgICAgICAg
SlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcTx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwot
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2pubGVzc2VxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX2puZ3JlYXRlcikgewotICAgICAgICAvKiBqbmdyZWF0ZXIgc3JjMShyKSBz
cmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0
ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0
aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldAot
ICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kIG9u
bHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgZmFsc2Uu
Ci0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENb
M10udS5vcGVyYW5kOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPGZhbHNlPihjYWxs
RnJhbWUsIHNyYzIsIHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsK
LSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qbmdyZWF0ZXJlcSkgewotICAgICAg
ICAvKiBqbmdyZWF0ZXJlcSBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAg
ICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0bwotICAgICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc+
PScgb3BlcmF0b3IsCi0gICAgICAgICAgIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldCB0YXJnZXQg
ZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwKLSAgICAgICAgICAgaWYgYW5kIG9ubHkgaWYg
dGhlcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIGZhbHNlLgotICAgICAgICAqLwotICAgICAg
ICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAg
ICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIsIHNyYzEp
OwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IXJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2puZ3JlYXRlcmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX3N3aXRjaF9pbW0pIHsKLSAgICAgICAgLyogc3dpdGNoX2ltbSB0
YWJsZUluZGV4KG4pIGRlZmF1bHRPZmZzZXQob2Zmc2V0KSBzY3J1dGluZWUocikKLQotICAgICAg
ICAgICBQZXJmb3JtcyBhIHJhbmdlIGNoZWNrZWQgc3dpdGNoIG9uIHRoZSBzY3J1dGluZWUgdmFs
dWUsIHVzaW5nCi0gICAgICAgICAgIHRoZSB0YWJsZUluZGV4LXRoIGltbWVkaWF0ZSBzd2l0Y2gg
anVtcCB0YWJsZS4gIElmIHRoZSBzY3J1dGluZWUgdmFsdWUKLSAgICAgICAgICAgaXMgYW4gaW1t
ZWRpYXRlIG51bWJlciBpbiB0aGUgcmFuZ2UgY292ZXJlZCBieSB0aGUgcmVmZXJlbmNlZCBqdW1w
Ci0gICAgICAgICAgIHRhYmxlLCBhbmQgdGhlIHZhbHVlIGF0IGp1bXBUYWJsZVtzY3J1dGluZWUg
dmFsdWVdIGlzIG5vbi16ZXJvLCB0aGVuCi0gICAgICAgICAgIHRoYXQgdmFsdWUgaXMgdXNlZCBh
cyB0aGUganVtcCBvZmZzZXQsIG90aGVyd2lzZSBkZWZhdWx0T2Zmc2V0IGlzIHVzZWQuCi0gICAg
ICAgICAqLwotICAgICAgICBpbnQgdGFibGVJbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBzY3J1dGluZWUgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwot
ICAgICAgICBpZiAoc2NydXRpbmVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHZQQyArPSBjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzY3J1dGluZWUuYXNJbnQzMigpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgZWxzZSBpZiAo
c2NydXRpbmVlLmlzRG91YmxlKCkgJiYgc2NydXRpbmVlLmFzRG91YmxlKCkgPT0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAgdlBDICs9IGNv
ZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZh
bHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSwgZGVmYXVsdE9m
ZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0Owot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bf
c3dpdGNoX2NoYXIpIHsKLSAgICAgICAgLyogc3dpdGNoX2NoYXIgdGFibGVJbmRleChuKSBkZWZh
dWx0T2Zmc2V0KG9mZnNldCkgc2NydXRpbmVlKHIpCi0KLSAgICAgICAgICAgUGVyZm9ybXMgYSBy
YW5nZSBjaGVja2VkIHN3aXRjaCBvbiB0aGUgc2NydXRpbmVlIHZhbHVlLCB1c2luZwotICAgICAg
ICAgICB0aGUgdGFibGVJbmRleC10aCBjaGFyYWN0ZXIgc3dpdGNoIGp1bXAgdGFibGUuICBJZiB0
aGUgc2NydXRpbmVlIHZhbHVlCi0gICAgICAgICAgIGlzIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJp
bmcgaW4gdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIHJlZmVyZW5jZWQganVtcAotICAgICAgICAg
ICB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBhdCBqdW1wVGFibGVbc2NydXRpbmVlIHZhbHVlXSBpcyBu
b24temVybywgdGhlbgotICAgICAgICAgICB0aGF0IHZhbHVlIGlzIHVzZWQgYXMgdGhlIGp1bXAg
b2Zmc2V0LCBvdGhlcndpc2UgZGVmYXVsdE9mZnNldCBpcyB1c2VkLgotICAgICAgICAgKi8KLSAg
ICAgICAgaW50IHRhYmxlSW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgZGVm
YXVsdE9mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc2NydXRpbmVl
ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYg
KCFzY3J1dGluZWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJp
bmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBsKCk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZz
ZXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdlBDICs9IGNvZGVCbG9jay0+
Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKCgqdmFs
dWUpWzBdLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfc3dpdGNoX3N0cmluZykgewotICAg
ICAgICAvKiBzd2l0Y2hfc3RyaW5nIHRhYmxlSW5kZXgobikgZGVmYXVsdE9mZnNldChvZmZzZXQp
IHNjcnV0aW5lZShyKQotCi0gICAgICAgICAgIFBlcmZvcm1zIGEgc3BhcnNlIGhhc2htYXAgYmFz
ZWQgc3dpdGNoIG9uIHRoZSB2YWx1ZSBpbiB0aGUgc2NydXRpbmVlCi0gICAgICAgICAgIHJlZ2lz
dGVyLCB1c2luZyB0aGUgdGFibGVJbmRleC10aCBzdHJpbmcgc3dpdGNoIGp1bXAgdGFibGUuICBJ
ZiB0aGUgCi0gICAgICAgICAgIHNjcnV0aW5lZSB2YWx1ZSBpcyBhIHN0cmluZyB0aGF0IGV4aXN0
cyBhcyBhIGtleSBpbiB0aGUgcmVmZXJlbmNlZCAKLSAgICAgICAgICAganVtcCB0YWJsZSwgdGhl
biB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpbmcgaXMgdXNlZCBhcyB0aGUgCi0g
ICAgICAgICAgIGp1bXAgb2Zmc2V0LCBvdGhlcndpc2UgZGVmYXVsdE9mZnNldCBpcyB1c2VkLgot
ICAgICAgICAgKi8KLSAgICAgICAgaW50IHRhYmxlSW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUgc2NydXRpbmVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KTsKLSAgICAgICAgaWYgKCFzY3J1dGluZWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHZQQyAr
PSBkZWZhdWx0T2Zmc2V0OwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgdlBDICs9IGNvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKGFz
U3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpLCBkZWZhdWx0T2Zmc2V0
KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RF
KG9wX25ld19mdW5jKSB7Ci0gICAgICAgIC8qIG5ld19mdW5jIGRzdChyKSBmdW5jKGYpCi0KLSAg
ICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBGdW5jdGlvbiBpbnN0YW5jZSBmcm9tIGZ1bmN0aW9u
IGZ1bmMgYW5kCi0gICAgICAgICAgIHRoZSBjdXJyZW50IHNjb3BlIGNoYWluIHVzaW5nIHRoZSBv
cmlnaW5hbCBGdW5jdGlvbgotICAgICAgICAgICBjb25zdHJ1Y3RvciwgdXNpbmcgdGhlIHJ1bGVz
IGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGZ1bmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc2hvdWxkQ2hlY2sgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCkgfHwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lz
dGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgICAgIGlmICghc2hvdWxkQ2hlY2sgfHwgIWNhbGxGcmFt
ZS0+cihkc3QpLmpzVmFsdWUoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gSlNWYWx1ZShKU0Z1bmN0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLCBjb2RlQmxvY2stPmZ1
bmN0aW9uRGVjbChmdW5jKSwgY2FsbEZyYW1lLT5zY29wZSgpKSk7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfbmV3X2Z1bmMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbmV3X2Z1bmNfZXhwKSB7Ci0gICAgICAgIC8q
IG5ld19mdW5jX2V4cCBkc3QocikgZnVuYyhmKQotCi0gICAgICAgICAgIENvbnN0cnVjdHMgYSBu
ZXcgRnVuY3Rpb24gaW5zdGFuY2UgZnJvbSBmdW5jdGlvbiBmdW5jIGFuZAotICAgICAgICAgICB0
aGUgY3VycmVudCBzY29wZSBjaGFpbiB1c2luZyB0aGUgb3JpZ2luYWwgRnVuY3Rpb24KLSAgICAg
ICAgICAgY29uc3RydWN0b3IsIHVzaW5nIHRoZSBydWxlcyBmb3IgZnVuY3Rpb24gZXhwcmVzc2lv
bnMsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZ1bmNJbmRleCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCkgfHwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b24gPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihmdW5jSW5kZXgpOwotICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24sIGNhbGxG
cmFtZS0+c2NvcGUoKSk7Ci0KLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBK
U1ZhbHVlKGZ1bmMpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19mdW5j
X2V4cCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgLyogY2FsbF9ldmFsIGZ1bmMocikgYXJnQ291
bnQobikgcmVnaXN0ZXJPZmZzZXQobikKLQotICAgICAgICAgICBDYWxsIGEgZnVuY3Rpb24gbmFt
ZWQgImV2YWwiIHdpdGggbm8gZXhwbGljaXQgInRoaXMiIHZhbHVlCi0gICAgICAgICAgICh3aGlj
aCBtYXkgdGhlcmVmb3JlIGJlIHRoZSBldmFsIG9wZXJhdG9yKS4gSWYgcmVnaXN0ZXIKLSAgICAg
ICAgICAgdGhpc1ZhbCBpcyB0aGUgZ2xvYmFsIG9iamVjdCwgYW5kIHJlZ2lzdGVyIGZ1bmMgY29u
dGFpbnMKLSAgICAgICAgICAgdGhhdCBnbG9iYWwgb2JqZWN0J3Mgb3JpZ2luYWwgZ2xvYmFsIGV2
YWwgZnVuY3Rpb24sIHRoZW4KLSAgICAgICAgICAgcGVyZm9ybSB0aGUgZXZhbCBvcGVyYXRvciBp
biBsb2NhbCBzY29wZSAoaW50ZXJwcmV0aW5nCi0gICAgICAgICAgIHRoZSBhcmd1bWVudCByZWdp
c3RlcnMgYXMgZm9yIHRoZSAiY2FsbCIKLSAgICAgICAgICAgb3Bjb2RlKS4gT3RoZXJ3aXNlLCBh
Y3QgZXhhY3RseSBhcyB0aGUgImNhbGwiIG9wY29kZSB3b3VsZC4KLSAgICAgICAgICovCi0KLSAg
ICAgICAgaW50IGZ1bmMgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10u
dS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUo
KSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8
IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkp
OwotICAgICAgICBKU1ZhbHVlIGZ1bmNWYWwgPSBjYWxsRnJhbWUtPnIoZnVuYykuanNWYWx1ZSgp
OwotCi0gICAgICAgIGlmIChpc0hvc3RGdW5jdGlvbihmdW5jVmFsLCBnbG9iYWxGdW5jRXZhbCkp
IHsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCks
IGNhbGxGcmFtZS0+c2NvcGUoKSwgY2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rp
b24qPihmdW5jVmFsKSk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbChuZXdD
YWxsRnJhbWUpOwotICAgICAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERhdGEt
PmV4Y2VwdGlvbikpCi0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAg
IGZ1bmN0aW9uUmV0dXJuVmFsdWUgPSByZXN1bHQ7Ci0KLSAgICAgICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2NhbGxfZXZhbCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCB0aGUgYmxlc3NlZCB2ZXJz
aW9uIG9mIGV2YWwsIHNvIHByb2Nlc3MgdGhpcwotICAgICAgICAvLyBpbnN0cnVjdGlvbiBhcyBh
IG5vcm1hbCBmdW5jdGlvbiBjYWxsLgotICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gb3BfY2Fs
bAotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NhbGwpIHsKLSAgICAgICAgLyogY2FsbCBm
dW5jKHIpIGFyZ0NvdW50KG4pIHJlZ2lzdGVyT2Zmc2V0KG4pCi0KLSAgICAgICAgICAgUGVyZm9y
bSBhIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAgIAotICAgICAgICAgICByZWdpc3Rlck9mZnNl
dCBpcyB0aGUgZGlzdGFuY2UgdGhlIGNhbGxGcmFtZSBwb2ludGVyIHNob3VsZCBtb3ZlCi0gICAg
ICAgICAgIGJlZm9yZSB0aGUgVk0gaW5pdGlhbGl6ZXMgdGhlIG5ldyBjYWxsIGZyYW1lJ3MgaGVh
ZGVyLgotICAgICAgICAgICAKLSAgICAgICAgICAgZHN0IGlzIHdoZXJlIG9wX3JldCBzaG91bGQg
c3RvcmUgaXRzIHJlc3VsdC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaW50IGZ1bmMgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAg
IEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihmdW5jKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
diwgY2FsbERhdGEpOwotCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY2FsbERhdGEuanMuc2NvcGU7Ci0K
LSAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJl
Z2lzdGVyRmlsZSwgY2FsbEZyYW1lLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbEZy
YW1lID0gcHJldmlvdXNDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUg
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBn
b3RvIHZtX3Rocm93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYWxsRnJhbWUtPmlu
aXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNj
b3BlLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikp
OwotICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOwotICAgICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgICp0
b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykK
LSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxs
RnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0
ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbCksIHNjb3BlLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVjdCh2
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gbmV3Q2FsbEZyYW1lOwotICAgICAgICAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICAq
dG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLQotICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5WYWx1
ZSA9IHJldHVyblZhbHVlOwotCi0gICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwotCi0gICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoY2FsbEZyYW1lLCB2KTsKLSAgICAgICAg
Z290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3Mp
IHsKLSAgICAgICAgLyogY2FsbF92YXJhcmdzIGNhbGxlZShyKSB0aGlzVmFsdWUocikgYXJndW1l
bnRzKHIpIGZpcnN0RnJlZVJlZ2lzdGVyKG4pCi0gICAgICAgICAKLSAgICAgICAgIFBlcmZvcm0g
YSBmdW5jdGlvbiBjYWxsIHdpdGggYSBkeW5hbWljIHNldCBvZiBhcmd1bWVudHMuCi0gICAgICAg
ICAKLSAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IGlzIHRoZSBkaXN0YW5jZSB0aGUgY2FsbEZyYW1l
IHBvaW50ZXIgc2hvdWxkIG1vdmUKLSAgICAgICAgIGJlZm9yZSB0aGUgVk0gaW5pdGlhbGl6ZXMg
dGhlIG5ldyBjYWxsIGZyYW1lJ3MgaGVhZGVyLCBleGNsdWRpbmcKLSAgICAgICAgIHNwYWNlIGZv
ciBhcmd1bWVudHMuCi0gICAgICAgICAKLSAgICAgICAgIGRzdCBpcyB3aGVyZSBvcF9yZXQgc2hv
dWxkIHN0b3JlIGl0cyByZXN1bHQuCi0gICAgICAgICAqLwotICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNW
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cih2UENbM10u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IHZQ
Q1s0XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBsb2Fk
VmFyYXJncyhjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsIGZp
cnN0RnJlZVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERh
dGEtPmV4Y2VwdGlvbikpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICBpbnQg
YXJnQ291bnQgPSBuZXdDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0K
LSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEodiwgY2FsbERhdGEpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGUgPSBj
YWxsRGF0YS5qcy5zY29wZTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxE
YXRhU2NvcGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCEhZXJyb3IpKSB7Ci0gICAgICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBlcnJvcjsKLSAgICAgICAgICAgICAgICBnb3RvIHZt
X3Rocm93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2Rl
Rm9yQ2FsbCgpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgMCwgYXJn
Q291bnQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2Fs
bEZyYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNhbGxEYXRhU2NvcGUsIGNhbGxGcmFtZSwgYXJn
Q291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikpOwotICAgICAgICAgICAgY29kZUJsb2NrID0g
bmV3Q29kZUJsb2NrOwotICAgICAgICAgICAgY2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAg
ICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAgICAgICAgdlBD
ID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotCi0jaWYgRU5BQkxFKE9Q
Q09ERV9TVEFUUykKLSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlv
bigpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
SG9zdCkgewotICAgICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7
Ci0gICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpLCBzY29wZSwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3Qodikp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gbmV3Q2FsbEZyYW1l
OwotICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29y
ZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZnVuY3Rpb25SZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpOwotICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLSAgICAgICAgCi0gICAgICAgIGV4Y2Vw
dGlvblZhbHVlID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoY2FsbEZyYW1lLCB2KTsKLSAgICAg
ICAgZ290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF90ZWFyX29mZl9h
Y3RpdmF0aW9uKSB7Ci0gICAgICAgIC8qIHRlYXJfb2ZmX2FjdGl2YXRpb24gYWN0aXZhdGlvbihy
KQotCi0gICAgICAgICAgIENvcHkgbG9jYWxzIGFuZCBuYW1lZCBwYXJhbWV0ZXJzIGZyb20gdGhl
IHJlZ2lzdGVyIGZpbGUgdG8gdGhlIGhlYXAuCi0gICAgICAgICAgIFBvaW50IHRoZSBiaW5kaW5n
cyBpbiAnYWN0aXZhdGlvbicgdG8gdGhpcyBuZXcgYmFja2luZyBzdG9yZS4KLQotICAgICAgICAg
ICBUaGlzIG9wY29kZSBhcHBlYXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25zIHRoYXQgcmVx
dWlyZSBmdWxsIHNjb3BlIGNoYWlucy4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYWN0aXZh
dGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm5lZWRz
RnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAgICAgIEpTVmFsdWUgYWN0aXZhdGlvblZhbHVlID0gY2Fs
bEZyYW1lLT5yKGFjdGl2YXRpb24pLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGFjdGl2YXRpb25W
YWx1ZSkKLSAgICAgICAgICAgIGFzQWN0aXZhdGlvbihhY3RpdmF0aW9uVmFsdWUpLT50ZWFyT2Zm
KCpnbG9iYWxEYXRhKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cykgewotICAgICAgICAvKiB0ZWFyX29m
Zl9hcmd1bWVudHMgYXJndW1lbnRzKHIpIGFjdGl2YXRpb24ocikKLQotICAgICAgICAgICBDb3B5
IG5hbWVkIHBhcmFtZXRlcnMgZnJvbSB0aGUgcmVnaXN0ZXIgZmlsZSB0byB0aGUgaGVhcC4gUG9p
bnQgdGhlCi0gICAgICAgICAgIGJpbmRpbmdzIGluICdhcmd1bWVudHMnIHRvIHRoaXMgbmV3IGJh
Y2tpbmcgc3RvcmUuIChJZiAnYWN0aXZhdGlvbicKLSAgICAgICAgICAgd2FzIGFsc28gY29waWVk
IHRvIHRoZSBoZWFwLCAnYXJndW1lbnRzJyB3aWxsIHBvaW50IHRvIGl0cyBzdG9yYWdlLikKLQot
ICAgICAgICAgICBUaGlzIG9wY29kZSBhcHBlYXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25z
IHRoYXQgZG9uJ3QgcmVxdWlyZSBmdWxsCi0gICAgICAgICAgIHNjb3BlIGNoYWlucywgYnV0IGRv
IHVzZSAnYXJndW1lbnRzJy4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYXJndW1lbnRzID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFjdGl2YXRpb24gPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpOwotICAgICAg
ICBpZiAoSlNWYWx1ZSBhcmd1bWVudHNWYWx1ZSA9IGNhbGxGcmFtZS0+cih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
SlNWYWx1ZSBhY3RpdmF0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPnIoYWN0aXZhdGlvbikuanNWYWx1
ZSgpKQotICAgICAgICAgICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlKS0+ZGlkVGVh
ck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLCBhc0FjdGl2YXRpb24oYWN0aXZhdGlvblZhbHVlKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXNBcmd1bWVudHMoYXJndW1lbnRz
VmFsdWUpLT50ZWFyT2ZmKGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF90ZWFyX29mZl9hcmd1bWVudHMpOwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcmV0KSB7Ci0gICAgICAgIC8q
IHJldCByZXN1bHQocikKLSAgICAgICAgICAgCi0gICAgICAgICAgIFJldHVybiByZWdpc3RlciBy
ZXN1bHQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY3VycmVudAotICAgICAgICAgICBmdW5j
dGlvbiBjYWxsLCB3cml0aW5nIGl0IGludG8gZnVuY3Rpb25SZXR1cm5WYWx1ZS4KLSAgICAgICAg
ICAgSW4gYWRkaXRpb24sIHVud2luZCBvbmUgY2FsbCBmcmFtZSBhbmQgcmVzdG9yZSB0aGUgc2Nv
cGUKLSAgICAgICAgICAgY2hhaW4sIGNvZGUgYmxvY2sgaW5zdHJ1Y3Rpb24gcG9pbnRlciBhbmQg
cmVnaXN0ZXIgYmFzZQotICAgICAgICAgICB0byB0aG9zZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlv
bi4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LQotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT5yKHJlc3VsdCkuanNW
YWx1ZSgpOwotCi0gICAgICAgIHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuVlBDKCk7Ci0gICAgICAg
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLQotICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOwotCi0gICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAg
ICBmdW5jdGlvblJldHVyblZhbHVlID0gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCkgewotICAgICAgICAvKiBv
cF9jYWxsX3B1dF9yZXN1bHQgcmVzdWx0KHIpCi0gICAgICAgICAgIAotICAgICAgICAgICBNb3Zl
IGNhbGwgcmVzdWx0IGZyb20gZnVuY3Rpb25SZXR1cm5WYWx1ZSB0byBjYWxsZXIncwotICAgICAg
ICAgICBleHBlY3RlZCByZXR1cm4gdmFsdWUgcmVnaXN0ZXIuCi0gICAgICAgICovCi0KLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZQQ1sxXS51Lm9wZXJhbmQpID0gZnVuY3Rpb25SZXR1
cm5WYWx1ZTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9yZXN1
bHQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfcmV0X29iamVjdF9vcl90aGlzKSB7Ci0gICAgICAgIC8qIHJldCByZXN1bHQocikKLSAg
ICAgICAgICAgCi0gICAgICAgICAgIFJldHVybiByZWdpc3RlciByZXN1bHQgYXMgdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGUgY3VycmVudAotICAgICAgICAgICBmdW5jdGlvbiBjYWxsLCB3cml0aW5n
IGl0IGludG8gdGhlIGNhbGxlcidzIGV4cGVjdGVkIHJldHVybgotICAgICAgICAgICB2YWx1ZSBy
ZWdpc3Rlci4gSW4gYWRkaXRpb24sIHVud2luZCBvbmUgY2FsbCBmcmFtZSBhbmQKLSAgICAgICAg
ICAgcmVzdG9yZSB0aGUgc2NvcGUgY2hhaW4sIGNvZGUgYmxvY2sgaW5zdHJ1Y3Rpb24gcG9pbnRl
ciBhbmQKLSAgICAgICAgICAgcmVnaXN0ZXIgYmFzZSB0byB0aG9zZSBvZiB0aGUgY2FsbGluZyBm
dW5jdGlvbi4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKLQotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT5yKHJlc3Vs
dCkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSghcmV0dXJuVmFsdWUuaXNPYmpl
Y3QoKSkpCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgdlBDID0gY2FsbEZyYW1lLT5yZXR1cm5WUEMo
KTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotCi0gICAg
ICAgIGlmIChjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci0KLSAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBjYWxsRnJh
bWU7Ci0gICAgICAgIGZ1bmN0aW9uUmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZTsKLSAgICAgICAg
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGNvZGVC
bG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLQotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZW50ZXIpIHsKLSAgICAgICAgLyog
ZW50ZXIKLQotICAgICAgICAgICBJbml0aWFsaXplcyBsb2NhbCB2YXJpYWJsZXMgdG8gdW5kZWZp
bmVkLiBJZiB0aGUgY29kZSBibG9jayByZXF1aXJlcwotICAgICAgICAgICBhbiBhY3RpdmF0aW9u
LCBlbnRlcl93aXRoX2FjdGl2YXRpb24gaXMgdXNlZCBpbnN0ZWFkLgotCi0gICAgICAgICAgIFRo
aXMgb3Bjb2RlIGFwcGVhcnMgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZSBibG9jay4K
LSAgICAgICAgKi8KLQotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGNvdW50ID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGkpID0ganNVbmRlZmluZWQoKTsKLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jcmVhdGVfYWN0aXZhdGlvbikgewotICAg
ICAgICAvKiBjcmVhdGVfYWN0aXZhdGlvbiBkc3QocikKLQotICAgICAgICAgICBJZiB0aGUgYWN0
aXZhdGlvbiBvYmplY3QgZm9yIHRoaXMgY2FsbGZyYW1lIGhhcyBub3QgeWV0IGJlZW4gY3JlYXRl
ZCwKLSAgICAgICAgICAgdGhpcyBjcmVhdGVzIGl0IGFuZCB3cml0ZXMgaXQgYmFjayB0byBkc3Qu
Ci0gICAgICAgICovCi0KLSAgICAgICAgaW50IGFjdGl2YXRpb25SZWcgPSB2UENbMV0udS5vcGVy
YW5kOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnKS5qc1ZhbHVlKCkp
IHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihhY3RpdmF0aW9uUmVnKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NyZWF0ZV90aGlzKSB7
Ci0gICAgICAgIC8qIG9wX2NyZWF0ZV90aGlzIHRoaXMocikgcHJvdG8ocikKLQotICAgICAgICAg
ICBBbGxvY2F0ZSBhbiBvYmplY3QgYXMgJ3RoaXMnLCBmciB1c2UgaW4gY29uc3RydWN0aW9uLgot
Ci0gICAgICAgICAgIFRoaXMgb3Bjb2RlIHNob3VsZCBvbmx5IGJlIHVzZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiBhIGNvZGUKLSAgICAgICAgICAgYmxvY2suCi0gICAgICAgICovCi0KLSAgICAgICAg
aW50IHRoaXNSZWdpc3RlciA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNGdW5jdGlv
biogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkp
OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwotICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0
cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7
Ci0jZW5kaWYKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5j
YWNoZWRJbmhlcml0b3JJRChjYWxsRnJhbWUpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIodGhpc1JlZ2lzdGVyKSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSwgc3RydWN0
dXJlKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jcmVhdGVfdGhpcyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9j
b252ZXJ0X3RoaXMpIHsKLSAgICAgICAgLyogY29udmVydF90aGlzIHRoaXMocikKLQotICAgICAg
ICAgICBUYWtlcyB0aGUgdmFsdWUgaW4gdGhlICd0aGlzJyByZWdpc3RlciwgY29udmVydHMgaXQg
dG8gYQotICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlICd0
aGlzJyB2YWx1ZSwgYW5kCi0gICAgICAgICAgIHN0b3JlcyBpdCBpbiB0aGUgJ3RoaXMnIHJlZ2lz
dGVyLiBUaGlzIG9wY29kZSBpcyBlbWl0dGVkCi0gICAgICAgICAgIHRvIGF2b2lkIGRvaW5nIHRo
ZSBjb252ZXJzaW9uIGluIHRoZSBjYWxsZXIgdW5uZWNlc3NhcmlseS4KLQotICAgICAgICAgICBU
aGlzIG9wY29kZSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2Rl
Ci0gICAgICAgICAgIGJsb2NrLgotICAgICAgICAqLwotCi0gICAgICAgIGludCB0aGlzUmVnaXN0
ZXIgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHRoaXNWYWwgPSBjYWxsRnJh
bWUtPnIodGhpc1JlZ2lzdGVyKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh0aGlzVmFsLmlzUHJp
bWl0aXZlKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodGhpc1JlZ2lzdGVy
KSA9IEpTVmFsdWUodGhpc1ZhbC50b1RoaXNPYmplY3QoY2FsbEZyYW1lKSk7Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY29udmVydF90aGlzKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2luaXRfbGF6eV9yZWcpIHsK
LSAgICAgICAgLyogaW5pdF9sYXp5X3JlZyBkc3QocikKLQotICAgICAgICAgICBJbml0aWFsaXNl
cyBkc3QocikgdG8gSlNWYWx1ZSgpLgotCi0gICAgICAgICAgIFRoaXMgb3Bjb2RlIGFwcGVhcnMg
b25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZSBibG9jay4KLSAgICAgICAgICovCi0gICAg
ICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gSlNWYWx1ZSgpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9pbml0X2xhenlfcmVnKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX2NyZWF0ZV9hcmd1bWVudHMpIHsKLSAgICAgICAgLyogY3JlYXRl
X2FyZ3VtZW50cyBkc3QocikKLQotICAgICAgICAgICBDcmVhdGVzIHRoZSAnYXJndW1lbnRzJyBv
YmplY3QgYW5kIHBsYWNlcyBpdCBpbiBib3RoIHRoZQotICAgICAgICAgICAnYXJndW1lbnRzJyBj
YWxsIGZyYW1lIHNsb3QgYW5kIHRoZSBsb2NhbCAnYXJndW1lbnRzJwotICAgICAgICAgICByZWdp
c3RlciwgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQuCi0gICAgICAgICAq
LwotICAgICAgICAKLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgaWYgKCFjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jb25zdHJ1
Y3QpIHsKLSAgICAgICAgLyogY29uc3RydWN0IGZ1bmMocikgYXJnQ291bnQobikgcmVnaXN0ZXJP
ZmZzZXQobikgcHJvdG8ocikgdGhpc1JlZ2lzdGVyKHIpCi0KLSAgICAgICAgICAgSW52b2tlIHJl
Z2lzdGVyICJmdW5jIiBhcyBhIGNvbnN0cnVjdG9yLiBGb3IgSlMKLSAgICAgICAgICAgZnVuY3Rp
b25zLCB0aGUgY2FsbGluZyBjb252ZW50aW9uIGlzIGV4YWN0bHkgYXMgZm9yIHRoZQotICAgICAg
ICAgICAiY2FsbCIgb3Bjb2RlLCBleGNlcHQgdGhhdCB0aGUgInRoaXMiIHZhbHVlIGlzIGEgbmV3
bHkKLSAgICAgICAgICAgY3JlYXRlZCBPYmplY3QuIEZvciBuYXRpdmUgY29uc3RydWN0b3JzLCBu
byAidGhpcyIKLSAgICAgICAgICAgdmFsdWUgaXMgcGFzc2VkLiBJbiBlaXRoZXIgY2FzZSwgdGhl
IGFyZ0NvdW50IGFuZCByZWdpc3Rlck9mZnNldAotICAgICAgICAgICByZWdpc3RlcnMgYXJlIGlu
dGVycHJldGVkIGFzIGZvciB0aGUgImNhbGwiIG9wY29kZS4KLQotICAgICAgICAgICBSZWdpc3Rl
ciBwcm90byBtdXN0IGNvbnRhaW4gdGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBvZgotICAgICAgICAg
ICByZWdpc3RlciBmdW5jLiBUaGlzIGlzIHRvIGVuYWJsZSBwb2x5bW9ycGhpYyBpbmxpbmUKLSAg
ICAgICAgICAgY2FjaGluZyBvZiB0aGlzIGxvb2t1cC4KLSAgICAgICAgKi8KLQotICAgICAgICBp
bnQgZnVuYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZQQ1szXS51Lm9wZXJh
bmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKGZ1bmMpLmpzVmFsdWUoKTsK
LQotICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgICAgIENvbnN0cnVj
dFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodiwgY29uc3RydWN0RGF0YSk7
Ci0KLSAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKSB7Ci0gICAg
ICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY29uc3RydWN0RGF0YS5qcy5zY29wZTsK
LQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3Bl
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewotICAgICAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFt
ZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNv
bnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNv
bnN0cnVjdCgpOwotICAgICAgICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0Zv
ckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ0NvdW50KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghY2FsbEZyYW1lKSkgewot
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHByZXZpb3VzQ2FsbEZyYW1lOwotICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdU
SChvcF9jb25zdHJ1Y3QpLCBjYWxsRGF0YVNjb3BlLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291
bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikpOwotICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3
Q29kZUJsb2NrOwotICAgICAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBjYWxsRnJhbWU7Ci0g
ICAgICAgICAgICB2UEMgPSBuZXdDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0j
aWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKLSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExh
c3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVIb3N0KSB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUo
KTsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCks
IHNjb3BlLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVjdCh2KSk7Ci0KLSAgICAgICAgICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnRv
cENhbGxGcmFtZVNsb3QgPSBuZXdDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgU2FtcGxpbmdU
b29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgKnRvcENhbGxGcmFt
ZVNsb3QgPSBjYWxsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBmdW5jdGlvblJldHVyblZhbHVlID0gcmV0dXJuVmFs
dWU7Ci0KLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCk7Ci0g
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0KLSAgICAgICAgZXhjZXB0
aW9uVmFsdWUgPSBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihjYWxsRnJhbWUsIHYpOwotICAg
ICAgICBnb3RvIHZtX3Rocm93OwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N0cmNhdCkg
ewotICAgICAgICAvKiBzdHJjYXQgZHN0KHIpIHNyYyhyKSBjb3VudChuKQotCi0gICAgICAgICAg
IENvbnN0cnVjdCBhIG5ldyBTdHJpbmcgaW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAg
ICAgICAgIGNvbnN0cnVjdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
LSAgICAgICAgICAgVGhlIHN0cmluZyB3aWxsIGJlIHRoZSByZXN1bHQgb2YgY29uY2F0ZW5hdGlu
ZyBjb3VudAotICAgICAgICAgICBzdHJpbmdzIHdpdGggdmFsdWVzIHRha2VuIGZyb20gcmVnaXN0
ZXJzIHN0YXJ0aW5nIGF0Ci0gICAgICAgICAgIHJlZ2lzdGVyIHNyYy4KLSAgICAgICAgKi8KLSAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENb
Ml0udS5vcGVyYW5kOwotICAgICAgICBpbnQgY291bnQgPSB2UENbM10udS5vcGVyYW5kOwotCi0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY29uY2F0ZW5hdGVTdHJpbmdzKGNh
bGxGcmFtZSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXSwgY291bnQpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3N0
cmNhdCk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVf
T1BDT0RFKG9wX3RvX3ByaW1pdGl2ZSkgewotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Q
cmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdG9f
cHJpbWl0aXZlKTsKLQotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfcHVzaF93aXRoX3Njb3BlKSB7Ci0gICAgICAgIC8qIHB1c2hfd2l0aF9z
Y29wZSBzY29wZShyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJlZ2lzdGVyIHNjb3BlIHRvIG9i
amVjdCwgYW5kIHB1c2hlcyBpdCBvbnRvIHRoZSB0b3AKLSAgICAgICAgICAgb2YgdGhlIHNjb3Bl
IGNoYWluLgotICAgICAgICAqLwotICAgICAgICBpbnQgc2NvcGUgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoc2NvcGUpLmpzVmFsdWUoKTsKLSAg
ICAgICAgSlNPYmplY3QqIG8gPSB2LnRvT2JqZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLQotICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKEpTV2l0aFNj
b3BlOjpjcmVhdGUoY2FsbEZyYW1lLCBvKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfcHVzaF93aXRoX3Njb3BlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3BvcF9zY29wZSkgewotICAgICAgICAvKiBwb3Bfc2Nv
cGUKLQotICAgICAgICAgICBSZW1vdmVzIHRoZSB0b3AgaXRlbSBmcm9tIHRoZSBjdXJyZW50IHNj
b3BlIGNoYWluLgotICAgICAgICAqLwotICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGNhbGxG
cmFtZS0+c2NvcGUoKS0+bmV4dCgpKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9wb3Bfc2NvcGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfZ2V0X3BuYW1lcykgewotICAgICAgICAvKiBnZXRfcG5hbWVzIGRzdChy
KSBiYXNlKHIpIGkobikgc2l6ZShuKSBicmVha1RhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAg
Q3JlYXRlcyBhIHByb3BlcnR5IG5hbWUgbGlzdCBmb3IgcmVnaXN0ZXIgYmFzZSBhbmQgcHV0cyBp
dAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QsIGluaXRpYWxpemluZyBpIGFuZCBzaXplIGZv
ciBpdGVyYXRpb24uIElmCi0gICAgICAgICAgIGJhc2UgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGp1
bXBzIHRvIGJyZWFrVGFyZ2V0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgaSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaXplID0gdlBDWzRdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IGJyZWFrVGFyZ2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKLQot
ICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gYnJlYWtU
YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBKU09iamVjdCogbyA9IHYudG9PYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IHN0cnVjdHVyZS0+ZW51bWVyYXRpb25D
YWNoZSgpOwotICAgICAgICBpZiAoIWpzUHJvcGVydHlOYW1lSXRlcmF0b3IgfHwganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSAhPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGNhbGxGcmFtZSkpCi0gICAgICAgICAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9y
ID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgbyk7Ci0KLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwot
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYmFzZSkgPSBKU1ZhbHVlKG8pOwotICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaSkgPSBSZWdpc3Rlcjo6d2l0aEludCgwKTsKLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNpemUpID0gUmVnaXN0ZXI6OndpdGhJbnQoanNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci0+c2l6ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X3BuYW1lcyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9uZXh0X3BuYW1lKSB7Ci0gICAgICAgIC8qIG5leHRfcG5hbWUgZHN0
KHIpIGJhc2UocikgaShuKSBzaXplKG4pIGl0ZXIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAg
ICAgICBDb3BpZXMgdGhlIG5leHQgbmFtZSBmcm9tIHRoZSBwcm9wZXJ0eSBuYW1lIGxpc3QgaW4K
LSAgICAgICAgICAgcmVnaXN0ZXIgaXRlciB0byBkc3QsIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRh
cmdldC4gSWYgdGhlcmUgYXJlIG5vCi0gICAgICAgICAgIG5hbWVzIGxlZnQsIGludmFsaWRhdGVz
IHRoZSBpdGVyYXRvciBhbmQgY29udGludWVzIHRvIHRoZSBuZXh0Ci0gICAgICAgICAgIGluc3Ry
dWN0aW9uLgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgaSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaXplID0gdlBDWzRdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IGl0ZXIgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0g
dlBDWzZdLnUub3BlcmFuZDsKLQotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9
IGNhbGxGcmFtZS0+cihpdGVyKS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICB3aGls
ZSAoY2FsbEZyYW1lLT5yKGkpLmkoKSAhPSBjYWxsRnJhbWUtPnIoc2l6ZSkuaSgpKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIGtleSA9IGl0LT5nZXQoY2FsbEZyYW1lLCBhc09iamVjdChjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpKSwgY2FsbEZyYW1lLT5yKGkpLmkoKSk7Ci0gICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoaSkgPSBSZWdpc3Rlcjo6d2l0aEludChjYWxsRnJhbWUtPnIoaSkuaSgpICsgMSk7Ci0gICAg
ICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsK
LSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGtleTsKLSAgICAg
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX25leHRfcG5hbWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2Nv
cGVzIGNvdW50KG4pIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgUmVtb3ZlcyB0aGUgYSBu
dW1iZXIgb2YgaXRlbXMgZnJvbSB0aGUgY3VycmVudCBzY29wZSBjaGFpbgotICAgICAgICAgICBz
cGVjaWZpZWQgYnkgaW1tZWRpYXRlIG51bWJlciBjb3VudCwgdGhlbiBqdW1wcyB0byBvZmZzZXQK
LSAgICAgICAgICAgdGFyZ2V0LgotICAgICAgICAqLwotICAgICAgICBpbnQgY291bnQgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQot
ICAgICAgICBKU1Njb3BlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgICAgIHdoaWxl
IChjb3VudC0tKQotICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0KCk7Ci0gICAgICAgIGNhbGxG
cmFtZS0+c2V0U2NvcGUodG1wKTsKLQotICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNT
SUNfSU5URVJQUkVURVIpCi0gICAgLy8gQXBwZWFzZSBHQ0MKLSAgICBnb3RvICooJiZza2lwX25l
d19zY29wZSk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1c2hfbmFtZV9zY29wZSkg
ewotICAgICAgICAvKiBuZXdfc2NvcGUgcHJvcGVydHkoaWQpIHZhbHVlKHIpIGF0dHJpYnV0ZXMo
dW5zaWduZWQpCi0gICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5hbWUgc2NvcGUg
b2YgdGhlIGZvcm0geyBwcm9wZXJ0eTxhdHRyaWJ1dGVzPjogdmFsdWUgfSwKLSAgICAgICAgICAg
YW5kIHB1c2hlcyBpdCBvbnRvIHRoZSBzY29wZSBjaGFpbi4KLSAgICAgICAgICovCi0gICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoY3JlYXRlTmFtZVNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7Ci0K
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHVzaF9uYW1lX3Njb3BlKTsKLSAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBFTkFCTEUoQ09NUFVURURfR09UT19D
TEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHNraXBfbmV3X3Njb3BlOgotI2VuZGlmCi0gICAgREVG
SU5FX09QQ09ERShvcF9jYXRjaCkgewotICAgICAgICAvKiBjYXRjaCBleChyKQotCi0gICAgICAg
ICAgIFJldHJpZXZlcyB0aGUgVk0ncyBjdXJyZW50IGV4Y2VwdGlvbiBhbmQgcHV0cyBpdCBpbiBy
ZWdpc3RlcgotICAgICAgICAgICBleC4gVGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIGFuIGV4Y2Vw
dGlvbiBoYXMgYmVlbiByYWlzZWQsCi0gICAgICAgICAgIGFuZCB1c3VhbGx5IGZvcm1zIHRoZSBi
ZWdpbm5pbmcgb2YgYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgICAgICovCi0gICAgICAgIEFT
U0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKTsKLSAgICAgICAgaW50IGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGV4KSA9IGV4Y2VwdGlvblZhbHVlOwotICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IEpTVmFsdWUoKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYXRj
aCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF90aHJvdykgewotICAgICAgICAvKiB0aHJvdyBleChyKQotCi0gICAgICAgICAgIFRocm93
cyByZWdpc3RlciBleCBhcyBhbiBleGNlcHRpb24uIFRoaXMgaW52b2x2ZXMgdGhyZWUKLSAgICAg
ICAgICAgc3RlcHM6IGZpcnN0LCBpdCBpcyBzZXQgYXMgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGlu
IHRoZQotICAgICAgICAgICBWTSdzIGludGVybmFsIHN0YXRlLCB0aGVuIHRoZSBzdGFjayBpcyB1
bndvdW5kIHVudGlsIGFuCi0gICAgICAgICAgIGV4Y2VwdGlvbiBoYW5kbGVyIG9yIGEgbmF0aXZl
IGNvZGUgYm91bmRhcnkgaXMgZm91bmQsIGFuZAotICAgICAgICAgICB0aGVuIGNvbnRyb2wgcmVz
dW1lcyBhdCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaWYgYW55IG9yCi0gICAgICAgICAgIGVsc2Ug
dGhlIHNjcmlwdCByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIG5lYXJlc3QgbmF0aXZlIGNhbGxlci4K
LSAgICAgICAgKi8KLQotICAgICAgICBpbnQgZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+cihleCkuanNWYWx1ZSgpOwotCi0gICAgICAg
IGhhbmRsZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMg
LSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWhhbmRs
ZXIpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUsIGV4Y2VwdGlvblZh
bHVlKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
ICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBoYW5kbGVyLT50
YXJnZXQ7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpIHsKLSAgICAgICAgLyogb3BfdGhyb3dfcmVm
ZXJlbmNlX2Vycm9yIG1lc3NhZ2UoaykKLQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IHJl
ZmVyZW5jZSBFcnJvciBpbnN0YW5jZSB1c2luZyB0aGUKLSAgICAgICAgICAgb3JpZ2luYWwgY29u
c3RydWN0b3IsIHVzaW5nIGNvbnN0YW50IG1lc3NhZ2UgYXMgdGhlCi0gICAgICAgICAgIG1lc3Nh
Z2Ugc3RyaW5nLiBUaGUgcmVzdWx0IGlzIHRocm93bi4KLSAgICAgICAgKi8KLSAgICAgICAgU3Ry
aW5nIG1lc3NhZ2UgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpLnRv
U3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gSlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsK
LSAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9lbmQp
IHsKLSAgICAgICAgLyogZW5kIHJlc3VsdChyKQotICAgICAgICAgICAKLSAgICAgICAgICAgUmV0
dXJuIHJlZ2lzdGVyIHJlc3VsdCBhcyB0aGUgdmFsdWUgb2YgYSBnbG9iYWwgb3IgZXZhbAotICAg
ICAgICAgICBwcm9ncmFtLiBSZXR1cm4gY29udHJvbCB0byB0aGUgY2FsbGluZyBuYXRpdmUgY29k
ZS4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cihyZXN1bHQpLmpzVmFsdWUoKTsKLSAgICB9Ci0g
ICAgREVGSU5FX09QQ09ERShvcF9wdXRfZ2V0dGVyX3NldHRlcikgewotICAgICAgICAvKiBwdXRf
Z2V0dGVyX3NldHRlciBiYXNlKHIpIHByb3BlcnR5KGlkKSBnZXR0ZXIocikgc2V0dGVyKHIpCi0K
LSAgICAgICAgICAgUHV0cyBhY2Nlc3NvciBkZXNjcmlwdG9yIHRvIHJlZ2lzdGVyIGJhc2UgYXMg
dGhlIG5hbWVkCi0gICAgICAgICAgIGlkZW50aWZpZXIgcHJvcGVydHkuIEJhc2UgYW5kIGZ1bmN0
aW9uIG1heSBiZSBvYmplY3RzCi0gICAgICAgICAgIG9yIHVuZGVmaW5lZCwgdGhpcyBvcCBzaG91
bGQgb25seSBiZSB1c2VkIGZvciBhY2Nlc3NvcnMKLSAgICAgICAgICAgZGVmaW5lZCBpbiBvYmpl
Y3QgbGl0ZXJhbCBmb3JtLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRoaXMg
b25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lzdGVy
IGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGdl
dHRlclJlZyA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzZXR0ZXJSZWcgPSB2UENb
NF0udS5vcGVyYW5kOwotCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1
ZSgpLmlzT2JqZWN0KCkpOwotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KGNh
bGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCkpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVy
KiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGNhbGxGcmFtZSk7Ci0KLSAgICAgICAg
SlNWYWx1ZSBnZXR0ZXIgPSBjYWxsRnJhbWUtPnIoZ2V0dGVyUmVnKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgIEpTVmFsdWUgc2V0dGVyID0gY2FsbEZyYW1lLT5yKHNldHRlclJlZykuanNWYWx1ZSgpOwot
ICAgICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgZ2V0dGVyLmlzVW5kZWZpbmVkKCkp
OwotICAgICAgICBBU1NFUlQoc2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzVW5kZWZpbmVk
KCkpOwotICAgICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0
KCkpOwotCi0gICAgICAgIGlmICghZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0R2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChnZXR0
ZXIpKTsKLSAgICAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHNldHRl
cikpOwotICAgICAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcihjYWxsRnJhbWUsIGlkZW50
LCBhY2Nlc3NvciwgQWNjZXNzb3IpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X3B1dF9nZXR0ZXJfc2V0dGVyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX21ldGhvZF9jaGVjaykgewotICAgICAgICB2UEMrKzsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2Rl
YnVnKSB7Ci0gICAgICAgIC8qIGRlYnVnIGRlYnVnSG9va0lEKG4pIGZpcnN0TGluZShuKSBsYXN0
TGluZShuKSBjb2x1bW4obikKLQotICAgICAgICAgTm90aWZpZXMgdGhlIGRlYnVnZ2VyIG9mIHRo
ZSBjdXJyZW50IHN0YXRlIG9mIGV4ZWN1dGlvbi4gVGhpcyBvcGNvZGUKLSAgICAgICAgIGlzIG9u
bHkgZ2VuZXJhdGVkIHdoaWxlIHRoZSBkZWJ1Z2dlciBpcyBhdHRhY2hlZC4KLSAgICAgICAgKi8K
LSAgICAgICAgaW50IGRlYnVnSG9va0lEID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZpcnN0TGluZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBsYXN0TGluZSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBjb2x1bW4gPSB2UENbNF0udS5vcGVyYW5kOwot
Ci0KLSAgICAgICAgZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVi
dWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOwotCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2RlYnVnKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKSB7Ci0gICAgICAg
IC8qIG9wX3Byb2ZpbGVfd2lsbF9jYWxsIGZ1bmN0aW9uKHIpCi0KLSAgICAgICAgIE5vdGlmaWVz
IHRoZSBwcm9maWxlciBvZiB0aGUgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gY2FsbC4gVGhpcyBv
cGNvZGUKLSAgICAgICAgIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGRldmVsb3BlciB0b29scyBhcmUg
ZW5hYmxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGZ1bmN0aW9uID0gdlBDWzFdLnUub3Bl
cmFuZDsKLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS0+ZW5h
YmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFsdWUoKSk7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJvZmlsZV9kaWRfY2FsbCkg
ewotICAgICAgICAvKiBvcF9wcm9maWxlX2RpZF9jYWxsIGZ1bmN0aW9uKHIpCi0KLSAgICAgICAg
IE5vdGlmaWVzIHRoZSBwcm9maWxlciBvZiB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gY2FsbC4gVGhp
cyBvcGNvZGUKLSAgICAgICAgIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGRldmVsb3BlciB0b29scyBh
cmUgZW5hYmxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGZ1bmN0aW9uID0gdlBDWzFdLnUu
b3BlcmFuZDsKLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS0+
ZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+cihmdW5jdGlvbikuanNWYWx1ZSgpKTsKLQotICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9wcm9maWxlX2RpZF9jYWxsKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICB2bV90aHJvdzogewotICAgICAgICBnbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBKU1ZhbHVlKCk7Ci0gICAgICAgIGlmICghdGlja0NvdW50KSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgZXhjZXB0aW9uVmFsdWUgaXMgYSBsaWUhIChHQ0MgcHJvZHVjZXMgYmFkIGNv
ZGUgZm9yIHJlYXNvbnMgSSAKLSAgICAgICAgICAgIC8vIGNhbm5vdCBmYXRob20gaWYgd2UgZG9u
J3QgYXNzaWduIHRvIHRoZSBleGNlcHRpb25WYWx1ZSBiZWZvcmUgYnJhbmNoaW5nKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihnbG9iYWxEYXRhKTsKLSAgICAgICAgfQotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIGhhbmRs
ZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMgLSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWhhbmRsZXIpIHsK
LSAgICAgICAgICAgIC8vIENhbid0IHVzZSB0aGUgY2FsbGZyYW1lIGF0IHRoaXMgcG9pbnQgYXMg
dGhlIHNjb3BlY2hhaW4sIGV0YyBoYXZlCi0gICAgICAgICAgICAvLyBiZWVuIHJlbGVhc2VkLgot
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIHZQQyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKSArIGhhbmRsZXItPnRhcmdldDsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSAgICB9Ci0jaWYgIUVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQ
UkVURVIpCi0gICAgfSAvLyBpdGVyYXRvciBsb29wIGVuZHMKLSNlbmRpZgotICAgICN1bmRlZiBO
RVhUX0lOU1RSVUNUSU9OCi0gICAgI3VuZGVmIERFRklORV9PUENPREUKLSAgICAjdW5kZWYgQ0hF
Q0tfRk9SX0VYQ0VQVElPTgotICAgICN1bmRlZiBDSEVDS19GT1JfVElNRU9VVAotI2VuZGlmIC8v
IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotfQotCi0jZW5kaWYgLy8gIUVOQUJMRShMTElO
VF9DX0xPT1ApCi0KLQotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QK
LXsKLSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZy
YW1lRnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0aW9uQ2Fs
bEZyYW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAgICBhcmd1bWVudHMtPnRlYXJPZmYoZnVuY3Rpb25DYWxs
RnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci19Ci0KLUpTVmFsdWUgSW50
ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNh
bGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5j
dGlvbik7Ci0KLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0gICAgCi0gICAgaW50IGxpbmVOdW1iZXI7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQ7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgbGluZU51bWJlciwgYnl0ZWNv
ZGVPZmZzZXQpOwotICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHJldHVybiBqc051bGwo
KTsKLSAgICBKU1ZhbHVlIGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKLSAgICBpZiAo
IWNhbGxlcikKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgLy8gU2tpcCBvdmVyIGZ1
bmN0aW9uIGJpbmRpbmdzLgotICAgIEFTU0VSVChjYWxsZXIuaXNPYmplY3QoKSk7Ci0gICAgd2hp
bGUgKGFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246OnNfaW5mbykp
IHsKLSAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgY2FsbGVyRnJhbWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAg
ICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAg
ICAgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwotICAgICAgICBpZiAoIWNhbGxlcikK
LSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FsbGVy
OwotfQotCi12b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBTdHJpbmcmIHNv
dXJjZVVSTCwgSlNWYWx1ZSYgZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgZnVuY3Rpb24gPSBKU1Zh
bHVlKCk7Ci0gICAgbGluZU51bWJlciA9IC0xOwotICAgIHNvdXJjZVVSTCA9IFN0cmluZygpOwot
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKQorICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGlmICghY2FsbGVy
Q29kZUJsb2NrKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSAwOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICghY2FsbGVyRnJh
bWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBj
YWxsZXJDb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpOwot
I2lmIEVOQUJMRShKSVQpCi0gICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxl
ckNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJu
UEMoKSk7Ci0jZW5kaWYKLSNlbHNlCiAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJDb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblBDKCkpOwot
I2VuZGlmCiAgICAgbGluZU51bWJlciA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CiAgICAgc291cmNlSUQgPSBjYWxsZXJD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpOwogICAgIHNvdXJjZVVSTCA9
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJl
dmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjcgKzIwNCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgT3Bjb2RlSUQgZ2V0T3Bjb2RlSUQoT3Bjb2RlIG9wY29kZSkKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKG1faW5pdGlhbGl6ZWQpOwotI2lmIEVOQUJMRShDT01Q
VVRFRF9HT1RPX09QQ09ERVMpCi0jaWYgRU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShDT01QVVRF
RF9HT1RPX09QQ09ERVMpICYmIEVOQUJMRShMTElOVCkKICAgICAgICAgICAgIEFTU0VSVChpc09w
Y29kZShvcGNvZGUpKTsKICAgICAgICAgICAgIHJldHVybiBtX29wY29kZUlEVGFibGUuZ2V0KG9w
Y29kZSk7Ci0jZWxpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQot
ICAgICAgICAgICAgQVNTRVJUKGlzT3Bjb2RlKG9wY29kZSkpOwotICAgICAgICAgICAgaWYgKCFt
X2NsYXNzaWNFbmFibGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxPcGNv
ZGVJRD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3Bjb2RlKSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBtX29wY29kZUlEVGFibGUuZ2V0KG9wY29kZSk7Ci0jZW5kaWYgLy8gRU5BQkxFKENPTVBV
VEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNlbHNlIC8vICFFTkFCTEUoQ09NUFVURURf
R09UT19PUENPREVTKQorI2Vsc2UKICAgICAgICAgICAgIHJldHVybiBvcGNvZGU7Ci0jZW5kaWYg
Ly8gIUVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCisjZW5kaWYKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgYm9vbCBjbGFzc2ljRW5hYmxlZCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2NsYXNzaWNFbmFibGVkOwotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBp
c09wY29kZShPcGNvZGUpOwogCiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShQcm9ncmFtRXhlY3V0
YWJsZSosIENhbGxGcmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqKTsKQEAgLTI2MCwxNSArMjQ3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVD
bG9zdXJlJik7CiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAK
LSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgTkVWRVJfSU5MSU5FIEpT
U2NvcGUqIGNyZWF0ZU5hbWVTY29wZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiogdlBD
KTsKLQotICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sq
LCBJbnN0cnVjdGlvbiosIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHVuY2FjaGVHZXRC
eUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpOwotICAgICAgICB2b2lkIHRyeUNhY2hl
UHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUgYmFz
ZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCB1bmNhY2hlUHV0
QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsgICAgICAgIAotI2VuZGlmIC8vIEVO
QUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVu
d2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zm
c2V0LCBDb2RlQmxvY2sqJik7CiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgQ2FsbEZy
YW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqLCBSZWdpc3RlckZpbGUq
LCBDYWxsRnJhbWUqLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKTsKQEAgLTI5MSwy
MCArMjY5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVyRmlsZSBtX3Jl
Z2lzdGVyRmlsZTsKICAgICAgICAgCi0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
LSNpZiBFTkFCTEUoTExJTlQpCisjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykgJiYg
RU5BQkxFKExMSU5UKQogICAgICAgICBPcGNvZGUqIG1fb3Bjb2RlVGFibGU7IC8vIE1hcHMgT3Bj
b2RlSUQgPT4gT3Bjb2RlIGZvciBjb21waWxpbmcKICAgICAgICAgSGFzaE1hcDxPcGNvZGUsIE9w
Y29kZUlEPiBtX29wY29kZUlEVGFibGU7IC8vIE1hcHMgT3Bjb2RlID0+IE9wY29kZUlEIGZvciBk
ZWNvbXBpbGluZwotI2VsaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRF
UikKLSAgICAgICAgT3Bjb2RlIG1fb3Bjb2RlVGFibGVbbnVtT3Bjb2RlSURzXTsgLy8gTWFwcyBP
cGNvZGVJRCA9PiBPcGNvZGUgZm9yIGNvbXBpbGluZwotICAgICAgICBIYXNoTWFwPE9wY29kZSwg
T3Bjb2RlSUQ+IG1fb3Bjb2RlSURUYWJsZTsgLy8gTWFwcyBPcGNvZGUgPT4gT3Bjb2RlSUQgZm9y
IGRlY29tcGlsaW5nCiAjZW5kaWYKLSNlbmRpZiAvLyBFTkFCTEUoQ09NUFVURURfR09UT19PUENP
REVTKQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7
CiAjZW5kaWYKLSAgICAgICAgYm9vbCBtX2NsYXNzaWNFbmFibGVkOwogICAgIH07CiAKICAgICAv
LyBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIGFuIG9iamVjdCB0aGF0IHdvdWxkIHJlcXVpcmUgdGhp
cyBjb252ZXJzaW9uIChXZWJDb3JlJ3MgZ2xvYmFsIG9iamVjdCkuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2Nh
dGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAg
IHsKICAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhH
dWFyZFBhZ2VzKGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNK
SVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0jaWYgIShFTkFC
TEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKSkKKyNpZiAhRU5BQkxFKExM
SU5UKQogICAgICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hc20ucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXNtLnJiCShyZXZp
c2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hc20ucmIJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCAkc3RkZXJyLnB1dHMgIm9mZmxpbmVh
c206IFBhcnNpbmcgI3thc21GCiBiZWdpbgogICAgIGNvbmZpZ3VyYXRpb25MaXN0ID0gb2Zmc2V0
c0FuZENvbmZpZ3VyYXRpb25JbmRleChvZmZzZXRzRmlsZSkKIHJlc2N1ZSBNaXNzaW5nTWFnaWNW
YWx1ZXNFeGNlcHRpb24KLSAgICAkc3RkZXJyLnB1dHMgIm9mZmxpbmVhc206IE5vIG1hZ2ljIHZh
bHVlcyBmb3VuZC4gU2tpcHBpbmcgYXNzZW1ibHkgZmlsZSBnZW5lcmF0aW9uIGFzc3VtaW5nIHRo
ZSBjbGFzc2ljIGludGVycHJldGVyIGlzIGVuYWJsZWQuIgorICAgICRzdGRlcnIucHV0cyAib2Zm
bGluZWFzbTogTm8gbWFnaWMgdmFsdWVzIGZvdW5kLiBTa2lwcGluZyBhc3NlbWJseSBmaWxlIGdl
bmVyYXRpb24uIgogICAgIGV4aXQgMAogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL29mZnNldHMucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vb2Zmc2V0cy5yYgkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL29mZmxpbmVhc20vb2Zmc2V0cy5yYgkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNiBAQCBPRkZTRVRfTUFHSUNfTlVNQkVSUyA9IFsgdG8zMkJpdCgweGVjNTc3CiAjIE1p
c3NpbmdNYWdpY1ZhbHVlc0V4Y2VwdGlvbgogIwogIyBUaHJvd24gd2hlbiBtYWdpYyB2YWx1ZXMg
YXJlIG1pc3NpbmcgZnJvbSB0aGUgYmluYXJ5LgotIyBUaGlzIGlzIHVzdWFsbHkgYW4gaW5kaWNh
dGlvbiB0aGF0IHRoZSBjbGFzc2ljIGludGVycHJldGVyIGlzIGVuYWJsZWQuCiAjCiAKIGNsYXNz
IE1pc3NpbmdNYWdpY1ZhbHVlc0V4Y2VwdGlvbiA8IEV4Y2VwdGlvbgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDEyOTQzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzEsMTEgKzIzMSw2IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmEKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICBpZiAoIW1faml0Q29kZUZvckNhbGwpCi0gICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fZXZhbENvZGVCbG9j
aykpOwotICAgIGVsc2UKLSNlbmRpZgogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChzaXplb2YoKm1fZXZhbENvZGVCbG9jaykgKyBtX2ppdENvZGVGb3JDYWxsLnNp
emUoKSk7CiAjZWxzZQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoKm1fZXZhbENvZGVCbG9jaykpOwpAQCAtMzU2LDEyICszNTEsNyBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShK
SVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENvZGVG
b3JDYWxsKQotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9wcm9ncmFt
Q29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRo
aXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spICsg
bV9qaXRDb2RlRm9yQ2FsbC5zaXplKCkpOwogI2Vsc2UKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spKTsKICNlbmRp
ZgpAQCAtNTM0LDEyICs1MjQsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5U
RVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENvZGVGb3JDYWxsKQotICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwp
KTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSArIG1faml0Q29kZUZvckNh
bGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwpICsgbV9qaXRDb2RlRm9yQ2FsbC5zaXplKCkpOwog
I2Vsc2UKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9m
KCptX2NvZGVCbG9ja0ZvckNhbGwpKTsKICNlbmRpZgpAQCAtNTc2LDExICs1NjEsNiBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKSVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChzaXplb2YoKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSk7Ci0gICAgZWxzZQotI2Vu
ZGlmCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigq
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LnNpemUoKSk7
CiAjZWxzZQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
b2YoKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3
ICsyNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBzdGF0
aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+Y2xhc3NpY0VuYWJsZWQoKSk7CiAgICAgICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwogICAgICAgICAgICAgaWYgKCFjYWxsVGh1
bmspIHsKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJs
ZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwpAQCAtMjc5LDcgKzI3OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDTEFTU0lD
X0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlRfQ19MT09QKQorI2lmIEVOQUJMRShMTElOVF9D
X0xPT1ApCiAgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5j
YW5Vc2VKSVQoKSk7CkBAIC0zMDYsNyArMzA1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpJVENvZGUgY2FsbFRodW5rLCBKSVRDb2RlIGNvbnN0cnVjdFRodW5rLCBJbnRyaW5z
aWMgaW50cmluc2ljKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEu
aW50ZXJwcmV0ZXItPmNsYXNzaWNFbmFibGVkKCkpOwogICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2Fs
bFRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gY29uc3RydWN0VGh1
bms7CkBAIC0zMTYsMTUgKzMxNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5k
aWYKIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKTsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBOb0lu
dHJpbnNpYzsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICBwcml2YXRlOgogICAgICAgICBOYXRp
dmVFeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICAgICAgOiBFeGVjdXRh
YmxlQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUu
Z2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDExIEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwUHJvdG90
eXBlVGEKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nVGFibGU7CiBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7CiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVS
KSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCisvLyBO
b3RlOiBQbGF0Zm9ybS5oIHdpbGwgZW5mb3JjZSB0aGF0IEVOQUJMRShBU1NFTUJMRVIpIGlzIHRy
dWUgaWYgZWl0aGVyCisvLyBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIG9yIGJvdGgg
YXJlIGVuYWJsZWQuIFRoZSBjb2RlIGJlbG93CisvLyBqdXN0IGNoZWNrcyBmb3IgRU5BQkxFKEpJ
VCkgb3IgRU5BQkxFKFlBUlJfSklUKSB3aXRoIHRoaXMgcHJlbWlzZSBpbiBtaW5kLgorCisjaWYg
RU5BQkxFKEFTU0VNQkxFUikKIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxl
QWxsb2NhdG9yJiBleGVjdXRhYmxlQWxsb2NhdG9yKQogewogICAgIGlmICghZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkKCkgfHwgKCFPcHRpb25zOjp1c2VKSVQoKSAmJiAhT3B0aW9uczo6dXNl
UmVnRXhwSklUKCkpKQpAQCAtMTI0LDcgKzEyOCw3IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2Vt
YmxlcihFeGVjdXRhYmxlQWwKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogfQotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRh
KEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBUaHJlYWRTdGFja1R5cGUgdGhyZWFkU3Rh
Y2tUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6CkBAIC0xODAsOSArMTg0LDEzIEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIG1fdGltZW91dENv
dW50KDUxMikKICNlbmRpZgogICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnN0KDAp
Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8
fCBFTkFCTEUoTExJTlQpKQorI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBtX2NhblVzZUFz
c2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCisjZW5kaWYKKyNp
ZiBFTkFCTEUoSklUKQogICAgICwgbV9jYW5Vc2VKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYgT3B0
aW9uczo6dXNlSklUKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgLCBtX2Nh
blVzZVJlZ0V4cEpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VSZWdFeHBKSVQo
KSkKICNlbmRpZgogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtMzcwLDEwICszNzgsNiBA
QCBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJCiAKIE5hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19J
TlRFUlBSRVRFUikKLSAgICBpZiAoIWNhblVzZUpJVCgpKQotICAgICAgICByZXR1cm4gTmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotI2VuZGlm
CiAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBj
b25zdHJ1Y3Rvcik7CiB9CiBOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RG
dW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZp
c2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDIwICsyODAsMTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIH0KIAotI2lm
ICFFTkFCTEUoSklUKQotICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9
IC8vIGludGVycHJldGVyIG9ubHkKLSNlbGlmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikg
JiYgIUVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCisgICAg
ICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KKyNlbGlmIEVOQUJM
RShKSVQpCiAgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQg
b25seQogI2Vsc2UKLSAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJ
VDsgfQorICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVy
cHJldGVyIG9ubHkKICNlbmRpZgogCi0jaWYgIUVOQUJMRShZQVJSX0pJVCkKLSAgICAgICAgYm9v
bCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5
Ci0jZWxpZiAhRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpICYmICFFTkFCTEUoTExJTlQpCi0g
ICAgICAgIGJvb2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQgb25s
eQotI2Vsc2UKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgICAgIGJvb2wgY2FuVXNlUmVnRXhw
SklUKCkgeyByZXR1cm4gbV9jYW5Vc2VSZWdFeHBKSVQ7IH0KKyNlbHNlCisgICAgICAgIGJvb2wg
Y2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gaW50ZXJwcmV0ZXIgb25seQog
I2VuZGlmCiAKICAgICAgICAgUHJpdmF0ZU5hbWUgbV9pbmhlcml0b3JJREtleTsKQEAgLTQ0MCw5
ICs0MzgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxE
YXRhVHlwZSwgVGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0ds
b2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRl
TmF0aXZlVGh1bmsoKTsKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNf
SU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAg
ICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7CisjZW5kaWYKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAg
ICAgICAgIGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7CiAjZW5kaWYKICNpZiBFTkFCTEUoR0NfVkFM
SURBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIHZvaWQgT3B0aW9uczo6
aW5pdGlhbGl6ZSgpCiAjaWYgIUVOQUJMRShZQVJSX0pJVCkKICAgICB1c2VSZWdFeHBKSVQoKSA9
IGZhbHNlOwogI2VuZGlmCisgICAgdXNlSklUKCkgPSBmYWxzZTsKKyAgICB1c2VERkdKSVQoKSA9
IGZhbHNlOwogCiAjaWYgVVNFKENGKSB8fCBPUyhVTklYKQogICAgIHpvbWJpZXNBcmVJbW1vcnRh
bCgpID0gISFnZXRlbnYoIkpTSW1tb3J0YWxab21iaWVFbmFibGVkIik7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMTI5NDM5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxMi0wOS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgRGVsZXRpbmcgdGhlIGNsYXNzaWMgaW50ZXJwcmV0ZXIgYW5kIGNsZWFuaW5nIHVw
IHNvbWUgYnVpbGQgb3B0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk2OTY5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwOgorICAgICAgICAoV1RGOjpP
U0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6
CisKIDIwMTItMDktMjQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIFN0cmluZzo6b3BlcmF0b3IrPSgpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9PU0FsbG9jYXRvclBvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9PU0Fs
bG9jYXRvclBvc2l4LmNwcAkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL1dURi93dGYvT1NB
bGxvY2F0b3JQb3NpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDExIEBAIHZv
aWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemUKIAogICAgIHJlc3VsdCA9IG1t
YXAocmVzdWx0LCBieXRlcywgcHJvdGVjdGlvbiwgZmxhZ3MsIGZkLCAwKTsKICAgICBpZiAocmVz
dWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAjaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIp
IHx8IEVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoTExJTlQpCiAgICAgICAgIGlmIChleGVjdXRh
YmxlKQogICAgICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICAgZWxzZQotICAgICNlbmRpZgor
I2VuZGlmCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0KICAgICBpZiAocmVzdWx0ICYmIGlu
Y2x1ZGVzR3VhcmRQYWdlcykgewpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxMjk0MzkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDQsMTEgKzYw
NCw5IEBACiAjZGVmaW5lIFdURl9VU0VfUFRIUkVBRFMgMQogCiAjaWYgUExBVEZPUk0oSU9TX1NJ
TVVMQVRPUikKLSAgICAjZGVmaW5lIEVOQUJMRV9DTEFTU0lDX0lOVEVSUFJFVEVSIDEKICAgICAj
ZGVmaW5lIEVOQUJMRV9KSVQgMAogICAgICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDAKICNlbHNl
Ci0gICAgI2RlZmluZSBFTkFCTEVfQ0xBU1NJQ19JTlRFUlBSRVRFUiAwCiAgICAgI2RlZmluZSBF
TkFCTEVfSklUIDEKICAgICAjZGVmaW5lIEVOQUJMRV9MTElOVCAxCiAgICAgI2RlZmluZSBFTkFC
TEVfWUFSUl9KSVQgMQpAQCAtNjQxLDcgKzYzOSw5IEBACiAKICNpZiBQTEFURk9STShXWCkKICNp
ZiAhQ1BVKFBQQykKKyNpZiAhZGVmaW5lZChFTkFCTEVfQVNTRU1CTEVSKQogI2RlZmluZSBFTkFC
TEVfQVNTRU1CTEVSIDEKKyNlbmRpZgogI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogI2Rl
ZmluZSBFTkFCTEVfR0xPQkFMX0ZBU1RNQUxMT0NfTkVXIDAKQEAgLTk1MywxMyArOTUzLDggQEAK
ICNkZWZpbmUgRU5BQkxFX1dSSVRFX0JBUlJJRVJfUFJPRklMSU5HIDAKICNlbmRpZgogCi0vKiBF
bnN1cmUgdGhhdCBlaXRoZXIgdGhlIEpJVCBvciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gZW5h
YmxlZC4gKi8KLSNpZiAhZGVmaW5lZChFTkFCTEVfQ0xBU1NJQ19JTlRFUlBSRVRFUikgJiYgIUVO
QUJMRShKSVQpICYmICFFTkFCTEUoTExJTlQpCi0jZGVmaW5lIEVOQUJMRV9DTEFTU0lDX0lOVEVS
UFJFVEVSIDEKLSNlbmRpZgotCiAvKiBJZiB0aGUgaml0IGFuZCBjbGFzc2ljIGludGVycHJldGVy
IGlzIG5vdCBhdmFpbGFibGUsIGVuYWJsZSB0aGUgTExJbnQgQyBMb29wOiAqLwotI2lmICFFTkFC
TEUoSklUKSAmJiAhRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCisjaWYgIUVOQUJMRShKSVQp
CiAgICAgI2RlZmluZSBFTkFCTEVfTExJTlQgMQogICAgICNkZWZpbmUgRU5BQkxFX0xMSU5UX0Nf
TE9PUCAxCiAgICAgI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCkBAIC05NjcsMTQgKzk2Miw5IEBA
CiAKIC8qIERvIGEgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGF0IGxlYXN0IGhh
dmUgb25lIGV4ZWN1dGlvbiBlbmdpbmUgaW4KICAgIHVzZTogKi8KLSNpZiAhKEVOQUJMRShKSVQp
IHx8IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlQpKQorI2lmICEo
RU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKSkKICNlcnJvciBZb3UgaGF2ZSB0byBoYXZlIGF0
IGxlYXN0IG9uZSBleGVjdXRpb24gbW9kZWwgZW5hYmxlZCB0byBidWlsZCBKU0MKICNlbmRpZgot
LyogRG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBib3Ro
IHRoZSBjbGFzc2ljIGludGVycHJldGVyCi0gICBhbmQgdGhlIGxsaW50IEMgbG9vcCBpbiB1c2Ug
YXQgdGhlIHNhbWUgdGltZTogKi8KLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgJiYg
RU5BQkxFKExMSU5UX0NfTE9PUCkKLSNlcnJvciBZb3UgY2Fubm90IGJ1aWxkIGJvdGggdGhlIGNs
YXNzaWMgaW50ZXJwcmV0ZXIgYW5kIHRoZSBsbGludCBDIGxvb3AgdG9nZXRoZXIKLSNlbmRpZgog
CiAvKiBDb25maWd1cmUgdGhlIEpJVCAqLwogI2lmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMp
CkBAIC05ODksMTIgKzk3OSw5IEBACiAjaWYgQ09NUElMRVIoR0NDKSB8fCAoUlZDVF9WRVJTSU9O
X0FUX0xFQVNUKDQsIDAsIDAsIDApICYmIGRlZmluZWQoX19HTlVDX18pKQogI2RlZmluZSBIQVZF
X0NPTVBVVEVEX0dPVE8gMQogI2VuZGlmCi0jaWYgSEFWRShDT01QVVRFRF9HT1RPKSAmJiBFTkFC
TEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNkZWZpbmUgRU5BQkxFX0NPTVBVVEVEX0dPVE9fQ0xB
U1NJQ19JTlRFUlBSRVRFUiAxCi0jZW5kaWYKIAogLyogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8g
ZW5hYmxlIENvbXB1dGVkIEdvdG8gT3Bjb2RlcyBvciBub3Q6ICovCi0jaWYgKEhBVkUoQ09NUFVU
RURfR09UTykgJiYgRU5BQkxFKExMSU5UKSkgfHwgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKKyNpZiBIQVZFKENPTVBVVEVEX0dPVE8pICYmIEVOQUJMRShMTElOVCkK
ICNkZWZpbmUgRU5BQkxFX0NPTVBVVEVEX0dPVE9fT1BDT0RFUyAxCiAjZW5kaWYKIApAQCAtMTAw
OSw5ICs5OTYsMTYgQEAKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUX0RFQlVHIDAKICNlbmRpZgog
CisvKiBJZiBlaXRoZXIgdGhlIEpJVCBvciB0aGUgUmVnRXhwIEpJVCBpcyBlbmFibGVkLCB0aGVu
IHRoZSBBc3NlbWJsZXIgbXVzdCBiZQorICAgZW5hYmxlZCBhcyB3ZWxsOiAqLwogI2lmIEVOQUJM
RShKSVQpIHx8IEVOQUJMRShZQVJSX0pJVCkKKyNpZiBkZWZpbmVkKEVOQUJMRV9BU1NFTUJMRVIp
ICYmICFFTkFCTEVfQVNTRU1CTEVSCisjZXJyb3IgIkNhbm5vdCBlbmFibGUgdGhlIEpJVCBvciBS
ZWdFeHAgSklUIHdpdGhvdXQgZW5hYmxpbmcgdGhlIEFzc2VtYmxlciIKKyNlbHNlCisjdW5kZWYg
RU5BQkxFX0FTU0VNQkxFUgogI2RlZmluZSBFTkFCTEVfQVNTRU1CTEVSIDEKICNlbmRpZgorI2Vu
ZGlmCiAKIC8qIFBpY2sgd2hpY2ggYWxsb2NhdG9yIHRvIHVzZTsgd2Ugb25seSBuZWVkIGFuIGV4
ZWN1dGFibGUgYWxsb2NhdG9yIGlmIHRoZSBhc3NlbWJsZXIgaXMgY29tcGlsZWQgaW4uCiAgICBP
biB4ODYtNjQgd2UgdXNlIGEgc2luZ2xlIGZpeGVkIG1tYXAsIG9uIG90aGVyIHBsYXRmb3JtcyB3
ZSBtbWFwIG9uIGRlbWFuZC4gKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwko
cmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA5LTI0ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxldGluZyB0aGUgY2xhc3NpYyBpbnRlcnBy
ZXRlciBhbmQgY2xlYW5pbmcgdXAgc29tZSBidWlsZCBvcHRpb25zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY5NjkuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BYm91dERh
dGFFbmFibGVGZWF0dXJlcy5pbjoKKwogMjAxMi0wOS0yNCAgT3R0byBEZXJlayBDaGV1bmcgIDxv
dGNoZXVuZ0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZXZlcnRpbmcgaW1wbGVt
ZW50YXRpb24gZm9yIDQwNyBlcnJvciBwYWdlcwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0Fib3V0RGF0YUVuYWJsZUZlYXR1cmVzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGFFbmFi
bGVGZWF0dXJlcy5pbgkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0Fib3V0RGF0YUVuYWJsZUZlYXR1cmVzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiwxMSArMTIsOSBAQCBCTE9CCiBCUkFOQ0hfQ09NUEFDVElPTgogQ0FMRU5EQVJf
UElDS0VSCiBDSEFOTkVMX01FU1NBR0lORwotQ0xBU1NJQ19JTlRFUlBSRVRFUgogQ09ERUJMT0NL
X1NBTVBMSU5HCiBDT01QQVJFX0FORF9TV0FQCiBDT01QVVRFRF9HT1RPCi1DT01QVVRFRF9HT1RP
X0NMQVNTSUNfSU5URVJQUkVURVIKIENPTVBVVEVEX0dPVE9fSU5URVJQUkVURVIKIENPTlNJU1RF
TkNZX0NIRUNLCiBDT05URVhUX01FTlVTCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165485</attachid>
            <date>2012-09-24 18:30:07 -0700</date>
            <delta_ts>2012-09-24 19:41:58 -0700</delta_ts>
            <desc>Fix - some debug code that got accidentally included in the last patch.</desc>
            <filename>bug-96969.patch</filename>
            <type>text/plain</type>
            <size>190827</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA5LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBE
ZWxldGluZyB0aGUgY2xhc3NpYyBpbnRlcnByZXRlciBhbmQgY2xlYW5pbmcgdXAgc29tZSBidWls
ZCBvcHRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTY5NjkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1
bXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAg
ICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5jcHA6CisgICAgICAgIChKU0M6OkFic3RyYWN0UEM6OkFic3RyYWN0UEMp
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuaDoKKyAgICAgICAgKEFic3RyYWN0
UEMpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoRXhlY1N0
YXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6fkludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6aXNPcGNvZGUpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6Z2V0TGluZU51bWJlckZvckNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OmdldENhbGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNv
ZGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXJGcm9tVk1Db2Rl
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcik6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmdldE9wY29kZUlEKToKKyAgICAgICAgKEludGVycHJldGVyKToKKyAgICAgICAgKiBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6Rml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Ip
OgorICAgICAgICAqIG9mZmxpbmVhc20vYXNtLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vb2Zm
c2V0cy5yYjoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRl
KToKKyAgICAgICAgKE5hdGl2ZUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y2FuVXNlSklUKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxEYXRhOjpjYW5Vc2VSZWdFeHBKSVQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorCiAyMDEyLTA5LTI0
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVmFsdWVUb0ludDMy
IGJvb2wgY2FzZSBkb2VzIGJhZCB0aGluZ3MgdG8gcmVnaXN0ZXJzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTI5NDM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4OCwyNSArNTg4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICB9IHdoaWxlIChpIDwgbV9nbG9iYWxSZXNvbHZlSW5mb3Muc2l6ZSgp
KTsKICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBp
ZiAoIW1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICBkYXRhTG9nKCJcblN0cnVjdHVy
ZXM6XG4iKTsKLQotICAgIGlmICghbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLmlzRW1wdHko
KSkgewotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICBw
cmludFN0cnVjdHVyZXMoJmluc3RydWN0aW9ucygpW21fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9u
c1tpXV0pOwotICAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fZ2xvYmFs
UmVzb2x2ZUluc3RydWN0aW9ucy5zaXplKCkpOwotICAgIH0KLSAgICBpZiAoIW1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgcHJpbnRTdHJ1Y3R1cmVzKCZpbnN0cnVjdGlvbnMoKVtt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgICAgICAgICAgKytpOwotICAg
ICAgICB9IHdoaWxlIChpIDwgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOwot
ICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFMb2coIlxuRXhjZXB0aW9u
IEhhbmRsZXJzOlxuIik7CkBAIC0yMDY1LDkgKzIwNDYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7Ci0gICAgLy8gaW50
ZXJwcmV0ZXItPmNsYXNzaWNFbmFibGVkKCkgcmV0dXJucyB0cnVlIGlmIHRoZSBvbGQgQysrIGlu
dGVycHJldGVyIGlzIGVuYWJsZWQuIElmIHRoYXQncyBlbmFibGVkCi0gICAgLy8gdGhlbiB3ZSdy
ZSBub3QgdXNpbmcgTExJbnQuCi0gICAgaWYgKCFpbnRlcnByZXRlci0+Y2xhc3NpY0VuYWJsZWQo
KSAmJiAhIW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKKyAgICBpZiAoISFudW1iZXJPZkluc3Ry
dWN0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
IEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSkgewpAQCAtMjI2MCwxNCAr
MjIzOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJF
VEVSKQotICAgIGlmIChtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5jbGFzc2ljRW5hYmxlZCgp
ICYmICEhbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBzaXpl
ID0gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgdmlzaXRTdHJ1Y3R1cmVzKHZpc2l0b3IsICZpbnN0cnVjdGlvbnMo
KVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgICAgIHZpc2l0U3RydWN0dXJlcyh2aXNpdG9yLCAmaW5zdHJ1Y3Rp
b25zKClbbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgfQotI2VuZGlmCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucyhDb2xsZWN0aW9uKTsKIH0KQEAgLTI0NDQsMjcgKzI0
MTUsNiBAQCB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvCiAgICAgcmV0
dXJuOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi1ib29sIENvZGVCbG9j
azo6aGFzR2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKLXsKLSAgICBpZiAobV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGxvdyA9IDA7Ci0gICAg
aW50IGhpZ2ggPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpOwotICAgIHdoaWxl
IChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAy
OwotICAgICAgICBpZiAobV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW21pZF0gPD0gYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93IHx8IG1fZ2xvYmFsUmVz
b2x2ZUluc3RydWN0aW9uc1tsb3cgLSAxXSAhPSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkK
IGJvb2wgQ29kZUJsb2NrOjpoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3
ICsxNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEluc3RydWN0aW9u
KE9wY29kZSBvcGNvZGUpCiAgICAgICAgIHsKLSNpZiAhRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xB
U1NJQ19JTlRFUlBSRVRFUikKKyNpZiAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBvbmUgb2YgdGhlIHBvaW50ZXIgbWVt
YmVycyB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBzdHJ1Y3QgaXMg
aW5pdGlhbGl6ZWQsIHdoZW4gb3Bjb2RlIGlzIG5vdCBhIHBvaW50ZXIuCiAgICAgICAgICAgICB1
LmpzQ2VsbC5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0Fic3RyYWN0UEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9BYnN0cmFjdFBDLmNwcAkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMiArNDUsNiBAQCBBYnN0cmFjdFBDOjpBYnN0cmFjdFBDKEpTR2xvYmFsRGF0YSYgZ2xvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICAKLSNpZiBFTkFCTEUoQ0xBU1NJQ19J
TlRFUlBSRVRFUikKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7Ci0gICAgbV9wb2ludGVy
ID0gZXhlYy0+cmV0dXJuVlBDKCk7Ci0gICAgbV9tb2RlID0gSW50ZXJwcmV0ZXI7Ci0jZW5kaWYK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQWJzdHJhY3RQQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDIxICs2MCw2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgIEFic3RyYWN0UEMoSW5zdHJ1Y3Rpb24qIHZQQykKLSAgICAg
ICAgOiBtX3BvaW50ZXIodlBDKQotICAgICAgICAsIG1fbW9kZShJbnRlcnByZXRlcikKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzSW50ZXJwcmV0ZXJSZXR1cm5BZGRyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlID09IEludGVycHJldGVyOyB9Ci0gICAgSW5zdHJ1Y3Rpb24qIGlu
dGVycHJldGVyUmV0dXJuQWRkcmVzcygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFz
SW50ZXJwcmV0ZXJSZXR1cm5BZGRyZXNzKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW5zdHJ1Y3Rpb24qPihtX3BvaW50ZXIpOwotICAgIH0KLSNlbmRpZgotICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGUgIT0gTm9uZTsgfQogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTI5NDM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsOSArMTQ4LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVS
KQotICAgICAgICBJbnN0cnVjdGlvbiogcmV0dXJuVlBDKCkgY29uc3QgeyByZXR1cm4gdGhpc1tS
ZWdpc3RlckZpbGU6OlJldHVyblBDXS52UEMoKTsgfQotI2VuZGlmCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRWUEMoKSBjb25zdAogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAK
ICNpbmNsdWRlICJKSVQuaCIKICNlbmRpZgogCi0jZGVmaW5lIFdURl9VU0VfR0NDX0NPTVBVVEVE
X0dPVE9fV09SS0FST1VORCAoKEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVCkpICYmICFkZWZpbmVkKF9fbGx2bV9fKSkKKyNkZWZpbmUgV1RG
X1VTRV9HQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EIChFTkFCTEUoTExJTlQpICYmICFkZWZp
bmVkKF9fbGx2bV9fKSkKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtODgsMTQgKzg4LDYg
QEAgc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSgogICAgIHJldHVybiBz
Yy0+bG9jYWxEZXB0aCgpOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIAot
c3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIGNvbmNhdGVuYXRlU3RyaW5ncyhFeGVjU3RhdGUq
IGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKLXsKLSAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgc3RyaW5ncywgY291bnQpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENM
QVNTSUNfSU5URVJQUkVURVIpCi0KIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRlcnByZXRl
cjo6c2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2ssIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc2l6ZV90IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiB7CiAgICAgLy8g
VGhpcyBlbnN1cmVzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gb2Yg
emVybyBhcmd1bWVudHMgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuCkBAIC0xMjMsMTYgKzExNSw2IEBA
IEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRlcnByZXRlcjo6c2wKICAgICByZXR1cm4gbmV3
Q2FsbEZyYW1lOwogfQogCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi1zdGF0aWMg
TkVWRVJfSU5MSU5FIGJvb2wgaXNJbnZhbGlkUGFyYW1Gb3JJbihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uRGF0YSkKLXsKLSAgICBpZiAodmFs
dWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGV4Y2VwdGlvbkRhdGEg
PSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJpbiIgLCB2YWx1ZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkBAIC0yNjgsNTkg
KzI1MCwyMiBAQCBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIG1fY2xhc3NpY0Vu
YWJsZWQoZmFsc2UpCiB7CiB9CiAKIEludGVycHJldGVyOjp+SW50ZXJwcmV0ZXIoKQogewotI2lm
IEVOQUJMRShMTElOVCkgJiYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSAgICBpZiAo
bV9jbGFzc2ljRW5hYmxlZCkKLSAgICAgICAgZGVsZXRlW10gbV9vcGNvZGVUYWJsZTsKLSNlbmRp
ZgogfQogCiB2b2lkIEludGVycHJldGVyOjppbml0aWFsaXplKGJvb2wgY2FuVXNlSklUKQogewog
ICAgIFVOVVNFRF9QQVJBTShjYW5Vc2VKSVQpOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBMTEludCwg
dGhlbiB3ZSBzaG91bGRuJ3QgYmUgYnVpbGRpbmcgYW55IGtpbmQgb2YgY2xhc3NpYyBpbnRlcnBy
ZXRlci4KLSNpZiBFTkFCTEUoTExJTlQpICYmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQot
I2Vycm9yICJCdWlsZGluZyBib3RoIExMSW50IGFuZCB0aGUgQ2xhc3NpYyBJbnRlcnByZXRlciBp
cyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgaXQgZG9lc24ndCBtYWtlIHNlbnNlLiIKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSNpZiBFTkFCTEUoTExJTlQpCisj
aWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykgJiYgRU5BQkxFKExMSU5UKQogICAgIG1f
b3Bjb2RlVGFibGUgPSBMTEludDo6b3Bjb2RlTWFwKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1PcGNvZGVJRHM7ICsraSkKICAgICAgICAgbV9vcGNvZGVJRFRhYmxlLmFkZChtX29wY29k
ZVRhYmxlW2ldLCBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oaSkpOwotICAgIG1fY2xhc3NpY0VuYWJs
ZWQgPSBmYWxzZTsKLQotI2VsaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBS
RVRFUikKLSAgICBpZiAoY2FuVXNlSklUKSB7Ci0gICAgICAgIC8vIElmIHRoZSBKSVQgaXMgcHJl
c2VudCwgZG9uJ3QgdXNlIGp1bXAgZGVzdGluYXRpb25zIGZvciBvcGNvZGVzLgotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7Ci0gICAgICAgICAgICBPcGNv
ZGUgb3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGkp
KTsKLSAgICAgICAgICAgIG1fb3Bjb2RlVGFibGVbaV0gPSBvcGNvZGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9jbGFzc2ljRW5hYmxlZCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBy
aXZhdGVFeGVjdXRlKEluaXRpYWxpemVBbmRSZXR1cm4sIDAsIDApOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkKLSAgICAgICAgICAgIG1f
b3Bjb2RlSURUYWJsZS5hZGQobV9vcGNvZGVUYWJsZVtpXSwgc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+
KGkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fY2xhc3NpY0VuYWJsZWQgPSB0cnVlOwotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotCi0j
ZWxzZSAvLyAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICBtX2NsYXNzaWNFbmFibGVkID0gdHJ1ZTsKLSNlbHNlCi0gICAg
bV9jbGFzc2ljRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCi0jZW5kaWYgLy8gIUVOQUJMRShDT01Q
VVRFRF9HT1RPX09QQ09ERVMpCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7CkBAIC00MzQsMTIgKzM3OSwxMiBAQCBib29sIEludGVycHJldGVyOjppc09w
Y29kZShPcGNvZGUgb3Bjb2RlCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
ICNpZiAhRU5BQkxFKExMSU5UKQotICAgIGlmICghbV9jbGFzc2ljRW5hYmxlZCkKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE9wY29kZUlEPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvcGNv
ZGUpKSA8PSBvcF9lbmQ7Ci0jZW5kaWYKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wY29kZSkpIDw9IG9wX2VuZDsKKyNlbHNlCiAgICAg
cmV0dXJuIG9wY29kZSAhPSBIYXNoVHJhaXRzPE9wY29kZT46OmVtcHR5VmFsdWUoKQogICAgICAg
ICAmJiAhSGFzaFRyYWl0czxPcGNvZGU+Ojppc0RlbGV0ZWRWYWx1ZShvcGNvZGUpCiAgICAgICAg
ICYmIG1fb3Bjb2RlSURUYWJsZS5jb250YWlucyhvcGNvZGUpOworI2VuZGlmCiAjZWxzZQogICAg
IHJldHVybiBvcGNvZGUgPj0gMCAmJiBvcGNvZGUgPD0gb3BfZW5kOwogI2VuZGlmCkBAIC00ODQs
MTkgKzQyOSw4IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAg
ICAvLyBCZWNhdXNlIG9mIGhvdyB0aGUgSklUIHJlY29yZHMgY2FsbCBzaXRlLT5ieXRlY29kZSBv
ZmZzZXQKICAgICAvLyBpbmZvcm1hdGlvbiB0aGUgSklUIHJlcG9ydHMgdGhlIGJ5dGVjb2RlT2Zm
c2V0IGZvciB0aGUgcmV0dXJuUEMKICAgICAvLyB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBvcGNvZGUgdGhhdCBoYXMgY2F1c2VkIHRoZSBjYWxsLgotICAgIC8vIEluIHRoZSBpbnRlcnBy
ZXRlciB3ZSBoYXZlIGFuIGFjdHVhbCByZXR1cm4gYWRkcmVzcywgd2hpY2ggaXMKLSAgICAvLyB0
aGUgYmVnaW5uaW5nIG9mIG5leHQgaW5zdHJ1Y3Rpb24gdG8gZXhlY3V0ZS4gVG8gZ2V0IGFuIG9m
ZnNldAotICAgIC8vIGluc2lkZSB0aGUgY2FsbCBpbnN0cnVjdGlvbiB0aGF0IHRyaWdnZXJlZCB0
aGUgZXhjZXB0aW9uIHdlCi0gICAgLy8gaGF2ZSB0byBzdWJ0cmFjdCAxLgotI2lmIEVOQUJMRShK
SVQpICYmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmIChjYWxsZXJGcmFtZS0+
Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNvZGVC
bG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7
Ci0gICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVP
ZmZzZXQoY2FsbEZyYW1lLT5yZXR1cm5WUEMoKSkgLSAxOwotI2VsaWYgRU5BQkxFKEpJVCkgfHwg
RU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKICAgICBieXRl
Y29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxG
cmFtZS0+cmV0dXJuUEMoKSk7Ci0jZWxzZQotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblZQQygpKSAtIDE7CiAjZW5kaWYKIAog
ICAgIGNhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwpAQCAtNTYyLDE4ICs0OTYsMTIgQEAgc3RhdGlj
IGludCBnZXRMaW5lTnVtYmVyRm9yQ2FsbEZyYW1lKEpTRwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAg
ICAgcmV0dXJuIC0xOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICgh
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZH
Q29kZSgpIC0gMSk7Ci0jZW5kaWYKICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsRnJhbWUtPmNvZGVPcmlnaW5J
bmRleEZvckRGRygpKS5ieXRlY29kZUluZGV4KTsKICNlbmRpZgogICAgIHJldHVybiBjb2RlQmxv
Y2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0
Rm9yTm9uREZHQ29kZSgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIC0xOwogI2VuZGlmCiB9CiAKQEAg
LTYwNCwxMyArNTMyLDYgQEAgc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2Jh
bAogICAgIGlmIChjYWxsZnJhbWVJc0hvc3QpIHsKICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBk
ZWFsIHdpdGggaW5saW5lIGNhbGxmcmFtZXMgaGVyZSBhcyBieSBkZWZpbml0aW9uIHdlIGhhdmVu
J3QKICAgICAgICAgLy8gaW5saW5lZCBhIGNhbGwgd2l0aCBhbiBpbnRlcnZlbmluZyBuYXRpdmUg
Y2FsbCBmcmFtZS4KLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgaWYg
KCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQg
PSBjYWxsZXJGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7Ci0gICAgICAgICAg
ICBsaW5lTnVtYmVyID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsK
LSAgICAgICAgfQotI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQogI2lm
IEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrICYmIGNhbGxlckNv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewpAQCAtNjIxLDEzICs1
NDIsNiBAQCBzdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFsCiAgICAgICAg
ICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxlckZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRG
R0NvZGUoKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQ
UkVURVIpCi0gICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxs
RnJhbWUtPnJldHVyblZQQygpKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2Rl
QmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCAtIDEpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhbGxlckZyYW1lOwotICAgICAgICB9Ci0jZW5kaWYKICNpZiBF
TkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAgICAgI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5pc0lubGluZUNhbGxGcmFtZSgpKSB7CkBAIC02NjUsMTYgKzU3
OSw3IEBAIHN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oSlNHbG9iYWwKIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGNvbnN0IFN0cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZy
YW1lRmxhZygpKTsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNpZiBFTkFCTEUo
SklUKQotICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3Vy
Y2VVUkwoKTsKLSNlbmRpZgotICAgIHJldHVybiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5zb3Vy
Y2UoKS0+dXJsKCk7Ci0KLSNlbHNlCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3Rh
Y2tGcmFtZUNvZGVUeXBlIGdldFN0YWNrRnJhbWVDb2RlVHlwZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTk4MSwxNCArODg2LDkgQEAgZmFpbGVkSlNPTlA6CiAgICAgICAgIG1fcmVlbnRyeURl
cHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTElu
dDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlKTsK
LSNlbHNlIC8vICFFTkFCTEUoTExJTlRfQ19MT09QKQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IGlmICghY2xhc3NpY0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdl
bmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBz
Y29wZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgZWxzZQorI2VsaWYgRU5BQkxFKEpJVCkKKyAg
ICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fcmVn
aXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0gICAgICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWws
ICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lKTsKLSNlbmRpZiAvLyAhRU5BQkxFKExMSU5U
X0NfTE9PUCkKIAogICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KQEAgLTEwNTcsMTQg
Kzk1Nyw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAg
ICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAg
ICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwotI2Vsc2UgLy8gRU5BQkxFKExMSU5UX0Nf
TE9PUCkKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgaWYgKCFjbGFzc2ljRW5hYmxlZCgp
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3
Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgZWxz
ZQorI2VsaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3Jl
Z2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxEYXRhKCkpOwog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4
ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSk7Ci0jZW5kaWYgLy8g
IUVOQUJMRShMTElOVF9DX0xPT1ApCiAKICAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAg
ICAgICAgIH0KQEAgLTExNTYsMTQgKzEwNTEsOSBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5B
QkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhl
Y3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUp
OwotI2Vsc2UgLy8gIUVOQUJMRShMTElOVF9DX0xPT1ApCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgICAgIGlmICghY2xhc3NpY0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNv
bnN0cnVjdCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVj
dERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIGVsc2UKKyNlbGlmIEVOQUJM
RShKSVQpCisgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fcmVnaXN0
ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVF
eGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUpOwotI2VuZGlmIC8v
ICFFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAg
ICAgICAgfQogCkBAIC0xMjYzLDIxICsxMTUzLDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShDYWxsRnJhbWVDbAogICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5BQkxF
KExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNs
b3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7Ci0j
ZWxzZSAvLyAhRU5BQkxFKExMSU5UX0NfTE9PUCkKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJM
RShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBpZiAoY2xvc3VyZS5uZXdDYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0g
Y2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhl
Y3V0ZSgmbV9yZWdpc3RlckZpbGUsIGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBjbG9zdXJlLmdsb2Jh
bERhdGEpOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0j
ZW5kaWYKKyNlbGlmIEVOQUJMRShKSVQpCisgICAgICAgIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fcmVnaXN0
ZXJGaWxlLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAg
ICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIGNs
b3N1cmUubmV3Q2FsbEZyYW1lKTsKLSNlbmRpZgotI2VuZGlmIC8vICFFTkFCTEUoTExJTlRfQ19M
T09QKQotCiAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCkBAIC0xMzY4LDIwICsx
MjQ2LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAg
ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xv
b3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9ldmFsX3Byb2xvZ3VlKTsKLSNlbHNlIC8v
ICFFTkFCTEUoTExJTlRfQ19MT09QKQotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKENMQVNT
SUNfSU5URVJQUkVURVIpCi0gICAgICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5V
c2VKSVQoKSkKLSNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0gZXZhbC0+Z2VuZXJhdGVkSklU
Q29kZSgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9i
YWxEYXRhKCkpOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICBlbHNl
Ci0jZW5kaWYKKyNlbGlmIEVOQUJMRShKSVQpCisgICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVy
YXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29w
ZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShDTEFT
U0lDX0lOVEVSUFJFVEVSKQotICAgICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSk7Ci0jZW5kaWYKLSNlbmRpZiAvLyAh
RU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAgICB9CiAK
QEAgLTE0MjAsMzc1OCArMTI4Nyw2MiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6
ZGVidWcoQ2FsCiAgICAgfQogfQogICAgIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVS
KQotTkVWRVJfSU5MSU5FIEpTU2NvcGUqIEludGVycHJldGVyOjpjcmVhdGVOYW1lU2NvcGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCitKU1ZhbHVlIEludGVy
cHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcih2UENbMV0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBKU05hbWVTY29wZSogc2NvcGUg
PSBKU05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1
dGVzKTsKLSAgICByZXR1cm4gc2NvcGU7CisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFt
ZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7
CisgICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwor
CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZShmdW5jdGlvbkNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgYXJndW1lbnRz
LT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVu
dHMpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlE
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24q
IHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgSW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVjdXJzaXZl
IGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9u
LgotICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNh
bGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICAvLyBVbmNhY2hl
YWJsZTogZ2l2ZSB1cC4KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkgewotICAgICAgICB2
UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZnVuY3Rpb25DYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAg
aWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgdlBDWzBdID0g
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENhY2hlIG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0
IG5leHQgdGltZS4KLSAgICBTdHJ1Y3R1cmUqIGxhc3RTdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1
Y3R1cmUuZ2V0KCk7Ci0gICAgaWYgKHN0cnVjdHVyZSAhPSBsYXN0U3RydWN0dXJlKSB7Ci0gICAg
ICAgIC8vIEZpcnN0IG1pc3M6IHJlY29yZCBTdHJ1Y3R1cmUgdG8gY29tcGFyZSBhZ2FpbnN0IG5l
eHQgdGltZS4KLSAgICAgICAgaWYgKCFsYXN0U3RydWN0dXJlKSB7Ci0gICAgICAgICAgICB2UENb
NF0udS5zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gU2Vjb25kIG1pc3M6IGdpdmUgdXAuCi0gICAgICAgIHZQQ1swXSA9
IGdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBDYWNoZSBoaXQ6IFNwZWNpYWxpemUgaW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1
Y3R1cmVzLgotCi0gICAgLy8gSWYgYmFzZUNlbGwgIT0gc2xvdC5iYXNlKCksIHRoZW4gYmFzZUNl
bGwgbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLSAgICBpZiAoYmFzZUNlbGwg
IT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9p
ZF9nZW5lcmljKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN0cnVjdHVyZSB0
cmFuc2l0aW9uLCBjYWNoZSB0cmFuc2l0aW9uIGluZm8KLSAgICBpZiAoc2xvdC50eXBlKCkgPT0g
UHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9i
eV9pZF9nZW5lcmljKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGludCBs
aW5lTnVtYmVyOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVu
Y3Rpb25DYWxsRnJhbWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAoIWNh
bGxlckZyYW1lKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgSlNWYWx1ZSBjYWxsZXIg
PSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CisgICAgaWYgKCFjYWxsZXIpCisgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgICAgICAvLyBwdXRfYnlfaWRfdHJhbnNpdGlvbiBjaGVja3MgdGhl
IHByb3RvdHlwZSBjaGFpbiBmb3Igc2V0dGVycy4KLSAgICAgICAgbm9ybWFsaXplUHJvdG90eXBl
Q2hhaW4oY2FsbEZyYW1lLCBiYXNlQ2VsbCk7Ci0gICAgICAgIEpTQ2VsbCogb3duZXIgPSBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgLy8gR2V0IHRoZSBwcm90b3R5
cGUgaGVyZSBiZWNhdXNlIHRoZSBjYWxsIHRvIHByb3RvdHlwZUNoYWluIGNvdWxkIGNhdXNlIGEg
Ci0gICAgICAgIC8vIEdDIGFsbG9jYXRpb24sIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gaGFwcGVu
IHdoaWxlIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgCi0gICAgICAgIC8vIGluaXRpYWxpemluZyB0
aGUgdW5pb24uCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bj
b2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKTsKLSAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJl
LnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwotICAgICAg
ICB2UENbNV0udS5zdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICB2UENbNl0udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICAg
ICAgQVNTRVJUKHZQQ1s2XS51LnN0cnVjdHVyZUNoYWluKTsKLSAgICAgICAgdlBDWzddID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFNraXAgb3ZlciBmdW5j
dGlvbiBiaW5kaW5ncy4KKyAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkpOworICAgIHdoaWxl
IChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpzX2luZm8pKSB7
CisgICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNhbGxlckZyYW1lLCBsaW5lTnVtYmVyLCBieXRlY29kZU9mZnNldCk7CisgICAgICAg
IGlmICghY2FsbGVyRnJhbWUpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAg
IGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCFjYWxsZXIpCisg
ICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgdlBDWzBdID0gZ2V0T3Bj
b2RlKG9wX3B1dF9ieV9pZF9yZXBsYWNlKTsKLSAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dW5jYWNoZVB1dEJ5SUQo
Q29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQykKLXsKLSAgICB2UENbMF0gPSBnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkKTsKLSAgICB2UENbNF0gPSAwOworICAgIHJldHVybiBjYWxsZXI7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBT
dHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSYgZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgLy8gUmVj
dXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3Ry
dWN0aW9uLgotICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9p
ZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nl
c3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpIHsKLSAgICAg
ICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5h
bWUgPT0gY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHZQQ1sw
XSA9IGdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfZ2V0X3N0cmluZ19sZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gVW5jYWNoZWFibGU6IGdpdmUgdXAuCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
IHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRf
Z2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBtaXNzCi0g
ICAgU3RydWN0dXJlKiBsYXN0U3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdldCgpOwot
ICAgIGlmIChzdHJ1Y3R1cmUgIT0gbGFzdFN0cnVjdHVyZSkgewotICAgICAgICAvLyBGaXJzdCBt
aXNzOiByZWNvcmQgU3RydWN0dXJlIHRvIGNvbXBhcmUgYWdhaW5zdCBuZXh0IHRpbWUuCi0gICAg
ICAgIGlmICghbGFzdFN0cnVjdHVyZSkgewotICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJl
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFNlY29uZCBtaXNzOiBnaXZlIHVwLgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3Bf
Z2V0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2Fj
aGUgaGl0OiBTcGVjaWFsaXplIGluc3RydWN0aW9uIGFuZCByZWYgU3RydWN0dXJlcy4KLQotICAg
IGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAoc2xv
dC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSkgewotICAgICAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0
dGVyOgotICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJf
c2VsZik7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlTbG90OjpDdXN0b206Ci0gICAgICAg
ICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmKTsKLSAgICAg
ICAgICAgIHZQQ1s1XSA9IHNsb3QuY3VzdG9tR2V0dGVyKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRf
YnlfaWRfc2VsZik7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIHZQQ1swXSA9IGdl
dE9wY29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGNhbGxGcmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgp
KTsKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJh
c2UoKSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0KLSAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEg
bG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0
cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KLSAgICAgICAgaWYgKGJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgYmFzZU9iamVjdC0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zm
c2V0ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQorICAgIGZ1bmN0aW9uID0gSlNWYWx1ZSgpOwor
ICAgIGxpbmVOdW1iZXIgPSAtMTsKKyAgICBzb3VyY2VVUkwgPSBTdHJpbmcoKTsKIAotICAgICAg
ICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUo
KSkgewotICAgICAgICBjYXNlIFByb3BlcnR5U2xvdDo6R2V0dGVyOgotICAgICAgICAgICAgdlBD
WzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8pOwotICAgICAgICAgICAg
dlBDWzZdID0gb2Zmc2V0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVy
dHlTbG90OjpDdXN0b206Ci0gICAgICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5
X2lkX2N1c3RvbV9wcm90byk7Ci0gICAgICAgICAgICB2UENbNl0gPSBzbG90LmN1c3RvbUdldHRl
cigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2
UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX3Byb3RvKTsKLSAgICAgICAgICAgIHZQQ1s2
XSA9IG9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZQQ1s1
XS51LnN0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6
ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgIGlmICghY291bnQp
IHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzd2l0
Y2ggKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkpIHsKLSAgICBjYXNlIFByb3BlcnR5U2xvdDo6
R2V0dGVyOgotICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbik7Ci0gICAgICAgIHZQQ1s3XSA9IG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQcm9wZXJ0eVNsb3Q6OkN1c3RvbToKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dl
dF9ieV9pZF9jdXN0b21fY2hhaW4pOwotICAgICAgICB2UENbN10gPSBzbG90LmN1c3RvbUdldHRl
cigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfZ2V0X2J5X2lkX2NoYWluKTsKLSAgICAgICAgdlBDWzddID0gb2Zmc2V0OwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgdlBDWzRdLnUuc3RydWN0dXJlLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICB2UENbNV0udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHByb3RvdHlwZUNoYWluKTsKLSAgICB2UENb
Nl0gPSBjb3VudDsKLX0KLQotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnVuY2FjaGVH
ZXRCeUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpCi17Ci0gICAgdlBDWzBdID0gZ2V0
T3Bjb2RlKG9wX2dldF9ieV9pZCk7Ci0gICAgdlBDWzRdID0gMDsKLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotCi0jaWYgIUVOQUJMRShMTElOVF9DX0xPT1ApCi0K
LUpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywg
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2
ZSB0byBwdXQgdGhpcyBjb2RlCi0gICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJlbHMgYXJlIG9u
bHkgaW4gc2NvcGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKFVOTElLRUxZKGZsYWcg
PT0gSW5pdGlhbGl6ZUFuZFJldHVybikpIHsKLSAgICAgICAgI2lmIEVOQUJMRShDT01QVVRFRF9H
T1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgICAgICAjZGVmaW5lIExJU1RfT1BDT0RF
X0xBQkVMKGlkLCBsZW5ndGgpICYmaWQsCi0gICAgICAgICAgICAgICAgc3RhdGljIE9wY29kZSBs
YWJlbHNbXSA9IHsgRk9SX0VBQ0hfT1BDT0RFX0lEKExJU1RfT1BDT0RFX0xBQkVMKSB9OwotICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChsYWJl
bHMpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG1fb3Bjb2RlVGFibGVbaV0gPSBsYWJlbHNb
aV07Ci0gICAgICAgICAgICAjdW5kZWYgTElTVF9PUENPREVfTEFCRUwKLSAgICAgICAgI2VuZGlm
IC8vIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChtX2luaXRpYWxpemVkKTsK
LSAgICBBU1NFUlQobV9jbGFzc2ljRW5hYmxlZCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSNp
ZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAvLyBNaXhpbmcgSW50ZXJwcmV0ZXIg
KyBKSVQgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
Y2FuVXNlSklUKCkpCi0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLQotI2lmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBVTlVTRURfUEFSQU0o
cmVnaXN0ZXJGaWxlKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLSAgICByZXR1cm4g
SlNWYWx1ZSgpOwotI2Vsc2UKLQotICAgIEFTU0VSVChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS50
b3BDYWxsRnJhbWUgPT0gY2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
OwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICBDYWxsRnJhbWUqKiB0b3BDYWxs
RnJhbWVTbG90ID0gJmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZTsKLQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJbnN0cnVjdGlvbiogdlBD
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIHVuc2lnbmVkIHRpY2tD
b3VudCA9IGdsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnRpY2tzVW50aWxOZXh0Q2hlY2soKTsK
LSAgICBKU1ZhbHVlIGZ1bmN0aW9uUmV0dXJuVmFsdWU7Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKGdsb2JhbERhdGEt
PmV4Y2VwdGlvbiAhPSBKU1ZhbHVlKCkpKSB7IFwKLSAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVl
ID0gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOyBcCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBc
Ci0gICAgICAgIH0gXAotICAgIH0gd2hpbGUgKDApCi0KLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRT
KQotICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0KLSNk
ZWZpbmUgQ0hFQ0tfRk9SX1RJTUVPVVQoKSBcCi0gICAgaWYgKCEtLXRpY2tDb3VudCkgeyBcCi0g
ICAgICAgIGlmIChnbG9iYWxEYXRhLT50ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpIHx8IGds
b2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLmRpZFRpbWVPdXQoY2FsbEZyYW1lKSkgeyBcCi0gICAg
ICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGpzTnVsbCgpOyBcCi0gICAgICAgICAgICBnb3RvIHZt
X3Rocm93OyBcCi0gICAgICAgIH0gXAotICAgICAgICB0aWNrQ291bnQgPSBnbG9iYWxEYXRhLT50
aW1lb3V0Q2hlY2tlci50aWNrc1VudGlsTmV4dENoZWNrKCk7IFwKLSAgICB9Ci0gICAgCi0jaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAjZGVmaW5lIFNBTVBMRShjb2RlQmxvY2ssIHZQ
QykgbV9zYW1wbGVyLT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCi0jZWxzZQotICAgICNkZWZpbmUg
U0FNUExFKGNvZGVCbG9jaywgdlBDKQotI2VuZGlmCi0KLSNkZWZpbmUgVVBEQVRFX0JZVEVDT0RF
X09GRlNFVCgpIFwKLSAgICBkbyB7XAotICAgICAgICBjYWxsRnJhbWUtPnNldEJ5dGVjb2RlT2Zm
c2V0Rm9yTm9uREZHQ29kZSh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmRhdGEoKSAr
IDEpO1wKLSAgICB9IHdoaWxlICgwKQotCi0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICAjZGVmaW5lIE5FWFRfSU5TVFJVQ1RJT04oKSBTQU1QTEUoY29k
ZUJsb2NrLCB2UEMpOyBnb3RvICp2UEMtPnUub3Bjb2RlCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFU
UykKLSAgICAjZGVmaW5lIERFRklORV9PUENPREUob3Bjb2RlKSBcCi0gICAgICAgIG9wY29kZTpc
Ci0gICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVjb3JkSW5zdHJ1Y3Rpb24ob3Bjb2RlKTtcCi0g
ICAgICAgICAgICBVUERBVEVfQllURUNPREVfT0ZGU0VUKCk7Ci0jZWxzZQotICAgICNkZWZpbmUg
REVGSU5FX09QQ09ERShvcGNvZGUpIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwot
I2VuZGlmIC8vICFFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSNlbHNlIC8vICFFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAg
ICNkZWZpbmUgTkVYVF9JTlNUUlVDVElPTigpIFNBTVBMRShjb2RlQmxvY2ssIHZQQyk7IGdvdG8g
aW50ZXJwcmV0ZXJMb29wU3RhcnQKLSNpZiBFTkFCTEUoT1BDT0RFX1NUQVRTKQotICAgICNkZWZp
bmUgREVGSU5FX09QQ09ERShvcGNvZGUpIFwKLSAgICAgICAgY2FzZSBvcGNvZGU6XAotICAgICAg
ICAgICAgT3Bjb2RlU3RhdHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7XAotICAgICAgICAg
ICAgVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERFRklORV9P
UENPREUob3Bjb2RlKSBjYXNlIG9wY29kZTogVVBEQVRFX0JZVEVDT0RFX09GRlNFVCgpOwotI2Vu
ZGlmCi0gICAgd2hpbGUgKDEpIHsgLy8gaXRlcmF0b3IgbG9vcCBiZWdpbnMKLSAgICBpbnRlcnBy
ZXRlckxvb3BTdGFydDo7Ci0gICAgc3dpdGNoICh2UEMtPnUub3Bjb2RlKQotI2VuZGlmIC8vICFF
TkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHsKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX25ld19vYmplY3QpIHsKLSAgICAgICAgLyogbmV3X29iamVjdCBkc3QocikK
LQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IGVtcHR5IE9iamVjdCBpbnN0YW5jZSB1c2lu
ZyB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgY29uc3RydWN0b3IsIGFuZCBwdXRzIHRoZSByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVl
KGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSkpOwotCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX25ld19vYmplY3QpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3BfbmV3X2FycmF5KSB7Ci0gICAgICAgIC8qIG5ld19h
cnJheSBkc3QocikgZmlyc3RBcmcocikgYXJnQ291bnQobikKLQotICAgICAgICAgICBDb25zdHJ1
Y3RzIGEgbmV3IEFycmF5IGluc3RhbmNlIHVzaW5nIHRoZSBvcmlnaW5hbAotICAgICAgICAgICBj
b25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAg
ICAgIFRoZSBhcnJheSB3aWxsIGNvbnRhaW4gYXJnQ291bnQgZWxlbWVudHMgd2l0aCB2YWx1ZXMK
LSAgICAgICAgICAgdGFrZW4gZnJvbSByZWdpc3RlcnMgc3RhcnRpbmcgYXQgcmVnaXN0ZXIgZmly
c3RBcmcuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgZmlyc3RBcmcgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJn
Q291bnQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IEpTVmFsdWUoY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCByZWludGVycHJldF9jYXN0
PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmaXJzdEFyZ10pLCBhcmdDb3VudCkp
OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19hcnJheSk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9uZXdfYXJy
YXlfYnVmZmVyKSB7Ci0gICAgICAgIC8qIG5ld19hcnJheV9idWZmZXIgZHN0KHIpIGluZGV4KG4p
IGFyZ0NvdW50KG4pCi0gICAgICAgICAKLSAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgQXJyYXkg
aW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1
dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICBUaGUgYXJyYXkgYmUgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUgdmFsdWVzIGZyb20gY29uc3RhbnRCdWZmZXJbaW5kZXhdCi0gICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZpcnN0QXJnID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBD
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1Zh
bHVlKGNvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihm
aXJzdEFyZyksIGFyZ0NvdW50KSk7Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9uZXdfYXJyYXkpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQot
ICAgIERFRklORV9PUENPREUob3BfbmV3X3JlZ2V4cCkgewotICAgICAgICAvKiBuZXdfcmVnZXhw
IGRzdChyKSByZWdFeHAocmUpCi0KLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBSZWdFeHAg
aW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAgICAgICAgIGNvbnN0cnVjdG9yIGZyb20g
cmVnZXhwIHJlZ0V4cCwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbgotICAgICAgICAgICByZWdpc3Rl
ciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGNvZGVCbG9jay0+cmVnZXhwKHZQQ1syXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mg
c3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpOwotICAgICAgICAgICAgZ290byB2bV90
aHJvdzsKLSAgICAgICAgfQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpT
VmFsdWUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5yZWdF
eHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfbmV3X3JlZ2V4cCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9tb3YpIHsKLSAgICAgICAgLyogbW92IGRzdChyKSBzcmMocikKLQot
ICAgICAgICAgICBDb3BpZXMgcmVnaXN0ZXIgc3JjIHRvIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBjYWxsRnJhbWUtPnIoc3JjKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9tb3YpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfZXEpIHsKLSAgICAgICAgLyogZXEgZHN0KHIpIHNyYzEocikgc3JjMihy
KQotCi0gICAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgYW5kIHJlZ2lzdGVy
IHNyYzIgYXJlIGVxdWFsLAotICAgICAgICAgICBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc9PScg
b3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAgICAgYXMgYSBib29sZWFuIGlu
IHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVy
YW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENb
M10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBz
cmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
anNCb29sZWFuKHNyYzEuYXNJbnQzMigpID09IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihKU1ZhbHVlOjplcXVh
bFNsb3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwotICAgICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBy
ZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lcSk7
Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShv
cF9lcV9udWxsKSB7Ci0gICAgICAgIC8qIGVxX251bGwgZHN0KHIpIHNyYyhyKQotCi0gICAgICAg
ICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYyBpcyBudWxsLCBhcyB3aXRoIHRoZSBFQ01B
U2NyaXB0ICchPScKLSAgICAgICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMg
YSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjID0gY2FsbEZyYW1lLT5yKHZQ
Q1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoc3JjLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNC
b29sZWFuKHRydWUpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZXFfbnVs
bCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHNyYy5pc0Nl
bGwoKSAmJiBzcmMuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2VxX251bGwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfbmVxKSB7Ci0gICAgICAgIC8qIG5lcSBkc3Qocikgc3Jj
MShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBh
bmQgcmVnaXN0ZXIgc3JjMiBhcmUgbm90Ci0gICAgICAgICAgIGVxdWFsLCBhcyB3aXRoIHRoZSBF
Q01BU2NyaXB0ICchPScgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1bHQg
YXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+
cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNh
bGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMx
LmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0ganNCb29sZWFuKHNyYzEuYXNJbnQzMigpICE9IHNyYzIuYXNJbnQzMigp
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bighSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfbmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX25lcV9udWxsKSB7Ci0gICAgICAgIC8qIG5lcV9udWxsIGRzdChy
KSBzcmMocikKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMgaXMgbm90
IG51bGwsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJyE9JwotICAgICAgICAgICBvcGVyYXRvciwg
YW5kIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgotICAgICAg
ICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBzcmMgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotCi0gICAg
ICAgIGlmIChzcmMuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfbmVxX251bGwpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IGpzQm9vbGVhbighc3JjLmlzQ2VsbCgpIHx8ICFzcmMuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25lcV9udWxsKTsKLSAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N0cmlj
dGVxKSB7Ci0gICAgICAgIC8qIHN0cmljdGVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAg
ICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIGFy
ZSBzdHJpY3RseQotICAgICAgICAgICBlcXVhbCwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPT09
JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4g
aW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29s
ZWFuKHJlc3VsdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfc3RyaWN0ZXEp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfbnN0cmljdGVxKSB7Ci0gICAgICAgIC8qIG5zdHJpY3RlcSBkc3Qocikgc3JjMShyKSBzcmMy
KHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBhbmQgcmVnaXN0
ZXIgc3JjMiBhcmUgbm90Ci0gICAgICAgICAgIHN0cmljdGx5IGVxdWFsLCBhcyB3aXRoIHRoZSBF
Q01BU2NyaXB0ICchPT0nIG9wZXJhdG9yLCBhbmQKLSAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0
IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUt
PnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBj
YWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBib29sIHJl
c3VsdCA9ICFKU1ZhbHVlOjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbnN0cmljdGVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX2xlc3MpIHsKLSAgICAgICAgLyogbGVzcyBkc3Qocikgc3JjMShy
KSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBs
ZXNzIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlw
dCAnPCcgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29s
ZWFuIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNCb29sZWFuKGpzTGVzczx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKLSAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sZXNzKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xl
c3NlcSkgewotICAgICAgICAvKiBsZXNzZXEgZHN0KHIpIHNyYzEocikgc3JjMihyKQotCi0gICAg
ICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvCi0gICAgICAgICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9
JyBvcGVyYXRvciwgYW5kCi0gICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4g
aW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oanNMZXNzRXE8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7Ci0gICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbGVzc2VxKTsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dy
ZWF0ZXIpIHsKLSAgICAgICAgLyogZ3JlYXRlciBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAg
ICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVn
aXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0
b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKLSAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGpz
TGVzczxmYWxzZT4oY2FsbEZyYW1lLCBzcmMyLCBzcmMxKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9F
WENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7
Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ3JlYXRlcik7Ci0gICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9ncmVhdGVyZXEp
IHsKLSAgICAgICAgLyogZ3JlYXRlcmVxIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAg
ICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0bwotICAgICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc+
PScgb3BlcmF0b3IsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFu
IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2
UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGpzTGVzc0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIsIHNyYzEpKTsKLSAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9ncmVhdGVyZXEp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfcHJlX2luYykgewotICAgICAgICAvKiBwcmVfaW5jIHNyY0RzdChyKQotCi0gICAgICAgICAg
IENvbnZlcnRzIHJlZ2lzdGVyIHNyY0RzdCB0byBudW1iZXIsIGFkZHMgb25lLCBhbmQgcHV0cyB0
aGUgcmVzdWx0Ci0gICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3JjRHN0LgotICAgICAgICAq
LwotICAgICAgICBpbnQgc3JjRHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSB2ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAodi5pc0lu
dDMyKCkgJiYgdi5hc0ludDMyKCkgPCBJTlRfTUFYKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNyY0RzdCkgPSBqc051bWJlcih2LmFzSW50MzIoKSArIDEpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodi50b051bWJlcihj
YWxsRnJhbWUpICsgMSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IHJlc3VsdDsKLSAgICAgICAg
fQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3ByZV9pbmMpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJlX2RlYykg
ewotICAgICAgICAvKiBwcmVfZGVjIHNyY0RzdChyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJl
Z2lzdGVyIHNyY0RzdCB0byBudW1iZXIsIHN1YnRyYWN0cyBvbmUsIGFuZCBwdXRzIHRoZSByZXN1
bHQKLSAgICAgICAgICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0gICAg
ICAgIGludCBzcmNEc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBj
YWxsRnJhbWUtPnIoc3JjRHN0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAm
JiB2LmFzSW50MzIoKSA+IElOVF9NSU4pCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoc3JjRHN0KSA9IGpzTnVtYmVyKHYuYXNJbnQzMigpIC0gMSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcih2LnRvTnVtYmVyKGNhbGxGcmFt
ZSkgLSAxKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHJlX2RlYyk7Ci0gICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wb3N0X2luYykgewotICAg
ICAgICAvKiBwb3N0X2luYyBkc3Qocikgc3JjRHN0KHIpCi0KLSAgICAgICAgICAgQ29udmVydHMg
cmVnaXN0ZXIgc3JjRHN0IHRvIG51bWJlci4gVGhlIG51bWJlciBpdHNlbGYgaXMKLSAgICAgICAg
ICAgd3JpdHRlbiB0byByZWdpc3RlciBkc3QsIGFuZCB0aGUgbnVtYmVyIHBsdXMgb25lIGlzIHdy
aXR0ZW4KLSAgICAgICAgICAgYmFjayB0byByZWdpc3RlciBzcmNEc3QuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjRHN0ID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHNyY0Rz
dCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAodi5pc0ludDMyKCkgJiYgdi5hc0ludDMyKCkgPCBJ
TlRfTUFYKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpz
TnVtYmVyKHYuYXNJbnQzMigpICsgMSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IHY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb3VibGUgbnVtYmVy
ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpzTnVtYmVyKG51bWJlciArIDEpOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcG9zdF9pbmMpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcG9zdF9kZWMp
IHsKLSAgICAgICAgLyogcG9zdF9kZWMgZHN0KHIpIHNyY0RzdChyKQotCi0gICAgICAgICAgIENv
bnZlcnRzIHJlZ2lzdGVyIHNyY0RzdCB0byBudW1iZXIuIFRoZSBudW1iZXIgaXRzZWxmIGlzCi0g
ICAgICAgICAgIHdyaXR0ZW4gdG8gcmVnaXN0ZXIgZHN0LCBhbmQgdGhlIG51bWJlciBtaW51cyBv
bmUgaXMgd3JpdHRlbgotICAgICAgICAgICBiYWNrIHRvIHJlZ2lzdGVyIHNyY0RzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBz
cmNEc3QgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUt
PnIoc3JjRHN0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2LmlzSW50MzIoKSAmJiB2LmFzSW50
MzIoKSA+IElOVF9NSU4pIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNE
c3QpID0ganNOdW1iZXIodi5hc0ludDMyKCkgLSAxKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gdjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSBjYWxsRnJhbWUtPnIoc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoY2FsbEZy
YW1lKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0ganNOdW1iZXIobnVtYmVyIC0gMSk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKG51bWJlcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wb3N0X2RlYyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF90
b19qc251bWJlcikgewotICAgICAgICAvKiB0b19qc251bWJlciBkc3Qocikgc3JjKHIpCi0KLSAg
ICAgICAgICAgQ29udmVydHMgcmVnaXN0ZXIgc3JjIHRvIG51bWJlciwgYW5kIHB1dHMgdGhlIHJl
c3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3Bl
cmFuZDsKLQotICAgICAgICBKU1ZhbHVlIHNyY1ZhbCA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFs
dWUoKTsKLQotICAgICAgICBpZiAoTElLRUxZKHNyY1ZhbC5pc051bWJlcigpKSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZyYW1lLT5yKHNyYyk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IHNyY1ZhbC50b051bWJlcihj
YWxsRnJhbWUpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihudW1iZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdG9fanNudW1iZXIpOwotICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbmVn
YXRlKSB7Ci0gICAgICAgIC8qIG5lZ2F0ZSBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgQ29u
dmVydHMgcmVnaXN0ZXIgc3JjIHRvIG51bWJlciwgbmVnYXRlcyBpdCwgYW5kIHB1dHMgdGhlCi0g
ICAgICAgICAgIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYyA9IGNhbGxGcmFt
ZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMuaXNJbnQz
MigpICYmIChzcmMuYXNJbnQzMigpICYgMHg3ZmZmZmZmZikpIC8vIG5vbi16ZXJvIGFuZCBubyBv
dmVyZmxvdwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJl
cigtc3JjLmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcigtc3JjLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF9uZWdhdGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfYWRkKSB7Ci0gICAgICAgIC8qIGFkZCBkc3Qocikgc3JjMShyKSBzcmMy
KHIpCi0KLSAgICAgICAgICAgQWRkcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyLCBh
bmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4gKEpTIGFkZCBt
YXkgYmUgc3RyaW5nIGNvbmNhdGVuYXRpb24gb3IKLSAgICAgICAgICAgbnVtZXJpYyBhZGQsIGRl
cGVuZGluZyBvbiB0aGUgdHlwZXMgb2YgdGhlIG9wZXJhbmRzLikKLSAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNh
bGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUg
c3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIo
KSB8IHNyYzIuYXNJbnQzMigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIo
KSArIHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQWRkKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0gICAgICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9h
ZGQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfbXVsKSB7Ci0gICAgICAgIC8qIG11bCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAg
ICAgICAgICAgTXVsdGlwbGllcyByZWdpc3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIChjb252
ZXJ0ZWQgdG8KLSAgICAgICAgICAgbnVtYmVycyksIGFuZCBwdXRzIHRoZSBwcm9kdWN0IGluIHJl
Z2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5k
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChzcmMxLmlzSW50MzIoKSAmJiBzcmMy
LmlzSW50MzIoKSAmJiAhKHNyYzEuYXNJbnQzMigpIHwgc3JjMi5hc0ludDMyKCkpID4+IDE1KSAv
LyBubyBvdmVyZmxvdwotICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0ganNOdW1iZXIoc3JjMS5hc0ludDMyKCkgKiBzcmMyLmFzSW50MzIoKSk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzcmMxLnRvTnVtYmVy
KGNhbGxGcmFtZSkgKiBzcmMyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9tdWwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfZGl2KSB7Ci0gICAgICAgIC8qIGRpdiBkc3QocikgZGl2aWRlbmQocikgZGl2aXNv
cihyKQotCi0gICAgICAgICAgIERpdmlkZXMgcmVnaXN0ZXIgZGl2aWRlbmQgKGNvbnZlcnRlZCB0
byBudW1iZXIpIGJ5IHRoZQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQg
dG8gbnVtYmVyKSwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHF1b3RpZW50IGluIHJlZ2lzdGVy
IGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUgZGl2aWRlbmQgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIGRpdmlzb3IgPSBjYWxsRnJhbWUtPnIodlBDWzNd
LnUub3BlcmFuZCkuanNWYWx1ZSgpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoZGl2aWRlbmQudG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3IudG9OdW1iZXIoY2FsbEZy
YW1lKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfZGl2KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX21vZCkgewotICAgICAgICAvKiBtb2QgZHN0KHIpIGRpdmlkZW5kKHIpIGRp
dmlzb3IocikKLQotICAgICAgICAgICBEaXZpZGVzIHJlZ2lzdGVyIGRpdmlkZW5kIChjb252ZXJ0
ZWQgdG8gbnVtYmVyKSBieQotICAgICAgICAgICByZWdpc3RlciBkaXZpc29yIChjb252ZXJ0ZWQg
dG8gbnVtYmVyKSwgYW5kIHB1dHMgdGhlCi0gICAgICAgICAgIHJlbWFpbmRlciBpbiByZWdpc3Rl
ciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlIGRpdmlkZW5kID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBkaXZpc29yID0gY2FsbEZyYW1lLT5yKHZQQ1sz
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoZGl2aWRlbmQuaXNJbnQzMigp
ICYmIGRpdmlzb3IuaXNJbnQzMigpICYmIGRpdmlzb3IuYXNJbnQzMigpICE9IDAgJiYgZGl2aXNv
ci5hc0ludDMyKCkgIT0gLTEpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoZGl2aWRlbmQuYXNJbnQzMigpICUgZGl2aXNvci5hc0ludDMyKCkpOwotICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9
IHJlc3VsdDsKLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX21vZCk7Ci0gICAg
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb252
ZXJzaW9uIHRvIGRvdWJsZSBtdXN0IGhhcHBlbiBvdXRzaWRlIHRoZSBjYWxsIHRvIGZtb2Qgc2lu
Y2UgdGhlCi0gICAgICAgIC8vIG9yZGVyIG9mIGFyZ3VtZW50IGV2YWx1YXRpb24gaXMgbm90IGd1
YXJhbnRlZWQuCi0gICAgICAgIGRvdWJsZSBkMSA9IGRpdmlkZW5kLnRvTnVtYmVyKGNhbGxGcmFt
ZSk7Ci0gICAgICAgIGRvdWJsZSBkMiA9IGRpdmlzb3IudG9OdW1iZXIoY2FsbEZyYW1lKTsKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihmbW9kKGQxLCBkMikpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gcmVzdWx0OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9tb2QpOwotICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfc3ViKSB7
Ci0gICAgICAgIC8qIHN1YiBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgU3Vi
dHJhY3RzIHJlZ2lzdGVyIHNyYzIgKGNvbnZlcnRlZCB0byBudW1iZXIpIGZyb20gcmVnaXN0ZXIK
LSAgICAgICAgICAgc3JjMSAoY29udmVydGVkIHRvIG51bWJlciksIGFuZCBwdXRzIHRoZSBkaWZm
ZXJlbmNlIGluCi0gICAgICAgICAgIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxG
cmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3Jj
MiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlm
IChzcmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSAmJiAhKChzcmMxLmFzSW50MzIoKSB8
IHNyYzIuYXNJbnQzMigpKSAmIDB4YzAwMDAwMDApKSAvLyBubyBvdmVyZmxvdwotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSAt
IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKHNyYzEudG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzIudG9OdW1iZXIo
Y2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9zdWIpOwotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbHNoaWZ0KSB7Ci0gICAgICAgIC8q
IGxzaGlmdCBkc3QocikgdmFsKHIpIHNoaWZ0KHIpCi0KLSAgICAgICAgICAgUGVyZm9ybXMgbGVm
dCBzaGlmdCBvZiByZWdpc3RlciB2YWwgKGNvbnZlcnRlZCB0byBpbnQzMikgYnkKLSAgICAgICAg
ICAgcmVnaXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0byB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVz
dWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50
IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9
IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYg
KHZhbC5pc0ludDMyKCkgJiYgc2hpZnQuaXNJbnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBqc051bWJlcih2YWwuYXNJbnQzMigpIDw8IChzaGlmdC5hc0lu
dDMyKCkgJiAweDFmKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcigodmFsLnRvSW50MzIoY2FsbEZyYW1lKSkgPDwgKHNoaWZ0LnRvVUludDMy
KGNhbGxGcmFtZSkgJiAweDFmKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xzaGlmdCk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yc2hpZnQp
IHsKLSAgICAgICAgLyogcnNoaWZ0IGRzdChyKSB2YWwocikgc2hpZnQocikKLQotICAgICAgICAg
ICBQZXJmb3JtcyBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0IG9mIHJlZ2lzdGVyIHZhbCAoY29udmVy
dGVkCi0gICAgICAgICAgIHRvIGludDMyKSBieSByZWdpc3RlciBzaGlmdCAoY29udmVydGVkIHRv
Ci0gICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0
LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSB2YWwgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNoaWZ0ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAodmFsLmlzSW50MzIoKSAmJiBzaGlmdC5pc0ludDMy
KCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHZh
bC5hc0ludDMyKCkgPj4gKHNoaWZ0LmFzSW50MzIoKSAmIDB4MWYpKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwudG9JbnQzMihjYWxs
RnJhbWUpKSA+PiAoc2hpZnQudG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKLSAgICAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfcnNoaWZ0KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX3Vyc2hpZnQpIHsKLSAgICAgICAgLyogcnNoaWZ0IGRzdChyKSB2
YWwocikgc2hpZnQocikKLQotICAgICAgICAgICBQZXJmb3JtcyBsb2dpY2FsIHJpZ2h0IHNoaWZ0
IG9mIHJlZ2lzdGVyIHZhbCAoY29udmVydGVkCi0gICAgICAgICAgIHRvIHVpbnQzMikgYnkgcmVn
aXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0bwotICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0
aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgdmFsID0gY2FsbEZyYW1lLT5yKHZQ
Q1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzaGlmdCA9IGNhbGxG
cmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWwuaXNV
SW50MzIoKSAmJiBzaGlmdC5pc0ludDMyKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoZHN0KSA9IGpzTnVtYmVyKHZhbC5hc0ludDMyKCkgPj4gKHNoaWZ0LmFzSW50MzIoKSAm
IDB4MWYpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKCh2YWwudG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LnRvVUludDMyKGNhbGxG
cmFtZSkgJiAweDFmKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Vyc2hpZnQpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfYml0YW5kKSB7Ci0g
ICAgICAgIC8qIGJpdGFuZCBkc3Qocikgc3JjMShyKSBzcmMyKHIpCi0KLSAgICAgICAgICAgQ29t
cHV0ZXMgYml0d2lzZSBBTkQgb2YgcmVnaXN0ZXIgc3JjMSAoY29udmVydGVkIHRvIGludDMyKQot
ICAgICAgICAgICBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRvIGludDMyKSwgYW5kIHB1
dHMgdGhlIHJlc3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyYzEg
PSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAg
ICAgICBpZiAoc3JjMS5pc0ludDMyKCkgJiYgc3JjMi5pc0ludDMyKCkpCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKHNyYzEuYXNJbnQzMigpICYgc3Jj
Mi5hc0ludDMyKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoc3JjMS50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMyLnRvSW50MzIoY2FsbEZy
YW1lKSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2JpdGFuZCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9iaXR4b3IpIHsKLSAgICAgICAgLyog
Yml0eG9yIGRzdChyKSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3
aXNlIFhPUiBvZiByZWdpc3RlciBzcmMxIChjb252ZXJ0ZWQgdG8gaW50MzIpCi0gICAgICAgICAg
IGFuZCByZWdpc3RlciBzcmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUgcmVz
dWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50
IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFt
ZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9
IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChz
cmMxLmlzSW50MzIoKSAmJiBzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoc3JjMS5hc0ludDMyKCkgXiBzcmMyLmFzSW50MzIo
KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihzcmMxLnRvSW50MzIoY2FsbEZyYW1lKSBeIHNyYzIudG9JbnQzMihjYWxsRnJhbWUpKTsKLSAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfYml0eG9yKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2JpdG9yKSB7Ci0gICAgICAgIC8qIGJpdG9yIGRzdChy
KSBzcmMxKHIpIHNyYzIocikKLQotICAgICAgICAgICBDb21wdXRlcyBiaXR3aXNlIE9SIG9mIHJl
Z2lzdGVyIHNyYzEgKGNvbnZlcnRlZCB0byBpbnQzMikKLSAgICAgICAgICAgYW5kIHJlZ2lzdGVy
IHNyYzIgKGNvbnZlcnRlZCB0byBpbnQzMiksIGFuZCBwdXRzIHRoZQotICAgICAgICAgICByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51
Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5y
KHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKHNyYzEuaXNJbnQzMigp
ICYmIHNyYzIuaXNJbnQzMigpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSBqc051bWJlcihzcmMxLmFzSW50MzIoKSB8IHNyYzIuYXNJbnQzMigpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHNyYzEudG9JbnQz
MihjYWxsRnJhbWUpIHwgc3JjMi50b0ludDMyKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9iaXRvcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5F
X09QQ09ERShvcF9ub3QpIHsKLSAgICAgICAgLyogbm90IGRzdChyKSBzcmMocikKLQotICAgICAg
ICAgICBDb21wdXRlcyBsb2dpY2FsIE5PVCBvZiByZWdpc3RlciBzcmMgKGNvbnZlcnRlZCB0bwot
ICAgICAgICAgICBib29sZWFuKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3Qu
Ci0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1l
KSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3Bfbm90KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVf
T1BDT0RFKG9wX2NoZWNrX2hhc19pbnN0YW5jZSkgewotICAgICAgICAvKiBjaGVja19oYXNfaW5z
dGFuY2UgY29uc3RydWN0b3IocikKLQotICAgICAgICAgICBDaGVjayAnY29uc3RydWN0b3InIGlz
IGFuIG9iamVjdCB3aXRoIHRoZSBpbnRlcm5hbCBwcm9wZXJ0eQotICAgICAgICAgICBbSGFzSW5z
dGFuY2VdIChpLmUuIGlzIGEgZnVuY3Rpb24gLi4uICpzaGFrZXMgaGVhZCBzYWRseSBhdAotICAg
ICAgICAgICBKU0MgQVBJKikuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgcmVnaXN0ZXIgY29uc3Ry
dWN0b3IgaXMgbm90Ci0gICAgICAgICAgIGFuIHZhbGlkIHBhcmFtZXRlciBmb3IgaW5zdGFuY2Vv
Zi4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBD
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0K
LSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsK
LQotICAgICAgICBpZiAoYmFzZVZhbC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBUeXBlSW5m
byBpbmZvID0gYXNPYmplY3QoYmFzZVZhbCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpOwotICAg
ICAgICAgICAgaWYgKGluZm8uaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY2hlY2tfaGFzX2luc3RhbmNlKTsK
LSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaW5mby5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgYmFzZVZhbCA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlVmFsKS0+bWV0aG9kVGFibGUo
KS0+Y3VzdG9tSGFzSW5zdGFuY2UoYXNPYmplY3QoYmFzZVZhbCksIGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpz
Qm9vbGVhbihyZXN1bHQpOwotCi0gICAgICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAg
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxG
cmFtZSwgImluc3RhbmNlb2YiICwgYmFzZVZhbCk7Ci0gICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0g
ICAgfQotICAgIERFRklORV9PUENPREUob3BfaW5zdGFuY2VvZikgewotICAgICAgICAvKiBpbnN0
YW5jZW9mIGRzdChyKSB2YWx1ZShyKSBjb25zdHJ1Y3RvcihyKSBjb25zdHJ1Y3RvclByb3RvKHIp
Ci0KLSAgICAgICAgICAgVGVzdHMgd2hldGhlciByZWdpc3RlciB2YWx1ZSBpcyBhbiBpbnN0YW5j
ZSBvZiByZWdpc3RlcgotICAgICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIGJvb2xl
YW4gcmVzdWx0IGluIHJlZ2lzdGVyCi0gICAgICAgICAgIGRzdC4gUmVnaXN0ZXIgY29uc3RydWN0
b3JQcm90byBtdXN0IGNvbnRhaW4gdGhlICJwcm90b3R5cGUiCi0gICAgICAgICAgIHByb3BlcnR5
IChub3QgdGhlIGFjdHVhbCBwcm90b3R5cGUpIG9mIHRoZSBvYmplY3QgaW4KLSAgICAgICAgICAg
cmVnaXN0ZXIgY29uc3RydWN0b3IuIFRoaXMgbG9va3VwIGlzIHNlcGFyYXRlZCBzbyB0aGF0Ci0g
ICAgICAgICAgIHBvbHltb3JwaGljIGlubGluZSBjYWNoaW5nIGNhbiBhcHBseS4KLQotICAgICAg
ICAgICBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVyIGNvbnN0cnVjdG9yIGlzIG5vdCBh
bgotICAgICAgICAgICBvYmplY3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgYmFzZVByb3RvID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAgICBib29sIHJl
c3VsdCA9IEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnIodmFsdWUpLmpzVmFsdWUoKSwgY2FsbEZyYW1lLT5yKGJhc2VQcm90bykuanNWYWx1ZSgpKTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoZHN0KSA9IGpzQm9vbGVhbihyZXN1bHQpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX2luc3RhbmNlb2YpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfdHlwZW9mKSB7Ci0gICAgICAgIC8qIHR5cGVvZiBkc3Qo
cikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdHlwZSBzdHJpbmcgZm9yIHNy
YyBhY2NvcmRpbmcgdG8gRUNNQVNjcmlwdAotICAgICAgICAgICBydWxlcywgYW5kIHB1dHMgdGhl
IHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2
UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGpzVHlwZVN0cmluZ0Zv
clZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpKSk7Ci0KLSAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdHlwZW9mKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZCkgewotICAg
ICAgICAvKiBpc191bmRlZmluZWQgZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVybWlu
ZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAgICAg
ICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgInVuZGVmaW5lZCIsIGFuZCBwdXRzIHRoZSByZXN1
bHQKLSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQg
ZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKTsKLSAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4odi5pc0NlbGwoKSA/
IHYuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSA6IHYuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfdW5kZWZpbmVkKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2lzX2Jvb2xlYW4pIHsKLSAg
ICAgICAgLyogaXNfYm9vbGVhbiBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJtaW5l
cyB3aGV0aGVyIHRoZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bwotICAgICAgICAg
ICB0aGUgRUNNQVNjcmlwdCBydWxlcyBpcyAiYm9vbGVhbiIsIGFuZCBwdXRzIHRoZSByZXN1bHQK
LSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGNhbGxGcmFt
ZS0+cihzcmMpLmpzVmFsdWUoKS5pc0Jvb2xlYW4oKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfaXNfYm9vbGVhbik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pc19udW1iZXIpIHsKLSAgICAgICAgLyogaXNfbnVt
YmVyIGRzdChyKSBzcmMocikKLQotICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5
cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCi0gICAgICAgICAgIHRoZSBFQ01BU2NyaXB0
IHJ1bGVzIGlzICJudW1iZXIiLCBhbmQgcHV0cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJl
Z2lzdGVyIGRzdC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVl
KCkuaXNOdW1iZXIoKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfaXNfbnVt
YmVyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2lzX3N0cmluZykgewotICAgICAgICAvKiBpc19zdHJpbmcgZHN0KHIpIHNyYyhyKQot
Ci0gICAgICAgICAgIERldGVybWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBh
Y2NvcmRpbmcgdG8KLSAgICAgICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgInN0cmluZyIs
IGFuZCBwdXRzIHRoZSByZXN1bHQKLSAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAg
ICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNy
YyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0ganNCb29sZWFuKGNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS5pc1N0cmluZygpKTsKLQot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19zdHJpbmcpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfaXNfb2JqZWN0KSB7
Ci0gICAgICAgIC8qIGlzX29iamVjdCBkc3Qocikgc3JjKHIpCi0KLSAgICAgICAgICAgRGV0ZXJt
aW5lcyB3aGV0aGVyIHRoZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bwotICAgICAg
ICAgICB0aGUgRUNNQVNjcmlwdCBydWxlcyBpcyAib2JqZWN0IiwgYW5kIHB1dHMgdGhlIHJlc3Vs
dAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oanNJc09i
amVjdFR5cGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkpKTsKLQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19vYmplY3QpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfaXNfZnVuY3Rpb24pIHsK
LSAgICAgICAgLyogaXNfZnVuY3Rpb24gZHN0KHIpIHNyYyhyKQotCi0gICAgICAgICAgIERldGVy
bWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KLSAgICAg
ICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgImZ1bmN0aW9uIiwgYW5kIHB1dHMgdGhlIHJl
c3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICovCi0gICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc0Jvb2xlYW4oanNJ
c0Z1bmN0aW9uVHlwZShjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkpKTsKLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9pc19mdW5jdGlvbik7Ci0gICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9pbikgewotICAgICAgICAvKiBp
biBkc3QocikgcHJvcGVydHkocikgYmFzZShyKQotCi0gICAgICAgICAgIFRlc3RzIHdoZXRoZXIg
cmVnaXN0ZXIgYmFzZSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCByZWdpc3RlcgotICAgICAgICAgICBw
cm9wZXJ0eSwgYW5kIHB1dHMgdGhlIGJvb2xlYW4gcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLQot
ICAgICAgICAgICBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVyIGNvbnN0cnVjdG9yIGlz
IG5vdCBhbgotICAgICAgICAgICBvYmplY3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNW
YWx1ZSBiYXNlVmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYg
KGlzSW52YWxpZFBhcmFtRm9ySW4oY2FsbEZyYW1lLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkp
Ci0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2Jq
ID0gYXNPYmplY3QoYmFzZVZhbCk7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wTmFtZSA9IGNhbGxG
cmFtZS0+cihwcm9wZXJ0eSkuanNWYWx1ZSgpOwotCi0gICAgICAgIHVpbnQzMl90IGk7Ci0gICAg
ICAgIGlmIChwcm9wTmFtZS5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUs
IGkpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNOYW1lKHByb3BOYW1lKSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5
KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHByb3BOYW1lLmFzQ2VsbCgpKS0+cHJp
dmF0ZU5hbWUoKSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxs
RnJhbWUpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX2luKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX3Jlc29sdmUpIHsKLSAgICAgICAgLyogcmVzb2x2ZSBkc3Qo
cikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgTG9va3MgdXAgdGhlIHByb3BlcnR5IG5hbWVk
IGJ5IGlkZW50aWZpZXIgcHJvcGVydHkgaW4gdGhlCi0gICAgICAgICAgIHNjb3BlIGNoYWluLCBh
bmQgd3JpdGVzIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gcmVnaXN0ZXIKLSAgICAgICAgICAgZHN0
LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLQotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmUoY2FsbEZyYW1lLCBpZGVudCk7Ci0g
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVz
b2x2ZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9yZXNvbHZlX3NraXApIHsKLSAgICAgICAgLyogcmVzb2x2ZV9za2lwIGRzdChyKSBw
cm9wZXJ0eShpZCkgc2tpcChuKQotCi0gICAgICAgICBMb29rcyB1cCB0aGUgcHJvcGVydHkgbmFt
ZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSBpbiB0aGUKLSAgICAgICAgIHNjb3BlIGNoYWluIHNr
aXBwaW5nIHRoZSB0b3AgJ3NraXAnIGxldmVscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0aW5nCi0g
ICAgICAgICB2YWx1ZSB0byByZWdpc3RlciBkc3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91
bmQsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0gICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlm
aWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkp
OwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVNraXAoY2FsbEZy
YW1lLCBpZGVudCwgc2tpcCk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9za2lwKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3Jlc29sdmVfZ2xvYmFsKSB7Ci0gICAg
ICAgIC8qIHJlc29sdmVfc2tpcCBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHByb3BlcnR5KGlkKSBz
dHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikKLSAgICAgICAgIAotICAgICAgICAgICBQZXJmb3JtcyBh
IGR5bmFtaWMgcHJvcGVydHkgbG9va3VwIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIG9uIHRoZSBw
cm92aWRlZAotICAgICAgICAgICBnbG9iYWwgb2JqZWN0LiAgSWYgc3RydWN0dXJlIG1hdGNoZXMg
dGhlIFN0cnVjdHVyZSBvZiB0aGUgZ2xvYmFsIHRoZW4gcGVyZm9ybQotICAgICAgICAgICBhIGZh
c3QgbG9va3VwIHVzaW5nIHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBh
IGZ1bGwgcmVzb2x2ZSBhbmQKLSAgICAgICAgICAgY2FjaGUgdGhlIG5ldyBzdHJ1Y3R1cmUgYW5k
IG9mZnNldAotICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIElkZW50
aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0
eSk7Ci0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKAot
ICAgICAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICAgICAgaWRlbnQsCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwKLSAgICAgICAgICAgICZ2UENbM10udS5z
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAmdlBDWzRdLnUub3BlcmFuZAotICAgICAgICApOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29s
dmVfZ2xvYmFsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpIHsKLSAgICAgICAgLyogcmVzb2x2
ZV9za2lwIGRzdChyKSBnbG9iYWxPYmplY3QoYykgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQp
IG9mZnNldChuKSwgZGVwdGgobikKLSAgICAgICAgIAotICAgICAgICAgUGVyZm9ybXMgYSBkeW5h
bWljIHByb3BlcnR5IGxvb2t1cCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBvbiB0aGUgcHJvdmlk
ZWQKLSAgICAgICAgIGdsb2JhbCBvYmplY3QuICBJZiBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgU3Ry
dWN0dXJlIG9mIHRoZSBnbG9iYWwgdGhlbiBwZXJmb3JtCi0gICAgICAgICBhIGZhc3QgbG9va3Vw
IHVzaW5nIHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhIGZ1bGwgcmVz
b2x2ZSBhbmQKLSAgICAgICAgIGNhY2hlIHRoZSBuZXcgc3RydWN0dXJlIGFuZCBvZmZzZXQuCi0g
ICAgICAgICAKLSAgICAgICAgIFRoaXMgd2Fsa3MgdGhyb3VnaCBuIGxldmVscyBvZiB0aGUgc2Nv
cGUgY2hhaW4gdG8gdmVyaWZ5IHRoYXQgbm9uZSBvZiB0aG9zZSBsZXZlbHMKLSAgICAgICAgIGlu
IHRoZSBzY29wZSBjaGFpbiBpbmNsdWRlIGR5bmFtaWNhbGx5IGFkZGVkIHByb3BlcnRpZXMuCi0g
ICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENb
NV0udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNTY29wZTo6cmVzb2x2ZUdsb2JhbER5bmFtaWMoY2FsbEZyYW1lLCBpZGVudCwgc2tpcCwg
JnZQQ1szXS51LnN0cnVjdHVyZSwgJnZQQ1s0XS51Lm9wZXJhbmQpOwotICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVz
dWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfZ2xvYmFsX2R5
bmFtaWMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfZ2V0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogZ2V0X2dsb2JhbF92YXIgZHN0
KHIpIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50ZXIobikKLQotICAgICAgICAgICBHZXRz
IHRoZSBnbG9iYWwgdmFyIGF0IGdsb2JhbCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4gcmVn
aXN0ZXIgZHN0LgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gdlBD
WzJdLnUucmVnaXN0ZXJQb2ludGVyOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gcmVnaXN0ZXJQb2ludGVyLT5nZXQoKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfZ2V0X2dsb2JhbF92YXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2dsb2JhbF92YXJfd2F0Y2hhYmxlKSB7Ci0gICAg
ICAgIC8qIGdldF9nbG9iYWxfdmFyX3dhdGNoYWJsZSBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHJl
Z2lzdGVyUG9pbnRlcihuKQotCi0gICAgICAgICAgIEdldHMgdGhlIGdsb2JhbCB2YXIgYXQgZ2xv
YmFsIHNsb3QgaW5kZXggYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICAq
LwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMl0udS5yZWdpc3RlclBvaW50ZXI7
Ci0KLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZWdpc3RlclBvaW50ZXIt
PmdldCgpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZ2xvYmFsX3Zhcl93
YXRjaGFibGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklO
RV9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3QpCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRf
Z2xvYmFsX3ZhcikgewotICAgICAgICAvKiBwdXRfZ2xvYmFsX3ZhciBnbG9iYWxPYmplY3QoYykg
cmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCi0gICAgICAgICAKLSAgICAgICAgICAgUHV0cyB2
YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LgotICAgICAgICAgKi8KLSAgICAgICAgSlNHbG9i
YWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgQVNT
RVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMV0udS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgICAg
IGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICByZWdpc3Rl
clBvaW50ZXItPnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNW
YWx1ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIp
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfZ2xv
YmFsX3Zhcl9jaGVjaykgewotICAgICAgICAvKiBwdXRfZ2xvYmFsX3Zhcl9jaGVjayBnbG9iYWxP
YmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCi0gICAgICAgICAKLSAgICAgICAg
ICAgUHV0cyB2YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LiBJbiBKSVQgY29uZmlndXJhdGlv
bnMgdGhpcyB3aWxsCi0gICAgICAgICAgIHBlcmZvcm0gYSB3YXRjaHBvaW50IGNoZWNrLiBJZiB3
ZSdyZSBydW5uaW5nIHdpdGggdGhlIG9sZCBpbnRlcnByZXRlciwKLSAgICAgICAgICAgdGhpcyBp
cyBub3QgbmVjZXNzYXJ5OyB0aGUgaW50ZXJwcmV0ZXIgbmV2ZXIgdXNlcyB0aGVzZSB3YXRjaHBv
aW50cy4KLSAgICAgICAgICovCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0g
dlBDWzFdLnUucmVnaXN0ZXJQb2ludGVyOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICAKLSAgICAgICAgcmVnaXN0ZXJQb2ludGVyLT5zZXQoKmdsb2JhbERh
dGEsIHNjb3BlLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7Ci0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9zY29wZWRfdmFy
KSB7Ci0gICAgICAgIC8qIGdldF9zY29wZWRfdmFyIGRzdChyKSBpbmRleChuKSBza2lwKG4pCi0K
LSAgICAgICAgIExvYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXgtdGggbG9jYWwgZnJvbSB0
aGUgc2NvcGUgc2tpcCBub2RlcyBmcm9tCi0gICAgICAgICB0aGUgdG9wIG9mIHRoZSBzY29wZSBj
aGFpbiwgYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCi0gICAgICAgICAqLwotICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNraXAgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAg
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICBTY29wZUNo
YWluSXRlcmF0b3IgaXRlciA9IHNjb3BlLT5iZWdpbigpOwotICAgICAgICBTY29wZUNoYWluSXRl
cmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRl
ciAhPSBlbmQpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpOwotICAgICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwot
ICAgICAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAgICAgIGlmIChjaGVj
a1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChza2lwLS0pIHsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGl0ZXItPmlzVmFyaWFibGVPYmplY3QoKSk7Ci0gICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVP
YmplY3QqPihpdGVyLmdldCgpKTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSB2YXJpYWJsZU9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuZ2V0KCk7Ci0gICAgICAgIEFTU0VS
VChjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfc2NvcGVkX3Zhcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAg
ICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfc2NvcGVkX3ZhcikgewotICAgICAgICAvKiBw
dXRfc2NvcGVkX3ZhciBpbmRleChuKSBza2lwKG4pIHZhbHVlKHIpCi0KLSAgICAgICAgICovCi0g
ICAgICAgIGludCBpbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBza2lwID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsK
LQotICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICAgICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZS0+YmVnaW4oKTsKLSAgICAgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlLT5lbmQoKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQs
IGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKTsKLSAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgICAgICBp
ZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgICAgIGlmIChjYWxsRnJhbWUt
PnIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc2tpcC0tKSB7Ci0gICAg
ICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBl
bmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGl0ZXItPmlzVmFyaWFibGVPYmplY3Qo
KSk7Ci0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpT
VmFyaWFibGVPYmplY3QqPihpdGVyLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
cih2YWx1ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgdmFyaWFibGVPYmplY3QtPnJlZ2lzdGVyQXQo
aW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgdmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZS0+cih2YWx1
ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X3Njb3Bl
ZF92YXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfcmVzb2x2ZV9iYXNlKSB7Ci0gICAgICAgIC8qIHJlc29sdmVfYmFzZSBkc3Qocikg
cHJvcGVydHkoaWQpIGlzU3RyaWN0KGJvb2wpCi0KLSAgICAgICAgICAgU2VhcmNoZXMgdGhlIHNj
b3BlIGNoYWluIGZvciBhbiBvYmplY3QgY29udGFpbmluZwotICAgICAgICAgICBpZGVudGlmaWVy
IHByb3BlcnR5LCBhbmQgaWYgb25lIGlzIGZvdW5kLCB3cml0ZXMgaXQgdG8KLSAgICAgICAgICAg
cmVnaXN0ZXIgZHN0LiBJZiBub25lIGlzIGZvdW5kIGFuZCBpc1N0cmljdCBpcyBmYWxzZSwgdGhl
Ci0gICAgICAgICAgIG91dGVybW9zdCBzY29wZSAod2hpY2ggd2lsbCBiZSB0aGUgZ2xvYmFsIG9i
amVjdCkgaXMKLSAgICAgICAgICAgc3RvcmVkIGluIHJlZ2lzdGVyIGRzdC4KLSAgICAgICAgKi8K
LSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0
eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGJvb2wgaXNTdHJpY3QgPSB2UENbM10udS5v
cGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNT
Y29wZTo6cmVzb2x2ZUJhc2UoY2FsbEZyYW1lLCBpZGVudCwgaXNTdHJpY3QpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gcmVzdWx0OwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfYmFz
ZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKSB7Ci0gICAgICAgIC8qIGVuc3VyZV9wcm9wZXJ0
eV9leGlzdHMgYmFzZShyKSBwcm9wZXJ0eShpZCkKLQotICAgICAgICAgICBUaHJvd3MgYW4gZXhj
ZXB0aW9uIGlmIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0IG9uIGJhc2UKLSAgICAgICAgICovCi0g
ICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBiYXNl
VmFsID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNPYmplY3QqIGJh
c2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbCk7Ci0gICAgICAgIGlmICghYmFzZU9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0
ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoY2FsbEZyYW1lLCBpZGVudC5zdHJpbmco
KSk7Ci0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICB9Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyk7Ci0gICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9yZXNvbHZlX3dp
dGhfYmFzZSkgewotICAgICAgICAvKiByZXNvbHZlX3dpdGhfYmFzZSBiYXNlRHN0KHIpIHByb3BE
c3QocikgcHJvcGVydHkoaWQpCi0KLSAgICAgICAgICAgU2VhcmNoZXMgdGhlIHNjb3BlIGNoYWlu
IGZvciBhbiBvYmplY3QgY29udGFpbmluZwotICAgICAgICAgICBpZGVudGlmaWVyIHByb3BlcnR5
LCBhbmQgaWYgb25lIGlzIGZvdW5kLCB3cml0ZXMgaXQgdG8KLSAgICAgICAgICAgcmVnaXN0ZXIg
c3JjRHN0LCBhbmQgdGhlIHJldHJpZXZlZCBwcm9wZXJ0eSB2YWx1ZSB0byByZWdpc3RlcgotICAg
ICAgICAgICBwcm9wRHN0LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgotCi0gICAgICAgICAgIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBkb2lu
ZyByZXNvbHZlX2Jhc2UgZm9sbG93ZWQgYnkKLSAgICAgICAgICAgcmVzb2x2ZSwgb3IgcmVzb2x2
ZV9iYXNlIGZvbGxvd2VkIGJ5IGdldF9ieV9pZCwgYXMgaXQKLSAgICAgICAgICAgYXZvaWRzIGR1
cGxpY2F0ZSBoYXNoIGxvb2t1cHMuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlRHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BEc3QgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVu
dGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAg
ICAgSlNWYWx1ZSBwcm9wID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwgaWRl
bnQsICZjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYmFzZURzdCkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9wRHN0KSA9IHBy
b3A7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV93aXRoX2Jhc2Up
OwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUo
b3BfcmVzb2x2ZV93aXRoX3RoaXMpIHsKLSAgICAgICAgLyogcmVzb2x2ZV93aXRoX3RoaXMgdGhp
c0RzdChyKSBwcm9wRHN0KHIpIHByb3BlcnR5KGlkKQotCi0gICAgICAgICAgIFNlYXJjaGVzIHRo
ZSBzY29wZSBjaGFpbiBmb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcKLSAgICAgICAgICAgaWRlbnRp
ZmllciBwcm9wZXJ0eSwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgd3JpdGVzIHRoZQotICAgICAgICAg
ICByZXRyaWV2ZWQgcHJvcGVydHkgdmFsdWUgdG8gcmVnaXN0ZXIgcHJvcERzdCwgYW5kIHRoZQot
ICAgICAgICAgICB0aGlzIG9iamVjdCB0byBwYXNzIGluIGEgY2FsbCB0byB0aGlzRHN0LgotCi0g
ICAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJhaXNlcyBhbiBleGNlcHRp
b24uCi0gICAgICAgICovCi0gICAgICAgIGludCB0aGlzRHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHByb3BEc3QgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJv
cGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wID0g
SlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGNhbGxGcmFtZSwgaWRlbnQsICZjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIodGhpc0RzdCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9wRHN0KSA9IHByb3A7Ci0KLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lkX291dF9v
Zl9saW5lKQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lkKSB7Ci0gICAgICAgIC8qIGdl
dF9ieV9pZCBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgbm9wKG4p
IG5vcChuKSBub3AobikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogR2V0
cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSBm
cm9tIHRoZSB2YWx1ZSBiYXNlLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBD
WzNdLnUub3BlcmFuZDsKLQotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZy
YW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwg
aWRlbnQsIHNsb3QpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAg
dHJ5Q2FjaGVHZXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QpOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0
OwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X2lk
X3NlbGYpIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX3NlbGYgZHN0KHIpIGJhc2UocikgcHJv
cGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIG9mZnNldChuKSBub3Aobikgbm9wKG4pCi0KLSAgICAg
ICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIHBy
b3BlcnR5IGZyb20gdGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UuIElmIHRoZSBjYWNoZSBtaXNz
ZXMsIG9wX2dldF9ieV9pZF9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgICAgb3BfZ2V0X2J5X2lk
LgotICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLQot
ICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpIHsKLSAgICAgICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5nZXQoKTsKLQotICAgICAgICAgICAg
aWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2VsbCk7Ci0gICAgICAgICAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNl
dCA9IHZQQ1s1XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVj
dC0+Z2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJhbmQp
KSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGJhc2VPYmplY3QtPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKLQotICAgICAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9ieV9pZF9zZWxmKTsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmNhY2hlR2V0QnlJRChj
b2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfcHJvdG8pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5
X2lkX3Byb3RvIGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBwcm90
b3R5cGVTdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pCi0KLSAgICAgICAgICAgQ2FjaGVk
IHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIHByb3BlcnR5IGZyb20g
dGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UncyBwcm90b3R5cGUuIElmIHRoZSBjYWNoZSBtaXNz
ZXMsIG9wX2dldF9ieV9pZF9wcm90bwotICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9p
ZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0K
LSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAg
IGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1l
KS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBh
c09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IHZQQ1s1XS51LnN0cnVj
dHVyZS5nZXQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocHJvdG9PYmplY3QtPnN0
cnVjdHVyZSgpID09IHByb3RvdHlwZVN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSB2UENbNl0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90
b09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9w
ZXJhbmQpKSA9PSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGNvZGVCbG9jay0+
aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBKU1ZhbHVlKHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX3By
b3RvKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVuY2FjaGVHZXRC
eUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICooJiZza2lw
X2lkX2dldHRlcl9wcm90byk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9p
ZF9nZXR0ZXJfcHJvdG8pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90byBk
c3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgcHJvdG90eXBlU3RydWN0
dXJlKHNJRCkgb2Zmc2V0KG4pIG5vcChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJv
cGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBnZXQgYSBjYWNoZWQgZ2V0dGVyIHByb3BlcnR5IGZy
b20gdGhlCi0gICAgICAgICB2YWx1ZSBiYXNlJ3MgcHJvdG90eXBlLiBJZiB0aGUgY2FjaGUgbWlz
c2VzLCBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvCi0gICAgICAgICByZXZlcnRzIHRvIG9wX2dl
dF9ieV9pZC4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1
ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7
Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSA9IHZQQ1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBw
cm90b3R5cGVTdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzZdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIocHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQp
LmFzQ2VsbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlciA9
IGdldHRlclNldHRlci0+Z2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChjYWxsRnJhbWUsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhc09iamVjdChiYXNlQ2VsbCksIEFyZ0xpc3QoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8pOwotICAgICAg
ICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9jaywg
dlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NP
TVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBza2lwX2lkX2dldHRlcl9wcm90bzoKLSNlbmRp
ZgotI2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIGdvdG8gKigmJnNr
aXBfaWRfY3VzdG9tX3Byb3RvKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5
X2lkX2N1c3RvbV9wcm90bykgewotICAgICAgICAvKiBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3Rv
IGRzdChyKSBiYXNlKHIpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBwcm90b3R5cGVTdHJ1
Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pCi0gICAgICAgICAKLSAgICAgICAgIENhY2hlZCBw
cm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIHVzZSBhIGNhY2hlZCBuYW1lZCBwcm9wZXJ0eSBn
ZXR0ZXIKLSAgICAgICAgIGZyb20gdGhlIHZhbHVlIGJhc2UncyBwcm90b3R5cGUuIElmIHRoZSBj
YWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG8KLSAgICAgICAgIHJldmVydHMg
dG8gb3BfZ2V0X2J5X2lkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0u
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNl
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0Nl
bGwoKSkpIHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVy
ZS5nZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+
c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpLmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
cHJvdG90eXBlU3RydWN0dXJlID0gdlBDWzVdLnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocHJvdG9PYmplY3QtPnN0cnVjdHVy
ZSgpID09IHByb3RvdHlwZVN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9
IHZQQ1s2XS51LmdldHRlckZ1bmM7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gZ2V0dGVyKGNhbGxGcmFtZSwgcHJvdG9PYmplY3QsIGlkZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90byk7Ci0gICAgICAgICAgICAg
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURf
R09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfaWRfY3VzdG9tX3Byb3RvOgotI2VuZGlmCi0jaWYg
VVNFKEdDQ19DT01QVVRFRF9HT1RPX1dPUktBUk9VTkQpCi0gICAgZ290byAqKCYmc2tpcF9nZXRf
YnlfaWRfY2hhaW4pOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfY2hh
aW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2NoYWluIGRzdChyKSBiYXNlKHIpIHByb3Bl
cnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBzdHJ1Y3R1cmVDaGFpbihjaGFpbikgY291bnQobikgb2Zm
c2V0KG4pCi0KLSAgICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2VzczogQXR0ZW1wdHMgdG8g
Z2V0IGEgY2FjaGVkIHByb3BlcnR5IGZyb20gdGhlCi0gICAgICAgICAgIHZhbHVlIGJhc2UncyBw
cm90b3R5cGUgY2hhaW4uIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9jaGFpbgot
ICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KLSAgICAgICAgKi8KLSAgICAgICAg
aW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKExJS0VMWShiYXNl
VmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0u
dS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0
cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSB2UENbNV0udS5zdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOwotICAgICAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IHZQQ1s2XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGVuZCA9IGl0ICsgY291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogYmFz
ZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9v
a3VwKGNhbGxGcmFtZSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUoKSAhPSAoKml0KS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoKytpdCA9PSBlbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s3XS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBjb2Rl
QmxvY2stPmlkZW50aWZpZXIodlBDWzNdLnUub3BlcmFuZCkpID09IGJhc2VPYmplY3QtPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNl
VmFsdWUuZ2V0KGNhbGxGcmFtZSwgY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJh
bmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYmFzZU9i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY2hhaW4pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGJhc2VDZWxsLCBzbyB0aGF0IG5leHQgdGlt
ZSBhcm91bmQgdGhlIGxvb3Agd2UnbGwgcGljayB1cCB0aGUgcHJvdG90eXBlJ3MgcHJvdG90eXBl
LgotICAgICAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VPYmplY3Q7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdW5jYWNoZUdldEJ5
SUQoY29kZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQot
I2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfZ2V0X2J5X2lk
X2NoYWluOgotICAgIGdvdG8gKigmJnNraXBfaWRfZ2V0dGVyX3NlbGYpOwotI2VuZGlmCi0gICAg
REVGSU5FX09QQ09ERShvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGYpIHsKLSAgICAgICAgLyogb3Bf
Z2V0X2J5X2lkX3NlbGYgZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQpIHN0cnVjdHVyZShzSUQp
IG9mZnNldChuKSBub3Aobikgbm9wKG4pCi0gICAgICAgICAKLSAgICAgICAgIENhY2hlZCBwcm9w
ZXJ0eSBhY2Nlc3M6IEF0dGVtcHRzIHRvIGdldCBhIGNhY2hlZCBwcm9wZXJ0eSBmcm9tIHRoZQot
ICAgICAgICAgdmFsdWUgYmFzZS4gSWYgdGhlIGNhY2hlIG1pc3Nlcywgb3BfZ2V0X2J5X2lkX2dl
dHRlcl9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgIG9wX2dldF9ieV9pZC4KLSAgICAgICAgICov
Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwpOwotICAgICAg
ICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAgICAgaWYgKEdldHRl
clNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYmFzZU9iamVjdC0+Z2V0RGly
ZWN0T2Zmc2V0KG9mZnNldCkuYXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXItPmdldHRlcigpOwotICAgICAgICAgICAgICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBn
ZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZU9iamVjdCwgQXJnTGlzdCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBq
c1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2J5X2lkX2dldHRlcl9zZWxmKTsKLSAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdW5jYWNoZUdldEJ5SUQoY29k
ZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVT
RShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNraXBfaWRfZ2V0dGVyX3NlbGY6
Ci0jZW5kaWYKLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3Rv
ICooJiZza2lwX2lkX2N1c3RvbV9zZWxmKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3Bf
Z2V0X2J5X2lkX2N1c3RvbV9zZWxmKSB7Ci0gICAgICAgIC8qIG9wX2dldF9ieV9pZF9jdXN0b21f
c2VsZiBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4p
IG5vcChuKSBub3AobikKLSAgICAgICAgIAotICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2Vz
czogQXR0ZW1wdHMgdG8gdXNlIGEgY2FjaGVkIG5hbWVkIHByb3BlcnR5IGdldHRlcgotICAgICAg
ICAgZnJvbSB0aGUgdmFsdWUgYmFzZS4gSWYgdGhlIGNhY2hlIG1pc3Nlcywgb3BfZ2V0X2J5X2lk
X2N1c3RvbV9zZWxmIHJldmVydHMgdG8KLSAgICAgICAgIG9wX2dldF9ieV9pZC4KLSAgICAgICAg
ICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0Nl
bGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIGlu
dCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotCi0gICAgICAgICAg
ICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gdlBDWzVdLnUuZ2V0dGVy
RnVuYzsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldHRlcihjYWxsRnJhbWUs
IGJhc2VWYWx1ZSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsK
LSAgICAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY3VzdG9t
X3NlbGYpOwotICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9H
T1RPX1dPUktBUk9VTkQpCi1za2lwX2lkX2N1c3RvbV9zZWxmOgotI2VuZGlmCi0gICAgREVGSU5F
X09QQ09ERShvcF9nZXRfYnlfaWRfZ2VuZXJpYykgewotICAgICAgICAvKiBvcF9nZXRfYnlfaWRf
Z2VuZXJpYyBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgbm9wKHNJRCkgbm9wKG4pIG5vcChu
KSBub3AobikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogR2V0cyB0aGUg
cHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSBmcm9tIHRo
ZSB2YWx1ZSBiYXNlLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBi
YXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLQotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5y
KGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsK
LSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQs
IHNsb3QpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICoo
JiZza2lwX2lkX2dldHRlcl9jaGFpbik7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dl
dF9ieV9pZF9nZXR0ZXJfY2hhaW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbiBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgc3RydWN0dXJl
Q2hhaW4oY2hhaW4pIGNvdW50KG4pIG9mZnNldChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNo
ZWQgcHJvcGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBnZXQgYSBjYWNoZWQgcHJvcGVydHkgZnJv
bSB0aGUKLSAgICAgICAgIHZhbHVlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4uIElmIHRoZSBjYWNo
ZSBtaXNzZXMsIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW4KLSAgICAgICAgIHJldmVydHMgdG8g
b3BfZ2V0X2J5X2lkLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwo
KSkpIHsKLSAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZS5n
ZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+c3Ry
dWN0dXJlKCkgPT0gc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KiBpdCA9IHZQQ1s1XS51LnN0cnVjdHVyZUNoYWluLT5oZWFkKCk7Ci0gICAgICAg
ICAgICAgICAgc2l6ZV90IGNvdW50ID0gdlBDWzZdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogZW5kID0gaXQgKyBjb3VudDsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKS0+
cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpICE9
ICgqaXQpLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCsraXQgPT0gZW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJT
ZXR0ZXIoYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkuYXNDZWxsKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IGdldHRlclNldHRl
ci0+Z2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChjYWxsRnJhbWUsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlVmFsdWUsIEFyZ0xpc3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFp
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vIFVwZGF0ZSBiYXNlQ2VsbCwgc28gdGhhdCBuZXh0IHRpbWUgYXJvdW5kIHRoZSBsb29wIHdl
J2xsIHBpY2sgdXAgdGhlIHByb3RvdHlwZSdzIHByb3RvdHlwZS4KLSAgICAgICAgICAgICAgICAg
ICAgYmFzZUNlbGwgPSBiYXNlT2JqZWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRFRF9H
T1RPX1dPUktBUk9VTkQpCi0gICAgc2tpcF9pZF9nZXR0ZXJfY2hhaW46Ci0jZW5kaWYKLSNpZiBV
U0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAgICBnb3RvICooJiZza2lwX2lkX2N1
c3RvbV9jaGFpbik7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9ieV9pZF9jdXN0
b21fY2hhaW4pIHsKLSAgICAgICAgLyogb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbiBkc3Qocikg
YmFzZShyKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgc3RydWN0dXJlQ2hhaW4oY2hhaW4p
IGNvdW50KG4pIG9mZnNldChuKQotICAgICAgICAgCi0gICAgICAgICBDYWNoZWQgcHJvcGVydHkg
YWNjZXNzOiBBdHRlbXB0cyB0byB1c2UgYSBjYWNoZWQgbmFtZWQgcHJvcGVydHkgZ2V0dGVyIG9u
IHRoZQotICAgICAgICAgdmFsdWUgYmFzZSdzIHByb3RvdHlwZSBjaGFpbi4gSWYgdGhlIGNhY2hl
IG1pc3Nlcywgb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbgotICAgICAgICAgcmV2ZXJ0cyB0byBv
cF9nZXRfYnlfaWQuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpz
VmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgp
KSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdl
dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gdlBDWzVdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKLSAgICAgICAg
ICAgICAgICBzaXplX3QgY291bnQgPSB2UENbNl0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBlbmQgPSBpdCArIGNvdW50OwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZUNlbGwtPnN0cnVjdHVyZSgpLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZU9iamVjdC0+c3RydWN0dXJlKCkgIT0g
KCppdCkuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoKytpdCA9PSBlbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gdlBDWzddLnUuZ2V0dGVy
RnVuYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0dGVyKGNh
bGxGcmFtZSwgYmFzZU9iamVjdCwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGJhc2VDZWxs
LCBzbyB0aGF0IG5leHQgdGltZSBhcm91bmQgdGhlIGxvb3Agd2UnbGwgcGljayB1cCB0aGUgcHJv
dG90eXBlJ3MgcHJvdG90eXBlLgotICAgICAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VP
YmplY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSNpZiBVU0UoR0NDX0NPTVBVVEVEX0dPVE9fV09SS0FST1VORCkKLSAg
ICBza2lwX2lkX2N1c3RvbV9jaGFpbjoKLSAgICBnb3RvICooJiZza2lwX2dldF9hcnJheV9sZW5n
dGgpOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYXJyYXlfbGVuZ3RoKSB7Ci0g
ICAgICAgIC8qIG9wX2dldF9hcnJheV9sZW5ndGggZHN0KHIpIGJhc2UocikgcHJvcGVydHkoaWQp
IG5vcChzSUQpIG5vcChuKSBub3Aobikgbm9wKG4pCi0KLSAgICAgICAgICAgQ2FjaGVkIHByb3Bl
cnR5IGFjY2VzczogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpbiByZWdpc3RlciBiYXNl
LAotICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4gSWYgcmVn
aXN0ZXIgYmFzZSBkb2VzIG5vdCBob2xkCi0gICAgICAgICAgIGFuIGFycmF5LCBvcF9nZXRfYXJy
YXlfbGVuZ3RoIHJldmVydHMgdG8gb3BfZ2V0X2J5X2lkLgotICAgICAgICAqLwotCi0gICAgICAg
IGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoTElLRUxZKGlzSlNB
cnJheShiYXNlVmFsdWUpKSkgewotICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGpzTnVtYmVyKGFz
QXJyYXkoYmFzZVZhbHVlKS0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2FycmF5X2xlbmd0aCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2ssIHZQQyk7
Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0jaWYgVVNFKEdDQ19DT01QVVRF
RF9HT1RPX1dPUktBUk9VTkQpCi0gICAgc2tpcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgIGdvdG8g
KigmJnNraXBfZ2V0X3N0cmluZ19sZW5ndGgpOwotI2VuZGlmCi0gICAgREVGSU5FX09QQ09ERShv
cF9nZXRfc3RyaW5nX2xlbmd0aCkgewotICAgICAgICAvKiBvcF9nZXRfc3RyaW5nX2xlbmd0aCBk
c3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkgbm9wKHNJRCkgbm9wKG4pIG5vcChuKSBub3AobikK
LQotICAgICAgICAgICBDYWNoZWQgcHJvcGVydHkgYWNjZXNzOiBHZXRzIHRoZSBsZW5ndGggb2Yg
dGhlIHN0cmluZyBpbiByZWdpc3RlciBiYXNlLAotICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVz
dWx0IGluIHJlZ2lzdGVyIGRzdC4gSWYgcmVnaXN0ZXIgYmFzZSBkb2VzIG5vdCBob2xkCi0gICAg
ICAgICAgIGEgc3RyaW5nLCBvcF9nZXRfc3RyaW5nX2xlbmd0aCByZXZlcnRzIHRvIG9wX2dldF9i
eV9pZC4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUo
KTsKLSAgICAgICAgaWYgKExJS0VMWShpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpKSB7Ci0gICAgICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoYXNTdHJpbmcoYmFzZVZhbHVlKS0+bGVuZ3RoKCkp
OwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3N0cmluZ19sZW5ndGgp
OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrLCB2UEMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5EKQotICAgIHNr
aXBfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgZ290byAqKCYmc2tpcF9wdXRfYnlfaWQpOwotI2Vu
ZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpCi0gICAgREVG
SU5FX09QQ09ERShvcF9wdXRfYnlfaWQpIHsKLSAgICAgICAgLyogcHV0X2J5X2lkIGJhc2Uocikg
cHJvcGVydHkoaWQpIHZhbHVlKHIpIG5vcChuKSBub3Aobikgbm9wKG4pIG5vcChuKSBkaXJlY3Qo
YikKLQotICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVy
dHkgbmFtZWQgYnkgaWRlbnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRv
IHJlZ2lzdGVyIGJhc2UsIHRvIHJlZ2lzdGVyIHZhbHVlLgotCi0gICAgICAgICAgIFVubGlrZSBt
YW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAg
ICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0KLSAgICAgICAgICAgVGhlICJkaXJlY3QiIGZsYWcg
c2hvdWxkIG9ubHkgYmUgc2V0IHRoaXMgcHV0X2J5X2lkIGlzIHRvIGluaXRpYWxpemUKLSAgICAg
ICAgICAgYW4gb2JqZWN0IGxpdGVyYWwuCi0gICAgICAgICovCi0KLSAgICAgICAgaW50IGJhc2Ug
PSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBpbnQg
ZGlyZWN0ID0gdlBDWzhdLnUub3BlcmFuZDsKLQotICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIGlmIChkaXJlY3Qp
IHsKLSAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgICAgICAg
ICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoKmdsb2JhbERhdGEsIGlkZW50LCBjYWxs
RnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUp
LmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLQotICAg
ICAgICB0cnlDYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywgYmFzZVZhbHVl
LCBzbG90KTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfYnlfaWQpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIFVTRShHQ0NfQ09NUFVURURf
R09UT19XT1JLQVJPVU5EKQotICAgICAgc2tpcF9wdXRfYnlfaWQ6Ci0jZW5kaWYKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCkKLSAgICBERUZJTkVfT1BD
T0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCkKLSAgICBERUZJTkVfT1BDT0RFKG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZSkKLSAgICBERUZJTkVfT1BD
T0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkKLSAgICBERUZJ
TkVfT1BDT0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKSB7Ci0gICAgICAgIC8qIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uIGJhc2UocikgcHJvcGVydHkoaWQpIHZhbHVlKHIpIG9sZFN0cnVjdHVy
ZShzSUQpIG5ld1N0cnVjdHVyZShzSUQpIHN0cnVjdHVyZUNoYWluKGNoYWluKSBvZmZzZXQobikg
ZGlyZWN0KGIpCi0gICAgICAgICAKLSAgICAgICAgICAgQ2FjaGVkIHByb3BlcnR5IGFjY2Vzczog
QXR0ZW1wdHMgdG8gc2V0IGEgbmV3IHByb3BlcnR5IHdpdGggYSBjYWNoZWQgdHJhbnNpdGlvbgot
ICAgICAgICAgICBwcm9wZXJ0eSBuYW1lZCBieSBpZGVudGlmaWVyIHByb3BlcnR5LCBiZWxvbmdp
bmcgdG8gcmVnaXN0ZXIgYmFzZSwKLSAgICAgICAgICAgdG8gcmVnaXN0ZXIgdmFsdWUuIElmIHRo
ZSBjYWNoZSBtaXNzZXMsIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uCi0gICAgICAgICAgIHJldmVy
dHMgdG8gb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgICAgICAKLSAgICAgICAgICAgVW5saWtl
IG1hbnkgb3Bjb2RlcywgdGhpcyBvbmUgZG9lcyBub3Qgd3JpdGUgYW55IG91dHB1dCB0bwotICAg
ICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgICovCi0gICAgICAgIGludCBiYXNl
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKExJS0VMWShiYXNl
VmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2UENb
NF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IHZQQ1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKExJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgPT0gb2xkU3RydWN0dXJlKSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlQ2VsbCk7Ci0gICAgICAgICAg
ICAgICAgaW50IGRpcmVjdCA9IHZQQ1s4XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gdlBDWzZdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsK
LQotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvID0gYmFzZU9iamVjdC0+c3RydWN0
dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIXByb3RvLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoYXNPYmplY3QocHJvdG8pLT5zdHJ1Y3R1cmUoKSAhPSAoKml0KS5nZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQ
Qyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3RvID0gYXNPYmplY3QocHJvdG8pLT5zdHJ1Y3R1cmUo
KS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+c2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgqZ2xvYmFsRGF0YSwgbmV3U3RydWN0
dXJlKTsKLQotICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s3XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxvY2F0aW9uKGJhc2VPYmplY3QtPmdl
dERpcmVjdExvY2F0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPmlkZW50aWZpZXIodlBDWzJd
LnUub3BlcmFuZCkpKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1
dERpcmVjdE9mZnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgb2Zmc2V0LCBjYWxsRnJhbWUt
PnIodmFsdWUpLmpzVmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1
bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wdXRfYnlfaWRfcmVwbGFjZSkgewotICAg
ICAgICAvKiBvcF9wdXRfYnlfaWRfcmVwbGFjZSBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1ZShy
KSBzdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobikgbm9wKG4pIG5vcChuKSBkaXJlY3QoYikKLQotICAg
ICAgICAgICBDYWNoZWQgcHJvcGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBzZXQgYSBwcmUtZXhp
c3RpbmcsIGNhY2hlZAotICAgICAgICAgICBwcm9wZXJ0eSBuYW1lZCBieSBpZGVudGlmaWVyIHBy
b3BlcnR5LCBiZWxvbmdpbmcgdG8gcmVnaXN0ZXIgYmFzZSwKLSAgICAgICAgICAgdG8gcmVnaXN0
ZXIgdmFsdWUuIElmIHRoZSBjYWNoZSBtaXNzZXMsIG9wX3B1dF9ieV9pZF9yZXBsYWNlCi0gICAg
ICAgICAgIHJldmVydHMgdG8gb3BfcHV0X2J5X2lkLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55
IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAg
ICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIo
YmFzZSkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgp
KSkgewotICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlLmdl
dCgpOwotCi0gICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VDZWxsLT5pc09iamVjdCgp
KTsKLSAgICAgICAgICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VD
ZWxsKTsKLSAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwotICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlv
bihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHZQQ1syXS51Lm9wZXJhbmQpKSkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICBiYXNlT2JqZWN0LT5wdXREaXJlY3RPZmZzZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9m
ZnNldCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X2lkX3JlcGxhY2UpOwotICAgICAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHVuY2FjaGVQdXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB7
Ci0gICAgICAgIC8qIG9wX3B1dF9ieV9pZF9nZW5lcmljIGJhc2UocikgcHJvcGVydHkoaWQpIHZh
bHVlKHIpIG5vcChuKSBub3Aobikgbm9wKG4pIG5vcChuKSBkaXJlY3QoYikKLQotICAgICAgICAg
ICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRl
bnRpZmllcgotICAgICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2Us
IHRvIHJlZ2lzdGVyIHZhbHVlLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRo
aXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lz
dGVyIGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGRpcmVjdCA9IHZQQ1s4XS51
Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFz
ZSkuanNWYWx1ZSgpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICBpZiAoZGlyZWN0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgYXNPYmplY3QoYmFzZVZh
bHVlKS0+cHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5q
c1ZhbHVlKCksIHNsb3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhc2VWYWx1ZS5w
dXQoY2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3Qp
OwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZGVsX2J5X2lkKSB7Ci0gICAgICAgIC8q
IGRlbF9ieV9pZCBkc3QocikgYmFzZShyKSBwcm9wZXJ0eShpZCkKLQotICAgICAgICAgICBDb252
ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZGVsZXRlcyB0aGUgcHJvcGVydHkKLSAgICAg
ICAgICAgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSBmcm9tIHRoZSBvYmplY3QsIGFuZCB3
cml0ZXMgYQotICAgICAgICAgICBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyAoaWYgdHJ1ZSkg
b3IgZmFpbHVyZSAoaWYgZmFsc2UpCi0gICAgICAgICAgIHRvIHJlZ2lzdGVyIGRzdC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBi
YXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGNhbGxGcmFtZS0+cihiYXNl
KS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBib29sIHJlc3Vs
dCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNhbGxG
cmFtZSwgaWRlbnQpOwotICAgICAgICBpZiAoIXJlc3VsdCAmJiBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVR5cGVFcnJvcihj
YWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2RlbF9ieV9pZCk7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfcG5hbWUp
IHsKLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNl
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IGV4cGVjdGVkID0gdlBDWzRdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IGl0ZXIgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgaSA9IHZQQ1s2XS51Lm9w
ZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSku
anNWYWx1ZSgpOwotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9IGNhbGxGcmFt
ZS0+cihpdGVyKS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IGNhbGxGcmFtZS0+cihwcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVl
IGV4cGVjdGVkU3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKGV4cGVjdGVkKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIGludCBpbmRleCA9IGNhbGxGcmFtZS0+cihpKS5pKCkgLSAxOwotICAgICAgICBKU1Zh
bHVlIHJlc3VsdDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
aWYgKHN1YnNjcmlwdCA9PSBleHBlY3RlZFN1YnNjcmlwdCAmJiBiYXNlVmFsdWUuaXNDZWxsKCkg
JiYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gaXQtPmNhY2hlZFN0cnVjdHVy
ZSgpKSAmJiBpdC0+Z2V0T2Zmc2V0KGluZGV4LCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXNPYmplY3QoYmFzZVZhbHVlKS0+Z2V0
RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAg
ICAgfQotICAgICAgICB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICB9Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9wbmFtZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCkgewotICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ3VtZW50c1Jl
Z2lzdGVyID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNd
LnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIoYXJn
dW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cykgewotICAg
ICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpOwotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gYXJndW1lbnRzLmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90
KTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNOdW1iZXIoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9hcmd1
bWVudHNfbGVuZ3RoKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwpIHsKLSAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGFyZ3VtZW50c1JlZ2lzdGVy
KS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHBy
b3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRzICYmIHN1YnNjcmlwdC5p
c1VJbnQzMigpICYmIHN1YnNjcmlwdC5hc1VJbnQzMigpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY2FsbEZy
YW1lLT5hcmd1bWVudChzdWJzY3JpcHQuYXNVSW50MzIoKSk7Ci0gICAgICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKLSAgICAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWFyZ3VtZW50cykgewotICAg
ICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1
bWVudHNSZWdpc3RlcikgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmFsbHRo
cm91Z2gKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9nZXRfYnlfdmFsKSB7Ci0gICAgICAg
IC8qIGdldF9ieV92YWwgZHN0KHIpIGJhc2UocikgcHJvcGVydHkocikKLQotICAgICAgICAgICBD
b252ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZ2V0cyB0aGUgcHJvcGVydHkgbmFtZWQK
LSAgICAgICAgICAgYnkgcmVnaXN0ZXIgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0LCBhbmQgcHV0
cyB0aGUgcmVzdWx0Ci0gICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4gcHJvcGVydHkgaXMgbm9t
aW5hbGx5IGNvbnZlcnRlZCB0byBzdHJpbmcKLSAgICAgICAgICAgYnV0IG51bWJlcnMgYXJlIHRy
ZWF0ZWQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBjYWxsRnJhbWUtPnIocHJvcGVydHkpLmpzVmFsdWUoKTsK
LQotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLQotICAgICAgICBpZiAoTElLRUxZKHN1YnNjcmlw
dC5pc1VJbnQzMigpKSkgewotICAgICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJ
bnQzMigpOwotICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAg
ICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoanNBcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5KU0FycmF5
OjpnZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhi
YXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFt
ZSwgaSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICB9IGVsc2UgaWYgKGlzTmFtZShzdWJzY3Jp
cHQpKQotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2Fz
dDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwg
c3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2dldF9ieV92YWwpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAg
IERFRklORV9PUENPREUob3BfcHV0X2J5X3ZhbCkgewotICAgICAgICAvKiBwdXRfYnlfdmFsIGJh
c2UocikgcHJvcGVydHkocikgdmFsdWUocikKLQotICAgICAgICAgICBTZXRzIHJlZ2lzdGVyIHZh
bHVlIG9uIHJlZ2lzdGVyIGJhc2UgYXMgdGhlIHByb3BlcnR5IG5hbWVkCi0gICAgICAgICAgIGJ5
IHJlZ2lzdGVyIHByb3BlcnR5LiBCYXNlIGlzIGNvbnZlcnRlZCB0byBvYmplY3QKLSAgICAgICAg
ICAgZmlyc3QuIHJlZ2lzdGVyIHByb3BlcnR5IGlzIG5vbWluYWxseSBjb252ZXJ0ZWQgdG8gc3Ry
aW5nCi0gICAgICAgICAgIGJ1dCBudW1iZXJzIGFyZSB0cmVhdGVkIG1vcmUgZWZmaWNpZW50bHku
Ci0KLSAgICAgICAgICAgVW5saWtlIG1hbnkgb3Bjb2RlcywgdGhpcyBvbmUgZG9lcyBub3Qgd3Jp
dGUgYW55IG91dHB1dCB0bwotICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAg
Ki8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJv
cGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5v
cGVyYW5kOwotCi0gICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2Up
LmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBjYWxsRnJhbWUtPnIocHJv
cGVydHkpLmpzVmFsdWUoKTsKLQotICAgICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQz
MigpKSkgewotICAgICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwot
ICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
SlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoanNBcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAgICAgICAgICBq
c0FycmF5LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIGNhbGxGcmFtZS0+cih2YWx1
ZSkuanNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGpzQXJyYXktPkpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgY2FsbEZyYW1lLCBpLCBjYWxs
RnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChj
YWxsRnJhbWUsIGksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBjb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewot
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSk7Ci0gICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0
YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCksIGNhbGxGcmFtZS0+cih2
YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElk
ZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1l
KS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2Vw
dGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4
Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFt
ZSwgcHJvcGVydHksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9kZWxfYnlfdmFsKSB7
Ci0gICAgICAgIC8qIGRlbF9ieV92YWwgZHN0KHIpIGJhc2UocikgcHJvcGVydHkocikKLQotICAg
ICAgICAgICBDb252ZXJ0cyByZWdpc3RlciBiYXNlIHRvIE9iamVjdCwgZGVsZXRlcyB0aGUgcHJv
cGVydHkKLSAgICAgICAgICAgbmFtZWQgYnkgcmVnaXN0ZXIgcHJvcGVydHkgZnJvbSB0aGUgb2Jq
ZWN0LCBhbmQgd3JpdGVzIGEKLSAgICAgICAgICAgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mg
KGlmIHRydWUpIG9yIGZhaWx1cmUgKGlmIGZhbHNlKQotICAgICAgICAgICB0byByZWdpc3RlciBk
c3QuCi0gICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwot
Ci0gICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yKHByb3BlcnR5KS5qc1Zh
bHVlKCk7Ci0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICB1aW50MzJfdCBpOwotICAgICAg
ICBpZiAoc3Vic2NyaXB0LmdldFVJbnQzMihpKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VP
YmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBjYWxsRnJh
bWUsIGkpOwotICAgICAgICBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmos
IGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnBy
aXZhdGVOYW1lKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJz
Y3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBjYWxsRnJhbWUsIHByb3BlcnR5
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3VsdCAmJiBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVR5cGVFcnJvcihj
YWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0ganNCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2RlbF9ieV92YWwpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHV0X2J5X2luZGV4
KSB7Ci0gICAgICAgIC8qIHB1dF9ieV9pbmRleCBiYXNlKHIpIHByb3BlcnR5KG4pIHZhbHVlKHIp
Ci0KLSAgICAgICAgICAgU2V0cyByZWdpc3RlciB2YWx1ZSBvbiByZWdpc3RlciBiYXNlIGFzIHRo
ZSBwcm9wZXJ0eSBuYW1lZAotICAgICAgICAgICBieSB0aGUgaW1tZWRpYXRlIG51bWJlciBwcm9w
ZXJ0eS4gQmFzZSBpcyBjb252ZXJ0ZWQgdG8KLSAgICAgICAgICAgb2JqZWN0IGZpcnN0LgotCi0g
ICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFu
eSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCi0KLSAgICAgICAgICAg
VGhpcyBvcGNvZGUgaXMgbWFpbmx5IHVzZWQgdG8gaW5pdGlhbGl6ZSBhcnJheSBsaXRlcmFscy4K
LSAgICAgICAgKi8KLSAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1
ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSBhcnJheVZhbHVlID0gY2Fs
bEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKLSAgICAgICAgQVNTRVJUKGlzSlNBcnJheShhcnJh
eVZhbHVlKSk7Ci0gICAgICAgIGFzQXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVjdEluZGV4KGNh
bGxGcmFtZSwgcHJvcGVydHksIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKLQotICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfYnlfaW5kZXgpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcCkgewotICAg
ICAgICAvKiBsb29wIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAKLSAgICAgICAgICAgSnVtcHMg
dW5jb25kaXRpb25hbGx5IHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudAotICAgICAg
ICAgICBpbnN0cnVjdGlvbi4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGlu
c3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBK
UyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICAqLwotI2lmIEVOQUJMRShPUENPREVfU1RB
VFMpCi0gICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlm
Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBDSEVDS19G
T1JfVElNRU9VVCgpOwotICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam1wKSB7Ci0gICAgICAgIC8q
IGptcCB0YXJnZXQob2Zmc2V0KQotCi0gICAgICAgICAgIEp1bXBzIHVuY29uZGl0aW9uYWxseSB0
byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgaW5zdHJ1Y3Rpb24u
Ci0gICAgICAgICovCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKLSAgICAgICAgT3Bjb2RlU3Rh
dHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCk7Ci0jZW5kaWYKLSAgICAgICAgaW50IHRhcmdldCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaGludCkg
ewotICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgdW5sZXNzIHdlIGludGVuZCBvbiBkb2luZyBP
U1IgZnJvbSB0aGUgaW50ZXJwcmV0ZXIuCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2xvb3BfaGludCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVG
SU5FX09QQ09ERShvcF9sb29wX2lmX3RydWUpIHsKLSAgICAgICAgLyogbG9vcF9pZl90cnVlIGNv
bmQocikgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAotICAgICAgICAgICBKdW1wcyB0byBvZmZz
ZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZAotICAgICAgICAg
ICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMgdG8gYm9vbGVhbiBhcyB0cnVlLgotCi0g
ICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0
ZSBKUyBleGVjdXRpb24gaXMKLSAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUt
PnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICB2
UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKLSAgICAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdlBD
ICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2xvb3BfaWZfZmFsc2UpIHsKLSAg
ICAgICAgLyogbG9vcF9pZl90cnVlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKLSAgICAgICAgIAot
ICAgICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1
Y3Rpb24sIGlmIGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMg
dG8gYm9vbGVhbiBhcyBmYWxzZS4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29w
IGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRo
ZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICAqLwotICAgICAgICBpbnQgY29uZCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNh
bGxGcmFtZSkpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBDSEVD
S19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX3Ry
dWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfanRydWUpIHsKLSAgICAgICAgLyoganRydWUgY29uZChyKSB0YXJnZXQob2Zmc2V0KQot
Ci0gICAgICAgICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0
cnVjdGlvbiwgaWYgYW5kCi0gICAgICAgICAgIG9ubHkgaWYgcmVnaXN0ZXIgY29uZCBjb252ZXJ0
cyB0byBib29sZWFuIGFzIHRydWUuCi0gICAgICAgICovCi0gICAgICAgIGludCBjb25kID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJh
bWUpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
anRydWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9P
UENPREUob3BfamZhbHNlKSB7Ci0gICAgICAgIC8qIGpmYWxzZSBjb25kKHIpIHRhcmdldChvZmZz
ZXQpCi0KLSAgICAgICAgICAgSnVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50
IGluc3RydWN0aW9uLCBpZiBhbmQKLSAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBjb25kIGNv
bnZlcnRzIHRvIGJvb2xlYW4gYXMgZmFsc2UuCi0gICAgICAgICovCi0gICAgICAgIGludCBjb25k
ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
Y2FsbEZyYW1lKSkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2pmYWxzZSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9qZXFfbnVsbCkgewotICAgICAgICAvKiBqZXFfbnVsbCBzcmMocikg
dGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20g
dGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lz
dGVyIHNyYyBpcyBudWxsLgotICAgICAgICAqLwotICAgICAgICBpbnQgc3JjID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTVmFsdWUgc3JjVmFsdWUgPSBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCk7Ci0KLSAgICAg
ICAgaWYgKHNyY1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgKHNyY1ZhbHVlLmlzQ2VsbCgp
ICYmIHNyY1ZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpKSB7Ci0gICAgICAgICAgICB2UEMg
Kz0gdGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfamVxX251bGwpOwotICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5lcV9udWxsKSB7
Ci0gICAgICAgIC8qIGpuZXFfbnVsbCBzcmMocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAg
ICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlm
IGFuZAotICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIHNyYyBpcyBub3QgbnVsbC4KLSAgICAg
ICAgKi8KLSAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0
YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHNyY1ZhbHVlID0gY2Fs
bEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmICghc3JjVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAoIXNyY1ZhbHVlLmlzQ2VsbCgpIHx8ICEoc3JjVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSkpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3Bfam5lcV9udWxsKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2puZXFfcHRyKSB7Ci0gICAgICAgIC8qIGpuZXFf
cHRyIHNyYyhyKSBwdHIoanNDZWxsKSB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0gICAgICAg
ICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwg
aWYgdGhlIHZhbHVlIHIgaXMgZXF1YWwKLSAgICAgICAgICAgdG8gcHRyLCB1c2luZyBwb2ludGVy
IGVxdWFsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlIHNyY1ZhbHVlID0gY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpOwotICAgICAgICBpZiAo
c3JjVmFsdWUgIT0gdlBDWzJdLnUuanNDZWxsLmdldCgpKSB7Ci0gICAgICAgICAgICB2UEMgKz0g
dGFyZ2V0OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfam5lcV9wdHIpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9pZl9sZXNzKSB7
Ci0gICAgICAgIC8qIGxvb3BfaWZfbGVzcyBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkK
LQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBy
ZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAgICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVy
YXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRo
ZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJl
c3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotCi0gICAgICAgICAgIEFkZGl0aW9uYWxs
eSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRpb24gaXMKLSAg
ICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KLSAgICAgICAgICovCi0gICAgICAg
IEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5q
c1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBz
cmMyKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIENI
RUNLX0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZf
bGVzcyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9sb29wX2lmX2xlc3NlcSkgewotICAgICAgICAvKiBsb29wX2lmX2xlc3NlcSBzcmMx
KHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciBy
ZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWdpc3RlcgotICAgICAgICAg
ICBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8PScgb3BlcmF0b3IsIGFuZCB0aGVuIGp1
bXBzIHRvCi0gICAgICAgICAgIG9mZnNldCB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVj
dGlvbiwgaWYgYW5kIG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBh
cmlzb24gaXMgdHJ1ZS4KLQotICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3Ry
dWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9uIGlzCi0gICAgICAgICAgIHRoZSBKUyB0
aW1lb3V0IGlzIHJlYWNoZWQuCi0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNh
bGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUg
c3JjMiA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAg
IGludCB0YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBqc0xlc3NFcTx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQo
KTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9sZXNzZXEpOwotICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9p
Zl9ncmVhdGVyKSB7Ci0gICAgICAgIC8qIGxvb3BfaWZfZ3JlYXRlciBzcmMxKHIpIHNyYzIocikg
dGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMx
IGlzIGdyZWF0ZXIgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAgICB3aXRoIHRoZSBF
Q01BU2NyaXB0ICc+JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAg
ICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0
aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotCi0gICAg
ICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBK
UyBleGVjdXRpb24gaXMKLSAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KLSAg
ICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2
UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbM10u
dS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8ZmFsc2U+
KGNhbGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7Ci0gICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RF
X0xFTkdUSChvcF9sb29wX2lmX2dyZWF0ZXIpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbG9vcF9pZl9ncmVhdGVyZXEpIHsKLSAgICAg
ICAgLyogbG9vcF9pZl9ncmVhdGVyZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0K
LSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4g
b3IgZXF1YWwgdG8gcmVnaXN0ZXIKLSAgICAgICAgICAgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNj
cmlwdCAnPj0nIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1wcyB0bwotICAgICAgICAgICBvZmZzZXQg
dGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBvbmx5IGlmIHRoZSAK
LSAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHRydWUuCi0KLSAgICAgICAg
ICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBtYXkgdGVybWluYXRlIEpTIGV4
ZWN1dGlvbiBpcwotICAgICAgICAgICB0aGUgSlMgdGltZW91dCBpcyByZWFjaGVkLgotICAgICAg
ICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFu
ZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJd
LnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXE8ZmFsc2U+KGNh
bGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
Ci0gICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9sb29wX2lmX2dyZWF0ZXJlcSk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
LSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qbGVzcykgewotICAgICAgICAvKiBqbGVzcyBz
cmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mgd2hldGhl
ciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAgICAgICAg
ICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zm
c2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBh
bmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0
cnVlLgotICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBD
WzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJh
bWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0g
dlBDWzNdLnUub3BlcmFuZDsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzczx0cnVlPihj
YWxsRnJhbWUsIHNyYzEsIHNyYzIpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICB2UEMgKz0gdGFyZ2V0
OwotICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfamxlc3NlcSkgewotICAgICAgICAvKiBq
bGVzc2VxIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQotICAgICAgICAgCi0gICAgICAg
ICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bwot
ICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0nIG9wZXJh
dG9yLAotICAgICAgICAgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBj
dXJyZW50IGluc3RydWN0aW9uLAotICAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIHJlc3VsdCBv
ZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgotICAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBz
cmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAg
SlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAg
ICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPHRydWU+KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7Ci0g
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1
bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2psZXNzZXEpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAg
IERFRklORV9PUENPREUob3BfamdyZWF0ZXIpIHsKLSAgICAgICAgLyogamdyZWF0ZXIgc3JjMShy
KSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVn
aXN0ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAg
d2l0aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNl
dAotICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5k
IG9ubHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgdHJ1
ZS4KLSAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sx
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8ZmFsc2U+KGNh
bGxGcmFtZSwgc3JjMiwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qZ3JlYXRlcmVxKSB7Ci0gICAgICAg
IC8qIGpncmVhdGVyZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0gICAgICAgICAK
LSAgICAgICAgIENoZWNrcyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvCi0gICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0
ICc+PScgb3BlcmF0b3IsCi0gICAgICAgICBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQgdGFyZ2V0
IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sCi0gICAgICAgICBpZiBhbmQgb25seSBpZiB0
aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHRydWUuCi0gICAgICAgICAqLwotICAgICAg
ICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXE8ZmFsc2U+KGNhbGxGcmFtZSwgc3Jj
Miwgc3JjMSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7Ci0gICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5sZXNzKSB7Ci0gICAgICAgIC8qIGpu
bGVzcyBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAgICAgICBDaGVja3Mg
d2hldGhlciByZWdpc3RlciBzcmMxIGlzIGxlc3MgdGhhbiByZWdpc3RlciBzcmMyLCBhcwotICAg
ICAgICAgICB3aXRoIHRoZSBFQ01BU2NyaXB0ICc8JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMg
dG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9u
LCBpZiBhbmQgb25seSBpZiB0aGUgCi0gICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNv
biBpcyBmYWxzZS4KLSAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1l
LT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSBzcmMyID0g
Y2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaW50IHRh
cmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3M8
dHJ1ZT4oY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIHZQQyAr
PSB0YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpOwotICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfam5sZXNzZXEpIHsKLSAg
ICAgICAgLyogam5sZXNzZXEgc3JjMShyKSBzcmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAg
ICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0ZXIgc3JjMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8KLSAgICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0n
IG9wZXJhdG9yLAotICAgICAgICAgICBhbmQgdGhlbiBqdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZy
b20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRo
ZXJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBmYWxzZS4KLSAgICAgICAgKi8KLSAgICAgICAg
SlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICAgICAgaW50IHRhcmdldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcTx0cnVlPihjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwot
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2pubGVzc2VxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJ
TkVfT1BDT0RFKG9wX2puZ3JlYXRlcikgewotICAgICAgICAvKiBqbmdyZWF0ZXIgc3JjMShyKSBz
cmMyKHIpIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgQ2hlY2tzIHdoZXRoZXIgcmVnaXN0
ZXIgc3JjMSBpcyBncmVhdGVyIHRoYW4gcmVnaXN0ZXIgc3JjMiwgYXMKLSAgICAgICAgICAgd2l0
aCB0aGUgRUNNQVNjcmlwdCAnPicgb3BlcmF0b3IsIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldAot
ICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kIG9u
bHkgaWYgdGhlIAotICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgZmFsc2Uu
Ci0gICAgICAgICovCi0gICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFtZS0+cih2UENbMV0u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgc3JjMiA9IGNhbGxGcmFtZS0+
cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENb
M10udS5vcGVyYW5kOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzPGZhbHNlPihjYWxs
RnJhbWUsIHNyYzIsIHNyYzEpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsK
LSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9qbmdyZWF0ZXJlcSkgewotICAgICAg
ICAvKiBqbmdyZWF0ZXJlcSBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAg
ICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMxIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0bwotICAgICAgICAgICByZWdpc3RlciBzcmMyLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc+
PScgb3BlcmF0b3IsCi0gICAgICAgICAgIGFuZCB0aGVuIGp1bXBzIHRvIG9mZnNldCB0YXJnZXQg
ZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwKLSAgICAgICAgICAgaWYgYW5kIG9ubHkgaWYg
dGhlcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIGZhbHNlLgotICAgICAgICAqLwotICAgICAg
ICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgp
OwotICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAg
ICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxPGZhbHNlPihjYWxsRnJhbWUsIHNyYzIsIHNyYzEp
OwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IXJlc3VsdCkgewotICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKLSAgICAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2puZ3JlYXRlcmVxKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX3N3aXRjaF9pbW0pIHsKLSAgICAgICAgLyogc3dpdGNoX2ltbSB0
YWJsZUluZGV4KG4pIGRlZmF1bHRPZmZzZXQob2Zmc2V0KSBzY3J1dGluZWUocikKLQotICAgICAg
ICAgICBQZXJmb3JtcyBhIHJhbmdlIGNoZWNrZWQgc3dpdGNoIG9uIHRoZSBzY3J1dGluZWUgdmFs
dWUsIHVzaW5nCi0gICAgICAgICAgIHRoZSB0YWJsZUluZGV4LXRoIGltbWVkaWF0ZSBzd2l0Y2gg
anVtcCB0YWJsZS4gIElmIHRoZSBzY3J1dGluZWUgdmFsdWUKLSAgICAgICAgICAgaXMgYW4gaW1t
ZWRpYXRlIG51bWJlciBpbiB0aGUgcmFuZ2UgY292ZXJlZCBieSB0aGUgcmVmZXJlbmNlZCBqdW1w
Ci0gICAgICAgICAgIHRhYmxlLCBhbmQgdGhlIHZhbHVlIGF0IGp1bXBUYWJsZVtzY3J1dGluZWUg
dmFsdWVdIGlzIG5vbi16ZXJvLCB0aGVuCi0gICAgICAgICAgIHRoYXQgdmFsdWUgaXMgdXNlZCBh
cyB0aGUganVtcCBvZmZzZXQsIG90aGVyd2lzZSBkZWZhdWx0T2Zmc2V0IGlzIHVzZWQuCi0gICAg
ICAgICAqLwotICAgICAgICBpbnQgdGFibGVJbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSBzY3J1dGluZWUgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwot
ICAgICAgICBpZiAoc2NydXRpbmVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHZQQyArPSBjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzY3J1dGluZWUuYXNJbnQzMigpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgZWxzZSBpZiAo
c2NydXRpbmVlLmlzRG91YmxlKCkgJiYgc2NydXRpbmVlLmFzRG91YmxlKCkgPT0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAgdlBDICs9IGNv
ZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZh
bHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSwgZGVmYXVsdE9m
ZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0Owot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bf
c3dpdGNoX2NoYXIpIHsKLSAgICAgICAgLyogc3dpdGNoX2NoYXIgdGFibGVJbmRleChuKSBkZWZh
dWx0T2Zmc2V0KG9mZnNldCkgc2NydXRpbmVlKHIpCi0KLSAgICAgICAgICAgUGVyZm9ybXMgYSBy
YW5nZSBjaGVja2VkIHN3aXRjaCBvbiB0aGUgc2NydXRpbmVlIHZhbHVlLCB1c2luZwotICAgICAg
ICAgICB0aGUgdGFibGVJbmRleC10aCBjaGFyYWN0ZXIgc3dpdGNoIGp1bXAgdGFibGUuICBJZiB0
aGUgc2NydXRpbmVlIHZhbHVlCi0gICAgICAgICAgIGlzIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJp
bmcgaW4gdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIHJlZmVyZW5jZWQganVtcAotICAgICAgICAg
ICB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBhdCBqdW1wVGFibGVbc2NydXRpbmVlIHZhbHVlXSBpcyBu
b24temVybywgdGhlbgotICAgICAgICAgICB0aGF0IHZhbHVlIGlzIHVzZWQgYXMgdGhlIGp1bXAg
b2Zmc2V0LCBvdGhlcndpc2UgZGVmYXVsdE9mZnNldCBpcyB1c2VkLgotICAgICAgICAgKi8KLSAg
ICAgICAgaW50IHRhYmxlSW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgZGVm
YXVsdE9mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgc2NydXRpbmVl
ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYg
KCFzY3J1dGluZWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJp
bmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBsKCk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZz
ZXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdlBDICs9IGNvZGVCbG9jay0+
Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKCgqdmFs
dWUpWzBdLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3Bfc3dpdGNoX3N0cmluZykgewotICAg
ICAgICAvKiBzd2l0Y2hfc3RyaW5nIHRhYmxlSW5kZXgobikgZGVmYXVsdE9mZnNldChvZmZzZXQp
IHNjcnV0aW5lZShyKQotCi0gICAgICAgICAgIFBlcmZvcm1zIGEgc3BhcnNlIGhhc2htYXAgYmFz
ZWQgc3dpdGNoIG9uIHRoZSB2YWx1ZSBpbiB0aGUgc2NydXRpbmVlCi0gICAgICAgICAgIHJlZ2lz
dGVyLCB1c2luZyB0aGUgdGFibGVJbmRleC10aCBzdHJpbmcgc3dpdGNoIGp1bXAgdGFibGUuICBJ
ZiB0aGUgCi0gICAgICAgICAgIHNjcnV0aW5lZSB2YWx1ZSBpcyBhIHN0cmluZyB0aGF0IGV4aXN0
cyBhcyBhIGtleSBpbiB0aGUgcmVmZXJlbmNlZCAKLSAgICAgICAgICAganVtcCB0YWJsZSwgdGhl
biB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpbmcgaXMgdXNlZCBhcyB0aGUgCi0g
ICAgICAgICAgIGp1bXAgb2Zmc2V0LCBvdGhlcndpc2UgZGVmYXVsdE9mZnNldCBpcyB1c2VkLgot
ICAgICAgICAgKi8KLSAgICAgICAgaW50IHRhYmxlSW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUgc2NydXRpbmVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KTsKLSAgICAgICAgaWYgKCFzY3J1dGluZWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHZQQyAr
PSBkZWZhdWx0T2Zmc2V0OwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgdlBDICs9IGNvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKGFz
U3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpLCBkZWZhdWx0T2Zmc2V0
KTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RF
KG9wX25ld19mdW5jKSB7Ci0gICAgICAgIC8qIG5ld19mdW5jIGRzdChyKSBmdW5jKGYpCi0KLSAg
ICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBGdW5jdGlvbiBpbnN0YW5jZSBmcm9tIGZ1bmN0aW9u
IGZ1bmMgYW5kCi0gICAgICAgICAgIHRoZSBjdXJyZW50IHNjb3BlIGNoYWluIHVzaW5nIHRoZSBv
cmlnaW5hbCBGdW5jdGlvbgotICAgICAgICAgICBjb25zdHJ1Y3RvciwgdXNpbmcgdGhlIHJ1bGVz
IGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1
bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGZ1bmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc2hvdWxkQ2hlY2sgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCkgfHwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lz
dGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgICAgIGlmICghc2hvdWxkQ2hlY2sgfHwgIWNhbGxGcmFt
ZS0+cihkc3QpLmpzVmFsdWUoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihk
c3QpID0gSlNWYWx1ZShKU0Z1bmN0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLCBjb2RlQmxvY2stPmZ1
bmN0aW9uRGVjbChmdW5jKSwgY2FsbEZyYW1lLT5zY29wZSgpKSk7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfbmV3X2Z1bmMpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfbmV3X2Z1bmNfZXhwKSB7Ci0gICAgICAgIC8q
IG5ld19mdW5jX2V4cCBkc3QocikgZnVuYyhmKQotCi0gICAgICAgICAgIENvbnN0cnVjdHMgYSBu
ZXcgRnVuY3Rpb24gaW5zdGFuY2UgZnJvbSBmdW5jdGlvbiBmdW5jIGFuZAotICAgICAgICAgICB0
aGUgY3VycmVudCBzY29wZSBjaGFpbiB1c2luZyB0aGUgb3JpZ2luYWwgRnVuY3Rpb24KLSAgICAg
ICAgICAgY29uc3RydWN0b3IsIHVzaW5nIHRoZSBydWxlcyBmb3IgZnVuY3Rpb24gZXhwcmVzc2lv
bnMsIGFuZAotICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgotICAg
ICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZ1bmNJbmRleCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCkgfHwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b24gPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihmdW5jSW5kZXgpOwotICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24sIGNhbGxG
cmFtZS0+c2NvcGUoKSk7Ci0KLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBK
U1ZhbHVlKGZ1bmMpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19mdW5j
X2V4cCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgLyogY2FsbF9ldmFsIGZ1bmMocikgYXJnQ291
bnQobikgcmVnaXN0ZXJPZmZzZXQobikKLQotICAgICAgICAgICBDYWxsIGEgZnVuY3Rpb24gbmFt
ZWQgImV2YWwiIHdpdGggbm8gZXhwbGljaXQgInRoaXMiIHZhbHVlCi0gICAgICAgICAgICh3aGlj
aCBtYXkgdGhlcmVmb3JlIGJlIHRoZSBldmFsIG9wZXJhdG9yKS4gSWYgcmVnaXN0ZXIKLSAgICAg
ICAgICAgdGhpc1ZhbCBpcyB0aGUgZ2xvYmFsIG9iamVjdCwgYW5kIHJlZ2lzdGVyIGZ1bmMgY29u
dGFpbnMKLSAgICAgICAgICAgdGhhdCBnbG9iYWwgb2JqZWN0J3Mgb3JpZ2luYWwgZ2xvYmFsIGV2
YWwgZnVuY3Rpb24sIHRoZW4KLSAgICAgICAgICAgcGVyZm9ybSB0aGUgZXZhbCBvcGVyYXRvciBp
biBsb2NhbCBzY29wZSAoaW50ZXJwcmV0aW5nCi0gICAgICAgICAgIHRoZSBhcmd1bWVudCByZWdp
c3RlcnMgYXMgZm9yIHRoZSAiY2FsbCIKLSAgICAgICAgICAgb3Bjb2RlKS4gT3RoZXJ3aXNlLCBh
Y3QgZXhhY3RseSBhcyB0aGUgImNhbGwiIG9wY29kZSB3b3VsZC4KLSAgICAgICAgICovCi0KLSAg
ICAgICAgaW50IGZ1bmMgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQg
PSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10u
dS5vcGVyYW5kOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUo
KSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8
IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkp
OwotICAgICAgICBKU1ZhbHVlIGZ1bmNWYWwgPSBjYWxsRnJhbWUtPnIoZnVuYykuanNWYWx1ZSgp
OwotCi0gICAgICAgIGlmIChpc0hvc3RGdW5jdGlvbihmdW5jVmFsLCBnbG9iYWxGdW5jRXZhbCkp
IHsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCks
IGNhbGxGcmFtZS0+c2NvcGUoKSwgY2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rp
b24qPihmdW5jVmFsKSk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbChuZXdD
YWxsRnJhbWUpOwotICAgICAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERhdGEt
PmV4Y2VwdGlvbikpCi0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAg
IGZ1bmN0aW9uUmV0dXJuVmFsdWUgPSByZXN1bHQ7Ci0KLSAgICAgICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX2NhbGxfZXZhbCk7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCB0aGUgYmxlc3NlZCB2ZXJz
aW9uIG9mIGV2YWwsIHNvIHByb2Nlc3MgdGhpcwotICAgICAgICAvLyBpbnN0cnVjdGlvbiBhcyBh
IG5vcm1hbCBmdW5jdGlvbiBjYWxsLgotICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gb3BfY2Fs
bAotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NhbGwpIHsKLSAgICAgICAgLyogY2FsbCBm
dW5jKHIpIGFyZ0NvdW50KG4pIHJlZ2lzdGVyT2Zmc2V0KG4pCi0KLSAgICAgICAgICAgUGVyZm9y
bSBhIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAgIAotICAgICAgICAgICByZWdpc3Rlck9mZnNl
dCBpcyB0aGUgZGlzdGFuY2UgdGhlIGNhbGxGcmFtZSBwb2ludGVyIHNob3VsZCBtb3ZlCi0gICAg
ICAgICAgIGJlZm9yZSB0aGUgVk0gaW5pdGlhbGl6ZXMgdGhlIG5ldyBjYWxsIGZyYW1lJ3MgaGVh
ZGVyLgotICAgICAgICAgICAKLSAgICAgICAgICAgZHN0IGlzIHdoZXJlIG9wX3JldCBzaG91bGQg
c3RvcmUgaXRzIHJlc3VsdC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaW50IGZ1bmMgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10udS5vcGVyYW5kOwotCi0gICAgICAg
IEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihmdW5jKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
diwgY2FsbERhdGEpOwotCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY2FsbERhdGEuanMuc2NvcGU7Ci0K
LSAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJl
Z2lzdGVyRmlsZSwgY2FsbEZyYW1lLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbEZy
YW1lID0gcHJldmlvdXNDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUg
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBn
b3RvIHZtX3Rocm93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYWxsRnJhbWUtPmlu
aXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNj
b3BlLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikp
OwotICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOwotICAgICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgICp0
b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotCi0jaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykK
LSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxs
RnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0
ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbCksIHNjb3BlLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVjdCh2
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gbmV3Q2FsbEZyYW1lOwotICAgICAgICAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKLSAgICAgICAgICAgICAgICAq
dG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLQotICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5WYWx1
ZSA9IHJldHVyblZhbHVlOwotCi0gICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsKTsKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwotCi0gICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoY2FsbEZyYW1lLCB2KTsKLSAgICAgICAg
Z290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3Mp
IHsKLSAgICAgICAgLyogY2FsbF92YXJhcmdzIGNhbGxlZShyKSB0aGlzVmFsdWUocikgYXJndW1l
bnRzKHIpIGZpcnN0RnJlZVJlZ2lzdGVyKG4pCi0gICAgICAgICAKLSAgICAgICAgIFBlcmZvcm0g
YSBmdW5jdGlvbiBjYWxsIHdpdGggYSBkeW5hbWljIHNldCBvZiBhcmd1bWVudHMuCi0gICAgICAg
ICAKLSAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IGlzIHRoZSBkaXN0YW5jZSB0aGUgY2FsbEZyYW1l
IHBvaW50ZXIgc2hvdWxkIG1vdmUKLSAgICAgICAgIGJlZm9yZSB0aGUgVk0gaW5pdGlhbGl6ZXMg
dGhlIG5ldyBjYWxsIGZyYW1lJ3MgaGVhZGVyLCBleGNsdWRpbmcKLSAgICAgICAgIHNwYWNlIGZv
ciBhcmd1bWVudHMuCi0gICAgICAgICAKLSAgICAgICAgIGRzdCBpcyB3aGVyZSBvcF9yZXQgc2hv
dWxkIHN0b3JlIGl0cyByZXN1bHQuCi0gICAgICAgICAqLwotICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZSB2ID0gY2FsbEZyYW1lLT5yKHZQQ1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNW
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cih2UENbM10u
dS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IHZQ
Q1s0XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBsb2Fk
VmFyYXJncyhjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsIGZp
cnN0RnJlZVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERh
dGEtPmV4Y2VwdGlvbikpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICBpbnQg
YXJnQ291bnQgPSBuZXdDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0K
LSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEodiwgY2FsbERhdGEpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGUgPSBj
YWxsRGF0YS5qcy5zY29wZTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxE
YXRhU2NvcGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCEhZXJyb3IpKSB7Ci0gICAgICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBlcnJvcjsKLSAgICAgICAgICAgICAgICBnb3RvIHZt
X3Rocm93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2Rl
Rm9yQ2FsbCgpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgMCwgYXJn
Q291bnQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2Fs
bEZyYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNhbGxEYXRhU2NvcGUsIGNhbGxGcmFtZSwgYXJn
Q291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikpOwotICAgICAgICAgICAgY29kZUJsb2NrID0g
bmV3Q29kZUJsb2NrOwotICAgICAgICAgICAgY2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAg
ICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAgICAgICAgdlBD
ID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotCi0jaWYgRU5BQkxFKE9Q
Q09ERV9TVEFUUykKLSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlv
bigpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
SG9zdCkgewotICAgICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7
Ci0gICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpLCBzY29wZSwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3Qodikp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gbmV3Q2FsbEZyYW1l
OwotICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29y
ZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZnVuY3Rpb25SZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpOwotICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLSAgICAgICAgCi0gICAgICAgIGV4Y2Vw
dGlvblZhbHVlID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoY2FsbEZyYW1lLCB2KTsKLSAgICAg
ICAgZ290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF90ZWFyX29mZl9h
Y3RpdmF0aW9uKSB7Ci0gICAgICAgIC8qIHRlYXJfb2ZmX2FjdGl2YXRpb24gYWN0aXZhdGlvbihy
KQotCi0gICAgICAgICAgIENvcHkgbG9jYWxzIGFuZCBuYW1lZCBwYXJhbWV0ZXJzIGZyb20gdGhl
IHJlZ2lzdGVyIGZpbGUgdG8gdGhlIGhlYXAuCi0gICAgICAgICAgIFBvaW50IHRoZSBiaW5kaW5n
cyBpbiAnYWN0aXZhdGlvbicgdG8gdGhpcyBuZXcgYmFja2luZyBzdG9yZS4KLQotICAgICAgICAg
ICBUaGlzIG9wY29kZSBhcHBlYXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25zIHRoYXQgcmVx
dWlyZSBmdWxsIHNjb3BlIGNoYWlucy4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYWN0aXZh
dGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm5lZWRz
RnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAgICAgIEpTVmFsdWUgYWN0aXZhdGlvblZhbHVlID0gY2Fs
bEZyYW1lLT5yKGFjdGl2YXRpb24pLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGFjdGl2YXRpb25W
YWx1ZSkKLSAgICAgICAgICAgIGFzQWN0aXZhdGlvbihhY3RpdmF0aW9uVmFsdWUpLT50ZWFyT2Zm
KCpnbG9iYWxEYXRhKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBE
RUZJTkVfT1BDT0RFKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cykgewotICAgICAgICAvKiB0ZWFyX29m
Zl9hcmd1bWVudHMgYXJndW1lbnRzKHIpIGFjdGl2YXRpb24ocikKLQotICAgICAgICAgICBDb3B5
IG5hbWVkIHBhcmFtZXRlcnMgZnJvbSB0aGUgcmVnaXN0ZXIgZmlsZSB0byB0aGUgaGVhcC4gUG9p
bnQgdGhlCi0gICAgICAgICAgIGJpbmRpbmdzIGluICdhcmd1bWVudHMnIHRvIHRoaXMgbmV3IGJh
Y2tpbmcgc3RvcmUuIChJZiAnYWN0aXZhdGlvbicKLSAgICAgICAgICAgd2FzIGFsc28gY29waWVk
IHRvIHRoZSBoZWFwLCAnYXJndW1lbnRzJyB3aWxsIHBvaW50IHRvIGl0cyBzdG9yYWdlLikKLQot
ICAgICAgICAgICBUaGlzIG9wY29kZSBhcHBlYXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25z
IHRoYXQgZG9uJ3QgcmVxdWlyZSBmdWxsCi0gICAgICAgICAgIHNjb3BlIGNoYWlucywgYnV0IGRv
IHVzZSAnYXJndW1lbnRzJy4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgYXJndW1lbnRzID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFjdGl2YXRpb24gPSB2UENbMl0udS5vcGVy
YW5kOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpOwotICAgICAg
ICBpZiAoSlNWYWx1ZSBhcmd1bWVudHNWYWx1ZSA9IGNhbGxGcmFtZS0+cih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
SlNWYWx1ZSBhY3RpdmF0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPnIoYWN0aXZhdGlvbikuanNWYWx1
ZSgpKQotICAgICAgICAgICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlKS0+ZGlkVGVh
ck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLCBhc0FjdGl2YXRpb24oYWN0aXZhdGlvblZhbHVlKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXNBcmd1bWVudHMoYXJndW1lbnRz
VmFsdWUpLT50ZWFyT2ZmKGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF90ZWFyX29mZl9hcmd1bWVudHMpOwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcmV0KSB7Ci0gICAgICAgIC8q
IHJldCByZXN1bHQocikKLSAgICAgICAgICAgCi0gICAgICAgICAgIFJldHVybiByZWdpc3RlciBy
ZXN1bHQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY3VycmVudAotICAgICAgICAgICBmdW5j
dGlvbiBjYWxsLCB3cml0aW5nIGl0IGludG8gZnVuY3Rpb25SZXR1cm5WYWx1ZS4KLSAgICAgICAg
ICAgSW4gYWRkaXRpb24sIHVud2luZCBvbmUgY2FsbCBmcmFtZSBhbmQgcmVzdG9yZSB0aGUgc2Nv
cGUKLSAgICAgICAgICAgY2hhaW4sIGNvZGUgYmxvY2sgaW5zdHJ1Y3Rpb24gcG9pbnRlciBhbmQg
cmVnaXN0ZXIgYmFzZQotICAgICAgICAgICB0byB0aG9zZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlv
bi4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LQotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT5yKHJlc3VsdCkuanNW
YWx1ZSgpOwotCi0gICAgICAgIHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuVlBDKCk7Ci0gICAgICAg
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLQotICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOwotCi0gICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwotICAgICAg
ICBmdW5jdGlvblJldHVyblZhbHVlID0gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCkgewotICAgICAgICAvKiBv
cF9jYWxsX3B1dF9yZXN1bHQgcmVzdWx0KHIpCi0gICAgICAgICAgIAotICAgICAgICAgICBNb3Zl
IGNhbGwgcmVzdWx0IGZyb20gZnVuY3Rpb25SZXR1cm5WYWx1ZSB0byBjYWxsZXIncwotICAgICAg
ICAgICBleHBlY3RlZCByZXR1cm4gdmFsdWUgcmVnaXN0ZXIuCi0gICAgICAgICovCi0KLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZQQ1sxXS51Lm9wZXJhbmQpID0gZnVuY3Rpb25SZXR1
cm5WYWx1ZTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9yZXN1
bHQpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENP
REUob3BfcmV0X29iamVjdF9vcl90aGlzKSB7Ci0gICAgICAgIC8qIHJldCByZXN1bHQocikKLSAg
ICAgICAgICAgCi0gICAgICAgICAgIFJldHVybiByZWdpc3RlciByZXN1bHQgYXMgdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGUgY3VycmVudAotICAgICAgICAgICBmdW5jdGlvbiBjYWxsLCB3cml0aW5n
IGl0IGludG8gdGhlIGNhbGxlcidzIGV4cGVjdGVkIHJldHVybgotICAgICAgICAgICB2YWx1ZSBy
ZWdpc3Rlci4gSW4gYWRkaXRpb24sIHVud2luZCBvbmUgY2FsbCBmcmFtZSBhbmQKLSAgICAgICAg
ICAgcmVzdG9yZSB0aGUgc2NvcGUgY2hhaW4sIGNvZGUgYmxvY2sgaW5zdHJ1Y3Rpb24gcG9pbnRl
ciBhbmQKLSAgICAgICAgICAgcmVnaXN0ZXIgYmFzZSB0byB0aG9zZSBvZiB0aGUgY2FsbGluZyBm
dW5jdGlvbi4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKLQotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT5yKHJlc3Vs
dCkuanNWYWx1ZSgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSghcmV0dXJuVmFsdWUuaXNPYmpl
Y3QoKSkpCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZS0+cih2UENbMl0udS5v
cGVyYW5kKS5qc1ZhbHVlKCk7Ci0KLSAgICAgICAgdlBDID0gY2FsbEZyYW1lLT5yZXR1cm5WUEMo
KTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotCi0gICAg
ICAgIGlmIChjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci0KLSAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBjYWxsRnJh
bWU7Ci0gICAgICAgIGZ1bmN0aW9uUmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZTsKLSAgICAgICAg
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGNvZGVC
bG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLQotICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfZW50ZXIpIHsKLSAgICAgICAgLyog
ZW50ZXIKLQotICAgICAgICAgICBJbml0aWFsaXplcyBsb2NhbCB2YXJpYWJsZXMgdG8gdW5kZWZp
bmVkLiBJZiB0aGUgY29kZSBibG9jayByZXF1aXJlcwotICAgICAgICAgICBhbiBhY3RpdmF0aW9u
LCBlbnRlcl93aXRoX2FjdGl2YXRpb24gaXMgdXNlZCBpbnN0ZWFkLgotCi0gICAgICAgICAgIFRo
aXMgb3Bjb2RlIGFwcGVhcnMgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZSBibG9jay4K
LSAgICAgICAgKi8KLQotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGNvdW50ID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGkpID0ganNVbmRlZmluZWQoKTsKLQotICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnRlcik7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jcmVhdGVfYWN0aXZhdGlvbikgewotICAg
ICAgICAvKiBjcmVhdGVfYWN0aXZhdGlvbiBkc3QocikKLQotICAgICAgICAgICBJZiB0aGUgYWN0
aXZhdGlvbiBvYmplY3QgZm9yIHRoaXMgY2FsbGZyYW1lIGhhcyBub3QgeWV0IGJlZW4gY3JlYXRl
ZCwKLSAgICAgICAgICAgdGhpcyBjcmVhdGVzIGl0IGFuZCB3cml0ZXMgaXQgYmFjayB0byBkc3Qu
Ci0gICAgICAgICovCi0KLSAgICAgICAgaW50IGFjdGl2YXRpb25SZWcgPSB2UENbMV0udS5vcGVy
YW5kOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnKS5qc1ZhbHVlKCkp
IHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihhY3RpdmF0aW9uUmVnKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKLSAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2NyZWF0ZV90aGlzKSB7
Ci0gICAgICAgIC8qIG9wX2NyZWF0ZV90aGlzIHRoaXMocikgcHJvdG8ocikKLQotICAgICAgICAg
ICBBbGxvY2F0ZSBhbiBvYmplY3QgYXMgJ3RoaXMnLCBmciB1c2UgaW4gY29uc3RydWN0aW9uLgot
Ci0gICAgICAgICAgIFRoaXMgb3Bjb2RlIHNob3VsZCBvbmx5IGJlIHVzZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiBhIGNvZGUKLSAgICAgICAgICAgYmxvY2suCi0gICAgICAgICovCi0KLSAgICAgICAg
aW50IHRoaXNSZWdpc3RlciA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgSlNGdW5jdGlv
biogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkp
OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwotICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0
cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7
Ci0jZW5kaWYKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5j
YWNoZWRJbmhlcml0b3JJRChjYWxsRnJhbWUpOwotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIodGhpc1JlZ2lzdGVyKSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSwgc3RydWN0
dXJlKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jcmVhdGVfdGhpcyk7Ci0g
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9j
b252ZXJ0X3RoaXMpIHsKLSAgICAgICAgLyogY29udmVydF90aGlzIHRoaXMocikKLQotICAgICAg
ICAgICBUYWtlcyB0aGUgdmFsdWUgaW4gdGhlICd0aGlzJyByZWdpc3RlciwgY29udmVydHMgaXQg
dG8gYQotICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlICd0
aGlzJyB2YWx1ZSwgYW5kCi0gICAgICAgICAgIHN0b3JlcyBpdCBpbiB0aGUgJ3RoaXMnIHJlZ2lz
dGVyLiBUaGlzIG9wY29kZSBpcyBlbWl0dGVkCi0gICAgICAgICAgIHRvIGF2b2lkIGRvaW5nIHRo
ZSBjb252ZXJzaW9uIGluIHRoZSBjYWxsZXIgdW5uZWNlc3NhcmlseS4KLQotICAgICAgICAgICBU
aGlzIG9wY29kZSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2Rl
Ci0gICAgICAgICAgIGJsb2NrLgotICAgICAgICAqLwotCi0gICAgICAgIGludCB0aGlzUmVnaXN0
ZXIgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHRoaXNWYWwgPSBjYWxsRnJh
bWUtPnIodGhpc1JlZ2lzdGVyKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmICh0aGlzVmFsLmlzUHJp
bWl0aXZlKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodGhpc1JlZ2lzdGVy
KSA9IEpTVmFsdWUodGhpc1ZhbC50b1RoaXNPYmplY3QoY2FsbEZyYW1lKSk7Ci0KLSAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY29udmVydF90aGlzKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2luaXRfbGF6eV9yZWcpIHsK
LSAgICAgICAgLyogaW5pdF9sYXp5X3JlZyBkc3QocikKLQotICAgICAgICAgICBJbml0aWFsaXNl
cyBkc3QocikgdG8gSlNWYWx1ZSgpLgotCi0gICAgICAgICAgIFRoaXMgb3Bjb2RlIGFwcGVhcnMg
b25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZSBibG9jay4KLSAgICAgICAgICovCi0gICAg
ICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotCi0gICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gSlNWYWx1ZSgpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9pbml0X2xhenlfcmVnKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAg
ICBERUZJTkVfT1BDT0RFKG9wX2NyZWF0ZV9hcmd1bWVudHMpIHsKLSAgICAgICAgLyogY3JlYXRl
X2FyZ3VtZW50cyBkc3QocikKLQotICAgICAgICAgICBDcmVhdGVzIHRoZSAnYXJndW1lbnRzJyBv
YmplY3QgYW5kIHBsYWNlcyBpdCBpbiBib3RoIHRoZQotICAgICAgICAgICAnYXJndW1lbnRzJyBj
YWxsIGZyYW1lIHNsb3QgYW5kIHRoZSBsb2NhbCAnYXJndW1lbnRzJwotICAgICAgICAgICByZWdp
c3RlciwgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQuCi0gICAgICAgICAq
LwotICAgICAgICAKLSAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgaWYgKCFjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9jb25zdHJ1
Y3QpIHsKLSAgICAgICAgLyogY29uc3RydWN0IGZ1bmMocikgYXJnQ291bnQobikgcmVnaXN0ZXJP
ZmZzZXQobikgcHJvdG8ocikgdGhpc1JlZ2lzdGVyKHIpCi0KLSAgICAgICAgICAgSW52b2tlIHJl
Z2lzdGVyICJmdW5jIiBhcyBhIGNvbnN0cnVjdG9yLiBGb3IgSlMKLSAgICAgICAgICAgZnVuY3Rp
b25zLCB0aGUgY2FsbGluZyBjb252ZW50aW9uIGlzIGV4YWN0bHkgYXMgZm9yIHRoZQotICAgICAg
ICAgICAiY2FsbCIgb3Bjb2RlLCBleGNlcHQgdGhhdCB0aGUgInRoaXMiIHZhbHVlIGlzIGEgbmV3
bHkKLSAgICAgICAgICAgY3JlYXRlZCBPYmplY3QuIEZvciBuYXRpdmUgY29uc3RydWN0b3JzLCBu
byAidGhpcyIKLSAgICAgICAgICAgdmFsdWUgaXMgcGFzc2VkLiBJbiBlaXRoZXIgY2FzZSwgdGhl
IGFyZ0NvdW50IGFuZCByZWdpc3Rlck9mZnNldAotICAgICAgICAgICByZWdpc3RlcnMgYXJlIGlu
dGVycHJldGVkIGFzIGZvciB0aGUgImNhbGwiIG9wY29kZS4KLQotICAgICAgICAgICBSZWdpc3Rl
ciBwcm90byBtdXN0IGNvbnRhaW4gdGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBvZgotICAgICAgICAg
ICByZWdpc3RlciBmdW5jLiBUaGlzIGlzIHRvIGVuYWJsZSBwb2x5bW9ycGhpYyBpbmxpbmUKLSAg
ICAgICAgICAgY2FjaGluZyBvZiB0aGlzIGxvb2t1cC4KLSAgICAgICAgKi8KLQotICAgICAgICBp
bnQgZnVuYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZQQ1szXS51Lm9wZXJh
bmQ7Ci0KLSAgICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKGZ1bmMpLmpzVmFsdWUoKTsK
LQotICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgICAgIENvbnN0cnVj
dFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodiwgY29uc3RydWN0RGF0YSk7
Ci0KLSAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKSB7Ci0gICAg
ICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY29uc3RydWN0RGF0YS5qcy5zY29wZTsK
LQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3Bl
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewotICAgICAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFt
ZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNv
bnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNv
bnN0cnVjdCgpOwotICAgICAgICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0Zv
ckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ0NvdW50KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghY2FsbEZyYW1lKSkgewot
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHByZXZpb3VzQ2FsbEZyYW1lOwotICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdU
SChvcF9jb25zdHJ1Y3QpLCBjYWxsRGF0YVNjb3BlLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291
bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikpOwotICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3
Q29kZUJsb2NrOwotICAgICAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBjYWxsRnJhbWU7Ci0g
ICAgICAgICAgICB2UEMgPSBuZXdDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0j
aWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKLSAgICAgICAgICAgIE9wY29kZVN0YXRzOjpyZXNldExh
c3RJbnN0cnVjdGlvbigpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVIb3N0KSB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUo
KTsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCks
IHNjb3BlLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVjdCh2KSk7Ci0KLSAgICAgICAgICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnRv
cENhbGxGcmFtZVNsb3QgPSBuZXdDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgU2FtcGxpbmdU
b29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgKnRvcENhbGxGcmFt
ZVNsb3QgPSBjYWxsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBmdW5jdGlvblJldHVyblZhbHVlID0gcmV0dXJuVmFs
dWU7Ci0KLSAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCk7Ci0g
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0KLSAgICAgICAgZXhjZXB0
aW9uVmFsdWUgPSBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihjYWxsRnJhbWUsIHYpOwotICAg
ICAgICBnb3RvIHZtX3Rocm93OwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3N0cmNhdCkg
ewotICAgICAgICAvKiBzdHJjYXQgZHN0KHIpIHNyYyhyKSBjb3VudChuKQotCi0gICAgICAgICAg
IENvbnN0cnVjdCBhIG5ldyBTdHJpbmcgaW5zdGFuY2UgdXNpbmcgdGhlIG9yaWdpbmFsCi0gICAg
ICAgICAgIGNvbnN0cnVjdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
LSAgICAgICAgICAgVGhlIHN0cmluZyB3aWxsIGJlIHRoZSByZXN1bHQgb2YgY29uY2F0ZW5hdGlu
ZyBjb3VudAotICAgICAgICAgICBzdHJpbmdzIHdpdGggdmFsdWVzIHRha2VuIGZyb20gcmVnaXN0
ZXJzIHN0YXJ0aW5nIGF0Ci0gICAgICAgICAgIHJlZ2lzdGVyIHNyYy4KLSAgICAgICAgKi8KLSAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMgPSB2UENb
Ml0udS5vcGVyYW5kOwotICAgICAgICBpbnQgY291bnQgPSB2UENbM10udS5vcGVyYW5kOwotCi0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gY29uY2F0ZW5hdGVTdHJpbmdzKGNh
bGxGcmFtZSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXSwgY291bnQpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3N0
cmNhdCk7Ci0KLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVf
T1BDT0RFKG9wX3RvX3ByaW1pdGl2ZSkgewotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Q
cmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdG9f
cHJpbWl0aXZlKTsKLQotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfcHVzaF93aXRoX3Njb3BlKSB7Ci0gICAgICAgIC8qIHB1c2hfd2l0aF9z
Y29wZSBzY29wZShyKQotCi0gICAgICAgICAgIENvbnZlcnRzIHJlZ2lzdGVyIHNjb3BlIHRvIG9i
amVjdCwgYW5kIHB1c2hlcyBpdCBvbnRvIHRoZSB0b3AKLSAgICAgICAgICAgb2YgdGhlIHNjb3Bl
IGNoYWluLgotICAgICAgICAqLwotICAgICAgICBpbnQgc2NvcGUgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoc2NvcGUpLmpzVmFsdWUoKTsKLSAg
ICAgICAgSlNPYmplY3QqIG8gPSB2LnRvT2JqZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLQotICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKEpTV2l0aFNj
b3BlOjpjcmVhdGUoY2FsbEZyYW1lLCBvKSk7Ci0KLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfcHVzaF93aXRoX3Njb3BlKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAg
IH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3BvcF9zY29wZSkgewotICAgICAgICAvKiBwb3Bfc2Nv
cGUKLQotICAgICAgICAgICBSZW1vdmVzIHRoZSB0b3AgaXRlbSBmcm9tIHRoZSBjdXJyZW50IHNj
b3BlIGNoYWluLgotICAgICAgICAqLwotICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGNhbGxG
cmFtZS0+c2NvcGUoKS0+bmV4dCgpKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9wb3Bfc2NvcGUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotICAgIERF
RklORV9PUENPREUob3BfZ2V0X3BuYW1lcykgewotICAgICAgICAvKiBnZXRfcG5hbWVzIGRzdChy
KSBiYXNlKHIpIGkobikgc2l6ZShuKSBicmVha1RhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAg
Q3JlYXRlcyBhIHByb3BlcnR5IG5hbWUgbGlzdCBmb3IgcmVnaXN0ZXIgYmFzZSBhbmQgcHV0cyBp
dAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QsIGluaXRpYWxpemluZyBpIGFuZCBzaXplIGZv
ciBpdGVyYXRpb24uIElmCi0gICAgICAgICAgIGJhc2UgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGp1
bXBzIHRvIGJyZWFrVGFyZ2V0LgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgaSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaXplID0gdlBDWzRdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IGJyZWFrVGFyZ2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKLQot
ICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwotICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICB2UEMgKz0gYnJlYWtU
YXJnZXQ7Ci0gICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBKU09iamVjdCogbyA9IHYudG9PYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IHN0cnVjdHVyZS0+ZW51bWVyYXRpb25D
YWNoZSgpOwotICAgICAgICBpZiAoIWpzUHJvcGVydHlOYW1lSXRlcmF0b3IgfHwganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSAhPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGNhbGxGcmFtZSkpCi0gICAgICAgICAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9y
ID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgbyk7Ci0KLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwot
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYmFzZSkgPSBKU1ZhbHVlKG8pOwotICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaSkgPSBSZWdpc3Rlcjo6d2l0aEludCgwKTsKLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNpemUpID0gUmVnaXN0ZXI6OndpdGhJbnQoanNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci0+c2l6ZSgpKTsKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X3BuYW1lcyk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAg
REVGSU5FX09QQ09ERShvcF9uZXh0X3BuYW1lKSB7Ci0gICAgICAgIC8qIG5leHRfcG5hbWUgZHN0
KHIpIGJhc2UocikgaShuKSBzaXplKG4pIGl0ZXIocikgdGFyZ2V0KG9mZnNldCkKLQotICAgICAg
ICAgICBDb3BpZXMgdGhlIG5leHQgbmFtZSBmcm9tIHRoZSBwcm9wZXJ0eSBuYW1lIGxpc3QgaW4K
LSAgICAgICAgICAgcmVnaXN0ZXIgaXRlciB0byBkc3QsIHRoZW4ganVtcHMgdG8gb2Zmc2V0IHRh
cmdldC4gSWYgdGhlcmUgYXJlIG5vCi0gICAgICAgICAgIG5hbWVzIGxlZnQsIGludmFsaWRhdGVz
IHRoZSBpdGVyYXRvciBhbmQgY29udGludWVzIHRvIHRoZSBuZXh0Ci0gICAgICAgICAgIGluc3Ry
dWN0aW9uLgotICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgaSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaXplID0gdlBDWzRdLnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IGl0ZXIgPSB2UENbNV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0g
dlBDWzZdLnUub3BlcmFuZDsKLQotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9
IGNhbGxGcmFtZS0+cihpdGVyKS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICB3aGls
ZSAoY2FsbEZyYW1lLT5yKGkpLmkoKSAhPSBjYWxsRnJhbWUtPnIoc2l6ZSkuaSgpKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIGtleSA9IGl0LT5nZXQoY2FsbEZyYW1lLCBhc09iamVjdChjYWxsRnJh
bWUtPnIoYmFzZSkuanNWYWx1ZSgpKSwgY2FsbEZyYW1lLT5yKGkpLmkoKSk7Ci0gICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoaSkgPSBSZWdpc3Rlcjo6d2l0aEludChjYWxsRnJhbWUtPnIoaSkuaSgpICsgMSk7Ci0gICAg
ICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsK
LSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGtleTsKLSAgICAg
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX25leHRfcG5hbWUpOwotICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAg
fQotICAgIERFRklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2Nv
cGVzIGNvdW50KG4pIHRhcmdldChvZmZzZXQpCi0KLSAgICAgICAgICAgUmVtb3ZlcyB0aGUgYSBu
dW1iZXIgb2YgaXRlbXMgZnJvbSB0aGUgY3VycmVudCBzY29wZSBjaGFpbgotICAgICAgICAgICBz
cGVjaWZpZWQgYnkgaW1tZWRpYXRlIG51bWJlciBjb3VudCwgdGhlbiBqdW1wcyB0byBvZmZzZXQK
LSAgICAgICAgICAgdGFyZ2V0LgotICAgICAgICAqLwotICAgICAgICBpbnQgY291bnQgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQot
ICAgICAgICBKU1Njb3BlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgICAgIHdoaWxl
IChjb3VudC0tKQotICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0KCk7Ci0gICAgICAgIGNhbGxG
cmFtZS0+c2V0U2NvcGUodG1wKTsKLQotICAgICAgICB2UEMgKz0gdGFyZ2V0OwotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNT
SUNfSU5URVJQUkVURVIpCi0gICAgLy8gQXBwZWFzZSBHQ0MKLSAgICBnb3RvICooJiZza2lwX25l
d19zY29wZSk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1c2hfbmFtZV9zY29wZSkg
ewotICAgICAgICAvKiBuZXdfc2NvcGUgcHJvcGVydHkoaWQpIHZhbHVlKHIpIGF0dHJpYnV0ZXMo
dW5zaWduZWQpCi0gICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5hbWUgc2NvcGUg
b2YgdGhlIGZvcm0geyBwcm9wZXJ0eTxhdHRyaWJ1dGVzPjogdmFsdWUgfSwKLSAgICAgICAgICAg
YW5kIHB1c2hlcyBpdCBvbnRvIHRoZSBzY29wZSBjaGFpbi4KLSAgICAgICAgICovCi0gICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoY3JlYXRlTmFtZVNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7Ci0K
LSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHVzaF9uYW1lX3Njb3BlKTsKLSAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSNpZiBFTkFCTEUoQ09NUFVURURfR09UT19D
TEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHNraXBfbmV3X3Njb3BlOgotI2VuZGlmCi0gICAgREVG
SU5FX09QQ09ERShvcF9jYXRjaCkgewotICAgICAgICAvKiBjYXRjaCBleChyKQotCi0gICAgICAg
ICAgIFJldHJpZXZlcyB0aGUgVk0ncyBjdXJyZW50IGV4Y2VwdGlvbiBhbmQgcHV0cyBpdCBpbiBy
ZWdpc3RlcgotICAgICAgICAgICBleC4gVGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIGFuIGV4Y2Vw
dGlvbiBoYXMgYmVlbiByYWlzZWQsCi0gICAgICAgICAgIGFuZCB1c3VhbGx5IGZvcm1zIHRoZSBi
ZWdpbm5pbmcgb2YgYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgICAgICovCi0gICAgICAgIEFT
U0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKTsKLSAgICAgICAgaW50IGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGV4KSA9IGV4Y2VwdGlvblZhbHVlOwotICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IEpTVmFsdWUoKTsKLQotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jYXRj
aCk7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09E
RShvcF90aHJvdykgewotICAgICAgICAvKiB0aHJvdyBleChyKQotCi0gICAgICAgICAgIFRocm93
cyByZWdpc3RlciBleCBhcyBhbiBleGNlcHRpb24uIFRoaXMgaW52b2x2ZXMgdGhyZWUKLSAgICAg
ICAgICAgc3RlcHM6IGZpcnN0LCBpdCBpcyBzZXQgYXMgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGlu
IHRoZQotICAgICAgICAgICBWTSdzIGludGVybmFsIHN0YXRlLCB0aGVuIHRoZSBzdGFjayBpcyB1
bndvdW5kIHVudGlsIGFuCi0gICAgICAgICAgIGV4Y2VwdGlvbiBoYW5kbGVyIG9yIGEgbmF0aXZl
IGNvZGUgYm91bmRhcnkgaXMgZm91bmQsIGFuZAotICAgICAgICAgICB0aGVuIGNvbnRyb2wgcmVz
dW1lcyBhdCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaWYgYW55IG9yCi0gICAgICAgICAgIGVsc2Ug
dGhlIHNjcmlwdCByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIG5lYXJlc3QgbmF0aXZlIGNhbGxlci4K
LSAgICAgICAgKi8KLQotICAgICAgICBpbnQgZXggPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+cihleCkuanNWYWx1ZSgpOwotCi0gICAgICAg
IGhhbmRsZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMg
LSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWhhbmRs
ZXIpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUsIGV4Y2VwdGlvblZh
bHVlKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
ICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBoYW5kbGVyLT50
YXJnZXQ7Ci0gICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKLSAgICB9Ci0gICAgREVGSU5FX09Q
Q09ERShvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpIHsKLSAgICAgICAgLyogb3BfdGhyb3dfcmVm
ZXJlbmNlX2Vycm9yIG1lc3NhZ2UoaykKLQotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IHJl
ZmVyZW5jZSBFcnJvciBpbnN0YW5jZSB1c2luZyB0aGUKLSAgICAgICAgICAgb3JpZ2luYWwgY29u
c3RydWN0b3IsIHVzaW5nIGNvbnN0YW50IG1lc3NhZ2UgYXMgdGhlCi0gICAgICAgICAgIG1lc3Nh
Z2Ugc3RyaW5nLiBUaGUgcmVzdWx0IGlzIHRocm93bi4KLSAgICAgICAgKi8KLSAgICAgICAgU3Ry
aW5nIG1lc3NhZ2UgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkuanNWYWx1ZSgpLnRv
U3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gSlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsK
LSAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9lbmQp
IHsKLSAgICAgICAgLyogZW5kIHJlc3VsdChyKQotICAgICAgICAgICAKLSAgICAgICAgICAgUmV0
dXJuIHJlZ2lzdGVyIHJlc3VsdCBhcyB0aGUgdmFsdWUgb2YgYSBnbG9iYWwgb3IgZXZhbAotICAg
ICAgICAgICBwcm9ncmFtLiBSZXR1cm4gY29udHJvbCB0byB0aGUgY2FsbGluZyBuYXRpdmUgY29k
ZS4KLSAgICAgICAgKi8KLQotICAgICAgICBpbnQgcmVzdWx0ID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cihyZXN1bHQpLmpzVmFsdWUoKTsKLSAgICB9Ci0g
ICAgREVGSU5FX09QQ09ERShvcF9wdXRfZ2V0dGVyX3NldHRlcikgewotICAgICAgICAvKiBwdXRf
Z2V0dGVyX3NldHRlciBiYXNlKHIpIHByb3BlcnR5KGlkKSBnZXR0ZXIocikgc2V0dGVyKHIpCi0K
LSAgICAgICAgICAgUHV0cyBhY2Nlc3NvciBkZXNjcmlwdG9yIHRvIHJlZ2lzdGVyIGJhc2UgYXMg
dGhlIG5hbWVkCi0gICAgICAgICAgIGlkZW50aWZpZXIgcHJvcGVydHkuIEJhc2UgYW5kIGZ1bmN0
aW9uIG1heSBiZSBvYmplY3RzCi0gICAgICAgICAgIG9yIHVuZGVmaW5lZCwgdGhpcyBvcCBzaG91
bGQgb25seSBiZSB1c2VkIGZvciBhY2Nlc3NvcnMKLSAgICAgICAgICAgZGVmaW5lZCBpbiBvYmpl
Y3QgbGl0ZXJhbCBmb3JtLgotCi0gICAgICAgICAgIFVubGlrZSBtYW55IG9wY29kZXMsIHRoaXMg
b25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KLSAgICAgICAgICAgdGhlIHJlZ2lzdGVy
IGZpbGUuCi0gICAgICAgICovCi0gICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGdl
dHRlclJlZyA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzZXR0ZXJSZWcgPSB2UENb
NF0udS5vcGVyYW5kOwotCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1
ZSgpLmlzT2JqZWN0KCkpOwotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KGNh
bGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCkpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVy
KiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGNhbGxGcmFtZSk7Ci0KLSAgICAgICAg
SlNWYWx1ZSBnZXR0ZXIgPSBjYWxsRnJhbWUtPnIoZ2V0dGVyUmVnKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgIEpTVmFsdWUgc2V0dGVyID0gY2FsbEZyYW1lLT5yKHNldHRlclJlZykuanNWYWx1ZSgpOwot
ICAgICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgZ2V0dGVyLmlzVW5kZWZpbmVkKCkp
OwotICAgICAgICBBU1NFUlQoc2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzVW5kZWZpbmVk
KCkpOwotICAgICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0
KCkpOwotCi0gICAgICAgIGlmICghZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0R2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChnZXR0
ZXIpKTsKLSAgICAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHNldHRl
cikpOwotICAgICAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcihjYWxsRnJhbWUsIGlkZW50
LCBhY2Nlc3NvciwgQWNjZXNzb3IpOwotCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X3B1dF9nZXR0ZXJfc2V0dGVyKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0K
LSAgICBERUZJTkVfT1BDT0RFKG9wX21ldGhvZF9jaGVjaykgewotICAgICAgICB2UEMrKzsKLSAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwotICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX2Rl
YnVnKSB7Ci0gICAgICAgIC8qIGRlYnVnIGRlYnVnSG9va0lEKG4pIGZpcnN0TGluZShuKSBsYXN0
TGluZShuKSBjb2x1bW4obikKLQotICAgICAgICAgTm90aWZpZXMgdGhlIGRlYnVnZ2VyIG9mIHRo
ZSBjdXJyZW50IHN0YXRlIG9mIGV4ZWN1dGlvbi4gVGhpcyBvcGNvZGUKLSAgICAgICAgIGlzIG9u
bHkgZ2VuZXJhdGVkIHdoaWxlIHRoZSBkZWJ1Z2dlciBpcyBhdHRhY2hlZC4KLSAgICAgICAgKi8K
LSAgICAgICAgaW50IGRlYnVnSG9va0lEID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50
IGZpcnN0TGluZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBsYXN0TGluZSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBjb2x1bW4gPSB2UENbNF0udS5vcGVyYW5kOwot
Ci0KLSAgICAgICAgZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVi
dWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOwotCi0gICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2RlYnVnKTsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwot
ICAgIH0KLSAgICBERUZJTkVfT1BDT0RFKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKSB7Ci0gICAgICAg
IC8qIG9wX3Byb2ZpbGVfd2lsbF9jYWxsIGZ1bmN0aW9uKHIpCi0KLSAgICAgICAgIE5vdGlmaWVz
IHRoZSBwcm9maWxlciBvZiB0aGUgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gY2FsbC4gVGhpcyBv
cGNvZGUKLSAgICAgICAgIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGRldmVsb3BlciB0b29scyBhcmUg
ZW5hYmxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGZ1bmN0aW9uID0gdlBDWzFdLnUub3Bl
cmFuZDsKLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS0+ZW5h
YmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFsdWUoKSk7Ci0KLSAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7Ci0gICAgfQotICAgIERFRklORV9PUENPREUob3BfcHJvZmlsZV9kaWRfY2FsbCkg
ewotICAgICAgICAvKiBvcF9wcm9maWxlX2RpZF9jYWxsIGZ1bmN0aW9uKHIpCi0KLSAgICAgICAg
IE5vdGlmaWVzIHRoZSBwcm9maWxlciBvZiB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gY2FsbC4gVGhp
cyBvcGNvZGUKLSAgICAgICAgIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGRldmVsb3BlciB0b29scyBh
cmUgZW5hYmxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgaW50IGZ1bmN0aW9uID0gdlBDWzFdLnUu
b3BlcmFuZDsKLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS0+
ZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+cihmdW5jdGlvbikuanNWYWx1ZSgpKTsKLQotICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9wcm9maWxlX2RpZF9jYWxsKTsKLSAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwotICAgIH0KLSAgICB2bV90aHJvdzogewotICAgICAgICBnbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBKU1ZhbHVlKCk7Ci0gICAgICAgIGlmICghdGlja0NvdW50KSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgZXhjZXB0aW9uVmFsdWUgaXMgYSBsaWUhIChHQ0MgcHJvZHVjZXMgYmFkIGNv
ZGUgZm9yIHJlYXNvbnMgSSAKLSAgICAgICAgICAgIC8vIGNhbm5vdCBmYXRob20gaWYgd2UgZG9u
J3QgYXNzaWduIHRvIHRoZSBleGNlcHRpb25WYWx1ZSBiZWZvcmUgYnJhbmNoaW5nKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihnbG9iYWxEYXRhKTsKLSAgICAgICAgfQotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIGhhbmRs
ZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMgLSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWhhbmRsZXIpIHsK
LSAgICAgICAgICAgIC8vIENhbid0IHVzZSB0aGUgY2FsbGZyYW1lIGF0IHRoaXMgcG9pbnQgYXMg
dGhlIHNjb3BlY2hhaW4sIGV0YyBoYXZlCi0gICAgICAgICAgICAvLyBiZWVuIHJlbGVhc2VkLgot
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIHZQQyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKSArIGhhbmRsZXItPnRhcmdldDsKLSAgICAgICAgTkVYVF9JTlNUUlVDVElPTigp
OwotICAgIH0KLSAgICB9Ci0jaWYgIUVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQ
UkVURVIpCi0gICAgfSAvLyBpdGVyYXRvciBsb29wIGVuZHMKLSNlbmRpZgotICAgICN1bmRlZiBO
RVhUX0lOU1RSVUNUSU9OCi0gICAgI3VuZGVmIERFRklORV9PUENPREUKLSAgICAjdW5kZWYgQ0hF
Q0tfRk9SX0VYQ0VQVElPTgotICAgICN1bmRlZiBDSEVDS19GT1JfVElNRU9VVAotI2VuZGlmIC8v
IEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotfQotCi0jZW5kaWYgLy8gIUVOQUJMRShMTElO
VF9DX0xPT1ApCi0KLQotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QK
LXsKLSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZy
YW1lRnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0aW9uQ2Fs
bEZyYW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAgICBhcmd1bWVudHMtPnRlYXJPZmYoZnVuY3Rpb25DYWxs
RnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci19Ci0KLUpTVmFsdWUgSW50
ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNh
bGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5j
dGlvbik7Ci0KLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0gICAgCi0gICAgaW50IGxpbmVOdW1iZXI7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQ7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgbGluZU51bWJlciwgYnl0ZWNv
ZGVPZmZzZXQpOwotICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHJldHVybiBqc051bGwo
KTsKLSAgICBKU1ZhbHVlIGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKLSAgICBpZiAo
IWNhbGxlcikKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgLy8gU2tpcCBvdmVyIGZ1
bmN0aW9uIGJpbmRpbmdzLgotICAgIEFTU0VSVChjYWxsZXIuaXNPYmplY3QoKSk7Ci0gICAgd2hp
bGUgKGFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246OnNfaW5mbykp
IHsKLSAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgY2FsbGVyRnJhbWUsIGxpbmVOdW1iZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAg
ICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAg
ICAgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwotICAgICAgICBpZiAoIWNhbGxlcikK
LSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FsbGVy
OwotfQotCi12b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBTdHJpbmcmIHNv
dXJjZVVSTCwgSlNWYWx1ZSYgZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgZnVuY3Rpb24gPSBKU1Zh
bHVlKCk7Ci0gICAgbGluZU51bWJlciA9IC0xOwotICAgIHNvdXJjZVVSTCA9IFN0cmluZygpOwot
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKQorICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGlmICghY2FsbGVy
Q29kZUJsb2NrKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSAwOwotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIGlmICghY2FsbGVyRnJh
bWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBj
YWxsZXJDb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpOwot
I2lmIEVOQUJMRShKSVQpCi0gICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxl
ckNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJu
UEMoKSk7Ci0jZW5kaWYKLSNlbHNlCiAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJDb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblBDKCkpOwot
I2VuZGlmCiAgICAgbGluZU51bWJlciA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CiAgICAgc291cmNlSUQgPSBjYWxsZXJD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpOwogICAgIHNvdXJjZVVSTCA9
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJl
dmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjcgKzIwNCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgT3Bjb2RlSUQgZ2V0T3Bjb2RlSUQoT3Bjb2RlIG9wY29kZSkKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKG1faW5pdGlhbGl6ZWQpOwotI2lmIEVOQUJMRShDT01Q
VVRFRF9HT1RPX09QQ09ERVMpCi0jaWYgRU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShDT01QVVRF
RF9HT1RPX09QQ09ERVMpICYmIEVOQUJMRShMTElOVCkKICAgICAgICAgICAgIEFTU0VSVChpc09w
Y29kZShvcGNvZGUpKTsKICAgICAgICAgICAgIHJldHVybiBtX29wY29kZUlEVGFibGUuZ2V0KG9w
Y29kZSk7Ci0jZWxpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQot
ICAgICAgICAgICAgQVNTRVJUKGlzT3Bjb2RlKG9wY29kZSkpOwotICAgICAgICAgICAgaWYgKCFt
X2NsYXNzaWNFbmFibGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxPcGNv
ZGVJRD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3Bjb2RlKSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBtX29wY29kZUlEVGFibGUuZ2V0KG9wY29kZSk7Ci0jZW5kaWYgLy8gRU5BQkxFKENPTVBV
VEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSNlbHNlIC8vICFFTkFCTEUoQ09NUFVURURf
R09UT19PUENPREVTKQorI2Vsc2UKICAgICAgICAgICAgIHJldHVybiBvcGNvZGU7Ci0jZW5kaWYg
Ly8gIUVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCisjZW5kaWYKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgYm9vbCBjbGFzc2ljRW5hYmxlZCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2NsYXNzaWNFbmFibGVkOwotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBp
c09wY29kZShPcGNvZGUpOwogCiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShQcm9ncmFtRXhlY3V0
YWJsZSosIENhbGxGcmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqKTsKQEAgLTI2MCwxNSArMjQ3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVD
bG9zdXJlJik7CiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAK
LSNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAgICAgTkVWRVJfSU5MSU5FIEpT
U2NvcGUqIGNyZWF0ZU5hbWVTY29wZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiogdlBD
KTsKLQotICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sq
LCBJbnN0cnVjdGlvbiosIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHVuY2FjaGVHZXRC
eUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpOwotICAgICAgICB2b2lkIHRyeUNhY2hl
UHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUgYmFz
ZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCB1bmNhY2hlUHV0
QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsgICAgICAgIAotI2VuZGlmIC8vIEVO
QUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVu
d2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zm
c2V0LCBDb2RlQmxvY2sqJik7CiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgQ2FsbEZy
YW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqLCBSZWdpc3RlckZpbGUq
LCBDYWxsRnJhbWUqLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKTsKQEAgLTI5MSwy
MCArMjY5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVyRmlsZSBtX3Jl
Z2lzdGVyRmlsZTsKICAgICAgICAgCi0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
LSNpZiBFTkFCTEUoTExJTlQpCisjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykgJiYg
RU5BQkxFKExMSU5UKQogICAgICAgICBPcGNvZGUqIG1fb3Bjb2RlVGFibGU7IC8vIE1hcHMgT3Bj
b2RlSUQgPT4gT3Bjb2RlIGZvciBjb21waWxpbmcKICAgICAgICAgSGFzaE1hcDxPcGNvZGUsIE9w
Y29kZUlEPiBtX29wY29kZUlEVGFibGU7IC8vIE1hcHMgT3Bjb2RlID0+IE9wY29kZUlEIGZvciBk
ZWNvbXBpbGluZwotI2VsaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRF
UikKLSAgICAgICAgT3Bjb2RlIG1fb3Bjb2RlVGFibGVbbnVtT3Bjb2RlSURzXTsgLy8gTWFwcyBP
cGNvZGVJRCA9PiBPcGNvZGUgZm9yIGNvbXBpbGluZwotICAgICAgICBIYXNoTWFwPE9wY29kZSwg
T3Bjb2RlSUQ+IG1fb3Bjb2RlSURUYWJsZTsgLy8gTWFwcyBPcGNvZGUgPT4gT3Bjb2RlSUQgZm9y
IGRlY29tcGlsaW5nCiAjZW5kaWYKLSNlbmRpZiAvLyBFTkFCTEUoQ09NUFVURURfR09UT19PUENP
REVTKQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7
CiAjZW5kaWYKLSAgICAgICAgYm9vbCBtX2NsYXNzaWNFbmFibGVkOwogICAgIH07CiAKICAgICAv
LyBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIGFuIG9iamVjdCB0aGF0IHdvdWxkIHJlcXVpcmUgdGhp
cyBjb252ZXJzaW9uIChXZWJDb3JlJ3MgZ2xvYmFsIG9iamVjdCkuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2Nh
dGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAg
IHsKICAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhH
dWFyZFBhZ2VzKGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNK
SVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0jaWYgIShFTkFC
TEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKSkKKyNpZiAhRU5BQkxFKExM
SU5UKQogICAgICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hc20ucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXNtLnJiCShyZXZp
c2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hc20ucmIJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCAkc3RkZXJyLnB1dHMgIm9mZmxpbmVh
c206IFBhcnNpbmcgI3thc21GCiBiZWdpbgogICAgIGNvbmZpZ3VyYXRpb25MaXN0ID0gb2Zmc2V0
c0FuZENvbmZpZ3VyYXRpb25JbmRleChvZmZzZXRzRmlsZSkKIHJlc2N1ZSBNaXNzaW5nTWFnaWNW
YWx1ZXNFeGNlcHRpb24KLSAgICAkc3RkZXJyLnB1dHMgIm9mZmxpbmVhc206IE5vIG1hZ2ljIHZh
bHVlcyBmb3VuZC4gU2tpcHBpbmcgYXNzZW1ibHkgZmlsZSBnZW5lcmF0aW9uIGFzc3VtaW5nIHRo
ZSBjbGFzc2ljIGludGVycHJldGVyIGlzIGVuYWJsZWQuIgorICAgICRzdGRlcnIucHV0cyAib2Zm
bGluZWFzbTogTm8gbWFnaWMgdmFsdWVzIGZvdW5kLiBTa2lwcGluZyBhc3NlbWJseSBmaWxlIGdl
bmVyYXRpb24uIgogICAgIGV4aXQgMAogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL29mZnNldHMucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vb2Zmc2V0cy5yYgkocmV2aXNpb24gMTI5NDM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL29mZmxpbmVhc20vb2Zmc2V0cy5yYgkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNiBAQCBPRkZTRVRfTUFHSUNfTlVNQkVSUyA9IFsgdG8zMkJpdCgweGVjNTc3CiAjIE1p
c3NpbmdNYWdpY1ZhbHVlc0V4Y2VwdGlvbgogIwogIyBUaHJvd24gd2hlbiBtYWdpYyB2YWx1ZXMg
YXJlIG1pc3NpbmcgZnJvbSB0aGUgYmluYXJ5LgotIyBUaGlzIGlzIHVzdWFsbHkgYW4gaW5kaWNh
dGlvbiB0aGF0IHRoZSBjbGFzc2ljIGludGVycHJldGVyIGlzIGVuYWJsZWQuCiAjCiAKIGNsYXNz
IE1pc3NpbmdNYWdpY1ZhbHVlc0V4Y2VwdGlvbiA8IEV4Y2VwdGlvbgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDEyOTQzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzEsMTEgKzIzMSw2IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmEKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLSAgICBpZiAoIW1faml0Q29kZUZvckNhbGwpCi0gICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fZXZhbENvZGVCbG9j
aykpOwotICAgIGVsc2UKLSNlbmRpZgogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChzaXplb2YoKm1fZXZhbENvZGVCbG9jaykgKyBtX2ppdENvZGVGb3JDYWxsLnNp
emUoKSk7CiAjZWxzZQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoKm1fZXZhbENvZGVCbG9jaykpOwpAQCAtMzU2LDEyICszNTEsNyBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShK
SVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENvZGVG
b3JDYWxsKQotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9wcm9ncmFt
Q29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRo
aXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spICsg
bV9qaXRDb2RlRm9yQ2FsbC5zaXplKCkpOwogI2Vsc2UKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spKTsKICNlbmRp
ZgpAQCAtNTM0LDEyICs1MjQsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5U
RVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENvZGVGb3JDYWxsKQotICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwp
KTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSArIG1faml0Q29kZUZvckNh
bGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwpICsgbV9qaXRDb2RlRm9yQ2FsbC5zaXplKCkpOwog
I2Vsc2UKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9m
KCptX2NvZGVCbG9ja0ZvckNhbGwpKTsKICNlbmRpZgpAQCAtNTc2LDExICs1NjEsNiBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKSVQpCi0jaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgaWYgKCFtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChzaXplb2YoKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSk7Ci0gICAgZWxzZQotI2Vu
ZGlmCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigq
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LnNpemUoKSk7
CiAjZWxzZQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
b2YoKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3
ICsyNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBzdGF0
aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+Y2xhc3NpY0VuYWJsZWQoKSk7CiAgICAgICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwogICAgICAgICAgICAgaWYgKCFjYWxsVGh1
bmspIHsKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJs
ZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwpAQCAtMjc5LDcgKzI3OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDTEFTU0lD
X0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlRfQ19MT09QKQorI2lmIEVOQUJMRShMTElOVF9D
X0xPT1ApCiAgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5j
YW5Vc2VKSVQoKSk7CkBAIC0zMDYsNyArMzA1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpJVENvZGUgY2FsbFRodW5rLCBKSVRDb2RlIGNvbnN0cnVjdFRodW5rLCBJbnRyaW5z
aWMgaW50cmluc2ljKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEu
aW50ZXJwcmV0ZXItPmNsYXNzaWNFbmFibGVkKCkpOwogICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2Fs
bFRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gY29uc3RydWN0VGh1
bms7CkBAIC0zMTYsMTUgKzMxNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5k
aWYKIAotI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKTsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBOb0lu
dHJpbnNpYzsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICBwcml2YXRlOgogICAgICAgICBOYXRp
dmVFeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICAgICAgOiBFeGVjdXRh
YmxlQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUu
Z2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDExIEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwUHJvdG90
eXBlVGEKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nVGFibGU7CiBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7CiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVS
KSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCisvLyBO
b3RlOiBQbGF0Zm9ybS5oIHdpbGwgZW5mb3JjZSB0aGF0IEVOQUJMRShBU1NFTUJMRVIpIGlzIHRy
dWUgaWYgZWl0aGVyCisvLyBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIG9yIGJvdGgg
YXJlIGVuYWJsZWQuIFRoZSBjb2RlIGJlbG93CisvLyBqdXN0IGNoZWNrcyBmb3IgRU5BQkxFKEpJ
VCkgb3IgRU5BQkxFKFlBUlJfSklUKSB3aXRoIHRoaXMgcHJlbWlzZSBpbiBtaW5kLgorCisjaWYg
RU5BQkxFKEFTU0VNQkxFUikKIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxl
QWxsb2NhdG9yJiBleGVjdXRhYmxlQWxsb2NhdG9yKQogewogICAgIGlmICghZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkKCkgfHwgKCFPcHRpb25zOjp1c2VKSVQoKSAmJiAhT3B0aW9uczo6dXNl
UmVnRXhwSklUKCkpKQpAQCAtMTI0LDcgKzEyOCw3IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2Vt
YmxlcihFeGVjdXRhYmxlQWwKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogfQotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRh
KEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBUaHJlYWRTdGFja1R5cGUgdGhyZWFkU3Rh
Y2tUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6CkBAIC0xODAsOSArMTg0LDEzIEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIG1fdGltZW91dENv
dW50KDUxMikKICNlbmRpZgogICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnN0KDAp
Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8
fCBFTkFCTEUoTExJTlQpKQorI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBtX2NhblVzZUFz
c2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCisjZW5kaWYKKyNp
ZiBFTkFCTEUoSklUKQogICAgICwgbV9jYW5Vc2VKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYgT3B0
aW9uczo6dXNlSklUKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgLCBtX2Nh
blVzZVJlZ0V4cEpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VSZWdFeHBKSVQo
KSkKICNlbmRpZgogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtMzcwLDEwICszNzgsNiBA
QCBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJCiAKIE5hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKLSNpZiBFTkFCTEUoQ0xBU1NJQ19J
TlRFUlBSRVRFUikKLSAgICBpZiAoIWNhblVzZUpJVCgpKQotICAgICAgICByZXR1cm4gTmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotI2VuZGlm
CiAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBj
b25zdHJ1Y3Rvcik7CiB9CiBOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RG
dW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZp
c2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDIwICsyODAsMTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIH0KIAotI2lm
ICFFTkFCTEUoSklUKQotICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9
IC8vIGludGVycHJldGVyIG9ubHkKLSNlbGlmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikg
JiYgIUVOQUJMRShMTElOVCkKKyNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCisgICAg
ICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KKyNlbGlmIEVOQUJM
RShKSVQpCiAgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQg
b25seQogI2Vsc2UKLSAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJ
VDsgfQorICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVy
cHJldGVyIG9ubHkKICNlbmRpZgogCi0jaWYgIUVOQUJMRShZQVJSX0pJVCkKLSAgICAgICAgYm9v
bCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5
Ci0jZWxpZiAhRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpICYmICFFTkFCTEUoTExJTlQpCi0g
ICAgICAgIGJvb2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQgb25s
eQotI2Vsc2UKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgICAgIGJvb2wgY2FuVXNlUmVnRXhw
SklUKCkgeyByZXR1cm4gbV9jYW5Vc2VSZWdFeHBKSVQ7IH0KKyNlbHNlCisgICAgICAgIGJvb2wg
Y2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gaW50ZXJwcmV0ZXIgb25seQog
I2VuZGlmCiAKICAgICAgICAgUHJpdmF0ZU5hbWUgbV9pbmhlcml0b3JJREtleTsKQEAgLTQ0MCw5
ICs0MzgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxE
YXRhVHlwZSwgVGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0ds
b2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRl
TmF0aXZlVGh1bmsoKTsKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNf
SU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAg
ICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7CisjZW5kaWYKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCiAg
ICAgICAgIGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7CiAjZW5kaWYKICNpZiBFTkFCTEUoR0NfVkFM
SURBVElPTikKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA5LTI0ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxldGluZyB0aGUgY2xhc3NpYyBpbnRl
cnByZXRlciBhbmQgY2xlYW5pbmcgdXAgc29tZSBidWlsZCBvcHRpb25zLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY5NjkuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvT1NBbGxvY2F0b3JQb3Np
eC5jcHA6CisgICAgICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KToKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMi0wOS0yNCAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgU3RyaW5nOjpvcGVyYXRvcis9
KCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwCShyZXZpc2lvbiAxMjk0Mzkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvclBvc2l4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEzLDExICsxMTMsMTEgQEAgdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQo
c2l6ZQogCiAgICAgcmVzdWx0ID0gbW1hcChyZXN1bHQsIGJ5dGVzLCBwcm90ZWN0aW9uLCBmbGFn
cywgZmQsIDApOwogICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICNpZiBFTkFC
TEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKQorI2lmIEVOQUJMRShMTElO
VCkKICAgICAgICAgaWYgKGV4ZWN1dGFibGUpCiAgICAgICAgICAgICByZXN1bHQgPSAwOwogICAg
ICAgICBlbHNlCi0gICAgI2VuZGlmCisjZW5kaWYKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
fQogICAgIGlmIChyZXN1bHQgJiYgaW5jbHVkZXNHdWFyZFBhZ2VzKSB7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgJKHJldmlzaW9uIDEyOTQzOSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwNCwxMSArNjA0LDkgQEAKICNkZWZpbmUgV1RGX1VTRV9QVEhSRUFEUyAx
CiAKICNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQotICAgICNkZWZpbmUgRU5BQkxFX0NMQVNT
SUNfSU5URVJQUkVURVIgMQogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAwCiAgICAgI2RlZmluZSBF
TkFCTEVfWUFSUl9KSVQgMAogI2Vsc2UKLSAgICAjZGVmaW5lIEVOQUJMRV9DTEFTU0lDX0lOVEVS
UFJFVEVSIDAKICAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMQogICAgICNkZWZpbmUgRU5BQkxFX0xM
SU5UIDEKICAgICAjZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVCAxCkBAIC02NDEsNyArNjM5LDkgQEAK
IAogI2lmIFBMQVRGT1JNKFdYKQogI2lmICFDUFUoUFBDKQorI2lmICFkZWZpbmVkKEVOQUJMRV9B
U1NFTUJMRVIpCiAjZGVmaW5lIEVOQUJMRV9BU1NFTUJMRVIgMQorI2VuZGlmCiAjZGVmaW5lIEVO
QUJMRV9KSVQgMQogI2VuZGlmCiAjZGVmaW5lIEVOQUJMRV9HTE9CQUxfRkFTVE1BTExPQ19ORVcg
MApAQCAtOTUzLDEzICs5NTMsOCBAQAogI2RlZmluZSBFTkFCTEVfV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcgMAogI2VuZGlmCiAKLS8qIEVuc3VyZSB0aGF0IGVpdGhlciB0aGUgSklUIG9yIHRoZSBp
bnRlcnByZXRlciBoYXMgYmVlbiBlbmFibGVkLiAqLwotI2lmICFkZWZpbmVkKEVOQUJMRV9DTEFT
U0lDX0lOVEVSUFJFVEVSKSAmJiAhRU5BQkxFKEpJVCkgJiYgIUVOQUJMRShMTElOVCkKLSNkZWZp
bmUgRU5BQkxFX0NMQVNTSUNfSU5URVJQUkVURVIgMQotI2VuZGlmCi0KIC8qIElmIHRoZSBqaXQg
YW5kIGNsYXNzaWMgaW50ZXJwcmV0ZXIgaXMgbm90IGF2YWlsYWJsZSwgZW5hYmxlIHRoZSBMTElu
dCBDIExvb3A6ICovCi0jaWYgIUVOQUJMRShKSVQpICYmICFFTkFCTEUoQ0xBU1NJQ19JTlRFUlBS
RVRFUikKKyNpZiAhRU5BQkxFKEpJVCkKICAgICAjZGVmaW5lIEVOQUJMRV9MTElOVCAxCiAgICAg
I2RlZmluZSBFTkFCTEVfTExJTlRfQ19MT09QIDEKICAgICAjZGVmaW5lIEVOQUJMRV9ERkdfSklU
IDAKQEAgLTk2NywxNCArOTYyLDkgQEAKIAogLyogRG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBz
dXJlIHRoYXQgd2UgYXQgbGVhc3QgaGF2ZSBvbmUgZXhlY3V0aW9uIGVuZ2luZSBpbgogICAgdXNl
OiAqLwotI2lmICEoRU5BQkxFKEpJVCkgfHwgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8
IEVOQUJMRShMTElOVCkpCisjaWYgIShFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpKQogI2Vy
cm9yIFlvdSBoYXZlIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGV4ZWN1dGlvbiBtb2RlbCBlbmFibGVk
IHRvIGJ1aWxkIEpTQwogI2VuZGlmCi0vKiBEbyBhIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUg
dGhhdCB3ZSBkb24ndCBoYXZlIGJvdGggdGhlIGNsYXNzaWMgaW50ZXJwcmV0ZXIKLSAgIGFuZCB0
aGUgbGxpbnQgQyBsb29wIGluIHVzZSBhdCB0aGUgc2FtZSB0aW1lOiAqLwotI2lmIEVOQUJMRShD
TEFTU0lDX0lOVEVSUFJFVEVSKSAmJiBFTkFCTEUoTExJTlRfQ19MT09QKQotI2Vycm9yIFlvdSBj
YW5ub3QgYnVpbGQgYm90aCB0aGUgY2xhc3NpYyBpbnRlcnByZXRlciBhbmQgdGhlIGxsaW50IEMg
bG9vcCB0b2dldGhlcgotI2VuZGlmCiAKIC8qIENvbmZpZ3VyZSB0aGUgSklUICovCiAjaWYgQ1BV
KFg4NikgJiYgQ09NUElMRVIoTVNWQykKQEAgLTk4OSwxMiArOTc5LDkgQEAKICNpZiBDT01QSUxF
UihHQ0MpIHx8IChSVkNUX1ZFUlNJT05fQVRfTEVBU1QoNCwgMCwgMCwgMCkgJiYgZGVmaW5lZChf
X0dOVUNfXykpCiAjZGVmaW5lIEhBVkVfQ09NUFVURURfR09UTyAxCiAjZW5kaWYKLSNpZiBIQVZF
KENPTVBVVEVEX0dPVE8pICYmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotI2RlZmluZSBF
TkFCTEVfQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSIDEKLSNlbmRpZgogCiAvKiBE
ZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBlbmFibGUgQ29tcHV0ZWQgR290byBPcGNvZGVzIG9yIG5v
dDogKi8KLSNpZiAoSEFWRShDT01QVVRFRF9HT1RPKSAmJiBFTkFCTEUoTExJTlQpKSB8fCBFTkFC
TEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQorI2lmIEhBVkUoQ09NUFVURURf
R09UTykgJiYgRU5BQkxFKExMSU5UKQogI2RlZmluZSBFTkFCTEVfQ09NUFVURURfR09UT19PUENP
REVTIDEKICNlbmRpZgogCkBAIC0xMDA5LDkgKzk5NiwxNiBAQAogI2RlZmluZSBFTkFCTEVfWUFS
Ul9KSVRfREVCVUcgMAogI2VuZGlmCiAKKy8qIElmIGVpdGhlciB0aGUgSklUIG9yIHRoZSBSZWdF
eHAgSklUIGlzIGVuYWJsZWQsIHRoZW4gdGhlIEFzc2VtYmxlciBtdXN0IGJlCisgICBlbmFibGVk
IGFzIHdlbGw6ICovCiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKFlBUlJfSklUKQorI2lmIGRl
ZmluZWQoRU5BQkxFX0FTU0VNQkxFUikgJiYgIUVOQUJMRV9BU1NFTUJMRVIKKyNlcnJvciAiQ2Fu
bm90IGVuYWJsZSB0aGUgSklUIG9yIFJlZ0V4cCBKSVQgd2l0aG91dCBlbmFibGluZyB0aGUgQXNz
ZW1ibGVyIgorI2Vsc2UKKyN1bmRlZiBFTkFCTEVfQVNTRU1CTEVSCiAjZGVmaW5lIEVOQUJMRV9B
U1NFTUJMRVIgMQogI2VuZGlmCisjZW5kaWYKIAogLyogUGljayB3aGljaCBhbGxvY2F0b3IgdG8g
dXNlOyB3ZSBvbmx5IG5lZWQgYW4gZXhlY3V0YWJsZSBhbGxvY2F0b3IgaWYgdGhlIGFzc2VtYmxl
ciBpcyBjb21waWxlZCBpbi4KICAgIE9uIHg4Ni02NCB3ZSB1c2UgYSBzaW5nbGUgZml4ZWQgbW1h
cCwgb24gb3RoZXIgcGxhdGZvcm1zIHdlIG1tYXAgb24gZGVtYW5kLiAqLwpJbmRleDogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjk0MzkpCisrKyBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTItMDktMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIERlbGV0
aW5nIHRoZSBjbGFzc2ljIGludGVycHJldGVyIGFuZCBjbGVhbmluZyB1cCBzb21lIGJ1aWxkIG9w
dGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
Njk2OS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Fib3V0RGF0YUVuYWJsZUZlYXR1cmVzLmluOgorCiAyMDEyLTA5LTI0
ICBPdHRvIERlcmVrIENoZXVuZyAgPG90Y2hldW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNr
QmVycnldIFJldmVydGluZyBpbXBsZW1lbnRhdGlvbiBmb3IgNDA3IGVycm9yIHBhZ2VzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhRW5hYmxl
RmVhdHVyZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L0Fib3V0RGF0YUVuYWJsZUZlYXR1cmVzLmluCShyZXZpc2lvbiAxMjk0MzkpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhRW5hYmxl
RmVhdHVyZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyLDExICsxMiw5IEBAIEJMT0IKIEJSQU5D
SF9DT01QQUNUSU9OCiBDQUxFTkRBUl9QSUNLRVIKIENIQU5ORUxfTUVTU0FHSU5HCi1DTEFTU0lD
X0lOVEVSUFJFVEVSCiBDT0RFQkxPQ0tfU0FNUExJTkcKIENPTVBBUkVfQU5EX1NXQVAKIENPTVBV
VEVEX0dPVE8KLUNPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUgogQ09NUFVURURfR09U
T19JTlRFUlBSRVRFUgogQ09OU0lTVEVOQ1lfQ0hFQ0sKIENPTlRFWFRfTUVOVVMK
</data>
<flag name="review"
          id="177555"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>