<?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>148718</bug_id>
          
          <creation_ts>2015-09-02 10:39:55 -0700</creation_ts>
          <short_desc>GetById inline caches should use the One True Stub approach rather than a linked list of stubs</short_desc>
          <delta_ts>2015-09-04 15:03:51 -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>Other</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>148717</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148725</dependson>
    
    <dependson>148743</dependson>
    
    <dependson>148766</dependson>
          <blocked>148717</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122858</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-02 10:39:55 -0700</bug_when>
    <thetext>Instead of doing https://bugs.webkit.org/show_bug.cgi?id=148717 all at once, I will tackle the GetById caches first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123068</commentid>
    <comment_count>1</comment_count>
      <attachid>260488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-02 22:36:55 -0700</bug_when>
    <thetext>Created attachment 260488
a small start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123105</commentid>
    <comment_count>2</comment_count>
      <attachid>260502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 11:44:40 -0700</bug_when>
    <thetext>Created attachment 260502
more

Oh man, this is painful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123227</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 17:20:30 -0700</bug_when>
    <thetext>It seems like I should probably do this at the same time as https://bugs.webkit.org/show_bug.cgi?id=148717, because my approach involves moving logic out of StructureStubInfo/Repatch and into PolymorphicGetByIdList.  But a lot of that logic is shared by the put_by_id paths, so probably PolymorphicPutByIdList should be folded into PolymorphicGetByIdList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123276</commentid>
    <comment_count>4</comment_count>
      <attachid>260550</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 19:13:03 -0700</bug_when>
    <thetext>Created attachment 260550
getting interesting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123659</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-04 15:03:51 -0700</bug_when>
    <thetext>I think that it&apos;s better to handle all of the inline caches in one go, rather than trying to just fix get_by_id.

*** This bug has been marked as a duplicate of bug 148717 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260488</attachid>
            <date>2015-09-02 22:36:55 -0700</date>
            <delta_ts>2015-09-03 11:44:40 -0700</delta_ts>
            <desc>a small start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11689</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBHZXRC
