<?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>4540</bug_id>
          
          <creation_ts>2005-08-20 13:59:48 -0700</creation_ts>
          <short_desc>event handlers for all custom events called when any custom event is set</short_desc>
          <delta_ts>2019-02-06 09:02:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>4565</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17017</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-20 13:59:48 -0700</bug_when>
    <thetext>One of the W3C DOM tests exposes the fact that we don&apos;t handle custom events propertly. All custom 
events share a single list of event listeners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17023</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-20 16:20:04 -0700</bug_when>
    <thetext>Maciej mentioned that Anders may already be working on this, which is too bad, since I have a patch 
ready!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17027</commentid>
    <comment_count>2</comment_count>
      <attachid>3484</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-20 18:57:33 -0700</bug_when>
    <thetext>Created attachment 3484
patch to use AtomicString instead of an integer as an event ID

I&apos;ve done some testing on this, but it still needs its own test for the
layout-tests directory and some performance testing too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17070</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-21 17:36:58 -0700</bug_when>
    <thetext>This is part of the reason that the dispatchEvent12 test in the W3C DOM Level 2 Events suite is failing, but 
there&apos;s another reason, described in bug 4570.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17907</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-08-30 02:21:20 -0700</bug_when>
    <thetext>Great patch! r=me
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502870</commentid>
    <comment_count>5</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:55 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3484</attachid>
            <date>2005-08-20 18:57:33 -0700</date>
            <delta_ts>2005-08-30 02:21:40 -0700</delta_ts>
            <desc>patch to use AtomicString instead of an integer as an event ID</desc>
            <filename>CustomEventsPatch.txt</filename>
            <type>text/plain</type>
            <size>181556</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEZvcndhcmRpbmdIZWFkZXJzL3htbC9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogRm9yd2FyZGluZ0hlYWRlcnMveG1sL0V2ZW50TmFtZXMuaApkaWZmIC1OIEZvcndhcmRp
bmdIZWFkZXJzL3htbC9FdmVudE5hbWVzLmgKLS0tIEZvcndhcmRpbmdIZWFkZXJzL3htbC9FdmVu
dE5hbWVzLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgRm9yd2FyZGluZ0hlYWRlcnMv
eG1sL0V2ZW50TmFtZXMuaAkyMSBBdWcgMjAwNSAwMTo1NTozMiAtMDAwMApAQCAtMCwwICsxIEBA
CisjaW5jbHVkZSA8RXZlbnROYW1lcy5oPgpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZm
IC1wIC11IC1yMS4xMSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKLS0tIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkxNiBBdWcgMjAwNSAwNzozOTo0MCAtMDAwMAkx
LjExCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjEgQXVnIDIwMDUgMDE6
NTU6NTcgLTAwMDAKQEAgLTc3LDYgKzc3LDggQEAKIAkJN0U2RkVFREEwODk4NTgyMzAwQzQ0QzNG
IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0U2RkVFRDYwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3Jp
cHREZWJ1Z2dlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdFNkZFRURCMDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTZGRUVE
NzA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tICovOyB9OwogCQk5
MzdDMzRFRDA4NjhFNEI0MDA2RjRCMjIgLyogcGFyc2VyLnkgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRFNDM3ODA0MTQyOTRBMDA4NjM1Q0UgLyogcGFy
c2VyLnkgKi87IH07CisJCTkzOTg4NUMzMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTg4NUMx
MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCAqLzsgfTsKKwkJOTM5ODg1QzQwOEI3
RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTg4NUMyMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVz
LmggKi87IH07CiAJCTkzRjE5OEE3MDgyNDVFNTkwMDFFOUFCQyAvKiBjc3NfYmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4RjYxOEIwNDA1OTRC
QTAwQTgwMDA0IC8qIGNzc19iYXNlLmggKi87IH07CiAJCTkzRjE5OEE4MDgyNDVFNTkwMDFFOUFC
QyAvKiBjc3NfcnVsZWltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1MjNEMTY1MDJERTQyRTYwMTg2MzVDQSAvKiBjc3NfcnVsZWltcGwuaCAqLzsg
fTsKIAkJOTNGMTk4QTkwODI0NUU1OTAwMUU5QUJDIC8qIGNzc19zdHlsZXNoZWV0aW1wbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNjcwMkRF
NDJFNjAxODYzNUNBIC8qIGNzc19zdHlsZXNoZWV0aW1wbC5oICovOyB9OwpAQCAtMjU2NSw2ICsy
NTY3LDggQEAKIAkJOTM5NEUwQUEwM0FBNjBGQjAwODYzNUNFIC8qIEtXUUZvbnRGYW1pbHkubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FGb250RmFtaWx5Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzk1NUE0MTAzRDcyOTMyMDA4NjM1Q0Ug
LyogS1dRUmVuZGVyVHJlZURlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtXUVJlbmRlclRyZWVEZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzk1
NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogS1dRUmVuZGVyVHJlZURlYnVnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtXUVJlbmRlclRyZWVEZWJ1Zy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzOTg4NUMxMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVu
dE5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudE5h
bWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM5ODg1QzIwOEI3RTNEMTAw
RTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV2ZW50TmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5RkY4RUMwNzAy
QjFCMTAwOTc5RTVFIC8qIHZpc2libGVfcmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gdmlzaWJsZV9yYW5nZS5jcHA7IHBhdGggPSBlZGl0aW5nL3Zpc2libGVf
cmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlGRjhFRDA3MDJCMUIx
MDA5NzlFNUUgLyogdmlzaWJsZV9yYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSB2aXNpYmxlX3JhbmdlLmg7IHBhdGggPSBlZGl0aW5nL3Zpc2libGVfcmFuZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQkNFNUQwNkUxQTQyRTAwODU5MjVCIC8qIGZv
cm1kYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmb3JtZGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjAyLDYgKzYyMDYsOCBAQAog
CQlGNTIzRDMyNDAyREU0NDc4MDE4NjM1Q0EgLyogeG1sICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5Mzk4ODVDMTA4QjdFM0QxMDBFNzA3QzQgLyogRXZl
bnROYW1lcy5jcHAgKi8sCisJCQkJOTM5ODg1QzIwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFt
ZXMuaCAqLywKIAkJCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogZG9tX3FuYW1lLmNwcCAq
LywKIAkJCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogZG9tX3FuYW1lLmggKi8sCiAJCQkJ
QkMzQjM2NDUwNUM5RDVFMjAwRTQyOTAyIC8qIGRvbV9hdG9taWNzdHJpbmcuY3BwICovLApAQCAt
NjkxNCw2ICs2OTIwLDcgQEAKIAkJCQlCQzE3OTg5NDA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVy
X3RoZW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3OThEQTA4OERBNEY4MDA2MDY4QTUgLyog
cmVuZGVyX3RoZW1lX21hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U2RkVFRDgwODk4NTgyMzAw
QzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM5
ODg1QzQwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
OTIzMyw2ICs5MjQwLDcgQEAKIAkJCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVy
X3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMTc5ODkzMDg4RDk3NUYwMDYwNjhB
NSAvKiByZW5kZXJfdGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2RkVFRDkwODk4NTgy
MzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTkzOTg4NUMzMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzM0CmRpZmYgLXAgLXUgLXIxLjMzNCBraHRtbC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0
bWxfcGFydC5jcHAJMTQgQXVnIDIwMDUgMDk6MTI6NDMgLTAwMDAJMS4zMzQKKysrIGtodG1sL2to
dG1sX3BhcnQuY3BwCTIxIEF1ZyAyMDA1IDAxOjU2OjAxIC0wMDAwCkBAIC0xLDQgKzEsMyBAQAot
Ly8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IFRvcmJlbiBXZWlz
IDx3ZWlzQGtkZS5vcmc+CkBAIC01OCw2ICs1Nyw3IEBACiAjaW5jbHVkZSAibWlzYy9sb2FkZXIu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJf
cmFuZ2VpbXBsLmgiCisjaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJ4bWwv
eG1sX3Rva2VuaXplci5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwpAQCAtMTEyLDYgKzExMiw4
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0Nv
cmVTZXJ2aWNlcy5oPgogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7
CisKIHVzaW5nIGtodG1sOjpBcHBseVN0eWxlQ29tbWFuZDsKIHVzaW5nIGtodG1sOjpDSEFSQUNU
RVI7CiB1c2luZyBraHRtbDo6Q2hpbGRGcmFtZTsKQEAgLTIwOSw2ICsyMTEsNyBAQCB2b2lkIEtI
VE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHCiB7CiAgIEF0b21pY1N0cmluZzo6aW5p
dCgpOwogICBRdWFsaWZpZWROYW1lOjppbml0KCk7CisgIEV2ZW50TmFtZXM6OmluaXQoKTsKICAg
SFRNTE5hbWVzOjppbml0SFRNTE5hbWVzKCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBpcyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdV
SSApCiAgICAgc2V0WE1MRmlsZSggImtodG1sLnJjIiApOwpAQCAtNjEzLDcgKzYxNiw3IEBAIHZv
aWQgS0hUTUxQYXJ0OjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmwKICAgICAgIEhUTUxEb2N1bWVu
dEltcGwqIGhkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oIGQtPm1fZG9jICk7
CiAgICAgICAKICAgICAgIGlmICggaGRvYy0+Ym9keSgpICYmIGQtPm1fYkxvYWRFdmVudEVtaXR0
ZWQgJiYgIWQtPm1fYlVubG9hZEV2ZW50RW1pdHRlZCApIHsKLSAgICAgICAgaGRvYy0+Ym9keSgp
LT5kaXNwYXRjaFdpbmRvd0V2ZW50KCBFdmVudEltcGw6OlVOTE9BRF9FVkVOVCwgZmFsc2UsIGZh
bHNlICk7CisgICAgICAgIGhkb2MtPmJvZHkoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudCggdW5sb2Fk
RXZlbnQsIGZhbHNlLCBmYWxzZSApOwogICAgICAgICBpZiAoIGQtPm1fZG9jICkKICAgICAgICAg
ICBkLT5tX2RvYy0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgICAgIGQtPm1fYlVubG9hZEV2ZW50
RW1pdHRlZCA9IHRydWU7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTQwCmRpZmYgLXAgLXUgLXIxLjE0MCBraHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBraHRtbC9raHRtbHZpZXcuY3BwCTE4IEF1ZyAyMDA1IDAwOjAzOjU3IC0wMDAwCTEuMTQwCisr
KyBraHRtbC9raHRtbHZpZXcuY3BwCTIxIEF1ZyAyMDA1IDAxOjU2OjAyIC0wMDAwCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAi
eG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKKyNp
bmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJraHRtbF9zZXR0aW5ncy5o
IgpAQCAtNzEsOCArNzIsMTAgQEAKIC8vICNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURV
TElORyAxCiAKIHVzaW5nIG5hbWVzcGFjZSBET007Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CisK
IGNsYXNzIEtIVE1MVG9vbFRpcDsKIAogI2lmbmRlZiBRVF9OT19UT09MVElQCkBAIC00MjgsNyAr
NDMxLDcgQEAgdm9pZCBLSFRNTFZpZXc6OnJlc2l6ZUV2ZW50IChRUmVzaXplRXZlbgogICAgICAg
ICBsYXlvdXQoKTsKICNlbmRpZgogICAgIGlmICggbV9wYXJ0ICYmIG1fcGFydC0+eG1sRG9jSW1w
bCgpICkKLSAgICAgICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPmRpc3BhdGNoV2luZG93RXZlbnQo
IEV2ZW50SW1wbDo6UkVTSVpFX0VWRU5ULCBmYWxzZSwgZmFsc2UgKTsKKyAgICAgICAgbV9wYXJ0
LT54bWxEb2NJbXBsKCktPmRpc3BhdGNoV2luZG93RXZlbnQoIEV2ZW50TmFtZXM6OnJlc2l6ZUV2
ZW50LCBmYWxzZSwgZmFsc2UgKTsKIAogICAgIEtBcHBsaWNhdGlvbjo6c2VuZFBvc3RlZEV2ZW50
cyh2aWV3cG9ydCgpLCBRRXZlbnQ6OlBhaW50KTsKIH0KQEAgLTc5NCw3ICs3OTcsNyBAQCB2b2lk
IEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVByZXNzRXZlbnQoCiAgICAgICAgIGQtPmNsaWNrTm9k
ZS0+cmVmKCk7CiAjZW5kaWYgICAgCiAKLSAgICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNo
TW91c2VFdmVudChFdmVudEltcGw6Ok1PVVNFRE9XTl9FVkVOVCxtZXYuaW5uZXJOb2RlLmdldCgp
LHRydWUsCisgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2Vk
b3duRXZlbnQsbWV2LmlubmVyTm9kZS5nZXQoKSx0cnVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGQtPmNsaWNrQ291bnQsX21vdXNlLHRydWUsRE9NOjpOb2Rl
SW1wbDo6TW91c2VQcmVzcyk7CiAKICAgICBpZiAoIXN3YWxsb3dFdmVudCkgewpAQCAtODQxLDEx
ICs4NDQsMTEgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogICAg
ICAgICByZXR1cm47CiAKICAgICBkLT5jbGlja0NvdW50ID0gX21vdXNlLT5jbGlja0NvdW50KCk7
Ci0gICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoRXZlbnRJbXBsOjpN
T1VTRVVQX0VWRU5ULG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1ZSwKKyAgICBib29sIHN3YWxsb3dF
dmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZXVwRXZlbnQsbWV2LmlubmVyTm9kZS5nZXQo
KSx0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmNs
aWNrQ291bnQsX21vdXNlLGZhbHNlLERPTTo6Tm9kZUltcGw6Ok1vdXNlUmVsZWFzZSk7CiAKICAg
ICBpZiAobWV2LmlubmVyTm9kZSA9PSBkLT5jbGlja05vZGUpCi0gICAgICAgIGRpc3BhdGNoTW91
c2VFdmVudChFdmVudEltcGw6OkNMSUNLX0VWRU5ULG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1ZSwK
KyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50KGNsaWNrRXZlbnQsbWV2LmlubmVyTm9kZS5nZXQo
KSx0cnVlLAogCQkJICAgZC0+Y2xpY2tDb3VudCxfbW91c2UsdHJ1ZSxET006Ok5vZGVJbXBsOjpN
b3VzZVJlbGVhc2UpOwogCiAgICAgLy8gUXQgZGVsaXZlcnMgYSByZWxlYXNlIGV2ZW50IEFORCBh
IGRvdWJsZSBjbGljayBldmVudC4KQEAgLTg2MSw3ICs4NjQsNyBAQCB2b2lkIEtIVE1MVmlldzo6
dmlld3BvcnRNb3VzZURvdWJsZUNsaWNrCiAgICAgLy8gc2luZ2xlIGFuZCBkb3VibGUtY2xpY2sg
ZXZlbnRzIGFzIHNlcGFyYXRlIChvbmx5IHRoZSBkZXRhaWwsIGkuZS4gbnVtYmVyIG9mIGNsaWNr
cyBkaWZmZXJzKQogICAgIC8vIEluIG90aGVyIHdvcmRzIGFuIGV2ZW4gZGV0YWlsIHZhbHVlIGZv
ciBhIG1vdXNlIGNsaWNrIGV2ZW50IG1lYW5zIGEgZG91YmxlIGNsaWNrLCBhbmQgYW4KICAgICAv
LyBvZGQgZGV0YWlsIHZhbHVlIG1lYW5zIGEgc2luZ2xlIGNsaWNrCi0gICAgYm9vbCBzd2FsbG93
RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoRXZlbnRJbXBsOjpNT1VTRURPV05fRVZFTlQsbWV2
LmlubmVyTm9kZS5nZXQoKSx0cnVlLAorICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hN
b3VzZUV2ZW50KG1vdXNlZG93bkV2ZW50LG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5jbGlja0NvdW50LF9tb3Vz
ZSx0cnVlLERPTTo6Tm9kZUltcGw6Ok1vdXNlRGJsQ2xpY2spOwogCiAgICAgaWYgKCFzd2FsbG93
RXZlbnQpIHsKQEAgLTkwNSw3ICs5MDgsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3Vz
ZU1vdmVFdmVudCggCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgYm9vbCBzd2FsbG93
RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoRXZlbnRJbXBsOjpNT1VTRU1PVkVfRVZFTlQsbWV2
LmlubmVyTm9kZS5nZXQoKSxmYWxzZSwKKyAgICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNo
TW91c2VFdmVudChtb3VzZW1vdmVFdmVudCxtZXYuaW5uZXJOb2RlLmdldCgpLGZhbHNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsX21vdXNlLHRydWUsRE9N
OjpOb2RlSW1wbDo6TW91c2VNb3ZlKTsKIAogI2lmICFBUFBMRV9DSEFOR0VTCkBAIC0xMDY2LDcg
KzEwNjksNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVJlbGVhc2VFdmVuCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1v
dXNlRXZlbnQoRXZlbnRJbXBsOjpNT1VTRVVQX0VWRU5ULG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1
ZSwKKyAgICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZXVwRXZl
bnQsbWV2LmlubmVyTm9kZS5nZXQoKSx0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQtPmNsaWNrQ291bnQsX21vdXNlLGZhbHNlLERPTTo6Tm9kZUltcGw6
Ok1vdXNlUmVsZWFzZSk7CiAKICAgICBpZiAoZC0+Y2xpY2tDb3VudCA+IDAgJiYgbWV2LmlubmVy
Tm9kZSA9PSBkLT5jbGlja05vZGUKQEAgLTEwNzQsNyArMTA3Nyw3IEBAIHZvaWQgS0hUTUxWaWV3
Ojp2aWV3cG9ydE1vdXNlUmVsZWFzZUV2ZW4KICAgICAgICAgICAgICYmIFFQb2ludChkLT5jbGlj
a1gteG0sZC0+Y2xpY2tZLXltKS5tYW5oYXR0YW5MZW5ndGgoKSA8PSBRQXBwbGljYXRpb246OnN0
YXJ0RHJhZ0Rpc3RhbmNlKCkKICNlbmRpZgogICAgICAgICApCi0JZGlzcGF0Y2hNb3VzZUV2ZW50
KEV2ZW50SW1wbDo6Q0xJQ0tfRVZFTlQsbWV2LmlubmVyTm9kZS5nZXQoKSx0cnVlLAorCWRpc3Bh
dGNoTW91c2VFdmVudChjbGlja0V2ZW50LG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1ZSwKIAkJCSAg
IGQtPmNsaWNrQ291bnQsX21vdXNlLHRydWUsRE9NOjpOb2RlSW1wbDo6TW91c2VSZWxlYXNlKTsK
IAogICAgIGlmICghc3dhbGxvd0V2ZW50KSB7CkBAIC0xMjI2LDcgKzEyMjksNyBAQCB2b2lkIEtI
VE1MVmlldzo6Y29udGVudHNDb250ZXh0TWVudUV2ZW50CiAjZW5kaWYKIH0KIAotYm9vbCBLSFRN
TFZpZXc6OmRpc3BhdGNoRHJhZ0V2ZW50KGludCBldmVudElkLCBET006Ok5vZGVJbXBsICpkcmFn
VGFyZ2V0LCBjb25zdCBRUG9pbnQgJmxvYywgRE9NOjpDbGlwYm9hcmRJbXBsICpjbGlwYm9hcmQp
Citib29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZl
dmVudFR5cGUsIERPTTo6Tm9kZUltcGwgKmRyYWdUYXJnZXQsIGNvbnN0IFFQb2ludCAmbG9jLCBE
T006OkNsaXBib2FyZEltcGwgKmNsaXBib2FyZCkKIHsKICAgICBpbnQgY2xpZW50WCwgY2xpZW50
WTsKICAgICB2aWV3cG9ydFRvQ29udGVudHMobG9jLngoKSwgbG9jLnkoKSwgY2xpZW50WCwgY2xp
ZW50WSk7CkBAIC0xMjQ0LDcgKzEyNDcsNyBAQCBib29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hEcmFn
RXZlbnQoaW50IGV2CiAgICAgYm9vbCBzaGlmdEtleSA9IDA7CiAgICAgYm9vbCBtZXRhS2V5ID0g
MDsKICAgICAKLSAgICBNb3VzZUV2ZW50SW1wbCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwoc3Rh
dGljX2Nhc3Q8RXZlbnRJbXBsOjpFdmVudElkPihldmVudElkKSwKKyAgICBNb3VzZUV2ZW50SW1w
bCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwoZXZlbnRUeXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlLCBtX3BhcnQtPnhtbERvY0ltcGwo
KS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwgY2xpZW50WSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtl
eSwgbWV0YUtleSwKQEAgLTEyNzQsMTMgKzEyNzcsMTMgQEAgYm9vbCBLSFRNTFZpZXc6OnVwZGF0
ZURyYWdBbmREcm9wKGNvbnN0IAogICAgIGlmIChkLT5kcmFnVGFyZ2V0ICE9IG5ld1RhcmdldCkg
ewogICAgICAgICAvLyBub3RlIHRoaXMgb3JkZXJpbmcgaXMgZXhwbGljaXRseSBjaG9zZW4gdG8g
bWF0Y2ggV2luSUUKICAgICAgICAgaWYgKG5ld1RhcmdldCkgewotICAgICAgICAgICAgYWNjZXB0
ID0gZGlzcGF0Y2hEcmFnRXZlbnQoRXZlbnRJbXBsOjpEUkFHRU5URVJfRVZFTlQsIG5ld1Rhcmdl
dCwgbG9jLCBjbGlwYm9hcmQpOworICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZl
bnQoZHJhZ2VudGVyRXZlbnQsIG5ld1RhcmdldCwgbG9jLCBjbGlwYm9hcmQpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghZC0+ZHJhZ1RhcmdldC5pc051bGwoKSkgewotICAgICAgICAgICAgZGlz
cGF0Y2hEcmFnRXZlbnQoRXZlbnRJbXBsOjpEUkFHTEVBVkVfRVZFTlQsIGQtPmRyYWdUYXJnZXQu
Z2V0KCksIGxvYywgY2xpcGJvYXJkKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGRy
YWdsZWF2ZUV2ZW50LCBkLT5kcmFnVGFyZ2V0LmdldCgpLCBsb2MsIGNsaXBib2FyZCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKG5ld1RhcmdldCkgewotICAgICAgICBhY2NlcHQgPSBkaXNw
YXRjaERyYWdFdmVudChFdmVudEltcGw6OkRSQUdPVkVSX0VWRU5ULCBuZXdUYXJnZXQsIGxvYywg
Y2xpcGJvYXJkKTsKKyAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZHJhZ292ZXJF
dmVudCwgbmV3VGFyZ2V0LCBsb2MsIGNsaXBib2FyZCk7CiAgICAgfQogICAgIGQtPmRyYWdUYXJn
ZXQucmVzZXQobmV3VGFyZ2V0KTsKIApAQCAtMTI5MCw3ICsxMjkzLDcgQEAgYm9vbCBLSFRNTFZp
ZXc6OnVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IAogdm9pZCBLSFRNTFZpZXc6OmNhbmNlbERyYWdB
bmREcm9wKGNvbnN0IFFQb2ludCAmbG9jLCBET006OkNsaXBib2FyZEltcGwgKmNsaXBib2FyZCkK
IHsKICAgICBpZiAoIWQtPmRyYWdUYXJnZXQuaXNOdWxsKCkpIHsKLSAgICAgICAgZGlzcGF0Y2hE
cmFnRXZlbnQoRXZlbnRJbXBsOjpEUkFHTEVBVkVfRVZFTlQsIGQtPmRyYWdUYXJnZXQuZ2V0KCks
IGxvYywgY2xpcGJvYXJkKTsKKyAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZHJhZ2xlYXZlRXZl
bnQsIGQtPmRyYWdUYXJnZXQuZ2V0KCksIGxvYywgY2xpcGJvYXJkKTsKICAgICB9CiAgICAgZC0+
ZHJhZ1RhcmdldC5yZXNldCgpOwogfQpAQCAtMTI5OSw3ICsxMzAyLDcgQEAgYm9vbCBLSFRNTFZp
ZXc6OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdAogewogICAgIGJvb2wgYWNjZXB0ID0gZmFsc2U7
CiAgICAgaWYgKCFkLT5kcmFnVGFyZ2V0LmlzTnVsbCgpKSB7Ci0gICAgICAgIGFjY2VwdCA9IGRp
c3BhdGNoRHJhZ0V2ZW50KEV2ZW50SW1wbDo6RFJPUF9FVkVOVCwgZC0+ZHJhZ1RhcmdldC5nZXQo
KSwgbG9jLCBjbGlwYm9hcmQpOworICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChk
cm9wRXZlbnQsIGQtPmRyYWdUYXJnZXQuZ2V0KCksIGxvYywgY2xpcGJvYXJkKTsKICAgICB9CiAg
ICAgZC0+ZHJhZ1RhcmdldC5yZXNldCgpOwogICAgIHJldHVybiBhY2NlcHQ7CkBAIC0xNzkxLDcg
KzE3OTQsNyBAQCB2b2lkIEtIVE1MVmlldzo6YWRkRm9ybUNvbXBsZXRpb25JdGVtKGNvCiAKICNl
bmRpZgogCi1ib29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGludCBldmVudElkLCBE
T006Ok5vZGVJbXBsICp0YXJnZXROb2RlLCBib29sIGNhbmNlbGFibGUsCitib29sIEtIVE1MVmll
dzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBET006
Ok5vZGVJbXBsICp0YXJnZXROb2RlLCBib29sIGNhbmNlbGFibGUsCiAJCQkJICAgaW50IGRldGFp
bCxRTW91c2VFdmVudCAqX21vdXNlLCBib29sIHNldFVuZGVyLAogCQkJCSAgIGludCBtb3VzZUV2
ZW50VHlwZSkKIHsKQEAgLTE4NDksNyArMTg1Miw3IEBAIGJvb2wgS0hUTUxWaWV3OjpkaXNwYXRj
aE1vdXNlRXZlbnQoaW50IGUKIAkgICAgLy8gc2VuZCBtb3VzZW91dCBldmVudCB0byB0aGUgb2xk
IG5vZGUKIAkgICAgaWYgKG9sZFVuZGVyKXsKIAkJb2xkVW5kZXItPnJlZigpOwotCQlNb3VzZUV2
ZW50SW1wbCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwoRXZlbnRJbXBsOjpNT1VTRU9VVF9FVkVO
VCwKKwkJTW91c2VFdmVudEltcGwgKm1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKG1vdXNlb3V0RXZl
bnQsCiAJCQkJCQkJdHJ1ZSx0cnVlLG1fcGFydC0+eG1sRG9jSW1wbCgpLT5kZWZhdWx0Vmlldygp
LAogCQkJCQkJCTAsc2NyZWVuWCxzY3JlZW5ZLGNsaWVudFgsY2xpZW50WSwKIAkJCQkJCQljdHJs
S2V5LGFsdEtleSxzaGlmdEtleSxtZXRhS2V5LApAQCAtMTg1OSw3ICsxODYyLDcgQEAgYm9vbCBL
SFRNTFZpZXc6OmRpc3BhdGNoTW91c2VFdmVudChpbnQgZQogCiAJICAgIC8vIHNlbmQgbW91c2Vv
dmVyIGV2ZW50IHRvIHRoZSBuZXcgbm9kZQogCSAgICBpZiAodGFyZ2V0Tm9kZSkgewotCQlNb3Vz
ZUV2ZW50SW1wbCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwoRXZlbnRJbXBsOjpNT1VTRU9WRVJf
RVZFTlQsCisJCU1vdXNlRXZlbnRJbXBsICptZSA9IG5ldyBNb3VzZUV2ZW50SW1wbChtb3VzZW92
ZXJFdmVudCwKIAkJCQkJCQl0cnVlLHRydWUsbV9wYXJ0LT54bWxEb2NJbXBsKCktPmRlZmF1bHRW
aWV3KCksCiAJCQkJCQkJMCxzY3JlZW5YLHNjcmVlblksY2xpZW50WCxjbGllbnRZLAogCQkJCQkJ
CWN0cmxLZXksYWx0S2V5LHNoaWZ0S2V5LG1ldGFLZXksCkBAIC0xODc5LDcgKzE4ODIsNyBAQCBi
b29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGludCBlCiAgICAgICAgIC8vIHdoaWNo
IGRvIGEgbG90IG9mIHRoZSBzYW1lIHN0dWZmLgogCiAJLy8gc2VuZCB0aGUgYWN0dWFsIGV2ZW50
Ci0JTW91c2VFdmVudEltcGwgKm1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKHN0YXRpY19jYXN0PEV2
ZW50SW1wbDo6RXZlbnRJZD4oZXZlbnRJZCksCisJTW91c2VFdmVudEltcGwgKm1lID0gbmV3IE1v
dXNlRXZlbnRJbXBsKGV2ZW50VHlwZSwKIAkJCQkJCXRydWUsY2FuY2VsYWJsZSxtX3BhcnQtPnht
bERvY0ltcGwoKS0+ZGVmYXVsdFZpZXcoKSwKIAkJCQkJCWRldGFpbCxzY3JlZW5YLHNjcmVlblks
Y2xpZW50WCxjbGllbnRZLAogCQkJCQkJY3RybEtleSxhbHRLZXksc2hpZnRLZXksbWV0YUtleSwK
QEAgLTE4OTIsMTIgKzE4OTUsMTIgQEAgYm9vbCBLSFRNTFZpZXc6OmRpc3BhdGNoTW91c2VFdmVu
dChpbnQgZQogICAgICAgICAgICAgc3dhbGxvd0V2ZW50ID0gdHJ1ZTsKIAltZS0+ZGVyZWYoKTsK
IAotCS8vIFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGNsaWNrIGV2ZW50LCB3ZSBhbHNvIHNlbmQg
dGhlIEtIVE1MX0NMSUNLIG9yIEtIVE1MX0RCTENMSUNLIGV2ZW50LiBUaGlzIGlzIG5vdCBwYXJ0
CisJLy8gU3BlY2lhbCBjYXNlOiBJZiBpdCdzIGEgY2xpY2sgZXZlbnQsIHdlIGFsc28gc2VuZCB0
aGUga2h0bWxDbGlja0V2ZW50IG9yIGtodG1sRGJsY2xpY2suIFRoaXMgaXMgbm90IHBhcnQKIAkv
LyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRo
ZSB0cmFkaXRpb25hbCBvbmNsaWNrPSIiIGFuZCBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZXMsCiAJ
Ly8gYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzaW5n
bGUgJiBkb3VibGUgY2xpY2tzIHVzaW5nIERPTSAob25seSB0aGUgY2xpY2sgY291bnQgaXMKLQkv
LyBzdG9yZWQsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSkKLQlpZiAoZXZlbnRJ
ZCA9PSBFdmVudEltcGw6OkNMSUNLX0VWRU5UKSB7Ci0JICAgIG1lID0gbmV3IE1vdXNlRXZlbnRJ
bXBsKEV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQsCisJLy8gc3RvcmVkLCB3aGljaCBpcyBu
b3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUpLgorCWlmIChldmVudFR5cGUgPT0gY2xpY2tFdmVudCkg
eworCSAgICBtZSA9IG5ldyBNb3VzZUV2ZW50SW1wbChraHRtbENsaWNrRXZlbnQsCiAJCQkJICAg
IHRydWUsY2FuY2VsYWJsZSxtX3BhcnQtPnhtbERvY0ltcGwoKS0+ZGVmYXVsdFZpZXcoKSwKIAkJ
CQkgICAgZGV0YWlsLHNjcmVlblgsc2NyZWVuWSxjbGllbnRYLGNsaWVudFksCiAJCQkJICAgIGN0
cmxLZXksYWx0S2V5LHNoaWZ0S2V5LG1ldGFLZXksCkBAIC0xOTE1LDcgKzE5MTgsNyBAQCBib29s
IEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGludCBlCiAJICAgIG1lLT5kZXJlZigpOwog
CiAgICAgICAgICAgICBpZiAoZC0+aXNEb3VibGVDbGljaykgewotICAgICAgICAgICAgICAgIG1l
ID0gbmV3IE1vdXNlRXZlbnRJbXBsKEV2ZW50SW1wbDo6S0hUTUxfREJMQ0xJQ0tfRVZFTlQsCisg
ICAgICAgICAgICAgICAgbWUgPSBuZXcgTW91c2VFdmVudEltcGwoa2h0bWxEYmxjbGlja0V2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsY2FuY2VsYWJs
ZSxtX3BhcnQtPnhtbERvY0ltcGwoKS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwsc2NyZWVuWCxzY3JlZW5ZLGNsaWVudFgsY2xp
ZW50WSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5LGFs
dEtleSxzaGlmdEtleSxtZXRhS2V5LApAQCAtMTkzMSw5ICsxOTM0LDkgQEAgYm9vbCBLSFRNTFZp
ZXc6OmRpc3BhdGNoTW91c2VFdmVudChpbnQgZQogCiAgICAgICAgICAgICAvLyBBbHNvIHNlbmQg
YSBET01BY3RpdmF0ZSBldmVudCwgd2hpY2ggY2F1c2VzIHRoaW5ncyBsaWtlIGZvcm0gc3VibWlz
c2lvbnMgdG8gb2NjdXIuCiAgICAgICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQgJiYgIXRh
cmdldE5vZGUtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZS0+ZGlzcGF0
Y2hVSUV2ZW50KEV2ZW50SW1wbDo6RE9NQUNUSVZBVEVfRVZFTlQsIGRldGFpbCk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0Tm9kZS0+ZGlzcGF0Y2hVSUV2ZW50KERPTUFjdGl2YXRlRXZlbnQsIGRl
dGFpbCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZXZlbnRJZCA9PSBFdmVudEltcGw6
Ok1PVVNFRE9XTl9FVkVOVCkgeworICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gbW91c2Vk
b3duRXZlbnQpIHsKICAgICAgICAgICAgIC8vIEZvY3VzIHNob3VsZCBiZSBzaGlmdGVkIG9uIG1v
dXNlIGRvd24sIG5vdCBvbiBhIGNsaWNrLiAgLWR3aAogICAgICAgICAgICAgLy8gQmx1ciBjdXJy
ZW50IGZvY3VzIG5vZGUgd2hlbiBhIGxpbmsvYnV0dG9uIGlzIGNsaWNrZWQ7IHRoaXMKICAgICAg
ICAgICAgIC8vIGlzIGV4cGVjdGVkIGJ5IHNvbWUgc2l0ZXMgdGhhdCByZWx5IG9uIG9uQ2hhbmdl
IGhhbmRsZXJzIHJ1bm5pbmcKSW5kZXg6IGtodG1sL2todG1sdmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ3CmRpZmYgLXAgLXUgLXIxLjQ3IGtodG1sL2todG1sdmlldy5oCi0tLSBraHRt
bC9raHRtbHZpZXcuaAkxMyBNYXkgMjAwNSAxNjo0ODo1MCAtMDAwMAkxLjQ3CisrKyBraHRtbC9r
aHRtbHZpZXcuaAkyMSBBdWcgMjAwNSAwMTo1NjowMyAtMDAwMApAQCAtMjgyLDEwICsyODIsMTAg
QEAgcHJpdmF0ZToKICAgICBRU3RyaW5nTGlzdCBmb3JtQ29tcGxldGlvbkl0ZW1zKGNvbnN0IFFT
dHJpbmcgJm5hbWUpIGNvbnN0OwogICAgIHZvaWQgYWRkRm9ybUNvbXBsZXRpb25JdGVtKGNvbnN0
IFFTdHJpbmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJnZhbHVlKTsKIAotICAgIGJvb2wgZGlzcGF0
Y2hNb3VzZUV2ZW50KGludCBldmVudElkLCBET006Ok5vZGVJbXBsICp0YXJnZXROb2RlLCBib29s
IGNhbmNlbGFibGUsCisgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgRE9NOjpBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZSwgRE9NOjpOb2RlSW1wbCAqdGFyZ2V0Tm9kZSwgYm9vbCBjYW5j
ZWxhYmxlLAogCQkJICAgIGludCBkZXRhaWwsUU1vdXNlRXZlbnQgKl9tb3VzZSwgYm9vbCBzZXRV
bmRlciwKIAkJCSAgICBpbnQgbW91c2VFdmVudFR5cGUpOwotICAgIGJvb2wgZGlzcGF0Y2hEcmFn
RXZlbnQoaW50IGV2ZW50SWQsIERPTTo6Tm9kZUltcGwgKmRyYWdUYXJnZXQsIGNvbnN0IFFQb2lu
dCAmbG9jLCBET006OkNsaXBib2FyZEltcGwgKmNsaXBib2FyZCk7CisgICAgYm9vbCBkaXNwYXRj
aERyYWdFdmVudChjb25zdCBET006OkF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBET006Ok5vZGVJ
bXBsICpkcmFnVGFyZ2V0LCBjb25zdCBRUG9pbnQgJmxvYywgRE9NOjpDbGlwYm9hcmRJbXBsICpj
bGlwYm9hcmQpOwogCiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChraHRtbDo6UmVu
ZGVyT2JqZWN0KiBvLCBTY3JvbGxCYXJNb2RlJiBoTW9kZSwgU2Nyb2xsQmFyTW9kZSYgdk1vZGUp
OwogCkluZGV4OiBraHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40MApkaWZmIC1wIC11IC1yMS40MCBraHRtbC9lY21hL2tqc19iaW5kaW5n
LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHAJMTcgQXVnIDIwMDUgMDQ6MDY6MDkg
LTAwMDAJMS40MAorKysga2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHAJMjEgQXVnIDIwMDUgMDE6
NTY6MDMgLTAwMDAKQEAgLTEsNCArMSwzIEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSot
CiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKQEAgLTMy
LDE2ICszMSwyMSBAQAogI2luY2x1ZGUgIm1pc2MvaGFzaG1hcC5oIgogI2luY2x1ZGUgInhtbC9k
b21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVk
ZSAieG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJkb20vY3NzX3N0eWxlc2hlZXQuaCIKIAog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogCit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwor
Cit1c2luZyBET006OkF0b21pY1N0cmluZzsKIHVzaW5nIERPTTo6Q1NTRXhjZXB0aW9uOwogdXNp
bmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6
RXZlbnRFeGNlcHRpb247CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpSYW5nZUV4
Y2VwdGlvbjsKKwogdXNpbmcga2h0bWw6Okhhc2hNYXA7CiB1c2luZyBraHRtbDo6UG9pbnRlckhh
c2g7CiAKQEAgLTE4MSwxOSArMTg1LDE4IEBAIGJvb2wgU2NyaXB0SW50ZXJwcmV0ZXI6Ondhc1J1
bkJ5VXNlckdlc3QKIHsKICAgaWYgKCBtX2V2dCApCiAgIHsKLSAgICBpbnQgaWQgPSBtX2V2dC0+
aWQoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUgPSBtX2V2dC0+dHlwZSgpOwogICAg
IGJvb2wgZXZlbnRPayA9ICggLy8gbW91c2UgZXZlbnRzCi0gICAgICBpZCA9PSBET006OkV2ZW50
SW1wbDo6Q0xJQ0tfRVZFTlQgfHwgaWQgPT0gRE9NOjpFdmVudEltcGw6Ok1PVVNFRE9XTl9FVkVO
VCB8fAotICAgICAgaWQgPT0gRE9NOjpFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQgfHwgaWQgPT0g
RE9NOjpFdmVudEltcGw6OktIVE1MX0RCTENMSUNLX0VWRU5UIHx8Ci0gICAgICBpZCA9PSBET006
OkV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQgfHwKKyAgICAgIHR5cGUgPT0gY2xpY2tFdmVu
dCB8fCB0eXBlID09IG1vdXNlZG93bkV2ZW50IHx8CisgICAgICB0eXBlID09IG1vdXNldXBFdmVu
dCB8fCB0eXBlID09IGtodG1sRGJsY2xpY2tFdmVudCB8fAorICAgICAgdHlwZSA9PSBraHRtbENs
aWNrRXZlbnQgfHwKICAgICAgIC8vIGtleWJvYXJkIGV2ZW50cwotICAgICAgaWQgPT0gRE9NOjpF
dmVudEltcGw6OktFWURPV05fRVZFTlQgfHwgaWQgPT0gRE9NOjpFdmVudEltcGw6OktFWVBSRVNT
X0VWRU5UIHx8Ci0gICAgICBpZCA9PSBET006OkV2ZW50SW1wbDo6S0VZVVBfRVZFTlQgfHwKKyAg
ICAgIHR5cGUgPT0ga2V5ZG93bkV2ZW50IHx8IHR5cGUgPT0ga2V5cHJlc3NFdmVudCB8fAorICAg
ICAgdHlwZSA9PSBrZXl1cEV2ZW50IHx8CiAgICAgICAvLyBvdGhlciBhY2NlcHRlZCBldmVudHMK
LSAgICAgIGlkID09IERPTTo6RXZlbnRJbXBsOjpTRUxFQ1RfRVZFTlQgfHwgaWQgPT0gRE9NOjpF
dmVudEltcGw6OkNIQU5HRV9FVkVOVCB8fAotICAgICAgaWQgPT0gRE9NOjpFdmVudEltcGw6OkZP
Q1VTX0VWRU5UIHx8IGlkID09IERPTTo6RXZlbnRJbXBsOjpCTFVSX0VWRU5UIHx8Ci0gICAgICBp
ZCA9PSBET006OkV2ZW50SW1wbDo6U1VCTUlUX0VWRU5UICk7Ci0gICAga2REZWJ1Zyg2MDcwKSA8
PCAiV2luZG93Lm9wZW4sIHNtYXJ0IHBvbGljeTogaWQ9IiA8PCBpZCA8PCAiIGV2ZW50T2s9IiA8
PCBldmVudE9rIDw8IGVuZGw7CisgICAgICB0eXBlID09IHNlbGVjdEV2ZW50IHx8IHR5cGUgPT0g
Y2hhbmdlRXZlbnQgfHwKKyAgICAgIHR5cGUgPT0gZm9jdXNFdmVudCB8fCB0eXBlID09IGJsdXJF
dmVudCB8fAorICAgICAgdHlwZSA9PSBzdWJtaXRFdmVudCApOwogICAgIGlmIChldmVudE9rKQog
ICAgICAgcmV0dXJuIHRydWU7CiAgIH0gZWxzZSAvLyBubyBldmVudApJbmRleDoga2h0bWwvZWNt
YS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg4CmRpZmYgLXAgLXUg
LXIxLjg4IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJ
MTkgQXVnIDIwMDUgMjM6MDk6MTcgLTAwMDAJMS44OAorKysga2h0bWwvZWNtYS9ranNfZG9tLmNw
cAkyMSBBdWcgMjAwNSAwMTo1NjowNSAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0qLSBjLWJh
c2ljLW9mZnNldDogMiAtKi0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBs
aWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKQEAgLTMwLDYgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5o
IgorI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV94bWxpbXBs
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImNzcy9j
c3NfcnVsZWltcGwuaCIKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lX29iamVjdC5oPgogI2VuZGlmCiAKK3VzaW5nIERPTTo6QXRvbWljU3RyaW5nOwog
dXNpbmcgRE9NOjpBdHRySW1wbDsKIHVzaW5nIERPTTo6Q2hhcmFjdGVyRGF0YUltcGw7CiB1c2lu
ZyBET006OkRvY3VtZW50SW1wbDsKQEAgLTYxLDYgKzYyLDcgQEAgdXNpbmcgRE9NOjpET01TdHJp
bmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpFbnRpdHlJbXBsOwogdXNp
bmcgRE9NOjpFdmVudEltcGw7Cit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogdXNp
bmcgRE9NOjpIVE1MQXBwbGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudElt
cGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKQEAgLTMwOSw5MSArMzExLDkxIEBAIFZh
bHVlSW1wICpET01Ob2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgY2FzZSBPd25lckRvY3Vt
ZW50OgogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZS5vd25lckRvY3VtZW50KCkpOwog
ICBjYXNlIE9uQWJvcnQ6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjpB
Qk9SVF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGFib3J0RXZlbnQpOwogICBjYXNl
IE9uQmx1cjoKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OkJMVVJfRVZF
TlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihibHVyRXZlbnQpOwogICBjYXNlIE9uQ2hhbmdl
OgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6Q0hBTkdFX0VWRU5UKTsK
KyAgICByZXR1cm4gZ2V0TGlzdGVuZXIoY2hhbmdlRXZlbnQpOwogICBjYXNlIE9uQ2xpY2s6Ci0g
ICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjpLSFRNTF9DTElDS19FVkVOVCk7
CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGtodG1sQ2xpY2tFdmVudCk7CiAgIGNhc2UgT25Db250
ZXh0TWVudToKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OkNPTlRFWFRN
RU5VX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVuZXIoY29udGV4dG1lbnVFdmVudCk7CiAg
IGNhc2UgT25EYmxDbGljazoKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6
OktIVE1MX0RCTENMSUNLX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVuZXIoa2h0bWxEYmxj
bGlja0V2ZW50KTsKICAgY2FzZSBPbkRyYWdEcm9wOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihE
T006OkV2ZW50SW1wbDo6S0hUTUxfRFJBR0RST1BfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0
ZW5lcihraHRtbERyYWdkcm9wRXZlbnQpOwogICBjYXNlIE9uRXJyb3I6Ci0gICAgcmV0dXJuIGdl
dExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjpLSFRNTF9FUlJPUl9FVkVOVCk7CisgICAgcmV0dXJu
IGdldExpc3RlbmVyKGtodG1sRXJyb3JFdmVudCk7CiAgIGNhc2UgT25Gb2N1czoKLSAgICByZXR1
cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OkZPQ1VTX0VWRU5UKTsKKyAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZm9jdXNFdmVudCk7CiAgIGNhc2UgT25JbnB1dDoKLSAgICByZXR1cm4gZ2V0
TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OklOUFVUX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoaW5wdXRFdmVudCk7CiAgIGNhc2UgT25LZXlEb3duOgotICAgIHJldHVybiBnZXRMaXN0
ZW5lcihET006OkV2ZW50SW1wbDo6S0VZRE9XTl9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGtleWRvd25FdmVudCk7CiAgIGNhc2UgT25LZXlQcmVzczoKLSAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoRE9NOjpFdmVudEltcGw6OktFWVBSRVNTX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoa2V5cHJlc3NFdmVudCk7CiAgIGNhc2UgT25LZXlVcDoKLSAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoRE9NOjpFdmVudEltcGw6OktFWVVQX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoa2V5dXBFdmVudCk7CiAgIGNhc2UgT25Mb2FkOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihE
T006OkV2ZW50SW1wbDo6TE9BRF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGxvYWRF
dmVudCk7CiAgIGNhc2UgT25Nb3VzZURvd246Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6
RXZlbnRJbXBsOjpNT1VTRURPV05fRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3Vz
ZWRvd25FdmVudCk7CiAgIGNhc2UgT25Nb3VzZU1vdmU6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVy
KERPTTo6RXZlbnRJbXBsOjpNT1VTRU1PVkVfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5l
cihtb3VzZW1vdmVFdmVudCk7CiAgIGNhc2UgT25Nb3VzZU91dDoKLSAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoRE9NOjpFdmVudEltcGw6Ok1PVVNFT1VUX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlz
dGVuZXIobW91c2VvdXRFdmVudCk7CiAgIGNhc2UgT25Nb3VzZU92ZXI6Ci0gICAgcmV0dXJuIGdl
dExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjpNT1VTRU9WRVJfRVZFTlQpOworICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihtb3VzZW92ZXJFdmVudCk7CiAgIGNhc2UgT25Nb3VzZVVwOgotICAgIHJldHVy
biBnZXRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6TU9VU0VVUF9FVkVOVCk7ICAgICAgCisgICAg
cmV0dXJuIGdldExpc3RlbmVyKG1vdXNldXBFdmVudCk7ICAgICAgCiAgIGNhc2UgT25Nb3VzZVdo
ZWVsOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6TU9VU0VXSEVFTF9F
VkVOVCk7ICAgICAgCisgICAgcmV0dXJuIGdldExpc3RlbmVyKG1vdXNld2hlZWxFdmVudCk7ICAg
ICAgCiAgIGNhc2UgT25CZWZvcmVDdXQ6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6RXZl
bnRJbXBsOjpCRUZPUkVDVVRfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihiZWZvcmVj
dXRFdmVudCk7CiAgIGNhc2UgT25DdXQ6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6RXZl
bnRJbXBsOjpDVVRfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihjdXRFdmVudCk7CiAg
IGNhc2UgT25CZWZvcmVDb3B5OgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2ZW50SW1w
bDo6QkVGT1JFQ09QWV9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGJlZm9yZWNvcHlF
dmVudCk7CiAgIGNhc2UgT25Db3B5OgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2ZW50
SW1wbDo6Q09QWV9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGNvcHlFdmVudCk7CiAg
IGNhc2UgT25CZWZvcmVQYXN0ZToKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudElt
cGw6OkJFRk9SRVBBU1RFX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYmVmb3JlcGFz
dGVFdmVudCk7CiAgIGNhc2UgT25QYXN0ZToKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpF
dmVudEltcGw6OlBBU1RFX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVuZXIocGFzdGVFdmVu
dCk7CiAgIGNhc2UgT25EcmFnRW50ZXI6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERPTTo6RXZl
bnRJbXBsOjpEUkFHRU5URVJfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihkcmFnZW50
ZXJFdmVudCk7CiAgIGNhc2UgT25EcmFnT3ZlcjoKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9N
OjpFdmVudEltcGw6OkRSQUdPVkVSX0VWRU5UKTsKKyAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZHJh
Z292ZXJFdmVudCk7CiAgIGNhc2UgT25EcmFnTGVhdmU6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVy
KERPTTo6RXZlbnRJbXBsOjpEUkFHTEVBVkVfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5l
cihkcmFnbGVhdmVFdmVudCk7CiAgIGNhc2UgT25Ecm9wOgotICAgIHJldHVybiBnZXRMaXN0ZW5l
cihET006OkV2ZW50SW1wbDo6RFJPUF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGRy
b3BFdmVudCk7CiAgIGNhc2UgT25EcmFnU3RhcnQ6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVyKERP
TTo6RXZlbnRJbXBsOjpEUkFHU1RBUlRfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihk
cmFnc3RhcnRFdmVudCk7CiAgIGNhc2UgT25EcmFnOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihE
T006OkV2ZW50SW1wbDo6RFJBR19FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdF
dmVudCk7CiAgIGNhc2UgT25EcmFnRW5kOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2
ZW50SW1wbDo6RFJBR0VORF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdlbmRF
dmVudCk7CiAgIGNhc2UgT25Nb3ZlOgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2ZW50
SW1wbDo6S0hUTUxfTU9WRV9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKGtodG1sTW92
ZUV2ZW50KTsKICAgY2FzZSBPblJlc2V0OgotICAgIHJldHVybiBnZXRMaXN0ZW5lcihET006OkV2
ZW50SW1wbDo6UkVTRVRfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihyZXNldEV2ZW50
KTsKICAgY2FzZSBPblJlc2l6ZToKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudElt
cGw6OlJFU0laRV9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKHJlc2l6ZUV2ZW50KTsK
ICAgY2FzZSBPblNjcm9sbDoKLSAgICByZXR1cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6
OlNDUk9MTF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3RlbmVyKHNjcm9sbEV2ZW50KTsKICNp
ZiBBUFBMRV9DSEFOR0VTCiAgIGNhc2UgT25TZWFyY2g6Ci0gICAgcmV0dXJuIGdldExpc3RlbmVy
KERPTTo6RXZlbnRJbXBsOjpTRUFSQ0hfRVZFTlQpOworICAgIHJldHVybiBnZXRMaXN0ZW5lcihz
ZWFyY2hFdmVudCk7CiAjZW5kaWYKICAgY2FzZSBPblNlbGVjdDoKLSAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoRE9NOjpFdmVudEltcGw6OlNFTEVDVF9FVkVOVCk7CisgICAgcmV0dXJuIGdldExpc3Rl
bmVyKHNlbGVjdEV2ZW50KTsKICAgY2FzZSBPblNlbGVjdFN0YXJ0OgotICAgIHJldHVybiBnZXRM
aXN0ZW5lcihET006OkV2ZW50SW1wbDo6U0VMRUNUU1RBUlRfRVZFTlQpOworICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihzZWxlY3RzdGFydEV2ZW50KTsKICAgY2FzZSBPblN1Ym1pdDoKLSAgICByZXR1
cm4gZ2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OlNVQk1JVF9FVkVOVCk7CisgICAgcmV0dXJu
IGdldExpc3RlbmVyKHN1Ym1pdEV2ZW50KTsKICAgY2FzZSBPblVubG9hZDoKLSAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OlVOTE9BRF9FVkVOVCk7CisgICAgcmV0dXJuIGdl
dExpc3RlbmVyKHNjcm9sbEV2ZW50KTsKICAgZGVmYXVsdDoKICAgICAvLyBubyBET00gc3RhbmRh
cmQsIGZvdW5kIGluIElFIG9ubHkKIApAQCAtNDYwLDEzMCArNDYyLDEzMCBAQCB2b2lkIERPTU5v
ZGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgbm9kZS5zZXRQcmVmaXgodmFsdWUt
PnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbik7CiAg
ICAgYnJlYWs7CiAgIGNhc2UgT25BYm9ydDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZl
bnRJbXBsOjpBQk9SVF9FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxhYm9ydEV2
ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbkJsdXI6Ci0gICAgc2V0TGlzdGVuZXIo
ZXhlYyxET006OkV2ZW50SW1wbDo6QkxVUl9FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIo
ZXhlYyxibHVyRXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uQ2hhbmdlOgotICAg
IHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkNIQU5HRV9FVkVOVCx2YWx1ZSk7Cisg
ICAgc2V0TGlzdGVuZXIoZXhlYyxjaGFuZ2VFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNh
c2UgT25DbGljazoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRNTF9D
TElDS19FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxraHRtbENsaWNrRXZlbnQs
dmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uQ29udGV4dE1lbnU6Ci0gICAgc2V0TGlzdGVu
ZXIoZXhlYyxET006OkV2ZW50SW1wbDo6Q09OVEVYVE1FTlVfRVZFTlQsdmFsdWUpOworICAgIHNl
dExpc3RlbmVyKGV4ZWMsY29udGV4dG1lbnVFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNh
c2UgT25EYmxDbGljazoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRN
TF9EQkxDTElDS19FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxraHRtbERibGNs
aWNrRXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uRHJhZ0Ryb3A6Ci0gICAgc2V0
TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxfRFJBR0RST1BfRVZFTlQsdmFsdWUp
OworICAgIHNldExpc3RlbmVyKGV4ZWMsa2h0bWxEcmFnZHJvcEV2ZW50LHZhbHVlKTsKICAgICBi
cmVhazsKICAgY2FzZSBPbkVycm9yOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudElt
cGw6OktIVE1MX0VSUk9SX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGtodG1s
RXJyb3JFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25Gb2N1czoKLSAgICBzZXRM
aXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpGT0NVU19FVkVOVCx2YWx1ZSk7CisgICAgc2V0
TGlzdGVuZXIoZXhlYyxmb2N1c0V2ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbklu
cHV0OgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OklOUFVUX0VWRU5ULHZh
bHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGlucHV0RXZlbnQsdmFsdWUpOwogICAgIGJyZWFr
OwogICBjYXNlIE9uS2V5RG93bjoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBs
OjpLRVlET1dOX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGtleWRvd25FdmVu
dCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25LZXlQcmVzczoKLSAgICBzZXRMaXN0ZW5l
cihleGVjLERPTTo6RXZlbnRJbXBsOjpLRVlQUkVTU19FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlz
dGVuZXIoZXhlYyxrZXlwcmVzc0V2ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbktl
eVVwOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OktFWVVQX0VWRU5ULHZh
bHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGtleXVwRXZlbnQsdmFsdWUpOwogICAgIGJyZWFr
OwogICBjYXNlIE9uTG9hZDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpM
T0FEX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGxvYWRFdmVudCx2YWx1ZSk7
CiAgICAgYnJlYWs7CiAgIGNhc2UgT25Nb3VzZURvd246Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxE
T006OkV2ZW50SW1wbDo6TU9VU0VET1dOX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihl
eGVjLG1vdXNlZG93bkV2ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbk1vdXNlTW92
ZToKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpNT1VTRU1PVkVfRVZFTlQs
dmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsbW91c2Vtb3ZlRXZlbnQsdmFsdWUpOwogICAg
IGJyZWFrOwogICBjYXNlIE9uTW91c2VPdXQ6Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2
ZW50SW1wbDo6TU9VU0VPVVRfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsbW91
c2VvdXRFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25Nb3VzZU92ZXI6Ci0gICAg
c2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6TU9VU0VPVkVSX0VWRU5ULHZhbHVlKTsK
KyAgICBzZXRMaXN0ZW5lcihleGVjLG1vdXNlb3ZlckV2ZW50LHZhbHVlKTsKICAgICBicmVhazsK
ICAgY2FzZSBPbk1vdXNlVXA6Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6
TU9VU0VVUF9FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxtb3VzZXVwRXZlbnQs
dmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uTW91c2VXaGVlbDoKLSAgICBzZXRMaXN0ZW5l
cihleGVjLERPTTo6RXZlbnRJbXBsOjpNT1VTRVdIRUVMX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRM
aXN0ZW5lcihleGVjLG1vdXNld2hlZWxFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2Ug
T25CZWZvcmVDdXQ6Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QkVGT1JF
Q1VUX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGJlZm9yZWN1dEV2ZW50LHZh
bHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbkN1dDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERP
TTo6RXZlbnRJbXBsOjpDVVRfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsY3V0
RXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uQmVmb3JlQ29weToKLSAgICBzZXRM
aXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpCRUZPUkVDT1BZX0VWRU5ULHZhbHVlKTsKKyAg
ICBzZXRMaXN0ZW5lcihleGVjLGJlZm9yZWNvcHlFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAg
IGNhc2UgT25Db3B5OgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkNPUFlf
RVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsY29weUV2ZW50LHZhbHVlKTsKICAg
ICBicmVhazsKICAgY2FzZSBPbkJlZm9yZVBhc3RlOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9N
OjpFdmVudEltcGw6OkJFRk9SRVBBU1RFX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihl
eGVjLGJlZm9yZXBhc3RlRXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uUGFzdGU6
Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6UEFTVEVfRVZFTlQsdmFsdWUp
OworICAgIHNldExpc3RlbmVyKGV4ZWMscGFzdGVFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAg
IGNhc2UgT25EcmFnRW50ZXI6Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6
RFJBR0VOVEVSX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGRyYWdlbnRlckV2
ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbkRyYWdPdmVyOgotICAgIHNldExpc3Rl
bmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkRSQUdPVkVSX0VWRU5ULHZhbHVlKTsKKyAgICBzZXRM
aXN0ZW5lcihleGVjLGRyYWdvdmVyRXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9u
RHJhZ0xlYXZlOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkRSQUdMRUFW
RV9FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxkcmFnbGVhdmVFdmVudCx2YWx1
ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25Ecm9wOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9N
OjpFdmVudEltcGw6OkRST1BfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsZHJv
cEV2ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbkRyYWdTdGFydDoKLSAgICBzZXRM
aXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpEUkFHU1RBUlRfRVZFTlQsdmFsdWUpOworICAg
IHNldExpc3RlbmVyKGV4ZWMsZHJhZ3N0YXJ0RXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBj
YXNlIE9uRHJhZzoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpEUkFHX0VW
RU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLGRyYWdFdmVudCx2YWx1ZSk7CiAgICAg
YnJlYWs7CiAgIGNhc2UgT25EcmFnRW5kOgotICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVu
dEltcGw6OkRSQUdFTkRfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsZHJhZ2Vu
ZEV2ZW50LHZhbHVlKTsKICAgICBicmVhazsKICAgY2FzZSBPbk1vdmU6Ci0gICAgc2V0TGlzdGVu
ZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxfTU9WRV9FVkVOVCx2YWx1ZSk7CisgICAgc2V0
TGlzdGVuZXIoZXhlYyxraHRtbE1vdmVFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2Ug
T25SZXNldDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpSRVNFVF9FVkVO
VCx2YWx1ZSk7CisgICAgc2V0TGlzdGVuZXIoZXhlYyxyZXNldEV2ZW50LHZhbHVlKTsKICAgICBi
cmVhazsKICAgY2FzZSBPblJlc2l6ZToKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJ
bXBsOjpSRVNJWkVfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMscmVzaXplRXZl
bnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uU2Nyb2xsOgotICAgIHNldExpc3RlbmVy
KGV4ZWMsRE9NOjpFdmVudEltcGw6OlNDUk9MTF9FVkVOVCx2YWx1ZSk7CisgICAgc2V0TGlzdGVu
ZXIoZXhlYyxzY3JvbGxFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25TZWFyY2g6
Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6U0VBUkNIX0VWRU5ULHZhbHVl
KTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLHNlYXJjaEV2ZW50LHZhbHVlKTsKICAgICBicmVhazsK
ICAgY2FzZSBPblNlbGVjdDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpT
RUxFQ1RfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsc2VsZWN0RXZlbnQsdmFs
dWUpOwogICAgIGJyZWFrOwogICBjYXNlIE9uU2VsZWN0U3RhcnQ6Ci0gICAgc2V0TGlzdGVuZXIo
ZXhlYyxET006OkV2ZW50SW1wbDo6U0VMRUNUU1RBUlRfRVZFTlQsdmFsdWUpOworICAgIHNldExp
c3RlbmVyKGV4ZWMsc2VsZWN0c3RhcnRFdmVudCx2YWx1ZSk7CiAgICAgYnJlYWs7CiAgIGNhc2Ug
T25TdWJtaXQ6Ci0gICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6U1VCTUlUX0VW
RU5ULHZhbHVlKTsKKyAgICBzZXRMaXN0ZW5lcihleGVjLHN1Ym1pdEV2ZW50LHZhbHVlKTsKICAg
ICBicmVhazsKICAgY2FzZSBPblVubG9hZDoKLSAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZl
bnRJbXBsOjpVTkxPQURfRVZFTlQsdmFsdWUpOworICAgIHNldExpc3RlbmVyKGV4ZWMsc2Nyb2xs
RXZlbnQsdmFsdWUpOwogICAgIGJyZWFrOwogICBjYXNlIFNjcm9sbFRvcDogewogICAgIGtodG1s
OjpSZW5kZXJPYmplY3QgKnJlbmQgPSBub2RlLnJlbmRlcmVyKCk7CkBAIC02MTcsMTQgKzYxOSwx
NCBAQCBVU3RyaW5nIERPTU5vZGU6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSBjCiAgIHJldHVybiAi
W29iamVjdCAiICsgKG1faW1wbC0+aXNFbGVtZW50Tm9kZSgpID8gbV9pbXBsLT5ub2RlTmFtZSgp
IDogY2xhc3NOYW1lKCkpICsgIl0iOwogfQogCi12b2lkIERPTU5vZGU6OnNldExpc3RlbmVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQsIFZhbHVlSW1wICpmdW5jKSBjb25zdAordm9pZCBE
T01Ob2RlOjpzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlLCBWYWx1ZUltcCAqZnVuYykgY29uc3QKIHsKLSAgbV9pbXBsLT5zZXRIVE1MRXZl
bnRMaXN0ZW5lcihldmVudElkLCBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU0V2
ZW50TGlzdGVuZXIoZnVuYywgdHJ1ZSkpOworICBtX2ltcGwtPnNldEhUTUxFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNFdmVudExpc3Rl
bmVyKGZ1bmMsIHRydWUpKTsKIH0KIAotVmFsdWVJbXAgKkRPTU5vZGU6OmdldExpc3RlbmVyKGlu
dCBldmVudElkKSBjb25zdAorVmFsdWVJbXAgKkRPTU5vZGU6OmdldExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlKSBjb25zdAogewotICAgIERPTTo6RXZlbnRMaXN0ZW5lciAq
bGlzdGVuZXIgPSBtX2ltcGwtPmdldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50SWQpOworICAgIERP
TTo6RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIgPSBtX2ltcGwtPmdldEhUTUxFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSk7CiAgICAgSlNFdmVudExpc3RlbmVyICpqc0xpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8SlNFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpOwogICAgIGlmICgganNMaXN0ZW5lciAmJiBq
c0xpc3RlbmVyLT5saXN0ZW5lck9iakltcCgpICkKIAlyZXR1cm4ganNMaXN0ZW5lci0+bGlzdGVu
ZXJPYmooKTsKQEAgLTY1OCwxMyArNjYwLDEzIEBAIFZhbHVlSW1wICpET01Ob2RlUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGkKICAgICBjYXNlIERPTU5vZGU6OkFkZEV2ZW50TGlzdGVuZXI6IHsKICAg
ICAgICAgSlNFdmVudExpc3RlbmVyICpsaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUo
ZXhlYyktPmdldEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKTsKICAgICAgICAgaWYgKGxpc3RlbmVy
KQotICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpLGxpc3RlbmVyLGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CisgICAgICAg
ICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoQXRvbWljU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpKSwgbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KICAgICBjYXNlIERPTU5vZGU6OlJlbW92
ZUV2ZW50TGlzdGVuZXI6IHsKICAgICAgICAgSlNFdmVudExpc3RlbmVyICpsaXN0ZW5lciA9IFdp
bmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKTsK
ICAgICAgICAgaWYgKGxpc3RlbmVyKQotICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3Rl
bmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGxpc3RlbmVyLGFyZ3NbMl0tPnRv
Qm9vbGVhbihleGVjKSk7CisgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoQXRv
bWljU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSwgbGlzdGVuZXIsYXJn
c1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
IH0KICAgICBjYXNlIERPTU5vZGU6OkRpc3BhdGNoRXZlbnQ6CkluZGV4OiBraHRtbC9lY21hL2tq
c19kb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21h
L2tqc19kb20uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC1wIC11IC1yMS40OCBr
aHRtbC9lY21hL2tqc19kb20uaAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmgJOCBBdWcgMjAwNSAw
NDowNzo0MSAtMDAwMAkxLjQ4CisrKyBraHRtbC9lY21hL2tqc19kb20uaAkyMSBBdWcgMjAwNSAw
MTo1NjowNSAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAt
Ki0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKQEAgLTE5LDgg
KzE4LDggQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMz
MCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lmbmRlZiBfS0pTX0RPTV9I
XwotI2RlZmluZSBfS0pTX0RPTV9IXworI2lmbmRlZiBLSlNfRE9NX0gKKyNkZWZpbmUgS0pTX0RP
TV9ICiAKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogCkBAIC0yOCw2ICsyNyw3IEBACiAjaW5j
bHVkZSAibWlzYy9zaGFyZWQuaCIKIAogbmFtZXNwYWNlIERPTSB7CisgICAgY2xhc3MgQXRvbWlj
U3RyaW5nOwogICAgIGNsYXNzIEF0dHJJbXBsOwogICAgIGNsYXNzIENoYXJhY3RlckRhdGFJbXBs
OwogICAgIGNsYXNzIERvY3VtZW50VHlwZUltcGw7CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBET00gewogICAgIGNsYXNzIE5vdGF0aW9uSW1wbDsKICAgICBjbGFzcyBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25JbXBsOwogICAgIGNsYXNzIFRleHRJbXBsOwotfTsKK30KIAogbmFtZXNwYWNlIEtK
UyB7CiAKQEAgLTYwLDggKzYwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIFZh
bHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkID0gVW5k
ZWZpbmVkVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCBldmVudElkLCBWYWx1ZUltcCAqZnVuYykgY29uc3Q7Ci0gICAgVmFsdWVJbXAgKmdldExpc3Rl
bmVyKGludCBldmVudElkKSBjb25zdDsKKyAgICB2b2lkIHNldExpc3RlbmVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgVmFsdWVJbXAgKmZ1bmMp
IGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRMaXN0ZW5lcihjb25zdCBET006OkF0b21pY1N0cmlu
ZyAmZXZlbnRUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHVzaEV2ZW50SGFuZGxlclNj
b3BlKEV4ZWNTdGF0ZSAqZXhlYywgU2NvcGVDaGFpbiAmc2NvcGUpIGNvbnN0OwogCiAgICAgZW51
bSB7IE5vZGVOYW1lLCBOb2RlVmFsdWUsIE5vZGVUeXBlLCBQYXJlbnROb2RlLCBQYXJlbnRFbGVt
ZW50LApJbmRleDoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjU2CmRpZmYgLXAgLXUgLXIxLjU2IGtodG1sL2VjbWEva2pzX2V2ZW50cy5j
cHAKLS0tIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMTYgQXVnIDIwMDUgMDA6NDc6NDQgLTAw
MDAJMS41NgorKysga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkyMSBBdWcgMjAwNSAwMTo1Njow
NiAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8q
CiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKQEAgLTE4LDIxICsxNywyOSBA
QAogICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlICJr
aHRtbF9wYXJ0LmgiCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorCisjaW5jbHVkZSA8a2pzL3By
b3RlY3RlZF9vYmplY3QuaD4gLy8gdGVtcG9yYXJ5LCByZW1vdmUgYWZ0ZXIgbGFuZGluZyBpbnRl
cnByZXRlciBsb2NrIHBhdGNoCisKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAi
a2pzX2V2ZW50cy5sdXQuaCIKKworI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJr
anNfd2luZG93LmgiCiAjaW5jbHVkZSAia2pzX3ZpZXdzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5
LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tMl92aWV3c2ltcGwuaCIKKyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKIAog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogCit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwor
Cit1c2luZyBET006OkF0b21pY1N0cmluZzsKIHVzaW5nIERPTTo6Q2xpcGJvYXJkRXZlbnRJbXBs
OwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OkV2ZW50SW1wbDsKQEAgLTMy
OSw5ICszMzYsOSBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvCiAg
IH0KIH0KIAotVmFsdWVJbXAgKmdldE5vZGVFdmVudExpc3RlbmVyKE5vZGVJbXBsICpuLCBpbnQg
ZXZlbnRJZCkKK1ZhbHVlSW1wICpnZXROb2RlRXZlbnRMaXN0ZW5lcihOb2RlSW1wbCAqbiwgY29u
c3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCiB7Ci0gIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
ICpsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTQWJzdHJhY3RFdmVudExpc3RlbmVyICo+KG4tPmdl
dEhUTUxFdmVudExpc3RlbmVyKGV2ZW50SWQpKTsKKyAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIg
Kmxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgKj4obi0+Z2V0
SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSk7CiAgIGlmIChsaXN0ZW5lcikKICAgICBpZiAo
VmFsdWVJbXAgKm9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iakltcCgpKQogICAgICAgcmV0dXJu
IG9iajsKQEAgLTQzOSw3ICs0NDYsNyBAQCBWYWx1ZUltcCAqRE9NRXZlbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlCiAgIEV2ZW50SW1wbCAmZXZlbnQgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2Vu
KSB7CiAgIGNhc2UgVHlwZToKLSAgICByZXR1cm4gU3RyaW5nKGV2ZW50LnR5cGUoKSk7CisgICAg
cmV0dXJuIFN0cmluZyhldmVudC50eXBlKCkuZG9tU3RyaW5nKCkpOwogICBjYXNlIFRhcmdldDoK
ICAgY2FzZSBTcmNFbGVtZW50OiAvKk1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmplY3QgdGhhdCBm
aXJlZCB0aGUgZXZlbnQiKi8KICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBldmVudC50YXJn
ZXQoKSk7CkBAIC01MjEsNyArNTI4LDcgQEAgVmFsdWVJbXAgKkRPTUV2ZW50UHJvdG9GdW5jOjpj
YWxsQXNGdW5jdAogICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICBjYXNlIERPTUV2ZW50OjpJbml0RXZlbnQ6Ci0gICAgICBldmVudC5p
bml0RXZlbnQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksYXJnc1sxXS0+dG9Cb29s
ZWFuKGV4ZWMpLGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CisgICAgICBldmVudC5pbml0RXZl
bnQoQXRvbWljU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSwgYXJnc1sx
XS0+dG9Cb29sZWFuKGV4ZWMpLCBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogICB9OwogICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02NjMsNyAr
NjcwLDcgQEAgVmFsdWVJbXAgKkRPTVVJRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bgogICBVSUV2
ZW50SW1wbCAmdWlFdmVudCA9ICpzdGF0aWNfY2FzdDxVSUV2ZW50SW1wbCAqPihzdGF0aWNfY2Fz
dDxET01VSUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAg
Y2FzZSBET01VSUV2ZW50OjpJbml0VUlFdmVudDoKLSAgICAgIHVpRXZlbnQuaW5pdFVJRXZlbnQo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksCisgICAgICB1aUV2ZW50LmluaXRVSUV2
ZW50KEF0b21pY1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b0Fic3RyYWN0VmlldyhhcmdzWzNdKSwKQEAgLTc3OCwxNSArNzg1LDEw
IEBAIFZhbHVlSW1wICpET01Nb3VzZUV2ZW50OjpnZXRWYWx1ZVByb3BlcnQKICAgfQogICBjYXNl
IFRvRWxlbWVudDoKICAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJ0aGUgb2JqZWN0IHRvd2FyZCB3
aGljaCB0aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIiCi0gICAgaWYgKGV2ZW50
LmlkKCkgPT0gRE9NOjpFdmVudEltcGw6Ok1PVVNFT1VUX0VWRU5UKQotICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYywgZXZlbnQucmVsYXRlZFRhcmdldCgpKTsKLSAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLGV2ZW50LnRhcmdldCgpKTsKKyAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBl
dmVudC50eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSA6IGV2
ZW50LnRhcmdldCgpKTsKICAgY2FzZSBGcm9tRWxlbWVudDoKLSAgICAvLyBNU0lFIGV4dGVuc2lv
biAtICJvYmplY3QgZnJvbSB3aGljaCBhY3RpdmF0aW9uCi0gICAgLy8gb3IgdGhlIG1vdXNlIHBv
aW50ZXIgaXMgZXhpdGluZyBkdXJpbmcgdGhlIGV2ZW50IiAoaHVoPykKLSAgICBpZiAoZXZlbnQu
aWQoKSA9PSBET006OkV2ZW50SW1wbDo6TU9VU0VPVVRfRVZFTlQpCi0gICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBldmVudC50YXJnZXQoKSk7Ci0gICAgLyogZmFsbCB0aHJvdWdoICovCisg
ICAgLy8gTVNJRSBleHRlbnNpb24gLSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0
aGUgbW91c2UgcG9pbnRlciBpcyBleGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQorICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGV2ZW50LnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50ID8g
ZXZlbnQudGFyZ2V0KCkgOiBldmVudC5yZWxhdGVkVGFyZ2V0KCkpOwogICBjYXNlIFJlbGF0ZWRU
YXJnZXQ6CiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZXZlbnQucmVsYXRlZFRhcmdldCgp
KTsKICAgZGVmYXVsdDoKQEAgLTgwMiw3ICs4MDQsNyBAQCBWYWx1ZUltcCAqRE9NTW91c2VFdmVu
dFByb3RvRnVuYzo6Y2FsbEFzCiAgIE1vdXNlRXZlbnRJbXBsICZtb3VzZUV2ZW50ID0gKnN0YXRp
Y19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTU1vdXNlRXZlbnQgKj4odGhp
c09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU1vdXNlRXZlbnQ6
OkluaXRNb3VzZUV2ZW50OgotICAgICAgbW91c2VFdmVudC5pbml0TW91c2VFdmVudChhcmdzWzBd
LT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gdHlwZUFyZworICAgICAgbW91c2VFdmVudC5p
bml0TW91c2VFdmVudChBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpLCAvLyB0eXBlQXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0t
PnRvQm9vbGVhbihleGVjKSwgLy8gY2FuQnViYmxlQXJnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSwgLy8gY2FuY2VsYWJsZUFyZwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0Fic3RyYWN0VmlldyhhcmdzWzNdKSwgLy8g
dmlld0FyZwpAQCAtODk1LDcgKzg5Nyw3IEBAIFZhbHVlSW1wICpET01LZXlib2FyZEV2ZW50UHJv
dG9GdW5jOjpjYWwKICAgS2V5Ym9hcmRFdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTVVJRXZlbnQgKj4odGhpc09iaiktPmlt
cGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUtleWJvYXJkRXZlbnQ6OkluaXRL
ZXlib2FyZEV2ZW50OgotICAgICAgZXZlbnQuaW5pdEtleWJvYXJkRXZlbnQoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIHR5cGVBcmcKKyAgICAgIGV2ZW50LmluaXRLZXlib2Fy
ZEV2ZW50KEF0b21pY1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSksIC8v
IHR5cGVBcmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0tPnRvQm9vbGVh
bihleGVjKSwgLy8gY2FuQnViYmxlQXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzWzJdLT50b0Jvb2xlYW4oZXhlYyksIC8vIGNhbmNlbGFibGVBcmcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvQWJzdHJhY3RWaWV3KGFyZ3NbM10pLCAvLyB2aWV3QXJnCkBAIC05
OTgsNyArMTAwMCw3IEBAIFZhbHVlSW1wICpET01NdXRhdGlvbkV2ZW50UHJvdG9GdW5jOjpjYWwK
ICAgTXV0YXRpb25FdmVudEltcGwgJm11dGF0aW9uRXZlbnQgPSAqc3RhdGljX2Nhc3Q8TXV0YXRp
b25FdmVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7
CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU11dGF0aW9uRXZlbnQ6OkluaXRNdXRhdGlv
bkV2ZW50OgotICAgICAgbXV0YXRpb25FdmVudC5pbml0TXV0YXRpb25FdmVudChhcmdzWzBdLT50
b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gdHlwZUFyZywKKyAgICAgIG11dGF0aW9uRXZlbnQu
aW5pdE11dGF0aW9uRXZlbnQoQXRvbWljU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKSwgLy8gdHlwZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBj
YW5jZWxhYmxlQXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvTm9k
ZShhcmdzWzNdKSwgLy8gcmVsYXRlZE5vZGVBcmcKSW5kZXg6IGtodG1sL2VjbWEva2pzX2V2ZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pz
X2V2ZW50cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXAgLXUgLXIxLjMwIGto
dG1sL2VjbWEva2pzX2V2ZW50cy5oCi0tLSBraHRtbC9lY21hL2tqc19ldmVudHMuaAk4IEF1ZyAy
MDA1IDA0OjA3OjQxIC0wMDAwCTEuMzAKKysrIGtodG1sL2VjbWEva2pzX2V2ZW50cy5oCTIxIEF1
ZyAyMDA1IDAxOjU2OjA2IC0wMDAwCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIERPTTo6Tm9kZUltcGwgKm9yaWdpbmFsTm9kZTsKICAgfTsKIAotICBWYWx1ZUltcCAqZ2V0
Tm9kZUV2ZW50TGlzdGVuZXIoRE9NOjpOb2RlSW1wbCAqbiwgaW50IGV2ZW50SWQpOworICBWYWx1
ZUltcCAqZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoRE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgRE9NOjpB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSk7CiAKICAgLy8gQ29uc3RydWN0b3IgZm9yIEV2ZW50IC0g
Y3VycmVudGx5IG9ubHkgdXNlZCBmb3Igc29tZSBnbG9iYWwgdmFycwogICBjbGFzcyBFdmVudENv
bnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CkluZGV4OiBraHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTczCmRpZmYgLXAgLXUgLXIx
LjE3MyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCTE5IEF1ZyAyMDA1IDIyOjI5OjUzIC0wMDAwCTEuMTczCisrKyBraHRtbC9lY21hL2tqc193
aW5kb3cuY3BwCTIxIEF1ZyAyMDA1IDAxOjU2OjA5IC0wMDAwCkBAIC02NSw2ICs2NSw3IEBACiAj
aW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1w
bC5oIgogI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKKyNpbmNsdWRlICJ4bWwvRXZlbnRO
YW1lcy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJj
c3MvY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpA
QCAtNzYsNiArNzcsOSBAQAogLy8gaXNuYW4gYXJlIG5vdCBkZWZpbmVkLgogI2luY2x1ZGUgPGNt
YXRoPgogCit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOworCit1c2luZyBET006OkF0
b21pY1N0cmluZzsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpET01TdHJp
bmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwpAQCAtODcyLDU5ICs4NzYsNTkgQEAgVmFsdWVJ
bXAgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICAgICB9CiAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIG1fcGFydC0+eG1sRG9jSW1wbCgpKTsKICAgIGNhc2UgT25hYm9ydDoK
LSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZlbnRJbXBsOjpBQk9SVF9FVkVO
VCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBhYm9ydEV2ZW50KTsKICAgIGNhc2Ug
T25ibHVyOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6OkJM
VVJfRVZFTlQpOworICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgYmx1ckV2ZW50KTsKICAg
IGNhc2UgT25jaGFuZ2U6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006OkV2ZW50
SW1wbDo6Q0hBTkdFX0VWRU5UKTsKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGNoYW5n
ZUV2ZW50KTsKICAgIGNhc2UgT25jbGljazoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMs
IERPTTo6RXZlbnRJbXBsOjpLSFRNTF9DTElDS19FVkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihleGVjLCBraHRtbENsaWNrRXZlbnQpOwogICAgY2FzZSBPbmRibGNsaWNrOgotICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6OktIVE1MX0RCTENMSUNLX0VW
RU5UKTsKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGtodG1sRGJsY2xpY2tFdmVudCk7
CiAgICBjYXNlIE9uZHJhZ2Ryb3A6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006
OkV2ZW50SW1wbDo6S0hUTUxfRFJBR0RST1BfRVZFTlQpOworICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZXhlYywga2h0bWxEcmFnZHJvcEV2ZW50KTsKICAgIGNhc2UgT25lcnJvcjoKLSAgICAgcmV0
dXJuIGdldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZlbnRJbXBsOjpLSFRNTF9FUlJPUl9FVkVOVCk7
CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBraHRtbEVycm9yRXZlbnQpOwogICAgY2Fz
ZSBPbmZvY3VzOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6
OkZPQ1VTX0VWRU5UKTsKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGZvY3VzRXZlbnQp
OwogICAgY2FzZSBPbmtleWRvd246Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006
OkV2ZW50SW1wbDo6S0VZRE9XTl9FVkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVj
LCBrZXlkb3duRXZlbnQpOwogICAgY2FzZSBPbmtleXByZXNzOgotICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6OktFWVBSRVNTX0VWRU5UKTsKKyAgICAgcmV0dXJu
IGdldExpc3RlbmVyKGV4ZWMsIGtleXByZXNzRXZlbnQpOwogICAgY2FzZSBPbmtleXVwOgotICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6OktFWVVQX0VWRU5UKTsK
KyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGtleXVwRXZlbnQpOwogICAgY2FzZSBPbmxv
YWQ6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6TE9BRF9F
VkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBsb2FkRXZlbnQpOwogICAgY2Fz
ZSBPbm1vdXNlZG93bjoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZlbnRJ
bXBsOjpNT1VTRURPV05fRVZFTlQpOworICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgbW91
c2Vkb3duRXZlbnQpOwogICAgY2FzZSBPbm1vdXNlbW92ZToKLSAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGV4ZWMsIERPTTo6RXZlbnRJbXBsOjpNT1VTRU1PVkVfRVZFTlQpOworICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZXhlYywgbW91c2Vtb3ZlRXZlbnQpOwogICAgY2FzZSBPbm1vdXNlb3V0Ogot
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6Ok1PVVNFT1VUX0VW
RU5UKTsKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIG1vdXNlb3V0RXZlbnQpOwogICAg
Y2FzZSBPbm1vdXNlb3ZlcjoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZl
bnRJbXBsOjpNT1VTRU9WRVJfRVZFTlQpOworICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywg
bW91c2VvdmVyRXZlbnQpOwogICAgY2FzZSBPbm1vdXNldXA6Ci0gICAgIHJldHVybiBnZXRMaXN0
ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6TU9VU0VVUF9FVkVOVCk7CisgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihleGVjLCBtb3VzZXVwRXZlbnQpOwogICAgY2FzZSBPbldpbmRvd01vdXNlV2hl
ZWw6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6TU9VU0VX
SEVFTF9FVkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBtb3VzZXdoZWVsRXZl
bnQpOwogICAgY2FzZSBPbm1vdmU6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBET006
OkV2ZW50SW1wbDo6S0hUTUxfTU9WRV9FVkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihl
eGVjLCBraHRtbE1vdmVFdmVudCk7CiAgICBjYXNlIE9ucmVzZXQ6Ci0gICAgIHJldHVybiBnZXRM
aXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6UkVTRVRfRVZFTlQpOworICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZXhlYywgcmVzZXRFdmVudCk7CiAgICBjYXNlIE9ucmVzaXplOgotICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6UkVTSVpFX0VWRU5UKTsKKyAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMscmVzaXplRXZlbnQpOwogICAgY2FzZSBPbnNjcm9s
bDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OlNDUk9MTF9F
VkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLHNjcm9sbEV2ZW50KTsKICNpZiBB
UFBMRV9DSEFOR0VTCiAgICBjYXNlIE9uc2VhcmNoOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
ZXhlYyxET006OkV2ZW50SW1wbDo6U0VBUkNIX0VWRU5UKTsKKyAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGV4ZWMsc2VhcmNoRXZlbnQpOwogI2VuZGlmCiAgICBjYXNlIE9uc2VsZWN0OgotICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6U0VMRUNUX0VWRU5UKTsKKyAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsc2VsZWN0RXZlbnQpOwogICAgY2FzZSBPbnN1Ym1p
dDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OlNVQk1JVF9F
VkVOVCk7CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLHN1Ym1pdEV2ZW50KTsKICAgIGNh
c2UgT251bmxvYWQ6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBs
OjpVTkxPQURfRVZFTlQpOworICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxzY3JvbGxFdmVu
dCk7CiAgICB9CiAgICBhc3NlcnQoMCk7CiAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMTEw
LDEwOSArMTExNCwxMDkgQEAgdm9pZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IAogICAgIH0KICAgICBjYXNlIE9uYWJvcnQ6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMp
KQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQs
dmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBhYm9ydEV2ZW50LHZhbHVlKTsKICAg
ICAgIHJldHVybjsKICAgICBjYXNlIE9uYmx1cjoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhl
YykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZlbnRJbXBsOjpCTFVSX0VWRU5U
LHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmx1ckV2ZW50LHZhbHVlKTsKICAg
ICAgIHJldHVybjsKICAgICBjYXNlIE9uY2hhbmdlOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChl
eGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgRE9NOjpFdmVudEltcGw6OkNIQU5HRV9F
VkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGNoYW5nZUV2ZW50LHZhbHVl
KTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uY2xpY2s6CiAgICAgICBpZiAoaXNTYWZlU2Ny
aXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRN
TF9DTElDS19FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsa2h0bWxDbGlj
a0V2ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uZGJsY2xpY2s6CiAgICAg
ICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6
RXZlbnRJbXBsOjpLSFRNTF9EQkxDTElDS19FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsa2h0bWxEYmxjbGlja0V2ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBj
YXNlIE9uZHJhZ2Ryb3A6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRNTF9EUkFHRFJPUF9FVkVOVCx2YWx1
ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsa2h0bWxEcmFnZHJvcEV2ZW50LHZhbHVlKTsK
ICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uZXJyb3I6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0
KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRNTF9F
UlJPUl9FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsa2h0bWxFcnJvckV2
ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uZm9jdXM6CiAgICAgICBpZiAo
aXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJ
bXBsOjpGT0NVU19FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsZm9jdXNF
dmVudCx2YWx1ZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBPbmtleWRvd246CiAgICAgICBp
ZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZl
bnRJbXBsOjpLRVlET1dOX0VWRU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxr
ZXlkb3duRXZlbnQsdmFsdWUpOwogICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25rZXlwcmVzczoK
ICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMs
RE9NOjpFdmVudEltcGw6OktFWVBSRVNTX0VWRU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVu
ZXIoZXhlYyxrZXlwcmVzc0V2ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9u
a2V5dXA6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLERPTTo6RXZlbnRJbXBsOjpLRVlVUF9FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExp
c3RlbmVyKGV4ZWMsa2V5dXBFdmVudCx2YWx1ZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBP
bmxvYWQ6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLERPTTo6RXZlbnRJbXBsOjpMT0FEX0VWRU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlz
dGVuZXIoZXhlYyxsb2FkRXZlbnQsdmFsdWUpOwogICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25t
b3VzZWRvd246CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0
ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpNT1VTRURPV05fRVZFTlQsdmFsdWUpOworICAgICAg
ICBzZXRMaXN0ZW5lcihleGVjLG1vdXNlZG93bkV2ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsK
ICAgICBjYXNlIE9ubW91c2Vtb3ZlOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6TU9VU0VNT1ZFX0VWRU5ULHZh
bHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxtb3VzZW1vdmVFdmVudCx2YWx1ZSk7CiAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBPbm1vdXNlb3V0OgogICAgICAgaWYgKGlzU2FmZVNjcmlw
dChleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6TU9VU0VP
VVRfRVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLG1vdXNlb3V0RXZlbnQs
dmFsdWUpOwogICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25tb3VzZW92ZXI6CiAgICAgICBpZiAo
aXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJ
bXBsOjpNT1VTRU9WRVJfRVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLG1v
dXNlb3ZlckV2ZW50LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9ubW91c2V1cDoK
ICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMs
RE9NOjpFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLG1vdXNldXBFdmVudCx2YWx1ZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBPbldp
bmRvd01vdXNlV2hlZWw6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6TU9VU0VXSEVFTF9FVkVOVCx2YWx1ZSk7
CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIG1vdXNld2hlZWxFdmVudCx2YWx1ZSk7CiAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBPbm1vdmU6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMp
KQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRNTF9NT1ZFX0VW
RU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxraHRtbE1vdmVFdmVudCx2YWx1
ZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBPbnJlc2V0OgogICAgICAgaWYgKGlzU2FmZVNj
cmlwdChleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6UkVT
RVRfRVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLHJlc2V0RXZlbnQsdmFs
dWUpOwogICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25yZXNpemU6CiAgICAgICBpZiAoaXNTYWZl
U2NyaXB0KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpS
RVNJWkVfRVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLHJlc2l6ZUV2ZW50
LHZhbHVlKTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uc2Nyb2xsOgogICAgICAgaWYgKGlz
U2FmZVNjcmlwdChleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1w
bDo6U0NST0xMX0VWRU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxzY3JvbGxF
dmVudCx2YWx1ZSk7CiAgICAgICByZXR1cm47CiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIGNhc2Ug
T25zZWFyY2g6CiAgICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTRUFSQ0hfRVZFTlQsdmFsdWUpOworICAg
ICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxzZWFyY2hFdmVudCx2YWx1ZSk7CiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogICAgIGNhc2UgT25zZWxlY3Q6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0
KGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTRUxFQ1Rf
RVZFTlQsdmFsdWUpOworICAgICAgICBzZXRMaXN0ZW5lcihleGVjLHNlbGVjdEV2ZW50LHZhbHVl
KTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIE9uc3VibWl0OgogICAgICAgaWYgKGlzU2FmZVNj
cmlwdChleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6U1VC
TUlUX0VWRU5ULHZhbHVlKTsKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxzdWJtaXRFdmVudCx2
YWx1ZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBPbnVubG9hZDoKICAgICAgIGlmIChpc1Nh
ZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6
OlVOTE9BRF9FVkVOVCx2YWx1ZSk7CisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsc2Nyb2xsRXZl
bnQsdmFsdWUpOwogICAgICAgcmV0dXJuOwogICAgIGNhc2UgTmFtZToKICAgICAgIGlmIChpc1Nh
ZmVTY3JpcHQoZXhlYykpCkBAIC0xNDA5LDcgKzE0MTMsNyBAQCBib29sIFdpbmRvdzo6aXNTYWZl
U2NyaXB0KEV4ZWNTdGF0ZSAqZXhlCiAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXaW5kb3c6
OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQsIFZhbHVlSW1wICpmdW5j
KQordm9pZCBXaW5kb3c6OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgQXRvbWlj
U3RyaW5nICZldmVudFR5cGUsIFZhbHVlSW1wICpmdW5jKQogewogICBpZiAoIWlzU2FmZVNjcmlw
dChleGVjKSkKICAgICByZXR1cm47CkBAIC0xNDE3LDEwICsxNDIxLDEwIEBAIHZvaWQgV2luZG93
OjpzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMKICAgaWYgKCFkb2MpCiAgICAgcmV0dXJuOwog
Ci0gIGRvYy0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRJZCxnZXRKU0V2ZW50TGlz
dGVuZXIoZnVuYyx0cnVlKSk7CisgIGRvYy0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZl
bnRUeXBlLCBnZXRKU0V2ZW50TGlzdGVuZXIoZnVuYyx0cnVlKSk7CiB9CiAKLVZhbHVlSW1wICpX
aW5kb3c6OmdldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQpIGNvbnN0CitW
YWx1ZUltcCAqV2luZG93OjpnZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlKSBjb25zdAogewogICBpZiAoIWlzU2FmZVNjcmlwdChleGVjKSkK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xNDI4LDcgKzE0MzIsNyBAQCBWYWx1ZUltcCAq
V2luZG93OjpnZXRMaXN0ZW5lcihFeGVjU3RhdGUgCiAgIGlmICghZG9jKQogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIAotICBET006OkV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyID0gZG9jLT5nZXRI
VE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudElkKTsKKyAgRE9NOjpFdmVudExpc3RlbmVyICps
aXN0ZW5lciA9IGRvYy0+Z2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKICAg
aWYgKGxpc3RlbmVyICYmIHN0YXRpY19jYXN0PEpTRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKS0+
bGlzdGVuZXJPYmpJbXAoKSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNFdmVudExpc3RlbmVy
Kj4obGlzdGVuZXIpLT5saXN0ZW5lck9iaigpOwogICBlbHNlCkBAIC0xOTc0LDI4ICsxOTc4LDIw
IEBAIFZhbHVlSW1wICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGUKIAogICAgIC8vIERv
IG5vdGhpbmcgZm9yIG5vdy4gVGhlc2UgYXJlIE5TLXNwZWNpZmljIGxlZ2FjeSBjYWxscy4KICAg
ICBicmVhazsKLSAgY2FzZSBXaW5kb3c6OkFkZEV2ZW50TGlzdGVuZXI6IHsKKyAgY2FzZSBXaW5k
b3c6OkFkZEV2ZW50TGlzdGVuZXI6CiAgICAgICAgIGlmICghd2luZG93LT5pc1NhZmVTY3JpcHQo
ZXhlYykpCiAJICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgICAgSlNFdmVudExpc3RlbmVy
ICpsaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTRXZlbnRMaXN0
ZW5lcihhcmdzWzFdKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0JICAgIERvY3VtZW50SW1w
bCogZG9jaW1wbCA9IHBhcnQtPnhtbERvY0ltcGwoKTsKLSAgICAgICAgICAgIGlmIChkb2NpbXBs
KQotICAgICAgICAgICAgICAgIGRvY2ltcGwtPmFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoRE9NOjpF
dmVudEltcGw6OnR5cGVUb0lkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSxsaXN0
ZW5lcixhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwotICAgICAgICB9CisgICAgICAgIGlmIChK
U0V2ZW50TGlzdGVuZXIgKmxpc3RlbmVyID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+
Z2V0SlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pKQorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1w
bCAqZG9jID0gcGFydC0+eG1sRG9jSW1wbCgpKQorICAgICAgICAgICAgICAgIGRvYy0+YWRkV2lu
ZG93RXZlbnRMaXN0ZW5lcihBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpLCBsaXN0ZW5lciwgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgIH0KLSAgY2FzZSBXaW5kb3c6OlJlbW92ZUV2ZW50TGlzdGVu
ZXI6IHsKKyAgY2FzZSBXaW5kb3c6OlJlbW92ZUV2ZW50TGlzdGVuZXI6CiAgICAgICAgIGlmICgh
d2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAJICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgICAgSlNFdmVudExpc3RlbmVyICpsaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUo
ZXhlYyktPmdldEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKTsKLSAgICAgICAgaWYgKGxpc3RlbmVy
KSB7Ci0JICAgIERvY3VtZW50SW1wbCogZG9jaW1wbCA9IHBhcnQtPnhtbERvY0ltcGwoKTsKLSAg
ICAgICAgICAgIGlmIChkb2NpbXBsKQotICAgICAgICAgICAgICAgIGRvY2ltcGwtPnJlbW92ZVdp
bmRvd0V2ZW50TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OnR5cGVUb0lkKGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpKSxsaXN0ZW5lcixhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChKU0V2ZW50TGlzdGVuZXIgKmxpc3RlbmVyID0gV2luZG93
OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pKQorICAg
ICAgICAgICAgaWYgKERvY3VtZW50SW1wbCAqZG9jID0gcGFydC0+eG1sRG9jSW1wbCgpKQorICAg
ICAgICAgICAgICAgIGRvYy0+YWRkV2luZG93RXZlbnRMaXN0ZW5lcihBdG9taWNTdHJpbmcoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLCBsaXN0ZW5lciwgYXJnc1syXS0+dG9Cb29s
ZWFuKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgIH0KICAgY2FzZSBX
aW5kb3c6OlNob3dNb2RhbERpYWxvZzoKICAgICByZXR1cm4gc2hvd01vZGFsRGlhbG9nKGV4ZWMs
IHdpbmRvdywgYXJncyk7CiAgIH0KSW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIGtodG1sL2VjbWEv
a2pzX3dpbmRvdy5oCi0tLSBraHRtbC9lY21hL2tqc193aW5kb3cuaAkxOSBBdWcgMjAwNSAyMjoy
OTo1NCAtMDAwMAkxLjUxCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuaAkyMSBBdWcgMjAwNSAw
MTo1NjowOSAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAt
Ki0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKQEAgLTM1LDYg
KzM0LDcgQEAgY2xhc3MgS0hUTUxWaWV3OwogY2xhc3MgS0hUTUxQYXJ0OwogCiBuYW1lc3BhY2Ug
RE9NIHsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgTm9kZUltcGw7CiB9CiAK
QEAgLTE1Myw4ICsxNTMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgT25zZWxlY3Qs
IE9uc3VibWl0LCBPbnVubG9hZCwKICAgICAgICAgICAgU3RhdHVzYmFyLCBUb29sYmFyLCBGcmFt
ZUVsZW1lbnQsIFNob3dNb2RhbERpYWxvZyB9OwogICBwcm90ZWN0ZWQ6Ci0gICAgVmFsdWVJbXAg
KmdldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQpIGNvbnN0OwotICAgIHZv
aWQgc2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCwgVmFsdWVJbXAgKmZ1
bmMpOworICAgIFZhbHVlSW1wICpnZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IERP
TTo6QXRvbWljU3RyaW5nICZldmVudFR5cGUpIGNvbnN0OworICAgIHZvaWQgc2V0TGlzdGVuZXIo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBET006OkF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBWYWx1
ZUltcCAqZnVuYyk7CiAgIHByaXZhdGU6CiAgICAgc3RhdGljIFZhbHVlSW1wICpjaGlsZEZyYW1l
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CiAgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAtcCAtdSAtcjEuNzgga2h0bWwvaHRtbC9odG1sX2Jhc2Vp
bXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkzMCBKdWwgMjAwNSAwMjoz
MzoxNiAtMDAwMAkxLjc4CisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTIxIEF1ZyAy
MDA1IDAxOjU2OjEwIC0wMDAwCkBAIC0yNCw3ICsyNCw4IEBACiAgKi8KIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNlaW1wbC5oIgorI2luY2x1ZGUgImh0bWxf
YmFzZWltcGwuaCIKKwogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKIAogI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgpAQCAtMzksMTEgKzQwLDEzIEBACiAjaW5jbHVkZSAibWlzYy9s
b2FkZXIuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgInhtbC9kb20y
X2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogCiAjaW5jbHVkZSA8
a3VybC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwordXNp
bmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKQEAgLTE0OCwyMiArMTUxLDIyIEBAIHZvaWQgSFRN
TEJvZHlFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgaWYgKGF0dGFjaGVkKCkp
CiAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5yZWNhbGNTdHlsZShGb3JjZSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikgewotICAgICAgICBnZXREb2N1bWVu
dCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkxPQURfRVZFTlQsCSAg
ICAKKyAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIobG9h
ZEV2ZW50LAkgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVl
KCkuc3RyaW5nKCksIE5VTEwpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVu
bG9hZEF0dHIpIHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlz
dGVuZXIoRXZlbnRJbXBsOjpVTkxPQURfRVZFTlQsCisgICAgICAgIGdldERvY3VtZW50KCktPnNl
dEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1M
RXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBOVUxMKSk7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAgICAgICBnZXREb2N1bWVudCgp
LT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkJMVVJfRVZFTlQsCisgICAg
ICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGJsdXJFdmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwg
TlVMTCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0g
ICAgICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKEV2ZW50SW1w
bDo6Rk9DVVNfRVZFTlQsCisgICAgICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVu
dExpc3RlbmVyKGZvY3VzRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIE5VTEwpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnJlc2l6ZUF0dHIpIHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRv
d0V2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpSRVNJWkVfRVZFTlQsCisgICAgICAgIGdldERvY3Vt
ZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKHJlc2l6ZUV2ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5j
cmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBOVUxMKSk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zY3JvbGxBdHRyKSB7Ci0gICAgICAgIGdl
dERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6U0NST0xM
X0VWRU5ULAorICAgICAgICBnZXREb2N1bWVudCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5l
cihzY3JvbGxFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFs
dWUoKS5zdHJpbmcoKSwgTlVMTCkpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudElt
cGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAtNDE3LDEwICs0MjAsMTAgQEAgdm9p
ZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgICAgICAgICAgbV9zY3Jv
bGxpbmcgPSBRU2Nyb2xsVmlldzo6QWx3YXlzT2ZmOwogICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
YXJlIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMgaGFzIG5vIGVmZmVjdC4KICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3Rl
bmVyKEV2ZW50SW1wbDo6TE9BRF9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
bG9hZEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgp
LT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb251bmxvYWRBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6VU5MT0FEX0VWRU5ULAorICAgICAgICBz
ZXRIVE1MRXZlbnRMaXN0ZW5lcih1bmxvYWRFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFs
dWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudElt
cGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAtNjgzLDEwICs2ODYsMTAgQEAgdm9p
ZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogICAgICAgICBpZighbV9ib3Jk
ZXIpCiAgICAgICAgICAgICBmcmFtZWJvcmRlciA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
RXZlbnRJbXBsOjpMT0FEX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2Fk
RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0
ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpVTkxPQURfRVZFTlQsCisgICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmlu
ZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CkBAIC03MzUsNyArNzM4LDcgQEAgdm9pZCBIVE1MRnJhbWVT
ZXRFbGVtZW50SW1wbDo6ZGV0YWNoKCkKIHsKICAgICBpZihhdHRhY2hlZCgpKQogICAgICAgICAv
LyAjIyMgc2VuZCB0aGUgZXZlbnQgd2hlbiB3ZSBhY3R1YWxseSBnZXQgcmVtb3ZlZCBmcm9tIHRo
ZSBkb2MgaW5zdGVhZCBvZiBoZXJlCi0gICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KEV2ZW50SW1w
bDo6VU5MT0FEX0VWRU5ULGZhbHNlLGZhbHNlKTsKKyAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQo
dW5sb2FkRXZlbnQsZmFsc2UsZmFsc2UpOwogCiAgICAgSFRNTEVsZW1lbnRJbXBsOjpkZXRhY2go
KTsKIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45NgpkaWZmIC1wIC11IC1yMS45NiBraHRtbC9odG1s
L2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3Bw
CTE5IEF1ZyAyMDA1IDIzOjU4OjI2IC0wMDAwCTEuOTYKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MTEgLTAwMDAKQEAgLTQ5LDExICs0OSwxMyBA
QAogI2luY2x1ZGUgImNzcy9jc3NfcnVsZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRp
bXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgInhtbC9F
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiZWRpdGluZy9tYXJrdXAuaCIKIAogI2luY2x1ZGUgPGtk
ZWJ1Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZl
bnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKQEAgLTE1NCw4OCArMTU2LDg4IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0dHJpYnUKICAgICB9CiAvLyBzdGFuZGFyZCBldmVudHMKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25jbGlja0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
RXZlbnRJbXBsOjpLSFRNTF9DTElDS19FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIoa2h0bWxDbGlja0V2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1
bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0
aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jb250ZXh0bWVudUF0dHIp
IHsKLSAgICAJc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpDT05URVhUTUVOVV9FVkVO
VCwKKyAgICAJc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29udGV4dG1lbnVFdmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVu
ZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9uZGJsY2xpY2tBdHRyKSB7Ci0Jc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJ
bXBsOjpLSFRNTF9EQkxDTElDS19FVkVOVCwKKwlzZXRIVE1MRXZlbnRMaXN0ZW5lcihraHRtbERi
bGNsaWNrRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNlZG93bkF0dHIpIHsKLSAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpNT1VTRURPV05fRVZFTlQsCisgICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNlZG93bkV2ZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRy
LT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25tb3VzZW1vdmVBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50
SW1wbDo6TU9VU0VNT1ZFX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihtb3Vz
ZW1vdmVFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+
Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdXRBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6TU9VU0VPVVRfRVZFTlQsCisgICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNlb3V0RXZlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZh
bHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bm1vdXNlb3ZlckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBs
OjpNT1VTRU9WRVJfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNlb3Zl
ckV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVh
dGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZXVwQXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQsCisgICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKG1vdXNldXBFdmVudCwKIAkgICAgICAgICAgICAgICAgICAgICBnZXRE
b2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygp
LCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZXdoZWVsQXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6Ok1PVVNFV0hFRUxf
RVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNld2hlZWxFdmVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRM
aXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIoRXZlbnRJbXBsOjpET01GT0NVU0lOX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihET01Gb2N1c0luRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERv
Y3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCks
IHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleWRvd25BdHRyKSB7
Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6S0VZRE9XTl9FVkVOVCwK
KyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoa2V5ZG93bkV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihh
dHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25rZXlwcmVzc0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZl
bnRJbXBsOjpLRVlQUkVTU19FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoa2V5
cHJlc3NFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+
Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5dXBBdHRyKSB7Ci0gICAgICAgIHNl
dEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6S0VZVVBfRVZFTlQsCisgICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKGtleXVwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3Ry
aW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNjcm9sbEF0
dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpTQ1JPTExfRVZF
TlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHNjcm9sbEV2ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5l
cihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25iZWZvcmVjdXRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KEV2ZW50SW1wbDo6QkVGT1JFQ1VUX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5l
cihiZWZvcmVjdXRFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1l
bnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhp
cykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY3V0QXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkNVVF9FVkVOVCwKKyAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIoY3V0RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3Ry
aW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZWNv
cHlBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6QkVGT1JF
Q09QWV9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmVmb3JlY29weUV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1M
RXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25jb3B5QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRM
aXN0ZW5lcihFdmVudEltcGw6OkNPUFlfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3Rl
bmVyKGNvcHlFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQo
KS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JlcGFzdGVBdHRyKSB7Ci0g
ICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6QkVGT1JFUEFTVEVfRVZFTlQs
CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9yZXBhc3RlRXZlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbnBhc3RlQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihF
dmVudEltcGw6OlBBU1RFX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihwYXN0
ZUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVh
dGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnZW50ZXJBdHRyKSB7Ci0gICAgICAgIHNl
dEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6RFJBR0VOVEVSX0VWRU5ULAorICAgICAgICBz
ZXRIVE1MRXZlbnRMaXN0ZW5lcihkcmFnZW50ZXJFdmVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFs
dWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
ZHJhZ292ZXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6
RFJBR09WRVJfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdvdmVyRXZl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhU
TUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdsZWF2ZUF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpEUkFHTEVBVkVfRVZFTlQsCisgICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKGRyYWdsZWF2ZUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgp
LnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcm9w
QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkRST1BfRVZF
TlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyb3BFdmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIo
YXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uZHJhZ3N0YXJ0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihF
dmVudEltcGw6OkRSQUdTVEFSVF9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
ZHJhZ3N0YXJ0RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50
KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMp
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6RFJBR19FVkVOVCwKKyAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ0V2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0
cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnZW5k
QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkRSQUdFTkRf
RVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdlbmRFdmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlz
dGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uc2VsZWN0c3RhcnRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExp
c3RlbmVyKEV2ZW50SW1wbDo6U0VMRUNUU1RBUlRfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKHNlbGVjdHN0YXJ0RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3Ry
aW5nKCksIHRoaXMpKTsKICAgICB9IAogfQpAQCAtNTY1LDExICs1NjcsMTEgQEAgdm9pZCBIVE1M
RWxlbWVudEltcGw6OmNsaWNrKGJvb2wgc2VuZE1vdQogICAgIC8vIHNlbmQgbW91c2Vkb3duIGFu
ZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAogICAgIGlmIChzZW5kTW91
c2VFdmVudHMpIHsKICAgICAgICAgUU1vdXNlRXZlbnQgcHJlc3NFdnQoUUV2ZW50OjpNb3VzZUJ1
dHRvblByZXNzLCBRUG9pbnQoeCx5KSwgUXQ6OkxlZnRCdXR0b24sIDApOwotICAgICAgICBkaXNw
YXRjaE1vdXNlRXZlbnQoJnByZXNzRXZ0LCBFdmVudEltcGw6Ok1PVVNFRE9XTl9FVkVOVCk7Cisg
ICAgICAgIGRpc3BhdGNoTW91c2VFdmVudCgmcHJlc3NFdnQsIG1vdXNlZG93bkV2ZW50KTsKICAg
ICAgICAgaWYgKHIpCiAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwgc2hvd1ByZXNzZWRMb29r
KTsKICAgICAgICAgUU1vdXNlRXZlbnQgdXBFdmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFz
ZSwgUVBvaW50KHgseSksIFF0OjpMZWZ0QnV0dG9uLCAwKTsKLSAgICAgICAgZGlzcGF0Y2hNb3Vz
ZUV2ZW50KCZ1cEV2ZW50LCBFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQpOworICAgICAgICBkaXNw
YXRjaE1vdXNlRXZlbnQoJnVwRXZlbnQsIG1vdXNldXBFdmVudCk7CiAgICAgICAgIGlmIChyKQog
ICAgICAgICAgICAgc2V0QWN0aXZlKGZhbHNlKTsKICAgICB9IGVsc2UgaWYgKHIpIHsKQEAgLTU3
OSw3ICs1ODEsNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6Y2xpY2soYm9vbCBzZW5kTW91CiAK
ICAgICAvLyBhbHdheXMgc2VuZCBjbGljawogICAgIFFNb3VzZUV2ZW50IGNsaWNrRXZlbnQoUUV2
ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UsIFFQb2ludCh4LHkpLCBRdDo6TGVmdEJ1dHRvbiwgMCk7
Ci0gICAgZGlzcGF0Y2hNb3VzZUV2ZW50KCZjbGlja0V2ZW50LCBFdmVudEltcGw6OktIVE1MX0NM
SUNLX0VWRU5UKTsKKyAgICBkaXNwYXRjaE1vdXNlRXZlbnQoJmNsaWNrRXZlbnQsIGtodG1sQ2xp
Y2tFdmVudCk7CiB9CiAKIC8vIGFjY2Vzc0tleUFjdGlvbiBpcyB1c2VkIGJ5IHRoZSBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgY29kZQpAQCAtODA5LDcgKzgxMSw4IEBAIGJvb2wgSFRNTEVsZW1lbnRJ
bXBsOjppc1JlY29nbml6ZWRUYWdOYW0KIAogLy8gVGhlIHRlcm1zIGlubGluZSBhbmQgYmxvY2sg
YXJlIHVzZWQgaGVyZSBsb29zZWx5LiAgRG9uJ3QgbWFrZSB0aGUgbWlzdGFrZSBvZiBhc3N1bWlu
ZyBhbGwgaW5saW5lcyBvciBhbGwgYmxvY2tzCiAvLyBuZWVkIHRvIGJlIGluIHRoZXNlIHR3byBs
aXN0cy4KLUhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwq
PiA+KiBpbmxpbmVUYWdMaXN0KCkgeworSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhh
c2g8RE9NU3RyaW5nSW1wbCo+ID4qIGlubGluZVRhZ0xpc3QoKQorewogICAgIHN0YXRpYyBIYXNo
U2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiB0YWdMaXN0
OwogICAgIGlmICh0YWdMaXN0LmlzRW1wdHkoKSkgewogICAgICAgICB0YWdMaXN0Lmluc2VydCh0
dFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKQEAgLTg2MSw3ICs4NjQsOCBAQCBI
YXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TCiAgICAgcmV0dXJuICZ0YWdM
aXN0OwogfQogCi1IYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJ
bXBsKj4gPiogYmxvY2tUYWdMaXN0KCkgeworSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRl
ckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4qIGJsb2NrVGFnTGlzdCgpCit7CiAgICAgc3RhdGljIEhh
c2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xp
c3Q7CiAgICAgaWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CkluZGV4OiBraHRtbC9odG1sL2h0
bWxfZm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg1CmRp
ZmYgLXAgLXUgLXIxLjE4NSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9o
dG1sL2h0bWxfZm9ybWltcGwuY3BwCTE0IEF1ZyAyMDA1IDA4OjA3OjIyIC0wMDAwCTEuMTg1Cisr
KyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTIxIEF1ZyAyMDA1IDAxOjU2OjE0IC0wMDAw
CkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUg
InhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCisj
aW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9leHQuaCIKIAogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfZm9ybS5oIgpAQCAtNjMsNiArNjQsNyBAQAogCiAjaW5j
bHVkZSA8YXNzZXJ0Lmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCkBAIC01MDYs
NyArNTA4LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpwcmVwYXJlU3VibWl0KAogICAg
IG1faW5zdWJtaXQgPSB0cnVlOwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAotICAgIGlm
ICggZGlzcGF0Y2hIVE1MRXZlbnQoRXZlbnRJbXBsOjpTVUJNSVRfRVZFTlQsZmFsc2UsdHJ1ZSkg
JiYgIW1fZG9pbmdzdWJtaXQgKQorICAgIGlmICggZGlzcGF0Y2hIVE1MRXZlbnQoc3VibWl0RXZl
bnQsZmFsc2UsdHJ1ZSkgJiYgIW1fZG9pbmdzdWJtaXQgKQogICAgICAgICBtX2RvaW5nc3VibWl0
ID0gdHJ1ZTsKIAogICAgIG1faW5zdWJtaXQgPSBmYWxzZTsKQEAgLTYxNSw3ICs2MTcsNyBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnJlc2V0KCAgKQogCiAgICAgLy8gIyMjIERPTTIgbGFi
ZWxzIHRoaXMgZXZlbnQgYXMgbm90IGNhbmNlbGFibGUsIGhvd2V2ZXIKICAgICAvLyBjb21tb24g
YnJvd3NlcnMoIHNpY2shICkgYWxsb3cgaXQgYmUgY2FuY2VsbGVkLgotICAgIGlmICggIWRpc3Bh
dGNoSFRNTEV2ZW50KEV2ZW50SW1wbDo6UkVTRVRfRVZFTlQsdHJ1ZSwgdHJ1ZSkgKSB7CisgICAg
aWYgKCAhZGlzcGF0Y2hIVE1MRXZlbnQocmVzZXRFdmVudCx0cnVlLCB0cnVlKSApIHsKICAgICAg
ICAgbV9pbnJlc2V0ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NjIsMTAg
KzY2NCwxMCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewogICAgICAgICBt
X2F1dG9jb21wbGV0ZSA9IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiICk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6U1VCTUlUX0VWRU5ULAorICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihzdWJtaXRFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJp
bmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ucmVzZXRBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6UkVTRVRfRVZFTlQs
CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHJlc2V0RXZlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBuYW1lQXR0cikgewogICAgICAgICBET01TdHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52
YWx1ZSgpOwpAQCAtMTAwMiwxMyArMTAwNCwxMyBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsOjpzZXRPdmVyCiB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpvblNlbGVj
dCgpCiB7CiAgICAgLy8gIyMjIG1ha2UgdGhpcyB3b3JrIHdpdGggbmV3IGZvcm0gZXZlbnRzIGFy
Y2hpdGVjdHVyZQotICAgIGRpc3BhdGNoSFRNTEV2ZW50KEV2ZW50SW1wbDo6U0VMRUNUX0VWRU5U
LHRydWUsZmFsc2UpOworICAgIGRpc3BhdGNoSFRNTEV2ZW50KHNlbGVjdEV2ZW50LHRydWUsZmFs
c2UpOwogfQogCiB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpvbkNoYW5nZSgpCiB7
CiAgICAgLy8gIyMjIG1ha2UgdGhpcyB3b3JrIHdpdGggbmV3IGZvcm0gZXZlbnRzIGFyY2hpdGVj
dHVyZQotICAgIGRpc3BhdGNoSFRNTEV2ZW50KEV2ZW50SW1wbDo6Q0hBTkdFX0VWRU5ULHRydWUs
ZmFsc2UpOworICAgIGRpc3BhdGNoSFRNTEV2ZW50KGNoYW5nZUV2ZW50LHRydWUsZmFsc2UpOwog
fQogCiBib29sIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpkaXNhYmxlZCgpIGNvbnN0CkBA
IC0xMDgxLDcgKzEwODMsNyBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpkZWZh
dWx0CiAgICAgewogICAgICAgICAvLyBSZXBvcnQgZm9jdXMgaW4vb3V0IGNoYW5nZXMgdG8gdGhl
IGJyb3dzZXIgZXh0ZW5zaW9uIChlZGl0YWJsZSB3aWRnZXRzIG9ubHkpCiAgICAgICAgIEtIVE1M
UGFydCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKLSAgICAgICAgaWYgKGV2dC0+aWQo
KT09RXZlbnRJbXBsOjpET01GT0NVU0lOX0VWRU5UICYmIGlzRWRpdGFibGUoKSAmJiBwYXJ0ICYm
IG1fcmVuZGVyICYmIG1fcmVuZGVyLT5pc1dpZGdldCgpKSB7CisgICAgICAgIGlmIChldnQtPnR5
cGUoKT09RE9NRm9jdXNJbkV2ZW50ICYmIGlzRWRpdGFibGUoKSAmJiBwYXJ0ICYmIG1fcmVuZGVy
ICYmIG1fcmVuZGVyLT5pc1dpZGdldCgpKSB7CiAgICAgICAgICAgICBLSFRNTFBhcnRCcm93c2Vy
RXh0ZW5zaW9uICpleHQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uICo+
KHBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKSk7CiAgICAgICAgICAgICBRV2lkZ2V0ICp3aWRnZXQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihtX3JlbmRlciktPndpZGdldCgpOwogICAgICAg
ICAgICAgaWYgKGV4dCkKQEAgLTEwOTIsOCArMTA5NCw4IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGw6OmRlZmF1bHQKIAkvLyBXZSBkb24ndCB3YW50IHRoaXMgZGVmYXVsdCBrZXkg
ZXZlbnQgaGFuZGxpbmcsIHdlJ2xsIGNvdW50IG9uCiAJLy8gQ29jb2EgZXZlbnQgZGlzcGF0Y2gg
aWYgdGhlIGV2ZW50IGRvZXNuJ3QgZ2V0IGJsb2NrZWQuCiAjZWxzZQotCWlmIChldnQtPmlkKCk9
PUV2ZW50SW1wbDo6S0VZRE9XTl9FVkVOVCB8fAotCSAgICBldnQtPmlkKCk9PUV2ZW50SW1wbDo6
S0VZVVBfRVZFTlQpCisJaWYgKGV2dC0+dHlwZSgpPT1rZXlkb3duRXZlbnQgfHwKKwkgICAgZXZ0
LT50eXBlKCk9PWtleXVwRXZlbnQpCiAJewogCSAgICBLZXlib2FyZEV2ZW50SW1wbCAqIGsgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCAqPihldnQpOwogCSAgICBpZiAoay0+a2V5VmFs
KCkgPT0gUUNoYXIoJ1xuJykudW5pY29kZSgpICYmIG1fcmVuZGVyICYmIG1fcmVuZGVyLT5pc1dp
ZGdldCgpICYmIGstPnFLZXlFdmVudCkKQEAgLTExMDEsNyArMTEwMyw3IEBAIHZvaWQgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGw6OmRlZmF1bHQKIAl9CiAjZW5kaWYKIAotCWlmIChldnQtPmlk
KCk9PUV2ZW50SW1wbDo6RE9NRk9DVVNPVVRfRVZFTlQgJiYgaXNFZGl0YWJsZSgpICYmIHBhcnQg
JiYgbV9yZW5kZXIgJiYgbV9yZW5kZXItPmlzV2lkZ2V0KCkpIHsKKwlpZiAoZXZ0LT50eXBlKCk9
PURPTUZvY3VzT3V0RXZlbnQgJiYgaXNFZGl0YWJsZSgpICYmIHBhcnQgJiYgbV9yZW5kZXIgJiYg
bV9yZW5kZXItPmlzV2lkZ2V0KCkpIHsKIAkgICAgS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiAq
ZXh0ID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiAqPihwYXJ0LT5icm93
c2VyRXh0ZW5zaW9uKCkpOwogCSAgICBRV2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJXaWRnZXQqPihtX3JlbmRlciktPndpZGdldCgpOwogCSAgICBpZiAoZXh0KQpAQCAtMTIzNCwx
MCArMTIzNiwxMCBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBCiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAv
LyBEbyBub3RoaW5nLgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6Rk9DVVNfRVZFTlQs
CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1w
bDo6QkxVUl9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZl
bnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKQEAgLTEyNDUsNyArMTI0Nyw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEEKIAogdm9pZCBIVE1MQnV0dG9uRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnRJbXBsICpldnQpCiB7Ci0gICAgaWYgKG1fdHlwZSAhPSBCVVRUT04gJiYgKGV2
dC0+aWQoKSA9PSBFdmVudEltcGw6OkRPTUFDVElWQVRFX0VWRU5UKSkgeworICAgIGlmIChtX3R5
cGUgIT0gQlVUVE9OICYmIChldnQtPnR5cGUoKSA9PSBET01BY3RpdmF0ZUV2ZW50KSkgewogCiAg
ICAgICAgIGlmKG1fZm9ybSAmJiBtX3R5cGUgPT0gU1VCTUlUKSB7CiAgICAgICAgICAgICBtX2Fj
dGl2ZVN1Ym1pdCA9IHRydWU7CkBAIC0xODI4LDI1ICsxODMwLDI1IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBoZWlnaHRBdHRyKSB7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlH
SFQsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9j
dXNBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6Rk9DVVNf
RVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2
ZW50SW1wbDo6QkxVUl9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVI
VE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKEV2ZW50SW1wbDo6U0VMRUNUX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZl
bnRMaXN0ZW5lcihzZWxlY3RFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmco
KSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikg
ewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkNIQU5HRV9FVkVOVCwK
KyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmlucHV0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudElt
cGw6OklOUFVUX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihpbnB1dEV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1M
RXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfQogICAg
IC8vIFNlYXJjaCBmaWVsZCBhbmQgc2xpZGVyIGF0dHJpYnV0ZXMgYWxsIGp1c3QgY2F1c2UgdXBk
YXRlRnJvbUVsZW1lbnQgdG8gYmUgY2FsbGVkIHRocm91Z2ggc3R5bGUKICAgICAvLyByZWNhbGNp
bmcuCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VhcmNoQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OlNFQVJDSF9FVkVOVCwKKyAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIoc2VhcmNoRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVl
KCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXN1
bHRzQXR0cikgewogICAgICAgICBtX21heFJlc3VsdHMgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRy
LT52YWx1ZSgpLnRvSW50KCkgOiAtMTsKQEAgLTIyMzQsNyArMjIzNiw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudEltcGw6OnNldFZhbHVlRnJvbVIKICAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
ID0gdHJ1ZTsKICAgICAKICAgICAvLyBGaXJlIHRoZSAiaW5wdXQiIERPTSBldmVudC4KLSAgICBk
aXNwYXRjaEhUTUxFdmVudChFdmVudEltcGw6OklOUFVUX0VWRU5ULCB0cnVlLCBmYWxzZSk7Cisg
ICAgZGlzcGF0Y2hIVE1MRXZlbnQoaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiBib29s
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
IGNvbnN0CkBAIC0yMjc2LDcgKzIyNzgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpm
b2N1cygpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnByZURpc3BhdGNoRXZlbnRIYW5k
bGVyKEV2ZW50SW1wbCAqZXZ0KQogewotICAgIGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmIGV2
dC0+aWQoKSA9PSBFdmVudEltcGw6OkNMSUNLX0VWRU5UICYmIHN0YXRpY19jYXN0PE1vdXNlRXZl
bnRJbXBsKj4oZXZ0KS0+YnV0dG9uKCkgPT0gMCkgeworICAgIGlmIChldnQtPmlzTW91c2VFdmVu
dCgpICYmIGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dEltcGwqPihldnQpLT5idXR0b24oKSA9PSAwKSB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gQ0hF
Q0tCT1ggfHwgbV90eXBlID09IFJBRElPKQogICAgICAgICAgICAgc2V0Q2hlY2tlZCghY2hlY2tl
ZCgpKTsKICAgICB9CkBAIC0yMjg1LDcgKzIyODcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpwcmVEaXNwYXRjaEV2CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KQogewogICAgIGlmIChldnQtPmlzTW91c2VFdmVudCgp
ICYmCi0gICAgICAgICggZXZ0LT5pZCgpID09IEV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQg
fHwgZXZ0LT5pZCgpID09IEV2ZW50SW1wbDo6S0hUTUxfREJMQ0xJQ0tfRVZFTlQgKSAmJgorICAg
ICAgICAoIGV2dC0+dHlwZSgpID09IGtodG1sQ2xpY2tFdmVudCB8fCBldnQtPnR5cGUoKSA9PSBr
aHRtbERibGNsaWNrRXZlbnQgKSAmJgogICAgICAgICBtX3R5cGUgPT0gSU1BR0UKICAgICAgICAg
JiYgbV9yZW5kZXIpIHsKICAgICAgICAgLy8gcmVjb3JkIHRoZSBtb3VzZSBwb3NpdGlvbiBmb3Ig
d2hlbiB3ZSBnZXQgdGhlIERPTUFjdGl2YXRlIGV2ZW50CkBAIC0yMzAyLDcgKzIzMDQsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRICiAgICAgLy8gYWN0dWFsbHkg
c3VibWl0dGluZyB0aGUgZm9ybS4gRm9yIHJlc2V0IGlucHV0cywgdGhlIGZvcm0gaXMgcmVzZXQu
IFRoZXNlIGV2ZW50cyBhcmUgc2VudCB3aGVuIHRoZSB1c2VyIGNsaWNrcwogICAgIC8vIG9uIHRo
ZSBlbGVtZW50LCBvciBwcmVzc2VzIGVudGVyIHdoaWxlIGl0IGlzIHRoZSBhY3RpdmUgZWxlbWVu
dC4gSmF2YWNzcmlwdCBjb2RlIHdpc2hpbmcgdG8gYWN0aXZhdGUgdGhlIGVsZW1lbnQKICAgICAv
LyBtdXN0IGRpc3BhdGNoIGEgRE9NQWN0aXZhdGUgZXZlbnQgLSBhIGNsaWNrIGV2ZW50IHdpbGwg
bm90IGRvIHRoZSBqb2IuCi0gICAgaWYgKGV2dC0+aWQoKSA9PSBFdmVudEltcGw6OkRPTUFDVElW
QVRFX0VWRU5UKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IERPTUFjdGl2YXRlRXZlbnQpIHsK
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBJTUFHRSB8fCBtX3R5cGUgPT0gU1VCTUlUIHx8IG1fdHlw
ZSA9PSBSRVNFVCkgewogICAgICAgICAgICAgaWYgKCFtX2Zvcm0pCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjMyMiw3ICsyMzI0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
ZGVmYXVsdEV2ZW50SAogI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2
ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24g
a2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50
LgotICAgIGlmIChldnQtPmlkKCkgPT0gRXZlbnRJbXBsOjpLRVlQUkVTU19FVkVOVCAmJiBldnQt
PmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgewogICAgICAgICBib29sIGNsaWNrRWxlbWVu
dCA9IGZhbHNlOwogICAgICAgICBib29sIGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSBmYWxzZTsK
IApAQCAtMjU0OSwxMCArMjU1MSwxMCBAQCBib29sIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjppc0Zv
Y3VzYWJsZSgpCiB2b2lkIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpG
T0NVU19FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZm9jdXNFdmVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIoRXZlbnRJbXBsOjpCTFVSX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihi
bHVyRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNy
ZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKQEAgLTI5NzAsMTMgKzI5NzIsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2Vzc2tleUF0
dHIpIHsKICAgICAgICAgLy8gRklYTUU6IGlnbm9yZSBmb3IgdGhlIG1vbWVudAogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKEV2ZW50SW1wbDo6Rk9DVVNfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExp
c3RlbmVyKGZvY3VzRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3Vt
ZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRo
aXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6QkxVUl9FVkVOVCwKKyAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgp
LnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFu
Z2VBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6Q0hBTkdF
X0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlz
dGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0gZWxzZQogICAgICAg
ICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CkBAIC0zMTU1LDcgKzMxNTcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6ZGVmYXVs
dEV2ZW50CiB7CiAgICAgLy8gVXNlIGtleSBwcmVzcyBldmVudCBoZXJlIHNpbmNlIHNlbmRpbmcg
c2ltdWxhdGVkIG1vdXNlIGV2ZW50cwogICAgIC8vIG9uIGtleSBkb3duIGJsb2NrcyB0aGUgcHJv
cGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBldmVudC4KLSAgICBpZiAoZXZ0LT5pZCgpID09
IEV2ZW50SW1wbDo6S0VZUFJFU1NfRVZFTlQpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5
cHJlc3NFdmVudCkgewogICAgIAogICAgICAgICBpZiAoIW1fZm9ybSB8fCAhbV9yZW5kZXIgfHwg
IWV2dC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNTc3LDE2
ICszNTc5LDE2IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnBhcnNlTWFwcGUKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7CiAgICAgICAgIC8v
IGlnbm9yZSBmb3IgdGhlIG1vbWVudAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Zm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6Rk9D
VVNfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExp
c3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KEV2ZW50SW1wbDo6QkxVUl9FVkVOVCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1
ckV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVh
dGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6U0VMRUNUX0VWRU5ULAorICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihzZWxlY3RFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJp
bmcoKSwgdGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkNIQU5HRV9FVkVO
VCwKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVy
KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDgKZGlmZiAtcCAtdSAtcjEuNDgga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTMwIEp1bCAyMDA1IDAyOjMz
OjE3IC0wMDAwCTEuNDgKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTIxIEF1ZyAy
MDA1IDAxOjU2OjE0IC0wMDAwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc3Zh
bHVlcy5oIgogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9l
dmVudHNpbXBsLmgiCisjaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKIAogI2luY2x1ZGUgPHFz
dHJpbmcuaD4KICNpbmNsdWRlIDxxcG9pbnQuaD4KQEAgLTQ4LDYgKzQ5LDcgQEAKICNpbmNsdWRl
IDxxcG9pbnRhcnJheS5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwordXNpbmcgbmFtZXNwYWNl
IERPTTo6RXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1l
c3BhY2Uga2h0bWw7CiAKQEAgLTExMSw5ICsxMTMsOSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6
ZGlzcGF0Y2hMb2FkRXZlbnQoCiAgICAgaWYgKCFtX2ZpcmVkTG9hZCkgewogICAgICAgICBtX2Zp
cmVkTG9hZCA9IHRydWU7CiAgICAgICAgIGlmIChtX2ltYWdlLT5pc0Vycm9ySW1hZ2UoKSkKLSAg
ICAgICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoRXZlbnRJbXBsOjpFUlJPUl9F
VkVOVCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1M
RXZlbnQoZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChFdmVudEltcGw6OkxPQURfRVZFTlQsIGZh
bHNlLCBmYWxzZSk7CisgICAgICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2ZW50KGxv
YWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTIxNiwxMyArMjE4LDEzIEBA
IHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBpc21hcEF0dHIpIHsKICAgICAgICAgaXNtYXAgPSB0cnVlOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYWJvcnRBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsCisgICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGFib3J0RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5n
KCksIHRoaXMpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVycm9yQXR0cikg
ewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OkVSUk9SX0VWRU5ULAor
ICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihlcnJvckV2ZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRy
LT52YWx1ZSgpLnN0cmluZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6
OkxPQURfRVZFTlQsCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwogICAgIH0KICNpZiBBUFBM
RV9DSEFOR0VTCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CTMwIEp1bCAyMDA1IDAyOjMzOjE3IC0wMDAwCTEuNDYKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAkyMSBBdWcgMjAwNSAwMTo1NjoxNSAtMDAwMApAQCAtMzQsMTEgKzM0LDEzIEBA
CiAjaW5jbHVkZSAiY3NzL2Nzc3ZhbHVlcy5oIgogI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgInhtbC9F
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9ici5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCit1c2lu
ZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIApAQCAtMTE1LDE0ICsxMTcsMTQgQEAgdm9pZCBIVE1M
QW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAgIC8vIFJlYWN0IG9uIGNsaWNrcyBh
bmQgb24ga2V5cHJlc3Nlcy4KICAgICAvLyBEb24ndCBtYWtlIHRoaXMgS0VZVVBfRVZFTlQgYWdh
aW4sIGl0IG1ha2VzIGtodG1sIGZvbGxvdyBsaW5rcyBpdCBzaG91bGRuJ3QsCiAgICAgLy8gd2hl
biBwcmVzc2luZyBFbnRlciBpbiB0aGUgY29tYm8uCi0gICAgaWYgKCAoIGV2dC0+aWQoKSA9PSBF
dmVudEltcGw6OktIVE1MX0NMSUNLX0VWRU5UIHx8Ci0gICAgICAgICAoIGV2dC0+aWQoKSA9PSBF
dmVudEltcGw6OktFWURPV05fRVZFTlQgJiYgbV9mb2N1c2VkKSkgJiYgbV9pc0xpbmspIHsKKyAg
ICBpZiAoICggZXZ0LT50eXBlKCkgPT0ga2h0bWxDbGlja0V2ZW50IHx8CisgICAgICAgICAoIGV2
dC0+dHlwZSgpID09IGtleWRvd25FdmVudCAmJiBtX2ZvY3VzZWQpKSAmJiBtX2lzTGluaykgewog
ICAgICAgICBNb3VzZUV2ZW50SW1wbCAqZSA9IDA7Ci0gICAgICAgIGlmICggZXZ0LT5pZCgpID09
IEV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQgKQorICAgICAgICBpZiAoIGV2dC0+dHlwZSgp
ID09IGtodG1sQ2xpY2tFdmVudCApCiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8TW91c2VF
dmVudEltcGwqPiggZXZ0ICk7CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudEltcGwgKmsgPSAwOwot
ICAgICAgICBpZiAoZXZ0LT5pZCgpID09IEV2ZW50SW1wbDo6S0VZRE9XTl9FVkVOVCkKKyAgICAg
ICAgaWYgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCkKICAgICAgICAgICAgIGsgPSBzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCAqPiggZXZ0ICk7CiAKICAgICAgICAgUVN0cmluZyB1
dGFyZ2V0OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC1wIC11IC1yMS43NCBraHRtbC9odG1s
L2h0bWxfb2JqZWN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkz
MCBKdWwgMjAwNSAwMjozMzoxOCAtMDAwMAkxLjc0CisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0
aW1wbC5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MTUgLTAwMDAKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9y
ZW5kZXJfaW1hZ2UuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVk
ZSAieG1sL0V2ZW50TmFtZXMuaCIKIAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZl
IEphdmEgaW4gUXQgRW1iZWRkZWQKICNpbmNsdWRlICJqYXZhL2tqYXZhYXBwbGV0d2lkZ2V0Lmgi
CkBAIC01MSw2ICs1Miw3IEBACiAjaW5jbHVkZSAiS1dRS0hUTUxQYXJ0LmgiCiAjZW5kaWYKIAor
dXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKQEAgLTY2NywxMCArNjY5LDEwIEBAIHZvaWQg
SFRNTE9iamVjdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEEKICAgICAgICAgaWYgKG1fcmVuZGVy
KQogICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
RXZlbnRJbXBsOjpMT0FEX0VWRU5ULAorICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2Fk
RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0
ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIHRoaXMpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpVTkxPQURfRVZFTlQsCisgICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnN0cmlu
ZygpLCB0aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsK
IAkgICAgRE9NU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKQEAgLTc1MCw3ICs3
NTIsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgICAg
ICAgICAvLyB0aGlzIG1ldGhvZCBvciByZWNhbGNTdHlsZSAod2hpY2ggYWxzbyBjYWxscyB1cGRh
dGVXaWRnZXQpIHRvIGJlIGNhbGxlZC4KICAgICAgICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRl
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyUGFydE9iamVjdCo+
KG1fcmVuZGVyKS0+dXBkYXRlV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hIVE1M
RXZlbnQoRXZlbnRJbXBsOjpMT0FEX0VWRU5ULGZhbHNlLGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBkaXNwYXRjaEhUTUxFdmVudChsb2FkRXZlbnQsZmFsc2UsZmFsc2UpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CkBAIC03NjQsNyArNzY2LDcgQEAgdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudEltcGw6OmRldGFjaCgpCiAgICAgLy8gT25seSBib3RoZXIgd2l0aCBhbiB1bmxv
YWQgZXZlbnQgaWYgd2UgaGFkIGEgcmVuZGVyIG9iamVjdC4gIC0gZHdoCiAgICAgaWYgKGF0dGFj
aGVkKCkgJiYgbV9yZW5kZXIgJiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KQogICAgICAgICAvLyAj
IyMgZG8gdGhpcyB3aGVuIHdlIGFyZSBhY3R1YWx5IHJlbW92ZWQgZnJvbSBkb2N1bWVudCBpbnN0
ZWFkCi0gICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KEV2ZW50SW1wbDo6VU5MT0FEX0VWRU5ULGZh
bHNlLGZhbHNlKTsKKyAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQodW5sb2FkRXZlbnQsZmFsc2Us
ZmFsc2UpOwogCiAgICAgSFRNTEVsZW1lbnRJbXBsOjpkZXRhY2goKTsKIH0KQEAgLTc5OCw3ICs4
MDAsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoCiAgICAgICAg
IC8vIHRoaXMgbWV0aG9kIG9yIGF0dGFjaCAod2hpY2ggYWxzbyBjYWxscyB1cGRhdGVXaWRnZXQp
IHRvIGJlIGNhbGxlZC4KICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwogICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4obV9yZW5kZXIpLT51cGRhdGVXaWRnZXQo
KTsKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoRXZlbnRJbXBsOjpMT0FEX0VWRU5ULGZhbHNl
LGZhbHNlKTsKKyAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQobG9hZEV2ZW50LGZhbHNlLGZhbHNl
KTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZShjaCk7CiB9CkluZGV4
OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTE1CmRpZmYgLXAgLXUgLXIxLjExNSBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2Zvcm0uY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTggQXVnIDIw
MDUgMjE6MTE6NTkgLTAwMDAJMS4xMTUKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAJMjEgQXVnIDIwMDUgMDE6NTY6MjEgLTAwMDAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJraHRtbF9leHQuaCIKICNpbmNsdWRlICJ4bWwvZG9t
X2RvY2ltcGwuaCIKKyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogCiAjaW5jbHVkZSA8a2Rl
YnVnLmg+CiAKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJLV1FTbGlkZXIuaCIKICNlbmRp
ZgogCit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007CkBA
IC0xODksNyArMTkxLDcgQEAgdm9pZCBSZW5kZXJGb3JtRWxlbWVudDo6c2xvdENsaWNrZWQoKQog
CiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFNb3VzZUV2ZW50IGV2ZW50KFFFdmVudDo6TW91c2VC
dXR0b25SZWxlYXNlKTsgLy8gZ2V0cyAiY3VycmVudCBldmVudCIKLSAgICBlbGVtZW50KCktPmRp
c3BhdGNoTW91c2VFdmVudCgmZXZlbnQsIEV2ZW50SW1wbDo6Q0xJQ0tfRVZFTlQsIGV2ZW50LmNs
aWNrQ291bnQoKSk7CisgICAgZWxlbWVudCgpLT5kaXNwYXRjaE1vdXNlRXZlbnQoJmV2ZW50LCBj
bGlja0V2ZW50LCBldmVudC5jbGlja0NvdW50KCkpOwogI2Vsc2UKICAgICAvLyBXZSBhbHNvIHNl
bmQgdGhlIEtIVE1MX0NMSUNLIG9yIEtIVE1MX0RCTENMSUNLIGV2ZW50IGZvcgogICAgIC8vIENM
SUNLLiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBET00gc3BlY3MsIGJ1dCBpcyB1c2VkIGZvcgpA
QCAtMTk5LDggKzIwMSw4IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OnNsb3RDbGlja2VkKCkK
ICAgICAvLyBzdG9yZWQsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSkKIAogICAg
IFFNb3VzZUV2ZW50IGUyKFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlLCBtX21vdXNlUG9zLCBt
X2J1dHRvbiwgbV9zdGF0ZSk7Ci0gICAgZWxlbWVudCgpLT5kaXNwYXRjaE1vdXNlRXZlbnQoJmUy
LCBFdmVudEltcGw6OkNMSUNLX0VWRU5ULCBtX2NsaWNrQ291bnQpOwotICAgIGVsZW1lbnQoKS0+
ZGlzcGF0Y2hNb3VzZUV2ZW50KCZlMiwgbV9pc0RvdWJsZUNsaWNrID8gRXZlbnRJbXBsOjpLSFRN
TF9EQkxDTElDS19FVkVOVCA6IEV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQsIG1fY2xpY2tD
b3VudCk7CisgICAgZWxlbWVudCgpLT5kaXNwYXRjaE1vdXNlRXZlbnQoJmUyLCBjbGlja0V2ZW50
LCBtX2NsaWNrQ291bnQpOworICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCZlMiwg
bV9pc0RvdWJsZUNsaWNrID8ga2h0bWxEYmxjbGlja0V2ZW50IDoga2h0bWxDbGlja0V2ZW50LCBt
X2NsaWNrQ291bnQpOwogI2VuZGlmCiAKICAgICBkZXJlZihhcmVuYSk7CkBAIC01MTAsNyArNTEy
LDcgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2xvdFJldHVyblByZXNzZWQoKQogdm9pZCBSZW5k
ZXJMaW5lRWRpdDo6c2xvdFBlcmZvcm1TZWFyY2goKQogewogICAgIC8vIEZpcmUgdGhlICJzZWFy
Y2giIERPTSBldmVudC4KLSAgICBlbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2ZW50KEV2ZW50SW1w
bDo6U0VBUkNIX0VWRU5ULCB0cnVlLCBmYWxzZSk7CisgICAgZWxlbWVudCgpLT5kaXNwYXRjaEhU
TUxFdmVudChzZWFyY2hFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlckxpbmVF
ZGl0OjphZGRTZWFyY2hSZXN1bHQoKQpAQCAtMTc0NCw3ICsxNzQ2LDcgQEAgdm9pZCBSZW5kZXJT
bGlkZXI6OnNsb3RTbGlkZXJWYWx1ZUNoYW5nZQogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoUVN0
cmluZzo6bnVtYmVyKHZhbCkpOwogICAgIAogICAgIC8vIEZpcmUgdGhlICJpbnB1dCIgRE9NIGV2
ZW50LgotICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoRXZlbnRJbXBsOjpJTlBVVF9F
VkVOVCwgdHJ1ZSwgZmFsc2UpOworICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoaW5w
dXRFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlclNsaWRlcjo6c2xvdENsaWNr
ZWQoKQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVz
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MwpkaWZmIC1wIC11IC1yMS43MyBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJh
bWVzLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoyMyAtMDAwMAkxLjczCisrKyBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2ZyYW1lcy5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MjIgLTAwMDAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCisjaW5jbHVk
ZSAieG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJr
aHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCkBAIC00OCw2ICs0OSw3IEBA
CiAjaW5jbHVkZSA8cXBhaW50ZXIuaD4KICNpbmNsdWRlICJxZGljdC5oIgogCit1c2luZyBuYW1l
c3BhY2UgRE9NOjpFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007CkBAIC0zNDcsNyArMzQ5LDcg
QEAgYm9vbCBSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZSggTW91c2VFdgogICAgIGludCBfeCA9
IGV2dC0+Y2xpZW50WCgpOwogICAgIGludCBfeSA9IGV2dC0+Y2xpZW50WSgpOwogICAgIAotICAg
IGlmICggIW1fcmVzaXppbmcgJiYgZXZ0LT5pZCgpID09IEV2ZW50SW1wbDo6TU9VU0VNT1ZFX0VW
RU5UIHx8IGV2dC0+aWQoKSA9PSBFdmVudEltcGw6Ok1PVVNFRE9XTl9FVkVOVCApCisgICAgaWYg
KCAhbV9yZXNpemluZyAmJiBldnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVFdmVudCB8fCBldnQtPnR5
cGUoKSA9PSBtb3VzZWRvd25FdmVudCApCiAgICAgewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAg
ICAgICBrZERlYnVnKCA2MDMxICkgPDwgIm1vdXNlRXZlbnQ6Y2hlY2siIDw8IGVuZGw7CkBAIC00
MDYsNyArNDA4LDcgQEAgYm9vbCBSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZSggTW91c2VFdgog
ICAgICAgICAgICAgY3Vyc29yID0gS0N1cnNvcjo6c2l6ZVZlckN1cnNvcigpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZihldnQtPmlkKCkgPT0gRXZlbnRJbXBsOjpNT1VTRURPV05f
RVZFTlQpCisgICAgICAgIGlmKGV2dC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXRSZXNpemluZyh0cnVlKTsKICAgICAgICAgICAgIEtBcHBsaWNh
dGlvbjo6c2V0T3ZlcnJpZGVDdXJzb3IoY3Vyc29yKTsKQEAgLTQyMCw3ICs0MjIsNyBAQCBib29s
IFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKCBNb3VzZUV2CiAgICAgfQogICAgIAogICAgIC8v
ICMjIyBjaGVjayB0aGUgcmVzaXplIGlzIG5vdCBnb2luZyBvdXQgb2YgYm91bmRzLgotICAgIGlm
KG1fcmVzaXppbmcgJiYgZXZ0LT5pZCgpID09IEV2ZW50SW1wbDo6TU9VU0VVUF9FVkVOVCkKKyAg
ICBpZihtX3Jlc2l6aW5nICYmIGV2dC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkKICAgICB7CiAg
ICAgICAgIHNldFJlc2l6aW5nKGZhbHNlKTsKICAgICAgICAgS0FwcGxpY2F0aW9uOjpyZXN0b3Jl
T3ZlcnJpZGVDdXJzb3IoKTsKQEAgLTQ0OSw3ICs0NTEsNyBAQCBib29sIFJlbmRlckZyYW1lU2V0
Ojp1c2VyUmVzaXplKCBNb3VzZUV2CiAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogICAg
IH0KICAgICAKLSAgICBlbHNlIGlmIChtX3Jlc2l6aW5nIHx8IGV2dC0+aWQoKSA9PSBFdmVudElt
cGw6Ok1PVVNFVVBfRVZFTlQpIHsKKyAgICBlbHNlIGlmIChtX3Jlc2l6aW5nIHx8IGV2dC0+dHlw
ZSgpID09IG1vdXNldXBFdmVudCkgewogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgS0hUTUxW
aWV3ICp2ID0gY2FudmFzKCktPnZpZXcoKTsKICAgICAgICAgUVBhaW50ZXIgcGFpbnQ7CkluZGV4
OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMDIKZGlmZiAtcCAtdSAtcjEuMTAyIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGF5ZXIuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkzMCBK
dWwgMjAwNSAwMjozMzoyMyAtMDAwMAkxLjEwMgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9s
YXllci5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MjMgLTAwMDAKQEAgLTQyLDYgKzQyLDcgQEAKICAq
LwogCiAjaW5jbHVkZSAicmVuZGVyX2xheWVyLmgiCisKICNpbmNsdWRlIDxrZGVidWcuaD4KICNp
bmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAgLTUwLDYgKzUxLDcg
QEAKICNpbmNsdWRlICJyZW5kZXJfdGhlbWUuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSAieG1sL0V2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCiAKICNpbmNsdWRlIDxx
c2Nyb2xsYmFyLmg+CkBAIC02NCw4ICs2NiwxMCBAQAogI2RlZmluZSBQQUdFX0tFRVAgICA0MAog
CiB1c2luZyBuYW1lc3BhY2UgRE9NOwordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2Uga2h0bWw7CisKK25h
bWVzcGFjZSBraHRtbCB7CiAKICNpZmRlZiBBUFBMRV9DSEFOR0VTCiBRU2Nyb2xsQmFyKiBSZW5k
ZXJMYXllcjo6Z1Njcm9sbEJhciA9IDA7CkBAIC01MzIsNyArNTM2LDcgQEAgUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeQogI2VuZGlmCiAKICAgICAvLyBGaXJlIHRoZSBz
Y3JvbGwgRE9NIGV2ZW50LgotICAgIG1fb2JqZWN0LT5lbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2
ZW50KEV2ZW50SW1wbDo6U0NST0xMX0VWRU5ULCB0cnVlLCBmYWxzZSk7CisgICAgbV9vYmplY3Qt
PmVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsK
IAogICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KICAg
ICBpZiAocmVwYWludCkKQEAgLTE3NzAsMyArMTc3NCw0IEBAIHZvaWQgTWFycXVlZTo6dGltZXJF
dmVudChRVGltZXJFdmVudCogZXYKICAgICB9CiB9CiAKK30KSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjA0CmRpZmYgLXAgLXUgLXIxLjIwNCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5j
cHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkzMCBKdWwgMjAwNSAwMjoz
MzoyMyAtMDAwMAkxLjIwNAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTIx
IEF1ZyAyMDA1IDAxOjU2OjI1IC0wMDAwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAieG1s
L2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1
ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKKyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5j
bHVkZSA8cXBhaW50ZXIuaD4KQEAgLTUwLDcgKzUxLDkgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8
YXNzZXJ0Lmg+CisKIHVzaW5nIG5hbWVzcGFjZSBET007Cit1c2luZyBuYW1lc3BhY2UgRE9NOjpF
dmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKIApAQCAtMTQyMSw3ICsxNDI0LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnNob3VsZFNl
bGVjdCgpIGNvbnN0CiAgICAgTm9kZUltcGwgKm5vZGUgPSBzZWxlY3RTdGFydE5vZGUodGhpcyk7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG5vZGUt
PmRpc3BhdGNoSFRNTEV2ZW50KERPTTo6RXZlbnRJbXBsOjpTRUxFQ1RTVEFSVF9FVkVOVCwgdHJ1
ZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG5vZGUtPmRpc3BhdGNoSFRNTEV2ZW50KHNlbGVjdHN0YXJ0
RXZlbnQsIHRydWUsIHRydWUpOwogfQogCiBRQ29sb3IgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25D
b2xvcihRUGFpbnRlciAqcCkgY29uc3QKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfcmVw
bGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgxCmRp
ZmYgLXAgLXUgLXIxLjgxIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwCi0tLSBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAkyOSBKdWwgMjAwNSAyMzo0Mjo1MSAt
MDAwMAkxLjgxCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAkyMSBBdWcg
MjAwNSAwMTo1NjoyNSAtMDAwMApAQCAtMzksMTEgKzM5LDEyIEBACiAjaW5jbHVkZSAia2h0bWxf
cGFydC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIiAvLyAjIyMgcmVtb3ZlIGRlcGVu
ZGVuY3kKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAieG1sL0V2ZW50
TmFtZXMuaCIKICNpbmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
dXNpbmcgbmFtZXNwYWNlIERPTTsKLQordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsK
IAogUmVuZGVyUmVwbGFjZWQ6OlJlbmRlclJlcGxhY2VkKERPTTo6Tm9kZUltcGwqIG5vZGUpCiAg
ICAgOiBSZW5kZXJCb3gobm9kZSkKQEAgLTM0Myw3ICszNDQsNyBAQCB2b2lkIFJlbmRlcldpZGdl
dDo6c2VuZENvbnN1bWVkTW91c2VVcChjCiAgICAgUmVuZGVyQXJlbmEgKmFyZW5hID0gcmVmKCk7
CiAgICAgUU1vdXNlRXZlbnQgZSggUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UsIG1vdXNlUG9z
LCBidXR0b24sIHN0YXRlKTsKIAotICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCZl
LCBFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQsIDApOworICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hN
b3VzZUV2ZW50KCZlLCBtb3VzZXVwRXZlbnQsIDApOwogICAgIGRlcmVmKGFyZW5hKTsKIH0KICNl
bmRpZgpAQCAtNTA3LDIwICs1MDgsMjAgQEAgYm9vbCBSZW5kZXJXaWRnZXQ6OmV2ZW50RmlsdGVy
KFFPYmplY3QqIAogLy8gICAgICAgICBtX3N0YXRlICA9IF9lLT5zdGF0ZSgpOwogLy8gICAgICAg
ICBRTW91c2VFdmVudCBlMihlLT50eXBlKCksUVBvaW50KGFic1gsYWJzWSkrX2UtPnBvcygpLF9l
LT5idXR0b24oKSxfZS0+c3RhdGUoKSk7CiAKLS8vICAgICAgICAgZWxlbS0+ZGlzcGF0Y2hNb3Vz
ZUV2ZW50KCZlMixFdmVudEltcGw6Ok1PVVNFVVBfRVZFTlQsbV9jbGlja0NvdW50KTsKKy8vICAg
ICAgICAgZWxlbS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCZlMixtb3VzZXVwRXZlbnQsbV9jbGlja0Nv
dW50KTsKIAogLy8gICAgICAgICBpZigobV9tb3VzZVBvcyAtIGUyLnBvcygpKS5tYW5oYXR0YW5M
ZW5ndGgoKSA8PSBRQXBwbGljYXRpb246OnN0YXJ0RHJhZ0Rpc3RhbmNlKCkpIHsKIC8vICAgICAg
ICAgICAgIC8vIERPTTIgRXZlbnRzIHNlY3Rpb24gMS42LjIgc2F5cyB0aGF0IGEgY2xpY2sgaXMg
aWYgdGhlIG1vdXNlIHdhcyBwcmVzc2VkCiAvLyAgICAgICAgICAgICAvLyBhbmQgcmVsZWFzZWQg
aW4gdGhlICJzYW1lIHNjcmVlbiBsb2NhdGlvbiIKIC8vICAgICAgICAgICAgIC8vIEFzIHBlb3Bs
ZSB1c3VhbGx5IGNhbid0IGNsaWNrIG9uIHRoZSBzYW1lIHBpeGVsLCB3ZSdyZSBhIGJpdCB0b2xl
cmFudCBoZXJlCi0vLyAgICAgICAgICAgICBlbGVtLT5kaXNwYXRjaE1vdXNlRXZlbnQoJmUyLEV2
ZW50SW1wbDo6Q0xJQ0tfRVZFTlQsbV9jbGlja0NvdW50KTsKKy8vICAgICAgICAgICAgIGVsZW0t
PmRpc3BhdGNoTW91c2VFdmVudCgmZTIsY2xpY2tFdmVudCxtX2NsaWNrQ291bnQpOwogLy8gICAg
ICAgICB9CiAKIC8vICAgICAgICAgaWYoIWlzUmVuZGVyQnV0dG9uKCkpIHsKIC8vICAgICAgICAg
ICAgIC8vICMjIyBET01BY3RpdmF0ZSBpcyBhbHNvIGRpc3BhdGNoZWQgZm9yIHRoaWdzIGxpa2Ug
c2VsZWN0cyAmIHRleHRhcmVhcyAtCiAvLyAgICAgICAgICAgICAvLyBub3Qgc3VyZSBpZiB0aGlz
IGlzIGNvcnJlY3QKLS8vICAgICAgICAgICAgIGVsZW0tPmRpc3BhdGNoVUlFdmVudChFdmVudElt
cGw6OkRPTUFDVElWQVRFX0VWRU5ULG1faXNEb3VibGVDbGljayA/IDIgOiAxKTsKLS8vICAgICAg
ICAgICAgIGVsZW0tPmRpc3BhdGNoTW91c2VFdmVudCgmZTIsIG1faXNEb3VibGVDbGljayA/IEV2
ZW50SW1wbDo6S0hUTUxfREJMQ0xJQ0tfRVZFTlQgOiBFdmVudEltcGw6OktIVE1MX0NMSUNLX0VW
RU5ULCBtX2NsaWNrQ291bnQpOworLy8gICAgICAgICAgICAgZWxlbS0+ZGlzcGF0Y2hVSUV2ZW50
KERPTUFjdGl2YXRlRXZlbnQsbV9pc0RvdWJsZUNsaWNrID8gMiA6IDEpOworLy8gICAgICAgICAg
ICAgZWxlbS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCZlMiwgbV9pc0RvdWJsZUNsaWNrID8ga2h0bWxE
YmxjbGlja0V2ZW50IDoga2h0bWxDbGlja0V2ZW50LCBtX2NsaWNrQ291bnQpOwogLy8gICAgICAg
ICAgICAgbV9pc0RvdWJsZUNsaWNrID0gZmFsc2U7CiAvLyAgICAgICAgIH0KIC8vICAgICAgICAg
ZWxzZQpJbmRleDoga2h0bWwveG1sL0V2ZW50TmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IGtodG1sL3htbC9FdmVudE5hbWVzLmNwcApkaWZmIC1OIGtodG1sL3htbC9FdmVudE5hbWVzLmNw
cAotLS0ga2h0bWwveG1sL0V2ZW50TmFtZXMuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIGtodG1sL3htbC9FdmVudE5hbWVzLmNwcAkyMSBBdWcgMjAwNSAwMTo1NjoyNSAtMDAwMApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjZGVmaW5lIERPTV9FVkVOVF9OQU1FU19ISURFX0dMT0JBTFMgMQorCisjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorCit1c2luZyBET006OkF0b21pY1N0cmluZzsKK3VzaW5nIERP
TTo6bnVsbEF0b207CisKK25hbWVzcGFjZSBET00geyBuYW1lc3BhY2UgRXZlbnROYW1lcyB7CisK
Ky8vIEluaXRpYWxpemUgZXhwbGljaXRseSB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6YXRpb24u
CisKKyNkZWZpbmUgREVGSU5FX0dMT0JBTChuYW1lKSB2b2lkICpuYW1lIyNFdmVudFsoc2l6ZW9m
KEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCAqKSAtIDEpIC8gc2l6ZW9mKHZvaWQgKildOwor
RE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERFRklORV9HTE9CQUwpCisKK3ZvaWQgaW5pdCgpCit7
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgor
ICAgICAgICAjZGVmaW5lIElOSVRJQUxJWkVfR0xPQkFMKG5hbWUpIG5ldyAoJm5hbWUjI0V2ZW50
KSBBdG9taWNTdHJpbmcoI25hbWUpOworICAgICAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0go
SU5JVElBTElaRV9HTE9CQUwpCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9
CisKK30gfQpJbmRleDoga2h0bWwveG1sL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiBraHRtbC94bWwvRXZlbnROYW1lcy5oCmRpZmYgLU4ga2h0bWwveG1sL0V2ZW50TmFtZXMuaAot
LS0ga2h0bWwveG1sL0V2ZW50TmFtZXMuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBr
aHRtbC94bWwvRXZlbnROYW1lcy5oCTIxIEF1ZyAyMDA1IDAxOjU2OjI1IC0wMDAwCkBAIC0wLDAg
KzEsMTA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIERPTV9FVkVOVF9OQU1FU19ICisjZGVmaW5lIERPTV9FVkVOVF9OQU1FU19I
CisKKyNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCisKK25hbWVzcGFjZSBET00geyBuYW1l
c3BhY2UgRXZlbnROYW1lcyB7CisKKyNkZWZpbmUgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKG1h
Y3JvKSBcCisgICAgXAorICAgIG1hY3JvKGFib3J0KSBcCisgICAgbWFjcm8oYmVmb3JlY29weSkg
XAorICAgIG1hY3JvKGJlZm9yZWN1dCkgXAorICAgIG1hY3JvKGJlZm9yZXBhc3RlKSBcCisgICAg
bWFjcm8oYmx1cikgXAorICAgIG1hY3JvKGNoYW5nZSkgXAorICAgIG1hY3JvKGNsaWNrKSBcCisg
ICAgbWFjcm8oY29udGV4dG1lbnUpIFwKKyAgICBtYWNybyhjb3B5KSBcCisgICAgbWFjcm8oY3V0
KSBcCisgICAgbWFjcm8oZHJhZykgXAorICAgIG1hY3JvKGRyYWdlbmQpIFwKKyAgICBtYWNybyhk
cmFnZW50ZXIpIFwKKyAgICBtYWNybyhkcmFnbGVhdmUpIFwKKyAgICBtYWNybyhkcmFnb3Zlcikg
XAorICAgIG1hY3JvKGRyYWdzdGFydCkgXAorICAgIG1hY3JvKGRyb3ApIFwKKyAgICBtYWNybyhl
cnJvcikgXAorICAgIG1hY3JvKGZvY3VzKSBcCisgICAgbWFjcm8oaW5wdXQpIFwKKyAgICBtYWNy
byhrZXlkb3duKSBcCisgICAgbWFjcm8oa2V5cHJlc3MpIFwKKyAgICBtYWNybyhrZXl1cCkgXAor
ICAgIG1hY3JvKGxvYWQpIFwKKyAgICBtYWNybyhtb3VzZWRvd24pIFwKKyAgICBtYWNybyhtb3Vz
ZW1vdmUpIFwKKyAgICBtYWNybyhtb3VzZW91dCkgXAorICAgIG1hY3JvKG1vdXNlb3ZlcikgXAor
ICAgIG1hY3JvKG1vdXNldXApIFwKKyAgICBtYWNybyhtb3VzZXdoZWVsKSBcCisgICAgbWFjcm8o
cGFzdGUpIFwKKyAgICBtYWNybyhyZWFkeXN0YXRlY2hhbmdlKSBcCisgICAgbWFjcm8ocmVzZXQp
IFwKKyAgICBtYWNybyhyZXNpemUpIFwKKyAgICBtYWNybyhzY3JvbGwpIFwKKyAgICBtYWNybyhz
ZWFyY2gpIFwKKyAgICBtYWNybyhzZWxlY3QpIFwKKyAgICBtYWNybyhzZWxlY3RzdGFydCkgXAor
ICAgIG1hY3JvKHN1Ym1pdCkgXAorICAgIG1hY3JvKHRleHRJbnB1dCkgXAorICAgIG1hY3JvKHVu
bG9hZCkgXAorICAgIFwKKyAgICBtYWNybyhET01BY3RpdmF0ZSkgXAorICAgIG1hY3JvKERPTUF0
dHJNb2RpZmllZCkgXAorICAgIG1hY3JvKERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCkgXAorICAg
IG1hY3JvKERPTUZvY3VzSW4pIFwKKyAgICBtYWNybyhET01Gb2N1c091dCkgXAorICAgIG1hY3Jv
KERPTU5vZGVJbnNlcnRlZCkgXAorICAgIG1hY3JvKERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVu
dCkgXAorICAgIG1hY3JvKERPTU5vZGVSZW1vdmVkKSBcCisgICAgbWFjcm8oRE9NTm9kZVJlbW92
ZWRGcm9tRG9jdW1lbnQpIFwKKyAgICBtYWNybyhET01TdWJ0cmVlTW9kaWZpZWQpIFwKKyAgICBc
CisgICAgbWFjcm8oa2h0bWxDbGljaykgXAorICAgIG1hY3JvKGtodG1sRGJsY2xpY2spIFwKKyAg
ICBtYWNybyhraHRtbERyYWdkcm9wKSBcCisgICAgbWFjcm8oa2h0bWxFcnJvcikgXAorICAgIG1h
Y3JvKGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWwpIFwKKyAgICBtYWNybyhraHRtbE1vdmUpIFwK
KyAgICBtYWNybyhraHRtbE9yaWdjbGlja01vdXNldXApIFwKKyAgICBcCisvLyBlbmQgb2YgRE9N
X0VWRU5UX05BTUVTX0ZPUl9FQUNICisKKyNpZiAhRE9NX0VWRU5UX05BTUVTX0hJREVfR0xPQkFM
UworICAgICNkZWZpbmUgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUobmFtZSkgZXh0ZXJuIEF0b21p
Y1N0cmluZyBuYW1lIyNFdmVudDsKKyAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VW
RU5UX05BTUVTX0RFQ0xBUkUpCisgICAgI3VuZGVmIERPTV9FVkVOVF9OQU1FU19ERUNMQVJFCisj
ZW5kaWYKKworICAgIHZvaWQgaW5pdCgpOworCit9IH0KKworI2VuZGlmCkluZGV4OiBraHRtbC94
bWwvZG9tMl9ldmVudHNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4zNQpkaWZmIC1wIC11IC1yMS4zNSBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcAotLS0g
a2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5jcHAJOCBBdWcgMjAwNSAyMjoyOTozOSAtMDAwMAkx
LjM1CisrKyBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcAkyMSBBdWcgMjAwNSAwMTo1Njoy
NiAtMDAwMApAQCAtMjgsMjUgKzI4LDI2IEBACiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3ZpZXdz
aW1wbC5oIgorI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5n
L3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgiCiAK
ICNpbmNsdWRlIDxrZGVidWcuaD4KIAotdXNpbmcgbmFtZXNwYWNlIERPTTsKLQogdXNpbmcga2h0
bWw6OlJlbmRlck9iamVjdDsKIAordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKKwor
bmFtZXNwYWNlIERPTSB7CisKIEV2ZW50SW1wbDo6RXZlbnRJbXBsKCkKIHsKLSAgICBtX3R5cGUg
PSAwOwogICAgIG1fY2FuQnViYmxlID0gZmFsc2U7CiAgICAgbV9jYW5jZWxhYmxlID0gZmFsc2U7
CiAKICAgICBtX3Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlOwogICAgIG1fZGVmYXVsdFByZXZl
bnRlZCA9IGZhbHNlOwogICAgIG1fY2FuY2VsQnViYmxlID0gZmFsc2U7Ci0gICAgbV9pZCA9IFVO
S05PV05fRVZFTlQ7CiAgICAgbV9jdXJyZW50VGFyZ2V0ID0gMDsKICAgICBtX2V2ZW50UGhhc2Ug
PSAwOwogICAgIG1fdGFyZ2V0ID0gMDsKQEAgLTU0LDE5ICs1NSwxNSBAQCBFdmVudEltcGw6OkV2
ZW50SW1wbCgpCiAgICAgbV9kZWZhdWx0SGFuZGxlZCA9IGZhbHNlOwogfQogCi1FdmVudEltcGw6
OkV2ZW50SW1wbChFdmVudElkIF9pZCwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJs
ZUFyZykKK0V2ZW50SW1wbDo6RXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQogewotICAgIERPTVN0cmlu
ZyB0ID0gRXZlbnRJbXBsOjppZFRvVHlwZShfaWQpOwotICAgIG1fdHlwZSA9IHQuaW1wbGVtZW50
YXRpb24oKTsKLSAgICBpZiAobV90eXBlKQotCW1fdHlwZS0+cmVmKCk7CisgICAgbV90eXBlID0g
ZXZlbnRUeXBlOwogICAgIG1fY2FuQnViYmxlID0gY2FuQnViYmxlQXJnOwogICAgIG1fY2FuY2Vs
YWJsZSA9IGNhbmNlbGFibGVBcmc7CiAKICAgICBtX3Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNl
OwogICAgIG1fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwogICAgIG1fY2FuY2VsQnViYmxlID0g
ZmFsc2U7Ci0gICAgbV9pZCA9IF9pZDsKICAgICBtX2N1cnJlbnRUYXJnZXQgPSAwOwogICAgIG1f
ZXZlbnRQaGFzZSA9IDA7CiAgICAgbV90YXJnZXQgPSAwOwpAQCAtNzYsMjIgKzczLDEwIEBAIEV2
ZW50SW1wbDo6RXZlbnRJbXBsKEV2ZW50SWQgX2lkLCBib29sIGMKIAogRXZlbnRJbXBsOjp+RXZl
bnRJbXBsKCkKIHsKLSAgICBpZiAobV90eXBlKQotICAgICAgICBtX3R5cGUtPmRlcmVmKCk7CiAg
ICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICBtX3RhcmdldC0+ZGVyZWYoKTsKIH0KIAotRE9NU3Ry
aW5nIEV2ZW50SW1wbDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHlwZTsKLX0KLQot
Tm9kZUltcGwgKkV2ZW50SW1wbDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90YXJn
ZXQ7Ci19Ci0KIHZvaWQgRXZlbnRJbXBsOjpzZXRUYXJnZXQoTm9kZUltcGwgKl90YXJnZXQpCiB7
CiAgICAgaWYgKG1fdGFyZ2V0KQpAQCAtMTAxLDM2ICs4Niw2IEBAIHZvaWQgRXZlbnRJbXBsOjpz
ZXRUYXJnZXQoTm9kZUltcGwgKl90YXIKICAgICAgICAgbV90YXJnZXQtPnJlZigpOwogfQogCi1O
b2RlSW1wbCAqRXZlbnRJbXBsOjpjdXJyZW50VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jdXJyZW50VGFyZ2V0OwotfQotCi12b2lkIEV2ZW50SW1wbDo6c2V0Q3VycmVudFRhcmdldChO
b2RlSW1wbCAqX2N1cnJlbnRUYXJnZXQpCi17Ci0gICAgbV9jdXJyZW50VGFyZ2V0ID0gX2N1cnJl
bnRUYXJnZXQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IEV2ZW50SW1wbDo6ZXZlbnRQaGFzZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZXZlbnRQaGFzZTsKLX0KLQotdm9pZCBFdmVudEltcGw6OnNl
dEV2ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgX2V2ZW50UGhhc2UpCi17Ci0gICAgbV9ldmVudFBo
YXNlID0gX2V2ZW50UGhhc2U7Ci19Ci0KLWJvb2wgRXZlbnRJbXBsOjpidWJibGVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jYW5CdWJibGU7Ci19Ci0KLWJvb2wgRXZlbnRJbXBsOjpjYW5jZWxh
YmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jYW5jZWxhYmxlOwotfQotCiBET01UaW1lU3Rh
bXAgRXZlbnRJbXBsOjp0aW1lU3RhbXAoKQogewogICAgIFFEYXRlVGltZSBlcG9jaChRRGF0ZSgx
OTcwLDEsMSksUVRpbWUoMCwwKSk7CkBAIC0xMzgsMTMxICs5MywyMSBAQCBET01UaW1lU3RhbXAg
RXZlbnRJbXBsOjp0aW1lU3RhbXAoKQogICAgIHJldHVybiBlcG9jaC5zZWNzVG8obV9jcmVhdGVU
aW1lKSoxMDAwK21fY3JlYXRlVGltZS50aW1lKCkubXNlYygpOwogfQogCi12b2lkIEV2ZW50SW1w
bDo6c3RvcFByb3BhZ2F0aW9uKCkKLXsKLSAgICBtX3Byb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7
Ci19Ci0KIHZvaWQgRXZlbnRJbXBsOjpwcmV2ZW50RGVmYXVsdCgpCiB7CiAgICAgaWYgKG1fY2Fu
Y2VsYWJsZSkKIAltX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwogfQogCi12b2lkIEV2ZW50SW1w
bDo6aW5pdEV2ZW50KGNvbnN0IERPTVN0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQordm9pZCBFdmVudEltcGw6OmluaXRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZykKIHsKICAgICAvLyAjIyMgZW5zdXJlIHRoaXMgaXMgbm90IGNhbGxlZCBhZnRl
ciB3ZSBoYXZlIGJlZW4gZGlzcGF0Y2hlZCAoYWxzbyBmb3Igc3ViY2xhc3NlcykKIAotICAgIGlm
IChtX3R5cGUpCi0JbV90eXBlLT5kZXJlZigpOwotCi0gICAgbV90eXBlID0gZXZlbnRUeXBlQXJn
LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1fdHlwZSkKLQltX3R5cGUtPnJlZigpOwotCi0g
ICAgbV9pZCA9IHR5cGVUb0lkKGV2ZW50VHlwZUFyZyk7Ci0KKyAgICBtX3R5cGUgPSBldmVudFR5
cGVBcmc7CiAgICAgbV9jYW5CdWJibGUgPSBjYW5CdWJibGVBcmc7CiAgICAgbV9jYW5jZWxhYmxl
ID0gY2FuY2VsYWJsZUFyZzsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBldmVudE5h
bWVzW0V2ZW50SW1wbDo6bnVtRXZlbnRJZHNdID0gewotICAgIDAsCi0gICAgIkRPTUZvY3VzSW4i
LAotICAgICJET01Gb2N1c091dCIsCi0gICAgIkRPTUFjdGl2YXRlIiwKLSAgICAiY2xpY2siLAot
ICAgICJtb3VzZWRvd24iLAotICAgICJtb3VzZXVwIiwKLSAgICAibW91c2VvdmVyIiwKLSAgICAi
bW91c2Vtb3ZlIiwKLSAgICAibW91c2VvdXQiLAotICAgICJvbmJlZm9yZWN1dCIsCi0gICAgIm9u
Y3V0IiwKLSAgICAib25iZWZvcmVjb3B5IiwKLSAgICAib25jb3B5IiwKLSAgICAib25iZWZvcmVw
YXN0ZSIsCi0gICAgIm9ucGFzdGUiLAotICAgICJkcmFnZW50ZXIiLAotICAgICJkcmFnb3ZlciIs
Ci0gICAgImRyYWdsZWF2ZSIsCi0gICAgImRyb3AiLAotICAgICJkcmFnc3RhcnQiLAotICAgICJk
cmFnIiwKLSAgICAiZHJhZ2VuZCIsCi0gICAgInNlbGVjdHN0YXJ0IiwKLSAgICAiRE9NU3VidHJl
ZU1vZGlmaWVkIiwKLSAgICAiRE9NTm9kZUluc2VydGVkIiwKLSAgICAiRE9NTm9kZVJlbW92ZWQi
LAotICAgICJET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCIsCi0gICAgIkRPTU5vZGVJbnNlcnRl
ZEludG9Eb2N1bWVudCIsCi0gICAgIkRPTUF0dHJNb2RpZmllZCIsCi0gICAgIkRPTUNoYXJhY3Rl
ckRhdGFNb2RpZmllZCIsCi0gICAgImxvYWQiLAotICAgICJ1bmxvYWQiLAotICAgICJhYm9ydCIs
Ci0gICAgImVycm9yIiwKLSAgICAic2VsZWN0IiwKLSAgICAiY2hhbmdlIiwKLSAgICAic3VibWl0
IiwKLSAgICAicmVzZXQiLAotICAgICJmb2N1cyIsCi0gICAgImJsdXIiLAotICAgICJyZXNpemUi
LAotICAgICJzY3JvbGwiLAotICAgICJjb250ZXh0bWVudSIsCi0jaWYgQVBQTEVfQ0hBTkdFUwot
ICAgICJzZWFyY2giLAotI2VuZGlmCi0gICAgImlucHV0IiwKLSAgICAia2V5ZG93biIsCi0gICAg
ImtleXVwIiwKLSAgICAidGV4dElucHV0IiwgLy8gRklYTUU6IGlzIHRoZSBjYXBpdGFsIEkgY29y
cmVjdD8KLSAgICAwLCAvLyBLSFRNTF9EQkxDTElDS19FVkVOVAotICAgIDAsIC8vIEtIVE1MX0NM
SUNLX0VWRU5UCi0gICAgMCwgLy8gS0hUTUxfRFJBR0RST1BfRVZFTlQKLSAgICAwLCAvLyBLSFRN
TF9FUlJPUl9FVkVOVAotICAgICJrZXlwcmVzcyIsCi0gICAgMCwgLy8gS0hUTUxfTU9WRV9FVkVO
VAotICAgIDAsIC8vIEtIVE1MX09SSUdDTElDS19NT1VTRVVQX0VWRU5UCi0gICAgInJlYWR5c3Rh
dGVjaGFuZ2UiLAotICAgICJtb3VzZXdoZWVsIiwKLSAgICAwLCAvLyBob3Jpem9udGFsIG1vdXNl
IHdoZWVsCi19OwotCi1FdmVudEltcGw6OkV2ZW50SWQgRXZlbnRJbXBsOjp0eXBlVG9JZChjb25z
dCBET01TdHJpbmcgJnR5cGUpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FdmVudElk
czsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm4gPSBldmVudE5hbWVzW2ldOwotICAgICAg
ICBpZiAobiAmJiB0eXBlID09IG4pCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZl
bnRJZD4oaSk7Ci0gICAgfQotICAgIHJldHVybiBVTktOT1dOX0VWRU5UOwotfQotCi1ET01TdHJp
bmcgRXZlbnRJbXBsOjppZFRvVHlwZShFdmVudElkIGlkKQotewotICAgIHN3aXRjaCAoaWQpIHsK
LQljYXNlIEtIVE1MX0RCTENMSUNLX0VWRU5UOgotICAgICAgICAgICAgcmV0dXJuICJkYmxjbGlj
ayI7Ci0JY2FzZSBLSFRNTF9DTElDS19FVkVOVDoKLSAgICAgICAgICAgIHJldHVybiAiY2xpY2si
OwotCWNhc2UgS0hUTUxfRFJBR0RST1BfRVZFTlQ6Ci0gICAgICAgICAgICByZXR1cm4gImtodG1s
X2RyYWdkcm9wIjsKLQljYXNlIEtIVE1MX0VSUk9SX0VWRU5UOgotICAgICAgICAgICAgcmV0dXJu
ICJraHRtbF9lcnJvciI7Ci0JY2FzZSBLSFRNTF9NT1ZFX0VWRU5UOgotICAgICAgICAgICAgcmV0
dXJuICJraHRtbF9tb3ZlIjsKLSAgICAgICAgY2FzZSBLSFRNTF9PUklHQ0xJQ0tfTU9VU0VVUF9F
VkVOVDoKLSAgICAgICAgICAgIHJldHVybiAia2h0bWxfb3JpZ2NsaWNrX21vdXNldXBfZXZlbnQi
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChp
ZCA+PSBudW1FdmVudElkcykKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVy
biBldmVudE5hbWVzW2lkXTsKLX0KLQogYm9vbCBFdmVudEltcGw6OmlzVUlFdmVudCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDkgKzE1MSw4IEBAIFVJRXZlbnRJbXBsOjpV
SUV2ZW50SW1wbCgpCiAgICAgbV9kZXRhaWwgPSAwOwogfQogCi1VSUV2ZW50SW1wbDo6VUlFdmVu
dEltcGwoRXZlbnRJZCBfaWQsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcs
Ci0JCUFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsIGxvbmcgZGV0YWlsQXJnKQotCQk6IEV2ZW50
SW1wbChfaWQsY2FuQnViYmxlQXJnLGNhbmNlbGFibGVBcmcpCitVSUV2ZW50SW1wbDo6VUlFdmVu
dEltcGwoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBi
b29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsIGxvbmcgZGV0YWls
QXJnKQorICAgIDogRXZlbnRJbXBsKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxl
QXJnKQogewogICAgIG1fdmlldyA9IHZpZXdBcmc7CiAgICAgaWYgKG1fdmlldykKQEAgLTMyMiw3
ICsxNjYsNyBAQCBVSUV2ZW50SW1wbDo6flVJRXZlbnRJbXBsKCkKICAgICAgICAgbV92aWV3LT5k
ZXJlZigpOwogfQogCi12b2lkIFVJRXZlbnRJbXBsOjppbml0VUlFdmVudChjb25zdCBET01TdHJp
bmcgJnR5cGVBcmcsCit2b2lkIFVJRXZlbnRJbXBsOjppbml0VUlFdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJnR5cGVBcmcsCiAJCQkgICAgICBib29sIGNhbkJ1YmJsZUFyZywKIAkJCSAgICAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKIAkJCSAgICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsCkBA
IC0zODYsNyArMjMwLDcgQEAgTW91c2VSZWxhdGVkRXZlbnRJbXBsOjpNb3VzZVJlbGF0ZWRFdmVu
dAogewogfQogCi1Nb3VzZVJlbGF0ZWRFdmVudEltcGw6Ok1vdXNlUmVsYXRlZEV2ZW50SW1wbChF
dmVudElkIF9pZCwKK01vdXNlUmVsYXRlZEV2ZW50SW1wbDo6TW91c2VSZWxhdGVkRXZlbnRJbXBs
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAogCQkJICAgICAgIGJvb2wgY2FuQnViYmxl
QXJnLAogCQkJICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKIAkJCSAgICAgICBBYnN0cmFjdFZp
ZXdJbXBsICp2aWV3QXJnLApAQCAtMzk5LDcgKzI0Myw3IEBAIE1vdXNlUmVsYXRlZEV2ZW50SW1w
bDo6TW91c2VSZWxhdGVkRXZlbnQKIAkJCSAgICAgICBib29sIGFsdEtleUFyZywKIAkJCSAgICAg
ICBib29sIHNoaWZ0S2V5QXJnLAogCQkJICAgICAgIGJvb2wgbWV0YUtleUFyZykKLSAgICA6IFVJ
RXZlbnRXaXRoS2V5U3RhdGVJbXBsKF9pZCwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2
aWV3QXJnLCBkZXRhaWxBcmcsCisgICAgOiBVSUV2ZW50V2l0aEtleVN0YXRlSW1wbChldmVudFR5
cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAogICAg
ICAgICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQogewog
ICAgIG1fc2NyZWVuWCA9IHNjcmVlblhBcmc7CkBAIC00NjMsNyArMzA3LDcgQEAgTW91c2VFdmVu
dEltcGw6Ok1vdXNlRXZlbnRJbXBsKCkKICAgICBtX2NsaXBib2FyZCA9IDA7CiB9CiAKLU1vdXNl
RXZlbnRJbXBsOjpNb3VzZUV2ZW50SW1wbChFdmVudElkIF9pZCwKK01vdXNlRXZlbnRJbXBsOjpN
b3VzZUV2ZW50SW1wbChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwKIAkJCSAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKIAkJCSAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAJCQkgICAg
ICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKQEAgLTQ3OSw3ICszMjMsNyBAQCBNb3VzZUV2
ZW50SW1wbDo6TW91c2VFdmVudEltcGwoRXZlbnRJZCBfCiAJCQkgICAgICAgdW5zaWduZWQgc2hv
cnQgYnV0dG9uQXJnLAogCQkJICAgICAgIE5vZGVJbXBsICpyZWxhdGVkVGFyZ2V0QXJnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZEltcGwgKmNsaXBib2FyZEFyZykK
LSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50SW1wbChfaWQsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJs
ZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAorICAgIDogTW91c2VSZWxhdGVkRXZlbnRJbXBsKGV2
ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcs
CiAgICAgICAgIHNjcmVlblhBcmcsIHNjcmVlbllBcmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcs
CiAgICAgICAgIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcp
CiB7CkBAIC01MDAsNyArMzQ0LDcgQEAgTW91c2VFdmVudEltcGw6On5Nb3VzZUV2ZW50SW1wbCgp
CiAJbV9jbGlwYm9hcmQtPmRlcmVmKCk7CiB9CiAKLXZvaWQgTW91c2VFdmVudEltcGw6OmluaXRN
b3VzZUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywKK3ZvaWQgTW91c2VFdmVudEltcGw6
OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKQEAgLTU0
MywxMCArMzg3LDEwIEBAIGJvb2wgTW91c2VFdmVudEltcGw6OmlzTW91c2VFdmVudCgpIGNvbnMK
IAogYm9vbCBNb3VzZUV2ZW50SW1wbDo6aXNEcmFnRXZlbnQoKSBjb25zdAogewotICAgIHJldHVy
biAobV9pZCA9PSBFdmVudEltcGw6OkRSQUdFTlRFUl9FVkVOVCB8fCBtX2lkID09IEV2ZW50SW1w
bDo6RFJBR09WRVJfRVZFTlQKLSAgICAgICAgICAgIHx8IG1faWQgPT0gRXZlbnRJbXBsOjpEUkFH
TEVBVkVfRVZFTlQgfHwgbV9pZCA9PSBFdmVudEltcGw6OkRST1BfRVZFTlQgCi0gICAgICAgICAg
ICB8fCBtX2lkID09IEV2ZW50SW1wbDo6RFJBR1NUQVJUX0VWRU5UIHx8IG1faWQgPT0gRXZlbnRJ
bXBsOjpEUkFHX0VWRU5UCi0gICAgICAgICAgICB8fCBtX2lkID09IEV2ZW50SW1wbDo6RFJBR0VO
RF9FVkVOVCk7CisgICAgcmV0dXJuIChtX3R5cGUgPT0gZHJhZ2VudGVyRXZlbnQgfHwgbV90eXBl
ID09IGRyYWdvdmVyRXZlbnQKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9PSBkcmFnbGVhdmVFdmVu
dCB8fCBtX3R5cGUgPT0gZHJvcEV2ZW50IAorICAgICAgICAgICAgfHwgbV90eXBlID09IGRyYWdz
dGFydEV2ZW50IHx8IG1fdHlwZSA9PSBkcmFnRXZlbnQKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9
PSBkcmFnZW5kRXZlbnQpOwogfQogCiBsb25nIE1vdXNlRXZlbnRJbXBsOjp3aGljaCgpIGNvbnN0
CkBAIC01NjgsNyArNDEyLDcgQEAgS2V5Ym9hcmRFdmVudEltcGw6OktleWJvYXJkRXZlbnRJbXBs
KCkKIH0KIAogS2V5Ym9hcmRFdmVudEltcGw6OktleWJvYXJkRXZlbnRJbXBsKFFLZXlFdmVudCAq
a2V5LCBBYnN0cmFjdFZpZXdJbXBsICp2aWV3KQotICA6IFVJRXZlbnRXaXRoS2V5U3RhdGVJbXBs
KGtleS0+dHlwZSgpID09IFFFdmVudDo6S2V5UmVsZWFzZSA/IEtFWVVQX0VWRU5UIDoga2V5LT5p
c0F1dG9SZXBlYXQoKSA/IEtFWVBSRVNTX0VWRU5UIDogS0VZRE9XTl9FVkVOVCwKKyAgOiBVSUV2
ZW50V2l0aEtleVN0YXRlSW1wbChrZXktPnR5cGUoKSA9PSBRRXZlbnQ6OktleVJlbGVhc2UgPyBr
ZXl1cEV2ZW50IDoga2V5LT5pc0F1dG9SZXBlYXQoKSA/IGtleXByZXNzRXZlbnQgOiBrZXlkb3du
RXZlbnQsCiAgICAgdHJ1ZSwgdHJ1ZSwgdmlldywgMCwKICAgICBrZXktPnN0YXRlKCkgJiBRdDo6
Q29udHJvbEJ1dHRvbiwKICAgICBrZXktPnN0YXRlKCkgJiBRdDo6QWx0QnV0dG9uLApAQCAtNTk4
LDcgKzQ0Miw3IEBAIEtleWJvYXJkRXZlbnRJbXBsOjpLZXlib2FyZEV2ZW50SW1wbChRS2UKICAg
ICBtX2tleUxvY2F0aW9uID0gKGtleVN0YXRlICYgUXQ6OktleXBhZCkgPyBLZXlib2FyZEV2ZW50
OjpET01fS0VZX0xPQ0FUSU9OX05VTVBBRCA6IEtleWJvYXJkRXZlbnQ6OkRPTV9LRVlfTE9DQVRJ
T05fU1RBTkRBUkQ7CiB9CiAKLUtleWJvYXJkRXZlbnRJbXBsOjpLZXlib2FyZEV2ZW50SW1wbChF
dmVudElkIF9pZCwKK0tleWJvYXJkRXZlbnRJbXBsOjpLZXlib2FyZEV2ZW50SW1wbChjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywgCkBAIC02MDksNyArNDUz
LDcgQEAgS2V5Ym9hcmRFdmVudEltcGw6OktleWJvYXJkRXZlbnRJbXBsKEV2ZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZykK
LSAgOiBVSUV2ZW50V2l0aEtleVN0YXRlSW1wbChfaWQsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJs
ZUFyZywgdmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0
YUtleUFyZykKKyAgOiBVSUV2ZW50V2l0aEtleVN0YXRlSW1wbChldmVudFR5cGUsIGNhbkJ1YmJs
ZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBz
aGlmdEtleUFyZywgbWV0YUtleUFyZykKIHsKICAgICBtX2tleUV2ZW50ID0gMDsKICAgICBtX2tl
eUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyQXJnLmltcGxlbWVudGF0aW9uKCk7CkBAIC02MjYs
NyArNDcwLDcgQEAgS2V5Ym9hcmRFdmVudEltcGw6On5LZXlib2FyZEV2ZW50SW1wbCgpCiAgICAg
ICAgIG1fa2V5SWRlbnRpZmllci0+ZGVyZWYoKTsKIH0KIAotdm9pZCBLZXlib2FyZEV2ZW50SW1w
bDo6aW5pdEtleWJvYXJkRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAordm9pZCBLZXli
b2FyZEV2ZW50SW1wbDo6aW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
QXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZpZXdJbXBsICp2aWV3QXJnLCAKQEAgLTY1NSwyMCArNDk5LDExIEBAIHZv
aWQgS2V5Ym9hcmRFdmVudEltcGw6OmluaXRLZXlib2FyZEV2ZW4KIAogaW50IEtleWJvYXJkRXZl
bnRJbXBsOjprZXlDb2RlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fa2V5RXZlbnQpIHsKKyAgICBp
ZiAoIW1fa2V5RXZlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBzd2l0Y2ggKG1f
aWQpIHsKLSAgICAgICAgY2FzZSBLRVlET1dOX0VWRU5UOgotICAgICAgICBjYXNlIEtFWVVQX0VW
RU5UOgotI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgICAgICAgIHJldHVybiBtX2tleUV2ZW50LT5X
aW5kb3dzS2V5Q29kZSgpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIG5lZWQgdGhlIGVxdWl2YWxl
bnQgb2YgdGhlIGFib3ZlIGZvciBLREUKLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGNoYXJDb2RlKCk7Ci0gICAgfQorICAgIGlmIChtX3R5cGUgPT0ga2V5ZG93
bkV2ZW50IHx8IG1fdHlwZSA9PSBrZXl1cEV2ZW50KQorICAgICAgICByZXR1cm4gbV9rZXlFdmVu
dC0+V2luZG93c0tleUNvZGUoKTsKKyAgICByZXR1cm4gY2hhckNvZGUoKTsKIH0KIAogaW50IEtl
eWJvYXJkRXZlbnRJbXBsOjpjaGFyQ29kZSgpIGNvbnN0CkBAIC03MDYsNyArNTQxLDcgQEAgTXV0
YXRpb25FdmVudEltcGw6Ok11dGF0aW9uRXZlbnRJbXBsKCkKICAgICBtX2F0dHJDaGFuZ2UgPSAw
OwogfQogCi1NdXRhdGlvbkV2ZW50SW1wbDo6TXV0YXRpb25FdmVudEltcGwoRXZlbnRJZCBfaWQs
CitNdXRhdGlvbkV2ZW50SW1wbDo6TXV0YXRpb25FdmVudEltcGwoY29uc3QgQXRvbWljU3RyaW5n
ICZldmVudFR5cGUsCiAJCQkJICAgICBib29sIGNhbkJ1YmJsZUFyZywKIAkJCQkgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKIAkJCQkgICAgIE5vZGVJbXBsICpyZWxhdGVkTm9kZUFyZywKQEAgLTcx
NCw3ICs1NDksNyBAQCBNdXRhdGlvbkV2ZW50SW1wbDo6TXV0YXRpb25FdmVudEltcGwoRXZlCiAJ
CQkJICAgICBjb25zdCBET01TdHJpbmcgJm5ld1ZhbHVlQXJnLAogCQkJCSAgICAgY29uc3QgRE9N
U3RyaW5nICZhdHRyTmFtZUFyZywKIAkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VB
cmcpCi0JCSAgICAgIDogRXZlbnRJbXBsKF9pZCxjYW5CdWJibGVBcmcsY2FuY2VsYWJsZUFyZykK
KwkJICAgICAgOiBFdmVudEltcGwoZXZlbnRUeXBlLGNhbkJ1YmJsZUFyZyxjYW5jZWxhYmxlQXJn
KQogewogICAgIG1fcmVsYXRlZE5vZGUgPSByZWxhdGVkTm9kZUFyZzsKICAgICBpZiAobV9yZWxh
dGVkTm9kZSkKQEAgLTc0Myw3ICs1NzgsNyBAQCBNdXRhdGlvbkV2ZW50SW1wbDo6fk11dGF0aW9u
RXZlbnRJbXBsKCkKIAltX2F0dHJOYW1lLT5kZXJlZigpOwogfQogCi12b2lkIE11dGF0aW9uRXZl
bnRJbXBsOjppbml0TXV0YXRpb25FdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVBcmcsCit2b2lk
IE11dGF0aW9uRXZlbnRJbXBsOjppbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JnR5cGVBcmcsCiAJCQkJCSAgYm9vbCBjYW5CdWJibGVBcmcsCiAJCQkJCSAgYm9vbCBjYW5jZWxh
YmxlQXJnLAogCQkJCQkgIE5vZGVJbXBsICpyZWxhdGVkTm9kZUFyZywKQEAgLTc5MCw4ICs2MjUs
OCBAQCBDbGlwYm9hcmRFdmVudEltcGw6OkNsaXBib2FyZEV2ZW50SW1wbCgpCiAgICAgbV9jbGlw
Ym9hcmQgPSAwOwogfQogCi1DbGlwYm9hcmRFdmVudEltcGw6OkNsaXBib2FyZEV2ZW50SW1wbChF
dmVudElkIF9pZCwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJv
YXJkSW1wbCAqY2xpcGJvYXJkQXJnKQotICA6IEV2ZW50SW1wbChfaWQsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKK0NsaXBib2FyZEV2ZW50
SW1wbDo6Q2xpcGJvYXJkRXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmRJbXBsICpjbGlw
Ym9hcmRBcmcpCisgICAgOiBFdmVudEltcGwoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNl
bGFibGVBcmcpLCBtX2NsaXBib2FyZChjbGlwYm9hcmRBcmcpCiB7CiAgICAgICBpZiAobV9jbGlw
Ym9hcmQpCiAgICAgICAgICAgbV9jbGlwYm9hcmQtPnJlZigpOwpAQCAtODE2LDcgKzY1MSw3IEBA
IFdoZWVsRXZlbnRJbXBsOjpXaGVlbEV2ZW50SW1wbCgpIDogbV9ob3IKIAogV2hlZWxFdmVudElt
cGw6OldoZWVsRXZlbnRJbXBsKGJvb2wgaCwgbG9uZyBkLCBBYnN0cmFjdFZpZXdJbXBsICp2LAog
ICAgIGxvbmcgc3gsIGxvbmcgc3ksIGxvbmcgY3gsIGxvbmcgY3ksIGJvb2wgY3RybCwgYm9vbCBh
bHQsIGJvb2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50SW1wbCho
ID8gSE9SSVpPTlRBTE1PVVNFV0hFRUxfRVZFTlQgOiBNT1VTRVdIRUVMX0VWRU5ULAorICAgIDog
TW91c2VSZWxhdGVkRXZlbnRJbXBsKGggPyBraHRtbEhvcml6b250YWxtb3VzZXdoZWVsRXZlbnQg
OiBtb3VzZXdoZWVsRXZlbnQsCiAgICAgICAgIHRydWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gs
IGN5LCBjdHJsLCBhbHQsIHNoaWZ0LCBtZXRhKQogICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3do
ZWVsRGVsdGEoZCkKIHsKQEAgLTgyOSwyMyArNjY0LDIxIEBAIGJvb2wgV2hlZWxFdmVudEltcGw6
OmlzV2hlZWxFdmVudCgpIGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6RXZl
bnRJZCBfaWQsIEV2ZW50TGlzdGVuZXIgKl9saXN0ZW5lciwgYm9vbCBfdXNlQ2FwdHVyZSkKK1Jl
Z2lzdGVyZWRFdmVudExpc3RlbmVyOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2Fw
dHVyZSkKKyAgICA6IG1fZXZlbnRUeXBlKGV2ZW50VHlwZSksIG1fbGlzdGVuZXIobGlzdGVuZXIp
LCBtX3VzZUNhcHR1cmUodXNlQ2FwdHVyZSkKIHsKLSAgICBpZCA9IF9pZDsKLSAgICBsaXN0ZW5l
ciA9IF9saXN0ZW5lcjsKLSAgICB1c2VDYXB0dXJlID0gX3VzZUNhcHR1cmU7CisgICAgYXNzZXJ0
KGxpc3RlbmVyKTsKICAgICBsaXN0ZW5lci0+cmVmKCk7CiB9CiAKLVJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyOjp+UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoKSB7Ci0gICAgbGlzdGVuZXItPmRlcmVm
KCk7CitSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6flJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKCkK
K3sKKyAgICBtX2xpc3RlbmVyLT5kZXJlZigpOwogfQogCi1ib29sIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyOjpvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZvdGhlcikK
K2Jvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmYSwgY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmIpCiB7Ci0gICAgcmV0dXJuIChpZCA9PSBvdGhlci5p
ZCAmJgotCSAgICBsaXN0ZW5lciA9PSBvdGhlci5saXN0ZW5lciAmJgotCSAgICB1c2VDYXB0dXJl
ID09IG90aGVyLnVzZUNhcHR1cmUpOworICAgIHJldHVybiBhLmV2ZW50VHlwZSgpID09IGIuZXZl
bnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09IGIubGlzdGVuZXIoKSAmJiBhLnVzZUNhcHR1cmUo
KSA9PSBiLnVzZUNhcHR1cmUoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1
MywzICs2ODYsNSBAQCBib29sIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09CiBD
bGlwYm9hcmRJbXBsOjp+Q2xpcGJvYXJkSW1wbCgpCiB7CiB9CisKK30KSW5kZXg6IGtodG1sL3ht
bC9kb20yX2V2ZW50c2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjgK
ZGlmZiAtcCAtdSAtcjEuMjgga2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oCi0tLSBraHRtbC94
bWwvZG9tMl9ldmVudHNpbXBsLmgJMTAgTWF5IDIwMDUgMjE6NTk6MTQgLTAwMDAJMS4yOAorKysg
a2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oCTIxIEF1ZyAyMDA1IDAxOjU2OjI2IC0wMDAwCkBA
IC0yMiwxMiArMjIsMTIgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfRE9NX0V2ZW50c0ltcGxfaF8K
LSNkZWZpbmUgX0RPTV9FdmVudHNJbXBsX2hfCisjaWZuZGVmIERPTV9FVkVOVFNJTVBMX0gKKyNk
ZWZpbmUgRE9NX0VWRU5UU0lNUExfSAogCiAjaW5jbHVkZSA8cWRhdGV0aW1lLmg+CiAjaW5jbHVk
ZSAiZG9tL2RvbV9ub2RlLmgiCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKKyNpbmNsdWRl
ICJ4bWwvZG9tX2F0b21pY3N0cmluZy5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAKIGNs
YXNzIEtIVE1MUGFydDsKQEAgLTQ0LDEwOSArNDQsMjggQEAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
IGNsYXNzIE5vZGVJbXBsOwogY2xhc3MgQ2xpcGJvYXJkSW1wbDsKIAotLy8gIyMjIHN1cHBvcnQg
dXNlci1kZWZpbmVkIGV2ZW50cwotCiBjbGFzcyBFdmVudEltcGwgOiBwdWJsaWMga2h0bWw6OlNo
YXJlZDxFdmVudEltcGw+CiB7CiBwdWJsaWM6Ci0gICAgZW51bSBFdmVudElkIHsKLQlVTktOT1dO
X0VWRU5UID0gMCwKLQkvLyBVSSBldmVudHMKLSAgICAgICAgRE9NRk9DVVNJTl9FVkVOVCwKLSAg
ICAgICAgRE9NRk9DVVNPVVRfRVZFTlQsCi0gICAgICAgIERPTUFDVElWQVRFX0VWRU5ULAotICAg
ICAgICAvLyBNb3VzZSBldmVudHMKLSAgICAgICAgQ0xJQ0tfRVZFTlQsCi0gICAgICAgIE1PVVNF
RE9XTl9FVkVOVCwKLSAgICAgICAgTU9VU0VVUF9FVkVOVCwKLSAgICAgICAgTU9VU0VPVkVSX0VW
RU5ULAotICAgICAgICBNT1VTRU1PVkVfRVZFTlQsCi0gICAgICAgIE1PVVNFT1VUX0VWRU5ULAot
ICAgICAgICAvLyBJRSBjb3B5L3Bhc3RlIGV2ZW50cwotICAgICAgICBCRUZPUkVDVVRfRVZFTlQs
Ci0gICAgICAgIENVVF9FVkVOVCwKLSAgICAgICAgQkVGT1JFQ09QWV9FVkVOVCwKLSAgICAgICAg
Q09QWV9FVkVOVCwKLSAgICAgICAgQkVGT1JFUEFTVEVfRVZFTlQsCi0gICAgICAgIFBBU1RFX0VW
RU5ULAotICAgICAgICAvLyBJRSBkcmFnIGFuZCBkcm9wIGV2ZW50cwotICAgICAgICBEUkFHRU5U
RVJfRVZFTlQsCi0gICAgICAgIERSQUdPVkVSX0VWRU5ULAotICAgICAgICBEUkFHTEVBVkVfRVZF
TlQsCi0gICAgICAgIERST1BfRVZFTlQsCi0gICAgICAgIERSQUdTVEFSVF9FVkVOVCwKLSAgICAg
ICAgRFJBR19FVkVOVCwKLSAgICAgICAgRFJBR0VORF9FVkVOVCwKLQkvLyBJRSBzZWxlY3Rpb24g
ZXZlbnRzCi0JU0VMRUNUU1RBUlRfRVZFTlQsCi0gICAgICAgIC8vIE11dGF0aW9uIGV2ZW50cwot
ICAgICAgICBET01TVUJUUkVFTU9ESUZJRURfRVZFTlQsCi0gICAgICAgIERPTU5PREVJTlNFUlRF
RF9FVkVOVCwKLSAgICAgICAgRE9NTk9ERVJFTU9WRURfRVZFTlQsCi0gICAgICAgIERPTU5PREVS
RU1PVkVERlJPTURPQ1VNRU5UX0VWRU5ULAotICAgICAgICBET01OT0RFSU5TRVJURURJTlRPRE9D
VU1FTlRfRVZFTlQsCi0gICAgICAgIERPTUFUVFJNT0RJRklFRF9FVkVOVCwKLSAgICAgICAgRE9N
Q0hBUkFDVEVSREFUQU1PRElGSUVEX0VWRU5ULAotCS8vIEhUTUwgZXZlbnRzCi0JTE9BRF9FVkVO
VCwKLQlVTkxPQURfRVZFTlQsCi0JQUJPUlRfRVZFTlQsCi0JRVJST1JfRVZFTlQsCi0JU0VMRUNU
X0VWRU5ULAotCUNIQU5HRV9FVkVOVCwKLQlTVUJNSVRfRVZFTlQsCi0JUkVTRVRfRVZFTlQsCi0J
Rk9DVVNfRVZFTlQsCi0JQkxVUl9FVkVOVCwKLQlSRVNJWkVfRVZFTlQsCi0JU0NST0xMX0VWRU5U
LAotICAgICAgICBDT05URVhUTUVOVV9FVkVOVCwKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgICAg
IFNFQVJDSF9FVkVOVCwKLSNlbmRpZgotICAgICAgICBJTlBVVF9FVkVOVCwKLSAgICAgICAgLy8g
S2V5Ym9hcmQgZXZlbnRzCi0JS0VZRE9XTl9FVkVOVCwKLQlLRVlVUF9FVkVOVCwKLSAgICAgICAg
Ly8gVGV4dCBldmVudHMKLSAgICAgICAgVEVYVElOUFVUX0VWRU5ULAotCS8vIGtodG1sIGV2ZW50
cyAobm90IHBhcnQgb2YgRE9NKQotCUtIVE1MX0RCTENMSUNLX0VWRU5ULCAvLyBmb3IgaHRtbCBv
bmRibGNsaWNrCi0JS0hUTUxfQ0xJQ0tfRVZFTlQsIC8vIGZvciBodG1sIG9uY2xpY2sKLQlLSFRN
TF9EUkFHRFJPUF9FVkVOVCwKLQlLSFRNTF9FUlJPUl9FVkVOVCwKLQlLRVlQUkVTU19FVkVOVCwK
LQlLSFRNTF9NT1ZFX0VWRU5ULAotCUtIVE1MX09SSUdDTElDS19NT1VTRVVQX0VWRU5ULAotCS8v
IFhNTEh0dHBSZXF1ZXN0IGV2ZW50cwotCUtIVE1MX1JFQURZU1RBVEVDSEFOR0VfRVZFTlQsCi0g
ICAgICAgIC8vIGV4dGVuc2lvbnMKLSAgICAgICAgTU9VU0VXSEVFTF9FVkVOVCwKLSAgICAgICAg
SE9SSVpPTlRBTE1PVVNFV0hFRUxfRVZFTlQsCi0gICAgICAgIG51bUV2ZW50SWRzCi0gICAgfTsK
LQogICAgIEV2ZW50SW1wbCgpOwotICAgIEV2ZW50SW1wbChFdmVudElkIF9pZCwgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7CisgICAgRXZlbnRJbXBsKGNvbnN0IEF0b21p
Y1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7CiAg
ICAgdmlydHVhbCB+RXZlbnRJbXBsKCk7CiAKICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAK
LSAgICBFdmVudElkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotCi0gICAgRE9NU3RyaW5n
IHR5cGUoKSBjb25zdDsKLSAgICBOb2RlSW1wbCAqdGFyZ2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRUYXJnZXQoTm9kZUltcGwgKl90YXJnZXQpOwotICAgIE5vZGVJbXBsICpjdXJyZW50VGFyZ2V0
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGVJbXBsICpfY3VycmVudFRh
cmdldCk7Ci0gICAgdW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0RXZlbnRQaGFzZSh1bnNpZ25lZCBzaG9ydCBfZXZlbnRQaGFzZSk7Ci0gICAgYm9vbCBidWJi
bGVzKCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3Q7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nICZ0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgTm9kZUltcGwg
KnRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAgdm9pZCBzZXRUYXJnZXQo
Tm9kZUltcGwgKnRhcmdldCk7CisgICAgTm9kZUltcGwgKmN1cnJlbnRUYXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRUYXJnZXQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoTm9k
ZUltcGwgKmN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsg
fQorICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50
UGhhc2U7IH0KKyAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgZXZlbnRQaGFz
ZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9CisgICAgYm9vbCBidWJibGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KKyAgICBib29sIGNhbmNlbGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2NhbmNlbGFibGU7IH0KICAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCk7Ci0g
ICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKTsKKyAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpIHsg
bV9wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9CiAgICAgdm9pZCBwcmV2ZW50RGVmYXVsdCgp
OwotICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0IERPTVN0cmluZyAmZXZlbnRUeXBlQXJnLCBib29s
IGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKKyAgICB2b2lkIGluaXRFdmVudChj
b25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wg
Y2FuY2VsYWJsZUFyZyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwpAQCAtMTU5LDkgKzc4LDYgQEAg
cHVibGljOgogICAgIGJvb2wgcHJvcGFnYXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wYWdhdGlvblN0b3BwZWQ7IH0KICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7
IHJldHVybiBtX2RlZmF1bHRQcmV2ZW50ZWQ7IH0KIAotICAgIHN0YXRpYyBFdmVudElkIHR5cGVU
b0lkKGNvbnN0IERPTVN0cmluZyAmdHlwZSk7Ci0gICAgc3RhdGljIERPTVN0cmluZyBpZFRvVHlw
ZShFdmVudElkIGlkKTsKLQogICAgIHZvaWQgc2V0RGVmYXVsdEhhbmRsZWQoKSB7IG1fZGVmYXVs
dEhhbmRsZWQgPSB0cnVlOyB9CiAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVmYXVsdEhhbmRsZWQ7IH0KIApAQCAtMTcwLDcgKzg2LDcgQEAgcHVibGljOgogICAg
IGJvb2wgZ2V0Q2FuY2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0K
IAogcHJvdGVjdGVkOgotICAgIERPTVN0cmluZ0ltcGwgKm1fdHlwZTsKKyAgICBBdG9taWNTdHJp
bmcgbV90eXBlOwogICAgIGJvb2wgbV9jYW5CdWJibGU7CiAgICAgYm9vbCBtX2NhbmNlbGFibGU7
CiAKQEAgLTE3OSw3ICs5NSw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fZGVmYXVsdEhhbmRs
ZWQ7CiAgICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKIAotICAgIEV2ZW50SWQgbV9pZDsKICAgICBO
b2RlSW1wbCAqbV9jdXJyZW50VGFyZ2V0OyAvLyByZWYgPiAwIG1haW50YWluZWQgZXh0ZXJuYWxs
eQogICAgIHVuc2lnbmVkIHNob3J0IG1fZXZlbnRQaGFzZTsKICAgICBOb2RlSW1wbCAqbV90YXJn
ZXQ7CkBAIC0xOTIsNyArMTA3LDcgQEAgY2xhc3MgVUlFdmVudEltcGwgOiBwdWJsaWMgRXZlbnRJ
bXBsCiB7CiBwdWJsaWM6CiAgICAgVUlFdmVudEltcGwoKTsKLSAgICBVSUV2ZW50SW1wbChFdmVu
dElkIF9pZCwKKyAgICBVSUV2ZW50SW1wbChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCiAJCWJv
b2wgY2FuQnViYmxlQXJnLAogCQlib29sIGNhbmNlbGFibGVBcmcsCiAJCUFic3RyYWN0Vmlld0lt
cGwgKnZpZXdBcmcsCkBAIC0yMDAsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflVJ
RXZlbnRJbXBsKCk7CiAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlldygpIGNvbnN0IHsgcmV0dXJu
IG1fdmlldzsgfQogICAgIGxvbmcgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWw7IH0K
LSAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywKKyAgICB2b2lk
IGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKIAkJICAgICBib29sIGNh
bkJ1YmJsZUFyZywKIAkJICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAJCSAgICAgQWJzdHJhY3RW
aWV3SW1wbCAqdmlld0FyZywKQEAgLTIyNyw5ICsxNDIsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBV
SUV2ZW50V2l0aEtleVN0YXRlSW1wbCA6IHB1YmxpYyBVSUV2ZW50SW1wbCB7CiBwdWJsaWM6CiAg
ICAgVUlFdmVudFdpdGhLZXlTdGF0ZUltcGwoKSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5
KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSksIG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlF
dmVudFdpdGhLZXlTdGF0ZUltcGwoRXZlbnRJZCBldmVudElELCBib29sIGNhbkJ1YmJsZUFyZywg
Ym9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZpZXdJbXBsICp2aWV3QXJnLAorICAgIFVJRXZl
bnRXaXRoS2V5U3RhdGVJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJi
bGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKICAg
ICAgICAgbG9uZyBkZXRhaWxBcmcsIGJvb2wgY3RybEtleUFyZywgYm9vbCBhbHRLZXlBcmcsIGJv
b2wgc2hpZnRLZXlBcmcsIGJvb2wgbWV0YUtleUFyZykKLSAgICAgICAgOiBVSUV2ZW50SW1wbChl
dmVudElELCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZykK
KyAgICAgICAgOiBVSUV2ZW50SW1wbCh0eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcs
IHZpZXdBcmcsIGRldGFpbEFyZykKICAgICAgICAgLCBtX2N0cmxLZXkoY3RybEtleUFyZyksIG1f
YWx0S2V5KGFsdEtleUFyZyksIG1fc2hpZnRLZXkoc2hpZnRLZXlBcmcpLCBtX21ldGFLZXkobWV0
YUtleUFyZykgeyB9CiAKICAgICBib29sIGN0cmxLZXkoKSBjb25zdCB7IHJldHVybiBtX2N0cmxL
ZXk7IH0KQEAgLTI0OCw3ICsxNjMsNyBAQCBwcm90ZWN0ZWQ6IC8vIGV4cG9zZSB0aGVzZSBzbyBp
bml0IGZ1bmN0CiBjbGFzcyBNb3VzZVJlbGF0ZWRFdmVudEltcGwgOiBwdWJsaWMgVUlFdmVudFdp
dGhLZXlTdGF0ZUltcGwgewogcHVibGljOgogICAgIE1vdXNlUmVsYXRlZEV2ZW50SW1wbCgpOwot
ICAgIE1vdXNlUmVsYXRlZEV2ZW50SW1wbChFdmVudElkIF9pZCwKKyAgICBNb3VzZVJlbGF0ZWRF
dmVudEltcGwoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbkJ1YmJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5jZWxhYmxlQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXdJbXBs
ICp2aWV3QXJnLApAQCAtMjg0LDcgKzE5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBNb3VzZUV2ZW50
SW1wbCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudEltcGwgewogcHVibGljOgogICAgIE1vdXNl
RXZlbnRJbXBsKCk7Ci0gICAgTW91c2VFdmVudEltcGwoRXZlbnRJZCBfaWQsCisgICAgTW91c2VF
dmVudEltcGwoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAogCQkgICBib29sIGNhbkJ1YmJsZUFy
ZywKIAkJICAgYm9vbCBjYW5jZWxhYmxlQXJnLAogCQkgICBBYnN0cmFjdFZpZXdJbXBsICp2aWV3
QXJnLApAQCAtMzA0LDcgKzIxOSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaG9ydCBidXR0
b24oKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbjsgfQogICAgIE5vZGVJbXBsICpyZWxhdGVkVGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0OyB9CiAgICAgQ2xpcGJvYXJkSW1w
bCAqY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQ7IH0KLSAgICB2b2lkIGlu
aXRNb3VzZUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywKKyAgICB2b2lkIGluaXRNb3Vz
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKIAkJCWJvb2wgY2FuQnViYmxlQXJn
LAogCQkJYm9vbCBjYW5jZWxhYmxlQXJnLAogCQkJQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywK
QEAgLTMzNCw3ICsyNDksNyBAQCBjbGFzcyBLZXlib2FyZEV2ZW50SW1wbCA6IHB1YmxpYyBVSUV2
ZW50CiBwdWJsaWM6CiAgICAgS2V5Ym9hcmRFdmVudEltcGwoKTsKICAgICBLZXlib2FyZEV2ZW50
SW1wbChRS2V5RXZlbnQgKmtleSwgQWJzdHJhY3RWaWV3SW1wbCAqdmlldyk7Ci0gICAgS2V5Ym9h
cmRFdmVudEltcGwoRXZlbnRJZCBfaWQsCisgICAgS2V5Ym9hcmRFdmVudEltcGwoY29uc3QgQXRv
bWljU3RyaW5nICZ0eXBlLAogICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogICAg
ICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKICAgICAgICAgICAgICAgICBBYnN0cmFj
dFZpZXdJbXBsICp2aWV3QXJnLApAQCAtMzQ3LDcgKzI2Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKTsKICAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50
SW1wbCgpOwogICAgIAotICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgRE9NU3RyaW5n
ICZ0eXBlQXJnLAorICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
ICZ0eXBlQXJnLAogICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXdJ
bXBsICp2aWV3QXJnLApAQCAtMzgzLDcgKzI5OCw3IEBAIGNsYXNzIE11dGF0aW9uRXZlbnRJbXBs
IDogcHVibGljIEV2ZW50SW0KIC8vICMjIyBmaXJlIHRoZXNlIGR1cmluZyBwYXJzaW5nIChpZiBu
ZWNlc3NhcnkpCiBwdWJsaWM6CiAgICAgTXV0YXRpb25FdmVudEltcGwoKTsKLSAgICBNdXRhdGlv
bkV2ZW50SW1wbChFdmVudElkIF9pZCwKKyAgICBNdXRhdGlvbkV2ZW50SW1wbChjb25zdCBBdG9t
aWNTdHJpbmcgJnR5cGUsCiAJCSAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogCQkgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCiAJCSAgICAgIE5vZGVJbXBsICpyZWxhdGVkTm9kZUFyZywKQEAgLTM5
OCw3ICszMTMsNyBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIG5ld1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIERPTVN0cmluZyBhdHRyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0ck5hbWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyQ2hhbmdlOyB9Ci0gICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25z
dCBET01TdHJpbmcgJnR5cGVBcmcsCisgICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJnR5cGVBcmcsCiAJCQkgICBib29sIGNhbkJ1YmJsZUFyZywKIAkJCSAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKIAkJCSAgIE5vZGVJbXBsICpyZWxhdGVkTm9kZUFyZywKQEAgLTQx
OCw3ICszMzMsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDbGlwYm9hcmRFdmVudEltcGwgOiBwdWJs
aWMgRXZlbnRJbXBsIHsKIHB1YmxpYzoKICAgICBDbGlwYm9hcmRFdmVudEltcGwoKTsKLSAgICBD
bGlwYm9hcmRFdmVudEltcGwoRXZlbnRJZCBfaWQsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcsIENsaXBib2FyZEltcGwgKmNsaXBib2FyZEFyZyk7CisgICAgQ2xpcGJvYXJk
RXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJv
b2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkSW1wbCAqY2xpcGJvYXJkQXJnKTsKICAgICB+Q2xp
cGJvYXJkRXZlbnRJbXBsKCk7CiAKICAgICBDbGlwYm9hcmRJbXBsICpjbGlwYm9hcmQoKSBjb25z
dCB7IHJldHVybiBtX2NsaXBib2FyZDsgfQpAQCAtNDQ4LDIxICszNjMsMjcgQEAgcHJpdmF0ZToK
IAogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6RXZlbnRJZCBfaWQsIEV2ZW50TGlzdGVuZXIgKl9s
aXN0ZW5lciwgYm9vbCBfdXNlQ2FwdHVyZSk7CisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpOwogICAgIH5SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcigpOwogCiAgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOwogICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmb3RoZXIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFR5cGU7IH0KKyAgICBFdmVudExpc3Rl
bmVyICpsaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdGVuZXI7IH0KKyAgICBib29sIHVz
ZUNhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZUNhcHR1cmU7IH0KIAotICAgIEV2ZW50SW1w
bDo6RXZlbnRJZCBpZDsKLSAgICBFdmVudExpc3RlbmVyICpsaXN0ZW5lcjsKLSAgICBib29sIHVz
ZUNhcHR1cmU7CiBwcml2YXRlOgotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKCBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmICk7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIg
JiBvcGVyYXRvcj0oIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICYgKTsKKyAgICBBdG9t
aWNTdHJpbmcgbV9ldmVudFR5cGU7CisgICAgRXZlbnRMaXN0ZW5lciAqbV9saXN0ZW5lcjsKKyAg
ICBib29sIG1fdXNlQ2FwdHVyZTsKKworICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICYpOworICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
ICZvcGVyYXRvcj0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJik7CiB9OwogCitib29s
IG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJiwgY29uc3QgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXIgJik7CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyICZhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmYikg
eyByZXR1cm4gIShhID09IGIpOyB9CisKIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBl
dmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKIGNsYXNzIENsaXBib2FyZElt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxDbGlwYm9hcmRJbXBsPiB7CiBwdWJsaWM6CkluZGV4
OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgK
LS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMTkgSnVsIDIwMDUgMjM6NDQ6MDcgLTAw
MDAJMS42CisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTIxIEF1ZyAyMDA1IDAxOjU2
OjI2IC0wMDAwCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1v
dmUoRE9NU3RyaW5nSW1wbCAqKTsKICAgICAKICNpZmRlZiBfX09CSkNfXwotICAgIEF0b21pY1N0
cmluZyhOU1N0cmluZyAqKTsKKyAgICBBdG9taWNTdHJpbmcoTlNTdHJpbmcgKnMpIDogbV9zdHJp
bmcoYWRkKERPTVN0cmluZyhzKS5pbXBsZW1lbnRhdGlvbigpKSkgeyB9CiAgICAgb3BlcmF0b3Ig
TlNTdHJpbmcgKigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAjZW5kaWYKIApJbmRleDog
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjI0NgpkaWZmIC1wIC11IC1yMS4yNDYga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAotLS0ga2h0
bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkxOSBBdWcgMjAwNSAyMzowOToxOCAtMDAwMAkxLjI0Ngor
Kysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkyMSBBdWcgMjAwNSAwMTo1NjozMSAtMDAwMApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogI2luY2x1
ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwu
aCIKKyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgInhtbC94bWxfdG9rZW5p
emVyLmgiCiAKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCkBAIC05Miw2ICs5Myw3IEBAIHVz
aW5nIFhCTDo6WEJMQmluZGluZ01hbmFnZXI7CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIERP
TTsKK3VzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCkBAIC0xMzI0LDcgKzEzMjYsNyBAQCB2
b2lkIERvY3VtZW50SW1wbDo6aW1wbGljaXRDbG9zZSgpCiAKICAgICAgICAgaWYgKGJvZHkpIHsK
ICAgICAgICAgICAgIGRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRzTm93KCk7Ci0gICAgICAgICAgICBi
b2R5LT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50SW1wbDo6TE9BRF9FVkVOVCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoV2luZG93RXZlbnQobG9hZEV2ZW50LCBm
YWxzZSwgZmFsc2UpOwogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgIEtXUShwYXJ0KCkp
LT5oYW5kbGVkT25sb2FkRXZlbnRzKCk7CiAjZW5kaWYKQEAgLTIxOTQsMTMgKzIxOTYsMTMgQEAg
Ym9vbCBEb2N1bWVudEltcGw6OnNldEZvY3VzTm9kZShOb2RlSW1wbAogICAgICAgICAgICAgb2xk
Rm9jdXNOb2RlLT5zZXRBY3RpdmUoZmFsc2UpOwogCiAgICAgICAgIG9sZEZvY3VzTm9kZS0+c2V0
Rm9jdXMoZmFsc2UpOwotICAgICAgICBvbGRGb2N1c05vZGUtPmRpc3BhdGNoSFRNTEV2ZW50KEV2
ZW50SW1wbDo6QkxVUl9FVkVOVCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgb2xkRm9jdXNOb2Rl
LT5kaXNwYXRjaEhUTUxFdmVudChibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlm
IChtX2ZvY3VzTm9kZSAhPSAwKSB7CiAgICAgICAgICAgICAvLyBoYW5kbGVyIHNoaWZ0ZWQgZm9j
dXMKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CiAgICAgICAgICAgICBu
ZXdGb2N1c05vZGUgPSAwOwogICAgICAgICB9Ci0gICAgICAgIG9sZEZvY3VzTm9kZS0+ZGlzcGF0
Y2hVSUV2ZW50KEV2ZW50SW1wbDo6RE9NRk9DVVNPVVRfRVZFTlQpOworICAgICAgICBvbGRGb2N1
c05vZGUtPmRpc3BhdGNoVUlFdmVudChET01Gb2N1c091dEV2ZW50KTsKICAgICAgICAgaWYgKG1f
Zm9jdXNOb2RlICE9IDApIHsKICAgICAgICAgICAgIC8vIGhhbmRsZXIgc2hpZnRlZCBmb2N1cwog
ICAgICAgICAgICAgZm9jdXNDaGFuZ2VCbG9ja2VkID0gdHJ1ZTsKQEAgLTIyMzQsMTMgKzIyMzYs
MTMgQEAgYm9vbCBEb2N1bWVudEltcGw6OnNldEZvY3VzTm9kZShOb2RlSW1wbAogICAgICAgICAv
LyBTZXQgZm9jdXMgb24gdGhlIG5ldyBub2RlCiAgICAgICAgIG1fZm9jdXNOb2RlID0gbmV3Rm9j
dXNOb2RlOwogICAgICAgICBtX2ZvY3VzTm9kZS0+cmVmKCk7Ci0gICAgICAgIG1fZm9jdXNOb2Rl
LT5kaXNwYXRjaEhUTUxFdmVudChFdmVudEltcGw6OkZPQ1VTX0VWRU5ULCBmYWxzZSwgZmFsc2Up
OworICAgICAgICBtX2ZvY3VzTm9kZS0+ZGlzcGF0Y2hIVE1MRXZlbnQoZm9jdXNFdmVudCwgZmFs
c2UsIGZhbHNlKTsKICAgICAgICAgaWYgKG1fZm9jdXNOb2RlICE9IG5ld0ZvY3VzTm9kZSkgewog
ICAgICAgICAgICAgLy8gaGFuZGxlciBzaGlmdGVkIGZvY3VzCiAgICAgICAgICAgICBmb2N1c0No
YW5nZUJsb2NrZWQgPSB0cnVlOwogICAgICAgICAgICAgZ290byBTZXRGb2N1c05vZGVEb25lOwog
ICAgICAgICB9Ci0gICAgICAgIG1fZm9jdXNOb2RlLT5kaXNwYXRjaFVJRXZlbnQoRXZlbnRJbXBs
OjpET01GT0NVU0lOX0VWRU5UKTsKKyAgICAgICAgbV9mb2N1c05vZGUtPmRpc3BhdGNoVUlFdmVu
dChET01Gb2N1c0luRXZlbnQpOwogICAgICAgICBpZiAobV9mb2N1c05vZGUgIT0gbmV3Rm9jdXNO
b2RlKSB7IAogICAgICAgICAgICAgLy8gaGFuZGxlciBzaGlmdGVkIGZvY3VzCiAgICAgICAgICAg
ICBmb2N1c0NoYW5nZUJsb2NrZWQgPSB0cnVlOwpAQCAtMjM0MCwxNCArMjM0MiwxMiBAQCB2b2lk
IERvY3VtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFCiAgICAgLy8gaWYgYW55IGh0bWwg
ZXZlbnQgbGlzdGVuZXJzIGFyZSByZWdpc3RlcmVkIG9uIHRoZSB3aW5kb3csIHRoZW4gZGlzcGF0
Y2ggdGhlbSBoZXJlCiAgICAgUVB0ckxpc3Q8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyc0NvcHkgPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzOwogICAgIFFQdHJMaXN0SXRlcmF0b3I8
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KGxpc3RlbmVyc0NvcHkpOwotICAgIGZvciAoOyBp
dC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aWQgPT0gZXZ0
LT5pZCgpKSB7Ci0gICAgICAgICAgICBpdC5jdXJyZW50KCktPmxpc3RlbmVyLT5oYW5kbGVFdmVu
dEltcGwoZXZ0LCB0cnVlKTsKLQl9Ci0gICAgfQorICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsr
aXQpCisgICAgICAgIGlmIChpdC5jdXJyZW50KCktPmV2ZW50VHlwZSgpID09IGV2dC0+dHlwZSgp
KQorICAgICAgICAgICAgaXQuY3VycmVudCgpLT5saXN0ZW5lcigpLT5oYW5kbGVFdmVudEltcGwo
ZXZ0LCB0cnVlKTsKIAogICAgIC8vIGhhbmRsZSBhY2Nlc3NrZXkKLSAgICBpZiAoZXZ0LT5pZCgp
PT1FdmVudEltcGw6OktFWURPV05fRVZFTlQpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCk9PWtleWRv
d25FdmVudCkgewogICAgICAgICBLZXlib2FyZEV2ZW50SW1wbCAqa2V2dCA9IHN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnRJbXBsICo+KGV2dCk7CiAgICAgICAgIGlmIChrZXZ0LT5jdHJsS2V5KCkp
IHsKICAgICAgICAgICAgIFFLZXlFdmVudCAqcWV2dCA9IGtldnQtPnFLZXlFdmVudCgpOwpAQCAt
MjM2MSw2MSArMjM2MSw1MiBAQCB2b2lkIERvY3VtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50SW1wbDo6c2V0SFRNTFdpbmRvd0V2ZW50TGlz
dGVuZXIoaW50IGlkLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lcikKK3ZvaWQgRG9jdW1lbnRJbXBs
OjpzZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIpCiB7CiAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZl
IGl0IHdlIGRvbid0IHdhbnQgcmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciB0byBkZWxldGUgaXQK
ICAgICBpZiAobGlzdGVuZXIpCiAJbGlzdGVuZXItPnJlZigpOwotICAgIHJlbW92ZUhUTUxXaW5k
b3dFdmVudExpc3RlbmVyKGlkKTsKKyAgICByZW1vdmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUpOwogICAgIGlmIChsaXN0ZW5lcikgewotCWFkZFdpbmRvd0V2ZW50TGlzdGVuZXIo
aWQsIGxpc3RlbmVyLCBmYWxzZSk7CisJYWRkV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUs
IGxpc3RlbmVyLCBmYWxzZSk7CiAJbGlzdGVuZXItPmRlcmVmKCk7CiAgICAgfQogfQogCi1FdmVu
dExpc3RlbmVyICpEb2N1bWVudEltcGw6OmdldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGludCBp
ZCkKK0V2ZW50TGlzdGVuZXIgKkRvY3VtZW50SW1wbDo6Z2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCiB7CiAgICAgUVB0ckxpc3RJdGVyYXRv
cjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gaXQobV93aW5kb3dFdmVudExpc3RlbmVycyk7Ci0g
ICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotCWlmIChpdC5jdXJyZW50KCktPmlkID09
IGlkICYmCi0gICAgICAgICAgICBpdC5jdXJyZW50KCktPmxpc3RlbmVyLT5ldmVudExpc3RlbmVy
VHlwZSgpID09ICJfa2h0bWxfSFRNTEV2ZW50TGlzdGVuZXIiKSB7Ci0JICAgIHJldHVybiBpdC5j
dXJyZW50KCktPmxpc3RlbmVyOwotCX0KLSAgICB9Ci0KKyAgICBmb3IgKDsgaXQuY3VycmVudCgp
OyArK2l0KQorCWlmIChpdC5jdXJyZW50KCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiBp
dC5jdXJyZW50KCktPmxpc3RlbmVyKCktPmV2ZW50TGlzdGVuZXJUeXBlKCkgPT0gIl9raHRtbF9I
VE1MRXZlbnRMaXN0ZW5lciIpCisJICAgIHJldHVybiBpdC5jdXJyZW50KCktPmxpc3RlbmVyKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRG9jdW1lbnRJbXBsOjpyZW1vdmVIVE1MV2luZG93
RXZlbnRMaXN0ZW5lcihpbnQgaWQpCit2b2lkIERvY3VtZW50SW1wbDo6cmVtb3ZlSFRNTFdpbmRv
d0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCiB7CiAgICAgUVB0
ckxpc3RJdGVyYXRvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gaXQobV93aW5kb3dFdmVudExp
c3RlbmVycyk7Ci0gICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotCWlmIChpdC5jdXJy
ZW50KCktPmlkID09IGlkICYmCi0gICAgICAgICAgICBpdC5jdXJyZW50KCktPmxpc3RlbmVyLT5l
dmVudExpc3RlbmVyVHlwZSgpID09ICJfa2h0bWxfSFRNTEV2ZW50TGlzdGVuZXIiKSB7CisgICAg
Zm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKKwlpZiAoaXQuY3VycmVudCgpLT5ldmVudFR5cGUo
KSA9PSBldmVudFR5cGUgJiYgaXQuY3VycmVudCgpLT5saXN0ZW5lcigpLT5ldmVudExpc3RlbmVy
VHlwZSgpID09ICJfa2h0bWxfSFRNTEV2ZW50TGlzdGVuZXIiKSB7CiAJICAgIG1fd2luZG93RXZl
bnRMaXN0ZW5lcnMucmVtb3ZlUmVmKGl0LmN1cnJlbnQoKSk7CiAJICAgIHJldHVybjsKIAl9Ci0g
ICAgfQogfQogCi12b2lkIERvY3VtZW50SW1wbDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihpbnQg
aWQsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBjb25zdCBib29sIHVzZUNhcHR1cmUpCit2b2lk
IERvY3VtZW50SW1wbDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2FwdHVy
ZSkKIHsKICAgICBsaXN0ZW5lci0+cmVmKCk7CiAKLSAgICAvLyByZW1vdmUgZXhpc3RpbmcgaWRl
bnRpY2FsIGxpc3RlbmVyIHNldCB3aXRoIGlkZW50aWNhbCBhcmd1bWVudHMgLSB0aGUgRE9NMgot
ICAgIC8vIHNwZWMgc2F5cyB0aGF0ICJkdXBsaWNhdGUgaW5zdGFuY2VzIGFyZSBkaXNjYXJkZWQi
IGluIHRoaXMgY2FzZS4KLSAgICByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKGlkLGxpc3RlbmVy
LHVzZUNhcHR1cmUpOwotCi0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgKnJsID0gbmV3IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyKHN0YXRpY19jYXN0PEV2ZW50SW1wbDo6RXZlbnRJZD4oaWQp
LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0gICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5hcHBl
bmQocmwpOworICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGljYWwgbGlzdGVuZXIgc2V0IHdp
dGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KKyAgICAvLyBUaGUgRE9NIDIgc3BlYyBzYXlzIHRoYXQg
ImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgorICAgIHJl
bW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CisgICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5hcHBlbmQobmV3IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKTsKIAogICAgIGxpc3RlbmVy
LT5kZXJlZigpOwogfQogCi12b2lkIERvY3VtZW50SW1wbDo6cmVtb3ZlV2luZG93RXZlbnRMaXN0
ZW5lcihpbnQgaWQsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2
b2lkIERvY3VtZW50SW1wbDo6cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKIHsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBybChzdGF0aWNfY2FzdDxFdmVudElt
cGw6OkV2ZW50SWQ+KGlkKSxsaXN0ZW5lcix1c2VDYXB0dXJlKTsKLQorICAgIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyIHJsKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgIFFQ
dHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KG1fd2luZG93RXZlbnRM
aXN0ZW5lcnMpOwogICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCiAgICAgICAgIGlmICgq
KGl0LmN1cnJlbnQoKSkgPT0gcmwpIHsKQEAgLTI0MjQsMTEgKzI0MTUsMTEgQEAgdm9pZCBEb2N1
bWVudEltcGw6OnJlbW92ZVdpbmRvd0V2ZW50TGlzdAogICAgICAgICB9CiB9CiAKLWJvb2wgRG9j
dW1lbnRJbXBsOjpoYXNXaW5kb3dFdmVudExpc3RlbmVyKGludCBpZCkKK2Jvb2wgRG9jdW1lbnRJ
bXBsOjpoYXNXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
KQogewogICAgIFFQdHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KG1f
d2luZG93RXZlbnRMaXN0ZW5lcnMpOwogICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsK
LQlpZiAoaXQuY3VycmVudCgpLT5pZCA9PSBpZCkgeworCWlmIChpdC5jdXJyZW50KCktPmV2ZW50
VHlwZSgpID09IGV2ZW50VHlwZSkgewogCSAgICByZXR1cm4gdHJ1ZTsKIAl9CiAgICAgfQpJbmRl
eDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTIxCmRpZmYgLXAgLXUgLXIxLjEyMSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmgJMjkgSnVsIDIwMDUgMjM6MDI6NDQgLTAwMDAJMS4xMjEKKysrIGto
dG1sL3htbC9kb21fZG9jaW1wbC5oCTIxIEF1ZyAyMDA1IDAxOjU2OjM0IC0wMDAwCkBAIC00NDUs
MTMgKzQ0NSwxMyBAQCBwdWJsaWM6CiAgICAgTG9jYWxTdHlsZVJlZnMqIGxvY2FsU3R5bGVSZWZz
KCkgeyByZXR1cm4gJm1fbG9jYWxTdHlsZVJlZnM7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKLSAgICB2b2lkIHNldEhUTUxXaW5kb3dF
dmVudExpc3RlbmVyKGludCBpZCwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIpOwotICAgIEV2ZW50
TGlzdGVuZXIgKmdldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGludCBpZCk7Ci0gICAgdm9pZCBy
ZW1vdmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihpbnQgaWQpOwotCi0gICAgdm9pZCBhZGRXaW5k
b3dFdmVudExpc3RlbmVyKGludCBpZCwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGNvbnN0IGJv
b2wgdXNlQ2FwdHVyZSk7Ci0gICAgdm9pZCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKGludCBp
ZCwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgYm9vbCBo
YXNXaW5kb3dFdmVudExpc3RlbmVyKGludCBpZCk7CisgICAgdm9pZCBzZXRIVE1MV2luZG93RXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAq
bGlzdGVuZXIpOworICAgIEV2ZW50TGlzdGVuZXIgKmdldEhUTUxXaW5kb3dFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKKyAgICB2b2lkIHJlbW92ZUhUTUxXaW5k
b3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKKworICAgIHZv
aWQgYWRkV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdm9p
ZCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICBib29sIGhh
c1dpbmRvd0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpOwogCiAg
ICAgRXZlbnRMaXN0ZW5lciAqY3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoUVN0cmluZyBjb2RlLCBO
b2RlSW1wbCAqbm9kZSk7CiAgICAgCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MwpkaWZmIC1wIC11IC1yMS43
MyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50
aW1wbC5jcHAJMTkgQXVnIDIwMDUgMjM6MDk6MTggLTAwMDAJMS43MworKysga2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MzUgLTAwMDAKQEAgLTU5MCw3ICs1
OTAsNyBAQCB2b2lkIEVsZW1lbnRJbXBsOjpkaXNwYXRjaEF0dHJSZW1vdmFsRXZlCiAgICAgaWYg
KCFnZXREb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01BVFRSTU9E
SUZJRURfTElTVEVORVIpKQogCXJldHVybjsKICAgICAvL2ludCBleGNlcHRpb25jb2RlID0gMDsK
LS8vICAgICBkaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50SW1wbChFdmVudEltcGw6OkRP
TUFUVFJNT0RJRklFRF9FVkVOVCx0cnVlLGZhbHNlLGF0dHIsYXR0ci0+dmFsdWUoKSwKKy8vICAg
ICBkaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50SW1wbChET01BdHRyTW9kaWZpZWRFdmVu
dCx0cnVlLGZhbHNlLGF0dHIsYXR0ci0+dmFsdWUoKSwKIC8vIAkJICBhdHRyLT52YWx1ZSgpLCBn
ZXREb2N1bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSxNdXRhdGlvbkV2ZW50OjpSRU1PVkFM
KSxleGNlcHRpb25jb2RlKTsKIH0KIApAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgRWxlbWVudElt
cGw6OmRpc3BhdGNoQXR0ckFkZGl0aW9uRXYKICAgICBpZiAoIWdldERvY3VtZW50KCktPmhhc0xp
c3RlbmVyVHlwZShEb2N1bWVudEltcGw6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAJcmV0
dXJuOwogICAgLy8gaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotLy8gICAgIGRpc3BhdGNoRXZlbnQo
bmV3IE11dGF0aW9uRXZlbnRJbXBsKEV2ZW50SW1wbDo6RE9NQVRUUk1PRElGSUVEX0VWRU5ULHRy
dWUsZmFsc2UsYXR0cixhdHRyLT52YWx1ZSgpLAorLy8gICAgIGRpc3BhdGNoRXZlbnQobmV3IE11
dGF0aW9uRXZlbnRJbXBsKERPTUF0dHJNb2RpZmllZEV2ZW50LHRydWUsZmFsc2UsYXR0cixhdHRy
LT52YWx1ZSgpLAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHItPnZhbHVlKCksZ2V0RG9jdW1lbnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQoKSksTXV0YXRpb25F
dmVudDo6QURESVRJT04pLGV4Y2VwdGlvbmNvZGUpOwogfQogCkluZGV4OiBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzUKZGlmZiAt
cCAtdSAtcjEuMTc1IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAkxOSBBdWcgMjAwNSAyMzowOToxOCAtMDAwMAkxLjE3NQorKysga2h0bWwv
eG1sL2RvbV9ub2RlaW1wbC5jcHAJMjEgQXVnIDIwMDUgMDE6NTY6MzggLTAwMDAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9t
X3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCisjaW5jbHVkZSAi
eG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAi
Y3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNsdWRlICJlZGl0aW5nL2h0bWxfaW50ZXJjaGFu
Z2UuaCIKQEAgLTY0LDYgKzY1LDcgQEAKICNkZWZpbmUgTE9HKGNoYW5uZWwsIGZvcm1hdEFuZEFy
Z3MuLi4pICgodm9pZCkwKQogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFt
ZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
CkBAIC0zNzgsMzggKzM4MCwyOSBAQCB1bnNpZ25lZCBsb25nIE5vZGVJbXBsOjpub2RlSW5kZXgo
KSBjb25zCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIE5vZGVJbXBsOjphZGRFdmVudExp
c3RlbmVyKGludCBpZCwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2Fw
dHVyZSkKK3ZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
ICZldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBjb25zdCBib29sIHVzZUNhcHR1
cmUpCiB7CiAgICAgaWYgKGdldERvY3VtZW50KCkgJiYgIWdldERvY3VtZW50KCktPmF0dGFjaGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAoaWQpIHsKLQljYXNlIEV2ZW50SW1w
bDo6RE9NU1VCVFJFRU1PRElGSUVEX0VWRU5UOgotCSAgICBnZXREb2N1bWVudCgpLT5hZGRMaXN0
ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01TVUJUUkVFTU9ESUZJRURfTElTVEVORVIpOwotCSAg
ICBicmVhazsKLQljYXNlIEV2ZW50SW1wbDo6RE9NTk9ERUlOU0VSVEVEX0VWRU5UOgotCSAgICBn
ZXREb2N1bWVudCgpLT5hZGRMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01OT0RFSU5TRVJU
RURfTElTVEVORVIpOwotCSAgICBicmVhazsKLQljYXNlIEV2ZW50SW1wbDo6RE9NTk9ERVJFTU9W
RURfRVZFTlQ6Ci0JICAgIGdldERvY3VtZW50KCktPmFkZExpc3RlbmVyVHlwZShEb2N1bWVudElt
cGw6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKTsKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RXZlbnRJbXBsOjpET01OT0RFUkVNT1ZFREZST01ET0NVTUVOVF9FVkVOVDoKLQkgICAgZ2V0RG9j
dW1lbnQoKS0+YWRkTGlzdGVuZXJUeXBlKERvY3VtZW50SW1wbDo6RE9NTk9ERVJFTU9WRURGUk9N
RE9DVU1FTlRfTElTVEVORVIpOwotCSAgICBicmVhazsKLSAgICAgICAgY2FzZSBFdmVudEltcGw6
OkRPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9FVkVOVDoKLQkgICAgZ2V0RG9jdW1lbnQoKS0+
YWRkTGlzdGVuZXJUeXBlKERvY3VtZW50SW1wbDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5U
X0xJU1RFTkVSKTsKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRXZlbnRJbXBsOjpET01BVFRS
TU9ESUZJRURfRVZFTlQ6Ci0JICAgIGdldERvY3VtZW50KCktPmFkZExpc3RlbmVyVHlwZShEb2N1
bWVudEltcGw6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUik7Ci0JICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEV2ZW50SW1wbDo6RE9NQ0hBUkFDVEVSREFUQU1PRElGSUVEX0VWRU5UOgotCSAgICBn
ZXREb2N1bWVudCgpLT5hZGRMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01DSEFSQUNURVJE
QVRBTU9ESUZJRURfTElTVEVORVIpOwotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVh
azsKLSAgICB9CisgICAgRG9jdW1lbnRJbXBsOjpMaXN0ZW5lclR5cGUgdHlwZSA9IHN0YXRpY19j
YXN0PERvY3VtZW50SW1wbDo6TGlzdGVuZXJUeXBlPigwKTsKKyAgICBpZiAoZXZlbnRUeXBlID09
IERPTVN1YnRyZWVNb2RpZmllZEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnRJbXBsOjpE
T01TVUJUUkVFTU9ESUZJRURfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERP
TU5vZGVJbnNlcnRlZEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnRJbXBsOjpET01OT0RF
SU5TRVJURURfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1v
dmVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudEltcGw6OkRPTU5PREVSRU1PVkVEX0xJ
U1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1
bWVudEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnRJbXBsOjpET01OT0RFUkVNT1ZFREZS
T01ET0NVTUVOVF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZUlu
c2VydGVkSW50b0RvY3VtZW50RXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudEltcGw6OkRP
TU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gRE9NQXR0ck1vZGlmaWVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudEltcGw6
OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudEltcGw6
OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUjsKKyAgICBpZiAodHlwZSkKKyAgICAg
ICAgZ2V0RG9jdW1lbnQoKS0+YWRkTGlzdGVuZXJUeXBlKHR5cGUpOwogCi0gICAgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIgKnJsID0gbmV3IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKHN0YXRpY19j
YXN0PEV2ZW50SW1wbDo6RXZlbnRJZD4oaWQpLGxpc3RlbmVyLHVzZUNhcHR1cmUpOwogICAgIGlm
ICghbV9yZWdkTGlzdGVuZXJzKSB7CiAgICAgICAgIG1fcmVnZExpc3RlbmVycyA9IG5ldyBRUHRy
TGlzdDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj47CiAJbV9yZWdkTGlzdGVuZXJzLT5zZXRBdXRv
RGVsZXRlKHRydWUpOwpAQCAtNDE3LDI0ICs0MTAsMjUgQEAgdm9pZCBOb2RlSW1wbDo6YWRkRXZl
bnRMaXN0ZW5lcihpbnQgaWQsIAogCiAgICAgbGlzdGVuZXItPnJlZigpOwogCi0gICAgLy8gcmVt
b3ZlIGV4aXN0aW5nIGlkZW50aWNhbCBsaXN0ZW5lciBzZXQgd2l0aCBpZGVudGljYWwgYXJndW1l
bnRzIC0gdGhlIERPTTIKLSAgICAvLyBzcGVjIHNheXMgdGhhdCAiZHVwbGljYXRlIGluc3RhbmNl
cyBhcmUgZGlzY2FyZGVkIiBpbiB0aGlzIGNhc2UuCi0gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihp
ZCxsaXN0ZW5lcix1c2VDYXB0dXJlKTsKKyAgICAvLyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2Fs
IGxpc3RlbmVyIHNldCB3aXRoIGlkZW50aWNhbCBhcmd1bWVudHMuCisgICAgLy8gVGhlIERPTTIg
c3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhp
cyBjYXNlLgorICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CiAKICAgICAvLyBhZGRpbmcgdGhlIGZpcnN0IG9uZQogICAgIGlmIChtX3JlZ2RM
aXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiBnZXREb2N1bWVudCgpICYmICFpbkRvY3VtZW50KCkpCiAg
ICAgICAgIGdldERvY3VtZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExp
c3RlbmVycyh0aGlzKTsKICAgICAgICAgCi0gICAgbV9yZWdkTGlzdGVuZXJzLT5hcHBlbmQocmwp
OworICAgIG1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSk7CisKICAgICBsaXN0ZW5lci0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBOb2RlSW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihpbnQgaWQsIEV2
ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIE5vZGVJbXBsOjpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGlmICghbV9yZWdkTGlz
dGVuZXJzKSAvLyBub3RoaW5nIHRvIHJlbW92ZQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciBybChzdGF0aWNfY2FzdDxFdmVudEltcGw6OkV2ZW50SWQ+KGlk
KSxsaXN0ZW5lcix1c2VDYXB0dXJlKTsKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBybChl
dmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIAogICAgIFFQdHJMaXN0SXRlcmF0b3I8
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KCptX3JlZ2RMaXN0ZW5lcnMpOwogICAgIGZvciAo
OyBpdC5jdXJyZW50KCk7ICsraXQpCkBAIC00NTMsMTUgKzQ0NywxNCBAQCB2b2lkIE5vZGVJbXBs
OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiAgICAgbV9yZWdkTGlzdGVuZXJzID0gMDsKIH0K
IAotdm9pZCBOb2RlSW1wbDo6cmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoaW50IGlkKQordm9pZCBO
b2RlSW1wbDo6cmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUpCiB7CiAgICAgaWYgKCFtX3JlZ2RMaXN0ZW5lcnMpIC8vIG5vdGhpbmcgdG8gcmVtb3Zl
CiAgICAgICAgIHJldHVybjsKIAogICAgIFFQdHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXI+IGl0KCptX3JlZ2RMaXN0ZW5lcnMpOwogICAgIGZvciAoOyBpdC5jdXJyZW50KCk7
ICsraXQpCi0gICAgICAgIGlmIChpdC5jdXJyZW50KCktPmlkID09IGlkICYmCi0gICAgICAgICAg
ICBpdC5jdXJyZW50KCktPmxpc3RlbmVyLT5ldmVudExpc3RlbmVyVHlwZSgpID09ICJfa2h0bWxf
SFRNTEV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgIGlmIChpdC5jdXJyZW50KCktPmV2ZW50VHlw
ZSgpID09IGV2ZW50VHlwZSAmJiBpdC5jdXJyZW50KCktPmxpc3RlbmVyKCktPmV2ZW50TGlzdGVu
ZXJUeXBlKCkgPT0gIl9raHRtbF9IVE1MRXZlbnRMaXN0ZW5lciIpIHsKICAgICAgICAgICAgIG1f
cmVnZExpc3RlbmVycy0+cmVtb3ZlUmVmKGl0LmN1cnJlbnQoKSk7CiAgICAgICAgICAgICAvLyBy
ZW1vdmVkIGxhc3QKICAgICAgICAgICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAm
JiBnZXREb2N1bWVudCgpICYmICFpbkRvY3VtZW50KCkpCkBAIC00NzAsMzAgKzQ2MywyNyBAQCB2
b2lkIE5vZGVJbXBsOjpyZW1vdmVIVE1MRXZlbnRMaXN0ZW5lcihpCiAgICAgICAgIH0KIH0KIAot
dm9pZCBOb2RlSW1wbDo6c2V0SFRNTEV2ZW50TGlzdGVuZXIoaW50IGlkLCBFdmVudExpc3RlbmVy
ICpsaXN0ZW5lcikKK3ZvaWQgTm9kZUltcGw6OnNldEhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lcikKIHsKLSAgICAv
LyBpbiBjYXNlIHdlIGFscmVhZHkgaGF2ZSBpdCwgd2UgZG9uJ3Qgd2FudCByZW1vdmVIVE1MRXZl
bnRMaXN0ZW5lciB0byBkZXN0cm95IGl0CisgICAgLy8gSW4gY2FzZSB3ZSBhcmUgdGhlIG9ubHkg
b25lIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gaXQsIHdlIGRvbid0IHdhbnQgcmVtb3ZlSFRNTEV2
ZW50TGlzdGVuZXIgdG8gZGVzdHJveSBpdC4KICAgICBpZiAobGlzdGVuZXIpCiAgICAgICAgIGxp
c3RlbmVyLT5yZWYoKTsKLSAgICByZW1vdmVIVE1MRXZlbnRMaXN0ZW5lcihpZCk7Ci0gICAgaWYg
KGxpc3RlbmVyKQotICAgIHsKLSAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihpZCxsaXN0ZW5lcixm
YWxzZSk7CisgICAgcmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICBpZiAo
bGlzdGVuZXIpIHsKKyAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVy
LCBmYWxzZSk7CiAgICAgICAgIGxpc3RlbmVyLT5kZXJlZigpOwogICAgIH0KIH0KIAotRXZlbnRM
aXN0ZW5lciAqTm9kZUltcGw6OmdldEhUTUxFdmVudExpc3RlbmVyKGludCBpZCkKK0V2ZW50TGlz
dGVuZXIgKk5vZGVJbXBsOjpnZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSkKIHsKICAgICBpZiAoIW1fcmVnZExpc3RlbmVycykKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBpdCgq
bV9yZWdkTGlzdGVuZXJzKTsKICAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAg
ICBpZiAoaXQuY3VycmVudCgpLT5pZCA9PSBpZCAmJgotICAgICAgICAgICAgaXQuY3VycmVudCgp
LT5saXN0ZW5lci0+ZXZlbnRMaXN0ZW5lclR5cGUoKSA9PSAiX2todG1sX0hUTUxFdmVudExpc3Rl
bmVyIikgewotICAgICAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQoKS0+bGlzdGVuZXI7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+ZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBl
ICYmIGl0LmN1cnJlbnQoKS0+bGlzdGVuZXIoKS0+ZXZlbnRMaXN0ZW5lclR5cGUoKSA9PSAiX2to
dG1sX0hUTUxFdmVudExpc3RlbmVyIikKKyAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCkt
Pmxpc3RlbmVyKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYzNywxOCArNjI3LDE2IEBAIERv
Y3VtZW50UHRyICpEb2N1bWVudFB0cjo6bnVsbERvY3VtZW50UHQKICAgICByZXR1cm4gJmRvYzsK
IH0KIAotYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hIVE1MRXZlbnQoaW50IF9pZCwgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKK2Jvb2wgTm9kZUltcGw6OmRpc3BhdGNoSFRN
TEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywg
Ym9vbCBjYW5jZWxhYmxlQXJnKQogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBF
dmVudEltcGwgKmV2dCA9IG5ldyBFdmVudEltcGwoc3RhdGljX2Nhc3Q8RXZlbnRJbXBsOjpFdmVu
dElkPihfaWQpLGNhbkJ1YmJsZUFyZyxjYW5jZWxhYmxlQXJnKTsKLSAgICByZXR1cm4gZGlzcGF0
Y2hFdmVudChldnQsZXhjZXB0aW9uY29kZSx0cnVlKTsKKyAgICByZXR1cm4gZGlzcGF0Y2hFdmVu
dChuZXcgRXZlbnRJbXBsKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwg
ZXhjZXB0aW9uY29kZSwgdHJ1ZSk7CiB9CiAKLWJvb2wgTm9kZUltcGw6OmRpc3BhdGNoV2luZG93
RXZlbnQoaW50IF9pZCwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKK2Jv
b2wgTm9kZUltcGw6OmRpc3BhdGNoV2luZG93RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCiB7CiAgICAgaW50
IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgIEV2ZW50SW1wbCAqZXZ0ID0gbmV3IEV2ZW50SW1wbChz
dGF0aWNfY2FzdDxFdmVudEltcGw6OkV2ZW50SWQ+KF9pZCksY2FuQnViYmxlQXJnLGNhbmNlbGFi
bGVBcmcpOwotICAgIGV2dC0+c2V0VGFyZ2V0KCAwICk7CisgICAgRXZlbnRJbXBsICpldnQgPSBu
ZXcgRXZlbnRJbXBsKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKICAg
ICBldnQtPnJlZigpOwogICAgIERvY3VtZW50UHRyICpkb2MgPSBkb2N1bWVudDsKICAgICBkb2Mt
PnJlZigpOwpAQCAtNjU2LDcgKzY0NCw3IEBAIGJvb2wgTm9kZUltcGw6OmRpc3BhdGNoV2luZG93
RXZlbnQoaW50IF8KICAgICBpZiAoIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmIGRvYy0+ZG9j
dW1lbnQoKSkKIAlkb2MtPmRvY3VtZW50KCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKICAg
ICAKLSAgICBpZiAoX2lkID09IEV2ZW50SW1wbDo6TE9BRF9FVkVOVCAmJiAhZXZ0LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSAmJiBkb2MtPmRvY3VtZW50KCkpIHsKKyAgICBpZiAoZXZlbnRUeXBlID09
IGxvYWRFdmVudCAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBkb2MtPmRvY3VtZW50
KCkpIHsKICAgICAgICAgLy8gRm9yIG9ubG9hZCBldmVudHMsIHNlbmQgdGhlbSB0byB0aGUgZW5j
bG9zaW5nIGZyYW1lIG9ubHkuCiAgICAgICAgIC8vIFRoaXMgaXMgYSBET00gZXh0ZW5zaW9uIGFu
ZCBpcyBpbmRlcGVuZGVudCBvZiBidWJibGluZy9jYXB0dXJpbmcgcnVsZXMgb2YKICAgICAgICAg
Ly8gdGhlIERPTS4gIFlvdSBzZW5kIHRoZSBldmVudCBvbmx5IHRvIHRoZSBlbmNsb3NpbmcgZnJh
bWUuICBJdCBkb2VzIG5vdApAQCAtNjg0LDI0ICs2NzIsMjMgQEAgYm9vbCBOb2RlSW1wbDo6ZGlz
cGF0Y2hXaW5kb3dFdmVudChpbnQgXwogICAgIHJldHVybiByOwogfQogCi1ib29sIE5vZGVJbXBs
OjpkaXNwYXRjaE1vdXNlRXZlbnQoUU1vdXNlRXZlbnQgKl9tb3VzZSwgaW50IG92ZXJyaWRlSWQs
IGludCBvdmVycmlkZURldGFpbCkKK2Jvb2wgTm9kZUltcGw6OmRpc3BhdGNoTW91c2VFdmVudChR
TW91c2VFdmVudCAqX21vdXNlLCBjb25zdCBBdG9taWNTdHJpbmcgJm92ZXJyaWRlVHlwZSwgaW50
IG92ZXJyaWRlRGV0YWlsKQogewogICAgIGJvb2wgY2FuY2VsYWJsZSA9IHRydWU7CiAgICAgaW50
IGRldGFpbCA9IG92ZXJyaWRlRGV0YWlsOyAvLyBkZWZhdWx0cyB0byAwCi0gICAgRXZlbnRJbXBs
OjpFdmVudElkIGV2dElkID0gRXZlbnRJbXBsOjpVTktOT1dOX0VWRU5UOwotICAgIGlmIChvdmVy
cmlkZUlkKSB7Ci0gICAgICAgIGV2dElkID0gc3RhdGljX2Nhc3Q8RXZlbnRJbXBsOjpFdmVudElk
PihvdmVycmlkZUlkKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgQXRvbWljU3RyaW5nIGV2ZW50
VHlwZTsKKyAgICBpZiAoIW92ZXJyaWRlVHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZXZlbnRU
eXBlID0gb3ZlcnJpZGVUeXBlOworICAgIH0gZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoX21vdXNl
LT50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOgot
ICAgICAgICAgICAgICAgIGV2dElkID0gRXZlbnRJbXBsOjpNT1VTRURPV05fRVZFTlQ7CisgICAg
ICAgICAgICAgICAgZXZlbnRUeXBlID0gbW91c2Vkb3duRXZlbnQ7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgotICAg
ICAgICAgICAgICAgIGV2dElkID0gRXZlbnRJbXBsOjpNT1VTRVVQX0VWRU5UOworICAgICAgICAg
ICAgICAgIGV2ZW50VHlwZSA9IG1vdXNldXBFdmVudDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOgotICAgICAgICAg
ICAgICAgIGV2dElkID0gRXZlbnRJbXBsOjpDTElDS19FVkVOVDsKKyAgICAgICAgICAgICAgICBl
dmVudFR5cGUgPSBjbGlja0V2ZW50OwogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAg
ICBkZXRhaWwgPSBfbW91c2UtPmNsaWNrQ291bnQoKTsKICNlbHNlCkBAIC03MDksMTYgKzY5Niwx
NiBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaE1vdXNlRXZlbnQoUU1vdXNlCiAjZW5kaWYKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6
Ci0gICAgICAgICAgICAgICAgZXZ0SWQgPSBFdmVudEltcGw6Ok1PVVNFTU9WRV9FVkVOVDsKKyAg
ICAgICAgICAgICAgICBldmVudFR5cGUgPSBtb3VzZW1vdmVFdmVudDsKICAgICAgICAgICAgICAg
ICBjYW5jZWxhYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAg
IGlmIChldnRJZCA9PSBFdmVudEltcGw6OlVOS05PV05fRVZFTlQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gc2hvdWxkbid0IGhhcHBlbgogCisgICAgaWYgKGV2ZW50VHlwZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gc2hvdWxkbid0IGhhcHBlbgogCiAgICAgaW50IGV4
Y2VwdGlvbmNvZGUgPSAwOwogCkBAIC03NzUsNyArNzYyLDcgQEAgYm9vbCBOb2RlSW1wbDo6ZGlz
cGF0Y2hNb3VzZUV2ZW50KFFNb3VzZQogCiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBmYWxzZTsK
IAotICAgIEV2ZW50SW1wbCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwoZXZ0SWQsdHJ1ZSxjYW5j
ZWxhYmxlLGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCisgICAgRXZlbnRJbXBsICptZSA9
IG5ldyBNb3VzZUV2ZW50SW1wbChldmVudFR5cGUsdHJ1ZSxjYW5jZWxhYmxlLGdldERvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCksCiAgICAgICAgICAgICAgICAgICAgZGV0YWlsLHNjcmVlblgsc2Ny
ZWVuWSxjbGllbnRYLGNsaWVudFksY3RybEtleSxhbHRLZXksc2hpZnRLZXksbWV0YUtleSwKICAg
ICAgICAgICAgICAgICAgICBidXR0b24sMCk7CiAgICAgbWUtPnJlZigpOwpAQCAtNzkxLDEwICs3
NzgsMTAgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hNb3VzZUV2ZW50KFFNb3VzZQogICAgIC8v
IG9mIHRoZSBET00gc3BlY3MsIGJ1dCBpcyB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhl
IHRyYWRpdGlvbmFsIG9uY2xpY2s9IiIgYW5kIG9uZGJsY2xpY2s9IiIgYXR0cmlidXRlcywKICAg
ICAvLyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNp
bmdsZSAmIGRvdWJsZSBjbGlja3MgdXNpbmcgRE9NIChvbmx5IHRoZSBjbGljayBjb3VudCBpcwog
ICAgIC8vIHN0b3JlZCwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lKQotICAgIGlm
IChldnRJZCA9PSBFdmVudEltcGw6OkNMSUNLX0VWRU5UKSB7Ci0gICAgICAgIGV2dElkID0gRXZl
bnRJbXBsOjpLSFRNTF9DTElDS19FVkVOVDsKKyAgICBpZiAoZXZlbnRUeXBlID09IGNsaWNrRXZl
bnQpIHsKKyAgICAgICAgZXZlbnRUeXBlID0ga2h0bWxDbGlja0V2ZW50OwogCi0gICAgICAgIG1l
ID0gbmV3IE1vdXNlRXZlbnRJbXBsKEV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQsCisgICAg
ICAgIG1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKGtodG1sQ2xpY2tFdmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxjYW5jZWxhYmxlLGdldERvY3VtZW50KCktPmRlZmF1
bHRWaWV3KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbCxzY3JlZW5Y
LHNjcmVlblksY2xpZW50WCxjbGllbnRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdHJsS2V5LGFsdEtleSxzaGlmdEtleSxtZXRhS2V5LApAQCAtODEyLDcgKzc5OSw3IEBAIGJv
b2wgTm9kZUltcGw6OmRpc3BhdGNoTW91c2VFdmVudChRTW91c2UKICAgICAgICAgbWUtPmRlcmVm
KCk7CiAKICAgICAgICAgaWYgKF9tb3VzZS0+aXNEb3VibGVDbGljaygpKSB7Ci0gICAgICAgICAg
ICBtZSA9IG5ldyBNb3VzZUV2ZW50SW1wbChFdmVudEltcGw6OktIVE1MX0RCTENMSUNLX0VWRU5U
LAorICAgICAgICAgICAgbWUgPSBuZXcgTW91c2VFdmVudEltcGwoa2h0bWxEYmxjbGlja0V2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxjYW5jZWxhYmxlLGdl
dERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwsc2NyZWVuWCxzY3JlZW5ZLGNsaWVudFgsY2xpZW50WSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxLZXksYWx0S2V5LHNoaWZ0S2V5LG1ldGFL
ZXksCkBAIC04MjksMjkgKzgxNiwyOSBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaE1vdXNlRXZl
bnQoUU1vdXNlCiAjZW5kaWYKIAogICAgIC8vIEFsc28gc2VuZCBhIERPTUFjdGl2YXRlIGV2ZW50
LCB3aGljaCBjYXVzZXMgdGhpbmdzIGxpa2UgZm9ybSBzdWJtaXNzaW9ucyB0byBvY2N1ci4KLSAg
ICBpZiAoZXZ0SWQgPT0gRXZlbnRJbXBsOjpLSFRNTF9DTElDS19FVkVOVCAmJiAhZGVmYXVsdFBy
ZXZlbnRlZCAmJiAhZGlzYWJsZWQoKSkKLSAgICAgICAgZGlzcGF0Y2hVSUV2ZW50KEV2ZW50SW1w
bDo6RE9NQUNUSVZBVEVfRVZFTlQsIGRldGFpbCk7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBraHRt
bENsaWNrRXZlbnQgJiYgIWRlZmF1bHRQcmV2ZW50ZWQgJiYgIWRpc2FibGVkKCkpCisgICAgICAg
IGRpc3BhdGNoVUlFdmVudChET01BY3RpdmF0ZUV2ZW50LCBkZXRhaWwpOwogCiAgICAgcmV0dXJu
IHN3YWxsb3dFdmVudDsKIH0KIAotYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hVSUV2ZW50KGludCBf
aWQsIGludCBkZXRhaWwpCitib29sIE5vZGVJbXBsOjpkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZldmVudFR5cGUsIGludCBkZXRhaWwpCiB7Ci0gICAgYXNzZXJ0ICghKCAoX2lk
ICE9IEV2ZW50SW1wbDo6RE9NRk9DVVNJTl9FVkVOVCAmJgotICAgICAgICBfaWQgIT0gRXZlbnRJ
bXBsOjpET01GT0NVU09VVF9FVkVOVCAmJgotICAgICAgICAgICAgICAgIF9pZCAhPSBFdmVudElt
cGw6OkRPTUFDVElWQVRFX0VWRU5UKSkpOworICAgIGFzc2VydCAoISggKGV2ZW50VHlwZSAhPSBE
T01Gb2N1c0luRXZlbnQgJiYKKyAgICAgICAgICAgICAgICBldmVudFR5cGUgIT0gRE9NRm9jdXNP
dXRFdmVudCAmJgorICAgICAgICAgICAgICAgIGV2ZW50VHlwZSAhPSBET01BY3RpdmF0ZUV2ZW50
KSkpOworCisgICAgaWYgKCFnZXREb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKLSAgICBpZiAoX2lkID09IEV2ZW50SW1wbDo6
RE9NQUNUSVZBVEVfRVZFTlQpCisgICAgaWYgKGV2ZW50VHlwZSA9PSBET01BY3RpdmF0ZUV2ZW50
KQogICAgICAgICBjYW5jZWxhYmxlID0gdHJ1ZTsKIAogICAgIGludCBleGNlcHRpb25jb2RlID0g
MDsKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKSkgewotICAgICAgICBVSUV2ZW50SW1wbCAqZXZ0ID0g
bmV3IFVJRXZlbnRJbXBsKHN0YXRpY19jYXN0PEV2ZW50SW1wbDo6RXZlbnRJZD4oX2lkKSx0cnVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGUs
Z2V0RG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSxkZXRhaWwpOwotICAgICAgICByZXR1cm4gZGlz
cGF0Y2hFdmVudChldnQsZXhjZXB0aW9uY29kZSx0cnVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOworCisgICAgVUlFdmVudEltcGwgKmV2dCA9IG5ldyBVSUV2ZW50SW1wbChldmVudFR5cGUs
IHRydWUsIGNhbmNlbGFibGUsIGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIGRldGFpbCk7
CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoZXZ0LGV4Y2VwdGlvbmNvZGUsdHJ1ZSk7CiB9CiAK
IHZvaWQgTm9kZUltcGw6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3RJbXBsICpsaXN0KQpAQCAt
OTIzLDcgKzkxMCw3IEBAIGJvb2wgTm9kZUltcGw6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXYK
ICAgICBpZiAoIWdldERvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudEltcGw6OkRP
TVNVQlRSRUVNT0RJRklFRF9MSVNURU5FUikpCiAJcmV0dXJuIGZhbHNlOwogICAgIGludCBleGNl
cHRpb25jb2RlID0gMDsKLSAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVu
dEltcGwoRXZlbnRJbXBsOjpET01TVUJUUkVFTU9ESUZJRURfRVZFTlQsCisgICAgcmV0dXJuIGRp
c3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnRJbXBsKERPTVN1YnRyZWVNb2RpZmllZEV2ZW50
LAogCQkJIHRydWUsZmFsc2UsMCxET01TdHJpbmcoKSxET01TdHJpbmcoKSxET01TdHJpbmcoKSww
KSxleGNlcHRpb25jb2RlLHRydWUpOwogfQogCkBAIC05ODksMTIgKzk3Niw5IEBAIHZvaWQgTm9k
ZUltcGw6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50SW0KIAogICAgIFFQdHJMaXN0PFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyPiBsaXN0ZW5lcnNDb3B5ID0gKm1fcmVnZExpc3RlbmVyczsKICAgICBR
UHRyTGlzdEl0ZXJhdG9yPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBpdChsaXN0ZW5lcnNDb3B5
KTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC5jdXJy
ZW50KCktPmlkID09IGV2dC0+aWQoKSAmJiBpdC5jdXJyZW50KCktPnVzZUNhcHR1cmUgPT0gdXNl
Q2FwdHVyZSkgewotICAgICAgICAgICAgaXQuY3VycmVudCgpLT5saXN0ZW5lci0+aGFuZGxlRXZl
bnRJbXBsKGV2dCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCisgICAgZm9yICg7IGl0LmN1
cnJlbnQoKTsgKytpdCkKKyAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+ZXZlbnRUeXBlKCkgPT0g
ZXZ0LT50eXBlKCkgJiYgaXQuY3VycmVudCgpLT51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSkK
KyAgICAgICAgICAgIGl0LmN1cnJlbnQoKS0+bGlzdGVuZXIoKS0+aGFuZGxlRXZlbnRJbXBsKGV2
dCwgZmFsc2UpOwogfQogCiB2b2lkIE5vZGVJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
SW1wbCAqZXZ0KQpAQCAtMTYyMywxNiArMTYwNyw2IEBAIGJvb2wgTm9kZUltcGw6OmluU2FtZUNv
bnRhaW5pbmdCbG9ja0Zsb3cKIAogLy8gRklYTUU6IEVuZCBvZiBvYnZpb3VzbHkgbWlzcGxhY2Vk
IEhUTUwgZWRpdGluZyBmdW5jdGlvbnMuICBUcnkgdG8gbW92ZSB0aGVzZSBvdXQgb2YgTm9kZUlt
cGwuCiAKLXZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nICZ0
eXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotewotICAgIGFk
ZEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0eXBlKSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUpOwotfQotCi12b2lkIE5vZGVJbXBsOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IERP
TVN0cmluZyAmdHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkK
LXsKLSAgICByZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6dHlwZVRvSWQodHlwZSksIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKTsKLX0KLQogU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4gTm9kZUlt
cGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkks
IGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKQogewogICAgIGlmIChuYW1lc3BhY2VVUkkuaXNO
dWxsKCkgfHwgbG9jYWxOYW1lLmlzTnVsbCgpKQpAQCAtMTk3Miw3ICsxOTQ2LDcgQEAgTm9kZUlt
cGwgKkNvbnRhaW5lck5vZGVJbXBsOjpyZW1vdmVDaGlsZAogICAgIC8vIERpc3BhdGNoIHByZS1y
ZW1vdmFsIG11dGF0aW9uIGV2ZW50cwogICAgIGdldERvY3VtZW50KCktPm5vdGlmeUJlZm9yZU5v
ZGVSZW1vdmFsKG9sZENoaWxkKTsgLy8gIyMjIHVzZSBldmVudHMgaW5zdGVhZAogICAgIGlmIChn
ZXREb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01OT0RFUkVNT1ZF
RF9MSVNURU5FUikpIHsKLQlvbGRDaGlsZC0+ZGlzcGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVu
dEltcGwoRXZlbnRJbXBsOjpET01OT0RFUkVNT1ZFRF9FVkVOVCwKKwlvbGRDaGlsZC0+ZGlzcGF0
Y2hFdmVudChuZXcgTXV0YXRpb25FdmVudEltcGwoRE9NTm9kZVJlbW92ZWRFdmVudCwKIAkJCSAg
ICAgdHJ1ZSxmYWxzZSx0aGlzLERPTVN0cmluZygpLERPTVN0cmluZygpLERPTVN0cmluZygpLDAp
LGV4Y2VwdGlvbmNvZGUsdHJ1ZSk7CiAJaWYgKGV4Y2VwdGlvbmNvZGUpCiAJICAgIHJldHVybiAw
OwpAQCAtMjQ1OCw3ICsyNDMyLDcgQEAgdm9pZCBDb250YWluZXJOb2RlSW1wbDo6ZGlzcGF0Y2hD
aGlsZElucwogICAgICAgICBjaGlsZC0+aW5zZXJ0ZWRJbnRvVHJlZSh0cnVlKTsKIAogICAgIGlm
IChnZXREb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01OT0RFSU5T
RVJURURfTElTVEVORVIpKSB7Ci0gICAgICAgIGNoaWxkLT5kaXNwYXRjaEV2ZW50KG5ldyBNdXRh
dGlvbkV2ZW50SW1wbChFdmVudEltcGw6OkRPTU5PREVJTlNFUlRFRF9FVkVOVCwKKyAgICAgICAg
Y2hpbGQtPmRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnRJbXBsKERPTU5vZGVJbnNlcnRl
ZEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSxmYWxzZSx0aGlzLERPTVN0cmluZygpLERPTVN0cmluZygpLERPTVN0cmluZygpLDAp
LGV4Y2VwdGlvbmNvZGUsdHJ1ZSk7CiAgICAgICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ2OSw3ICsyNDQzLDcgQEAgdm9pZCBDb250YWluZXJOb2RlSW1w
bDo6ZGlzcGF0Y2hDaGlsZElucwogCiAgICAgaWYgKGhhc0luc2VydGVkTGlzdGVuZXJzICYmIGlu
RG9jdW1lbnQoKSkgewogICAgICAgICBmb3IgKE5vZGVJbXBsICpjID0gY2hpbGQ7IGM7IGMgPSBj
LT50cmF2ZXJzZU5leHROb2RlKGNoaWxkKSkgewotICAgICAgICAgICAgYy0+ZGlzcGF0Y2hFdmVu
dChuZXcgTXV0YXRpb25FdmVudEltcGwoRXZlbnRJbXBsOjpET01OT0RFSU5TRVJURURJTlRPRE9D
VU1FTlRfRVZFTlQsCisgICAgICAgICAgICBjLT5kaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2
ZW50SW1wbChET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLGZhbHNlLDAsRE9NU3Ry
aW5nKCksRE9NU3RyaW5nKCksRE9NU3RyaW5nKCksMCksZXhjZXB0aW9uY29kZSx0cnVlKTsKICAg
ICAgICAgICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI0ODMsNyArMjQ1Nyw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZUltcGw6OmRpc3BhdGNoQ2hpbGRS
ZW0KICAgICAvLyBEaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKICAgICBnZXRE
b2N1bWVudCgpLT5ub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChjaGlsZCk7IC8vICMjIyB1c2UgZXZl
bnRzIGluc3RlYWQKICAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3Vt
ZW50SW1wbDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKSB7Ci0JY2hpbGQtPmRpc3BhdGNoRXZl
bnQobmV3IE11dGF0aW9uRXZlbnRJbXBsKEV2ZW50SW1wbDo6RE9NTk9ERVJFTU9WRURfRVZFTlQs
CisJY2hpbGQtPmRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnRJbXBsKERPTU5vZGVSZW1v
dmVkRXZlbnQsCiAJCQkgICAgIHRydWUsZmFsc2UsdGhpcyxET01TdHJpbmcoKSxET01TdHJpbmco
KSxET01TdHJpbmcoKSwwKSxleGNlcHRpb25jb2RlLHRydWUpOwogCWlmIChleGNlcHRpb25jb2Rl
KQogCSAgICByZXR1cm47CkBAIC0yNDk1LDcgKzI0NjksNyBAQCB2b2lkIENvbnRhaW5lck5vZGVJ
bXBsOjpkaXNwYXRjaENoaWxkUmVtCiAgICAgaWYgKGluRG9jdW1lbnQoKSkgewogCWZvciAoTm9k
ZUltcGwgKmMgPSBjaGlsZDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKSB7CiAJ
ICAgIGlmIChoYXNSZW1vdmFsTGlzdGVuZXJzKSB7Ci0JCWMtPmRpc3BhdGNoRXZlbnQobmV3IE11
dGF0aW9uRXZlbnRJbXBsKEV2ZW50SW1wbDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfRVZF
TlQsCisJCWMtPmRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnRJbXBsKERPTU5vZGVSZW1v
dmVkRnJvbURvY3VtZW50RXZlbnQsCiAJCQkJIGZhbHNlLGZhbHNlLDAsRE9NU3RyaW5nKCksRE9N
U3RyaW5nKCksRE9NU3RyaW5nKCksMCksZXhjZXB0aW9uY29kZSx0cnVlKTsKIAkJaWYgKGV4Y2Vw
dGlvbmNvZGUpCiAJCSAgICByZXR1cm47CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2Rl
aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk3CmRpZmYgLXAgLXUgLXIxLjk3IGtodG1s
L3htbC9kb21fbm9kZWltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTggQXVnIDIw
MDUgMjE6MTI6MDEgLTAwMDAJMS45NworKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTIxIEF1
ZyAyMDA1IDAxOjU2OjM5IC0wMDAwCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBET00gewog
CiB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogCitjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBE
b2N1bWVudEltcGw7CiBjbGFzcyBFbGVtZW50SW1wbDsKIGNsYXNzIEV2ZW50SW1wbDsKQEAgLTI2
NiwyMiArMjY3LDIwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnRQ
dHIgKmRvYyk7CiAKLSAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nICYs
IEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwotICAgIHZvaWQgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcgJiwgRXZlbnRMaXN0ZW5lciAqbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW50IGlk
LCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW50IGlkLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxFdmVudExpc3RlbmVyKGludCBpZCk7Ci0g
ICAgdm9pZCBzZXRIVE1MRXZlbnRMaXN0ZW5lcihpbnQgaWQsIEV2ZW50TGlzdGVuZXIgKmxpc3Rl
bmVyKTsKLSAgICBFdmVudExpc3RlbmVyICpnZXRIVE1MRXZlbnRMaXN0ZW5lcihpbnQgaWQpOwor
ICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2b2lkIHJlbW92ZUhUTUxFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKKyAgICB2b2lkIHNldEhU
TUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyICpsaXN0ZW5lcik7CisgICAgRXZlbnRMaXN0ZW5lciAqZ2V0SFRNTEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpOwogICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKTsKIAogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudEltcGwgKmV2dCwgaW50
ICZleGNlcHRpb25jb2RlLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKTsKICAgICBib29sIGRpc3Bh
dGNoR2VuZXJpY0V2ZW50KCBFdmVudEltcGwgKmV2dCwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAg
ICBib29sIGRpc3BhdGNoSFRNTEV2ZW50KGludCBfaWQsIGJvb2wgY2FuQnViYmxlQXJnLCBib29s
IGNhbmNlbGFibGVBcmcpOwotICAgIGJvb2wgZGlzcGF0Y2hXaW5kb3dFdmVudChpbnQgX2lkLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKLSAgICBib29sIGRpc3BhdGNo
TW91c2VFdmVudChRTW91c2VFdmVudCAqZSwgaW50IG92ZXJyaWRlSWQgPSAwLCBpbnQgb3ZlcnJp
ZGVEZXRhaWwgPSAwKTsKLSAgICBib29sIGRpc3BhdGNoVUlFdmVudChpbnQgX2lkLCBpbnQgZGV0
YWlsID0gMCk7CisgICAgYm9vbCBkaXNwYXRjaEhUTUxFdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7CisgICAg
Ym9vbCBkaXNwYXRjaFdpbmRvd0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKKyAgICBib29sIGRpc3BhdGNo
TW91c2VFdmVudChRTW91c2VFdmVudCAqZSk7CisgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQo
UU1vdXNlRXZlbnQgKmUsIGNvbnN0IEF0b21pY1N0cmluZyAmb3ZlcnJpZGVUeXBlLCBpbnQgb3Zl
cnJpZGVEZXRhaWwgPSAwKTsKKyAgICBib29sIGRpc3BhdGNoVUlFdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgaW50IGRldGFpbCA9IDApOwogICAgIGJvb2wgZGlzcGF0Y2hTdWJ0
cmVlTW9kaWZpZWRFdmVudChib29sIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWUpOwogICAgIGJvb2wg
ZGlzcGF0Y2hLZXlFdmVudChRS2V5RXZlbnQgKmtleSk7CiAgICAgdm9pZCBkaXNwYXRjaFdoZWVs
RXZlbnQoUVdoZWVsRXZlbnQgKik7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJMTgg
SnVsIDIwMDUgMjE6NDQ6MjkgLTAwMDAJMS4yNQorKysga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5j
cHAJMjEgQXVnIDIwMDUgMDE6NTY6MzkgLTAwMDAKQEAgLTI2LDE1ICsyNiwxNiBAQAogI2luY2x1
ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCisjaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMu
aCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogCiAjaW5jbHVkZSA8a2Rl
YnVnLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBET007Cit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVu
dE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCi0KIENoYXJhY3RlckRhdGFJbXBsOjpD
aGFyYWN0ZXJEYXRhSW1wbChEb2N1bWVudFB0ciAqZG9jKQogICAgIDogTm9kZUltcGwoZG9jKQog
ewpAQCAtMjI0LDcgKzIyNSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OmRpc3BhdGNoTW9k
aWZpZWQKICAgICBET01TdHJpbmdJbXBsICpuZXdWYWx1ZSA9IHN0ci0+Y29weSgpOwogICAgIG5l
d1ZhbHVlLT5yZWYoKTsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgZGlzcGF0Y2hF
dmVudChuZXcgTXV0YXRpb25FdmVudEltcGwoRXZlbnRJbXBsOjpET01DSEFSQUNURVJEQVRBTU9E
SUZJRURfRVZFTlQsCisgICAgZGlzcGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVudEltcGwoRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsCiAJCSAgdHJ1ZSxmYWxzZSwwLHByZXZWYWx1ZSxu
ZXdWYWx1ZSxET01TdHJpbmcoKSwwKSxleGNlcHRpb25jb2RlKTsKICAgICBuZXdWYWx1ZS0+ZGVy
ZWYoKTsKICAgICBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CkluZGV4OiBraHRtbC94
bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1s
L3htbF9uYW1lc3BhY2VfdGFibGUuY3BwCmRpZmYgLU4ga2h0bWwveG1sL3htbF9uYW1lc3BhY2Vf
dGFibGUuY3BwCi0tLSBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAJMjYgSmFuIDIw
MDQgMjI6MzM6MTkgLTAwMDAJMS4xCisrKyBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5j
cHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw3OSArMCwwIEBACi0vKioKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0g
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAieG1sX25hbWVz
cGFjZV90YWJsZS5oIgotI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1uYW1lc3BhY2UgRE9N
Ci17Ci0KLVFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5PiogWG1sTmFtZXNwYWNlVGFibGU6OmdOYW1l
c3BhY2VUYWJsZSA9IDA7Ci0KLWludCBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQo
Y29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkpCi17Ci0gICAgaWYgKHVyaSA9PSBY
SFRNTF9OQU1FU1BBQ0UpCi0gICAgICAgIHJldHVybiB4aHRtbE5hbWVzcGFjZTsKLSAgICAKLSAg
ICBpZiAodXJpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5vTmFtZXNwYWNlOwotICAgIAot
ICAgIFFTdHJpbmcgdXJpU3RyID0gdXJpLnN0cmluZygpOwotCi0gICAgaWYgKCFnTmFtZXNwYWNl
VGFibGUpIHsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlID0gbmV3IFFEaWN0PFhtbE5hbWVzcGFj
ZUVudHJ5PjsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlLT5pbnNlcnQoWEhUTUxfTkFNRVNQQUNF
LCBuZXcgWG1sTmFtZXNwYWNlRW50cnkoeGh0bWxOYW1lc3BhY2UsIFhIVE1MX05BTUVTUEFDRSkp
OwotICAgIH0KLSAgICAKLSAgICBYbWxOYW1lc3BhY2VFbnRyeSogbnMgPSBnTmFtZXNwYWNlVGFi
bGUtPmZpbmQodXJpU3RyKTsKLSAgICBpZiAobnMpIHJldHVybiBucy0+bV9pZDsKLSAgICAKLSAg
ICBpZiAoIXJlYWRvbmx5KSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgaWQgPSB4aHRtbE5hbWVzcGFj
ZSsxOwotICAgICAgICBucyA9IG5ldyBYbWxOYW1lc3BhY2VFbnRyeShpZCsrLCB1cmkpOwotICAg
ICAgICBnTmFtZXNwYWNlVGFibGUtPmluc2VydCh1cmlTdHIsIG5zKTsKLSAgICAgICAgcmV0dXJu
IG5zLT5tX2lkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7Ci19Ci0KLURPTVN0cmluZyBY
bWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJKGludCBpZCkKLXsKLSAgICBpZiAoaWQg
PT0gbm9OYW1lc3BhY2UgfHwgaWQgPT0gYW55TmFtZXNwYWNlIHx8ICFnTmFtZXNwYWNlVGFibGUp
Ci0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGlmICghZ05hbWVzcGFjZVRhYmxlKSB7Ci0gICAg
ICAgIGdOYW1lc3BhY2VUYWJsZSA9IG5ldyBRRGljdDxYbWxOYW1lc3BhY2VFbnRyeT47Ci0gICAg
ICAgIGdOYW1lc3BhY2VUYWJsZS0+aW5zZXJ0KFhIVE1MX05BTUVTUEFDRSwgbmV3IFhtbE5hbWVz
cGFjZUVudHJ5KHhodG1sTmFtZXNwYWNlLCBYSFRNTF9OQU1FU1BBQ0UpKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gSGF2ZSB0byBpdGVyYXRlIG92ZXIgdGhlIGRpY3Rpb25hcnkgZW50cmllcyBsb29r
aW5nIGZvciBhIG1hdGNoLgotICAgIC8vIChUaGlzIHNob3VsZCBiZSBvaywgc2luY2UgdGhpcyBp
cyBub3QgdGhlIGNvbW1vbiBkaXJlY3Rpb24uKQotICAgIFFEaWN0SXRlcmF0b3I8WG1sTmFtZXNw
YWNlRW50cnk+IGl0KCpnTmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdC5jb3VudCgpOyBpKyssICsraXQpIHsKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+
bV9pZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCktPm1fdXJpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci19Ci0KLX0KSW5kZXg6IGtodG1sL3htbC94bWxfbmFt
ZXNwYWNlX3RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1sL3htbF9uYW1lc3Bh
Y2VfdGFibGUuaApkaWZmIC1OIGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgKLS0tIGto
dG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgJMjYgSmFuIDIwMDQgMjI6MzM6MTkgLTAwMDAJ
MS4xCisrKyBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5oCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKQEAgLTEsNDYgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0
IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHFkaWN0Lmg+Ci0jaW5jbHVkZSAiZG9tL2RvbV9z
dHJpbmcuaCIKLQotbmFtZXNwYWNlIERPTQoteyAgICAKLXN0cnVjdCBYbWxOYW1lc3BhY2VFbnRy
eTsKLQotY2xhc3MgWG1sTmFtZXNwYWNlVGFibGUKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW50
IGdldE5hbWVzcGFjZUlEKGNvbnN0IERPTVN0cmluZyYgdXJpLCBib29sIHJlYWRvbmx5ID0gdHJ1
ZSk7Ci0gICAgc3RhdGljIERPTVN0cmluZyBnZXROYW1lc3BhY2VVUkkoaW50IGlkKTsKLSAgICAK
LSAgICBzdGF0aWMgUURpY3Q8WG1sTmFtZXNwYWNlRW50cnk+KiBnTmFtZXNwYWNlVGFibGU7Ci19
OwotCi1zdHJ1Y3QgWG1sTmFtZXNwYWNlRW50cnkKLXsKLSAgICBYbWxOYW1lc3BhY2VFbnRyeShp
bnQgaWQsIGNvbnN0IERPTVN0cmluZyYgdXJpKSA6bV9pZChpZCksIG1fdXJpKHVyaSkge30KLSAg
ICAKLSAgICBpbnQgbV9pZDsKLSAgICBET01TdHJpbmcgbV91cmk7Ci19OwotCi19CkluZGV4OiBr
d3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FBY2NPYmplY3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzYKZGlmZiAtcCAt
dSAtcjEuNzYga3dxL0tXUUFjY09iamVjdC5tbQotLS0ga3dxL0tXUUFjY09iamVjdC5tbQkxNiBB
dWcgMjAwNSAxOTowMzoxOCAtMDAwMAkxLjc2CisrKyBrd3EvS1dRQWNjT2JqZWN0Lm1tCTIxIEF1
ZyAyMDA1IDAxOjU2OjQxIC0wMDAwCkBAIC02NSwxMyArNjUsMTYgQEAKICNpbXBvcnQgImh0bWxf
bWlzY2ltcGwuaCIKICNpbXBvcnQgInFwdHJzdGFjay5oIgogI2ltcG9ydCAiRE9NSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnRO
YW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpIVE1MQW5jaG9yRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxBcmVhRWxlbWVu
dEltcGw7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MQ29sbGVj
dGlvbjsKIHVzaW5nIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsOwogdXNpbmcgRE9NOjpIVE1MRWxl
bWVudEltcGw7CkBAIC0xODAsMTggKzE4MywxMCBAQCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0
aW9uOwogLShFbGVtZW50SW1wbCAqKW1vdXNlQnV0dG9uTGlzdGVuZXIKIHsKICAgICAvLyBGSVhN
RTogRG8gdGhlIGNvbnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBhbmNob3JFbGVtZW50IGRvZXMKLSAg
ICBOb2RlSW1wbCogZWx0ID0gbV9yZW5kZXJlci0+ZWxlbWVudCgpOwotICAgIGZvciAoIDsgZWx0
OyBlbHQgPSBlbHQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoZWx0LT5nZXRIVE1MRXZl
bnRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZFTlQpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCo+KGVsdCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgaWYgKGVsdC0+Z2V0SFRNTEV2ZW50TGlzdGVuZXIoRE9NOjpFdmVu
dEltcGw6Ok1PVVNFRE9XTl9FVkVOVCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oZWx0KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAo
ZWx0LT5nZXRIVE1MRXZlbnRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6TU9VU0VVUF9FVkVOVCkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4o
ZWx0KTsKKyAgICBmb3IgKE5vZGVJbXBsICplbHQgPSBtX3JlbmRlcmVyLT5lbGVtZW50KCk7IGVs
dDsgZWx0ID0gZWx0LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGVsdC0+Z2V0SFRNTEV2
ZW50TGlzdGVuZXIoa2h0bWxDbGlja0V2ZW50KSB8fCBlbHQtPmdldEhUTUxFdmVudExpc3RlbmVy
KG1vdXNlZG93bkV2ZW50KSB8fCBlbHQtPmdldEhUTUxFdmVudExpc3RlbmVyKG1vdXNldXBFdmVu
dCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihlbHQpOwog
ICAgIH0KLSAgICAKICAgICByZXR1cm4gTlVMTDsKIH0KIApJbmRleDoga3dxL0tXUUtIVE1MUGFy
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBh
cnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjYKZGlmZiAtcCAtdSAtcjEuMjI2IGt3cS9L
V1FLSFRNTFBhcnQuaAotLS0ga3dxL0tXUUtIVE1MUGFydC5oCTE3IEF1ZyAyMDA1IDIwOjEyOjE1
IC0wMDAwCTEuMjI2CisrKyBrd3EvS1dRS0hUTUxQYXJ0LmgJMjEgQXVnIDIwMDUgMDE6NTY6NDEg
LTAwMDAKQEAgLTQxOCw4ICs0MTgsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOU1ZpZXcgKmRv
Y3VtZW50Vmlld0Zvck5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKICAgICAKICAgICBib29sIGRyYWdI
eXN0ZXJlc2lzRXhjZWVkZWQoZmxvYXQgZHJhZ0xvY2F0aW9uWCwgZmxvYXQgZHJhZ0xvY2F0aW9u
WSkgY29uc3Q7Ci0gICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50KGludCBldmVudElkLCBLV1FDbGlw
Ym9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kpOwotICAgIGJvb2wgZGlzcGF0Y2hEcmFnU3JjRXZl
bnQoaW50IGV2ZW50SWQsIGNvbnN0IFFQb2ludCAmbG9jKSBjb25zdDsKKyAgICBib29sIGRpc3Bh
dGNoQ1BQRXZlbnQoY29uc3QgRE9NOjpBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgS1dRQ2xpcGJv
YXJkOjpBY2Nlc3NQb2xpY3kgcG9saWN5KTsKKyAgICBib29sIGRpc3BhdGNoRHJhZ1NyY0V2ZW50
KGNvbnN0IERPTTo6QXRvbWljU3RyaW5nICZldmVudFR5cGUsIGNvbnN0IFFQb2ludCAmbG9jKSBj
b25zdDsKIAogICAgIE5TSW1hZ2UgKmltYWdlRnJvbVJlY3QoTlNSZWN0IHJlY3QpIGNvbnN0Owog
CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjYx
CmRpZmYgLXAgLXUgLXIxLjY2MSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCi0tLSBrd3EvS1dRS0hUTUxQ
YXJ0Lm1tCTE3IEF1ZyAyMDA1IDIwOjEyOjE1IC0wMDAwCTEuNjYxCisrKyBrd3EvS1dRS0hUTUxQ
YXJ0Lm1tCTIxIEF1ZyAyMDA1IDAxOjU2OjUxIC0wMDAwCkBAIC01NCw2ICs1NCw3IEBACiAjaW1w
b3J0ICJkb20yX3JhbmdlaW1wbC5oIgogI2ltcG9ydCAiZG9tX3Bvc2l0aW9uLmgiCiAjaW1wb3J0
ICJkb21fdGV4dGltcGwuaCIKKyNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKICNpbXBvcnQgImh0bWxf
ZG9jdW1lbnRpbXBsLmgiCiAjaW1wb3J0ICJodG1sX2Zvcm1pbXBsLmgiCiAjaW1wb3J0ICJodG1s
X3RhYmxlaW1wbC5oIgpAQCAtOTQsNiArOTUsNyBAQCB1c2luZyBET006OkRvY3VtZW50TWFya2Vy
OwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpFdmVudEltcGw7Cit1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTERvY3VtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEVsZW1lbnRJbXBsOwpAQCAtMTQ4NCw3ICsxNDg2LDcgQEAgYm9vbCBLV1FLSFRN
TFBhcnQ6OmNhbkNhY2hlUGFnZSgpCiAgICAgICAgIHBhcmVudFBhcnQoKSB8fAogICAgICAgICBt
X3VybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHBzIikgfHwgCiAJKGQtPm1fZG9jICYmIChk
LT5tX2RvYy0+YXBwbGV0cygpLT5sZW5ndGgoKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgZC0+bV9kb2MtPmhhc1dpbmRvd0V2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjpVTkxPQURfRVZF
TlQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgZC0+bV9kb2MtPmhhc1dpbmRvd0V2ZW50TGlz
dGVuZXIodW5sb2FkRXZlbnQpIHx8CiAJCSAgICAgIGQtPm1fZG9jLT5oYXNQYXNzd29yZEZpZWxk
KCkpKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTgxMSw3ICsxODEzLDcg
QEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRTY3JvbGxFdmVudCgpCiAgICAgICAgIERvY3VtZW50
SW1wbCAqZG9jID0geG1sRG9jSW1wbCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZG9jLT5kaXNwYXRjaEhUTUxFdmVudChFdmVudEltcGw6OlNDUk9M
TF9FVkVOVCwgdHJ1ZSwgZmFsc2UpOworICAgICAgICBkb2MtPmRpc3BhdGNoSFRNTEV2ZW50KHNj
cm9sbEV2ZW50LCB0cnVlLCBmYWxzZSk7CiAgICAgfQogfQogCkBAIC0yMjQ5LDkgKzIyNTEsOSBA
QCBib29sIEtXUUtIVE1MUGFydDo6ZHJhZ0h5c3RlcmVzaXNFeGNlZWRlCiB9CiAKIC8vIHJldHVy
bnMgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpLmUuLCB3aGV0
aGVyIGV2ZW50aGFuZGxlciBjYW5jZWxlZAotYm9vbCBLV1FLSFRNTFBhcnQ6OmRpc3BhdGNoRHJh
Z1NyY0V2ZW50KGludCBldmVudElkLCBjb25zdCBRUG9pbnQgJmxvYykgY29uc3QKK2Jvb2wgS1dR
S0hUTUxQYXJ0OjpkaXNwYXRjaERyYWdTcmNFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50
VHlwZSwgY29uc3QgUVBvaW50ICZsb2MpIGNvbnN0CiB7Ci0gICAgYm9vbCBub0RlZmF1bHRQcm9j
ID0gZC0+bV92aWV3LT5kaXNwYXRjaERyYWdFdmVudChldmVudElkLCBfZHJhZ1NyYy5nZXQoKSwg
bG9jLCBfZHJhZ0NsaXBib2FyZCk7CisgICAgYm9vbCBub0RlZmF1bHRQcm9jID0gZC0+bV92aWV3
LT5kaXNwYXRjaERyYWdFdmVudChldmVudFR5cGUsIF9kcmFnU3JjLmdldCgpLCBsb2MsIF9kcmFn
Q2xpcGJvYXJkKTsKICAgICByZXR1cm4gIW5vRGVmYXVsdFByb2M7CiB9CiAKQEAgLTIzNjgsNyAr
MjM3MCw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpraHRtbE1vdXNlTW92ZUV2ZW50KE0KICAgICAg
ICAgICAgICAgICAgICAgICAgIF9kcmFnQ2xpcGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KF9k
cmFnU3JjLmdldCgpLCBRUG9pbnQoX21vdXNlRG93blggLSBzcmNYLCBfbW91c2VEb3duWSAtIHNy
Y1kpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGRpc3BhdGNoRHJhZ1NyY0V2
ZW50KEV2ZW50SW1wbDo6RFJBR1NUQVJUX0VWRU5ULCBRUG9pbnQoX21vdXNlRG93bldpblgsIF9t
b3VzZURvd25XaW5ZKSk7CisgICAgICAgICAgICAgICAgICAgIF9tb3VzZURvd25NYXlTdGFydERy
YWcgPSBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnc3RhcnRFdmVudCwgUVBvaW50KF9tb3VzZURv
d25XaW5YLCBfbW91c2VEb3duV2luWSkpOwogICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlk
YXRlIGNsaXBib2FyZCBoZXJlIGFnYWluc3QgYW55bW9yZSBwYXN0ZWJvYXJkIHdyaXRpbmcgZm9y
IHNlY3VyaXR5LiAgVGhlIGRyYWcKICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2UgY2FuIHN0
aWxsIGJlIGNoYW5nZWQgYXMgd2UgZHJhZywgYnV0IG5vdCB0aGUgcGFzdGVib2FyZCBkYXRhLgog
ICAgICAgICAgICAgICAgICAgICBfZHJhZ0NsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KEtXUUNs
aXBib2FyZDo6SW1hZ2VXcml0YWJsZSk7CkBAIC0yMzk1LDcgKzIzOTcsNyBAQCB2b2lkIEtXUUtI
VE1MUGFydDo6a2h0bWxNb3VzZU1vdmVFdmVudChNCiAgICAgICAgICAgICAgICAgICAgIEJPT0wg
c3RhcnRlZERyYWcgPSBbX2JyaWRnZSBzdGFydERyYWdnaW5nSW1hZ2U6ZHJhZ0ltYWdlIGF0OmRy
YWdMb2Mgb3BlcmF0aW9uOnNyY09wIGV2ZW50Ol9jdXJyZW50RXZlbnQgc291cmNlSXNESFRNTDpf
ZHJhZ1NyY0lzREhUTUwgREhUTUxXcm90ZURhdGE6d2NXcm90ZVBhc3RlYm9hcmRdOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXJ0ZWREcmFnICYmIF9kcmFnU3JjTWF5QmVESFRNTCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViS2l0IGNhbm5lZCB0aGUgZHJhZyBhdCB0aGUg
bGFzdCBtaW51dGUgLSB3ZSBvd2UgX2RyYWdTcmMgYSBEUkFHRU5EIGV2ZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVudChFdmVudEltcGw6OkRSQUdFTkRfRVZF
TlQsIFFQb2ludChkcmFnTG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bh
dGNoRHJhZ1NyY0V2ZW50KGRyYWdlbmRFdmVudCwgUVBvaW50KGRyYWdMb2NhdGlvbikpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSAKQEAgLTI0MzcsNyArMjQzOSw3
IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpkcmFnU291cmNlTW92ZWRUbyhjb24KIHsKICAgICBpZiAo
IV9kcmFnU3JjLmlzTnVsbCgpICYmIF9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAvLyBm
b3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFuZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVo
YXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKLSAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQo
RXZlbnRJbXBsOjpEUkFHX0VWRU5ULCBsb2MpOworICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVu
dChkcmFnRXZlbnQsIGxvYyk7CiAgICAgfQogfQogCkBAIC0yNDQ2LDcgKzI0NDgsNyBAQCB2b2lk
IEtXUUtIVE1MUGFydDo6ZHJhZ1NvdXJjZUVuZGVkQXQoY29uCiAgICAgaWYgKCFfZHJhZ1NyYy5p
c051bGwoKSAmJiBfZHJhZ1NyY01heUJlREhUTUwpIHsKICAgICAgICAgX2RyYWdDbGlwYm9hcmQt
PnNldERlc3RpbmF0aW9uT3BlcmF0aW9uKG9wZXJhdGlvbik7CiAgICAgICAgIC8vIGZvciBub3cg
d2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMgZGVmYXVsdCBiZWhhdmlvciwg
c2luY2UgdGhlcmUgaXMgbm9uZQotICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVudChFdmVudElt
cGw6OkRSQUdFTkRfRVZFTlQsIGxvYyk7CisgICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRy
YWdlbmRFdmVudCwgbG9jKTsKICAgICB9CiAgICAgZnJlZUNsaXBib2FyZCgpOwogICAgIF9kcmFn
U3JjLnJlc2V0KCk7CkBAIC0yNDU0LDcgKzI0NTYsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6ZHJh
Z1NvdXJjZUVuZGVkQXQoY29uCiAKIC8vIFJldHVybnMgd2hldGhlciBjYWxsZXIgc2hvdWxkIGNv
bnRpbnVlIHdpdGggInRoZSBkZWZhdWx0IHByb2Nlc3NpbmciLCB3aGljaCBpcyB0aGUgc2FtZSBh
cyAKIC8vIHRoZSBldmVudCBoYW5kbGVyIE5PVCBzZXR0aW5nIHRoZSByZXR1cm4gdmFsdWUgdG8g
ZmFsc2UKLWJvb2wgS1dRS0hUTUxQYXJ0OjpkaXNwYXRjaENQUEV2ZW50KGludCBldmVudElkLCBL
V1FDbGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kpCitib29sIEtXUUtIVE1MUGFydDo6ZGlz
cGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgS1dRQ2xpcGJvYXJk
OjpBY2Nlc3NQb2xpY3kgcG9saWN5KQogewogICAgIE5vZGVJbXBsICp0YXJnZXQgPSBkLT5tX3Nl
bGVjdGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCAmJiB4bWxEb2NJbXBs
KCkpIHsKQEAgLTI0NjgsNyArMjQ3MCw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpkaXNwYXRjaENQ
UEV2ZW50KGludCAKICAgICBjbGlwYm9hcmQtPnJlZigpOwogCiAgICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOwotICAgIEV2ZW50SW1wbCAqZXZ0ID0gbmV3IENsaXBib2FyZEV2ZW50SW1wbChzdGF0
aWNfY2FzdDxFdmVudEltcGw6OkV2ZW50SWQ+KGV2ZW50SWQpLCB0cnVlLCB0cnVlLCBjbGlwYm9h
cmQpOworICAgIEV2ZW50SW1wbCAqZXZ0ID0gbmV3IENsaXBib2FyZEV2ZW50SW1wbChldmVudFR5
cGUsIHRydWUsIHRydWUsIGNsaXBib2FyZCk7CiAgICAgZXZ0LT5yZWYoKTsKICAgICB0YXJnZXQt
PmRpc3BhdGNoRXZlbnQoZXZ0LCBleGNlcHRpb25jb2RlLCB0cnVlKTsKICAgICBib29sIG5vRGVm
YXVsdFByb2Nlc3NpbmcgPSBldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKQEAgLTI0ODgsMTcgKzI0
OTAsMTcgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OmRpc3BhdGNoQ1BQRXZlbnQoaW50IAogCiBib29s
IEtXUUtIVE1MUGFydDo6bWF5Q3V0KCkKIHsKLSAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQo
RXZlbnRJbXBsOjpCRUZPUkVDVVRfRVZFTlQsIEtXUUNsaXBib2FyZDo6TnVtYik7CisgICAgcmV0
dXJuICFkaXNwYXRjaENQUEV2ZW50KGJlZm9yZWN1dEV2ZW50LCBLV1FDbGlwYm9hcmQ6Ok51bWIp
OwogfQogCiBib29sIEtXUUtIVE1MUGFydDo6bWF5Q29weSgpCiB7Ci0gICAgcmV0dXJuICFkaXNw
YXRjaENQUEV2ZW50KEV2ZW50SW1wbDo6QkVGT1JFQ09QWV9FVkVOVCwgS1dRQ2xpcGJvYXJkOjpO
dW1iKTsKKyAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoYmVmb3JlY29weUV2ZW50LCBLV1FD
bGlwYm9hcmQ6Ok51bWIpOwogfQogCiBib29sIEtXUUtIVE1MUGFydDo6bWF5UGFzdGUoKQogewot
ICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChFdmVudEltcGw6OkJFRk9SRVBBU1RFX0VWRU5U
LCBLV1FDbGlwYm9hcmQ6Ok51bWIpOworICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChiZWZv
cmVwYXN0ZUV2ZW50LCBLV1FDbGlwYm9hcmQ6Ok51bWIpOwogfQogCiBib29sIEtXUUtIVE1MUGFy
dDo6dHJ5Q3V0KCkKQEAgLTI1MDcsNyArMjUwOSw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0Ojp0cnlD
dXQoKQogICAgIC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0IGVyYXNlcyBkYXRhIGZy
b20gdGhlIGxhc3QgY29weS9wYXN0ZS4KICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVi
b2FyZF0gZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5XSBvd25lcjpuaWxdOwogCi0gICAgcmV0
dXJuICFkaXNwYXRjaENQUEV2ZW50KEV2ZW50SW1wbDo6Q1VUX0VWRU5ULCBLV1FDbGlwYm9hcmQ6
OldyaXRhYmxlKTsKKyAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoY3V0RXZlbnQsIEtXUUNs
aXBib2FyZDo6V3JpdGFibGUpOwogfQogCiBib29sIEtXUUtIVE1MUGFydDo6dHJ5Q29weSgpCkBA
IC0yNTE2LDEyICsyNTE4LDEyIEBAIGJvb2wgS1dRS0hUTUxQYXJ0Ojp0cnlDb3B5KCkKICAgICAv
LyBhbHNvIGRvbmUgZm9yIHNlY3VyaXR5LCBhcyBpdCBlcmFzZXMgZGF0YSBmcm9tIHRoZSBsYXN0
IGNvcHkvcGFzdGUuCiAgICAgW1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGRlY2xh
cmVUeXBlczpbTlNBcnJheSBhcnJheV0gb3duZXI6bmlsXTsKIAotICAgIHJldHVybiAhZGlzcGF0
Y2hDUFBFdmVudChFdmVudEltcGw6OkNPUFlfRVZFTlQsIEtXUUNsaXBib2FyZDo6V3JpdGFibGUp
OworICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChjb3B5RXZlbnQsIEtXUUNsaXBib2FyZDo6
V3JpdGFibGUpOwogfQogCiBib29sIEtXUUtIVE1MUGFydDo6dHJ5UGFzdGUoKQogewotICAgIHJl
dHVybiAhZGlzcGF0Y2hDUFBFdmVudChFdmVudEltcGw6OlBBU1RFX0VWRU5ULCBLV1FDbGlwYm9h
cmQ6OlJlYWRhYmxlKTsKKyAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQocGFzdGVFdmVudCwg
S1dRQ2xpcGJvYXJkOjpSZWFkYWJsZSk7CiB9CiAKIHZvaWQgS1dRS0hUTUxQYXJ0OjpraHRtbE1v
dXNlUmVsZWFzZUV2ZW50KE1vdXNlUmVsZWFzZUV2ZW50ICpldmVudCkKQEAgLTI4MzUsNyArMjgz
Nyw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpzZW5kQ29udGV4dE1lbnVFdmVudCgKICAgICBOb2Rl
SW1wbDo6TW91c2VFdmVudCBtZXYocWV2LnN0YXRlQWZ0ZXIoKSwgTm9kZUltcGw6Ok1vdXNlUHJl
c3MpOwogICAgIGRvYy0+cHJlcGFyZU1vdXNlRXZlbnQoZmFsc2UsIHhtLCB5bSwgJm1ldik7CiAK
LSAgICBib29sIHN3YWxsb3dFdmVudCA9IHYtPmRpc3BhdGNoTW91c2VFdmVudChFdmVudEltcGw6
OkNPTlRFWFRNRU5VX0VWRU5ULAorICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gdi0+ZGlzcGF0Y2hN
b3VzZUV2ZW50KGNvbnRleHRtZW51RXZlbnQsCiAgICAgICAgIG1ldi5pbm5lck5vZGUuZ2V0KCks
IHRydWUsIDAsICZxZXYsIHRydWUsIE5vZGVJbXBsOjpNb3VzZVByZXNzKTsKICAgICBpZiAoIXN3
YWxsb3dFdmVudCAmJiAhaXNQb2ludEluc2lkZVNlbGVjdGlvbih4bSwgeW0pICYmCiAgICAgICAg
IChbX2JyaWRnZSBzZWxlY3RXb3JkQmVmb3JlTWVudUV2ZW50XSB8fCBbX2JyaWRnZSBpc0VkaXRh
YmxlXSB8fCBtZXYuaW5uZXJOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSkgewpAQCAtMzc2Miwx
NCArMzc2NCw5IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRXaW5kb3dIYXNGb2N1cyhib28KICAg
ICAgICAgcmV0dXJuOwogICAgIG1fd2luZG93SGFzRm9jdXMgPSBmbGFnOwogCi0gICAgRG9jdW1l
bnRJbXBsICpkb2MgPSB4bWxEb2NJbXBsKCk7Ci0gICAgaWYgKGRvYykgewotICAgICAgICBOb2Rl
SW1wbCAqYm9keSA9IGRvYy0+Ym9keSgpOwotICAgICAgICBpZiAoYm9keSkgewotICAgICAgICAg
ICAgaW50IGV2ZW50SUQgPSBmbGFnID8gRXZlbnRJbXBsOjpGT0NVU19FVkVOVCA6IEV2ZW50SW1w
bDo6QkxVUl9FVkVOVDsKLSAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoV2luZG93RXZlbnQoZXZl
bnRJRCwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoRG9jdW1lbnRJ
bXBsICpkb2MgPSB4bWxEb2NJbXBsKCkpCisgICAgICAgIGlmIChOb2RlSW1wbCAqYm9keSA9IGRv
Yy0+Ym9keSgpKQorICAgICAgICAgICAgYm9keS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChmbGFnID8g
Zm9jdXNFdmVudCA6IGJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogUUNoYXIgS1dRS0hU
TUxQYXJ0OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3QKSW5kZXg6IGt3cS9LV1FU
ZXh0QXJlYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
VGV4dEFyZWEubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODgKZGlmZiAtcCAtdSAtcjEuODgg
a3dxL0tXUVRleHRBcmVhLm1tCi0tLSBrd3EvS1dRVGV4dEFyZWEubW0JMTYgQXVnIDIwMDUgMTk6
MDM6MTkgLTAwMDAJMS44OAorKysga3dxL0tXUVRleHRBcmVhLm1tCTIxIEF1ZyAyMDA1IDAxOjU2
OjUyIC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkRPTUNTUy5oIgogI2ltcG9y
dCAiRE9NSFRNTC5oIgorI2ltcG9ydCAiRXZlbnROYW1lcy5oIgogI2ltcG9ydCAiS1dRQXNzZXJ0
aW9ucy5oIgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAjaW1wb3J0ICJLV1FOU1ZpZXdFeHRy
YXMuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbXBvcnQgInJlbmRlcl9yZXBsYWNlZC5oIgogI2lt
cG9ydCAiV2ViQ29yZUJyaWRnZS5oIgogCit1c2luZyBET006OkF0b21pY1N0cmluZzsKIHVzaW5n
IERPTTo6RXZlbnRJbXBsOwordXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKIHVzaW5n
IERPTTo6Tm9kZUltcGw7CiB1c2luZyBraHRtbDo6UmVuZGVyV2lkZ2V0OwogCkBAIC0xMTI5LDU2
ICsxMTMyLDUxIEBAIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29udGludW91c1NwZWxsQ2hlY2sKIAog
Ly8gRklYTUU6IFRoaXMgZG9lcyBub3QgeWV0IGltcGxlbWVudCB0aGUgZmVhdHVyZSBvZiBjYW5j
ZWxpbmcgdGhlIG9wZXJhdGlvbiwgb3IgdGhlIG5lY2Vzc2FyeQogLy8gc3VwcG9ydCB0byBpbXBs
ZW1lbnQgdGhlIGNsaXBib2FyZCBvcGVyYXRpb25zIGVudGlyZWx5IGluIEphdmFTY3JpcHQuCi0t
ICh2b2lkKWRpc3BhdGNoSFRNTEV2ZW50OihFdmVudEltcGw6OkV2ZW50SWQpZXZlbnRJRAorLSAo
dm9pZClkaXNwYXRjaEhUTUxFdmVudDooY29uc3QgQXRvbWljU3RyaW5nICYpZXZlbnRUeXBlCiB7
Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAgICBjb25zdCBSZW5kZXJXaWRnZXQgKnJ3ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3Qo
KSk7Ci0gICAgICAgIGlmIChydykgewotICAgICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBydy0+
ZWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBub2Rl
LT5kaXNwYXRjaEhUTUxFdmVudChldmVudElELCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQorICAgIGlmICh3aWRnZXQpCisgICAgICAgIGlmIChjb25zdCBS
ZW5kZXJXaWRnZXQgKnJ3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KHdpZGdl
dC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkpCisgICAgICAgICAgICBpZiAoTm9kZUltcGwgKm5vZGUg
PSBydy0+ZWxlbWVudCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmRpc3BhdGNoSFRNTEV2ZW50
KGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogLSAodm9pZCljdXQ6KGlkKXNlbmRlcgog
ewogICAgIGluQ3V0ID0gWUVTOwotICAgIFtzZWxmIGRpc3BhdGNoSFRNTEV2ZW50OkV2ZW50SW1w
bDo6QkVGT1JFQ1VUX0VWRU5UXTsKKyAgICBbc2VsZiBkaXNwYXRjaEhUTUxFdmVudDpiZWZvcmVj
dXRFdmVudF07CiAgICAgW3N1cGVyIGN1dDpzZW5kZXJdOwotICAgIFtzZWxmIGRpc3BhdGNoSFRN
TEV2ZW50OkV2ZW50SW1wbDo6Q1VUX0VWRU5UXTsKKyAgICBbc2VsZiBkaXNwYXRjaEhUTUxFdmVu
dDpjdXRFdmVudF07CiAgICAgaW5DdXQgPSBOTzsKIH0KIAogLSAodm9pZCljb3B5OihpZClzZW5k
ZXIKIHsKICAgICBpZiAoIWluQ3V0KQotICAgICAgICBbc2VsZiBkaXNwYXRjaEhUTUxFdmVudDpF
dmVudEltcGw6OkJFRk9SRUNPUFlfRVZFTlRdOworICAgICAgICBbc2VsZiBkaXNwYXRjaEhUTUxF
dmVudDpiZWZvcmVjb3B5RXZlbnRdOwogICAgIFtzdXBlciBjb3B5OnNlbmRlcl07CiAgICAgaWYg
KCFpbkN1dCkKLSAgICAgICAgW3NlbGYgZGlzcGF0Y2hIVE1MRXZlbnQ6RXZlbnRJbXBsOjpDT1BZ
X0VWRU5UXTsKKyAgICAgICAgW3NlbGYgZGlzcGF0Y2hIVE1MRXZlbnQ6Y29weUV2ZW50XTsKIH0K
IAogLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgZGlzcGF0Y2hIVE1MRXZl
bnQ6RXZlbnRJbXBsOjpCRUZPUkVQQVNURV9FVkVOVF07CisgICAgW3NlbGYgZGlzcGF0Y2hIVE1M
RXZlbnQ6YmVmb3JlcGFzdGVFdmVudF07CiAgICAgW3N1cGVyIHBhc3RlOnNlbmRlcl07Ci0gICAg
W3NlbGYgZGlzcGF0Y2hIVE1MRXZlbnQ6RXZlbnRJbXBsOjpQQVNURV9FVkVOVF07CisgICAgW3Nl
bGYgZGlzcGF0Y2hIVE1MRXZlbnQ6cGFzdGVFdmVudF07CiB9CiAKIC0gKHZvaWQpcGFzdGVBc1Bs
YWluVGV4dDooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgZGlzcGF0Y2hIVE1MRXZlbnQ6RXZlbnRJ
bXBsOjpCRUZPUkVQQVNURV9FVkVOVF07CisgICAgW3NlbGYgZGlzcGF0Y2hIVE1MRXZlbnQ6YmVm
b3JlcGFzdGVFdmVudF07CiAgICAgW3N1cGVyIHBhc3RlQXNQbGFpblRleHQ6c2VuZGVyXTsKLSAg
ICBbc2VsZiBkaXNwYXRjaEhUTUxFdmVudDpFdmVudEltcGw6OlBBU1RFX0VWRU5UXTsKKyAgICBb
c2VsZiBkaXNwYXRjaEhUTUxFdmVudDpwYXN0ZUV2ZW50XTsKIH0KIAogLSAodm9pZClwYXN0ZUFz
UmljaFRleHQ6KGlkKXNlbmRlcgogewotICAgIFtzZWxmIGRpc3BhdGNoSFRNTEV2ZW50OkV2ZW50
SW1wbDo6QkVGT1JFUEFTVEVfRVZFTlRdOworICAgIFtzZWxmIGRpc3BhdGNoSFRNTEV2ZW50OmJl
Zm9yZXBhc3RlRXZlbnRdOwogICAgIFtzdXBlciBwYXN0ZUFzUmljaFRleHQ6c2VuZGVyXTsKLSAg
ICBbc2VsZiBkaXNwYXRjaEhUTUxFdmVudDpFdmVudEltcGw6OlBBU1RFX0VWRU5UXTsKKyAgICBb
c2VsZiBkaXNwYXRjaEhUTUxFdmVudDpwYXN0ZUV2ZW50XTsKIH0KIAogLSAoQk9PTClpblJlc3Bv
bmRlckNoYW5nZQo=
</data>
<flag name="review"
          id="407"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>