<?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>231613</bug_id>
          
          <creation_ts>2021-10-12 14:07:13 -0700</creation_ts>
          <short_desc>Build an unlinked DFG</short_desc>
          <delta_ts>2022-03-10 14:39:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1803363</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-12 14:07:13 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806302</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-19 14:08:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/84432167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809933</commentid>
    <comment_count>2</comment_count>
      <attachid>442773</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-28 18:54:26 -0700</bug_when>
    <thetext>Created attachment 442773
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810997</commentid>
    <comment_count>3</comment_count>
      <attachid>443048</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-01 18:17:50 -0700</bug_when>
    <thetext>Created attachment 443048
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811341</commentid>
    <comment_count>4</comment_count>
      <attachid>443156</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-02 18:31:34 -0700</bug_when>
    <thetext>Created attachment 443156
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811588</commentid>
    <comment_count>5</comment_count>
      <attachid>443225</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-03 12:37:11 -0700</bug_when>
    <thetext>Created attachment 443225
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811901</commentid>
    <comment_count>6</comment_count>
      <attachid>443319</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-04 10:39:22 -0700</bug_when>
    <thetext>Created attachment 443319
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814290</commentid>
    <comment_count>7</comment_count>
      <attachid>444019</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-11 16:20:05 -0800</bug_when>
    <thetext>Created attachment 444019
WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442773</attachid>
            <date>2021-10-28 18:54:26 -0700</date>
            <delta_ts>2021-11-01 18:17:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>59869</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE5LDcgKzUxOSw0MSBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiAvLyBBU1NFUlQoIWMtPmluaGVyaXRzKGNsYXNzSW5mbykgfHwgc3Bl
Y3VsYXRpb25DaGVja2VkKHNwZWN1bGF0aW9uRnJvbUNlbGwoYyksIHNwZWN1bGF0aW9uRnJvbUNs
YXNzSW5mb0luaGVyaXRhbmNlKGNsYXNzSW5mbykpKTsKIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0
aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKGNvbnN0IENsYXNzSW5mbyopOwogCi1TcGVjdWxh
dGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKik7Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21TdHJ1Y3R1cmVMaWtlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVj
dWxhdGVkVHlwZSBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0
dXJlLnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBm
aWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3lt
Ym9sVHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9
IFNwZWNIZWFwQmlnSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5
cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3Bl
Y0FycmF5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAg
ICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5n
T2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmpl
Y3QuCisgICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRS
ZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1
cmUuY2xhc3NJbmZvKCkpOworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAg
IEFTU0VSVChpc1N1YnR5cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25G
cm9tQ2xhc3NJbmZvSW5oZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJl
dHVybiBmaWx0ZXJlZFJlc3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9t
Q2VsbChKU0NlbGwqKTsKIEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKEpTVmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0
dXJuIHNwZWN1bGF0ZWQgdHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODks
NyArODksNyBAQCBUcmlTdGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAg
ICAgIGJvb2wgYWxsVHJ1ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFw
QmlnSW50VHlwZSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSkgfHwgc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0
dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgYWxsVHJ1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtMjEzLDcgKzIxMyw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50
aXR5KFYKICAgICAgICAgYm9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5v
ZGUubV9zdHJ1Y3R1cmUuaXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9
IGZhbHNlOwogICAgICAgICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3Ry
dWN0dXJlLnR5cGVJbmZvKCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8
IHR5cGUudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8
fCB0eXBlLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFN
b2RlLmlzU3RyaWN0KCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7
CkBAIC0yMjQsNyArMjI0LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRp
dHkoVgogICAgICAgICAgICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAg
ICAgIC8vIElmIGFsbCB0aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cg
dGhlIGRldGFpbHMgb2YgSlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAg
YWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUudG9UaGlzID09IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAg
ICAgICAgICAgYWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygp
LT5tZXRob2RUYWJsZS50b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1Ro
aXM7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAg
ICAgIHJldHVybiBUb1RoaXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hp
bGQubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIG1hdGNoZWQgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1
ZXJpZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0g
c3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CkBAIC0yMjE1LDYgKzIyMTUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVJREVhcmx5
ICE9IHN0cnVjdHVyZUlETGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsK
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0yMjQwLDYgKzIyNDEs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAg
ICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZShtX3ZtKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKG1fdm0pOwpAQCAtMjI3Myw2ICsyMjc1LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3ZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRExhdGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ01v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1
OCwxNiArMzE2MSwxOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVTZXQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3N0cnVjdHVyZTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNGaW5pdGUoKSAm
JiBzdHJ1Y3R1cmVTZXQuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVNldC5vbmx5U3RydWN0dXJlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1
cnJlbnRseSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIXJhcmVEYXRhLT5jYWNoZWRQ
cm9wZXJ0eU5hbWVzQ29uY3VycmVudGx5KG5vZGUtPm9wKCkgPT0gT2JqZWN0R2V0T3duUHJvcGVy
dHlOYW1lcyA/IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzIDog
Q2FjaGVkUHJvcGVydHlOYW1lc0tpbmQ6OktleXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFu
dEZvbGRpbmcodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2Ji
ZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNBcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8vaWYgKGF1dG8qIHJhcmVEYXRhID0g
c3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgLy8g
ICAgaWYgKCEhcmFyZURhdGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50bHkobm9kZS0+
b3AoKSA9PSBPYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVydHlOYW1lc0tp
bmQ6OkdldE93blByb3BlcnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5cykp
IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmlu
Z0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkpOworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyAgICB9CisgICAgICAgICAgICAgICAgLy99CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtMzM1NCwyMSArMzM1OSwyMiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zp
bml0ZSgpKSB7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICBbJl0g
KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Z2xvYmFsT2JqZWN0ICE9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
aWYgKGdsb2JhbE9iamVjdCAmJiBvaykgewotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBPT1BTOgor
ICAgICAgICAvL2lmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0
ZSgpKSB7CisgICAgICAgIC8vICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxs
cHRyOworICAgICAgICAvLyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgLy8gICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKKyAgICAgICAgLy8gICAgICAg
IFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgLy8gICAgICAgICAg
ICBlbHNlIGlmIChnbG9iYWxPYmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgICAgIH0p
OworICAgICAgICAvLyAgICBpZiAoZ2xvYmFsT2JqZWN0ICYmIG9rKSB7CisgICAgICAgIC8vICAg
ICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoSlNWYWx1ZShnbG9iYWxPYmpl
Y3QpKSk7CisgICAgICAgIC8vICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgfQorICAgICAg
ICAvL30KIAogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwog
ICAgICAgICBicmVhazsKQEAgLTM1ODIsMTAgKzM1ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9u
bHlTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEo
KSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChSZWdpc3RlcmVkU3Ry
dWN0dXJlIHN0cnVjdHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gICAg
ZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5n
ZXQoKSkpOworICAgICAgICAvLyAgICBicmVhazsKKyAgICAgICAgLy99CiAgICAgICAgIAogICAg
ICAgICAvLyBBdyBzaHVja3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQogICAgICAgICBicmVhazsK
QEAgLTM4NDUsMTggKzM4NTIsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYm9vbCBjYW5Gb2xkID0gIXZhbHVlLm1fc3RydWN0dXJlLmlz
Q2xlYXIoKTsKICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwogICAgICAgICAgICAgdmFs
dWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRQcm90b3R5cGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8o
KS5vdmVycmlkZXNHZXRQcm90b3R5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYW5Gb2xk
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlKQotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3Rv
dHlwZSAhPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKQorICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocHJvdG90eXBlICE9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAKQEAg
LTQ1NDUsNyArNDU1NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgaWYgKGFic3RyYWN0VmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1f
c3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewot
ICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgJiBiaXRzKSA9PSBiaXRzOworICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUu
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSAmIGJpdHMpID09IGJpdHM7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKGMKICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25zKHZlY3Rvcik7CiAg
ICAgICAgIEFycmF5TW9kZXMgbmV3TW9kZXMgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYg
YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzLmdldCgpKSkKLSAgICAg
ICAgICAgICAgICBuZXdNb2RlcyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0u
bmV4dC5nZXQoKSk7CisgICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zy
b21TdHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzKSkKKyAgICAgICAgICAgICAgICBuZXdNb2Rl
cyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dCk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9hcnJheU1vZGVzIHw9IG5ld01vZGVzOwogICAgIH0KQEAgLTUwLDYgKzUwLDcg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoYwogCiB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgaWYg
KCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtODcsOCArODgsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6
OnNldChHcmFwaCYgZ3JhcGgsIFJlCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKICAg
ICAKICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBtX2FycmF5TW9kZXMgPSBhcnJh
eU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIG1fdHlwZSA9IHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIG1fYXJyYXlNb2RlcyA9
IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV90eXBlID0gc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
ICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0xOTUsNiArMTk2LDcgQEAgYm9vbCBB
YnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogCiAgICAgQWJzdHJhY3RWYWx1ZSBv
bGRNZSA9ICp0aGlzOwogICAgIAorICAgIC8vIE9PUFMKICAgICBpZiAoaXNDbGVhcigpKSB7CiAg
ICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5WYWx1ZSA9IGdyYXBoLmZyZWV6ZSh2YWx1ZSk7CiAg
ICAgICAgIGlmIChmcm96ZW5WYWx1ZS0+cG9pbnRzVG9IZWFwKCkpIHsKQEAgLTMzNSw4ICszMzcs
OCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAKIGJvb2wgQWJz
dHJhY3RWYWx1ZTo6Y29udGFpbnMoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUuZ2V0KCkpKQotICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSkKKyAgICByZXR1cm4gY291bGRCZVR5cGUoc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICYmIChtX2FycmF5TW9kZXMg
JiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQogICAgICAgICAmJiBtX3N0cnVj
dHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw3ICsxMzgsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBp
ZiAobV90eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVU
cmFuc2l0aW9uKGZyb20sIHRvKTsKLSAgICAgICAgICAgIG9ic2VydmVJbmRleGluZ1R5cGVUcmFu
c2l0aW9uKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGZyb20uZ2V0KCkpLCBhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZSh0by5nZXQoKSkpOworICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24oYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoZnJvbSksIGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNp
b24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQ5LDYgKzQ0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGNvbnZlcnNpb24oKSAhPSBBcnJheTo6QXNJczsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAg
Ym9vbCBzdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1vZGVGaWx0ZXJpbmcoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKGFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSksIGFycmF5TW9kZXNUaGF0UGFzc0ZpbHRl
cmluZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDE2ICs4ODIs
NiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCi0gICAgTm9k
ZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0
ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3Vy
cmVudGx5LAotICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFBy
b3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKLSAgICAg
ICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nv
c250YW50LgotICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0
KTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKLSAgICAgICAgcmV0dXJuIG9i
amVjdE5vZGU7Ci0gICAgfQotICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25X
aXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBhdXRvIGdldFZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNv
ZGVPZmZzZXQgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ldKTsKICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIobV9zaXplR1BSLCBtX3N0b3JhZ2VHUFIpOwotICAgICAgICBpZiAobV9jb250aWd1b3VzU3Ry
dWN0dXJlLmdldCgpICE9IG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3RydWN0dXJlLmdldCgp
KSB7CisgICAgICAgIGlmIChtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUgIT0gbV9hcnJheVN0b3JhZ2VP
ckNvbnRpZ3VvdXNTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGJpZ0xlbmd0aCA9IGppdC0+bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgbV9zaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9T
VE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKICAgICAgICAgICAgIGppdC0+bV9qaXQubW92
ZShTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cihtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBqaXQt
Pm1faml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw3ICsxMjIyLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShKU0NlbGxf
dHlwZUluZm9GbGFncyk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF9pbmRleGluZ1R5cGUpOwogCi0g
ICAgICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPnRyYW5zaXRpb25LaW5kKCkgPT0g
VHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pIHsKKyAgICAgICAgaWYgKG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9w
ZXJ0eURlbGV0aW9uKSB7CiAgICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyAiZGVsZXRlIGZlbmNl
IiB0byBtb2RlbCB0aGUgcHJvcGVyIGFsaWFzaW5nIG9mIGZ1dHVyZSBzdG9yZXMuCiAgICAgICAg
ICAgICAvLyBCb3RoIGluIERGRyBhbmQgd2hlbiB3ZSBsb3dlciB0byBCMywgd2UgbW9kZWwgYWxp
YXNpbmcgb2YgcHJvcGVydGllcyBieQogICAgICAgICAgICAgLy8gcHJvcGVydHkgIG5hbWUuIElu
IGEgd29ybGQgd2l0aG91dCBkZWxldGUsIHRoYXQgYWxzbyBtb2RlbHMge2Jhc2UsIHByb3BlcnR5
T2Zmc2V0fS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsMTMgQEAgRGVzaXJlZFRyYW5zaXRpb25zOjp+RGVzaXJlZFRyYW5zaXRpb25zKAog
ewogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVyZSwgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUpCiB7Ci0gICAgbV90cmFuc2l0aW9ucy5hcHBlbmQoRGVz
aXJlZFRyYW5zaXRpb24oY29kZU9yaWdpbk93bmVyLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSkpOworICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luT3duZXIpOworICAgIFVOVVNFRF9QQVJB
TShvbGRTdHJ1Y3R1cmUpOworICAgIFVOVVNFRF9QQVJBTShuZXdTdHJ1Y3R1cmUpOworICAgIC8v
IE9PUFMKKyAgICAvL21fdHJhbnNpdGlvbnMuYXBwZW5kKERlc2lyZWRUcmFuc2l0aW9uKGNvZGVP
cmlnaW5Pd25lciwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKTsKIH0KIAogdm9pZCBEZXNp
cmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdm0sIENvbW1vbkRhdGEqIGNvbW1vbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zKENvZGVCbG9jayopOwogICAgIH5EZXNpcmVkVHJh
bnNpdGlvbnMoKTsKIAotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayogY29kZU9yaWdpbk93
bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGFkZExhemlseShDb2RlQmxv
Y2sqIGNvZGVPcmlnaW5Pd25lciwgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgUmVnaXN0ZXJlZFN0cnVj
dHVyZSk7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsMTAgKzI2NiwxNSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFdlYWtTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBUIGxlZnQsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgd2Vha1N0cnVjdHVyZSkKICAg
ICB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgLy9TdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHdlYWtTdHJ1Y3R1cmUuZ2V0KCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBs
ZWZ0LCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIFVOVVNFRF9QQVJBTSh3ZWFrU3RydWN0dXJlKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7CisgICAgICAgIC8vIE9P
UFM6CisgICAgICAgIC8vSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBUcnVzdGVk
SW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAgICAgIC8vcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIEp1bXAoKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwg
bGVmdCwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIGNsYXNzIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgewogcHVibGljOgogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoKSA9IGRlZmF1
bHQ7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmU7IH0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQorICAgIC8vU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Z2V0KCk7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJl
JiBvdGhlcikgY29uc3QKICAgICB7CkBAIC01NSw5ICs1NCwyOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAhIWdldCgpOwogICAgIH0KIAorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5jbGFzc0luZm8oKTsgfQorICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ01vZGUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCk7
IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOyB9CisgICAgYm9vbCBoYXNQb2x5UHJvdG8oKSB7IHJldHVybiBtX3N0
cnVjdHVyZS0+aGFzUG9seVByb3RvKCk7IH0KKyAgICBKU1ZhbHVlIHN0b3JlZFByb3RvdHlwZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsgfQorICAgIFRyYW5zaXRp
b25LaW5kIHRyYW5zaXRpb25LaW5kKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25L
aW5kKCk7IH0KKyAgICAvLyBPT1BTCisgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IH0KKyAgICB1bnNp
Z25lZCBvdXRPZkxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOyB9CisgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IG1fc3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOyB9CisKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEdyYXBoOwogCisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0Ojpm
aWx0ZXJBcnJheQogewogICAgIGdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIGFycmF5
TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwogICAgICAgICB9KTsKIH0KIApAQCAtNzksNyArNzksNyBAQCBBcnJheU1vZGVzIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmVTZXQ6OmFycmF5CiAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOwogICAg
IGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1bHQsIGFycmF5TW9kZXNGcm9tU3RydWN0
dXJlKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgbWVyZ2VBcnJheU1vZGVzKHJlc3Vs
dCwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgIH0pOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjg0NzAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBv
bmx5RW50cnkoKTsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAgU3RydWN0dXJlU2V0IHRvU3Ry
dWN0dXJlU2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVNldCByZXN1bHQ7Ci0g
ICAgICAgIGZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1
bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7IH0pOworICAgICAgICAvL2ZvckVhY2goWyZdIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7
IH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjA3LDcgKzM2MDcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVj
dHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5t
X3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVP
cmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MDAsNyArMjcwMCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICBhdXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+dHlwZWRBcnJheVR5
cGUoKTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCku
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3Vy
cmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdl
dCgpKTsKIAogICAgIFNwZWN1bGF0ZVN0cmljdEludDUyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CkBAIC00NTQzLDcg
KzQ1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1
Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVk
U3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25z
KCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CkBAIC00NTUxLDcgKzQ1NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkp
OwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBuZXdT
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U3RydWN0dXJlLT5pZCgpKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHN0
b3JlU3RydWN0dXJlSUQobmV3U3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTEgKzk1LDExIEBAIFNwZWN1bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQo
KQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1
bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCBHUFJSZWcgc3RvcmFnZUdQUiwg
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBBU1NF
UlQoIWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpOwotICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCk7CiAgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlw
ZSk7CiAKLSAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKTsKLSAgICB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVy
ZS5pbmxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwpAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAgIEFTU0VSVCh2ZWN0b3JMZW5n
dGggPj0gbnVtRWxlbWVudHMpOwotICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLmdldCgpLCB2ZWN0b3JMZW5ndGgpOwor
ICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgoc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIApAQCAtMTM0LDEzICsxMzQsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIH0KIAogICAg
IEFsbG9jYXRvciBhbGxvY2F0b3I7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZSgpID09IEpTVHlw
ZTo6QXJyYXlUeXBlKQorICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCkgPT0gSlNU
eXBlOjpBcnJheVR5cGUpCiAgICAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWxDb25jdXJyZW50bHk8SlNBcnJheT4odm0sIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKGlubGlu
ZUNhcGFjaXR5KSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGVs
c2UKICAgICAgICAgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRs
eTxKU0ZpbmFsT2JqZWN0Pih2bSwgSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5l
Q2FwYWNpdHkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYg
KGFsbG9jYXRvcikgewogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAg
ICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0gZWxz
ZQogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAKICAgICBp
ZiAobnVtRWxlbWVudHMgPCB2ZWN0b3JMZW5ndGgpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIHNpemVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciB2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBl
KCkpKQogICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKQEAgLTE3NSw3
ICsxNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAg
aWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0z
MihudW1FbGVtZW50cyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgIAotICAgIG1faml0LmVtaXRJbml0
aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9yYWdlR1BSLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOworICAgIG1faml0LmVtaXRJbml0aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9y
YWdlR1BSLCBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAgbV9qaXQu
bXV0YXRvckZlbmNlKHZtKTsKIH0KQEAgLTkyMTQsNyArOTIxNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2QKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25l
IHdheSBvciBhbm90aGVyLCByZXN1bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2ludGVycyB0
bwogICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVjdGl2ZWx5
LgogCi0gICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBu
b2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgewogICAgICAgICAgICAgRWRnZSB1
c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCk7CkBAIC0x
MzExMiw3ICsxMzExMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6
ZU4KIAogICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCk7CiAgICAgICAgIAotICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCk7CiAgICAgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSk7CiAgICAgaW50MzJf
dCBwdWJsaWNMZW5ndGggPSAwOwogICAgIGludDMyX3QgdmVjdG9yTGVuZ3RoID0gMDsKQEAgLTEz
MTU5LDYgKzEzMTU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFsaXpl
TgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAg
ICAgICAgLy8gT09QUwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9qaXQuZ3JhcGgo
KS5pZGVudGlmaWVycygpW2Rlc2NyaXB0b3IuaW5mbygpXTsKICAgICAgICAgICAgIGZvciAoUHJv
cGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRs
eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCAhPSBlbnRyeS5rZXkpCkBAIC0xMzkzNiwx
MSArMTM5MzcsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KAog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgaWYgKCh0cnVlKSkKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIC8vIE9PUFM6IGltcGxlbWVudCB0aGlz
CisgICAgLyoKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAogICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAKICAgICBhdXRvJiB2YXJpYW50cyA9IG5v
ZGUtPm1hdGNoU3RydWN0dXJlRGF0YSgpLnZhcmlhbnRzOwpAQCAtMTM5NTksNiArMTM5NjUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1CiAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgCiAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQUiwgbm9kZSk7
CisgICAgKi8KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51
bWVyYXRvcihOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSAr
MTI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFz
ZV9vZjxKU0NlbGwsIFQ+Ojp2YWx1ZSwgIlRvIHVzZSBhIEdDIHBvaW50ZXIsIHRoZSBncmFwaCBt
dXN0IGJlIGF3YXJlIG9mIGl0LiBVc2UgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyIGluc3RlYWQuIik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBPT1BTCiAgICAg
ICAgIGV4cGxpY2l0IFRydXN0ZWRJbW1QdHIoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICA6IG1fdmFsdWUoc3RydWN0dXJlLmdldCgpKQotICAgICAgICB7IH0KKyAg
ICAgICAgICAgIC8vOiBtX3ZhbHVlKHN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogbV92
YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0
dXJlKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0
cihzdGQ6Om51bGxwdHJfdCkKICAgICAgICAgICAgIDogbV92YWx1ZShudWxscHRyKQpAQCAtMTgw
NCw2ICsxODA4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRpb25JbmZvKGVk
Z2Uubm9kZSgpKTsKICAgICB9CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQKKyAgICB2b2lkIHN0
b3JlU3RydWN0dXJlSUQoUmVnaXN0ZXJlZFN0cnVjdHVyZSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2ppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDApLCBhZGRyZXNzKTsKKyAgICB9CisKICAgICAvLyBUaGUgSklULCB3aGlsZSBh
bHNvIHByb3ZpZGVzIE1hY3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGls
ZXImIG1faml0OwogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCShyZXZp
c2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNSZWcKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKLSAgICAgICAgZ3JhcGguYXNzZXJ0
SXNSZWdpc3RlcmVkKGF0KGkpLmdldCgpKTsKKyAgICAgICAgZ3JhcGguYXNzZXJ0SXNSZWdpc3Rl
cmVkKGF0KGkpKTsKIH0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCkBAIC0yNTUsNyArMjU1
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXJTbG93KAogICAgIAogICAg
IG1fc2V0LmdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlLmdldCgpKSAmIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuICEhKHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKSAmIHR5cGUpOwogICAgICAgICB9KTsK
IH0KIApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyQ2xhc3MKICAgICBBU1NFUlQoIWlzVG9wKCkpOwogICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIo
CiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NP
ZihjbGFzc0luZm8pOwogICAgICAgICB9KTsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJDbGFzc08KIAogICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RydWN0dXJlIHNldCBpcyBlbXB0eS4K
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbV9zZXQpIHsK
LSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJ
bmZvKSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihj
bGFzc0luZm8pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM1Nyw3ICszNTcsNyBAQCBib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omlz
Tm90U3ViQ2xhCiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgdGhlIHN0cnVjdHVyZSBzZXQgaXMgZW1wdHkuCiAgICAgZm9yIChjb25zdCBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSA6IG1fc2V0KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKSkKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9zZXQ7CiAgICAgfQogCisgICAgLy8gT09QUzoKICAgICBTdHJ1Y3R1
cmVTZXQgdG9TdHJ1Y3R1cmVTZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNGaW5pdGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODcsNyArMzg4
Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0
cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsK
LSAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5h
ZGRMYXppbHkobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKIAogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4
aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkpOwpAQCAtMzg5NSw3ICszODk1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAogCi0gICAgICAgIGF1dG8mIGhlYXAgPSBt
X25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9u
S2luZDo6UHJvcGVydHlEZWxldGlvbiA/IG1faGVhcHMuSlNDZWxsSGVhZGVyQW5kTmFtZWRQcm9w
ZXJ0aWVzIDogbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8mIGhlYXAg
PSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRp
b25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uID8gbV9oZWFwcy5KU0NlbGxIZWFkZXJBbmROYW1lZFBy
b3BlcnRpZXMgOiBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRDsKICAgICAgICAgVHlwZWRQb2lu
dGVyIHBvaW50ZXIgeyBoZWFwLCBtX291dC5hZGRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQub2Zmc2V0KCkpIH07CiAKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTQ5Mzks
NyArNDkzOSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBi
b29sIGhhc1BvbHlQcm90byA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzTW9ub1By
b3RvID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChb
Jl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLmhhc1BvbHlQcm90bygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUG9s
eVByb3RvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTW9ub1Byb3RvID0gdHJ1ZTsKQEAgLTY5NzIsNyArNjk3Miw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRp
b25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFibGUpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICAgICAg
ICAgICAgIH0sCkBAIC03MTE5LDcgKzcxMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAm
dm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0
eSkpOwogICAgICAgICAgICAgfSwgbGVuZ3RoLnZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKQEAgLTczOTAsNyArNzM5
MCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRp
b24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb24sIG1fdm1WYWx1ZSwgZnJvemVuUG9pbnRlciht
X2dyYXBoLmZyZWV6ZVN0cm9uZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRl
clR5cGUoKSwgb3BlcmF0aW9uLCBtX3ZtVmFsdWUsIHN0cm9uZ1N0cnVjdHVyZShtX25vZGUtPnN0
cnVjdHVyZSgpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NDA5LDcgKzc0
MDksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICB2b2lkIGNvbXBpbGVOZXdJ
bnRlcm5hbEZpZWxkT2JqZWN0KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnN0
cnVjdHVyZSgpLnR5cGVJbmZvKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgSlNBcnJheUl0ZXJh
dG9yVHlwZToKICAgICAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxK
U0FycmF5SXRlcmF0b3I+KG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC03NDIwLDcgKzc0MjAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRv
cj4ob3BlcmF0aW9uTmV3U2V0SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSlNQcm9taXNlVHlwZToKLSAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAg
aWYgKG1fbm9kZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6
OmluZm8oKSkKICAgICAgICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8SlNJbnRlcm5hbFByb21pc2U+KG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOwpAQCAtNzQ1Niw3ICs3NDU2LDcg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICBzdHJpbmcpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CkBAIC04MzU0LDcg
KzgzNTQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZt
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlX
aXRoU2l6ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
IGdsb2JhbE9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc2l6ZTY0Qml0cywgc3RvcmFnZVZhbHVlKTsK
QEAgLTgzNjksNyArODM2OSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB2b2lk
IGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0U3RvcmFnZShh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2
aW91cy5nZXQoKSkpOworICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KG9iamVjdCwgbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAg
dm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCkBAIC04MzgwLDcgKzgzODAs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBzZXRTdG9y
YWdlKAogICAgICAgICAgICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAg
ICAgICBvYmplY3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLmdldCgpLCB0cmFu
c2l0aW9uLT5uZXh0LmdldCgpKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdl
LCB0cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KCkKQEAgLTkyNjIs
NyArOTI2Miw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJh
c2UsIHZhcmlhbnQub2Zmc2V0KCksCkBAIC0xMzQ1NywxNCArMTM0NTcsMTUgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc1R5cGUoU3BlY09i
amVjdCkgJiYgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAg
ICAgICBib29sIGhhc0luZGV4aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYmFzZVZhbHVl
Lm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA+IEFy
cmF5V2l0aFVuZGVjaWRlZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5pbmRl
eGluZ1R5cGUoKSA+IEFycmF5V2l0aFVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGhhc0luZGV4aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICBpZiAoIWhhc0luZGV4aW5nKQogICAgICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNr
Q2hlY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgIG9ubHlTdHJ1Y3R1cmUgPSBiYXNlVmFsdWUu
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGlmIChvbmx5U3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRy
eVJhcmVEYXRhKCk7CisgICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8v
aWYgKG9ubHlTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgLy8gICAgcmFyZURhdGEgPSBvbmx5
U3RydWN0dXJlLT50cnlSYXJlRGF0YSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBM
VmFsdWUgbm90SGF2aW5nSW5kZXhpbmcgPSBudWxscHRyOwpAQCAtMTM2OTIsMTAgKzEzNjkzLDEx
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGVja1N0cnVjdHVyZUJsb2NrKTsKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEOwotICAgICAg
ICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwotICAg
ICAgICBlbHNlCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy9hdXRvIHN0cnVjdHVyZSA9IG1f
c3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUo
KTsKKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKQorICAgICAgICAvLyAgICBzdHJ1Y3R1cmVJRCA9
IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgLy9lbHNlCiAgICAg
ICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CiAKICAgICAgICAgTFZhbHVlIGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBt
X291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSk7CkBAIC0xMzcxMywx
MCArMTM3MTUsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOwogICAgICAgICBMVmFsdWUgaW5s
aW5lQ2FwYWNpdHkgPSBudWxscHRyOwogICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVy
dGllcyA9IGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBoYXNO
b091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwot
ICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKSB7
CisgICAgICAgIC8vICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUub3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgLy8gICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5j
b25zdEludDMyKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgLy99CiAgICAg
ICAgIGlmICghaW5saW5lQ2FwYWNpdHkpCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIExWYWx1ZSBpc0lubGluZSA9IGhhc05vT3V0
T2ZMaW5lUHJvcGVydGllcyA/IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3coaW5kZXgsIGlu
bGluZUNhcGFjaXR5KTsKQEAgLTEzODY0LDE0ICsxMzg2NiwxNCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0OwogICAgICAgICAgICAgTFZhbHVl
IGJ1dHRlcmZseTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0
eSgpIHx8IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpIHsK
ICAgICAgICAgICAgICAgICBBbGxvY2F0b3IgY2VsbEFsbG9jYXRvcjsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT50eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCi0gICAgICAgICAg
ICAgICAgICAgIGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTQXJyYXk+KHZtKCksIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEpTVHlwZTo6
QXJyYXlUeXBlKQorICAgICAgICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0FycmF5Pih2bSgpLCBKU0FycmF5OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpT
RmluYWxPYmplY3Q+KHZtKCksIEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKyAgICAgICAgICAgICAgICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW5kZXhpbmdIZWFkZXJTaXplID0gMDsKICAgICAgICAgICAgICAgICBMVmFsdWUgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBtX291dC5pbnRQdHJaZXJvOwogICAgICAgICAgICAgICAg
IExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBtX291dC5pbnQzMlplcm87CkBAIC0xMzg5Nyw3ICsxMzg5
OSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hl
YWRlclNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAogICAgICAg
ICAgICAgICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwpAQCAtMTM5MTQsMTMgKzEzOTE2LDEzIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAog
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBoYXZlQnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc3BsYXRXb3JkcygKICAgICAgICAgICAgICAgICAgICAgZmFzdEJ1dHRl
cmZseVZhbHVlLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMigtc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSksCiAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogCkBAIC0x
Mzk0NSw3ICsxMzk0Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
ICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJ
bmRleGluZ0hlYWRlckFuZFZlY3Rvckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHlWYWx1ZSk7
CkBAIC0xMzk1NCw3ICsxMzk1Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZs
eSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5VmFsdWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEzOTcxLDcgKzEzOTczLDcgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihw
dWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
IAotICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIG1fb3V0LmludDMyWmVybywgdmVjdG9yTGVu
Z3RoLCBidXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRz
KG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSwgbV9vdXQuaW50MzJa
ZXJvLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSk7CiAKICAgICAgICAgICAgICAgICBIYXNoTWFw
PGludDMyX3QsIExWYWx1ZSwgRGVmYXVsdEhhc2g8aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4+IGluZGV4TWFwOwogICAgICAgICAgICAgICAgIFZl
Y3RvcjxpbnQzMl90PiBpbmRpY2VzOwpAQCAtMTQwMTcsNyArMTQwMTksNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwg
c3RvcmVzIHRvIHRoZSBhcnJheSBhcmUgc3RpbGwgc29tZXdoZXJlIGFib3ZlIHRoaXMgcG9pbnQu
CiAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwKiBoZWFwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIHRo
ZSBwcm92ZW4gdHlwZSBpZiB3ZSBoYWQgdGhlIEVkZ2UgZm9yIHRoZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHZhbHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1MzExCkBAIC0xNDA4MSw2ICsxNDA4Myw4IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQml0VmVjdG9yIHNldElubGluZU9m
ZnNldHM7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICAvKgogICAgICAgICAgICAg
Zm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29u
Y3VycmVudGx5KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1f
cHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGRhdGEubV9wcm9wZXJ0aWVzW2ldOwpAQCAt
MTQwOTksNiArMTQxMDMsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICovCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoIXNldElubGluZU9mZnNl
dHMuZ2V0KGkpKQogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0
WmVybywgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2Jq
ZWN0LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShpKSkpOwpAQCAtMTQxNTQsNyArMTQxNTksNyBAQCBJ
R05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVj
dG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0s
CiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVj
dEdQUigpLAorICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxv
Y2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CiAgICAgICAg
ICAgICB9LCBzY29wZSk7CkBAIC0xNDIyMSw3ICsxNDIyNiw3IEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IoY2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTE0
NjkyLDYgKzE0Njk3LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAg
bV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShvZmZzZXQpKTsKICAgICB9CiAgICAgCisgICAgLy8gT09QUwogICAgIExWYWx1
ZSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKICAgICAgICAgTFZhbHVlIG9iamVjdCwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LAogICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5leHRTdHJ1Y3R1cmUpCkBAIC0xNDcwNCwxMSArMTQ3MTAsMTEgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdDsKICAgICAg
ICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1
Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2Jq
ZWN0LCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSgKICAgICAgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSksCi0gICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUs
IG5leHRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUocHJldmlvdXNTdHJ1Y3R1cmUpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG5leHRTdHJ1
Y3R1cmUpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbnVrZVN0cnVjdHVyZUFuZFNl
dEJ1dHRlcmZseShyZXN1bHQsIG9iamVjdCk7CkBAIC0xNDc4Nyw5ICsxNDc5Myw5IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5pdERvbmUsIGxh
c3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUpCisgICAgTFZhbHVl
IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgcHJldmlvdXNTdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1
cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgaWYgKHByZXZpb3VzU3Ry
dWN0dXJlLmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgICAgIHJldHVybiB2
bUNhbGwoCiAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwKICAgICAgICAgICAgICAgICBv
cGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5
LApAQCAtMTQ4MDcsMTQgKzE0ODEzLDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAg
ICB9CiAgICAgCiAgICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAg
IExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBT
dHJ1Y3R1cmUqIG5leHQpCisgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdl
LCBSZWdpc3RlcmVkU3RydWN0dXJlIHByZXZpb3VzLCBSZWdpc3RlcmVkU3RydWN0dXJlIG5leHQp
CiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLm91dE9mTGluZUNhcGFj
aXR5KCk7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0
aEZhY3RvcjsgCiAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1Np
emUgPT0gbmV4dC5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChw
cmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICBpZiAocHJldmlv
dXMuY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICAgICAgTFZhbHVlIG5ld0Fs
bG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpOyAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkFsbG9j
YXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZSwgbV92bVZhbHVlLCBvYmplY3QsIG5ld0FsbG9jU2l6
ZSk7CiAgICAgICAgIH0KQEAgLTE2NzYzLDcgKzE2NzY5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgIAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNp
dHkoKSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4odm0oKSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9y
IGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxs
b2NhdG9yCkBAIC0xNjc4Nyw3ICsxNjc5Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpA
QCAtMjA4MzEsOCArMjA4MzcsMjcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgIAog
ICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQog
ICAgIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBBU1NFUlQoISFzdHJ1Y3R1cmUuZ2V0KCkp
OwotICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dy
YXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBtX291dC5jb25z
dEludFB0cihudWxscHRyKTsKKyAgICAgICAgLy9yZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVy
ZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIH0KKworICAgIExW
YWx1ZSBzdHJvbmdTdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vcmV0dXJuIGZyb3plblBvaW50ZXIobV9ncmFw
aC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpOworICAgICAgICByZXR1
cm4gbV9vdXQuY29uc3RJbnRQdHIobnVsbHB0cik7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyIG1hc21TdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vIHJldHVybiBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmUpOwor
ICAgICAgICByZXR1cm4gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAg
VHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRy
ZGlmZl90IG9mZnNldCA9IDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443048</attachid>
            <date>2021-11-01 18:17:50 -0700</date>
            <delta_ts>2021-11-02 18:31:34 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>62248</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE5LDcgKzUxOSw0MSBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiAvLyBBU1NFUlQoIWMtPmluaGVyaXRzKGNsYXNzSW5mbykgfHwgc3Bl
Y3VsYXRpb25DaGVja2VkKHNwZWN1bGF0aW9uRnJvbUNlbGwoYyksIHNwZWN1bGF0aW9uRnJvbUNs
YXNzSW5mb0luaGVyaXRhbmNlKGNsYXNzSW5mbykpKTsKIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0
aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKGNvbnN0IENsYXNzSW5mbyopOwogCi1TcGVjdWxh
dGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKik7Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21TdHJ1Y3R1cmVMaWtlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVj
dWxhdGVkVHlwZSBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0
dXJlLnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBm
aWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3lt
Ym9sVHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9
IFNwZWNIZWFwQmlnSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5
cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3Bl
Y0FycmF5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAg
ICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5n
T2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmpl
Y3QuCisgICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRS
ZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1
cmUuY2xhc3NJbmZvKCkpOworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAg
IEFTU0VSVChpc1N1YnR5cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25G
cm9tQ2xhc3NJbmZvSW5oZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJl
dHVybiBmaWx0ZXJlZFJlc3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9t
Q2VsbChKU0NlbGwqKTsKIEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKEpTVmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0
dXJuIHNwZWN1bGF0ZWQgdHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODks
NyArODksNyBAQCBUcmlTdGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAg
ICAgIGJvb2wgYWxsVHJ1ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFw
QmlnSW50VHlwZSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSkgfHwgc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0
dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgYWxsVHJ1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtMjEzLDcgKzIxMyw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50
aXR5KFYKICAgICAgICAgYm9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5v
ZGUubV9zdHJ1Y3R1cmUuaXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9
IGZhbHNlOwogICAgICAgICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3Ry
dWN0dXJlLnR5cGVJbmZvKCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8
IHR5cGUudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8
fCB0eXBlLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFN
b2RlLmlzU3RyaWN0KCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7
CkBAIC0yMjQsNyArMjI0LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRp
dHkoVgogICAgICAgICAgICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAg
ICAgIC8vIElmIGFsbCB0aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cg
dGhlIGRldGFpbHMgb2YgSlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAg
YWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUudG9UaGlzID09IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAg
ICAgICAgICAgYWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygp
LT5tZXRob2RUYWJsZS50b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1Ro
aXM7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAg
ICAgIHJldHVybiBUb1RoaXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hp
bGQubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIG1hdGNoZWQgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1
ZXJpZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0g
c3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CkBAIC0yMjE1LDYgKzIyMTUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVJREVhcmx5
ICE9IHN0cnVjdHVyZUlETGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsK
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0yMjQwLDYgKzIyNDEs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAg
ICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZShtX3ZtKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKG1fdm0pOwpAQCAtMjI3Myw2ICsyMjc1LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3ZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRExhdGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ01v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1
OCwxNiArMzE2MSwxOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVTZXQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3N0cnVjdHVyZTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNGaW5pdGUoKSAm
JiBzdHJ1Y3R1cmVTZXQuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVNldC5vbmx5U3RydWN0dXJlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1
cnJlbnRseSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIXJhcmVEYXRhLT5jYWNoZWRQ
cm9wZXJ0eU5hbWVzQ29uY3VycmVudGx5KG5vZGUtPm9wKCkgPT0gT2JqZWN0R2V0T3duUHJvcGVy
dHlOYW1lcyA/IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzIDog
Q2FjaGVkUHJvcGVydHlOYW1lc0tpbmQ6OktleXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFu
dEZvbGRpbmcodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2Ji
ZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNBcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8vaWYgKGF1dG8qIHJhcmVEYXRhID0g
c3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgLy8g
ICAgaWYgKCEhcmFyZURhdGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50bHkobm9kZS0+
b3AoKSA9PSBPYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVydHlOYW1lc0tp
bmQ6OkdldE93blByb3BlcnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5cykp
IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmlu
Z0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkpOworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyAgICB9CisgICAgICAgICAgICAgICAgLy99CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtMzM1NCwyMSArMzM1OSwyMiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zp
bml0ZSgpKSB7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICBbJl0g
KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Z2xvYmFsT2JqZWN0ICE9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
aWYgKGdsb2JhbE9iamVjdCAmJiBvaykgewotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBPT1BTOgor
ICAgICAgICAvL2lmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0
ZSgpKSB7CisgICAgICAgIC8vICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxs
cHRyOworICAgICAgICAvLyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgLy8gICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKKyAgICAgICAgLy8gICAgICAg
IFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgLy8gICAgICAgICAg
ICBlbHNlIGlmIChnbG9iYWxPYmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgICAgIH0p
OworICAgICAgICAvLyAgICBpZiAoZ2xvYmFsT2JqZWN0ICYmIG9rKSB7CisgICAgICAgIC8vICAg
ICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoSlNWYWx1ZShnbG9iYWxPYmpl
Y3QpKSk7CisgICAgICAgIC8vICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgfQorICAgICAg
ICAvL30KIAogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwog
ICAgICAgICBicmVhazsKQEAgLTM1ODIsMTAgKzM1ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9u
bHlTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEo
KSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChSZWdpc3RlcmVkU3Ry
dWN0dXJlIHN0cnVjdHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gICAg
ZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5n
ZXQoKSkpOworICAgICAgICAvLyAgICBicmVhazsKKyAgICAgICAgLy99CiAgICAgICAgIAogICAg
ICAgICAvLyBBdyBzaHVja3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQogICAgICAgICBicmVhazsK
QEAgLTM4NDUsMTggKzM4NTIsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYm9vbCBjYW5Gb2xkID0gIXZhbHVlLm1fc3RydWN0dXJlLmlz
Q2xlYXIoKTsKICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwogICAgICAgICAgICAgdmFs
dWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRQcm90b3R5cGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8o
KS5vdmVycmlkZXNHZXRQcm90b3R5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYW5Gb2xk
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlKQotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3Rv
dHlwZSAhPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKQorICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocHJvdG90eXBlICE9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAKQEAg
LTQ1NDUsNyArNDU1NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgaWYgKGFic3RyYWN0VmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1f
c3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewot
ICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgJiBiaXRzKSA9PSBiaXRzOworICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUu
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSAmIGJpdHMpID09IGJpdHM7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKGMKICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25zKHZlY3Rvcik7CiAg
ICAgICAgIEFycmF5TW9kZXMgbmV3TW9kZXMgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYg
YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzLmdldCgpKSkKLSAgICAg
ICAgICAgICAgICBuZXdNb2RlcyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0u
bmV4dC5nZXQoKSk7CisgICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zy
b21TdHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzKSkKKyAgICAgICAgICAgICAgICBuZXdNb2Rl
cyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dCk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9hcnJheU1vZGVzIHw9IG5ld01vZGVzOwogICAgIH0KQEAgLTUwLDYgKzUwLDcg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoYwogCiB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgaWYg
KCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtODcsOCArODgsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6
OnNldChHcmFwaCYgZ3JhcGgsIFJlCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKICAg
ICAKICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBtX2FycmF5TW9kZXMgPSBhcnJh
eU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIG1fdHlwZSA9IHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIG1fYXJyYXlNb2RlcyA9
IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV90eXBlID0gc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
ICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0xOTUsNiArMTk2LDcgQEAgYm9vbCBB
YnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogCiAgICAgQWJzdHJhY3RWYWx1ZSBv
bGRNZSA9ICp0aGlzOwogICAgIAorICAgIC8vIE9PUFMKICAgICBpZiAoaXNDbGVhcigpKSB7CiAg
ICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5WYWx1ZSA9IGdyYXBoLmZyZWV6ZSh2YWx1ZSk7CiAg
ICAgICAgIGlmIChmcm96ZW5WYWx1ZS0+cG9pbnRzVG9IZWFwKCkpIHsKQEAgLTMzNSw4ICszMzcs
OCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAKIGJvb2wgQWJz
dHJhY3RWYWx1ZTo6Y29udGFpbnMoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUuZ2V0KCkpKQotICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSkKKyAgICByZXR1cm4gY291bGRCZVR5cGUoc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICYmIChtX2FycmF5TW9kZXMg
JiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQogICAgICAgICAmJiBtX3N0cnVj
dHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw3ICsxMzgsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBp
ZiAobV90eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVU
cmFuc2l0aW9uKGZyb20sIHRvKTsKLSAgICAgICAgICAgIG9ic2VydmVJbmRleGluZ1R5cGVUcmFu
c2l0aW9uKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGZyb20uZ2V0KCkpLCBhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZSh0by5nZXQoKSkpOworICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24oYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoZnJvbSksIGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNp
b24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQ5LDYgKzQ0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGNvbnZlcnNpb24oKSAhPSBBcnJheTo6QXNJczsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAg
Ym9vbCBzdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1vZGVGaWx0ZXJpbmcoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKGFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSksIGFycmF5TW9kZXNUaGF0UGFzc0ZpbHRl
cmluZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDE2ICs4ODIs
NiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCi0gICAgTm9k
ZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0
ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3Vy
cmVudGx5LAotICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFBy
b3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKLSAgICAg
ICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nv
c250YW50LgotICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0
KTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKLSAgICAgICAgcmV0dXJuIG9i
amVjdE5vZGU7Ci0gICAgfQotICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25X
aXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBhdXRvIGdldFZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNv
ZGVPZmZzZXQgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ldKTsKICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIobV9zaXplR1BSLCBtX3N0b3JhZ2VHUFIpOwotICAgICAgICBpZiAobV9jb250aWd1b3VzU3Ry
dWN0dXJlLmdldCgpICE9IG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3RydWN0dXJlLmdldCgp
KSB7CisgICAgICAgIGlmIChtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUgIT0gbV9hcnJheVN0b3JhZ2VP
ckNvbnRpZ3VvdXNTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGJpZ0xlbmd0aCA9IGppdC0+bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgbV9zaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9T
VE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKICAgICAgICAgICAgIGppdC0+bV9qaXQubW92
ZShTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cihtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBqaXQt
Pm1faml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw3ICsxMjIyLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShKU0NlbGxf
dHlwZUluZm9GbGFncyk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF9pbmRleGluZ1R5cGUpOwogCi0g
ICAgICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPnRyYW5zaXRpb25LaW5kKCkgPT0g
VHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pIHsKKyAgICAgICAgaWYgKG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9w
ZXJ0eURlbGV0aW9uKSB7CiAgICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyAiZGVsZXRlIGZlbmNl
IiB0byBtb2RlbCB0aGUgcHJvcGVyIGFsaWFzaW5nIG9mIGZ1dHVyZSBzdG9yZXMuCiAgICAgICAg
ICAgICAvLyBCb3RoIGluIERGRyBhbmQgd2hlbiB3ZSBsb3dlciB0byBCMywgd2UgbW9kZWwgYWxp
YXNpbmcgb2YgcHJvcGVydGllcyBieQogICAgICAgICAgICAgLy8gcHJvcGVydHkgIG5hbWUuIElu
IGEgd29ybGQgd2l0aG91dCBkZWxldGUsIHRoYXQgYWxzbyBtb2RlbHMge2Jhc2UsIHByb3BlcnR5
T2Zmc2V0fS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsMTMgQEAgRGVzaXJlZFRyYW5zaXRpb25zOjp+RGVzaXJlZFRyYW5zaXRpb25zKAog
ewogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVyZSwgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUpCiB7Ci0gICAgbV90cmFuc2l0aW9ucy5hcHBlbmQoRGVz
aXJlZFRyYW5zaXRpb24oY29kZU9yaWdpbk93bmVyLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSkpOworICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luT3duZXIpOworICAgIFVOVVNFRF9QQVJB
TShvbGRTdHJ1Y3R1cmUpOworICAgIFVOVVNFRF9QQVJBTShuZXdTdHJ1Y3R1cmUpOworICAgIC8v
IE9PUFMKKyAgICAvL21fdHJhbnNpdGlvbnMuYXBwZW5kKERlc2lyZWRUcmFuc2l0aW9uKGNvZGVP
cmlnaW5Pd25lciwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKTsKIH0KIAogdm9pZCBEZXNp
cmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdm0sIENvbW1vbkRhdGEqIGNvbW1vbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zKENvZGVCbG9jayopOwogICAgIH5EZXNpcmVkVHJh
bnNpdGlvbnMoKTsKIAotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayogY29kZU9yaWdpbk93
bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGFkZExhemlseShDb2RlQmxv
Y2sqIGNvZGVPcmlnaW5Pd25lciwgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgUmVnaXN0ZXJlZFN0cnVj
dHVyZSk7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsMTAgKzI2NiwxNSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFdlYWtTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBUIGxlZnQsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgd2Vha1N0cnVjdHVyZSkKICAg
ICB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgLy9TdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHdlYWtTdHJ1Y3R1cmUuZ2V0KCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBs
ZWZ0LCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIFVOVVNFRF9QQVJBTSh3ZWFrU3RydWN0dXJlKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7CisgICAgICAgIC8vIE9P
UFM6CisgICAgICAgIC8vSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBUcnVzdGVk
SW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAgICAgIC8vcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIEp1bXAoKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwg
bGVmdCwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIGNsYXNzIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgewogcHVibGljOgogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoKSA9IGRlZmF1
bHQ7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmU7IH0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQorICAgIC8vU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Z2V0KCk7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJl
JiBvdGhlcikgY29uc3QKICAgICB7CkBAIC01NSw5ICs1NCwyOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAhIWdldCgpOwogICAgIH0KIAorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5jbGFzc0luZm8oKTsgfQorICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ01vZGUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCk7
IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOyB9CisgICAgYm9vbCBoYXNQb2x5UHJvdG8oKSB7IHJldHVybiBtX3N0
cnVjdHVyZS0+aGFzUG9seVByb3RvKCk7IH0KKyAgICBKU1ZhbHVlIHN0b3JlZFByb3RvdHlwZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsgfQorICAgIFRyYW5zaXRp
b25LaW5kIHRyYW5zaXRpb25LaW5kKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25L
aW5kKCk7IH0KKyAgICAvLyBPT1BTCisgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IH0KKyAgICB1bnNp
Z25lZCBvdXRPZkxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOyB9CisgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IG1fc3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOyB9CisKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEdyYXBoOwogCisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0Ojpm
aWx0ZXJBcnJheQogewogICAgIGdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIGFycmF5
TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwogICAgICAgICB9KTsKIH0KIApAQCAtNzksNyArNzksNyBAQCBBcnJheU1vZGVzIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmVTZXQ6OmFycmF5CiAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOwogICAg
IGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1bHQsIGFycmF5TW9kZXNGcm9tU3RydWN0
dXJlKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgbWVyZ2VBcnJheU1vZGVzKHJlc3Vs
dCwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgIH0pOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjg0NzAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBv
bmx5RW50cnkoKTsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAgU3RydWN0dXJlU2V0IHRvU3Ry
dWN0dXJlU2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVNldCByZXN1bHQ7Ci0g
ICAgICAgIGZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1
bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7IH0pOworICAgICAgICAvL2ZvckVhY2goWyZdIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7
IH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjA3LDcgKzM2MDcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVj
dHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5t
X3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVP
cmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MDAsNyArMjcwMCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICBhdXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+dHlwZWRBcnJheVR5
cGUoKTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCku
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3Vy
cmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdl
dCgpKTsKIAogICAgIFNwZWN1bGF0ZVN0cmljdEludDUyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CkBAIC00NTQzLDcg
KzQ1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1
Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVk
U3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25z
KCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CkBAIC00NTUxLDcgKzQ1NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkp
OwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBuZXdT
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U3RydWN0dXJlLT5pZCgpKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHN0
b3JlU3RydWN0dXJlSUQobmV3U3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTEgKzk1LDExIEBAIFNwZWN1bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQo
KQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1
bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCBHUFJSZWcgc3RvcmFnZUdQUiwg
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBBU1NF
UlQoIWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpOwotICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCk7CiAgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlw
ZSk7CiAKLSAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKTsKLSAgICB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVy
ZS5pbmxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwpAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAgIEFTU0VSVCh2ZWN0b3JMZW5n
dGggPj0gbnVtRWxlbWVudHMpOwotICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLmdldCgpLCB2ZWN0b3JMZW5ndGgpOwor
ICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgoc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIApAQCAtMTM0LDEzICsxMzQsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIH0KIAogICAg
IEFsbG9jYXRvciBhbGxvY2F0b3I7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZSgpID09IEpTVHlw
ZTo6QXJyYXlUeXBlKQorICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCkgPT0gSlNU
eXBlOjpBcnJheVR5cGUpCiAgICAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWxDb25jdXJyZW50bHk8SlNBcnJheT4odm0sIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKGlubGlu
ZUNhcGFjaXR5KSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGVs
c2UKICAgICAgICAgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRs
eTxKU0ZpbmFsT2JqZWN0Pih2bSwgSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5l
Q2FwYWNpdHkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYg
KGFsbG9jYXRvcikgewogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAg
ICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0gZWxz
ZQogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAKICAgICBp
ZiAobnVtRWxlbWVudHMgPCB2ZWN0b3JMZW5ndGgpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIHNpemVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciB2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBl
KCkpKQogICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKQEAgLTE3NSw3
ICsxNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAg
aWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0z
MihudW1FbGVtZW50cyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgIAotICAgIG1faml0LmVtaXRJbml0
aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9yYWdlR1BSLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOworICAgIG1faml0LmVtaXRJbml0aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9y
YWdlR1BSLCBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAgbV9qaXQu
bXV0YXRvckZlbmNlKHZtKTsKIH0KQEAgLTkyMTQsNyArOTIxNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2QKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25l
IHdheSBvciBhbm90aGVyLCByZXN1bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2ludGVycyB0
bwogICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVjdGl2ZWx5
LgogCi0gICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBu
b2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgewogICAgICAgICAgICAgRWRnZSB1
c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCk7CkBAIC0x
MDQ0MiwxNCArMTA0NDIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3Ry
dWN0dQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
KyAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMub3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CisgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLT50cmFu
c2l0aW9uKCktPm5leHQub3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAgc2l6ZV90IHNp
emUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAotICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICBpZiAoIWFsbG9jYXRvciB8
fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkp
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0x
MDQ4NywxMyArMTA0ODcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZShOb2RlKiBub2RlKQogewotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+dHJhbnNpdGlv
bigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMub3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNp
emUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
KTsKKyAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQub3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCiAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKLSAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cy5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMTExNDgsNyAr
MTExNDgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgYXV0byB0eXBlZEFycmF5VHlwZSA9IG5v
ZGUtPnR5cGVkQXJyYXlUeXBlKCk7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUg
PSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJh
eVN0cnVjdHVyZUNvbmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS5nZXQoKSk7CiAKICNpZiBVU0UoTEFSR0VfVFlQRURfQVJSQVlTKQogICAg
IC8vIFRoZSBvcGVyYXRpb25zIHdlIGNhbGwgb24gdGhlIHNsb3cgcGF0aCBleHBlY3QgYSBpbnRw
dHJfdCwgc28gaW50NjRfdCBvbiA2NCBiaXQgcGxhdGZvcm1zCkBAIC0xMzExMiw3ICsxMzExMSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU4KIAogICAgIE9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhKCk7CiAgICAgICAgIAotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCk7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSk7CiAgICAgaW50MzJfdCBwdWJsaWNMZW5ndGgg
PSAwOwogICAgIGludDMyX3QgdmVjdG9yTGVuZ3RoID0gMDsKQEAgLTEzMTU5LDYgKzEzMTU4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFsaXplTgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgLy8gT09QUwog
ICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygp
W2Rlc2NyaXB0b3IuaW5mbygpXTsKICAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBl
bnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHVpZCAhPSBlbnRyeS5rZXkpCkBAIC0xMzkzNiwxMSArMTM5MzYsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KAogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0obm9kZSk7CisgICAgaWYgKCh0cnVlKSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIC8vIE9PUFM6IGltcGxlbWVudCB0aGlzCisgICAgLyoKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAogICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAKICAgICBhdXRvJiB2YXJpYW50cyA9IG5vZGUtPm1hdGNoU3RydWN0
dXJlRGF0YSgpLnZhcmlhbnRzOwpAQCAtMTM5NTksNiArMTM5NjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAg
CiAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQUiwgbm9kZSk7CisgICAgKi8KIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBu
b2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxKU0NlbGwsIFQ+
Ojp2YWx1ZSwgIlRvIHVzZSBhIEdDIHBvaW50ZXIsIHRoZSBncmFwaCBtdXN0IGJlIGF3YXJlIG9m
IGl0LiBVc2UgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyIGluc3Rl
YWQuIik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBPT1BTCiAgICAgICAgIGV4cGxpY2l0IFRy
dXN0ZWRJbW1QdHIoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6
IG1fdmFsdWUoc3RydWN0dXJlLmdldCgpKQotICAgICAgICB7IH0KKyAgICAgICAgICAgIC8vOiBt
X3ZhbHVlKHN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogbV92YWx1ZShudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0cihzdGQ6Om51bGxwdHJf
dCkKICAgICAgICAgICAgIDogbV92YWx1ZShudWxscHRyKQpAQCAtMTgwNCw2ICsxODA4LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRpb25JbmZvKGVkZ2Uubm9kZSgpKTsKICAg
ICB9CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQKKyAgICB2b2lkIHN0b3JlU3RydWN0dXJlSUQo
UmVnaXN0ZXJlZFN0cnVjdHVyZSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2ppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBh
ZGRyZXNzKTsKKyAgICB9CisKICAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHByb3ZpZGVzIE1h
Y3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXImIG1faml0OwogICAg
IEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6YXNzZXJ0SXNSZWcKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IHNpemUoKTsgaS0tOykKLSAgICAgICAgZ3JhcGguYXNzZXJ0SXNSZWdpc3RlcmVkKGF0
KGkpLmdldCgpKTsKKyAgICAgICAgZ3JhcGguYXNzZXJ0SXNSZWdpc3RlcmVkKGF0KGkpKTsKIH0K
ICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXJTbG93KAogICAgIAogICAgIG1fc2V0LmdlbmVyaWNG
aWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAg
ICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdl
dCgpKSAmIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuICEhKHNwZWN1bGF0aW9uRnJvbVN0cnVj
dHVyZUxpa2Uoc3RydWN0dXJlKSAmIHR5cGUpOwogICAgICAgICB9KTsKIH0KIApAQCAtMjY0LDcg
KzI2NCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQ2xhc3MKICAgICBB
U1NFUlQoIWlzVG9wKCkpOwogICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAo
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pOwog
ICAgICAgICB9KTsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6aXNTdWJDbGFzc08KIAogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJl
dHVybnMgdHJ1ZSBpZiB0aGUgc3RydWN0dXJlIHNldCBpcyBlbXB0eS4KICAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbV9zZXQpIHsKLSAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKSkKKyAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1Nyw3
ICszNTcsNyBAQCBib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTm90U3ViQ2xhCiAKICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cnVjdHVy
ZSBzZXQgaXMgZW1wdHkuCiAgICAgZm9yIChjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSA6IG1fc2V0KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1
YkNsYXNzT2YoY2xhc3NJbmZvKSkKKyAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+
aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDI4NDcwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9zZXQ7CiAgICAgfQogCisgICAgLy8gT09QUzoKICAgICBTdHJ1Y3R1cmVTZXQgdG9TdHJ1Y3R1
cmVTZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNGaW5pdGUoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODcsNyArMzg4Nyw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVyZSA9IG1fbm9k
ZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBu
ZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9ncmFw
aC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
Y29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3U3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZSwgbmV3U3Ry
dWN0dXJlKTsKIAogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0
dXJlLT5pbmRleGluZ01vZGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKTsKICAg
ICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwpAQCAtMzg5NSw3
ICszODk1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7IAogCi0gICAgICAgIGF1dG8mIGhlYXAgPSBtX25vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dC0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlE
ZWxldGlvbiA/IG1faGVhcHMuSlNDZWxsSGVhZGVyQW5kTmFtZWRQcm9wZXJ0aWVzIDogbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8mIGhlYXAgPSBtX25vZGUtPnRyYW5z
aXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0
eURlbGV0aW9uID8gbV9oZWFwcy5KU0NlbGxIZWFkZXJBbmROYW1lZFByb3BlcnRpZXMgOiBtX2hl
YXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRDsKICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgeyBo
ZWFwLCBtX291dC5hZGRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQub2Zmc2V0
KCkpIH07CiAKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTQ5MzksNyArNDkzOSw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBib29sIGhhc1BvbHlQcm90
byA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzTW9ub1Byb3RvID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pmhhc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmhhc1Bv
bHlQcm90bygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUG9seVByb3RvID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9u
b1Byb3RvID0gdHJ1ZTsKQEAgLTY5NzIsNyArNjk3Miw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAg
ICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFi
bGUpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICAgICAgICAgICAgIH0sCkBAIC03
MTE5LDcgKzcxMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBb
PSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZURp
cmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1
cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOwogICAgICAgICAg
ICAgfSwgbGVuZ3RoLnZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKQEAgLTczOTAsNyArNzM5MCw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLCBvcGVyYXRpb24sIG1fdm1WYWx1ZSwgZnJvemVuUG9pbnRlcihtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0
aW9uLCBtX3ZtVmFsdWUsIHN0cm9uZ1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZSgpKSkpOwog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NDA5LDcgKzc0MDksNyBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICB2b2lkIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2Jq
ZWN0KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnN0cnVjdHVyZSgpLnR5cGVJ
bmZvKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgSlNBcnJheUl0ZXJhdG9yVHlwZToKICAgICAg
ICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0FycmF5SXRlcmF0b3I+
KG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NDIw
LDcgKzc0MjAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBjb21w
aWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRvcj4ob3BlcmF0aW9uTmV3
U2V0SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNQcm9taXNl
VHlwZToKLSAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+c3Ry
dWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKICAgICAg
ICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNJbnRlcm5hbFBy
b21pc2U+KG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkg
PT0gSlNQcm9taXNlOjppbmZvKCkpOwpAQCAtNzQ1Niw3ICs3NDU2LDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICBzdHJpbmcpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CkBAIC04MzU0LDcgKzgzNTQsNyBAQCBJR05P
UkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUo
dHlwZWRBcnJheVR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAg
bWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgc2l6ZTY0Qml0cywgc3RvcmFnZVZhbHVlKTsKQEAgLTgzNjksNyArODM2
OSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5nZXQoKSkpOwor
ICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCkBAIC04MzgwLDcgKzgzODAsNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBzZXRTdG9yYWdlKAogICAgICAgICAg
ICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBvYmplY3QsIG9s
ZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLmdldCgpLCB0cmFuc2l0aW9uLT5uZXh0Lmdl
dCgpKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCB0cmFuc2l0aW9uLT5w
cmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KCkKQEAgLTkyNjIsNyArOTI2Miw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uLCB2
YXJpYW50LmtpbmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlv
bnMoKS5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFudGljLmNv
ZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0
dXJlKCkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdG9yYWdlID0gc3Rv
cmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQub2Zm
c2V0KCksCkBAIC0xMzQ1NywxNCArMTM0NTcsMTUgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc1R5cGUoU3BlY09iamVjdCkgJiYgYmFzZVZh
bHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgICAgICBib29sIGhhc0lu
ZGV4aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmZv
ckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA+IEFycmF5V2l0aFVuZGVjaWRl
ZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSA+IEFy
cmF5V2l0aFVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0luZGV4aW5nID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0luZGV4
aW5nKQogICAgICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNrQ2hlY2sgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIG9ubHlTdHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUub25s
eVN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGlmIChvbmx5U3RydWN0dXJlKQotICAgICAg
ICAgICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8vaWYgKG9ubHlTdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgLy8gICAgcmFyZURhdGEgPSBvbmx5U3RydWN0dXJlLT50cnlS
YXJlRGF0YSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMVmFsdWUgbm90SGF2aW5n
SW5kZXhpbmcgPSBudWxscHRyOwpAQCAtMTM2OTIsMTAgKzEzNjkzLDExIEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJs
b2NrKTsKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEOwotICAgICAgICBhdXRvIHN0cnVjdHVy
ZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1
Y3R1cmUoKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHN0cnVjdHVyZUlE
ID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwotICAgICAgICBlbHNlCisgICAg
ICAgIC8vIE9PUFMKKyAgICAgICAgLy9hdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShi
YXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgLy9p
ZiAoc3RydWN0dXJlKQorICAgICAgICAvLyAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgLy9lbHNlCiAgICAgICAgICAgICBzdHJ1Y3R1
cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAK
ICAgICAgICAgTFZhbHVlIGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBtX291dC5lcXVhbChzdHJ1
Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSk7CkBAIC0xMzcxMywxMCArMTM3MTUsMTAgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0lu
bGluZU9yT3V0T2ZMaW5lQmxvY2spOwogICAgICAgICBMVmFsdWUgaW5saW5lQ2FwYWNpdHkgPSBu
dWxscHRyOwogICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9IGZhbHNlOwot
ICAgICAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBoYXNOb091dE9mTGluZVByb3Bl
cnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKSB7CisgICAgICAgIC8vICAg
IGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHko
KTsKKyAgICAgICAgLy8gICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVj
dHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgLy99CiAgICAgICAgIGlmICghaW5saW5l
Q2FwYWNpdHkpCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmxvYWQzMihlbnVt
ZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBh
Y2l0eSk7CiAgICAgICAgIExWYWx1ZSBpc0lubGluZSA9IGhhc05vT3V0T2ZMaW5lUHJvcGVydGll
cyA/IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3coaW5kZXgsIGlubGluZUNhcGFjaXR5KTsK
QEAgLTEzODY0LDE0ICsxMzg2NiwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAg
ICAgICAgICBMVmFsdWUgb2JqZWN0OwogICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewor
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4
ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgY2VsbEFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT50eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGNlbGxB
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTQXJyYXk+KHZt
KCksIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSks
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEpTVHlwZTo6QXJyYXlUeXBlKQorICAg
ICAgICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENv
bmN1cnJlbnRseTxKU0FycmF5Pih2bSgpLCBKU0FycmF5OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1
cmUuaW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNlbGxBbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZt
KCksIEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5k
ZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAg
ICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVy
ZS5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhpbmdIZWFk
ZXJTaXplID0gMDsKICAgICAgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMgPSBtX291dC5pbnRQdHJaZXJvOwogICAgICAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JM
ZW5ndGggPSBtX291dC5pbnQzMlplcm87CkBAIC0xMzg5Nyw3ICsxMzg5OSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMVmFs
dWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAogICAgICAgICAgICAgICAgICAgICBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTM5MTQs
MTMgKzEzOTE2LDEzIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAg
ICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAg
ICAgICBzdGFydE9mU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBoYXZlQnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
c3BsYXRXb3JkcygKICAgICAgICAgICAgICAgICAgICAgZmFzdEJ1dHRlcmZseVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtc3Ry
dWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMigtMSksCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywg
bV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogCkBAIC0xMzk0NSw3ICsxMzk0Nyw3
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgIFs9
LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJbmRleGluZ0hlYWRlckFu
ZFZlY3Rvckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUuZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksICZ2bSwgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sy
XS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHlWYWx1ZSk7CkBAIC0xMzk1NCw3ICsx
Mzk1Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAg
ICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJl
KHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTEzOTcxLDcgKzEzOTczLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1
dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKIAotICAgICAgICAgICAg
ICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSksIG1fb3V0LmludDMyWmVybywgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHkp
OworICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSwgbV9vdXQuaW50MzJaZXJvLCB2ZWN0b3JMZW5n
dGgsIGJ1dHRlcmZseSk7CiAKICAgICAgICAgICAgICAgICBIYXNoTWFwPGludDMyX3QsIExWYWx1
ZSwgRGVmYXVsdEhhc2g8aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50MzJfdD4+IGluZGV4TWFwOwogICAgICAgICAgICAgICAgIFZlY3RvcjxpbnQzMl90PiBp
bmRpY2VzOwpAQCAtMTQwMTcsNyArMTQwMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgc3RvcmVzIHRvIHRoZSBh
cnJheSBhcmUgc3RpbGwgc29tZXdoZXJlIGFib3ZlIHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwKiBoZWFwOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIHRoZSBwcm92ZW4gdHlwZSBp
ZiB3ZSBoYWQgdGhlIEVkZ2UgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHZhbHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzExCkBA
IC0xNDA4MSw2ICsxNDA4Myw4IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgQml0VmVjdG9yIHNldElubGluZU9mZnNldHM7CisgICAgICAg
ICAgICAvLyBPT1BTCisgICAgICAgICAgICAvKgogICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1h
cEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0
b3IgZGVzY3JpcHRvciA9IGRhdGEubV9wcm9wZXJ0aWVzW2ldOwpAQCAtMTQwOTksNiArMTQxMDMs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICovCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IGkt
LTspIHsKICAgICAgICAgICAgICAgICBpZiAoIXNldElubGluZU9mZnNldHMuZ2V0KGkpKQogICAg
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgbV9vdXQuYWRk
cmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShpKSkpOwpAQCAtMTQxNTQsNyArMTQxNTksNyBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAg
ICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJl
Y3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CiAgICAgICAgICAgICB9LCBzY29wZSk7
CkBAIC0xNDIyMSw3ICsxNDIyNiw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJl
ZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7
CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTE0NjkyLDYgKzE0Njk3LDcg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0
aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZz
ZXQpKTsKICAgICB9CiAgICAgCisgICAgLy8gT09QUwogICAgIExWYWx1ZSBzdG9yYWdlRm9yVHJh
bnNpdGlvbigKICAgICAgICAgTFZhbHVlIG9iamVjdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5leHRTdHJ1
Y3R1cmUpCkBAIC0xNDcwNCwxMSArMTQ3MTAsMTEgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdDsKICAgICAgICAgaWYgKCFwcmV2aW91
c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKICAgICAgICAgICAg
ICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSksCi0gICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocHJldmlvdXNTdHJ1
Y3R1cmUpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG5leHRTdHJ1Y3R1cmUpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseShyZXN1
bHQsIG9iamVjdCk7CkBAIC0xNDc4Nyw5ICsxNDc5Myw5IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5pdERvbmUsIGxhc3ROZXh0KTsKICAgICB9
CiAgICAgCi0gICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3Qs
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUpCisgICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgcHJldmlvdXNTdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAg
ICAgICAgICAgcG9pbnRlclR5cGUoKSwKICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0
ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LApAQCAtMTQ4MDcsMTQg
KzE0ODEzLDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB9CiAgICAgCiAgICAg
TFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgIExWYWx1ZSBvYmplY3Qs
IExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQp
CisgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBSZWdpc3RlcmVkU3Ry
dWN0dXJlIHByZXZpb3VzLCBSZWdpc3RlcmVkU3RydWN0dXJlIG5leHQpCiAgICAgewotICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgICAg
IHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCiAKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICBpZiAocHJldmlvdXMuY291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgewogICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0
LmNvbnN0SW50UHRyKG5ld1NpemUpOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3Bl
cnR5U3RvcmFnZSwgbV92bVZhbHVlLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0K
QEAgLTE2NzYzLDcgKzE2NzY5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgIAog
ICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNv
dWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCkBAIC0xNjc4
Nyw3ICsxNjc5Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9
LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0
LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZh
bHVlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMjA4MzEsOCArMjA4
MzcsMjcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgIAogICAgIExWYWx1ZSB3ZWFr
U3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAg
Ly8gT09QUwogICAgICAgICBBU1NFUlQoISFzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICByZXR1
cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUu
Z2V0KCkpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cihudWxscHRy
KTsKKyAgICAgICAgLy9yZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlciht
X2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIH0KKworICAgIExWYWx1ZSBzdHJvbmdTdHJ1
Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICAvLyBP
T1BTCisgICAgICAgIC8vcmV0dXJuIGZyb3plblBvaW50ZXIobV9ncmFwaC5mcmVlemVTdHJvbmco
bV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpOworICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJ
bnRQdHIobnVsbHB0cik7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
IG1hc21TdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIC8vIHJldHVybiBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgVHlwZWRQb2ludGVyIGFk
ZHJlc3NGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9
IDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443156</attachid>
            <date>2021-11-02 18:31:34 -0700</date>
            <delta_ts>2021-11-03 12:37:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>89758</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIwLDYgKzUyMCw0MiBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9J
bmhlcml0YW5jZShjb25zdCBDbGFzc0luZm8qKTsKIAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0
dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVM
aWtlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlwZSBmaWx0
ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0dXJlLnR5cGVJbmZvKCku
dHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9
IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ltYm9sVHlwZToKKyAgICAg
ICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNIZWFwQmlnSW50
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5cGU6CisgICAgICAgIGZp
bHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0FycmF5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVz
dWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5nT2JqZWN0VXNlLCBzbyB0
aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmplY3QuCisgICAgY2FzZSBE
ZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjT2Jq
ZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCkp
OworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAgIEFTU0VSVChpc1N1YnR5
cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvSW5o
ZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJldHVybiBmaWx0ZXJlZFJl
c3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0NlbGwqKTsK
IEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpT
VmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0dXJuIHNwZWN1bGF0ZWQg
dHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBUcmlT
dGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAgICAgIGJvb2wgYWxsVHJ1
ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUg
PSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5
cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlwZSkgewor
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkgfHwgc3RydWN0dXJl
LnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLnR5cGVJbmZvKCku
dHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAgICAgYWxsVHJ1ZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjEzLDcgKzIx
Myw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50aXR5KFYKICAgICAgICAg
Ym9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUu
aXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9IGZhbHNlOwogICAgICAg
ICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUgPSBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3RydWN0dXJlLnR5cGVJbmZv
KCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8IHR5cGUudHlwZSgpID09
IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8fCB0eXBlLnR5cGUoKSA9
PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFNb2RlLmlzU3RyaWN0KCkp
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7CkBAIC0yMjQsNyArMjI0
LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRpdHkoVgogICAgICAgICAg
ICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIElmIGFsbCB0
aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cgdGhlIGRldGFpbHMgb2Yg
SlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAgYWxsU3RydWN0dXJlc0Fy
ZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzID09
IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAgICAgICAgICAgYWxsU3Ry
dWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50
b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXM7CiAgICAgICAgIH0p
OwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAgICAgIHJldHVybiBUb1Ro
aXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQubV9zdHJ1Y3R1cmUu
Zm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hdGNoZWQg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0y
MjE1LDYgKzIyMTUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVJREVhcmx5ICE9IHN0cnVjdHVyZUlE
TGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICAg
ICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV92bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsKICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0yMjQwLDYgKzIyNDEsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90
eXBlKCktPnN0cnVjdHVyZShtX3ZtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKS0+c3RydWN0dXJlKG1fdm0pOwpAQCAtMjI3Myw2ICsyMjc1LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gT09Q
UwogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZtLmdl
dFN0cnVjdHVyZShzdHJ1Y3R1cmVJRExhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1OCwxNiArMzE2MSwxOCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBh
dXRvJiBzdHJ1Y3R1cmVTZXQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsK
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNGaW5pdGUoKSAmJiBzdHJ1Y3R1cmVTZXQu
c2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZVNldC5vbmx5U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1cnJlbnRseSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghIXJhcmVEYXRhLT5jYWNoZWRQcm9wZXJ0eU5hbWVzQ29u
Y3VycmVudGx5KG5vZGUtPm9wKCkgPT0gT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyA/IENhY2hl
ZFByb3BlcnR5TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzIDogQ2FjaGVkUHJvcGVydHlO
YW1lc0tpbmQ6OktleXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5p
c1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBcnJheSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgLy8gT09Q
UworICAgICAgICAgICAgICAgIC8vaWYgKGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJlLT5yYXJl
RGF0YUNvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgaWYgKCEhcmFyZURh
dGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50bHkobm9kZS0+b3AoKSA9PSBPYmplY3RH
ZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQ6OkdldE93blByb3Bl
cnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5cykpIHsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hw
b2ludChub2RlKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgbV9zdGF0ZS5zZXRT
aG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyAgICB9CisgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApAQCAtMzM1NCwyMSArMzM1OSwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7Ci0gICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9zdHJ1Y3R1cmUuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0
KQotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2xvYmFsT2JqZWN0ICE9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVj
dCAmJiBvaykgewotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZy
ZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL2lmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CisgICAgICAg
IC8vICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOworICAgICAgICAv
LyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgLy8gICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKKyAgICAgICAgLy8gICAgICAgIFsmXSAoUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gc3RydWN0
dXJlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgLy8gICAgICAgICAgICBlbHNlIGlmIChnbG9i
YWxPYmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgLy8gICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgICAgIH0pOworICAgICAgICAvLyAg
ICBpZiAoZ2xvYmFsT2JqZWN0ICYmIG9rKSB7CisgICAgICAgIC8vICAgICAgICBzZXRDb25zdGFu
dChub2RlLCAqbV9ncmFwaC5mcmVlemUoSlNWYWx1ZShnbG9iYWxPYmplY3QpKSk7CisgICAgICAg
IC8vICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgfQorICAgICAgICAvL30KIAogICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsK
QEAgLTM1ODIsMTAgKzM1ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
aWYgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9ubHlTdHJ1Y3R1cmUoKSkg
ewotICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJl
ZXplKHN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gICAgZmlsdGVyQnlWYWx1ZShu
b2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAg
ICAvLyAgICBicmVhazsKKyAgICAgICAgLy99CiAgICAgICAgIAogICAgICAgICAvLyBBdyBzaHVj
a3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQogICAgICAgICBicmVhazsKQEAgLTM4NDUsMTggKzM4
NTIsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgYm9vbCBjYW5Gb2xkID0gIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKICAgICAg
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwogICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUu
Zm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5cGUoKSkg
eworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8oKS5vdmVycmlkZXNHZXRQ
cm90b3R5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYW5Gb2xkID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgeworICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FuRm9s
ZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlKQotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3RvdHlwZSAhPSBzdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpKQorICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBz
dHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJv
dG90eXBlICE9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAKQEAgLTQ1NDUsNyArNDU1NCw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYg
KGFic3RyYWN0VmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9v
bCBvayA9IHRydWU7CiAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmZvckVh
Y2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAg
IG9rICY9IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgJiBiaXRzKSA9
PSBiaXRzOworICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUudHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSAmIGJpdHMpID09IGJpdHM7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3Rh
bnRGb2xkaW5nKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0
MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGMKICAgICAgICAg
bV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25zKHZlY3Rvcik7CiAgICAgICAgIEFycmF5TW9k
ZXMgbmV3TW9kZXMgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzLmdldCgpKSkKLSAgICAgICAgICAgICAgICBuZXdN
b2RlcyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dC5nZXQoKSk7Cisg
ICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodmVj
dG9yW2ldLnByZXZpb3VzKSkKKyAgICAgICAgICAgICAgICBuZXdNb2RlcyB8PSBhcnJheU1vZGVz
RnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dCk7CiAgICAgICAgIH0KICAgICAgICAgbV9hcnJh
eU1vZGVzIHw9IG5ld01vZGVzOwogICAgIH0KQEAgLTUwLDYgKzUwLDcgQEAgdm9pZCBBYnN0cmFj
dFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoYwogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChH
cmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSwgU3RydWN0dXJlQ2xvYmJlclN0
YXRlIGNsb2JiZXJTdGF0ZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgaWYgKCEhdmFsdWUgJiYgdmFs
dWUudmFsdWUoKS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1bHQgcmVz
dWx0OwpAQCAtODcsOCArODgsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3Jh
cGgsIFJlCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKICAgICAKICAgICBtX3N0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKLSAgICBtX2FycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVj
dHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIG1fYXJyYXlNb2RlcyA9IGFycmF5TW9kZXNGcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlTGlrZShzdHJ1Y3R1cmUpOwogICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgCiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTk1LDYgKzE5Niw3IEBAIGJvb2wgQWJzdHJhY3RWYWx1
ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKIAogICAgIEFic3RyYWN0VmFsdWUgb2xkTWUgPSAqdGhp
czsKICAgICAKKyAgICAvLyBPT1BTCiAgICAgaWYgKGlzQ2xlYXIoKSkgewogICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuVmFsdWUgPSBncmFwaC5mcmVlemUodmFsdWUpOwogICAgICAgICBpZiAo
ZnJvemVuVmFsdWUtPnBvaW50c1RvSGVhcCgpKSB7CkBAIC0yMTEsNyArMjEzLDcgQEAgYm9vbCBB
YnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgICAgICBtZXJnZVNwZWN1bGF0
aW9uKG1fdHlwZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKTsKICAgICAgICAgaWYgKCEh
dmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgc3RydWN0dXJlID0gZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZShncmFwaC5tX3ZtKSk7Ci0gICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMobV9hcnJh
eU1vZGVzLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIG1lcmdlQXJyYXlNb2RlcyhtX2FycmF5TW9kZXMsIGFycmF5TW9kZXNGcm9tU3RydWN0
dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWVyZ2UoUmVnaXN0ZXJl
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV92YWx1
ZSAhPSB2YWx1ZSkKQEAgLTMzNSw4ICszMzcsOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0
VmFsdWU6OmZpbHRlckJ5CiAKIGJvb2wgQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMoUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNw
ZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAmJiAobV9h
cnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSkKKyAg
ICByZXR1cm4gY291bGRCZVR5cGUoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlTGlrZShzdHJ1Y3R1
cmUpKQorICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUo
c3RydWN0dXJlKSkKICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgc3RydWN0IEFi
c3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAg
ICAgICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlVHJhbnNpdGlvbihmcm9tLCB0byk7Ci0gICAg
ICAgICAgICBvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbihhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZShmcm9tLmdldCgpKSwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodG8uZ2V0KCkpKTsKKyAg
ICAgICAgICAgIG9ic2VydmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKGZyb20pLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh0bykpOwogICAgICAgICB9CiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
Myw3ICs0NTMsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmICgo
c3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSAmIGluZGV4aW5nTW9kZU1hc2spICE9IChzaGFwZSB8
IElzQXJyYXkpKQorICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUuaW5kZXhpbmdNb2RlKCkgJiBp
bmRleGluZ01vZGVNYXNrKSAhPSAoc2hhcGUgfCBJc0FycmF5KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NjksNyAr
NDY5LDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0
cnVjdHVyZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICBpZiAoKHN0cnVj
dHVyZS0+aW5kZXhpbmdNb2RlKCkgJiBpbmRleGluZ01vZGVNYXNrKSAhPSBzaGFwZSkKKyAgICAg
ICAgICAgIGlmICgoc3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgaW5kZXhpbmdNb2RlTWFzaykg
IT0gc2hhcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDgyLDcgKzQ4Miw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJl
W2ldOwotICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpICYgKGluZGV4
aW5nTW9kZU1hc2sgJiB+SXNBcnJheSkpICE9IHNoYXBlKQorICAgICAgICAgICAgaWYgKChzdHJ1
Y3R1cmUuaW5kZXhpbmdNb2RlKCkgJiAoaW5kZXhpbmdNb2RlTWFzayAmIH5Jc0FycmF5KSkgIT0g
c2hhcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDkyLDEyICs0OTIsMTggQEAgYm9vbCBBcnJheU1vZGU6OmFscmVh
ZHlDaGVja2VkKEdyYXBoJiBncgogICAgIC8vIFNvLCB3ZSBzaG91bGQgcGVyZm9ybSB0aGUgc2Ft
ZSBjaGVjayB0byB0aGUgQ2hlY2tTdHJ1Y3R1cmUgaGVyZS4KICAgICBjYXNlIEFycmF5OjpPcmln
aW5hbEFycmF5OgogICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQ29weU9uV3JpdGVBcnJheTogewor
ICAgICAgICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShncmFwaCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLyoKICAg
ICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBTdHJ1Y3R1cmUqIG9yaWdpbmFsU3RydWN0dXJlID0gb3JpZ2lu
YWxBcnJheVN0cnVjdHVyZShncmFwaCwgbm9kZSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVj
dHVyZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0
dXJuIHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKS5nZXQoKSA9PSBvcmlnaW5hbFN0
cnVjdHVyZTsKKyAgICAgICAgKi8KICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAg
LTU0NSw5ICs1NTEsOSBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdy
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1
cmUuaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkp
KQorICAgICAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSAmIElzQXJy
YXkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU2Myw5ICs1NjksOSBAQCBib29sIEFycmF5TW9k
ZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUg
PSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5
U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAo
IWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQorICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUu
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3OCw3ICs1
ODQsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFs
dWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkK
KyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUuaW5kZXhp
bmdUeXBlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDYgKzQ0OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24oKSAhPSBBcnJheTo6QXNJczsK
ICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAgYm9vbCBzdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1v
ZGVGaWx0ZXJpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4g
YXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVy
ZSksIGFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgyLDE2ICs4ODIsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
Y2FsbDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNo
ZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRo
ZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAotICAgICAgICAvLyB0aGlzIGdldHMg
bm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24t
YWRhcHRpdmVseSB3YXRjaCB0aGUKLSAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNv
b24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgotICAgICAgICBOb2RlKiBvYmplY3RO
b2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmpl
Y3ROb2RlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7Ci0gICAgfQotICAgIAogICAgIFNw
ZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBhdXRvIGdldFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQgPSBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtNDYyMyw2ICs0NjEzLDEw
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6c2ltcGxpZnlHZXRCeVN0YXR1cyhOb2RlKiBiYXNlLCBHZXRCeVN0YXR1cyYg
Z2V0QnlTdGF0dXMpCiB7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJB
TShnZXRCeVN0YXR1cyk7CisgICAgLy8gT09QUzoKKyAgICAvKgogICAgIC8vIEF0dGVtcHQgdG8g
cmVkdWNlIHRoZSBzZXQgb2YgdGhpbmdzIGluIHRoZSBHZXRCeVN0YXR1cy4KICAgICBpZiAoYmFz
ZS0+b3AoKSA9PSBOZXdPYmplY3QpIHsKICAgICAgICAgYm9vbCBvayA9IHRydWU7CkBAIC00NjM4
LDYgKzQ2MzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpzaW1wbGlmeUdldEJ5U3RhdHVzCiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgIGdldEJ5U3RhdHVzLmZpbHRlcihiYXNlLT5zdHJ1
Y3R1cmUoKS5nZXQoKSk7CiAgICAgfQorICAgICovCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5SWQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5o
CShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcg
Kzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxh
bnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0p
OwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2Ny
YXRjaEdQUihtX3NpemVHUFIsIG1fc3RvcmFnZUdQUik7Ci0gICAgICAgIGlmIChtX2NvbnRpZ3Vv
dXNTdHJ1Y3R1cmUuZ2V0KCkgIT0gbV9hcnJheVN0b3JhZ2VPckNvbnRpZ3VvdXNTdHJ1Y3R1cmUu
Z2V0KCkpIHsKKyAgICAgICAgaWYgKG1fY29udGlndW91c1N0cnVjdHVyZSAhPSBtX2FycmF5U3Rv
cmFnZU9yQ29udGlndW91c1N0cnVjdHVyZSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgYmlnTGVuZ3RoID0gaml0LT5tX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBtX3NpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTUlOX0FS
UkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpOwogICAgICAgICAgICAgaml0LT5tX2pp
dC5tb3ZlKFNwZWN1bGF0aXZlSklUOjpUcnVzdGVkSW1tUHRyKG1fY29udGlndW91c1N0cnVjdHVy
ZSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IGppdC0+bV9qaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIyLDcgKzEyMjIsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKTsKICAgICAgICAgd3JpdGUoSlNDZWxsX2luZGV4aW5nVHlwZSk7
CiAKLSAgICAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+dHJhbnNpdGlvbktpbmQo
KSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikgeworICAgICAgICBpZiAobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0LnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6
OlByb3BlcnR5RGVsZXRpb24pIHsKICAgICAgICAgICAgIC8vIFdlIHVzZSB0aGlzICJkZWxldGUg
ZmVuY2UiIHRvIG1vZGVsIHRoZSBwcm9wZXIgYWxpYXNpbmcgb2YgZnV0dXJlIHN0b3Jlcy4KICAg
ICAgICAgICAgIC8vIEJvdGggaW4gREZHIGFuZCB3aGVuIHdlIGxvd2VyIHRvIEIzLCB3ZSBtb2Rl
bCBhbGlhc2luZyBvZiBwcm9wZXJ0aWVzIGJ5CiAgICAgICAgICAgICAvLyBwcm9wZXJ0eSAgbmFt
ZS4gSW4gYSB3b3JsZCB3aXRob3V0IGRlbGV0ZSwgdGhhdCBhbHNvIG1vZGVscyB7YmFzZSwgcHJv
cGVydHlPZmZzZXR9LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NjEsNiArODYxLDggQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgY2FzZSBP
YmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzOgogICAgICAgICAgICAgY2FzZSBPYmplY3RLZXlzOiB7
CisgICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byYgc3RydWN0dXJlU2V0ID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZVNldC5pc0Zpbml0ZSgpICYmIHN0cnVjdHVyZVNldC5zaXplKCkgPT0gMSkgewpAQCAtODc2LDYg
Kzg3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKi8KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTA2MSw3ICsxMDY0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZS5tX3N0cnVjdHVyZS5p
c0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2sg
Jj0gKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSAmIGJpdHMpID09IGJp
dHM7CisgICAgICAgICAgICAgICAgICAgICAgICBvayAmPSAoc3RydWN0dXJlLnR5cGVJbmZvKCku
aW5saW5lVHlwZUZsYWdzKCkgJiBiaXRzKSA9PSBiaXRzOwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGltaW5hdGVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsOSArNjIsMTMgQEAgRGVzaXJlZFRyYW5zaXRpb25zOjp+RGVzaXJlZFRy
YW5zaXRpb25zKAogewogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENv
ZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENv
ZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVy
ZSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUpCiB7Ci0gICAgbV90cmFuc2l0aW9u
cy5hcHBlbmQoRGVzaXJlZFRyYW5zaXRpb24oY29kZU9yaWdpbk93bmVyLCBvbGRTdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSkpOworICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luT3duZXIpOworICAg
IFVOVVNFRF9QQVJBTShvbGRTdHJ1Y3R1cmUpOworICAgIFVOVVNFRF9QQVJBTShuZXdTdHJ1Y3R1
cmUpOworICAgIC8vIE9PUFMKKyAgICAvL21fdHJhbnNpdGlvbnMuYXBwZW5kKERlc2lyZWRUcmFu
c2l0aW9uKGNvZGVPcmlnaW5Pd25lciwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKTsKIH0K
IAogdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdm0sIENvbW1vbkRhdGEq
IGNvbW1vbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zKENvZGVCbG9jayopOwogICAg
IH5EZXNpcmVkVHJhbnNpdGlvbnMoKTsKIAotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayog
Y29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGFkZExh
emlseShDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgUmVn
aXN0ZXJlZFN0cnVjdHVyZSk7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0
b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNUcmFuc2l0aW9uKCkpIHsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT50cmFuc2l0aW9u
KCksIGNvbnRleHQpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBvdXQucHJpbnQoIiwg
SUQ6Iiwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5pZCgpKTsKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICAvL291dC5wcmludCgiLCBJRDoiLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPmlk
KCkpOwogI2Vsc2UKICAgICAgICAgb3V0LnByaW50KCIsIElEOiIsIFJhd1BvaW50ZXIobm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0LmdldCgpKSk7CiAjZW5kaWYKQEAgLTEyNjksNyArMTI3MCwxMyBA
QCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogewogICAgIGlmICghYmFz
ZSB8fCAhYmFzZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAor
CisKKyAgICAvLyBPT1BTOgorICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmVTZXQpOworICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOworICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgLyoKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RydWN0dXJlU2V0LnNpemUoKTsgaS0tOykgewpAQCAtMTMxMSw2ICsxMzE4LDcgQEAg
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKIAogICAgIHJldHVybiBvYmplY3QtPmdldERpcmVjdENvbmN1cnJlbnRseShzdHJ1
Y3R1cmUsIG9mZnNldCk7CisgICAgKi8KIH0KIAogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCkBAIC0xNDg1LDYgKzE0OTMsMTIgQEAgRnJvemVuVmFsdWUqIEdyYXBoOjpm
cmVlemUoSlNWYWx1ZSB2YWx1ZQogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
bV9mcm96ZW5WYWx1ZXMuYWRkKGZyb3plblZhbHVlKTsKIH0KIAorRnJvemVuVmFsdWUqIEdyYXBo
OjpmcmVlemUoUmVnaXN0ZXJlZFN0cnVjdHVyZSkKK3sKKyAgICAvLyBPT1BTCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKIEZyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25nKEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZSh2YWx1ZSk7CkBAIC0x
NTQ5LDYgKzE1NjMsNyBAQCBSZWdpc3RlcmVkU3RydWN0dXJlIEdyYXBoOjpyZWdpc3RlclN0cnVj
CiAKIHZvaWQgR3JhcGg6OnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKFN0cnVj
dHVyZSogc3RydWN0dXJlKQogeworICAgIC8vIE9PUFMKICAgICBtX3BsYW4ud2Vha1JlZmVyZW5j
ZXMoKS5hZGRMYXppbHkoc3RydWN0dXJlKTsKICAgICBtX3BsYW4ud2F0Y2hwb2ludHMoKS5hZGRM
YXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKIH0KQEAgLTE3MzAs
NiArMTc0NSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAog
Ym9vbCBHcmFwaDo6Z2V0UmVnRXhwUHJvdG90eXBlUHJvcGVydHkoSlNPYmplY3QqIHJlZ0V4cFBy
b3RvdHlwZSwgU3RydWN0dXJlKiByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTVmFsdWUmIHJldHVybkpTVmFsdWUpCiB7CisgICAgLy8gT09QUwogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHJlZ0V4cFByb3RvdHlwZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE3ODAsNiArMTc5Niw4IEBAIGJvb2wgR3JhcGg6OmNhbk9wdGlt
aXplU3RyaW5nT2JqZWN0QWNjZXMKICAgICBpZiAoaGFzRXhpdFNpdGUoY29kZU9yaWdpbiwgQmFk
Q2FjaGUpIHx8IGhhc0V4aXRTaXRlKGNvZGVPcmlnaW4sIEJhZENvbnN0YW50Q2FjaGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBPT1BTCisKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOwogICAgIFN0cnVjdHVy
ZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5z
dHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICByZWdpc3RlclN0cnVjdHVyZShzdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUpOwpAQCAtMTgyOSw2ICsxODQ3LDEyIEBAIGJvb2wgR3JhcGg6OmNhbkRvRmFz
dFNwcmVhZChOb2RlKiBub2RlLCAKICAgICAvLyBUaGUgcGFyYW1ldGVyICd2YWx1ZScgaXMgdGhl
IEFic3RyYWN0VmFsdWUgZm9yIGNoaWxkMSAodGhlIHRoaW5nIGJlaW5nIHNwcmVhZCkuCiAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3ByZWFkKTsKIAorICAgIC8vIE9PUFMKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvKgogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gQXJyYXlVc2Up
IHsKICAgICAgICAgLy8gTm90ZTogd2Ugb25seSBzcGVjdWxhdGUgb24gQXJyYXlVc2Ugd2hlbiB3
ZSd2ZSBzZXQgdXAgdGhlIG5lY2Vzc2FyeSB3YXRjaHBvaW50cwogICAgICAgICAvLyB0byBwcm92
ZSB0aGF0IHRoZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgbm9uLW9ic2VydmFibGUgc3RhcnRpbmcg
ZnJvbSBBcnJheVByb3RvdHlwZS4KQEAgLTE4NTYsNiArMTg4MCw3IEBAIGJvb2wgR3JhcGg6OmNh
bkRvRmFzdFNwcmVhZChOb2RlKiBub2RlLCAKICAgICB9KTsKIAogICAgIHJldHVybiBhbGxHb29k
OworICAgICovCiB9CiAKIHZvaWQgR3JhcGg6OmNsZWFyQ1BTQ0ZHRGF0YSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsy
NDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsg
Ly8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KICAgICBGcm96ZW5WYWx1ZSogZnJl
ZXplU3Ryb25nKEpTVmFsdWUpOyAvLyBTaG9ydGhhbmQgZm9yIGZyZWV6ZSh2YWx1ZSktPnN0cmVu
Z3RoZW5UbyhTdHJvbmdWYWx1ZSkuCisgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShSZWdpc3RlcmVk
U3RydWN0dXJlKTsKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUs
IEZyb3plblZhbHVlKiB2YWx1ZSk7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEwICsyNjYsMTUg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hXZWFr
U3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBSZWdpc3RlcmVkU3Ry
dWN0dXJlIHdlYWtTdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHdlYWtTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIC8vU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB3ZWFrU3RydWN0dXJlLmdldCgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEp1bXAg
cmVzdWx0ID0gYnJhbmNoMzIoY29uZCwgbGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQo
KSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBVTlVTRURfUEFSQU0od2Vha1N0
cnVjdHVyZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGNvbmQpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL0p1bXAgcmVzdWx0ID0gYnJh
bmNoMzIoY29uZCwgbGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOworICAgICAg
ICAvL3JldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKdW1wKCk7CiAjZWxzZQogICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNp
b24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgdm9pZCBOb2RlOjpyZW1vdmUoR3JhcGgm
IGdyYXBoKQogICAgIHN3aXRjaCAob3AoKSkgewogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDog
ewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG11bHRpR2V0QnlPZmZzZXRE
YXRhKCk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmVTZXQgc2V0OwogICAgICAgICBmb3IgKE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNl
IDogZGF0YS5jYXNlcykgewogICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5mb3JFYWNoKAogICAg
ICAgICAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0LmFkZChzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBzZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
ICAgICAgICAgY29udmVydFRvQ2hlY2tTdHJ1Y3R1cmUoZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNl
dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjgsNyArOTI4LDcgQEAgcHJpdmF0ZToKICAgICBB
bGxvY2F0aW9uKiBoYW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3MoTm9kZSogbm9kZSwgSGFzaE1hcDxQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciwgTGF6eU5vZGU+JiB3cml0ZXMpCiAgICAgewogICAg
ICAgICBBbGxvY2F0aW9uKiByZXN1bHQgPSAmbV9oZWFwLm5ld0FsbG9jYXRpb24obm9kZSwgQWxs
b2NhdGlvbjo6S2luZDo6SW50ZXJuYWxGaWVsZE9iamVjdCk7Ci0gICAgICAgIHdyaXRlcy5hZGQo
U3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUobm9kZS0+c3RydWN0dXJlKCku
Z2V0KCkpKSk7CisgICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9n
cmFwaC5mcmVlemUobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIGF1dG8gaW5pdGlhbFZh
bHVlcyA9IEludGVybmFsRmllbGRDbGFzczo6aW5pdGlhbFZhbHVlcygpOwogICAgICAgICBzdGF0
aWNfYXNzZXJ0KGluaXRpYWxWYWx1ZXMuc2l6ZSgpID09IEludGVybmFsRmllbGRDbGFzczo6bnVt
YmVyT2ZJbnRlcm5hbEZpZWxkcyk7ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgaW5pdGlhbFZhbHVlcy5zaXplKCk7ICsraW5kZXgpCkBAIC05NTUsNyAr
OTU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHRhcmdldCA9ICZtX2hlYXAubmV3QWxsb2Nh
dGlvbihub2RlLCBBbGxvY2F0aW9uOjpLaW5kOjpPYmplY3QpOwogICAgICAgICAgICAgdGFyZ2V0
LT5zZXRTdHJ1Y3R1cmVzKG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHdyaXRlcy5h
ZGQoCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVl
emUobm9kZS0+c3RydWN0dXJlKCkuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
UExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgpAQCAtOTgyLDcgKzk4
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIE5ld0ludGVybmFsRmll
bGRPYmplY3Q6IHsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPnN0cnVjdHVyZSgpLnR5
cGVJbmZvKCkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEpTQXJyYXlJdGVyYXRvclR5cGU6
CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaGFuZGxlSW50ZXJuYWxGaWVsZENsYXNzPEpTQXJy
YXlJdGVyYXRvcj4obm9kZSwgd3JpdGVzKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk5
MywxMCArOTkzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaGFuZGxl
SW50ZXJuYWxGaWVsZENsYXNzPEpTU2V0SXRlcmF0b3I+KG5vZGUsIHdyaXRlcyk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEpTUHJvbWlzZVR5cGU6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFs
UHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKS5j
bGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQogICAgICAgICAgICAgICAg
ICAgICB0YXJnZXQgPSBoYW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3M8SlNJbnRlcm5hbFByb21pc2U+
KG5vZGUsIHdyaXRlcyk7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjpp
bmZvKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCkuY2xh
c3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOwogICAgICAgICAgICAgICAgICAgICB0YXJn
ZXQgPSBoYW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3M8SlNQcm9taXNlPihub2RlLCB3cml0ZXMpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzcsNyArMTAz
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
dGFyZ2V0ID0gbV9oZWFwLm9ubHlMb2NhbEFsbG9jYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc09iamVjdEFsbG9jYXRpb24o
KSkgewotICAgICAgICAgICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUo
bV9ncmFwaC5mcmVlemUoSlNWYWx1ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQuZ2V0KCkpKSkp
OworICAgICAgICAgICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9n
cmFwaC5mcmVlemUoSlNWYWx1ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKSkpOwogICAgICAg
ICAgICAgICAgIHRhcmdldC0+c2V0U3RydWN0dXJlcyhub2RlLT50cmFuc2l0aW9uKCktPm5leHQp
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9oZWFwLmVzY2FwZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOwpAQCAtMjUwMyw3ICsyNTAzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBzZXQgaXMgY29uc2VydmF0aXZlLiBUaGlzIHNl
dCBjYW4gaW5jbHVkZSBTdHJ1Y3R1cmUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIGxlZ2l0IHByb3Bl
cnR5LgogICAgICAgICAgICAgICAgIC8vIFdlIGZpbHRlciBvdXQgc3VjaCBhbiBhcHBhcmVudGx5
IGluYXBwcm9wcmlhdGUgc3RydWN0dXJlcyBoZXJlIHNpbmNlIE11bHRpUHV0QnlPZmZzZXQgYXNz
dW1lcyBhbGwgdGhlIHN0cnVjdHVyZXMKICAgICAgICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGNv
cnJlc3BvbmRpbmcgb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCi0gICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCkgIT0gaW52YWxpZE9mZnNldCkK
KyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmdldENvbmN1cnJlbnRseSh1aWQpICE9IGlu
dmFsaWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICB9CiAKQEAgLTI1MTUsMTMgKzI1MTUsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlcy5lbmQoKSwKICAgICAgICAgICAgICAgICBbdWlkXSAoUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBhLCBSZWdpc3RlcmVkU3RydWN0dXJlIGIpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYS0+Z2V0Q29uY3VycmVudGx5KHVpZCkgPCBiLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0Q29uY3VycmVudGx5KHVpZCkgPCBi
LmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmVzLnNpemUoKSk7Ci0gICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBmaXJzdE9mZnNldCA9IHN0cnVjdHVyZXNbMF0tPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgZmlyc3RPZmZzZXQgPSBzdHJ1Y3R1cmVzWzBd
LmdldENvbmN1cnJlbnRseSh1aWQpOwogCi0gICAgICAgICAgICBpZiAoZmlyc3RPZmZzZXQgPT0g
c3RydWN0dXJlcy5sYXN0KCktPmdldENvbmN1cnJlbnRseSh1aWQpKSB7CisgICAgICAgICAgICBp
ZiAoZmlyc3RPZmZzZXQgPT0gc3RydWN0dXJlcy5sYXN0KCkuZ2V0Q29uY3VycmVudGx5KHVpZCkp
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2hlbiB3ZSBkZWNpZGUgdG8gc2luayBvYmplY3RzIHdpdGggYQogICAgICAg
ICAgICAgICAgIC8vIHByb3BlcnR5IHN0b3JhZ2UsIHdlIHNob3VsZCBoYW5kbGUgbm9uLWlubGlu
ZSBvZmZzZXRzLgpAQCAtMjU0Nyw3ICsyNTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gZmlyc3RPZmZzZXQ7CiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU2V0IGN1cnJlbnRTZXQ7CiAgICAgICAgICAgICAgICAgZm9yIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0
ICE9IGN1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ug
b3VyIGFuYWx5c2lzIHRyZWF0cyBNdWx0aVB1dEJ5T2Zmc2V0IGxpa2UgYW4gZXNjYXBlLCB3ZSBv
bmx5IGhhdmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBzdG9yaW5n
IHJlc3VsdHMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgUHV0QnlP
ZmZzZXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0
ZXJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCAr
MzcsNyBAQCBjbGFzcyBSZWdpc3RlcmVkU3RydWN0dXJlIHsKIHB1YmxpYzoKICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlKCkgPSBkZWZhdWx0OwogCi0gICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUq
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICAvL1N0cnVjdHVyZSogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUmVnaXN0ZXJlZFN0cnVjdHVyZSYgb3RoZXIpIGNvbnN0CiAgICAgewpAQCAtNTUsOSArNTQs
MzggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISFnZXQoKTsKICAgICB9CiAKKyAgICBUeXBl
SW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT50eXBlSW5mbygpOyB9
CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZS0+Y2xhc3NJbmZvKCk7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpOyB9CisgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKTsgfQorICAgIGJvb2wgaGFzUG9seVByb3RvKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmhhc1BvbHlQcm90bygpOyB9CisgICAgSlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7IH0KKyAgICBUcmFuc2l0
aW9uS2luZCB0cmFuc2l0aW9uS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT50cmFu
c2l0aW9uS2luZCgpOyB9CisgICAgLy8gT09QUworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVm
aW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpOyB9CisgICAgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsgfQorICAgIGJvb2wgY291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKTsgfQorICAgIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBnZXRQcm9wZXJ0
aWVzQ29uY3VycmVudGx5KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25j
dXJyZW50bHkoKTsgfQorICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7
IHJldHVybiBtX3N0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKTsgfQorICAgIFBy
b3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNp
Z25lZCYgYXR0cmlidXRlcykgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQsIGF0dHJpYnV0ZXMpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICB1bnNpZ25lZCB1bnVzZWQ7Cisg
ICAgICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkodWlkLCB1bnVzZWQpOworICAgIH0KKyAgICBi
b29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpOyB9CisgICAgYm9vbCBkZmdTaG91bGRX
YXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpOyB9CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoOwogCisgICAgQUxXQVlTX0lOTElORSBT
dHJ1Y3R1cmUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IG1fc3RydWN0
dXJlKHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI4NDcw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0OjpmaWx0ZXJBcnJheQogewogICAgIGdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsm
XSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZShzdHJ1Y3R1cmUpOwogICAgICAgICB9KTsKIH0KIApAQCAtNzksNyArNzksNyBAQCBBcnJh
eU1vZGVzIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6OmFycmF5CiAgICAgQXJyYXlNb2RlcyByZXN1
bHQgPSAwOwogICAgIGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1bHQsIGFycmF5TW9k
ZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgbWVyZ2VBcnJh
eU1vZGVzKHJlc3VsdCwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAg
ICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0
dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAgU3RydWN0
dXJlU2V0IHRvU3RydWN0dXJlU2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVNl
dCByZXN1bHQ7Ci0gICAgICAgIGZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSkgeyByZXN1bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7IH0pOworICAgICAgICAvL2ZvckVh
Y2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1bHQuYWRkKHN0cnVj
dHVyZS5nZXQoKSk7IH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpIHx8IHZh
bHVlLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJl
dHVybiB2YWx1ZVswXS5nZXQoKSA9PSBncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlWzBdLmNsYXNzSW5mbygpID09IGdyYXBoLm1fdm0uZ2V0dGVy
U2V0dGVyU3RydWN0dXJlLT5jbGFzc0luZm8oKTsKICAgICB9CiAKICAgICBjYXNlIEJvdHRvbVZh
bHVlOgpAQCAtNDEzLDExICs0MTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSA9IHZhbHVlW2ldLmdl
dCgpOwotICAgICAgICAgICAgaWYgKHRoaXNTdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCisgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHRoaXNTdHJ1Y3R1cmUgPSB2
YWx1ZVtpXTsKKyAgICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlcyA9IDA7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBjaGVja09m
ZnNldCA9IHRoaXNTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwor
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgY2hlY2tPZmZzZXQgPSB0aGlzU3RydWN0dXJlLmdl
dENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgaWYgKGNoZWNrT2Zm
c2V0ICE9IGRlc2lyZWRPZmZzZXQgfHwgIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkFjY2Vzc29yKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTQ0NiwxMCArNDQ2LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUgPSB2YWx1ZVtpXS5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0aGlzU3RydWN0dXJlID0gdmFsdWVbaV07
CisgICAgICAgICAgICBpZiAodGhpc1N0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghdGhpc1N0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgaWYgKCF0aGlzU3Ry
dWN0dXJlLmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00OTIsNyArNDkyLDcgQEAg
Ym9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICBib29sIGlz
U2FmZSA9IHRydWU7CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gbm9kZS0+
cmVxdWlyZWRET01KSVRDbGFzc0luZm8oKTsKICAgICAgICAgc3RydWN0dXJlcy5mb3JFYWNoKFsm
XSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIGlzU2FmZSAm
PSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKTsKKyAgICAg
ICAgICAgIGlzU2FmZSAmPSBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFz
c0luZm8pOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MDcsNyArMzYw
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IFB1dFN0cnVjdHVyZTogewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVy
ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgbmV3U3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwotICAgICAgICBt
X2ppdC5ncmFwaCgpLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseShub2RlLT5vcmlnaW4u
c2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3U3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5h
ZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CiAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwMCw3ICsy
NzAwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIGF1dG8gdHlwZWRBcnJheVR5cGUgPSBub2Rl
LT50eXBlZEFycmF5VHlwZSgpOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0g
bV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlT
dHJ1Y3R1cmVDb25jdXJyZW50bHkodHlwZWRBcnJheVR5cGUpKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChzdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgU3BlY3VsYXRlU3RyaWN0SW50NTJPcGVyYW5kIHNp
emUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5ncHIo
KTsKQEAgLTQ1NDMsNyArNDU0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlIG9sZFN0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigp
LT5uZXh0OwotICAgICAgICBtX2ppdC5ncmFwaCgpLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExh
emlseShub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVy
ZS5nZXQoKSwgbmV3U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3Bs
YW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmln
aW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CiAKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQ1NTEsNyArNDU1MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRT
dHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgPT0gbmV3U3RydWN0dXJlLT5p
bmRleGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkpOwogICAgICAgICBBU1NF
UlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IG5ld1N0cnVj
dHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0gICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTdHJ1Y3R1cmUtPmlkKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKyAgICAgICAgc3RvcmVTdHJ1Y3R1cmVJRChuZXdTdHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgICAg
ICAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMiArOTQsMTIgQEAgU3BlY3VsYXRpdmVKSVQ6On5T
cGVjdWxhdGl2ZUpJVCgpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09i
amVjdChHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgR1BS
UmVnIHN0b3JhZ2VHUFIsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCiB7Ci0gICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2Rl
KCkpKTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKTsKKyAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLmluZGV4aW5nTW9k
ZSgpKSk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS5pbmRleGlu
Z1R5cGUoKTsKICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKTsKIAotICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpOwotICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5ID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5ID0gc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgb3V0T2ZMaW5l
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAKICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3
T2JqZQogICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAgQVNT
RVJUKHZlY3Rvckxlbmd0aCA+PSBudW1FbGVtZW50cyk7Ci0gICAgdmVjdG9yTGVuZ3RoID0gQnV0
dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUuZ2V0KCksIHZl
Y3Rvckxlbmd0aCk7CisgICAgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGln
dW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdmVjdG9yTGVu
Z3RoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCkBAIC0x
MzQsMTMgKzEzNCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmpl
CiAgICAgfQogCiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvcjsKLSAgICBpZiAoc3RydWN0dXJlLT50
eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCisgICAgaWYgKHN0cnVjdHVyZS50eXBlSW5mbygp
LnR5cGUoKSA9PSBKU1R5cGU6OkFycmF5VHlwZSkKICAgICAgICAgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0FycmF5Pih2bSwgSlNBcnJheTo6YWxsb2Nh
dGlvblNpemUoaW5saW5lQ2FwYWNpdHkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAgICAgZWxzZQogICAgICAgICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtLCBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKICAgICBpZiAoYWxsb2NhdG9yKSB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBzbG93
Q2FzZXMpOwotICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5lbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
IApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJh
d09iamUKIAogICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpCisgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQ
TmFOKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOwpA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09i
amUKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAg
ICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHZhbHVlOwotICAgICAgICBpZiAoaGFzRG91YmxlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVy
ZS5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0
ZVJhd09iamUKICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCiAgICAgICAgIG1faml0LnN0b3Jl
MzIoVHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAgICAgCi0gICAg
bV9qaXQuZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKHN0b3JhZ2VHUFIsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgbV9qaXQuZW1pdEluaXRpYWxpemVPdXRPZkxp
bmVTdG9yYWdlKHN0b3JhZ2VHUFIsIHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAg
ICAKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0pOwogfQpAQCAtOTIxNCw3ICs5MjE0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZAogICAgICAgICAvLyBBdCB0
aGlzIHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBo
YXZlIHBvaW50ZXJzIHRvCiAgICAgICAgIC8vIHRoZSBKU0FycmF5IGFuZCB0aGUgQnV0dGVyZmx5
LCByZXNwZWN0aXZlbHkuCiAKLSAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOworICAgICAgICBBU1NF
UlQoIWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpIHx8ICFub2RlLT5udW1D
aGlsZHJlbigpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9w
ZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7CiAgICAg
ICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgb3BlcmFu
ZEluZGV4KTsKQEAgLTEwNDQyLDE0ICsxMDQ0MiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ2hlY2tTdHJ1Y3R1CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewotICAgIEFTU0VSVCghbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5
ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKTsKIAogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgIGlm
ICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMuY291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKQEAgLTEwNDg3LDEzICsxMDQ4NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQWxsb2NhdGVQcm9wCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpOworICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2
aW91cy5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgIHNpemVfdCBu
ZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3
U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24o
KS0+bmV4dC5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAKICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAotICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24o
KS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICBpZiAoIWFsbG9j
YXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CkBAIC0xMTE0OCw3ICsxMTE0OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdU
eXBlZEFycmEKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBhdXRvIHR5cGVk
QXJyYXlUeXBlID0gbm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdldCgpKTsKIAogI2lmIFVTRShMQVJHRV9UWVBF
RF9BUlJBWVMpCiAgICAgLy8gVGhlIG9wZXJhdGlvbnMgd2UgY2FsbCBvbiB0aGUgc2xvdyBwYXRo
IGV4cGVjdCBhIGludHB0cl90LCBzbyBpbnQ2NF90IG9uIDY0IGJpdCBwbGF0Zm9ybXMKQEAgLTEz
MTEyLDcgKzEzMTExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFsaXpl
TgogCiAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEoKTsKICAgICAgICAgCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKTsKICAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKTsKICAgICBpbnQzMl90
IHB1YmxpY0xlbmd0aCA9IDA7CiAgICAgaW50MzJfdCB2ZWN0b3JMZW5ndGggPSAwOwpAQCAtMTMx
NTksOCArMTMxNTgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVO
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAg
ICAgICAvLyBPT1BTCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2ppdC5ncmFwaCgp
LmlkZW50aWZpZXJzKClbZGVzY3JpcHRvci5pbmZvKCldOwotICAgICAgICAgICAgZm9yIChQcm9w
ZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5
KCkpIHsKKyAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVy
ZS5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodWlk
ICE9IGVudHJ5LmtleSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEzOTM2
LDExICsxMzkzNiwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlPZmZzZXQo
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShOb2RlKiBub2Rl
KQogeworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlm
IChiKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgLy8gT09Q
UzogaW1wbGVtZW50IHRoaXMKKyAgICAvKgogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7Ci0gICAgCiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgIAogICAgIGF1
dG8mIHZhcmlhbnRzID0gbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHM7CkBAIC0x
Mzk1OSw2ICsxMzk2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVj
dHUKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKICAgICBibGVzc2VkQm9vbGVhblJlc3Vs
dCh0ZW1wR1BSLCBub2RlKTsKKyAgICAqLwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCkBAIC0xNDAwMCwxNCArMTQwMDcs
MTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RQogICAgICAgICBp
ZiAoYmFzZVZhbHVlLmlzVHlwZShTcGVjT2JqZWN0KSAmJiBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZyA9IGZhbHNlOwogICAg
ICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3Ry
dWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpID4gQXJyYXlXaXRoVW5kZWNpZGVkKQorICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCkgPiBBcnJheVdpdGhVbmRlY2lkZWQpCiAgICAgICAgICAgICAg
ICAgICAgIGhhc0luZGV4aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
aWYgKCFoYXNJbmRleGluZykKICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNrQ2hlY2sg
PSB0cnVlOwogICAgICAgICAgICAgb25seVN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5tX3N0cnVjdHVy
ZS5vbmx5U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAob25seVN0cnVjdHVyZSkKLSAgICAg
ICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7CisgICAg
ICAgICAgICAvLyBPT1BTOgorICAgICAgICAgICAgLy9pZiAob25seVN0cnVjdHVyZSkKKyAgICAg
ICAgICAgIC8vICAgIHJhcmVEYXRhID0gb25seVN0cnVjdHVyZS0+dHJ5UmFyZURhdGEoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghc2tpcEluZGV4aW5nTWFza0NoZWNrKSB7CkBAIC0xNDYx
MSwxNCArMTQ2MTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChO
bwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxs
b2NhdG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRs
eTxKU0ZpbmFsT2JqZWN0Pih2bSgpLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCiAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgIGVsc2UgewogICAgICAgICBhdXRvIGJ1
dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSks
IGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0
Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9q
aXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAgICAgfQog
CkBAIC0xNDYzMCw2ICsxNDYzOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3
T2JqZWN0KE5vCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzLCB0eXBlbmFtZSBPcGVyYXRpb24+
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGwo
Tm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKKyAgICBVTlVTRURfUEFSQU0obm9k
ZSk7CisgICAgVU5VU0VEX1BBUkFNKG9wZXJhdGlvbik7CisgICAgLy8gT09QUzoKKyAgICAvKgog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gx
KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKQEAgLTE0NjUyLDYgKzE0
NjY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRgogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
biwgcmVzdWx0R1BSLCAmdm0oKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CiAKICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgKi8KIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5ld0dlbmVyYXRvcihOb2RlKiBub2RlKQpAQCAtMTQ2NjYsNyArMTQ2Nzks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXN5bmNHZW5lCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUpCiB7
Ci0gICAgc3dpdGNoIChub2RlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAg
ICBzd2l0Y2ggKG5vZGUtPnN0cnVjdHVyZSgpLnR5cGVJbmZvKCkudHlwZSgpKSB7CiAgICAgY2Fz
ZSBKU0FycmF5SXRlcmF0b3JUeXBlOgogICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8SlNBcnJheUl0ZXJhdG9yPihub2RlLCBvcGVyYXRpb25OZXdBcnJheUl0ZXJhdG9y
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDY3NywxMCArMTQ2OTAsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRgogICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRvcj4obm9kZSwgb3BlcmF0aW9uTmV3U2V0SXRlcmF0
b3IpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTUHJvbWlzZVR5cGU6IHsKLSAgICAgICAg
aWYgKG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6
aW5mbygpKQorICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJ
bnRlcm5hbFByb21pc2U6OmluZm8oKSkKICAgICAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxKU0ludGVybmFsUHJvbWlzZT4obm9kZSwgb3BlcmF0aW9uTmV3SW50ZXJu
YWxQcm9taXNlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+c3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTUHJvbWlzZTo6aW5mbygpKTsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS5jbGFzc0luZm8oKSA9PSBKU1Byb21pc2U6OmluZm8o
KSk7CiAgICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNQcm9t
aXNlPihub2RlLCBvcGVyYXRpb25OZXdQcm9taXNlKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKQEAgLTE1MDcwLDcgKzE1MDgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dFByb3RvdHlwZQogICAgICAgICAgICAgYm9vbCBoYXNQb2x5UHJvdG8gPSBmYWxzZTsKICAgICAg
ICAgICAgIGJvb2wgaGFzTW9ub1Byb3RvID0gZmFsc2U7CiAgICAgICAgICAgICB2YWx1ZS5tX3N0
cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLmhhc1BvbHlQcm90bygpKQogICAgICAgICAgICAgICAgICAgICBo
YXNQb2x5UHJvdG8gPSB0cnVlOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgaGFzTW9ub1Byb3RvID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI1LDkgKzEyNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
OmlzX2Jhc2Vfb2Y8SlNDZWxsLCBUPjo6dmFsdWUsICJUbyB1c2UgYSBHQyBwb2ludGVyLCB0aGUg
Z3JhcGggbXVzdCBiZSBhd2FyZSBvZiBpdC4gVXNlIFNwZWN1bGF0aXZlSklUOjpUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlciBpbnN0ZWFkLiIpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gT09Q
UwogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tUHRyKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlKQotICAgICAgICAgICAgOiBtX3ZhbHVlKHN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAg
eyB9CisgICAgICAgICAgICAvLzogbV92YWx1ZShzdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAg
ICA6IG1fdmFsdWUobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFRydXN0
ZWRJbW1QdHIoc3RkOjpudWxscHRyX3QpCiAgICAgICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikK
QEAgLTE4MDQsNiArMTgwOCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5lcmF0aW9u
SW5mbyhlZGdlLm5vZGUoKSk7CiAgICAgfQogCisgICAgLy8gT09QUzogaW1wbGVtZW50CisgICAg
dm9pZCBzdG9yZVN0cnVjdHVyZUlEKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUsIENDYWxsSGVscGVyczo6
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSwgYWRkcmVzcyk7CisgICAgfQorCiAgICAgLy8gVGhlIEpJVCwg
d2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJ
VENvbXBpbGVyJiBtX2ppdDsKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB2
b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzUmVnCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGdyYXBo
LmFzc2VydElzUmVnaXN0ZXJlZChhdChpKS5nZXQoKSk7CisgICAgICAgIGdyYXBoLmFzc2VydElz
UmVnaXN0ZXJlZChhdChpKSk7CiB9CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIApAQCAtNTgs
MTQgKzU4LDE0IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCiAgICAg
aWYgKG1fc2V0LmlzVGhpbigpKSB7CiAgICAgICAgIGlmICghbV9zZXQuc2luZ2xlRW50cnkoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVFbnRyeSgpLT5k
ZmdTaG91bGRXYXRjaCgpKQorICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZUVudHJ5KCkuZGZnU2hv
dWxkV2F0Y2goKSkKICAgICAgICAgICAgIG1ha2VUb3BXaGVuVGhpbigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxp
c3QqIGxpc3QgPSBtX3NldC5saXN0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9s
ZW5ndGg7IGktLTspIHsKLSAgICAgICAgaWYgKCFsaXN0LT5saXN0KClbaV0tPmRmZ1Nob3VsZFdh
dGNoKCkpIHsKKyAgICAgICAgaWYgKCFsaXN0LT5saXN0KClbaV0uZGZnU2hvdWxkV2F0Y2goKSkg
ewogICAgICAgICAgICAgbWFrZVRvcCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigp
CiAKIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb24oUmVnaXN0
ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKQogewotICAgIEFTU0VS
VCghZnJvbS0+ZGZnU2hvdWxkV2F0Y2goKSk7CisgICAgQVNTRVJUKCFmcm9tLmRmZ1Nob3VsZFdh
dGNoKCkpOwogCiAgICAgaWYgKGlzVG9wKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk2LDcgKzk2
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbgogICAgIAogICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U3RydWN0dXJlczsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIEFTU0VSVCghdmVjdG9yW2ldLnBy
ZXZpb3VzLT5kZmdTaG91bGRXYXRjaCgpKTsKKyAgICAgICAgQVNTRVJUKCF2ZWN0b3JbaV0ucHJl
dmlvdXMuZGZnU2hvdWxkV2F0Y2goKSk7CiAKICAgICAgICAgaWYgKCFtX3NldC5jb250YWlucyh2
ZWN0b3JbaV0ucHJldmlvdXMpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTUsNyArMjU1
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXJTbG93KAogICAgIAogICAg
IG1fc2V0LmdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlLmdldCgpKSAmIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuICEhKHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKSAmIHR5cGUpOwogICAgICAgICB9KTsK
IH0KIApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyQ2xhc3MKICAgICBBU1NFUlQoIWlzVG9wKCkpOwogICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIo
CiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NP
ZihjbGFzc0luZm8pOwogICAgICAgICB9KTsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJDbGFzc08KIAogICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RydWN0dXJlIHNldCBpcyBlbXB0eS4K
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbV9zZXQpIHsK
LSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJ
bmZvKSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihj
bGFzc0luZm8pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM1Nyw3ICszNTcsNyBAQCBib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omlz
Tm90U3ViQ2xhCiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgdGhlIHN0cnVjdHVyZSBzZXQgaXMgZW1wdHkuCiAgICAgZm9yIChjb25zdCBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSA6IG1fc2V0KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKSkKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9zZXQ7CiAgICAgfQogCisgICAgLy8gT09QUzoKICAgICBTdHJ1Y3R1
cmVTZXQgdG9TdHJ1Y3R1cmVTZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNGaW5pdGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODcsNyArMzg4
Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0
cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsK
LSAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5h
ZGRMYXppbHkobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKIAogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4
aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkpOwpAQCAtMzg5NSw3ICszODk1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAogCi0gICAgICAgIGF1dG8mIGhlYXAgPSBt
X25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9u
S2luZDo6UHJvcGVydHlEZWxldGlvbiA/IG1faGVhcHMuSlNDZWxsSGVhZGVyQW5kTmFtZWRQcm9w
ZXJ0aWVzIDogbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8mIGhlYXAg
PSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRp
b25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uID8gbV9oZWFwcy5KU0NlbGxIZWFkZXJBbmROYW1lZFBy
b3BlcnRpZXMgOiBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRDsKICAgICAgICAgVHlwZWRQb2lu
dGVyIHBvaW50ZXIgeyBoZWFwLCBtX291dC5hZGRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQub2Zmc2V0KCkpIH07CiAKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTQ5Mzks
NyArNDkzOSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBi
b29sIGhhc1BvbHlQcm90byA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzTW9ub1By
b3RvID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChb
Jl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLmhhc1BvbHlQcm90bygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUG9s
eVByb3RvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTW9ub1Byb3RvID0gdHJ1ZTsKQEAgLTY5NzIsNyArNjk3Miw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRp
b25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFibGUpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICAgICAg
ICAgICAgIH0sCkBAIC03MTE5LDcgKzcxMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAm
dm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0
eSkpOwogICAgICAgICAgICAgfSwgbGVuZ3RoLnZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKQEAgLTczOTAsNyArNzM5
MCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRp
b24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb24sIG1fdm1WYWx1ZSwgZnJvemVuUG9pbnRlciht
X2dyYXBoLmZyZWV6ZVN0cm9uZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRl
clR5cGUoKSwgb3BlcmF0aW9uLCBtX3ZtVmFsdWUsIHN0cm9uZ1N0cnVjdHVyZShtX25vZGUtPnN0
cnVjdHVyZSgpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NDA5LDcgKzc0
MDksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICB2b2lkIGNvbXBpbGVOZXdJ
bnRlcm5hbEZpZWxkT2JqZWN0KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnN0
cnVjdHVyZSgpLnR5cGVJbmZvKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgSlNBcnJheUl0ZXJh
dG9yVHlwZToKICAgICAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxK
U0FycmF5SXRlcmF0b3I+KG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC03NDIwLDcgKzc0MjAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRv
cj4ob3BlcmF0aW9uTmV3U2V0SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSlNQcm9taXNlVHlwZToKLSAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAg
aWYgKG1fbm9kZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6
OmluZm8oKSkKICAgICAgICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8SlNJbnRlcm5hbFByb21pc2U+KG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOwpAQCAtNzQ1Niw3ICs3NDU2LDcg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICBzdHJpbmcpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CkBAIC04MzU0LDcg
KzgzNTQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZt
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlX
aXRoU2l6ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
IGdsb2JhbE9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc2l6ZTY0Qml0cywgc3RvcmFnZVZhbHVlKTsK
QEAgLTgzNjksNyArODM2OSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB2b2lk
IGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0U3RvcmFnZShh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2
aW91cy5nZXQoKSkpOworICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KG9iamVjdCwgbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAg
dm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCkBAIC04MzgwLDcgKzgzODAs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBzZXRTdG9y
YWdlKAogICAgICAgICAgICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAg
ICAgICBvYmplY3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLmdldCgpLCB0cmFu
c2l0aW9uLT5uZXh0LmdldCgpKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdl
LCB0cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KCkKQEAgLTkyNjIs
NyArOTI2Miw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJh
c2UsIHZhcmlhbnQub2Zmc2V0KCksCkBAIC0xMzQ1NywxNCArMTM0NTcsMTUgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc1R5cGUoU3BlY09i
amVjdCkgJiYgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAg
ICAgICBib29sIGhhc0luZGV4aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYmFzZVZhbHVl
Lm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA+IEFy
cmF5V2l0aFVuZGVjaWRlZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5pbmRl
eGluZ1R5cGUoKSA+IEFycmF5V2l0aFVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGhhc0luZGV4aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICBpZiAoIWhhc0luZGV4aW5nKQogICAgICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNr
Q2hlY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgIG9ubHlTdHJ1Y3R1cmUgPSBiYXNlVmFsdWUu
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGlmIChvbmx5U3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRy
eVJhcmVEYXRhKCk7CisgICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8v
aWYgKG9ubHlTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgLy8gICAgcmFyZURhdGEgPSBvbmx5
U3RydWN0dXJlLT50cnlSYXJlRGF0YSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBM
VmFsdWUgbm90SGF2aW5nSW5kZXhpbmcgPSBudWxscHRyOwpAQCAtMTM2OTIsMTAgKzEzNjkzLDEx
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGVja1N0cnVjdHVyZUJsb2NrKTsKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEOwotICAgICAg
ICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwotICAg
ICAgICBlbHNlCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy9hdXRvIHN0cnVjdHVyZSA9IG1f
c3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUo
KTsKKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKQorICAgICAgICAvLyAgICBzdHJ1Y3R1cmVJRCA9
IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgLy9lbHNlCiAgICAg
ICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CiAKICAgICAgICAgTFZhbHVlIGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBt
X291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSk7CkBAIC0xMzcxMywx
MCArMTM3MTUsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOwogICAgICAgICBMVmFsdWUgaW5s
aW5lQ2FwYWNpdHkgPSBudWxscHRyOwogICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVy
dGllcyA9IGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBoYXNO
b091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwot
ICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKSB7
CisgICAgICAgIC8vICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUub3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgLy8gICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5j
b25zdEludDMyKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgLy99CiAgICAg
ICAgIGlmICghaW5saW5lQ2FwYWNpdHkpCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIExWYWx1ZSBpc0lubGluZSA9IGhhc05vT3V0
T2ZMaW5lUHJvcGVydGllcyA/IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3coaW5kZXgsIGlu
bGluZUNhcGFjaXR5KTsKQEAgLTEzODY0LDE0ICsxMzg2NiwxNCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0OwogICAgICAgICAgICAgTFZhbHVl
IGJ1dHRlcmZseTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0
eSgpIHx8IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpIHsK
ICAgICAgICAgICAgICAgICBBbGxvY2F0b3IgY2VsbEFsbG9jYXRvcjsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT50eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCi0gICAgICAgICAg
ICAgICAgICAgIGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTQXJyYXk+KHZtKCksIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEpTVHlwZTo6
QXJyYXlUeXBlKQorICAgICAgICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0FycmF5Pih2bSgpLCBKU0FycmF5OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpT
RmluYWxPYmplY3Q+KHZtKCksIEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKyAgICAgICAgICAgICAgICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW5kZXhpbmdIZWFkZXJTaXplID0gMDsKICAgICAgICAgICAgICAgICBMVmFsdWUgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBtX291dC5pbnRQdHJaZXJvOwogICAgICAgICAgICAgICAg
IExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBtX291dC5pbnQzMlplcm87CkBAIC0xMzg5Nyw3ICsxMzg5
OSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hl
YWRlclNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAogICAgICAg
ICAgICAgICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwpAQCAtMTM5MTQsMTMgKzEzOTE2LDEzIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAog
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBoYXZlQnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc3BsYXRXb3JkcygKICAgICAgICAgICAgICAgICAgICAgZmFzdEJ1dHRl
cmZseVZhbHVlLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMigtc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSksCiAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogCkBAIC0x
Mzk0NSw3ICsxMzk0Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
ICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJ
bmRleGluZ0hlYWRlckFuZFZlY3Rvckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHlWYWx1ZSk7
CkBAIC0xMzk1NCw3ICsxMzk1Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZs
eSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5VmFsdWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEzOTcxLDcgKzEzOTczLDcgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihw
dWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
IAotICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIG1fb3V0LmludDMyWmVybywgdmVjdG9yTGVu
Z3RoLCBidXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRz
KG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSwgbV9vdXQuaW50MzJa
ZXJvLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSk7CiAKICAgICAgICAgICAgICAgICBIYXNoTWFw
PGludDMyX3QsIExWYWx1ZSwgRGVmYXVsdEhhc2g8aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4+IGluZGV4TWFwOwogICAgICAgICAgICAgICAgIFZl
Y3RvcjxpbnQzMl90PiBpbmRpY2VzOwpAQCAtMTQwMTcsNyArMTQwMTksNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwg
c3RvcmVzIHRvIHRoZSBhcnJheSBhcmUgc3RpbGwgc29tZXdoZXJlIGFib3ZlIHRoaXMgcG9pbnQu
CiAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwKiBoZWFwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIHRo
ZSBwcm92ZW4gdHlwZSBpZiB3ZSBoYWQgdGhlIEVkZ2UgZm9yIHRoZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHZhbHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1MzExCkBAIC0xNDA4MSw3ICsxNDA4Myw4IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQml0VmVjdG9yIHNldElubGluZU9m
ZnNldHM7Ci0gICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1
cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICAgICAgLy8gT09QUwor
ICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLmdldFBy
b3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAg
ICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZGF0YS5tX3Byb3BlcnRp
ZXNbaV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmtpbmQoKSAhPSBOYW1l
ZFByb3BlcnR5UExvYykKQEAgLTE0MDk5LDcgKzE0MTAyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCk7IGktLTspIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRJbmxpbmVPZmZzZXRzLmdldChpKSkKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NChtX291dC5pbnQ2NFplcm8sIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55
TnVtYmVyKCksIG9iamVjdCwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoaSkpKTsKICAgICAgICAgICAg
IH0KQEAgLTE0MTU0LDcgKzE0MTU3LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAg
bWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSkpOwogICAgICAgICAgICAgfSwgc2NvcGUpOwpAQCAtMTQyMjEsNyAr
MTQyMjQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZt
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0
cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC0xNDI0MSw3ICsxNDI0NCw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKIAogICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3SW50ZXJuYWxG
aWVsZE9iamVjdCgpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1Y3R1cmUo
KS50eXBlSW5mbygpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEpTQXJyYXlJdGVyYXRvclR5cGU6
CiAgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDxKU0FycmF5SXRlcmF0b3I+KG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xNDI1Miw3ICsxNDI1NSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKICAgICAgICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPEpTU2V0SXRlcmF0b3I+KG9wZXJhdGlvbk5ld1NldEl0ZXJhdG9yKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEpTUHJvbWlzZVR5cGU6Ci0gICAgICAgICAgICBpZiAobV9u
b2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8o
KSkKKyAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpT
SW50ZXJuYWxQcm9taXNlOjppbmZvKCkpCiAgICAgICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFs
aXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNJbnRlcm5hbFByb21pc2U+KG9wZXJhdGlv
bk5ld0ludGVybmFsUHJvbWlzZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjpp
bmZvKCkpOwpAQCAtMTQ2OTIsNiArMTQ2OTUsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbaWRlbnRpZmllck51bWJlcl0sIHN0b3Jh
Z2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpOwogICAgIH0KICAgICAKKyAgICAvLyBP
T1BTCiAgICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAogICAgICAgICBMVmFsdWUgb2Jq
ZWN0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkKQEAgLTE0NzA0LDExICsxNDcwOCwx
MSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBMVmFsdWUg
cmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKQotICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0
LCBwcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShvYmplY3QsIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocHJldmlvdXNTdHJ1
Y3R1cmUpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAogICAgICAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9hZFB0cihv
YmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwKLSAgICAgICAgICAgICAgICBwcmV2
aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5y
ZWdpc3RlclN0cnVjdHVyZShwcmV2aW91c1N0cnVjdHVyZSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUobmV4dFN0cnVjdHVyZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBudWtl
U3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHJlc3VsdCwgb2JqZWN0KTsKQEAgLTE0Nzg3LDkgKzE0
NzkxLDkgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5hcHBlbmRU
byhpbml0RG9uZSwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVy
ZSkKKyAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBwcmV2aW91c1N0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGlmIChw
cmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICBp
ZiAocHJldmlvdXNTdHJ1Y3R1cmUuY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAg
ICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLAogICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHksCkBAIC0xNDgwNywxNCArMTQ4MTEsMTQgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgIH0KICAgICAKICAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSgKLSAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVy
ZSogcHJldmlvdXMsIFN0cnVjdHVyZSogbmV4dCkKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZh
bHVlIG9sZFN0b3JhZ2UsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgcHJldmlvdXMsIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgbmV4dCkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMu
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICog
b3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKIAotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5l
d1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0Lm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAK
LSAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAg
ICAgIGlmIChwcmV2aW91cy5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgICAg
ICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSk7ICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiB2bUNhbGwocG9pbnRlclR5cGUoKSwg
b3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4UHJvcGVydHlTdG9yYWdlLCBtX3ZtVmFsdWUsIG9iamVj
dCwgbmV3QWxsb2NTaXplKTsKICAgICAgICAgfQpAQCAtMTY3NjMsNyArMTY3NjcsNyBAQCBJR05P
UkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgCiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgp
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSgpLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IElm
IHRoZSBhbGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5IGVtaXQgYSBub3JtYWwgQyBj
YWxsIHRvIHRoZSBhbGxvY2F0b3IKQEAgLTE2Nzg3LDcgKzE2NzkxLDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwg
JnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0
dXJlKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CkBAIC0xNjkzOSw3ICsxNjk0Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgYm9vbCBzaG91bGRJbml0aWFsaXplRWxlbWVudHMgPSBmYWxzZTsKICAg
ICAgICAgYm9vbCBzaG91bGRMYXJnZUFycmF5U2l6ZUNyZWF0ZUFycmF5U3RvcmFnZSA9IGZhbHNl
OwogICAgICAgICByZXR1cm4gYWxsb2NhdGVKU0FycmF5KAotICAgICAgICAgICAgcHVibGljTGVu
Z3RoLCB2ZWN0b3JMZW5ndGgsIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJ
bnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgc2hvdWxkSW5pdGlhbGl6ZUVsZW1lbnRz
LAorICAgICAgICAgICAgcHVibGljTGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIHdlYWtTdHJ1Y3R1cmUo
c3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpLCBz
aG91bGRJbml0aWFsaXplRWxlbWVudHMsCiAgICAgICAgICAgICBzaG91bGRMYXJnZUFycmF5U2l6
ZUNyZWF0ZUFycmF5U3RvcmFnZSk7CiAgICAgfQogCkBAIC0yMDgyNiwxMyArMjA4MzAsMzYgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmVJRChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX291
dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1
Y3R1cmUpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vcmV0dXJuIG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoMCk7
CiAgICAgfQogICAgIAogICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBBU1NFUlQoISFz
dHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRX
ZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBVTlVTRURfUEFS
QU0oc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludFB0cigwKTsKKyAgICAgICAgLy9yZXR1cm4gbV9vdXQuYWxyZWFk
eVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIH0K
KworICAgIExWYWx1ZSBzdHJvbmdTdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgLy8g
T09QUworICAgICAgICAvL3JldHVybiBmcm96ZW5Qb2ludGVyKG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1fbm9kZS0+c3RydWN0dXJlKCkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0
SW50UHRyKDApOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciBtYXNt
U3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
Ly8gT09QUworICAgICAgICAvLyByZXR1cm4gVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkp
OworICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgQ2FsbEZyYW1l
OwogY2xhc3MgU3RydWN0dXJlOwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBSZWdpc3RlcmVkU3Ry
dWN0dXJlOwotfTsKK30KIAogY2xhc3MgQ0NhbGxIZWxwZXJzIDogcHVibGljIEFzc2VtYmx5SGVs
cGVycyB7CiBwdWJsaWM6CkBAIC02NDQsNyArNjQ0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICYm
IHN0ZDo6aXNfc2FtZTxBcmcsIERGRzo6UmVnaXN0ZXJlZFN0cnVjdHVyZT46OnZhbHVlPgogICAg
IHNldHVwQXJndW1lbnRzSW1wbChBcmdDb2xsZWN0aW9uPG51bUdQUkFyZ3MsIG51bUdQUlNvdXJj
ZXMsIG51bUZQUkFyZ3MsIG51bUZQUlNvdXJjZXMsIG51bUNyb3NzU291cmNlcywgZXh0cmFHUFJB
cmdzLCBub25BcmdHUFJzLCBleHRyYVBva2U+IGFyZ1NvdXJjZVJlZ3MsIEFyZyBhcmcsIEFyZ3Mu
Li4gYXJncykKICAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzSW1wbDxPcGVyYXRpb25UeXBl
PihhcmdTb3VyY2VSZWdzLCBUcnVzdGVkSW1tUHRyKGFyZy5nZXQoKSksIGFyZ3MuLi4pOworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgICAgICAvL3NldHVw
QXJndW1lbnRzSW1wbDxPcGVyYXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBUcnVzdGVkSW1tUHRy
KGFyZy5nZXQoKSksIGFyZ3MuLi4pOworICAgICAgICBzZXR1cEFyZ3VtZW50c0ltcGw8T3BlcmF0
aW9uVHlwZT4oYXJnU291cmNlUmVncywgVHJ1c3RlZEltbVB0cihudWxscHRyKSwgYXJncy4uLik7
CiAgICAgfQogCiAjdW5kZWYgQ1VSUkVOVF9BUkdVTUVOVF9UWVBFCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443225</attachid>
            <date>2021-11-03 12:37:11 -0700</date>
            <delta_ts>2021-11-04 10:39:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>99686</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIwLDYgKzUyMCw0MiBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9J
bmhlcml0YW5jZShjb25zdCBDbGFzc0luZm8qKTsKIAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0
dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVM
aWtlKGNvbnN0IFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlw
ZSBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ltYm9sVHlwZToK
KyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNIZWFw
QmlnSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5cGU6CisgICAg
ICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0FycmF5Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAgICAgIGZpbHRl
cmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5nT2JqZWN0VXNl
LCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmplY3QuCisgICAg
Y2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBT
cGVjT2JqZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1cmUuY2xhc3NJ
bmZvKCkpOworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAgIEFTU0VSVChp
c1N1YnR5cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJ
bmZvSW5oZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJldHVybiBmaWx0
ZXJlZFJlc3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0Nl
bGwqKTsKIEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKEpTVmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0dXJuIHNwZWN1
bGF0ZWQgdHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBUcmlTdGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAgICAgIGJvb2wg
YWxsVHJ1ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0
dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0
cmluZ1R5cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlw
ZSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkgfHwgc3Ry
dWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAgICAgYWxsVHJ1
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjEz
LDcgKzIxMyw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50aXR5KFYKICAg
ICAgICAgYm9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5vZGUubV9zdHJ1
Y3R1cmUuaXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9IGZhbHNlOwog
ICAgICAgICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUgPSBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3RydWN0dXJlLnR5
cGVJbmZvKCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8IHR5cGUudHlw
ZSgpID09IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8fCB0eXBlLnR5
cGUoKSA9PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFNb2RlLmlzU3Ry
aWN0KCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7CkBAIC0yMjQs
NyArMjI0LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRpdHkoVgogICAg
ICAgICAgICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIElm
IGFsbCB0aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cgdGhlIGRldGFp
bHMgb2YgSlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAgYWxsU3RydWN0
dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9U
aGlzID09IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAgICAgICAgICAg
YWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS50b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXM7CiAgICAg
ICAgIH0pOwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAgICAgIHJldHVy
biBUb1RoaXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQubV9zdHJ1
Y3R1cmUuZm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1h
dGNoZWQgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gc3RydWN0dXJl
LnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC0yMjE1LDYgKzIyMTUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVJREVhcmx5ICE9IHN0cnVj
dHVyZUlETGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
ICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV92bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsKICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0yMjQwLDYgKzIyNDEsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5
UHJvdG90eXBlKCktPnN0cnVjdHVyZShtX3ZtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKS0+c3RydWN0dXJlKG1fdm0pOwpAQCAtMjI3Myw2ICsyMjc1LDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT09QUwogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
X3ZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRExhdGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1OCwxNiArMzE2
MSwxOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICBhdXRvJiBzdHJ1Y3R1cmVTZXQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVj
dHVyZTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNGaW5pdGUoKSAmJiBzdHJ1Y3R1
cmVTZXQuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJl
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZVNldC5vbmx5U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJlLT5yYXJlRGF0YUNvbmN1cnJlbnRseSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIXJhcmVEYXRhLT5jYWNoZWRQcm9wZXJ0eU5h
bWVzQ29uY3VycmVudGx5KG5vZGUtPm9wKCkgPT0gT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyA/
IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzIDogQ2FjaGVkUHJv
cGVydHlOYW1lc0tpbmQ6OktleXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmco
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNB
cnJheSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
Ly8gT09QUworICAgICAgICAgICAgICAgIC8vaWYgKGF1dG8qIHJhcmVEYXRhID0gc3RydWN0dXJl
LT5yYXJlRGF0YUNvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgaWYgKCEh
cmFyZURhdGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50bHkobm9kZS0+b3AoKSA9PSBP
YmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQ6OkdldE93
blByb3BlcnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5cykpIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1l
V2F0Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgbV9zdGF0
ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyAgICB9CisgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIApAQCAtMzM1NCwyMSArMzM1OSwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7
Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICBbJl0gKFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ2xvYmFs
T2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJl
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2xvYmFsT2Jq
ZWN0ICE9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdCAmJiBvaykgewotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dy
YXBoLmZyZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBPT1BTOgorICAgICAgICAv
L2lmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7Cisg
ICAgICAgIC8vICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOworICAg
ICAgICAvLyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgLy8gICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9zdHJ1Y3R1cmUuZm9yRWFjaCgKKyAgICAgICAgLy8gICAgICAgIFsmXSAoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgICAgICAgICBpZiAo
IWdsb2JhbE9iamVjdCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgLy8gICAgICAgICAgICBlbHNlIGlm
IChnbG9iYWxPYmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgLy8g
ICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgICAgIH0pOworICAgICAg
ICAvLyAgICBpZiAoZ2xvYmFsT2JqZWN0ICYmIG9rKSB7CisgICAgICAgIC8vICAgICAgICBzZXRD
b25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoSlNWYWx1ZShnbG9iYWxPYmplY3QpKSk7Cisg
ICAgICAgIC8vICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgfQorICAgICAgICAvL30KIAog
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBi
cmVhazsKQEAgLTM1ODIsMTAgKzM1ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgaWYgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9ubHlTdHJ1Y3R1
cmUoKSkgewotICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3Jh
cGguZnJlZXplKHN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cnVjdHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gICAgZmlsdGVyQnlW
YWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICAvLyAgICBicmVhazsKKyAgICAgICAgLy99CiAgICAgICAgIAogICAgICAgICAvLyBB
dyBzaHVja3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQogICAgICAgICBicmVhazsKQEAgLTM4NDUs
MTggKzM4NTIsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgYm9vbCBjYW5Gb2xkID0gIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xlYXIoKTsK
ICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwogICAgICAgICAgICAgdmFsdWUubV9zdHJ1
Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5
cGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRQcm90b3R5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYW5Gb2xkID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Y2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgIGlmICgh
cHJvdG90eXBlKQotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3RvdHlwZSAhPSBz
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKQorICAgICAgICAgICAgICAgICAgICBwcm90b3R5
cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAocHJvdG90eXBlICE9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAKQEAgLTQ1NDUsNyAr
NDU1NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgaWYgKGFic3RyYWN0VmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAg
ICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJl
LmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAg
ICAgICAgIG9rICY9IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgJiBi
aXRzKSA9PSBiaXRzOworICAgICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUudHlwZUluZm8o
KS5pbmxpbmVUeXBlRmxhZ3MoKSAmIGJpdHMpID09IGJpdHM7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5
Q29uc3RhbnRGb2xkaW5nKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGMKICAg
ICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25zKHZlY3Rvcik7CiAgICAgICAgIEFy
cmF5TW9kZXMgbmV3TW9kZXMgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rl
c0Zyb21TdHJ1Y3R1cmUodmVjdG9yW2ldLnByZXZpb3VzLmdldCgpKSkKLSAgICAgICAgICAgICAg
ICBuZXdNb2RlcyB8PSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dC5nZXQo
KSk7CisgICAgICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmUodmVjdG9yW2ldLnByZXZpb3VzKSkKKyAgICAgICAgICAgICAgICBuZXdNb2RlcyB8PSBhcnJh
eU1vZGVzRnJvbVN0cnVjdHVyZSh2ZWN0b3JbaV0ubmV4dCk7CiAgICAgICAgIH0KICAgICAgICAg
bV9hcnJheU1vZGVzIHw9IG5ld01vZGVzOwogICAgIH0KQEAgLTUwLDYgKzUwLDcgQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoYwogCiB2b2lkIEFic3RyYWN0VmFsdWU6
OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSwgU3RydWN0dXJlQ2xv
YmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgaWYgKCEhdmFsdWUg
JiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1
bHQgcmVzdWx0OwpAQCAtODcsOCArODgsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFw
aCYgZ3JhcGgsIFJlCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKICAgICAKICAgICBt
X3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBtX2FycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJv
bVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIG1fYXJyYXlNb2RlcyA9IGFycmF5TW9k
ZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlTGlrZShzdHJ1Y3R1cmUpOwogICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAg
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTk1LDYgKzE5Niw3IEBAIGJvb2wgQWJzdHJh
Y3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKIAogICAgIEFic3RyYWN0VmFsdWUgb2xkTWUg
PSAqdGhpczsKICAgICAKKyAgICAvLyBPT1BTCiAgICAgaWYgKGlzQ2xlYXIoKSkgewogICAgICAg
ICBGcm96ZW5WYWx1ZSogZnJvemVuVmFsdWUgPSBncmFwaC5mcmVlemUodmFsdWUpOwogICAgICAg
ICBpZiAoZnJvemVuVmFsdWUtPnBvaW50c1RvSGVhcCgpKSB7CkBAIC0yMTEsNyArMjEzLDcgQEAg
Ym9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgICAgICBtZXJnZVNw
ZWN1bGF0aW9uKG1fdHlwZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKTsKICAgICAgICAg
aWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZShncmFwaC5tX3ZtKSk7Ci0gICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMo
bV9hcnJheU1vZGVzLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKTsK
KyAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhtX2FycmF5TW9kZXMsIGFycmF5TW9kZXNGcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWVyZ2UoUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
bV92YWx1ZSAhPSB2YWx1ZSkKQEAgLTMzNSw4ICszMzcsOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAKIGJvb2wgQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvdWxkQmVU
eXBlKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAm
JiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgp
KSkKKyAgICByZXR1cm4gY291bGRCZVR5cGUoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlTGlrZShz
dHJ1Y3R1cmUpKQorICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1
Y3R1cmUoc3RydWN0dXJlKSkKICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0
dXJlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxs
KSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlVHJhbnNpdGlvbihmcm9tLCB0byk7
Ci0gICAgICAgICAgICBvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbihhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZShmcm9tLmdldCgpKSwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodG8uZ2V0KCkp
KTsKKyAgICAgICAgICAgIG9ic2VydmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKGFycmF5TW9kZXNG
cm9tU3RydWN0dXJlKGZyb20pLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSh0bykpOwogICAgICAg
ICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgm
IGdyCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAg
IGlmICgoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSAmIGluZGV4aW5nTW9kZU1hc2spICE9IChz
aGFwZSB8IElzQXJyYXkpKQorICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUuaW5kZXhpbmdNb2Rl
KCkgJiBpbmRleGluZ01vZGVNYXNrKSAhPSAoc2hhcGUgfCBJc0FycmF5KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
NjksNyArNDY5LDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICBpZiAo
KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgJiBpbmRleGluZ01vZGVNYXNrKSAhPSBzaGFwZSkK
KyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgaW5kZXhpbmdNb2Rl
TWFzaykgIT0gc2hhcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDgyLDcgKzQ4Miw3IEBAIGJvb2wgQXJyYXlNb2Rl
OjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3Ry
dWN0dXJlW2ldOwotICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpICYg
KGluZGV4aW5nTW9kZU1hc2sgJiB+SXNBcnJheSkpICE9IHNoYXBlKQorICAgICAgICAgICAgaWYg
KChzdHJ1Y3R1cmUuaW5kZXhpbmdNb2RlKCkgJiAoaW5kZXhpbmdNb2RlTWFzayAmIH5Jc0FycmF5
KSkgIT0gc2hhcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDkyLDEyICs0OTIsMTggQEAgYm9vbCBBcnJheU1vZGU6
OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgIC8vIFNvLCB3ZSBzaG91bGQgcGVyZm9ybSB0
aGUgc2FtZSBjaGVjayB0byB0aGUgQ2hlY2tTdHJ1Y3R1cmUgaGVyZS4KICAgICBjYXNlIEFycmF5
OjpPcmlnaW5hbEFycmF5OgogICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQ29weU9uV3JpdGVBcnJh
eTogeworICAgICAgICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShn
cmFwaCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAg
LyoKICAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTdHJ1Y3R1cmUqIG9yaWdpbmFsU3RydWN0dXJlID0g
b3JpZ2luYWxBcnJheVN0cnVjdHVyZShncmFwaCwgbm9kZSk7CiAgICAgICAgIGlmICh2YWx1ZS5t
X3N0cnVjdHVyZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgcmV0dXJuIHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKS5nZXQoKSA9PSBvcmln
aW5hbFN0cnVjdHVyZTsKKyAgICAgICAgKi8KICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTU0NSw5ICs1NTEsOSBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3Jh
cGgmIGdyCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtp
XTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShz
dHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElz
QXJyYXkpKQorICAgICAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSAm
IElzQXJyYXkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU2Myw5ICs1NjksOSBAQCBib29sIEFy
cmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0Fu
eUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQorICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3
OCw3ICs1ODQsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUu
aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgi
CisjaW5jbHVkZSAiREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlNwZWN1bGF0
ZWRUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQ5LDYgKzQ1MCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBjb252ZXJzaW9uKCkgIT0gQXJyYXk6OkFzSXM7CiAgICAgfQogCisg
ICAgYm9vbCBzdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1vZGVGaWx0ZXJpbmcoUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0FscmVh
ZHlDaGVja2VkKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSksIGFycmF5TW9kZXNU
aGF0UGFzc0ZpbHRlcmluZygpKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBDYWxsZWQgZnJvbSB0
eXBlIGNoZWNrIGhvaXN0aW5nLiBDaGVjayBpZiBpdCdzIG9rLgogICAgIGJvb2wgc3RydWN0dXJl
V291bGRQYXNzQXJyYXlNb2RlRmlsdGVyaW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZChhcnJheU1vZGVzRnJvbVN0
cnVjdHVyZShzdHJ1Y3R1cmUpLCBhcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4MiwxNiArODgyLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFByb3Bl
cnR5Q2hlY2ssIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKLSAgICAg
ICAgLy8gdGhpcyBnZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNrKCkg
c2luY2Ugd2UnbGwgbm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCi0gICAgICAgIC8vIG9iamVjdCdz
IHN0cnVjdHVyZSBhcyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KLSAgICAg
ICAgTm9kZSogb2JqZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3ROb2RlOwotICAg
IH0KLSAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgYXV0byBnZXRWYWx1
ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0ID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAg
LTQ2MjMsNiArNDYxMywxMCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFz
ZSwgCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNpbXBsaWZ5R2V0QnlTdGF0dXMoTm9kZSogYmFz
ZSwgR2V0QnlTdGF0dXMmIGdldEJ5U3RhdHVzKQogeworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsK
KyAgICBVTlVTRURfUEFSQU0oZ2V0QnlTdGF0dXMpOworICAgIC8vIE9PUFM6CisgICAgLyoKICAg
ICAvLyBBdHRlbXB0IHRvIHJlZHVjZSB0aGUgc2V0IG9mIHRoaW5ncyBpbiB0aGUgR2V0QnlTdGF0
dXMuCiAgICAgaWYgKGJhc2UtPm9wKCkgPT0gTmV3T2JqZWN0KSB7CiAgICAgICAgIGJvb2wgb2sg
PSB0cnVlOwpAQCAtNDYzOCw2ICs0NjMyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2ltcGxp
ZnlHZXRCeVN0YXR1cwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBnZXRCeVN0YXR1cy5m
aWx0ZXIoYmFzZS0+c3RydWN0dXJlKCkuZ2V0KCkpOwogICAgIH0KKyAgICAqLwogfQogCiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xv
d1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxlbnRT
cGlsbChtX3BsYW5zW2ldKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIobV9zaXplR1BSLCBtX3N0b3JhZ2VHUFIpOwotICAgICAg
ICBpZiAobV9jb250aWd1b3VzU3RydWN0dXJlLmdldCgpICE9IG1fYXJyYXlTdG9yYWdlT3JDb250
aWd1b3VzU3RydWN0dXJlLmdldCgpKSB7CisgICAgICAgIGlmIChtX2NvbnRpZ3VvdXNTdHJ1Y3R1
cmUgIT0gbV9hcnJheVN0b3JhZ2VPckNvbnRpZ3VvdXNTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IGppdC0+bV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgbV9zaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKICAgICAg
ICAgICAgIGppdC0+bV9qaXQubW92ZShTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cihtX2Nv
bnRpZ3VvdXNTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBqaXQtPm1faml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIy
Miw3ICsxMjIyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CiAgICAgICAgIHdyaXRlKEpTQ2Vs
bF9pbmRleGluZ1R5cGUpOwogCi0gICAgICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPm5leHQt
PnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pIHsK
KyAgICAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09
IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKSB7CiAgICAgICAgICAgICAvLyBXZSB1
c2UgdGhpcyAiZGVsZXRlIGZlbmNlIiB0byBtb2RlbCB0aGUgcHJvcGVyIGFsaWFzaW5nIG9mIGZ1
dHVyZSBzdG9yZXMuCiAgICAgICAgICAgICAvLyBCb3RoIGluIERGRyBhbmQgd2hlbiB3ZSBsb3dl
ciB0byBCMywgd2UgbW9kZWwgYWxpYXNpbmcgb2YgcHJvcGVydGllcyBieQogICAgICAgICAgICAg
Ly8gcHJvcGVydHkgIG5hbWUuIEluIGEgd29ybGQgd2l0aG91dCBkZWxldGUsIHRoYXQgYWxzbyBt
b2RlbHMge2Jhc2UsIHByb3BlcnR5T2Zmc2V0fS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAy
ODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2MSw4IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgICAgIGNhc2UgT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lczoKICAgICAgICAgICAgIGNh
c2UgT2JqZWN0S2V5czogeworICAgICAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgICAg
ICAvKgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0VXNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0cnVjdHVyZVNldCA9IG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNGaW5pdGUoKSAmJiBzdHJ1Y3R1cmVTZXQuc2l6ZSgpID09
IDEpIHsKQEAgLTg3Niw2ICs4NzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTEw
NjEsNyArMTA2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGFic3RyYWN0VmFs
dWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgICAgICAgICBib29sIG9r
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZS5tX3N0cnVjdHVyZS5m
b3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkgJiBiaXRzKSA9PSBiaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgb2sgJj0gKHN0cnVj
dHVyZS50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpICYgYml0cykgPT0gYml0czsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lv
biAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDEzIEBAIERlc2lyZWRUcmFuc2l0
aW9uczo6fkRlc2lyZWRUcmFuc2l0aW9ucygKIHsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlv
bnM6OmFkZExhemlseShDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQordm9pZCBEZXNpcmVkVHJhbnNpdGlv
bnM6OmFkZExhemlseShDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBvbGRTdHJ1Y3R1cmUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlKQogewot
ICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKERlc2lyZWRUcmFuc2l0aW9uKGNvZGVPcmlnaW5Pd25l
ciwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKTsKKyAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbk93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0ob2xkU3RydWN0dXJlKTsKKyAgICBVTlVTRURf
UEFSQU0obmV3U3RydWN0dXJlKTsKKyAgICAvLyBPT1BTCisgICAgLy9tX3RyYW5zaXRpb25zLmFw
cGVuZChEZXNpcmVkVHJhbnNpdGlvbihjb2RlT3JpZ2luT3duZXIsIG9sZFN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlKSk7CiB9CiAKIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0m
IHZtLCBDb21tb25EYXRhKiBjb21tb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0aW9ucyhD
b2RlQmxvY2sqKTsKICAgICB+RGVzaXJlZFRyYW5zaXRpb25zKCk7CiAKLSAgICB2b2lkIGFkZExh
emlseShDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7
CisgICAgdm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUpOwogICAgIHZvaWQgcmVhbGx5QWRkKFZN
JiwgQ29tbW9uRGF0YSopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRDaGlsZHJlbihWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDcgKzI2Miw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFzVHJhbnNp
dGlvbigpKSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQo
bm9kZS0+dHJhbnNpdGlvbigpLCBjb250ZXh0KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgb3V0LnByaW50KCIsIElEOiIsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+aWQoKSk7Cisg
ICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy9vdXQucHJpbnQoIiwgSUQ6Iiwgbm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0LT5pZCgpKTsKICNlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBS
YXdQb2ludGVyKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC5nZXQoKSkpOwogI2VuZGlmCkBAIC0x
MjY5LDcgKzEyNzAsMTMgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgK
IHsKICAgICBpZiAoIWJhc2UgfHwgIWJhc2UuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKLSAgICAKKworCisgICAgLy8gT09QUzoKKyAgICBVTlVTRURfUEFSQU0oc3RydWN0
dXJlU2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgIC8qCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZVNldC5zaXplKCk7IGktLTspIHsKQEAgLTEz
MTEsNiArMTMxOCw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICByZXR1cm4gb2JqZWN0LT5nZXREaXJlY3RD
b25jdXJyZW50bHkoc3RydWN0dXJlLCBvZmZzZXQpOworICAgICovCiB9CiAKIEpTVmFsdWUgR3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpAQCAtMTQ4NSw2ICsxNDkzLDEyIEBAIEZyb3pl
blZhbHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IG1fZnJvemVuVmFsdWVzLmFkZChmcm96ZW5WYWx1ZSk7CiB9CiAKK0Zy
b3plblZhbHVlKiBHcmFwaDo6ZnJlZXplKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUpCit7CisgICAgLy8g
T09QUworICAgIHJldHVybiBudWxscHRyOworfQorCiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6
ZVN0cm9uZyhKU1ZhbHVlIHZhbHVlKQogewogICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVl
emUodmFsdWUpOwpAQCAtMTU0OSw2ICsxNTYzLDcgQEAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBHcmFw
aDo6cmVnaXN0ZXJTdHJ1YwogCiB2b2lkIEdyYXBoOjpyZWdpc3RlckFuZFdhdGNoU3RydWN0dXJl
VHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgbV9w
bGFuLndlYWtSZWZlcmVuY2VzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZSk7CiAgICAgbV9wbGFuLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7CiB9CkBAIC0xNzMwLDYgKzE3NDUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IEdyYXBoOjptZXRoCiAKIGJvb2wgR3JhcGg6OmdldFJlZ0V4cFByb3RvdHlwZVByb3BlcnR5KEpT
T2JqZWN0KiByZWdFeHBQcm90b3R5cGUsIFN0cnVjdHVyZSogcmVnRXhwUHJvdG90eXBlU3RydWN0
dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlJiByZXR1cm5KU1ZhbHVlKQogewor
ICAgIC8vIE9PUFMKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSByZWdFeHBQcm90b3R5cGVT
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzgwLDYgKzE3OTYsOCBAQCBib29s
IEdyYXBoOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2VzCiAgICAgaWYgKGhhc0V4aXRTaXRl
KGNvZGVPcmlnaW4sIEJhZENhY2hlKSB8fCBoYXNFeGl0U2l0ZShjb2RlT3JpZ2luLCBCYWRDb25z
dGFudENhY2hlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gT09QUworCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KTsKICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgcmVnaXN0ZXJTdHJ1
Y3R1cmUoc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKQEAgLTE4MjksNiArMTg0NywxMiBAQCBib29s
IEdyYXBoOjpjYW5Eb0Zhc3RTcHJlYWQoTm9kZSogbm9kZSwgCiAgICAgLy8gVGhlIHBhcmFtZXRl
ciAndmFsdWUnIGlzIHRoZSBBYnN0cmFjdFZhbHVlIGZvciBjaGlsZDEgKHRoZSB0aGluZyBiZWlu
ZyBzcHJlYWQpLgogICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNwcmVhZCk7CiAKKyAgICAvLyBP
T1BTCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0obm9kZSk7Cisg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLyoKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpICE9IEFycmF5VXNlKSB7CiAgICAgICAgIC8vIE5vdGU6IHdlIG9ubHkgc3BlY3VsYXRlIG9u
IEFycmF5VXNlIHdoZW4gd2UndmUgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgd2F0Y2hwb2ludHMKICAg
ICAgICAgLy8gdG8gcHJvdmUgdGhhdCB0aGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIG5vbi1vYnNl
cnZhYmxlIHN0YXJ0aW5nIGZyb20gQXJyYXlQcm90b3R5cGUuCkBAIC0xODU2LDYgKzE4ODAsNyBA
QCBib29sIEdyYXBoOjpjYW5Eb0Zhc3RTcHJlYWQoTm9kZSogbm9kZSwgCiAgICAgfSk7CiAKICAg
ICByZXR1cm4gYWxsR29vZDsKKyAgICAqLwogfQogCiB2b2lkIEdyYXBoOjpjbGVhckNQU0NGR0Rh
dGEoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjg0
NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDEsNiArMjQxLDcgQEAgcHVibGljOgogICAgIAogICAgIEZyb3plblZhbHVlKiBm
cmVlemUoSlNWYWx1ZSk7IC8vIFdlIHVzZSB3ZWFrIGZyZWV6aW5nIGJ5IGRlZmF1bHQuCiAgICAg
RnJvemVuVmFsdWUqIGZyZWV6ZVN0cm9uZyhKU1ZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVl
emUodmFsdWUpLT5zdHJlbmd0aGVuVG8oU3Ryb25nVmFsdWUpLgorICAgIEZyb3plblZhbHVlKiBm
cmVlemUoUmVnaXN0ZXJlZFN0cnVjdHVyZSk7CiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Db25z
dGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFsdWUpOwogICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2NiwxMCArMjY2LDE1IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEp1bXAgYnJhbmNoV2Vha1N0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVm
dCwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB3ZWFrU3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB3ZWFrU3RydWN0dXJlLmdldCgpOworICAgICAgICAvL1N0cnVj
dHVyZSogc3RydWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW0z
MihzdHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHdlYWtTdHJ1Y3R1cmUpOworICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShjb25kKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9K
dW1wIHJlc3VsdCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUt
PmlkKCkpKTsKKyAgICAgICAgLy9yZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gSnVtcCgp
OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDExIEBAIHZvaWQgTm9k
ZTo6cmVtb3ZlKEdyYXBoJiBncmFwaCkKICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBt
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHNldDsKICAgICAgICAgZm9yIChNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA6IGRhdGEuY2FzZXMpIHsKICAgICAgICAgICAgIGdldENhc2Uuc2V0
KCkuZm9yRWFjaCgKICAgICAgICAgICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAgICAgICAgIGNvbnZlcnRUb0NoZWNrU3RydWN0dXJlKGdyYXBoLmFk
ZFN0cnVjdHVyZVNldChzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2
aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI4LDcgKzkyOCw3IEBA
IHByaXZhdGU6CiAgICAgQWxsb2NhdGlvbiogaGFuZGxlSW50ZXJuYWxGaWVsZENsYXNzKE5vZGUq
IG5vZGUsIEhhc2hNYXA8UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IsIExhenlOb2RlPiYgd3Jp
dGVzKQogICAgIHsKICAgICAgICAgQWxsb2NhdGlvbiogcmVzdWx0ID0gJm1faGVhcC5uZXdBbGxv
Y2F0aW9uKG5vZGUsIEFsbG9jYXRpb246OktpbmQ6OkludGVybmFsRmllbGRPYmplY3QpOwotICAg
ICAgICB3cml0ZXMuYWRkKFN0cnVjdHVyZVBMb2MsIExhenlOb2RlKG1fZ3JhcGguZnJlZXplKG5v
ZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpOworICAgICAgICB3cml0ZXMuYWRkKFN0cnVjdHVyZVBM
b2MsIExhenlOb2RlKG1fZ3JhcGguZnJlZXplKG5vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAgICAg
ICBhdXRvIGluaXRpYWxWYWx1ZXMgPSBJbnRlcm5hbEZpZWxkQ2xhc3M6OmluaXRpYWxWYWx1ZXMo
KTsKICAgICAgICAgc3RhdGljX2Fzc2VydChpbml0aWFsVmFsdWVzLnNpemUoKSA9PSBJbnRlcm5h
bEZpZWxkQ2xhc3M6Om51bWJlck9mSW50ZXJuYWxGaWVsZHMpOyAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluaXRpYWxWYWx1ZXMuc2l6ZSgpOyArK2lu
ZGV4KQpAQCAtOTU1LDcgKzk1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB0YXJnZXQgPSAm
bV9oZWFwLm5ld0FsbG9jYXRpb24obm9kZSwgQWxsb2NhdGlvbjo6S2luZDo6T2JqZWN0KTsKICAg
ICAgICAgICAgIHRhcmdldC0+c2V0U3RydWN0dXJlcyhub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgICAgICB3cml0ZXMuYWRkKAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVBMb2MsIExhenlO
b2RlKG1fZ3JhcGguZnJlZXplKG5vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpOworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVBMb2MsIExhenlOb2RlKG1fZ3JhcGguZnJlZXplKG5vZGUtPnN0cnVj
dHVyZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBOZXdGdW5jdGlv
bjoKQEAgLTk4Miw3ICs5ODIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBOZXdJbnRlcm5hbEZpZWxkT2JqZWN0OiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5zdHJ1Y3R1cmUoKS50eXBlSW5mbygpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBKU0Fy
cmF5SXRlcmF0b3JUeXBlOgogICAgICAgICAgICAgICAgIHRhcmdldCA9IGhhbmRsZUludGVybmFs
RmllbGRDbGFzczxKU0FycmF5SXRlcmF0b3I+KG5vZGUsIHdyaXRlcyk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC05OTMsMTAgKzk5MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IHRhcmdldCA9IGhhbmRsZUludGVybmFsRmllbGRDbGFzczxKU1NldEl0ZXJhdG9yPihub2RlLCB3
cml0ZXMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBKU1Byb21p
c2VUeXBlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkK
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaGFuZGxlSW50ZXJuYWxGaWVsZENsYXNzPEpT
SW50ZXJuYWxQcm9taXNlPihub2RlLCB3cml0ZXMpOwogICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IEpTUHJvbWlzZTo6aW5mbygpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpTUHJvbWlzZTo6aW5mbygpKTsKICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gaGFuZGxlSW50ZXJuYWxGaWVsZENsYXNzPEpTUHJvbWlzZT4o
bm9kZSwgd3JpdGVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKICAgICAgICAgICAgIHRhcmdldCA9IG1faGVhcC5vbmx5TG9jYWxBbGxvY2F0aW9uKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNP
YmplY3RBbGxvY2F0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICB3cml0ZXMuYWRkKFN0cnVjdHVy
ZVBMb2MsIExhenlOb2RlKG1fZ3JhcGguZnJlZXplKEpTVmFsdWUobm9kZS0+dHJhbnNpdGlvbigp
LT5uZXh0LmdldCgpKSkpKTsKKyAgICAgICAgICAgICAgICB3cml0ZXMuYWRkKFN0cnVjdHVyZVBM
b2MsIExhenlOb2RlKG1fZ3JhcGguZnJlZXplKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpKTsK
ICAgICAgICAgICAgICAgICB0YXJnZXQtPnNldFN0cnVjdHVyZXMobm9kZS0+dHJhbnNpdGlvbigp
LT5uZXh0KTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1faGVhcC5lc2Nh
cGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKQEAgLTI1MDMsNyArMjUwMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgc2V0IGlzIGNvbnNlcnZhdGl2ZS4g
VGhpcyBzZXQgY2FuIGluY2x1ZGUgU3RydWN0dXJlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBsZWdp
dCBwcm9wZXJ0eS4KICAgICAgICAgICAgICAgICAvLyBXZSBmaWx0ZXIgb3V0IHN1Y2ggYW4gYXBw
YXJlbnRseSBpbmFwcHJvcHJpYXRlIHN0cnVjdHVyZXMgaGVyZSBzaW5jZSBNdWx0aVB1dEJ5T2Zm
c2V0IGFzc3VtZXMgYWxsIHRoZSBzdHJ1Y3R1cmVzCiAgICAgICAgICAgICAgICAgLy8gaGF2ZSB2
YWxpZCBjb3JyZXNwb25kaW5nIG9mZnNldCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgotICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpICE9IGludmFsaWRP
ZmZzZXQpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5nZXRDb25jdXJyZW50bHkodWlk
KSAhPSBpbnZhbGlkT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVu
ZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQogCkBAIC0yNTE1LDEzICsyNTE1LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlcy5iZWdpbigpLAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZXMuZW5kKCksCiAgICAgICAgICAgICAgICAgW3VpZF0gKFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgYSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBiKSAtPiBib29sIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGEtPmdldENvbmN1cnJlbnRseSh1aWQpIDwgYi0+Z2V0Q29uY3VycmVu
dGx5KHVpZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmdldENvbmN1cnJlbnRseSh1
aWQpIDwgYi5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlcy5zaXplKCkpOwotICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgZmlyc3RPZmZzZXQgPSBzdHJ1Y3R1cmVzWzBdLT5nZXRDb25jdXJyZW50
bHkodWlkKTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IGZpcnN0T2Zmc2V0ID0gc3RydWN0
dXJlc1swXS5nZXRDb25jdXJyZW50bHkodWlkKTsKIAotICAgICAgICAgICAgaWYgKGZpcnN0T2Zm
c2V0ID09IHN0cnVjdHVyZXMubGFzdCgpLT5nZXRDb25jdXJyZW50bHkodWlkKSkgeworICAgICAg
ICAgICAgaWYgKGZpcnN0T2Zmc2V0ID09IHN0cnVjdHVyZXMubGFzdCgpLmdldENvbmN1cnJlbnRs
eSh1aWQpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGJhc2U7CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdoZW4gd2UgZGVjaWRlIHRvIHNpbmsgb2JqZWN0cyB3aXRoIGEK
ICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBzdG9yYWdlLCB3ZSBzaG91bGQgaGFuZGxlIG5v
bi1pbmxpbmUgb2Zmc2V0cy4KQEAgLTI1NDMsMTEgKzI1NDMsMTMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlP
ZmZzZXREYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CiAKKyAgICAgICAgICAgIC8vIE9PUFM6CisgICAgICAgICAgICAvKgog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZz
ZXQgPSBmaXJzdE9mZnNldDsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgY3VycmVudFNl
dDsKICAgICAgICAgICAgICAgICBmb3IgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDog
c3RydWN0dXJlcykgewotICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICAgICAgICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY3VycmVudE9mZnNldCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvdXIgYW5hbHlzaXMgdHJlYXRzIE11bHRpUHV0
QnlPZmZzZXQgbGlrZSBhbiBlc2NhcGUsIHdlIG9ubHkgaGF2ZSB0bwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGVhbCB3aXRoIHN0b3JpbmcgcmVzdWx0cyB0aGF0IHdvdWxkIGhhdmUgYmVl
biBwcmV2aW91c2x5IHN0b3JlZCBieSBQdXRCeU9mZnNldApAQCAtMjU2Miw2ICsyNTY0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFu
dHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJy
ZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAqLwogCiAgICAgICAgICAg
ICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZz
ZXQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMTUsNyArMTExNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIE5ld0ludGVybmFsRmllbGRPYmplY3Q6Ci0gICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShtX2N1cnJlbnROb2Rl
LT5zdHJ1Y3R1cmUoKS5nZXQoKSkpOworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVMaWtlKG1fY3VycmVudE5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5U2xpY2U6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlcmVkU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDcgQEAg
Y2xhc3MgUmVnaXN0ZXJlZFN0cnVjdHVyZSB7CiBwdWJsaWM6CiAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSgpID0gZGVmYXVsdDsKIAotICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBnZXQoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisgICAgLy9TdHJ1Y3R1cmUqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBnZXQoKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUmIG90aGVyKSBjb25zdAogICAgIHsKQEAgLTU1LDkgKzU0LDM4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICEhZ2V0KCk7CiAgICAgfQogCisgICAgVHlwZUluZm8gdHlw
ZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+dHlwZUluZm8oKTsgfQorICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7IH0K
KyAgICBib29sIGhhc1BvbHlQcm90bygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5oYXNQ
b2x5UHJvdG8oKTsgfQorICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOyB9CisgICAgVHJhbnNpdGlvbktpbmQg
dHJhbnNpdGlvbktpbmQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+dHJhbnNpdGlvbktp
bmQoKTsgfQorICAgIC8vIE9PUFMKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiB0eXBlSW5m
bygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKTsg
fQorICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7IH0KKyAgICBib29sIGNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCk7IH0KKyAgICBWZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gZ2V0UHJvcGVydGllc0NvbmN1
cnJlbnRseSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5
KCk7IH0KKyAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCk7IH0KKyAgICBQcm9wZXJ0eU9m
ZnNldCBnZXRDb25jdXJyZW50bHkoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRy
aWJ1dGVzKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgdW51c2VkOworICAgICAgICBy
ZXR1cm4gZ2V0Q29uY3VycmVudGx5KHVpZCwgdW51c2VkKTsKKyAgICB9CisgICAgYm9vbCBpc1Zh
bGlkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KTsgfQorICAgIGJvb2wgZGZnU2hvdWxkV2F0Y2goKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKTsgfQorCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaDsKIAorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorCiAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dDo6ZmlsdGVyKFNwZWMKIHsKICAgICBnZW5lcmljRmlsdGVyKAogICAgICAgICBbJl0gKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiB0
eXBlICYgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHlwZSAmIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJl
KTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0OjpmaWx0ZXJBcnJheQogewogICAgIGdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsm
XSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXMgJiBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZShzdHJ1Y3R1cmUpOwogICAgICAgICB9KTsKIH0KIApAQCAtNjksNyArNjksNyBAQCBTcGVj
dWxhdGVkVHlwZSBSZWdpc3RlcmVkU3RydWN0dXJlU2V0OjpzCiAgICAgU3BlY3VsYXRlZFR5cGUg
cmVzdWx0ID0gU3BlY05vbmU7CiAgICAgZm9yRWFjaCgKICAgICAgICAgWyZdIChSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihyZXN1
bHQsIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIG1lcmdlU3BlY3VsYXRpb24ocmVzdWx0LCBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVMaWtl
KHN0cnVjdHVyZSkpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzks
MTggKzc5LDIyIEBAIEFycmF5TW9kZXMgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldDo6YXJyYXkKICAg
ICBBcnJheU1vZGVzIHJlc3VsdCA9IDA7CiAgICAgZm9yRWFjaCgKICAgICAgICAgWyZdIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgbWVyZ2VBcnJheU1vZGVz
KHJlc3VsdCwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSk7CisgICAg
ICAgICAgICBtZXJnZUFycmF5TW9kZXMocmVzdWx0LCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShz
dHJ1Y3R1cmUpKTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0Ojp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJl
ZmVyZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25zdAogeworICAgIFVOVVNFRF9QQVJBTSh0
cmFja2VkUmVmZXJlbmNlcyk7CiAgICAgLy8gVGhlIHR5cGUgc3lzdGVtIHNob3VsZCBoZWxwIHVz
IGhlcmUsIGJ1dCBwcm90ZWN0IHBlb3BsZSBmcm9tIGdldHRpbmcgdGhhdCB3cm9uZyB1c2luZyBi
aXR3aXNlX2Nhc3Qgb3Igc29tZXRoaW5nIGNyYXp5LgorICAgIC8vIE9PUFMKKyAgICAvKgogICAg
IGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsK
ICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKHN0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgICAgIH0pOworICAgICovCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldC5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAgKzU3
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAorICAg
IC8vIE9PUFMKICAgICBTdHJ1Y3R1cmVTZXQgdG9TdHJ1Y3R1cmVTZXQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgU3RydWN0dXJlU2V0IHJlc3VsdDsKLSAgICAgICAgZm9yRWFjaChbJl0gKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7IHJlc3VsdC5hZGQoc3RydWN0dXJlLmdldCgpKTsg
fSk7CisgICAgICAgIC8vZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
KSB7IHJlc3VsdC5hZGQoc3RydWN0dXJlLmdldCgpKTsgfSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MSw3ICszNDEsNyBAQCBi
b29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIGlmICh2YWx1
ZS5pc0luZmluaXRlKCkgfHwgdmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIHZhbHVlWzBdLmdldCgpID09IGdyYXBoLm1fdm0uZ2V0
dGVyU2V0dGVyU3RydWN0dXJlOworICAgICAgICByZXR1cm4gdmFsdWVbMF0uY2xhc3NJbmZvKCkg
PT0gZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwogICAgIH0K
IAogICAgIGNhc2UgQm90dG9tVmFsdWU6CkBAIC00MTMsMTEgKzQxMywxMSBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIGlmICh2YWx1ZS5pc0luZmlu
aXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgU3RydWN0dXJlKiB0aGlzU3Ry
dWN0dXJlID0gdmFsdWVbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodGhpc1N0cnVjdHVyZS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgdGhpc1N0cnVjdHVyZSA9IHZhbHVlW2ldOworICAgICAgICAgICAgaWYgKHRoaXNTdHJ1Y3R1
cmUuaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKLSAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGNoZWNrT2Zmc2V0ID0gdGhpc1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBjaGVja09mZnNl
dCA9IHRoaXNTdHJ1Y3R1cmUuZ2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CiAgICAg
ICAgICAgICBpZiAoY2hlY2tPZmZzZXQgIT0gZGVzaXJlZE9mZnNldCB8fCAhKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtNDQ2LDEwICs0NDYsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1
ZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSA9
IHZhbHVlW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKHRoaXNTdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHRoaXNT
dHJ1Y3R1cmUgPSB2YWx1ZVtpXTsKKyAgICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaWYgKCF0aGlzU3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICBpZiAoIXRoaXNTdHJ1Y3R1cmUuaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ5Miw3ICs0OTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgICAgIGJvb2wgaXNTYWZlID0gdHJ1ZTsKICAgICAgICAgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8gPSBub2RlLT5yZXF1aXJlZERPTUpJVENsYXNzSW5mbygpOwogICAgICAgICBz
dHJ1Y3R1cmVzLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewot
ICAgICAgICAgICAgaXNTYWZlICY9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NP
ZihjbGFzc0luZm8pOworICAgICAgICAgICAgaXNTYWZlICY9IHN0cnVjdHVyZS5jbGFzc0luZm8o
KS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbyk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4g
aXNTYWZlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYwNyw3ICszNjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgb2xkU3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9u
KCktPm5leHQ7Ci0gICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRk
TGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0
dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBtX2ppdC5ncmFwaCgpLm1f
cGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseShub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9y
aWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKIAogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzAwLDcgKzI3MDAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3VHlwZWRBcnJhCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgYXV0byB0
eXBlZEFycmF5VHlwZSA9IG5vZGUtPnR5cGVkQXJyYXlUeXBlKCk7CiAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkp
OwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS5nZXQoKSk7CiAKICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQ1Mk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVn
IHNpemVHUFIgPSBzaXplLmdwcigpOwpAQCAtNDU0Myw3ICs0NTQyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CiAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgb2xkU3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlv
bigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUg
PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7Ci0gICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFu
LnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2lu
T3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICBtX2ppdC5ncmFwaCgpLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseShub2RlLT5vcmln
aW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJl
KTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtNDU1MSw3ICs0
NTUwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUo
KSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0
cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSk7CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlw
ZUZsYWdzKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
LSAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1N0
cnVjdHVyZS0+aWQoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBzdG9yZVN0cnVjdHVyZUlEKG5ld1N0cnVj
dHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEyICs5NCwxMiBA
QCBTcGVjdWxhdGl2ZUpJVDo6flNwZWN1bGF0aXZlSklUKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlLCBHUFJSZWcgc3RvcmFnZUdQUiwgdW5zaWduZWQgbnVtRWxlbWVudHMs
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKLSAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc3Ry
dWN0dXJlLT5pbmRleGluZ01vZGUoKSkpOwotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShz
dHJ1Y3R1cmUuaW5kZXhpbmdNb2RlKCkpKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpOwogICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIg
PSBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUpOwogCi0gICAgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7Ci0gICAgdW5zaWduZWQg
b3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKTsKKyAg
ICB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMih0aGlzKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CiAKICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoID49IG51bUVsZW1lbnRzKTsKLSAg
ICB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3Ro
KHN0cnVjdHVyZS5nZXQoKSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB2ZWN0b3JMZW5ndGggPSBCdXR0
ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZS5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB2ZWN0b3JMZW5ndGgpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yOwot
ICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGUoKSA9PSBKU1R5cGU6OkFycmF5VHlwZSkKKyAgICBpZiAo
c3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEpTVHlwZTo6QXJyYXlUeXBlKQogICAgICAg
ICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTQXJyYXk+
KHZtLCBKU0FycmF5OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSksIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICBlbHNlCiAgICAgICAgIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0sIEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGlmIChhbGxvY2F0b3IpIHsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
Uiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Cisg
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwogCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogCiAgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9y
TGVuZ3RoKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUu
aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0
d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgc2NyYXRjaEdQUik7CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAq
IGkpKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IgdmFsdWU7Ci0gICAg
ICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgIGlm
IChoYXNEb3VibGUoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgIHZhbHVl
LmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgUE5hTikpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikK
ICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobnVtRWxlbWVudHMpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKTsKICAgICAKLSAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uo
c3RvcmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBtX2ppdC5l
bWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uoc3RvcmFnZUdQUiwgc3RydWN0dXJlLm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIAogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSk7CiB9CkBA
IC05MjE0LDcgKzkyMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXko
Tm9kCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9uZSB3YXkgb3IgYW5vdGhlciwgcmVzdWx0
R1BSIGFuZCBzdG9yYWdlR1BSIGhhdmUgcG9pbnRlcnMgdG8KICAgICAgICAgLy8gdGhlIEpTQXJy
YXkgYW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KIAotICAgICAgICBBU1NFUlQoIWhh
c1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRy
ZW4oKSk7CisgICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS5pbmRleGluZ1R5
cGUoKSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQg
b3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytv
cGVyYW5kSW5kZXgpIHsKICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCBvcGVyYW5kSW5kZXgpOwpAQCAtMTA0NDIsMTQgKzEwNDQyLDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHUKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKLSAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09IG5vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKCFub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzLm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVChpbml0
aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0Lm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgIAogICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
KCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBpZiAoIWFs
bG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CisgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5w
cmV2aW91cy5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMTA0ODcsMTMgKzEwNDg3LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSBub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzLm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFj
dG9yOwotICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgQVNTRVJUKG5ld1NpemUg
PT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0Lm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSkpOwogICAgIAogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgaWYgKCFhbGxvY2F0b3Ig
fHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkgeworICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMu
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTExMTQ4LDcgKzExMTQ4LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgIGF1dG8gdHlwZWRBcnJheVR5cGUgPSBub2RlLT50eXBlZEFycmF5VHlwZSgpOwog
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHko
dHlwZWRBcnJheVR5cGUpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUuZ2V0KCkpOwog
CiAjaWYgVVNFKExBUkdFX1RZUEVEX0FSUkFZUykKICAgICAvLyBUaGUgb3BlcmF0aW9ucyB3ZSBj
YWxsIG9uIHRoZSBzbG93IHBhdGggZXhwZWN0IGEgaW50cHRyX3QsIHNvIGludDY0X3Qgb24gNjQg
Yml0IHBsYXRmb3JtcwpAQCAtMTMxMTIsNyArMTMxMTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0ZXJpYWxpemVOCiAKICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBk
YXRhID0gbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOwogICAgICAgICAKLSAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpOwog
ICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGlu
Z1R5cGUpOwogICAgIGludDMyX3QgcHVibGljTGVuZ3RoID0gMDsKICAgICBpbnQzMl90IHZlY3Rv
ckxlbmd0aCA9IDA7CkBAIC0xMzE1OSw4ICsxMzE1OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYXRlcmlhbGl6ZU4KICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6IHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAgICAgICAgICAgIFN0cmluZ0ltcGwq
IHVpZCA9IG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtkZXNjcmlwdG9yLmluZm8oKV07Ci0g
ICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFBy
b3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5IDogc3RydWN0dXJlLmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewogICAg
ICAgICAgICAgICAgIGlmICh1aWQgIT0gZW50cnkua2V5KQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMTM5MzYsMTEgKzEzOTM2LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeU9mZnNldCgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGNo
U3RydWN0dXJlKE5vZGUqIG5vZGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIGJv
b2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcworICAgIC8qCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAKICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdGVt
cEdQUik7CiAgICAgCiAgICAgYXV0byYgdmFyaWFudHMgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURh
dGEoKS52YXJpYW50czsKQEAgLTEzOTU5LDYgKzEzOTY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1hdGNoU3RydWN0dQogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIAogICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOworICAgICovCiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSogbm9kZSkK
QEAgLTE0MDAwLDE0ICsxNDAwNywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
UHJvcGVydHlFCiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNUeXBlKFNwZWNPYmplY3QpICYmIGJh
c2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBib29sIGhhc0lu
ZGV4aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFj
aChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPiBBcnJheVdpdGhVbmRlY2lkZWQpCisgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSA+IEFycmF5V2l0aFVuZGVj
aWRlZCkKICAgICAgICAgICAgICAgICAgICAgaGFzSW5kZXhpbmcgPSB0cnVlOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBpZiAoIWhhc0luZGV4aW5nKQogICAgICAgICAgICAgICAgIHNr
aXBJbmRleGluZ01hc2tDaGVjayA9IHRydWU7CiAgICAgICAgICAgICBvbmx5U3RydWN0dXJlID0g
YmFzZVZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChv
bmx5U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJhcmVEYXRhID0gb25seVN0cnVjdHVyZS0+
dHJ5UmFyZURhdGEoKTsKKyAgICAgICAgICAgIC8vIE9PUFM6CisgICAgICAgICAgICAvL2lmIChv
bmx5U3RydWN0dXJlKQorICAgICAgICAgICAgLy8gICAgcmFyZURhdGEgPSBvbmx5U3RydWN0dXJl
LT50cnlSYXJlRGF0YSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFza2lwSW5kZXhpbmdN
YXNrQ2hlY2spIHsKQEAgLTE0NjExLDE0ICsxNDYxOSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3T2JqZWN0KE5vCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1
cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtKCksIGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKCFhbGxvY2F0
b3JWYWx1ZSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIGJ1dHRlcmZseSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwotICAgICAgICBtX2ppdC5lbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
R1BSLCBzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIG1faml0Lm11dGF0b3JG
ZW5jZSh2bSgpKTsKICAgICB9CiAKQEAgLTE0NjMwLDYgKzE0NjM4LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3Ms
IHR5cGVuYW1lIE9wZXJhdGlvbj4KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcmF0aW9uKQogewor
ICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVTRURfUEFSQU0ob3BlcmF0aW9uKTsKKyAg
ICAvLyBPT1BTOgorICAgIC8qCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOwpAQCAtMTQ2NTIsNiArMTQ2NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3SW50ZXJuYWxGCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uLCByZXN1bHRHUFIsICZ2bSgpLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAqLwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3R2VuZXJhdG9yKE5vZGUqIG5vZGUp
CkBAIC0xNDY2Niw3ICsxNDY3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdB
c3luY0dlbmUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRmllbGRP
YmplY3QoTm9kZSogbm9kZSkKIHsKLSAgICBzd2l0Y2ggKG5vZGUtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS0+c3RydWN0dXJlKCkudHlwZUluZm8o
KS50eXBlKCkpIHsKICAgICBjYXNlIEpTQXJyYXlJdGVyYXRvclR5cGU6CiAgICAgICAgIGNvbXBp
bGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0FycmF5SXRlcmF0b3I+KG5vZGUsIG9wZXJh
dGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICBicmVhazsKQEAgLTE0Njc3LDEwICsxNDY5
MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3SW50ZXJuYWxGCiAgICAgICAg
IGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU1NldEl0ZXJhdG9yPihub2RlLCBv
cGVyYXRpb25OZXdTZXRJdGVyYXRvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSlNQcm9t
aXNlVHlwZTogewotICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkpCisgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUo
KS5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQogICAgICAgICAgICAg
Y29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTSW50ZXJuYWxQcm9taXNlPihub2Rl
LCBvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2UpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjpp
bmZvKCkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZSgpLmNsYXNzSW5mbygp
ID09IEpTUHJvbWlzZTo6aW5mbygpKTsKICAgICAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxKU1Byb21pc2U+KG5vZGUsIG9wZXJhdGlvbk5ld1Byb21pc2UpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTUwNzAsNyArMTUwODMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAgICAgICAgICAgICBib29sIGhhc1BvbHlQ
cm90byA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBoYXNNb25vUHJvdG8gPSBmYWxzZTsKICAg
ICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1BvbHlQ
cm90bygpKQorICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGhhc1BvbHlQcm90byA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBoYXNNb25vUHJvdG8gPSB0cnVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxKU0NlbGwsIFQ+Ojp2YWx1ZSwgIlRvIHVz
ZSBhIEdDIHBvaW50ZXIsIHRoZSBncmFwaCBtdXN0IGJlIGF3YXJlIG9mIGl0LiBVc2UgU3BlY3Vs
YXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyIGluc3RlYWQuIik7CiAgICAgICAg
IH0KIAorICAgICAgICAvLyBPT1BTCiAgICAgICAgIGV4cGxpY2l0IFRydXN0ZWRJbW1QdHIoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IG1fdmFsdWUoc3RydWN0
dXJlLmdldCgpKQotICAgICAgICB7IH0KKyAgICAgICAgICAgIC8vOiBtX3ZhbHVlKHN0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgICAgIDogbV92YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAg
ICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0cihzdGQ6Om51bGxwdHJfdCkKICAgICAgICAgICAg
IDogbV92YWx1ZShudWxscHRyKQpAQCAtMTgwNCw2ICsxODA4LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRpb25JbmZvKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAKKyAgICAvLyBP
T1BTOiBpbXBsZW1lbnQKKyAgICB2b2lkIHN0b3JlU3RydWN0dXJlSUQoUmVnaXN0ZXJlZFN0cnVj
dHVyZSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2pp
dC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBhZGRyZXNzKTsKKyAgICB9
CisKICAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHByb3ZpZGVzIE1hY3JvQXNzZW1ibGVyIGZ1
bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXImIG1faml0OwogICAgIEdyYXBoJiBtX2dyYXBo
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNS
ZWcKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsg
aS0tOykKLSAgICAgICAgZ3JhcGguYXNzZXJ0SXNSZWdpc3RlcmVkKGF0KGkpLmdldCgpKTsKKyAg
ICAgICAgZ3JhcGguYXNzZXJ0SXNSZWdpc3RlcmVkKGF0KGkpKTsKIH0KICNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAogCkBAIC01OCwxNCArNTgsMTQgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpjbG9iYmVyKCkKICAgICBpZiAobV9zZXQuaXNUaGluKCkpIHsKICAgICAgICAgaWYgKCFt
X3NldC5zaW5nbGVFbnRyeSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIW1f
c2V0LnNpbmdsZUVudHJ5KCktPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgIGlmICghbV9zZXQu
c2luZ2xlRW50cnkoKS5kZmdTaG91bGRXYXRjaCgpKQogICAgICAgICAgICAgbWFrZVRvcFdoZW5U
aGluKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldDo6T3V0T2ZMaW5lTGlzdCogbGlzdCA9IG1fc2V0Lmxpc3QoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykgewotICAgICAgICBpZiAoIWxpc3QtPmxp
c3QoKVtpXS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoIWxpc3QtPmxpc3QoKVtp
XS5kZmdTaG91bGRXYXRjaCgpKSB7CiAgICAgICAgICAgICBtYWtlVG9wKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjbG9iYmVyKCkKIAogdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNl
cnZlVHJhbnNpdGlvbihSZWdpc3RlcmVkU3RydWN0dXJlIGZyb20sIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgdG8pCiB7Ci0gICAgQVNTRVJUKCFmcm9tLT5kZmdTaG91bGRXYXRjaCgpKTsKKyAgICBBU1NF
UlQoIWZyb20uZGZnU2hvdWxkV2F0Y2goKSk7CiAKICAgICBpZiAoaXNUb3AoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9i
c2VydmVUcmFuCiAgICAgCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTdHJ1Y3R1cmVz
OwogICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
QVNTRVJUKCF2ZWN0b3JbaV0ucHJldmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpOworICAgICAgICBB
U1NFUlQoIXZlY3RvcltpXS5wcmV2aW91cy5kZmdTaG91bGRXYXRjaCgpKTsKIAogICAgICAgICBp
ZiAoIW1fc2V0LmNvbnRhaW5zKHZlY3RvcltpXS5wcmV2aW91cykpCiAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZp
bHRlclNsb3coCiAgICAgCiAgICAgbV9zZXQuZ2VuZXJpY0ZpbHRlcigKICAgICAgICAgWyZdIChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgcmV0dXJuICEhKHNw
ZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpICYgdHlwZSk7CisgICAgICAg
ICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlTGlrZShzdHJ1Y3R1cmUpICYg
dHlwZSk7CiAgICAgICAgIH0pOwogfQogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXJDbGFzcwogICAgIEFTU0VSVCghaXNUb3AoKSk7CiAgICAg
bV9zZXQuZ2VuZXJpY0ZpbHRlcigKICAgICAgICAgWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cnVjdHVyZSkgewotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlz
U3ViQ2xhc3NPZihjbGFzc0luZm8pOworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS5jbGFz
c0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbyk7CiAgICAgICAgIH0pOwogfQogCkBAIC0z
NDQsNyArMzQ0LDcgQEAgYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YkNsYXNzTwog
CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJ1
Y3R1cmUgc2V0IGlzIGVtcHR5LgogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUgOiBtX3NldCkgewotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkt
PmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pKQorICAgICAgICBpZiAoIXN0cnVjdHVyZS5jbGFzc0lu
Zm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIGJvb2wgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6aXNOb3RTdWJDbGEKIAogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RydWN0dXJlIHNldCBpcyBlbXB0eS4KICAgICBm
b3IgKGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbV9zZXQpIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pKQor
ICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZv
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2
ICsxODUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3NldDsKICAgICB9CiAKKyAgICAv
LyBPT1BTOgogICAgIFN0cnVjdHVyZVNldCB0b1N0cnVjdHVyZVNldCgpIGNvbnN0CiAgICAgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0Zpbml0ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lk
IFRyYW5zaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KHBy
ZXZpb3VzLmdldCgpLCBjb250ZXh0KSwgIiAtPiAiLCBwb2ludGVyRHVtcEluQ29udGV4dChuZXh0
LmdldCgpLCBjb250ZXh0KSk7CisgICAgVU5VU0VEX1BBUkFNKG91dCk7CisgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOworICAgIC8vIE9PUFMKKyAgICAvL291dC5wcmludChwb2ludGVyRHVtcElu
Q29udGV4dChwcmV2aW91cy5nZXQoKSwgY29udGV4dCksICIgLT4gIiwgcG9pbnRlckR1bXBJbkNv
bnRleHQobmV4dC5nZXQoKSwgY29udGV4dCkpOwogfQogCiB2b2lkIFRyYW5zaXRpb246OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjg0
NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTkgKzQzLDE4IEBAIHN0cnVjdCBBcnJheVR5
cGVDaGVjazsKIHN0cnVjdCBTdHJ1Y3R1cmVUeXBlQ2hlY2s7CiAKIHN0cnVjdCBDaGVja0RhdGEg
ewotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBt
X3N0cnVjdHVyZTsKICAgICBBcnJheU1vZGUgbV9hcnJheU1vZGU7CiAgICAgYm9vbCBtX2FycmF5
TW9kZUlzVmFsaWQ7CiAgICAgYm9vbCBtX2FycmF5TW9kZUhvaXN0aW5nT2theTsKICAgICAKICAg
ICBDaGVja0RhdGEoKQotICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAgICwg
bV9hcnJheU1vZGVJc1ZhbGlkKGZhbHNlKQorICAgICAgICA6IG1fYXJyYXlNb2RlSXNWYWxpZChm
YWxzZSkKICAgICAgICAgLCBtX2FycmF5TW9kZUhvaXN0aW5nT2theShmYWxzZSkKICAgICB7CiAg
ICAgfQogICAgIAotICAgIENoZWNrRGF0YShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBDaGVj
a0RhdGEoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgICAgIDogbV9zdHJ1Y3R1
cmUoc3RydWN0dXJlKQogICAgICAgICAsIG1fYXJyYXlNb2RlSXNWYWxpZChmYWxzZSkKICAgICAg
ICAgLCBtX2FycmF5TW9kZUhvaXN0aW5nT2theSh0cnVlKQpAQCAtNjMsOCArNjIsNyBAQCBzdHJ1
Y3QgQ2hlY2tEYXRhIHsKICAgICB9CiAKICAgICBDaGVja0RhdGEoQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYXJyYXlNb2Rl
KGFycmF5TW9kZSkKKyAgICAgICAgOiBtX2FycmF5TW9kZShhcnJheU1vZGUpCiAgICAgICAgICwg
bV9hcnJheU1vZGVJc1ZhbGlkKHRydWUpCiAgICAgICAgICwgbV9hcnJheU1vZGVIb2lzdGluZ09r
YXkodHJ1ZSkKICAgICB7CkBAIC01MDIsMTIgKzUwMCwxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgbm90aWNlU3RydWN0dXJlQ2hlY2soVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBIYXNoTWFwPFZh
cmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5h
ZGQodmFyaWFibGUsIENoZWNrRGF0YShzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgSGFzaE1h
cDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9t
YXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0dXJlKSk7CiAgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUubV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlLmdldCgpKQorICAgICAgICBp
ZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubV9zdHJ1Y3R1
cmUgPSBudWxscHRyOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJl
ID0gUmVnaXN0ZXJlZFN0cnVjdHVyZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIG5vdGljZVN0
cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmVTZXQgc2V0KQpAQCAtNTQzLDcgKzU0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZS5tX2FycmF5TW9kZUhvaXN0aW5nT2th
eSB8fCAhcmVzdWx0LT52YWx1ZS5tX2FycmF5TW9kZUlzVmFsaWQpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChyZXN1bHQtPnZhbHVlLm1fYXJyYXlNb2RlLnN0cnVjdHVyZVdvdWxk
UGFzc0FycmF5TW9kZUZpbHRlcmluZyhzdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICBpZiAocmVz
dWx0LT52YWx1ZS5tX2FycmF5TW9kZS5zdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1vZGVGaWx0ZXJp
bmcoc3RydWN0dXJlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVzdWx0LT52YWx1
ZS5kaXNhYmxlQ2hlY2tBcnJheUhvaXN0aW5nKCk7CiAgICAgfQpAQCAtNTkzLDE4ICs1OTEsMjQg
QEAgc3RydWN0IEFycmF5VHlwZUNoZWNrIHsKIHN0cnVjdCBTdHJ1Y3R1cmVUeXBlQ2hlY2sgewog
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRUb0hvaXN0KENoZWNrRGF0YSYgY2hlY2tEYXRhKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNoZWNrRGF0YS5tX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJu
ICEhY2hlY2tEYXRhLm1fc3RydWN0dXJlOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGRpc2Fi
bGVIb2lzdGluZyhDaGVja0RhdGEmIGNoZWNrRGF0YSkKICAgICB7Ci0gICAgICAgIGNoZWNrRGF0
YS5tX3N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgIGNoZWNrRGF0YS5tX3N0cnVjdHVyZSA9
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoKTsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAgICAgc3RhdGlj
IGJvb2wgaXNDb250cmF2ZW5lZEJ5VmFsdWUoQ2hlY2tEYXRhJiBjaGVja0RhdGEsIEpTVmFsdWUg
dmFsdWUpCiAgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oY2hlY2tEYXRhKTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvKgog
ICAgICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gY2hlY2tEYXRh
Lm1fc3RydWN0dXJlICE9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgKi8K
ICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBoYXNFbm91Z2hWb3Rlc1RvSG9pc3QoVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9
IHByZXZpb3VzTm9kZS0+b3JpZ2luLmZvckV4aXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNT
dHJ1Y3R1cmUoKSB8fCAhIW5vZGUtPnN0cnVjdHVyZSgpLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNTdHJ1Y3R1cmUoKSB8fCAhIW5vZGUtPnN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxs
T3BlcmFuZCgpIHx8IG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkuaXNDZWxsKCkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc0NlbGxPcGVyYW5kKCkgfHwg
ISFub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKQEAgLTMw
OCw5ICszMDgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCAhbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+ZGZnU2hvdWxkV2F0Y2go
KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMuZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
ICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+
bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCkBAIC0z
MTksNiArMzIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNl
dDoKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aURlbGV0ZUJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVsZXRlQnlWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlEZWxldGVCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIXZhcmlhbnQubmV3
U3RydWN0dXJlKCkgfHwgIXZhcmlhbnQub2xkU3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkp
OwpAQCAtMzI5LDExICszMzEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBvbmx5IHN1cHBvcnRzIHN0cnVjdHVyZXMgdGhhdCBhcmUgSlNGaW5hbE9iamVjdCBv
ciBKU0FycmF5LgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG5vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gSlNGaW5hbE9iamVjdDo6aW5mbygpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBKU0FycmF5Ojpp
bmZvKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS5jbGFzc0luZm8o
KSA9PSBKU0ZpbmFsT2JqZWN0OjppbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCkgPT0gSlNBcnJheTo6aW5mbygpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGNlcnRhaW4gaW5kZXhpbmcgc2hhcGVz
LgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhaGFzQW55QXJyYXlT
dG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUuaW5kZXhp
bmdUeXBlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpAQCAtNjg1LDggKzY4
Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb25zLiBUaGV5
IGFyZSBub3QgbmVlZGVkIGluIHRoZSBERkcgcmlnaHQgbm93LiBXZSBzaG91bGQgYWRkIHN1cHBv
cnQKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZXNlIGlmIHRoZSBERkcgZXZlciBuZWVk
cyBpdC4KICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSA6IG5vZGUtPnN0cnVjdHVyZVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICFoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCAhaGFzSW50MzIoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFoYXNEb3VibGUoc3RydWN0dXJlLmluZGV4
aW5nVHlwZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODg3LDcgKzM4ODcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9u
KCktPm5leHQ7Ci0gICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5
KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUu
Z2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5z
aXRpb25zKCkuYWRkTGF6aWx5KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25l
cigpLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CiAKICAgICAgICAgQVNTRVJUX1VOVVNF
RChvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgPT0gbmV3U3RydWN0
dXJlLT5pbmRleGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpKTsKQEAgLTM4OTUsNyArMzg5NSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
TFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOyAKIAotICAgICAgICBhdXRv
JiBoZWFwID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPnRyYW5zaXRpb25LaW5kKCkgPT0g
VHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24gPyBtX2hlYXBzLkpTQ2VsbEhlYWRlckFu
ZE5hbWVkUHJvcGVydGllcyA6IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEOworICAgICAgICBh
dXRvJiBoZWFwID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQudHJhbnNpdGlvbktpbmQoKSA9
PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbiA/IG1faGVhcHMuSlNDZWxsSGVhZGVy
QW5kTmFtZWRQcm9wZXJ0aWVzIDogbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQ7CiAgICAgICAg
IFR5cGVkUG9pbnRlciBwb2ludGVyIHsgaGVhcCwgbV9vdXQuYWRkUHRyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlELm9mZnNldCgpKSB9OwogCiAgICAgICAgIG1fb3V0LnN0b3JlMzIo
CkBAIC00OTM5LDcgKzQ5MzksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNQb2x5UHJvdG8gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29s
IGhhc01vbm9Qcm90byA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJl
LmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS5oYXNQb2x5UHJvdG8oKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc1BvbHlQcm90byA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc01vbm9Qcm90byA9IHRydWU7CkBAIC02OTcyLDcgKzY5NzIs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJl
Y3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFd
LmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVy
ZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUp
KSk7CiAgICAgICAgICAgICB9LApAQCAtNzExOSw3ICs3MTE5LDcgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIGxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAg
ICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJl
Y3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bWluQ2FwYWNpdHkpKTsKICAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7CiAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7CkBAIC03
MzkwLDcgKzczOTAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uLCBtX3ZtVmFsdWUsIGZyb3pl
blBvaW50ZXIobV9ncmFwaC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkp
KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1D
YWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbiwgbV92bVZhbHVlLCBzdHJvbmdTdHJ1Y3R1cmUo
bV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAt
NzQwOSw3ICs3NDA5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgdm9pZCBj
b21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdCgpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5zdHJ1Y3R1cmUoKS50eXBlSW5mbygpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEpT
QXJyYXlJdGVyYXRvclR5cGU6CiAgICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8SlNBcnJheUl0ZXJhdG9yPihvcGVyYXRpb25OZXdBcnJheUl0ZXJhdG9yKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNzQyMCw3ICs3NDIwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpT
U2V0SXRlcmF0b3I+KG9wZXJhdGlvbk5ld1NldEl0ZXJhdG9yKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEpTUHJvbWlzZVR5cGU6Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5z
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKKyAg
ICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpTSW50ZXJu
YWxQcm9taXNlOjppbmZvKCkpCiAgICAgICAgICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmll
bGRPYmplY3RJbXBsPEpTSW50ZXJuYWxQcm9taXNlPihvcGVyYXRpb25OZXdJbnRlcm5hbFByb21p
c2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG1fbm9kZS0+
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTUHJvbWlzZTo6aW5mbygpKTsKQEAgLTc0NTYs
NyArNzQ1Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9LCAm
dm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3U3RyaW5nT2Jq
ZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0
dXJlKSk7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RyaW5nKTsKICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwpA
QCAtODM1NCw3ICs4MzU0LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdU
eXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKHR5cGVkQXJyYXlUeXBlKSwgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCBnbG9iYWxPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGly
ZWN0R1BSKCkpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHNpemU2NEJpdHMsIHN0b3Jh
Z2VWYWx1ZSk7CkBAIC04MzY5LDcgKzgzNjksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQogICAgIHsKICAgICAg
ICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNl
dFN0b3JhZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMuZ2V0KCkpKTsKKyAgICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpOwogICAg
IH0KIAogICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQpAQCAtODM4
MCw3ICs4MzgwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAKICAgICAg
ICAgc2V0U3RvcmFnZSgKICAgICAgICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0g
ICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCB0cmFuc2l0aW9uLT5wcmV2aW91cy5n
ZXQoKSwgdHJhbnNpdGlvbi0+bmV4dC5nZXQoKSkpOworICAgICAgICAgICAgICAgIG9iamVjdCwg
b2xkU3RvcmFnZSwgdHJhbnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5leHQpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSgp
CkBAIC05MjYyLDcgKzkyNjIsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwogICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAgICAgICAgICAg
ICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAogICAgICAgICAgICAg
ICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLApAQCAtMTM0NTcsMTQgKzEzNDU3LDE1IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNU
eXBlKFNwZWNPYmplY3QpICYmIGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkgPiBBcnJheVdpdGhVbmRlY2lkZWQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCkgPiBBcnJheVdpdGhVbmRlY2lkZWQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBoYXNJbmRleGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNJbmRleGluZykKICAgICAgICAgICAgICAgICAgICAgc2tpcElu
ZGV4aW5nTWFza0NoZWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBvbmx5U3RydWN0dXJlID0g
YmFzZVZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAob25seVN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAgICAgcmFyZURhdGEgPSBvbmx5U3Ry
dWN0dXJlLT50cnlSYXJlRGF0YSgpOworICAgICAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAg
ICAgICAgICAvL2lmIChvbmx5U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIC8vICAgIHJhcmVE
YXRhID0gb25seVN0cnVjdHVyZS0+dHJ5UmFyZURhdGEoKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgTFZhbHVlIG5vdEhhdmluZ0luZGV4aW5nID0gbnVsbHB0cjsKQEAgLTEzNjkyLDEw
ICsxMzY5MywxMSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY2hlY2tTdHJ1Y3R1cmVCbG9jayk7CiAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJ
RDsKLSAgICAgICAgYXV0byBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9k
ZSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5p
ZCgpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vYXV0byBzdHJ1
Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCk7CisgICAgICAgIC8vaWYgKHN0cnVjdHVyZSkKKyAgICAgICAgLy8gICAgc3Ry
dWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIC8v
ZWxzZQogICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpOwogCiAgICAgICAgIExWYWx1ZSBoYXNFbnVtZXJhdG9yU3Ry
dWN0dXJlID0gbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9y
LCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpOwpA
QCAtMTM3MTMsMTAgKzEzNzE1LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrKTsKICAgICAgICAg
TFZhbHVlIGlubGluZUNhcGFjaXR5ID0gbnVsbHB0cjsKICAgICAgICAgYm9vbCBoYXNOb091dE9m
TGluZVByb3BlcnRpZXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkgewotICAgICAg
ICAgICAgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKLSAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICB9CisgICAgICAgIC8vaWYgKHN0
cnVjdHVyZSkgeworICAgICAgICAvLyAgICBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPSAhc3Ry
dWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIC8vICAgIGlubGluZUNhcGFjaXR5
ID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
IC8vfQogICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQogICAgICAgICAgICAgaW5saW5lQ2Fw
YWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAgICBMVmFsdWUgaXNJbmxpbmUg
PSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJlbG93
KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CkBAIC0xMzg2NCwxNCArMTM4NjYsMTQgQEAgSUdOT1JF
X0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsKICAgICAgICAg
ICAgIExWYWx1ZSBidXR0ZXJmbHk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUub3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUuaW5kZXhpbmdU
eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGNlbGxBbGxvY2F0b3I7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZSgpID09IEpTVHlwZTo6QXJyYXlUeXBlKQot
ICAgICAgICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVh
bENvbmN1cnJlbnRseTxKU0FycmF5Pih2bSgpLCBKU0FycmF5OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS50eXBlSW5mbygpLnR5cGUoKSA9
PSBKU1R5cGU6OkFycmF5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgY2VsbEFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNBcnJheT4odm0oKSwgSlNBcnJh
eTo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSgpLCBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgICAgIGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0
b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtKCksIEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgICAgICAgICAgICAgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpOworICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJ
bmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4aW5nSGVhZGVyU2l6ZSA9IDA7CiAgICAgICAgICAgICAgICAgTFZh
bHVlIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gbV9vdXQuaW50UHRyWmVybzsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmVjdG9yTGVuZ3RoID0gbV9vdXQuaW50MzJaZXJvOwpAQCAtMTM4
OTcsNyArMTM4OTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5hZGQoCiAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsg
aW5kZXhpbmdIZWFkZXJTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgaW5kZXhpbmdIZWFkZXJTaXpl
KSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9v
dXQubmV3QmxvY2soKTsKQEAgLTEzOTE0LDEzICsxMzkxNiwxMyBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1f
b3V0LmFkZCgKICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZlN0b3JhZ2UsCiAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLm91dE9m
TGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaGF2
ZUJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHNwbGF0V29yZHMoCiAgICAgICAgICAgICAgICAgICAg
IGZhc3RCdXR0ZXJmbHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
Migtc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIC0gMSksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoLXN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpIC0gMSks
CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLTEpLAogICAgICAgICAgICAg
ICAgICAgICBtX291dC5pbnQ2NFplcm8sIG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigp
KTsKIApAQCAtMTM5NDUsNyArMTM5NDcsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0
ZXJmbHlXaXRoSW5kZXhpbmdIZWFkZXJBbmRWZWN0b3JMZW5ndGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sIG1hc21TdHJ1Y3R1cmUo
c3RydWN0dXJlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCwgYnV0dGVy
Zmx5VmFsdWUpOwpAQCAtMTM5NTQsNyArMTM5NTYsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0
aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
dm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdp
dGhCdXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
LmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1dHRlcmZseVZhbHVlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMzk3MSw3ICsxMzk3
Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlMzIocHVibGljTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhtX291
dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBtX291dC5pbnQzMlplcm8s
IHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplQXJy
YXlFbGVtZW50cyhtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSksIG1f
b3V0LmludDMyWmVybywgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHkpOwogCiAgICAgICAgICAgICAg
ICAgSGFzaE1hcDxpbnQzMl90LCBMVmFsdWUsIERlZmF1bHRIYXNoPGludDMyX3Q+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBpbmRleE1hcDsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8aW50MzJfdD4gaW5kaWNlczsKQEAgLTE0MDE3LDcgKzE0MDE5LDcgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG9yaWdpbmFsIHN0b3JlcyB0byB0aGUgYXJyYXkgYXJlIHN0aWxsIHNvbWV3aGVyZSBhYm92ZSB0
aGlzIHBvaW50LgogICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OjpTdG9yZVR5cGUgc3Rv
cmVUeXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCogaGVh
cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUuaW5kZXhp
bmdUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIHVzZSB0aGUgcHJvdmVuIHR5cGUgaWYgd2UgaGFkIHRoZSBFZGdlIGZvciB0aGUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NTMxMQpAQCAtMTQwODEsNyArMTQwODMsOCBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEJpdFZlY3RvciBz
ZXRJbmxpbmVPZmZzZXRzOwotICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5
IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVj
dHVyZS5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKICAgICAgICAg
ICAgICAgICAgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGRhdGEu
bV9wcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5raW5k
KCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCkBAIC0xNDA5OSw3ICsxNDEwMiw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOyBpLS07KSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKTsgaS0tOykgewogICAgICAgICAgICAg
ICAgIGlmICghc2V0SW5saW5lT2Zmc2V0cy5nZXQoaSkpCiAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQobV9vdXQuaW50NjRaZXJvLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVy
dGllcy5hdEFueU51bWJlcigpLCBvYmplY3QsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGkpKSk7CiAg
ICAgICAgICAgICB9CkBAIC0xNDE1NCw3ICsxNDE1Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAg
ICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFi
bGUpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKICAgICAgICAgICAgIH0sIHNjb3BlKTsKQEAg
LTE0MjIxLDcgKzE0MjI0LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTQyNDEsNyArMTQyNDQsNyBAQCBJ
R05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZU5l
d0ludGVybmFsRmllbGRPYmplY3QoKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
c3RydWN0dXJlKCkudHlwZUluZm8oKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBKU0FycmF5SXRl
cmF0b3JUeXBlOgogICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8SlNBcnJheUl0ZXJhdG9yPihvcGVyYXRpb25OZXdBcnJheUl0ZXJhdG9yKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQyNTIsNyArMTQyNTUsNyBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxKU1NldEl0ZXJhdG9yPihvcGVyYXRpb25OZXdTZXRJdGVyYXRvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKU1Byb21pc2VUeXBlOgotICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQcm9t
aXNlOjppbmZvKCkpCisgICAgICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmUoKS5jbGFzc0lu
Zm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQogICAgICAgICAgICAgICAgIGNvbXBp
bGVNYXRlcmlhbGl6ZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTSW50ZXJuYWxQcm9taXNl
PihvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fbm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpT
UHJvbWlzZTo6aW5mbygpKTsKQEAgLTE0NjkyLDYgKzE0Njk1LDcgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1i
ZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKICAgICB9CiAgICAg
CisgICAgLy8gT09QUwogICAgIExWYWx1ZSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKICAgICAgICAg
TFZhbHVlIG9iamVjdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBTdHJ1Y3R1cmUq
IHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5leHRTdHJ1Y3R1cmUpCkBAIC0xNDcwNCwx
MSArMTQ3MDgsMTEgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAKICAgICAg
ICAgTFZhbHVlIHJlc3VsdDsKICAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHBy
ZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0g
cmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKICAgICAgICAgICAgICAgICBvYmplY3QsIG1fb3V0
LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksCi0gICAgICAgICAg
ICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocHJldmlvdXNTdHJ1Y3R1cmUpLCBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKG5leHRTdHJ1Y3R1cmUpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseShyZXN1bHQsIG9iamVjdCk7CkBAIC0x
NDc4Nyw5ICsxNDc5MSw5IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oaW5pdERvbmUsIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVl
IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUpCisgICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBv
YmplY3QsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgcHJldmlvdXNTdHJ1Y3R1cmUpCiAgICAgewotICAg
ICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsK
KyAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkp
IHsKICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgcG9pbnRlclR5
cGUoKSwKICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LApAQCAtMTQ4MDcsMTQgKzE0ODExLDE0IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIHJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdl
LCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCisgICAgICAgIExWYWx1ZSBv
YmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBSZWdpc3RlcmVkU3RydWN0dXJlIHByZXZpb3VzLCBS
ZWdpc3RlcmVkU3RydWN0dXJlIG5leHQpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IHByZXZpb3VzLm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0g
b2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCiAKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkgeworICAgICAgICBpZiAocHJldmlvdXMuY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewog
ICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1Np
emUpOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKHBvaW50
ZXJUeXBlKCksIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZSwgbV92bVZh
bHVlLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0KQEAgLTE2NzYzLDcgKzE2NzY3
LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgIAogICAgIExWYWx1ZSBhbGxvY2F0
ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEg
bm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCkBAIC0xNjc4Nyw3ICsxNjc5MSw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4gewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwK
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0
dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTY5MzksNyArMTY5NDMsNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUVsZW1lbnRzID0g
ZmFsc2U7CiAgICAgICAgIGJvb2wgc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3Jh
Z2UgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSlNBcnJheSgKLSAgICAgICAgICAg
IHB1YmxpY0xlbmd0aCwgdmVjdG9yTGVuZ3RoLCB3ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSksIG1f
b3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIHNob3VsZEluaXRpYWxp
emVFbGVtZW50cywKKyAgICAgICAgICAgIHB1YmxpY0xlbmd0aCwgdmVjdG9yTGVuZ3RoLCB3ZWFr
U3RydWN0dXJlKHN0cnVjdHVyZSksIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLmluZGV4aW5n
VHlwZSgpKSwgc2hvdWxkSW5pdGlhbGl6ZUVsZW1lbnRzLAogICAgICAgICAgICAgc2hvdWxkTGFy
Z2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UpOwogICAgIH0KIApAQCAtMjA4MjYsMTMgKzIw
ODMwLDM2IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgIExWYWx1ZSB3ZWFrU3Ry
dWN0dXJlSUQoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOworICAgICAgICBVTlVTRURf
UEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL3JldHVybiBtX291
dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIHJldHVybiBtX291dC5jb25z
dEludDMyKDApOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZShSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAg
QVNTRVJUKCEhc3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFscmVhZHlS
ZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoMCk7CisgICAgICAgIC8vcmV0dXJuIG1f
b3V0LmFscmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgp
KTsKKyAgICB9CisKKyAgICBMVmFsdWUgc3Ryb25nU3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7Cisg
ICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy9yZXR1cm4gZnJvemVuUG9pbnRlcihtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSk7CisgICAgICAgIHJldHVybiBt
X291dC5jb25zdEludFB0cigwKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIgbWFzbVN0cnVjdHVyZShSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gcmV0dXJuIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAgIHJl
dHVybiBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgfQogICAgIAog
ICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQgPSAwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNz
IENhbGxGcmFtZTsKIGNsYXNzIFN0cnVjdHVyZTsKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgUmVn
aXN0ZXJlZFN0cnVjdHVyZTsKLX07Cit9CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBB
c3NlbWJseUhlbHBlcnMgewogcHVibGljOgpAQCAtNjQ0LDcgKzY0NCwxMCBAQCBwcml2YXRlOgog
ICAgICAgICAmJiBzdGQ6OmlzX3NhbWU8QXJnLCBERkc6OlJlZ2lzdGVyZWRTdHJ1Y3R1cmU+Ojp2
YWx1ZT4KICAgICBzZXR1cEFyZ3VtZW50c0ltcGwoQXJnQ29sbGVjdGlvbjxudW1HUFJBcmdzLCBu
dW1HUFJTb3VyY2VzLCBudW1GUFJBcmdzLCBudW1GUFJTb3VyY2VzLCBudW1Dcm9zc1NvdXJjZXMs
IGV4dHJhR1BSQXJncywgbm9uQXJnR1BScywgZXh0cmFQb2tlPiBhcmdTb3VyY2VSZWdzLCBBcmcg
YXJnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c0ltcGw8T3Bl
cmF0aW9uVHlwZT4oYXJnU291cmNlUmVncywgVHJ1c3RlZEltbVB0cihhcmcuZ2V0KCkpLCBhcmdz
Li4uKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICAg
ICAgLy9zZXR1cEFyZ3VtZW50c0ltcGw8T3BlcmF0aW9uVHlwZT4oYXJnU291cmNlUmVncywgVHJ1
c3RlZEltbVB0cihhcmcuZ2V0KCkpLCBhcmdzLi4uKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNJ
bXBsPE9wZXJhdGlvblR5cGU+KGFyZ1NvdXJjZVJlZ3MsIFRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IGFyZ3MuLi4pOwogICAgIH0KIAogI3VuZGVmIENVUlJFTlRfQVJHVU1FTlRfVFlQRQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443319</attachid>
            <date>2021-11-04 10:39:22 -0700</date>
            <delta_ts>2021-11-11 16:20:05 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>99031</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIwLDYgKzUyMCw0MiBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9J
bmhlcml0YW5jZShjb25zdCBDbGFzc0luZm8qKTsKIAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0
dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVM
aWtlKGNvbnN0IFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlw
ZSBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ltYm9sVHlwZToK
KyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNIZWFw
QmlnSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5cGU6CisgICAg
ICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0FycmF5Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAgICAgIGZpbHRl
cmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5nT2JqZWN0VXNl
LCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmplY3QuCisgICAg
Y2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBT
cGVjT2JqZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1cmUuY2xhc3NJ
bmZvKCkpOworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAgIEFTU0VSVChp
c1N1YnR5cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJ
bmZvSW5oZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJldHVybiBmaWx0
ZXJlZFJlc3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0Nl
bGwqKTsKIEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKEpTVmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0dXJuIHNwZWN1
bGF0ZWQgdHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBUcmlTdGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAgICAgIGJvb2wg
YWxsVHJ1ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0
dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0
cmluZ1R5cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlw
ZSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkgfHwgc3Ry
dWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAgICAgYWxsVHJ1
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjEz
LDcgKzIxMyw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50aXR5KFYKICAg
ICAgICAgYm9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5vZGUubV9zdHJ1
Y3R1cmUuaXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9IGZhbHNlOwog
ICAgICAgICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUgPSBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3RydWN0dXJlLnR5
cGVJbmZvKCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8IHR5cGUudHlw
ZSgpID09IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8fCB0eXBlLnR5
cGUoKSA9PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFNb2RlLmlzU3Ry
aWN0KCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7CkBAIC0yMjQs
NyArMjI0LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRpdHkoVgogICAg
ICAgICAgICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIElm
IGFsbCB0aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cgdGhlIGRldGFp
bHMgb2YgSlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAgYWxsU3RydWN0
dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9U
aGlzID09IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAgICAgICAgICAg
YWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS50b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXM7CiAgICAg
ICAgIH0pOwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAgICAgIHJldHVy
biBUb1RoaXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQubV9zdHJ1
Y3R1cmUuZm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1h
dGNoZWQgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gc3RydWN0dXJl
LnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC0yMTc2LDYgKzIxNzYsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIGZvciB1bmxpbmtlZCBKSVQuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNVbmxp
bmtlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBhcnJheVZhbHVlID0gZm9yTm9kZShhcnJheUVkZ2UpOwogCiAg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBzZXQgaXMgZmluaXRlLiBUaGlz
IG1lYW5zIHRoYXQgdGhpcyBjb25zdGFudCdzIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGFuZCBndWFy
YW50ZWVkIHRoZSBvbmUgb2YgdGhpcyBzZXQuCkBAIC0zMTU4LDE2ICszMTYyLDE3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGF1dG8mIHN0
cnVjdHVyZVNldCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOwogICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZVNldC5pc0Zpbml0ZSgpICYmIHN0cnVjdHVyZVNldC5zaXplKCkg
PT0gMSkgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0g
c3RydWN0dXJlU2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byog
cmFyZURhdGEgPSBzdHJ1Y3R1cmUtPnJhcmVEYXRhQ29uY3VycmVudGx5KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhcmFyZURhdGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50
bHkobm9kZS0+b3AoKSA9PSBPYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVy
dHlOYW1lc0tpbmQ6OkdldE93blByb3BlcnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2lu
ZDo6S2V5cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hp
bmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0FycmF5KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBPT1BTCisgICAgICAgICAgICAgICAgLy9pZiAoYXV0byogcmFyZURhdGEgPSBzdHJ1Y3R1
cmUtPnJhcmVEYXRhQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICBpZiAo
ISFyYXJlRGF0YS0+Y2FjaGVkUHJvcGVydHlOYW1lc0NvbmN1cnJlbnRseShub2RlLT5vcCgpID09
IE9iamVjdEdldE93blByb3BlcnR5TmFtZXMgPyBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6R2V0
T3duUHJvcGVydHlOYW1lcyA6IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpLZXlzKSkgeworICAg
ICAgICAgICAgICAgIC8vICAgICAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRp
bWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBtX3N0
YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBcnJheSk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vICAgIH0KKyAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC0zMzU0LDIxICszMzU5LDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
IHsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwot
ICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5mb3JFYWNoKAotICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1
cmUtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnbG9iYWxP
YmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0ICYmIG9rKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1f
Z3JhcGguZnJlZXplKEpTVmFsdWUoZ2xvYmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8vIE9PUFM6CisgICAgICAg
IC8vaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsK
KyAgICAgICAgLy8gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7Cisg
ICAgICAgIC8vICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAvLyAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5mb3JFYWNoKAorICAgICAgICAvLyAgICAgICAgWyZdIChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQorICAgICAgICAvLyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qg
PSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAvLyAgICAgICAgICAgIGVsc2Ug
aWYgKGdsb2JhbE9iamVjdCAhPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKQorICAgICAgICAv
LyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAvLyAgICAgICAgfSk7CisgICAg
ICAgIC8vICAgIGlmIChnbG9iYWxPYmplY3QgJiYgb2spIHsKKyAgICAgICAgLy8gICAgICAgIHNl
dENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsK
KyAgICAgICAgLy8gICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICB9CisgICAgICAgIC8vfQog
CiAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzU4Myw3ICszNTg5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9ubHlTdHJ1Y3R1cmUoKSkgewotICAgICAg
ICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVj
dHVyZS5nZXQoKSkpOworICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwg
Km1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0zODQ1LDE4ICszODUxLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJvb2wgY2FuRm9sZCA9ICF2YWx1ZS5t
X3N0cnVjdHVyZS5pc0NsZWFyKCk7CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAg
ICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUG9seVBy
b3RvKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmhhc1BvbHlQcm90bygpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhbkZvbGQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE9PUFMK
ICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChwcm90b3R5cGUgIT0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3RvdHlwZSAhPSBzdHJ1Y3R1cmUuc3RvcmVkUHJv
dG90eXBlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNhbkZvbGQgPSBmYWxzZTsKICAgICAgICAg
ICAgIH0pOwogCkBAIC00NTQ1LDcgKzQ1NTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmlz
RmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgICAgICAgYWJz
dHJhY3RWYWx1ZS5tX3N0cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvayAmPSAoc3RydWN0dXJlLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpICYgYml0cykgPT0gYml0czsKKyAgICAgICAgICAgICAgICBvayAm
PSAoc3RydWN0dXJlLnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgJiBiaXRzKSA9PSBiaXRz
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6Om9i
c2VydmVUcmFuc2l0aW9ucyhjCiAgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9u
cyh2ZWN0b3IpOwogICAgICAgICBBcnJheU1vZGVzIG5ld01vZGVzID0gMDsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1f
YXJyYXlNb2RlcyAmIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHZlY3RvcltpXS5wcmV2aW91cy5n
ZXQoKSkpCi0gICAgICAgICAgICAgICAgbmV3TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmUodmVjdG9yW2ldLm5leHQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAm
IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHZlY3RvcltpXS5wcmV2aW91cykpCisgICAgICAgICAg
ICAgICAgbmV3TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodmVjdG9yW2ldLm5leHQp
OwogICAgICAgICB9CiAgICAgICAgIG1fYXJyYXlNb2RlcyB8PSBuZXdNb2RlczsKICAgICB9CkBA
IC01MCw2ICs1MCw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGMK
IAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1
ZSYgdmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCiB7CisgICAgLy8g
T09QUwogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTg3LDggKzg4LDggQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBSZQogICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7CiAgICAgCiAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgbV9hcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKTsKLSAgICBt
X3R5cGUgPSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKTsKKyAgICBt
X2FycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1f
dHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKTsKICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTE5NSw2
ICsxOTYsNyBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAKICAg
ICBBYnN0cmFjdFZhbHVlIG9sZE1lID0gKnRoaXM7CiAgICAgCisgICAgLy8gT09QUwogICAgIGlm
IChpc0NsZWFyKCkpIHsKICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblZhbHVlID0gZ3JhcGgu
ZnJlZXplKHZhbHVlKTsKICAgICAgICAgaWYgKGZyb3plblZhbHVlLT5wb2ludHNUb0hlYXAoKSkg
ewpAQCAtMjExLDcgKzIxMyw3IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZh
bHVlKEcKICAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKHZhbHVlKSk7CiAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAg
ICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IGdyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoZ3JhcGgubV92bSkpOwotICAgICAg
ICAgICAgbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlNb2RlcywgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMobV9hcnJh
eU1vZGVzLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAg
IG1fc3RydWN0dXJlLm1lcmdlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fdmFsdWUgIT0gdmFsdWUpCkBAIC0zMzUsOCArMzM3LDgg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogCiBib29sIEFic3Ry
YWN0VmFsdWU6OmNvbnRhaW5zKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSBjb25zdAog
ewotICAgIHJldHVybiBjb3VsZEJlVHlwZShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgJiYgKG1fYXJyYXlNb2RlcyAmIGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHN0cnVjdHVyZS5nZXQoKSkpCisgICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNwZWN1bGF0
aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKSkKKyAgICAgICAgJiYgKG1fYXJyYXlNb2Rl
cyAmIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCiAgICAgICAgICYmIG1fc3Ry
dWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM4LDcgKzEzOCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAg
IGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2
ZVRyYW5zaXRpb24oZnJvbSwgdG8pOwotICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24oYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoZnJvbS5nZXQoKSksIGFycmF5TW9kZXNG
cm9tU3RydWN0dXJlKHRvLmdldCgpKSk7CisgICAgICAgICAgICBvYnNlcnZlSW5kZXhpbmdUeXBl
VHJhbnNpdGlvbihhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShmcm9tKSwgYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmUodG8pKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNyArNDUzLDcgQEAgYm9vbCBBcnJheU1vZGU6
OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1
Y3R1cmVbaV07Ci0gICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgJiBp
bmRleGluZ01vZGVNYXNrKSAhPSAoc2hhcGUgfCBJc0FycmF5KSkKKyAgICAgICAgICAgIGlmICgo
c3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgaW5kZXhpbmdNb2RlTWFzaykgIT0gKHNoYXBlIHwg
SXNBcnJheSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJl
W2ldOwotICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpICYgaW5kZXhp
bmdNb2RlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS5pbmRleGlu
Z01vZGUoKSAmIGluZGV4aW5nTW9kZU1hc2spICE9IHNoYXBlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4Miw3ICs0
ODIsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmICgoc3RydWN0
dXJlLT5pbmRleGluZ01vZGUoKSAmIChpbmRleGluZ01vZGVNYXNrICYgfklzQXJyYXkpKSAhPSBz
aGFwZSkKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgKGluZGV4
aW5nTW9kZU1hc2sgJiB+SXNBcnJheSkpICE9IHNoYXBlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5MiwxMiArNDky
LDE4IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAvLyBT
bywgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIHNhbWUgY2hlY2sgdG8gdGhlIENoZWNrU3RydWN0dXJl
IGhlcmUuCiAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICBjYXNlIEFycmF5OjpP
cmlnaW5hbENvcHlPbldyaXRlQXJyYXk6IHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZ3JhcGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIE9PUFM6CisgICAgICAgIC8qCiAgICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3RydWN0dXJl
KiBvcmlnaW5hbFN0cnVjdHVyZSA9IG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoZ3JhcGgsIG5vZGUp
OwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCkuZ2V0KCkgPT0gb3JpZ2luYWxTdHJ1Y3R1cmU7CisgICAgICAgICovCiAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC01NDUsOSArNTUxLDkgQEAgYm9vbCBBcnJheU1v
ZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUo
KTsgaS0tOykgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
ID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJh
eVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaWYg
KCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAgICAgICAgICBpZiAoIShzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01
NjMsOSArNTY5LDkgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
LmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC01NzgsNyArNTg0LDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVh
ZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUu
bV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlB
cnJheVN0b3JhZ2Uoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9u
IDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUu
aCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0
OSw2ICs0NTAsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udmVyc2lvbigpICE9IEFy
cmF5OjpBc0lzOwogICAgIH0KIAorICAgIGJvb2wgc3RydWN0dXJlV291bGRQYXNzQXJyYXlNb2Rl
RmlsdGVyaW5nKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZChhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShz
dHJ1Y3R1cmUpLCBhcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CisgICAgfQorCisgICAg
Ly8gT09QUzogQ2FsbGVkIGZyb20gdHlwZSBjaGVjayBob2lzdGluZy4gQ2hlY2sgaWYgaXQncyBv
ay4KICAgICBib29sIHN0cnVjdHVyZVdvdWxkUGFzc0FycmF5TW9kZUZpbHRlcmluZyhTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhcnJheU1vZGVzQWxyZWFkeUNo
ZWNrZWQoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgYXJyYXlNb2Rlc1RoYXRQ
YXNzRmlsdGVyaW5nKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODIs
MTYgKzg4Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAK
LSAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQu
IEJ1dCBjdXJyZW50bHksCi0gICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2lu
ZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRo
ZQotICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEg
d2Vha0pTQ29zbnRhbnQuCi0gICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFu
dChvYmplY3QpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwotICAgICAgICBy
ZXR1cm4gb2JqZWN0Tm9kZTsKLSAgICB9Ci0gICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJl
ZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7
CiAgICAgICAgIGF1dG8gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tB
bmRCeXRlY29kZU9mZnNldCA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCkBAIC00NjIzLDYgKzQ2MTMsMTAgQEAgTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpzaW1wbGlm
eUdldEJ5U3RhdHVzKE5vZGUqIGJhc2UsIEdldEJ5U3RhdHVzJiBnZXRCeVN0YXR1cykKIHsKKyAg
ICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKGdldEJ5U3RhdHVzKTsKKyAg
ICAvLyBPT1BTOgorICAgIC8qCiAgICAgLy8gQXR0ZW1wdCB0byByZWR1Y2UgdGhlIHNldCBvZiB0
aGluZ3MgaW4gdGhlIEdldEJ5U3RhdHVzLgogICAgIGlmIChiYXNlLT5vcCgpID09IE5ld09iamVj
dCkgewogICAgICAgICBib29sIG9rID0gdHJ1ZTsKQEAgLTQ2MzgsNiArNDYzMiw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnNpbXBsaWZ5R2V0QnlTdGF0dXMKICAgICAgICAgaWYgKG9rKQogICAg
ICAgICAgICAgZ2V0QnlTdGF0dXMuZmlsdGVyKGJhc2UtPnN0cnVjdHVyZSgpLmdldCgpKTsKICAg
ICB9CisgICAgKi8KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4NDcwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKICAg
ICAgICAgICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKG1fc2l6ZUdQUiwg
bV9zdG9yYWdlR1BSKTsKLSAgICAgICAgaWYgKG1fY29udGlndW91c1N0cnVjdHVyZS5nZXQoKSAh
PSBtX2FycmF5U3RvcmFnZU9yQ29udGlndW91c1N0cnVjdHVyZS5nZXQoKSkgeworICAgICAgICBp
ZiAobV9jb250aWd1b3VzU3RydWN0dXJlICE9IG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3Ry
dWN0dXJlKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBq
aXQtPm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSk7CiAgICAgICAgICAgICBqaXQtPm1faml0Lm1vdmUoU3BlY3VsYXRpdmVK
SVQ6OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gaml0LT5tX2ppdC5qdW1wKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3Mp
OwogICAgICAgICB3cml0ZShKU0NlbGxfaW5kZXhpbmdUeXBlKTsKIAotICAgICAgICBpZiAobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0LT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5k
OjpQcm9wZXJ0eURlbGV0aW9uKSB7CisgICAgICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPm5l
eHQudHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikg
ewogICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgImRlbGV0ZSBmZW5jZSIgdG8gbW9kZWwgdGhl
IHByb3BlciBhbGlhc2luZyBvZiBmdXR1cmUgc3RvcmVzLgogICAgICAgICAgICAgLy8gQm90aCBp
biBERkcgYW5kIHdoZW4gd2UgbG93ZXIgdG8gQjMsIHdlIG1vZGVsIGFsaWFzaW5nIG9mIHByb3Bl
cnRpZXMgYnkKICAgICAgICAgICAgIC8vIHByb3BlcnR5ICBuYW1lLiBJbiBhIHdvcmxkIHdpdGhv
dXQgZGVsZXRlLCB0aGF0IGFsc28gbW9kZWxzIHtiYXNlLCBwcm9wZXJ0eU9mZnNldH0uCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2MSw2ICs4
NjEsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBjYXNlIE9iamVjdEdldE93blByb3BlcnR5
TmFtZXM6CiAgICAgICAgICAgICBjYXNlIE9iamVjdEtleXM6IHsKKyAgICAgICAgICAgICAgICAv
LyBPT1BTCisgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBhdXRv
JiBzdHJ1Y3R1cmVTZXQgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0
dXJlOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmlzRmluaXRlKCkgJiYg
c3RydWN0dXJlU2V0LnNpemUoKSA9PSAxKSB7CkBAIC04NzYsNiArODc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0xMDYxLDcgKzEwNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGlmIChhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGFic3Ry
YWN0VmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayAmPSAoc3RydWN0dXJlLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpICYgYml0cykgPT0gYml0czsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUudHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSAm
IGJpdHMpID09IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRy
YW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2
MiwxMyBAQCBEZXNpcmVkVHJhbnNpdGlvbnM6On5EZXNpcmVkVHJhbnNpdGlvbnMoCiB7CiB9CiAK
LXZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjphZGRMYXppbHkoQ29kZUJsb2NrKiBjb2RlT3JpZ2lu
T3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkK
K3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjphZGRMYXppbHkoQ29kZUJsb2NrKiBjb2RlT3JpZ2lu
T3duZXIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgb2xkU3RydWN0dXJlLCBSZWdpc3RlcmVkU3RydWN0
dXJlIG5ld1N0cnVjdHVyZSkKIHsKLSAgICBtX3RyYW5zaXRpb25zLmFwcGVuZChEZXNpcmVkVHJh
bnNpdGlvbihjb2RlT3JpZ2luT3duZXIsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVPcmlnaW5Pd25lcik7CisgICAgVU5VU0VEX1BBUkFNKG9sZFN0
cnVjdHVyZSk7CisgICAgVU5VU0VEX1BBUkFNKG5ld1N0cnVjdHVyZSk7CisgICAgLy8gT09QUwor
ICAgIC8vbV90cmFuc2l0aW9ucy5hcHBlbmQoRGVzaXJlZFRyYW5zaXRpb24oY29kZU9yaWdpbk93
bmVyLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpOwogfQogCiB2b2lkIERlc2lyZWRUcmFu
c2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2bSwgQ29tbW9uRGF0YSogY29tbW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShy
ZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAg
ICBEZXNpcmVkVHJhbnNpdGlvbnMoQ29kZUJsb2NrKik7CiAgICAgfkRlc2lyZWRUcmFuc2l0aW9u
cygpOwogCi0gICAgdm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0
cnVjdHVyZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBSZWdpc3RlcmVkU3RydWN0dXJlLCBSZWdpc3RlcmVkU3RydWN0dXJlKTsK
ICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
Miw3ICsyNjIsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAg
ICAgaWYgKG5vZGUtPmhhc1RyYW5zaXRpb24oKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPnRyYW5zaXRpb24oKSwgY29udGV4dCkpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQtPmlkKCkpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vb3V0LnByaW50
KCIsIElEOiIsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+aWQoKSk7CiAjZWxzZQogICAgICAg
ICBvdXQucHJpbnQoIiwgSUQ6IiwgUmF3UG9pbnRlcihub2RlLT50cmFuc2l0aW9uKCktPm5leHQu
Z2V0KCkpKTsKICNlbmRpZgpAQCAtMTI2OSw3ICsxMjcwLDEzIEBAIEpTVmFsdWUgR3JhcGg6OnRy
eUdldENvbnN0YW50UHJvcGVydHkoCiB7CiAgICAgaWYgKCFiYXNlIHx8ICFiYXNlLmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgCisKKworICAgIC8vIE9PUFM6Cisg
ICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZVNldCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7
CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAvKgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChiYXNlKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmVTZXQu
c2l6ZSgpOyBpLS07KSB7CkBAIC0xMzExLDYgKzEzMTgsNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlH
ZXRDb25zdGFudFByb3BlcnR5KAogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgcmV0
dXJuIG9iamVjdC0+Z2V0RGlyZWN0Q29uY3VycmVudGx5KHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAg
ICAqLwogfQogCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTVmFsdWUg
YmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKQEAgLTE0
ODUsNiArMTQ5MywxMiBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVl
CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2Zyb3plblZhbHVlcy5hZGQo
ZnJvemVuVmFsdWUpOwogfQogCitGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShSZWdpc3RlcmVk
U3RydWN0dXJlKQoreworICAgIC8vIE9PUFMKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogRnJv
emVuVmFsdWUqIEdyYXBoOjpmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBGcm96
ZW5WYWx1ZSogcmVzdWx0ID0gZnJlZXplKHZhbHVlKTsKQEAgLTE1NDksNiArMTU2Myw3IEBAIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgR3JhcGg6OnJlZ2lzdGVyU3RydWMKIAogdm9pZCBHcmFwaDo6cmVn
aXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CisgICAgLy8gT09QUwogICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemlseShzdHJ1
Y3R1cmUpOwogICAgIG1fcGxhbi53YXRjaHBvaW50cygpLmFkZExhemlseShzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwogfQpAQCAtMTczMCw2ICsxNzQ1LDcgQEAgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAogCiBib29sIEdyYXBoOjpnZXRSZWdF
eHBQcm90b3R5cGVQcm9wZXJ0eShKU09iamVjdCogcmVnRXhwUHJvdG90eXBlLCBTdHJ1Y3R1cmUq
IHJlZ0V4cFByb3RvdHlwZVN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1
ZSYgcmV0dXJuSlNWYWx1ZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gcmVnRXhwUHJvdG90eXBlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTc4MCw2ICsxNzk2LDggQEAgYm9vbCBHcmFwaDo6Y2FuT3B0aW1pemVTdHJpbmdPYmplY3RBY2Nl
cwogICAgIGlmIChoYXNFeGl0U2l0ZShjb2RlT3JpZ2luLCBCYWRDYWNoZSkgfHwgaGFzRXhpdFNp
dGUoY29kZU9yaWdpbiwgQmFkQ29uc3RhbnRDYWNoZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIC8vIE9PUFMKKwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbik7CiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUgPSBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpOwogICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cmluZ09iamVjdFN0cnVjdHVyZSk7CkBAIC0x
ODI5LDYgKzE4NDcsMTIgQEAgYm9vbCBHcmFwaDo6Y2FuRG9GYXN0U3ByZWFkKE5vZGUqIG5vZGUs
IAogICAgIC8vIFRoZSBwYXJhbWV0ZXIgJ3ZhbHVlJyBpcyB0aGUgQWJzdHJhY3RWYWx1ZSBmb3Ig
Y2hpbGQxICh0aGUgdGhpbmcgYmVpbmcgc3ByZWFkKS4KICAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBTcHJlYWQpOwogCisgICAgLy8gT09QUworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKG5vZGUpOworICAgIHJldHVybiBmYWxzZTsKKworICAgIC8qCiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBBcnJheVVzZSkgewogICAgICAgICAvLyBOb3Rl
OiB3ZSBvbmx5IHNwZWN1bGF0ZSBvbiBBcnJheVVzZSB3aGVuIHdlJ3ZlIHNldCB1cCB0aGUgbmVj
ZXNzYXJ5IHdhdGNocG9pbnRzCiAgICAgICAgIC8vIHRvIHByb3ZlIHRoYXQgdGhlIGl0ZXJhdGlv
biBwcm90b2NvbCBpcyBub24tb2JzZXJ2YWJsZSBzdGFydGluZyBmcm9tIEFycmF5UHJvdG90eXBl
LgpAQCAtMTg1Niw2ICsxODgwLDcgQEAgYm9vbCBHcmFwaDo6Y2FuRG9GYXN0U3ByZWFkKE5vZGUq
IG5vZGUsIAogICAgIH0pOwogCiAgICAgcmV0dXJuIGFsbEdvb2Q7CisgICAgKi8KIH0KIAogdm9p
ZCBHcmFwaDo6Y2xlYXJDUFNDRkdEYXRhKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDExICsyNDEsMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEZyb3plblZhbHVlKiBmcmVlemUoSlNWYWx1ZSk7IC8vIFdlIHVzZSB3ZWFrIGZy
ZWV6aW5nIGJ5IGRlZmF1bHQuCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZVN0cm9uZyhKU1ZhbHVl
KTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUpLT5zdHJlbmd0aGVuVG8oU3Ryb25nVmFs
dWUpLgorICAgIEZyb3plblZhbHVlKiBmcmVlemUoUmVnaXN0ZXJlZFN0cnVjdHVyZSk7CiAgICAg
CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFs
dWUpOwogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1
ZSk7CiAgICAgdm9pZCBjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKTsKIAorICAgIGJvb2wgaXNVbmxpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNVbmxp
bmtlZDsgfQorICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhaXNVbmxpbmtlZCgp
OyB9CisKICAgICAvLyBVc2UgdGhpcyB0byBwcm9kdWNlIGEgdmFsdWUgeW91IGtub3cgd29uJ3Qg
YmUgYWNjZXNzZWQgYnV0IHRoZSBjb21waWxlcgogICAgIC8vIG1pZ2h0IHRoaW5rIGlzIGxpdmUu
IEZvciBleG1hcGxlLCBpbiBvdXIgb3BfaXRlcmF0b3JfbmV4dCBwYXJzaW5nCiAgICAgLy8gdmFs
dWUgVmlydHVhbFJlZ2lzdGVyIGlzIG9ubHkgcmVhZCBpZiB3ZSBhcmUgbm90ICJkb25lIi4gQmVj
YXVzZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEwICsyNjYsMTUgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hXZWFrU3RydWN0dXJlKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBSZWdpc3RlcmVkU3RydWN0dXJlIHdlYWtT
dHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHdlYWtTdHJ1
Y3R1cmUuZ2V0KCk7CisgICAgICAgIC8vU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB3ZWFrU3RydWN0
dXJlLmdldCgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEp1bXAgcmVzdWx0ID0gYnJh
bmNoMzIoY29uZCwgbGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICBVTlVTRURfUEFSQU0od2Vha1N0cnVjdHVyZSk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOwor
ICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL0p1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwg
bGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOworICAgICAgICAvL3JldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBKdW1wKCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMjg0NzAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDExICsxMDgsMTEgQEAgdm9pZCBOb2RlOjpyZW1vdmUoR3JhcGgmIGdyYXBoKQogICAg
IHN3aXRjaCAob3AoKSkgewogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG11bHRpR2V0QnlPZmZzZXREYXRhKCk7Ci0gICAg
ICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgc2V0
OwogICAgICAgICBmb3IgKE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogZGF0YS5jYXNl
cykgewogICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5mb3JFYWNoKAogICAgICAgICAgICAgICAg
IFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0LmFkZChzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBzZXQuYWRk
KHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgY29u
dmVydFRvQ2hlY2tTdHJ1Y3R1cmUoZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MjgsNyArOTI4LDcgQEAgcHJpdmF0ZToKICAgICBBbGxvY2F0aW9uKiBo
YW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3MoTm9kZSogbm9kZSwgSGFzaE1hcDxQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvciwgTGF6eU5vZGU+JiB3cml0ZXMpCiAgICAgewogICAgICAgICBBbGxvY2F0
aW9uKiByZXN1bHQgPSAmbV9oZWFwLm5ld0FsbG9jYXRpb24obm9kZSwgQWxsb2NhdGlvbjo6S2lu
ZDo6SW50ZXJuYWxGaWVsZE9iamVjdCk7Ci0gICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExv
YywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUobm9kZS0+c3RydWN0dXJlKCkuZ2V0KCkpKSk7Cisg
ICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUo
bm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIGF1dG8gaW5pdGlhbFZhbHVlcyA9IEludGVy
bmFsRmllbGRDbGFzczo6aW5pdGlhbFZhbHVlcygpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KGlu
aXRpYWxWYWx1ZXMuc2l6ZSgpID09IEludGVybmFsRmllbGRDbGFzczo6bnVtYmVyT2ZJbnRlcm5h
bEZpZWxkcyk7ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgaW5pdGlhbFZhbHVlcy5zaXplKCk7ICsraW5kZXgpCkBAIC05NTUsNyArOTU1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHRhcmdldCA9ICZtX2hlYXAubmV3QWxsb2NhdGlvbihub2RlLCBB
bGxvY2F0aW9uOjpLaW5kOjpPYmplY3QpOwogICAgICAgICAgICAgdGFyZ2V0LT5zZXRTdHJ1Y3R1
cmVzKG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHdyaXRlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUobm9kZS0+c3Ry
dWN0dXJlKCkuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlUExvYywgTGF6eU5v
ZGUobV9ncmFwaC5mcmVlemUobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgpAQCAtOTgyLDcgKzk4Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIE5ld0ludGVybmFsRmllbGRPYmplY3Q6IHsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPnN0cnVjdHVyZSgpLnR5cGVJbmZvKCkudHlw
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEpTQXJyYXlJdGVyYXRvclR5cGU6CiAgICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gaGFuZGxlSW50ZXJuYWxGaWVsZENsYXNzPEpTQXJyYXlJdGVyYXRvcj4o
bm9kZSwgd3JpdGVzKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk5MywxMCArOTkzLDEw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaGFuZGxlSW50ZXJuYWxGaWVs
ZENsYXNzPEpTU2V0SXRlcmF0b3I+KG5vZGUsIHdyaXRlcyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEpTUHJvbWlzZVR5cGU6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5m
bygpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKS5jbGFzc0luZm8oKSA9
PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQogICAgICAgICAgICAgICAgICAgICB0YXJnZXQg
PSBoYW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3M8SlNJbnRlcm5hbFByb21pc2U+KG5vZGUsIHdyaXRl
cyk7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0g
SlNQcm9taXNlOjppbmZvKCkpOwogICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBoYW5kbGVJ
bnRlcm5hbEZpZWxkQ2xhc3M8SlNQcm9taXNlPihub2RlLCB3cml0ZXMpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgdGFyZ2V0ID0gbV9o
ZWFwLm9ubHlMb2NhbEFsbG9jYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAg
ICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc09iamVjdEFsbG9jYXRpb24oKSkgewotICAgICAg
ICAgICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVl
emUoSlNWYWx1ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQuZ2V0KCkpKSkpOworICAgICAgICAg
ICAgICAgIHdyaXRlcy5hZGQoU3RydWN0dXJlUExvYywgTGF6eU5vZGUobV9ncmFwaC5mcmVlemUo
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkpOwogICAgICAgICAgICAgICAgIHRhcmdldC0+c2V0
U3RydWN0dXJlcyhub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgbV9oZWFwLmVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwpA
QCAtMjUwMyw3ICsyNTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBUaGlzIHN0
cnVjdHVyZSBzZXQgaXMgY29uc2VydmF0aXZlLiBUaGlzIHNldCBjYW4gaW5jbHVkZSBTdHJ1Y3R1
cmUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIGxlZ2l0IHByb3BlcnR5LgogICAgICAgICAgICAgICAg
IC8vIFdlIGZpbHRlciBvdXQgc3VjaCBhbiBhcHBhcmVudGx5IGluYXBwcm9wcmlhdGUgc3RydWN0
dXJlcyBoZXJlIHNpbmNlIE11bHRpUHV0QnlPZmZzZXQgYXNzdW1lcyBhbGwgdGhlIHN0cnVjdHVy
ZXMKICAgICAgICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IGZv
ciB0aGUgZ2l2ZW4gcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCkgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLmdldENvbmN1cnJlbnRseSh1aWQpICE9IGludmFsaWRPZmZzZXQpCiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9
CiAKQEAgLTI1MTUsMTMgKzI1MTUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVzLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlcy5lbmQoKSwKICAgICAg
ICAgICAgICAgICBbdWlkXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBhLCBSZWdpc3RlcmVkU3RydWN0
dXJlIGIpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCkgPCBiLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGEuZ2V0Q29uY3VycmVudGx5KHVpZCkgPCBiLmdldENvbmN1cnJlbnRseSh1aWQp
OwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1
Y3R1cmVzLnNpemUoKSk7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdE9mZnNldCA9
IHN0cnVjdHVyZXNbMF0tPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgZmlyc3RPZmZzZXQgPSBzdHJ1Y3R1cmVzWzBdLmdldENvbmN1cnJlbnRseSh1aWQp
OwogCi0gICAgICAgICAgICBpZiAoZmlyc3RPZmZzZXQgPT0gc3RydWN0dXJlcy5sYXN0KCktPmdl
dENvbmN1cnJlbnRseSh1aWQpKSB7CisgICAgICAgICAgICBpZiAoZmlyc3RPZmZzZXQgPT0gc3Ry
dWN0dXJlcy5sYXN0KCkuZ2V0Q29uY3VycmVudGx5KHVpZCkpIHsKICAgICAgICAgICAgICAgICBO
b2RlKiBzdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBk
ZWNpZGUgdG8gc2luayBvYmplY3RzIHdpdGggYQogICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5
IHN0b3JhZ2UsIHdlIHNob3VsZCBoYW5kbGUgbm9uLWlubGluZSBvZmZzZXRzLgpAQCAtMjU0Mywx
MSArMjU0MywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKIAorICAgICAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgICAgIC8qCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IGZpcnN0T2Zmc2V0OwogICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVNldCBjdXJyZW50U2V0OwogICAgICAgICAgICAgICAgIGZvciAoUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CisgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNl
dCAhPSBjdXJyZW50T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNl
IG91ciBhbmFseXNpcyB0cmVhdHMgTXVsdGlQdXRCeU9mZnNldCBsaWtlIGFuIGVzY2FwZSwgd2Ug
b25seSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggc3Rvcmlu
ZyByZXN1bHRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgc3RvcmVkIGJ5IFB1dEJ5
T2Zmc2V0CkBAIC0yNTYyLDYgKzI1NjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBs
YWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAg
ICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExNSw3ICsx
MTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTmV3
SW50ZXJuYWxGaWVsZE9iamVjdDoKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24oc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKG1fY3VycmVudE5vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSk7CisgICAg
ICAgICAgICBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2UobV9jdXJy
ZW50Tm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXlTbGljZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyODQ3MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBjbGFzcyBSZWdpc3RlcmVkU3RydWN0dXJlIHsK
IHB1YmxpYzoKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlKCkgPSBkZWZhdWx0OwogCi0gICAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9
Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAg
ICAvL1N0cnVjdHVyZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVyZSYgb3RoZXIpIGNvbnN0
CiAgICAgewpAQCAtNTUsOSArNTQsMzggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISFnZXQo
KTsKICAgICB9CiAKKyAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLT50eXBlSW5mbygpOyB9CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7IH0KKyAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmluZGV4aW5nTW9k
ZSgpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsgfQorICAgIGJvb2wgaGFzUG9seVByb3RvKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpOyB9CisgICAgSlNWYWx1ZSBz
dG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCk7IH0KKyAgICBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpOyB9CisgICAgLy8gT09QUworICAgIGJv
b2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgp
OworICAgIH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOyB9CisgICAgdW5zaWduZWQgb3V0T2ZMaW5lQ2Fw
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsg
fQorICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKTsgfQorICAgIFZlY3RvcjxQcm9wZXJ0
eU1hcEVudHJ5PiBnZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKTsgfQorICAgIGJvb2wgaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOyB9CisgICAgUHJvcGVydHlPZmZz
ZXQgZ2V0Q29uY3VycmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCB1bnVzZWQ7CisgICAgICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkodWlkLCB1
bnVzZWQpOworICAgIH0KKyAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpOyB9
CisgICAgYm9vbCBkZmdTaG91bGRXYXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5k
ZmdTaG91bGRXYXRjaCgpOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoOwog
CisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlOyB9CisKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgdm9pZCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlYwogewogICAgIGdlbmVy
aWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIC0+
IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHR5cGUgJiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlICYgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlTGlrZShzdHJ1Y3R1cmUpOwogICAgICAgICB9KTsKIH0KIApAQCAtNTMs
NyArNTMsNyBAQCB2b2lkIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6OmZpbHRlckFycmF5CiB7CiAg
ICAgZ2VuZXJpY0ZpbHRlcigKICAgICAgICAgWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlNb2RlcyAmIGFycmF5TW9k
ZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gYXJy
YXlNb2RlcyAmIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgICAgIH0p
OwogfQogCkBAIC02OSw3ICs2OSw3IEBAIFNwZWN1bGF0ZWRUeXBlIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQ6OnMKICAgICBTcGVjdWxhdGVkVHlwZSByZXN1bHQgPSBTcGVjTm9uZTsKICAgICBmb3JF
YWNoKAogICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAg
ICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
KHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihyZXN1bHQs
IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKSk7CiAgICAgICAgIH0pOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03OSwxOCArNzksMjIgQEAgQXJyYXlNb2RlcyBSZWdp
c3RlcmVkU3RydWN0dXJlU2V0OjphcnJheQogICAgIEFycmF5TW9kZXMgcmVzdWx0ID0gMDsKICAg
ICBmb3JFYWNoKAogICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7
Ci0gICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMocmVzdWx0LCBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZShzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1
bHQsIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICB9KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6OnZhbGlk
YXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMp
IGNvbnN0CiB7CisgICAgVU5VU0VEX1BBUkFNKHRyYWNrZWRSZWZlcmVuY2VzKTsKICAgICAvLyBU
aGUgdHlwZSBzeXN0ZW0gc2hvdWxkIGhlbHAgdXMgaGVyZSwgYnV0IHByb3RlY3QgcGVvcGxlIGZy
b20gZ2V0dGluZyB0aGF0IHdyb25nIHVzaW5nIGJpdHdpc2VfY2FzdCBvciBzb21ldGhpbmcgY3Jh
enkuCisgICAgLy8gT09QUworICAgIC8qCiAgICAgZm9yRWFjaCgKICAgICAgICAgWyZdIChSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewogICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5j
ZXMuY2hlY2soc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgfSk7CisgICAgKi8KIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDI4NDcwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NywxMCArNTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gb25seUVudHJ5KCk7CiAgICAgfQogCisgICAgLy8gT09QUwogICAgIFN0cnVjdHVyZVNldCB0
b1N0cnVjdHVyZVNldCgpIGNvbnN0CiAgICAgewogICAgICAgICBTdHJ1Y3R1cmVTZXQgcmVzdWx0
OwotICAgICAgICBmb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsg
cmVzdWx0LmFkZChzdHJ1Y3R1cmUuZ2V0KCkpOyB9KTsKKyAgICAgICAgLy9mb3JFYWNoKFsmXSAo
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsgcmVzdWx0LmFkZChzdHJ1Y3R1cmUuZ2V0
KCkpOyB9KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSB8fCB2YWx1ZS5zaXpl
KCkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gdmFs
dWVbMF0uZ2V0KCkgPT0gZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CisgICAgICAg
IHJldHVybiB2YWx1ZVswXS5jbGFzc0luZm8oKSA9PSBncmFwaC5tX3ZtLmdldHRlclNldHRlclN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CiAgICAgfQogCiAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAg
LTQxMywxMSArNDEzLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUgPSB2YWx1ZVtpXS5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0aGlzU3RydWN0dXJlID0gdmFsdWVbaV07
CisgICAgICAgICAgICBpZiAodGhpc1N0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSAwOwotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgY2hlY2tPZmZzZXQgPSB0
aGlzU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IGNoZWNrT2Zmc2V0ID0gdGhpc1N0cnVjdHVyZS5nZXRDb25jdXJy
ZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGlmIChjaGVja09mZnNldCAhPSBk
ZXNpcmVkT2Zmc2V0IHx8ICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC00NDYsMTAg
KzQ0NiwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
ICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJlID0gdmFsdWVbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICBpZiAodGhpc1N0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgdGhpc1N0cnVjdHVyZSA9IHZhbHVlW2ldOworICAgICAg
ICAgICAgaWYgKHRoaXNTdHJ1Y3R1cmUuaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIXRoaXNTdHJ1Y3R1cmUt
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIGlmICghdGhpc1N0cnVjdHVyZS5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgYm9vbCBpc1NhZmUgPSB0
cnVlOwogICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IG5vZGUtPnJlcXVpcmVk
RE9NSklUQ2xhc3NJbmZvKCk7CiAgICAgICAgIHN0cnVjdHVyZXMuZm9yRWFjaChbJl0gKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBpc1NhZmUgJj0gc3RydWN0
dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbyk7CisgICAgICAgICAgICBp
c1NhZmUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBpc1NhZmU7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjA3LDcgKzM2MDcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5l
d1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3Jh
cGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLCBu
ZXdTdHJ1Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MDAsNyArMjcwMCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICBhdXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+dHlwZWRB
cnJheVR5cGUoKTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0Lmdy
YXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJl
Q29uY3VycmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlLmdldCgpKTsKIAogICAgIFNwZWN1bGF0ZVN0cmljdEludDUyT3BlcmFuZCBzaXplKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CkBAIC00
NTQzLDcgKzQ1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBv
bGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsK
LSAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCks
IG5ld1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5z
aXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIo
KSwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CkBAIC00NTUxLDcgKzQ1NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJl
LCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdN
b2RlKCkpOwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9
PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U3RydWN0dXJlLT5pZCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAg
ICAgIHN0b3JlU3RydWN0dXJlSUQobmV3U3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsMTIgKzk0LDEyIEBAIFNwZWN1bGF0aXZlSklUOjp+U3BlY3VsYXRp
dmVKSVQoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplY3QoR1BS
UmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsIEdQUlJlZyBzdG9y
YWdlR1BSLCB1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewot
ICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSk7Ci0g
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7
CisgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSkpOwor
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCk7
CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4
aW5nVHlwZSk7CiAKLSAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKTsKLSAgICB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IHN0
cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5
ID0gc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwpAQCAtMTA3
LDcgKzEwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAg
ICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAgIEFTU0VSVCh2ZWN0
b3JMZW5ndGggPj0gbnVtRWxlbWVudHMpOwotICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6
b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLmdldCgpLCB2ZWN0b3JMZW5n
dGgpOworICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0
b3JMZW5ndGgoc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7CiAg
ICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIApAQCAtMTM0LDEzICsx
MzQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIH0K
IAogICAgIEFsbG9jYXRvciBhbGxvY2F0b3I7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZSgpID09
IEpTVHlwZTo6QXJyYXlUeXBlKQorICAgIGlmIChzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCkg
PT0gSlNUeXBlOjpBcnJheVR5cGUpCiAgICAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWxDb25jdXJyZW50bHk8SlNBcnJheT4odm0sIEpTQXJyYXk6OmFsbG9jYXRpb25TaXpl
KGlubGluZUNhcGFjaXR5KSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
ICAgIGVsc2UKICAgICAgICAgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSwgSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
aW5saW5lQ2FwYWNpdHkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAg
ICAgaWYgKGFsbG9jYXRvcikgewogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRH
UFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsK
LSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwogICAg
IH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKQEAgLTE1
Myw3ICsxNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAK
ICAgICBpZiAobnVtRWxlbWVudHMgPCB2ZWN0b3JMZW5ndGgpIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKQEAgLTE2MSw3
ICsxNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciB2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUuaW5kZXhp
bmdUeXBlKCkpKQogICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKQEAg
LTE3NSw3ICsxNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmpl
CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0
ZWRJbW0zMihudW1FbGVtZW50cyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgIAotICAgIG1faml0LmVt
aXRJbml0aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9yYWdlR1BSLCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOworICAgIG1faml0LmVtaXRJbml0aWFsaXplT3V0T2ZMaW5lU3RvcmFn
ZShzdG9yYWdlR1BSLCBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAg
bV9qaXQubXV0YXRvckZlbmNlKHZtKTsKIH0KQEAgLTkyMTQsNyArOTIxNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2QKICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCwgb25lIHdheSBvciBhbm90aGVyLCByZXN1bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2lu
dGVycyB0bwogICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVj
dGl2ZWx5LgogCi0gICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgQVNTRVJUKCFoYXNV
bmRlY2lkZWQoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4o
KSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5k
ZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgewogICAgICAgICAgICAg
RWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCk7
CkBAIC0xMDQ0MiwxNCArMTA0NDIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrU3RydWN0dQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+
cHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VSVChpbml0aWFsT3V0T2ZM
aW5lQ2FwYWNpdHkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKKyAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMub3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2Rl
LT50cmFuc2l0aW9uKCktPm5leHQub3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAgc2l6
ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAotICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24o
KS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICBpZiAoIWFsbG9j
YXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CkBAIC0xMDQ4NywxMyArMTA0ODcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFs
bG9jYXRlUHJvcAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShOb2RlKiBub2RlKQogewotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVl
KTsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMub3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9
IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0g
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpKTsKKyAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQu
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCiAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKLSAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZp
b3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgaWYgKCFhbGxvY2F0b3IgfHwg
bm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMTEx
NDgsNyArMTExNDgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJh
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgYXV0byB0eXBlZEFycmF5VHlw
ZSA9IG5vZGUtPnR5cGVkQXJyYXlUeXBlKCk7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlw
ZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHN0cnVjdHVyZS5nZXQoKSk7CiAKICNpZiBVU0UoTEFSR0VfVFlQRURfQVJSQVlT
KQogICAgIC8vIFRoZSBvcGVyYXRpb25zIHdlIGNhbGwgb24gdGhlIHNsb3cgcGF0aCBleHBlY3Qg
YSBpbnRwdHJfdCwgc28gaW50NjRfdCBvbiA2NCBiaXQgcGxhdGZvcm1zCkBAIC0xMzExMiw3ICsx
MzExMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU4KIAogICAg
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKCk7CiAgICAgICAgIAotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCk7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSk7CiAgICAgaW50MzJfdCBwdWJsaWNM
ZW5ndGggPSAwOwogICAgIGludDMyX3QgdmVjdG9yTGVuZ3RoID0gMDsKQEAgLTEzMTU5LDggKzEz
MTU4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFsaXplTgogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgLy8g
T09QUwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9qaXQuZ3JhcGgoKS5pZGVudGlm
aWVycygpW2Rlc2NyaXB0b3IuaW5mbygpXTsKLSAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBF
bnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7Cisg
ICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUuZ2V0UHJv
cGVydGllc0NvbmN1cnJlbnRseSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCAhPSBlbnRy
eS5rZXkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzkzNiwxMSArMTM5
MzYsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KAogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzCisgICAgLyoKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwot
ICAgIAogICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAKICAgICBhdXRvJiB2YXJp
YW50cyA9IG5vZGUtPm1hdGNoU3RydWN0dXJlRGF0YSgpLnZhcmlhbnRzOwpAQCAtMTM5NTksNiAr
MTM5NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1CiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQ
Uiwgbm9kZSk7CisgICAgKi8KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFBy
b3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQpAQCAtMTQwMDAsMTQgKzE0MDA3LDE1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm9wZXJ0eUUKICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc1R5cGUoU3BlY09iamVjdCkgJiYgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRl
KCkpIHsKICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmcgPSBmYWxzZTsKICAgICAgICAgICAg
IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA+IEFycmF5V2l0aFVuZGVjaWRlZCkKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmlu
ZGV4aW5nVHlwZSgpID4gQXJyYXlXaXRoVW5kZWNpZGVkKQogICAgICAgICAgICAgICAgICAgICBo
YXNJbmRleGluZyA9IHRydWU7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICghaGFz
SW5kZXhpbmcpCiAgICAgICAgICAgICAgICAgc2tpcEluZGV4aW5nTWFza0NoZWNrID0gdHJ1ZTsK
ICAgICAgICAgICAgIG9ubHlTdHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKG9ubHlTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmFyZURhdGEgPSBvbmx5U3RydWN0dXJlLT50cnlSYXJlRGF0YSgpOworICAgICAgICAgICAg
Ly8gT09QUzoKKyAgICAgICAgICAgIC8vaWYgKG9ubHlTdHJ1Y3R1cmUpCisgICAgICAgICAgICAv
LyAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIXNraXBJbmRleGluZ01hc2tDaGVjaykgewpAQCAtMTQ2MTEsMTQgKzE0
NjE5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4odm0oKSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKICAgICBpZiAoIWFsbG9jYXRvclZhbHVlKQogICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0
b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0LmVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgIH0KIApAQCAtMTQ2
MzAsNiArMTQ2MzgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChO
bwogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcywgdHlwZW5hbWUgT3BlcmF0aW9uPgogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsKE5vZGUqIG5v
ZGUsIE9wZXJhdGlvbiBvcGVyYXRpb24pCiB7CisgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAg
IFVOVVNFRF9QQVJBTShvcGVyYXRpb24pOworICAgIC8vIE9PUFM6CisgICAgLyoKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsK
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CkBAIC0xNDY1Miw2ICsxNDY2NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRlcm5hbEYKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sIHJlc3Vs
dEdQUiwgJnZtKCksIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwogCiAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICovCiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdHZW5lcmF0b3IoTm9kZSogbm9kZSkKQEAgLTE0NjY2LDcgKzE0Njc5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FzeW5jR2VuZQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdChOb2RlKiBub2RlKQogewotICAgIHN3
aXRjaCAobm9kZS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgc3dpdGNo
IChub2RlLT5zdHJ1Y3R1cmUoKS50eXBlSW5mbygpLnR5cGUoKSkgewogICAgIGNhc2UgSlNBcnJh
eUl0ZXJhdG9yVHlwZToKICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBs
PEpTQXJyYXlJdGVyYXRvcj4obm9kZSwgb3BlcmF0aW9uTmV3QXJyYXlJdGVyYXRvcik7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTQ2NzcsMTAgKzE0NjkwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdJbnRlcm5hbEYKICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPEpTU2V0SXRlcmF0b3I+KG5vZGUsIG9wZXJhdGlvbk5ld1NldEl0ZXJhdG9yKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBKU1Byb21pc2VUeXBlOiB7Ci0gICAgICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkK
KyAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQ
cm9taXNlOjppbmZvKCkpCiAgICAgICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8SlNJbnRlcm5hbFByb21pc2U+KG5vZGUsIG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlz
ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBKU1Byb21pc2U6OmluZm8oKSk7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOwogICAg
ICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTUHJvbWlzZT4obm9k
ZSwgb3BlcmF0aW9uTmV3UHJvbWlzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
NTA3MCw3ICsxNTA4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5
cGUKICAgICAgICAgICAgIGJvb2wgaGFzUG9seVByb3RvID0gZmFsc2U7CiAgICAgICAgICAgICBi
b29sIGhhc01vbm9Qcm90byA9IGZhbHNlOwogICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUu
Zm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS5oYXNQb2x5UHJvdG8oKSkKICAgICAgICAgICAgICAgICAgICAgaGFzUG9seVBy
b3RvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGhh
c01vbm9Qcm90byA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw5ICsx
MjUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNl
X29mPEpTQ2VsbCwgVD46OnZhbHVlLCAiVG8gdXNlIGEgR0MgcG9pbnRlciwgdGhlIGdyYXBoIG11
c3QgYmUgYXdhcmUgb2YgaXQuIFVzZSBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIgaW5zdGVhZC4iKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE9PUFMKICAgICAg
ICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0cihSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkK
LSAgICAgICAgICAgIDogbV92YWx1ZShzdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgIHsgfQorICAg
ICAgICAgICAgLy86IG1fdmFsdWUoc3RydWN0dXJlLmdldCgpKQorICAgICAgICAgICAgOiBtX3Zh
bHVlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1
cmUpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tUHRy
KHN0ZDo6bnVsbHB0cl90KQogICAgICAgICAgICAgOiBtX3ZhbHVlKG51bGxwdHIpCkBAIC0xODA0
LDYgKzE4MDgsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2VuZXJhdGlvbkluZm8oZWRn
ZS5ub2RlKCkpOwogICAgIH0KIAorICAgIC8vIE9PUFM6IGltcGxlbWVudAorICAgIHZvaWQgc3Rv
cmVTdHJ1Y3R1cmVJRChSZWdpc3RlcmVkU3RydWN0dXJlLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1faml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCksIGFkZHJlc3MpOworICAgIH0KKwogICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFs
c28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRDb21waWxl
ciYgbV9qaXQ7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlz
aW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1JlZwogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBncmFwaC5hc3NlcnRJ
c1JlZ2lzdGVyZWQoYXQoaSkuZ2V0KCkpOworICAgICAgICBncmFwaC5hc3NlcnRJc1JlZ2lzdGVy
ZWQoYXQoaSkpOwogfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAKQEAgLTU4LDE0ICs1OCwx
NCBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQogICAgIGlmIChtX3Nl
dC5pc1RoaW4oKSkgewogICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZUVudHJ5KCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmICghbV9zZXQuc2luZ2xlRW50cnkoKS0+ZGZnU2hvdWxk
V2F0Y2goKSkKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVFbnRyeSgpLmRmZ1Nob3VsZFdhdGNo
KCkpCiAgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0
ID0gbV9zZXQubGlzdCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3RoOyBp
LS07KSB7Ci0gICAgICAgIGlmICghbGlzdC0+bGlzdCgpW2ldLT5kZmdTaG91bGRXYXRjaCgpKSB7
CisgICAgICAgIGlmICghbGlzdC0+bGlzdCgpW2ldLmRmZ1Nob3VsZFdhdGNoKCkpIHsKICAgICAg
ICAgICAgIG1ha2VUb3AoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzQs
NyArNzQsNyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQogCiB2b2lk
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgZnJvbSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0bykKIHsKLSAgICBBU1NFUlQoIWZyb20t
PmRmZ1Nob3VsZFdhdGNoKCkpOworICAgIEFTU0VSVCghZnJvbS5kZmdTaG91bGRXYXRjaCgpKTsK
IAogICAgIGlmIChpc1RvcCgpKQogICAgICAgICByZXR1cm47CkBAIC05Niw3ICs5Niw3IEBAIHZv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW4KICAgICAKICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0IG5ld1N0cnVjdHVyZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVj
dG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICBBU1NFUlQoIXZlY3RvcltpXS5wcmV2aW91cy0+
ZGZnU2hvdWxkV2F0Y2goKSk7CisgICAgICAgIEFTU0VSVCghdmVjdG9yW2ldLnByZXZpb3VzLmRm
Z1Nob3VsZFdhdGNoKCkpOwogCiAgICAgICAgIGlmICghbV9zZXQuY29udGFpbnModmVjdG9yW2ld
LnByZXZpb3VzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU1LDcgKzI1NSw3IEBAIHZv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdygKICAgICAKICAgICBtX3NldC5n
ZW5lcmljRmlsdGVyKAogICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
KSB7Ci0gICAgICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVj
dHVyZS5nZXQoKSkgJiB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmVMaWtlKHN0cnVjdHVyZSkgJiB0eXBlKTsKICAgICAgICAgfSk7CiB9CiAKQEAg
LTI2NCw3ICsyNjQsNyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlckNsYXNz
CiAgICAgQVNTRVJUKCFpc1RvcCgpKTsKICAgICBtX3NldC5nZW5lcmljRmlsdGVyKAogICAgICAg
ICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJ
bmZvKTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTM0NCw3ICszNDQsNyBAQCBib29sIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmlzU3ViQ2xhc3NPCiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5j
dGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cnVjdHVyZSBzZXQgaXMgZW1wdHkuCiAgICAgZm9y
IChjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA6IG1fc2V0KSB7Ci0gICAgICAg
IGlmICghc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZv
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNTcsNyArMzU3LDcgQEAgYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc05vdFN1YkNs
YQogCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBz
dHJ1Y3R1cmUgc2V0IGlzIGVtcHR5LgogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBzdHJ1Y3R1cmUgOiBtX3NldCkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8o
KS0+aXNTdWJDbGFzc09mKGNsYXNzSW5mbykpCisgICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJ
bmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyODQ3
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fc2V0OwogICAgIH0KIAorICAgIC8vIE9PUFM6CiAgICAgU3RydWN0dXJlU2V0IHRv
U3RydWN0dXJlU2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRmlu
aXRlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24u
Y3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ry
YW5zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgVHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKLSAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQocHJldmlvdXMuZ2V0KCksIGNvbnRleHQpLCAiIC0+
ICIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5leHQuZ2V0KCksIGNvbnRleHQpKTsKKyAgICBVTlVT
RURfUEFSQU0ob3V0KTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgLy8gT09QUwor
ICAgIC8vb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KHByZXZpb3VzLmdldCgpLCBjb250
ZXh0KSwgIiAtPiAiLCBwb2ludGVyRHVtcEluQ29udGV4dChuZXh0LmdldCgpLCBjb250ZXh0KSk7
CiB9CiAKIHZvaWQgVHJhbnNpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxOSArNDMsMTggQEAgc3RydWN0IEFycmF5VHlwZUNoZWNrOwogc3RydWN0IFN0cnVjdHVyZVR5
cGVDaGVjazsKIAogc3RydWN0IENoZWNrRGF0YSB7Ci0gICAgU3RydWN0dXJlKiBtX3N0cnVjdHVy
ZTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG1fc3RydWN0dXJlOwogICAgIEFycmF5TW9kZSBt
X2FycmF5TW9kZTsKICAgICBib29sIG1fYXJyYXlNb2RlSXNWYWxpZDsKICAgICBib29sIG1fYXJy
YXlNb2RlSG9pc3RpbmdPa2F5OwogICAgIAogICAgIENoZWNrRGF0YSgpCi0gICAgICAgIDogbV9z
dHJ1Y3R1cmUobnVsbHB0cikKLSAgICAgICAgLCBtX2FycmF5TW9kZUlzVmFsaWQoZmFsc2UpCisg
ICAgICAgIDogbV9hcnJheU1vZGVJc1ZhbGlkKGZhbHNlKQogICAgICAgICAsIG1fYXJyYXlNb2Rl
SG9pc3RpbmdPa2F5KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgQ2hlY2tEYXRhKFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIENoZWNrRGF0YShSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cnVjdHVyZSkKICAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCiAgICAgICAgICwgbV9h
cnJheU1vZGVJc1ZhbGlkKGZhbHNlKQogICAgICAgICAsIG1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5
KHRydWUpCkBAIC02Myw4ICs2Miw3IEBAIHN0cnVjdCBDaGVja0RhdGEgewogICAgIH0KIAogICAg
IENoZWNrRGF0YShBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICA6IG1fc3RydWN0dXJlKG51
bGxwdHIpCi0gICAgICAgICwgbV9hcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICA6IG1fYXJy
YXlNb2RlKGFycmF5TW9kZSkKICAgICAgICAgLCBtX2FycmF5TW9kZUlzVmFsaWQodHJ1ZSkKICAg
ICAgICAgLCBtX2FycmF5TW9kZUhvaXN0aW5nT2theSh0cnVlKQogICAgIHsKQEAgLTUwMiwxMiAr
NTAwLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRh
Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZCh2YXJpYWJsZSwgQ2hlY2tEYXRhKHN0cnVj
dHVyZS5nZXQoKSkpOworICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNr
RGF0YT46OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQodmFyaWFibGUsIENoZWNrRGF0YShz
dHJ1Y3R1cmUpKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tX3N0cnVjdHVyZSA9
PSBzdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1f
c3RydWN0dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5tX3N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUubV9zdHJ1Y3R1cmUgPSBSZWdpc3RlcmVkU3RydWN0dXJlKCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgbm90aWNlU3RydWN0dXJlQ2hlY2soVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSwgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBzZXQpCkBAIC01NDMsNyArNTQx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFyZXN1bHQt
PnZhbHVlLm1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5IHx8ICFyZXN1bHQtPnZhbHVlLm1fYXJyYXlN
b2RlSXNWYWxpZCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHJlc3VsdC0+dmFs
dWUubV9hcnJheU1vZGUuc3RydWN0dXJlV291bGRQYXNzQXJyYXlNb2RlRmlsdGVyaW5nKHN0cnVj
dHVyZS5nZXQoKSkpCisgICAgICAgIGlmIChyZXN1bHQtPnZhbHVlLm1fYXJyYXlNb2RlLnN0cnVj
dHVyZVdvdWxkUGFzc0FycmF5TW9kZUZpbHRlcmluZyhzdHJ1Y3R1cmUpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICByZXN1bHQtPnZhbHVlLmRpc2FibGVDaGVja0FycmF5SG9pc3Rpbmco
KTsKICAgICB9CkBAIC01OTMsMTggKzU5MSwyNCBAQCBzdHJ1Y3QgQXJyYXlUeXBlQ2hlY2sgewog
c3RydWN0IFN0cnVjdHVyZVR5cGVDaGVjayB7CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFRvSG9p
c3QoQ2hlY2tEYXRhJiBjaGVja0RhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gY2hlY2tEYXRh
Lm1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gISFjaGVja0RhdGEubV9zdHJ1Y3R1cmU7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgZGlzYWJsZUhvaXN0aW5nKENoZWNrRGF0YSYgY2hlY2tE
YXRhKQogICAgIHsKLSAgICAgICAgY2hlY2tEYXRhLm1fc3RydWN0dXJlID0gbnVsbHB0cjsKKyAg
ICAgICAgY2hlY2tEYXRhLm1fc3RydWN0dXJlID0gUmVnaXN0ZXJlZFN0cnVjdHVyZSgpOwogICAg
IH0KIAorICAgIC8vIE9PUFMKICAgICBzdGF0aWMgYm9vbCBpc0NvbnRyYXZlbmVkQnlWYWx1ZShD
aGVja0RhdGEmIGNoZWNrRGF0YSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAgICAgIFVOVVNF
RF9QQVJBTShjaGVja0RhdGEpOworICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8qCiAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NlbGwo
KSk7CiAgICAgICAgIHJldHVybiBjaGVja0RhdGEubV9zdHJ1Y3R1cmUgIT0gdmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpOworICAgICAgICAqLwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGhh
c0Vub3VnaFZvdGVzVG9Ib2lzdChWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDI4NDcw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gcHJldmlvdXNOb2RlLT5vcmlnaW4uZm9yRXhp
dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc1N0cnVjdHVyZSgpIHx8ICEhbm9kZS0+c3RydWN0
dXJlKCkuZ2V0KCkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhh
c1N0cnVjdHVyZSgpIHx8ICEhbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgIW5vZGUtPmhhc0NlbGxPcGVyYW5kKCkgfHwgbm9kZS0+Y2VsbE9wZXJh
bmQoKS0+dmFsdWUoKS5pc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCAhIW5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVl
KCkpOwogICAgICAgICAgICAgICAgIApAQCAtMzA4LDkgKzMwOCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OgotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT50cmFuc2l0aW9u
KCktPnByZXZpb3VzLT5kZmdTaG91bGRXYXRjaCgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5kZmdTaG91bGRXYXRj
aCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKQEAgLTMxOSw2ICszMjAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBNdWx0aURlbGV0ZUJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICAvLyBP
T1BTCiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpRGVs
ZXRlQnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBEZWxldGVCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aURl
bGV0ZUJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCAhdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSB8fCAhdmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CkBAIC0zMjksMTEgKzMzMSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgc3VwcG9ydHMgc3RydWN0
dXJlcyB0aGF0IGFyZSBKU0ZpbmFsT2JqZWN0IG9yIEpTQXJyYXkuCiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBKU0Zp
bmFsT2JqZWN0OjppbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpID09IEpTQXJyYXk6OmluZm8oKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLmNsYXNzSW5mbygpID09IEpTRmluYWxPYmplY3Q6OmluZm8oKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS5jbGFzc0luZm8oKSA9PSBK
U0FycmF5OjppbmZvKCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHN1
cHBvcnQgY2VydGFpbiBpbmRleGluZyBzaGFwZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhaGFzQW55
QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CkBAIC02ODUsOCArNjg3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgLy8gY29udmVyc2lvbnMuIFRoZXkgYXJlIG5vdCBuZWVkZWQgaW4gdGhlIERGRyBy
aWdodCBub3cuIFdlIHNob3VsZCBhZGQgc3VwcG9ydAogICAgICAgICAgICAgICAgICAgICAvLyBm
b3IgdGhlc2UgaWYgdGhlIERGRyBldmVyIG5lZWRzIGl0LgogICAgICAgICAgICAgICAgICAgICBm
b3IgKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbm9kZS0+c3RydWN0dXJlU2V0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIWhhc0ludDMyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgIWhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFoYXNJbnQzMihzdHJ1Y3R1cmUu
aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIWhhc0RvdWJsZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODcsNyArMzg4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVyZSA9IG1fbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdT
dHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9ncmFwaC5t
X3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29k
ZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3U3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0
dXJlKTsKIAogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJl
LT5pbmRleGluZ01vZGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKTsKICAgICAg
ICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwpAQCAtMzg5NSw3ICsz
ODk1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7IAogCi0gICAgICAgIGF1dG8mIGhlYXAgPSBtX25vZGUtPnRyYW5zaXRpb24o
KS0+bmV4dC0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxl
dGlvbiA/IG1faGVhcHMuSlNDZWxsSGVhZGVyQW5kTmFtZWRQcm9wZXJ0aWVzIDogbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8mIGhlYXAgPSBtX25vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dC50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURl
bGV0aW9uID8gbV9oZWFwcy5KU0NlbGxIZWFkZXJBbmROYW1lZFByb3BlcnRpZXMgOiBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRDsKICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgeyBoZWFw
LCBtX291dC5hZGRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQub2Zmc2V0KCkp
IH07CiAKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTQ5MzksNyArNDkzOSw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBib29sIGhhc1BvbHlQcm90byA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzTW9ub1Byb3RvID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhh
c1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmhhc1BvbHlQ
cm90bygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUG9seVByb3RvID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9ub1By
b3RvID0gdHJ1ZTsKQEAgLTY5NzIsNyArNjk3Miw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
LCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
LAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUp
LAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICAgICAgICAgICAgIH0sCkBAIC03MTE5
LDcgKzcxMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwg
JnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVj
dEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUo
c3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOwogICAgICAgICAgICAg
fSwgbGVuZ3RoLnZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKQEAgLTczOTAsNyArNzM5MCw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgp
LCBvcGVyYXRpb24sIG1fdm1WYWx1ZSwgZnJvemVuUG9pbnRlcihtX2dyYXBoLmZyZWV6ZVN0cm9u
ZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9u
LCBtX3ZtVmFsdWUsIHN0cm9uZ1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NDA5LDcgKzc0MDksNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAKICAgICB2b2lkIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0
KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnN0cnVjdHVyZSgpLnR5cGVJbmZv
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgSlNBcnJheUl0ZXJhdG9yVHlwZToKICAgICAgICAg
ICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0FycmF5SXRlcmF0b3I+KG9w
ZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NDIwLDcg
Kzc0MjAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBjb21waWxl
TmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRvcj4ob3BlcmF0aW9uTmV3U2V0
SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlVHlw
ZToKLSAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBK
U0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0
dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKICAgICAgICAg
ICAgICAgICBjb21waWxlTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNJbnRlcm5hbFByb21p
c2U+KG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
SlNQcm9taXNlOjppbmZvKCkpOwpAQCAtNzQ1Niw3ICs3NDU2LDcgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICBzdHJpbmcpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CkBAIC04MzU0LDcgKzgzNTQsNyBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlw
ZWRBcnJheVR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5n
ZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbWFz
bVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgc2l6ZTY0Qml0cywgc3RvcmFnZVZhbHVlKTsKQEAgLTgzNjksNyArODM2OSw3
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5nZXQoKSkpOworICAg
ICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSgpCkBAIC04MzgwLDcgKzgzODAsNyBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBzZXRTdG9yYWdlKAogICAgICAgICAgICAg
cmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBvYmplY3QsIG9sZFN0
b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLmdldCgpLCB0cmFuc2l0aW9uLT5uZXh0LmdldCgp
KSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCB0cmFuc2l0aW9uLT5wcmV2
aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVO
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KCkKQEAgLTkyNjIsNyArOTI2Miw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJp
YW50LmtpbmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMo
KS5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFudGljLmNvZGVP
cmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdG9yYWdlID0gc3RvcmFn
ZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQub2Zmc2V0
KCksCkBAIC0xMzQ1NywxNCArMTM0NTcsMTUgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAog
ICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc1R5cGUoU3BlY09iamVjdCkgJiYgYmFzZVZhbHVl
Lm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4
aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmZvckVh
Y2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA+IEFycmF5V2l0aFVuZGVjaWRlZCkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSA+IEFycmF5
V2l0aFVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0luZGV4aW5nID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0luZGV4aW5n
KQogICAgICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNrQ2hlY2sgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIG9ubHlTdHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGlmIChvbmx5U3RydWN0dXJlKQotICAgICAgICAg
ICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7CisgICAg
ICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAgIC8vaWYgKG9ubHlTdHJ1Y3R1cmUp
CisgICAgICAgICAgICAgICAgLy8gICAgcmFyZURhdGEgPSBvbmx5U3RydWN0dXJlLT50cnlSYXJl
RGF0YSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMVmFsdWUgbm90SGF2aW5nSW5k
ZXhpbmcgPSBudWxscHRyOwpAQCAtMTM2OTIsMTAgKzEzNjkzLDExIEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2Nr
KTsKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEOwotICAgICAgICBhdXRvIHN0cnVjdHVyZSA9
IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1
cmUoKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHN0cnVjdHVyZUlEID0g
bV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwotICAgICAgICBlbHNlCisgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgLy9hdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNl
RWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgLy9pZiAo
c3RydWN0dXJlKQorICAgICAgICAvLyAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIo
c3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgLy9lbHNlCiAgICAgICAgICAgICBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAKICAg
ICAgICAgTFZhbHVlIGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBtX291dC5lcXVhbChzdHJ1Y3R1
cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSk7CkBAIC0xMzcxMywxMCArMTM3MTUsMTAgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0lubGlu
ZU9yT3V0T2ZMaW5lQmxvY2spOwogICAgICAgICBMVmFsdWUgaW5saW5lQ2FwYWNpdHkgPSBudWxs
cHRyOwogICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9IGZhbHNlOwotICAg
ICAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBoYXNOb091dE9mTGluZVByb3BlcnRp
ZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgLy9pZiAoc3RydWN0dXJlKSB7CisgICAgICAgIC8vICAgIGhh
c05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
KyAgICAgICAgLy8gICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVy
ZS5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgLy99CiAgICAgICAgIGlmICghaW5saW5lQ2Fw
YWNpdHkpCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmxvYWQzMihlbnVtZXJh
dG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0
eSk7CiAgICAgICAgIExWYWx1ZSBpc0lubGluZSA9IGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA/
IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3coaW5kZXgsIGlubGluZUNhcGFjaXR5KTsKQEAg
LTEzODY0LDE0ICsxMzg2NiwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAg
ICAgICBMVmFsdWUgb2JqZWN0OwogICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8
fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgICAgICBB
bGxvY2F0b3IgY2VsbEFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50
eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGNlbGxBbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTQXJyYXk+KHZtKCks
IEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSksIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IEpTVHlwZTo6QXJyYXlUeXBlKQorICAgICAg
ICAgICAgICAgICAgICBjZWxsQWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0FycmF5Pih2bSgpLCBKU0FycmF5OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUu
aW5saW5lQ2FwYWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNlbGxBbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtKCks
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8
SlNGaW5hbE9iamVjdD4odm0oKSwgSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLmlubGluZUNhcGFjaXR5KCkpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CiAKLSAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhl
ZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS5p
bmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhpbmdIZWFkZXJT
aXplID0gMDsKICAgICAgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSBtX291dC5pbnRQdHJaZXJvOwogICAgICAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5n
dGggPSBtX291dC5pbnQzMlplcm87CkBAIC0xMzg5Nyw3ICsxMzg5OSw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUg
YnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBpbmRleGluZ0hlYWRlclNpemUpLAogICAgICAgICAgICAgICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTM5MTQsMTMg
KzEzOTE2LDEzIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBM
VmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgICAg
ICBzdGFydE9mU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBoYXZlQnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZh
c3RCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3Bs
YXRXb3JkcygKICAgICAgICAgICAgICAgICAgICAgZmFzdEJ1dHRlcmZseVZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtc3RydWN0
dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMigtMSksCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9o
ZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogCkBAIC0xMzk0NSw3ICsxMzk0Nyw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgIFs9LCAm
dm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJbmRleGluZ0hlYWRlckFuZFZl
Y3Rvckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUu
Z2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksICZ2bSwgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5k
aXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHlWYWx1ZSk7CkBAIC0xMzk1NCw3ICsxMzk1
Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAg
IFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0
cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTEzOTcxLDcgKzEzOTczLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdT
X0VORAogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRl
cmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKIAotICAgICAgICAgICAgICAg
IGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSksIG1fb3V0LmludDMyWmVybywgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHkpOwor
ICAgICAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fb3V0LmNvbnN0SW50MzIo
c3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSwgbV9vdXQuaW50MzJaZXJvLCB2ZWN0b3JMZW5ndGgs
IGJ1dHRlcmZseSk7CiAKICAgICAgICAgICAgICAgICBIYXNoTWFwPGludDMyX3QsIExWYWx1ZSwg
RGVmYXVsdEhhc2g8aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
aW50MzJfdD4+IGluZGV4TWFwOwogICAgICAgICAgICAgICAgIFZlY3RvcjxpbnQzMl90PiBpbmRp
Y2VzOwpAQCAtMTQwMTcsNyArMTQwMTksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgc3RvcmVzIHRvIHRoZSBhcnJh
eSBhcmUgc3RpbGwgc29tZXdoZXJlIGFib3ZlIHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAgICAg
ICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBJbmRleGVkQWJzdHJhY3RIZWFwKiBoZWFwOwotICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIHRoZSBwcm92ZW4gdHlwZSBpZiB3
ZSBoYWQgdGhlIEVkZ2UgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZh
bHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzExCkBAIC0x
NDA4MSw3ICsxNDA4Myw4IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgQml0VmVjdG9yIHNldElubGluZU9mZnNldHM7Ci0gICAgICAgICAg
ICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXND
b25jdXJyZW50bHkoKSkgeworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgZm9yIChQ
cm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLmdldFByb3BlcnRpZXNDb25jdXJyZW50
bHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0
aWVzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExvYykKQEAg
LTE0MDk5LDcgKzE0MTAyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IGkt
LTspIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZS5pbmxpbmVDYXBh
Y2l0eSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXRJbmxpbmVPZmZzZXRzLmdl
dChpKSkKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5pbnQ2NFplcm8s
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9iamVjdCwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UoaSkpKTsKICAgICAgICAgICAgIH0KQEAgLTE0MTU0LDcgKzE0
MTU3LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgWz0sICZ2bV0g
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0
aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2Vu
ZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
RGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkp
OwogICAgICAgICAgICAgfSwgc2NvcGUpOwpAQCAtMTQyMjEsNyArMTQyMjQsNyBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0s
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CkBAIC0xNDI0MSw3ICsxNDI0NCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAog
ICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdCgpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgp
KSB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5zdHJ1Y3R1cmUoKS50eXBlSW5mbygpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEpTQXJyYXlJdGVyYXRvclR5cGU6CiAgICAgICAgICAgICBjb21w
aWxlTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0FycmF5SXRlcmF0b3I+
KG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDI1
Miw3ICsxNDI1NSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIGNv
bXBpbGVNYXRlcmlhbGl6ZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTU2V0SXRlcmF0b3I+
KG9wZXJhdGlvbk5ld1NldEl0ZXJhdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEpTUHJvbWlzZVR5cGU6Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKKyAgICAgICAgICAgIGlm
IChtX25vZGUtPnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQcm9taXNlOjpp
bmZvKCkpCiAgICAgICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8SlNJbnRlcm5hbFByb21pc2U+KG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlz
ZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5z
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOwpAQCAtMTQ2OTIs
NiArMTQ2OTUsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBtX2hl
YXBzLnByb3BlcnRpZXNbaWRlbnRpZmllck51bWJlcl0sIHN0b3JhZ2UsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKG9mZnNldCkpOwogICAgIH0KICAgICAKKyAgICAvLyBPT1BTCiAgICAgTFZhbHVlIHN0
b3JhZ2VGb3JUcmFuc2l0aW9uKAogICAgICAgICBMVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVy
ZSogbmV4dFN0cnVjdHVyZSkKQEAgLTE0NzA0LDExICsxNDcwOCwxMSBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0OwogICAgICAgICBp
ZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAg
cmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBwcmV2aW91c1N0cnVjdHVy
ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3Qs
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocHJldmlvdXNTdHJ1Y3R1cmUpKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAog
ICAgICAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KSwKLSAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4
dFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShw
cmV2aW91c1N0cnVjdHVyZSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUobmV4dFN0cnVjdHVy
ZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0
dGVyZmx5KHJlc3VsdCwgb2JqZWN0KTsKQEAgLTE0Nzg3LDkgKzE0NzkxLDkgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICBtX291dC5hcHBlbmRUbyhpbml0RG9uZSwgbGFzdE5l
eHQpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTFZh
bHVlIG9iamVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSkKKyAgICBMVmFsdWUgYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBw
cmV2aW91c1N0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1
cmUuY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICAgICAgcmV0dXJuIHZtQ2Fs
bCgKICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLAogICAgICAgICAgICAgICAgIG9wZXJh
dGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksCkBA
IC0xNDgwNywxNCArMTQ4MTEsMTQgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgIH0K
ICAgICAKICAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgTFZh
bHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVyZSogcHJldmlvdXMsIFN0cnVj
dHVyZSogbmV4dCkKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgcHJldmlvdXMsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV4dCkKICAg
ICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMub3V0T2ZMaW5lQ2FwYWNpdHko
KTsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFj
dG9yOyAKIAotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9
PSBuZXh0Lm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHByZXZp
b3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgICAgIGlmIChwcmV2aW91cy5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NT
aXplID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSk7ICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJldHVybiB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uQWxsb2NhdGVD
b21wbGV4UHJvcGVydHlTdG9yYWdlLCBtX3ZtVmFsdWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsK
ICAgICAgICAgfQpAQCAtMTY3NjMsNyArMTY3NjcsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgCiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5h
bE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBhY2l0eSgp
KTsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2Jq
ZWN0Pih2bSgpLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBhbGxvY2F0b3IgaXMg
bnVsbCwgd2UgY291bGQgc2ltcGx5IGVtaXQgYSBub3JtYWwgQyBjYWxsIHRvIHRoZSBhbGxvY2F0
b3IKQEAgLTE2Nzg3LDcgKzE2NzkxLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihz
bG93UmVzdWx0VmFsdWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC0x
NjkzOSw3ICsxNjk0Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgYm9v
bCBzaG91bGRJbml0aWFsaXplRWxlbWVudHMgPSBmYWxzZTsKICAgICAgICAgYm9vbCBzaG91bGRM
YXJnZUFycmF5U2l6ZUNyZWF0ZUFycmF5U3RvcmFnZSA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVKU0FycmF5KAotICAgICAgICAgICAgcHVibGljTGVuZ3RoLCB2ZWN0b3JMZW5ndGgs
IHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSwgc2hvdWxkSW5pdGlhbGl6ZUVsZW1lbnRzLAorICAgICAgICAgICAgcHVi
bGljTGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbV9vdXQu
Y29uc3RJbnQzMihzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpLCBzaG91bGRJbml0aWFsaXplRWxl
bWVudHMsCiAgICAgICAgICAgICBzaG91bGRMYXJnZUFycmF5U2l6ZUNyZWF0ZUFycmF5U3RvcmFn
ZSk7CiAgICAgfQogCkBAIC0yMDgyNiwxMyArMjA4MzAsMzYgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogCiAgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmVJRChSZWdpc3RlcmVkU3RydWN0dXJl
IHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVj
dHVyZS0+aWQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmUpOworICAgICAgICAv
LyBPT1BTCisgICAgICAgIC8vcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoMCk7CiAgICAgfQogICAgIAogICAg
IExWYWx1ZSB3ZWFrU3RydWN0dXJlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAg
IHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBBU1NFUlQoISFzdHJ1Y3R1cmUuZ2V0KCkpOwot
ICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBo
LCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBtX291dC5jb25zdElu
dFB0cigwKTsKKyAgICAgICAgLy9yZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9p
bnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgIH0KKworICAgIExWYWx1ZSBzdHJv
bmdTdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBVTlVTRURfUEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL3Jl
dHVybiBmcm96ZW5Qb2ludGVyKG1fZ3JhcGguZnJlZXplU3Ryb25nKG1fbm9kZS0+c3RydWN0dXJl
KCkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKDApOworICAgIH0K
KworICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciBtYXNtU3RydWN0dXJlKFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgLy8gT09QUworICAgICAgICAv
LyByZXR1cm4gVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBVTlVTRURf
UEFSQU0oc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3Io
TFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4NDcw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgU3RydWN0dXJl
OwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBSZWdpc3RlcmVkU3RydWN0dXJlOwotfTsKK30KIAog
Y2xhc3MgQ0NhbGxIZWxwZXJzIDogcHVibGljIEFzc2VtYmx5SGVscGVycyB7CiBwdWJsaWM6CkBA
IC02NDQsNyArNjQ0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICYmIHN0ZDo6aXNfc2FtZTxBcmcs
IERGRzo6UmVnaXN0ZXJlZFN0cnVjdHVyZT46OnZhbHVlPgogICAgIHNldHVwQXJndW1lbnRzSW1w
bChBcmdDb2xsZWN0aW9uPG51bUdQUkFyZ3MsIG51bUdQUlNvdXJjZXMsIG51bUZQUkFyZ3MsIG51
bUZQUlNvdXJjZXMsIG51bUNyb3NzU291cmNlcywgZXh0cmFHUFJBcmdzLCBub25BcmdHUFJzLCBl
eHRyYVBva2U+IGFyZ1NvdXJjZVJlZ3MsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKICAgICB7Ci0g
ICAgICAgIHNldHVwQXJndW1lbnRzSW1wbDxPcGVyYXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBU
cnVzdGVkSW1tUHRyKGFyZy5nZXQoKSksIGFyZ3MuLi4pOworICAgICAgICAvLyBPT1BTCisgICAg
ICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgICAgICAvL3NldHVwQXJndW1lbnRzSW1wbDxPcGVy
YXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBUcnVzdGVkSW1tUHRyKGFyZy5nZXQoKSksIGFyZ3Mu
Li4pOworICAgICAgICBzZXR1cEFyZ3VtZW50c0ltcGw8T3BlcmF0aW9uVHlwZT4oYXJnU291cmNl
UmVncywgVHJ1c3RlZEltbVB0cihudWxscHRyKSwgYXJncy4uLik7CiAgICAgfQogCiAjdW5kZWYg
Q1VSUkVOVF9BUkdVTUVOVF9UWVBFCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444019</attachid>
            <date>2021-11-11 16:20:05 -0800</date>
            <delta_ts>2021-11-11 16:20:05 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>251607</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsxMTAsMTggQEAgY29uc3RleHBy
IEFycmF5TW9kZXMgYXNBcnJheU1vZGVzSWdub3JpbgogCiAjZGVmaW5lIEFMTF9BUlJBWV9NT0RF
UyAoQUxMX05PTl9BUlJBWV9BUlJBWV9NT0RFUyB8IEFMTF9BUlJBWV9BUlJBWV9NT0RFUykKIAot
aW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlTGlrZT4KK2lubGluZSBBcnJheU1v
ZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKIHsK
LSAgICBKU1R5cGUgdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CisgICAgSlNU
eXBlIHR5cGUgPSBzdHJ1Y3R1cmUudHlwZUluZm8oKS50eXBlKCk7CiAgICAgaWYgKGlzVHlwZWRB
cnJheVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlZEFycmF5TW9kZXNbdHlwZSAtIEZp
cnN0VHlwZWRBcnJheVR5cGVdOwotICAgIHJldHVybiBhc0FycmF5TW9kZXNJZ25vcmluZ1R5cGVk
QXJyYXlzKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOworICAgIHJldHVybiBhc0FycmF5TW9k
ZXNJZ25vcmluZ1R5cGVkQXJyYXlzKHN0cnVjdHVyZS5pbmRleGluZ01vZGUoKSk7Cit9CisKK2lu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHJldHVybiBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZSgqc3RydWN0dXJlKTsK
IH0KIAogdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYsIEFycmF5TW9kZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFB1dEJ5VmFyaWFu
dCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisv
LyBPT1BTCiBTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMzYgKzUzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mb0kKIAogU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcmVkUmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3ltYm9sVHlwZToKLSAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEhlYXBCaWdJbnRUeXBlOgotICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNIZWFwQmlnSW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERlcml2ZWRB
cnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0
ID0gU3BlY0FycmF5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6
Ci0gICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4g
U3RyaW5nT2JqZWN0VXNlLCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJp
bmdPYmplY3QuCi0gICAgY2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKLSAgICAgICAgZmls
dGVyZWRSZXN1bHQgPSBTcGVjT2JqZWN0T3RoZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGZpbHRlcmVkUmVzdWx0
KTsKLSAgICBBU1NFUlQoaXNTdWJ0eXBlU3BlY3VsYXRpb24oZmlsdGVyZWRSZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mb0luaGVyaXRhbmNlKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpKSk7
Ci0gICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0OworICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVMaWtlKCpzdHJ1Y3R1cmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzU2FuZVBvaW50ZXIoY29uc3Qgdm9pZCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyODQ3MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIwLDYgKzUyMCw0MiBAQCBpbmxpbmUgYm9vbCBzcGVjdWxhdGlvbkNo
ZWNrZWQoU3BlY3VsYXRlCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9J
bmhlcml0YW5jZShjb25zdCBDbGFzc0luZm8qKTsKIAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0
dXJlTGlrZT4KK2lubGluZSBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVM
aWtlKGNvbnN0IFN0cnVjdHVyZUxpa2UmIHN0cnVjdHVyZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlw
ZSBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNOb25lOworICAgIHN3aXRjaCAoc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBmaWx0ZXJlZFJl
c3VsdCA9IFNwZWNTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ltYm9sVHlwZToK
KyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBTcGVjU3ltYm9sOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEhlYXBCaWdJbnRUeXBlOgorICAgICAgICBmaWx0ZXJlZFJlc3VsdCA9IFNwZWNIZWFw
QmlnSW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlcml2ZWRBcnJheVR5cGU6CisgICAg
ICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0Rlcml2ZWRBcnJheTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIGZpbHRlcmVkUmVzdWx0ID0gU3BlY0FycmF5Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ09iamVjdFR5cGU6CisgICAgICAgIGZpbHRl
cmVkUmVzdWx0ID0gU3BlY1N0cmluZ09iamVjdDsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgdG8gYWNjZXB0IFN0cmluZy5wcm90b3R5cGUgaW4gU3RyaW5nT2JqZWN0VXNl
LCBzbyB0aGF0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGFzIFNwZWNTdHJpbmdPYmplY3QuCisgICAg
Y2FzZSBEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZToKKyAgICAgICAgZmlsdGVyZWRSZXN1bHQgPSBT
cGVjT2JqZWN0T3RoZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm9Jbmhlcml0YW5jZShzdHJ1Y3R1cmUuY2xhc3NJ
bmZvKCkpOworICAgIH0KKyAgICBBU1NFUlQoZmlsdGVyZWRSZXN1bHQpOworICAgIEFTU0VSVChp
c1N1YnR5cGVTcGVjdWxhdGlvbihmaWx0ZXJlZFJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJ
bmZvSW5oZXJpdGFuY2Uoc3RydWN0dXJlLmNsYXNzSW5mbygpKSkpOworICAgIHJldHVybiBmaWx0
ZXJlZFJlc3VsdDsKK30KKwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0Nl
bGwqKTsKIEpTX0VYUE9SVF9QUklWQVRFIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKEpTVmFsdWUpOwogLy8gSWYgaXQncyBhbiBhbnlJbnQoKSwgaXQnbGwgcmV0dXJuIHNwZWN1
bGF0ZWQgdHlwZXMgZnJvbSB0aGUgSW50NTIgbGF0dGljZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBUcmlTdGF0ZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhCiAgICAgICAgIGJvb2wg
YWxsVHJ1ZSA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0
dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0
cmluZ1R5cGUgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBIZWFwQmlnSW50VHlw
ZSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkgfHwgc3Ry
dWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgc3RydWN0dXJlLnR5cGVJ
bmZvKCkudHlwZSgpID09IEhlYXBCaWdJbnRUeXBlKSB7CiAgICAgICAgICAgICAgICAgYWxsVHJ1
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjEz
LDcgKzIxMyw3IEBAIGlubGluZSBUb1RoaXNSZXN1bHQgaXNUb1RoaXNBbklkZW50aXR5KFYKICAg
ICAgICAgYm9vbCBhbGxTdHJ1Y3R1cmVzQXJlSlNTY29wZSA9ICF2YWx1ZUZvck5vZGUubV9zdHJ1
Y3R1cmUuaXNDbGVhcigpOwogICAgICAgICBib29sIG92ZXJyaWRlc1RvVGhpcyA9IGZhbHNlOwog
ICAgICAgICB2YWx1ZUZvck5vZGUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0oUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIFR5cGVJbmZvIHR5cGUgPSBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCk7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlID0gc3RydWN0dXJlLnR5
cGVJbmZvKCk7CiAgICAgICAgICAgICBBU1NFUlQodHlwZS5pc09iamVjdCgpIHx8IHR5cGUudHlw
ZSgpID09IFN0cmluZ1R5cGUgfHwgdHlwZS50eXBlKCkgPT0gU3ltYm9sVHlwZSB8fCB0eXBlLnR5
cGUoKSA9PSBIZWFwQmlnSW50VHlwZSk7CiAgICAgICAgICAgICBpZiAoIWVjbWFNb2RlLmlzU3Ry
aWN0KCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuaXNPYmplY3QoKSk7CkBAIC0yMjQs
NyArMjI0LDcgQEAgaW5saW5lIFRvVGhpc1Jlc3VsdCBpc1RvVGhpc0FuSWRlbnRpdHkoVgogICAg
ICAgICAgICAgICAgIG92ZXJyaWRlc1RvVGhpcyA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIElm
IGFsbCB0aGUgc3RydWN0dXJlcyBhcmUgSlNTY29wZSdzIG9uZXMsIHdlIGtub3cgdGhlIGRldGFp
bHMgb2YgSlNTY29wZTo6dG9UaGlzKCkgb3BlcmF0aW9uLgotICAgICAgICAgICAgYWxsU3RydWN0
dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9U
aGlzID09IEpTU2NvcGU6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzOworICAgICAgICAgICAg
YWxsU3RydWN0dXJlc0FyZUpTU2NvcGUgJj0gc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS50b1RoaXMgPT0gSlNTY29wZTo6aW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXM7CiAgICAg
ICAgIH0pOwogICAgICAgICBpZiAoIW92ZXJyaWRlc1RvVGhpcykKICAgICAgICAgICAgIHJldHVy
biBUb1RoaXNSZXN1bHQ6OklkZW50aXR5OwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQubV9zdHJ1
Y3R1cmUuZm9yRWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1h
dGNoZWQgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gc3RydWN0dXJl
LnR5cGVJbmZvKCkudHlwZSgpID09IG5vZGUtPnF1ZXJpZWRUeXBlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1hdGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC0yMTc2LDYgKzIxNzYsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIGZvciB1bmxpbmtlZCBKSVQuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNVbmxp
bmtlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBhcnJheVZhbHVlID0gZm9yTm9kZShhcnJheUVkZ2UpOwogCiAg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBzZXQgaXMgZmluaXRlLiBUaGlz
IG1lYW5zIHRoYXQgdGhpcyBjb25zdGFudCdzIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGFuZCBndWFy
YW50ZWVkIHRoZSBvbmUgb2YgdGhpcyBzZXQuCkBAIC0zMTU4LDE2ICszMTYyLDE3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGF1dG8mIHN0
cnVjdHVyZVNldCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOwogICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZVNldC5pc0Zpbml0ZSgpICYmIHN0cnVjdHVyZVNldC5zaXplKCkg
PT0gMSkgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0g
c3RydWN0dXJlU2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byog
cmFyZURhdGEgPSBzdHJ1Y3R1cmUtPnJhcmVEYXRhQ29uY3VycmVudGx5KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhcmFyZURhdGEtPmNhY2hlZFByb3BlcnR5TmFtZXNDb25jdXJyZW50
bHkobm9kZS0+b3AoKSA9PSBPYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID8gQ2FjaGVkUHJvcGVy
dHlOYW1lc0tpbmQ6OkdldE93blByb3BlcnR5TmFtZXMgOiBDYWNoZWRQcm9wZXJ0eU5hbWVzS2lu
ZDo6S2V5cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hp
bmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0FycmF5KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBPT1BTCisgICAgICAgICAgICAgICAgLy9pZiAoYXV0byogcmFyZURhdGEgPSBzdHJ1Y3R1
cmUtPnJhcmVEYXRhQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICBpZiAo
ISFyYXJlRGF0YS0+Y2FjaGVkUHJvcGVydHlOYW1lc0NvbmN1cnJlbnRseShub2RlLT5vcCgpID09
IE9iamVjdEdldE93blByb3BlcnR5TmFtZXMgPyBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6R2V0
T3duUHJvcGVydHlOYW1lcyA6IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpLZXlzKSkgeworICAg
ICAgICAgICAgICAgIC8vICAgICAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRp
bWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBtX3N0
YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBcnJheSk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vICAgIH0KKyAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC0zMzU0LDIxICszMzU5LDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
IHsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwot
ICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5mb3JFYWNoKAotICAgICAgICAgICAgICAgIFsmXSAoUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1
cmUtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnbG9iYWxP
YmplY3QgIT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0ICYmIG9rKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1f
Z3JhcGguZnJlZXplKEpTVmFsdWUoZ2xvYmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8vIE9PUFM6CisgICAgICAg
IC8vaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsK
KyAgICAgICAgLy8gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7Cisg
ICAgICAgIC8vICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAvLyAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5mb3JFYWNoKAorICAgICAgICAvLyAgICAgICAgWyZdIChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQorICAgICAgICAvLyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qg
PSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAvLyAgICAgICAgICAgIGVsc2Ug
aWYgKGdsb2JhbE9iamVjdCAhPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKQorICAgICAgICAv
LyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAvLyAgICAgICAgfSk7CisgICAg
ICAgIC8vICAgIGlmIChnbG9iYWxPYmplY3QgJiYgb2spIHsKKyAgICAgICAgLy8gICAgICAgIHNl
dENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGdsb2JhbE9iamVjdCkpKTsK
KyAgICAgICAgLy8gICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICB9CisgICAgICAgIC8vfQog
CiAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzU4Myw3ICszNTg5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gc2V0Lm9ubHlTdHJ1Y3R1cmUoKSkgewotICAgICAg
ICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0cnVj
dHVyZS5nZXQoKSkpOworICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwg
Km1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0zODQ1LDE4ICszODUxLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJvb2wgY2FuRm9sZCA9ICF2YWx1ZS5t
X3N0cnVjdHVyZS5pc0NsZWFyKCk7CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAg
ICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgY2FuRm9sZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUG9seVBy
b3RvKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmhhc1BvbHlQcm90bygpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhbkZvbGQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE9PUFMK
ICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChwcm90b3R5cGUgIT0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3RvdHlwZSAhPSBzdHJ1Y3R1cmUuc3RvcmVkUHJv
dG90eXBlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNhbkZvbGQgPSBmYWxzZTsKICAgICAgICAg
ICAgIH0pOwogCkBAIC00NTQ1LDcgKzQ1NTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmlz
RmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgICAgICAgYWJz
dHJhY3RWYWx1ZS5tX3N0cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvayAmPSAoc3RydWN0dXJlLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpICYgYml0cykgPT0gYml0czsKKyAgICAgICAgICAgICAgICBvayAm
PSAoc3RydWN0dXJlLnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgJiBiaXRzKSA9PSBiaXRz
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6Om9i
c2VydmVUcmFuc2l0aW9ucyhjCiAgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9u
cyh2ZWN0b3IpOwogICAgICAgICBBcnJheU1vZGVzIG5ld01vZGVzID0gMDsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1f
YXJyYXlNb2RlcyAmIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHZlY3RvcltpXS5wcmV2aW91cy5n
ZXQoKSkpCi0gICAgICAgICAgICAgICAgbmV3TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmUodmVjdG9yW2ldLm5leHQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAm
IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHZlY3RvcltpXS5wcmV2aW91cykpCisgICAgICAgICAg
ICAgICAgbmV3TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUodmVjdG9yW2ldLm5leHQp
OwogICAgICAgICB9CiAgICAgICAgIG1fYXJyYXlNb2RlcyB8PSBuZXdNb2RlczsKICAgICB9CkBA
IC01MCw2ICs1MCw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGMK
IAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1
ZSYgdmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCiB7CisgICAgLy8g
T09QUwogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTg3LDggKzg4LDggQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBSZQogICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7CiAgICAgCiAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgbV9hcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKTsKLSAgICBt
X3R5cGUgPSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKTsKKyAgICBt
X2FycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1f
dHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKTsKICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTE5NSw2
ICsxOTYsNyBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAKICAg
ICBBYnN0cmFjdFZhbHVlIG9sZE1lID0gKnRoaXM7CiAgICAgCisgICAgLy8gT09QUwogICAgIGlm
IChpc0NsZWFyKCkpIHsKICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblZhbHVlID0gZ3JhcGgu
ZnJlZXplKHZhbHVlKTsKICAgICAgICAgaWYgKGZyb3plblZhbHVlLT5wb2ludHNUb0hlYXAoKSkg
ewpAQCAtMjExLDcgKzIxMyw3IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZh
bHVlKEcKICAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKHZhbHVlKSk7CiAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAg
ICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IGdyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoZ3JhcGgubV92bSkpOwotICAgICAg
ICAgICAgbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlNb2RlcywgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMobV9hcnJh
eU1vZGVzLCBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAg
IG1fc3RydWN0dXJlLm1lcmdlKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fdmFsdWUgIT0gdmFsdWUpCkBAIC0zMzUsOCArMzM3LDgg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogCiBib29sIEFic3Ry
YWN0VmFsdWU6OmNvbnRhaW5zKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSBjb25zdAog
ewotICAgIHJldHVybiBjb3VsZEJlVHlwZShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgJiYgKG1fYXJyYXlNb2RlcyAmIGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHN0cnVjdHVyZS5nZXQoKSkpCisgICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNwZWN1bGF0
aW9uRnJvbVN0cnVjdHVyZUxpa2Uoc3RydWN0dXJlKSkKKyAgICAgICAgJiYgKG1fYXJyYXlNb2Rl
cyAmIGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCiAgICAgICAgICYmIG1fc3Ry
dWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM4LDcgKzEzOCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAg
IGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2
ZVRyYW5zaXRpb24oZnJvbSwgdG8pOwotICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24oYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoZnJvbS5nZXQoKSksIGFycmF5TW9kZXNG
cm9tU3RydWN0dXJlKHRvLmdldCgpKSk7CisgICAgICAgICAgICBvYnNlcnZlSW5kZXhpbmdUeXBl
VHJhbnNpdGlvbihhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShmcm9tKSwgYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmUodG8pKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNyArNDUzLDcgQEAgYm9vbCBBcnJheU1vZGU6
OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1
Y3R1cmVbaV07Ci0gICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgJiBp
bmRleGluZ01vZGVNYXNrKSAhPSAoc2hhcGUgfCBJc0FycmF5KSkKKyAgICAgICAgICAgIGlmICgo
c3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgaW5kZXhpbmdNb2RlTWFzaykgIT0gKHNoYXBlIHwg
SXNBcnJheSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJl
W2ldOwotICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpICYgaW5kZXhp
bmdNb2RlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS5pbmRleGlu
Z01vZGUoKSAmIGluZGV4aW5nTW9kZU1hc2spICE9IHNoYXBlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4Miw3ICs0
ODIsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKLSAgICAgICAgICAgIGlmICgoc3RydWN0
dXJlLT5pbmRleGluZ01vZGUoKSAmIChpbmRleGluZ01vZGVNYXNrICYgfklzQXJyYXkpKSAhPSBz
aGFwZSkKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLmluZGV4aW5nTW9kZSgpICYgKGluZGV4
aW5nTW9kZU1hc2sgJiB+SXNBcnJheSkpICE9IHNoYXBlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5MiwxMiArNDky
LDE4IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAvLyBT
bywgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIHNhbWUgY2hlY2sgdG8gdGhlIENoZWNrU3RydWN0dXJl
IGhlcmUuCiAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICBjYXNlIEFycmF5OjpP
cmlnaW5hbENvcHlPbldyaXRlQXJyYXk6IHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZ3JhcGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIE9PUFM6CisgICAgICAgIC8qCiAgICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3RydWN0dXJl
KiBvcmlnaW5hbFN0cnVjdHVyZSA9IG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoZ3JhcGgsIG5vZGUp
OwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCkuZ2V0KCkgPT0gb3JpZ2luYWxTdHJ1Y3R1cmU7CisgICAgICAgICovCiAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC01NDUsOSArNTUxLDkgQEAgYm9vbCBBcnJheU1v
ZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUo
KTsgaS0tOykgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
ID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJh
eVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaWYg
KCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAgICAgICAgICBpZiAoIShzdHJ1
Y3R1cmUuaW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01
NjMsOSArNTY5LDkgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
LmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC01NzgsNyArNTg0LDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVh
ZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gdmFsdWUu
bV9zdHJ1Y3R1cmVbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlB
cnJheVN0b3JhZ2Uoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9u
IDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUu
aCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0
OSw2ICs0NTAsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udmVyc2lvbigpICE9IEFy
cmF5OjpBc0lzOwogICAgIH0KIAorICAgIGJvb2wgc3RydWN0dXJlV291bGRQYXNzQXJyYXlNb2Rl
RmlsdGVyaW5nKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZChhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShz
dHJ1Y3R1cmUpLCBhcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CisgICAgfQorCisgICAg
Ly8gT09QUzogQ2FsbGVkIGZyb20gdHlwZSBjaGVjayBob2lzdGluZy4gQ2hlY2sgaWYgaXQncyBv
ay4KICAgICBib29sIHN0cnVjdHVyZVdvdWxkUGFzc0FycmF5TW9kZUZpbHRlcmluZyhTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhcnJheU1vZGVzQWxyZWFkeUNo
ZWNrZWQoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgYXJyYXlNb2Rlc1RoYXRQ
YXNzRmlsdGVyaW5nKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODIs
MTYgKzg4Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAK
LSAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQu
IEJ1dCBjdXJyZW50bHksCi0gICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2lu
ZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRo
ZQotICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEg
d2Vha0pTQ29zbnRhbnQuCi0gICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFu
dChvYmplY3QpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwotICAgICAgICBy
ZXR1cm4gb2JqZWN0Tm9kZTsKLSAgICB9Ci0gICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJl
ZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7
CiAgICAgICAgIGF1dG8gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tB
bmRCeXRlY29kZU9mZnNldCA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCkBAIC00NjIzLDYgKzQ2MTMsMTAgQEAgTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpzaW1wbGlm
eUdldEJ5U3RhdHVzKE5vZGUqIGJhc2UsIEdldEJ5U3RhdHVzJiBnZXRCeVN0YXR1cykKIHsKKyAg
ICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKGdldEJ5U3RhdHVzKTsKKyAg
ICAvLyBPT1BTOgorICAgIC8qCiAgICAgLy8gQXR0ZW1wdCB0byByZWR1Y2UgdGhlIHNldCBvZiB0
aGluZ3MgaW4gdGhlIEdldEJ5U3RhdHVzLgogICAgIGlmIChiYXNlLT5vcCgpID09IE5ld09iamVj
dCkgewogICAgICAgICBib29sIG9rID0gdHJ1ZTsKQEAgLTQ2MzgsNiArNDYzMiw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnNpbXBsaWZ5R2V0QnlTdGF0dXMKICAgICAgICAgaWYgKG9rKQogICAg
ICAgICAgICAgZ2V0QnlTdGF0dXMuZmlsdGVyKGJhc2UtPnN0cnVjdHVyZSgpLmdldCgpKTsKICAg
ICB9CisgICAgKi8KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4NDcwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKICAg
ICAgICAgICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKG1fc2l6ZUdQUiwg
bV9zdG9yYWdlR1BSKTsKLSAgICAgICAgaWYgKG1fY29udGlndW91c1N0cnVjdHVyZS5nZXQoKSAh
PSBtX2FycmF5U3RvcmFnZU9yQ29udGlndW91c1N0cnVjdHVyZS5nZXQoKSkgeworICAgICAgICBp
ZiAobV9jb250aWd1b3VzU3RydWN0dXJlICE9IG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3Ry
dWN0dXJlKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBq
aXQtPm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSk7CiAgICAgICAgICAgICBqaXQtPm1faml0Lm1vdmUoU3BlY3VsYXRpdmVK
SVQ6OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gaml0LT5tX2ppdC5qdW1wKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3Mp
OwogICAgICAgICB3cml0ZShKU0NlbGxfaW5kZXhpbmdUeXBlKTsKIAotICAgICAgICBpZiAobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0LT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5k
OjpQcm9wZXJ0eURlbGV0aW9uKSB7CisgICAgICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPm5l
eHQudHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikg
ewogICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgImRlbGV0ZSBmZW5jZSIgdG8gbW9kZWwgdGhl
IHByb3BlciBhbGlhc2luZyBvZiBmdXR1cmUgc3RvcmVzLgogICAgICAgICAgICAgLy8gQm90aCBp
biBERkcgYW5kIHdoZW4gd2UgbG93ZXIgdG8gQjMsIHdlIG1vZGVsIGFsaWFzaW5nIG9mIHByb3Bl
cnRpZXMgYnkKICAgICAgICAgICAgIC8vIHByb3BlcnR5ICBuYW1lLiBJbiBhIHdvcmxkIHdpdGhv
dXQgZGVsZXRlLCB0aGF0IGFsc28gbW9kZWxzIHtiYXNlLCBwcm9wZXJ0eU9mZnNldH0uCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2MSw2ICs4
NjEsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBjYXNlIE9iamVjdEdldE93blByb3BlcnR5
TmFtZXM6CiAgICAgICAgICAgICBjYXNlIE9iamVjdEtleXM6IHsKKyAgICAgICAgICAgICAgICAv
LyBPT1BTCisgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBhdXRv
JiBzdHJ1Y3R1cmVTZXQgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0
dXJlOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmlzRmluaXRlKCkgJiYg
c3RydWN0dXJlU2V0LnNpemUoKSA9PSAxKSB7CkBAIC04NzYsNiArODc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0xMDYxLDcgKzEwNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGlmIChhYnN0cmFjdFZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGFic3Ry
YWN0VmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayAmPSAoc3RydWN0dXJlLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpICYgYml0cykgPT0gYml0czsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9rICY9IChzdHJ1Y3R1cmUudHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSAm
IGJpdHMpID09IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudFBvb2wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50UG9vbC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRQb29s
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDkgKzYyLDEzIEBAIERlc2lyZWRUcmFuc2l0aW9uczo6fkRlc2lyZWRUcmFu
c2l0aW9ucygKIHsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OmFkZExhemlseShDb2Rl
QmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlKQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OmFkZExhemlseShDb2Rl
QmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUs
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlKQogewotICAgIG1fdHJhbnNpdGlvbnMu
YXBwZW5kKERlc2lyZWRUcmFuc2l0aW9uKGNvZGVPcmlnaW5Pd25lciwgb2xkU3RydWN0dXJlLCBu
ZXdTdHJ1Y3R1cmUpKTsKKyAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbk93bmVyKTsKKyAgICBV
TlVTRURfUEFSQU0ob2xkU3RydWN0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0obmV3U3RydWN0dXJl
KTsKKyAgICAvLyBPT1BTCisgICAgLy9tX3RyYW5zaXRpb25zLmFwcGVuZChEZXNpcmVkVHJhbnNp
dGlvbihjb2RlT3JpZ2luT3duZXIsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSk7CiB9CiAK
IHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHZtLCBDb21tb25EYXRhKiBj
b21tb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0aW9ucyhDb2RlQmxvY2sqKTsKICAgICB+
RGVzaXJlZFRyYW5zaXRpb25zKCk7CiAKLSAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqIGNv
ZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBhZGRMYXpp
bHkoQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUsIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUpOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYyLDcgKzI2Miw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFzVHJhbnNpdGlvbigpKSB7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobm9kZS0+dHJhbnNpdGlvbigp
LCBjb250ZXh0KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgb3V0LnByaW50KCIsIElE
OiIsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+aWQoKSk7CisgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgLy9vdXQucHJpbnQoIiwgSUQ6Iiwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5pZCgp
KTsKICNlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBSYXdQb2ludGVyKG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC5nZXQoKSkpOwogI2VuZGlmCkBAIC0xMjY5LDcgKzEyNzAsMTMgQEAg
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKIHsKICAgICBpZiAoIWJhc2Ug
fHwgIWJhc2UuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKKwor
CisgICAgLy8gT09QUzoKKyAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlU2V0KTsKKyAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIC8qCiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IHN0cnVjdHVyZVNldC5zaXplKCk7IGktLTspIHsKQEAgLTEzMTEsNiArMTMxOCw3IEBAIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAKICAgICByZXR1cm4gb2JqZWN0LT5nZXREaXJlY3RDb25jdXJyZW50bHkoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICovCiB9CiAKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50
UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQpAQCAtMTQ4NSw2ICsxNDkzLDEyIEBAIEZyb3plblZhbHVlKiBHcmFwaDo6ZnJl
ZXplKEpTVmFsdWUgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1f
ZnJvemVuVmFsdWVzLmFkZChmcm96ZW5WYWx1ZSk7CiB9CiAKK0Zyb3plblZhbHVlKiBHcmFwaDo6
ZnJlZXplKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUpCit7CisgICAgLy8gT09QUworICAgIHJldHVybiBu
dWxscHRyOworfQorCiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZyhKU1ZhbHVlIHZh
bHVlKQogewogICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemUodmFsdWUpOwpAQCAtMTU0
OSw2ICsxNTYzLDcgQEAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBHcmFwaDo6cmVnaXN0ZXJTdHJ1Ywog
CiB2b2lkIEdyYXBoOjpyZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKKyAgICAvLyBPT1BTCiAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2Vz
KCkuYWRkTGF6aWx5KHN0cnVjdHVyZSk7CiAgICAgbV9wbGFuLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiB9CkBAIC0xNzMwLDYg
KzE3NDUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAKIGJv
b2wgR3JhcGg6OmdldFJlZ0V4cFByb3RvdHlwZVByb3BlcnR5KEpTT2JqZWN0KiByZWdFeHBQcm90
b3R5cGUsIFN0cnVjdHVyZSogcmVnRXhwUHJvdG90eXBlU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBKU1ZhbHVlJiByZXR1cm5KU1ZhbHVlKQogeworICAgIC8vIE9PUFMKICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzgwLDYgKzE3OTYsOCBAQCBib29sIEdyYXBoOjpjYW5PcHRpbWl6
ZVN0cmluZ09iamVjdEFjY2VzCiAgICAgaWYgKGhhc0V4aXRTaXRlKGNvZGVPcmlnaW4sIEJhZENh
Y2hlKSB8fCBoYXNFeGl0U2l0ZShjb2RlT3JpZ2luLCBCYWRDb25zdGFudENhY2hlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gT09QUworCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKTsKICAgICBTdHJ1Y3R1cmUq
IHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+c3Ry
aW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoc3RyaW5nT2JqZWN0
U3RydWN0dXJlKTsKQEAgLTE4MjksNiArMTg0NywxMiBAQCBib29sIEdyYXBoOjpjYW5Eb0Zhc3RT
cHJlYWQoTm9kZSogbm9kZSwgCiAgICAgLy8gVGhlIHBhcmFtZXRlciAndmFsdWUnIGlzIHRoZSBB
YnN0cmFjdFZhbHVlIGZvciBjaGlsZDEgKHRoZSB0aGluZyBiZWluZyBzcHJlYWQpLgogICAgIEFT
U0VSVChub2RlLT5vcCgpID09IFNwcmVhZCk7CiAKKyAgICAvLyBPT1BTCisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLyoKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IEFycmF5VXNlKSB7
CiAgICAgICAgIC8vIE5vdGU6IHdlIG9ubHkgc3BlY3VsYXRlIG9uIEFycmF5VXNlIHdoZW4gd2Un
dmUgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgd2F0Y2hwb2ludHMKICAgICAgICAgLy8gdG8gcHJvdmUg
dGhhdCB0aGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIG5vbi1vYnNlcnZhYmxlIHN0YXJ0aW5nIGZy
b20gQXJyYXlQcm90b3R5cGUuCkBAIC0xODU2LDYgKzE4ODAsNyBAQCBib29sIEdyYXBoOjpjYW5E
b0Zhc3RTcHJlYWQoTm9kZSogbm9kZSwgCiAgICAgfSk7CiAKICAgICByZXR1cm4gYWxsR29vZDsK
KyAgICAqLwogfQogCiB2b2lkIEdyYXBoOjpjbGVhckNQU0NGR0RhdGEoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMTEgKzI0
MSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsg
Ly8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KICAgICBGcm96ZW5WYWx1ZSogZnJl
ZXplU3Ryb25nKEpTVmFsdWUpOyAvLyBTaG9ydGhhbmQgZm9yIGZyZWV6ZSh2YWx1ZSktPnN0cmVu
Z3RoZW5UbyhTdHJvbmdWYWx1ZSkuCisgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShSZWdpc3RlcmVk
U3RydWN0dXJlKTsKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUs
IEZyb3plblZhbHVlKiB2YWx1ZSk7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKTsKICAgICB2b2lkIGNvbnZlcnRUb1N0cm9uZ0NvbnN0YW50KE5v
ZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpOwogCisgICAgYm9vbCBpc1VubGlua2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1VubGlua2VkOyB9CisgICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0
dXJuICFpc1VubGlua2VkKCk7IH0KKwogICAgIC8vIFVzZSB0aGlzIHRvIHByb2R1Y2UgYSB2YWx1
ZSB5b3Uga25vdyB3b24ndCBiZSBhY2Nlc3NlZCBidXQgdGhlIGNvbXBpbGVyCiAgICAgLy8gbWln
aHQgdGhpbmsgaXMgbGl2ZS4gRm9yIGV4bWFwbGUsIGluIG91ciBvcF9pdGVyYXRvcl9uZXh0IHBh
cnNpbmcKICAgICAvLyB2YWx1ZSBWaXJ0dWFsUmVnaXN0ZXIgaXMgb25seSByZWFkIGlmIHdlIGFy
ZSBub3QgImRvbmUiLiBCZWNhdXNlIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMTAgKzI2
NiwxNSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5j
aFdlYWtTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgd2Vha1N0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgLy9TdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHdlYWtTdHJ1Y3R1cmUuZ2V0KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
SnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBUcnVzdGVkSW1tMzIoc3RydWN0dXJl
LT5pZCgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIFVOVVNFRF9QQVJBTSh3
ZWFrU3RydWN0dXJlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVT
RURfUEFSQU0oY29uZCk7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vSnVtcCByZXN1bHQg
PSBicmFuY2gzMihjb25kLCBsZWZ0LCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7Cisg
ICAgICAgIC8vcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKICNlbHNlCiAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShy
ZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEgKzEwOCwxMSBAQCB2b2lkIE5vZGU6OnJlbW92ZShH
cmFwaCYgZ3JhcGgpCiAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OiB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbXVsdGlHZXRCeU9m
ZnNldERhdGEoKTsKLSAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZVNldCBzZXQ7CiAgICAgICAgIGZvciAoTXVsdGlHZXRCeU9mZnNldENhc2UmIGdl
dENhc2UgOiBkYXRhLmNhc2VzKSB7CiAgICAgICAgICAgICBnZXRDYXNlLnNldCgpLmZvckVhY2go
CiAgICAgICAgICAgICAgICAgWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewot
ICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQogICAgICAgICBjb252ZXJ0VG9DaGVja1N0cnVjdHVyZShncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDI4NDcw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCBwcml2YXRlOgog
ICAgIEFsbG9jYXRpb24qIGhhbmRsZUludGVybmFsRmllbGRDbGFzcyhOb2RlKiBub2RlLCBIYXNo
TWFwPFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yLCBMYXp5Tm9kZT4mIHdyaXRlcykKICAgICB7
CiAgICAgICAgIEFsbG9jYXRpb24qIHJlc3VsdCA9ICZtX2hlYXAubmV3QWxsb2NhdGlvbihub2Rl
LCBBbGxvY2F0aW9uOjpLaW5kOjpJbnRlcm5hbEZpZWxkT2JqZWN0KTsKLSAgICAgICAgd3JpdGVz
LmFkZChTdHJ1Y3R1cmVQTG9jLCBMYXp5Tm9kZShtX2dyYXBoLmZyZWV6ZShub2RlLT5zdHJ1Y3R1
cmUoKS5nZXQoKSkpKTsKKyAgICAgICAgd3JpdGVzLmFkZChTdHJ1Y3R1cmVQTG9jLCBMYXp5Tm9k
ZShtX2dyYXBoLmZyZWV6ZShub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgYXV0byBpbml0
aWFsVmFsdWVzID0gSW50ZXJuYWxGaWVsZENsYXNzOjppbml0aWFsVmFsdWVzKCk7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoaW5pdGlhbFZhbHVlcy5zaXplKCkgPT0gSW50ZXJuYWxGaWVsZENsYXNz
OjpudW1iZXJPZkludGVybmFsRmllbGRzKTsgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBpbml0aWFsVmFsdWVzLnNpemUoKTsgKytpbmRleCkKQEAgLTk1
NSw3ICs5NTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdGFyZ2V0ID0gJm1faGVhcC5uZXdB
bGxvY2F0aW9uKG5vZGUsIEFsbG9jYXRpb246OktpbmQ6Ok9iamVjdCk7CiAgICAgICAgICAgICB0
YXJnZXQtPnNldFN0cnVjdHVyZXMobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgd3Jp
dGVzLmFkZCgKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVQTG9jLCBMYXp5Tm9kZShtX2dyYXBo
LmZyZWV6ZShub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVQTG9jLCBMYXp5Tm9kZShtX2dyYXBoLmZyZWV6ZShub2RlLT5zdHJ1Y3R1cmUoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CkBAIC05ODIs
NyArOTgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTmV3SW50ZXJu
YWxGaWVsZE9iamVjdDogewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5zdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+c3RydWN0dXJl
KCkudHlwZUluZm8oKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSlNBcnJheUl0ZXJhdG9y
VHlwZToKICAgICAgICAgICAgICAgICB0YXJnZXQgPSBoYW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3M8
SlNBcnJheUl0ZXJhdG9yPihub2RlLCB3cml0ZXMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTkzLDEwICs5OTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0YXJnZXQgPSBo
YW5kbGVJbnRlcm5hbEZpZWxkQ2xhc3M8SlNTZXRJdGVyYXRvcj4obm9kZSwgd3JpdGVzKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSlNQcm9taXNlVHlwZToKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTSW50
ZXJuYWxQcm9taXNlOjppbmZvKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVy
ZSgpLmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldCA9IGhhbmRsZUludGVybmFsRmllbGRDbGFzczxKU0ludGVybmFsUHJv
bWlzZT4obm9kZSwgd3JpdGVzKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBKU1Byb21p
c2U6OmluZm8oKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUo
KS5jbGFzc0luZm8oKSA9PSBKU1Byb21pc2U6OmluZm8oKSk7CiAgICAgICAgICAgICAgICAgICAg
IHRhcmdldCA9IGhhbmRsZUludGVybmFsRmllbGRDbGFzczxKU1Byb21pc2U+KG5vZGUsIHdyaXRl
cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAzNyw3
ICsxMDM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICB0YXJnZXQgPSBtX2hlYXAub25seUxvY2FsQWxsb2NhdGlvbihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzT2JqZWN0QWxsb2Nh
dGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVzLmFkZChTdHJ1Y3R1cmVQTG9jLCBMYXp5
Tm9kZShtX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC5nZXQo
KSkpKSk7CisgICAgICAgICAgICAgICAgd3JpdGVzLmFkZChTdHJ1Y3R1cmVQTG9jLCBMYXp5Tm9k
ZShtX2dyYXBoLmZyZWV6ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKSk7CiAgICAgICAgICAg
ICAgICAgdGFyZ2V0LT5zZXRTdHJ1Y3R1cmVzKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2hlYXAuZXNjYXBlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CkBAIC0yNTAzLDcgKzI1MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIHNldCBpcyBjb25zZXJ2YXRpdmUuIFRoaXMgc2V0IGNh
biBpbmNsdWRlIFN0cnVjdHVyZSB3aGljaCBkb2VzIG5vdCBoYXZlIGEgbGVnaXQgcHJvcGVydHku
CiAgICAgICAgICAgICAgICAgLy8gV2UgZmlsdGVyIG91dCBzdWNoIGFuIGFwcGFyZW50bHkgaW5h
cHByb3ByaWF0ZSBzdHJ1Y3R1cmVzIGhlcmUgc2luY2UgTXVsdGlQdXRCeU9mZnNldCBhc3N1bWVz
IGFsbCB0aGUgc3RydWN0dXJlcwogICAgICAgICAgICAgICAgIC8vIGhhdmUgdmFsaWQgY29ycmVz
cG9uZGluZyBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuZ2V0Q29uY3VycmVudGx5KHVpZCkgIT0gaW52YWxp
ZE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJl
KTsKICAgICAgICAgICAgIH0KIApAQCAtMjUxNSwxMyArMjUxNSwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZXMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVzLmVuZCgpLAogICAgICAgICAgICAgICAgIFt1aWRdIChSZWdpc3RlcmVkU3RydWN0dXJlIGEs
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgYikgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhLT5nZXRDb25jdXJyZW50bHkodWlkKSA8IGItPmdldENvbmN1cnJlbnRseSh1aWQpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXRDb25jdXJyZW50bHkodWlkKSA8IGIuZ2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0cnVjdHVyZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IGZpcnN0T2Zmc2V0ID0gc3RydWN0dXJlc1swXS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Cisg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdE9mZnNldCA9IHN0cnVjdHVyZXNbMF0uZ2V0
Q29uY3VycmVudGx5KHVpZCk7CiAKLSAgICAgICAgICAgIGlmIChmaXJzdE9mZnNldCA9PSBzdHJ1
Y3R1cmVzLmxhc3QoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCkpIHsKKyAgICAgICAgICAgIGlmIChm
aXJzdE9mZnNldCA9PSBzdHJ1Y3R1cmVzLmxhc3QoKS5nZXRDb25jdXJyZW50bHkodWlkKSkgewog
ICAgICAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXaGVuIHdlIGRlY2lkZSB0byBzaW5rIG9iamVjdHMgd2l0aCBhCiAgICAgICAgICAg
ICAgICAgLy8gcHJvcGVydHkgc3RvcmFnZSwgd2Ugc2hvdWxkIGhhbmRsZSBub24taW5saW5lIG9m
ZnNldHMuCkBAIC0yNTQzLDExICsyNTQzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBNdWx0
aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5h
ZGQoKTsKICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOwogCisgICAgICAgICAgICAvLyBPT1BTOgorICAgICAgICAgICAgLyoKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gZmlyc3RP
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0IGN1cnJlbnRTZXQ7CiAgICAgICAg
ICAgICAgICAgZm9yIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMp
IHsKLSAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0cyBNdWx0aVB1dEJ5T2Zmc2V0IGxp
a2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJldmlvdXNs
eSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKQEAgLTI1NjIsNiArMjU2NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkp
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgcmV0dXJuIG1f
Z3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0LApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTE1LDcgKzExMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBOZXdJbnRlcm5hbEZpZWxkT2JqZWN0OgotICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9jdXJyZW50Tm9kZS0+c3RydWN0dXJl
KCkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tU3Ry
dWN0dXJlTGlrZShtX2N1cnJlbnROb2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVNsaWNlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJl
ZFN0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIGNsYXNzIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgewogcHVibGljOgogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQorICAgIC8vU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkU3RydWN0
dXJlJiBvdGhlcikgY29uc3QKICAgICB7CkBAIC01NSw5ICs1NCwzOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhIWdldCgpOwogICAgIH0KIAorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7IH0KKyAgICBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5jbGFzc0luZm8oKTsg
fQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZS0+aW5kZXhpbmdNb2RlKCk7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOyB9CisgICAgYm9vbCBo
YXNQb2x5UHJvdG8oKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS0+aGFzUG9seVByb3RvKCk7
IH0KKyAgICBKU1ZhbHVlIHN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsgfQorICAgIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25L
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCk7IH0KKyAg
ICAvLyBPT1BTCisgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IH0KKyAgICB1bnNp
Z25lZCBvdXRPZkxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOyB9CisgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOyB9Cisg
ICAgVmVjdG9yPFByb3BlcnR5TWFwRW50cnk+IGdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSB7
IHJldHVybiBtX3N0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpOyB9CisgICAg
Ym9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29u
Y3VycmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSB7
IHJldHVybiBtX3N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7IH0K
KyAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHVudXNlZDsKKyAgICAgICAgcmV0dXJuIGdldENv
bmN1cnJlbnRseSh1aWQsIHVudXNlZCk7CisgICAgfQorICAgIGJvb2wgaXNWYWxpZE9mZnNldChQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCk7IH0KKyAgICBib29sIGRmZ1Nob3VsZFdhdGNoKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCk7IH0KKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgR3JhcGg7CiAKKyAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdp
c3RlcmVkU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihT
cGVjCiB7CiAgICAgZ2VuZXJpY0ZpbHRlcigKICAgICAgICAgWyZdIChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZSAmIHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJu
IHR5cGUgJiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVMaWtlKHN0cnVjdHVyZSk7CiAgICAgICAg
IH0pOwogfQogCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldDo6
ZmlsdGVyQXJyYXkKIHsKICAgICBnZW5lcmljRmlsdGVyKAogICAgICAgICBbJl0gKFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBhcnJh
eU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0
dXJlKTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgU3BlY3VsYXRlZFR5cGUg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldDo6cwogICAgIFNwZWN1bGF0ZWRUeXBlIHJlc3VsdCA9IFNw
ZWNOb25lOwogICAgIGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1lcmdlU3BlY3VsYXRpb24ocmVzdWx0LCBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICBtZXJnZVNw
ZWN1bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlTGlrZShzdHJ1Y3R1cmUp
KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc5LDE4ICs3OSwyMiBA
QCBBcnJheU1vZGVzIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6OmFycmF5CiAgICAgQXJyYXlNb2Rl
cyByZXN1bHQgPSAwOwogICAgIGZvckVhY2goCiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1bHQsIGFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgbWVy
Z2VBcnJheU1vZGVzKHJlc3VsdCwgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7
CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgUmVnaXN0ZXJlZFN0
cnVjdHVyZVNldDo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0
cmFja2VkUmVmZXJlbmNlcykgY29uc3QKIHsKKyAgICBVTlVTRURfUEFSQU0odHJhY2tlZFJlZmVy
ZW5jZXMpOwogICAgIC8vIFRoZSB0eXBlIHN5c3RlbSBzaG91bGQgaGVscCB1cyBoZXJlLCBidXQg
cHJvdGVjdCBwZW9wbGUgZnJvbSBnZXR0aW5nIHRoYXQgd3JvbmcgdXNpbmcgYml0d2lzZV9jYXN0
IG9yIHNvbWV0aGluZyBjcmF6eS4KKyAgICAvLyBPT1BTCisgICAgLyoKICAgICBmb3JFYWNoKAog
ICAgICAgICBbJl0gKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7CiAgICAgICAgICAg
ICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICB9KTsK
KyAgICAqLwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaAko
cmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9CiAKKyAgICAvLyBPT1BTCiAg
ICAgU3RydWN0dXJlU2V0IHRvU3RydWN0dXJlU2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIFN0
cnVjdHVyZVNldCByZXN1bHQ7Ci0gICAgICAgIGZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgeyByZXN1bHQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7IH0pOworICAgICAg
ICAvL2ZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgeyByZXN1bHQu
YWRkKHN0cnVjdHVyZS5nZXQoKSk7IH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0
ZSgpIHx8IHZhbHVlLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIHJldHVybiB2YWx1ZVswXS5nZXQoKSA9PSBncmFwaC5tX3ZtLmdldHRlclNldHRlclN0
cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIHZhbHVlWzBdLmNsYXNzSW5mbygpID09IGdyYXBoLm1f
dm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLT5jbGFzc0luZm8oKTsKICAgICB9CiAKICAgICBjYXNl
IEJvdHRvbVZhbHVlOgpAQCAtNDEzLDExICs0MTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSA9IHZh
bHVlW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKHRoaXNTdHJ1Y3R1cmUtPmlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHRoaXNTdHJ1
Y3R1cmUgPSB2YWx1ZVtpXTsKKyAgICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBjaGVja09mZnNldCA9IHRoaXNTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgY2hlY2tPZmZzZXQgPSB0aGlzU3Ry
dWN0dXJlLmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgaWYg
KGNoZWNrT2Zmc2V0ICE9IGRlc2lyZWRPZmZzZXQgfHwgIShhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkFjY2Vzc29yKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTQ0NiwxMCArNDQ2LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUgPSB2YWx1ZVtpXS5n
ZXQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzU3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKQorICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0aGlzU3RydWN0dXJlID0g
dmFsdWVbaV07CisgICAgICAgICAgICBpZiAodGhpc1N0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlm
ICghdGhpc1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgaWYg
KCF0aGlzU3RydWN0dXJlLmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00OTIsNyAr
NDkyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAg
ICBib29sIGlzU2FmZSA9IHRydWU7CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
ID0gbm9kZS0+cmVxdWlyZWRET01KSVRDbGFzc0luZm8oKTsKICAgICAgICAgc3RydWN0dXJlcy5m
b3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IGlzU2FmZSAmPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZv
KTsKKyAgICAgICAgICAgIGlzU2FmZSAmPSBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xh
c3NPZihjbGFzc0luZm8pOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIGlzU2FmZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
NSwxMyArMjE1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAg
aWYgKGJhc2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4u
c3R1YkluZm8oKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiksIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgZ2VuLnN0dWJJbmZvKCks
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUGF5bG9hZEdQUiksCiAg
ICAgICAgICAgICBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXls
b2FkR1BSKSwgaWRlbnRpZmllci5yYXdCaXRzKCkpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmln
aW4pLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBh
eWxvYWRHUFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRk
R2V0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoCiAgICAgaWYgKGJhc2VUYWdHUFJPck5v
bmUgPT0gSW52YWxpZEdQUlJlZyAmJiB0aGlzVGFnR1BSID09IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUiksIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgZ2VuLnN0dWJJbmZv
KCksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUGF5bG9hZEdQUiks
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZSh0aGlzUGF5bG9hZEdQUiksCiAg
ICAgICAgICAgICBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaAogICAgICAgICAKICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLCBK
U1ZhbHVlUmVncyh0aGlzVGFnR1BSLCB0aGlzUGF5bG9hZEdQUiksIGlkZW50aWZpZXIucmF3Qml0
cygpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiksIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c1RhZ0dQUiwgdGhpc1BheWxvYWRHUFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfQog
CiAgICAgbV9qaXQuYWRkR2V0QnlJZFdpdGhUaGlzKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAt
MzAzLDcgKzMwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUK
ICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICAgICAg
R1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3Qu
Z3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9q
aXQuZ3JhcGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShnbG9iYWxPYmplY3RQdHIobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbG9j
YWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3Vs
dFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdFBheWxvYWRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1v
dGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1
bHRQYXlsb2FkR1BSKTsKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBoCiAgICAKICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0
R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9i
YWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2Fs
R2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShnbG9iYWxPYmplY3RQdHIobV9j
dXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9i
amVjdEdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CkBAIC00MjEsNyArNDIxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBicmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIGlu
dmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9h
ZEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZzFQYXlsb2Fk
R1BSLCBhcmcyUGF5bG9hZEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKIApAQCAtNDMwLDcgKzQzMCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgLy8gRklYTUU6
IEFkZCBmYXN0IHBhdGhzIGZvciB0d29DZWxscywgbnVtYmVyIGV0Yy4KIAogICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0UGF5bG9hZEdQUiwgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZzFSZWdzLCBhcmcyUmVncyk7CiAg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMoKTsKIApAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmdlbmVy
aWNKU1ZhbHVlTm9uUGUKICAgICAgICAgbm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKICAgICAg
ICAgCiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3Vs
dFBheWxvYWRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUGF5bG9hZEdQUiwg
YXJnMlBheWxvYWRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcUNlbGwsIHJlc3VsdFBheWxvYWRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmln
aW4uc2VtYW50aWMpLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7
CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpnZW5lcmljSlNWYWx1
ZU5vblBlCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRocy4KIAogICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0UGF5bG9hZEdQUiwgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZzFSZWdzLCBhcmcyUmVncyk7CiAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKICAgICAgICAgCkBAIC02NjUsNyArNjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgICAgICAgICAvLyBSaWdodCBub3csIGFyZ3Vt
ZW50cyBpcyBpbiBhcmd1bWVudHNUYWdHUFIvYXJndW1lbnRzUGF5bG9hZEdQUiBhbmQgdGhlIHJl
Z2lzdGVyIGZpbGUgaXMKICAgICAgICAgICAgIC8vIGZsdXNoZWQuCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgSlNWYWx1ZVJlZ3MoYXJndW1lbnRz
VGFnR1BSLCBhcmd1bWVudHNQYXlsb2FkR1BSKSwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6
ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGdsb2JhbE9iamVjdFB0
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBKU1ZhbHVlUmVncyhhcmd1bWVudHNUYWdHUFIsIGFy
Z3VtZW50c1BheWxvYWRHUFIpLCBudW1Vc2VkU3RhY2tTbG90cywgZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNvdW50IG9mIHRoZSBj
YWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3BlcmFuZC4KQEAgLTY3
NSw3ICs2NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAg
ICAgICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBtX2pp
dC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lk
KikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIHNjcmF0Y2hHUFIxLCBKU1ZhbHVlUmVncyhhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50
c1BheWxvYWRHUFIpLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXR1cFZhcmFyZ3NG
cmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmln
aW4uc2VtYW50aWMpLCBzY3JhdGNoR1BSMSwgSlNWYWx1ZVJlZ3MoYXJndW1lbnRzVGFnR1BSLCBh
cmd1bWVudHNQYXlsb2FkR1BSKSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAg
ICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgICAgICB9CkBAIC0xNTA2LDcgKzE1MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVG9Cb29sZWFuT2JqCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOworICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdFB0
cihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAKICAgICAgICAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC0xNjMxLDcgKzE2MzEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKKyAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3RQdHIobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwog
CiAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAg
fQpAQCAtMTgwMywxMiArMTgwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29u
dGlndW91c1B1CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsCiAgICAgICAgICAgICAgICAgbm9kZS0+
ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QsCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3ModmFsdWVUYWcsIHZhbHVl
UGF5bG9hZFJlZykpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgZ2xvYmFsT2JqZWN0UHRy
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBKU1ZhbHVlUmVn
cyh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkUmVnKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLAogICAgICAgICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IEpTVmFsdWVSZWdzKHZhbHVlVGFnLCB2YWx1ZVBheWxvYWRSZWcpKSk7CisgICAgICAgICAgICAg
ICAgTm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3ModmFsdWVUYWcsIHZhbHVlUGF5bG9hZFJlZykp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTg2Niw3ICsxODY2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAKICAgICAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlW
YWwsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBi
YXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTE5
MDgsMTEgKzE5MDgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5v
ZAogICAgICAgICAgICAgaWYgKGJhc2VSZWdzLnRhZ0dQUigpID09IEludmFsaWRHUFJSZWcpIHsK
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAg
ICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygp
LCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkp
LCBwcm9wZXJ0eVJlZ3MpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBnbG9iYWxP
YmplY3RQdHIoY29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2FsbEhlbHBl
cnM6OkNlbGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBwcm9wZXJ0eVJlZ3MpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4p
LCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGgu
Z2V0KCkpOwpAQCAtMjAxNSw3ICsyMDE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsKE5vZAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjA4MSw3ICsyMDgxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogCiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjEzOCw3ICsy
MTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAot
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIGdsb2Jh
bE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMjc0OSw5ICsyNzQ5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogCiAgICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxO
b25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJl
Z3MsIHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+
ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaWN0
IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0LCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3Mp
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncyk7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0LCBn
bG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUiwgcHJvcGVydHlS
ZWdzLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTI3OTYsNyArMjc5Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGF1
dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwog
ICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1Yklu
Zm8oKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0
cihjb2RlT3JpZ2luKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1
YkluZm8oKSwgbnVsbHB0cik7CiAKICAgICAgICAgICAgIG1faml0LmFkZFB1dEJ5VmFsKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOwogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92
ZShzbG93UGF0aCkpOwpAQCAtMjkxMCwxMiArMjkxMCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVy
YXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3ModmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJl
ZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIEpTVmFsdWVSZWdz
KHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBKU1ZhbHVlUmVncyh2
YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Tm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3ModmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTI5NTAsNyArMjk1MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCku
aXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbFdpdGhUaGlzLAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWdzLCB0aGlzUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOworICAgICAgICAg
ICAgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VSZWdzLCB0aGlz
UmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwogCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMzA1MCw3ICszMDUwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVy
TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiksIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwODgsNyArMzA4OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVj
b3Zlckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSKSk7
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUikp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTI3LDcgKzMx
MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSKSk7CisgICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBnbG9i
YWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUikpOwogCiAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjg0LDcgKzMyODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIEluc3RlYWQgb2YgdGhlIHNsb3cg
cGF0aCBnZW5lcmF0b3IsIHdlIGVtaXQgY2FsbE9wZXJhdGlvbiBoZXJlLgogICAgICAgICBpZiAo
IShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNCeXRlY29kZU51
bWJlcikpIHsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRvTnVtYmVyLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYXJndW1lbnRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVG9OdW1iZXIsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBhcmd1bWVudFJlZ3MpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdE51bWJlcjsKQEAgLTMyOTgsNyArMzI5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFJlZ3MpOwotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub051bWJlciwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50UmVncyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRvTnVtYmVyLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1lbnRSZWdzKTsKICAgICAgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
QEAgLTM2MDcsNyArMzYwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIG9sZFN0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5u
ZXh0OwotICAgICAgICBtX2ppdC5ncmFwaCgpLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemls
eShub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5n
ZXQoKSwgbmV3U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4u
dHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5P
d25lcigpLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CiAKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTM4MjUsNyArMzgyNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZW1v
dGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1f
aml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxP
YmplY3RHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShnbG9iYWxPYmplY3RQdHIobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAg
ICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RH
UFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0LmdwcigpKTsKQEAgLTM4ODksNyArMzg4
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk51bWJlcklzSW50ZWdlciwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgaW5wdXRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OdW1iZXJJc0ludGVnZXIsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksIGlucHV0UmVncyk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzkzMiw3ICszOTMyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgaW5wdXRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBI
YXNoLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBp
bnB1dFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBzdHJp
Y3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTM5NjMs
OSArMzk2Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25KU01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksIG1hcEdQUiwga2V5UmVncywgaGFzaEdQUik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0LCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBtYXBHUFIsIGtleVJlZ3MsIGhh
c2hHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNr
ZXQsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG1h
cEdQUiwga2V5UmVncywgaGFzaEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBA
IC00MjI0LDcgKzQyMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHRlbXBHUFIpOwogICAgICAgICAgICAga2V5UmVncyA9IEpTVmFs
dWVSZWdzKHRlbXBHUFIsIGtleVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgfQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc093blByb3BlcnR5LCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvYmplY3RHUFIsIGtleVJlZ3MpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhc093blByb3BlcnR5LCByZXN1bHRHUFIsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBvYmplY3RHUFIsIGtleVJlZ3MpOwogICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAKQEAgLTQ1MTIsMTIgKzQ1MTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NC
b29sZWFuKEdQUlJlZwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20o
Tm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLQogICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAKICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUmFuZG9tLCByZXN1bHQuZnByKCksIGdsb2JhbE9iamVjdCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SYW5kb20sIHJlc3VsdC5mcHIoKSwgZ2xvYmFsT2Jq
ZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpOwogICAgIC8vIG9wZXJhdGlvblJhbmRvbSBk
b2VzIG5vdCByYWlzZSBhbnkgZXhjZXB0aW9uLgogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODQ3MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzcsMTIgKzE3NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVP
CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCiAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksCiAgICAgICAg
ICAgICBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAot
ICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBiYXNl
R1BSLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CisgICAgICAgICAgICByZXN1bHRHUFIsIGdsb2Jh
bE9iamVjdFB0cihjb2RlT3JpZ2luKSwgc3R1YkluZm9HUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIu
cmF3Qml0cygpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0
QnlJZEZ1bmN0aW9uKHR5cGUpLAogICAgICAgICAgICAgc3BpbGxNb2RlLCBFeGNlcHRpb25DaGVj
a1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgaWRlbnRpZmllci5yYXdCaXRzKCkp
OworICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfQogICAg
IAogICAgIG1faml0LmFkZEdldEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC0yMTQsMTIg
KzIxNCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoCiAgICAg
ICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAgICAgICAgIERvbnRTcGlsbCwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIGJhc2VHUFIsIHRoaXNHUFIsIGlk
ZW50aWZpZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0
UHRyKGNvZGVPcmlnaW4pLCBzdHViSW5mb0dQUiwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRpZmll
ci5yYXdCaXRzKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhD
YWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwKICAgICAgICAgICAgIERvbnRTcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJl
bWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIGlkZW50aWZpZXIucmF3Qml0cygp
KTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRpZmllci5yYXdCaXRzKCkpOwog
ICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRHZXRCeUlkV2l0aFRoaXMoZ2VuLCBzbG93UGF0aC5n
ZXQoKSk7CkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaAogICAgICAgICBicmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIs
IGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAg
ICAgICAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBoCiAKICAgICAgICAganVtcChpbnZlcnQgPyB0YWtlbiA6IG5vdFRha2VuLCBGb3Jj
ZUp1bXApOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpKTsKKyAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoQ2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgYXJnMUdQUiwgYXJnMkdQUikpOwogICAgICAgICBicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0
R1BSLCB0YWtlbik7CiAgICAgfQogCkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Z2VuZXJpY0pTVmFsdWVOb25QZQogICAgICAgICBub3RFcXVhbENhc2UubGluaygmbV9q
aXQpOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3Mp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJl
c3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZzFSZWdz
LCBhcmcyUmVncyk7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgCkBAIC01OTgsNyArNTk4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Z2VuZXJpY0pTVmFsdWVOb25QZQogCiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tNjQoMCksIHJlc3VsdEdQUik7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd1BhdGhDYXNlcywgdGhpcywgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJl
Z3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGhDYXNl
cywgdGhpcywgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcmcxUmVncywgYXJnMlJlZ3MpKTsKIAogICAg
IGRvbmUubGluaygmbV9qaXQpOwogCkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8v
IFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVy
IGZpbGUgaXMgZmx1c2hlZC4KLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6
ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywg
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3Vt
ZW50IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVu
dHMgb3BlcmFuZC4KQEAgLTc3NCw3ICs3NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKG1faml0LCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIsIGRhdGEt
PmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHNjcmF0
Y2hHUFIxLCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICAgICAgfQpAQCAtMjM4MCw3ICsyMzgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAKICAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwg
cmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CkBAIC0yNDM0LDEx
ICsyNDM0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2QKICAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CiAgICAgICAg
ICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIoY29kZU9y
aWdpbiksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0g
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygp
LCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLCBudWxscHRy
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5hZGRH
ZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTI1MTMsNyArMjUxMyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2QKICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBn
bG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKICAgICAgICAgfQogCiAKQEAgLTI2MDUsNyArMjYwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2QKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0UmVncy5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3By
KCksIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZykpOwogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBu
b2RlKTsKICAgICAgICAgfQogCkBAIC0yNjYzLDcgKzI2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWwoTm9kCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVn
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRSZWcsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzAwLDcgKzI3MDAsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgYXV0byB0eXBlZEFycmF5VHlwZSA9IG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCk7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNv
bmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVy
ZS5nZXQoKSk7CiAKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQ1Mk9wZXJhbmQgc2l6ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwpAQCAtMzM2
OCw5ICszMzY3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKICAgICAgICAgICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDog
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0LCBnbG9iYWxP
YmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQ
Uik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwpAQCAtMzQyMywxMSArMzQyMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkRGR0pJVCkpIHsKICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxs
KAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBz
dHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBudWxscHRyKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIs
IGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQs
IGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVl
R1BSLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0cik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1faml0LmFkZFB1dEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMzUxNSw3ICsz
NTE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkKICAgICAgICAgICAgICAg
ICAgICAgICAgID8gKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdCkKICAgICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0
cmljdCksCi0gICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAg
ICAgICAgIE5vUmVzdWx0LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0z
NTk5LDcgKzM1OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgPyAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJh
dGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgOiAo
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzTm9uU3RyaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKQEAgLTM2NjQsNyArMzY2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgICAgICBpZiAoIXN0b3JhZ2VFZGdlKSB7CiAgICAgICAgICAgICBhdXRv
IGNhbGxTbG93UGF0aCA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBnbG9iYWxPYmpl
Y3RJbW1QdHIgPSBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdEltbVB0ciA9IGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgQXRvbWljc0FkZDoKICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25BdG9taWNzQWRkLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdEltbVB0ciwgYmFz
ZUdQUiwgaW5kZXhHUFIsIGFyZ0dQUnNbMF0pOwpAQCAtMzg3Myw3ICszODcyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVlLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQXRvbWljc0lzTG9ja0ZyZWUsIHJlc3VsdEdQUiwgZ2xvYmFsT2Jq
ZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wZXJhbmRHUFIpOwogICAgICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDAxMCw3ICs0MDA5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
LCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUikpOworICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoLCB2YWx1ZUdQ
UiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VHUFIpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB0aGF0IHRo
ZSByZXN1bHQgaXMgYW4gaW50IGJlY2F1c2Ugb2YgdGhlIHNsb3cgcGF0aHMuIDotLwogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbm9kZSk7CkBAIC00MDQzLDcgKzQwNDIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UG9wLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFs
dWVHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSKSk7
CiAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC00MTY5LDcgKzQxNjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIEluc3RlYWQgb2YgdGhlIHNsb3cgcGF0aCBnZW5l
cmF0b3IsIHdlIGVtaXQgY2FsbE9wZXJhdGlvbiBoZXJlLgogICAgICAgICBpZiAoIShtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNCeXRlY29kZU51bWJlcikpIHsK
ICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRvTnVtYmVyLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBhcmd1bWVudEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvTnVt
YmVyLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBh
cmd1bWVudEdQUik7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TnVtYmVyID0g
bV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRHUFIpOwpAQCAtNDE3OCw3ICs0MTc3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAg
ICBub3ROdW1iZXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9O
dW1iZXIsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50R1BS
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9OdW1iZXIsIHJlc3VsdEdQ
UiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZ3VtZW50R1BSKTsK
ICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAgLTQ1NDMsNyArNDU0Miw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG9sZFN0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24o
KS0+cHJldmlvdXM7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0g
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwotICAgICAgICBtX2ppdC5ncmFwaCgpLm1fcGxhbi50
cmFuc2l0aW9ucygpLmFkZExhemlseShub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93
bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAg
bV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7
CiAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQ1NTEsNyArNDU1
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
QVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkg
PT0gbmV3U3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkpOwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVG
bGFncygpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0g
ICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTdHJ1
Y3R1cmUtPmlkKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgc3RvcmVTdHJ1Y3R1cmVJRChuZXdTdHJ1Y3R1
cmUsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDY1NCw3ICs0NjUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAogICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFN
b2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXNTdHJpY3QgOiBvcGVy
YXRpb25QdXRCeVZhbFdpdGhUaGlzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQ
UiwgdGhpc1ZhbHVlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsV2l0
aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbFdpdGhUaGlzLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUiwgdGhpc1ZhbHVlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAg
IG5vUmVzdWx0KG5vZGUpOwpAQCAtNDk5OCw3ICs0OTk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBKU1ZhbHVlUmVncyhpbnB1dEdQUikpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBKU1ZhbHVlUmVncyhpbnB1dEdQUikpOwogICAg
ICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKIApAQCAtNTA0Myw3ICs1MDQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
ICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBKU1ZhbHVlUmVncyhpbnB1dEdQUikpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksIEpTVmFsdWVSZWdzKGlucHV0R1BSKSk7CiAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtNTE5
MSw5ICs1MTkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKLSAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgbWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIGdsb2Jh
bE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQ
Uik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIpOwogICAgICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CkBAIC01
NTA2LDcgKzU1MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
c093blByb3BlcnR5LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvYmpl
Y3RHUFIsIGtleUdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzT3duUHJv
cGVydHksIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
IG9iamVjdEdQUiwga2V5R1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwog
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjg0NzAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDEyICs5NCwxMiBAQCBTcGVjdWxhdGl2ZUpJVDo6flNwZWN1bGF0aXZl
SklUKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJl
ZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCBHUFJSZWcgc3RvcmFn
ZUdQUiwgdW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKLSAg
ICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpOwotICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwor
ICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzdHJ1Y3R1cmUuaW5kZXhpbmdNb2RlKCkpKTsKKyAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpOwog
ICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGlu
Z1R5cGUpOwogCi0gICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCk7Ci0gICAgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSBzdHJ1
Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eSA9
IHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKQEAgLTEwNyw3
ICsxMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAKICAgICBBU1NFUlQodmVjdG9y
TGVuZ3RoID49IG51bUVsZW1lbnRzKTsKLSAgICB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9w
dGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZS5nZXQoKSwgdmVjdG9yTGVuZ3Ro
KTsKKyAgICB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0b3JMZW5ndGgpOwogICAg
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTEzNCwxMyArMTM0
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yOwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGUoKSA9PSBK
U1R5cGU6OkFycmF5VHlwZSkKKyAgICBpZiAoc3RydWN0dXJlLnR5cGVJbmZvKCkudHlwZSgpID09
IEpTVHlwZTo6QXJyYXlUeXBlKQogICAgICAgICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsQ29uY3VycmVudGx5PEpTQXJyYXk+KHZtLCBKU0FycmF5OjphbGxvY2F0aW9uU2l6ZShp
bmxpbmVDYXBhY2l0eSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAg
ICBlbHNlCiAgICAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJy
ZW50bHk8SlNGaW5hbE9iamVjdD4odm0sIEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlu
bGluZUNhcGFjaXR5KSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAg
IGlmIChhbGxvY2F0b3IpIHsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BS
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0g
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9
IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCkBAIC0xNTMs
NyArMTUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogCiAg
ICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAg
ICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CkBAIC0xNjEsNyAr
MTYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIGkpKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IgdmFsdWU7Ci0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpCisgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLmluZGV4aW5n
VHlwZSgpKSkKICAgICAgICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CkBAIC0x
NzUsNyArMTc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQog
ICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVk
SW1tMzIobnVtRWxlbWVudHMpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKICAgICAKLSAgICBtX2ppdC5lbWl0
SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uoc3RvcmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uo
c3RvcmFnZUdQUiwgc3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIAogICAgIG1f
aml0Lm11dGF0b3JGZW5jZSh2bSk7CiB9CkBAIC0xMTkxLDIyICsxMTkxLDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxldGVCeUlkKE4KICAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoSUNDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZv
KCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwg
c3R1YkluZm9HUFIsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlm
aWVyKCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiks
IHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRp
ZmllcigpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmll
cigpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50
aWZpZXIoKS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkp
KTsKICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aDsKICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpERkdKSVQpKSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAogICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwKLSAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIEND
YWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVy
KCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiksIHN0
dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9kZS0+Y2FjaGVh
YmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCku
dmFsdWUoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9k
ZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVj
bWFNb2RlKCkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2Jq
ZWN0UHRyKGNvZGVPcmlnaW4pLCBnZW4uc3R1YkluZm8oKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFs
dWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAgICAgfQogI2VuZGlmCiAK
QEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxldGVC
eUlkKE4KICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIG51bGxwdHIsIGJhc2VSZWdzLCBub2RlLT5jYWNoZWFibGVJ
ZGVudGlmaWVyKCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1
ZSgpKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkR2VuZXJpYywgcmVz
dWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbnVsbHB0ciwg
YmFzZVJlZ3MsIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogCiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAt
MTI3NywyMiArMTI3NywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlW
YWwoCiAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewog
ICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIGtleVJlZ3MsIFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsK
KyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwg
c3R1YkluZm9HUFIsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIo
bm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwga2V5UmVncywgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOworICAg
ICAgICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIGtleVJlZ3MsIFRydXN0ZWRJbW0zMihu
b2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKICAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CiAgICAgICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoSUNDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2Vu
LnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKSksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwg
a2V5UmVncywgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOworICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBzdHViSW5m
b0dQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIGtleVJlZ3MsIFRydXN0ZWRJ
bW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6
Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUo
KS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIo
Y29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwga2V5UmVncywgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOwog
ICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5VmFsKAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEdlbmVy
aWMsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG51bGxwdHIsIGJhc2VS
ZWdzLCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEdlbmVyaWMsIHJlc3VsdEdQUiwg
Z2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG51bGxwdHIsIGJhc2VSZWdz
LCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKQEAgLTEzNTIsMTIgKzEzNTIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUluQnlJZChOb2RlKgogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxs
KAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9H
UFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsCiAgICAg
ICAgICAgICBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVk
ZWQsCi0gICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BS
LCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRp
ZmllcigpLnJhd0JpdHMoKSk7CisgICAgICAgICAgICByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQ
dHIoY29kZU9yaWdpbiksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkluQnlJZE9wdGltaXplLAogICAgICAgICAgICAgTmVlZFRvU3Bp
bGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAotICAgICAgICAgICAg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgQ0NhbGxIZWxwZXJz
OjpDZWxsVmFsdWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRz
KCkpOworICAgICAgICAgICAgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4p
LCBnZW4uc3R1YkluZm8oKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCkpOwogICAgIH0KIAogICAgIG1faml0LmFk
ZEluQnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTE0MDIsMTIgKzE0MDIsMTIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwoTm9kZQogICAgICAgICBzbG93UGF0aCA9
IHNsb3dQYXRoSUNDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1Yklu
Zm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplLAogICAgICAgICAgICAgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWly
ZW1lbnQ6OkNoZWNrTmVlZGVkLAotICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdp
bikpLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQ
UiksIGtleVJlZ3MpOworICAgICAgICAgICAgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKGNv
ZGVPcmlnaW4pLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
YmFzZUdQUiksIGtleVJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xv
d1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsCiAgICAgICAgICAgICBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJl
bWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwga2V5UmVncyk7CisgICAgICAgICAgICByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIo
Y29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxW
YWx1ZShiYXNlR1BSKSwga2V5UmVncyk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkSW5CeVZhbChn
ZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTE0NTYsMTIgKzE0NTYsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc1ByaXZhdGUoTgogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRo
SUNDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1
YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwKICAgICAgICAgICAgIE5lZWRUb1NwaWxsLCBFeGNlcHRp
b25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJh
c2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKKyAg
ICAgICAgICAgIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgc3R1Yklu
Zm9HUFIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNl
bGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwKICAgICAgICAgICAgIE5l
ZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAg
ICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIENDYWxs
SGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9w
ZXJ0eU9yQnJhbmRHUFIpKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0
cihjb2RlT3JpZ2luKSwgZ2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJh
c2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKICAg
ICB9CiAKICAgICBtX2ppdC5hZGRJbkJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTQ5
NSw3ICsxNDk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1c2hXaXRoU2NvcAog
ICAgICAgICBzcGVjdWxhdGVPYmplY3Qob2JqZWN0RWRnZSwgb2JqZWN0R1BSKTsKIAogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hX
aXRoU2NvcGVPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGN1
cnJlbnRTY29wZUdQUiwgb2JqZWN0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXNoV2l0aFNjb3BlT2JqZWN0LCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBjdXJyZW50U2NvcGVHUFIsIG9iamVjdEdQUik7CiAgICAgICAgIC8v
IE5vIGV4Y2VwdGlvbiBjaGVjayBoZXJlIGFzIHdlIGRpZCBub3QgaGF2ZSB0byBjYWxsIHRvT2Jq
ZWN0KCkuCiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9iamVjdEVkZ2UudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpOwpAQCAtMTUwMyw3ICsxNTAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1c2hXaXRoU2NvcAogICAgICAgICBKU1ZhbHVlUmVncyBvYmplY3RSZWdzID0g
b2JqZWN0LmpzVmFsdWVSZWdzKCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXNoV2l0aFNjb3BlLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBjdXJyZW50U2NvcGVHUFIsIG9iamVjdFJlZ3MpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hXaXRoU2NvcGUsIHJlc3VsdEdQUiwgZ2xv
YmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGN1cnJlbnRTY29wZUdQUiwgb2Jq
ZWN0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgfQogICAgIApA
QCAtMTkyMiwxMiArMTkyMiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
U2xpY2UoCiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmlnQ2hhcmFj
dGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHRlbXBHUFIsICZ2bSwg
dGVtcEdQUikpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uU3RyaW5nU3Vic3RyLCB0ZW1wR1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgc3RyaW5nR1BSLCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKSk7CisgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uU3RyaW5nU3Vic3RyLCB0ZW1wR1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNl
bWFudGljKSwgc3RyaW5nR1BSLCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKSk7CiAKICAgICBpZiAo
ZW5kR1BSKQotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNSb3Bl
LCB0aGlzLCBvcGVyYXRpb25TdHJpbmdTbGljZSwgdGVtcEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIHN0cmluZ0dQUiwgc3RhcnRHUFIsICplbmRHUFIpKTsKKyAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzUm9wZSwgdGhpcywgb3BlcmF0aW9uU3RyaW5n
U2xpY2UsIHRlbXBHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBz
dHJpbmdHUFIsIHN0YXJ0R1BSLCAqZW5kR1BSKSk7CiAgICAgZWxzZQotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNSb3BlLCB0aGlzLCBvcGVyYXRpb25TdHJpbmdT
bGljZSwgdGVtcEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQUiwgc3Rh
cnRHUFIsIFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzUm9wZSwgdGhp
cywgb3BlcmF0aW9uU3RyaW5nU2xpY2UsIHRlbXBHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBzdHJpbmdHUFIsIHN0YXJ0R1BSLCBUcnVzdGVkSW1tMzIoc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSk7CiAKICAgICBkb25lQ2FzZXMubGluaygm
bV9qaXQpOwogICAgIGNlbGxSZXN1bHQodGVtcEdQUiwgbm9kZSk7CkBAIC0xOTc0LDcgKzE5NzQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Mb3dlckNhc2UoCiAgICAgCiAgICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGxlbmd0
aEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0xvd2VyQ2FzZSwgbGVuZ3RoR1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RyaW5nR1BSLCBpbmRleEdQUik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0xvd2VyQ2FzZSwgbGVuZ3RoR1BSLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgc3RyaW5nR1BSLCBpbmRleEdQUik7CiAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwpAQCAtMjQ3Nyw3ICsyNDc3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrVHJhcHMoTgogICAgICAgICBKSVRDb21waWxlcjo6
QWJzb2x1dGVBZGRyZXNzKG1faml0LnZtKCkudHJhcHMoKS50cmFwQml0c0FkZHJlc3MoKSksCiAg
ICAgICAgIFRydXN0ZWRJbW0zMihWTVRyYXBzOjpBc3luY0V2ZW50cykpOwogCi0gICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5lZWRUcmFwSGFuZGxpbmcsIHRoaXMsIG9wZXJh
dGlvbkhhbmRsZVRyYXBzLCB1bnVzZWRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5lZWRUcmFwSGFuZGxpbmcs
IHRoaXMsIG9wZXJhdGlvbkhhbmRsZVRyYXBzLCB1bnVzZWRHUFIsIGdsb2JhbE9iamVjdFB0cihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKQEAgLTI1
NTIsNyArMjU1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVYK
ICAgICAgICAgICAgICAgICBub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkKICAgICAgICAgICAg
ICAgICAgICAgPyAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dERv
dWJsZUJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXREb3Vi
bGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KQogICAgICAgICAgICAgICAgICAgICA6IChu
b2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJl
Y3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QpLAotICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7
CisgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICB9CiAKICAg
ICBub1Jlc3VsdChtX2N1cnJlbnROb2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpA
QCAtMjY5MSw3ICsyNjkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZyb21DaGFy
Q29kZQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5n
RnJvbUNoYXJDb2RlVW50eXBlZCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIG9wclJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21D
aGFyQ29kZVVudHlwZWQsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBvcHJSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAg
ICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CkBAIC0yNzEx
LDcgKzI3MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlCiAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNtYWxsU3RyaW5nc1Jl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcp
OwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUsIHNjcmF0
Y2hSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBwcm9wZXJ0eVJlZykpOworICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
blN0cmluZ0Zyb21DaGFyQ29kZSwgc2NyYXRjaFJlZywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyksIHByb3BlcnR5UmVnKSk7CiAgICAgY2VsbFJlc3VsdChzY3JhdGNoUmVn
LCBtX2N1cnJlbnROb2RlKTsKIH0KIApAQCAtMzYzMSwyNCArMzYzMSwyNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYXNlcywgdGhp
cywKICAgICAgICAgICAgICAgICBub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0
LAotICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZSwgcHJvcGVydHksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGds
b2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlLCBwcm9wZXJ0eSwgdmFs
dWVHUFIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLAog
ICAgICAgICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsCi0gICAgICAgICAgICAg
ICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlLCBwcm9wZXJ0eSwg
dmFsdWVHUFIpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgZ2xvYmFsT2JqZWN0UHRyKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZUdQUikpOwogICAgICAg
ICB9CiAjZWxzZSAvLyBub3QgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gUHV0QnlWYWxEaXJlY3QpIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLAogICAgICAg
ICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbE5vblN0cmljdCwK
LSAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2UsIEpTVmFsdWVSZWdzKHByb3BlcnR5VGFnR1BSLCBwcm9wZXJ0eSksIEpTVmFsdWVSZWdzKHZh
bHVlVGFnR1BSLCB2YWx1ZUdQUikpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2UsIEpTVmFsdWVSZWdzKHByb3Bl
cnR5VGFnR1BSLCBwcm9wZXJ0eSksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZUdQUikp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLAogICAgICAg
ICAgICAgICAgIG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdCwKLSAgICAgICAgICAg
ICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2UsIEpTVmFsdWVS
ZWdzKHByb3BlcnR5VGFnR1BSLCBwcm9wZXJ0eSksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2
YWx1ZUdQUikpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgZ2xvYmFsT2JqZWN0UHRyKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2UsIEpTVmFsdWVSZWdzKHByb3BlcnR5VGFnR1BSLCBw
cm9wZXJ0eSksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZUdQUikpKTsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgfQpAQCAtMzc1Miw3ICszNzUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsRm9yTwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHJlc3VsdFJlZ3MsIGdsb2Jh
bE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKQEAgLTM3NzMsNyArMzc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbEZvck8KICAgICBzcGVjdWxhdGVTeW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQ
dHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CkBAIC0zODM5LDEyICszODM5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQ
cml2YXRlTmEKICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gc2xvd1BhdGhJQ0NhbGwoCiAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwKLSAgICAgICAgICAg
ICAgICByZXN1bHQucmVncygpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLAorICAgICAg
ICAgICAgICAgIHJlc3VsdC5yZWdzKCksIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgc3R1
YkluZm9HUFIsCiAgICAgICAgICAgICAgICAgYmFzZSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
cHJvcGVydHkucGF5bG9hZEdQUigpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZSwKLSAgICAgICAgICAgIHJlc3VsdC5yZWdzKCksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgZ2VuLnN0dWJJbmZvKCksCisgICAgICAgICAgICByZXN1bHQucmVncygpLCBnbG9iYWxPYmpl
Y3RQdHIoY29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLAogICAgICAgICAgICAgYmFzZSwgQ0Nh
bGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHkucGF5bG9hZEdQUigpKSk7CiAgICAgfTsKIApA
QCAtMzkyNCw3ICszOTI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9yQwogICAgICAgICBub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkKICAgICAgICAgICAgID8g
KG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENl
bGxTdHJpbmdTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3QpCiAgICAg
ICAgICAgICA6IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5n
Tm9uU3RyaWN0KSwKLSAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIs
IGFyZzJHUFIsIGFyZzNSZWdzKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNSZWdzKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0zOTQ3LDcgKzM5NDcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JDCiAgICAgICAgIG5vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKQogICAgICAgICAgICAgPyAobm9kZS0+b3AoKSA9PSBQdXRC
eVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdCA6IG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0cmljdCkKICAgICAgICAgICAgIDogKG5vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xO
b25TdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3QpLAotICAgICAg
ICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM1JlZ3Mp
OworICAgICAgICBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMUdQ
UiwgYXJnMkdQUiwgYXJnM1JlZ3MpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAg
ICBub1Jlc3VsdChub2RlKTsKQEAgLTM5NjUsNyArMzk2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbFdpdGgKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFs
dWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlWYWxXaXRoVGhpcywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWdzLCB0aGlzVmFsdWVSZWdzLCBzdWJzY3JpcHRSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVncywgdGhpc1ZhbHVlUmVncywgc3Vic2NyaXB0
UmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CkBAIC0zOTkxLDcgKzM5OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgYXV0byBvcGVyYXRpb24gPSBub2RlLT5wcml2YXRlRmllbGRQdXRLaW5kKCkuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgQ0NhbGxI
ZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VS
ZWdzLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC00MDM1
LDExICs0MDM1LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEK
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
Z2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJh
dGlvbiwKLSAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIENDYWxsSGVscGVy
czo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQ
UiksIHZhbHVlUmVncywgc3R1YkluZm9HUFIsIG51bGxwdHIpOworICAgICAgICAgICAgTm9SZXN1
bHQsIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
YmFzZUdQUiksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHByb3BlcnR5R1BSKSwgdmFsdWVSZWdz
LCBzdHViSW5mb0dQUiwgbnVsbHB0cik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGgg
PSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwK
LSAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUiksIHZh
bHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIpOworICAgICAgICAgICAgTm9SZXN1bHQs
IGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFz
ZUdQUiksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBn
ZW4uc3R1YkluZm8oKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkUHV0QnlWYWwo
Z2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC00MTA5LDExICs0MTA5LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDaGVja1ByaXZhdGUKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgK
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIE5vUmVzdWx0LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwg
YmFzZVJlZ3MsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BSKSk7CisgICAgICAgICAg
ICBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiksIHN0dWJJbmZvR1BSLCBiYXNlUmVncywgQ0Nh
bGxIZWxwZXJzOjpDZWxsVmFsdWUoYnJhbmRHUFIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBz
bG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgTm9SZXN1bHQsCi0gICAgICAgICAgICBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ0NhbGxIZWxwZXJzOjpD
ZWxsVmFsdWUoYnJhbmRHUFIpKTsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdFB0cihjb2RlT3Jp
Z2luKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
cmFuZEdQUikpOwogICAgIH0KIAogICAgIG1faml0LmFkZFByaXZhdGVCcmFuZEFjY2VzcyhnZW4s
IHNsb3dQYXRoLmdldCgpKTsKQEAgLTQxNTcsMTEgKzQxNTcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVNldFByaXZhdGVCcgogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAogICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIE5v
UmVzdWx0LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgQ0NhbGxI
ZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5k
R1BSKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3RQdHIoY29kZU9yaWdpbiksIHN0dWJJbmZv
R1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxs
VmFsdWUoYnJhbmRHUFIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIE5vUmVzdWx0LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIENDYWxsSGVs
cGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BSKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3RQdHIo
Y29kZU9yaWdpbiksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYnJhbmRHUFIpKTsKICAgICB9CiAKICAgICBt
X2ppdC5hZGRQcml2YXRlQnJhbmRBY2Nlc3MoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC00MTk3
LDcgKzQxOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kCiAg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUGFyc2VJbnRHZW5lcmljLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgdmFsdWVSZWdzLCByYWRpeEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblBhcnNlSW50R2VuZXJpYywgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyksIHZhbHVlUmVncywgcmFkaXhHUFIpOwogICAgICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC00MjEwLDcgKzQyMTAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwog
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QYXJzZUludFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlR1BSLCByYWRpeEdQUik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUGFyc2VJbnRTdHJpbmcsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCB2YWx1ZUdQUiwgcmFkaXhHUFIpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC00MjIzLDcgKzQyMjMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwog
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QYXJzZUludE5vUmFkaXhHZW5lcmljLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QYXJzZUludE5vUmFkaXhHZW5lcmljLCByZXN1bHRSZWdzLCBnbG9i
YWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgdmFsdWVSZWdzKTsKICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzNiw3ICs0MjM2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBhcnNlSW50KE5vZAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAg
ICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QYXJzZUludFN0cmluZ05vUmFkaXgsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCB2YWx1ZUdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QYXJzZUlu
dFN0cmluZ05vUmFkaXgsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCB2YWx1ZUdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtNDI5NywxMCArNDI5NywxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKICAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElD
Q2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJ
bmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3R1YkluZm9HUFIsIHZh
bHVlUmVncywgcHJvdG90eXBlUmVncyk7CisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdl
bi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyksIHN0dWJJbmZvR1BSLCB2YWx1ZVJlZ3MsIHByb3RvdHlwZVJlZ3MpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3Ms
IHByb3RvdHlwZVJlZ3MpOworICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsIHByb3RvdHlwZVJlZ3MpOwog
ICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRJbnN0YW5jZU9mKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OwpAQCAtNDQxMCw3ICs0NDEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVl
Qml0Tm90KAogICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXROb3RIZWFwQmlnSW50LCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludCwgcmVzdWx0UmVncywgZ2xvYmFsT2Jq
ZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wZXJhbmRHUFIpOwogICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogCkBAIC00NDI1LDcgKzQ0MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VmFsdWVCaXROb3QoCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQml0Tm90LCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BlcmFuZFJlZ3MpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVCaXROb3QsIHJlc3VsdFJlZ3MsIGdsb2JhbE9i
amVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBvcGVyYW5kUmVncyk7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CkBAIC00NDY1LDcgKzQ0NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZE9y
QW55QmlnCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihzbmlwcGV0U2xvd1Bh
dGhGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTQ1MzAsNyAr
NDUzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkT3JBbnlCaWcKICAgICAg
ICAgbV9qaXQubW92ZVZhbHVlKHJpZ2h0Q2hpbGQtPmFzSlNWYWx1ZSgpLCByaWdodFJlZ3MpOwog
ICAgIH0KIAotICAgIGNhbGxPcGVyYXRpb24oc25pcHBldFNsb3dQYXRoRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBn
bG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cyk7CiAKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKQEAgLTQ1OTMsMTMgKzQ1OTMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQml0d2lzZQogCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBW
YWx1ZUJpdEFuZDoKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0QW5kSGVh
cEJpZ0ludCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIs
IHJpZ2h0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0QW5kSGVh
cEJpZ0ludCwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFZhbHVlQml0WG9yOgotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRYb3JI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRYb3JI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVmFsdWVCaXRPcjoKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0T3JI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRPckhl
YXBCaWdJbnQsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njgz
LDcgKzQ2ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZE9yQmlnSW50CiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihzbmlwcGV0U2xvd1BhdGhGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTQ3NDksNyArNDc0OSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkT3JCaWdJbnQKICAgICAgICAgbV9qaXQu
bW92ZVZhbHVlKHJpZ2h0Q2hpbGQtPmFzSlNWYWx1ZSgpLCByaWdodFJlZ3MpOwogICAgIH0KIAot
ICAgIGNhbGxPcGVyYXRpb24oc25pcHBldFNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAKICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
QEAgLTQ3NzgsNyArNDc3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUxT
aGlmdE8KICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0TFNoaWZ0SGVhcEJpZ0ludCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRMU2hpZnRIZWFwQmlnSW50LCByZXN1bHRSZWdz
LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdEdQUiwgcmlnaHRH
UFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC00ODA1LDcgKzQ4MDUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVCaXRSU2hpCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVz
dWx0KHRoaXMpOwogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRSU2hpZnRIZWFwQmlnSW50LCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdFJTaGlmdEhlYXBCaWdJbnQsIHJl
c3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBsZWZ0R1BS
LCByaWdodEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTQ4OTMsNyArNDg5Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICAgICAgSlNWYWx1ZVJl
Z3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgICAgICAvLyBGSVhNRTogY2FsbCBhIG1vcmUg
c3BlY2lhbGl6ZWQgZnVuY3Rpb24KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1
ZUFkZE5vdE51bWJlciwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkTm90TnVtYmVyLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNl
bWFudGljKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTQ5
MTQsNyArNDkxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFkZEhlYXBCaWdJ
bnQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdo
dEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRkSGVhcEJpZ0ludCwgcmVz
dWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGxlZnRHUFIs
IHJpZ2h0R1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAtNDkzMCw3ICs0OTMwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwogICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGxlZnRSZWdzLCByaWdodFJl
Z3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAtNDk5Myw3ICs0OTkzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVTdWIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25WYWx1ZVN1YiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CkBAIC01MDE0LDcgKzUwMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVTdWIoTm9kCiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN1YkhlYXBCaWdJbnQsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3ViSGVhcEJpZ0ludCwgcmVzdWx0UmVncywgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKIAog
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOwpAQCAtNTEyMSw5ICs1MTIxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
YWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
ICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihy
ZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
KyAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihyZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CisgICAgICAgICAgICAgICAgYWRkSUNH
ZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSwgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MpOwogCiAgICAgICAgICAgICBzaWxl
bnRGaWxsKHNhdmVQbGFucyk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpA
QCAtNTE1Miw3ICs1MTUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhO
b2RlKgogICAgICAgICB9CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAKQEAgLTUxODUsNyArNTE4NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mQ3UKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuanVtcCgpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MsIGNvbnN0
cnVjdG9yR1BSLCBoYXNJbnN0YW5jZVJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIHJl
c3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlUmVn
cywgY29uc3RydWN0b3JHUFIsIGhhc0luc3RhbmNlUmVncykpOwogCiAgICAgdW5ibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtNTI4NCw3ICs1Mjg0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvT2JqZWN0T3JDYQogICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogZXJyb3JNZXNzYWdlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSAhPSBVSU5UMzJfTUFYKQogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
aWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpOwotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25Ub09i
amVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWdzLCBl
cnJvck1lc3NhZ2UpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uVG9PYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2Jq
ZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlUmVncywgZXJyb3JNZXNzYWdlKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkNhbGxPYmplY3RDb25zdHJ1Y3RvciwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpLCB2YWx1ZVJlZ3MpKTsKIApAQCAt
NTQzMCw3ICs1NDMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoQWJzKE5v
ZAogICAgICAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3AxLmpzVmFsdWVSZWdzKCk7CiAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJpdGhBYnMsIHJlc3VsdC5mcHIoKSwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkFyaXRoQWJzLCByZXN1bHQuZnByKCksIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBvcDFSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNTQ1NCw3ICs1NDU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoQ2x6MzIoTgogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJl
c3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQXJpdGhDbHozMiwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgb3AxUmVncyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aENs
ejMyLCByZXN1bHRSZWcsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBv
cDFSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIHN0cmljdEludDMyUmVz
dWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CkBAIC01NDc4LDcgKzU0NzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhEb3VibGVVCiAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9
IG9wMS5qc1ZhbHVlUmVncygpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgRlBSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LmZwcigp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxUmVncyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyksIG9wMVJlZ3MpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CkBAIC01NTk1LDcgKzU1OTUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5jT3JEZWMoTm9kCiAgICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgYXV0byBvcGVyYXRpb24gPSBub2RlLT5vcCgpID09IElu
YyA/IG9wZXJhdGlvbkluYyA6IG9wZXJhdGlvbkRlYzsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb3AxUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtNTczNCw5
ICs1NzM0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAg
ICAgICAgICAgc2lsZW50U3BpbGwoc2F2ZVBsYW5zKTsKIAogICAgICAgICAgICAgaWYgKGljR2Vu
ZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICAgICAgaWNH
ZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ocmVwYXRjaGluZ0Z1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgY2hpbGRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKHJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVz
dWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkUmVncyk7CiAKICAg
ICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CkBAIC01NzU3LDcgKzU3NTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWF0aElDKE5vZGUqCiAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgY2hpbGRSZWdzKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBjaGlsZFJlZ3MpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0KIApAQCAtNTgyMiw3ICs1ODIyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgICAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25NdWxIZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk11bEhlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTU4
NDAsNyArNTg0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlTXVsLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVNdWwsIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAtNjAyMiw3ICs2MDIyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlRGl2KE5vZAogICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EaXZI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRpdkhlYXBCaWdJ
bnQsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBs
ZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTYwNDAsNyArNjA0MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZURpdihOb2QKICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlRGl2LCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVEaXYsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZ3MsIG5vZGUpOwpAQCAtNjEyNCw3ICs2MTI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlRGl2KE5vZAogICAgICAgICBtX2ppdC5tb3ZlVmFsdWUocmlnaHRDaGlsZC0+
YXNKU1ZhbHVlKCksIHJpZ2h0UmVncyk7CiAgICAgfQogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25WYWx1ZURpdiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVEaXYs
IHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBsZWZ0
UmVncywgcmlnaHRSZWdzKTsKIAogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtNjI4OCw3ICs2Mjg4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoRlJvdW5kKAogICAgIEpTVmFsdWVSZWdzIG9wMVJlZ3MgPSBv
cDEuanNWYWx1ZVJlZ3MoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEZQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aEZSb3VuZCwgcmVz
dWx0LmZwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxUmVncyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aEZSb3VuZCwgcmVzdWx0LmZwcigpLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb3AxUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKIH0KQEAg
LTYzMTMsNyArNjMxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU1vZChO
b2QKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTW9kSGVhcEJpZ0ludCwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Nb2RIZWFwQmlnSW50LCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQ
dHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogCiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CkBAIC02MzMwLDcgKzYzMzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVNb2QoTm9kCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0Zs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlTW9kLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxUmVncywgb3AyUmVncyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZU1vZCwgcmVzdWx0UmVncywgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wMVJlZ3MsIG9wMlJlZ3MpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKIH0KQEAgLTY3MjcsNyArNjcyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aFJvdW5kaW4KICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJpdGhUcnVuYyk7
CiAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFyaXRoVHJ1bmM7CiAgICAgfQotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYXJndW1lbnRSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZ3VtZW50UmVn
cyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZ3MsIG5vZGUpOwogfQpAQCAtNjc2MCw3ICs2NzYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoU3FydChObwogICAgIEpTVmFsdWVSZWdzIG9wMVJlZ3MgPSBvcDEuanNW
YWx1ZVJlZ3MoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEZQUlJlc3VsdCByZXN1bHQo
dGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aFNxcnQsIHJlc3VsdC5mcHIo
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQXJpdGhTcXJ0LCByZXN1bHQuZnByKCksIGdsb2JhbE9iamVjdFB0cihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLCBvcDFSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQpAQCAtNjg4OCw3ICs2
ODg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlUG93KE5vZAogICAgICAg
ICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Qb3dIZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblBvd0hlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
QEAgLTY5MDcsNyArNjkwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVBv
dyhOb2QKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVQb3csIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlUG93LCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQ
dHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CkBAIC03NjQ0LDcgKzc2NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3Ry
aW5nRXF1YWxpCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIGxlZnRUZW1wR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIGxlZnRUZW1wR1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdEdQUiwgcmlnaHRHUFIpKTsKICAgICAKICAgICBi
bGVzc2VkQm9vbGVhblJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSk7CiB9CkBAIC03Nzk0LDcgKzc3
OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nQ29tcGFyCiAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihjb21wYXJlRnVuY3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKGNv
bXBhcmVGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNl
bWFudGljKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC03ODk1
LDcgKzc4OTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2FtZVZhbHVlKE5vCiAK
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNhbWVWYWx1
ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMVJlZ3MsIGFyZzJS
ZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNhbWVWYWx1ZSwgcmVzdWx0R1BSLCBn
bG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMVJlZ3MsIGFyZzJSZWdz
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC04
MDM0LDcgKzgwMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFBy
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RvcmFnZVJl
ZyksCi0gICAgICAgICAgICAgICAgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZVJvcGUsIHN0b3JhZ2VS
ZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnKSk7CisgICAgICAgICAgICAg
ICAgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZVJvcGUsIHN0b3JhZ2VSZWcsIGdsb2JhbE9iamVjdFB0
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVnKSk7CiAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRh
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CkBAIC04MTQ1LDcgKzgxNDUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpCiAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgIGlzT3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAot
ICAgICAgICAgICAgICAgIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgICAgIGV4
dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgIH0KICAgICAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAtODUxMCw3ICs4NTEwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTgogICAgIEpTVmFsdWVSZWdzIG5hbWVWYWx1
ZVJlZ3MgPSBuYW1lVmFsdWUuanNWYWx1ZVJlZ3MoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBmdW5jR1BSLCBuYW1lVmFsdWVSZWdzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksIGZ1bmNHUFIsIG5hbWVWYWx1ZVJlZ3MpOwogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTg1MjcsNyArODUyNyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3QKICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1l
bnRzUmVncywgZGF0YS0+b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAg
ICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CkBAIC04NTY0LDcgKzg1NjQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoCiAKICAgICBtX2ppdC5zdG9y
ZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihk
YXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZh
cmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zm
c2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBk
YXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTg2NDEs
OCArODY0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXIKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7
CiAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUq
PigpOwotICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcigKLSAgICAgICAg
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICBSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1
cmUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBzY29wZUdQUiA9IHNj
b3BlLmdwcigpOwpAQCAtOTA3MCw3ICs5MDY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVJlc3QoTgogCiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DcmVhdGVSZXN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmd1bWVudHNTdGFydEdQUiwgSW1tMzIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSksIGFycmF5TGVuZ3RoR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0
ZVJlc3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
IGFyZ3VtZW50c1N0YXJ0R1BSLCBJbW0zMihub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgp
KSwgYXJyYXlMZW5ndGhHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC05MTY0LDcgKzkxNjMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvblNwcmVhZEZh
c3RBcnJheSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnQp
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25TcHJlYWRGYXN0QXJyYXksIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRy
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZ3VtZW50KSk7CiAKICAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKQEAgLTkxNzQsNyAr
OTE3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKIAogICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBh
cmd1bWVudCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3ByZWFkRmFzdEFycmF5
LCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcmd1
bWVudCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQpAQCAtOTE4Myw3
ICs5MTgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogCiAg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TcHJlYWRHZW5lcmljLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBh
cmd1bWVudCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3ByZWFkR2VuZXJpYywg
cmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1l
bnQpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgfQpAQCAtOTIxNCw3ICs5MjEzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZlIHBvaW50
ZXJzIHRvCiAgICAgICAgIC8vIHRoZSBKU0FycmF5IGFuZCB0aGUgQnV0dGVyZmx5LCByZXNwZWN0
aXZlbHkuCiAKLSAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOworICAgICAgICBBU1NFUlQoIWhhc1Vu
ZGVjaWRlZChzdHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigp
KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRl
eCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7CiAgICAgICAgICAgICBF
ZGdlIHVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgb3BlcmFuZEluZGV4KTsK
QEAgLTk4NzgsNyArOTg3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheUlu
ZGV4T2YKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5nLCBsZW5ndGhHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBzdG9yYWdlR1BSLCBzZWFyY2hFbGVtZW50R1BSLCBpbmRleEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5nLCBsZW5ndGhH
UFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBzdG9yYWdlR1BSLCBz
ZWFyY2hFbGVtZW50R1BSLCBpbmRleEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAKICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQobGVuZ3RoR1BSLCBub2RlKTsKQEAgLTk4
OTMsMTEgKzk4OTIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5SW5kZXhP
ZgogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlLCBsZW5ndGhH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdG9yYWdlR1BSLCBzZWFyY2hFbGVtZW50
UmVncywgaW5kZXhHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BcnJh
eUluZGV4T2ZWYWx1ZURvdWJsZSwgbGVuZ3RoR1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgc3RvcmFnZUdQUiwgc2VhcmNoRWxlbWVudFJlZ3MsIGluZGV4R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGlndW91cywgbGVuZ3RoR1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgc3RvcmFnZUdQUiwgc2VhcmNoRWxlbWVudFJlZ3MsIGluZGV4
R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlJbmRleE9mVmFs
dWVJbnQzMk9yQ29udGlndW91cywgbGVuZ3RoR1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgc3RvcmFnZUdQUiwgc2VhcmNoRWxlbWVudFJlZ3MsIGluZGV4R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTk5NjYsNyArOTk2NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm8KICAgICAgICAgICAgIG1faml0LmJveEludDMy
KHN0b3JhZ2VMZW5ndGhHUFIsIHJlc3VsdFJlZ3MpOwogCiAgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkFycmF5UHVzaCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHZhbHVlUmVncywgYmFzZUdQUikpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgdmFsdWVSZWdzLCBiYXNlR1BSKSk7CiAKICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xMDAxMiw3ICsxMDAxMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcnJheVB1c2goTm8KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYXN0UGF0aCA9
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1ZmZlckdQUiwgVHJ1
c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSkpKTsKIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGJ1ZmZlckdQUiwgVHJ1
c3RlZEltbTMyKGVsZW1lbnRDb3VudCkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlw
bGUsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBi
YXNlR1BSLCBidWZmZXJHUFIsIFRydXN0ZWRJbW0zMihlbGVtZW50Q291bnQpKSk7CiAKICAgICAg
ICAgYmFzZS51c2UoKTsKICAgICAgICAgc3RvcmFnZS51c2UoKTsKQEAgLTEwMDM3LDcgKzEwMDM2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChObwogICAgICAgICAg
ICAgbV9qaXQuYm94SW50MzIoc3RvcmFnZUxlbmd0aEdQUiwgcmVzdWx0UmVncyk7CiAKICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVGUFIsIGJhc2VHUFIpKTsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaERv
dWJsZSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
IHZhbHVlRlBSLCBiYXNlR1BSKSk7CiAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDA4MSw3ICsxMDA4MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm8KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYXN0UGF0aCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGJ1ZmZlckdQUiwgVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpKTsKIAotICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRp
b25BcnJheVB1c2hEb3VibGVNdWx0aXBsZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGJhc2VHUFIsIGJ1ZmZlckdQUiwgVHJ1c3RlZEltbTMyKGVsZW1lbnRDb3VudCkp
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAo
KSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlTXVsdGlwbGUsIHJlc3VsdFJlZ3MsIGds
b2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSLCBidWZmZXJHUFIs
IFRydXN0ZWRJbW0zMihlbGVtZW50Q291bnQpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAg
ICAgICAgc3RvcmFnZS51c2UoKTsKQEAgLTEwMTE0LDcgKzEwMTEzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChObwogICAgICAgICAgICAgbV9qaXQuYm94SW50MzIo
c3RvcmFnZUxlbmd0aEdQUiwgcmVzdWx0UmVncyk7CiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQXJyYXlQdXNoLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgdmFsdWVSZWdzLCBiYXNlR1BSKSk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCB2YWx1ZVJlZ3MsIGJhc2VHUFIpKTsKIAogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTEwMTU4LDcgKzEwMTU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFycmF5UHVzaChObwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYXN0UGF0aCA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1ZmZlckdQUiwgVHJ1c3Rl
ZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkpKTsKIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaE11bHRp
cGxlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgYnVm
ZmVyR1BSLCBUcnVzdGVkSW1tMzIoZWxlbWVudENvdW50KSkpOworICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUsIHJl
c3VsdFJlZ3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BS
LCBidWZmZXJHUFIsIFRydXN0ZWRJbW0zMihlbGVtZW50Q291bnQpKSk7CiAKICAgICAgICAgYmFz
ZS51c2UoKTsKICAgICAgICAgc3RvcmFnZS51c2UoKTsKQEAgLTEwMjk5LDcgKzEwMjk4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzQ29uc3RydWN0bwogICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Jc0NvbnN0cnVjdG9yLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dFJlZ3MpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSXNDb25zdHJ1Y3RvciwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgaW5wdXRSZWdzKTsKICAgICB1bmJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTEwNDQyLDE0ICsxMDQ0MSwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewotICAg
IEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVCghbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoaW5p
dGlhbE91dE9mTGluZUNhcGFjaXR5ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2
bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgaWYgKCFh
bGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhp
bmdIZWFkZXIoKSkgeworICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+
cHJldmlvdXMuY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTEwNDg3LDEzICsxMDQ4NiwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBvbGRTaXplID0gbm9k
ZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpOwogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZh
Y3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworICAgIEFTU0VSVChuZXdTaXpl
ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpKTsKICAgICAKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIGlmICghYWxsb2NhdG9y
IHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVy
KCkpIHsKKyAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
LmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0xMDY0OSwxMyArMTA2NDgsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZQogICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50ICsgMTsKICAgICBzd2l0
Y2ggKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBj
YWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9u
LmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRSZWdzKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIHJlZ3NbMF0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRS
ZWdzKSwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHJlZ3NbMF0pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJl
c3VsdChyZXN1bHRSZWdzKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJl
Z3NbMV0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR1BQPihmdW5jdGlvbi5nZXQoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIGds
b2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCByZWdzWzBdLCByZWdzWzFdKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0
UmVzdWx0KHJlc3VsdFJlZ3MpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwg
cmVnc1sxXSwgcmVnc1syXSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HUFBQPihmdW5jdGlvbi5nZXQoKSksIGV4dHJhY3RSZXN1bHQocmVz
dWx0UmVncyksIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCByZWdzWzBd
LCByZWdzWzFdLCByZWdzWzJdKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwNjc5LDkgKzEwNjc4LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZQogCiAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSklQPihUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIGlkZW50
aWZpZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlciksIGdl
dHRlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPEpfSklUT3BlcmF0aW9uX0dKSVA+KGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChu
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSwgZ2V0dGVyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSkk+KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBD
Q2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxs
RE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSkk+KGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRp
ZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSk7CiAK
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bSgp
LnRvcENhbGxGcmFtZSk7CiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJy
ZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTEwODIyLDEwICsxMDgyMSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9TdHJpbmdPckNhCiAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CiAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVG9TdHJpbmcpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvU3RyaW5nLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVG9TdHJpbmcsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyksIG9wMVJlZ3MpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IENhbGxTdHJpbmdDb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvciwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvciwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQ
dHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb3AxUmVncyk7CiAgICAgICAgIH0KICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwpAQCAtMTA4NTIsMTIgKzEwODUxLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb1N0cmluZ09yQ2EKICAgICAgICAgICAgIHNsb3dQYXRoMi5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVG9TdHJpbmcpCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvU3RyaW5nLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVG9TdHJpbmcsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyksIG9wMVJlZ3MpOwogICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IFN0cmluZ1Zh
bHVlT2YpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ1ZhbHVlT2Ys
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdWYWx1ZU9mLCByZXN1bHRHUFIsIGds
b2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBvcDFSZWdzKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsU3RyaW5nQ29uc3Ry
dWN0b3IpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsU3RyaW5nQ29u
c3RydWN0b3IsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3Mp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0
b3IsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9w
MVJlZ3MpOwogICAgICAgICB9CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAg
ICAgIGlmIChkb25lLmlzU2V0KCkpCkBAIC0xMDkyOCwxMCArMTA5MjcsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT3JDYQogICAgICAgICAgICAgbmVlZENhbGwubGlu
aygmbV9qaXQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRvU3RyaW5n
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxR1BSKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwsIHJlc3VsdEdQUiwgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wMUdQUik7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFN0cmluZ0NvbnN0cnVjdG9y
KTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVj
dG9yT25DZWxsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcDFHUFIp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0
b3JPbkNlbGwsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyksIG9wMUdQUik7CiAgICAgICAgIH0KICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
ICAgICAgICAgaWYgKGRvbmUuaXNTZXQoKSkKQEAgLTEwOTgxLDcgKzEwOTgwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZ1bmN0aW9uVG9TdAogICAgIGNvbnRpbnVhdGlvbi5saW5r
KCZtX2ppdCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkZ1bmN0aW9uVG9TdHJp
bmcsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGZ1bmN0aW9uLmdw
cigpKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uRnVuY3Rpb25Ub1N0cmluZywgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgZnVuY3Rpb24uZ3ByKCkpKTsKIAogICAgIGNl
bGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KQEAgLTEwOTk1LDcgKzEwOTk0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU51bWJlclRvU3RyaQogewogICAgIGF1dG8gY2Fs
bFRvU3RyaW5nID0gWyZdIChhdXRvIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgYXV0byB2
YWx1ZVJlZykgewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFs
dWVSZWcsIFRydXN0ZWRJbW0zMihyYWRpeCkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwg
dmFsdWVSZWcsIFRydXN0ZWRJbW0zMihyYWRpeCkpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgfTsKQEAg
LTExMDQwLDcgKzExMDM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU51bWJlclRv
U3RyaQogCiAgICAgYXV0byBjYWxsVG9TdHJpbmcgPSBbJl0gKGF1dG8gb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0R1BSLCBhdXRvIHZhbHVlUmVnLCBHUFJSZWcgcmFkaXhHUFIpIHsKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVnLCByYWRpeEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCB2YWx1ZVJlZywgcmFkaXhHUFIpOwogICAgICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiAgICAgfTsKQEAgLTExMTM4LDcgKzExMTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld1N5bWJvbChObwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdTeW1ib2xXaXRoRGVzY3JpcHRp
b24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdTeW1ib2xXaXRoRGVzY3JpcHRpb24sIHJlc3Vs
dEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0cmluZ0dQUik7
CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiB9CkBAIC0xMTE0OCw3ICsxMTE0Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdUeXBlZEFycmEKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBh
dXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KHR5cGVkQXJyYXlU
eXBlKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdldCgpKTsKIAogI2lmIFVTRShM
QVJHRV9UWVBFRF9BUlJBWVMpCiAgICAgLy8gVGhlIG9wZXJhdGlvbnMgd2UgY2FsbCBvbiB0aGUg
c2xvdyBwYXRoIGV4cGVjdCBhIGludHB0cl90LCBzbyBpbnQ2NF90IG9uIDY0IGJpdCBwbGF0Zm9y
bXMKQEAgLTExMjYxLDcgKzExMjU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE5ld1R5
cGVkQXJyYXlXaQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgK
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVG
b3JUeXBlKHR5cGVkQXJyYXlUeXBlKSwKLSAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgc3RydWN0dXJlLCBzaXplR1BSLCBzdG9yYWdlR1BSKSk7CisgICAgICAg
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0cnVj
dHVyZSwgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQpAQCAtMTEyOTIsNyArMTEyOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTmV3UmVnZXhwKE5vCiAgICAgbV9qaXQuc3RvcmVWYWx1ZShsYXN0SW5kZXhSZWdzLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNldE9mTGFz
dEluZGV4KCkpKTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKLSAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1Jl
Z2V4cFdpdGhMYXN0SW5kZXgsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IHJlZ2V4cCwgbGFzdEluZGV4UmVncykpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwg
cmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgcmVnZXhw
LCBsYXN0SW5kZXhSZWdzKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CkBAIC0xMjIxOCw3ICsxMjIxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hD
aGFyU3RyaW4KIHsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CiAgICAgYXV0byBpc1Jv
cGUgPSBtX2ppdC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKHNjcmF0Y2gpOwotICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChpc1JvcGUsIHRoaXMsIG9wZXJhdGlvblJlc29sdmVS
b3BlLCBzY3JhdGNoLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWUpKTsKKyAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNSb3BlLCB0aGlzLCBvcGVyYXRpb25S
ZXNvbHZlUm9wZSwgc2NyYXRjaCwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyksIHZhbHVlKSk7CiAgICAgCiAgICAgYWRkQnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gz
MigKQEAgLTEyNDYwLDcgKzEyNDU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRj
aFN0cmluZ09uUwogCiAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3aXRjaCB8fCB0b3RhbExlbmd0aCA+
IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCgpKSB7CiAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoU3RyaW5nLCBzdHJpbmcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCAmdW5saW5rZWRUYWJsZSwgc3RyaW5n
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywg
Z2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0YXRpY19jYXN0PHNpemVf
dD4oZGF0YS0+c3dpdGNoVGFibGVJbmRleCksICZ1bmxpbmtlZFRhYmxlLCBzdHJpbmcpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBtX2ppdC5mYXJKdW1wKHN0cmlu
ZywgSlNTd2l0Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47CkBAIC0xMjQ5Nyw3ICsxMjQ5NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICAKICAgICBz
bG93Q2FzZXMubGluaygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0cmlu
Zyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNo
VGFibGVJbmRleCksICZ1bmxpbmtlZFRhYmxlLCBzdHJpbmcpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmln
aW4uc2VtYW50aWMpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgp
LCAmdW5saW5rZWRUYWJsZSwgc3RyaW5nKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7
CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBtX2ppdC5mYXJKdW1wKHN0cmluZywg
SlNTd2l0Y2hQdHJUYWcpOwpAQCAtMTI2NDQsNyArMTI2NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QWNjZXNzb3JCCiAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNz
b3IuZ3ByKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24obm9k
ZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeUlkID8gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZCA6IG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBp
ZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0
cmlidXRlcygpLCBhY2Nlc3NvckdQUik7CisgICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09
IFB1dEdldHRlckJ5SWQgPyBvcGVyYXRpb25QdXRHZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VHUFIs
IGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JB
dHRyaWJ1dGVzKCksIGFjY2Vzc29yR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0xMjY2Miw3ICsxMjY2MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRHZXR0ZXJTZXQKICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0
dGVyLmdwcigpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VH
UFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNz
b3JBdHRyaWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigp
KSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKICNl
bHNlCiAgICAgLy8gVGhlc2UgSlNWYWx1ZXMgbWF5IGJlIEpTVW5kZWZpbmVkIE9SIEpTRnVuY3Rp
b24qLgogICAgIC8vIEF0IHRoYXQgdGltZSwKQEAgLTEyNjc0LDcgKzEyNjcyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEdldHRlclNldAogICAgIEpTVmFsdWVSZWdzIHNldHRl
clJlZ3MgPSBzZXR0ZXIuanNWYWx1ZVJlZ3MoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBnZXR0ZXJSZWdzLnBheWxvYWRHUFIo
KSwgc2V0dGVyUmVncy5wYXlsb2FkR1BSKCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwg
YmFzZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2RlLT5h
Y2Nlc3NvckF0dHJpYnV0ZXMoKSwgZ2V0dGVyUmVncy5wYXlsb2FkR1BSKCksIHNldHRlclJlZ3Mu
cGF5bG9hZEdQUigpKTsKICNlbmRpZgogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAg
LTEyNjg4LDcgKzEyNjg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlc29sdmVT
Y29wZQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlU2NvcGUsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIHNjb3BlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlLCByZXN1
bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBzY29wZUdQUiwg
aWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEy
NzAwLDcgKzEyNjk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlc29sdmVTY29w
ZQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc2Nv
cGVHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFs
LCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgc2Nv
cGVHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OwogfQpAQCAtMTI3MjgsNyArMTI3MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0RHluYW1pY1ZhCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldER5bmFtaWNWYXIs
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQUiwgaWRlbnRp
ZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2RlLT5nZXRQdXRJbmZvKCkpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0RHluYW1pY1ZhciwgcmVzdWx0UmVncywgZ2xv
YmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHNjb3BlR1BSLCBpZGVudGlmaWVy
VUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmdldFB1dEluZm8oKSk7CiAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogfQpAQCAtMTI3NDIsNyArMTI3NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0RHluYW1pY1ZhCiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1
ZVJlZ3MoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihub2Rl
LT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXREeW5hbWljVmFyU3RyaWN0IDog
b3BlcmF0aW9uUHV0RHluYW1pY1Zhck5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHNjb3BlR1BSLCB2YWx1ZVJlZ3MsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSwgbm9kZS0+Z2V0UHV0SW5mbygpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVj
bWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3QgOiBvcGVy
YXRpb25QdXREeW5hbWljVmFyTm9uU3RyaWN0LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwgc2NvcGVHUFIsIHZhbHVlUmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpLCBub2RlLT5nZXRQdXRJbmZvKCkpOwogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC0xMjgwOCw3ICsxMjgwNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckIKICAgICBHUFJSZWcgYWNj
ZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
R1BSLCBzdWJzY3JpcHRSZWdzLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgYWNjZXNzb3JH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUiwgc3Vic2NyaXB0UmVncywgbm9kZS0+YWNjZXNzb3JB
dHRyaWJ1dGVzKCksIGFjY2Vzc29yR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0xMjk4NSw3ICsxMjk4Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBsYWMKIAogICAgICAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CiAgICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nUHJvdG9G
dW5jUmVwbGFjZVJlZ0V4cEVtcHR5U3RyLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBzdHJpbmdHUFIsIHJlZ0V4cEdQUik7CisgICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIsIHJl
c3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0cmlu
Z0dQUiwgcmVnRXhwR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlKQpAQCAtMTMwMDYsNyArMTMwMDQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlU3RyaW5nUmVwbGFjCiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBTdHJpbmcs
IHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQUiwgcmVn
RXhwR1BSLCByZXBsYWNlR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJp
bmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nLCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVj
dFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBzdHJpbmdHUFIsIHJlZ0V4cEdQUiwgcmVwbGFj
ZUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgaWYgKHNhbXBsZSkKQEAgLTEzMDI4LDcg
KzEzMDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1JlcGxhYwogCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlR2Vu
ZXJpYywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RyaW5nUmVn
cywgc2VhcmNoUmVncywgcmVwbGFjZVJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3RyaW5nUHJvdG9GdW5jUmVwbGFjZUdlbmVyaWMsIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0
UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0cmluZ1JlZ3MsIHNlYXJjaFJlZ3MsIHJlcGxh
Y2VSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGNlbGxSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICBpZiAoc2FtcGxlKQpAQCAtMTMxMTIsNyArMTMxMTAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOCiAKICAgICBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpOwogICAgICAgICAKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0
dXJlLmluZGV4aW5nVHlwZSgpOwogICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRl
eGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUpOwogICAgIGludDMyX3QgcHVibGljTGVuZ3RoID0g
MDsKICAgICBpbnQzMl90IHZlY3Rvckxlbmd0aCA9IDA7CkBAIC0xMzE1OSw4ICsxMzE1Nyw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU4KICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6IHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAg
ICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtk
ZXNjcmlwdG9yLmluZm8oKV07Ci0gICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50
cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICAg
ICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLmdldFByb3BlcnRpZXND
b25jdXJyZW50bHkoKSkgewogICAgICAgICAgICAgICAgIGlmICh1aWQgIT0gZW50cnkua2V5KQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTMyNTMsNyArMTMyNTIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5lRGF0YVByCiAgICAgICAgIHVzZUNoaWxk
cmVuKG5vZGUpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUmVncywgYXR0cmlidXRlc0dQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3Ry
aW5nLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHZhbHVlUmVncywgYXR0cmlidXRlc0dQUik7CiAgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMjcwLDcgKzEzMjY5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlZmluZURhdGFQcgogICAgICAgICB1c2VD
aGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZ0lkZW50LCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaWRlbnRHUFIsIHZhbHVlUmVncywgYXR0cmli
dXRlc0dQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3Bl
cnR5U3RyaW5nSWRlbnQsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBi
YXNlR1BSLCBpZGVudEdQUiwgdmFsdWVSZWdzLCBhdHRyaWJ1dGVzR1BSKTsKICAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTMyODIsNyAr
MTMyODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5lRGF0YVByCiAgICAg
ICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3ltYm9sLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUmVncywg
YXR0cmlidXRlc0dQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0
YVByb3BlcnR5U3ltYm9sLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwg
YmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUmVncywgYXR0cmlidXRlc0dQUik7CiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMjkz
LDcgKzEzMjkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlZmluZURhdGFQcgog
ICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBh
dHRyaWJ1dGVzR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVEYXRh
UHJvcGVydHksIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BS
LCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgYXR0cmlidXRlc0dQUik7CiAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMzM0LDcgKzEz
MzMzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlZmluZUFjY2VzcwogICAgICAg
ICB1c2VDaGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmcsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgZ2V0dGVyR1BS
LCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmcsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgZ2V0dGVyR1BSLCBzZXR0ZXJH
UFIsIGF0dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMzM1MSw3ICsxMzM1MCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3MKICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nSWRlbnQsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlR1BSLCBpZGVudEdQUiwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0
ZXNHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJv
cGVydHlTdHJpbmdJZGVudCwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
IGJhc2VHUFIsIGlkZW50R1BSLCBnZXR0ZXJHUFIsIHNldHRlckdQUiwgYXR0cmlidXRlc0dQUik7
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTEzMzYzLDcgKzEzMzYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlZmlu
ZUFjY2VzcwogICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJv
cGVydHlTeW1ib2wsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTeW1ib2wsIGdsb2JhbE9i
amVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgZ2V0
dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMzM3NCw3ICsxMzM3Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3MKICAgICAgICAgdXNlQ2hp
bGRyZW4obm9kZSk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5LCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCBnZXR0ZXJHUFIsIHNldHRlckdQUiwg
YXR0cmlidXRlc0dQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lQWNj
ZXNzb3JQcm9wZXJ0eSwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJh
c2VHUFIsIHByb3BlcnR5UmVncywgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIp
OwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xMzU2OCw3ICsxMzU2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJv
dyhOb2RlKiAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dERkcsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGhyb3dERkcsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LCB2YWx1ZVJlZ3MpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgbV9qaXQuYnJl
YWtwb2ludCgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMTM1ODAsNyArMTM1NzksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVGhyb3dTdGF0aWNFCiAgICAgR1BSUmVnIG1lc3Nh
Z2VHUFIgPSBtZXNzYWdlLmdwcigpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEo
KSwgbWVzc2FnZUdQUik7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRocm93U3RhdGljRXJyb3IsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBt
ZXNzYWdlR1BSLCBub2RlLT5lcnJvclR5cGUoKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd1N0YXRpY0Vycm9yLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSwgbWVzc2FnZUdQUiwgbm9kZS0+ZXJyb3JUeXBlKCkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAt
MTM2NzAsNyArMTM2NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRv
ck5lCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJl
Z3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBn
bG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZVJlZ3MsIGluZGV4R1BS
LCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CkBAIC0xMzc0OCw3ICsxMzc0
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmUKICAgICAgICAg
b3BlcmF0aW9uQ2FsbC5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJl
c3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGluZGV4LCBt
b2RlLCBlbnVtZXJhdG9yKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgZG9u
ZUNhc2VzLmxpbmsoJm1faml0KTsKQEAgLTEzNzkyLDkgKzEzNzkxLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYQogICAgICAgICBvcGVyYXRpb25DYXNlcy5saW5r
KCZtX2ppdCk7CiAKICAgICAgICAgaWYgKGJhc2VSZWdzLnRhZ0dQUigpID09IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
YXNlUmVncy5wYXlsb2FkR1BSKCkpLCBwcm9wZXJ0eU5hbWVSZWdzLCBpbmRleEdQUiwgbW9kZUdQ
Uik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBwcm9wZXJ0eU5hbWVSZWdzLCBpbmRl
eEdQUiwgbW9kZUdQUik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
c2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVSZWdzLCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9i
amVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlUmVncywgcHJvcGVydHlOYW1lUmVn
cywgaW5kZXhHUFIsIG1vZGVHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtMTM4OTYsNyArMTM4OTUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZFdpdGhUCiAKICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlJZFdpdGhUaGlzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlJZFdpdGhUaGlzLAot
ICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHRoaXNSZWdzLCB2
YWx1ZVJlZ3MsIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCkpOworICAgICAg
ICBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZVJlZ3MsIHRoaXNS
ZWdzLCB2YWx1ZVJlZ3MsIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCkpOwog
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTEz
OTM2LDExICsxMzkzNSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlPZmZz
ZXQoCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShOb2RlKiBu
b2RlKQogeworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBib29sIGIgPSB0cnVlOworICAg
IGlmIChiKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgLy8g
T09QUzogaW1wbGVtZW50IHRoaXMKKyAgICAvKgogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7Ci0gICAgCiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgIAogICAg
IGF1dG8mIHZhcmlhbnRzID0gbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHM7CkBA
IC0xMzk1OSw2ICsxMzk2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0
cnVjdHUKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKICAgICBibGVzc2VkQm9vbGVhblJl
c3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAqLwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCkBAIC0xNDAwMCwxNCArMTQw
MDYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RQogICAgICAg
ICBpZiAoYmFzZVZhbHVlLmlzVHlwZShTcGVjT2JqZWN0KSAmJiBiYXNlVmFsdWUubV9zdHJ1Y3R1
cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZyA9IGZhbHNlOwog
ICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpID4gQXJyYXlXaXRoVW5kZWNpZGVkKQorICAgICAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUuaW5kZXhpbmdUeXBlKCkgPiBBcnJheVdpdGhVbmRlY2lkZWQpCiAgICAgICAgICAg
ICAgICAgICAgIGhhc0luZGV4aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgaWYgKCFoYXNJbmRleGluZykKICAgICAgICAgICAgICAgICBza2lwSW5kZXhpbmdNYXNrQ2hl
Y2sgPSB0cnVlOwogICAgICAgICAgICAgb25seVN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5tX3N0cnVj
dHVyZS5vbmx5U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAob25seVN0cnVjdHVyZSkKLSAg
ICAgICAgICAgICAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7Cisg
ICAgICAgICAgICAvLyBPT1BTOgorICAgICAgICAgICAgLy9pZiAob25seVN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIC8vICAgIHJhcmVEYXRhID0gb25seVN0cnVjdHVyZS0+dHJ5UmFyZURhdGEoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICghc2tpcEluZGV4aW5nTWFza0NoZWNrKSB7CkBAIC0x
NDAzNyw3ICsxNDA0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm9wZXJ0
eUUKIAogICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwogICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHNjcmF0Y2gxR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBzY3Jh
dGNoMUdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGJhc2VSZWdz
LnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtMTQwNTIsNyArMTQwNTksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFBy
b3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJh
dG9yLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBi
YXNlUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0xNDE0MSw5ICsxNDE0OCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJDYXQoTm9kZSoKIAogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBpZiAobm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3RyQ2F0MywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgb3AxUmVncywgb3AyUmVncywgb3AzUmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3RyQ2F0MywgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgb3AxUmVncywgb3AyUmVncywgb3AzUmVncyk7CiAgICAgZWxzZQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MsIG9wMlJlZ3MpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0UHRyKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wMVJlZ3MsIG9wMlJlZ3MpOwogICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC0x
NDIxMyw3ICsxNDIyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdp
dGgKICAgICBiaWdMZW5ndGgubGluaygmbV9qaXQpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkpKSwgc3RydWN0dXJlR1BSKTsKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUiwgbnVsbHB0cik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIGdsb2Jh
bE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIs
IG51bGxwdHIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTQyNDEsNyArMTQyNDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgb3BlcmF0aW9uTmV3
VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSks
Ci0gICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVj
dHVyZUNvbmN1cnJlbnRseShub2RlLT50eXBlZEFycmF5VHlwZSgpKSksIGFyZ3VtZW50UmVncyk7
CisgICAgICAgICAgICByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlw
ZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50eXBlZEFycmF5VHlwZSgpKSksIGFy
Z3VtZW50UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtMTQyNzYsNyArMTQyODMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9UaGlzKE5vZGUqCiAgICAgICAgIGZ1bmN0aW9uID0g
b3BlcmF0aW9uVG9UaGlzU3RyaWN0OwogICAgIGVsc2UKICAgICAgICAgZnVuY3Rpb24gPSBvcGVy
YXRpb25Ub1RoaXM7Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dD
YXNlcywgdGhpcywgZnVuY3Rpb24sIHRlbXBSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgdGhpc1ZhbHVlUmVncykpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93Q2FzZXMsIHRoaXMsIGZ1bmN0aW9uLCB0ZW1wUmVncywgZ2xvYmFsT2JqZWN0UHRyKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIHRoaXNWYWx1ZVJlZ3MpKTsKIAogICAgIGpzVmFsdWVSZXN1
bHQodGVtcFJlZ3MsIG5vZGUpOwogfQpAQCAtMTQzMjYsNyArMTQzMzMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0S2V5c09yCiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93QnV0QXJyYXlCdWZmZXJDYXNlcywgdGhpcywgb3Bl
cmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdEdQUiwgJnZtKCksIGFycmF5U3RydWN0dXJlLCBz
Y3JhdGNoM0dQUikpOwogCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBub2RlLT5vcCgpID09IE9iamVjdEtleXMgPyBvcGVyYXRp
b25PYmplY3RLZXlzT2JqZWN0IDogb3BlcmF0aW9uT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc09i
amVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb2JqZWN0R1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2Vz
LCB0aGlzLCBub2RlLT5vcCgpID09IE9iamVjdEtleXMgPyBvcGVyYXRpb25PYmplY3RLZXlzT2Jq
ZWN0IDogb3BlcmF0aW9uT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc09iamVjdCwgcmVzdWx0R1BS
LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb2JqZWN0R1BSKSk7CiAK
ICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTQzNDEsNyArMTQzNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0S2V5c09yCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IE9iamVjdEtl
eXMgPyBvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0IDogb3BlcmF0aW9uT2JqZWN0R2V0T3duUHJv
cGVydHlOYW1lc09iamVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
b2JqZWN0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IE9iamVjdEtl
eXMgPyBvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0IDogb3BlcmF0aW9uT2JqZWN0R2V0T3duUHJv
cGVydHlOYW1lc09iamVjdCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwgb2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0xNDM1Niw3ICsxNDM2
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RLZXlzT3IKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG5vZGUtPm9wKCkgPT0gT2JqZWN0S2V5cyA/IG9wZXJhdGlvbk9iamVjdEtl
eXMgOiBvcGVyYXRpb25PYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvYmplY3RSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihub2RlLT5vcCgpID09IE9iamVjdEtleXMgPyBvcGVyYXRpb25PYmplY3RLZXlzIDogb3BlcmF0
aW9uT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcywgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb2JqZWN0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAt
MTQzODMsNyArMTQzOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0QXNz
aWduCiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGlsZDIoKSwgc291cmNlR1BSKTsK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9iamVjdEFzc2lnbk9iamVjdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHRhcmdl
dEdQUiwgc291cmNlR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RB
c3NpZ25PYmplY3QsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCB0YXJn
ZXRHUFIsIHNvdXJjZUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0xNDM5Niw3ICsxNDQwMyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RBc3NpZ24KICAgICAgICAgSlNWYWx1ZVJlZ3Mgc291cmNl
UmVncyA9IHNvdXJjZS5qc1ZhbHVlUmVncygpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0QXNzaWduVW50eXBlZCwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHRhcmdldEdQUiwgc291cmNlUmVncyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0QXNzaWduVW50eXBlZCwgZ2xvYmFsT2JqZWN0
UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHRhcmdldEdQUiwgc291cmNlUmVncyk7CiAgICAg
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBA
IC0xNDQyMSw3ICsxNDQyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RD
cmVhdGUKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdENyZWF0ZU9iamVjdCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcHJvdG90eXBlR1BSKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RDcmVhdGVPYmplY3QsIHJlc3VsdEdQ
UiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHByb3RvdHlwZUdQUik7
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwpAQCAtMTQ0MzYsNyArMTQ0NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0Q3JlYXRlCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25P
YmplY3RDcmVhdGUsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHByb3Rv
dHlwZVJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdENyZWF0ZSwg
cmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgcHJvdG90
eXBlUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtMTQ0ODgsNyArMTQ0OTUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOCiAgICAgbV9qaXQuZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0
Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgY2FsbGVlR1BSLCBub2RlLT5pbmxpbmVDYXBhY2l0eSgp
KSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKIAog
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE0NjExLDE0ICsxNDYxOCwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KE5vCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOworICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmpl
Y3Q+KHZtKCksIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAgICAgaWYgKCFhbGxvY2F0b3JWYWx1ZSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BS
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaEdQUiwgc2xvd1Bh
dGgpOwotICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BS
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAgICB9CiAKQEAgLTE0NjMwLDYg
KzE0NjM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIHRl
bXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3MsIHR5cGVuYW1lIE9wZXJhdGlvbj4KIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChOb2RlKiBub2RlLCBP
cGVyYXRpb24gb3BlcmF0aW9uKQogeworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVT
RURfUEFSQU0ob3BlcmF0aW9uKTsKKyAgICAvLyBPT1BTOgorICAgIC8qCiAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwpAQCAtMTQ2NTIsNiArMTQ2NjMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3SW50ZXJuYWxGCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLCByZXN1bHRHUFIs
ICZ2bSgpLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKIAogICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAqLwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3R2VuZXJhdG9yKE5vZGUqIG5vZGUpCkBAIC0xNDY2Niw3ICsxNDY3OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBc3luY0dlbmUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSkKIHsKLSAgICBzd2l0Y2gg
KG5vZGUtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgIHN3aXRjaCAobm9k
ZS0+c3RydWN0dXJlKCkudHlwZUluZm8oKS50eXBlKCkpIHsKICAgICBjYXNlIEpTQXJyYXlJdGVy
YXRvclR5cGU6CiAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0Fy
cmF5SXRlcmF0b3I+KG5vZGUsIG9wZXJhdGlvbk5ld0FycmF5SXRlcmF0b3IpOwogICAgICAgICBi
cmVhazsKQEAgLTE0Njc3LDEwICsxNDY4OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3SW50ZXJuYWxGCiAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDxKU1NldEl0ZXJhdG9yPihub2RlLCBvcGVyYXRpb25OZXdTZXRJdGVyYXRvcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSlNQcm9taXNlVHlwZTogewotICAgICAgICBpZiAobm9kZS0+c3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkpCisgICAg
ICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKS5jbGFzc0luZm8oKSA9PSBKU0ludGVybmFsUHJvbWlz
ZTo6aW5mbygpKQogICAgICAgICAgICAgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBs
PEpTSW50ZXJuYWxQcm9taXNlPihub2RlLCBvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2UpOwog
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gSlNQcm9taXNlOjppbmZvKCkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PnN0cnVjdHVyZSgpLmNsYXNzSW5mbygpID09IEpTUHJvbWlzZTo6aW5mbygpKTsKICAgICAgICAg
ICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU1Byb21pc2U+KG5vZGUsIG9w
ZXJhdGlvbk5ld1Byb21pc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ3MDcs
NyArMTQ3MTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9QcmltaXRpdmUoCiAg
ICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgbV9qaXQubW92ZVZhbHVlUmVn
cyhhcmd1bWVudFJlZ3MsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1bWVudFJlZ3MpKTsKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBv
cGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyksIGFyZ3VtZW50UmVncykpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiB9CkBAIC0xNDczMSw3ICsxNDc0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVU
b1Byb3BlcnR5S2UKICAgICBhbHJlYWR5UHJvcGVydHlLZXkubGluaygmbV9qaXQpOwogICAgIG1f
aml0Lm1vdmVWYWx1ZVJlZ3MoYXJndW1lbnRSZWdzLCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblRv
UHJvcGVydHlLZXksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1
bWVudFJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25Ub1Byb3BlcnR5S2V5LCByZXN1bHRSZWdzLCBnbG9iYWxPYmpl
Y3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1lbnRSZWdzKSk7CiAKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUsIERhdGFGb3JtYXRKU0NlbGwsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiB9CkBAIC0xNDc2MSw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUb051bWVyaWMoTm8KICAgICBpc0hlYXBCaWdJbnQubGluaygmbV9q
aXQpOwogICAgIG1faml0Lm1vdmVWYWx1ZVJlZ3MoYXJndW1lbnRSZWdzLCByZXN1bHRSZWdzKTsK
IAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvblRvTnVtZXJpYywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGFyZ3VtZW50UmVncykpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblRvTnVtZXJpYywgcmVzdWx0UmVncywgZ2xvYmFs
T2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZ3VtZW50UmVncykpOwogCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlLCBEYXRhRm9ybWF0SlMpOwogfQpAQCAtMTQ3
OTYsNyArMTQ4MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbE51bWJlckNv
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFJlZ3MsIHRlbXBHUFIpKTsKICAg
ICBtX2ppdC5tb3ZlVmFsdWVSZWdzKGFyZ3VtZW50UmVncywgcmVzdWx0UmVncyk7Ci0gICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
Q2FsbE51bWJlckNvbnN0cnVjdG9yLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYXJndW1lbnRSZWdzKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uQ2FsbE51bWJlckNvbnN0cnVjdG9yLCByZXN1
bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJndW1lbnRS
ZWdzKSk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtMTQ4
NjIsNyArMTQ4NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0QWRkKE5vZGUq
CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEFkZCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgc2V0R1BSLCBrZXlSZWdzLCBoYXNoR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEFkZCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSwgc2V0R1BSLCBrZXlSZWdzLCBoYXNoR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE0ODg0LDcgKzE0
ODk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hcFNldChOb2RlKgogICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwog
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25NYXBTZXQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG1h
cEdQUiwga2V5UmVncywgdmFsdWVSZWdzLCBoYXNoR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk1hcFNldCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNl
bWFudGljKSwgbWFwR1BSLCBrZXlSZWdzLCB2YWx1ZVJlZ3MsIGhhc2hHUFIpOwogICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpA
QCAtMTUwNzAsNyArMTUwODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJv
dG90eXBlCiAgICAgICAgICAgICBib29sIGhhc1BvbHlQcm90byA9IGZhbHNlOwogICAgICAgICAg
ICAgYm9vbCBoYXNNb25vUHJvdG8gPSBmYWxzZTsKICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0
dXJlLmZvckVhY2goWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpCiAgICAgICAgICAgICAgICAgICAgIGhhc1Bv
bHlQcm90byA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBoYXNNb25vUHJvdG8gPSB0cnVlOwpAQCAtMTUxMDQsNyArMTUxMTYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIG9i
amVjdEdQUiwgcmVzdWx0UmVncywgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dFByb3RvdHlwZU9mT2JqZWN0LAotICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIG9iamVjdEdQUikpOworICAgICAgICAgICAgcmVzdWx0UmVncywgZ2xv
YmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9iamVjdEdQUikpOwogCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTE1MTIxLDcgKzE1MTMzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3Rv
dHlwZQogCiAgICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBy
ZXN1bHRSZWdzLCB0ZW1wMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0UHJvdG90eXBl
T2YsCi0gICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
dmFsdWVSZWdzKSk7CisgICAgICAgICAgICByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSwgdmFsdWVSZWdzKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzODEsNyArMTUzOTMs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByCiAgICAgfQogICAg
IH0KIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBpbmRleEdQUikpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIGds
b2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBiYXNlR1BSLCBpbmRleEdQUikp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9k
ZSogbm9kZSkKQEAgLTE1NTAxLDExICsxNTUxMywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKENvZGVPCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9y
PiBzbG93UGF0aDsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkp
IHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKLSAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IHN0dWJJbmZvR1BSLCB2YWx1ZVJlZ3MsCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdl
bi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwgZ2xvYmFsT2JqZWN0UHRyKGNvZGVPcmlnaW4pLCBz
dHViSW5mb0dQUiwgdmFsdWVSZWdzLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDZWxsVmFs
dWUoYmFzZUdQUiksIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0
dWJJbmZvKCksIHZhbHVlUmVncywKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNs
b3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdsb2JhbE9iamVjdFB0cihjb2RlT3JpZ2luKSwg
Z2VuLnN0dWJJbmZvKCksIHZhbHVlUmVncywKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKGJhc2VHUFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfQogCkBAIC0xNTUz
NCw3ICsxNTU0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmdlbmVyaWNKU1ZhbHVlTm9uUGUK
ICAgICAgICAgYXJnMi51c2UoKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBhcmcxUmVncywgYXJnMlJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwogCiAgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMTU1NTUsNyArMTU1NjcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpnZW5lcmljSlNWYWx1ZU5vblBlCiAgICAgbV9qaXQuY29tcGFy
ZTMyKGNvbmQsIGFyZzFSZWdzLnBheWxvYWRHUFIoKSwgYXJnMlJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRHUFIpOwogCiAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1
bmN0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywg
YXJnMlJlZ3MpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIo
bm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMVJlZ3MsIGFyZzJSZWdzKSk7CiAKICAgICB1bmJs
ZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKIH0KQEAgLTE1NTk1LDcgKzE1NjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Z2VuZXJpY0pTVmFsdWVQZWVwaAogICAgICAgICBhcmcyLnVzZSgpOwogCiAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFSZWdzLCBhcmcyUmVncyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgZ2xvYmFsT2Jq
ZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFyZzFSZWdzLCBhcmcyUmVncyk7CiAgICAg
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgYnJhbmNoVGVzdDMyKGNhbGxS
ZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiwgdGFrZW4pOwpAQCAtMTU2MTksNyArMTU2MzEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpnZW5lcmljSlNWYWx1ZVBlZXBoCiAgICAgICAgICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9u
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJl
Z3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BS
LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJnMVJlZ3MsIGFyZzJS
ZWdzKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAgLTE1NjU5LDcgKzE1NjcxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhlYXBCaWdJbnRFcQogICAgIG5vdEVxdWFsQ2FzZS5saW5r
KCZtX2ppdCk7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBnbG9iYWxP
YmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAt
MTU4MjAsMTEgKzE1ODMyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9w
ZShOb2QKICAgICBzd2l0Y2ggKG51bU9wR1BScykgewogICAgIGNhc2UgMjoKICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbk1ha2VSb3BlMiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgb3BHUFJzWzBdLCBvcEdQUnNbMV0pKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25NYWtlUm9wZTIsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyksIG9wR1BSc1swXSwgb3BHUFJzWzFdKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgMzoKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAot
ICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk1ha2VSb3BlMywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BHUFJzWzBdLCBvcEdQUnNbMV0sIG9wR1BS
c1syXSkpOworICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk1ha2VSb3BlMywg
cmVzdWx0R1BSLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb3BHUFJz
WzBdLCBvcEdQUnNbMV0sIG9wR1BSc1syXSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTU4MzgsMTEgKzE1
ODUwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIHN3aXRjaCAobnVtT3BHUFJzKSB7
CiAgICAgY2FzZSAyOgotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1ha2VSb3BlMiwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BHUFJzWzBdLCBvcEdQUnNb
MV0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1ha2VSb3BlMiwgcmVzdWx0R1BS
LCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgb3BHUFJzWzBdLCBvcEdQ
UnNbMV0pOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDM6Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFrZVJvcGUzLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcEdQUnNbMF0sIG9wR1BSc1sx
XSwgb3BHUFJzWzJdKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYWtlUm9wZTMs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0UHRyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIG9wR1BS
c1swXSwgb3BHUFJzWzFdLCBvcEdQUnNbMl0pOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTU5NDcsOSArMTU5NTksOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdlCiAKICAgICAgICAgaWYg
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLmlzU2V0KCkpIHsKICAgICAgICAgICAgIGlmIChiYXNlUmVn
cy50YWdHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiYWRTdHJ1Y3R1cmVTbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUmVncy5wYXls
b2FkR1BSKCkpLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiYWRTdHJ1Y3R1cmVTbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamVjdFB0cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBDQ2FsbEhlbHBlcnM6OkNl
bGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChiYWRTdHJ1Y3R1cmVTbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uRW51bWVy
YXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVncywgaW5kZXhHUFIsIGVudW1lcmF0b3JHUFIpKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmFkU3RydWN0dXJlU2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBy
ZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RQdHIobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYmFzZVJl
Z3MsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBkb25l
Q2FzZXMubGluaygmbV9qaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSAr
MTI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFz
ZV9vZjxKU0NlbGwsIFQ+Ojp2YWx1ZSwgIlRvIHVzZSBhIEdDIHBvaW50ZXIsIHRoZSBncmFwaCBt
dXN0IGJlIGF3YXJlIG9mIGl0LiBVc2UgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyIGluc3RlYWQuIik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBPT1BTCiAgICAg
ICAgIGV4cGxpY2l0IFRydXN0ZWRJbW1QdHIoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICA6IG1fdmFsdWUoc3RydWN0dXJlLmdldCgpKQotICAgICAgICB7IH0KKyAg
ICAgICAgICAgIC8vOiBtX3ZhbHVlKHN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogbV92
YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc3RydWN0
dXJlKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0
cihzdGQ6Om51bGxwdHJfdCkKICAgICAgICAgICAgIDogbV92YWx1ZShudWxscHRyKQpAQCAtMTY3
LDYgKzE3MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAg
dm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAKKyAgICBUcnVzdGVkSW1tUHRyIGds
b2JhbE9iamVjdFB0cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKTsKKyAgICB9CisKICAgICBCYXNpY0Jsb2NrKiBuZXh0
QmxvY2soKQogICAgIHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IHJlc3VsdEluZGV4ID0gbV9i
bG9jay0+aW5kZXggKyAxOyA7IHJlc3VsdEluZGV4KyspIHsKQEAgLTE4MDQsNiArMTgxMywxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5lcmF0aW9uSW5mbyhlZGdlLm5vZGUoKSk7CiAg
ICAgfQogCisgICAgLy8gT09QUzogaW1wbGVtZW50CisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZUlE
KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUsIENDYWxsSGVscGVyczo6QWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwg
YWRkcmVzcyk7CisgICAgfQorCiAgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBN
YWNyb0Fzc2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKICAg
ICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMjg0NzAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFzc2VydElzUmVnCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGdyYXBoLmFzc2VydElzUmVnaXN0ZXJlZChh
dChpKS5nZXQoKSk7CisgICAgICAgIGdyYXBoLmFzc2VydElzUmVnaXN0ZXJlZChhdChpKSk7CiB9
CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIApAQCAtNTgsMTQgKzU4LDE0IEBAIHZvaWQgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCiAgICAgaWYgKG1fc2V0LmlzVGhpbigpKSB7
CiAgICAgICAgIGlmICghbV9zZXQuc2luZ2xlRW50cnkoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVFbnRyeSgpLT5kZmdTaG91bGRXYXRjaCgpKQorICAg
ICAgICBpZiAoIW1fc2V0LnNpbmdsZUVudHJ5KCkuZGZnU2hvdWxkV2F0Y2goKSkKICAgICAgICAg
ICAgIG1ha2VUb3BXaGVuVGhpbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIGxpc3QgPSBtX3NldC5saXN0
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspIHsKLSAgICAg
ICAgaWYgKCFsaXN0LT5saXN0KClbaV0tPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgaWYg
KCFsaXN0LT5saXN0KClbaV0uZGZnU2hvdWxkV2F0Y2goKSkgewogICAgICAgICAgICAgbWFrZVRv
cCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIHZv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCiAKIHZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb24oUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBS
ZWdpc3RlcmVkU3RydWN0dXJlIHRvKQogewotICAgIEFTU0VSVCghZnJvbS0+ZGZnU2hvdWxkV2F0
Y2goKSk7CisgICAgQVNTRVJUKCFmcm9tLmRmZ1Nob3VsZFdhdGNoKCkpOwogCiAgICAgaWYgKGlz
VG9wKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbgogICAgIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQgbmV3U3RydWN0dXJlczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIEFTU0VSVCghdmVjdG9yW2ldLnByZXZpb3VzLT5kZmdTaG91bGRXYXRj
aCgpKTsKKyAgICAgICAgQVNTRVJUKCF2ZWN0b3JbaV0ucHJldmlvdXMuZGZnU2hvdWxkV2F0Y2go
KSk7CiAKICAgICAgICAgaWYgKCFtX3NldC5jb250YWlucyh2ZWN0b3JbaV0ucHJldmlvdXMpKQog
ICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpmaWx0ZXJTbG93KAogICAgIAogICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIo
CiAgICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAg
ICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlLmdldCgpKSAm
IHR5cGUpOworICAgICAgICAgICAgcmV0dXJuICEhKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZUxp
a2Uoc3RydWN0dXJlKSAmIHR5cGUpOwogICAgICAgICB9KTsKIH0KIApAQCAtMjY0LDcgKzI2NCw3
IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQ2xhc3MKICAgICBBU1NFUlQo
IWlzVG9wKCkpOwogICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoCiAgICAgICAgIFsmXSAoUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKTsKKyAgICAgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pOwogICAgICAg
ICB9KTsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNTdWJDbGFzc08KIAogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMg
dHJ1ZSBpZiB0aGUgc3RydWN0dXJlIHNldCBpcyBlbXB0eS4KICAgICBmb3IgKGNvbnN0IFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlIDogbV9zZXQpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xhc3NJbmZvKSkKKyAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUuY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihjbGFzc0luZm8pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1Nyw3ICszNTcs
NyBAQCBib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTm90U3ViQ2xhCiAKICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cnVjdHVyZSBzZXQg
aXMgZW1wdHkuCiAgICAgZm9yIChjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA6
IG1fc2V0KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNz
T2YoY2xhc3NJbmZvKSkKKyAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+aXNTdWJD
bGFzc09mKGNsYXNzSW5mbykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsNiArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQ7
CiAgICAgfQogCisgICAgLy8gT09QUzoKICAgICBTdHJ1Y3R1cmVTZXQgdG9TdHJ1Y3R1cmVTZXQo
KSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNGaW5pdGUoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5jcHAJKHJldmlzaW9u
IDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogdm9pZCBUcmFuc2l0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludChwb2ludGVy
RHVtcEluQ29udGV4dChwcmV2aW91cy5nZXQoKSwgY29udGV4dCksICIgLT4gIiwgcG9pbnRlckR1
bXBJbkNvbnRleHQobmV4dC5nZXQoKSwgY29udGV4dCkpOworICAgIFVOVVNFRF9QQVJBTShvdXQp
OworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICAvLyBPT1BTCisgICAgLy9vdXQucHJp
bnQocG9pbnRlckR1bXBJbkNvbnRleHQocHJldmlvdXMuZ2V0KCksIGNvbnRleHQpLCAiIC0+ICIs
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5leHQuZ2V0KCksIGNvbnRleHQpKTsKIH0KIAogdm9pZCBU
cmFuc2l0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDI4NDcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE5ICs0MywxOCBA
QCBzdHJ1Y3QgQXJyYXlUeXBlQ2hlY2s7CiBzdHJ1Y3QgU3RydWN0dXJlVHlwZUNoZWNrOwogCiBz
dHJ1Y3QgQ2hlY2tEYXRhIHsKLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgbV9zdHJ1Y3R1cmU7CiAgICAgQXJyYXlNb2RlIG1fYXJyYXlNb2RlOwog
ICAgIGJvb2wgbV9hcnJheU1vZGVJc1ZhbGlkOwogICAgIGJvb2wgbV9hcnJheU1vZGVIb2lzdGlu
Z09rYXk7CiAgICAgCiAgICAgQ2hlY2tEYXRhKCkKLSAgICAgICAgOiBtX3N0cnVjdHVyZShudWxs
cHRyKQotICAgICAgICAsIG1fYXJyYXlNb2RlSXNWYWxpZChmYWxzZSkKKyAgICAgICAgOiBtX2Fy
cmF5TW9kZUlzVmFsaWQoZmFsc2UpCiAgICAgICAgICwgbV9hcnJheU1vZGVIb2lzdGluZ09rYXko
ZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKLSAgICBDaGVja0RhdGEoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgQ2hlY2tEYXRhKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAg
ICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKICAgICAgICAgLCBtX2FycmF5TW9kZUlzVmFs
aWQoZmFsc2UpCiAgICAgICAgICwgbV9hcnJheU1vZGVIb2lzdGluZ09rYXkodHJ1ZSkKQEAgLTYz
LDggKzYyLDcgQEAgc3RydWN0IENoZWNrRGF0YSB7CiAgICAgfQogCiAgICAgQ2hlY2tEYXRhKEFy
cmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAg
ICAgLCBtX2FycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgIDogbV9hcnJheU1vZGUoYXJyYXlN
b2RlKQogICAgICAgICAsIG1fYXJyYXlNb2RlSXNWYWxpZCh0cnVlKQogICAgICAgICAsIG1fYXJy
YXlNb2RlSG9pc3RpbmdPa2F5KHRydWUpCiAgICAgewpAQCAtNTAyLDEyICs1MDAsMTIgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIG5vdGljZVN0cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0dXJlLmdldCgpKSk7
CisgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fbWFwLmFkZCh2YXJpYWJsZSwgQ2hlY2tEYXRhKHN0cnVjdHVyZSkpOwog
ICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID09IHN0cnVjdHVyZS5n
ZXQoKSkKKyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubV9zdHJ1Y3R1cmUgPT0g
c3RydWN0dXJlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLm1fc3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5tX3N0cnVjdHVyZSA9IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
LCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHNldCkKQEAgLTU0Myw3ICs1NDEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXJlc3VsdC0+dmFsdWUubV9hcnJh
eU1vZGVIb2lzdGluZ09rYXkgfHwgIXJlc3VsdC0+dmFsdWUubV9hcnJheU1vZGVJc1ZhbGlkKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocmVzdWx0LT52YWx1ZS5tX2FycmF5TW9k
ZS5zdHJ1Y3R1cmVXb3VsZFBhc3NBcnJheU1vZGVGaWx0ZXJpbmcoc3RydWN0dXJlLmdldCgpKSkK
KyAgICAgICAgaWYgKHJlc3VsdC0+dmFsdWUubV9hcnJheU1vZGUuc3RydWN0dXJlV291bGRQYXNz
QXJyYXlNb2RlRmlsdGVyaW5nKHN0cnVjdHVyZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJlc3VsdC0+dmFsdWUuZGlzYWJsZUNoZWNrQXJyYXlIb2lzdGluZygpOwogICAgIH0KQEAg
LTU5MywxOCArNTkxLDI0IEBAIHN0cnVjdCBBcnJheVR5cGVDaGVjayB7CiBzdHJ1Y3QgU3RydWN0
dXJlVHlwZUNoZWNrIHsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVG9Ib2lzdChDaGVja0RhdGEm
IGNoZWNrRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjaGVja0RhdGEubV9zdHJ1Y3R1cmU7
CisgICAgICAgIHJldHVybiAhIWNoZWNrRGF0YS5tX3N0cnVjdHVyZTsKICAgICB9CiAKICAgICBz
dGF0aWMgdm9pZCBkaXNhYmxlSG9pc3RpbmcoQ2hlY2tEYXRhJiBjaGVja0RhdGEpCiAgICAgewot
ICAgICAgICBjaGVja0RhdGEubV9zdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICBjaGVja0Rh
dGEubV9zdHJ1Y3R1cmUgPSBSZWdpc3RlcmVkU3RydWN0dXJlKCk7CiAgICAgfQogCisgICAgLy8g
T09QUwogICAgIHN0YXRpYyBib29sIGlzQ29udHJhdmVuZWRCeVZhbHVlKENoZWNrRGF0YSYgY2hl
Y2tEYXRhLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNoZWNr
RGF0YSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLyoKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2VsbCgpKTsKICAgICAgICAg
cmV0dXJuIGNoZWNrRGF0YS5tX3N0cnVjdHVyZSAhPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCk7CisgICAgICAgICovCiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgaGFzRW5vdWdoVm90ZXNU
b0hvaXN0KFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NCw3ICsyMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5v
cmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkg
fHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCBub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgp
LmlzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXND
ZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7CiAgICAgICAg
ICAgICAgICAgCkBAIC0zMDgsOSArMzA4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMt
PmRmZ1Nob3VsZFdhdGNoKCkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICFub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZz
ZXQ6CisgICAgICAgICAgICAgICAgICAgIC8vIE9PUFMKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQpAQCAtMzE5LDYgKzMyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11
bHRpRGVsZXRlQnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIC8vIE9PUFMKICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlEZWxldGVCeU9mZnNldERh
dGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERlbGV0ZUJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpRGVsZXRlQnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICF2YXJpYW50Lm5ld1N0cnVjdHVyZSgpIHx8ICF2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLT5k
ZmdTaG91bGRXYXRjaCgpKTsKQEAgLTMyOSwxMSArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgb25seSBzdXBwb3J0cyBzdHJ1Y3R1cmVzIHRoYXQgYXJl
IEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheS4KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IEpTRmluYWxPYmplY3Q6Omlu
Zm8oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCkgPT0gSlNBcnJheTo6aW5mbygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUuY2xhc3NJbmZvKCkgPT0gSlNGaW5hbE9iamVjdDo6aW5mbygpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgc3RydWN0dXJlLmNsYXNzSW5mbygpID09IEpTQXJyYXk6OmluZm8o
KSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBjZXJ0YWlu
IGluZGV4aW5nIHNoYXBlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFoYXNBbnlBcnJheVN0b3JhZ2Uo
c3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFu
dDoKQEAgLTY4NSw4ICs2ODcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBj
b252ZXJzaW9ucy4gVGhleSBhcmUgbm90IG5lZWRlZCBpbiB0aGUgREZHIHJpZ2h0IG5vdy4gV2Ug
c2hvdWxkIGFkZCBzdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGVzZSBpZiB0
aGUgREZHIGV2ZXIgbmVlZHMgaXQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgOiBub2RlLT5zdHJ1Y3R1cmVTZXQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhaGFzSW50MzIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAh
aGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgIWhhc0ludDMyKHN0cnVjdHVyZS5pbmRleGluZ1R5cGUo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhaGFzRG91Ymxl
KHN0cnVjdHVyZS5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4NDcw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzg4Nyw3ICszODg3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCkt
PnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1f
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwotICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0
aW9ucygpLmFkZExhemlseShtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIo
KSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBtX2dy
YXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseShtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9k
ZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQob2xk
U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IG5ld1N0cnVjdHVyZS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CkBAIC0zODk1LDcgKzM4OTUsNyBAQCBwcml2
YXRlOgogCiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsg
CiAKLSAgICAgICAgYXV0byYgaGVhcCA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT50cmFu
c2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uID8gbV9oZWFw
cy5KU0NlbGxIZWFkZXJBbmROYW1lZFByb3BlcnRpZXMgOiBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRDsKKyAgICAgICAgYXV0byYgaGVhcCA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LnRy
YW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24gPyBtX2hl
YXBzLkpTQ2VsbEhlYWRlckFuZE5hbWVkUHJvcGVydGllcyA6IG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEOwogICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlciB7IGhlYXAsIG1fb3V0LmFkZFB0
cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRC5vZmZzZXQoKSkgfTsKIAogICAgICAg
ICBtX291dC5zdG9yZTMyKApAQCAtNDkzOSw3ICs0OTM5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgIGJvb2wgaGFzUG9seVByb3RvID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNNb25vUHJvdG8gPSBmYWxzZTsKICAgICAgICAgICAgICAgICB2
YWx1ZS5tX3N0cnVjdHVyZS5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUG9seVByb3RvKCkp
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzUG9seVByb3RvKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNQb2x5UHJvdG8gPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNNb25vUHJvdG8gPSB0cnVlOwpA
QCAtNjk3Miw3ICs2OTcyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVh
dGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQo
KSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0
cnVjdHVyZShzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0
aWFsaXphdGlvblZhbHVlKSkpOwogICAgICAgICAgICAgfSwKQEAgLTcxMTksNyArNzExOSw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2
bSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJl
Y3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7CiAgICAgICAgICAgICB9LCBsZW5ndGgudmFs
dWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNh
bGxSZXN1bHQpOwpAQCAtNzM5MCw3ICs3MzkwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbiwg
bV92bVZhbHVlLCBmcm96ZW5Qb2ludGVyKG1fZ3JhcGguZnJlZXplU3Ryb25nKG1fbm9kZS0+c3Ry
dWN0dXJlKCkuZ2V0KCkpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb24sIG1fdm1WYWx1ZSwg
c3Ryb25nU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKQEAgLTc0MDksNyArNzQwOSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKIAogICAgIHZvaWQgY29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3QoKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtX25vZGUtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewor
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+c3RydWN0dXJlKCkudHlwZUluZm8oKS50eXBlKCkpIHsK
ICAgICAgICAgY2FzZSBKU0FycmF5SXRlcmF0b3JUeXBlOgogICAgICAgICAgICAgY29tcGlsZU5l
d0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTQXJyYXlJdGVyYXRvcj4ob3BlcmF0aW9uTmV3QXJy
YXlJdGVyYXRvcik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc0MjAsNyArNzQyMCw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIGNvbXBpbGVOZXdJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxKU1NldEl0ZXJhdG9yPihvcGVyYXRpb25OZXdTZXRJdGVyYXRvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKU1Byb21pc2VUeXBlOgotICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IEpTSW50ZXJuYWxQcm9t
aXNlOjppbmZvKCkpCisgICAgICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmUoKS5jbGFzc0lu
Zm8oKSA9PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQogICAgICAgICAgICAgICAgIGNvbXBp
bGVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxKU0ludGVybmFsUHJvbWlzZT4ob3BlcmF0aW9u
TmV3SW50ZXJuYWxQcm9taXNlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IEFTU0VSVChtX25vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBKU1Byb21pc2U6Omlu
Zm8oKSk7CkBAIC03NDU2LDcgKzc0NTYsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAt
PiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk5ld1N0cmluZ09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBtYXNt
U3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHN0cmlu
Zyk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xv
d1Jlc3VsdFZhbHVlKTsKQEAgLTgzNTQsNyArODM1NCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBlZEFycmF5VHlwZSks
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0
cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBz
aXplNjRCaXRzLCBzdG9yYWdlVmFsdWUpOwpAQCAtODM2OSw3ICs4MzY5LDcgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwg
bV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLmdldCgpKSk7CisgICAgICAgIHNldFN0b3Jh
Z2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+
cHJldmlvdXMpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKCkKQEAgLTgzODAsNyArODM4MCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgCiAgICAgICAgIHNldFN0b3JhZ2UoCiAgICAgICAgICAgICByZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJhbnNp
dGlvbi0+cHJldmlvdXMuZ2V0KCksIHRyYW5zaXRpb24tPm5leHQuZ2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLCB0cmFuc2l0
aW9uLT5uZXh0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU51a2VTdHJ1Y3R1cmVB
bmRTZXRCdXR0ZXJmbHkoKQpAQCAtOTI2Miw3ICs5MjYyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgK
ICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCks
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
LCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5y
ZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlRm9yVHJhbnNpdGlv
bigKICAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFudC5vZmZzZXQoKSwKQEAgLTEzNDU3
LDE0ICsxMzQ1NywxNSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBp
ZiAoYmFzZVZhbHVlLmlzVHlwZShTcGVjT2JqZWN0KSAmJiBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmcgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuZm9yRWFjaChbJl0gKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpID4gQXJyYXlXaXRoVW5kZWNpZGVkKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgpID4gQXJyYXlXaXRoVW5kZWNpZGVk
KQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW5kZXhpbmcgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmICghaGFzSW5kZXhpbmcpCiAgICAgICAgICAg
ICAgICAgICAgIHNraXBJbmRleGluZ01hc2tDaGVjayA9IHRydWU7CiAgICAgICAgICAgICAgICAg
b25seVN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG9ubHlTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJh
cmVEYXRhID0gb25seVN0cnVjdHVyZS0+dHJ5UmFyZURhdGEoKTsKKyAgICAgICAgICAgICAgICAv
LyBPT1BTCisgICAgICAgICAgICAgICAgLy9pZiAob25seVN0cnVjdHVyZSkKKyAgICAgICAgICAg
ICAgICAvLyAgICByYXJlRGF0YSA9IG9ubHlTdHJ1Y3R1cmUtPnRyeVJhcmVEYXRhKCk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIExWYWx1ZSBub3RIYXZpbmdJbmRleGluZyA9IG51bGxw
dHI7CkBAIC0xMzY5MiwxMCArMTM2OTMsMTEgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAog
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrU3RydWN0dXJlQmxvY2spOwogICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQ7Ci0gICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JO
b2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwotICAgICAg
ICBpZiAoc3RydWN0dXJlKQotICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+aWQoKSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUworICAg
ICAgICAvL2F1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSku
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAgICAgICAvL2lmIChzdHJ1Y3R1cmUpCisg
ICAgICAgIC8vICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlk
KCkpOworICAgICAgICAvL2Vsc2UKICAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKIAogICAgICAgICBMVmFsdWUg
aGFzRW51bWVyYXRvclN0cnVjdHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5s
b2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
U3RydWN0dXJlSUQpKTsKQEAgLTEzNzEzLDEwICsxMzcxNSwxMCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVC
bG9jayk7CiAgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7CiAgICAgICAg
IGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgICAgIGlmIChzdHJ1
Y3R1cmUpIHsKLSAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1f
b3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgfQor
ICAgICAgICAvL2lmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgaGFzTm9PdXRPZkxpbmVQ
cm9wZXJ0aWVzID0gIXN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgICAgICAvLyAg
ICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLmlubGluZUNhcGFj
aXR5KCkpOworICAgICAgICAvL30KICAgICAgICAgaWYgKCFpbmxpbmVDYXBhY2l0eSkKICAgICAg
ICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KTsKICAgICAgICAg
TFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID8gbV9vdXQuaW50MzJP
bmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkpOwpAQCAtMTM4NjQsMTQgKzEz
ODY2LDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIExWYWx1ZSBv
YmplY3Q7CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5OwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLm91dE9mTGluZUNhcGFjaXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3Ry
dWN0dXJlLmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxs
QWxsb2NhdG9yOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGUoKSA9PSBKU1R5
cGU6OkFycmF5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9j
YXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNBcnJheT4odm0oKSwgSlNBcnJheTo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUudHlw
ZUluZm8oKS50eXBlKCkgPT0gSlNUeXBlOjpBcnJheVR5cGUpCisgICAgICAgICAgICAgICAgICAg
IGNlbGxBbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTQXJy
YXk+KHZtKCksIEpTQXJyYXk6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5pbmxpbmVDYXBhY2l0
eSgpKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2VsbEFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgICAgICBjZWxsQWxs
b2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0
Pih2bSgpLCBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuaW5saW5lQ2Fw
YWNpdHkoKSksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgICAg
ICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLmluZGV4aW5nVHlwZSgp
KTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IG1fb3V0Lmlu
dFB0clplcm87CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZlY3Rvckxlbmd0aCA9IG1fb3V0Lmlu
dDMyWmVybzsKQEAgLTEzODk3LDcgKzEzODk5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlTaXpl
ID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKSArIGluZGV4aW5nSGVhZGVyU2l6ZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUub3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSArIGlu
ZGV4aW5nSGVhZGVyU2l6ZSksCiAgICAgICAgICAgICAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzkxNCwxMyArMTM5MTYsMTMgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0
dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZTdG9y
YWdlLAogICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGhhdmVCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZh
bHVlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzcGxhdFdvcmRzKAogICAg
ICAgICAgICAgICAgICAgICBmYXN0QnV0dGVyZmx5VmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoLXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAtIDEpLAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1cmUub3V0T2ZMaW5l
Q2FwYWNpdHkoKSAtIDEpLAogICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC0x
KSwKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSk7CiAKQEAgLTEzOTQ1LDcgKzEzOTQ3LDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25O
ZXdPYmplY3RXaXRoQnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
ICZ2bSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZt
LCBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0
b3JMZW5ndGgsIGJ1dHRlcmZseVZhbHVlKTsKQEAgLTEzOTU0LDcgKzEzOTU2LDcgQEAgSUdOT1JF
X0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTM5NzEsNyArMTM5NzMsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTMyKHB1YmxpY0xlbmd0aCwgYnV0dGVyZmx5LCBtX2hlYXBz
LkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUFy
cmF5RWxlbWVudHMobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwg
bV9vdXQuaW50MzJaZXJvLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSk7CisgICAgICAgICAgICAg
ICAgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUuaW5k
ZXhpbmdUeXBlKCkpLCBtX291dC5pbnQzMlplcm8sIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5KTsK
IAogICAgICAgICAgICAgICAgIEhhc2hNYXA8aW50MzJfdCwgTFZhbHVlLCBEZWZhdWx0SGFzaDxp
bnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gaW5k
ZXhNYXA7CiAgICAgICAgICAgICAgICAgVmVjdG9yPGludDMyX3Q+IGluZGljZXM7CkBAIC0xNDAx
Nyw3ICsxNDAxOSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBzdG9yZXMgdG8gdGhlIGFycmF5IGFyZSBzdGlsbCBz
b21ld2hlcmUgYWJvdmUgdGhpcyBwb2ludC4KICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1
dDo6U3RvcmVUeXBlIHN0b3JlVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ZWRB
YnN0cmFjdEhlYXAqIGhlYXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlLmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCB1c2UgdGhlIHByb3ZlbiB0eXBlIGlmIHdlIGhhZCB0aGUgRWRn
ZSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUzMTEKQEAgLTE0MDgxLDcgKzE0MDgz
LDggQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBCaXRWZWN0b3Igc2V0SW5saW5lT2Zmc2V0czsKLSAgICAgICAgICAgIGZvciAoUHJvcGVy
dHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgp
KSB7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50
cnkgZW50cnkgOiBzdHJ1Y3R1cmUuZ2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGRl
c2NyaXB0b3IgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3Iua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQpAQCAtMTQwOTksNyArMTQx
MDIsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKTsgaS0tOykgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RydWN0dXJlLmlubGluZUNhcGFjaXR5KCk7IGktLTsp
IHsKICAgICAgICAgICAgICAgICBpZiAoIXNldElubGluZU9mZnNldHMuZ2V0KGkpKQogICAgICAg
ICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgbV9vdXQuYWRkcmVz
cyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShpKSkpOwogICAgICAgICAgICAgfQpAQCAtMTQxNTQsNyArMTQxNTcsNyBAQCBJR05P
UkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpLAorICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSksIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CiAgICAgICAgICAg
ICB9LCBzY29wZSk7CkBAIC0xNDIyMSw3ICsxNDIyNCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtYXNtU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
Y2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTE0MjQx
LDcgKzE0MjQ0LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgdm9pZCBjb21w
aWxlTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0KCkKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAobV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChtX25vZGUtPnN0cnVjdHVyZSgpLnR5cGVJbmZvKCkudHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgSlNBcnJheUl0ZXJhdG9yVHlwZToKICAgICAgICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6
ZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsPEpTQXJyYXlJdGVyYXRvcj4ob3BlcmF0aW9uTmV3
QXJyYXlJdGVyYXRvcik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0MjUyLDcgKzE0MjU1LDcg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFs
aXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8SlNTZXRJdGVyYXRvcj4ob3BlcmF0aW9uTmV3
U2V0SXRlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNQcm9taXNl
VHlwZToKLSAgICAgICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpKQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+c3Ry
dWN0dXJlKCkuY2xhc3NJbmZvKCkgPT0gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSkKICAgICAg
ICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxK
U0ludGVybmFsUHJvbWlzZT4ob3BlcmF0aW9uTmV3SW50ZXJuYWxQcm9taXNlKTsKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChtX25vZGUtPnN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSBKU1Byb21pc2U6OmluZm8oKSk7CkBAIC0xNDY5Miw2ICsxNDY5NSw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGll
c1tpZGVudGlmaWVyTnVtYmVyXSwgc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSk7CiAgICAgfQogICAgIAorICAgIC8vIE9PUFMKICAgICBMVmFsdWUgc3RvcmFnZUZvclRyYW5z
aXRpb24oCiAgICAgICAgIExWYWx1ZSBvYmplY3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAg
ICAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXh0U3RydWN0
dXJlKQpAQCAtMTQ3MDQsMTEgKzE0NzA4LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmICghcHJldmlvdXNT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICByZXN1bHQgPSBhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZShwcmV2aW91c1N0cnVjdHVyZSkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgICAgICAg
ICAgb2JqZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJm
bHkpLAotICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHByZXZpb3VzU3RydWN0
dXJlKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShuZXh0U3RydWN0dXJlKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkocmVzdWx0
LCBvYmplY3QpOwpAQCAtMTQ3ODcsOSArMTQ3OTEsOSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluaXREb25lLCBsYXN0TmV4dCk7CiAgICAgfQog
ICAgIAotICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShMVmFsdWUgb2JqZWN0LCBT
dHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlKQorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShMVmFsdWUgb2JqZWN0LCBSZWdpc3RlcmVkU3RydWN0dXJlIHByZXZpb3VzU3RydWN0
dXJlKQogICAgIHsKLSAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7CisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAg
ICAgICAgIHBvaW50ZXJUeXBlKCksCiAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVD
b21wbGV4UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKQEAgLTE0ODA3LDE0ICsx
NDgxMSwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgfQogICAgIAogICAgIExW
YWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAotICAgICAgICBMVmFsdWUgb2JqZWN0LCBM
VmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQor
ICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBwcmV2aW91cywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXh0KQogICAgIHsKLSAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAogCi0gICAg
ICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQub3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAocHJldmlvdXMtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgaWYgKHByZXZpb3VzLmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCkpIHsKICAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5j
b25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0
eVN0b3JhZ2UsIG1fdm1WYWx1ZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwogICAgICAgICB9CkBA
IC0xNjc2Myw3ICsxNjc2Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAKICAg
ICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAg
ICAgewotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUuaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtKCksIGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAg
ICAgIAogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGFsbG9jYXRvciBpcyBudWxsLCB3ZSBjb3Vs
ZCBzaW1wbHkgZW1pdCBhIG5vcm1hbCBDIGNhbGwgdG8gdGhlIGFsbG9jYXRvcgpAQCAtMTY3ODcs
NyArMTY3OTEsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBbPSwg
JnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdCwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWFzbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1
ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTE2OTM5LDcgKzE2OTQz
LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBib29sIHNob3VsZEluaXRp
YWxpemVFbGVtZW50cyA9IGZhbHNlOwogICAgICAgICBib29sIHNob3VsZExhcmdlQXJyYXlTaXpl
Q3JlYXRlQXJyYXlTdG9yYWdlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUpTQXJy
YXkoCi0gICAgICAgICAgICBwdWJsaWNMZW5ndGgsIHZlY3Rvckxlbmd0aCwgd2Vha1N0cnVjdHVy
ZShzdHJ1Y3R1cmUpLCBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
LCBzaG91bGRJbml0aWFsaXplRWxlbWVudHMsCisgICAgICAgICAgICBwdWJsaWNMZW5ndGgsIHZl
Y3Rvckxlbmd0aCwgd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpLCBtX291dC5jb25zdEludDMyKHN0
cnVjdHVyZS5pbmRleGluZ1R5cGUoKSksIHNob3VsZEluaXRpYWxpemVFbGVtZW50cywKICAgICAg
ICAgICAgIHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9yYWdlKTsKICAgICB9CiAK
QEAgLTIwODI2LDEzICsyMDgzMCwzNiBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAg
ICBMVmFsdWUgd2Vha1N0cnVjdHVyZUlEKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHN0cnVjdHVyZSk7CisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgLy9yZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOworICAgICAgICBy
ZXR1cm4gbV9vdXQuY29uc3RJbnQzMigwKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIHdlYWtT
dHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAgICAv
LyBPT1BTCiAgICAgICAgIEFTU0VSVCghIXN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIHJldHVy
biBtX291dC5hbHJlYWR5UmVnaXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKDApOworICAg
ICAgICAvL3JldHVybiBtX291dC5hbHJlYWR5UmVnaXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgs
IHN0cnVjdHVyZS5nZXQoKSk7CisgICAgfQorCisgICAgTFZhbHVlIHN0cm9uZ1N0cnVjdHVyZShS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzdHJ1Y3R1cmUpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vcmV0dXJuIGZyb3plblBv
aW50ZXIobV9ncmFwaC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoMCk7CisgICAgfQorCisgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyIG1hc21TdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vIHJldHVybiBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1
cmUpOworICAgICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwogICAgIH0KICAgICAKICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
T3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjg0NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBuYW1lc3BhY2Ug
REZHIHsKIGNsYXNzIFJlZ2lzdGVyZWRTdHJ1Y3R1cmU7Ci19OworfQogCiBjbGFzcyBDQ2FsbEhl
bHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxwZXJzIHsKIHB1YmxpYzoKQEAgLTY0NCw3ICs2NDQs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgJiYgc3RkOjppc19zYW1lPEFyZywgREZHOjpSZWdpc3Rl
cmVkU3RydWN0dXJlPjo6dmFsdWU+CiAgICAgc2V0dXBBcmd1bWVudHNJbXBsKEFyZ0NvbGxlY3Rp
b248bnVtR1BSQXJncywgbnVtR1BSU291cmNlcywgbnVtRlBSQXJncywgbnVtRlBSU291cmNlcywg
bnVtQ3Jvc3NTb3VyY2VzLCBleHRyYUdQUkFyZ3MsIG5vbkFyZ0dQUnMsIGV4dHJhUG9rZT4gYXJn
U291cmNlUmVncywgQXJnIGFyZywgQXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgc2V0dXBB
cmd1bWVudHNJbXBsPE9wZXJhdGlvblR5cGU+KGFyZ1NvdXJjZVJlZ3MsIFRydXN0ZWRJbW1QdHIo
YXJnLmdldCgpKSwgYXJncy4uLik7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGFyZyk7CisgICAgICAgIC8vc2V0dXBBcmd1bWVudHNJbXBsPE9wZXJhdGlvblR5cGU+KGFy
Z1NvdXJjZVJlZ3MsIFRydXN0ZWRJbW1QdHIoYXJnLmdldCgpKSwgYXJncy4uLik7CisgICAgICAg
IHNldHVwQXJndW1lbnRzSW1wbDxPcGVyYXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBhcmdzLi4uKTsKICAgICB9CiAKICN1bmRlZiBDVVJSRU5UX0FSR1VN
RU5UX1RZUEUK
</data>

          </attachment>
      

    </bug>

</bugzilla>