eUlkR2VuZXJhdGlvblN0YXRlIHsKKyAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBudWxscHRyIH07CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIEdQUlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoIHsgZmFs
c2UgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXImKT4gY2FsbGJh
Y2tzOworfTsKKwogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCkBAIC03MSwxMSArODIsNDMgQEAgYm9vbCBH
ZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtJbmZvKQorICAgICAg
ICBtX2NhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpOwogICAgIHJldHVybiB0
cnVlOwogfQogCit2b2lkIEdldEJ5SWRBY2Nlc3M6OmdlbmVyYXRlV2l0aEd1YXJkKAorICAgIEdl
dEJ5SWRHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxs
VGhyb3VnaCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisKKyAgICBp
ZiAodmlhUHJveHkoKSkgeworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICBqaXQu
bG9hZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BS
LCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BS
KTsKKworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNo
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuZ2V0
KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAg
ICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9z
dHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7Cit9CisKIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCkKQEAgLTEzMCwyMiArMTczLDEyOCBAQCBib29sIFBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OmlzQWxtb3N0RnVsCiAgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUgLSAxOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQ
YXRjaGluZygpIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6cmVnZW5lcmF0ZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2lt
cGxlSW5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgR2V0QnlJZEdlbmVyYXRp
b25TdGF0ZSBzdGF0ZTsKKworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOworICAgIAor
ICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpKTsKKyAgICBzdGF0ZS5zY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICBzdGF0ZS5u
ZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKKyAgICAK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAm
aml0OworICAgIAorICAgIGlmIChzdGF0ZS5uZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAg
ICBzdGF0ZS5zY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxlcHJzOjpzZWxlY3RTY3JhdGNoR1BSKAor
ICAgICAgICAgICAgc3RhdGUuYmFzZUdQUiwgc3RhdGUudmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0
ZS52YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LnB1c2hUb1NhdmUoc3RhdGUu
c2NyYXRjaEdQUik7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc3VjY2VzczsKKworICAgIGF1dG8gcmVzdG9yZVNjcmF0Y2ggPSBbJl0gKCkg
eworICAgICAgICBpZiAoc3RhdGUubmVlZFRvUmVzdG9yZVNjcmF0Y2gpCisgICAgICAgICAgICBq
aXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOworICAgIH07CisKKyAgICBib29sIGFsbEd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0
KQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMg
aXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFueXdheS4KKyAgICAgICAg
c3RhdGUuZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5h
cnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNv
cnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYg
d2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9saXN0KSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgZW50cnktPmdlbmVyYXRlV2l0aEd1YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7
CisgICAgICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICAgICAgc3VjY2Vzcy5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQo
ZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMobV9saXN0LnNpemUoKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KG1fbGlzdFtpXS0+c3Ry
dWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChz
dGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAg
ICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpIHsKKyAgICAgICAgICAgIEdldEJ5
SWRDYXNlJiBnZXRDYXNlID0gYXQoYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpKTsKKyAgICAgICAg
ICAgIGdldENhc2UuZ2VuZXJhdGUoc3RhdGUpOworICAgICAgICAgICAgcmVzdG9yZVNjcmF0Y2go
KTsKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRlLmZhaWx1cmUuYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsK
KyAgICB9CisKKyAgICBpZiAoc3RhdGUubmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAg
c3RhdGUuZmFpbHVyZS5saW5rKCZqaXQpOworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAg
ICAgICBzdGF0ZS5mYWlsdXJlID0gaml0Lmp1bXAoKTsKKyAgICB9CisKKyAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzdWNj
ZXNzTGFiZWwgPQorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOworICAgICAgICAKKyAgICBsaW5r
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKKworICAgIGxpbmtCdWZmZXIubGlu
aygKKyAgICAgICAgc3RhdGUuZmFpbHVyZSwKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkp
OworICAgIAorICAgIGZvciAoYXV0byBjYWxsYmFjayA6IHN0YXRlLmNhbGxiYWNrcykKKyAgICAg
ICAgY2FsbGJhY2sobGlua0J1ZmZlcik7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgY29kZUJMb2NrLCBsaW5rQnVmZmVy
LAorICAgICAgICAoIiVzIiwgdG9DU3RyaW5nKCJHZXQgYWNjZXNzIHN0dWIgZm9yICIsICpjb2Rl
QmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBz
dWNjZXNzTGFiZWwpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAo
YXV0byBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2Fs
bHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29k
ZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgcmV0
dXJuIGNvZGUuY29kZSgpOwogfQogCiBib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0
V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogewotICAgIGZvciAodW5z
aWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayhy
ZXBhdGNoQnVmZmVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHN0aWxs
VmFsaWQgPSB0cnVlOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoYXQoaSkudmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3RpbGxWYWxpZCA9IGZhbHNlOworICAgICAg
ICBtX2xpc3RbaS0tXSA9IHN0ZDo6bW92ZShtX2xpc3QubGFzdCgpKTsKKyAgICAgICAgbV9saXN0
LnJlbW92ZUxhc3QoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXN0aWxs
VmFsaWQpCisgICAgICAgIG1fc3R1YlJvdXRpbmUgPSBudWxscHRyOworCisgICAgcmV0dXJuIHN0
aWxsVmFsaWQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShy
ZXZpc2lvbiAxODkyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwxNCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q7CiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKK3N0cnVjdCBHZXRCeUlkR2VuZXJh
dGlvblN0YXRlOworCiBjbGFzcyBHZXRCeUlkQWNjZXNzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHZXRCeUlkQWNjZXNzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewogICAgICAgICBJbnZhbGlkLApAQCAtNTgsNyArNjMs
NyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgYm9v
bCB2aWFQcm94eSwgU3RydWN0dXJlKiwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdl
dEJ5SWRBY2Nlc3MoKTsKQEAgLTY5LDMxICs3NCwzOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIEFjY2Vzc1R5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGJvb2wgdmlhUHJveHkoKSBjb25z
dCB7IHJldHVybiBtX3ZpYVByb3h5OyB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQorICAgIGJvb2wgZ3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSBjb25zdCB7IHJldHVybiAhdmlhUHJveHkoKTsgfQogICAgIAogICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzdHVi
Um91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAg
IHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLSAgICAKICAgICBib29sIGRvZXND
YWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3Rv
bUdldHRlcjsgfQogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKSBjb25z
dDsKLQogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBj
bGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OworCisgICAgYm9vbCB2aXNpdFdlYWsoUmVwYXRj
aEJ1ZmZlciYpIGNvbnN0OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBr
aW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5z
IHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJl
LCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcwor
ICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3Vh
cmQoR2V0QnlJZEdlbmVyYXRpb25TdGF0ZSYsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxU
aHJvdWdoKTsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLCBhZGQgYSBqdW1wIHRv
IHRoZSBmYWlsdXJlIGxpc3Qgb24gZmFpbHVyZS4KKyAgICB2b2lkIGdlbmVyYXRlKEdldEJ5SWRH
ZW5lcmF0aW9uU3RhdGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBib29s
IG1fdmlhUHJveHk7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua0luZm8+IG1fY2FsbExpbmtJbmZvOwogfTsKIAogY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNHZXRCeUlkTGlzdCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgLy8gRWl0aGVyIGNy
ZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0
IGlzIGFscmVhZHkgaW4KQEAgLTEwMiwyNyArMTE0LDI4IEBAIHB1YmxpYzoKICAgICAKICAgICB+
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAg
dm9pZCBhZGRBY2Nlc3Moc3RkOjp1bmlxdWVfcHRyPEdldEJ5SWRBY2Nlc3M+JiYpOwogICAgIAog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQogICAgIGJv
b2wgaXNGdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1
ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29u
c3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ld
OyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRjaGluZygp
IGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0gICAgCisg
ICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1f
bGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlZ2VuZXJhdGUoVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCisg
ICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGpl
dHRpc29uZWQgb3VyIHN0dWIgcm91dGluZS4gSXQncyBzdGlsbAorICAgIC8vIHBvc3NpYmxlIHRv
IGFzayBmb3IgYSByZWdlbmVyYXRlZCBzdHViIHJvdXRpbmUuCiAgICAgYm9vbCB2aXNpdFdlYWso
UmVwYXRjaEJ1ZmZlciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2Rl
QmxvY2s7CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5m
byYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7CisKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdldEJ5SWRBY2Nlc3M+LCAyPiBtX2xpc3Q7CisgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260502</attachid>
            <date>2015-09-03 11:44:40 -0700</date>
            <delta_ts>2015-09-03 19:13:03 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17518</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTQgKzM1LDMyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgR2V0
QnlJZEdlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07
CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbHVyZTsKKyAgICBHUFJSZWcgYmFzZUdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCB7IGZh
bHNlIH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+IGNhbGxi
YWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudDsKK307CisKIEdldEJ5SWRBY2Nlc3M6
OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGJvb2wgdmlhUHJveHksCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgV2F0
Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCkKICAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCiAg
ICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0
dWJSb3V0aW5lKQogeworICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IGRvZXND
YWxscygpKSB7CisgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRh
PigpOworICAgICAgICBtX3JhcmVEYXRhLT52aWFQcm94eSA9IHZpYVByb3h5OworICAgICAgICBt
X3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICB9CiB9CiAKIEdl
dEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTYwLDcgKzc4LDYgQEAgR2V0QnlJZEFj
Y2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgIAogICAgIHJlc3VsdC5tX3R5cGUg
PSBTaW1wbGVJbmxpbmU7CiAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxT
bG93UGF0aCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcxLDExICs4OCwxNTMg
QEAgYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0
Y2hCdWZmZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtJbmZv
KQorICAgICAgICBtX2NhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpOwogICAg
IHJldHVybiB0cnVlOwogfQogCit2b2lkIEdldEJ5SWRBY2Nlc3M6OmdlbmVyYXRlV2l0aEd1YXJk
KAorICAgIEdldEJ5SWRHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0JiBmYWxsVGhyb3VnaCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7
CisKKyAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisg
ICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNl
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAg
ICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0
ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0ZS5z
Y3JhdGNoR1BSKTsKKworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBq
aXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7
Cit9CisKK3ZvaWQgR2V0QnlJZEFjY2Vzczo6Z2VuZXJhdGUoR2V0QnlJZEdlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFZN
JiB2bSA9ICpqaXQudm0oKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3Rh
dGUuc3R1YkluZm87CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7
CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAqc3RhdGUuaWRlbnQ7CisKKyAgICBBU1NF
UlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSk7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBjbGVhciBvdXQg
dGhlIG9sZCBzZXQgb2Ygd2F0Y2hwb2ludHMgaW4gc3R1YkluZm8uIE1heWJlIHdlIGNhbiBkbyBp
dCBpbgorICAgIC8vIHJlZ2VuZXJhdGUoKS4gQnV0IGl0IHdvdWxkIGJlIGJlc3QgaWYgdGhlIFBv
bHltb3JwaGljR2V0QnlJZExpc3QganVzdCBvd25lZCB0aGUgd2F0Y2hwb2ludHMgYW5kCisgICAg
Ly8gY291bGQgY2xlYXIgdGhlbSBieSBpdHNlbGYuCisgICAgCisgICAgaWYgKG1fc3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgbV9jb25kaXRpb25TZXQubmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRG
b3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKKworICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+
YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgewor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlv
bikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgfQorCisgICAg
aWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgIFN0cnVjdHVyZSogY3VyclN0
cnVjdHVyZTsKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQpOworICAgIH0KKworICAgIEdQUlJlZyBi
YXNlRm9yR2V0R1BSOworICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgIGJhc2VGb3JHZXRH
UFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZz
ZXQoKSksCisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgaWYgKG1fdHlwZSAhPSBTaW1wbGVNaXNzKSB7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisgICAg
fQorCisgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAo
bV90eXBlID09IFNpbXBsZU1pc3MpCisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5k
ZWZpbmVkKCksIHZhbHVlUmVncyk7CisgICAgZWxzZSBpZiAobV90eXBlICE9IEN1c3RvbUdldHRl
cikgeworICAgICAgICBpZiAobV90eXBlID09IFNpbXBsZSkKKyAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSOworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHN0
b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
Rm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1
ZUdQUjsKKyAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
b2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgIGlmIChraW5kID09IEdl
dFZhbHVlKSB7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQp
ICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAg
ICAgICB9CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBheWxvYWRP
ZmZzZXQpLAorICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlmCisgICAgfQorCisg
ICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgIENDYWxsSGVscGVyczo6Q2FsbCBv
cGVyYXRpb25DYWxsOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKworICAg
IC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRy
IGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
UGF0aENhbGw7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87Cit9CisKIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogewogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkK
QEAgLTEzMCwyMiArMjg5LDEyOSBAQCBib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxt
b3N0RnVsCiAgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUg
LSAxOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygp
IGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6cmVn
ZW5lcmF0ZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdl
dEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IEdldEJ5SWRHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAgICBzdGF0ZS5zdHViSW5mbyA9ICZz
dHViSW5mbzsKKyAgICBzdGF0ZS5pZGVudCA9ICZpZGVudDsKKyAgICAKKyAgICBzdGF0ZS5iYXNl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBz
dGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKKyNl
bmRpZgorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BS
KSk7CisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgc3RhdGUubmVlZFRvUmVzdG9yZVNj
cmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7CisgICAgCisgICAgQ0NhbGxIZWxw
ZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgc3RhdGUuaml0ID0gJmppdDsKKyAgICAKKyAg
ICBpZiAoc3RhdGUubmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3RhdGUuc2NyYXRj
aEdQUiA9IEFzc2VtYmx5SGVsZXByczo6c2VsZWN0U2NyYXRjaEdQUigKKyAgICAgICAgICAgIHN0
YXRlLmJhc2VHUFIsIHN0YXRlLnZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUudmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5wdXNoVG9TYXZlKHN0YXRlLnNjcmF0Y2hHUFIpOwor
ICAgIH0KKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKworICAgIGF1dG8g
cmVzdG9yZVNjcmF0Y2ggPSBbJl0gKCkgeworICAgICAgICBpZiAoc3RhdGUubmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpCisgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOworICAg
IH07CisKKyAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVD
aGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6
ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0
IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3
ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAg
ICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBo
YXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25l
IGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KSB7CisgICAgICAgICAgICBm
YWxsVGhyb3VnaC5saW5rKCZqaXQpOworICAgICAgICAgICAgZW50cnktPmdlbmVyYXRlV2l0aEd1
YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7CisgICAgICAgICAgICByZXN0b3JlU2NyYXRjaCgpOwor
ICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUu
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRl
LnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1
ZXMobV9saXN0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xp
c3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0
PGludDMyX3Q+KG1fbGlzdFtpXS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAgQmlu
YXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5h
cnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGpp
dCkpIHsKKyAgICAgICAgICAgIEdldEJ5SWRDYXNlJiBnZXRDYXNlID0gYXQoYmluYXJ5U3dpdGNo
LmNhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIGdldENhc2UuZ2VuZXJhdGUoc3RhdGUpOworICAg
ICAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWx1cmUuYXBwZW5kKGJpbmFy
eVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHN0YXRlLm5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHN0YXRlLmZhaWx1cmUu
bGluaygmaml0KTsKKyAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgc3RhdGUuZmFp
bHVyZSA9IGppdC5qdW1wKCk7CisgICAgfQorCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZt
LCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAobGlua0J1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3VjY2Vzc0xhYmVsID0KKyAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAgICAgICAgCisgICAgbGlua0J1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIHN0
YXRlLmZhaWx1cmUsCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAKKyAgICBm
b3IgKGF1dG8gY2FsbGJhY2sgOiBzdGF0ZS5jYWxsYmFja3MpCisgICAgICAgIGNhbGxiYWNrKGxp
bmtCdWZmZXIpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJ
WkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVCTG9jaywgbGlua0J1ZmZlciwKKyAgICAgICAgKCIl
cyIsIHRvQ1N0cmluZygiR2V0IGFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0
dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsKSkp
OworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gZW50cnkgOiBt
X2xpc3QpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisg
ICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMpOworICAgIHJldHVybiBjb2RlLmNvZGUo
KTsKIH0KIAogYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzdGlsbFZhbGlkID0gdHJ1ZTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGF0KGkpLnZpc2l0V2VhayhyZXBhdGNoQnVmZmVyKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHN0aWxsVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbV9saXN0W2ktLV0g
PSBzdGQ6Om1vdmUobV9saXN0Lmxhc3QoKSk7CisgICAgICAgIG1fbGlzdC5yZW1vdmVMYXN0KCk7
CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFzdGlsbFZhbGlkKQorICAgICAg
ICBtX3N0dWJSb3V0aW5lID0gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGlsbFZhbGlkOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5Mjcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTUgKzM4LDE4IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKIHN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAorc3RydWN0IEdldEJ5SWRHZW5lcmF0aW9uU3RhdGU7CisK
IGNsYXNzIEdldEJ5SWRBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdldEJ5SWRB
Y2Nlc3MpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0g
QWNjZXNzVHlwZSB7CiAgICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8g
VGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAv
LyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIFNpbXBsZSwK
ICAgICAgICAgR2V0dGVyLAogICAgICAgICBDdXN0b21HZXR0ZXIsCiAgICAgICAgIFNpbXBsZU1p
c3MsCkBAIC01OCw4ICs2MSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFj
Y2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBi
b29sIHZpYVByb3h5LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRB
Y2Nlc3MoKTsKICAgICAKQEAgLTY5LDMxICs3Myw1MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIEFjY2Vzc1R5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9CiAg
ICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZS5nZXQoKTsgfQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdCB7IHJl
dHVybiAhdmlhUHJveHkoKTsgfQogICAgIAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQot
ICAgIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgp
OwotICAgIH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdCB7IG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0LmdldCgpIDogbnVsbHB0cjsgfQog
ICAgIAogICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRl
ciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWso
UmVwYXRjaEJ1ZmZlciYpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2Rl
QmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7CisKKyAgICBi
b29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikgY29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91
Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRzIG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwt
dGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJl
bnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0
IGNhc2UgYnV0IGl0IG5lZWRzCisgICAgLy8gaGVscCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAg
dm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChHZXRCeUlkR2VuZXJhdGlvblN0YXRlJiwgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1
Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZv
aWQgZ2VuZXJhdGUoR2V0QnlJZEdlbmVyYXRpb25TdGF0ZSYpOwogICAgIAogICAgIEFjY2Vzc1R5
cGUgbV90eXBlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGlu
ZTsKKworICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgcHVibGljOgorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQdHI8
V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmFyZURhdGE+IG1fcmFyZURhdGE7CiB9OwogCiBjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeSBpbgpAQCAtMTAyLDI3ICsxMjUsMjggQEAgcHVibGljOgogICAgIAogICAgIH5Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KCk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1
cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0Owot
ICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICB2b2lk
IGFkZEFjY2VzcyhzdGQ6OnVuaXF1ZV9wdHI8R2V0QnlJZEFjY2Vzcz4mJik7CiAgICAgCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAgICAgYm9vbCBp
c0Z1bGwoKSBjb25zdDsKICAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlm
IGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29u
c3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBj
b25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0
W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmVnZW5lcmF0ZShWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRl
bnRpZmllciYpOworCisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gaXQgbWVhbnMg
dGhhdCB3ZSBoYXZlIGpldHRpc29uZWQgb3VyIHN0dWIgcm91dGluZS4gSXQncyBzdGlsbAorICAg
IC8vIHBvc3NpYmxlIHRvIGFzayBmb3IgYSByZWdlbmVyYXRlZCBzdHViIHJvdXRpbmUuCiAgICAg
Ym9vbCB2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBt
X2xpc3Q7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdldEJ5SWRBY2Nlc3M+LCAyPiBt
X2xpc3Q7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KLSAg
ICAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260550</attachid>
            <date>2015-09-03 19:13:03 -0700</date>
            <delta_ts>2015-09-03 19:13:03 -0700</delta_ts>
            <desc>getting interesting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44618</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM1LDU2ICszNSwyNzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxI
ZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
IHsgbnVsbHB0ciB9OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbHVyZTsKKyAgICBH
UFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgYm9vbCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248
dm9pZChMaW5rQnVmZmVyJik+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dDsKK307CisKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgYm9vbCB2aWFQcm94
eSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KQog
ICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX3N0cnVj
dHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKICAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7CisgICAgaWYgKHZpYVBy
b3h5IHx8IGFkZGl0aW9uYWxTZXQgfHwgZG9lc0NhbGxzKCkpIHsKKyAgICAgICAgbV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAgIG1fcmFyZURhdGEtPnZp
YVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSBh
ZGRpdGlvbmFsU2V0OworICAgIH0KIH0KIAotR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3Mo
KQorQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQogewogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5
SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCitBY2Nlc3NDYXNlIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRp
YWxTbG93UGF0aCA9CiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgIAotICAgIEdl
dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIEFjY2Vzc0Nhc2UgcmVzdWx0OwogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
KTsKICAgICAKICAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwogICAgIHJlc3VsdC5t
X3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwogICAgIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QK
K2Jvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHsKICAgICBpZiAobV9z
dHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yYXJlRGF0YSAmJiBtX3JhcmVE
YXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlz
aXRXZWFrKHZtKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAorICAgIEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQoreworICAg
IENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIGlmICh2aWFQcm94eSgpKSB7
CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2g4KAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOworCisgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworCisgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZS5nZXQoKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hT
dHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZS5nZXQoKSkp
OworICAgIH0KKworICAgIGdlbmVyYXRlKHN0YXRlKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIENDYWxsSGVscGVy
cyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gKnN0YXRlLmlkZW50OworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNF
bnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAg
Ly8gRklYTUU6IE5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgc2V0IG9mIHdhdGNocG9pbnRzIGlu
IHN0dWJJbmZvLiBNYXliZSB3ZSBjYW4gZG8gaXQgaW4KKyAgICAvLyByZWdlbmVyYXRlKCkuIEJ1
dCBpdCB3b3VsZCBiZSBiZXN0IGlmIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBqdXN0IG93bmVkIHRo
ZSB3YXRjaHBvaW50cyBhbmQKKyAgICAvLyBjb3VsZCBjbGVhciB0aGVtIGJ5IGl0c2VsZi4KKyAg
ICAKKyAgICBpZiAobV9zdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8
fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAg
IHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAg
ICAgICAgYWRkaXRpb25hbFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKKworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAg
ICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmpl
Y3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZCgKKyAgICAg
ICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUpKTsKKyAgICB9CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IG1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgICAgICBjdXJyU3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7
CisgICAgfQorCisgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAgaWYgKHZpYVByb3h5KCkp
IHsKKyAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIp
OworICAgIH0gZWxzZQorICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKKworICAgIEdQ
UlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAobV90eXBlICE9
IFNpbXBsZU1pc3MpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCkpLAorICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9
IHNjcmF0Y2hHUFIKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BS
ID0gYmFzZUZvckdldEdQUjsKKyAgICB9CisKKyAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgIGlmIChtX3R5cGUgPT0gU2ltcGxlTWlzcykKKyAgICAgICAgaml0
Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICBlbHNlIGlm
IChtX3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIpIHsKKyAg
ICAgICAgaWYgKG1fdHlwZSA9PSBTaW1wbGUpCisgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBzdG9yYWdlR1BS
ID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vz
c0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBsb2Fk
ZWRWYWx1ZUdQUik7CisgICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7Cisg
ICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkp
LCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICBpZiAobV90eXBlID09IFNpbXBsZSkg
eworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09m
ZnNldCksCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgfQor
ICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwK
KyAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIFN0
dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgaGFuZGxlckNhbGw7CisKKyAgICAvLyBTdHVm
ZiBmb3IgSlMgZ2V0dGVycy4KKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNz
T2ZMaW5rRnVuY3Rpb25DaGVjazsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdFBhdGhDYWxs
OworICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgc3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbDsKKyAgICBpZiAo
bV90eXBlICE9IFNpbXBsZSAmJiBtX3R5cGUgIT0gU2ltcGxlTWlzcykgeworICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBm
dXR1cmUsIHdlIHJlbWVtYmVyIHRoZQorICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQg
ZnJvbS4KKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90
eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBh
IEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0
aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNh
bGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGlu
Y2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgLy8gICBj
b2RlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9y
YXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVu
CisgICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCisKKyAgICAgICAgICAgIG1fcmFyZURh
dGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOworICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1Yklu
Zm8uY29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFy
Z3VtZW50LgorICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKKyAg
ICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEg
c2V0dGVyLgorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNz
b3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4K
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2Fk
ZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAor
ICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNo
VGVzdFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIGxvYWRlZFZhbHVl
R1BSKTsKKworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIZXJlJ3Mg
dGhlIGJhc2ljIGlkZWEgb2YgaG93IHRoaXMgc2hvdWxkIHdvcms6CisgICAgLy8gLSBBbnl0aGlu
ZyBpbiBTdHJ1Y3R1cmVTdHViSW5mbyB0aGF0IHJlcXVpcmVzIG91dC1vZi1saW5lIGNvZGUgb3Ig
d2F0Y2hwb2ludHMgc2hvdWxkIHVzZSBhIGxpc3QuCisgICAgLy8gLSBBIGxpc3Qgc2hvdWxkIGhh
dmUgYWNjZXNzIHRvIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBzbyB0aGF0IGl0IGNhbiBjbGVhciBp
dC4KKyAgICAvLyAtIEEgc3R1YiBzaG91bGQga25vdyBvZiBhIHN0YXRlIHdoZXJlIGl0IGlzIGNs
ZWFyLCBidXQgaGFzIGEgbGlzdC4gVGhpcyBtZWFucyB0aGF0IHRoZSBsaXN0CisgICAgLy8gICBz
aG91bGQgcmVnZW5lcmF0ZS4KKyAgICAvLyAtIEFsbCB3YXRjaHBvaW50cyBzaG91bGQgaGFuZyBv
ZmYgdGhlIGxpc3QuCit9CisKK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcyhT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3Vuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9saXN0LmFw
cGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAg
ICBtX2xpc3QuYXBwZW5kKEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5m
bykpOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK1BvbHltb3JwaGljQWNjZXNzKiBQ
b2x5bW9ycGhpY0FjY2Vzczo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAg
ICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQogICAg
ICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwpAQCAtOTMsMTYgKzMxMSwx
NiBAQCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5CiAgICAgICAgIHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCiAgICAgICAgIHx8IHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKICAgICAKLSAgICBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5m
byk7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vz
cyhzdHViSW5mbyk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1v
cnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQ
b2x5bW9ycGhpY0FjY2Vzczo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykgY29uc3QKIHsKICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTEwLDcg
KzMyOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWQKICAgICBy
ZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwogfQogCi12
b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNz
JiBhY2Nlc3MpCit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjphZGRBY2Nlc3Moc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGFjY2VzcykKIHsKICAgICBBU1NFUlQoIWlzRnVsbCgpKTsKICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRp
bWUuCkBAIC0xMTgsMzQgKzMzNiwxNDEgQEAgdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojph
ZGRBY2Nlc3MoYwogICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6
OmlzRnVsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOwogICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjppc0FsbW9zdEZ1bGwoKSBjb25zdAogewog
ICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKICAgICBy
ZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7CiB9CiAKLWJv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK01hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSgKKyAgICBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsg
aS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBs
ZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSBzdGF0ZTsKKworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOworICAgIHN0YXRl
LmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IEpT
VmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKyAgICBzdGF0ZS5zY3Jh
dGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKKyAgICBzdGF0ZS5uZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0Y2hHUFIg
PT0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJs
b2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAmaml0OworICAgIAorICAgIGlmIChzdGF0ZS5uZWVkVG9S
ZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxl
cHJzOjpzZWxlY3RTY3JhdGNoR1BSKAorICAgICAgICAgICAgc3RhdGUuYmFzZUdQUiwgc3RhdGUu
dmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS52YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgaml0LnB1c2hUb1NhdmUoc3RhdGUuc2NyYXRjaEdQUik7CiAgICAgfQotICAgIHJldHVybiBm
YWxzZTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKworICAgIGF1dG8g
cmVzdG9yZVNjcmF0Y2ggPSBbJl0gKCkgeworICAgICAgICBpZiAoc3RhdGUubmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpCisgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOworICAg
IH07CisKKyAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVD
aGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6
ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0
IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3
ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAg
ICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBo
YXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25l
IGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KSB7CisgICAgICAgICAgICBm
YWxsVGhyb3VnaC5saW5rKCZqaXQpOworICAgICAgICAgICAgZW50cnktPmdlbmVyYXRlV2l0aEd1
YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7CisgICAgICAgICAgICByZXN0b3JlU2NyYXRjaCgpOwor
ICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUu
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRl
LnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1
ZXMobV9saXN0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xp
c3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0
PGludDMyX3Q+KG1fbGlzdFtpXS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAgQmlu
YXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5h
cnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGpp
dCkpIHsKKyAgICAgICAgICAgIEdldEJ5SWRDYXNlJiBnZXRDYXNlID0gYXQoYmluYXJ5U3dpdGNo
LmNhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIGdldENhc2UuZ2VuZXJhdGUoc3RhdGUpOworICAg
ICAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWx1cmUuYXBwZW5kKGJpbmFy
eVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUubmVlZFRvUmVz
dG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3RhdGUuZmFpbHVyZS5saW5rKCZqaXQpOworICAgICAg
ICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdGF0ZS5mYWlsdXJlID0gaml0Lmp1bXAoKTsK
KyAgICB9CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBzdWNjZXNzTGFiZWwgPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpOworICAgICAgICAKKyAgICBsaW5rQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVs
KTsKKworICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgc3RhdGUuZmFpbHVyZSwKKyAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIAorICAgIGZvciAoYXV0byBjYWxsYmFjayA6
IHN0YXRlLmNhbGxiYWNrcykKKyAgICAgICAgY2FsbGJhY2sobGlua0J1ZmZlcik7CisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAg
ICAgY29kZUJMb2NrLCBsaW5rQnVmZmVyLAorICAgICAgICAoIiVzIiwgdG9DU3RyaW5nKCJHZXQg
YWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwg
IiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwpKSk7CisKKyAgICBib29sIGRvZXND
YWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0byBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgZG9l
c0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGRvZXNDYWxscyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCi1ib29sIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Citib29sIFBvbHltb3Jw
aGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQg
aSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzdGlsbFZhbGlkID0gdHJ1ZTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKGF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBzdGlsbFZhbGlkID0gZmFsc2U7CisgICAgICAgIG1fbGlzdFtpLS1dID0gc3RkOjptb3ZlKG1f
bGlzdC5sYXN0KCkpOworICAgICAgICBtX2xpc3QucmVtb3ZlTGFzdCgpOwogICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmICghc3RpbGxWYWxpZCkKKyAgICAgICAgbV9zdHViUm91dGlu
ZSA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RpbGxWYWxpZDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOjE4OTMyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZGVm
aW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitj
bGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAg
ICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNo
ZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIu
CisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIsCisgICAgICAgIEN1c3RvbUdl
dHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAgICB9OworICAgIAorICAgIEdldEJ5SWRBY2Nl
c3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
R2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7
CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0aWMgR2V0QnlJZEFj
Y2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgQWNj
ZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQorICAg
IAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5l
KiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Cisg
ICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29s
IGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09
IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBBY2Nlc3NU
eXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAv
LyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0
aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
flBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29u
c3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAg
IAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0K
KyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAg
IGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8g
VHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCisgICAg
Y29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNlbGZQYXRjaGlu
ZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/CisgICAg
CisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0
dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisj
ZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsOTEgKzM4LDE3MCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7CiBzdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm87CiAKLWNsYXNzIEdldEJ5SWRBY2Nlc3Mgeworc3RydWN0IEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTsKKworY2xhc3MgQWNjZXNzQ2FzZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQWNjZXNzQ2FzZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgZW51bSBBY2Nlc3NUeXBlIHsKICAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2lt
cGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAg
IFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKKyAg
ICAgICAgTG9hZCwKKyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAg
ICAgTWlzcywKICAgICAgICAgR2V0dGVyLAorICAgICAgICBTZXR0ZXIsCiAgICAgICAgIEN1c3Rv
bUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlzcywKKyAgICAgICAgQ3VzdG9tU2V0dGVyLAorICAg
ICAgICBJbkhpdCwKKyAgICAgICAgSW5NaXNzCiAgICAgfTsKICAgICAKLSAgICBHZXRCeUlkQWNj
ZXNzKCkKKyAgICBBY2Nlc3NDYXNlKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKICAgICB7
CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSos
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgYm9vbCB2aWFQ
cm94eSwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICAgICAgV2F0Y2hwb2ludFNl
dCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jID0gbnVsbHB0cik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gdHJh
bnNpdGlvbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVwbGFj
ZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBz
ZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJl
KiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKLSAgICB+
R2V0QnlJZEFjY2VzcygpOworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAgCi0gICAgc3RhdGljIEdl
dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgc3RhdGljIEFjY2Vzc0Nhc2UgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJ
bnZhbGlkOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRh
LT52aWFQcm94eSA6IGZhbHNlOyB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAotICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2tpbmQgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgfQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdCB7IHJldHVy
biAhdmlhUHJveHkoKTsgfQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0
dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KICAgICAKLSAgICBKSVRTdHViUm91dGluZSog
c3R1YlJvdXRpbmUoKSBjb25zdAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAg
IHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAgICByZXR1cm4gbV9jaGFpbkRhdGEg
PyBtX2NoYWluRGF0YS0+Y29uZGl0aW9uU2V0IDogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KTsKICAgICB9CisKKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QgeyBt
X3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxwdHI7IH0K
ICAgICAKICAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0
ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQotICAgIAotICAgIGJvb2wgdmlzaXRXZWFr
KFZNJikgY29uc3Q7CiAKKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3Ro
ZXIpOworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZy
aWVuZCBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKKworICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRzIG9mIGZh
aWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhhdCB3ZQor
ICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRzCisgICAgLy8gaGVs
cCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7CisK
KyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVy
ZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2Ug
ZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCisg
ICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3Qg
dGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAgICAvLyBzdHJ1Y3R1
cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhp
bmQgdGhlIHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwot
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIC8vIFRoaXMgaXMgc3R1ZmYg
dGhhdCBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIHdlIGhhdmUgYSBwcm90b3R5cGUgY2hhaW4u
CisgICAgY2xhc3MgQ2hhaW5EYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm8+IHdhdGNocG9pbnRzOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhaW5E
YXRhPiBtX2NoYWluRGF0YTsKKworICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBib29sIHZpYVByb3h5Owor
ICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgIH0gY3Vz
dG9tQWNjZXNzb3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xhc3MgUG9s
eW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGljQWNj
ZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBFaXRo
ZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25l
IHRoYXQgaXMgYWxyZWFkeSBpbgogICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHlt
b3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3MqIGZyb20o
U3RydWN0dXJlU3R1YkluZm8mKTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7Cisg
ICAgflBvbHltb3JwaGljQWNjZXNzKCk7CiAgICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3Qg
R2V0QnlJZEFjY2VzcyYpOworICAgIHZvaWQgYWRkQWNjZXNzQ2FzZShzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4mJik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xpc3Quc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKICAgICBib29sIGlzQWxt
b3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2Ug
aXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAg
IGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2Vz
IFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZShWTSYsIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgLy8gSWYgdGhpcyByZXR1cm5z
IGZhbHNlIHRoZW4gaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGpldHRpc29uZWQgb3VyIHN0dWIgcm91
dGluZS4gSXQncyBzdGlsbAorICAgIC8vIHBvc3NpYmxlIHRvIGFzayBmb3IgYSByZWdlbmVyYXRl
ZCBzdHViIHJvdXRpbmUuCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFj
Y2VzcywgMj4gbV9saXN0OworICAgIFBvbHltb3JwaGljQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZv
Jik7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+LCAyPiBtX2xpc3Q7
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODkzMjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQotewotfQotCi1HZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0g
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFp
c0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQot
Ci0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0j
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlw
ZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0
aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlz
IGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAg
Q3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBH
ZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
ICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsg
fQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAK
LSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgp
OyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1
YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Nl
dCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0
eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAg
IEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciBy
ZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3Rh
dGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAg
ICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNz
Jik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1w
dHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNv
bnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1
ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGlu
ZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAy
PiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODkzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBU
IGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>