<?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>226934</bug_id>
          
          <creation_ts>2021-06-11 12:05:04 -0700</creation_ts>
          <short_desc>Add a form of inline caching where we inline cache based on the key rather than the call site</short_desc>
          <delta_ts>2021-06-18 12:05:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          <dependson>226936</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1769015</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-11 12:05:04 -0700</bug_when>
    <thetext>For example, if you had some megamorphic over keys get by val, you could instead have inline caches hanging off each key. For each key, the code might be monomorphic or polymorphic in terms of what structures are seen.

This is helpful for things like a get by val or put by val when iterating a list of keys of an object. For example, a for-in loop, or iterating over Object.keys, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770740</commentid>
    <comment_count>1</comment_count>
      <attachid>431694</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-17 11:38:20 -0700</bug_when>
    <thetext>Created attachment 431694
WIP

Not gonna do this now, but just dropping in a wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771046</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-18 12:05:45 -0700</bug_when>
    <thetext>&lt;rdar://problem/79510415&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431694</attachid>
            <date>2021-06-17 11:38:20 -0700</date>
            <delta_ts>2021-06-17 11:38:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33271</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI3ODY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw3ICsxNTk1LDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBleGNlcHRpb24gaGFu
ZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7CiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkKKyAgICAgICAgaWYgKHN0YXRlLnVzZURhdGFJQygpKQogICAgICAgICAgICAgZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwogI2VuZGlmCiAgICAgICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZl
KTsKQEAgLTE3MTIsNyArMTcxMiw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBzbG93Q2FzZSA9IGFjY2Vzcy5jYWxsTGlua0lu
Zm8oKS0+ZW1pdEZhc3RQYXRoKGppdCwgbG9hZGVkVmFsdWVHUFIsIGxvYWRlZFZhbHVlR1BSID09
IEdQUkluZm86OnJlZ1QyID8gR1BSSW5mbzo6cmVnVDAgOiBHUFJJbmZvOjpyZWdUMiwgSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSA/IENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyA6IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgICAgICAg
ICAgYXV0byBzbG93Q2FzZSA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+ZW1pdEZhc3RQYXRoKGpp
dCwgbG9hZGVkVmFsdWVHUFIsIGxvYWRlZFZhbHVlR1BSID09IEdQUkluZm86OnJlZ1QyID8gR1BS
SW5mbzo6cmVnVDAgOiBHUFJJbmZvOjpyZWdUMiwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHN0
YXRlLmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
IDogQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CiAgICAgICAgICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRl
cikKQEAgLTE4NjUsNyArMTg2NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKIAogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNl
cnZlOwogI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgaWYgKHN0YXRlLnVzZURhdGFJQygpKQogICAgICAgICAgICAgICAg
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKICNlbmRp
ZgogICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUpOwpAQCAtMTk2MCw3ICsxOTYwLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
YmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2
YWx1ZVJlZ3MpOwogI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2Nr
LT51c2VEYXRhSUMoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUudXNlRGF0YUlDKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdp
c3RlcnM6OmxyKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzg2
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgxLDkgKzM4MSw5IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCit2b2lkIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewotICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyhvd25lcikpIHsKICAgICAgICAgc3R1Yklu
Zm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDMwLDcg
KzQzMCw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9
KSwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIENDYWxsSGVscGVyczo6
ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+
KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBu
b2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgpAQCAtNDQy
LDkgKzQ0Miw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2UKICAg
ICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lk
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKTsKKyAgICByZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhvd25lciwgc3R1YkluZm8sIHN0dWJJbmZv
LnNsb3dQYXRoU3RhcnRMb2NhdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNp
b24gMjc4NjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogCi0gICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOworICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKEpTQ2VsbCosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBz
dGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwotICAg
IHN0YXRpYyB2b2lkIHJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgdm9pZCByZXNldFN0
dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0
YXRpYyB2b2lkIHJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoSlND
ZWxsKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgdm9pZCByZXNldFN0dWJBc0p1
bXBJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVs
IHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgYW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBs
YXRmb3Jtcy4gV2hlbiBhZGRpbmcgYSBuZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAJKHJldmlzaW9uIDI3ODY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDExIEBA
IG5hbWVzcGFjZSBQb2x5bW9ycGhpY0FjY2Vzc0ludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKK2Jvb2wgdXNlRGF0YUlDKEpTQ2VsbCogb3duZXIp
Cit7CisgICAgcmV0dXJuIGpzQ2FzdDxDb2RlQmxvY2sqPihvd25lciktPnVzZURhdGFJQygpOwor
fQorCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFBvbHltb3JwaGljQWNj
ZXNzKTsKIAogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CkBAIC03Miw3ICs3Nyw3IEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpy
ZXN0b3JlU2NyYXQKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAg
ICByZXN0b3JlU2NyYXRjaCgpOwotICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMo
KSkKKyAgICBpZiAodXNlRGF0YUlDKCkpCiAgICAgICAgIGppdC0+cmV0KCk7CiAgICAgZWxzZQog
ICAgICAgICBzdWNjZXNzLmFwcGVuZChqaXQtPmp1bXAoKSk7CkBAIC0xMDQsMTAgKzEwOSwxMCBA
QCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgaWYgKCFtX2Nh
bGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcpIHsKICAgICAgICAg
bV9jYWxjdWxhdGVkUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nID0gdHJ1ZTsK
IAotICAgICAgICBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0Nh
bGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5m
by0+Y2FsbFNpdGVJbmRleCk7CisgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4
Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBjb2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShjb2RlQmxvY2soKSwg
c3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVnaXN0
ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAobV9u
ZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUo
KSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JD
YWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFu
ZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2xp
dmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTE3
NSw3ICsxODAsNyBAQCBDYWxsU2l0ZUluZGV4IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsCiAg
ICAgICAgIG1fY2FsY3VsYXRlZENhbGxTaXRlSW5kZXggPSB0cnVlOwogCiAgICAgICAgIGlmICht
X25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pCi0gICAgICAgICAgICBtX2NhbGxT
aXRlSW5kZXggPSBqaXQtPmNvZGVCbG9jaygpLT5uZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRl
SW5kZXgoc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOworICAgICAgICAgICAgbV9jYWxsU2l0ZUlu
ZGV4ID0gY29kZUJsb2NrKCktPm5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChzdHVi
SW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2FsbFNp
dGVJbmRleCA9IG9yaWdpbmFsQ2FsbFNpdGVJbmRleCgpOwogICAgIH0KQEAgLTE5Nyw3ICsyMDIs
NyBAQCBjb25zdCBIYW5kbGVySW5mbyYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIGNh
bGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAg
IFJFTEVBU0VfQVNTRVJUKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbik7Ci0g
ICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQtPmNvZGVCbG9jaygpLT5oYW5k
bGVyRm9ySW5kZXgoc3R1YkluZm8tPmNhbGxTaXRlSW5kZXguYml0cygpKTsKKyAgICBIYW5kbGVy
SW5mbyogZXhjZXB0aW9uSGFuZGxlciA9IGNvZGVCbG9jaygpLT5oYW5kbGVyRm9ySW5kZXgoc3R1
YkluZm8tPmNhbGxTaXRlSW5kZXguYml0cygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRp
b25IYW5kbGVyKTsKICAgICByZXR1cm4gKmV4Y2VwdGlvbkhhbmRsZXI7CiB9CkBAIC0yNTQsNyAr
MjU5LDcgQEAgUG9seW1vcnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKCkgewogUG9seW1v
cnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQogCiBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjphZGRDYXNlcygKLSAgICBjb25zdCBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nhc2U+LCAyPiBvcmlnaW5hbENhc2Vz
VG9BZGQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwpAQCAtMzM3LDcgKzM0Miw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICAvLyBOb3cgYWRkIHRoaW5ncyB0byB0aGUgbmV3IGxpc3QuIE5vdGUgdGhhdCBh
dCB0aGlzIHBvaW50LCB3ZSB3aWxsIHN0aWxsIGhhdmUgb2xkIGNhc2VzIHRoYXQKICAgICAvLyBt
YXkgYmUgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmVzLiBUaGF0J3MgZmluZS4gV2Ugd2lsbCBzb3J0
IHRoYXQgb3V0IHdoZW4gd2UgcmVnZW5lcmF0ZS4KICAgICBmb3IgKGF1dG8mIGNhc2VUb0FkZCA6
IGNhc2VzVG9BZGQpIHsKLSAgICAgICAgY29tbWl0KGxvY2tlciwgdm0sIG1fd2F0Y2hwb2ludHMs
IGNvZGVCbG9jaywgc3R1YkluZm8sICpjYXNlVG9BZGQpOworICAgICAgICBjb21taXQobG9ja2Vy
LCB2bSwgbV93YXRjaHBvaW50cywgb3duZXIsIHN0dWJJbmZvLCAqY2FzZVRvQWRkKTsKICAgICAg
ICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGNhc2VUb0FkZCkpOwogICAgIH0KICAgICAKQEAgLTM0
NywxMSArMzUyLDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MK
IH0KIAogQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6YWRkQ2FzZSgK
LSAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBSZWY8QWNjZXNz
Q2FzZT4gbmV3QWNjZXNzKQorICAgIGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UmVmPEFjY2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nh
c2U+LCAyPiBuZXdBY2Nlc3NlczsKICAgICBuZXdBY2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdB
Y2Nlc3MpKTsKLSAgICByZXR1cm4gYWRkQ2FzZXMobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgV1RGTW92ZShuZXdBY2Nlc3NlcykpOworICAgIHJldHVybiBhZGRDYXNlcyhsb2NrZXIs
IHZtLCBvd25lciwgc3R1YkluZm8sIFdURk1vdmUobmV3QWNjZXNzZXMpKTsKIH0KIAogYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKQEAgLTQwMSw3ICs0MDYs
NyBAQCB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtCiB9CiAKIHZvaWQg
UG9seW1vcnBoaWNBY2Nlc3M6OmNvbW1pdCgKLSAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBWTSYgdm0sIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm8+JiB3YXRjaHBvaW50cywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCisgICAgY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgd2F0Y2hwb2ludHMsIEpTQ2VsbCogb3duZXIsCiAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBBY2Nlc3NDYXNlJiBhY2Nlc3NDYXNlKQogewog
ICAgIC8vIE5PVEU6IFdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB0aGlzIGlzIHJlbGF0aXZlbHkg
cmFyZS4gSXQgbWFpbmx5IGFyaXNlcyBmb3IgYWNjZXNzZXMgdG8KQEAgLTQxMCw2ICs0MTUsNyBA
QCB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpjb21taXQoCiAgICAgLy8gdmFuaWxsYSBvYmplY3Rz
IG9yIGV4b3RpYyBvYmplY3RzIGZyb20gd2l0aGluIEpTQyAobGlrZSBBcmd1bWVudHMsIHRob3Nl
IGFyZSBzdXBlciBwb3B1bGFyKS4KICAgICAvLyBUaG9zZSBjb21tb24ga2luZHMgb2YgSlNDIG9i
amVjdCBhY2Nlc3NlcyBkb24ndCBoaXQgdGhpcyBjYXNlLgogICAgIAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KG93bmVyKTsKICAgICBmb3IgKFdhdGNocG9p
bnRTZXQqIHNldCA6IGFjY2Vzc0Nhc2UuY29tbWl0KHZtKSkgewogICAgICAgICBXYXRjaHBvaW50
KiB3YXRjaHBvaW50ID0KICAgICAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKQEAgLTQxOSwxMyArNDI1LDE0IEBA
IHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmNvbW1pdCgKICAgICB9CiB9CiAKLUFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEVDTUFNb2RlIGVjbWFNb2RlLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCitBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNj
ZXNzOjpyZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3duZXIsIEVDTUFN
b2RlIGVjbWFNb2RlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIGRhdGFMb2dM
bklmKFBvbHltb3JwaGljQWNjZXNzSW50ZXJuYWw6OnZlcmJvc2UsICJSZWdlbmVyYXRlIHdpdGgg
bV9saXN0OiAiLCBsaXN0RHVtcChtX2xpc3QpKTsKIAotICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSBzdGF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBlY21hTW9kZSk7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KHZtLCBvd25lcik7CisgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlIHN0YXRlKHZtLCBnbG9iYWxPYmplY3QsIGVjbWFNb2RlLCBjb2RlQmxv
Y2ssIG93bmVyKTsKIAogICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CiAgICAgc3RhdGUuc3R1Yklu
Zm8gPSAmc3R1YkluZm87CkBAIC01MTQsNyArNTIxLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAmJiBzdHViSW5mby5hY2Nlc3NUeXBlID09IEFj
Y2Vzc1R5cGU6Okluc3RhbmNlT2YpIHsKICAgICAgICAgd2hpbGUgKCFjYXNlcy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKGNhc2VzLnRha2VMYXN0KCkpOwotICAgICAgICBj
YXNlcy5hcHBlbmQoQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
Okluc3RhbmNlT2ZHZW5lcmljLCBudWxscHRyKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywg
bnVsbHB0cikpOwogICAgICAgICBnZW5lcmF0ZWRGaW5hbENvZGUgPSB0cnVlOwogICAgIH0KIApA
QCAtNTY4LDcgKzU3NSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nl
c3MKICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3Q2FzZS0+cmVxdWlyZXNJbnQzMlByb3BlcnR5
Q2hlY2soKSkKICAgICAgICAgICAgICAgICBuZWVkc0ludDMyUHJvcGVydHlDaGVjayA9IHRydWU7
IAogICAgICAgICB9Ci0gICAgICAgIGNvbW1pdChsb2NrZXIsIHZtLCBzdGF0ZS53YXRjaHBvaW50
cywgY29kZUJsb2NrLCBzdHViSW5mbywgKm5ld0Nhc2UpOworICAgICAgICBjb21taXQobG9ja2Vy
LCB2bSwgc3RhdGUud2F0Y2hwb2ludHMsIG93bmVyLCBzdHViSW5mbywgKm5ld0Nhc2UpOwogICAg
ICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBuZXdDYXNlLT5ndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVjayhzdHViSW5mbyk7CiAgICAgICAgIGlmIChuZXdDYXNlLT51c2VzUG9seVByb3Rv
KCkpCiAgICAgICAgICAgICBjYW5CZVNoYXJlZCA9IGZhbHNlOwpAQCAtNTkzLDEwICs2MDAsMTAg
QEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICByZXR1
cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdChyZXN1bHRLaW5kLCBtX3N0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKICAgICB9OwogCi0gICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgc3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgaWYgKHN0YXRlLnVzZURhdGFJQygpKSB7CiAg
ICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7CiAgICAgICAgICAg
ICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVj
dGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCiAgICAgICAgICAgICAvLyBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZl
ciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNv
IHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgpAQCAtNzk1LDcgKzgwMiw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgY2FsbFNp
dGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2Vw
dGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCi0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
IHsKKyAgICBpZiAoc3RhdGUudXNlRGF0YUlDKCkpIHsKICAgICAgICAgZmFpbHVyZS5saW5rKCZq
aXQpOwogICAgICAgICAvLyBJbiBBUk02NCwgd2UgZG8gbm90IHB1c2ggYW55dGhpbmcgb24gc3Rh
Y2sgc3BlY2lhbGx5LgogICAgICAgICAvLyBTbyB3ZSBjYW4ganVzdCBqdW1wIHRvIHRoZSBzbG93
LXBhdGggZXZlbiB0aG91Z2ggdGhpcyB0aHVuayBpcyBjYWxsZWQgKG5vdCBqdW1wZWQpLgpAQCAt
ODA2LDcgKzgxMyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MK
IAogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0aW5lPiBzdHViOwogICAg
IEZpeGVkVmVjdG9yPFN0cnVjdHVyZUlEPiB3ZWFrU3RydWN0dXJlcyhXVEZNb3ZlKHN0YXRlLndl
YWtTdHJ1Y3R1cmVzKSk7Ci0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY2FuQmVT
aGFyZWQpIHsKKyAgICBpZiAoc3RhdGUudXNlRGF0YUlDKCkgJiYgY2FuQmVTaGFyZWQpIHsKICAg
ICAgICAgU2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXIgc2VhcmNoZXIgewogICAgICAgICAgICAg
c3R1YkluZm8uYmFzZUdQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLnZhbHVlR1BSLApAQCAtODIz
LDcgKzgzMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAg
ICAgICAgfQogICAgIH0KIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9j
aywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgb3duZXIsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoUG9seW1v
cnBoaWNBY2Nlc3NJbnRlcm5hbDo6dmVyYm9zZSwgIkRpZCBmYWlsIHRvIGFsbG9jYXRlLiIpOwog
ICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwpAQCAtODMxLDIy
ICs4MzgsMjMgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc3VjY2Vzc0xhYmVsID0gc3R1
YkluZm8uZG9uZUxvY2F0aW9uOwogCi0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisg
ICAgaWYgKHN0YXRlLnVzZURhdGFJQygpKQogICAgICAgICBBU1NFUlQoc3RhdGUuc3VjY2Vzcy5l
bXB0eSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nl
c3MsIHN1Y2Nlc3NMYWJlbCk7CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhmYWlsdXJlLCBzdHVi
SW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24pOwogICAgIH0KICAgICAKLSAgICBkYXRhTG9nTG5J
ZihQb2x5bW9ycGhpY0FjY2Vzc0ludGVybmFsOjp2ZXJib3NlLCBGdWxsQ29kZU9yaWdpbihjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNvZGVPcmlnaW4pLCAiOiBHZW5lcmF0aW5nIHBvbHltb3JwaGljIGFj
Y2VzcyBzdHViIGZvciAiLCBsaXN0RHVtcChjYXNlcykpOworICAgIC8vIE9PUFMKKyAgICAvL2Rh
dGFMb2dMbklmKFBvbHltb3JwaGljQWNjZXNzSW50ZXJuYWw6OnZlcmJvc2UsIEZ1bGxDb2RlT3Jp
Z2luKGNvZGVCbG9jaywgc3R1YkluZm8uY29kZU9yaWdpbiksICI6IEdlbmVyYXRpbmcgcG9seW1v
cnBoaWMgYWNjZXNzIHN0dWIgZm9yICIsIGxpc3REdW1wKGNhc2VzKSk7CiAKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGUgPSBGSU5BTElaRV9DT0RF
X0ZPUigKICAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgIiVzIiwgdG9DU3RyaW5nKCJBY2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9j
aywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nl
c3NMYWJlbCwgIjogIiwgbGlzdER1bXAoY2FzZXMpKS5kYXRhKCkpOwogICAgIAotICAgIHN0dWIg
PSBjcmVhdGVJQ0pJVFN0dWJSb3V0aW5lKGNvZGUsIFdURk1vdmUoa2V5cyksIFdURk1vdmUod2Vh
a1N0cnVjdHVyZXMpLCB2bSwgY29kZUJsb2NrLCBkb2VzQ2FsbHMsIGNlbGxzVG9NYXJrLCBXVEZN
b3ZlKHN0YXRlLm1fY2FsbExpbmtJbmZvcyksIGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFu
ZGxlcnMsIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyk7CisgICAgc3R1YiA9IGNy
ZWF0ZUlDSklUU3R1YlJvdXRpbmUoY29kZSwgV1RGTW92ZShrZXlzKSwgV1RGTW92ZSh3ZWFrU3Ry
dWN0dXJlcyksIHZtLCBvd25lciwgZG9lc0NhbGxzLCBjZWxsc1RvTWFyaywgV1RGTW92ZShzdGF0
ZS5tX2NhbGxMaW5rSW5mb3MpLCBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLCBj
YWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcpOwogCi0gICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpIHsKKyAgICBpZiAoc3RhdGUudXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYg
KGNhbkJlU2hhcmVkKQogICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJl
ZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQ
Uiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5m
by51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDI3ODY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTIgKzE0MSwxMiBAQCBwdWJsaWM6CiAgICAg
Ly8gV2hlbiB0aGlzIGZhaWxzIChyZXR1cm5zIEdhdmVVcCksIHRoaXMgd2lsbCBsZWF2ZSB0aGUg
b2xkIHN0dWIgaW50YWN0IGJ1dCB5b3Ugc2hvdWxkIG5vdCB0cnkKICAgICAvLyB0byBjYWxsIHRo
aXMgbWV0aG9kIGFnYWluIGZvciB0aGF0IFBvbHltb3JwaGljQWNjZXNzIGluc3RhbmNlLgogICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgYWRkQ2FzZXMoCi0gICAgICAgIGNvbnN0IEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBW
ZWN0b3I8UmVmUHRyPEFjY2Vzc0Nhc2U+LCAyPik7CisgICAgICAgIGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFZNJiwgSlNDZWxsKiwgU3RydWN0dXJlU3R1YkluZm8mLCBWZWN0b3I8
UmVmUHRyPEFjY2Vzc0Nhc2U+LCAyPik7CiAKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFk
ZENhc2UoCi0gICAgICAgIGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBSZWY8QWNjZXNzQ2FzZT4pOworICAgICAgICBj
b25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEpTQ2VsbCosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgUmVmPEFjY2Vzc0Nhc2U+KTsKICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEVDTUFNb2RlLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXImLCBWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRUNNQU1vZGUsIFN0
cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0xODIsNyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOwogICAgIAogICAgIHZv
aWQgY29tbWl0KAotICAgICAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYs
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLAorICAgICAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImLCBWTSYsIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm8+JiwgSlNDZWxsKiwgU3RydWN0dXJlU3R1YkluZm8mLAogICAgICAgICBBY2Nlc3NDYXNl
Jik7CiAKICAgICBMaXN0VHlwZSBtX2xpc3Q7CkBAIC0xOTAsOCArMTkwLDEwIEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93
YXRjaHBvaW50czsKIH07CiAKK2Jvb2wgdXNlRGF0YUlDKEpTQ2VsbCogb3duZXIpOworCiBzdHJ1
Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAg
ICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFQ01BTW9kZSBlY21hTW9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQ2VsbCogb3du
ZXIpCiAgICAgICAgIDogbV92bSh2bSkgCiAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0KQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCkBAIC0yMDAsNiArMjAyLDkg
QEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgICAgICwgbV9jYWxjdWxhdGVk
UmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKGZhbHNlKQogICAgICAgICAsIG1f
bmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbihmYWxzZSkKICAgICAgICAgLCBtX2Nh
bGN1bGF0ZWRDYWxsU2l0ZUluZGV4KGZhbHNlKQorICAgICAgICAsIG1fdXNlRGF0YUlDKDo6SlND
Ojp1c2VEYXRhSUMob3duZXIpKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAg
ICAgICAgLCBtX293bmVyKG93bmVyKQogICAgIHsKICAgICAgICAgdS50aGlzR1BSID0gSW52YWxp
ZEdQUlJlZzsKICAgICB9CkBAIC0yNzcsNiArMjgyLDEwIEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUgewogICAgICAgICBtX3NwaWxsU3RhdGVGb3JKU0dldHRlclNldHRlciA9IHNwaWxs
U3RhdGU7CiAgICAgfQogICAgIFNwaWxsU3RhdGUgc3BpbGxTdGF0ZUZvckpTR2V0dGVyU2V0dGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zcGlsbFN0YXRlRm9ySlNHZXR0ZXJTZXR0ZXI7IH0KKworICAg
IENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICBKU0Nl
bGwqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQorICAgIGJvb2wgdXNlRGF0YUlDKCkgY29u
c3QgeyByZXR1cm4gbV91c2VEYXRhSUM7IH0KICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxT
aXRlKCk7CkBAIC0yODgsNiArMjk3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NhbGN1bGF0
ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcgOiAxOwogICAgIGJvb2wgbV9u
ZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uIDogMTsKICAgICBib29sIG1fY2FsY3Vs
YXRlZENhbGxTaXRlSW5kZXggOiAxOworICAgIGJvb2wgbV91c2VEYXRhSUMgOiAxOworCisgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBKU0NlbGwqIG1fb3duZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjc4NjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQwLDExICsxNDAsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRU
b0RpZSgpCiB9CiAKIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm86OmFk
ZEFjY2Vzc0Nhc2UoCi0gICAgY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBFQ01B
TW9kZSBlY21hTW9kZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudCwgUmVmUHRyPEFjY2Vzc0Nh
c2U+IGFjY2Vzc0Nhc2UpCisgICAgY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3duZXIsIEVDTUFNb2Rl
IGVjbWFNb2RlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50LCBSZWZQdHI8QWNjZXNzQ2FzZT4g
YWNjZXNzQ2FzZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBWTSYgdm0gPSBj
b2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFT
U0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQgPSAoWyZdICgpIC0+IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgewogICAgICAgICBpZiAo
U3RydWN0dXJlU3R1YkluZm9JbnRlcm5hbDo6dmVyYm9zZSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKG1fY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6U3R1YikgewotICAgICAgICAgICAgcmVzdWx0ID0gdS5zdHViLT5hZGRD
YXNlKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgKnRoaXMsIGFjY2Vzc0Nhc2UucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgICAgICByZXN1bHQgPSB1LnN0dWItPmFkZENhc2UobG9ja2VyLCB2bSwg
b3duZXIsICp0aGlzLCBhY2Nlc3NDYXNlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlU3R1YkluZm9JbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJIYWQgc3R1YiwgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIp
OwpAQCAtMTczLDEzICsxNzMsMTMgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVT
dHViSW5mbwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nh
c2U+LCAyPiBhY2Nlc3NDYXNlczsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBwcmV2
aW91c0Nhc2UgPSBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVCbG9j
aywgaWRlbnQsICp0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcHJldmlvdXNDYXNlID0gQWNjZXNz
Q2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBvd25lciwgaWRlbnQsICp0aGlzKTsKICAg
ICAgICAgICAgIGlmIChwcmV2aW91c0Nhc2UpCiAgICAgICAgICAgICAgICAgYWNjZXNzQ2FzZXMu
YXBwZW5kKFdURk1vdmUocHJldmlvdXNDYXNlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgcmVzdWx0ID0gYWNjZXNzLT5hZGRDYXNlcyhsb2NrZXIsIHZtLCBjb2RlQmxv
Y2ssICp0aGlzLCBXVEZNb3ZlKGFjY2Vzc0Nhc2VzKSk7CisgICAgICAgICAgICByZXN1bHQgPSBh
Y2Nlc3MtPmFkZENhc2VzKGxvY2tlciwgdm0sIG93bmVyLCAqdGhpcywgV1RGTW92ZShhY2Nlc3ND
YXNlcykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlU3R1YkluZm9J
bnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGVkIHN0dWIs
IHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIFBvbHltb3JwaGljQWNj
ZXNzLgogICAgICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgICAgICAKLSAgICAg
ICAgcmVzdWx0ID0gdS5zdHViLT5yZWdlbmVyYXRlKGxvY2tlciwgdm0sIGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBlY21hTW9kZSwgKnRoaXMpOworICAgICAgICByZXN1bHQgPSB1LnN0dWItPnJl
Z2VuZXJhdGUobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBvd25lciwgZWNtYU1vZGUsICp0aGlz
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mb0ludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiUmVnZW5lcmF0aW9uIHJlc3VsdDogIiwgcmVzdWx0
LCAiXG4iKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVj
dHVyZVN0dWJJbmZvCiAgICAgICAgIGJ1ZmZlcmluZ0NvdW50ZG93biA9IE9wdGlvbnM6OnJlcGF0
Y2hCdWZmZXJpbmdDb3VudGRvd24oKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9KSgp
OwotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIob3duZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyNzg2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENv
ZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQs
IENhY2hlYWJsZUlkZW50aWZpZXIpOwogICAgIHZvaWQgaW5pdEluQnlJZFNlbGYoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCi0gICAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCBhZGRBY2Nlc3NDYXNlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRUNNQU1vZGUsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIFJlZlB0cjxBY2Nlc3NDYXNlPik7CisgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCBhZGRBY2Nlc3NDYXNlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNDZWxsKiwgRUNNQU1vZGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFJlZlB0
cjxBY2Nlc3NDYXNlPik7CiAKICAgICB2b2lkIHJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ckJhc2UmLCBDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAyNzg2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxOSArNzEsMTggQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWRQdXRJQ0NhbGxUYXJn
ZXQoSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgIGlmICh1c2VEYXRhSUMob3duZXIpKQogICAg
ICAgICByZXR1cm4gc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uLnJldGFnZ2VkPENGdW5jdGlvblB0
clRhZz4oKTsKICAgICBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwgPSBz
dHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uOwogI2lmIEVOQUJMRShGVExfSklUKQorICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KG93bmVyKTsKICAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7CiAgICAgICAgIEZ1
bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENh
bGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxl
QWRkcmVzcygpKTsKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtl
eUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0
aW9uUHRyVGFnPigpOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7
CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8T3BlcmF0aW9uUHRy
VGFnPihjYWxsKTsKICAgICByZXR1cm4gdGFyZ2V0LnJldGFnZ2VkPENGdW5jdGlvblB0clRhZz4o
KTsKQEAgLTEwOCwxMyArMTA3LDEzIEBAIHZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENv
ZGVCbG9jayoKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pCiB7Ci0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAg
ICBpZiAodXNlRGF0YUlDKG93bmVyKSkgewogICAgICAgICBzdHViSW5mby5tX3Nsb3dPcGVyYXRp
b24gPSBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbiwgbmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChqc0Nhc3Q8Q29kZUJsb2NrKj4ob3duZXIpLCBz
dHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAK
IGVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewpAQCAtMTY3NSwyOCArMTY3NCwyOCBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNhbGxMaW5rSW5mby5y
ZW1vdmUoKTsKIH0KIAotdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQordm9pZCByZXNldEdldEJ5
KEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtp
bmQpCiB7Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKG93bmVyLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlv
bihraW5kKSk7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUtpbmQ6Ok5vcm1h
bDoKICAgICBjYXNlIEdldEJ5S2luZDo6V2l0aFRoaXM6CiAgICAgY2FzZSBHZXRCeUtpbmQ6OlRy
eToKICAgICBjYXNlIEdldEJ5S2luZDo6RGlyZWN0OgogICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3Moc3R1YkluZm8pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5
S2luZDo6Tm9ybWFsQnlWYWw6CiAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhvd25lciwgc3R1YkluZm8pOwog
ICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnlJ
RChKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgdXNp
bmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVy
cHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0
dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxs
VGFyZ2V0KG93bmVyLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgRnVuY3Rp
b25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwpAQCAtMTcxMyw0OSArMTcxMiw0OSBAQCB2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0K
IAotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVk
RnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChvd25lciwgc3R1Yklu
Zm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzKHN0dWJJbmZvKTsKIH0KIAotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQordm9p
ZCByZXNldERlbEJ5KEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
RGVsQnlLaW5kIGtpbmQpCiB7CiAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpOb3JtYWwpCi0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChvd25lciwg
c3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZWxzZQotICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nl
c3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChvd25lciwgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhvd25lciwgc3R1YkluZm8pOwogfQogCi12b2lkIHJlc2V0SW5CeShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBr
aW5kKQordm9pZCByZXNldEluQnkoSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBJbkJ5S2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2Ug
SW5CeUtpbmQ6Ok5vcm1hbDoKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7Ci0gICAgICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwob3duZXIsIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSk7CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3Moc3R1
YkluZm8pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluQnlLaW5kOjpOb3JtYWxCeVZhbDoK
LSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUpOwotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwob3duZXIsIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpOworICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3Mob3duZXIsIHN0dWJJbmZvKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQogCi12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldEluc3RhbmNlT2YoSlNDZWxsKiBv
d25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsK
LSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChvd25l
ciwgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNj
ZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKG93bmVyLCBz
dHViSW5mbyk7CiB9CiAKLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldENoZWNrUHJp
dmF0ZUJyYW5kKEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsK
LSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKG93bmVyLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKG93bmVyLCBzdHViSW5mbyk7CiB9CiAKLXZvaWQgcmVz
ZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKG93bmVyLCBz
dHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOworICAgIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhvd25lciwg
c3R1YkluZm8pOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNU
b1dhc21JQ0NvZGVQdHIoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTT2Jq
ZWN0KiBjYWxsZWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNp
b24gMjc4NjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFt
ZSosIENhbGxMaW5rCiB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYp
Owogdm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxs
VmFyaWFudCk7Ci12b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBHZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKLXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IERlbEJ5S2luZCk7Ci12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEluQnlLaW5kKTsKLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRHZXRCeShKU0NlbGwqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEdldEJ5S2luZCk7Cit2b2lkIHJlc2V0UHV0QnlJRChKU0NlbGwqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwordm9pZCByZXNldERlbEJ5KEpTQ2VsbCosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgRGVsQnlLaW5kKTsKK3ZvaWQgcmVzZXRJbkJ5KEpTQ2VsbCosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgSW5CeUtpbmQpOwordm9pZCByZXNldEluc3RhbmNlT2YoSlNDZWxsKiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKK3ZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChKU0NlbGwqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwordm9pZCByZXNldFNldFByaXZhdGVCcmFuZChKU0NlbGwqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwogdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29k
ZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09i
amVjdCogY2FsbGVlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
LmgJKHJldmlzaW9uIDI3ODY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMywxMSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGVudW0gSlNUeXBlIDogdWludDhfdCB7Ci0gICAgLy8gVGhlIENlbGxUeXBlIHZhbHVlIG11
c3QgY29tZSBiZWZvcmUgYW55IEpTVHlwZSB0aGF0IGlzIGEgSlNDZWxsLgotICAgIENlbGxUeXBl
LAogICAgIFN0cmluZ1R5cGUsCisgICAgU3RyaW5nV2l0aFRodW5rc1R5cGUsCisKKyAgICBDZWxs
VHlwZSwKKwogICAgIEhlYXBCaWdJbnRUeXBlLAogICAgIExhc3RNYXliZUZhbHN5Q2VsbFByaW1p
dGl2ZSA9IEhlYXBCaWdJbnRUeXBlLAogICAgIFN5bWJvbFR5cGUsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>