<?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>149787</bug_id>
          
          <creation_ts>2015-10-03 18:41:27 -0700</creation_ts>
          <short_desc>REGRESSION(r190522): Caused a lot of leaks (Requested by ap on #webkit).</short_desc>
          <delta_ts>2015-10-05 10:12:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149727</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>ggaren</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1130460</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-03 18:41:27 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/190522 broke the build:
Caused a lot of leaks (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130462</commentid>
    <comment_count>1</comment_count>
      <attachid>262385</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-03 18:42:08 -0700</bug_when>
    <thetext>Created attachment 262385
ROLLOUT of r190522

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130463</commentid>
    <comment_count>2</comment_count>
      <attachid>262385</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-03 18:45:50 -0700</bug_when>
    <thetext>Comment on attachment 262385
ROLLOUT of r190522

Clearing flags on attachment: 262385

Committed r190546: &lt;http://trac.webkit.org/changeset/190546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130464</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-03 18:45:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262385</attachid>
            <date>2015-10-03 18:42:08 -0700</date>
            <delta_ts>2015-10-03 18:45:50 -0700</delta_ts>
            <desc>ROLLOUT of r190522</desc>
            <filename>bug-149787-20151003184140.patch</filename>
            <type>text/plain</type>
            <size>173741</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YTIzODE3OTNkYTVkZWEzOGI1MzAxNGNmNzVlM2Y4Yzk0Mzk1ZDg0Li44YTM5NDZhYjk0OTk5Mzc4
M2M1MjhjNzNkMmUwZjNmNmI1ODA0MmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNS0xMC0wMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5MDUyMi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTc4NworCisgICAg
ICAgIENhdXNlZCBhIGxvdCBvZiBsZWFrcyAoUmVxdWVzdGVkIGJ5IGFwIG9uICN3ZWJraXQpLgor
CisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiVW5yZXZpZXdlZCwgcm9s
bGluZyBiYWNrIGluIHIxOTA0NTAiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDk3MjcKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMTkwNTIyCisKIDIwMTUtMTAtMDIgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBicmVha3BvaW50IG9wdGlvbiB0byBp
Z25vcmUgbiB0aW1lcyBiZWZvcmUgc3RvcHBpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggM2Y5MzY0MGFhZWNhZGM4NzAzOTcyOThmY2RmYmRj
ZjE4MTY5NTI2My4uYmY2ZDE5ZGU4NmVjNmE4ZjgyY2Q4ZmU1ZjY4YTJhZDA3MmVkYzhmYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTgyLDcw
ICs4Miw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gQ29kZUJsb2Nr
OjpzX2luZm8gPSB7Ci0gICAgIkNvZGVCbG9jayIsIDAsIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9U
QUJMRShDb2RlQmxvY2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gRnVuY3Rpb25Db2RlQmxvY2s6
OnNfaW5mbyA9IHsKLSAgICAiRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAot
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25Db2RlQmxvY2spCi19OwotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpz
X2luZm8gPSB7Ci0gICAgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwK
LSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5Q29kZUJsb2NrKQotfTsKLSNlbmRp
ZgotCi1jb25zdCBDbGFzc0luZm8gR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIkds
b2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJM
RShHbG9iYWxDb2RlQmxvY2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gUHJvZ3JhbUNvZGVCbG9j
azo6c19pbmZvID0gewotICAgICJQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwK
LSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb2dyYW1Db2RlQmxvY2spCi19OwotCi1jb25zdCBD
bGFzc0luZm8gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0gewotICAgICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RB
QkxFKE1vZHVsZVByb2dyYW1Db2RlQmxvY2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gRXZhbENv
ZGVCbG9jazo6c19pbmZvID0gewotICAgICJFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEV2YWxDb2RlQmxvY2spCi19OwotCi12b2lkIEZ1
bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+fkZ1bmN0aW9uQ29kZUJsb2NrKCk7Ci19Ci0KLSNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi12b2lkIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+
fldlYkFzc2VtYmx5Q29kZUJsb2NrKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQcm9ncmFtQ29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8UHJvZ3JhbUNvZGVCbG9j
ayo+KGNlbGwpLT5+UHJvZ3JhbUNvZGVCbG9jaygpOwotfQotCi12b2lkIE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKj4oY2VsbCktPn5Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Ci19Ci0KLXZv
aWQgRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PEV2
YWxDb2RlQmxvY2sqPihjZWxsKS0+fkV2YWxDb2RlQmxvY2soKTsKLX0KLQogQ1N0cmluZyBDb2Rl
QmxvY2s6OmluZmVycmVkTmFtZSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7
CkBAIC0yMTcsNyArMTUzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUo
UHJpbnRTdHJlYW0mIG91dCwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogICAgIG91dC5wcmlu
dChpbmZlcnJlZE5hbWUoKSwgIiMiLCBoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkpOwogICAgIG91
dC5wcmludCgiOlsiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iKTsKICAgICBpZiAoISFtX2FsdGVy
bmF0aXZlKQotICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihhbHRlcm5hdGl2ZSgpKSwgIi0+
Iik7CisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpLCAi
LT4iKTsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIs
IGppdFR5cGUsIGNvZGVUeXBlKCkpOwogCiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKQpAQCAtMTY0OSw5ICsxNTg1LDggQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKLSAgICA6IEpTQ2VsbCgq
dm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0
KQorQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90
aGVyKQorICAgIDogbV9nbG9iYWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCiAgICAgLCBt
X2hlYXAob3RoZXIubV9oZWFwKQogICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMob3RoZXIubV9u
dW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQpAQCAt
MTY1OSwxMSArMTU5NCwxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jawogICAgICwgbV9zaG91
bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV91bmxp
bmtlZENvZGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQor
ICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxl
LmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAgICAsIG1faGFzRGVidWdnZXJT
dGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxl
ZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpv
dGhlci5tX3ZtLCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKKyAgICAsIG1f
b3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQo
KSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0p
CiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhp
c1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQpAQCAtMTY4OCwxOCArMTYyMywxMyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIENvZGVCbG9jawogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6
OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewotICAgIG1fdmlzaXRXZWFrbHlIYXNC
ZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBt
X3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxz
ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAKICAgICBBU1NFUlQobV9oZWFwLT5pc0Rl
ZmVycmVkKCkpOwogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAg
IHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxv
Y2smIG90aGVyKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQogICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKICAgICBqaXRBZnRlcldhcm1VcCgpOwogCkBAIC0xNzEzLDEyICsx
NjQzLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJz
ZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICB9CiAgICAgCiAgICAgbV9oZWFwLT5t
X2NvZGVCbG9ja3MuYWRkKHRoaXMpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoc2l6ZW9mKENvZGVCbG9jaykpOwogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICBKU1Njb3BlKiBz
Y29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIDogSlND
ZWxsKCp2bSwgc3RydWN0dXJlKQotICAgICwgbV9nbG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9i
amVjdCgpLT52bSgpLCB0aGlzLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpCitDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVk
IGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KHNjb3BlLT5nbG9i
YWxPYmplY3QoKS0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkp
CiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApCiAgICAgLCBtX251bUNh
bGxlZVJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAg
ICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKQEAgLTE3MjYsMTEg
KzE2NTUsMTEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXQKICAgICAsIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1fdW5saW5rZWRDb2Rl
KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1f
dW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKICAgICAs
IG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQogICAgICwgbV9udW1CcmVha3Bv
aW50cygwKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRo
aXMsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0o
dW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENv
ZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCiAgICAgLCBtX3Njb3BlUmVnaXN0ZXIodW5saW5rZWRD
b2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKQEAgLTE3NDksMzEgKzE2NzgsMjYgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXQKICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBh
YmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKIHsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNh
bGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNp
dFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogCiAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJl
ZCgpKTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NF
UlQobV9zb3VyY2UpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7Ci19CiAKLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAotICAgIEpTU2NvcGUqIHNjb3BlKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLQotICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250
cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgp
LT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBvd25l
ckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCBvd25lckV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigp
IHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgdm0oKS0+ZnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUt
PnNvdXJjZUlEKCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCks
IG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKIAogICAgIHNldENv
bnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycygpLCB1
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkpOwog
ICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3Rl
cigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCBvd25lckV4
ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgewogICAgICAgICBMaW5rVGltZUNv
bnN0YW50IHR5cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsKICAgICAgICAg
aWYgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+cmVnaXN0ZXJJ
bmRleEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmplY3QtPmpz
Q2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOworICAgICAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgbV9nbG9i
YWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOwogICAgIH0KIAogICAg
IEhhc2hTZXQ8aW50LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxpbnQ+PiBjbG9uZWRDb25zdGFudFN5bWJvbFRhYmxlczsKQEAgLTE3ODgsNyAr
MTcxMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAg
ICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
XS5zZXQoKm1fdm0sIHRoaXMsIHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92bSkpOwor
ICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4
ZWN1dGFibGUsIHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92bSkpOwogICAgICAgICAg
ICAgICAgIGNsb25lZENvbnN0YW50U3ltYm9sVGFibGVzLmFkZChpICsgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODA4LDE3ICsxNzMy
LDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6
ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CiAgICAg
Zm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChpKTsKLSAgICAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xG
bG93UHJvZmlsZXIoKSkKLSAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgp
LT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNs
c1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3du
ZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVy
KCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICAgICAgdm0oKS0+ZnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0
T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsK
KyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkp
KTsKICAgICB9CiAKICAgICBtX2Z1bmN0aW9uRXhwcnMucmVzaXplVG9GaXQodW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpKTsKICAgICBmb3IgKHNpemVfdCBjb3VudCA9
IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtl
ZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOwotICAgICAg
ICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQotICAg
ICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRS
YW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCgpKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgdGhp
cywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJj
ZSgpKSk7CisgICAgICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpCisgICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICBtX2Z1bmN0aW9u
RXhwcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+
bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0KIAogICAgIGlm
ICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURhdGEoKSkgewpAQCAtMTg5Nyw3ICsxODIxLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKIAogICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9
IG9wY29kZUxlbmd0aChwY1swXS51Lm9wY29kZSk7CiAKLSAgICAgICAgaW5zdHJ1Y3Rpb25zW2ld
ID0gdm0uaW50ZXJwcmV0ZXItPmdldE9wY29kZShwY1swXS51Lm9wY29kZSk7CisgICAgICAgIGlu
c3RydWN0aW9uc1tpXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbMF0udS5vcGNv
ZGUpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8IG9wTGVuZ3RoOyArK2opIHsKICAg
ICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0gc2l6ZW9mKGludHB0cl90KSkKICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUucG9pbnRlciA9IDA7CkBAIC0xOTU2LDcg
KzE4ODAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgaW50IGluZmVy
cmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKIAogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU7Ci0gICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSh2
bSwKKyAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5pbml0aWFsaXplKCp2bSgp
LAogICAgICAgICAgICAgICAgIG93bmVyRXhlY3V0YWJsZSwgbV9nbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMDA1LDExICsxOTI5LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rCiAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGxpbmtlZCBtb2R1bGUgZW52aXJv
bm1lbnQgc3Ryb25nbHkgcmVmZXJlbmNlZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9u
Z2x5UmVmZXJlbmNlZE1vZHVsZUVudmlyb25tZW50cy5hZGQoanNDYXN0PEpTTW9kdWxlRW52aXJv
bm1lbnQqPihvcC5sZXhpY2FsRW52aXJvbm1lbnQpKS5pc05ld0VudHJ5KQogICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkQ29uc3RhbnQob3AubGV4aWNhbEVudmlyb25tZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIG9w
LmxleGljYWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5qc0NlbGwuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGljYWxFbnZp
cm9ubWVudCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNl0udS5zeW1ib2xUYWJsZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Au
bGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2sob3AudHlwZSwgdGhpcykpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2
XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIGNvbnN0YW50U2NvcGUpOworICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUs
IGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjA0Miw3ICsxOTY2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAg
IGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0
OwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwNzksMTQgKzIwMDMsMTQg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBpZiAob3Aud2F0Y2hw
b2ludFNldCkKICAgICAgICAgICAgICAgICAgICAgb3Aud2F0Y2hwb2ludFNldC0+aW52YWxpZGF0
ZShQdXRUb1Njb3BlRmlyZURldGFpbCh0aGlzLCBpZGVudCkpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChvcC5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51
LnN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJs
ZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2lu
dGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6IHsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxlcigpKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCktPnR5cGVQcm9maWxlcigpKTsKICAgICAgICAgICAgIC8vIFRo
ZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogb3BfcHJvZmlsZV90eXBlIHJlZ1RvUHJv
ZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwogICAg
ICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAg
ICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOwpAQCAtMjExNiw4ICsyMDQw
LDggQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5n
IHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHll
dC4KICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmls
aW5nKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1i
b2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9y
VmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZh
cmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGltcGws
ICp2bSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxl
LT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCAqdm0oKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBU
eXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzOwogCkBAIC0yMTMwLDggKzIwNTQsOCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gaWRlbnRpZmllcihwY1s0XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAg
ICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdh
cyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4K
LSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlE
Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKLSAgICAgICAgICAgICAgICBn
bG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2Nr
ZXIsIGlkZW50LmltcGwoKSwgdm0pOworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQg
PSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwg
KnZtKCkpOworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xv
YmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CiAKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIxNTcsOCArMjA4MSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIg
PSB2bS50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9u
KGdsb2JhbFZhcmlhYmxlSUQsCi0gICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3Vy
Y2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsKKyAgICAg
ICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgp
LT50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGds
b2JhbFZhcmlhYmxlSUQsCisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJ
RCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CiAgICAgICAg
ICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwogICAgICAg
ICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKIApAQCAtMjE2
Niw3ICsyMDkwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBs
b2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25l
ckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogCiAgICAgICAgICAgICBp
ZiAoc2hvdWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQotICAgICAgICAgICAgICAgIHZtLnR5
cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKIAog
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTIxODQsNyArMjEwOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgIGkgKz0gb3BMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKHZtLmNvbnRy
b2xGbG93UHJvZmlsZXIoKSkKKyAgICBpZiAodm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQog
ICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIo
aW5zdHJ1Y3Rpb25zKTsKIAogICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGOjpSZWZDb3VudGVkQXJy
YXk8SW5zdHJ1Y3Rpb24+KGluc3RydWN0aW9ucyk7CkBAIC0yMjA0LDEzICsyMTI4LDEyIEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwogICAgIAogICAg
IG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKLSAgICBtX2hlYXAtPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlv
bikpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENvZGVC
bG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKIH0K
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0NlbGwo
dm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwg
dGhpcywgZ2xvYmFsT2JqZWN0KQorQ29kZUJsb2NrOjpDb2RlQmxvY2soV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDAp
CkBAIC0yMjIxLDcgKzIxNDQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRQogICAgICwgbV9o
YXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5n
TW9kZURpc2FibGVkKQogICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAgICwgbV9vd25lckV4
ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93bmVyRXhlY3V0YWJsZSkKKyAg
ICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0oJnZtKQogICAgICwgbV9pc1N0cmljdE1v
ZGUoZmFsc2UpCiAgICAgLCBtX25lZWRzQWN0aXZhdGlvbihmYWxzZSkKQEAgLTIyMzUsMTMgKzIx
NTgsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRQogI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1f
aGVhcC0+aXNEZWZlcnJlZCgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKQotewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIAogICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFk
ZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihD
b2RlQmxvY2spKTsKIH0KICNlbmRpZgogCkBAIC0yMjUzLDMwICsyMTcyLDI5IEBAIENvZGVCbG9j
azo6fkNvZGVCbG9jaygpCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICBk
dW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCi0KKyAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKKyAgICAgICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisjaWYgRU5BQkxFKEpJVCkKICAg
ICAvLyBXZSBtYXkgYmUgZGVzdHJveWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVy
IHRvIHVzIGFyZSBkZXN0cm95ZWQuCiAgICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2Nr
cyBiZWNvbWUgdW5yZWFjaGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKICAgICAvLyBpcyBu
byBndWFyYW50ZWUgYWJvdXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBk
ZXN0cm95ZWQuCiAgICAgLy8gU28sIGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywg
YW5kIGdldCBkZXN0cm95ZWQgYmVmb3JlIHRoZQogICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhh
dmUgY2FsbHMgaW50byB1cywgdGhlbiB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCiAgICAgLy8g
ZGVzdHJ1Y3RvciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2
YWxpZCkgbGlua2VkIGxpc3QuCi0gICAgdW5saW5rSW5jb21pbmdDYWxscygpOworICAgIHdoaWxl
IChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAg
ICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKKyAgICB3aGlsZSAobV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxs
cy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+cmVt
b3ZlKCk7CiAgICAgCiAgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3aWxsIGJl
IHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJwogICAgIC8vIG1faW5jb21pbmdDYWxscyBs
aW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJbmZvCiAg
ICAgLy8gZGVzdHJ1Y3RvcnMuCiAKLSNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQogICAgICAgICAoKml0ZXIpLT5kZXJlZigpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUpCi17Ci0gICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVy
bmF0aXZlKTsKLX0KLQogdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1Zh
bHVlKQogewogICAgIG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOwpAQCAtMjI5Nyw0MyArMjIx
NSw3MyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwo
KQogICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQogICAgICAgICByZXR1cm4g
MDsKICAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAgIHJl
dHVybiBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCk7CisgICAgcmV0dXJuIGppdENvZGUtPm9zckVu
dHJ5QmxvY2suZ2V0KCk7CiAjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICByZXR1cm4gMDsK
ICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vh
a2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnZpc2l0U3Ryb25nbHko
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdFdlYWts
eUhhc0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKKyAgICBi
b29sIHNldEJ5TWUgPSBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKCFzZXRCeU1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCi0gICAgICAgIHJldHVybjsKKyAgICB2
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkp
IHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlz
KTsKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICBzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgcHJvcGFnYXRlVHJhbnNpdGlv
bnModmlzaXRvcik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15c2VsZiBt
b3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHkuCisgICAg
Ly8gVG8gdGhpcyBlbmQsIHVzZSBhbiBhdG9taWMgb3BlcmF0aW9uIHRvIGNoZWNrIChhbmQgc2V0
KSBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuCisgICAgLy8gT25seSBvbmUgdGhyZWFkIG1h
eSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNoZXZlciBvbmUgd2lucyB0aGUgYXRvbWlj
IHNldCByYWNlLgorICAgIGJvb2wgc2V0QnlNZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2Fs
bGVkLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7CisgICAgaWYgKCFzZXRCeU1l
KQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAg
ICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgCisgICAgaWYg
KENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCisg
ICAgICAgIG90aGVyQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworCisgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCksIHNpemVvZihDb2Rl
QmxvY2spKTsKKyAgICBpZiAobV9qaXRDb2RlKQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFibGUoKSwgbV9qaXRDb2RlLT5zaXplKCkpOworICAg
IGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgLy8gRGl2aWRlIGJ5IHJlZkNv
dW50KCkgYmVjYXVzZSBtX2luc3RydWN0aW9ucyBwb2ludHMgdG8gc29tZXRoaW5nIHRoYXQgaXMg
c2hhcmVkCisgICAgICAgIC8vIGJ5IG11bHRpcGxlIENvZGVCbG9ja3MsIGFuZCB3ZSBvbmx5IHdh
bnQgdG8gY291bnQgaXQgdG93YXJkcyB0aGUgaGVhcCBzaXplIG9uY2UuCisgICAgICAgIC8vIEhh
dmluZyBlYWNoIENvZGVCbG9jayByZXBvcnQgb25seSBpdHMgcHJvcG9ydGlvbmFsIHNoYXJlIG9m
IHRoZSBzaXplIGlzIG9uZSB3YXkKKyAgICAgICAgLy8gb2YgYWNjb21wbGlzaGluZyB0aGlzLgor
ICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFibGUo
KSwgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1
Y3Rpb25zLnJlZkNvdW50KCkpOwogICAgIH0KIAorICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlu
a2VkQ29kZSk7CisKICAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5j
b25kaXRpb25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKICAgICAvLyBhbmQg
amV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0
IG9uZSBvZiB0aG9zZSB0aGluZ3MKICAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAx
LiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CiAgICAg
Ly8gZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwot
CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXMpOworICAgIAorICAg
IG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIAorICAgIGlmIChz
aG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKKyAgICAgICAgdmlzaXRTdHJvbmdseSh2aXNpdG9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBqZXR0
aXNvbiBvdXJzZWx2ZXMgd2UnbGwgaW5zdGFsbCBvdXIgYWx0ZXJuYXRpdmUsIHNvIG1ha2Ugc3Vy
ZSB0aGF0IGl0Ci0gICAgLy8gc3Vydml2ZXMgR0MgZXZlbiBpZiB3ZSBkb24ndC4KLSAgICB2aXNp
dG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7Ci0gICAgCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0
aGluZ3MgdGhhdCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhw
b2ludCBmb3IKICAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVy
ZXMgdGhhdCB3b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKICAgICAvLyBpbmxpbmUgY2FjaGUu
IFNvIGl0IG1ha2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNp
dG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7
CisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOwogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vu
c2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLApAQCAtMjM0NCw0OCArMjI5Miwx
NCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcgYWRkaXRpb25hbCBvYmplY3RzLCBvciBieSBvdGhlciBv
YmplY3RzIGJlaW5nIG1hcmtlZCBmb3IKICAgICAvLyBvdGhlciByZWFzb25zLCB0aGF0IHRoaXMg
aXRlcmF0aW9uIHNob3VsZCBydW4gYWdhaW47IGl0IHdpbGwgbm90aWZ5IHVzIG9mIHRoaXMKICAg
ICAvLyBkZWNpc2lvbiBieSBjYWxsaW5nIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpLgotCi0gICAg
bV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7Ci0gICAgcHJvcGFnYXRlVHJh
bnNpdGlvbnModmlzaXRvcik7Ci0KKyAgICAKICAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5s
aXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBwcm9wYWdhdGVUcmFuc2l0
aW9ucyh2aXNpdG9yKTsKICAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOwotfQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25k
aXRpb25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQgamV0
dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9u
ZSBvZiB0aG9zZSB0aGluZ3MKLSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBT
byB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAgLy8g
ZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5h
ZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotCi0g
ICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxs
KCkpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIob3Ro
ZXJCbG9jayk7Ci0KLSAgICBpZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzLCBtX2ppdENvZGUtPnNpemUoKSk7Ci0gICAgaWYgKG1faW5z
dHJ1Y3Rpb25zLnNpemUoKSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpcywgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1f
aW5zdHJ1Y3Rpb25zLnJlZkNvdW50KCkpOwotCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5r
ZWRDb2RlKTsKLQotICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwot
ICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKLQotICAgIG1fYWxsVHJh
bnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25z
KHZpc2l0b3IpOwotfQotCiBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCiB7
CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTI0MTMsNyAr
MjMyNywxNyBAQCBib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQogICAg
IC8vICAgYmVjYXVzZSBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQgd291bGQgaGF2ZSBzdXJ2aXZlZCBh
cyB0cnVlLgogICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCBkb24ndCBoYXZlIGFueSBkZWFkIHdl
YWsgcmVmZXJlbmNlcy4KIAotICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlzKTsKKyAgICBp
ZiAobV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBpZiAo
bV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpCkBAIC0y
NDIzLDM0ICsyMzQ3LDEyIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vh
a1JlZmVyZW5jZSgpCiAgICAgcmV0dXJuICFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogfQog
Ci1zdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSkKLXsKLSAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICBjYXNlIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAgIHN0ZDo6Y2hy
b25vOjpzZWNvbmRzKDUpKTsKLSAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgotICAgICAg
ICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklU
IGFuZAotICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgotICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygxNSkpOwotICAgIGNh
c2UgSklUQ29kZTo6REZHSklUOgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9u
X2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6OmNocm9u
bzo6c2Vjb25kcygyMCkpOwotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgotICAgICAgICByZXR1
cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4o
Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKLSAgICB9Ci19
Ci0KIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKIHsKLSAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCisgICAgaWYgKG1fdmlzaXRTdHJvbmdseUhhc0JlZW5D
YWxsZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHRpbWVTaW5jZUNyZWF0aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUo
KSkpCisgICAgaWYgKHRpbWVTaW5jZUNyZWF0aW9uKCkgPCBKSVRDb2RlOjp0aW1lVG9MaXZlKGpp
dFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MjYwMywxOCArMjUwNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4g
UmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKICAgICAvLyBjb21lIGJhY2sgaGVy
ZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgogICAgIGRmZ0NvbW1vbi0+
bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKHZpc2l0b3IpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENvZGVC
bG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0KLSAgICAgICAg
Yml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcikpOwotCi0gICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
LSAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOworICAgIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIGRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwog
fQogCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygpCkBAIC0yNzM0
LDI5ICsyNjMyLDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5l
Q2FjaGVzKCkKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFs
aXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJpdHdpc2Vf
Y2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikpOwotCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVU
b1dlYWtSZWZlcmVuY2UoKSkgewotICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CisgICAgaWYgKHNob3VsZEpldHRpc29uRHVl
VG9XZWFrUmVmZXJlbmNlKCkpIHsKKyAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9XZWFrUmVmZXJlbmNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAotICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9P
bGRBZ2UoKSkgewotICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNv
bkR1ZVRvT2xkQWdlKTsKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKSB7Cisg
ICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJbnRJbmxp
bmVDYWNoZXMoKTsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUo
KSkpCisgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShK
SVQpCi0gICAgaWYgKCEhY29kZUJsb2NrLT5qaXRDb2RlKCkpCi0gICAgICAgIGNvZGVCbG9jay0+
ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIGlmICghIWppdENvZGUoKSkK
KyAgICAgICAgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlmCiB9CiAK
QEAgLTI4NTEsMTQgKzI3NDYsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdl
dHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgLy8gZ3VhcmFudGVlaW5nIHRoYXQgaXQgbWF0
Y2hlcyB0aGUgZGV0YWlscyBvZiB0aGUgQ29kZUJsb2NrIHdlIGNvbXBpbGVkCiAgICAgLy8gdGhl
IE9TUiBleGl0IGFnYWluc3QuCiAKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7
CisgICAgYWx0ZXJuYXRpdmUoKS0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKIAogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICBpZiAoZGZnQ29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAg
ICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZy
YW1lcykgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2soKSk7CisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrKCktPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKQEAgLTMwNjcsNiArMjk2Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2lu
Y29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVn
aW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAobV9pbmNvbWluZ0NhbGxz
LmlzRW1wdHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKICAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ0NhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5r
KCp2bSgpKTsKICAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAh
PSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKQEAgLTMwODAsNjYgKzI5NzcsNjYg
QEAgdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFt
ZSwgTExJbnRDYWxsTGlua0luZm8qIGluY28KICAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNo
KGluY29taW5nKTsKIH0KIAotQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkK
K1Bhc3NSZWZQdHI8Q29kZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKIHsKICAg
ICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1Db2RlQmxv
Y2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQorQ29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2Nr
OjpyZXBsYWNlbWVudCgpCiB7Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlz
LT5jbGFzc0luZm8oKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6
OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29u
c3RydWN0IDogQ29kZUZvckNhbGwpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFsQ29kZUJs
b2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9n
cmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNsYXNz
SW5mbyA9PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVC
bG9jaygpOworICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmNvZGVCbG9jaygpOworfQogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAg
IGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHIKLSNlbmRpZgorQ29kZUJsb2NrKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
OjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7Cit9CiAKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOworQ29kZUJsb2NrKiBF
dmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CiB9CiAKLURGRzo6Q2Fw
YWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpCitDb2RlQmxv
Y2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiB7Ci0gICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8oKTsKKyAgICByZXR1cm4ganNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1faXND
b25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CiAKLSAgICBp
ZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKLSAgICAgICAgaWYg
KG1faXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29u
c3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwotICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlv
bkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgfQorREZHOjpDYXBhYmlsaXR5TGV2
ZWwgUHJvZ3JhbUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQoreworICAgIHJl
dHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7Cit9CiAKLSAgICBpZiAoY2xh
c3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6ZXZh
bENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sKKyAgICByZXR1cm4gREZH
Ojpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworfQogCi0gICAgaWYgKGNsYXNzSW5mbyA9
PSBQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OnByb2dyYW1D
YXBhYmlsaXR5TGV2ZWwodGhpcyk7CitERkc6OkNhcGFiaWxpdHlMZXZlbCBFdmFsQ29kZUJsb2Nr
OjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6ZXZhbENhcGFi
aWxpdHlMZXZlbCh0aGlzKTsKK30KIAotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0
eUxldmVsKHRoaXMpOworREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OmNh
cGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sKKyAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQorICAg
ICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlz
KTsKKyAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7
Cit9CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBXZWJB
c3NlbWJseUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21w
aWxlOwotI2VuZGlmCitDb2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworREZHOjpDYXBhYmlsaXR5TGV2ZWwgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNh
cGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sKICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxl
OwogfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyNlbmRpZgorI2VuZGlmCiAKIHZvaWQgQ29k
ZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGlt
aXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQogewpAQCAtMzI0Myw3
ICszMTQwLDcgQEAgSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmVpdGhlckNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKTsKIH0KIAogY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKQEAgLTQwODMsNyArMzk4
MCw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCiAjaWYgRU5BQkxFKEpJVCkKIERGRzo6Q2FwYWJp
bGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsKCkKIHsKLSAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCByZXN1bHQgPSBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKTsKICAgICBt
X2NhcGFiaWxpdHlMZXZlbFN0YXRlID0gcmVzdWx0OwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMWU0ZTNlY2Y3
MTNkOTBjOWUyNTQyNWM4ZTc3MzM5MTFhOTgyYzgwOC4uNWMyYjEwYzRiMDM4MGQyOGRmNDM4NjY4
ZWU1N2JmNGVlZDlhMzM4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaApAQCAtMzgsMTAgKzM4LDEwIEBACiAjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrU2V0LmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJDb21wYWN0
SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKQEAgLTQ5LDE5ICs0OSwxOCBAQAogI2luY2x1ZGUg
IkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAj
aW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIK
ICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRl
ICJKSVRXcml0ZUJhcnJpZXIuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxMSW50Q2Fs
bExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIKLSNpbmNs
dWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNp
bmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlJlZ0V4
cE9iamVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtODYsNDUgKzg1LDI2IEBAIGNsYXNzIEpTTW9kdWxl
RW52aXJvbm1lbnQ7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRp
bWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIAotY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKK2NsYXNzIENvZGVCbG9jayA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+LCBwdWJsaWMgVW5jb25kaXRp
b25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1Ymxp
YyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVy
IHsKLSAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKLSAgICB9OwotCiBwdWJsaWM6CiAgICAgZW51bSBDb3B5UGFyc2VkQmxvY2tU
YWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
LQotICAgIERFQ0xBUkVfSU5GTzsKLQogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayhWTSosIFN0
cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgQ29k
ZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
OwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUq
LCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVk0mLCBKU0dsb2JhbE9i
amVjdCopOwotI2VuZGlmCi0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayos
IEpTU2NvcGUqKTsKKyAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2sm
IG90aGVyKTsKKyAgICAgICAgCisgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2Jh
bE9iamVjdCopOworICAgIENvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVk0mLCBKU0dsb2JhbE9iamVjdCopOwogI2VuZGlmCiAKICAgICBXcml0ZUJhcnJp
ZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIEhlYXAqIG1faGVhcDsKIAog
cHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKIAogICAgIFVubGlua2VkQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLmdldCgp
OyB9CiAKQEAgLTE0NCw4ICsxMjQsOCBAQCBwdWJsaWM6CiAgICAgaW50KiBhZGRyZXNzT2ZOdW1Q
YXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCi0gICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUu
Z2V0KCkpOyB9Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShWTSYsIENvZGVCbG9jayopOworICAg
IENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9
CisgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzUmVmUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRp
dmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUmVsYXRlZENvZGVCbG9jayhGdW5jdG9yJiYgZnVu
Y3RvcikKICAgICB7CkBAIC0xNjgsMTggKzE0OCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsK
ICAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCisg
ICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8g
RklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0V2Vh
a2x5KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxl
ZCgpOworICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0U3Ryb25nbHkoU2xvdFZpc2l0b3ImKTsKIAogICAg
IHZvaWQgZHVtcFNvdXJjZSgpOwogICAgIHZvaWQgZHVtcFNvdXJjZShQcmludFN0cmVhbSYpOwpA
QCAtMjg3LDcgKzI2NSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAKICAgICAvLyBFeGFj
dGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFj
ZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKLSAgICBD
b2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5l
d1JlcGxhY2VtZW50KCk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklU
Q29kZT4gY29kZSkKICAgICB7CkBAIC0zMTMsOSArMjkxLDkgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICNpZiBFTkFCTEUoSklUKQotICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAKLSAgICBERkc6OkNhcGFiaWxp
dHlMZXZlbCBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7CisgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpID0gMDsKICAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0K
IApAQCAtNTY1LDcgKzU0Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0o
KSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOwogICAgICAgICBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtOTE3LDYgKzg5NSw4IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZmluYWxpemVMTEludElubGlu
ZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwog
CkBAIC05NDMsMTQgKzkyMywxNCBAQCBwcml2YXRlOgogICAgICAgICBzaXplX3QgY291bnQgPSBj
b25zdGFudHMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJlc2l6ZVRvRml0
KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIHRoaXMsIGNvbnN0YW50
c1tpXS5nZXQoKSk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92
bSwgb3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CiAgICAgICAgIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOwogICAgIH0KIAogICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQo
bV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxP
YmplY3QtPnZtKCksIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCB2YWx1ZSk7CiAgICAgfQogCiAg
ICAgdm9pZCBkdW1wQnl0ZWNvZGUoCkBAIC0xMDIyLDcgKzEwMDIsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1N0cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKIAotICAg
IEF0b21pYzxib29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKKyAgICBBdG9taWM8Ym9v
bD4gbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CisgICAgQXRvbWljPGJvb2w+IG1fdmlz
aXRTdHJvbmdseUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1f
c291cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTA2NCw3ICsxMDQ1LDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+
IG1fZnVuY3Rpb25EZWNsczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKIAotICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1f
YWx0ZXJuYXRpdmU7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAK
ICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogCkBA
IC0xMDg0LDI0MiArMTA2NSwxMjQgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7CiAjZW5kaWYKLQotICAg
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwotICAgIFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwogfTsKIAogLy8g
UHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBzbyB3ZSBtYWtlIHRo
ZSBnbG9iYWwgb2JqZWN0CiAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAogY2xhc3Mg
R2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci0gICAgdHlwZWRlZiBDb2RlQmxv
Y2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KIHByb3RlY3RlZDoKLSAgICBHbG9iYWxDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBH
bG9iYWxDb2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIpCisgICAgOiBDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQotCi0gICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENv
ZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQorICAgICAgICAKKyAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2Nv
cGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5z
aWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAg
ICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCiAg
ICAgewogICAgIH0KIH07CiAKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFs
Q29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwot
ICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUo
Vk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAg
IHsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9n
cmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFByb2dy
YW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQorICAgIFByb2dyYW1Db2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90
aGVyKQogICAgIHsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAg
ICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVBy
b3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291
cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi1wcml2YXRl
OgotICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBHbG9i
YWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7
Ci0gICAgfQotCi0gICAgUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFz
c1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVy
LCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisjaWYgRU5BQkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Cisj
ZW5kaWYKIH07CiAKIGNsYXNzIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFs
Q29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwot
ICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IG90aGVyKQotICAgIHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpCi0gICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7
Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywg
b3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQotICAgIHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3Jh
bUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAg
ICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcikKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIE1vZHVsZVByb2dyYW1D
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0
YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
CisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2Rl
QmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQog
ICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworI2lmIEVO
QUJMRShKSVQpCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOworI2VuZGlmCiB9OwogCiBjbGFzcyBFdmFsQ29kZUJs
b2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgRXZhbENv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2Nr
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAg
ICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
KnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgRXZhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tU
YWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJj
ZVByb3ZpZGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CiAgICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgICAgIAorICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KLQorICAgIAogICAgIGNvbnN0IElkZW50
aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2Rl
QmxvY2soKS0+dmFyaWFibGUoaW5kZXgpOyB9CiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkg
eyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPm51bVZhcmlhYmxlcygpOyB9CiAgICAg
Ci1wcml2YXRlOgotICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAg
ICB7Ci0gICAgfQotICAgICAgICAKLSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZh
bENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICAgICAgOiBHbG9i
YWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCAxKQotICAgIHsKLSAgICB9CisjaWYgRU5B
QkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKICAgICAKLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotCiBwcml2YXRlOgogICAgIFVubGlua2VkRXZhbENvZGVCbG9jayog
dW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVubGlua2VkRXZh
bENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9CiB9OwogCiBjbGFzcyBGdW5jdGlv
bkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewogcHVibGljOgotICAgIHR5cGVkZWYgQ29k
ZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJs
b2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAg
IHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUs
Ci0gICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNp
Z25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICBG
dW5jdGlvbkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBv
dGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7
Ci0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBGdW5j
dGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIs
IHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGdW5jdGlv
bkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgRnVu
Y3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25FeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKLSAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlk
ZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBDb2RlQmxvY2sob3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBz
b3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisjaWYgRU5BQkxFKEpJVCkKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkg
b3ZlcnJpZGU7CisjZW5kaWYKIH07CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBjbGFzcyBX
ZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewogcHVibGljOgotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCi0g
ICAgewotICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFz
c2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKICAgICB7Ci0gICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+
aGVhcCkpCi0gICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAg
ICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB2bSwgZ2xvYmFsT2JqZWN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLXByaXZhdGU6Ci0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywg
b3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICA6IENvZGVCbG9jayh2
bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHZtLCBnbG9iYWxPYmplY3QpCi0gICAgewot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisjaWYgRU5BQkxFKEpJ
VCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbElu
dGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKIH07CiAjZW5kaWYKIApAQCAtMTM0Nyw5ICsxMjEw
LDEwIEBAIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKIH0KIAotaW5s
aW5lIHZvaWQgQ29kZUJsb2NrOjpjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgpCitpbmxp
bmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyTWFya3MoKQogewotICAgIG1fdmlzaXRXZWFrbHlIYXNC
ZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBt
X3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxz
ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiB9CiAKIGlubGluZSB2b2lkIENvZGVCbG9j
a1NldDo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCkBAIC0xMzc0LDExICsxMjM4LDEy
IEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVHJ5IHRv
IHJlY292ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhlY3V0ZSBhIGJhcnJpZXIgZm9y
IGEKLSAgICAvLyBDb2RlQmxvY2sgdGhhdCBkb2VzIHZhbHVlIHByb2ZpbGluZy4gVGhpcyBpcyBw
cm9iYWJseSBvdmVya2lsbCwgYnV0IHdlCi0gICAgLy8gaGF2ZSBhbHdheXMgZG9uZSBpdC4KLSAg
ICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIAor
ICAgIC8vIEZvcmNlIEdDIHRvIHZpc2l0IGFsbCBDb2RlQmxvY2tzIG9uIHRoZSBzdGFjaywgaW5j
bHVkaW5nIG9sZCBDb2RlQmxvY2tzCisgICAgLy8gdGhhdCBoYXZlIG5vdCBleGVjdXRlZCBhIGJh
cnJpZXIuIFRoaXMgaXMgb3ZlcmtpbGwsIGJ1dCB3ZSBoYXZlIGFsd2F5cworICAgIC8vIGRvbmUg
dGhpcywgYW5kIGl0IG1pZ2h0IGhlbHAgdXMgcmVjb3ZlciBncmFjZWZ1bGx5IGlmIHdlIGZvcmdl
dCB0byBleGVjdXRlCisgICAgLy8gYSBiYXJyaWVyIHdoZW4gYSBDb2RlQmxvY2sgbmVlZHMgaXQu
CisgICAgY29kZUJsb2NrLT5jbGVhck1hcmtzKCk7CiAKICAgICBtX2N1cnJlbnRseUV4ZWN1dGlu
Zy5hZGQoY29kZUJsb2NrKTsKIH0KQEAgLTEzODcsMTMgKzEyNTIsMTMgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2Rl
QmxvY2soRnVuY3QKIHsKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgUHJvZ3JhbUV4
ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRp
Y19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3By
b2dyYW1Db2RlQmxvY2suZ2V0KCkpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2NrLmdl
dCgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29k
ZUJsb2NrID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9jay5n
ZXQoKSkKICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MTQwMSwxNSArMTI2NiwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdAogICAgIGNhc2UgRnVu
Y3Rpb25FeGVjdXRhYmxlVHlwZTogewogICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1
bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2Nv
ZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpCiAgICAgICAgICAgICBjb2Rl
QmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwotICAgICAgICBpZiAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpCisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKQogICAgICAgICAg
ICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAg
ICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanND
YXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fbW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5nZXQoKSkpCisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzQ2FzdDxN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2su
Z2V0KCkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAppbmRleCBkNTE2
OTUwMTJlMjUwNmYyYzgzNzYxNzUwMzFmODE2ODlkZmZiM2I1Li41NjQ2YTUzNTU5MjczYzI0Mjgy
ZjgwZjkwNTI1ODdhYmE4YjRmODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQ29kZU9yaWdpbjo6aXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKICAgICAg
ICAgaWYgKCFhLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKLSAgICAgICAgaWYgKGEuaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5n
ZXQoKSAhPSBiLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAg
ICAgIGlmIChhLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSAhPSBiLmlubGluZUNh
bGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgICAgIGEgPSBhLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwpAQCAt
OTgsNyArOTgsNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2goKSBjb25z
dAogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgCi0gICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8
SlNDZWxsKj46Omhhc2goY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFz
aChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CiAgICAgICAg
IAogICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVj
dENhbGxlcjsKICAgICB9CkBAIC0xMTUsMTEgKzExNSwxMSBAQCBWZWN0b3I8Q29kZU9yaWdpbj4g
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2soKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUNvZGVCbG9jayogQ29kZU9yaWdpbjo6Y29kZU9yaWdpbk93bmVyKCkgY29uc3QKK1NjcmlwdEV4
ZWN1dGFibGUqIENvZGVPcmlnaW46OmNvZGVPcmlnaW5Pd25lcigpIGNvbnN0CiB7CiAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIHJldHVybiBpbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CiB9CiAKIGludCBDb2RlT3JpZ2luOjpzdGFja09mZnNl
dCgpIGNvbnN0CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAtLT4gIik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlubGlu
ZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1bmN0aW9u
SW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihmcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkpLCAiPiAiKTsKKyAgICAgICAgICAgIG91dC5wcmludChmcmFtZS0+YnJpZWZGdW5jdGlv
bkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoZnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkp
LCAiPiAiKTsKICAgICAgICAgICAgIGlmIChmcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIihjbG9zdXJlKSAiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKaW5kZXggYzk0NGU4MWViNWFkYTMxMWIz
MGJmZWZkZmJjMjdjNzBkMjM0MmU4Yy4uYTUyMmJhOWU0ZTE0YzllN2M3MGExNWRjM2FkMzMwMTU2
ZDU0ZWNlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CkBAIC04Nyw3ICs4Nyw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICAKICAgICAvLyBJZiB0
aGUgY29kZSBvcmlnaW4gY29ycmVzcG9uZHMgdG8gaW5saW5lZCBjb2RlLCBnaXZlcyB5b3UgdGhl
IGhlYXAgb2JqZWN0IHRoYXQKICAgICAvLyB3b3VsZCBoYXZlIG93bmVkIHRoZSBjb2RlIGlmIGl0
IGhhZCBub3QgYmVlbiBpbmxpbmVkLiBPdGhlcndpc2UgcmV0dXJucyAwLgotICAgIENvZGVCbG9j
ayogY29kZU9yaWdpbk93bmVyKCkgY29uc3Q7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogY29kZU9y
aWdpbk93bmVyKCkgY29uc3Q7CiAgICAgCiAgICAgaW50IHN0YWNrT2Zmc2V0KCkgY29uc3Q7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCmluZGV4IGViOWQ0MTkwNWM2YjJhN2RmNzA5
ZTI1MDMwZDNjYWQ1ZThiYmFiZTkuLjc2MWU5NWIzZjY3MDRmYTVkYjAyMGIxNDZiNDgxYTdmODll
YmJjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCkBAIC0zMyw3ICszMyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soKSB7IH0KIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6fkRlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQogCi12b2lkIERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQordm9pZCBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBkdW1wQ29tcGlsZWRTb3VyY2VzSWZO
ZWVkZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCmluZGV4IGFkZWNiODJiYjI5ODliOTlh
N2ZhYWRhZGQ3NzhiZmJhOGJkZjU2N2IuLjM3NTY4ZDIyMjEyMjUwYmJkZWQ1MThmMTgwZGJiNDE2
ZTNiZmJlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKQEAgLTQyLDggKzQyLDggQEAgcHJv
dGVjdGVkOgogcHVibGljOgogICAgIHZpcnR1YWwgfkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
aygpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hy
b25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29k
ZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQpOworICAgIHZp
cnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJs
b2NrKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVC
bG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKIAogICAgIFZlY3RvcjxEZWZlcnJlZFNvdXJjZUR1
bXA+JiBlbnN1cmVEZWZlcnJlZFNvdXJjZUR1bXAoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKaW5kZXggNjI1MjFmYzY1MjhjNWEyZTdkNGVh
ZjQzODU4YzA2Y2VlN2M3YWVkZC4uN2E4OTg5ODEyZTA3Y2EzYTI3NTA1MDczZGJhMTZkNDQyZjBh
ZjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2Rl
Q2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNo
ZS5oCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEV2YWxFeGVjdXRhYmxlKiBnZXRTbG93
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIFRo
aXNURFpNb2RlIHRoaXNURFpNb2RlLCBjb25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2NvcGUq
IHNjb3BlKQorICAgICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwgVGhpc1REWk1v
ZGUgdGhpc1REWk1vZGUsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgSlNTY29wZSogc2NvcGUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5k
ZXJURFo7CiAgICAgICAgICAgICBKU1Njb3BlOjpjb2xsZWN0VmFyaWFibGVzVW5kZXJURFooc2Nv
cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKaW5kZXggNDQ3YmM3ZTczOWU0MjY5ZjAxZjcyYmMz
OTA4Y2VhZjllNzdiZjI2OS4uN2EzZDhhZmMwNDJjMDg4MjllOTRiOTFhODI2OTkxOGYzNjQ0NDQz
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKQEAgLTQ3LDE3ICs0NywyNCBAQCBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6
OmNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAKIENvZGVCbG9ja0hh
c2ggSW5saW5lQ2FsbEZyYW1lOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2stPmhhc2goKTsKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUuZ2V0KCkpLT5jb2RlQmxvY2tGb3IoCisgICAgICAgIHNwZWNpYWxpemF0aW9u
S2luZCgpKS0+aGFzaCgpOwogfQogCiBDU3RyaW5nIElubGluZUNhbGxGcmFtZTo6aGFzaEFzU3Ry
aW5nSWZQb3NzaWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5o
YXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlLmdldCgpKS0+Y29kZUJsb2NrRm9yKAorICAgICAgICBzcGVjaWFs
aXphdGlvbktpbmQoKSktPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKTsKIH0KIAogQ1N0cmluZyBJ
bmxpbmVDYWxsRnJhbWU6OmluZmVycmVkTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkpLT5pbmZlcnJlZE5hbWUoKS51dGY4KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlLmdldCgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgpOworfQor
CitDb2RlQmxvY2sqIElubGluZUNhbGxGcmFtZTo6YmFzZWxpbmVDb2RlQmxvY2soKSBjb25zdAor
eworICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5nZXQo
KSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKQEAgLTY3LDggKzc0LDggQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1
bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIAogdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KGJyaWVmRnVuY3Rpb25JbmZv
cm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSk7Ci0g
ICAgaWYgKGlzU3RyaWN0TW9kZSgpKQorICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlLmdldCgpKSk7CisgICAgaWYgKGV4
ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9k
ZSkiKTsKICAgICBvdXQucHJpbnQoIiwgYmMjIiwgZGlyZWN0Q2FsbGVyLmJ5dGVjb2RlSW5kZXgs
ICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApp
bmRleCA5ZWI3ZmIzMThhMTlhYTM3ZWI5NmJjMDE3YzhhMWU5NTY5YmEzNDA1Li42MmYyNWZjZGYw
OWIwNWZlNmQwZWM0MTliMjUxZTlhMDE0MDgxZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiVmFsdWVS
ZWNvdmVyeS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KQEAgLTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWU7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwog
Y2xhc3MgSlNGdW5jdGlvbjsKIAogc3RydWN0IElubGluZUNhbGxGcmFtZSB7CkBAIC0xNzIsNyAr
MTc0LDcgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgfQogICAgIAogICAgIFZlY3Rv
cjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KLSAgICBXcml0
ZUJhcnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8
U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZVJl
Y292ZXJ5OwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCkBAIC0yMDcsNiArMjA5LDgg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoKCkgY29u
c3Q7CiAgICAgQ1N0cmluZyBoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkgY29uc3Q7CiAgICAgCisg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaygpIGNvbnN0OworICAgIAogICAgIHZvaWQg
c2V0U3RhY2tPZmZzZXQoc2lnbmVkIG9mZnNldCkKICAgICB7CiAgICAgICAgIHN0YWNrT2Zmc2V0
ID0gb2Zmc2V0OwpAQCAtMjE2LDggKzIyMCw2IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsg
fQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKTsgfQog
Ci0gICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBiYXNlbGluZUNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCk7IH0KLQogICAgIHZvaWQgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1h
dGlvbihQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CkBAIC0yMjksNyArMjMxLDkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiBpbmxp
bmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVD
YWxsRnJhbWUpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBpbmxpbmVDYWxsRnJh
bWUtPmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlY3V0YWJsZS0+c3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+c3BlY2lhbGl6YXRpb25LaW5kKCkp
OwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA5YjA1NjBmMjkwMjcyZTU3YjI3NGY5ODVj
YjIzOTVjOWQ0OTE4ZGI3Li42MWY1MTc2NDRiNzQ4MjNlNWI3ODU3YzdhZjE1MTczMzVlMzY5MTZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBX
ZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVmZXJlbmNlIHRoYXQgaXNuJ3Qgb3Ro
ZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KLSAgICAgICAgc3RhdGUud2Vha1JlZmVyZW5jZXMuYXBw
ZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpOworICAg
ICAgICBzdGF0ZS53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4odm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSkpOwogICAgICAgICAKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmpl
Y3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQo
CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNB
Y2Nlc3M6OnJlZ2VuZXJhdGUoCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKQogICAgICAg
ICBkb2VzQ2FsbHMgfD0gZW50cnktPmRvZXNDYWxscygpOwogICAgIAotICAgIG1fc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgY29kZUJsb2NrLCBkb2VzQ2FsbHMp
OworICAgIG1fc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZG9lc0NhbGxzKTsKICAgICBtX3dhdGNocG9pbnRz
ID0gV1RGOjptb3ZlKHN0YXRlLndhdGNocG9pbnRzKTsKICAgICBpZiAoIXN0YXRlLndlYWtSZWZl
cmVuY2VzLmlzRW1wdHkoKSkKICAgICAgICAgbV93ZWFrUmVmZXJlbmNlcyA9IHN0ZDo6bWFrZV91
bmlxdWU8VmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+Pj4oV1RGOjptb3ZlKHN0YXRlLndlYWtS
ZWZlcmVuY2VzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCBjZmU2ZDM0Nzc2NTU0NjRkYzc4NWQ2NTg4OGMwM2E3
NTYzNTVmYjJkLi5jOGYzZjQ0YzdhZmE2NGNlZGU3MWYxMTIzYmJhNWYyMDk2ZGU4ZTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0
dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+IGFjY2Vzc0Nhc2VzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBwcmV2aW91c0Nhc2UgPQotICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1Yklu
Zm8odm0sIGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0
dXJlU3R1YkluZm8odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksICp0aGlzKTsKICAg
ICBpZiAocHJldmlvdXNDYXNlKQogICAgICAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoV1RGOjptb3Zl
KHByZXZpb3VzQ2FzZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzNTc1MWUzOWFkNmMzMzRjMTZlNWRjYWIzMzY3NTAyNGU2
NDU3OWIuLmQ0ZmMxYThmZjAxMWI3M2E0ZjJiMDVjOTY3MDAzYzMzZDJkNGFkZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC00NjMz
LDEwICs0NjMzLDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVT
dGFja0VudHJ5KAogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQpOwogICAgICAgICAK
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3Bs
YW4uaW5saW5lQ2FsbEZyYW1lcy0+YWRkKCk7Ci0gICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dy
YXBoLmZyZWV6ZShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgYnl0ZUNv
ZGVQYXJzZXItPm1fZ3JhcGguZnJlZXplKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwog
ICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFs
cmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZp
bmlzaGVzLgotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0
V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmllcihj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKTsKICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAg
ICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmNvbnN0YW50KGNhbGxlZSk7CkBAIC00ODI4LDcgKzQ4MjgsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSgpCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmco
KSkKICAgICAgICAgZGF0YUxvZygiUGFyc2luZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAg
IAotICAgIG1fZGZnQ29kZUJsb2NrID0gbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxv
Y2s7CisgICAgbV9kZmdDb2RlQmxvY2sgPSBtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVC
bG9jay5nZXQoKTsKICAgICBpZiAoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgJiYgbV9kZmdD
b2RlQmxvY2sKICAgICAgICAgJiYgT3B0aW9uczo6ZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxp
emF0aW9uKCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVBvbHl2YXJpYW50Q2FsbElu
bGluaW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcApp
bmRleCA3NDFiYzE2ZWViNTE2ZGQ0YTI4ZDhhYmQ3NmFjZTc4YTFkOWY4ZTk4Li40Nzg4MWUyNTNj
NTlmYTRhZmRiMjIwMGU4YTExOGZiNDc5ZmRjMTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTg5LDggKzg5LDggQEAgdm9pZCBDb21tb25EYXRh
Ojp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZl
cmVuY2VzKQogICAgICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhyZWNv
dmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJh
c2VsaW5lQ29kZUJsb2NrLmdldCgpKQotICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2Vz
LmNoZWNrKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIGlmIChTY3JpcHRFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKQorICAg
ICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGV4ZWN1dGFibGUpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5p
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAppbmRleCBlMjcz
YWU4OTFkZDliNDlkZjZlYWY1NGY1ODNjMWVkNGQ4Yjg4ZWNiLi45MTEzNGNjYjhhMTIxMTE0MjQz
MWFiOWQ4Y2M5NzQwZTc4ZGM3ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotRGVzaXJlZFRyYW5zaXRpb246OkRlc2lyZWRU
cmFuc2l0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25l
ciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQorRGVz
aXJlZFRyYW5zaXRpb246OkRlc2lyZWRUcmFuc2l0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBT
Y3JpcHRFeGVjdXRhYmxlKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAsIG1fY29kZU9yaWdpbk93bmVyKGNvZGVPcmlnaW5Pd25lcikKICAgICAsIG1fb2xkU3Ry
dWN0dXJlKG9sZFN0cnVjdHVyZSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNp
dGlvbjo6cmVhbGx5QWRkKFZNJiB2bSwgQ29tbW9uRGF0YSogY29tbW9uKQogewogICAgIGNvbW1v
bi0+dHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigK
LSAgICAgICAgICAgIHZtLCBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIHZtLCBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Pd25lciwKICAg
ICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQpAQCAtNjYsNyAr
NjYsNyBAQCBEZXNpcmVkVHJhbnNpdGlvbnM6On5EZXNpcmVkVHJhbnNpdGlvbnMoKQogewogfQog
Ci12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlKQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OmFkZExhemls
eShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU2NyaXB0RXhlY3V0YWJsZSogY29kZU9yaWdpbk93bmVy
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCiB7CiAg
ICAgbV90cmFuc2l0aW9ucy5hcHBlbmQoRGVzaXJlZFRyYW5zaXRpb24oY29kZUJsb2NrLCBjb2Rl
T3JpZ2luT3duZXIsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAppbmRleCA5ZWE2
YWRhMWRjYWE0YzM5YTFjN2RjZDkwMWY0Yzc2YjJmYjBhMzgyLi5hZGRhZjNlY2RjMDA4NzUyZjE0
NjZmNTdhZDhkZjFmYmE4YTJmOTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgQ29tbW9u
RGF0YTsKIAogY2xhc3MgRGVzaXJlZFRyYW5zaXRpb24gewogcHVibGljOgotICAgIERlc2lyZWRU
cmFuc2l0aW9uKENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1
cmUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBTY3Jp
cHRFeGVjdXRhYmxlKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxs
eUFkZChWTSYsIENvbW1vbkRhdGEqKTsKICAgICAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgQ29kZUJsb2NrKiBt
X2NvZGVPcmlnaW5Pd25lcjsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBtX2NvZGVPcmlnaW5Pd25l
cjsKICAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdT
dHJ1Y3R1cmU7CiB9OwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5z
aXRpb25zKCk7CiAgICAgfkRlc2lyZWRUcmFuc2l0aW9ucygpOwogCi0gICAgdm9pZCBhZGRMYXpp
bHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0
cnVjdHVyZSopOworICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIFNjcmlwdEV4ZWN1dGFi
bGUqLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENv
bW1vbkRhdGEqKTsKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuY3BwCmluZGV4IDFhZjEzZWY0ZWU5ZGY0OTBhYzM5NTRkNTc5NjM1NjgwNDk1MzMzZWQuLjBk
Zjk2MDY1MWI3N2VjM2UzYTFiNjA3NmE1MjkxZWNmYzVkOTA1YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKQEAg
LTcwLDEwICs3MCwxMCBAQCB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZN
JiB2bSwgQ29tbW9uRGF0YSogY29tbW9uKQogICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3Jl
ZmVyZW5jZXMpIHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWlj
Q2FzdDxTdHJ1Y3R1cmUqPih0YXJnZXQpKSB7CiAgICAgICAgICAgICBjb21tb24tPndlYWtTdHJ1
Y3R1cmVSZWZlcmVuY2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPih2bSwgbV9jb2RlQmxvY2ssIHN0cnVjdHVyZSkpOworICAgICAgICAgICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29tbW9uLT53ZWFr
UmVmZXJlbmNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4o
dm0sIG1fY29kZUJsb2NrLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
SlNDZWxsPih2bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApp
bmRleCBhY2E3MzNhYTJhZjg1MzZiMmJhZTdhOGU2YTAyZDkzMGE3ZDBkMzEzLi5mZTQwN2FhZTY5
OGUzOGYwOWZlZWVmMDEyOGY0MWY4Mzc0MWMyM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsZSgKICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUs
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywKICAgICAgICAgY2FsbGJh
Y2spOwogICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCkKLSAgICAgICAgY2Fs
bGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVC
bG9jaywgcmVzdWx0KTsKKyAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUo
Y29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggZjI4MDdlNDBmOTZhNGEyMGM0YTBkODZmMTli
N2MxMWNiODU4ZmYwZC4uNzJiZjMxZmMwNDA2M2M3OTgzMGM4MThmMmNmOWE5OGI4MTEyMzYxNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKIEdyYXBoOjpHcmFwaChWTSYgdm0s
IFBsYW4mIHBsYW4sIExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAgICA6IG1fdm0o
dm0pCiAgICAgLCBtX3BsYW4ocGxhbikKLSAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxv
Y2spCisgICAgLCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrLmdldCgpKQogICAgICwgbV9w
cm9maWxlZEJsb2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9hbGxvY2F0
b3IobG9uZ0xpdmVkU3RhdGUubV9hbGxvY2F0b3IpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwo
MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCAwNTRmZjA3Zjg3ODE2YWM3
ZTA3Y2I4NDY2YzY4MWQ0ZDMyZGQ3YzZjLi44MzQzMzQxZGZhYzRmMmRlNzAxMzYzMTI5MGJhOGI1
MzdkZWU1ODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmV4
ZWN1dGFibGUuZ2V0KCk7CiAgICAgfQogICAgIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1
dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAgLTM3Miw3ICszNzIsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsKLSAgICAg
ICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc1N0cmljdE1vZGUoKTsKKyAg
ICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwogICAgIH0KICAg
ICAKICAgICBFQ01BTW9kZSBlY21hTW9kZUZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCmluZGV4IGZmNmM4NjY4MjZkMTRhNGY3ZDE1
YjdhYjc2YzYwY2ExMTYyMmEyZGYuLjI2NmE3Y2VjZTRlZGQ5ODViMDI0ODFmZTZmYTNiZjI0ZTJl
NzE4Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCkBAIC0yOCw3ICsy
OCw2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5o
IgogI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKQEAgLTExNSwxMiArMTE0LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
Jikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0gICAgQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrKCkgeyByZXR1cm4gbV9vc3JF
bnRyeUJsb2NrLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRPU1JFbnRyeUJsb2NrKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrKSB7IG1fb3NyRW50cnlC
bG9jay5zZXQodm0sIG93bmVyLCBvc3JFbnRyeUJsb2NrKTsgfQotICAgIHZvaWQgY2xlYXJPU1JF
bnRyeUJsb2NrKCkgeyBtX29zckVudHJ5QmxvY2suY2xlYXIoKTsgfQotI2VuZGlmCiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGls
ZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xMzUsNyArMTI4LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShGVExfSklUKQogICAgIHVpbnQ4X3QgbmVzdGVkVHJpZ2dlcklzU2V0IHsgMCB9Owog
ICAgIFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKLSAgICBXcml0ZUJh
cnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgUmVmUHRyPENvZGVCbG9jaz4g
b3NyRW50cnlCbG9jazsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wgYWJh
bmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCmluZGV4IDJkMTMxYzNjODhiZjVkNmRi
MjAwOTc5Y2QxMDZhYTdiM2E4ZjhkNGMuLjgzNmMwZTA0OGE3ZjI0NjMwNzI2MjhmNmJmZTYzY2Mw
MjgwMWFmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmlu
YWxpemVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXpl
ci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQog
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKICAgICBtX2ppdENvZGUtPmluaXRpYWxp
emVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRG
RyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSksCisgICAgICAgIEZJTkFMSVpF
X0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpE
RkdKSVQpKS5kYXRhKCkpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAg
IAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKQEAgLTcxLDcg
KzcxLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKICAgICBtX2pp
dENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9s
aW5rQnVmZmVyLCAoIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSksCisg
ICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdl
dCgpLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpKSwKICAgICAgICAgbV93aXRoQXJpdHlDaGVj
ayk7CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwogICAgIApA
QCAtODMsNyArODMsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB2
b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogewogI2lmIEVOQUJMRShGVExfSklU
KQotICAgIG1faml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrKTsK
KyAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAobV9wbGFuLmNvZGVCbG9jay5nZXQo
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgCiAgICAgaWYgKG1fcGxhbi5jb21w
aWxhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA5YTYwNTYwNDRhOTIyN2NiMTBlZTYwMGI0NjMxYzEw
MDdmODgzMmQwLi4xMjY0OGJjOTUzZTcxOTQ4NjU3YTI2ZGJiMGI1ODM4MmU1NmYxNjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgICAgICBqaXQuYnJh
bmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpOb25aZXJvLAogICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKAotICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lclNjcmlw
dEV4ZWN1dGFibGUoKS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpKSkpOworICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPmFkZHJlc3NPZkRpZFRy
eVRvRW50ZXJJbkxvb3AoKSkpKTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoCkBAIC0yNjgs
MTQgKzI2OCwxMyBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gpCiAKIHZvaWQgYWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCwgYm9vbCBp
c0V4aXRpbmdUb09wQ2F0Y2gpCiB7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgaml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CiAgICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBJbmxpbmVDYWxsRnJhbWVTZXQqIGlubGlu
ZUNhbGxGcmFtZXMgPSBqaXQuY29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlu
bGluZUNhbGxGcmFtZXMuZ2V0KCk7CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJh
bWVzKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKLSAgICAgICAgICAgIGppdC5tb3Zl
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUgPSBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgICAgICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIob3duZXJFeGVjdXRhYmxl
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgICAgIG9zcldyaXRlQmFycmllcihq
aXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yODMsNiArMjgyLDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0LCBib29sIGlzRXgKICAg
ICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBqaXQuYWRk
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0LmRlY29k
ZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAKICAgICBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0LCB1bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Ojpn
ZXRCeXRlY29kZUluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcAppbmRleCBiYTJhMGRhMTFkYTcyZGQ1ZDFlMmUzOTJiYzhm
YTA0MzQ0MjkwZTA3Li40OGU5ZjA1YzZlZTJjOGNiOTQ2YTMxNTAzNjVkZDQ0YzI5ZTJlNTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRp
b24uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0
KEV4ZWNTdGF0ZSogZXhlYywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVy
KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwog
ICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSlNDOjpKSVRDb2RlOjpCYXNlbGlu
ZUpJVCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBkNmM0NzQwY2RlMDMxNTMwYzQzN2Q1NDllNjBmZTA4
MGU4N2RiZGQ3Li43ZTBmMDdkYTU5NzJjODRhMmY1NDIzZDMyNjNlZjllNzE0ZTVkNDMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTEzMDcsNyAr
MTMwNyw3IEBAIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXph
dGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSCiAgICAgCiAgICAgYm9vbCBkaWRUcnlU
b0VudGVySW50b0lubGluZWRMb29wcyA9IGZhbHNlOwogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0LT5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBp
bmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0
Q2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJ
bkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT5kaWRU
cnlUb0VudGVySW5Mb29wKCkpIHsKICAgICAgICAgICAgIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5l
ZExvb3BzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzc3LDgg
KzEzNzcsOCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqCiAKICAgICAvLyBXZSBuZWVkIHRvIGNv
bXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5l
d1JlcGxhY2VtZW50KCksIGNvZGVCbG9jaywgRlRMTW9kZSwgVUlOVF9NQVgsCi0gICAgICAgIE9w
ZXJhbmRzPEpTVmFsdWU+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUoKSk7CisgICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBj
b2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPigp
LCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOwog
fQogCiBzdGF0aWMgdm9pZCB0cmlnZ2VyVGllclVwTm93Q29tbW9uKEV4ZWNTdGF0ZSogZXhlYywg
Ym9vbCBpbkxvb3ApCkBAIC0xNDYzLDcgKzE0NjMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRy
aWdnZXJPU1JFbnRyeU5vdygKICAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29t
cGlsaW5nKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpZiAoQ29kZUJsb2NrKiBlbnRy
eUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CisgICAgaWYgKENvZGVCbG9jayog
ZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCkpIHsKICAgICAgICAgdm9p
ZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAogICAgICAgICAgICAgZXhlYywgY29k
ZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CiAgICAgICAg
IGlmIChhZGRyZXNzKQpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAgY2hhciogSklUX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coCiAgICAgICAgIAogICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVk
LiBPaCBubyEgVGhpcyBpbXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKICAg
ICAgICAgLy8gd2l0aG91dCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMg
Zm9yIHRoZSBlbnRyeSBjb2RlIGJsb2NrLgotICAgICAgICBqaXRDb2RlLT5jbGVhck9TUkVudHJ5
QmxvY2soKTsKKyAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jayA9IG51bGxwdHI7CiAgICAg
ICAgIGppdENvZGUtPm9zckVudHJ5UmV0cnkgPSAwOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CkBAIC0xNDk0LDE5ICsxNDk0LDIxIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVu
dHJ5Tm93KAogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CiAgICAgaml0
Q29kZS0+cmVjb25zdHJ1Y3QoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOwotICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CisgICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQg
PSBjb21waWxlKAotICAgICAgICAqdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ss
IEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKLSAgICAgICAgbXVzdEhhbmRsZVZh
bHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KCkpOworICAgICAgICAqdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLmdldCgpLCBjb2RlQmxvY2ss
IEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgbXVzdEhhbmRsZVZh
bHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KGNvZGVCbG9jaykpOwogICAgIAotICAgIGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpCisgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCkgeworICAgICAgICBBU1NFUlQoZm9yRW50cnlSZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZl
cnJlZCB8fCByZXBsYWNlbWVudENvZGVCbG9jay0+aGFzT25lUmVmKCkpOwogICAgICAgICByZXR1
cm4gMDsKKyAgICB9CiAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBj
b21waWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCiAgICAgLy8gZW50cnkg
d2lsbCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3
aGF0IHdlIHNob3VsZCBkby4KICAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEg
d2hpbGUgaWYgdGhhdCBoYXBwZW5zLgogICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVP
U1JFbnRyeSgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLT5vc3JFbnRyeUJsb2Nr
KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICAgICAgZXhlYywgY29kZUJsb2Nr
LCBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRl
eCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4
IDUzZTEwNmNjNTM5MzQ1OWYzZjkwY2VlNzIzMjcwOTQyMDMzNmNkNTYuLmE5OGNkNDVjMjVjMzc5
NWU2ZWFlYjc5MDEwM2YwMWNiMjI2NzhkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJv
ZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQogCiB9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKIAotUGxhbjo6UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKK1BsYW46OlBsYW4oUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LAogICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVz
KQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE0MCwxMCArMTQwLDEwIEBA
IFBsYW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRERkdDb2RlQmxvY2ssCiAgICAgLCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbXVzdEhhbmRsZVZhbHVlcyhtdXN0
SGFuZGxlVmFsdWVzKQotICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKGNvZGVC
bG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29k
ZUJsb2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKG1vZGUpKSkgOiAwKQorICAg
ICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBh
ZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgcHJv
ZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKG1vZGUpKSkgOiAwKQogICAgICwgaW5saW5lQ2Fs
bEZyYW1lcyhhZG9wdFJlZihuZXcgSW5saW5lQ2FsbEZyYW1lU2V0KCkpKQotICAgICwgaWRlbnRp
ZmllcnMoY29kZUJsb2NrKQotICAgICwgd2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrKQorICAgICwg
aWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQorICAgICwgd2Vha1JlZmVyZW5jZXMoY29kZUJs
b2NrLmdldCgpKQogICAgICwgd2lsbFRyeVRvVGllclVwKGZhbHNlKQogICAgICwgc3RhZ2UoUHJl
cGFyaW5nKQogewpAQCAtNTM1LDcgKzUzNSw3IEBAIGJvb2wgUGxhbjo6aXNTdGlsbFZhbGlkKCkK
IAogdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKLSAgICB3
YXRjaHBvaW50cy5yZWFsbHlBZGQoY29kZUJsb2NrLCAqY29tbW9uRGF0YSk7CisgICAgd2F0Y2hw
b2ludHMucmVhbGx5QWRkKGNvZGVCbG9jay5nZXQoKSwgKmNvbW1vbkRhdGEpOwogICAgIGlkZW50
aWZpZXJzLnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7CiAgICAgd2Vha1JlZmVyZW5jZXMucmVh
bGx5QWRkKHZtLCBjb21tb25EYXRhKTsKICAgICB0cmFuc2l0aW9ucy5yZWFsbHlBZGQodm0sIGNv
bW1vbkRhdGEpOwpAQCAtNTUzLDE0ICs1NTMsMTQgQEAgdm9pZCBQbGFuOjpub3RpZnlDb21waWxl
ZCgpCiAKIHZvaWQgUGxhbjo6bm90aWZ5UmVhZHkoKQogewotICAgIGNhbGxiYWNrLT5jb21waWxh
dGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoY29kZUJsb2NrLCBwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CisgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hy
b25vdXNseShjb2RlQmxvY2suZ2V0KCkpOwogICAgIHN0YWdlID0gUmVhZHk7CiB9CiAKIENvbXBp
bGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKIHsK
ICAgICAvLyBXZSB3aWxsIGVzdGFibGlzaCBuZXcgcmVmZXJlbmNlcyBmcm9tIHRoZSBjb2RlIGJs
b2NrIHRvIHRoaW5ncy4gU28sIHdlIG5lZWQgYSBiYXJyaWVyLgotICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSk7CiAgICAgCiAgICAgaWYgKCFpc1N0aWxsVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ7CkBAIC01OTYsNyArNTk2LDcgQEAgQ29t
cGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQog
CiB2b2lkIFBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKQogewotICAgIGNhbGxiYWNr
LT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ss
IGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOworICAgIGNhbGxiYWNrLT5jb21w
aWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jay5nZXQoKSwgZmluYWxpemVXaXRob3V0Tm90aWZ5
aW5nQ2FsbGJhY2soKSk7CiB9CiAKIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCkBAIC02MDQs
MTUgKzYwNCwxNiBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21w
aWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBs
YW46OnJlbWVtYmVyQ29kZUJsb2NrcygpCit2b2lkIFBsYW46OmNsZWFyQ29kZUJsb2NrTWFya3Mo
KQogewogICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAgIEhlYXA6OmhlYXAo
Y29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgY29kZUJsb2NrLT5jbGVh
ck1hcmtzKCk7CisgICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5jbGVhck1hcmtzKCk7CiAg
ICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBIZWFwOjpoZWFwKHByb2ZpbGVk
REZHQ29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKKyAgICAg
ICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmNsZWFyTWFya3MoKTsKIH0KIAogdm9pZCBQbGFuOjpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTYy
MywxMyArNjI0LDE1IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1
ZSgmbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
UmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jayk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFJlYWRPbmx5UG9pbnRlcihwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgY29kZUJsb2NrLT52
aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOworICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dmlz
aXRTdHJvbmdseSh2aXNpdG9yKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAg
ICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwogCiAgICAg
aWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJh
bWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrKCkpOworICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jaygpLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCmluZGV4IDhjZDM0NzliMzI2YzNjOGY0Mzk2NDY2
NjBmOWFlMTExZjUxZWJiNzAuLmVlYzVjOWVmNmQyYTZkY2JmYTUyZjUwNDI5NWU2YWFkODJhMWVj
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCkBAIC01NSw3ICs1NSw3IEBAIGNs
YXNzIFRocmVhZERhdGE7CiAKIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFBsYW4+IHsKICAgICBQbGFuKAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja1RvQ29t
cGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKKyAgICAgICAgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywKICAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFs
dWVzKTsKICAgICB+UGxhbigpOwpAQCAtNzEsMTcgKzcxLDE0IEBAIHN0cnVjdCBQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICAKICAgICBDb21waWxhdGlvbktl
eSBrZXkoKTsKICAgICAKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgIHZvaWQg
Y2xlYXJDb2RlQmxvY2tNYXJrcygpOwogICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7
CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSYgdm07Ci0KLSAgICAvLyBUaGVzZSBj
YW4gYmUgcmF3IHBvaW50ZXJzIGJlY2F1c2Ugd2UgdmlzaXQgdGhlbSBkdXJpbmcgZXZlcnkgR0Mg
aW4gY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4uCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2s7Ci0gICAgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jazsKLQorICAgIFJlZlB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jazsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm9maWxlZERGR0Nv
ZGVCbG9jazsKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZTsKICAgICBjb25zdCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZh
bHVlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKaW5kZXggYTE4NjY0MTczZmMw
MDg5NDQyMTI1MTEyMDdlMTdlNmFhYmJkY2ViMS4uZmFlYmRkMDdlOGNhNGFlNmQxMmY2NzQ4NDY1
OGQzM2ZjYWQ0OWNjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKQEAgLTM1
LDQ0ICszNSw0NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVRvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaygpCitUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2soCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9j
aykKKyAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKIHsKIH0KIAogVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
aygpIHsgfQogCi1SZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IFRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKQorUmVmPFRvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPiBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJs
b2NrKSk7CiB9CiAKIHZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBp
bGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJs
b2NrLCAiIChmb3IgIiwgKnByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAgICAgICAgIk9wdGlt
aXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVC
bG9jaywKICAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKICAgICB9CiAgICAg
Ci0gICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1p
emF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCi0gICAgICAgIHByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRp
b25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOwog
fQogCiB2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRp
ZENvbXBsZXRlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
REZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemlu
ZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKnByb2ZpbGVkREZHQ29k
ZUJsb2NrLAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVC
bG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIHJlc3VsdDog
IiwgcmVzdWx0LCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHByb2ZpbGVkREZHQ29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpICE9IHByb2ZpbGVkREZHQ29kZUJsb2NrKSB7CisgICAgaWYgKG1f
ZGZnQ29kZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IG1fZGZnQ29kZUJsb2NrKSB7CiAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAg
ICAgICAgICAgICAgIkRyb3BwaW5nIEZUTCBjb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgb24g
dGhlIGZsb29yIGJlY2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAiREZHIGNvZGUgYmxvY2sg
IiwgKnByb2ZpbGVkREZHQ29kZUJsb2NrLCAiIHdhcyBqZXR0aXNvbmVkLlxuIik7CisgICAgICAg
ICAgICAgICAgIkRGRyBjb2RlIGJsb2NrICIsICptX2RmZ0NvZGVCbG9jaywgIiB3YXMgamV0dGlz
b25lZC5cbiIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04MCwxMCAr
ODIsMTAgQEAgdm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRp
b25EaWRDb21wbGV0ZSgKICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkK
ICAgICAgICAgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
Y29kZUJsb2NrKTsKICAgICAKLSAgICBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAot
ICAgICAgICBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKKyAgICBtX2RmZ0NvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBp
bGF0aW9uUmVzdWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwgcmVzdWx0KTsKIAot
ICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShj
b2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQpOworICAgIERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3Vs
dCk7CiB9CiAKIH0gfSAvLyBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCmlu
ZGV4IDJhNzkzMWQyYzM0N2QzZmEwMzdkNjU2NDc1MWQ4NWVkNTYwMjMyYjUuLjNlMGVhMDJkMGZh
MjIzNjRiOGM2OTBmYjE3MTUxNTc5ZjExNGYxN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgKQEAgLTQwLDE1ICs0MCwxOCBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrIHsKIHByb3RlY3RlZDoKLSAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
aygpOworICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBkZmdDb2RlQmxvY2spOwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAgIHN0YXRpYyBSZWY8VG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWY8VG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVS
ZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2Rl
QmxvY2spOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9j
ayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5
KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENv
ZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q29k
ZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCmlu
ZGV4IGM5ZTVjNzlmZDY4YzdkMTZkYjZmMDM5YThlNjc2ZjUxYTNjYzY0ZTcuLjcwY2M4MjUwMjI2
MmUxNzNjMzAzZjY0ODcxODVkMDNmZGQxZjVmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtMzUsNyArMzUsOSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKQorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygKKyAgICBQYXNzUmVmUHRy
PENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQorICAgIDogbV9kZmdDb2RlQmxvY2soZGZnQ29kZUJs
b2NrKQogewogfQogCkBAIC00MywzOCArNDUsMzkgQEAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW8K
IHsKIH0KIAotUmVmPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkKK1Jl
ZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRy
PENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ayhkZmdDb2RlQmxvY2spKTsKIH0KIAogdm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHko
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxv
Y2spCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIk9wdGltaXppbmcgY29t
cGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICpwcm9maWxlZERGR0NvZGVCbG9j
aywKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ss
ICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCiAgICAgICAgICAgICAiKSBkaWQgYmVjb21lIHJl
YWR5LlxuIik7CiAgICAgfQogICAgIAotICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KAotICAgICAg
ICBwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnKCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisgICAgICAgIG1f
ZGZnQ29kZUJsb2NrLmdldCgpKTsKIH0KIAogdm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAg
IGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIChmb3IgIiwgKnByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAgICAgICAgIk9w
dGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0Nv
ZGVCbG9jaywKICAgICAgICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKICAgICB9
CiAgICAgCi0gICAgSklUQ29kZSogaml0Q29kZSA9IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpOworICAgIEpJVENvZGUqIGppdENvZGUgPSBtX2RmZ0NvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmcoKTsKICAgICAgICAgCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgaml0Q29kZS0+c2V0T1NSRW50cnlCbG9j
aygqY29kZUJsb2NrLT52bSgpLCBwcm9maWxlZERGR0NvZGVCbG9jaywgY29kZUJsb2NrKTsKKyAg
ICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jayA9IGNvZGVCbG9jazsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgaml0Q29kZS0+b3NyRW50cnlS
ZXRyeSA9IDA7CkBAIC04Nyw3ICs5MCw3IEBAIHZvaWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIAotICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQp
OworICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0
ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gfSAvLyBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAppbmRleCA1ODBmN2QyZjQ2Yzg1
Mjc1MTdiYzhkZDljYzVhYzczMTAyNWFmMTRmLi5jOWRjZjZkN2MwMWZjMWU0ODU2MDA5YjhmZDcz
MjFjMDg5ZTNlNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaApAQCAtNDAsMTUgKzQwLDE4IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayB7CiBwcm90ZWN0ZWQ6Ci0gICAgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworICAgIFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9j
ayk7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKCk7CiAKLSAgICBzdGF0aWMgUmVmPFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWY8VG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8
Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBjb21waWxh
dGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29t
cGxldGUoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGls
YXRpb25SZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5
QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKik7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9u
RGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworCitwcml2YXRlOgor
ICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fZGZnQ29kZUJsb2NrOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApp
bmRleCBhYzgyM2MzYTFmYWFmOTM5MmE1MzZkZmQwNjIwYTY1MGM2YjIwNTc0Li5iNDFkODAzYzM0
ZTQ5OTA3MWYxOThlYzk1YmU5NTRkNjM3NWJkNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcApAQCAtMjA3LDE0ICsyMDcsMTQgQEAgdm9pZCBXb3JrbGlzdDo6
Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNG
b3JWTSh2bSk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0p
Cit2b2lkIFdvcmtsaXN0OjpjbGVhckNvZGVCbG9ja01hcmtzKFZNJiB2bSkKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAg
ICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoJnBsYW4tPnZt
ICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5yZW1lbWJlckNv
ZGVCbG9ja3MoKTsKKyAgICAgICAgcGxhbi0+Y2xlYXJDb2RlQmxvY2tNYXJrcygpOwogICAgIH0K
IH0KIApAQCAtNDY3LDExICs0NjcsMTEgQEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
IHZtKQogICAgIH0KIH0KIAotdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQordm9pZCBj
bGVhckNvZGVCbG9ja01hcmtzKFZNJiB2bSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6
Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERGRzo6V29ya2xpc3Qq
IHdvcmtsaXN0ID0gREZHOjp3b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAg
d29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CisgICAgICAgICAgICB3b3JrbGlzdC0+
Y2xlYXJDb2RlQmxvY2tNYXJrcyh2bSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgKaW5kZXggMDc1ZjdjY2Q3YTA5NDZiNjUzMTEyMjA3NmY3MTI1YTEw
ZjMzN2UwNi4uMTc0MDc0NTNmZDk3MjUwYzQzOTE3MzBhZGI2ZjQ3ZTUyN2U3NWQzMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKICAg
ICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCi0gICAgdm9pZCByZW1lbWJlckNv
ZGVCbG9ja3MoVk0mKTsKKyAgICB2b2lkIGNsZWFyQ29kZUJsb2NrTWFya3MoVk0mKTsKIAogICAg
IHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAgICAgU3RhdGUgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9IENvbXBpbGF0aW9u
S2V5KCkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIGlubGluZSBXb3JrbGlzdCogd29ya2xpc3RGb3JJ
bmRleE9yTnVsbCh1bnNpZ25lZCBpbmRleCkKIH0KIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKLXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7Cit2b2lkIGNsZWFyQ29kZUJs
b2NrTWFya3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKaW5kZXggMGFiYTZhODA4ZTFk
ZmMzMjNmYzE5ZGE0YmRhZTAxYzI1MTAyNTA4MS4uM2RhNDg0ODZhY2NhZTNiZDFhODc1NGVlZTdk
ZGM0ZjAyMDJkMzIxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRGaW5hbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcApAQCAtOTksNyArOTksNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVG
dW5jdGlvbigpCiAgICAgICAgIGppdENvZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAogICAgICAg
ICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAgICAgKmV4aXRUaHVua3NMaW5r
QnVmZmVyLAotICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExK
SVQpKS5kYXRhKCkpKSk7CisgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9yICVz
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCks
IEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlv
biBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAKICAgICBpZiAoc2lk
ZUNvZGVMaW5rQnVmZmVyKSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUoRklOQUxJWkVf
REZHX0NPREUoCiAgICAgICAgICAgICAqc2lkZUNvZGVMaW5rQnVmZmVyLAogICAgICAgICAgICAg
KCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSkpCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxh
bi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpCiAgICAgICAgICAg
ICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKICAgICB9CiAgICAgCkBAIC0xMjQsNyArMTI0LDcgQEAg
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICBqaXRDb2RlLT5h
ZGRIYW5kbGUoRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqaGFuZGxlRXhjZXB0aW9u
c0xpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBleGNlcHRpb24gaGFuZGxlciBmb3IgJXMi
LAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRD
b2RlOjpGVExKSVQpKS5kYXRhKCkpKQogICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7
CiAgICAgfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgK
ICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqZW50cnlwb2ludExpbmtC
dWZmZXIsCi0gICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExM
Vk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsK
KyAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5l
cmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwog
ICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCmluZGV4IGNmZWI4MWYxYTgx
YWQ0MTFhNjZkNDZjNDFkNWZkNTI4N2ZlYTU4MWYuLjNlZGE1MjEwMjdiM2U1MTBiM2ZkZTEzZGJl
MWU3N2NkMzExYmRjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2Nr
U2V0LmNwcApAQCAtNDEsMTEgKzQxLDE3IEBAIENvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkK
IAogQ29kZUJsb2NrU2V0Ojp+Q29kZUJsb2NrU2V0KCkKIHsKKyAgICBmb3IgKENvZGVCbG9jayog
Y29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKQorICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7
CisKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9uZXdDb2RlQmxvY2tzKQorICAg
ICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0OjphZGQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2spCiB7Ci0gICAgYm9vbCBpc05ld0VudHJ5ID0gbV9uZXdDb2RlQmxv
Y2tzLmFkZChjb2RlQmxvY2spLmlzTmV3RW50cnk7CisgICAgQ29kZUJsb2NrKiBibG9jayA9IGNv
ZGVCbG9jay5sZWFrUmVmKCk7CisgICAgYm9vbCBpc05ld0VudHJ5ID0gbV9uZXdDb2RlQmxvY2tz
LmFkZChibG9jaykuaXNOZXdFbnRyeTsKICAgICBBU1NFUlRfVU5VU0VEKGlzTmV3RW50cnksIGlz
TmV3RW50cnkpOwogfQogCkBAIC01OCwyNiArNjQsNTIgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnBy
b21vdGVZb3VuZ0NvZGVCbG9ja3MoKQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3NGb3JG
dWxsQ29sbGVjdGlvbigpCiB7CiAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xk
Q29kZUJsb2NrcykKLSAgICAgICAgY29kZUJsb2NrLT5jbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNh
bGxlZCgpOworICAgICAgICBjb2RlQmxvY2stPmNsZWFyTWFya3MoKTsKIAogICAgIC8vIFdlIHBy
b21vdGUgYWZ0ZXIgd2UgY2xlYXIgbWFya3Mgb24gdGhlIG9sZCBnZW5lcmF0aW9uIENvZGVCbG9j
a3MgYmVjYXVzZQogICAgIC8vIG5vbmUgb2YgdGhlIHlvdW5nIGdlbmVyYXRpb25zIENvZGVCbG9j
a3MgbmVlZCB0byBiZSBjbGVhcmVkLgogICAgIHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsKIH0K
IAotdm9pZCBDb2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhlYXBP
cGVyYXRpb24gY29sbGVjdGlvblR5cGUpCit2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJNYXJrc0Zv
ckVkZW5Db2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYgcmVtZW1iZXJlZFNl
dCkKIHsKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+JiBzZXQgPSBjb2xsZWN0aW9uVHlwZSA9PSBF
ZGVuQ29sbGVjdGlvbiA/IG1fbmV3Q29kZUJsb2NrcyA6IG1fb2xkQ29kZUJsb2NrczsKLSAgICBW
ZWN0b3I8Q29kZUJsb2NrKj4gdW5tYXJrZWQ7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IHNldCkgewotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICAv
LyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsIHJldmlzaXQgQ29kZUJsb2NrcyBpbiByZW1lbWJl
cmVkIEV4ZWN1dGFibGVzIGV2ZW4gaWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgbWFya2VkLgorICAg
IGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogcmVtZW1iZXJlZFNldCkgeworICAgICAgICBTY3Jp
cHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29uc3RfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4o
anNEeW5hbWljQ2FzdDxjb25zdCBTY3JpcHRFeGVjdXRhYmxlKj4oY2VsbCkpOworICAgICAgICBp
ZiAoIWV4ZWN1dGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdW5tYXJrZWQu
YXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZvckVhY2hDb2RlQmxvY2so
W3RoaXNdKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmNs
ZWFyTWFya3MoKTsKKyAgICAgICAgICAgIG1fcmVtZW1iZXJlZC5hZGQoY29kZUJsb2NrKTsKKyAg
ICAgICAgfSk7CiAgICAgfQorfQogCi0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IHVu
bWFya2VkKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRl
c3Ryb3koY29kZUJsb2NrKTsKLSAgICAgICAgc2V0LnJlbW92ZShjb2RlQmxvY2spOwordm9pZCBD
b2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhlYXBPcGVyYXRpb24g
Y29sbGVjdGlvblR5cGUpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPiYgc2V0ID0gY29sbGVj
dGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24gPyBtX25ld0NvZGVCbG9ja3MgOiBtX29sZENvZGVC
bG9ja3M7CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGEgZml4cG9pbnQgYmVjYXVzZSBjb2Rl
IGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtlZCBtYXkKKyAgICAvLyByZWZlciB0byBlYWNoIG90aGVy
LiBGb3IgZXhhbXBsZSwgYSBERkcgY29kZSBibG9jayB0aGF0IGlzIG93bmVkIGJ5CisgICAgLy8g
dGhlIEdDIG1heSByZWZlciB0byBhbiBGVEwgZm9yLWVudHJ5IGNvZGUgYmxvY2sgdGhhdCBpcyBh
bHNvIG93bmVkIGJ5CisgICAgLy8gdGhlIEdDLgorICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAxNj4g
dG9SZW1vdmU7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkZpeHBvaW50aW5n
IG92ZXIgdW5tYXJrZWQsIHNldCBzaXplID0gIiwgc2V0LnNpemUoKSwgIi4uLlxuIik7CisgICAg
Zm9yICg7OykgeworICAgICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogc2V0KSB7Cisg
ICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzT25lUmVmKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CisgICAgICAgICAgICB0
b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1vdmluZyAiLCB0b1JlbW92ZS5zaXplKCks
ICIgYmxvY2tzLlxuIik7CisgICAgICAgIGlmICh0b1JlbW92ZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IHRvUmVtb3Zl
KQorICAgICAgICAgICAgc2V0LnJlbW92ZShjb2RlQmxvY2spOworICAgICAgICB0b1JlbW92ZS5y
ZXNpemUoMCk7CiAgICAgfQogCiAgICAgLy8gQW55IHJlbWFpbmluZyB5b3VuZyBDb2RlQmxvY2tz
IGFyZSBsaXZlIGFuZCBuZWVkIHRvIGJlIHByb21vdGVkIHRvIHRoZSBzZXQgb2Ygb2xkIENvZGVC
bG9ja3MuCkBAIC04Nyw2ICsxMTksNyBAQCB2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJr
ZWRBbmRVbnJlZmVyZW5jZWQoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIAogdm9pZCBD
b2RlQmxvY2tTZXQ6OnJlbW92ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBjb2RlQmxv
Y2stPmRlcmVmKCk7CiAgICAgaWYgKG1fb2xkQ29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2sp
KSB7CiAgICAgICAgIG1fb2xkQ29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2NrKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTUsMTMgKzEyOCwzNSBAQCB2b2lkIENvZGVCbG9ja1NldDo6cmVtb3ZlKENv
ZGVCbG9jayogY29kZUJsb2NrKQogICAgIG1fbmV3Q29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2Nr
KTsKIH0KIAordm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1f
Y3VycmVudGx5RXhlY3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOworCisgICAgLy8g
V2Ugc3Ryb25nbHkgdmlzaXQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgc2V0IGJlY2F1c2UgamV0
dGlzb25pbmcgY29kZQorICAgIC8vIGlzIG5vdCB2YWx1YWJsZSBvbmNlIGl0J3Mgb24gdGhlIHN0
YWNrLiBXZSdyZSBwYXN0IHRoZSBwb2ludCB3aGVyZQorICAgIC8vIGpldHRpc29uaW5nIHdvdWxk
IGF2b2lkIHRoZSBjb3N0IG9mIE9TUiBleGl0LgorICAgIGZvciAoY29uc3QgUmVmUHRyPENvZGVC
bG9jaz4mIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAgICAgICBjb2RlQmxv
Y2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7CisKKyAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCB0
aGUgcmVtZW1iZXJlZCBzZXQgYmVjYXVzZSBqZXR0aXNvbmluZyBvbGQgY29kZSBkdXJpbmcKKyAg
ICAvLyBFZGVuIEdDIGlzIHVuc291bmQuIFRoZXJlIG1pZ2h0IGJlIGFuIG9sZCBvYmplY3Qgd2l0
aCBhIHN0cm9uZyByZWZlcmVuY2UKKyAgICAvLyB0byB0aGUgY29kZS4KKyAgICBmb3IgKGNvbnN0
IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX3JlbWVtYmVyZWQpCisgICAgICAgIGNv
ZGVCbG9jay0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKK30KKwogdm9pZCBDb2RlQmxvY2tTZXQ6
OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewogICAg
IGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRs
eUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsKLSAgICBmb3IgKENvZGVCbG9j
ayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGhlYXAtPmFkZFRv
UmVtZW1iZXJlZFNldChjb2RlQmxvY2spOworICAgIGZvciAoY29uc3QgUmVmUHRyPENvZGVCbG9j
az4mIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAgICAgICBoZWFwLT5hZGRU
b1JlbWVtYmVyZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CisKKyAgICAvLyBJ
dCdzIHNhZmUgdG8gY2xlYXIgdGhlc2UgUmVmUHRyIHNldHMgYmVjYXVzZSB3ZSB3b24ndCBkZWxl
dGUgdGhlIENvZGVCbG9ja3MKKyAgICAvLyBpbiB0aGVtIHVudGlsIHRoZSBuZXh0IEdDLCBhbmQg
d2UnbGwgcmVjb21wdXRlIHRoZW0gYXQgdGhhdCB0aW1lLgogICAgIG1fY3VycmVudGx5RXhlY3V0
aW5nLmNsZWFyKCk7CisgICAgbV9yZW1lbWJlcmVkLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ29kZUJs
b2NrU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0xMTYsOCArMTcxLDggQEAg
dm9pZCBDb2RlQmxvY2tTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjb2RlQmxvY2spKTsKICAgICBvdXQucHJpbnQo
Il0sIGN1cnJlbnRseUV4ZWN1dGluZyA9IFsiKTsKICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigp
OwotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykK
LSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjb2RlQmxvY2spKTsKKyAgICBm
b3IgKGNvbnN0IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1
dGluZykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjb2RlQmxvY2suZ2V0
KCkpKTsKICAgICBvdXQucHJpbnQoIl19Iik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmgKaW5kZXggMWM5MjU4MzA3OWEwNTdiMDU3MjdkMGQ0Yzg0MzZhYTM5
NWU4ZWMzNi4uMThlZjVhNDIyMThhZGE5ZTJhMjI0NzU5MTYxMzFlNDIxYzQ4MmNkNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKQEAgLTUzLDggKzUzLDExIEBA
IHB1YmxpYzoKICAgICB+Q29kZUJsb2NrU2V0KCk7CiAgICAgCiAgICAgLy8gQWRkIGEgQ29kZUJs
b2NrLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCi0gICAg
dm9pZCBhZGQoQ29kZUJsb2NrKik7CisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+
KTsKICAgICAKKyAgICAvLyBDbGVhciBtYXJrIGJpdHMgZm9yIGNlcnRhaW4gQ29kZUJsb2NrcyBk
ZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY29sbGVjdGlvbi4KKyAgICB2b2lkIGNsZWFyTWFya3NG
b3JFZGVuQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsKKwogICAgIC8v
IENsZWFyIGFsbCBtYXJrIGJpdHMgZm9yIGFsbCBDb2RlQmxvY2tzLgogICAgIHZvaWQgY2xlYXJN
YXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAKQEAgLTY5LDYgKzcyLDEwIEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHJlbW92ZShDb2RlQmxvY2sqKTsKICAgICAKKyAgICAvLyBUcmFjZSBhbGwg
bWFya2VkIGNvZGUgYmxvY2tzLiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YK
KyAgICAvLyBtYXlCZUV4ZWN1dGluZy4KKyAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9y
Jik7CisKICAgICAvLyBBZGQgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0
aGUgcmVtZW1iZXJlZCBzZXQgdG8gYmUgCiAgICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5l
eHQgY29sbGVjdGlvbi4KICAgICB2b2lkIHJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJs
b2NrcyhIZWFwKik7CkBAIC05Nyw5ICsxMDQsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFy
TWFya3NGb3JDb2RlQmxvY2tzSW5SZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNv
bnN0IEpTQ2VsbCo+Jik7CiAgICAgdm9pZCBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CiAKKyAg
ICAvLyBUaGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5l
ZWQgdG8gYmUgYWJsZSB0byBmaW5kCisgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJ
IGNvdWxkIGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCisgICAgLy8g
YW5kIGFsbCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCiAgICAgSGFzaFNldDxDb2Rl
QmxvY2sqPiBtX29sZENvZGVCbG9ja3M7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX25ld0Nv
ZGVCbG9ja3M7Ci0gICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX2N1cnJlbnRseUV4ZWN1dGluZzsK
KyAgICBIYXNoU2V0PFJlZlB0cjxDb2RlQmxvY2s+PiBtX2N1cnJlbnRseUV4ZWN1dGluZzsKKyAg
ICBIYXNoU2V0PFJlZlB0cjxDb2RlQmxvY2s+PiBtX3JlbWVtYmVyZWQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggNzBkM2EwYTI4
Njg2NDU5ZDRjY2NhNWVhN2U5NTJlNGFlZjBhNzRlYS4uZmJmZGQ0MGU0MGMwNGUxZjc3ZDc2ZDU5
NjAzOTc2ZWM1NDQxYTRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTUy
MCw2ICs1MjAsMTcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLCB2
b2lkKiBzdGFja09yaWdpbiwgdm9pZCogc3RhY2tUb3AsIE1hY2gKICAgICBHQ1BIQVNFKE1hcmtS
b290cyk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX3ZtKSk7CiAKKyAgICBWZWN0
b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldChtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygp
LnNpemUoKSk7CisgICAgbV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5maWxsVmVjdG9yKHJlbWVt
YmVyZWRTZXQpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgREZHOjpjbGVhckNvZGVCbG9j
a01hcmtzKCptX3ZtKTsKKyNlbmRpZgorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RWRlbkNvbGxlY3Rpb24pCisgICAgICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzRm9yRWRlbkNv
bGxlY3Rpb24ocmVtZW1iZXJlZFNldCk7CisgICAgZWxzZQorICAgICAgICBtX2NvZGVCbG9ja3Mu
Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisKICAgICAvLyBXZSBnYXRoZXIgY29uc2Vy
dmF0aXZlIHJvb3RzIGJlZm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRp
dmUKICAgICAvLyBnYXRoZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgcmVmZXJlbmNlIGlzIHZhbGlkLgogICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZh
dGl2ZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9yYWdlU3BhY2UpOwpAQCAt
NTI3LDIwICs1MzgsMTAgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
LCB2b2lkKiBzdGFja09yaWdpbiwgdm9pZCogc3RhY2tUb3AsIE1hY2gKICAgICBnYXRoZXJKU1N0
YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBERkc6OnJl
bWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKLSAgICAgICAgbV9vcGFxdWVSb290cy5jbGVh
cigpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgfQotCi0g
ICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90VmlzaXRvci5tYXJr
U3RhY2soKS5zaXplKCkpOwotICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuZmlsbFZlY3Rv
cihyZW1lbWJlcmVkU2V0KTsKLQogICAgIGNsZWFyTGl2ZW5lc3NEYXRhKCk7CiAKKyAgICBpZiAo
bV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX29wYXF1
ZVJvb3RzLmNsZWFyKCk7CiAKICAgICBtX3Nob3VsZEhhc2hDb25zID0gbV92bS0+aGF2ZUVub3Vn
aE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CiAKQEAgLTU4MSw3ICs1ODIsNiBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsIHZvaWQqIHN0YWNrT3JpZ2luLCB2b2lkKiBz
dGFja1RvcCwgTWFjaAogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVy
KG1fc2xvdFZpc2l0b3IpOwogCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKICAgICAgICAgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKICAgICAgICAgdmlzaXRT
bWFsbFN0cmluZ3MoKTsKICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CkBAIC02OTcsOSArNjk3LDYgQEAgdm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVm
ZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogdm9pZCBIZWFwOjpjbGVhckxpdmVu
ZXNzRGF0YSgpCiB7CiAgICAgR0NQSEFTRShDbGVhckxpdmVuZXNzRGF0YSk7Ci0gICAgaWYgKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKLSAgICAgICAgbV9jb2RlQmxv
Y2tzLmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOwotCiAgICAgbV9vYmplY3RTcGFjZS5j
bGVhck5ld2x5QWxsb2NhdGVkKCk7CiAgICAgbV9vYmplY3RTcGFjZS5jbGVhck1hcmtzKCk7CiB9
CkBAIC04MjEsNiArODE4LDcgQEAgdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290
VmlzaXRvciYgdmlzaXRvcikKIHZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJv
dXRpbmVzKCkKIHsKICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5l
cyk7CisgICAgbV9jb2RlQmxvY2tzLnRyYWNlTWFya2VkKG1fc2xvdFZpc2l0b3IpOwogICAgIG1f
aml0U3R1YlJvdXRpbmVzLnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwog
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQpAQCAtOTY1
LDEyICs5NjMsMTggQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb2RlQmxvY2tzKCkKICAgICAvLyBJ
ZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gZGVsZXRlIGFsbCBKYXZh
U2NyaXB0IGNvZGUsIHNpbmNlCiAgICAgLy8gd2UnbGwgZW5kIHVwIHJldHVybmluZyB0byBkZWxl
dGVkIGNvZGUuCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0tPmVudHJ5U2NvcGUpOwotICAgIEFT
U0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogCiAgICAgY29tcGxl
dGVBbGxERkdQbGFucygpOwogCi0gICAgZm9yIChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA6
IG1fZXhlY3V0YWJsZXMpCi0gICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworICAgIGZv
ciAoRXhlY3V0YWJsZUJhc2UqIGN1cnJlbnQgOiBtX2V4ZWN1dGFibGVzKSB7CisgICAgICAgIGlm
ICghY3VycmVudC0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xl
YXJDb2RlKCk7CisgICAgfQorCisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBG
dWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwor
ICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2Nv
ZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoRnVsbENvbGxlY3Rpb24pOwog
fQogCiB2b2lkIEhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcygpCkBAIC05OTAsOSAr
OTk0LDkgQEAgdm9pZCBIZWFwOjpjbGVhclVubWFya2VkRXhlY3V0YWJsZXMoKQogICAgICAgICBp
ZiAoaXNNYXJrZWQoY3VycmVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAv
LyBFYWdlcmx5IGRlcmVmZXJlbmNlIHRoZSBFeGVjdXRhYmxlJ3MgSklUQ29kZSBpbiBvcmRlciB0
byBydW4gd2F0Y2hwb2ludAotICAgICAgICAvLyBkZXN0cnVjdG9ycy4gT3RoZXJ3aXNlLCB3YXRj
aHBvaW50cyBtaWdodCBmaXJlIGZvciBkZWxldGVkIENvZGVCbG9ja3MuCi0gICAgICAgIGN1cnJl
bnQtPmNsZWFyQ29kZSgpOworICAgICAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgZXhlY3V0YWJs
ZSBtZW1vcnkgaXMgbGltaXRlZCBvbiBzb21lIHBsYXRmb3JtcyBhbmQgYmVjYXVzZQorICAgICAg
ICAvLyBDb2RlQmxvY2sgcmVxdWlyZXMgZWFnZXIgZmluYWxpemF0aW9uLgorICAgICAgICBFeGVj
dXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChjdXJyZW50KTsKICAgICAgICAgc3RkOjpzd2Fw
KG1fZXhlY3V0YWJsZXNbaV0sIG1fZXhlY3V0YWJsZXMubGFzdCgpKTsKICAgICAgICAgbV9leGVj
dXRhYmxlcy5yZW1vdmVMYXN0KCk7CiAgICAgfQpAQCAtMTE0Niw2ICsxMTUwLDcgQEAgdm9pZCBI
ZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUpCiAg
ICAgR0NQSEFTRShTdGFydGluZ0NvbGxlY3Rpb24pOwogICAgIGlmIChzaG91bGREb0Z1bGxDb2xs
ZWN0aW9uKGNvbGxlY3Rpb25UeXBlKSkgewogICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygp
OwogICAgICAgICBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJGdWxsQ29sbGVjdGlvbiwg
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAppbmRleCBjMjQxOTg5ZmIwYTM5NDgwMTk5ZWUxYWU4ZWJiMTIyMmU1YjE1N2NhLi4wNGJl
OGM4YzZmNTI0NWI2OGUzZGEzYWNiNzIyNThjOGMyOWY1YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTE3Myw3ICsxNzMs
NyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIEFTU0VSVCgh
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICBUaGlzVERaTW9kZSB0aGlz
VERaTW9kZSA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RydWN0
b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkID8gVGhpc1REWk1vZGU6OkFsd2F5
c0NoZWNrIDogVGhpc1REWk1vZGU6OkNoZWNrSWZOZWVkZWQ7Ci0gICAgICAgIGV2YWwgPSBjYWxs
ZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29k
ZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERaTW9kZSwgcHJv
Z3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgICAgIGV2YWwgPSBjYWxsZXJDb2Rl
QmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKSwgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgdGhpc1REWk1vZGUsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogICAgICAg
ICBpZiAoIWV2YWwpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
CmluZGV4IDg0MzgzYzhjNTA3ZDkzNDI1YTMyNjM1M2JlZjQzNGNlMDUwYzA3NGUuLjM3MzA3MjE5
MGM2OTc0ZDI0MmU5ZWE5YjQ3NGZjMDEyZTY1YmQ2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNzAsNyArMTcwLDcg
QEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9j
ayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIG1f
ZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7
CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBiYjY3NWMwMDMzNTIzOTE1MmIwNzdjNWM2Mzkx
NmI2YjVkYzgwY2FjLi44ZTNjMjcwY2QwNTUwMjhjM2U5YzAwZDk1MzhiMDg5OWM1NzQyYTRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC0z
OCw3ICszOCw3IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGFibGVG
b3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpOwogICAgIAotICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAgIHJldHVybiBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKIH0KIAogVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAppbmRleCBmNmZkNjA2MjU2NDIwY2Q0OGYzODYxZGNjYTg3MzI3ZGFjMjcwYTY4Li5mZWEz
YzQzMTEyZGYzNjgwMDY3MDNiNzgxMjMzODg0ZGQ4N2FiMDM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEwNzQsNyArMTA3NCw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOwotICAgICAgICByZXR1
cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzU3RyaWN0TW9kZSgpOworICAgICAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5leGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAogICAg
IEVDTUFNb2RlIGVjbWFNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCmluZGV4IDU5Y2Ji
MjQ4N2Y3MWMxYjM5MTA1MmE1MWFlMzI0MDM0NWJjN2EwMmYuLjBhZGM2M2I1MDk2M2RiM2ZlNWVi
ZDI3NTc1OWM2NjQ1ZDY1YTA1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaApAQCAtMTE1LDcgKzExNSw3IEBAIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogLy8gSGVscGVyIGZvciB0aGUg
Y3JlYXRpb24gb2Ygc2ltcGxlIHN0dWIgcm91dGluZXMgdGhhdCBuZWVkIG5vIGhlbHAgZnJvbSB0
aGUgR0MuIE5vdGUKIC8vIHRoYXQgY29kZUJsb2NrIGdldHMgImV4ZWN1dGVkIiBtb3JlIHRoYW4g
b25jZS4KICNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1JfR0NfQVdBUkVfU1RVQihjb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBtYWtlc0NhbGxzLCBjZWxsLCBkYXRhTG9nRkFyZ3VtZW50cykgXAotICAg
IChjcmVhdGVKSVRTdHViUm91dGluZShGSU5BTElaRV9DT0RFX0ZPUigoY29kZUJsb2NrKSwgKHBh
dGNoQnVmZmVyKSwgZGF0YUxvZ0ZBcmd1bWVudHMpLCAqKGNvZGVCbG9jayktPnZtKCksIChjb2Rl
QmxvY2spLCAobWFrZXNDYWxscyksIChjZWxsKSkpCisgICAgKGNyZWF0ZUpJVFN0dWJSb3V0aW5l
KEZJTkFMSVpFX0NPREVfRk9SKChjb2RlQmxvY2spLCAocGF0Y2hCdWZmZXIpLCBkYXRhTG9nRkFy
Z3VtZW50cyksICooY29kZUJsb2NrKS0+dm0oKSwgKGNvZGVCbG9jayktPm93bmVyRXhlY3V0YWJs
ZSgpLCAobWFrZXNDYWxscyksIChjZWxsKSkpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCmluZGV4IDM4MmY3YWIzZjJlOGY5ZTQ5ZDdhZmE2MDNl
MDFiYWM3ZGY2ZTc5NzUuLmZlZjViYzljYmM1YzU1YmRhYmFjZDkwODk1ODA0YzIwYTA3ZTc3NDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC0xMjEsNiArMTIxLDI4IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPigKKyAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSk7CisgICAgICAg
IGNhc2UgQmFzZWxpbmVKSVQ6CisgICAgICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlv
bmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAorICAgICAgICAgICAgLy8gSW50ZXJw
cmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKKyAgICAgICAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygxNSkpOworICAgICAgICBjYXNlIERGR0pJVDoK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzPigKKyAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygy
MCkpOworICAgICAgICBjYXNlIEZUTEpJVDoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9u
bzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKKyAgICAgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAgICAgICB9
CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3RlZExv
d2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDg0MGUyNjI4ZDI2YWU5MTMxMmNkYjQ4ZDhmNTNl
NTcyMDA5MzM4NTkuLmUxNzY4Mjk4ZDQwMTYzZTZkNDRjZGY0ZjU5YmJiOWE1NDZlMTQ0Y2IgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNjY2LDcgKzY2Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2spOworICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA0NDJhNzkyNjY1
ZWRlYThhZjJhMjMzMDk2ZGIzYzllZmU5ZTk3NDVkLi44ZTdlYTY1MDYwMGI2MWQ1YTExNDZmZTE5
MDY3N2I5OTc4YmI5OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKQEAgLTEyNzMsMTMgKzEyNzMsMTUgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGUK
ICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJh
bmQpLmpzVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1l
bnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIFJlZlB0
cjxDb2RlQmxvY2s+IHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUo
Ci0gICAgICAgICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIG51bGxwdHIsIERGRzo6REZH
TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9j
ay5nZXQoKSwgMCwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgbXVz
dEhhbmRsZVZhbHVlcywgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKQorICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvbkRlZmVycmVkIHx8IHJlcGxhY2Vt
ZW50Q29kZUJsb2NrLT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KDAsIDApOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAppbmRleCA4NzZiMDQwMWI4Yzk5MzZlMmZlMWQyMmNjZjQzZGZmNWYx
YmM4NjM1Li5iNDI0NjRmMjUxNGFkZWEyZjYxZTQyZTI2ZGI5MzY2ZDIwYjY4YWI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtNDMsOSArNDMsOCBAQCBSZWY8SklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrOjpjcgogfQogCiB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVC
bG9jaywgIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAogICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCkBAIC01NSw5ICs1NCw4IEBAIHZvaWQgSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlB
c3luY2hyb25vdXNsCiB9CiAKIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewot
ICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKQEAgLTY4LDcgKzY2LDcgQEAgdm9pZCBK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0
ZSgKICAgICAKICAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOwogCi0gICAgRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJv
ZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSAv
LyBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAppbmRleCBhZjI1MzJmOTIwOTYwNDI2
MDExZDFkYzE4ODZkZWZlM2YzODBlNTFkLi5mNjRiOTc5Y2VjY2NkNDM5MzJmMzJmZDg4ZDViNDZi
MjY0YjU4MTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCkBAIC00NCw4ICs0NCw4
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWY8SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s+IGNyZWF0ZSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRp
ZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxl
ZERGR0NvZGVCbG9jaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29t
cGlsYXRpb25SZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRp
ZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25S
ZXN1bHQpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA2NTVkOTE4OTFhZWUyYjI1Mjg3YzUxODZiZjY3OGY4
ODkyM2RiMWFiLi5iMTE5ZjU5ZGQ4OTQxNDE3MGZkOWRhYmUzZTYxMTQ1ZTRmMWM3NGNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTIyNywxNCArMjI3LDE1IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBuZXdDYXNlOwogCiAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQotICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3Ro
KTsKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKICAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCi0gICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNz
Q2FzZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwpAQCAtMjY1LDcgKzI2Niw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewog
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB0cnVlKTsKLSAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCkBAIC0yNzgs
MTAgKzI3OSwxMCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7
CisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywg
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xv
dEJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMwMiw3ICszMDMsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIGNvbgogICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsK
IAogICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAotICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdl
dEZyb21Qcm94eSwKKyAgICAgICAgICAgIHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKICAgICAgICAgICAgIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdl
dHRlcigpIDogbnVsbHB0ciwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/
IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIpOwogICAgIH0KQEAgLTM1Niw2ICszNTcsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCkBAIC0zODMsMTEgKzM4NSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkUmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBvd25lciwgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIApAQCAtNDA5LDEy
ICs0MTEsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgIGlmIChwdXRL
aW5kID09IE5vdERpcmVjdCkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhl
YywgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
Ojp0cmFuc2l0aW9uKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZz
ZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJh
bnNpdGlvbih2bSwgb3duZXIsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRp
dGlvblNldCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSkgewpAQCAtNDIzLDEzICs0MjUsMTMgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHIKICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OnNldHRlcigKLSAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpDdXN0b21TZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LAor
ICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1
Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90
LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00MzgsNyAr
NDQwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgIGlmIChzbG90LmJh
c2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2
bSwgb3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBj
b25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKQEAgLTQ0Niw3ICs0NDgs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CiAKICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVy
LCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgICAgICB2bSwg
b3duZXIsIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNl
dCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ4OSw2ICs0OTEsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
ID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsK
ICAgICAKQEAgLTQ5NiwxNyArNDk5LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlS
ZXBhdGNoSW4oCiAgICAgaWYgKHdhc0ZvdW5kKSB7CiAgICAgICAgIGlmIChzbG90LnNsb3RCYXNl
KCkgIT0gYmFzZSkgewogICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVj
dHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlNaXNzKAotICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBpZGVu
dC5pbXBsKCkpOworICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICB9CiAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6aW4oCi0gICAg
ICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3ND
YXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKKyAgICAgICAgdm0sIG93bmVy
LCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uodm0sIGNvZGVCbG9jaywgaWRlbnQsIFdURjo6bW92
ZShuZXdDYXNlKSk7CiAgICAgaWYgKCFjb2RlUHRyKQpAQCAtNTU1LDggKzU1OCw4IEBAIHZvaWQg
bGlua0ZvcigKICAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldENh
bGxlZShleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2lu
KCksIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKLSAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNl
ZW5DYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxs
ZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0o
KSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZShl
eGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBjYWxsZWUpOwogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29k
ZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsICpjYWxsZXJDb2Rl
QmxvY2ssICIgYXQgIiwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgIiB0byAiLCBwb2ludGVy
RHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIp
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBh
dGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CkBAIC04NzMsNyArODc2LDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAgICAgKCJQb2x5bW9ycGhpYyBj
YWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAogICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSkp
LAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jaywgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2Fs
bExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2Fz
ZXMsCiAgICAgICAgIFdURjo6bW92ZShmYXN0Q291bnRzKSkpOwogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBlMTg3ZjYxYzRmYzY3YTY4MWExNmI3ZjZkNTBhMzFk
NTFhNGZiZTA5Li40NzdjZWQwMjZmZDVjNzkwMTM0ZDYwNzJiYmRhNzZhZjM2ZTU4YjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTU3
Niw3ICs1NzYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkKQog
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQogICAgICAg
ICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSkgewotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAKQEAgLTY0MSw3ICs2NDEsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkKQogICAgICAgICAgICAg
JiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQogICAg
ICAgICAgICAgJiYgYmFzZUNlbGwgPT0gc2xvdC5iYXNlKCkpIHsKIAotICAgICAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkg
ewogICAgICAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCB2bS5oZWFwKTsKQEAgLTY1OCw3ICs2NTgsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgY2hhaW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2hh
aW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
cGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKQEAgLTExOTAsOCAr
MTE5MCw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAgICAgICAgIAogICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1v
dmUoKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxlZSk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZt
LCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVl
LnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAg
ICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFj
aGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAg
ICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5T
dGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5T
dGFjay5jcHAKaW5kZXggYjhlZWNkZDYwNDA1YzdmMTRmOTA2NTkyYTBjNTQzNWM5ZWEzZTgzNy4u
NWMzMjQyYTNiN2ExMzdlZTFkYzMxZTA1ZDNlZWM1MmM5OGRhMGFjNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcApA
QCAtNTIsNyArNTIsNyBAQCBPcmlnaW5TdGFjazo6T3JpZ2luU3RhY2soRGF0YWJhc2UmIGRhdGFi
YXNlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgQ29kZU9yaQogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBhcHBlbmQo
T3JpZ2luKAotICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ld
LmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAorICAgICAgICAgICAg
ZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2soKSksCiAgICAgICAgICAgICBzdGFja1tpXS5ieXRlY29kZUluZGV4KSk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKaW5kZXggMWFiNzhkZTJkMmU2ZDhhYzhiZTE5Nzk1YjcxODAxMGQ4NWQ3ZjYw
Ny4uZTI5ZjEzYWJlZGRkN2EyZDUxMDI5ZGRjZDgwMzcyNmM5YWU5YjliZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC0yMzEs
NyArMjMxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogCiAgICAg
YXV0byYgY2FjaGVXcml0ZUJhcnJpZXIgPSBwY1s0XS51LmpzQ2VsbDsKICAgICBpZiAoIWNhY2hl
V3JpdGVCYXJyaWVyKQotICAgICAgICBjYWNoZVdyaXRlQmFycmllci5zZXQoZXhlYy0+dm0oKSwg
ZXhlYy0+Y29kZUJsb2NrKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY2FjaGVXcml0ZUJhcnJp
ZXIuc2V0KGV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwg
Y29uc3RydWN0b3IpOwogICAgIGVsc2UgaWYgKGNhY2hlV3JpdGVCYXJyaWVyLnVudmFsaWRhdGVk
R2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgJiYgY2FjaGVXcml0
ZUJhcnJpZXIuZ2V0KCkgIT0gY29uc3RydWN0b3IpCiAgICAgICAgIGNhY2hlV3JpdGVCYXJyaWVy
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3Rz
KCkpOwogCkBAIC0yNTAsNyArMjUwLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3Ro
aXMpCiAgICAgICAgIGlmIChteVN0cnVjdHVyZSAhPSBvdGhlclN0cnVjdHVyZSkgewogICAgICAg
ICAgICAgaWYgKG90aGVyU3RydWN0dXJlKQogICAgICAgICAgICAgICAgIHBjWzNdLnUudG9UaGlz
U3RhdHVzID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgICAgIHBjWzJdLnUuc3RydWN0dXJl
LnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJlKTsKKyAgICAgICAgICAgIHBj
WzJdLnUuc3RydWN0dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLCBteVN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBwY1sz
XS51LnRvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7CkBAIC01MjYsOCArNTI2LDggQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9lbnRlcikKIHsKICAgICBCRUdJTigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlID0g
ZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpOworICAgIEhlYXA6OmhlYXAob3du
ZXJFeGVjdXRhYmxlKS0+d3JpdGVCYXJyaWVyKG93bmVyRXhlY3V0YWJsZSk7CiAgICAgRU5EKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgKaW5kZXggNDQ0YmM5ZmI4OGYzN2NlZWM0Y2Y0ODM2ZDQ5OWVjMjdhNDBmNDhjMC4uMDU3NjJl
NWVlMzEzYTdhYjQ2NDQ5NGU1ZTM1NTM3N2I1ZGY2MDllYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBp
bmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCiAgICAgICAgIHNjb3BlLT5zdHJ1
Y3R1cmUoKS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KGV4ZWMtPnZtKCksIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogCiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IGNvZGVCbG9jaywgc2NvcGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcGNbNV0udS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7CiAgICAgfQogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlR2V0
RnJvbVNjb3BlR2xvYmFsKAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29w
ZS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
cGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jaywgc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBwY1s2
XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAppbmRleCAwMzBiY2M1MTU4NzgyYmZmYzk4NzZlNWIwNTg0YzBjOGI4NjUx
OTFhLi45NjMxYzk4NTA5YWE5MmI4NWRhMzFmNWQxNGE5YzVhYjMyOGI0NjNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNjAsNDUgKzYwLDYg
QEAgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICNlbmRpZgogICAgIG1fbnVtUGFy
YW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1Q
YXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwotCi0g
ICAgaWYgKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSB7Ci0gICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPih0aGlzKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNs
ZWFyKCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZh
bEV4ZWN1dGFibGU6OmluZm8oKSkgewotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBleGVjdXRhYmxlLT5t
X2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2
YWxDb2RlQmxvY2suY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewotICAgICAgICBQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+
KHRoaXMpOwotICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsK
LSAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjbGFzc0luZm8oKSA9PSBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7
Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOwot
ICAgICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVh
cigpOwotICAgICAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUu
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgaWYgKGNsYXNzSW5mbygpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6aW5m
bygpKSB7Ci0gICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9j
b2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIEFTU0VSVChjbGFzc0luZm8oKSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZvKCkpOwog
fQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNjIsNyArMTIzLDcgQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9j
aywgQ29kZVR5cGUKIHsKICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogICAgIAot
ICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8Q29kZUJs
b2NrPiBvbGRDb2RlQmxvY2s7CiAgICAgCiAgICAgc3dpdGNoIChjb2RlVHlwZSkgewogICAgIGNh
c2UgR2xvYmFsQ29kZTogewpAQCAtMTcxLDggKzEzMiw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJs
ZTo6aW5zdGFsbENvZGUoVk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ssIENvZGVU
eXBlCiAgICAgICAgIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxv
Y2suZ2V0KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay5zZXRNYXlC
ZU51bGwodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1
dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9ncmFt
Q29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE4Miw4
ICsxNDMsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2bSwgQ29k
ZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrLCBDb2RlVHlwZQogCiAgICAgICAgIEFTU0VSVChraW5k
ID09IENvZGVGb3JDYWxsKTsKIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5t
X21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fbW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGNvZGVCbG9jayk7Cisg
ICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0gY29kZUJs
b2NrOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE5Myw4ICsxNTQsOCBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2bSwgQ29kZUJsb2NrKiBnZW5lcmljQ29k
ZUJsb2NrLCBDb2RlVHlwZQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNhbGwpOwogICAgICAgICAKLSAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9l
dmFsQ29kZUJsb2NrLmdldCgpOwotICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2su
c2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgICAgICBvbGRDb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CisgICAgICAgIGV4ZWN1dGFibGUtPm1fZXZh
bENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTIwNCwxMiArMTY1LDEyIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ssIENvZGVUeXBlCiAgICAgICAgIAog
ICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKLSAgICAg
ICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5nZXQo
KTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5zZXRNYXlCZU51
bGwodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVj
dXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5tX2Nv
ZGVCbG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0
YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7Ci0gICAgICAgICAgICBleGVjdXRh
YmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdDsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29u
c3RydWN0ID0gY29kZUJsb2NrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC0yNDksNyArMjEwLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0
YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaywgQ29kZVR5cGUKICAg
ICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsKIH0KIAotQ29kZUJsb2NrKiBTY3JpcHRFeGVj
dXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCitSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRh
YmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0aW9u
KQogewogICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwpAQCAtMjYzLDkgKzIyNCw5IEBAIENvZGVC
bG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgICAgICBSRUxFQVNF
X0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWV4
ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmdW5j
dGlvbik7Ci0gICAgICAgIHJldHVybiBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKICAgICAgICAgICAgIGV4ZWN1dGFi
bGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKLSAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCkpOworICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAo
Y2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewpAQCAtMjczLDkgKzIz
NCw5IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGUodm0sCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygK
ICAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmdldCgpLCBzY29wZSwKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnBy
b3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpOworICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCku
c3RhcnRDb2x1bW4oKSkpOwogICAgIH0KIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CkBAIC0yODMsOSArMjQ0LDkgQEAgQ29kZUJsb2Nr
KiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0
YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0
ZSh2bSwKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291
cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7Cisg
ICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjdXRhYmxlLT5z
b3VyY2UoKS5zdGFydENvbHVtbigpKSk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQoY2xh
c3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwpAQCAtMzE1LDExICsyNzYs
MTEgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAg
dW5zaWduZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQo
KTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0
Q29sdW1uKCk7CiAKLSAgICByZXR1cm4gRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAg
ICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRlciwgc291
cmNlT2Zmc2V0LCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlv
bkNvZGVCbG9jaygKKyAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
LCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOwogfQogCi1Db2RlQmxvY2sq
IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAorUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9y
KAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBpZiAoY2xhc3NJbmZv
KCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewpAQCAtMzI3LDkgKzI4OCw5IEBAIENvZGVC
bG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCiAgICAg
ICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4o
dGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZh
bENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2YWxD
b2RlQmxvY2s6OmNyZWF0ZSh2bSgpLAotICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2Vk
QmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCks
IGJhc2VsaW5lKTsKKyAgICAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0
UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2Vk
QmxvY2ssICpiYXNlbGluZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGJhc2Vs
aW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0zMzgsOSArMjk5
LDkgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9j
a0ZvcigKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxp
bmUgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBleGVjdXRh
YmxlLT5tX3Byb2dyYW1Db2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayogcmVzdWx0ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtKCksCi0g
ICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSgqdm0oKSwgYmFzZWxpbmUpOworICAgICAgICBSZWZQ
dHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxv
Y2soCisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7
CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMzQ5LDkgKzMxMCw5IEBAIENvZGVCbG9jayogU2NyaXB0
RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCiAgICAgICAgIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyk7CiAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0g
c3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0
YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAg
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OmNyZWF0ZSh2bSgpLAotICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
ICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCksIGJhc2Vs
aW5lKTsKKyAgICAgICAgUmVmUHRyPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHJlc3VsdCA9IGFk
b3B0UmVmKG5ldyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2Nr
OjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM1
OSw5ICszMjAsOSBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50
Q29kZUJsb2NrRm9yKAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFz
ZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KAogICAgICAgICBleGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICBGdW5jdGlv
bkNvZGVCbG9jayogcmVzdWx0ID0gRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSgpLAotICAg
ICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICByZXN1bHQt
PnNldEFsdGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCisgICAgICAg
IENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICByZXN1bHQtPnNl
dEFsdGVybmF0aXZlKGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zODks
NyArMzUwLDcgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRp
b25JbXBsKAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBKU09iamVj
dCogZXhjZXB0aW9uID0gMDsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ld0NvZGVCbG9j
a0ZvcihraW5kLCBmdW5jdGlvbiwgc2NvcGUsIGV4Y2VwdGlvbik7CisgICAgUmVmUHRyPENvZGVC
bG9jaz4gY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrRm9yKGtpbmQsIGZ1bmN0aW9uLCBzY29wZSwg
ZXhjZXB0aW9uKTsKICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMzk5LDExICszNjAs
MTEgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBs
KAogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkpCi0gICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9jayk7CisgICAgICAg
IHNldHVwTExJbnQodm0sIGNvZGVCbG9jay5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBzZXR1
cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQo
KSk7CiAgICAgCi0gICAgaW5zdGFsbENvZGUoKmNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwor
ICAgIGluc3RhbGxDb2RlKCpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jay5nZXQoKSwgY29kZUJs
b2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtNTQxLDkgKzUwMiwxNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgRXZh
bEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
U2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2spOwog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCi0gICAgICAgIHRoaXNPYmplY3Qt
Pm1fZXZhbENvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKK30KKwordm9p
ZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3sKKyAgICBtX2V2YWxDb2RlQmxvY2sgPSBu
dWxscHRyOworICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgQmFzZTo6
Y2xlYXJDb2RlKCk7CiB9CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50
YXgoRXhlY1N0YXRlKiBleGVjKQpAQCAtNjUwLDcgKzYxOCwxNCBAQCB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAg
IHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRvcik7Cisg
ICAgICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7Cit9CisKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAg
bV9wcm9ncmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVC
bG9jay5jbGVhcigpOworICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiB2b2lkIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC02NjEsNyArNjM2LDE1IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZUVudmlyb25t
ZW50U3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1Db2Rl
QmxvY2spCi0gICAgICAgIHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+dmlz
aXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAgbV9tb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
ID0gbnVsbHB0cjsKKyAgICBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigp
OworICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5jbGVhcigpOworICAgIEJhc2U6
OmNsZWFyQ29kZSgpOwogfQogCiBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxl
OjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC02
ODQsMTMgKzY2NywyMCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2Nv
ZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbC0+
dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKIH0KIAordm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0g
bnVsbHB0cjsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IG51bGxwdHI7CisgICAgQmFz
ZTo6Y2xlYXJDb2RlKCk7Cit9CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRh
YmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3Rh
dGUmIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBleGNl
cHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCkBAIC03MjYsMTAgKzcxNiwxNiBAQCB2b2lk
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBFeGVjdXRhYmxlQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKQotICAg
ICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0V2Vha2x5KHZpc2l0b3Ip
OworICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiB9
CiAKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIG1fY29k
ZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgQmFzZTo6Y2xlYXJDb2RlKCk7Cit9CisKIHZv
aWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkKQEAgLTczOCwxNiArNzM0LDE2
IEBAIHZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKIAotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICB0aGlzLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpKTsKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVC
bG9jayA9IGFkb3B0UmVmKG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jaygKKyAgICAgICAgdGhpcywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOwogCi0gICAgV0FTTUZ1bmN0aW9uUGFy
c2VyOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIG1fbW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgbV9m
dW5jdGlvbkluZGV4KTsKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUodm0sIGNvZGVC
bG9jay5nZXQoKSwgbV9tb2R1bGUuZ2V0KCksIG1fc291cmNlLCBtX2Z1bmN0aW9uSW5kZXgpOwog
CiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOwogICAgIG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAg
IG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKIAot
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgbV9j
b2RlQmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOwogCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+d3Jp
dGVCYXJyaWVyKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCmluZGV4IDlmYzliZTdhMTRmNmMwZmViYzIzOTcxMjZiNjBmZDdiMGMzNDBhMDQuLjE1
NWY0NGJiYjY1Y2VlMGRkYTgxODM5MGIxMWIwNTNmOTJjYzBhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTEzOSw2ICsxMzksOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgaW50IG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdDsKIAogcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIGNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqKTsKKwogICAgIFBh
c3NSZWZQdHI8SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwpOwpAQCAtMzA0LDggKzMwNiw2IEBAIHByb3RlY3Rl
ZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwot
CiAgICAgTmF0aXZlRXhlY3V0YWJsZShWTSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZSh2bSwg
dm0ubmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9T
VCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQpAQCAtMzc2LDggKzM3Niw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CiAgICAgdm9pZCBpbnN0
YWxsQ29kZShWTSYsIENvZGVCbG9jayosIENvZGVUeXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKLSAgICBDb2Rl
QmxvY2sqIG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAg
ICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgCiAgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CkBAIC0zODksNyArMzg5LDYgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDb2Rl
QmxvY2soRnVuY3RvciYmKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJs
ZUJhc2U7CiAgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKEV4ZWNTdGF0ZSos
IEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKIHByb3Rl
Y3RlZDoKQEAgLTQ0OCwxOSArNDQ3LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgREVDTEFS
RV9JTkZPOwogCisgICAgdm9pZCBjbGVhckNvZGUoKTsKKwogICAgIEV4ZWN1dGFibGVJbmZvIGV4
ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0
aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIENvbnN0cnVj
dG9yS2luZDo6Tm9uZSwgZmFsc2UpOyB9CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7
IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtVmFyaWFibGVzKCk7IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KIAogcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFi
bGU7CiAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJv
b2wpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCi0gICAgV3JpdGVCYXJyaWVyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVCbG9jazsK
KyAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrOwogfTsK
IApAQCAtNTAxLDEwICs1MDEsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNMQVJFX0lO
Rk87CiAKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworCiAgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0
YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24o
KSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCBmYWxzZSk7IH0KIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0
YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAKICAgICBQcm9n
cmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CkBAIC01MTIsNyAr
NTEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKLSAgICBXcml0ZUJhcnJpZXI8UHJvZ3Jh
bUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOworICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJs
b2NrPiBtX3Byb2dyYW1Db2RlQmxvY2s7CiB9OwogCiBjbGFzcyBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTU0MiwxMyArNTQzLDE0
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIHZvaWQgY2xlYXJDb2RlKCk7
CisKICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4
ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUo
KSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIGZhbHNlKTsgfQogICAgIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKCkgeyByZXR1cm4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCk7IH0K
IAogICAgIFN5bWJvbFRhYmxlKiBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCkgeyByZXR1
cm4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRF
eGVjdXRhYmxlOwogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29u
c3QgU291cmNlQ29kZSYpOwpAQCAtNTU3LDcgKzU1OSw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fbW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8TW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jaz4gbV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrOworICAgIFJlZlB0cjxNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiB9OwogCiBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CkBAIC01OTgs
NyArNjAwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2Fs
bCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gISFtX2NvZGVCbG9ja0ZvckNhbGw7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgfQogCiAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQpAQCAtNjA4LDcgKzYxMCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOworICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgfQogCiAgICAgRnVuY3Rpb25Db2RlQmxvY2sq
IGNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpCkBAIC02NzQsMTAgKzY3NiwxMSBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworICAgIAogICAgIElu
ZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5nbGV0b25GdW5j
dGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoCiAgICAgICAgIFZNJiwgY29uc3QgU291cmNlQ29k
ZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCAKICAg
ICAgICAgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4pOwpAQCAtNjg3LDggKzY5MCw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFNjcmlwdEV4ZWN1dGFibGU7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKLSAgICBXcml0ZUJhcnJpZXI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgIFJlZlB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIFJlZlB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1f
cmV0dXJuU3RhdGVtZW50VHlwZVNldDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9m
ZnNldDsKICAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlv
bjsKQEAgLTcxNiw2ICs3MTksOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKKyAg
ICB2b2lkIGNsZWFyQ29kZSgpOworCiAgICAgdm9pZCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNT
dGF0ZSopOwogCiAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQpA
QCAtNzI0LDcgKzcyOSw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShWTSYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KTsK
IAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
QEAgLTczMywxMCArNzM3LDMwIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTV0FTTU1v
ZHVsZT4gbV9tb2R1bGU7CiAgICAgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OwogCi0gICAgV3Jp
dGVCYXJyaWVyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAg
UmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiB9OwogI2Vu
ZGlmCiAKLX0gLy8gbmFtZXNwYWNlIEpTQworaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNs
ZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCit7CisgICAgc3dpdGNo
IChleGVjdXRhYmxlLT50eXBlKCkpIHsKKyAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKKyAg
ICAgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNv
ZGUoKTsKKyAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZToKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyAgICBj
YXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBjYXNlIFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU6CisgICAgICAgIHJl
dHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29k
ZSgpOworI2VuZGlmCisgICAgY2FzZSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6CisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+
Y2xlYXJDb2RlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVF
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworICAgIH0KK30KKworfQogCi0j
ZW5kaWYgLy8gRXhlY3V0YWJsZV9oCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCAxMjNhNDg5NTQ3MDAxYjI5ZmY1MmZmZWRhYmU0OTFjNGZiZWUxMWRhLi4xYzdm
YzYyOTc3MDA5MDY0OGYyMTEwZjk2YWNkZDI2NTk0MDVhZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCkBAIC0yNDgsMTQgKzI0OCw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBF
eGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9t
aXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVybmFsUHJvbWlzZURlZmVy
cmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7Ci0gICAgbW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQo
KnRoaXMsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKLSAgICBldmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRXZhbENv
ZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0gICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotI2VuZGlm
Ci0KICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMs
IE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCAwZTI0N2U5OGJjZmYxNzQ5MWQzMWM0M2Iz
ZmQxYzZlNjYyNTI1ODIzLi44MTIzNDA0ZjBmNmJjZTJiMTU3ZjkzZDVjMWM1ODJmZjdhOWNjNjYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTMwOSwxMiArMzA5LDYgQEAgcHVi
bGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBpbnRlcm5hbFByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmU7Ci0gICAg
U3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKLSAgICBTdHJvbmc8
U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOwotICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4g
ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7Ci0KICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25U
ZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRv
cjsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>