<?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>139209</bug_id>
          
          <creation_ts>2014-12-02 16:21:40 -0800</creation_ts>
          <short_desc>Modernize the CSSParser code</short_desc>
          <delta_ts>2014-12-03 07:34:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1052011</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-02 16:21:40 -0800</bug_when>
    <thetext>Modernize the CSSParser code by:
- Using more references instead of pointers
- Using nullptr instead of 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052032</commentid>
    <comment_count>1</comment_count>
      <attachid>242465</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-02 17:07:44 -0800</bug_when>
    <thetext>Created attachment 242465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052133</commentid>
    <comment_count>2</comment_count>
      <attachid>242465</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-12-03 05:42:27 -0800</bug_when>
    <thetext>Comment on attachment 242465
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=242465&amp;action=review

&gt; Source/WebCore/css/CSSParser.cpp:5966
&gt; +    for (CSSParserValue* argument = args.current(); argument; argument = args.next()) {
&gt;          // The call to parseFillPosition below should consume all of the
&gt;          // arguments except the first three. Thus, an index greater than two
&gt;          // indicates an invalid production.
&gt; -        if (args-&gt;currentIndex() &gt; 2)
&gt; +        if (args.currentIndex() &gt; 2)
&gt;              return nullptr;

The stateful iteration of CSSParserValueList is bit strange. Wonder if it could just be a vector...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052136</commentid>
    <comment_count>3</comment_count>
      <attachid>242465</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-03 06:21:02 -0800</bug_when>
    <thetext>Comment on attachment 242465
Patch

Clearing flags on attachment: 242465

Committed r176719: &lt;http://trac.webkit.org/changeset/176719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052137</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-03 06:21:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052151</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-03 07:34:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 242465 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 242465
&gt; 
&gt; Committed r176719: &lt;http://trac.webkit.org/changeset/176719&gt;

And the trivial buildfix landed in https://trac.webkit.org/changeset/176722.
(unfortunately with wrong reference to the changeset)

But it was super easy and EWS noticed it in time. :-/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242465</attachid>
            <date>2014-12-02 17:07:44 -0800</date>
            <delta_ts>2014-12-03 06:21:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139209-20141202170816.patch</filename>
            <type>text/plain</type>
            <size>251637</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ5OWE0MWNhOWZhMTk5
YjUyNTYxMzcyYWU0OGMxMDA5OTdjZjVjNi4uZDNiMDkwYmNhOTU3NDQ2OGQ1ODQ3Y2E3MjMzMmIz
MzE2MTBiNzM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEyLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHRoZSBDU1NQ
YXJzZXIgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM5MjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW9kZXJuaXplIHRoZSBDU1NQYXJzZXIgY29kZSBieToKKyAgICAgICAgLSBVc2luZyBtb3Jl
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycworICAgICAgICAtIFVzaW5nIG51bGxwdHIg
aW5zdGVhZCBvZiAwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2Uu
CisKIDIwMTQtMTItMDIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWx3YXlzIHNob3cgdGhlIGFycm93IGZvciB0ZXh0IHNlbGVjdGlvbiBzZXJ2aWNl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBhYzdmMWJkNmE4YWIyMTliMDQ4NjgwN2Mw
OWRlNmEzMDJmMTA1MzFmLi45NjFkYTA2NDZmMzZjMWZmNmI0NGUxMWI4OGRlMThkMjgzODQ5ZDI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTMwLDE5ICsxMzAsMTkgQEAgZW51bSBQ
cm9wZXJ0eVR5cGUgewogY2xhc3MgSW1wbGljaXRTY29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1wbGljaXRTY29wZSk7CiBwdWJsaWM6Ci0gICAgSW1wbGljaXRTY29wZShXZWJDb3Jl
OjpDU1NQYXJzZXIqIHBhcnNlciwgUHJvcGVydHlUeXBlIHByb3BlcnR5VHlwZSkKKyAgICBJbXBs
aWNpdFNjb3BlKFdlYkNvcmU6OkNTU1BhcnNlciYgcGFyc2VyLCBQcm9wZXJ0eVR5cGUgcHJvcGVy
dHlUeXBlKQogICAgICAgICA6IG1fcGFyc2VyKHBhcnNlcikKICAgICB7Ci0gICAgICAgIG1fcGFy
c2VyLT5tX2ltcGxpY2l0U2hvcnRoYW5kID0gcHJvcGVydHlUeXBlID09IFByb3BlcnR5SW1wbGlj
aXQ7CisgICAgICAgIG1fcGFyc2VyLm1faW1wbGljaXRTaG9ydGhhbmQgPSBwcm9wZXJ0eVR5cGUg
PT0gUHJvcGVydHlJbXBsaWNpdDsKICAgICB9CiAKICAgICB+SW1wbGljaXRTY29wZSgpCiAgICAg
ewotICAgICAgICBtX3BhcnNlci0+bV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOworICAgICAg
ICBtX3BhcnNlci5tX2ltcGxpY2l0U2hvcnRoYW5kID0gZmFsc2U7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFdlYkNvcmU6OkNTU1BhcnNlciogbV9wYXJzZXI7CisgICAgV2ViQ29yZTo6Q1NTUGFy
c2VyJiBtX3BhcnNlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCkBAIC0xNzMsMTAgKzE3MywxMCBA
QCBzdGF0aWMgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGEs
IGNvbnN0IGNoYXIgKCZiKVtOXSkKIH0KIAogdGVtcGxhdGUgPHVuc2lnbmVkIE4+Ci1zdGF0aWMg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShDU1NQYXJzZXJWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIg
KCZiKVtOXSkKK3N0YXRpYyBib29sIGVxdWFsSWdub3JpbmdDYXNlKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgY29uc3QgY2hhciAoJmIpW05dKQogewotICAgIEFTU0VSVCh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUt
PnN0cmluZywgYik7CisgICAgQVNTRVJUKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuc3RyaW5nLCBiKTsKIH0KIAog
c3RhdGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBjaGFyKiBwcmVmaXgpCkBAIC0zMDAsOSArMzAwLDkgQEAgQ1NTUGFyc2VyOjpDU1NQ
YXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCiAgICAgLCBtX2lkKENTU1Byb3BlcnR5
SW52YWxpZCkKLSAgICAsIG1fc3R5bGVTaGVldCgwKQorICAgICwgbV9zdHlsZVNoZWV0KG51bGxw
dHIpCiAgICAgLCBtX3N1cHBvcnRzQ29uZGl0aW9uKGZhbHNlKQotICAgICwgbV9zZWxlY3Rvckxp
c3RGb3JQYXJzZVNlbGVjdG9yKDApCisgICAgLCBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0
b3IobnVsbHB0cikKICAgICAsIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveChJ
TlZBTElEX05VTV9QQVJTRURfUFJPUEVSVElFUykKICAgICAsIG1faW5QYXJzZVNob3J0aGFuZCgw
KQogICAgICwgbV9jdXJyZW50U2hvcnRoYW5kKENTU1Byb3BlcnR5SW52YWxpZCkKQEAgLTMxNSwx
MSArMzE1LDExIEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQpCiAgICAgLCBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGgoMCkKICAgICAsIG1fbmVz
dGVkU2VsZWN0b3JMZXZlbCgwKQogICAgICwgbV9wcm9wZXJ0eVJhbmdlKFVJTlRfTUFYLCBVSU5U
X01BWCkKLSAgICAsIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQoMCkKKyAgICAsIG1fcnVsZVNvdXJj
ZURhdGFSZXN1bHQobnVsbHB0cikKICAgICAsIG1fcGFyc2luZ01vZGUoTm9ybWFsTW9kZSkKICAg
ICAsIG1faXM4Qml0U291cmNlKGZhbHNlKQotICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyOCgwKQot
ICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyMTYoMCkKKyAgICAsIG1fY3VycmVudENoYXJhY3Rlcjgo
bnVsbHB0cikKKyAgICAsIG1fY3VycmVudENoYXJhY3RlcjE2KG51bGxwdHIpCiAgICAgLCBtX2xl
bmd0aCgwKQogICAgICwgbV90b2tlbigwKQogICAgICwgbV9saW5lTnVtYmVyKDApCkBAIC0zMzQs
NyArMzM0LDcgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKICNpZiBZWURFQlVHID4gMAogICAgIGNzc3l5ZGVidWcgPSAxOwogI2VuZGlmCi0g
ICAgbV90b2tlblN0YXJ0LnB0cjggPSAwOworICAgIG1fdG9rZW5TdGFydC5wdHI4ID0gbnVsbHB0
cjsKIH0KIAogQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkKQEAgLTM1MiwxMCArMzUyLDEwIEBAIEFM
V0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbWFrZUxvd2VyKGNvbnN0IENoYXJhY3RlclR5cGUqIGlu
cHV0LCBDaGFyYWN0ZXJUeXBlKiBvCiAKICAgICBpZiAoY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGlu
cHV0LCBsZW5ndGgpKSB7CiAgICAgICAgIC8vIEZhc3QgY2FzZSBmb3IgYWxsLUFTQ0lJLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgIG91dHB1dFtpXSA9
IHRvQVNDSUlMb3dlcihpbnB1dFtpXSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgQVNTRVJUKHVfdG9sb3dlcihpbnB1
dFtpXSkgPD0gMHhGRkZGKTsKICAgICAgICAgICAgIG91dHB1dFtpXSA9IHVfdG9sb3dlcihpbnB1
dFtpXSk7CiAgICAgICAgIH0KQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIENTU1BhcnNlcjo6c2V0
dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCB1bnNpZ25lZCBwcmVmaXhMZW5ndGgsIGNvbnN0
IFN0cgogCiAgICAgaWYgKCFzdHJpbmdMZW5ndGggfHwgc3RyaW5nLmlzOEJpdCgpKSB7CiAgICAg
ICAgIG1fZGF0YVN0YXJ0OCA9IHN0ZDo6bWFrZV91bmlxdWU8TENoYXJbXT4obGVuZ3RoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsg
aSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRUZXh0UHJlZml4
TGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2RhdGFTdGFydDhbaV0gPSBwcmVmaXhbaV07CiAK
ICAgICAgICAgaWYgKHN0cmluZ0xlbmd0aCkKQEAgLTM5MiwxOCArMzkyLDE4IEBAIHZvaWQgQ1NT
UGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExl
bmd0aCwgY29uc3QgU3RyCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5k
OyBpKyspCiAgICAgICAgICAgICBtX2RhdGFTdGFydDhbaV0gPSBzdWZmaXhbaSAtIHN0YXJ0XTsK
IAotICAgICAgICBtX2RhdGFTdGFydDhbbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICBtX2RhdGFT
dGFydDhbbGVuZ3RoIC0gMV0gPSAnXDAnOwogCiAgICAgICAgIG1faXM4Qml0U291cmNlID0gdHJ1
ZTsKICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyOCA9IG1fZGF0YVN0YXJ0OC5nZXQoKTsKLSAg
ICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyMTYgPSAwOworICAgICAgICBtX2N1cnJlbnRDaGFyYWN0
ZXIxNiA9IG51bGxwdHI7CiAgICAgICAgIHNldFRva2VuU3RhcnQ8TENoYXI+KG1fY3VycmVudENo
YXJhY3RlcjgpOwogICAgICAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PExDaGFy
PjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fZGF0YVN0YXJ0MTYgPSBzdGQ6Om1h
a2VfdW5pcXVlPFVDaGFyW10+KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGg7ICsraSkKICAgICAgICAgbV9kYXRhU3RhcnQx
NltpXSA9IHByZWZpeFtpXTsKIAogICAgIEFTU0VSVChzdHJpbmdMZW5ndGgpOwpAQCAtNDE0LDEw
ICs0MTQsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZp
eCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBjb25zdCBTdHIKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGFydDsgaSA8IGVuZDsgaSsrKQogICAgICAgICBtX2RhdGFTdGFydDE2W2ldID0gc3VmZml4
W2kgLSBzdGFydF07CiAKLSAgICBtX2RhdGFTdGFydDE2W2xlbmd0aCAtIDFdID0gMDsKKyAgICBt
X2RhdGFTdGFydDE2W2xlbmd0aCAtIDFdID0gJ1wwJzsKIAogICAgIG1faXM4Qml0U291cmNlID0g
ZmFsc2U7Ci0gICAgbV9jdXJyZW50Q2hhcmFjdGVyOCA9IDA7CisgICAgbV9jdXJyZW50Q2hhcmFj
dGVyOCA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50Q2hhcmFjdGVyMTYgPSBtX2RhdGFTdGFydDE2
LmdldCgpOwogICAgIHNldFRva2VuU3RhcnQ8VUNoYXI+KG1fY3VycmVudENoYXJhY3RlcjE2KTsK
ICAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PFVDaGFyPjsKQEAgLTQzOCw4ICs0
MzgsOCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNo
ZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAg
ICBzaGVldC0+c2hyaW5rVG9GaXQoKTsKICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlc2V0
KCk7Ci0gICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IDA7Ci0gICAgbV9ydWxlID0gMDsKKyAg
ICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gbnVsbHB0cjsKKyAgICBtX3J1bGUgPSBudWxscHRy
OwogICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IGZhbHNlOwogICAgIG1fbG9nRXJy
b3JzID0gZmFsc2U7CiB9CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUtl
eXdvcmRWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVy
dHlJRAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29s
IHBhcnNlVHJhbnNmb3JtVHJhbnNsYXRlQXJndW1lbnRzKFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
KiB0cmFuc2Zvcm1WYWx1ZSwgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZXhwZWN0ZWRDb3VudCkKK3N0YXRpYyBib29s
IHBhcnNlVHJhbnNmb3JtVHJhbnNsYXRlQXJndW1lbnRzKFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
JiB0cmFuc2Zvcm1WYWx1ZSwgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZXhwZWN0ZWRDb3VudCkKIHsKICAgICB3aGls
ZSAoZXhwZWN0ZWRDb3VudCkgewogICAgICAgICBzaXplX3QgZW5kID0gV1RGOjpmaW5kKGNoYXJh
Y3RlcnMsIGxlbmd0aCwgZXhwZWN0ZWRDb3VudCA9PSAxID8gJyknIDogJywnLCBzdGFydCk7CkBA
IC0xMjExLDcgKzEyMTEsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0ZUFy
Z3VtZW50cyhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYICYmIChudW1iZXIgfHwgdW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShudW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKICAgICAgICAg
c3RhcnQgPSBlbmQgKyAxOwogICAgICAgICAtLWV4cGVjdGVkQ291bnQ7CiAgICAgfQpAQCAtMTI1
NCw5ICsxMjU0LDkgQEAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCBDU1MKICAgICBSZWZQdHI8V2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU+IHRyYW5zZm9ybVZhbHVlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OmNyZWF0ZSh0cmFuc2Zvcm1UeXBlKTsKICAgICBib29sIHN1Y2Nlc3M7CiAgICAgaWYgKHN0
cmluZy5pczhCaXQoKSkKLSAgICAgICAgc3VjY2VzcyA9IHBhcnNlVHJhbnNmb3JtVHJhbnNsYXRl
QXJndW1lbnRzKHRyYW5zZm9ybVZhbHVlLmdldCgpLCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3Ry
aW5nLmxlbmd0aCgpLCBhcmd1bWVudFN0YXJ0LCBleHBlY3RlZEFyZ3VtZW50Q291bnQpOworICAg
ICAgICBzdWNjZXNzID0gcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHMoKnRyYW5zZm9y
bVZhbHVlLCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBhcmd1bWVudFN0
YXJ0LCBleHBlY3RlZEFyZ3VtZW50Q291bnQpOwogICAgIGVsc2UKLSAgICAgICAgc3VjY2VzcyA9
IHBhcnNlVHJhbnNmb3JtVHJhbnNsYXRlQXJndW1lbnRzKHRyYW5zZm9ybVZhbHVlLmdldCgpLCBz
dHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgYXJndW1lbnRTdGFydCwgZXhw
ZWN0ZWRBcmd1bWVudENvdW50KTsKKyAgICAgICAgc3VjY2VzcyA9IHBhcnNlVHJhbnNmb3JtVHJh
bnNsYXRlQXJndW1lbnRzKCp0cmFuc2Zvcm1WYWx1ZSwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBz
dHJpbmcubGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4cGVjdGVkQXJndW1lbnRDb3VudCk7CiAg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwpA
QCAtMTI2OCwxNCArMTI2OCwxNCBAQCBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9y
bVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHByb3BlcnRpZXMsIENTUwogUGFzc1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21p
Y1N0cmluZyYgc3RyaW5nKQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IGR1bW15U3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKLSAgICBpZiAoIXBhcnNlVmFsdWUoZHVtbXlTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlGb250
RmFtaWx5LCBzdHJpbmcsIGZhbHNlLCBDU1NRdWlya3NNb2RlLCAwKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFwYXJzZVZhbHVlKGR1bW15U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rm9u
dEZhbWlseSwgc3RyaW5nLCBmYWxzZSwgQ1NTUXVpcmtzTW9kZSwgbnVsbHB0cikpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gZHVt
bXlTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogICAg
IGlmICghZm9udEZhbWlseS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIDA7IC8vIEZJ
WE1FOiAiaW5pdGlhbCIgYW5kICJpbmhlcml0IiBzaG91bGQgYmUgcGFyc2VkIGFzIGZvbnQgbmFt
ZXMgaW4gdGhlIGZhY2UgYXR0cmlidXRlLgorICAgICAgICByZXR1cm4gbnVsbHB0cjsgLy8gRklY
TUU6ICJpbml0aWFsIiBhbmQgImluaGVyaXQiIHNob3VsZCBiZSBwYXJzZWQgYXMgZm9udCBuYW1l
cyBpbiB0aGUgZmFjZSBhdHRyaWJ1dGUuCiAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8
Q1NTVmFsdWVMaXN0Pihmb250RmFtaWx5LnJlbGVhc2UoKSk7CiB9CiAKQEAgLTEzMTMsNyArMTMx
Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMq
IGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByCiAKICAgICBjc3N5eXBhcnNlKHRoaXMpOwog
Ci0gICAgbV9ydWxlID0gMDsKKyAgICBtX3J1bGUgPSBudWxscHRyOwogCiAgICAgYm9vbCBvayA9
IGZhbHNlOwogICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKQEAgLTEzNDEsMTEgKzEz
NDEsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIGlmICghcGFyc2VyLnBhcnNlQ29sb3Io
c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWUqIHZhbHVlID0g
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7Ci0gICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKKyAgICBDU1NWYWx1ZSYgdmFsdWUgPSAqcGFyc2Vy
Lm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7CisgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNS
R0JDb2xvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzNTcsNyArMTM1Nyw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAg
IHNldHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3tjb2xvcjoiLCBzdHJpbmcsICJ9ICIpOwogICAg
IGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxlID0gMDsKKyAgICBtX3J1bGUgPSBudWxscHRy
OwogCiAgICAgcmV0dXJuICFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpICYmIG1fcGFyc2Vk
UHJvcGVydGllcy5maXJzdCgpLmlkKCkgPT0gQ1NTUHJvcGVydHlDb2xvcjsKIH0KQEAgLTEzODks
NyArMTM4OSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAKICAgICBjc3N5eXBhcnNlKHRo
aXMpOwogCi0gICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gMDsKKyAgICBtX3Nl
bGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiBQYXNzUmVmPEltbXV0
YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRp
b24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0xNDA1LDcgKzE0
MDUsNyBAQCBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJz
ZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaQogCiAgICAgc2V0dXBQYXJzZXIoIkAtd2Vi
a2l0LWRlY2xzeyIsIHN0cmluZywgIn0gIik7CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBt
X3J1bGUgPSAwOworICAgIG1fcnVsZSA9IG51bGxwdHI7CiAKICAgICBpZiAobV9oYXNGb250RmFj
ZU9ubHlWYWx1ZXMpCiAgICAgICAgIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwpAQCAtMTQz
MSw3ICsxNDMxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0
eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmkKIAogICAgIHNldHVwUGFyc2Vy
KCJALXdlYmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7
Ci0gICAgbV9ydWxlID0gMDsKKyAgICBtX3J1bGUgPSBudWxscHRyOwogCiAgICAgYm9vbCBvayA9
IGZhbHNlOwogICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKQEAgLTE1ODEsNyArMTU4
MSw3IEBAIFVSTCBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25z
dAogICAgIHJldHVybiBjb21wbGV0ZVVSTChtX2NvbnRleHQsIHVybCk7CiB9CiAKLWJvb2wgQ1NT
UGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSogdmFsdWUsIFVuaXRz
IHVuaXRmbGFncywgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYykK
K2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIFVuaXRzIHVuaXRmbGFncywgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxl
YXNlQ2FsYykKIHsKICAgICBib29sIG11c3RCZU5vbk5lZ2F0aXZlID0gdW5pdGZsYWdzICYgRk5v
bk5lZzsKIApAQCAtMTYyOCwyOSArMTYyOCwyOSBAQCBib29sIENTU1BhcnNlcjo6dmFsaWRDYWxj
dWxhdGlvblVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIFJlbAog
ICAgIHJldHVybiBiOyAgICAKIH0KIAotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2Nl
cHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSogdmFsdWUsIFVuaXRzIHVuaXRmbGFncywg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoraW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91
bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRm
bGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIC8vIFFpcmtzIG1vZGUg
YW5kIHN2ZyBwcmVzZW50YXRpb24gYXR0cmlidXRlcyBhY2NlcHQgdW5pdCBsZXNzIHZhbHVlcy4K
LSAgICByZXR1cm4gKHVuaXRmbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAo
IXZhbHVlLT5mVmFsdWUgfHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1Bh
cnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgcmV0dXJuICh1bml0ZmxhZ3MgJiAo
Rkxlbmd0aCB8IEZBbmdsZSB8IEZUaW1lKSkgJiYgKCF2YWx1ZS5mVmFsdWUgfHwgY3NzUGFyc2Vy
TW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9k
ZSk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
LCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgUmVsZWFzZVBh
cnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYykKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxp
ZFVuaXQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNl
Q2FsYykKIHsKICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZSkpCiAgICAgICAgIHJldHVybiB2
YWxpZENhbGN1bGF0aW9uVW5pdCh2YWx1ZSwgdW5pdGZsYWdzLCByZWxlYXNlQ2FsYyk7CiAgICAg
ICAgIAogICAgIGJvb2wgYiA9IGZhbHNlOwotICAgIHN3aXRjaCAodmFsdWUtPnVuaXQpIHsKKyAg
ICBzd2l0Y2ggKHZhbHVlLnVuaXQpIHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSOgogICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZOdW1iZXIpOwogICAgICAgICBpZiAo
IWIgJiYgc2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXModmFsdWUsIHVuaXRmbGFncywgY3NzUGFy
c2VyTW9kZSkpIHsKLSAgICAgICAgICAgIHZhbHVlLT51bml0ID0gKHVuaXRmbGFncyAmIEZMZW5n
dGgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6CisgICAgICAgICAgICB2YWx1ZS51bml0
ID0gKHVuaXRmbGFncyAmIEZMZW5ndGgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgodW5pdGZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfREVHIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUyk7CiAgICAgICAg
ICAgICBiID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAm
IEZJbnRlZ2VyKSAmJiB2YWx1ZS0+aXNJbnQpCisgICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdz
ICYgRkludGVnZXIpICYmIHZhbHVlLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAg
ICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWUtPmlz
SW50ICYmIHZhbHVlLT5mVmFsdWUgPiAwKQorICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAm
IEZQb3NpdGl2ZUludGVnZXIpICYmIHZhbHVlLmlzSW50ICYmIHZhbHVlLmZWYWx1ZSA+IDApCiAg
ICAgICAgICAgICBiID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U6CkBAIC0xNjk2LDE0ICsxNjk2LDE0IEBAIGJvb2wgQ1NT
UGFyc2VyOjp2YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3Ms
IENTU1BhcnNlck1vZGUKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
aWYgKGIgJiYgdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2YWx1ZS0+ZlZhbHVlIDwgMCkKKyAgICBp
ZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVnICYmIHZhbHVlLmZWYWx1ZSA8IDApCiAgICAgICAg
IGIgPSBmYWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlLT5mVmFsdWUpKQorICAg
IGlmIChiICYmIHN0ZDo6aXNpbmYodmFsdWUuZlZhbHVlKSkKICAgICAgICAgYiA9IGZhbHNlOwog
ICAgIHJldHVybiBiOwogfQogCi1pbmxpbmUgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
KQoraW5saW5lIFBhc3NSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAobV9w
YXJzZWRDYWxjdWxhdGlvbikgewogICAgICAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbih2YWx1ZSkp
OwpAQCAtMTcxMSwyMiArMTcxMSwyMiBAQCBpbmxpbmUgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFycwogICAgIH0K
IAogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05f
TUVESUFfUVVFUlkpCi0gICAgQVNTRVJUKCh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKLSAgICAgICAgfHwgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVS
TiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKLSAgICAgICAg
fHwgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUtPnVu
aXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAgICAgICB8fCAodmFsdWUtPnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLT51bml0IDw9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRFBDTSkpOworICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfS0haKQorICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1RVUk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykK
KyAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2
YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKKyAgICAgICAgfHwgKHZh
bHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKSk7CiAjZWxzZQotICAgIEFTU0VSVCgodmFsdWUt
PnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgIHx8ICh2YWx1ZS0+dW5pdCA+PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHx8ICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1ZXICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1B
WCkpOworICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQorICAgICAg
ICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWUu
dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKKyAgICAgICAgfHwgKHZhbHVlLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVk1BWCkpOwogI2VuZGlmCi0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcz4odmFsdWUudW5pdCkpOwogfQogCi1pbmxpbmUgUGFzc1JlZjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1
ZSogdmFsdWUpCitpbmxpbmUgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpj
cmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOwotICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7CisgICAgQVNTRVJUKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcgfHwgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodmFsdWUuc3RyaW5n
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NvbW1hKENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKQEAgLTE3MzQsNTEgKzE3MzQsNTAgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQ29tbWEoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQogICAgIHJl
dHVybiB2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYg
dmFsdWUtPmlWYWx1ZSA9PSAnLCc7IAogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJk
U2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgQVNT
RVJUKHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9w
ZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJy8nOworICAgIHJldHVybiB2YWx1ZS51bml0ID09
IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS5pVmFsdWUgPT0gJy8nOwogfQogCi1i
b29sIENTU1BhcnNlcjo6dmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitib29sIENT
U1BhcnNlcjo6dmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaW50IGlk
ID0gdmFsdWUtPmlkOworICAgIGludCBpZCA9IHZhbHVlLmlkOwogICAgIGlmIChpZCA9PSBDU1NW
YWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9PSBDU1NW
YWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50IHx8
IGlkID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtp
dEZpdENvbnRlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhaWQgJiYgdmFs
aWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKIH0KIAogLy8gRklY
TUU6IENvbWJpbmUgdGhpcyB3aXRoIHZhbGlkV2lkdGggd2hlbiB3ZSBzdXBwb3J0IGZpdC1jb250
ZW50LCBldCBhbCwgZm9yIGhlaWdodHMuCi1ib29sIENTU1BhcnNlcjo6dmFsaWRIZWlnaHQoQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkSGVpZ2h0KENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpbnQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgaW50IGlkID0g
dmFsdWUuaWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlSW50cmluc2ljIHx8IGlkID09IENTU1Zh
bHVlTWluSW50cmluc2ljKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CiB9CiAKLWlu
bGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsaWRQ
cmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitp
bmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbGlk
UHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQog
ewogICAgIGlmIChpZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpOwotICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZVN0cmluZ1ZhbHVlKHZhbHVlKTsKLSAgICBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19LSFopCisgICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKICAgICAgICAg
cmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHZhbHVl
LT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS0+dW5pdCA8PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKKyAgICBpZiAodmFsdWUudW5pdCA+PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0NIUykKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZSk7Ci0gICAgaWYgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYg
dmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQorICAgIGlmICh2YWx1
ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpCiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwg
RU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgaWYgKHZhbHVlLT51bml0ID49IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQQ00pCisgICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQog
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICNlbmRp
ZgotICAgIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCi0gICAgICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1
ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CisgICAgaWYgKHZhbHVlLnVu
aXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWUuZlZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0VNUyk7CiAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWUpKQogICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9uLnJl
bGVhc2UoKSk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9p
ZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcHJwVmFsdWUsIGJvb2wgaW1wb3J0YW50KQpAQCAt
MTkzMyw3ICsxOTMyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlclZlcnRpY2FsU3BhY2luZzoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwg
aW5oZXJpdAogICAgICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlv
bmFsIGtleXdvcmQuCkBAIC0xOTg3LDcgKzE5ODYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIC13
ZWJraXQtem9vbS1vdXQgXSBdIHwgaW5oZXJpdAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBsaXN0OwogICAgICAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gaW1hZ2UgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkg
ewogICAgICAgICAgICAgICAgIFN0cmluZyB1cmkgPSB2YWx1ZS0+c3RyaW5nOwogICAgICAgICAg
ICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQpAQCAtMjExNyw4ICsyMTE2LDggQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKSB7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShj
b21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1ZSkpIHsK
LSAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKG1fdmFsdWVMaXN0LmdldCgpLCBw
YXJzZWRWYWx1ZSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2
YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlz
dCwgcGFyc2VkVmFsdWUpKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE0Nywy
MSArMjE0NiwyMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVRoaW4gfHwg
aWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOiAg
ICAgICAvLyBub3JtYWwgfCA8bGVuZ3RoPiB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxl
bmd0aCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZM
ZW5ndGgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2lu
ZzogICAgICAgICAvLyBub3JtYWwgfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKQEAgLTIxNzYsMzcg
KzIxNzUsMzcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nRW5k
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQmVmb3JlOgogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFp
ZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1By
b3BlcnR5TWF4V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0
aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlk
V2lkdGgodmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVO
b25lIHx8IHZhbGlkV2lkdGgoKnZhbHVlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1pbldpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2Fs
V2lkdGg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRXaWR0aCh2YWx1ZSk7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRXaWR0aCgqdmFsdWUpOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TG9naWNhbFdpZHRoOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgdmFsaWRXaWR0aCh2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRXaWR0aCgqdmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXhMb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NW
YWx1ZU5vbmUgfHwgdmFsaWRIZWlnaHQodmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRIZWlnaHQodmFsdWUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KCp2
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkSGVpZ2h0KHZhbHVlKSk7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZEhlaWdodCgq
dmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6
CkBAIC0yMjIyLDcgKzIyMjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA+PSBDU1NWYWx1
ZUJhc2VsaW5lICYmIGlkIDw9IENTU1ZhbHVlV2Via2l0QmFzZWxpbmVNaWRkbGUpCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2Vu
dCkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3R0b206ICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4g
fCBhdXRvIHwgaW5oZXJpdApAQCAtMjI0MCwxNCArMjIzOSwxNCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpOworICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6ICAgICAgICAg
ICAgICAvLyBhdXRvIHwgPGludGVnZXI+IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVl
LCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6IC8vIDxpbnRlZ2Vy
PiB8IGluaGVyaXQgfCBhdXRvIChXZSd2ZSBhZGRlZCBzdXBwb3J0IGZvciBhdXRvIGZvciBiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSkKQEAgLTIyNTUsNyArMjI1NCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOworICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3Np
dGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IENTU1Byb3BlcnR5TGluZUhlaWdodDoKQEAgLTIzMDUsNyArMjMwNCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlUmVzZXQgfHwg
aWQgPT0gQ1NTVmFsdWVEb2N1bWVudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZh
bGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9k
ZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgd2l0aGlu
IEBmb250LWZhY2UgYW5kIEAtd2Via2l0LWZpbHRlciwgc28gY2Fubm90IHVzZSBpbmhlcml0IHwg
aW5pdGlhbCBvciBiZSAhaW1wb3J0YW50LiBUaGlzIGlzIGEgbGlzdCBvZiB1cmxzIG9yIGxvY2Fs
IHJlZmVyZW5jZXMuCkBAIC0yMzcxLDE3ICsyMzcwLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHsKICAgICAgICAgaWYgKG51bSAhPSAx
ICYmIG51bSAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZyk7CiAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKnZhbHVlKTsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBw
YXJzZWRWYWx1ZTI7CiAgICAgICAgIGlmIChudW0gPT0gMikgewogICAgICAgICAgICAgdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKIApAQCAtMjM4OSw3ICsyMzg4LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRhYlNpemU6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGSW50
ZWdlciB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFs
dWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRBc3BlY3RSYXRpbzoKICAgICAgICAgcmV0dXJuIHBhcnNlQXNwZWN0UmF0aW8o
aW1wb3J0YW50KTsKQEAgLTIzOTcsNyArMjM5Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzOgogICAgICAgICByZXR1cm4gcGFyc2VCb3JkZXJSYWRp
dXMocHJvcElkLCBpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0
OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCk7Cisg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93OiAvLyBDU1MyIHByb3Bl
cnR5LCBkcm9wcGVkIGluIENTUzIuMSwgYmFjayBpbiBDU1MzLCBzbyB0cmVhdCBhcyBDU1MzCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKQEAgLTI0MDUsNyArMjQwNCw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBwYXJzZVNoYWRvdyhtX3ZhbHVlTGlzdC5nZXQoKSwg
cHJvcElkKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNoYWRvd1ZhbHVlTGlz
dCA9IHBhcnNlU2hhZG93KCptX3ZhbHVlTGlzdCwgcHJvcElkKTsKICAgICAgICAgICAgIGlmIChz
aGFkb3dWYWx1ZUxpc3QpIHsKICAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHNo
YWRvd1ZhbHVlTGlzdC5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTI0MjAsMTcgKzI0MTksMTcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCh2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIpOwogICAgICAgICAgICAgaWYg
KCF2YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUp
OwogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7CiAg
ICAgICAgICAgICBpZiAobnVtID09IDIpIHsKICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVu
aXQodmFsdWUsIEZQb3NpdGl2ZUludGVnZXIpOworICAgICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CiAgICAgICAgICAgICAg
ICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihwYXJzZWRWYWx1ZTEucmVsZWFzZSgp
LCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKQEAgLTI0NDUsMTYgKzI0NDQs
MTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVmbGVjdChwcm9wSWQsIGlt
cG9ydGFudCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5Ogot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlcik7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4OgotICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlcik7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUp
OworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwg
Rk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hPcmRpbmFsR3JvdXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRVbml0KHZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVl
LT5mVmFsdWU7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRklu
dGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiB2YWx1ZS0+ZlZhbHVlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgogI2lmIEVOQUJMRShG
SUxURVJTX0xFVkVMXzIpCkBAIC0yNDY0LDcgKzI0NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRmlsdGVyKG1f
dmFsdWVMaXN0LmdldCgpLCBjdXJyVmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwYXJzZUZpbHRl
cigqbV92YWx1ZUxpc3QsIGN1cnJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjdXJyVmFsdWUsIGltcG9ydGFudCk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0ODgsMjEgKzI0ODcsMjEgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4QmFzaXMsIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcnNl
RmxleChtX3ZhbHVlTGlzdC5nZXQoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJuIHBhcnNl
RmxleCgqbV92YWx1ZUxpc3QsIGltcG9ydGFudCk7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbGV4QmFzaXM6CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGludHJpbnNpYyBkaW1lbnNp
b25zIHRvby4KICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZykpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgq
dmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hy
aW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8
IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZO
dW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9y
ZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9k
ZSkpIHsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyLCBDU1NTdHJpY3RN
b2RlKSkgewogICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRv
IGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5kIGludCBtaW4gKyAxIGFzIHNw
ZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCiAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0g
c3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMiwgcGFy
c2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpOwogICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKQEAgLTI1MTUsMTkgKzI1MTQsMTkgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBpZCA9PSBDU1NWYWx1ZUxhcmdlIHx8
IGlkID09IENTU1ZhbHVlTWVkaXVtKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2
YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6CiAgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVG
YXN0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUgfCBGSW50
ZWdlciB8IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
KnZhbHVlLCBGVGltZSB8IEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogI2lm
IEVOQUJMRShDU1NfUkVHSU9OUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86
CkBAIC0yNTc0LDggKzI1NzMsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVl
bGVzcyBudW1iZXJzIGlzIGEgcXVpcmsgb2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBv
ZiB0aGUgcHJvcGVydHkuCi0gICAgICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVy
IHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgICAgICAgICAg
aWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZykpIHsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqdmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAg
ICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTUsMTkgKzI2OTQsMTkgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFs
dWVUaGljaykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBG
TnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6CiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSk7CisgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRp
dmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvbHVtbkdhcDogLy8gbm9ybWFsIHwgPGxlbmd0aD4KICAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwg
Rkxlbmd0aCB8IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVu
aXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlzOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVI
b3Jpem9udGFsIHx8IGlkID09IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRv
KQpAQCAtMjcyMCw3ICsyNzE5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5TcGFuOiAvLyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZp
eGVkIHByb3BlcnR5KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NT
VmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBl
bHNlIGlmICh2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3Vi
bGUoKnZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSA9PSAxKSB7CisgICAgICAgIGVsc2Ug
aWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUo
KnZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSA9PSAxKSB7CiAgICAgICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVtblNwYW4sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNzMwLDcgKzI3MjksNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgLy8gQWx3YXlzIHBhcnNlIHRoaXMgcHJvcGVydHkgaW4gc3RyaWN0IG1vZGUsIHNp
bmNlIGl0IHdvdWxkIGJlIGFtYmlndW91cyBvdGhlcndpc2Ugd2hlbiB1c2VkIGluIHRoZSAnY29s
dW1ucycgc2hvcnRoYW5kIHByb3BlcnR5LgotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJz
ZWREb3VibGUoKnZhbHVlKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0
KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJs
ZSgqdmFsdWUpOwogICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAg
ICAgICBtX3BhcnNlZENhbGN1bGF0aW9uLmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTI3NDIsNyAr
Mjc0MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgog
ICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgbnVtYmVyIG9mIGxpbmVzLCBkb24ndCBhbGxvdyAw
IGFzIGEgdmFsaWQgdmFsdWUKICAgICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIGVpdGhlciB0eXBl
IG9mIHVuaXQsIHJlcXVpcmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzCi0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFIHx8IHZhbHVlLT5mVmFsdWUpICYmIHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIg
fCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSAoIWlkICYmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgfHwgdmFsdWUtPmZWYWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIg
fCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAj
aWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTaXplQWRqdXN0OgpAQCAtMjc1MCwxMyArMjc0OSwxMyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSBtdWx0aWxlbmd0aCBjYXNlIHdoZXJlIHdlIGFsbG93IHJlbGF0aXZl
IHVuaXRzLgotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2
YWx1ZSwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlBlcmNlbnQgfCBGTm9u
TmVnLCBDU1NTdHJpY3RNb2RlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
IAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhOiAgICAgICAgICAgLy8g
PGxlbmd0aD4KLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZMZW5n
dGgpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVD
aGFyYWN0ZXI6CkBAIC0yNzY2LDEyICsyNzY1LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0
byB8fCB2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkp
CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCp2YWx1ZSwgRklu
dGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9MaW1pdCB8
fCB2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwgdmFsaWRVbml0KCp2YWx1ZSwgRklu
dGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI5NTcsMTUgKzI5NTYsMTUgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZM
ZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jc3NTaGFwZXNFbmFibGVk
KCkgJiYgIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25O
ZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW1h
Z2VUaHJlc2hvbGQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxp
ZFVuaXQodmFsdWUsIEZOdW1iZXIpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jc3NTaGFwZXNFbmFibGVkKCkgJiYg
IWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIpKTsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxp
ZFVuaXQodmFsdWUsIEZBbmdsZSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZh
bGlkVW5pdCgqdmFsdWUsIEZBbmdsZSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5B
QkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpAQCAtMzExNSw3ICszMTE0LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgIH0KIAogICAgIGlmICh2YWxpZFByaW1pdGl2ZSkgewotICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZVZhbGlkUHJpbWl0aXZlKGlkLCAqdmFsdWUpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwogICAgIH0KICAgICBBU1NFUlQoIW1fcGFyc2VkQ2FsY3VsYXRpb24pOwpAQCAtMzE2OSw4
ICszMTY4LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlSnVzdGlmeVNlbGYoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBvc2l0aW9uID0gMDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG92ZXJmbG93QWxpZ25tZW50S2V5d29yZCA9IDA7CisgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb3NpdGlvbjsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG92ZXJmbG93QWxpZ25tZW50S2V5d29yZDsKICAgICBpZiAoaXNJdGVtUG9zaXRpb25L
ZXl3b3JkKHZhbHVlLT5pZCkpIHsKICAgICAgICAgcG9zaXRpb24gPSBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICAgICAgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwpAQCAtMzIwMiwxMSArMzIwMSwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VKdXN0aWZ5U2VsZihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQmFja2dyb3VuZENsaXAoQ1NTUGFy
c2VyVmFsdWUqIHBhcnNlclZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZSkKK3N0YXRp
YyBib29sIHBhcnNlQmFja2dyb3VuZENsaXAoQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlLCBS
ZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZSkKIHsKLSAgICBpZiAocGFyc2VyVmFsdWUtPmlkID09
IENTU1ZhbHVlQm9yZGVyQm94IHx8IHBhcnNlclZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdC
b3gKLSAgICAgICAgfHwgcGFyc2VyVmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGVudEJveCB8fCBw
YXJzZXJWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSB7Ci0gICAgICAgIGNzc1ZhbHVl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBhcnNlclZhbHVlLT5pZCk7
CisgICAgaWYgKHBhcnNlclZhbHVlLmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHBhcnNlclZh
bHVlLmlkID09IENTU1ZhbHVlUGFkZGluZ0JveAorICAgICAgICB8fCBwYXJzZXJWYWx1ZS5pZCA9
PSBDU1NWYWx1ZUNvbnRlbnRCb3ggfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRU
ZXh0KSB7CisgICAgICAgIGNzc1ZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHBhcnNlclZhbHVlLmlkKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTMyMjIsMTMgKzMyMjEsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTm9uRWxlbWVudFNuYXBQb2ludHMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbCA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWwsIEZQ
ZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsKSk7CisgICAgICAgIGlmICh2YWxpZFVuaXQoKnZhbCwgRlBl
cmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqdmFsKSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAgICYmIHZhbC0+ZnVuY3Rpb24tPmFy
Z3MgIT0gMAorICAgICAgICAgICAgJiYgdmFsLT5mdW5jdGlvbi0+YXJncwogICAgICAgICAgICAg
JiYgdmFsLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKICAgICAgICAgICAgICYmIGVxdWFs
SWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKLSAgICAgICAg
ICAgIENTU1BhcnNlclZhbHVlKiBwYXJzZXJWYWwgPSB2YWwtPmZ1bmN0aW9uLT5hcmdzLmdldCgp
LT5jdXJyZW50KCk7CisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsID0gKnZh
bC0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCktPmN1cnJlbnQoKTsKICAgICAgICAgICAgIGlmICh2YWxp
ZFVuaXQocGFyc2VyVmFsLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CiAgICAgICAgICAgICAgICAg
dmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0Ojpj
cmVhdGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlclZhbCkpKSk7CiAgICAgICAg
ICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTMyNTQsMTQgKzMyNTMsMTQgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSAhPSAyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGN1clBhcnNlclZhbCA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoY3VyUGFyc2VyVmFs
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIGlmICghdmFsaWRVbml0KCpjdXJQYXJzZXJWYWws
IEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IGNzc1ZhbHVlWCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShjdXJQYXJz
ZXJWYWwpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOwogICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgY3VyUGFyc2VyVmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbGlk
VW5pdChjdXJQYXJzZXJWYWwsIEZQZXJjZW50IHwgRkxlbmd0aCkpCisgICAgaWYgKCF2YWxpZFVu
aXQoKmN1clBhcnNlclZhbCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGN1clBhcnNlclZhbCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZVkg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1clBhcnNlclZhbCk7CiAgICAgcG9zaXRp
b24tPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcG9zaXRpb24tPmFw
cGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBwb3NpdGlvbiwgaW1wb3J0YW50KTsKQEAgLTMyNzMsMTEgKzMyNzIsMTEgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9ucyA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICB3aGlsZSAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogcGFyc2VkVmFsdWVYID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlZFZh
bHVlWCA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgICAgICAvLyBEb24ndCBhY2NlcHQg
b2RkLWxlbmd0aCBsaXN0cyBvZiBjb29yZGluYXRlcy4KICAgICAgICAgaWYgKCFtX3ZhbHVlTGlz
dC0+bmV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBDU1NQYXJzZXJW
YWx1ZSogcGFyc2VkVmFsdWVZID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHBhcnNlZFZhbHVlWSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAg
ICAgICBpZiAoIXZhbGlkVW5pdChwYXJzZWRWYWx1ZVgsIEZQZXJjZW50IHwgRkxlbmd0aCkgfHwg
IXZhbGlkVW5pdChwYXJzZWRWYWx1ZVksIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShwYXJzZWRWYWx1ZVgpKTsKQEAgLTMzMTIsOCArMzMxMSw4IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0
IENTU1Byb3BlcnR5SUQqIHByCiAgICAgYm9vbCBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkgPSBm
YWxzZTsKIAogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIENT
U1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgICAgICBpZiAo
dmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWwtPmlWYWx1ZSA9PSAn
LCcpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnRWYWx1ZSA9ICptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOworICAgICAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS5pVmFsdWUgPT0gJywnKSB7CiAgICAgICAg
ICAgICAvLyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0
aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CkBAIC0zMzQw
LDcgKzMzMzksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEKiBwcgogICAgICAgICB9CiAKICAgICAg
ICAgYm9vbCBzaXplQ1NTUHJvcGVydHlFeHBlY3RlZCA9IGZhbHNlOwotICAgICAgICBpZiAoaXNG
b3J3YXJkU2xhc2hPcGVyYXRvcih2YWwpICYmIGZvdW5kUG9zaXRpb25DU1NQcm9wZXJ0eSkgewor
ICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihjdXJyZW50VmFsdWUpICYmIGZvdW5k
UG9zaXRpb25DU1NQcm9wZXJ0eSkgewogICAgICAgICAgICAgc2l6ZUNTU1Byb3BlcnR5RXhwZWN0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQpA
QCAtMzM1OCw3ICszMzU3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHIKICAgICAgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDE7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWwyOwogICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElkMSwgcHJvcElk
MjsKLSAgICAgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSogcGFyc2VyVmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOworICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJW
YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgICAgICAgICAgICAgIGlmIChwYXJz
ZUZpbGxQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBwcm9wSWQxLCBwcm9wSWQyLCB2YWwxLCB2YWwy
KSkgewogICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgdmFsMS5yZWxl
YXNlTm9uTnVsbCgpKTsKQEAgLTMzODgsNyArMzM4Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQq
IHByCiAgICAgfQogCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91
bmQuCi0gICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykgeworICAgIGZvciAo
aSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgLy8gRmlsbCBpbiBhbnkg
cmVtYWluaW5nIHByb3BlcnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICAgICAgaWYg
KCFwYXJzZWRQcm9wZXJ0eVtpXSkgewogICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tp
XSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CkBAIC0zNTc4
LDcgKzM1NzcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICB9CiAKICAgICAvLyBOb3cg
YWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3ZSBmb3VuZC4KLSAgICBmb3IgKGkgPSAwOyBpIDwg
bnVtUHJvcGVydGllczsgaSsrKQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyAr
K2kpCiAgICAgICAgIGFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnBy
b3BlcnRpZXMoKVtpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYxNCw3ICszNjEzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hv
cnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW4K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJv
cGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAgIEltcGxpY2l0U2NvcGUgaW1wbGlj
aXRTY29wZSh0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKKyAgICBJbXBsaWNpdFNjb3BlIGltcGxp
Y2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgIGNvbnN0IFN0eWxlUHJvcGVy
dHlTaG9ydGhhbmQqIHByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbiA9IHNob3J0aGFuZC5wcm9w
ZXJ0aWVzRm9ySW5pdGlhbGl6YXRpb24oKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2hvcnRoYW5kLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgaWYgKHByb3BlcnR5Rm91bmRbaV0p
CkBAIC0zNjUxLDcgKzM2NTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKENTU1By
b3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEICpwcm9wZXJ0aQogICAgICAgICAg
ICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMF0sIGltcG9ydGFudCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJz
ZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwotICAgICAgICAgICAgSW1wbGljaXRTY29wZSBp
bXBsaWNpdFNjb3BlKHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOworICAgICAgICAgICAgSW1wbGlj
aXRTY29wZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKICAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbMV0sIHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAg
ICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1syXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKQEAg
LTM2NjEsNyArMzY2MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZTRWYWx1ZXMoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQgKnByb3BlcnRpCiAgICAgICAgICAgICBp
ZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShw
cm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3BhcnNl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2Nv
cGUgaW1wbGljaXRTY29wZSh0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKKyAgICAgICAgICAgIElt
cGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7CiAgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAg
ICAgICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5z
aXplKCkgLSAyXS52YWx1ZSgpOwogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1sz
XSwgdmFsdWUsIGltcG9ydGFudCk7CkBAIC0zNjcxLDcgKzM2NzAsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlE
ICpwcm9wZXJ0aQogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMF0sIGlt
cG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGllc1sxXSwgaW1wb3J0YW50KSB8fCAhcGFy
c2VWYWx1ZShwcm9wZXJ0aWVzWzJdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGll
c1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIElt
cGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSh0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKKyAgICAg
ICAgICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNp
dCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNzA1LDcgKzM3MDQsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VQYWdlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gMCAmJiB2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAg
ICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSks
IGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zNzI2LDE0ICszNzI1LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNpemUoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHBhcnNlZFZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsK
IAogICAgIC8vIEZpcnN0IHBhcmFtZXRlci4KLSAgICBTaXplUGFyYW1ldGVyVHlwZSBwYXJhbVR5
cGUgPSBwYXJzZVNpemVQYXJhbWV0ZXIocGFyc2VkVmFsdWVzLmdldCgpLCB2YWx1ZSwgTm9uZSk7
CisgICAgU2l6ZVBhcmFtZXRlclR5cGUgcGFyYW1UeXBlID0gcGFyc2VTaXplUGFyYW1ldGVyKCpw
YXJzZWRWYWx1ZXMsICp2YWx1ZSwgTm9uZSk7CiAgICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnku
CiAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICBwYXJhbVR5cGUgPSBwYXJzZVNpemVQYXJhbWV0ZXIocGFyc2VkVmFsdWVzLmdldCgpLCB2
YWx1ZSwgcGFyYW1UeXBlKTsKKyAgICAgICAgcGFyYW1UeXBlID0gcGFyc2VTaXplUGFyYW1ldGVy
KCpwYXJzZWRWYWx1ZXMsICp2YWx1ZSwgcGFyYW1UeXBlKTsKICAgICAgICAgaWYgKHBhcmFtVHlw
ZSA9PSBOb25lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM3NDIsMTkg
KzM3NDEsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNTU1BhcnNlcjo6U2l6
ZVBhcmFtZXRlclR5cGUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0
KiBwYXJzZWRWYWx1ZXMsIENTU1BhcnNlclZhbHVlKiB2YWx1ZSwgU2l6ZVBhcmFtZXRlclR5cGUg
cHJldlBhcmFtVHlwZSkKK0NTU1BhcnNlcjo6U2l6ZVBhcmFtZXRlclR5cGUgQ1NTUGFyc2VyOjpw
YXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBwYXJzZWRWYWx1ZXMsIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSwgU2l6ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSkKIHsKLSAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgeworICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKICAgICBjYXNlIENTU1Zh
bHVlQXV0bzoKICAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSkgewotICAgICAgICAg
ICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpKTsKICAgICAgICAgICAgIHJl
dHVybiBBdXRvOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOwogICAgIGNhc2UgQ1NT
VmFsdWVMYW5kc2NhcGU6CiAgICAgY2FzZSBDU1NWYWx1ZVBvcnRyYWl0OgogICAgICAgICBpZiAo
cHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gUGFnZVNpemUpIHsKLSAg
ICAgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7CiAgICAgICAg
ICAgICByZXR1cm4gT3JpZW50YXRpb247CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vbmU7
CkBAIC0zNzY5LDEzICszNzY4LDEzIEBAIENTU1BhcnNlcjo6U2l6ZVBhcmFtZXRlclR5cGUgQ1NT
UGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0KiBwYXJzZWRWCiAgICAgICAg
IGlmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBPcmllbnRhdGlv
bikgewogICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIFBhZ2UgU2l6ZSB0aGVuIE9yaWVudGF0
aW9uIG9yZGVyIGJ5IHByZXBlbmRpbmcuCiAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBzcGVj
aWZpZWQgYnkgdGhlIENTUzMgUGFnZWQgTWVkaWEgc3BlY2lmaWNhdGlvbiwgYnV0IGZvciBzaW1w
bGVyIHByb2Nlc3NpbmcgbGF0ZXIgKFN0eWxlUmVzb2x2ZXI6OmFwcGx5UGFnZVNpemVQcm9wZXJ0
eSkuCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPnByZXBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgcGFyc2VkVmFsdWVz
LnByZXBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7
CiAgICAgICAgICAgICByZXR1cm4gUGFnZVNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IE5vbmU7Ci0gICAgY2FzZSAwOgorICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICBp
ZiAodmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUg
PT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IExlbmd0aCkpIHsKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlcy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBMZW5ndGg7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIE5vbmU7CkBAIC0zNzg5LDEwICszNzg4LDEwIEBAIENTU1BhcnNlcjo6U2l6ZVBhcmFt
ZXRlclR5cGUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0KiBwYXJz
ZWRWCiBib29sIENTU1BhcnNlcjo6cGFyc2VRdW90ZXMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFs
dWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbC0+dW5p
dCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICB3aGlsZSAoQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAgICBpZiAodmFs
dWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWwtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgdmFs
dWVzLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwogICAgIH0KICAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSkgewpAQCAtMzgwNSwxNyArMzgwNCwx
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VRdW90ZXMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VBbHQoQ1NTUHJvcGVydHlJRCBw
cm9wSUQsIGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUgPSAq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVl
OwogCi0gICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykK
LSAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWwpOwot
ICAgIGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAg
ICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJncy5nZXQo
KTsKKyAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpCisgICAgICAgIHBhcnNlZFZhbHVlID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUo
Y3VycmVudFZhbHVlKTsKKyAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24pIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0g
Y3VycmVudFZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgICAgICBpZiAoIWFyZ3MpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWwtPmZ1bmN0aW9uLT5uYW1lLCAiYXR0cigiKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
cGFyc2VBdHRyKGFyZ3MpOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY3VycmVudFZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiYXR0cigiKSkKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
cGFyc2VBdHRyKCphcmdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBhcnNlZFZhbHVlKSB7CkBA
IC0zODM0LDQwICszODMzLDQwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKIAotICAg
IHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewor
ICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7Ci0gICAgICAgIGlmICh2
YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgaWYgKHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAv
LyB1cmwKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKHZhbC0+c3RyaW5nKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBD
U1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUtPnN0cmluZykpOworICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewog
ICAgICAgICAgICAgLy8gYXR0cihYKSB8IGNvdW50ZXIoWCBbLFldKSB8IGNvdW50ZXJzKFgsIFks
IFssWl0pIHwgLXdlYmtpdC1ncmFkaWVudCguLi4pCi0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWwtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOworICAgICAgICAgICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAg
ICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiYXR0cigi
KSkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VBdHRyKGFyZ3MpOworICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImF0
dHIoIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQXR0cigqYXJncyk7
CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWwtPmZ1bmN0aW9uLT5uYW1lLCAiY291bnRlcigiKSkgewotICAgICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VDb3VudGVyQ29udGVudChhcmdzLCBmYWxzZSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNvdW50
ZXIoIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQ291bnRlckNvbnRl
bnQoKmFyZ3MsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJjb3VudGVycygiKSkgewotICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb3VudGVyQ29udGVudChhcmdzLCB0cnVl
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAiY291bnRlcnMoIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlQ291bnRlckNvbnRlbnQoKmFyZ3MsIHRydWUpOwogICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZUltYWdlU2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
YXJzZUdlbmVyYXRlZEltYWdlKG1fdmFsdWVMaXN0LmdldCgpLCBwYXJzZWRWYWx1ZSkpCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSgqdmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2Vk
VmFsdWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAg
ICAgICAgICAgICAvLyBvcGVuLXF1b3RlCiAgICAgICAgICAgICAvLyBjbG9zZS1xdW90ZQogICAg
ICAgICAgICAgLy8gbm8tb3Blbi1xdW90ZQpAQCAtMzg3NiwyMCArMzg3NSwyMCBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VDb250ZW50KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCAo
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwMykuCiAgICAgICAgICAg
ICAvLyBub25lCiAgICAgICAgICAgICAvLyBub3JtYWwKLSAgICAgICAgICAgIHN3aXRjaCAodmFs
LT5pZCkgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVPcGVuUXVvdGU6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90
ZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9uZToK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7Cisg
ICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7
Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZh
bCk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3JlYXRlUHJpbWl0aXZl
U3RyaW5nVmFsdWUoKnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXBhcnNlZFZhbHVl
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTA2LDIyICszOTA1LDIyIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNvbnRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQogewotICAgIGlm
IChhcmdzLT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFyZ3Muc2l6
ZSgpICE9IDEpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUq
IGEgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50ID0gKmFy
Z3MuY3VycmVudCgpOwogCi0gICAgaWYgKGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFyZ3VtZW50LnVuaXQgIT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBTdHJpbmcgYXR0ck5hbWUgPSBhLT5zdHJpbmc7CisgICAgU3RyaW5nIGF0dHJOYW1lID0gYXJn
dW1lbnQuc3RyaW5nOwogICAgIC8vIENTUyBhbGxvd3MgaWRlbnRpZmllcnMgd2l0aCAiLSIgYXQg
dGhlIHN0YXJ0LCBsaWtlICItd2Via2l0LW1hc2staW1hZ2UiLgogICAgIC8vIEJ1dCBIVE1MIGF0
dHJpYnV0ZSBuYW1lcyBjYW4ndCBoYXZlIHRob3NlIGNoYXJhY3RlcnMsIGFuZCB3ZSBzaG91bGQg
bm90CiAgICAgLy8gZXZlbiBwYXJzZSB0aGVtIGluc2lkZSBhdHRyKCkuCiAgICAgaWYgKGF0dHJO
YW1lWzBdID09ICctJykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKG1fY29udGV4dC5pc0hUTUxEb2N1bWVudCkKICAgICAgICAgYXR0ck5hbWUg
PSBhdHRyTmFtZS5sb3dlcigpOwpAQCAtMzkzOCwyMiArMzkzNywyMiBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKCkKICAgICByZXR1cm4gcGFy
c2VDb2xvcigpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsSW1hZ2UoQ1NTUGFyc2Vy
VmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQ
dHI8Q1NTVmFsdWU+JiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWVMaXN0LT5jdXJyZW50KCktPmlk
ID09IENTU1ZhbHVlTm9uZSkgeworICAgIGlmICh2YWx1ZUxpc3QuY3VycmVudCgpLT5pZCA9PSBD
U1NWYWx1ZU5vbmUpIHsKICAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
ICAgIGlmICh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSkgewotICAgICAgICB2YWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0
ZVVSTCh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+c3RyaW5nKSk7CisgICAgaWYgKHZhbHVlTGlzdC5j
dXJyZW50KCktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAg
dmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWVMaXN0LmN1cnJl
bnQoKS0+c3RyaW5nKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChp
c0dlbmVyYXRlZEltYWdlVmFsdWUodmFsdWVMaXN0LT5jdXJyZW50KCkpKQorICAgIGlmIChpc0dl
bmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpKQogICAgICAgICByZXR1cm4g
cGFyc2VHZW5lcmF0ZWRJbWFnZSh2YWx1ZUxpc3QsIHZhbHVlKTsKICAgICAKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKLSAgICBpZiAodmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlTGlzdC0+Y3Vy
cmVudCgpLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CisgICAgaWYg
KHZhbHVlTGlzdC5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYm
IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5uYW1lLCAi
LXdlYmtpdC1pbWFnZS1zZXQoIikpIHsKICAgICAgICAgdmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7
CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzk2Myw5
ICszOTYyLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVl
TGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblgoQ1NT
UGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFBvc2l0aW9uWChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKIHsK
LSAgICBpbnQgaWQgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CisgICAgaW50IGlkID0gdmFs
dWVMaXN0LmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlTGVmdCB8fCBpZCA9
PSBDU1NWYWx1ZVJpZ2h0IHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7CiAgICAgICAgIGludCBw
ZXJjZW50ID0gMDsKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlUmlnaHQpCkBAIC0zOTc0LDE0
ICszOTczLDE0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9z
aXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0CiAgICAgICAgICAgICBwZXJjZW50
ID0gNTA7CiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShwZXJjZW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KLSAgICBpZiAodmFs
aWRVbml0KHZhbHVlTGlzdC0+Y3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgp
KTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgp
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblkoQ1NT
UGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFBvc2l0aW9uWShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKIHsK
LSAgICBpbnQgaWQgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CisgICAgaW50IGlkID0gdmFs
dWVMaXN0LmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlVG9wIHx8IGlkID09
IENTU1ZhbHVlQm90dG9tIHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7CiAgICAgICAgIGludCBw
ZXJjZW50ID0gMDsKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQm90dG9tKQpAQCAtMzk5MCwx
NCArMzk4OSwxNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBv
c2l0aW9uWShDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdAogICAgICAgICAgICAgcGVyY2Vu
dCA9IDUwOwogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2Vu
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9Ci0gICAgaWYgKHZh
bGlkVW5pdCh2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKHZhbGlkVW5pdCgqdmFsdWVMaXN0LmN1cnJlbnQo
KSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9z
aXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIHVuc2lnbmVkJiBj
dW11bGF0aXZlRmxhZ3MsIEZpbGxQb3NpdGlvbkZsYWcmIGluZGl2aWR1YWxGbGFnLCBGaWxsUG9z
aXRpb25QYXJzaW5nTW9kZSBwYXJzaW5nTW9kZSkKK1Bhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkJiBjdW11bGF0aXZlRmxhZ3MsIEZpbGxQb3NpdGlvbkZs
YWcmIGluZGl2aWR1YWxGbGFnLCBGaWxsUG9zaXRpb25QYXJzaW5nTW9kZSBwYXJzaW5nTW9kZSkK
IHsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkOworICAgIENT
U1ZhbHVlSUQgaWQgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5pZDsKICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlVG9wIHx8IGlkID09IENTU1ZhbHVlUmlnaHQgfHwg
aWQgPT0gQ1NTVmFsdWVCb3R0b20gfHwgaWQgPT0gQ1NTVmFsdWVDZW50ZXIpIHsKICAgICAgICAg
aW50IHBlcmNlbnQgPSAwOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09
IENTU1ZhbHVlUmlnaHQpIHsKQEAgLTQwMjcsNyArNDAyNiw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFy
c2VyVmFsCiAKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNl
bnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2
YWxpZFVuaXQodmFsdWVMaXN0LT5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKKyAg
ICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgp
KSB7CiAgICAgICAgIGlmICghY3VtdWxhdGl2ZUZsYWdzKSB7CiAgICAgICAgICAgICBjdW11bGF0
aXZlRmxhZ3MgfD0gWEZpbGxQb3NpdGlvbjsKICAgICAgICAgICAgIGluZGl2aWR1YWxGbGFnID0g
WEZpbGxQb3NpdGlvbjsKQEAgLTQwMzksNyArNDAzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2Vy
VmFsCiAgICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IG51bGxwdHI7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGlj
IGJvb2wgaXNGaWxsUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgdmFsdWUpCiAgICAgcmV0dXJu
IHZhbHVlID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZSA9
PSBDU1NWYWx1ZUJvdHRvbSB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlID09IENT
U1ZhbHVlQ2VudGVyOwogfQogCi12b2lkIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzRmlsbFBvc2l0
aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VkVmFsdWUxLCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1
ZTIpCit2b2lkIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NW
YWx1ZT4mIHZhbHVlMiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUx
LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTIpCiB7CiAgICAgLy8g
WyBsZWZ0IHwgcmlnaHQgXSBbIDxwZXJjZW50YWdlXSB8IDxsZW5ndGg+IF0gJiYgWyB0b3AgfCBi
b3R0b20gXSBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0KICAgICAvLyBJbiB0aGUgY2FzZSBv
ZiA0IHZhbHVlcyA8cG9zaXRpb24+IHJlcXVpcmVzIHRoZSBzZWNvbmQgdmFsdWUgdG8gYmUgYSBs
ZW5ndGggb3IgYSBwZXJjZW50YWdlLgpAQCAtNDA4OCw3ICs0MDg3LDcgQEAgdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlNFZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlz
dCwgUmVmUHRyPEMKICAgICBpZiAoaXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlk
ZW50MSwgaWRlbnQzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdmFsdWVMaXN0LT5uZXh0KCk7
CisgICAgdmFsdWVMaXN0Lm5leHQoKTsKIAogICAgIGN1bXVsYXRpdmVGbGFncyA9IDA7CiAgICAg
RmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTRGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKQEAgLTQx
MDYsOSArNDEwNSw5IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTRWYWx1ZXNGaWxsUG9zaXRpb24o
Q1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDCiAgICAgaWYgKGlkZW50MSA9
PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20pCiAgICAgICAgIHZhbHVl
MS5zd2FwKHZhbHVlMik7CiAKLSAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICB2YWx1ZUxpc3Qu
bmV4dCgpOwogfQotdm9pZCBDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQ
YXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQ
dHI8Q1NTVmFsdWU+JiB2YWx1ZTIsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
ZFZhbHVlMSwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyKQordm9p
ZCBDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2
YWx1ZTIsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSwgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyKQogewogICAgIHVuc2lnbmVkIGN1
bXVsYXRpdmVGbGFncyA9IDA7CiAgICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTNGbGFnID0gSW52
YWxpZEZpbGxQb3NpdGlvbjsKQEAgLTQxMTgsNyArNDExNyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDCiAgICAgaWYgKCF2YWx1ZTMpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZhbHVlTGlz
dC0+bmV4dCgpOworICAgIHZhbHVlTGlzdC5uZXh0KCk7CiAKICAgICBib29sIHN3YXBOZWVkZWQg
PSBmYWxzZTsKICAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNlZFZhbHVlMS0+Z2V0VmFsdWVJ
RCgpOwpAQCAtNDE5OSwxNyArNDE5OCwxNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVz
RmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8QwogI2Vu
ZGlmCiB9CiAKLWlubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3RlbnRpYWxQb3NpdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK2lubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3RlbnRp
YWxQb3NpdGlvblZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gaXNG
aWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLT5pZCkgfHwgdmFsaWRVbml0KHZhbHVlLCBGUGVyY2Vu
dCB8IEZMZW5ndGgsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIHJldHVybiBpc0ZpbGxQ
b3NpdGlvbktleXdvcmQodmFsdWUuaWQpIHx8IHZhbGlkVW5pdCh2YWx1ZSwgRlBlcmNlbnQgfCBG
TGVuZ3RoLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OnBh
cnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NT
VmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKK3ZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZUZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTIpCiB7CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlTGlz
dC0+Y3VycmVudEluZGV4KCk7IGkgPCB2YWx1ZUxpc3QtPnNpemUoKTsgKytpLCArK251bWJlck9m
VmFsdWVzKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50ID0gdmFsdWVMaXN0LT52
YWx1ZUF0KGkpOwotICAgICAgICBpZiAoaXNDb21tYShjdXJyZW50KSB8fCAhY3VycmVudCB8fCBp
c0ZvcndhcmRTbGFzaE9wZXJhdG9yKGN1cnJlbnQpIHx8ICFpc1BvdGVudGlhbFBvc2l0aW9uVmFs
dWUoY3VycmVudCkpCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWVMaXN0LmN1cnJlbnRJbmRl
eCgpOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgKytpLCArK251bWJlck9mVmFsdWVzKSB7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50ID0gdmFsdWVMaXN0LnZhbHVlQXQoaSk7CisgICAg
ICAgIGlmICghY3VycmVudCB8fCBpc0NvbW1hKGN1cnJlbnQpIHx8IGlzRm9yd2FyZFNsYXNoT3Bl
cmF0b3IoKmN1cnJlbnQpIHx8ICFpc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoKmN1cnJlbnQpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjI0LDcgKzQyMjMsNyBAQCB2b2lkIENT
U1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDU1NWYWx1ZQogCiAgICAgQVNTRVJUKG51bWJlck9mVmFsdWVzID4gMiAmJiBudW1i
ZXJPZlZhbHVlcyA8PSA0KTsKIAotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlz
dC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC5jdXJy
ZW50KCk7CiAKICAgICAvLyA8cG9zaXRpb24+IHJlcXVpcmVzIHRoZSBmaXJzdCB2YWx1ZSB0byBi
ZSBhIGJhY2tncm91bmQga2V5d29yZC4KICAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZCh2
YWx1ZS0+aWQpKQpAQCAtNDIzOCwxNCArNDIzNywxNCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VG
aWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1
ZQogICAgIGlmICghdmFsdWUxKQogICAgICAgICByZXR1cm47CiAKLSAgICB2YWx1ZSA9IHZhbHVl
TGlzdC0+bmV4dCgpOworICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKIAogICAgIC8vIElu
IGNhc2Ugd2UgYXJlIHBhcnNpbmcgbW9yZSB0aGFuIHR3byB2YWx1ZXMsIHJlbGF4IHRoZSBjaGVj
ayBpbnNpZGUgb2YgcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQuIHRvcCAyMHB4IGlzCiAgICAg
Ly8gYSB2YWxpZCBzdGFydCBmb3IgPHBvc2l0aW9uPi4KICAgICBjdW11bGF0aXZlRmxhZ3MgPSBB
bWJpZ3VvdXNGaWxsUG9zaXRpb247CiAgICAgdmFsdWUyID0gcGFyc2VGaWxsUG9zaXRpb25Db21w
b25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlMkZsYWcsIFJlc29sdmVWYWx1
ZXNBc0tleXdvcmQpOwogICAgIGlmICh2YWx1ZTIpCi0gICAgICAgIHZhbHVlTGlzdC0+bmV4dCgp
OworICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOwogICAgIGVsc2UgewogICAgICAgICB2YWx1ZTEu
Y2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDI2Nyw5ICs0MjY2LDkgQEAgdm9pZCBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBS
ZWZQdHI8Q1NTVmFsdWUKICAgICAgICAgcGFyc2U0VmFsdWVzRmlsbFBvc2l0aW9uKHZhbHVlTGlz
dCwgdmFsdWUxLCB2YWx1ZTIsIHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5y
ZWxlYXNlKCkpOwogfQogCi12b2lkIENTU1BhcnNlcjo6cGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9u
KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEs
IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZTJWYWx1ZXNG
aWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1
ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQogewotICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCk7CiAKICAgICAvLyBQYXJzZSB0aGUgZmlyc3QgdmFs
dWUuICBXZSdyZSBqdXN0IG1ha2luZyBzdXJlIHRoYXQgaXQgaXMgb25lIG9mIHRoZSB2YWxpZCBr
ZXl3b3JkcyBvciBhIHBlcmNlbnRhZ2UvbGVuZ3RoLgogICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVG
bGFncyA9IDA7CkBAIC00MjgyLDE2ICs0MjgxLDE2IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTJW
YWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxD
CiAgICAgLy8gSXQgb25seSB0YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRpb24g
dG8gYmUgY29ycmVjdGx5IHBhcnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRoYW5k
IChzaW5jZSB3ZQogICAgIC8vIGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJlbG9u
ZyB0byB0aGUgcmVzdCBvZiB0aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEg
c2hvcnRoYW5kLCB0aG91Z2gsIHRoZQogICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNwZWNp
ZmllZCBmb3Igb3VyIHByb3BlcnR5LgotICAgIHZhbHVlID0gdmFsdWVMaXN0LT5uZXh0KCk7Cisg
ICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwogCiAgICAgLy8gRmlyc3QgY2hlY2sgZm9yIHRo
ZSBjb21tYS4gIElmIHNvLCB3ZSBhcmUgZmluaXNoZWQgcGFyc2luZyB0aGlzIHZhbHVlIG9yIHZh
bHVlIHBhaXIuCiAgICAgaWYgKGlzQ29tbWEodmFsdWUpKQotICAgICAgICB2YWx1ZSA9IDA7Cisg
ICAgICAgIHZhbHVlID0gbnVsbHB0cjsKIAogICAgIGlmICh2YWx1ZSkgewogICAgICAgICB2YWx1
ZTIgPSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRpdmVGbGFn
cywgdmFsdWUyRmxhZyk7CiAgICAgICAgIGlmICh2YWx1ZTIpCi0gICAgICAgICAgICB2YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgaWYgKCFpblNob3J0aGFuZCgpKSB7CiAgICAgICAgICAgICAgICAgdmFs
dWUxLmNsZWFyKCk7CkBAIC00MzMxLDcgKzQzMzAsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VG
aWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dQogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0
IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkKICAgICAgICAg
dmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICBl
bHNlIHsKLSAgICAgICAgdmFsdWUxID0gMDsKKyAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM2NSw5ICs0MzY0LDkgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sJiBhbGxvd0MKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAg
cGFyc2VkVmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQXV0byk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVu
Z3RoIHwgRlBlcmNlbnQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBhcnNlZFZh
bHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGlmICgh
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoKnZhbHVlKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlMjsKQEAgLTQzNzUsMTMgKzQzNzQsMTMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxv
d0MKICAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiB2YWx1ZS0+aVZhbHVlID09ICcsJykKICAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsK
ICAgICAgICAgZWxzZSBpZiAodmFsdWUtPmlkICE9IENTU1ZhbHVlQXV0bykgewotICAgICAgICAg
ICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAg
ICAgIGlmICghdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogICAgICAg
ICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4gaXQgaXMg
YWR2YW5jZWQgd2UnbGwgZW5kIHVwIGJhY2sgYXQgdGhpcyB2YWx1ZS4KICAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCp2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFwYXJzZWRWYWx1ZTIgJiYg
cHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUpIHsKICAgICAgICAgLy8g
Rm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHNldCB0aGUgc2Vjb25kIHZhbHVlIHRvIHRo
ZSBmaXJzdCBpZiBpdCBpcyBvbWl0dGVkLgpAQCAtNDQwMCwxMyArNDM5OSwxMyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3Bl
cnR5SUQmIHByb3BJZDEsCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczI7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbDsK
KyAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWU7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTI7CiAKICAgICBib29sIGFsbG93Q29t
bWEgPSBmYWxzZTsKIAotICAgIHJldFZhbHVlMSA9IHJldFZhbHVlMiA9IDA7CisgICAgcmV0VmFs
dWUxID0gcmV0VmFsdWUyID0gbnVsbHB0cjsKICAgICBwcm9wSWQxID0gcHJvcElkOwogICAgIHBy
b3BJZDIgPSBwcm9wSWQ7CiAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvbikgewpAQCAtNDQyMywxMiArNDQyMiwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VG
aWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEs
CiAgICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOwogICAgIH0K
IAotICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKKyAgICB3aGls
ZSAoKGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJW
YWx1ZTI7CiAKICAgICAgICAgaWYgKGFsbG93Q29tbWEpIHsKLSAgICAgICAgICAgIGlmICghaXND
b21tYSh2YWwpKQorICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGN1cnJlbnRWYWx1ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKICAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKQEAgLTQ0NDEsMTQgKzQ0NDAsMTQg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElk
LCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLAogICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgotICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsLT5pZCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWwtPmlkID09IENTU1ZhbHVl
Rml4ZWQgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
LT5pZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlU2Nyb2xsIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaXhlZCB8fCBjdXJyZW50
VmFsdWUtPmlkID09IENTU1ZhbHVlTG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFs
dWUtPmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKICAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgotICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VGaWxsSW1hZ2UobV92YWx1ZUxpc3QuZ2V0KCksIGN1cnJWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZUZpbGxJbWFnZSgqbV92YWx1ZUxpc3QsIGN1cnJWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZENsaXA6CkBAIC00NDU3LDU3ICs0NDU2LDU3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJv
cElkMSwKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRocmVlIHZhbHVlcyBoZXJlIGFyZSBk
ZXByZWNhdGVkIGFuZCBkbyBub3QgYXBwbHkgdG8gdGhlIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5
IHRoYXQgaGFzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAtd2Via2l0LSBwcmVmaXggcmVt
b3ZlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVCb3JkZXIg
fHwgdmFsLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmcgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUNvbnRl
bnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbC0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJC
b3ggfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgdmFsLT5pZCA9PSBDU1NWYWx1
ZUNvbnRlbnRCb3ggfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgocHJvcElkID09IENTU1By
b3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgfHwgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0
TWFza0NsaXApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZhbC0+aWQgPT0gQ1NTVmFs
dWVUZXh0IHx8IHZhbC0+aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVCb3JkZXIgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmcg
fHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVu
dFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUNvbnRlbnRCb3gKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgocHJvcElkID09
IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgfHwgcHJvcElkID09IENTU1Byb3BlcnR5
V2Via2l0TWFza0NsaXApCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY3VycmVudFZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVRleHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtp
dFRleHQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tn
cm91bmRDbGlwKHZhbCwgY3VyclZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNl
QmFja2dyb3VuZENsaXAoKmN1cnJlbnRWYWx1ZSwgY3VyclZhbHVlKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWwt
PmlkID09IENTU1ZhbHVlUGFkZGluZ0JveCB8fCB2YWwtPmlkID09IENTU1ZhbHVlQ29udGVudEJv
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCBjdXJyZW50VmFsdWUtPmlk
ID09IENTU1ZhbHVlUGFkZGluZ0JveCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29u
dGVudEJveCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0
aW9uKG1fdmFsdWVMaXN0LmdldCgpLCBjdXJyVmFsdWUsIGN1cnJWYWx1ZTIpOworICAgICAgICAg
ICAgICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbigqbV92YWx1ZUxpc3QsIGN1cnJWYWx1ZSwgY3Vy
clZhbHVlMik7CiAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlRmlsbFBvc2l0aW9uIGFkdmFu
Y2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyLgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKICAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWDogewotICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlvblgobV92YWx1ZUxp
c3QuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxQb3Np
dGlvblgoKm1fdmFsdWVMaXN0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKICAgICAgICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWTogewotICAgICAgICAgICAgICAgICAgICBjdXJy
VmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlvblkobV92YWx1ZUxpc3QuZ2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlvblkoKm1fdmFsdWVMaXN0KTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZENvbXBvc2l0ZToKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0NvbXBvc2l0ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+aWQgPj0gQ1NTVmFs
dWVDbGVhciAmJiB2YWwtPmlkIDw9IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQg
Pj0gQ1NTVmFsdWVDbGVhciAmJiBjdXJyZW50VmFsdWUtPmlkIDw9IENTU1ZhbHVlUGx1c0xpZ2h0
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRCbGVuZE1vZGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjc3NDb21wb3Np
dGluZ0VuYWJsZWQoKSAmJiAodmFsLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWwtPmlkID09
IENTU1ZhbHVlTXVsdGlwbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHZhbC0+aWQgPT0g
Q1NTVmFsdWVTY3JlZW4gfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZU92ZXJsYXkgfHwgdmFsLT5pZCA9
PSBDU1NWYWx1ZURhcmtlbgotICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFsLT5pZCA9PSBD
U1NWYWx1ZUxpZ2h0ZW4gfHwgIHZhbC0+aWQgPT0gQ1NTVmFsdWVDb2xvckRvZGdlIHx8IHZhbC0+
aWQgPT0gQ1NTVmFsdWVDb2xvckJ1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHZhbC0+
aWQgPT0gQ1NTVmFsdWVIYXJkTGlnaHQgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZVNvZnRMaWdodCB8
fCB2YWwtPmlkID09IENTU1ZhbHVlRGlmZmVyZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAg
fHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUV4Y2x1c2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwt
PmlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNzc0NvbXBvc2l0aW5nRW5hYmxlZCgpICYm
IChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVNdWx0aXBseQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgY3VycmVudFZh
bHVlLT5pZCA9PSBDU1NWYWx1ZVNjcmVlbiB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVl
T3ZlcmxheSB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlRGFya2VuCisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTGlnaHRlbiB8fCAg
Y3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbG9yRG9kZ2UgfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUNvbG9yQnVybgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgY3VycmVu
dFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUhhcmRMaWdodCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENT
U1ZhbHVlU29mdExpZ2h0IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVEaWZmZXJlbmNl
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVl
RXhjbHVzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MjUsMTEgKzQ1MjQsMTEgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBD
U1NQcm9wZXJ0eUlEJiBwcm9wSWQxLAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tT
b3VyY2VUeXBlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmlkID09IENTU1ZhbHVl
QXV0byB8fCB2YWwtPmlkID09IENTU1ZhbHVlQWxwaGEgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUx1
bWluYW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUFscGhhIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMdW1pbmFu
Y2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDU4Miwx
MCArNDU4MSwxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVl
LCBGVGltZSkpCiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWUpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKQEAgLTQ1OTMs
MTUgKzQ1OTIsMTUgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1h
dGlvbkRpcmVjdGlvbigpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXZlcnNl
IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZVJldmVyc2UpCiAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkR1cmF0aW9uKCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlJiB2
YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWxpZFVuaXQodmFsdWUs
IEZUaW1lIHwgRk5vbk5lZykpCiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWUpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRmlsbE1vZGUoKQpA
QCAtNDYwOSw0NiArNDYwOCw0NSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlQW5pbWF0aW9uRmlsbE1vZGUoKQogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwg
dmFsdWUtPmlkID09IENTU1ZhbHVlRm9yd2FyZHMgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQmFj
a3dhcmRzIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJvdGgpCiAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICpt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUluZmlu
aXRlKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLmlkKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykp
CiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAg
IHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
Tm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJub25lIikpKSB7CisgICAgQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZU5v
bmUgfHwgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYgZXF1
YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJub25lIikpKSB7CiAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUo
dmFsdWUpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdW
YWx1ZSh2YWx1ZSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUGxheVN0
YXRlKCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVBhdXNlZCkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgIHJldHVybiAwOworICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS5pZCA9
PSBDU1NWYWx1ZVJ1bm5pbmcgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVQYXVzZWQpCisgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uUGFyc2VDb250ZXh0JiBjb250ZXh0KQog
ewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIENTU1Byb3BlcnR5SUQgcmVzdWx0ID0gY3NzUHJvcGVydHlJRCh2
YWx1ZS0+c3RyaW5nKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDU1NQcm9wZXJ0eUlEIHJlc3Vs
dCA9IGNzc1Byb3BlcnR5SUQodmFsdWUuc3RyaW5nKTsKICAgICBpZiAocmVzdWx0KQogICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3VsdCk7CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiYWxsIikpIHsKQEAgLTQ2NjAsMTcgKzQ2
NTgsMTcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblBy
b3BlcnR5KEFuaW1hdGlvblBhcnNlQ29udGV4dCYgY28KICAgICAgICAgY29udGV4dC5zYXdBbmlt
YXRpb25Qcm9wZXJ0eUtleXdvcmQoKTsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgIH0KLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3Jt
T3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVl
PiYgdmFsdWUyLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTMpCiB7Ci0gICAgcGFyc2UyVmFsdWVz
RmlsbFBvc2l0aW9uKG1fdmFsdWVMaXN0LmdldCgpLCB2YWx1ZTEsIHZhbHVlMik7CisgICAgcGFy
c2UyVmFsdWVzRmlsbFBvc2l0aW9uKCptX3ZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIpOwogCiAg
ICAgLy8gbm93IGdldCB6CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAg
ICAgaWYgKHZhbGlkVW5pdChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBGTGVuZ3RoKSkgewotICAg
ICAgICAgICAgdmFsdWUzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOworICAgICAgICBpZiAodmFsaWRVbml0KCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLCBGTGVuZ3RoKSkgeworICAgICAgICAgICAgdmFsdWUzID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICAgICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDY4
MCw5MSArNDY3OCw5MSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9y
dGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8QwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUoQ1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpCitib29sIENTU1Bh
cnNlcjo6cGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVM
aXN0JiBhcmdzLCBkb3VibGUmIHJlc3VsdCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIpKQor
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGFyZ3MuY3VycmVudCgpOworICAgIGlmICghdmFs
aWRVbml0KCp2YWx1ZSwgRk51bWJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1
bHQgPSBwYXJzZWREb3VibGUoKnZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKLSAgICB2
YWx1ZSA9IGFyZ3MtPm5leHQoKTsKKyAgICB2YWx1ZSA9IGFyZ3MubmV4dCgpOwogICAgIGlmICgh
dmFsdWUpIHsKICAgICAgICAgLy8gVGhlIGxhc3QgbnVtYmVyIGluIHRoZSBmdW5jdGlvbiBoYXMg
bm8gY29tbWEgYWZ0ZXIgaXQsIHNvIHdlJ3JlIGRvbmUuCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgYXJncy0+bmV4dCgpOworICAgIGFyZ3MubmV4dCgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb24oKQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVFYXNlT3V0Ci0gICAgICAgIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVh
c2VJbk91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTdGVwU3RhcnQgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlU3RlcEVuZCkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICpt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2Ug
fHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVMaW5lYXIgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVFYXNl
SW4gfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVFYXNlT3V0CisgICAgICAgIHx8IHZhbHVlLmlkID09
IENTU1ZhbHVlRWFzZUluT3V0IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlU3RlcFN0YXJ0IHx8IHZh
bHVlLmlkID09IENTU1ZhbHVlU3RlcEVuZCkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAKICAgICAvLyBXZSBtdXN0IGJlIGEg
ZnVuY3Rpb24uCi0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
bikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6OkZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIENTU1BhcnNlclZh
bHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKIAotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJzdGVwcygiKSkgewor
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInN0ZXBzKCIp
KSB7CiAgICAgICAgIC8vIEZvciBzdGVwcywgMSBvciAyIHBhcmFtcyBtdXN0IGJlIHNwZWNpZmll
ZCAoY29tbWEtc2VwYXJhdGVkKQogICAgICAgICBpZiAoIWFyZ3MgfHwgKGFyZ3MtPnNpemUoKSAh
PSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgLy8gVGhlcmUgYXJlIHR3byB2YWx1ZXMu
CiAgICAgICAgIGludCBudW1TdGVwczsKICAgICAgICAgYm9vbCBzdGVwQXRTdGFydCA9IGZhbHNl
OwogCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2ID0gYXJncy0+Y3VycmVudCgpOwotICAgICAg
ICBpZiAoIXZhbGlkVW5pdCh2LCBGSW50ZWdlcikpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgbnVtU3RlcHMgPSBjbGFtcFRvSW50ZWdlcih2LT5mVmFsdWUpOworICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgICAgICBpZiAo
IXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGSW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgbnVtU3RlcHMgPSBjbGFtcFRvSW50ZWdlcihjdXJyZW50VmFsdWUt
PmZWYWx1ZSk7CiAgICAgICAgIGlmIChudW1TdGVwcyA8IDEpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgdiA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7CiAKLSAgICAgICAgaWYgKHYp
IHsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkgewogICAgICAgICAgICAgLy8gVGhlcmUgaXMg
YSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAgICAgICAg
IGlmICghaXNDb21tYSh2KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IHYgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodi0+aWQgIT0gQ1NTVmFsdWVTdGFy
dCAmJiB2LT5pZCAhPSBDU1NWYWx1ZUVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIHN0ZXBBdFN0YXJ0ID0gdi0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKKyAgICAgICAg
ICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgIT0gQ1NTVmFsdWVTdGFydCAmJiBjdXJyZW50VmFs
dWUtPmlkICE9IENTU1ZhbHVlRW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlU3Rh
cnQ7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZh
bHVlOjpjcmVhdGUobnVtU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKICAgICB9CiAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiY3ViaWMtYmV6aWVyKCIpKSB7
CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3ViaWMt
YmV6aWVyKCIpKSB7CiAgICAgICAgIC8vIEZvciBjdWJpYyBiZXppZXIsIDQgdmFsdWVzIG11c3Qg
YmUgc3BlY2lmaWVkLgogICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDcpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
ICAgIC8vIFRoZXJlIGFyZSB0d28gcG9pbnRzIHNwZWNpZmllZC4gVGhlIHggdmFsdWVzIG11c3Qg
YmUgYmV0d2VlbiAwIGFuZCAxIGJ1dCB0aGUgeSB2YWx1ZXMgY2FuIGV4Y2VlZCB0aGlzIHJhbmdl
LgogICAgICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAKLSAgICAgICAgaWYgKCFwYXJzZUN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShhcmdzLCB4MSkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKCFwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgq
YXJncywgeDEpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmICh4MSA8
IDAgfHwgeDEgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmICghcGFyc2VD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoYXJncywgeTEpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGlmICghcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUo
YXJncywgeDIpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgaWYgKCFwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgq
YXJncywgeTEpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmICghcGFy
c2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MsIHgyKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoeDIgPCAwIHx8IHgyID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBpZiAoIXBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKGFyZ3MsIHkyKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIGlmICghcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
VmFsdWUoKmFyZ3MsIHkyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
IHJldHVybiBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZSh4MSwgeTEs
IHgyLCB5Mik7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQsIEFuaW1hdGlvblBhcnNlQ29udGV4dCYg
Y29udGV4dCkKQEAgLTQ3NzQsNyArNDc3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1h
dGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByCiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKICAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsK
IAotICAgIHJlc3VsdCA9IDA7CisgICAgcmVzdWx0ID0gbnVsbHB0cjsKIAogICAgIHdoaWxlICgo
dmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiBjdXJyVmFsdWU7CkBAIC00ODk2LDIxICs0ODk0LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkQ3VzdG9tSWRlbnQoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlSW50ZWdlck9yQ3VzdG9tSWRlbnRGcm9tR3JpZFBvc2l0aW9uKFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIG51bWVyaWNWYWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYgZ3JpZExpbmVOYW1lKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIpICYmIHZh
bHVlLT5mVmFsdWUpIHsKLSAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIpICYm
IHZhbHVlLT5mVmFsdWUpIHsKKyAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CiAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKICAgICAgICAgaWYgKHZhbHVlICYmIGlzVmFsaWRDdXN0b21JZGVudCgqdmFsdWUpKSB7Ci0g
ICAgICAgICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgaWYgKGlzVmFsaWRDdXN0b21JZGVudCgqdmFsdWUpKSB7Ci0gICAgICAgIGdy
aWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpOworICAgICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1
ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIp
ICYmIHZhbHVlLT5mVmFsdWUpIHsKLSAgICAgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWxpZFVu
aXQoKnZhbHVlLCBGSW50ZWdlcikgJiYgdmFsdWUtPmZWYWx1ZSkgeworICAgICAgICAgICAgbnVt
ZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CiAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNDkzNCw3ICs0OTMyLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUdyaWRQb3NpdGlvbigpCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNwYW4pIHsK
ICAgICAgICAgaGFzU2VlblNwYW5LZXl3b3JkID0gdHJ1ZTsKICAgICAgICAgaWYgKGF1dG8qIG5l
eHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNGb3J3
YXJkU2xhc2hPcGVyYXRvcihuZXh0VmFsdWUpICYmICFwYXJzZUludGVnZXJPckN1c3RvbUlkZW50
RnJvbUdyaWRQb3NpdGlvbihudW1lcmljVmFsdWUsIGdyaWRMaW5lTmFtZSkpCisgICAgICAgICAg
ICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm5leHRWYWx1ZSkgJiYgIXBhcnNlSW50ZWdl
ck9yQ3VzdG9tSWRlbnRGcm9tR3JpZFBvc2l0aW9uKG51bWVyaWNWYWx1ZSwgZ3JpZExpbmVOYW1l
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKHBhcnNlSW50ZWdlck9yQ3VzdG9tSWRlbnRGcm9tR3JpZFBvc2l0aW9uKG51bWVy
aWNWYWx1ZSwgZ3JpZExpbmVOYW1lKSkgewpAQCAtNDk0Nyw3ICs0OTQ1LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAKICAgICAvLyBDaGVj
ayB0aGF0IHdlIGhhdmUgY29uc3VtZWQgYWxsIHRoZSB2YWx1ZSBsaXN0LiBGb3Igc2hvcnRoYW5k
cywgdGhlIHBhcnNlciB3aWxsIHBhc3MKICAgICAvLyB0aGUgd2hvbGUgdmFsdWUgbGlzdCAoaW5j
bHVkaW5nIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbikuCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkgJiYgIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkp
CisgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9yd2FyZFNsYXNoT3BlcmF0
b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIC8vIElmIHdlIGRpZG4ndCBwYXJzZSBhbnl0aGluZywgdGhpcyBpcyBub3QgYSB2YWxpZCBn
cmlkIHBvc2l0aW9uLgpAQCAtNDk3MywxMCArNDk3MSwxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlR3JpZFBvc2l0aW9uKCkKICAgICByZXR1cm4gdmFsdWVzLnJlbGVh
c2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdyaWRNaXNzaW5nR3JpZFBv
c2l0aW9uVmFsdWUoQ1NTVmFsdWUqIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gJnZhbHVlOwogCiAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwog
fQpAQCAtNDk5Myw3ICs0OTkxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEl0ZW1Qb3Np
dGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElkLCBib29sIGkKIAogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gZW5kVmFsdWU7CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
IHsKLSAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpKQorICAgICAgICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICgh
bV92YWx1ZUxpc3QtPm5leHQoKSkKQEAgLTUwMDMsNyArNTAwMSw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUdyaWRJdGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBzaG9ydGhhbmRJ
ZCwgYm9vbCBpCiAgICAgICAgIGlmICghZW5kVmFsdWUgfHwgbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgZW5kVmFs
dWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKHN0YXJ0VmFsdWUuZ2V0KCkpOworICAg
ICAgICBlbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoKnN0YXJ0VmFsdWUp
OwogCiAgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVswXSwgc3RhcnRWYWx1
ZSwgaW1wb3J0YW50KTsKICAgICBhZGRQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpWzFd
LCBlbmRWYWx1ZSwgaW1wb3J0YW50KTsKQEAgLTUwOTAsNyArNTA4OCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVNob3J0aGFuZChib29sIGltcG9ydGFudCkKIAogICAgIC8v
IDItIDxncmlkLXRlbXBsYXRlLWNvbHVtbnM+IC8gPGdyaWQtdGVtcGxhdGUtY29sdW1ucz4gc3lu
dGF4LgogICAgIGlmIChjb2x1bW5zVmFsdWUpIHsKLSAgICAgICAgaWYgKCEobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSAmJiBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKG1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpICYmIG1fdmFsdWVMaXN0LT5uZXh0KCkpKQorICAgICAgICBpZiAoIShtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpICYmIGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpICYmIG1fdmFsdWVMaXN0LT5uZXh0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpbmRleCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50SW5kZXgoKTsKICAgICAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gcm93c1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KCkpIHsKQEAg
LTUxNDMsNyArNTE0MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRTaG9ydGhhbmQoYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgIGlmICghYXV0b0NvbHVtbnNWYWx1ZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAg
ICAgICAgICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSB8fCAhbV92YWx1ZUxpc3QtPm5leHQoKSkKKyAgICAgICAgICAgIGlmICghaXNGb3J3YXJk
U2xhc2hPcGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgfHwgIW1fdmFsdWVMaXN0LT5u
ZXh0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0b1Jv
d3NWYWx1ZSA9IHBhcnNlR3JpZFRyYWNrU2l6ZSgqbV92YWx1ZUxpc3QpOwogICAgICAgICAgICAg
aWYgKCFhdXRvUm93c1ZhbHVlKQpAQCAtNTE5NSwxMyArNTE5MywxMyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VHcmlkQXJlYVNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKCFjb2x1bW5TdGFydFZhbHVlKQotICAgICAgICBjb2x1bW5TdGFy
dFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZShyb3dTdGFydFZhbHVlLmdldCgp
KTsKKyAgICAgICAgY29sdW1uU3RhcnRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFs
dWUoKnJvd1N0YXJ0VmFsdWUpOwogCiAgICAgaWYgKCFyb3dFbmRWYWx1ZSkKLSAgICAgICAgcm93
RW5kVmFsdWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKHJvd1N0YXJ0VmFsdWUuZ2V0
KCkpOworICAgICAgICByb3dFbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUo
KnJvd1N0YXJ0VmFsdWUpOwogCiAgICAgaWYgKCFjb2x1bW5FbmRWYWx1ZSkKLSAgICAgICAgY29s
dW1uRW5kVmFsdWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKGNvbHVtblN0YXJ0VmFs
dWUuZ2V0KCkpOworICAgICAgICBjb2x1bW5FbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0
aW9uVmFsdWUoKmNvbHVtblN0YXJ0VmFsdWUpOwogCiAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRHcmlkUm93U3RhcnQsIHJvd1N0YXJ0VmFsdWUsIGltcG9ydGFudCk7CiAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uU3RhcnQsIGNvbHVtblN0YXJ0VmFs
dWUsIGltcG9ydGFudCk7CkBAIC01MjE1LDcgKzUyMTMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VTaW5nbGVHcmlkQXJlYUxvbmdoYW5kKFJlZlB0cjxDU1NWYWx1ZT4mIHByb3BlcnR5KQogICAg
IGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCisg
ICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQpA
QCAtNTIyOSwyMCArNTIyNywyMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkTGluZU5hbWVz
KENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0LCBDU1NWYWx1ZUxpc3QmCiB7CiAgICAgQVNT
RVJUKGlucHV0TGlzdC5jdXJyZW50KCkgJiYgaW5wdXRMaXN0LmN1cnJlbnQoKS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KTsKIAotICAgIENTU1BhcnNlclZhbHVlTGlzdCogaWRl
bnRMaXN0ID0gaW5wdXRMaXN0LmN1cnJlbnQoKS0+dmFsdWVMaXN0OwotICAgIGlmICghaWRlbnRM
aXN0LT5zaXplKCkpIHsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QmIGlkZW50TGlzdCA9ICppbnB1
dExpc3QuY3VycmVudCgpLT52YWx1ZUxpc3Q7CisgICAgaWYgKCFpZGVudExpc3Quc2l6ZSgpKSB7
CiAgICAgICAgIGlucHV0TGlzdC5uZXh0KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICAvLyBOZWVkIHRvIGVuc3VyZSB0aGUgaWRlbnRMaXN0IGlzIGF0IHRoZSBoZWFkaW5n
IGluZGV4LCBzaW5jZSB0aGUgcGFyc2VyTGlzdCBtaWdodCBoYXZlIGJlZW4gcmV3b3VuZC4KLSAg
ICBpZGVudExpc3QtPnNldEN1cnJlbnRJbmRleCgwKTsKKyAgICBpZGVudExpc3Quc2V0Q3VycmVu
dEluZGV4KDApOwogCiAgICAgUmVmUHRyPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4gbGluZU5hbWVz
ID0gcHJldmlvdXNOYW1lZEFyZWFUcmFpbGluZ0xpbmVOYW1lcyA/IHByZXZpb3VzTmFtZWRBcmVh
VHJhaWxpbmdMaW5lTmFtZXMgOiBDU1NHcmlkTGluZU5hbWVzVmFsdWU6OmNyZWF0ZSgpOwotICAg
IHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogaWRlbnRWYWx1ZSA9IGlkZW50TGlzdC0+Y3VycmVudCgp
KSB7CisgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBpZGVudFZhbHVlID0gaWRlbnRMaXN0LmN1
cnJlbnQoKSkgewogICAgICAgICBBU1NFUlQoaWRlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKTsKLSAgICAgICAgbGluZU5hbWVzLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlU3RyaW5nVmFsdWUoaWRlbnRWYWx1ZSkpOwotICAgICAgICBpZGVudExpc3QtPm5leHQo
KTsKKyAgICAgICAgbGluZU5hbWVzLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUo
KmlkZW50VmFsdWUpKTsKKyAgICAgICAgaWRlbnRMaXN0Lm5leHQoKTsKICAgICB9CiAgICAgaWYg
KCFwcmV2aW91c05hbWVkQXJlYVRyYWlsaW5nTGluZU5hbWVzKQogICAgICAgICB2YWx1ZUxpc3Qu
YXBwZW5kKGxpbmVOYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTUyNjcsNyArNTI2NSw3IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tMaXN0KCkKIAog
ICAgIGJvb2wgc2VlblRyYWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24gPSBmYWxzZTsKICAgICB3aGls
ZSAoQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
IHsKLSAgICAgICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoY3VycmVudFZhbHVlKSkKKyAg
ICAgICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKmN1cnJlbnRWYWx1ZSkpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxJZ25vcmluZ0Nhc2UoY3VycmVudFZhbHVlLT5mdW5jdGlv
bi0+bmFtZSwgInJlcGVhdCgiKSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZUdyaWRUcmFja1Jl
cGVhdEZ1bmN0aW9uKCp2YWx1ZXMpKQpAQCAtNTI5NSw3ICs1MjkzLDcgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3QoKQogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRyYWNrUmVwZWF0RnVuY3Rpb24oQ1NTVmFsdWVMaXN0JiBsaXN0KQogewogICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1lbnRzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5z
aXplKCkgPCAzIHx8ICF2YWxpZFVuaXQoYXJndW1lbnRzLT52YWx1ZUF0KDApLCBGUG9zaXRpdmVJ
bnRlZ2VyKSB8fCAhaXNDb21tYShhcmd1bWVudHMtPnZhbHVlQXQoMSkpKQorICAgIGlmICghYXJn
dW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFsaWRVbml0KCphcmd1bWVudHMt
PnZhbHVlQXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFs
dWVBdCgxKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChhcmd1bWVudHMt
PnZhbHVlQXQoMCktPmZWYWx1ZSA+IDApOwpAQCAtNTM0NiwyNSArNTM0NCwyNSBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmIGxpc3Qp
CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tTaXplKENT
U1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KQogewotICAgIENTU1BhcnNlclZhbHVlKiBjdXJy
ZW50VmFsdWUgPSBpbnB1dExpc3QuY3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlJiBjdXJy
ZW50VmFsdWUgPSAqaW5wdXRMaXN0LmN1cnJlbnQoKTsKICAgICBpbnB1dExpc3QubmV4dCgpOwog
Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgIGlmIChjdXJy
ZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiAKLSAgICBpZiAoY3VycmVu
dFZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbElnbm9yaW5n
Q2FzZShjdXJyZW50VmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAibWlubWF4KCIpKSB7CisgICAgaWYg
KGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbEln
bm9yaW5nQ2FzZShjdXJyZW50VmFsdWUuZnVuY3Rpb24tPm5hbWUsICJtaW5tYXgoIikpIHsKICAg
ICAgICAgLy8gVGhlIHNwZWMgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGdyYW1tYXI6IG1pbm1heCgg
PHRyYWNrLWJyZWFkdGg+ICwgPHRyYWNrLWJyZWFkdGg+ICkKLSAgICAgICAgQ1NTUGFyc2VyVmFs
dWVMaXN0KiBhcmd1bWVudHMgPSBjdXJyZW50VmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwor
ICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IGN1cnJlbnRWYWx1ZS5mdW5j
dGlvbi0+YXJncy5nZXQoKTsKICAgICAgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5z
aXplKCkgIT0gMyB8fCAhaXNDb21tYShhcmd1bWVudHMtPnZhbHVlQXQoMSkpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1pblRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJyZWFkdGgo
YXJndW1lbnRzLT52YWx1ZUF0KDApKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBtaW5UcmFja0JyZWFkdGggPSBwYXJzZUdyaWRCcmVhZHRoKCphcmd1bWVudHMtPnZhbHVlQXQo
MCkpOwogICAgICAgICBpZiAoIW1pblRyYWNrQnJlYWR0aCkKLSAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtYXhUcmFja0JyZWFkdGggPSBwYXJzZUdyaWRCcmVhZHRoKGFyZ3VtZW50cy0+
dmFsdWVBdCgyKSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbWF4VHJhY2tC
cmVhZHRoID0gcGFyc2VHcmlkQnJlYWR0aCgqYXJndW1lbnRzLT52YWx1ZUF0KDIpKTsKICAgICAg
ICAgaWYgKCFtYXhUcmFja0JyZWFkdGgpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNl
ZEFyZ3VtZW50cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAg
ICAgcGFyc2VkQXJndW1lbnRzLT5hcHBlbmQobWluVHJhY2tCcmVhZHRoLnJlbGVhc2VOb25OdWxs
KCkpOwpAQCAtNTM3NSwyMyArNTM3MywyMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlR3JpZFRyYWNrU2l6ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdAogICAg
IHJldHVybiBwYXJzZUdyaWRCcmVhZHRoKGN1cnJlbnRWYWx1ZSk7CiB9CiAKLVBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJW
YWx1ZSogY3VycmVudFZhbHVlKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUpCiB7Ci0g
ICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGN1
cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQp
OworICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8
IGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCisgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLmlk
KTsKIAotICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19GUikgewotICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gY3VycmVudFZhbHVlLT5mVmFsdWU7
CisgICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIp
IHsKKyAgICAgICAgZG91YmxlIGZsZXhWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5mVmFsdWU7CiAKICAg
ICAgICAgLy8gRnJhY3Rpb25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KICAg
ICAgICAgaWYgKGZsZXhWYWx1ZSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoZmxleFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKICAgICB9CiAK
ICAgICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGN1cnJlbnRWYWx1ZSk7CiB9CkBA
IC01NDY0LDggKzU0NjIsOCBAQCBzdGF0aWMgQ1NTUGFyc2VyVmFsdWUqIHNraXBDb21tYUluRGFz
aGJvYXJkUmVnaW9uKENTU1BhcnNlclZhbHVlTGlzdCAqYXJncykKIHsKICAgICBpZiAoYXJncy0+
c2l6ZSgpID09IChEQVNIQk9BUkRfUkVHSU9OX05VTV9QQVJBTUVURVJTKjItMSkgfHwKICAgICAg
ICAgIGFyZ3MtPnNpemUoKSA9PSAoREFTSEJPQVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVS
UyoyLTEpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50ID0gYXJncy0+Y3VycmVu
dCgpOwotICAgICAgICBpZiAoY3VycmVudC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgY3VycmVudC0+aVZhbHVlID09ICcsJykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1
cnJlbnQgPSAqYXJncy0+Y3VycmVudCgpOworICAgICAgICBpZiAoY3VycmVudC51bml0ID09IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50LmlWYWx1ZSA9PSAnLCcpCiAgICAgICAg
ICAgICByZXR1cm4gYXJncy0+bmV4dCgpOwogICAgIH0KICAgICByZXR1cm4gYXJncy0+Y3VycmVu
dCgpOwpAQCAtNTQ4NSwxMCArNTQ4MywxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9h
cmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICB9CiAK
ICAgICBSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBmaXJzdFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lv
bjo6Y3JlYXRlKCk7Ci0gICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSAwOworICAgIERhc2hi
b2FyZFJlZ2lvbiogcmVnaW9uID0gbnVsbHB0cjsKIAogICAgIHdoaWxlICh2YWx1ZSkgewotICAg
ICAgICBpZiAocmVnaW9uID09IDApIHsKKyAgICAgICAgaWYgKCFyZWdpb24pIHsKICAgICAgICAg
ICAgIHJlZ2lvbiA9IGZpcnN0UmVnaW9uLmdldCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gbmV4dFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lv
bjo6Y3JlYXRlKCk7CkBAIC01NTM3LDkgKzU1MzUsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
YXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGFyZywgImNpcmNsZSIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoKmFyZywg
ImNpcmNsZSIpKQogICAgICAgICAgICAgcmVnaW9uLT5tX2lzQ2lyY2xlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJnLCAicmVjdGFuZ2xlIikpCisgICAgICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCphcmcsICJyZWN0YW5nbGUiKSkKICAgICAgICAg
ICAgIHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKQEAgLTU1NTgsMTggKzU1NTYsMTUgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICByZWdpb24tPnNldExlZnQoYW1vdW50KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIE5leHQgZm91ciBhcmd1bWVudHMgbXVzdCBiZSBvZmZzZXQg
bnVtYmVycwotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
NDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAg
ICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgICAgICBhcmcgPSBz
a2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKIAotICAgICAgICAgICAgICAgIHZhbGlk
ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZywgRkxlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgdmFsaWQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVu
aXQoKmFyZywgRkxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGFtb3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8KLSAgICAgICAgICAgICAg
ICAgICAgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykg
OgotICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJnKTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IGFyZy0+
aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZyk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoaSA9PSAwKQogICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNl
dFRvcChhbW91bnQpOwpAQCAtNTY0MSwxNSArNTYzNiwxNSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhOYW1lZEdyaWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgY29u
c3QgdQogICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVja3MgdGVzdCB0aGF0IHRoZSBn
cmlkIGFyZWEgaXMgYSBzaW5nbGUgZmlsbGVkLWluIHJlY3RhbmdsZS4KICAgICAgICAgICAgIC8v
IDEuIFRoZSBuZXcgcm93IGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91c2x5IHBhcnNlZCByb3cu
CiAgICAgICAgICAgICBpZiAocm93Q291bnQgIT0gZ3JpZENvb3JkaW5hdGUucm93cy5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyAyLiBUaGUg
bmV3IGFyZWEgc3RhcnRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5IHBh
cnNlZCBhcmVhLgogICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZENvb3JkaW5h
dGUuY29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAg
ICAgLy8gMy4gVGhlIG5ldyBhcmVhIGVuZHMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIHBy
ZXZpb3VzbHkgcGFyc2VkIGFyZWEuCiAgICAgICAgICAgICBpZiAobG9va0FoZWFkQ29sdW1uICE9
IGdyaWRDb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICArK2dyaWRDb29yZGluYXRlLnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
OwogICAgICAgICB9CkBAIC01NjY4LDYyICs1NjYzLDYyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpCiAKICAgICB3aGlsZSAobV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkgewogICAgICAgICBpZiAoIXBhcnNlR3JpZFRlbXBsYXRlQXJlYXNS
b3coZ3JpZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICArK3Jvd0NvdW50Owog
ICAgIH0KIAogICAgIGlmICghcm93Q291bnQgfHwgIWNvbHVtbkNvdW50KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQ1NTR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZTo6Y3JlYXRlKGdyaWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQp
OwogfQogI2VuZGlmIC8qIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpICovCiAKLVBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb3VudGVyQ29udGVudChDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3MsIGJvb2wgY291bnRlcnMpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGNvdW50
ZXJzKQogewotICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBhcmdzLT5zaXplKCk7CisgICAgdW5zaWdu
ZWQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwogICAgIGlmIChjb3VudGVycyAmJiBudW1BcmdzICE9
IDMgJiYgbnVtQXJncyAhPSA1KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgaWYgKCFjb3VudGVycyAmJiBudW1BcmdzICE9IDEgJiYgbnVtQXJncyAhPSAz
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogaSA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoaS0+dW5pdCAhPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGlkZW50aWZpZXIgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1
ZShpKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKTsKKyAg
ICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBpZGVu
dGlmaWVyID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmFyZ3VtZW50KTsKIAogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2VwYXJhdG9yOwogICAgIGlmICghY291bnRlcnMpCiAg
ICAgICAgIHNlcGFyYXRvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFN0cmluZygpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGkgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChpLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciB8fCBpLT5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgICAg
ICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBzZXBhcmF0b3IgPSBjcmVhdGVQ
cmltaXRpdmVTdHJpbmdWYWx1ZShpKTsKKyAgICAgICAgc2VwYXJhdG9yID0gY3JlYXRlUHJpbWl0
aXZlU3RyaW5nVmFsdWUoKmFyZ3VtZW50KTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpc3RTdHlsZTsKLSAgICBpID0gYXJncy0+bmV4dCgpOwotICAgIGlmICghaSkg
Ly8gTWFrZSB0aGUgbGlzdCBzdHlsZSBkZWZhdWx0IGRlY2ltYWwKKyAgICBhcmd1bWVudCA9IGFy
Z3MubmV4dCgpOworICAgIGlmICghYXJndW1lbnQpIC8vIE1ha2UgdGhlIGxpc3Qgc3R5bGUgZGVm
YXVsdCBkZWNpbWFsCiAgICAgICAgIGxpc3RTdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURlY2ltYWwpOwogICAgIGVsc2UgewotICAgICAgICBpZiAo
aS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgaS0+aVZhbHVlICE9ICcsJykK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywnKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaSA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKGktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgICAgICBp
ZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIENTU1ZhbHVlSUQgbGlzdFN0eWxlSUQg
PSBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgICAgIGlmIChpLT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwg
KGktPmlkID49IENTU1ZhbHVlRGlzYyAmJiBpLT5pZCA8PSBDU1NWYWx1ZUthdGFrYW5hSXJvaGEp
KQotICAgICAgICAgICAgbGlzdFN0eWxlSUQgPSBpLT5pZDsKKyAgICAgICAgaWYgKGFyZ3VtZW50
LT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKGFyZ3VtZW50LT5pZCA+PSBDU1NWYWx1ZURpc2MgJiYg
YXJndW1lbnQtPmlkIDw9IENTU1ZhbHVlS2F0YWthbmFJcm9oYSkpCisgICAgICAgICAgICBsaXN0
U3R5bGVJRCA9IGFyZ3VtZW50LT5pZDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBsaXN0U3R5bGUgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUobGlzdFN0eWxlSUQpOwogICAgIH0K
QEAgLTU3MzMsMTAgKzU3MjgsMTAgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCogYXJncywgYm8KIAogYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKIAotICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5u
YW1lLCAicmVjdCgiKSB8fCAhYXJncykKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gcmVjdCh0LCByLCBiLCBsKSB8fCByZWN0KHQgciBiIGwpCkBAIC01NzQ1LDE0
ICs1NzQwLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgUmVmUHRyPFJlY3Q+IHJlY3QgPSBSZWN0Ojpj
cmVhdGUoKTsKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKICAgICBpbnQgaSA9IDA7Ci0gICAgQ1NT
UGFyc2VyVmFsdWUqIGEgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgd2hpbGUgKGEpIHsKLSAgICAg
ICAgdmFsaWQgPSBhLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGEsIEZMZW5ndGgp
OworICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7Cisg
ICAgd2hpbGUgKGN1cnJlbnRWYWx1ZSkgeworICAgICAgICB2YWxpZCA9IGN1cnJlbnRWYWx1ZS0+
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTGVuZ3RoKTsK
ICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGEtPmlkID09IENTU1ZhbHVlQXV0byA/Ci0gICAg
ICAgICAgICBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRv
KSA6Ci0gICAgICAgICAgICBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSk7CisgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gY3VycmVudFZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUF1dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3VycmVudFZhbHVlKTsKICAg
ICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNldFRvcChsZW5ndGgpOwogICAg
ICAgICBlbHNlIGlmIChpID09IDEpCkBAIC01NzYxLDEwICs1NzU0LDEwIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obGVuZ3RoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmVjdC0+c2V0TGVmdChsZW5ndGgpOwotICAgICAgICBhID0gYXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoYSAmJiBhcmdzLT5zaXplKCkgPT0gNykgewotICAgICAgICAgICAgaWYg
KGEtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGEtPmlWYWx1ZSA9PSAnLCcp
IHsKLSAgICAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgpOworICAgICAgICBjdXJyZW50VmFs
dWUgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgYXJncy0+c2l6
ZSgpID09IDcpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlID09ICcsJykgeworICAg
ICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTU3OTQsOSArNTc4Nyw5IEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRlQm9yZGVyUmFk
aWkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpaVs0XSkKIAogLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIHJlZmFjdG9yZWQgd2l0aCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzLgog
Ly8gQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cyBjb250YWlucyBzdXBwb3J0IGZvciBzb21l
IGxlZ2FjeSByYWRpdXMgY29uc3RydWN0aW9uLgotUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBD
U1NQYXJzZXI6OnBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhQYXNzUmVmUHRyPENTU0Jhc2ljU2hh
cGVJbnNldD4gc2hhcGUsIENTU1BhcnNlclZhbHVlTGlzdCogYXJncykKK1Bhc3NSZWZQdHI8Q1NT
QmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUGFzc1JlZlB0
cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IHNoYXBlLCBDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIENTU1Bh
cnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwogCiAgICAgaWYgKCFhcmd1bWVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01ODA0LDcgKzU3OTcsNyBAQCBQYXNzUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NS
ZWZQdHI8Q1NTQmFzaQogICAgIFZlY3RvcjxDU1NQYXJzZXJWYWx1ZSo+IHJhZGl1c0FyZ3VtZW50
czsKICAgICB3aGlsZSAoYXJndW1lbnQpIHsKICAgICAgICAgcmFkaXVzQXJndW1lbnRzLmFwcGVu
ZChhcmd1bWVudCk7Ci0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBh
cmd1bWVudCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG51bSA9IHJhZGl1
c0FyZ3VtZW50cy5zaXplKCk7CkBAIC01ODE1LDkgKzU4MDgsOSBAQCBQYXNzUmVmUHRyPENTU0Jh
c2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8
Q1NTQmFzaQogCiAgICAgdW5zaWduZWQgaW5kZXhBZnRlclNsYXNoID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gcmFkaXVzQXJndW1lbnRzLmF0KGkpOwotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlWYWx1
ZSAhPSAnLycpCisgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICpyYWRpdXNBcmd1bWVu
dHMuYXQoaSk7CisgICAgICAgIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvcikgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlWYWx1ZSAhPSAnLycpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIGlmICghaSB8fCBpbmRleEFmdGVy
U2xhc2ggfHwgaSArIDEgPT0gbnVtIHx8IG51bSA+IGkgKyA1KQpAQCAtNTg1NywxMyArNTg1MCwx
MSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5k
ZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaQogICAgIHJldHVybiBzaGFwZTsKIH0KIAotUGFz
c1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENT
U1BhcnNlclZhbHVlTGlzdCogYXJncykKK1Bhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFy
c2VyOjpwYXJzZUJhc2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCiB7Ci0g
ICAgQVNTRVJUKGFyZ3MpOwotCiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4gc2hhcGUg
PSBDU1NCYXNpY1NoYXBlSW5zZXQ6OmNyZWF0ZSgpOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFy
Z3VtZW50ID0gYXJncy0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9
IGFyZ3MuY3VycmVudCgpOwogICAgIFZlY3RvcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4g
d2lkdGhBcmd1bWVudHM7CiAgICAgYm9vbCBoYXNSb3VuZGVkSW5zZXQgPSBmYWxzZTsKICAgICB3
aGlsZSAoYXJndW1lbnQpIHsKQEAgLTU4NzMsMTEgKzU4NjQsMTEgQEAgUGFzc1JlZlB0cjxDU1NC
YXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVl
TGlzdCogYXIKICAgICAgICAgfQogCiAgICAgICAgIFVuaXRzIHVuaXRGbGFncyA9IEZMZW5ndGgg
fCBGUGVyY2VudDsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQsIHVuaXRGbGFncykg
fHwgd2lkdGhBcmd1bWVudHMuc2l6ZSgpID4gNCkKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFy
Z3VtZW50LCB1bml0RmxhZ3MpIHx8IHdpZHRoQXJndW1lbnRzLnNpemUoKSA+IDQpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICB3aWR0aEFyZ3VtZW50cy5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50KSk7Ci0gICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOworICAgICAgICB3aWR0aEFyZ3VtZW50cy5hcHBlbmQoY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4
dCgpOwogICAgIH0KIAogICAgIHN3aXRjaCAod2lkdGhBcmd1bWVudHMuc2l6ZSgpKSB7CkBAIC01
OTA2LDM2ICs1ODk3LDM0IEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpw
YXJzZUJhc2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgcmV0dXJuIHNo
YXBlOwogfQogCi1QYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
U2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNoYXBlUmFkaXVzKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQ2xvc2VzdFNpZGUgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlRmFydGhlc3RTaWRlKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgaWYgKHZhbHVlLmlkID09
IENTU1ZhbHVlQ2xvc2VzdFNpZGUgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVGYXJ0aGVzdFNpZGUp
CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUuaWQpOwogCiAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8
IEZOb25OZWcpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKIH0KIAotUGFz
c1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShD
U1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MpCitQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKIHsK
LSAgICBBU1NFUlQoYXJncyk7Ci0KICAgICAvLyBjaXJjbGUocmFkaXVzKQogICAgIC8vIGNpcmNs
ZShyYWRpdXMgYXQgPHBvc2l0aW9uPikKICAgICAvLyBjaXJjbGUoYXQgPHBvc2l0aW9uPikKICAg
ICAvLyB3aGVyZSBwb3NpdGlvbiBkZWZpbmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBD
U1MgPHBvc2l0aW9uPiBkYXRhIHR5cGUuCiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVDaXJjbGU+
IHNoYXBlID0gQ1NTQmFzaWNTaGFwZUNpcmNsZTo6Y3JlYXRlKCk7CiAKLSAgICBmb3IgKENTU1Bh
cnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsgYXJndW1lbnQ7IGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpKSB7CisgICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBh
cmdzLmN1cnJlbnQoKTsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJncy5uZXh0KCkpIHsKICAgICAg
ICAgLy8gVGhlIGNhbGwgdG8gcGFyc2VGaWxsUG9zaXRpb24gYmVsb3cgc2hvdWxkIGNvbnN1bWUg
YWxsIG9mIHRoZQogICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0d28uIFRo
dXMsIGFuZCBpbmRleCBncmVhdGVyIHRoYW4gb25lCiAgICAgICAgIC8vIGluZGljYXRlcyBhbiBp
bnZhbGlkIHByb2R1Y3Rpb24uCi0gICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA+IDEp
CisgICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgpID4gMSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgIGlmICghYXJncy0+Y3VycmVudEluZGV4KCkgJiYgYXJndW1l
bnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CisgICAgICAg
IGlmICghYXJncy5jdXJyZW50SW5kZXgoKSAmJiBhcmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCkg
eworICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcGFy
c2VTaGFwZVJhZGl1cygqYXJndW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgc2hhcGUtPnNldFJh
ZGl1cyhyYWRpdXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpA
QCAtNTk0MywxMSArNTkzMiwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNl
cjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXJndW1lbnQtPmlk
ID09IENTU1ZhbHVlQXQgJiYgYXJncy0+bmV4dCgpKSB7CisgICAgICAgIGlmIChhcmd1bWVudC0+
aWQgPT0gQ1NTVmFsdWVBdCAmJiBhcmdzLm5leHQoKSkgewogICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiBjZW50ZXJYOwogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJZOwog
ICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVyWCwgY2VudGVyWSk7Ci0g
ICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBjZW50ZXJZICYmICFhcmdzLT5jdXJyZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChjZW50ZXJYICYmIGNlbnRlclkgJiYgIWFyZ3MuY3VycmVudCgpKSB7
CiAgICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVy
WShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgICAgICAg
ICAgfSBlbHNlCkBAIC01OTU5LDEwICs1OTQ4LDggQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBl
PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEK
ICAgICByZXR1cm4gc2hhcGU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFy
c2VyOjpwYXJzZUJhc2ljU2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCogYXJncykKK1Bh
c3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVFbGxpcHNl
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKIHsKLSAgICBBU1NFUlQoYXJncyk7Ci0KICAgICAv
LyBlbGxpcHNlKHJhZGl1c1gpCiAgICAgLy8gZWxsaXBzZShyYWRpdXNYIGF0IDxwb3NpdGlvbj4p
CiAgICAgLy8gZWxsaXBzZShyYWRpdXNYIHJhZGl1c1kpCkBAIC01OTcxLDE1ICs1OTU4LDE1IEBA
IFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVFbGxp
cHNlKENTU1BhcnNlclZhbHVlTGlzdCoKICAgICAvLyB3aGVyZSBwb3NpdGlvbiBkZWZpbmVzIGNl
bnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBvc2l0aW9uPiBkYXRhIHR5cGUuCiAgICAg
UmVmUHRyPENTU0Jhc2ljU2hhcGVFbGxpcHNlPiBzaGFwZSA9IENTU0Jhc2ljU2hhcGVFbGxpcHNl
OjpjcmVhdGUoKTsKIAotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+
Y3VycmVudCgpOyBhcmd1bWVudDsgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCkpIHsKKyAgICBmb3Ig
KENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOyBhcmd1bWVudDsgYXJn
dW1lbnQgPSBhcmdzLm5leHQoKSkgewogICAgICAgICAvLyBUaGUgY2FsbCB0byBwYXJzZUZpbGxQ
b3NpdGlvbiBiZWxvdyBzaG91bGQgY29uc3VtZSBhbGwgb2YgdGhlCiAgICAgICAgIC8vIGFyZ3Vt
ZW50cyBleGNlcHQgdGhlIGZpcnN0IHRocmVlLiBUaHVzLCBhbiBpbmRleCBncmVhdGVyIHRoYW4g
dHdvCiAgICAgICAgIC8vIGluZGljYXRlcyBhbiBpbnZhbGlkIHByb2R1Y3Rpb24uCi0gICAgICAg
IGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA+IDIpCisgICAgICAgIGlmIChhcmdzLmN1cnJlbnRJ
bmRleCgpID4gMikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChh
cmdzLT5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQpIHsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNl
U2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CisgICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgp
IDwgMiAmJiBhcmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCkgeworICAgICAgICAgICAgaWYgKFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cygqYXJndW1l
bnQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzaGFwZS0+cmFkaXVzWCgpKQogICAgICAgICAg
ICAgICAgICAgICBzaGFwZS0+c2V0UmFkaXVzWChyYWRpdXMpOwogICAgICAgICAgICAgICAgIGVs
c2UKQEAgLTU5OTAsMTMgKzU5NzcsMTMgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0KgogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXJndW1lbnQt
PmlkICE9IENTU1ZhbHVlQXQgfHwgIWFyZ3MtPm5leHQoKSkgLy8gZXhwZWN0aW5nIGVsbGlwc2Uo
Li4gYXQgPHBvc2l0aW9uPikKKyAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZUF0
IHx8ICFhcmdzLm5leHQoKSkgLy8gZXhwZWN0aW5nIGVsbGlwc2UoLi4gYXQgPHBvc2l0aW9uPikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y2VudGVyWDsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJZOwogICAgICAgICBwYXJz
ZUZpbGxQb3NpdGlvbihhcmdzLCBjZW50ZXJYLCBjZW50ZXJZKTsKLSAgICAgICAgaWYgKCFjZW50
ZXJYIHx8ICFjZW50ZXJZIHx8IGFyZ3MtPmN1cnJlbnQoKSkKKyAgICAgICAgaWYgKCFjZW50ZXJY
IHx8ICFjZW50ZXJZIHx8IGFyZ3MuY3VycmVudCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAgICAgc2hhcGUtPnNldENlbnRlclgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGNlbnRlclguZ2V0KCkpKTsKQEAgLTYwMDYsNTIgKzU5OTMsNTAgQEAgUGFzc1JlZlB0cjxD
U1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2Vy
VmFsdWVMaXN0KgogICAgIHJldHVybiBzaGFwZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NCYXNpY1No
YXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0
KiBhcmdzKQorUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNT
aGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQogewotICAgIEFTU0VSVChhcmdz
KTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLT5zaXplKCk7CisgICAgdW5zaWduZWQgc2l6
ZSA9IGFyZ3Muc2l6ZSgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVQb2x5Z29uPiBz
aGFwZSA9IENTU0Jhc2ljU2hhcGVQb2x5Z29uOjpjcmVhdGUoKTsKIAotICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJn
dW1lbnQgPSBhcmdzLmN1cnJlbnQoKTsKICAgICBpZiAoYXJndW1lbnQtPmlkID09IENTU1ZhbHVl
RXZlbm9kZCB8fCBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVOb256ZXJvKSB7CiAgICAgICAgIHNo
YXBlLT5zZXRXaW5kUnVsZShhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkID8gUlVMRV9F
VkVOT0REIDogUlVMRV9OT05aRVJPKTsKIAotICAgICAgICBpZiAoIWlzQ29tbWEoYXJncy0+bmV4
dCgpKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWlzQ29tbWEoYXJncy5u
ZXh0KCkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7CiAgICAgICAg
IHNpemUgLT0gMjsKICAgICB9CiAKICAgICAvLyA8bGVuZ3RoPiA8bGVuZ3RoPiwgLi4uIDxsZW5n
dGg+IDxsZW5ndGg+IC0+IGVhY2ggcGFpciBoYXMgMyBlbGVtZW50cyBleGNlcHQgdGhlIGxhc3Qg
b25lCiAgICAgaWYgKCFzaXplIHx8IChzaXplICUgMykgLSAyKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRY
ID0gYXJndW1lbnQ7CiAgICAgd2hpbGUgKGFyZ3VtZW50WCkgewogCi0gICAgICAgIGlmICghdmFs
aWRVbml0KGFyZ3VtZW50WCwgRkxlbmd0aCB8IEZQZXJjZW50KSkKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRYKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQo
KmFyZ3VtZW50WCwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50WCk7CiAKLSAgICAgICAgQ1NTUGFyc2VyVmFs
dWUqIGFyZ3VtZW50WSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudFkgfHwg
IXZhbGlkVW5pdChhcmd1bWVudFksIEZMZW5ndGggfCBGUGVyY2VudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50WSk7CisgICAgICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudFkgPSBhcmdzLm5leHQoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudFkgfHwg
IXZhbGlkVW5pdCgqYXJndW1lbnRZLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geUxlbmd0
aCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnRZKTsKIAogICAgICAgICBz
aGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxlYXNlKCksIHlMZW5ndGgucmVsZWFzZSgpKTsK
IAotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogY29tbWFPck51bGwgPSBhcmdzLT5uZXh0KCk7Cisg
ICAgICAgIENTU1BhcnNlclZhbHVlKiBjb21tYU9yTnVsbCA9IGFyZ3MubmV4dCgpOwogICAgICAg
ICBpZiAoIWNvbW1hT3JOdWxsKQotICAgICAgICAgICAgYXJndW1lbnRYID0gMDsKKyAgICAgICAg
ICAgIGFyZ3VtZW50WCA9IG51bGxwdHI7CiAgICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hKGNvbW1h
T3JOdWxsKSkgCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBlbHNlIAotICAgICAgICAgICAgYXJndW1lbnRYID0gYXJncy0+bmV4dCgp
OworICAgICAgICAgICAgYXJndW1lbnRYID0gYXJncy5uZXh0KCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHNoYXBlOwpAQCAtNjA5Niw3ICs2MDgxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkKICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICAgICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3hWYWx1
ZSh2YWx1ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewotICAgICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFsdWVJ
ZCwgdmFsdWUpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRW
YWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFsdWVJZCwgKnZhbHVlKTsKICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAg
IGJveEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC02
MTE2LDggKzYxMDEsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hh
cGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUtPmlkOworICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1Zh
bHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
a2V5d29yZFZhbHVlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZTsK
IApAQCAtNjEyOCw3ICs2MTEzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVNoYXBlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgfQogCiAgICAgUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwotICAgIGlmICh2YWx1ZUlkICE9IENTU1ZhbHVlTm9u
ZSAmJiBwYXJzZUZpbGxJbWFnZShtX3ZhbHVlTGlzdC5nZXQoKSwgaW1hZ2VWYWx1ZSkpIHsKKyAg
ICBpZiAodmFsdWVJZCAhPSBDU1NWYWx1ZU5vbmUgJiYgcGFyc2VGaWxsSW1hZ2UoKm1fdmFsdWVM
aXN0LCBpbWFnZVZhbHVlKSkgewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAg
ICByZXR1cm4gaW1hZ2VWYWx1ZS5yZWxlYXNlKCk7CiAgICAgfQpAQCAtNjEzOSwxNiArNjEyNCwx
NiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BJZCkKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUNsaXBQYXRoKCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLT5pZDsKKyAgICBD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBDU1NW
YWx1ZUlEIHZhbHVlSWQgPSB2YWx1ZS5pZDsKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVl
Tm9uZSkgewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICByZXR1cm4gcGFy
c2VWYWxpZFByaW1pdGl2ZSh2YWx1ZUlkLCB2YWx1ZSk7CiAgICAgfQotICAgIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgIGlmICh2YWx1ZS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5z
dHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuc3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBhcnNlQmFzaWNTaGFwZUFuZE9yQm94KENTU1By
b3BlcnR5V2Via2l0Q2xpcFBhdGgpOwpAQCAtNjE1NiwyMiArNjE0MSwyMiBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ2xpcFBhdGgoKQogCiBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZSgpCiB7Ci0gICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBBU1NFUlQodmFs
dWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKTsKLSAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgQVNTRVJUKHZhbHVl
LnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKIAogICAgIGlmICghYXJncykK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gc2hh
cGU7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNp
cmNsZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVDaXJjbGUoYXJncyk7Ci0g
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiZWxs
aXBzZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVFbGxpcHNlKGFyZ3MpOwot
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInBv
bHlnb24oIikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlUG9seWdvbihhcmdzKTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJp
bnNldCgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVJbnNldChhcmdzKTsKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjaXJjbGUoIikp
CisgICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKCphcmdzKTsKKyAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImVsbGlwc2UoIikp
CisgICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZSgqYXJncyk7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwb2x5Z29uKCIp
KQorICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oKmFyZ3MpOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiaW5zZXQoIikp
CisgICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlSW5zZXQoKmFyZ3MpOwogCiAgICAgaWYg
KCFzaGFwZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02MjI5LDcgKzYyMTQsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpc0ZvcndhcmRTbGFzaE9wZXJhdG9y
KHZhbHVlKSkgeworICAgIGlmIChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCp2YWx1ZSkpIHsKICAg
ICAgICAgLy8gVGhlIGxpbmUtaGVpZ2h0IHByb3BlcnR5LgogICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGlmICghdmFsdWUpCkBAIC02MjU3LDcgKzYyNDIsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogCiBjbGFzcyBGb250
RmFtaWx5VmFsdWVCdWlsZGVyIHsKIHB1YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVy
KENTU1ZhbHVlTGlzdCogbGlzdCkKKyAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyKENTU1ZhbHVl
TGlzdCYgbGlzdCkKICAgICAgICAgOiBtX2xpc3QobGlzdCkKICAgICB7CiAgICAgfQpAQCAtNjI3
OSwxMyArNjI2NCwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV9idWlsZGVyLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKG1fYnVpbGRlci50b1N0cmluZygpKSk7
CisgICAgICAgIG1fbGlzdC5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhbWlseVZh
bHVlKG1fYnVpbGRlci50b1N0cmluZygpKSk7CiAgICAgICAgIG1fYnVpbGRlci5jbGVhcigpOwog
ICAgIH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKLSAgICBDU1NW
YWx1ZUxpc3QqIG1fbGlzdDsKKyAgICBDU1NWYWx1ZUxpc3QmIG1fbGlzdDsKIH07CiAKIFBhc3NS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCkBAIC02Mjkz
LDcgKzYyNzgsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZv
bnRGYW1pbHkoKQogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKIAotICAgIEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIgZmFtaWx5
QnVpbGRlcihsaXN0LmdldCgpKTsKKyAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyIGZhbWlseUJ1
aWxkZXIoKmxpc3QpOwogICAgIGJvb2wgaW5GYW1pbHkgPSBmYWxzZTsKIAogICAgIHdoaWxlICh2
YWx1ZSkgewpAQCAtNjM1OCwxNCArNjM0MywxNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogICAgIGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7
CiAKICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAgICAgICBsaXN0ID0gMDsKKyAgICAgICAg
bGlzdCA9IG51bGxwdHI7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCiBib29sIENT
U1BhcnNlcjo6cGFyc2VMaW5lSGVpZ2h0KGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBp
ZCA9IHZhbHVlLT5pZDsKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7CiAgICAgYm9vbCB2YWxp
ZFByaW1pdGl2ZSA9IGZhbHNlOwogICAgIC8vIG5vcm1hbCB8IDxudW1iZXI+IHwgPGxlbmd0aD4g
fCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQpA
QCAtNjM3OSw4ICs2MzY0LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZUhlaWdodChib29s
IGltcG9ydGFudCkKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBpbXBvcnRh
bnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUtPmlkOworICAgIENTU1BhcnNlclZhbHVlJiB2
YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1
ZS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gPGFic29sdXRl
LXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhl
cml0CiAgICAgaWYgKGlkID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZCA8PSBDU1NWYWx1ZUxhcmdl
cikKQEAgLTY0NTQsNyArNjQzOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRXZWlnaHQo
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSwgaW1wb3J0
YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQoJnZh
bHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7CisgICAgaWYgKHZhbGlk
VW5pdCh2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSkgewogICAgICAg
ICBpbnQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUodmFsdWUsIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWUpKTsKICAgICAgICAgaWYgKCEod2VpZ2h0ICUgMTAwKSAmJiB3ZWln
aHQgPj0gMTAwICYmIHdlaWdodCA8PSA5MDApIHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KGNyZWF0ZUZvbnRXZWlnaHRWYWx1ZUtleXdvcmQod2VpZ2h0KSksIGltcG9ydGFudCk7CkBAIC02
NDY0LDE4ICs2NDQ5LDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRXZWlnaHQoYm9vbCBp
bXBvcnRhbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VG
b250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCkKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZvbnRGYWNlU3JjVVJJKENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0KQogewogICAgIFJlZlB0
cjxDU1NGb250RmFjZVNyY1ZhbHVlPiB1cmlWYWx1ZShDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVh
dGUoY29tcGxldGVVUkwobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+c3RyaW5nKSkpOwogCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBpZiAoIXZh
bHVlKSB7Ci0gICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHVyaVZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKHVyaVZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykgewogICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZCh1cmlWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgdmFsdWVMaXN0LmFwcGVuZCh1cmlWYWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02NDg4
LDIxICs2NDczLDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjVVJJKENTU1Zh
bHVlTGlzdCogdmFsdWVMaXN0KQogICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSB8
fCAoYXJncy0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
ICYmIGFyZ3MtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJncy0+
Y3VycmVudCgpLT5zdHJpbmcpOwotICAgIHZhbHVlTGlzdC0+YXBwZW5kKHVyaVZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIHZhbHVlTGlzdC5hcHBlbmQodXJpVmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1
ZSA9PSAnLCcpCiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjTG9jYWwoQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QpCitib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyY0xvY2FsKENTU1Zh
bHVlTGlzdCYgdmFsdWVMaXN0KQogewogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIGlmICghYXJn
cyB8fCAhYXJncy0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoYXJn
cy0+c2l6ZSgpID09IDEgJiYgYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HKQotICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChDU1NGb250RmFjZVNy
Y1ZhbHVlOjpjcmVhdGVMb2NhbChhcmdzLT5jdXJyZW50KCktPnN0cmluZykpOworICAgICAgICB2
YWx1ZUxpc3QuYXBwZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZ3MtPmN1
cnJlbnQoKS0+c3RyaW5nKSk7CiAgICAgZWxzZSBpZiAoYXJncy0+Y3VycmVudCgpLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwogICAgICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiBsb2NhbFZhbHVlID0gYXJncy0+
Y3VycmVudCgpOyBsb2NhbFZhbHVlOyBsb2NhbFZhbHVlID0gYXJncy0+bmV4dCgpKSB7CkBAIC02
NTEyLDcgKzY0OTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyY0xvY2FsKENT
U1ZhbHVlTGlzdCogdmFsdWVMaXN0KQogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcg
Jyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsb2NhbFZhbHVlLT5zdHJpbmcpOwogICAg
ICAgICB9Ci0gICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNy
ZWF0ZUxvY2FsKGJ1aWxkZXIudG9TdHJpbmcoKSkpOworICAgICAgICB2YWx1ZUxpc3QuYXBwZW5k
KENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGJ1aWxkZXIudG9TdHJpbmcoKSkpOwog
ICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY1MjksMTAgKzY1MTQsMTAg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogCiAgICAgd2hpbGUgKENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKICAgICAgICAgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlRm9udEZhY2VTcmNVUkkodmFsdWVzLmdldCgpKSkKKyAgICAgICAgICAgIGlm
ICghcGFyc2VGb250RmFjZVNyY1VSSSgqdmFsdWVzKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OkZ1bmN0aW9uICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImxv
Y2FsKCIpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRm9udEZhY2VTcmNMb2NhbCh2YWx1ZXMu
Z2V0KCkpKQorICAgICAgICAgICAgaWYgKCFwYXJzZUZvbnRGYWNlU3JjTG9jYWwoKnZhbHVlcykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTY5NTgsMTMgKzY5NDMsMTMgQEAgaW5saW5lIGRvdWJsZSBD
U1NQYXJzZXI6OnBhcnNlZERvdWJsZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIENTU1BhcnNlcjo6aXNDYWxj
dWxhdGlvbihDU1NQYXJzZXJWYWx1ZSogdmFsdWUpIAorYm9vbCBDU1NQYXJzZXI6OmlzQ2FsY3Vs
YXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiAodmFsdWUtPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKSAKLSAgICAgICAgJiYgKGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNhbGMoIikKLSAgICAgICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FsYygiKQotICAg
ICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1taW4oIikKLSAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5j
dGlvbi0+bmFtZSwgIi13ZWJraXQtbWF4KCIpKTsKKyAgICByZXR1cm4gKHZhbHVlLnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQorICAgICAgICAmJiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjYWxjKCIpCisgICAgICAgICAgICB8fCBlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FsYygiKQorICAgICAgICAg
ICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW1p
bigiKQorICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LW1heCgiKSk7CiB9CiAKIGlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvcklu
dEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCkBAIC02OTkzLDE1ICs2OTc4LDE1IEBA
IGlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZG91YmxlVmFsdWUpOwogfQogCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
LCBpbnQqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGludCogY29sb3JBcnJheSwg
Ym9vbCBwYXJzZUFscGhhKQogewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVl
LT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2
YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZh
bHVlID0gYXJncy0+Y3VycmVudCgpOwogICAgIFVuaXRzIHVuaXRUeXBlID0gRlVua25vd247CiAg
ICAgLy8gR2V0IHRoZSBmaXJzdCB2YWx1ZSBhbmQgaXRzIHR5cGUKLSAgICBpZiAodmFsaWRVbml0
KGN1cnJlbnRWYWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQorICAgIGlmICh2YWxpZFVu
aXQoKmN1cnJlbnRWYWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0
VHlwZSA9IEZJbnRlZ2VyOwotICAgIGVsc2UgaWYgKHZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZQ
ZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICBlbHNlIGlmICh2YWxpZFVuaXQoKmN1cnJlbnRW
YWx1ZSwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZQZXJj
ZW50OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzAxMiw3ICs2OTk3LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlKiB2
YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib28KICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5p
dCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0g
JywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjdXJyZW50VmFsdWUgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KGN1cnJlbnRWYWx1ZSwgdW5pdFR5
cGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVl
LCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZyb21WYWx1ZSgqY3VycmVudFZhbHVlKTsK
ICAgICB9CkBAIC03MDIxLDcgKzcwMDYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBh
cmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBpbnQqIGNvbG9yQXJyYXksIGJvbwogICAg
ICAgICBpZiAoY3VycmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiBjdXJyZW50VmFsdWUtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxp
ZFVuaXQoY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYg
KCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNl
ZERvdWJsZSgqY3VycmVudFZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKICAgICAgICAg
Ly8gQ29udmVydCB0aGUgZmxvYXRpbmcgcG9pbnRlciBudW1iZXIgb2YgYWxwaGEgdG8gYW4gaW50
ZWdlciBpbiB0aGUgcmFuZ2UgWzAsIDI1NiksCkBAIC03MDM2LDEyICs3MDIxLDEyIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSogdmFsdWUsIGlu
dCogY29sb3JBcnJheSwgYm9vCiAvLyBhbmQgd2l0aCBhbHBoYSwgdGhlIGZvcm1hdCBpcwogLy8g
aHNsYSg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2VudD4sIDxudW1iZXI+KQogLy8gVGhlIGZp
cnN0IHZhbHVlLCBIVUUsIGlzIGluIGFuIGFuZ2xlIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDAgYW5k
IDM2MAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSog
dmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGRvdWJsZSogY29s
b3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQogewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJn
cyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBDU1NQYXJzZXJWYWx1ZSog
Y3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFs
dWUKLSAgICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZOdW1iZXIsIENTU1N0cmljdE1v
ZGUpKQorICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZOdW1iZXIsIENTU1N0cmlj
dE1vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gbm9ybWFsaXplIHRoZSBIdWUg
dmFsdWUgYW5kIGNoYW5nZSBpdCB0byBiZSBiZXR3ZWVuIDAgYW5kIDEuMAogICAgIGNvbG9yQXJy
YXlbMF0gPSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSgqY3VycmVudFZhbHVlLCBS
ZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjAuMDsKQEAg
LTcwNTAsNyArNzAzNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMoQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlLCBkb3VibGUqIGNvbG9yQXJyYXksIGJvCiAgICAgICAgIGlmIChj
dXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRW
YWx1ZS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdChjdXJy
ZW50VmFsdWUsIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYgKCF2YWxpZFVu
aXQoKmN1cnJlbnRWYWx1ZSwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBjb2xvckFycmF5W2ldID0gc3RkOjptYXg8ZG91YmxlPigw
LCBzdGQ6Om1pbjxkb3VibGU+KDEwMCwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWUpKSkgLyAxMDAuMDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2Vl
biAwIGFuZCAxLjAKICAgICB9CkBAIC03MDU5LDcgKzcwNDQsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlKiB2YWx1ZSwgZG91YmxlKiBjb2xvckFy
cmF5LCBibwogICAgICAgICBpZiAoY3VycmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpPcGVyYXRvciAmJiBjdXJyZW50VmFsdWUtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKCF2YWxpZFVuaXQoY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0
TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNvbG9yQXJyYXlbM10g
PSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKCpj
dXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSk7CiAgICAgfQpAQCAtNzA2OSw1
MyArNzA1NCw1MyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNl
clZhbHVlKiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBibwogUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKENTU1BhcnNlclZhbHVlKiB2YWx1ZSkK
IHsKICAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBpZiAoIXBhcnNlQ29s
b3JGcm9tVmFsdWUodmFsdWUgPyB2YWx1ZSA6IG1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUodmFsdWUgPyAq
dmFsdWUgOiAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKGMpOwogfQog
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSogdmFs
dWUsIFJHQkEzMiYgYykKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yRnJvbVZhbHVlKENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSwgUkdCQTMyJiBjKQogewotICAgIGlmIChpblF1aXJrc01vZGUoKSAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUgotICAgICAgICAm
JiB2YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgewotICAg
ICAgICBTdHJpbmcgc3RyID0gU3RyaW5nOjpmb3JtYXQoIiUwNmQiLCBzdGF0aWNfY2FzdDxpbnQ+
KCh2YWx1ZS0+ZlZhbHVlKy41KSkpOworICAgIGlmIChpblF1aXJrc01vZGUoKSAmJiB2YWx1ZS51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSCisgICAgICAgICYmIHZhbHVlLmZW
YWx1ZSA+PSAwLiAmJiB2YWx1ZS5mVmFsdWUgPCAxMDAwMDAwLikgeworICAgICAgICBTdHJpbmcg
c3RyID0gU3RyaW5nOjpmb3JtYXQoIiUwNmQiLCBzdGF0aWNfY2FzdDxpbnQ+KCh2YWx1ZS5mVmFs
dWUrLjUpKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBzdHJpY3QgcGFyc2lu
ZyBmb3IgU1ZHIGFzIHdlbGwuCiAgICAgICAgIGlmICghZmFzdFBhcnNlQ29sb3IoYywgc3RyLCBp
blN0cmljdE1vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUiB8
fAotICAgICAgICAgICAgICAgIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
SURFTlQgfHwKLSAgICAgICAgICAgICAgICAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKSB7Ci0gICAgICAgIGlmICghZmFz
dFBhcnNlQ29sb3IoYywgdmFsdWUtPnN0cmluZywgaW5TdHJpY3RNb2RlKCkgJiYgdmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkpCisgICAgfSBlbHNlIGlmICh2YWx1
ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SCisgICAgICAg
IHx8IHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVAorICAgICAgICB8
fCAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0RJTUVOU0lPTikpIHsKKyAgICAgICAgaWYgKCFmYXN0UGFyc2VDb2xvcihjLCB2YWx1ZS5zdHJp
bmcsIGluU3RyaWN0TW9kZSgpICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYKLSAgICAgICAgICAgICAgICB2
YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgotICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5j
dGlvbi0+YXJncy0+c2l6ZSgpID09IDUgLyogcmdiICsgdHdvIGNvbW1hcyAqLyAmJgotICAgICAg
ICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJnYigi
KSkgeworICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rp
b24KKyAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKKyAgICAgICAgJiYgdmFsdWUuZnVu
Y3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8KKyAgICAgICAg
JiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZ2IoIikpIHsKICAg
ICAgICAgaW50IGNvbG9yVmFsdWVzWzNdOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JQYXJhbWV0
ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgZmFsc2UpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjID0gbWFrZVJHQihjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNv
bG9yVmFsdWVzWzJdKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmCi0gICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzICE9IDAgJiYKLSAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3Mt
PnNpemUoKSA9PSA3IC8qIHJnYmEgKyB0aHJlZSBjb21tYXMgKi8gJiYKLSAgICAgICAgICAgICAg
ICBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZ2JhKCIpKSB7Cisg
ICAgICAgIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbgorICAgICAg
ICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKKyAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0
aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiByZ2JhICsgdGhyZWUgY29tbWFzICovCisgICAgICAg
ICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInJnYmEoIikp
IHsKICAgICAgICAgICAgIGludCBjb2xvclZhbHVlc1s0XTsKICAgICAgICAgICAgIGlmICghcGFy
c2VDb2xvclBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCB0cnVlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjID0gbWFrZVJHQkEoY29sb3JWYWx1ZXNb
MF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSwgY29sb3JWYWx1ZXNbM10pOwotICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAm
JgotICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIGhz
bCArIHR3byBjb21tYXMgKi8gJiYKLSAgICAgICAgICAgICAgICAgICAgZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiaHNsKCIpKSB7CisgICAgICAgIH0gZWxzZSBpZiAo
dmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KKyAgICAgICAgICAgICYmIHZh
bHVlLmZ1bmN0aW9uLT5hcmdzCisgICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+
c2l6ZSgpID09IDUgLyogaHNsICsgdHdvIGNvbW1hcyAqLworICAgICAgICAgICAgJiYgZXF1YWxJ
Z25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2woIikpIHsKICAgICAgICAgICAg
IGRvdWJsZSBjb2xvclZhbHVlc1szXTsKICAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0
ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgZmFsc2UpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBj
b2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIDEuMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmCi0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDcgLyogaHNsYSArIHRocmVlIGNvbW1h
cyAqLyAmJgotICAgICAgICAgICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVu
Y3Rpb24tPm5hbWUsICJoc2xhKCIpKSB7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KKyAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9u
LT5hcmdzCisgICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDcg
LyogaHNsYSArIHRocmVlIGNvbW1hcyAqLworICAgICAgICAgICAgJiYgZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2xhKCIpKSB7CiAgICAgICAgICAgICBkb3VibGUg
Y29sb3JWYWx1ZXNbNF07CiAgICAgICAgICAgICBpZiAoIXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1
ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTcxMzAsNyArNzExNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yRnJvbVZhbHVlKENT
U1BhcnNlclZhbHVlKiB2YWx1ZSwgUkdCQTMyJiBjKQogLy8gVGhpcyBjbGFzcyB0cmFja3MgcGFy
c2luZyBzdGF0ZSBmb3Igc2hhZG93IHZhbHVlcy4gIElmIGl0IGdvZXMgb3V0IG9mIHNjb3BlIChl
LmcuLCBkdWUgdG8gYW4gZWFybHkgcmV0dXJuKQogLy8gd2l0aG91dCB0aGUgYWxsb3dCcmVhayBi
aXQgYmVpbmcgc2V0LCB0aGVuIGl0IHdpbGwgY2xlYW4gdXAgYWxsIG9mIHRoZSBvYmplY3RzIGFu
ZCBkZXN0cm95IHRoZW0uCiBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKLSAgICBTaGFkb3dQ
YXJzZUNvbnRleHQoQ1NTUHJvcGVydHlJRCBwcm9wLCBDU1NQYXJzZXIqIHBhcnNlcikKKyAgICBT
aGFkb3dQYXJzZUNvbnRleHQoQ1NTUHJvcGVydHlJRCBwcm9wLCBDU1NQYXJzZXImIHBhcnNlcikK
ICAgICAgICAgOiBwcm9wZXJ0eShwcm9wKQogICAgICAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAg
ICAgICAgLCBhbGxvd1godHJ1ZSkKQEAgLTcxNTksMTAgKzcxNDQsMTAgQEAgc3RydWN0IFNoYWRv
d1BhcnNlQ29udGV4dCB7CiAgICAgICAgIC8vIE5vdyByZXNldCBmb3IgdGhlIG5leHQgc2hhZG93
IHZhbHVlLgogICAgICAgICB4ID0gMDsKICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGJsdXIgPSAw
OwotICAgICAgICBzcHJlYWQgPSAwOwotICAgICAgICBzdHlsZSA9IDA7Ci0gICAgICAgIGNvbG9y
ID0gMDsKKyAgICAgICAgYmx1ciA9IG51bGxwdHI7CisgICAgICAgIHNwcmVhZCA9IG51bGxwdHI7
CisgICAgICAgIHN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgY29sb3IgPSBudWxscHRyOwogCiAg
ICAgICAgIGFsbG93WCA9IHRydWU7CiAgICAgICAgIGFsbG93Q29sb3IgPSB0cnVlOwpAQCAtNzE3
MywzMCArNzE1OCwzMCBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKICAgICAgICAgYWxs
b3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3Bl
cnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OwogICAgIH0KIAotICAgIHZvaWQgY29tbWl0TGVu
Z3RoKENTU1BhcnNlclZhbHVlKiB2KQorICAgIHZvaWQgY29tbWl0TGVuZ3RoKENTU1BhcnNlclZh
bHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFs
ID0gbV9wYXJzZXItPmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2KTsKKyAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKGFsbG93WCkgewotICAg
ICAgICAgICAgeCA9IHZhbC5yZWxlYXNlKCk7CisgICAgICAgICAgICB4ID0gcHJpbWl0aXZlVmFs
dWUucmVsZWFzZSgpOwogICAgICAgICAgICAgYWxsb3dYID0gZmFsc2U7CiAgICAgICAgICAgICBh
bGxvd1kgPSB0cnVlOwogICAgICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwogICAgICAgICAg
ICAgYWxsb3dTdHlsZSA9IGZhbHNlOwogICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwog
ICAgICAgICB9IGVsc2UgaWYgKGFsbG93WSkgewotICAgICAgICAgICAgeSA9IHZhbC5yZWxlYXNl
KCk7CisgICAgICAgICAgICB5ID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwogICAgICAgICAg
ICAgYWxsb3dZID0gZmFsc2U7CiAgICAgICAgICAgICBhbGxvd0JsdXIgPSB0cnVlOwogICAgICAg
ICAgICAgYWxsb3dDb2xvciA9IHRydWU7CiAgICAgICAgICAgICBhbGxvd1N0eWxlID0gcHJvcGVy
dHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlCb3hTaGFkb3c7CiAgICAgICAgICAgICBhbGxvd0JyZWFrID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIGlmIChhbGxvd0JsdXIpIHsKLSAgICAgICAgICAgIGJsdXIgPSB2YWwucmVsZWFzZSgpOwor
ICAgICAgICAgICAgYmx1ciA9IHByaW1pdGl2ZVZhbHVlLnJlbGVhc2UoKTsKICAgICAgICAgICAg
IGFsbG93Qmx1ciA9IGZhbHNlOwogICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBwcm9wZXJ0eSA9
PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJv
eFNoYWRvdzsKICAgICAgICAgfSBlbHNlIGlmIChhbGxvd1NwcmVhZCkgewotICAgICAgICAgICAg
c3ByZWFkID0gdmFsLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHNwcmVhZCA9IHByaW1pdGl2ZVZh
bHVlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGFsbG93U3ByZWFkID0gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CkBAIC03MjE1LDkgKzcyMDAsOSBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0
IHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgY29tbWl0U3R5bGUoQ1NTUGFyc2VyVmFs
dWUqIHYpCisgICAgdm9pZCBjb21taXRTdHlsZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAg
ewotICAgICAgICBzdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
LT5pZCk7CisgICAgICAgIHN0eWxlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLmlkKTsKICAgICAgICAgYWxsb3dTdHlsZSA9IGZhbHNlOwogICAgICAgICBpZiAo
YWxsb3dYKQogICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwpAQCAtNzIyOSw3ICs3MjE0
LDcgQEAgc3RydWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7CiAgICAgfQogCiAgICAgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eTsKLSAgICBDU1NQYXJzZXIqIG1fcGFyc2VyOworICAgIENTU1BhcnNlciYg
bV9wYXJzZXI7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiB4OwpAQCAtNzI0OCw2MiArNzIzMyw2MyBAQCBzdHJ1Y3QgU2hh
ZG93UGFyc2VDb250ZXh0IHsKICAgICBib29sIGFsbG93QnJlYWs7CiB9OwogCi1QYXNzUmVmUHRy
PENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3Qq
IHZhbHVlTGlzdCwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpCitQYXNzUmVmUHRyPENTU1ZhbHVlTGlz
dD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwg
Q1NTUHJvcGVydHlJRCBwcm9wSWQpCiB7Ci0gICAgU2hhZG93UGFyc2VDb250ZXh0IGNvbnRleHQo
cHJvcElkLCB0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsOwotICAgIHdoaWxlICgodmFs
ID0gdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgU2hhZG93UGFyc2VDb250ZXh0IGNvbnRl
eHQocHJvcElkLCAqdGhpcyk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOworICAgIHdoaWxl
ICgodmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpKSkgewogICAgICAgICAvLyBDaGVjayBmb3Ig
YSBjb21tYSBicmVhayBmaXJzdC4KLSAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAgICAgICAgIGlmICh2YWwtPmlWYWx1ZSAhPSAnLCcgfHwg
IWNvbnRleHQuYWxsb3dCcmVhaykKKyAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNl
clZhbHVlOjpPcGVyYXRvcikgeworICAgICAgICAgICAgaWYgKHZhbHVlLT5pVmFsdWUgIT0gJywn
IHx8ICFjb250ZXh0LmFsbG93QnJlYWspIHsKICAgICAgICAgICAgICAgICAvLyBPdGhlciBvcGVy
YXRvcnMgYXJlbid0IGxlZ2FsIG9yIHdlIGFyZW4ndCBkb25lIHdpdGggdGhlIGN1cnJlbnQgc2hh
ZG93CiAgICAgICAgICAgICAgICAgLy8gdmFsdWUuICBUcmVhdCBhcyBpbnZhbGlkLgotICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgbm90IHN1
cHBvcnQgbXVsdGlwbGUgdmFsdWVzLgogICAgICAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdFN2Z1NoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29k
LiAgQ29tbWl0IGl0LgogICAgICAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwotICAgICAg
ICB9IGVsc2UgaWYgKHZhbGlkVW5pdCh2YWwsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKSB7Cisg
ICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9k
ZSkpIHsKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3QgZ2V0
IG9uZS4gSW52YWxpZC4KICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgICAgICAvLyBCbHVyIHJhZGl1cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRVbml0KHZhbCwgRkxlbmd0
aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEEgbGVuZ3RoIGlzIGFsbG93ZWQgaGVyZS4gIENv
bnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
TGVuZ3RoKHZhbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsLT5pZCA9PSBDU1NWYWx1ZUluc2V0
KSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdExlbmd0aCgqdmFsdWUpOworICAgICAgICB9
IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluc2V0KSB7CiAgICAgICAgICAgICBpZiAo
IWNvbnRleHQuYWxsb3dTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHls
ZSh2YWwpOworICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHlsZSgqdmFsdWUpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0
aGF0J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4KICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VkQ29sb3I7Ci0gICAgICAgICAgICBib29sIGlzQ29sb3IgPSAoKHZhbC0+
aWQgPj0gQ1NTVmFsdWVBcXVhICYmIHZhbC0+aWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCB2
YWwtPmlkID09IENTU1ZhbHVlTWVudQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh2
YWwtPmlkID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgdmFsLT5pZCA8PSBDU1NW
YWx1ZVdlYmtpdFRleHQgJiYgaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CisgICAgICAgICAgICBi
b29sIGlzQ29sb3IgPSAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUFxdWEgJiYgdmFsdWUtPmlkIDw9
IENTU1ZhbHVlV2luZG93dGV4dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlTWVudQorICAgICAg
ICAgICAgICAgIHx8ICh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAm
JiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRUZXh0ICYmIGluUXVpcmtzTW9kZSgpKQorICAg
ICAgICAgICAgICAgIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAg
ICAgICAgICBpZiAoaXNDb2xvcikgewogICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxv
d0NvbG9yKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBw
YXJzZWRDb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlk
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
cGFyc2VkQ29sb3IgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKICAg
ICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBidWlsdC1pbi4gVHJ5IHRvIHBhcnNlIGl0IGFzIGEg
Y29sb3IuCi0gICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbCk7Cisg
ICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbHVlKTsKIAogICAgICAg
ICAgICAgaWYgKCFwYXJzZWRDb2xvciB8fCAhY29udGV4dC5hbGxvd0NvbG9yKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0aCBh
bmQgaXMgaW52YWxpZCBvcgorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOyAvLyBUaGlz
IHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0aCBhbmQgaXMgaW52YWxpZCBvcgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBh
bGxvd2VkIGF0IHRoaXMgcG9pbnQuCiAKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3Io
cGFyc2VkQ29sb3IucmVsZWFzZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZhbHVlTGlzdC0+
bmV4dCgpOworICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOwogICAgIH0KIAogICAgIGlmIChjb250
ZXh0LmFsbG93QnJlYWspIHsKQEAgLTczMTIsNyArNzI5OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVM
aXN0LCBDCiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC52YWx1ZXMucmVsZWFzZSgpOwogICAg
IH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VSZWZsZWN0KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
QEAgLTczMjAsMzQgKzczMDYsMzQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdChDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgLy8gYm94LXJlZmxlY3Q6IDxk
aXJlY3Rpb24+IDxvZmZzZXQ+IDxtYXNrPgogCiAgICAgLy8gRGlyZWN0aW9uIGNvbWVzIGZpcnN0
LgotICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAg
IENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlyZWN0aW9uOwotICAgIHN3aXRjaCAodmFs
LT5pZCkgeworICAgIHN3aXRjaCAoY3VycmVudFZhbHVlLT5pZCkgewogICAgICAgICBjYXNlIENT
U1ZhbHVlQWJvdmU6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVCZWxvdzoKICAgICAgICAgY2FzZSBD
U1NWYWx1ZUxlZnQ6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGRp
cmVjdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsK
KyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRoZSBvZmZz
ZXQgY29tZXMgbmV4dC4KLSAgICB2YWwgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIGN1cnJl
bnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBvZmZzZXQ7Ci0gICAgaWYgKCF2YWwpCisgICAgaWYgKCFjdXJyZW50VmFsdWUpCiAgICAg
ICAgIG9mZnNldCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWwsIEZM
ZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUs
IEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWwpOworICAgICAgICBvZmZz
ZXQgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CiAgICAgfQog
CiAgICAgLy8gTm93IGZvciB0aGUgbWFzay4KICAgICBSZWZQdHI8Q1NTVmFsdWU+IG1hc2s7Ci0g
ICAgdmFsID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsKSB7CisgICAgY3VycmVu
dFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICBpZiAoY3VycmVudFZhbHVlKSB7CiAg
ICAgICAgIGlmICghcGFyc2VCb3JkZXJJbWFnZShwcm9wSWQsIG1hc2spKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczNTcsMzUgKzczNDMsMzUgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlUmVmbGVjdChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsZXgoQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzLCBib29sIGltcG9ydGFudCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZs
ZXgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBpZiAo
IWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSB8fCBhcmdzLT5zaXplKCkgPiAzKQorICAgIGlmICghYXJn
cy5zaXplKCkgfHwgYXJncy5zaXplKCkgPiAzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSB1bnNldFZhbHVlID0gLTE7CiAgICAgZG91YmxlIGZsZXhHcm93
ID0gdW5zZXRWYWx1ZTsKICAgICBkb3VibGUgZmxleFNocmluayA9IHVuc2V0VmFsdWU7CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmbGV4QmFzaXM7CiAKLSAgICB3aGlsZSAoQ1NTUGFy
c2VyVmFsdWUqIGFyZyA9IGFyZ3MtPmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0
KGFyZywgRk51bWJlciB8IEZOb25OZWcpKSB7CisgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBh
cmd1bWVudCA9IGFyZ3MuY3VycmVudCgpKSB7CisgICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGTnVtYmVyIHwgRk5vbk5lZykpIHsKICAgICAgICAgICAgIGlmIChmbGV4R3JvdyA9PSB1
bnNldFZhbHVlKQotICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gcGFyc2VkRG91YmxlKCphcmcs
IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gcGFy
c2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxl
eFNocmluayA9IHBhcnNlZERvdWJsZSgqYXJnLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKCFwYXJzZWREb3VibGUoKmFyZywgUmVsZWFzZVBhcnNlZENhbGNW
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gcGFyc2VkRG91YmxlKCphcmd1
bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmICghcGFy
c2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpIHsKICAgICAgICAg
ICAgICAgICAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykgaWYg
ZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0Lgog
ICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBvbmx5IGFsbG93IDMgbnVtYmVycyB3aXRob3V0IHVuaXRzIGlmIHRo
ZSBsYXN0IHZhbHVlIGlzIDAuIEUuZy4sIGZsZXg6MSAxIDEgaXMgaW52YWxpZC4KICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
IWZsZXhCYXNpcyAmJiAoYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZywg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxleEJhc2lzID0g
cGFyc2VWYWxpZFByaW1pdGl2ZShhcmctPmlkLCBhcmcpOworICAgICAgICB9IGVsc2UgaWYgKCFm
bGV4QmFzaXMgJiYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCph
cmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQorICAgICAgICAgICAgZmxl
eEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudC0+aWQsICphcmd1bWVudCk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gTm90IGEgdmFsaWQgYXJnIGZvciBmbGV4Lgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGFyZ3MtPm5leHQo
KTsKKyAgICAgICAgYXJncy5uZXh0KCk7CiAgICAgfQogCiAgICAgaWYgKGZsZXhHcm93ID09IHVu
c2V0VmFsdWUpCkBAIC03NDg4LDcgKzc0NzQsNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNv
bnRleHQgewogICAgICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1hZ2VWYWx1ZShtX2ltYWdlLCBt
X2ltYWdlU2xpY2UsIG1fYm9yZGVyU2xpY2UsIG1fb3V0c2V0LCBtX3JlcGVhdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZShDU1NQYXJzZXIqIHBhcnNlciwgYm9vbCBpbXBv
cnRhbnQpCisgICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZShDU1NQYXJzZXImIHBhcnNlciwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgewogICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsIHBhcnNlciwgbV9pbWFnZSwgaW1wb3J0YW50KTsK
ICAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U2xpY2UsIHBhcnNlciwgbV9pbWFnZVNsaWNlLCBpbXBvcnRhbnQpOwpAQCAtNzQ5NywxMiArNzQ4
MywxMiBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgICAgICBjb21taXRC
b3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQsIHBhcnNlciwg
bV9yZXBlYXQsIGltcG9ydGFudCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21taXRCb3JkZXJJbWFn
ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQYXJzZXIqIHBhcnNlciwgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0YW50KQorICAgIHZvaWQgY29tbWl0Qm9y
ZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUGFyc2VyJiBwYXJzZXIs
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCkKICAgICB7CiAgICAg
ICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHBhcnNlci0+YWRkUHJvcGVydHkocHJvcElkLCB2
YWx1ZSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQs
IHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZXItPmFk
ZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFs
dWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShw
cm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9y
dGFudCwgdHJ1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBtX2NhbkFkdmFuY2U7CkBAIC03NTI4LDMw
ICs3NTE0LDMwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQsCiB7CiAgICAgU2hvcnRoYW5kU2Nv
cGUgc2NvcGUodGhpcywgcHJvcElkKTsKICAgICBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCBjb250
ZXh0OwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSkgeworICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkgewogICAgICAgICBjb250ZXh0LnNldENhbkFkdmFuY2UoZmFsc2Up
OwogCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0Zv
cndhcmRTbGFzaE9wZXJhdG9yKCkgJiYgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcih2YWwpKQorICAg
ICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQuYWxsb3dGb3J3YXJkU2xh
c2hPcGVyYXRvcigpICYmIGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKmN1cnJlbnRWYWx1ZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZvcndhcmRTbGFzaE9wZXJhdG9yKCk7CiAKICAgICAg
ICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93SW1hZ2UoKSkgewot
ICAgICAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkK
LSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKENTU0ltYWdlVmFsdWU6OmNyZWF0
ZShjb21wbGV0ZVVSTCh2YWwtPnN0cmluZykpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzR2Vu
ZXJhdGVkSW1hZ2VWYWx1ZSh2YWwpKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQorICAgICAgICAgICAgICAgIGNvbnRl
eHQuY29tbWl0SW1hZ2UoQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGN1cnJlbnRW
YWx1ZS0+c3RyaW5nKSkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZh
bHVlKCpjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VHZW5lcmF0ZWRJbWFnZShtX3ZhbHVlTGlz
dC5nZXQoKSwgdmFsdWUpKQorICAgICAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdl
KCptX3ZhbHVlTGlzdCwgdmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1p
dEltYWdlKHZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24g
JiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1hZ2Ut
c2V0KCIpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxJZ25vcmluZ0Nhc2UoY3VycmVudFZhbHVl
LT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2Uo
dmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwtPmlk
ID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7CiAgICAg
ICAgIH0KIApAQCAtNzU4Nyw3ICs3NTczLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVy
SW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCwKIAog
ICAgIGlmIChjb250ZXh0LmFsbG93Q29tbWl0KCkpIHsKICAgICAgICAgaWYgKHByb3BJZCA9PSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJJ
bWFnZSh0aGlzLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJJ
bWFnZSgqdGhpcywgaW1wb3J0YW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgLy8gTmVl
ZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFsdWUuCiAgICAgICAgICAgICByZXN1bHQg
PSBjb250ZXh0LmNvbW1pdFdlYktpdEJvcmRlckltYWdlKCk7CkBAIC03NjM2LDcgKzc2MjIsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+
JiByZXN1bHQpCiAKIGNsYXNzIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQgewogcHVibGlj
OgotICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQoQ1NTUGFyc2VyKiBwYXJzZXIpCisg
ICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dChDU1NQYXJzZXImIHBhcnNlcikKICAgICA6
IG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fYWxsb3dOdW1iZXIodHJ1ZSkKICAgICAsIG1fYWxs
b3dGaWxsKHRydWUpCkBAIC03NjQ5LDE4ICs3NjM1LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGFs
bG93RmluYWxDb21taXQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0K
IAotICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNlclZhbHVlKiB2KQorICAgIHZvaWQgY29t
bWl0TnVtYmVyKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gdmFsID0gbV9wYXJzZXItPmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1
ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgICAg
IGlmICghbV90b3ApCi0gICAgICAgICAgICBtX3RvcCA9IHZhbDsKKyAgICAgICAgICAgIG1fdG9w
ID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwogICAgICAgICBlbHNlIGlmICghbV9yaWdodCkK
LSAgICAgICAgICAgIG1fcmlnaHQgPSB2YWw7CisgICAgICAgICAgICBtX3JpZ2h0ID0gcHJpbWl0
aXZlVmFsdWUucmVsZWFzZSgpOwogICAgICAgICBlbHNlIGlmICghbV9ib3R0b20pCi0gICAgICAg
ICAgICBtX2JvdHRvbSA9IHZhbDsKKyAgICAgICAgICAgIG1fYm90dG9tID0gcHJpbWl0aXZlVmFs
dWUucmVsZWFzZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9sZWZ0
KTsKLSAgICAgICAgICAgIG1fbGVmdCA9IHZhbDsKKyAgICAgICAgICAgIG1fbGVmdCA9IHByaW1p
dGl2ZVZhbHVlLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fYWxsb3dOdW1iZXIg
PSAhbV9sZWZ0OwpAQCAtNzY5Nyw3ICs3NjgzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBDU1NQYXJzZXIqIG1fcGFyc2VyOworICAgIENTU1BhcnNlciYgbV9wYXJzZXI7CiAK
ICAgICBib29sIG1fYWxsb3dOdW1iZXI7CiAgICAgYm9vbCBtX2FsbG93RmlsbDsKQEAgLTc3MTMs
MTMgKzc2OTksMTMgQEAgcHJpdmF0ZToKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1h
Z2VTbGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZT4mIHJlc3VsdCkKIHsKLSAgICBCb3JkZXJJbWFnZVNsaWNlUGFyc2VDb250ZXh0IGNvbnRl
eHQodGhpcyk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbDsKLSAgICB3aGlsZSAoKHZhbCA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4
dCBjb250ZXh0KCp0aGlzKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CisgICAgd2hpbGUg
KCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FIGNh
bGMoKSBodHRwOi8vd2Via2l0Lm9yZy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVl
cyBhcmUgbm90IGNyZWF0ZWQgeWV0LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigp
ICYmICFpc0NhbGN1bGF0aW9uKHZhbCkgJiYgdmFsaWRVbml0KHZhbCwgRkludGVnZXIgfCBGTm9u
TmVnIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNv
bW1pdE51bWJlcih2YWwpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuYWxsb3dGaWxsKCkg
JiYgdmFsLT5pZCA9PSBDU1NWYWx1ZUZpbGwpCisgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVt
YmVyKCkgJiYgIWlzQ2FsY3VsYXRpb24oKnZhbHVlKSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGSW50
ZWdlciB8IEZOb25OZWcgfCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQuY29tbWl0TnVtYmVyKCp2YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGV4
dC5hbGxvd0ZpbGwoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsKQogICAgICAgICAgICAg
Y29udGV4dC5jb21taXRGaWxsKCk7CiAgICAgICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7
CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdl
IGFyZSBpbnZhbGlkLgpAQCAtNzc1MCw3ICs3NzM2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Qm9yZGVySW1hZ2VTbGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU0JvcmRlcklt
YWcKIAogY2xhc3MgQm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBC
b3JkZXJJbWFnZVF1YWRQYXJzZUNvbnRleHQoQ1NTUGFyc2VyKiBwYXJzZXIpCisgICAgQm9yZGVy
SW1hZ2VRdWFkUGFyc2VDb250ZXh0KENTU1BhcnNlciYgcGFyc2VyKQogICAgIDogbV9wYXJzZXIo
cGFyc2VyKQogICAgICwgbV9hbGxvd051bWJlcih0cnVlKQogICAgICwgbV9hbGxvd0ZpbmFsQ29t
bWl0KGZhbHNlKQpAQCAtNzc2MCwyMyArNzc0NiwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxv
d0ZpbmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAK
LSAgICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSogdikKKyAgICB2b2lkIGNvbW1p
dE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZhbDsKLSAgICAgICAgaWYgKHYtPmlkID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHZhbCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
LT5pZCk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWU7
CisgICAgICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBwcmlt
aXRpdmVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5p
ZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbCA9IG1fcGFyc2VyLT5jcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodik7CisgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IG1fcGFy
c2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKCFt
X3RvcCkKLSAgICAgICAgICAgIG1fdG9wID0gdmFsOworICAgICAgICAgICAgbV90b3AgPSBwcmlt
aXRpdmVWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVsc2UgaWYgKCFtX3JpZ2h0KQotICAgICAg
ICAgICAgbV9yaWdodCA9IHZhbDsKKyAgICAgICAgICAgIG1fcmlnaHQgPSBwcmltaXRpdmVWYWx1
ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2JvdHRvbSkKLSAgICAgICAgICAgIG1f
Ym90dG9tID0gdmFsOworICAgICAgICAgICAgbV9ib3R0b20gPSBwcmltaXRpdmVWYWx1ZS5yZWxl
YXNlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFtX2xlZnQpOwotICAg
ICAgICAgICAgbV9sZWZ0ID0gdmFsOworICAgICAgICAgICAgbV9sZWZ0ID0gcHJpbWl0aXZlVmFs
dWUucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9hbGxvd051bWJlciA9ICFtX2xl
ZnQ7CkBAIC03ODE0LDcgKzc4MDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IENTU1BhcnNlciogbV9wYXJzZXI7CisgICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKIAogICAgIGJv
b2wgbV9hbGxvd051bWJlcjsKICAgICBib29sIG1fYWxsb3dGaW5hbENvbW1pdDsKQEAgLTc4Mjcs
MTEgKzc4MTMsMTEgQEAgcHJpdmF0ZToKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1h
Z2VRdWFkKFVuaXRzIHZhbGlkVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3Vs
dCkKIHsKLSAgICBCb3JkZXJJbWFnZVF1YWRQYXJzZUNvbnRleHQgY29udGV4dCh0aGlzKTsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsOwotICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRV
bml0KHZhbCwgdmFsaWRVbml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsLT5pZCA9PSBDU1NWYWx1
ZUF1dG8pKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWwpOworICAgIEJv
cmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBDU1NQYXJzZXJW
YWx1ZSogY3VycmVudFZhbHVlOworICAgIHdoaWxlICgoY3VycmVudFZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAo
dmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUpIHx8IGN1
cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgeworICAgICAgICAgICAgY29udGV4dC5j
b21taXROdW1iZXIoKmN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIWluU2hvcnRo
YW5kKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5k
IHRoZW4gd2UgYXJlIGludmFsaWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODcy
LDkgKzc4NTgsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgdW5zaWduZWQgaW5kZXhBZnRlclNs
YXNoID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoaSk7Ci0gICAg
ICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZS0+aVZhbHVlICE9ICcvJykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KGkpOworICAgICAgICBpZiAodmFsdWUudW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
VmFsdWUgIT0gJy8nKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAg
ICAgaWYgKCFpIHx8IGluZGV4QWZ0ZXJTbGFzaCB8fCBpICsgMSA9PSBudW0gfHwgbnVtID4gaSAr
IDUpCkBAIC03OTEyLDcgKzc4OTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRp
dXMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0gZWxzZQogICAg
ICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzFdKTsKIAotICAgIEltcGxpY2l0U2NvcGUg
aW1wbGljaXRTY29wZSh0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKKyAgICBJbXBsaWNpdFNjb3Bl
IGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWly
KHJhZGlpWzBdWzBdLnJlbGVhc2UoKSwgcmFkaWlbMV1bMF0ucmVsZWFzZSgpKSwgaW1wb3J0YW50
KTsKICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCBjcmVh
dGVQcmltaXRpdmVWYWx1ZVBhaXIocmFkaWlbMF1bMV0ucmVsZWFzZSgpLCByYWRpaVsxXVsxXS5y
ZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwogICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihyYWRpaVswXVsyXS5y
ZWxlYXNlKCksIHJhZGlpWzFdWzJdLnJlbGVhc2UoKSksIGltcG9ydGFudCk7CkBAIC03OTM0LDkg
Kzc5MjAsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBc3BlY3RSYXRpbyhib29sIGltcG9ydGFu
dCkKICAgICBpZiAobnVtICE9IDMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1Bh
cnNlclZhbHVlKiBsdmFsdWUgPSBtX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKTsKLSAgICBDU1NQYXJz
ZXJWYWx1ZSogb3AgPSBtX3ZhbHVlTGlzdC0+dmFsdWVBdCgxKTsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogcnZhbHVlID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoMik7CisgICAgQ1NTUGFyc2VyVmFsdWUm
IGx2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSYg
b3AgPSAqbV92YWx1ZUxpc3QtPnZhbHVlQXQoMSk7CisgICAgQ1NTUGFyc2VyVmFsdWUmIHJ2YWx1
ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgyKTsKIAogICAgIGlmICghaXNGb3J3YXJkU2xhc2hP
cGVyYXRvcihvcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5NDQsMTAgKzc5MzAsMTAg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0UmF0aW8oYm9vbCBpbXBvcnRhbnQpCiAgICAg
aWYgKCF2YWxpZFVuaXQobHZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChy
dmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFsdmFsdWUtPmZWYWx1ZSB8fCAhcnZhbHVlLT5mVmFsdWUpCisgICAgaWYgKCFsdmFsdWUu
ZlZhbHVlIHx8ICFydmFsdWUuZlZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1Zh
bHVlOjpjcmVhdGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChsdmFsdWUtPmZWYWx1ZSksIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQocnZhbHVlLT5mVmFsdWUpKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVl
OjpjcmVhdGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChsdmFsdWUuZlZhbHVlKSwgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChydmFsdWUuZlZhbHVlKSksIGltcG9ydGFudCk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTc5NjAsMTEgKzc5NDYsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ291
bnRlcihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnQK
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvdW50ZXJOYW1lOwogCiAgICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7CiAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgICAgICAgIGNhc2UgSUQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCkgewotICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY291bnRlck5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFZBTDsKICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03
OTcyLDggKzc5NTgsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBib29sIGltcG9ydAogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWQUw6IHsKICAgICAgICAgICAgICAgICBpbnQgaSA9
IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsICYmIHZhbC0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICBpID0g
Y2xhbXBUb0ludGVnZXIodmFsLT5mVmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgeworICAgICAg
ICAgICAgICAgICAgICBpID0gY2xhbXBUb0ludGVnZXIodmFsdWUtPmZWYWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgfQogCkBA
IC03OTk1LDQ0ICs3OTgxLDQ0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXIoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0CiB9CiAKIC8vIFRo
aXMgc2hvdWxkIGdvIGF3YXkgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIC13ZWJraXQtZ3JhZGll
bnQKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZURlcHJlY2F0ZWRH
cmFkaWVudFBvaW50KENTU1BhcnNlclZhbHVlKiBhLCBib29sIGhvcml6b250YWwpCitzdGF0aWMg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2lu
dChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGJvb2wgaG9yaXpvbnRhbCkKIHsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKLSAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYSwg
ImxlZnQiKSAmJiBob3Jpem9udGFsKQotICAgICAgICAgICAgfHwgKGVxdWFsSWdub3JpbmdDYXNl
KGEsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCisgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAgICAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNl
KHZhbHVlLCAibGVmdCIpICYmIGhvcml6b250YWwpCisgICAgICAgICAgICB8fCAoZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCiAgICAgICAgICAgICByZXN1
bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKTsKLSAgICAgICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEsICJy
aWdodCIpICYmIGhvcml6b250YWwpCi0gICAgICAgICAgICAgICAgIHx8IChlcXVhbElnbm9yaW5n
Q2FzZShhLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQorICAgICAgICBlbHNlIGlmICgoZXF1
YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJyaWdodCIpICYmIGhvcml6b250YWwpCisgICAgICAgICAg
ICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJib3R0b20iKSAmJiAhaG9yaXpvbnRhbCkp
CiAgICAgICAgICAgICByZXN1bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgxMDAuLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhLCAiY2VudGVyIikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlLCAiY2VudGVyIikpCiAgICAgICAgICAgICByZXN1bHQgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
Ci0gICAgfSBlbHNlIGlmIChhLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
IHx8IGEtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAg
ICByZXN1bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhLT5mVmFsdWUsIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KGEtPnVuaXQpKTsKKyAgICB9IGVsc2Ug
aWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgdmFsdWUu
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCisgICAgICAgIHJlc3Vs
dCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9w
KENTU1BhcnNlciogcCwgQ1NTUGFyc2VyVmFsdWUqIGEsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBz
dG9wKQorc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFy
c2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ1NTR3JhZGllbnRDb2xvclN0b3Am
IHN0b3ApCiB7Ci0gICAgaWYgKGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQor
ICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+
bmFtZSwgImZyb20oIikgJiYKLSAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAidG8oIikgJiYKLSAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAiY29sb3Itc3RvcCgiKSkKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJ0bygiKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBhLT5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+
YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikKLSAgICAg
ICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJ0bygiKSkgeworICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikKKyAg
ICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJ0bygiKSkg
ewogICAgICAgICAvLyBUaGUgImZyb20iIGFuZCAidG8iIHN0b3BzIGV4cGVjdCAxIGFyZ3VtZW50
LgogICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAi
ZnJvbSgiKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAiZnJvbSgiKSkKICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwpAQCAtODA0MSwxMyAr
ODAyNywxMyBAQCBzdGF0aWMgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChD
U1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDUwogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVXZWJraXRUZXh0IHx8IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVX
aW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICBzdG9wLm1fY29s
b3IgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwLT5wYXJzZUNvbG9yKGFyZ3MtPmN1cnJl
bnQoKSk7CisgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VDb2xvcihhcmdz
LT5jdXJyZW50KCkpOwogICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1bmN0aW9uIGV4
cGVjdHMgMyBhcmd1bWVudHMuCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAiY29sb3Itc3RvcCgiKSkgeworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1
ZS5mdW5jdGlvbi0+bmFtZSwgImNvbG9yLXN0b3AoIikpIHsKICAgICAgICAgaWYgKGFyZ3MtPnNp
emUoKSAhPSAzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04MDY4LDcgKzgwNTQs
NyBAQCBzdGF0aWMgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJz
ZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDUwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVX
ZWJraXRUZXh0IHx8IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0
ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwLT5wYXJzZUNvbG9yKHN0b3BBcmcpOworICAgICAg
ICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VyLnBhcnNlQ29sb3Ioc3RvcEFyZyk7CiAgICAgICAg
IGlmICghc3RvcC5tX2NvbG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAg
LTgwNzYsMjEgKzgwNjIsMjEgQEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRD
b2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1MKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCkKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiB7CiAgICAgLy8gV2FsayB0
aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC0+
Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBp
ZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZ3JhZGllbnQgdHlwZS4gIEl0IGlzIGFu
IGlkZW50aWZpZXIuCiAgICAgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZTsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogYSA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWEgfHwgYS0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgIENTU1BhcnNlclZhbHVlKiBhcmd1
bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51
bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYSwgImxpbmVhciIpKQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSgqYXJndW1lbnQsICJsaW5lYXIiKSkKICAgICAgICAgZ3JhZGllbnRUeXBl
ID0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGEsICJyYWRpYWwiKSkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgqYXJn
dW1lbnQsICJyYWRpYWwiKSkKICAgICAgICAgZ3JhZGllbnRUeXBlID0gQ1NTRGVwcmVjYXRlZFJh
ZGlhbEdyYWRpZW50OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEwOSw2
MyArODA5NSw2MyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NT
UGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAgIH0KIAogICAgIC8vIENv
bW1hLgotICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgaWYgKCFpc0NvbW1hKGEpKQorICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE5leHQgY29tZXMgdGhlIHN0YXJ0aW5nIHBvaW50
IGZvciB0aGUgZ3JhZGllbnQgYXMgYW4geCB5IHBhaXIuICBUaGVyZSBpcyBubwogICAgIC8vIGNv
bW1hIGJldHdlZW4gdGhlIHggYW5kIHRoZSB5IHZhbHVlcy4KICAgICAvLyBGaXJzdCBYLiAgSXQg
Y2FuIGJlIGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhID0gYXJncy0+bmV4
dCgpOwotICAgIGlmICghYSkKKyAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICBpZiAo
IWFyZ3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgdHJ1ZSk7Cisg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRp
ZW50UG9pbnQoKmFyZ3VtZW50LCB0cnVlKTsKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZSgpKTsKIAogICAg
IC8vIEZpcnN0IFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJlciBvciBwZXJjZW50Lgot
ICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgaWYgKCFhKQorICAgIGFyZ3VtZW50ID0gYXJncy0+
bmV4dCgpOworICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBw
b2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UpOworICAgIHBvaW50
ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIGZhbHNlKTsKICAgICBp
ZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5zZXRGaXJzdFko
cG9pbnQucmVsZWFzZSgpKTsKIAogICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCBwb2ludC4K
LSAgICBhID0gYXJncy0+bmV4dCgpOwotICAgIGlmICghaXNDb21tYShhKSkKKyAgICBhcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKKyAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cg
ZXhwZWN0IGEgbnVtZXJpYyByYWRpdXMuCiAgICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXBy
ZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKLSAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisg
ICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIWFyZ3VtZW50IHx8
IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZh
bHVlPigqcmVzdWx0KS5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
YSkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5z
ZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CiAK
ICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4KLSAgICAgICAgYSA9IGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFpc0NvbW1hKGEpKQorICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBOZXh0IGlzIHRoZSBlbmRpbmcgcG9p
bnQgZm9yIHRoZSBncmFkaWVudCBhcyBhbiB4LCB5IHBhaXIuCiAgICAgLy8gU2Vjb25kIFguICBJ
dCBjYW4gYmUgbGVmdCwgcmlnaHQsIG51bWJlciBvciBwZXJjZW50LgotICAgIGEgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgaWYgKCFhKQorICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIGlm
ICghYXJndW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgdHJ1ZSk7CisgICAgcG9pbnQgPSBwYXJzZURlcHJlY2F0
ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwgdHJ1ZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC0+c2V0U2Vjb25kWChwb2ludC5yZWxlYXNlKCkp
OwogCiAgICAgLy8gU2Vjb25kIFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJlciBvciBw
ZXJjZW50LgotICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgaWYgKCFhKQorICAgIGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOworICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UpOwor
ICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIGZhbHNl
KTsKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5z
ZXRTZWNvbmRZKHBvaW50LnJlbGVhc2UoKSk7CkBAIC04MTczLDQ4ICs4MTU5LDQ4IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZh
bHVlTGlzdCwgUmVmUHRyPENTCiAgICAgLy8gRm9yIHJhZGlhbCBncmFkaWVudHMgb25seSwgd2Ug
bm93IGV4cGVjdCB0aGUgc2Vjb25kIHJhZGl1cy4KICAgICBpZiAoZ3JhZGllbnRUeXBlID09IENT
U0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUg
c2Vjb25kIHBvaW50LgotICAgICAgICBhID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWlz
Q29tbWEoYSkpCisgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAo
IWlzQ29tbWEoYXJndW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
KyAgICAgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG93
bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlh
bEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldFNlY29uZFJhZGl1cyhjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgLy8gV2Ugbm93IHdpbGwgYWNj
ZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSkuCi0gICAgYSA9IGFyZ3MtPm5leHQo
KTsKLSAgICB3aGlsZSAoYSkgeworICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIHdo
aWxlIChhcmd1bWVudCkgewogICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRo
ZSBuZXh0IHN0b3AuCi0gICAgICAgIGlmICghaXNDb21tYShhKSkKKyAgICAgICAgaWYgKCFpc0Nv
bW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBO
b3cgZXhhbWluZSB0aGUgc3RvcCBpdHNlbGYuCi0gICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghYSkKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAg
IGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8g
VGhlIGZ1bmN0aW9uIG5hbWUgbmVlZHMgdG8gYmUgb25lIG9mICJmcm9tIiwgInRvIiwgb3IgImNv
bG9yLXN0b3AuIgogICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwotICAgICAgICBp
ZiAoIXBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKHRoaXMsIGEsIHN0b3ApKQorICAg
ICAgICBpZiAoIXBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKCp0aGlzLCAqYXJndW1l
bnQsIHN0b3ApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXN1bHQtPmFk
ZFN0b3Aoc3RvcCk7CiAKICAgICAgICAgLy8gQWR2YW5jZQotICAgICAgICBhID0gYXJncy0+bmV4
dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICB9CiAKICAgICBncmFk
aWVudCA9IHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJz
ZXJWYWx1ZSogYSwgYm9vbCYgaXNIb3Jpem9udGFsKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhbHVlRnJvbVNpZGVLZXl3b3JkKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwg
Ym9vbCYgaXNIb3Jpem9udGFsKQogewotICAgIGlmIChhLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICh2YWx1ZS51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgc3dpdGNoIChhLT5pZCkgeworICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxlZnQ6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKICAgICAgICAg
ICAgIGlzSG9yaXpvbnRhbCA9IHRydWU7CkBAIC04MjI0LDM3ICs4MjEwLDM3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJz
ZXJWYWx1ZSogYSwgYm9vCiAgICAgICAgICAgICBpc0hvcml6b250YWwgPSBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhLT5pZCk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoQ1NTUGFy
c2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1BhcnNlciYgcGFyc2Vy
LCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLT5p
ZDsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVl
V2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93
dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9y
KQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
KTsKIAotICAgIHJldHVybiBwLT5wYXJzZUNvbG9yKHZhbHVlKTsKKyAgICByZXR1cm4gcGFyc2Vy
LnBhcnNlQ29sb3IoJnZhbHVlKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRl
ZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NT
VmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYXQg
cmVwZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiByZXN1bHQg
PSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZExp
bmVhckdyYWRpZW50KTsKIAogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQo
KS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiBhID0gYXJncy0+
Y3VycmVudCgpOwotICAgIGlmICghYSkKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBh
cmdzLT5jdXJyZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xl
LgotICAgIGlmICh2YWxpZFVuaXQoYSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAg
ICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CisgICAg
aWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50
KSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7
CkBAIC04MjY0LDE0ICs4MjUwLDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRM
aW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmCiAKICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbjsKICAgICAgICAgYm9vbCBpc0hv
cml6b250YWwgPSBmYWxzZTsKLSAgICAgICAgaWYgKChsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVL
ZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCkpKSB7CisgICAgICAgIGlmICgobG9jYXRpb24gPSB2YWx1
ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCkpKSB7CiAgICAgICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGxvY2F0aW9uOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0YXJ0WSA9IGxvY2F0aW9uOwogCi0g
ICAgICAgICAgICBpZiAoKGEgPSBhcmdzLT5uZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KChsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCkpKSB7Cisg
ICAgICAgICAgICBpZiAoKGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICgobG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9y
aXpvbnRhbCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODI5Niw3ICs4MjgyLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVM
aXN0LCBSZWYKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoc3RhcnRZLnJlbGVhc2UoKSk7CiAg
ICAgfQogCi0gICAgaWYgKCFwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCByZXN1bHQuZ2V0
KCksIGV4cGVjdENvbW1hKSkKKyAgICBpZiAoIXBhcnNlR3JhZGllbnRDb2xvclN0b3BzKCphcmdz
LCAqcmVzdWx0LCBleHBlY3RDb21tYSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICghcmVzdWx0LT5zdG9wQ291bnQoKSkKQEAgLTgzMDYsMTcgKzgyOTIsMTcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCog
dmFsdWVMaXN0LCBSZWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0
LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5n
KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3Jh
ZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZh
bHVlPiByZXN1bHQgPSBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBD
U1NQcmVmaXhlZFJhZGlhbEdyYWRpZW50KTsKIAogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4K
LSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVu
Y3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVM
aXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFh
cmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVl
KiBhID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYSkKKyAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwpAQCAtODMyNSwx
OCArODMxMSwxOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZgogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY2VudGVyWDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNlbnRlclk7CiAgICAgLy8gcGFyc2Uy
VmFsdWVzRmlsbFBvc2l0aW9uIGFkdmFuY2VzIHRoZSBhcmdzIG5leHQgcG9pbnRlci4KLSAgICBw
YXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oYXJncywgY2VudGVyWCwgY2VudGVyWSk7Ci0gICAgYSA9
IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWEpCisgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0
aW9uKCphcmdzLCBjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICBhcmd1bWVudCA9IGFyZ3MtPmN1cnJl
bnQoKTsKKyAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoY2VudGVyWCB8fCBjZW50ZXJZKSB7CiAgICAgICAgIC8vIENvbW1hCi0gICAgICAgIGlmICgh
aXNDb21tYShhKSkKKyAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBhID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAo
IWEpCisgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIWFyZ3Vt
ZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtODM1MSwxNCArODMz
NywxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZgogCiAgICAgLy8gT3B0aW9uYWwgc2hhcGUg
YW5kL29yIHNpemUgaW4gYW55IG9yZGVyLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgICAgIGlmIChhLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
CisgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgYm9vbCBmb3VuZFZhbHVlID0gZmFs
c2U7Ci0gICAgICAgIHN3aXRjaCAoYS0+aWQpIHsKKyAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+
aWQpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUNpcmNsZToKICAgICAgICAgY2FzZSBDU1NWYWx1
ZUVsbGlwc2U6Ci0gICAgICAgICAgICBzaGFwZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKGEtPmlkKTsKKyAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKICAgICAgICAgICAg
IGZvdW5kVmFsdWUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVDbG9zZXN0U2lkZToKQEAgLTgzNjcsNyArODM1Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlz
dCwgUmVmCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXJ0aGVzdENvcm5lcjoKICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUNvbnRhaW46CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb3ZlcjoKLSAgICAgICAg
ICAgIHNpemVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhLT5p
ZCk7CisgICAgICAgICAgICBzaXplVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKICAgICAgICAgICAgIGZvdW5kVmFsdWUgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC04Mzc1LDggKzgzNjEsOCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2Vy
VmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5k
VmFsdWUpIHsKLSAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAo
IWEpCisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAgIGlm
ICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBleHBlY3RDb21tYSA9IHRydWU7CkBAIC04MzkxLDIwICs4Mzc3LDIwIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZh
bHVlTGlzdCwgUmVmCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7
CiAKICAgICBpZiAoIXNoYXBlVmFsdWUgJiYgIXNpemVWYWx1ZSkgewotICAgICAgICBpZiAodmFs
aWRVbml0KGEsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6b250YWxT
aXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpOwotICAgICAgICAgICAgYSA9IGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgICAgIGlmICghYSkKKyAgICAgICAgaWYgKHZhbGlkVW5pdCgq
YXJndW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIGhvcml6b250YWxT
aXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgICAg
ICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBleHBlY3RDb21tYSA9
IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmFsaWRVbml0KGEsIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShhKTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpOwogCi0gICAgICAgICAgICBhID0gYXJncy0+bmV4dCgp
OwotICAgICAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtODQx
Nyw0MyArODQwMyw0MyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZgogICAgIHJlc3VsdC0+c2V0
RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUpOwogICAgIHJlc3VsdC0+c2V0RW5kVmVy
dGljYWxTaXplKHZlcnRpY2FsU2l6ZSk7CiAKLSAgICBpZiAoIXBhcnNlR3JhZGllbnRDb2xvclN0
b3BzKGFyZ3MsIHJlc3VsdC5nZXQoKSwgZXhwZWN0Q29tbWEpKQorICAgIGlmICghcGFyc2VHcmFk
aWVudENvbG9yU3RvcHMoKmFyZ3MsICpyZXN1bHQsIGV4cGVjdENvbW1hKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgZ3JhZGllbnQgPSByZXN1bHQucmVsZWFzZSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dy
YWRpZW50UmVwZWF0IHJlcGVhdGluZykKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFk
aWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NMaW5l
YXJHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUo
cmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAg
Q1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiBhID0gYXJncy0+Y3VycmVudCgpOwot
ICAgIGlmICghYSkKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50
KCk7CisgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgotICAgIGlmICh2
YWxpZFVuaXQoYSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNl
dEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CisgICAgaWYgKHZhbGlkVW5p
dCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CiAKICAgICAg
ICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgfSBlbHNl
IGlmIChhLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25v
cmluZ0Nhc2UoYSwgInRvIikpIHsKKyAgICB9IGVsc2UgaWYgKGFyZ3VtZW50LT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoKmFyZ3VtZW50
LCAidG8iKSkgewogICAgICAgICAvLyB0byBbIFtsZWZ0IHwgcmlnaHRdIHx8IFt0b3AgfCBib3R0
b21dIF0KLSAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhKQorICAgICAg
ICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGVuZFgsIGVuZFk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247
CiAgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24g
PSB2YWx1ZUZyb21TaWRlS2V5d29yZChhLCBpc0hvcml6b250YWwpOworICAgICAgICBsb2NhdGlv
biA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCphcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAg
ICAgaWYgKCFsb2NhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQ2Miwx
MSArODQ0OCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBlbmRZID0gbG9jYXRpb247CiAKLSAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKCFhKQorICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAg
aWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBsb2Nh
dGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxv
Y2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKmFyZ3VtZW50LCBpc0hvcml6b250YWwpOwog
ICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsK
ICAgICAgICAgICAgICAgICBpZiAoZW5kWCkKQEAgLTg0ODYsNyArODQ3Miw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0
LCBSZWZQdHI8Q1NTVmFsCiAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGVuZFkucmVsZWFzZSgp
KTsKICAgICB9CiAKLSAgICBpZiAoIXBhcnNlR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIHJlc3Vs
dC5nZXQoKSwgZXhwZWN0Q29tbWEpKQorICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMo
KmFyZ3MsICpyZXN1bHQsIGV4cGVjdENvbW1hKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKCFyZXN1bHQtPnN0b3BDb3VudCgpKQpAQCAtODQ5NiwxNiArODQ4MiwxNiBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVl
TGlzdCwgUmVmUHRyPENTU1ZhbAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVm
UHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFs
dWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVw
ZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NSYWRpYWxHcmFkaWVu
dCk7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0g
dmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdz
IHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNl
clZhbHVlKiBhID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYSkKKyAgICBDU1NQYXJzZXJW
YWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwpAQCAt
ODUyMCwxNCArODUwNiwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChD
U1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgIC8vIFsgZWxs
aXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0gXSB8CiAgICAgLy8gWyBbIGNp
cmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgewotICAgICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKSB7CisgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICBib29sIGJhZElkZW50ID0gZmFsc2U7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGEtPmlkKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50
LT5pZCkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNpcmNsZToKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVFbGxpcHNlOgogICAgICAgICAgICAgICAgIGlmIChzaGFwZVZhbHVlKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2hhcGVWYWx1
ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhLT5pZCk7CisgICAgICAg
ICAgICAgICAgc2hhcGVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShhcmd1bWVudC0+aWQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUNsb3Nlc3RTaWRlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3Nlc3RD
b3JuZXI6CkBAIC04NTM1LDcgKzg1MjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxH
cmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0Q29ybmVyOgogICAgICAgICAgICAgICAgIGlm
IChzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICBzaXplVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoYS0+aWQpOworICAgICAgICAgICAgICAgIHNpemVWYWx1ZSA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
YWRJZGVudCA9IHRydWU7CkBAIC04NTQ0LDI0ICs4NTMwLDI0IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsCiAgICAgICAgICAgICBpZiAoYmFkSWRlbnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWEpCisg
ICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAgIGlmICghYXJn
dW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYg
KHZhbGlkVW5pdChhLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAo
dmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogCiAgICAgICAgICAg
ICBpZiAoc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGEpOworICAgICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KTsKIAotICAgICAgICAgICAgYSA9IGFyZ3MtPm5leHQo
KTsKLSAgICAgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoYSwgRkxlbmd0aCB8IEZQZXJjZW50
KSkgewotICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgKytpOwotICAg
ICAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICAgICAgICAg
IGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlCkBAIC04NTkwLDE3ICs4NTc2LDE3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0
LCBSZWZQdHI8Q1NTVmFsCiAgICAgLy8gYXQgPHBvc2l0aW9uPgogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY2VudGVyWDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNlbnRlclk7Ci0gICAgaWYgKGEtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBlcXVhbElnbm9yaW5nQ2FzZShh
LCAiYXQiKSkgewotICAgICAgICBhID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWEpCisg
ICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UoKmFyZ3VtZW50LCAiYXQiKSkgeworICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbihhcmdzLCBjZW50ZXJYLCBjZW50
ZXJZKTsKKyAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oKmFyZ3MsIGNlbnRlclgsIGNlbnRlclkp
OwogICAgICAgICBpZiAoIShjZW50ZXJYICYmIGNlbnRlclkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGEgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICghYSkK
KyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgICAgIGlmICghYXJndW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcmVzdWx0LT5zZXRGaXJz
dFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKQEAgLTg2MTMs
NTIgKzg1OTksNTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFy
c2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICBpZiAoc2hhcGVWYWx1
ZSB8fCBzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50ZXJZKQog
ICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAKLSAgICBpZiAoIXBhcnNlR3JhZGllbnRDb2xv
clN0b3BzKGFyZ3MsIHJlc3VsdC5nZXQoKSwgZXhwZWN0Q29tbWEpKQorICAgIGlmICghcGFyc2VH
cmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsICpyZXN1bHQsIGV4cGVjdENvbW1hKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZ3JhZGllbnQgPSByZXN1bHQucmVsZWFzZSgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMo
Q1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIENTU0dyYWRpZW50VmFsdWUqIGdyYWRpZW50
LCBib29sIGV4cGVjdENvbW1hKQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xvclN0
b3BzKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFk
aWVudCwgYm9vbCBleHBlY3RDb21tYSkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYSA9IHZhbHVl
TGlzdC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSB2YWx1
ZUxpc3QuY3VycmVudCgpOwogICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSB0cnVl
OwogCiAgICAgLy8gTm93IGxvb2sgZm9yIGNvbG9yIHN0b3BzLgotICAgIHdoaWxlIChhKSB7Cisg
ICAgd2hpbGUgKGN1cnJlbnRWYWx1ZSkgewogICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEg
YmVmb3JlIHRoZSBuZXh0IHN0b3AuCiAgICAgICAgIGlmIChleHBlY3RDb21tYSkgewotICAgICAg
ICAgICAgaWYgKCFpc0NvbW1hKGEpKQorICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGN1cnJlbnRW
YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhID0g
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjdXJy
ZW50VmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50VmFs
dWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gPGNvbG9yLXN0b3A+ID0gPGNvbG9yPiBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0/CiAg
ICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIHN0b3AubV9jb2xvciA9
IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZCh0aGlzLCBhKTsKKyAgICAgICAgc3RvcC5tX2Nv
bG9yID0gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKCp0aGlzLCAqY3VycmVudFZhbHVlKTsK
ICAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpIHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0
b3BXYXNNaWRwb2ludCkgLy8gMiBtaWRwb2ludHMgaW4gYSByb3cgaXMgbm90IGFsbG93ZWQuIFRo
aXMgYWxzbyBjYXRjaGVzIHN0YXJ0aW5nIHdpdGggYSBtaWRwb2ludC4KICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHN0b3AuaXNNaWRwb2ludCA9IHRydWU7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYSA9IHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAg
ICAgICAgY3VycmVudFZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKIAogICAgICAgICBwcmV2aW91
c1N0b3BXYXNNaWRwb2ludCA9IHN0b3AuaXNNaWRwb2ludDsKIAotICAgICAgICBpZiAoYSkgewot
ICAgICAgICAgICAgaWYgKHZhbGlkVW5pdChhLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAg
ICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGEpOwotICAgICAgICAgICAgICAgIGEgPSB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgaWYg
KGN1cnJlbnRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVl
LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9u
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFsdWUpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKHN0b3AuaXNNaWRwb2ludCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBncmFkaWVudC0+YWRkU3RvcChzdG9wKTsKKyAgICAgICAgZ3Jh
ZGllbnQuYWRkU3RvcChzdG9wKTsKICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgIH0K
IApAQCAtODY2Nyw4MCArODY1Myw4MCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENv
bG9yU3RvcHMoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIENTU0dyYWRpZQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNdXN0IGhhdmUgMiBvciBtb3JlIHN0b3BzIHRvIGJl
IHZhbGlkLgotICAgIHJldHVybiBncmFkaWVudC0+c3RvcENvdW50KCkgPj0gMjsKKyAgICByZXR1
cm4gZ3JhZGllbnQuc3RvcENvdW50KCkgPj0gMjsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OmlzR2Vu
ZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJWYWx1ZSogdmFsKSBjb25zdAorYm9vbCBDU1NQYXJz
ZXI6OmlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpIGNvbnN0CiB7
Ci0gICAgaWYgKHZhbC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisgICAgaWYg
KHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFt
ZSwgIi13ZWJraXQtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFs
LT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAgIHx8
IGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJsaW5lYXItZ3JhZGllbnQo
IikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgIi13
ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbElnbm9y
aW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgi
KQotICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1yYWRpYWwtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFs
LT5mdW5jdGlvbi0+bmFtZSwgInJhZGlhbC1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbEln
bm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFs
LWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24t
Pm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWNhbnZhcygiKQotICAgICAg
ICB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jcm9z
cy1mYWRlKCIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LWZpbHRlcigiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFs
dWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWdyYWRpZW50KCIpCisgICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1saW5lYXItZ3JhZGll
bnQoIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUs
ICJsaW5lYXItZ3JhZGllbnQoIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIikKKyAg
ICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRp
bmctbGluZWFyLWdyYWRpZW50KCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoIikKKyAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyYWRpYWwtZ3JhZGllbnQo
IikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LXJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikKKyAgICAgICAgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50
KCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAi
LXdlYmtpdC1jYW52YXMoIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICItd2Via2l0LWNyb3NzLWZhZGUoIikKKyAgICAgICAgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWZpbHRlcigiKTsKIH0KIAot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2
YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnBhcnNl
R2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NW
YWx1ZT4mIHZhbHVlKQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSB2YWx1ZUxpc3QtPmN1
cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUgPSAqdmFsdWVMaXN0LmN1
cnJlbnQoKTsKIAotICAgIGlmICh2YWwtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9u
KQorICAgIGlmIChwYXJzZXJWYWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWdyYWRpZW50KCIpKQorICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtZ3JhZGllbnQoIikp
CiAgICAgICAgIHJldHVybiBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVl
KTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1saW5lYXItZ3JhZGllbnQoIikpCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHBhcnNl
clZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIikpCiAgICAg
ICAgIHJldHVybiBwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVl
LCBOb25SZXBlYXRpbmcpOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rp
b24tPm5hbWUsICJsaW5lYXItZ3JhZGllbnQoIikpCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAibGluZWFyLWdyYWRpZW50KCIpKQogICAgICAg
ICByZXR1cm4gcGFyc2VMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBOb25SZXBlYXRp
bmcpOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIikpCisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRpbmctbGlu
ZWFyLWdyYWRpZW50KCIpKQogICAgICAgICByZXR1cm4gcGFyc2VEZXByZWNhdGVkTGluZWFyR3Jh
ZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgUmVwZWF0aW5nKTsKIAotICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgi
KSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUs
ICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpKQogICAgICAgICByZXR1cm4gcGFyc2VMaW5l
YXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBlYXRpbmcpOwogCi0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJhZGlhbC1ncmFkaWVu
dCgiKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LXJhZGlhbC1ncmFkaWVudCgiKSkKICAgICAgICAgcmV0dXJuIHBhcnNlRGVw
cmVjYXRlZFJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGluZyk7CiAK
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgInJhZGlhbC1n
cmFkaWVudCgiKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJyYWRpYWwtZ3JhZGllbnQoIikpCiAgICAgICAgIHJldHVybiBwYXJzZVJhZGlh
bEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGluZyk7CiAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtcmVwZWF0aW5nLXJh
ZGlhbC1ncmFkaWVudCgiKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGFyc2VyVmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikpCiAg
ICAgICAgIHJldHVybiBwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZh
bHVlLCBSZXBlYXRpbmcpOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rp
b24tPm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpKQorICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdGluZy1yYWRpYWwt
Z3JhZGllbnQoIikpCiAgICAgICAgIHJldHVybiBwYXJzZVJhZGlhbEdyYWRpZW50KHZhbHVlTGlz
dCwgdmFsdWUsIFJlcGVhdGluZyk7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5m
dW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FudmFzKCIpKQorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FudmFzKCIpKQogICAg
ICAgICByZXR1cm4gcGFyc2VDYW52YXModmFsdWVMaXN0LCB2YWx1ZSk7CiAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3MtZmFkZSgi
KSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUs
ICItd2Via2l0LWNyb3NzLWZhZGUoIikpCiAgICAgICAgIHJldHVybiBwYXJzZUNyb3NzZmFkZSh2
YWx1ZUxpc3QsIHZhbHVlKTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0
aW9uLT5uYW1lLCAiLXdlYmtpdC1maWx0ZXIoIikpCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1maWx0ZXIoIikpCiAgICAgICAg
IHJldHVybiBwYXJzZUZpbHRlckltYWdlKHZhbHVlTGlzdCwgdmFsdWUpOwogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGaWx0ZXJJbWFnZShDU1NQYXJzZXJW
YWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZmlsdGVyKQorYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRmlsdGVySW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDU1NWYWx1ZT4mIGZpbHRlcikKIHsKICAgICBSZWZQdHI8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4gcmVzdWx0OwogCiAgICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZh
bHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC0+Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQo
KTsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5m
dW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7CkBAIC04NzUx
LDcgKzg3MzcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWx0ZXJJbWFnZShDU1NQYXJzZXJW
YWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGltYWdlLiBJdCBpcyBhIGZp
bGwgaW1hZ2UuCi0gICAgaWYgKCFwYXJzZUZpbGxJbWFnZShhcmdzLCBpbWFnZVZhbHVlKSkgewor
ICAgIGlmICghcGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIGltYWdlVmFsdWUpKSB7CiAgICAgICAgIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAg
ICAgIGltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUt
PnN0cmluZykpOwogICAgICAgICBlbHNlCkBAIC04NzY1LDcgKzg3NTEsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VGaWx0ZXJJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVm
UHRyPENTU1ZhbHVlPgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdmFsdWUgPSBhcmdzLT5u
ZXh0KCk7CiAKLSAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZUZpbHRlcihhcmdzLCBmaWx0ZXJWYWx1
ZSkpCisgICAgaWYgKCF2YWx1ZSB8fCAhcGFyc2VGaWx0ZXIoKmFyZ3MsIGZpbHRlclZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHZhbHVlID0gYXJncy0+bmV4dCgpOwogCkBAIC04
Nzc2LDQ3ICs4NzYyLDQ3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbHRlckltYWdlKENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNyb3NzZmFkZShDU1NQYXJzZXJWYWx1ZUxp
c3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgY3Jvc3NmYWRlKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ3Jvc3NmYWRlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsdWU+JiBjcm9zc2ZhZGUpCiB7CiAgICAgUmVmUHRyPENTU0Nyb3NzZmFkZVZhbHVlPiBy
ZXN1bHQ7CiAKICAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2VyVmFsdWVM
aXN0KiBhcmdzID0gdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwor
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0
aW9uLT5hcmdzLmdldCgpOwogICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gNSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1BhcnNlclZhbHVlKiBhID0gYXJncy0+Y3VycmVu
dCgpOworICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGZyb21JbWFnZVZhbHVlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dG9JbWFnZVZhbHVlOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSAiZnJvbSIg
aW1hZ2UuIEl0IGlzIGEgZmlsbCBpbWFnZS4KLSAgICBpZiAoIWEgfHwgIXBhcnNlRmlsbEltYWdl
KGFyZ3MsIGZyb21JbWFnZVZhbHVlKSkKKyAgICBpZiAoIWFyZ3VtZW50IHx8ICFwYXJzZUZpbGxJ
bWFnZSgqYXJncywgZnJvbUltYWdlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
YSA9IGFyZ3MtPm5leHQoKTsKKyAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAogICAgIC8v
IFNraXAgYSBjb21tYQotICAgIGlmICghaXNDb21tYShhKSkKKyAgICBpZiAoIWlzQ29tbWEoYXJn
dW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYSA9IGFyZ3MtPm5leHQoKTsKKyAg
ICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAogICAgIC8vIFRoZSBzZWNvbmQgYXJndW1lbnQg
aXMgdGhlICJ0byIgaW1hZ2UuIEl0IGlzIGEgZmlsbCBpbWFnZS4KLSAgICBpZiAoIWEgfHwgIXBh
cnNlRmlsbEltYWdlKGFyZ3MsIHRvSW1hZ2VWYWx1ZSkpCisgICAgaWYgKCFhcmd1bWVudCB8fCAh
cGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIHRvSW1hZ2VWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhID0gYXJncy0+bmV4dCgpOworICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwog
CiAgICAgLy8gU2tpcCBhIGNvbW1hCi0gICAgaWYgKCFpc0NvbW1hKGEpKQorICAgIGlmICghaXND
b21tYShhcmd1bWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhID0gYXJncy0+bmV4
dCgpOworICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogCiAgICAgLy8gVGhlIHRoaXJkIGFy
Z3VtZW50IGlzIHRoZSBjcm9zc2ZhZGUgdmFsdWUuIEl0IGlzIGEgcGVyY2VudGFnZSBvciBhIGZy
YWN0aW9uYWwgbnVtYmVyLgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGVyY2VudGFn
ZTsKLSAgICBpZiAoIWEpCisgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGlmIChhLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSkKLSAgICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNs
YW1wVG88ZG91YmxlPihhLT5mVmFsdWUgLyAxMDAsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7Ci0gICAgZWxzZSBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikKLSAgICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGNsYW1wVG88ZG91YmxlPihhLT5mVmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPihhcmd1bWVudC0+ZlZhbHVlIC8gMTAwLCAwLCAxKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgIGVsc2UgaWYgKGFyZ3VtZW50LT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAgICAgICBwZXJjZW50YWdl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KGFyZ3VtZW50LT5m
VmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgZWxzZQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg4MjgsMTAgKzg4MTQsMTAgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ3Jvc3NmYWRlKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQ
dHI8Q1NTVmFsdWU+JgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VDYW52YXMoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IGNhbnZhcykKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgY2FudmFzKQogewogICAgIC8vIFdhbGsgdGhl
IGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QtPmN1
cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYg
KCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTg4NjAsMTcgKzg4NDYsMTcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUltYWdlUmVzb2x1dGlvbigpCiAgICAgICAgIH0gZWxzZSBpZiAoIWhhdmVTbmFwICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVNuYXApIHsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBo
YXZlU25hcCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWhhdmVSZXNvbHV0aW9uICYmIHZh
bGlkVW5pdCh2YWx1ZSwgRlJlc29sdXRpb24gfCBGTm9uTmVnKSAmJiB2YWx1ZS0+ZlZhbHVlID4g
MCkgewotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZFVu
aXQoKnZhbHVlLCBGUmVzb2x1dGlvbiB8IEZOb25OZWcpICYmIHZhbHVlLT5mVmFsdWUgPiAwKSB7
CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2
YWx1ZSkpOwogICAgICAgICAgICAgaGF2ZVJlc29sdXRpb24gPSB0cnVlOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAgICAgaWYgKCFsaXN0
LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiAhaGF2ZVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CiB9CiAjZW5kaWYKQEAgLTg4NzgsMjkgKzg4NjQsMjkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUltYWdlUmVzb2x1dGlvbigpCiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlSW1hZ2VTZXQoKQogewot
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAg
QVNTRVJUKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbik7CisgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgQVNTRVJU
KHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKTsKIAotICAgIENTU1BhcnNl
clZhbHVlTGlzdCogZnVuY3Rpb25BcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwor
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogZnVuY3Rpb25BcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7CiAgICAgaWYgKCFmdW5jdGlvbkFyZ3MgfHwgIWZ1bmN0aW9uQXJncy0+c2l6ZSgp
IHx8ICFmdW5jdGlvbkFyZ3MtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0
ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZyA9
IGZ1bmN0aW9uQXJncy0+Y3VycmVudCgpOwogICAgIHdoaWxlIChhcmcpIHsKICAgICAgICAgaWYg
KGFyZy0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaW1hZ2VTZXQt
PmFwcGVuZChDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwoYXJnLT5zdHJpbmcpKSk7
CiAgICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWFyZyB8
fCBhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pCi0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGRv
dWJsZSBpbWFnZVNjYWxlRmFjdG9yID0gMDsKICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcg
PSBhcmctPnN0cmluZzsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
OwogICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKICAgICAg
ICAgICAgIGNvbnN0IExDaGFyKiBzdGFydCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwogICAgICAg
ICAgICAgcGFyc2VEb3VibGUoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoLCAneCcsIGltYWdlU2NhbGVG
YWN0b3IpOwpAQCAtODkwOSw3ICs4ODk1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUltYWdlU2V0KCkKICAgICAgICAgICAgIHBhcnNlRG91YmxlKHN0YXJ0LCBzdGFy
dCArIGxlbmd0aCwgJ3gnLCBpbWFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaW1hZ2VTY2FsZUZhY3RvciA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaW1hZ2VTZXQtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShpbWFnZVNjYWxlRmFjdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUikpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3VtZW50cywg
d2UncmUgZG9uZS4KQEAgLTg5MTksNyArODkwNSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VJbWFnZVNldCgpCiAKICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUg
YXJndW1lbnRzLCB0aGV5IHNob3VsZCBiZSBhZnRlciBhIGNvbW1hLgogICAgICAgICBpZiAoIWlz
Q29tbWEoYXJnKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEgYW5kIG1vdmUgb24gdG8gdGhlIG5l
eHQgYXJndW1lbnQuCiAgICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgpOwpAQCAtOTE5
MSwxMyArOTE3NywxMyBAQCBwcml2YXRlOgogUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1Bh
cnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQogewogICAgIGlmICghbV92YWx1ZUxpc3QpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAg
Zm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1
ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBwYXJzZVRyYW5zZm9ybVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IHBhcnNlVHJhbnNm
b3JtVmFsdWUoKnZhbHVlKTsKICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgbGlzdC0+YXBwZW5kKHBhcnNlZFRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgIH0KQEAgLTkyMDUsMjMgKzkxOTEsMjMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENT
U1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybVZhbHVlKENT
U1BhcnNlclZhbHVlICp2YWx1ZSkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVl
LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCAhdmFsdWUtPmZ1bmN0aW9uKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6
RnVuY3Rpb24gfHwgIXZhbHVlLmZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIC8vIEV2ZXJ5IHByaW1pdGl2ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCi0g
ICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgp
OworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwogICAgIGlmICghYXJncykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgLy8gU2VlIGlmIHRoZSBzcGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3
ZSB1bmRlcnN0YW5kLgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbkluZm8gaW5mbyh2YWx1ZS0+ZnVu
Y3Rpb24tPm5hbWUpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbkluZm8gaW5mbyh2YWx1ZS5mdW5j
dGlvbi0+bmFtZSk7CiAgICAgaWYgKGluZm8udW5rbm93bigpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWluZm8uaGFzQ29ycmVjdEFyZ0Nv
dW50KGFyZ3MtPnNpemUoKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwgcHJp
bWl0aXZlcyB0aGF0IHNwZWNpZnkgdHJhbnNmb3JtIG9wZXJhdGlvbnMuCiAgICAgLy8gV2UgY29s
bGVjdCBhIGxpc3Qgb2YgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVzLCB3aGVyZSBlYWNoIHZhbHVl
IHNwZWNpZmllcyBhIHNpbmdsZSBvcGVyYXRpb24uCkBAIC05MjMwLDQxICs5MjE2LDQxIEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJz
ZXJWYWx1ZSAqdmFsdWUpCiAgICAgUmVmUHRyPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiB0cmFu
c2Zvcm1WYWx1ZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUoaW5mby50eXBlKCkp
OwogCiAgICAgLy8gU25hZyBvdXIgdmFsdWVzLgotICAgIENTU1BhcnNlclZhbHVlKiBhID0gYXJn
cy0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJl
bnQoKTsKICAgICB1bnNpZ25lZCBhcmdOdW1iZXIgPSAwOwotICAgIHdoaWxlIChhKSB7CisgICAg
d2hpbGUgKGFyZ3VtZW50KSB7CiAgICAgICAgIENTU1BhcnNlcjo6VW5pdHMgdW5pdCA9IGluZm8u
dW5pdCgpOwogCiAgICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDMpIHsKICAg
ICAgICAgICAgIC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFuIGFuZ2xlIHJhdGhlciB0
aGFuIGEgYmFyZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAgICAgICAgICAgIGlmICgh
dmFsaWRVbml0KGEsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9PSAyKSB7CiAgICAgICAgICAgICAv
LyAzcmQgcGFyYW0gb2YgdHJhbnNsYXRlM2QoKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0gICAg
ICAgICAgICBpZiAoIXZhbGlkVW5pdChhLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVu
dCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewogICAg
ICAgICAgICAgLy8gMXN0IHBhcmFtIG9mIHRyYW5zbGF0ZVooKSBjYW5ub3QgYmUgYSBwZXJjZW50
YWdlCi0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2Rl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0
KCphcmd1bWVudCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1i
ZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiBwZXJzcGVjdGl2ZSgpIG11c3QgYmUg
YSBub24tbmVnYXRpdmUgbnVtYmVyIChkZXByZWNhdGVkKSBvciBsZW5ndGguCi0gICAgICAgICAg
ICBpZiAoIXZhbGlkVW5pdChhLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmlj
dE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgaWYgKCF2
YWxpZFVuaXQoYSwgdW5pdCwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgRk51bWJlciB8IEZMZW5ndGgg
fCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfSBlbHNlIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgdW5pdCwgQ1NTU3Ry
aWN0TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBBZGQg
dGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAgICAgIHRy
YW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKKyAg
ICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
KmFyZ3VtZW50KSk7CiAKLSAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFh
KQorICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVu
dCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoYS0+dW5pdCAhPSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgfHwgYS0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBhID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQg
IT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywnKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwogCi0gICAgICAgIGFyZ051bWJlcisrOworICAgICAgICArK2FyZ051bWJlcjsKICAgICB9
CiAKICAgICByZXR1cm4gdHJhbnNmb3JtVmFsdWUucmVsZWFzZSgpOwpAQCAtOTMwOSwxMCArOTI5
NSw5IEBAIHN0YXRpYyB2b2lkIGZpbHRlckluZm9Gb3JOYW1lKGNvbnN0IENTU1BhcnNlclN0cmlu
ZyYgbmFtZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFdl
YktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50
cyhDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJP
cGVyYXRpb25UeXBlIGZpbHRlclR5cGUpCitQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1ZUxp
c3QmIGFyZ3MsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIGZpbHRl
clR5cGUpCiB7CiAgICAgUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBmaWx0ZXJWYWx1ZSA9
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoZmlsdGVyVHlwZSk7Ci0gICAgQVNTRVJUKGFy
Z3MpOwogCiAgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7ICAgIAogICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKQEAgLTkzMjIsNTEgKzkzMDcs
NTEgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOgogICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOiB7CiAgICAgICAgIC8vIE9uZSBvcHRpb25hbCBh
cmd1bWVudCwgMC0xIG9yIDAlLTEwMCUsIGlmIG1pc3NpbmcgdXNlIDEwMCUuCi0gICAgICAgIGlm
IChhcmdzLT5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChh
cmdzLnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBp
ZiAoYXJncy0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBh
cmdzLT5jdXJyZW50KCk7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICAgICAg
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKmFyZ3MuY3VycmVudCgpOwogICAgICAgICAgICAgaWYg
KCF2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmlj
dE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9
IHZhbHVlLT5mVmFsdWU7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gdmFsdWUuZlZhbHVl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTYXR1cmF0ZSBhbmQgQ29udHJhc3QgYWxs
b3cgdmFsdWVzIG92ZXIgMTAwJS4KICAgICAgICAgICAgIGlmIChmaWx0ZXJUeXBlICE9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbgogICAgICAgICAgICAgICAg
ICYmIGZpbHRlclR5cGUgIT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3Bl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIG1heEFsbG93ZWQgPSB2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6IDEuMDsKKyAg
ICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dlZCA9IHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMTAwLjAgOiAxLjA7CiAgICAgICAgICAgICAgICAg
aWYgKGFtb3VudCA+IG1heEFsbG93ZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShh
bW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51
bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXM+KHZhbHVlLnVuaXQpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246IHsK
ICAgICAgICAgLy8gT25lIG9wdGlvbmFsIGFyZ3VtZW50LCBpZiBtaXNzaW5nIHVzZSAxMDAlLgot
ICAgICAgICBpZiAoYXJncy0+c2l6ZSgpID4gMSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICAgICAgaWYgKGFyZ3MtPnNpemUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICphcmdzLmN1cnJlbnQoKTsKICAgICAg
ICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmlj
dE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS5mVmFsdWUsIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjogewogICAgICAgICAvLyBodWUtcm90YXRlKCkgdGFr
ZXMgb25lIG9wdGlvbmFsIGFuZ2xlLgotICAgICAgICBpZiAoYXJncy0+c2l6ZSgpID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAotICAgICAgICBpZiAoYXJncy0+c2l6ZSgp
KSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50
KCk7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICAgICAgQ1NTUGFyc2VyVmFs
dWUmIGFyZ3VtZW50ID0gKmFyZ3MuY3VycmVudCgpOwogICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnQpKTsKICAgICAgICAgfQpAQCAtOTM3NCwxMyArOTM1OSwxMyBAQCBQYXNzUmVmUHRyPFdl
YktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50
cyhDU1NQYXJzZQogICAgIH0KICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmls
dGVyT3BlcmF0aW9uOiB7CiAgICAgICAgIC8vIEJsdXIgdGFrZXMgYSBzaW5nbGUgbGVuZ3RoLiBa
ZXJvIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQuCi0gICAgICAgIGlmIChhcmdzLT5zaXplKCkgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCi0gICAgICAgIGlmIChhcmdzLT5z
aXplKCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1
cnJlbnQoKTsKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSYgYXJndW1lbnQgPSAqYXJncy5jdXJyZW50KCk7CiAgICAgICAgICAgICBpZiAoIXZh
bGlkVW5pdChhcmd1bWVudCwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShhcmd1bWVudCkpOwogICAgICAgICB9CkBAIC05MzkwLDcgKzkzNzUsNyBAQCBQYXNzUmVm
UHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFy
Z3VtZW50cyhDU1NQYXJzZQogICAgICAgICAvLyBkcm9wLXNoYWRvdygpIHRha2VzIGEgc2luZ2xl
IHNoYWRvdy4KICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2hhZG93VmFsdWVMaXN0ID0g
cGFyc2VTaGFkb3coYXJncywgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIpOwogICAgICAgICBpZiAo
IXNoYWRvd1ZhbHVlTGlzdCB8fCBzaGFkb3dWYWx1ZUxpc3QtPmxlbmd0aCgpICE9IDEpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAK
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZCgqc2hhZG93VmFsdWVMaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgYnJlYWs7CkBAIC05NDAxLDE0ICs5Mzg2LDExIEBA
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGlu
RmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgcmV0dXJuIGZpbHRlclZhbHVlLnJlbGVhc2Uo
KTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsdGVyKENTU1BhcnNlclZhbHVlTGlzdCog
dmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCitib29sIENTU1BhcnNlcjo6cGFy
c2VGaWx0ZXIoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IHJlc3VsdCkKIHsKLSAgICBpZiAoIXZhbHVlTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgLy8gVGhlIGZpbHRlciBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25hbCBwcmltaXRpdmVzIHRo
YXQgc3BlY2lmeSBpbmRpdmlkdWFsIG9wZXJhdGlvbnMuCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBmb3Ig
KGF1dG8gdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gdmFsdWVM
aXN0LT5uZXh0KCkpIHsKKyAgICBmb3IgKGF1dG8gdmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgp
OyB2YWx1ZTsgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSAmJiAodmFsdWUtPnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1ZS0+ZnVuY3Rpb24pKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC05NDMyLDcgKzk0MTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VGaWx0ZXIoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IHJlcwogICAgICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAgUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBmaWx0ZXJWYWx1
ZSA9IHBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhhcmdzLCBmaWx0ZXJUeXBlKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWUgPSBwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMoKmFyZ3MsIGZpbHRlclR5cGUpOwogICAgICAgICAgICAgaWYg
KCFmaWx0ZXJWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAKQEAgLTk1NTAsMjAgKzk1MzIsMjAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3Jt
T3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQKICAgICAg
ICAgICAgIC8vIHBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kIGFkdmFuY2VzIHRoZSBtX3Zh
bHVlTGlzdCBwb2ludGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblg6IHsKLSAgICAgICAgICAgIHZhbHVlID0gcGFyc2VG
aWxsUG9zaXRpb25YKG1fdmFsdWVMaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZhbHVlID0gcGFy
c2VGaWxsUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7CiAgICAgICAgICAgICBpZiAodmFsdWUpCiAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5Z
OiB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsbFBvc2l0aW9uWShtX3ZhbHVlTGlzdC5n
ZXQoKSk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsbFBvc2l0aW9uWSgqbV92YWx1ZUxp
c3QpOwogICAgICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWjogewotICAgICAgICAgICAgaWYgKHZhbGlk
VW5pdChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIEZM
ZW5ndGgpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSkKICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC05NTg5LDE2ICs5NTcxLDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBlcnNwZWN0aXZlT3Jp
Z2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wCiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjoKICAgICAgICAgICAgIGlmICht
X3ZhbHVlTGlzdC0+c2l6ZSgpID4gMikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24obV92YWx1ZUxpc3QuZ2V0KCksIHZh
bHVlLCB2YWx1ZTIpOworICAgICAgICAgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCptX3Zh
bHVlTGlzdCwgdmFsdWUsIHZhbHVlMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWDogewotICAgICAgICAgICAgdmFs
dWUgPSBwYXJzZUZpbGxQb3NpdGlvblgobV92YWx1ZUxpc3QuZ2V0KCkpOworICAgICAgICAgICAg
dmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKICAgICAgICAgICAgIGlm
ICh2YWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNw
ZWN0aXZlT3JpZ2luWTogewotICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlvblko
bV92YWx1ZUxpc3QuZ2V0KCkpOworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZpbGxQb3NpdGlv
blkoKm1fdmFsdWVMaXN0KTsKICAgICAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05Njg3LDE1ICs5
NjY5LDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRVbmRlcmxpbmVQb3NpdGlvbihib29s
IGltcG9ydGFudCkKICAgICAvLyBUaGUgdGV4dC11bmRlcmxpbmUtcG9zaXRpb24gcHJvcGVydHkg
aGFzIHNpbnRheCAiYXV0byB8IGFscGhhYmV0aWMgfCBbIHVuZGVyIHx8IFsgbGVmdCB8IHJpZ2h0
IF0gXSIuCiAgICAgLy8gSG93ZXZlciwgdmFsdWVzICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90
IGltcGxlbWVudGVkIHlldCwgc28gd2Ugd2lsbCBwYXJzZSBzaW50YXgKICAgICAvLyAiYXV0byB8
IGFscGhhYmV0aWMgfCB1bmRlciIgZm9yIG5vdy4KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7CisgICAg
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgc3dp
dGNoICh2YWx1ZS5pZCkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgogICAgIGNhc2UgQ1NTVmFs
dWVBbHBoYWJldGljOgogICAgIGNhc2UgQ1NTVmFsdWVVbmRlcjoKICAgICAgICAgaWYgKG1fdmFs
dWVMaXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRVbmRlcmxpbmVQb3NpdGlvbiwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSwgaW1wb3J0YW50
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBA
IC05NzE0LDcgKzk2OTYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHls
ZShib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKSB7CiAgICAgICAgICAgICBpZiAoZmlsbCB8fCBzaGFwZSB8fCAo
dmFsdWVMaXN0U2l6ZSAhPSAxICYmICFpblNob3J0aGFuZCgpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRFbXBoYXNpc1N0eWxlLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSksIGltcG9y
dGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBo
YXNpc1N0eWxlLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpLCBpbXBvcnRhbnQp
OwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC05ODE5LDggKzk4MDEsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCiAKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAg
ICBpZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFnZSAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpKTsKKyAgICAgICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2Ug
JiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpKTsKICAgICAg
ICAgICAgIGhhc0xlbmd0aE9yUGVyY2VudGFnZSA9IHRydWU7CiAgICAgICAgIH0KICNpZiBFTkFC
TEUoQ1NTM19URVhUKQpAQCAtOTgzMywxMyArOTgxNSwxMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCiAgICAgICAgIH0KICNlbmRpZgogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAKICAgICBp
ZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFnZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQpAQCAtOTg4OCw3
ICs5ODcwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZUJveENvbnRhaW4oYm9vbCBpbXBv
cnRhbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
ZWF0dXJlVGFnKENTU1ZhbHVlTGlzdCogc2V0dGluZ3MpCitib29sIENTU1BhcnNlcjo6cGFyc2VG
b250RmVhdHVyZVRhZyhDU1NWYWx1ZUxpc3QmIHNldHRpbmdzKQogewogICAgIC8vIEZlYXR1cmUg
dGFnIG5hbWUgY29uc2lzdHMgb2YgNC1sZXR0ZXIgY2hhcmFjdGVycy4KICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdGFnTmFtZUxlbmd0aCA9IDQ7CkBAIC05OTIxLDcgKzk5MDMsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VGb250RmVhdHVyZVRhZyhDU1NWYWx1ZUxpc3QqIHNldHRpbmdzKQog
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBz
ZXR0aW5ncy0+YXBwZW5kKENTU0ZvbnRGZWF0dXJlVmFsdWU6OmNyZWF0ZSh0YWcsIHRhZ1ZhbHVl
KSk7CisgICAgc2V0dGluZ3MuYXBwZW5kKENTU0ZvbnRGZWF0dXJlVmFsdWU6OmNyZWF0ZSh0YWcs
IHRhZ1ZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk5MzYsNyArOTkxOCw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQp
CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzZXR0aW5ncyA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkp
IHsKLSAgICAgICAgaWYgKCFwYXJzZUZvbnRGZWF0dXJlVGFnKHNldHRpbmdzLmdldCgpKSkKKyAg
ICAgICAgaWYgKCFwYXJzZUZvbnRGZWF0dXJlVGFnKCpzZXR0aW5ncykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXNuJ3QgcGFyc2VkIGZ1bGx5
LCB0aGUgY3VycmVudCB2YWx1ZSBzaG91bGQgYmUgY29tbWEuCkBAIC05OTk2LDE2ICs5OTc4LDE2
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0
YW50KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDYWxjdWxh
dGlvbihDU1NQYXJzZXJWYWx1ZSogdmFsdWUsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5n
ZSByYW5nZSkgCitib29sIENTU1BhcnNlcjo6cGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSByYW5nZSkKIHsKICAgICBB
U1NFUlQoaXNDYWxjdWxhdGlvbih2YWx1ZSkpOwogICAgIAotICAgIENTU1BhcnNlclZhbHVlTGlz
dCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3Mg
fHwgIWFyZ3MtPnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKCFt
X3BhcnNlZENhbGN1bGF0aW9uKTsKLSAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gQ1NTQ2FsY1Zh
bHVlOjpjcmVhdGUodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAqYXJncywgcmFuZ2UpOworICAgIG1f
cGFyc2VkQ2FsY3VsYXRpb24gPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mdW5jdGlvbi0+
bmFtZSwgKmFyZ3MsIHJhbmdlKTsKICAgICAKICAgICBpZiAoIW1fcGFyc2VkQ2FsY3VsYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMjQxLDcgKzEwMjIzLDcgQEAgc3RhdGljIENo
YXJhY3RlclR5cGUqIGNoZWNrQW5kU2tpcEVzY2FwZShDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hh
cmFjdGVyKQogCiAgICAgKytjdXJyZW50Q2hhcmFjdGVyOwogICAgIGlmICghaXNDU1NFc2NhcGUo
KmN1cnJlbnRDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSkgewog
ICAgICAgICBpbnQgbGVuZ3RoID0gNjsKQEAgLTEwMzQ0LDcgKzEwMzI2LDcgQEAgc3RhdGljIGlu
bGluZSBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNraXBTdHJpbmcoQ2hhcmFjdGVyVHlwZSogY3Vy
cmVudENoYXJhY3RlciwKICAgICAgICAgfQogICAgICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRD
aGFyYWN0ZXIgPD0gJ1xyJyAmJiAoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gJ1xuJyB8fCAoKmN1cnJl
bnRDaGFyYWN0ZXIgfCAweDEpID09ICdccicpKSkgewogICAgICAgICAgICAgLy8gU3RyaW5nIHBh
cnNpbmcgaXMgZmFpbGVkIGZvciBjaGFyYWN0ZXIgJ1xuJywgJ1xmJyBvciAnXHInLgotICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChMSUtFTFkoY3VycmVudENoYXJhY3RlclswXSAhPSAnXFwnKSkKQEAgLTEw
MzU2LDcgKzEwMzM4LDcgQEAgc3RhdGljIGlubGluZSBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNr
aXBTdHJpbmcoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlciwKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gY2hlY2tBbmRTa2lwRXNjYXBlKGN1cnJl
bnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhcmFjdGVyKQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMTA0NDksNyArMTA0MzEsNyBAQCBpbmxpbmUgdm9pZCBDU1NQ
YXJzZXI6OnBhcnNlSWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiYgcmVzdWx0LCBDU1NQYXJzZXJT
dHJpbmcmCiAgICAgICAgIFVDaGFyKiYgcmVzdWx0MTYgPSBjdXJyZW50Q2hhcmFjdGVyMTYoKTsK
ICAgICAgICAgVUNoYXIqIHN0YXJ0MTYgPSByZXN1bHQxNjsKICAgICAgICAgaW50IGkgPSAwOwot
ICAgICAgICBmb3IgKDsgaSA8IHJlc3VsdCAtIHN0YXJ0OyBpKyspCisgICAgICAgIGZvciAoOyBp
IDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkKICAgICAgICAgICAgIHJlc3VsdDE2W2ldID0gc3RhcnRb
aV07CiAKICAgICAgICAgcmVzdWx0MTYgKz0gaTsKQEAgLTEwNTExLDcgKzEwNDkzLDcgQEAgaW5s
aW5lIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVN0cmluZyhDaGFyYWN0ZXJUeXBlKiYgcmVzdWx0LCBD
U1NQYXJzZXJTdHJpbmcmIHJlc3UKICAgICAgICAgVUNoYXIqJiByZXN1bHQxNiA9IGN1cnJlbnRD
aGFyYWN0ZXIxNigpOwogICAgICAgICBVQ2hhciogc3RhcnQxNiA9IHJlc3VsdDE2OwogICAgICAg
ICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgcmVzdWx0IC0gc3RhcnQ7IGkrKykKKyAg
ICAgICAgZm9yICg7IGkgPCByZXN1bHQgLSBzdGFydDsgKytpKQogICAgICAgICAgICAgcmVzdWx0
MTZbaV0gPSBzdGFydFtpXTsKIAogICAgICAgICByZXN1bHQxNiArPSBpOwpAQCAtMTE1NzksNyAr
MTE1NjEsNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlSW1w
b3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVybAogewogICAgIGlmICghbWVkaWEgfHwg
IW1fYWxsb3dJbXBvcnRSdWxlcykgewogICAgICAgICBwb3BSdWxlRGF0YSgpOwotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIFJlZlB0cjxTdHls
ZVJ1bGVJbXBvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1cmwsIG1lZGlhKTsK
ICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CkBAIC0xMTY4
NSw3ICsxMTY2Nyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFBh
c3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGUpCiBQYXNzUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKCkKIHsKICAgICBpZiAoIW1fcnVsZVNvdXJj
ZURhdGFSZXN1bHQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKICAgICBt
X2N1cnJlbnRSdWxlRGF0YS5jbGVhcigpOwpAQCAtMTE3NzMsNyArMTE3NTUsNyBAQCBQYXNzUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAg
ICAgICAgIC8vIFNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWZvbnRzLyNmb250LWZh
bWlseS1kZXNjCiAgICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIHBv
cFJ1bGVEYXRhKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4g
cnVsZSA9IFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkp
OwpAQCAtMTE4OTAsNyArMTE4NzIsNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6Y3JlYXRlUmVnaW9uUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTUwogewogICAg
IGlmICghY3NzUmVnaW9uc0VuYWJsZWQoKSB8fCAhcmVnaW9uU2VsZWN0b3IgfHwgIXJ1bGVzKSB7
CiAgICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFt
ZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CkBAIC0xMTk0Nyw3ICsxMTkyOSw3IEBAIFBhc3NS
ZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJW
YWx1ZUxpc3QmIGtleXMpCiAgICAgICAgIC8vIG1hcmtlZCBhcyBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VOS05PV04gZHVyaW5nIHBhcnNpbmcuCiAgICAgICAgIGlmIChrZXlzLnZhbHVlQXQoaSkt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKSB7CiAgICAgICAgICAgICBj
bGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoa2V5cy52YWx1ZUF0KGkp
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKQEAgLTExOTU3LDcgKzEx
OTM5LDcgQEAgUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZy
YW1lKENTU1BhcnNlclZhbHVlTGlzdCYga2V5cykKICAgICAgICAgICAgIC8vICJJZiBhIGtleWZy
YW1lIHNlbGVjdG9yIHNwZWNpZmllcyBuZWdhdGl2ZSBwZXJjZW50YWdlIHZhbHVlcwogICAgICAg
ICAgICAgLy8gb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDEwMCUsIHRoZW4gdGhlIGtleWZyYW1lIHdp
bGwgYmUgaWdub3JlZC4iCiAgICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGkgIT0gMCkKICAgICAgICAgICAgIGtleVN0cmluZy5hcHBlbmQoJywnKTsKQEAg
LTEyMjA3LDcgKzEyMTg5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVEZXZpY2VXaWR0aCB8fCBpZCA9PSBDU1NW
YWx1ZURldmljZUhlaWdodCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRo
OiAvLyBzaG9ydGhhbmQKICAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRTaG9ydGhhbmQocHJv
cElkLCBDU1NQcm9wZXJ0eU1pbldpZHRoLCBDU1NQcm9wZXJ0eU1heFdpZHRoLCBpbXBvcnRhbnQp
OwpAQCAtMTIyMTksNyArMTIyMDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGUGVy
Y2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVVz
ZXJab29tOiAvLyB6b29tIHwgZml4ZWQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlWm9vbSB8
fCBpZCA9PSBDU1NWYWx1ZUZpeGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDU4YzY1MWJh
OGI0ZGI4ODE1NjkxNTJkMDJiYTQ2ZWY0Y2NjYzYyMzAuLjBlMjc0NDk0MTZlNWI3YzdjZGEyMDc5
NGY2NzlkMmM3MzA3MDI4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTg0LDcgKzg0LDcg
QEAgcHVibGljOgogCiAgICAgfkNTU1BhcnNlcigpOwogCi0gICAgdm9pZCBwYXJzZVNoZWV0KFN0
eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAw
LCBSdWxlU291cmNlRGF0YUxpc3QqID0gMCwgYm9vbCA9IGZhbHNlKTsKKyAgICB2b2lkIHBhcnNl
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51
bWJlciA9IDAsIFJ1bGVTb3VyY2VEYXRhTGlzdCogPSBudWxscHRyLCBib29sID0gZmFsc2UpOwog
ICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKFN0eWxlU2hlZXRDb250ZW50
cyosIGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gcGFyc2VL
ZXlmcmFtZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7CiAgICAgYm9v
bCBwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYpOwpAQCAtOTIsNyArOTIsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25z
dCBTdHJpbmcmLCBib29sIHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5
c3RlbUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3Qg
QXRvbWljU3RyaW5nJik7Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VW
YWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50LCBDU1NQYXJzZXJWYWx1ZSopOworICAgIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJ
RCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUmKTsKICAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0
YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBz
dGF0aWMgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVE
ZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKQEAgLTExMywyMiAr
MTEzLDIyIEBAIHB1YmxpYzoKICAgICBib29sIHBhcnNlUXVvdGVzKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKICAgICBib29sIHBhcnNlQWx0KENTU1Byb3BlcnR5SUQsIGJvb2wgaW1w
b3J0YW50KTsKICAgICAKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUF0dHIoQ1NTUGFy
c2VyVmFsdWVMaXN0KiBhcmdzKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUF0dHIo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKTsKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlQmFja2dyb3VuZENvbG9yKCk7CiAKLSAgICBib29sIHBhcnNlRmlsbEltYWdlKENTU1BhcnNl
clZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mKTsKKyAgICBib29sIHBhcnNlRmlsbEltYWdl
KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIAogICAgIGVudW0gRmls
bFBvc2l0aW9uRmxhZyB7IEludmFsaWRGaWxsUG9zaXRpb24gPSAwLCBBbWJpZ3VvdXNGaWxsUG9z
aXRpb24gPSAxLCBYRmlsbFBvc2l0aW9uID0gMiwgWUZpbGxQb3NpdGlvbiA9IDQgfTsKICAgICBl
bnVtIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlIHsgUmVzb2x2ZVZhbHVlc0FzUGVyY2VudCA9IDAs
IFJlc29sdmVWYWx1ZXNBc0tleXdvcmQgPSAxIH07Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsdWVMaXN0Kiwg
dW5zaWduZWQmIGN1bXVsYXRpdmVGbGFncywgRmlsbFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZs
YWcsIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlID0gUmVzb2x2ZVZhbHVlc0FzUGVyY2VudCk7Ci0g
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25YKENTU1BhcnNlclZhbHVl
TGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRmlsbFBvc2l0aW9uWShDU1NQ
YXJzZXJWYWx1ZUxpc3QqKTsKLSAgICB2b2lkIHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQ
YXJzZXJWYWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwot
ICAgIGJvb2wgaXNQb3RlbnRpYWxQb3NpdGlvblZhbHVlKENTU1BhcnNlclZhbHVlKik7Ci0gICAg
dm9pZCBwYXJzZUZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFs
dWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIHZvaWQgcGFyc2UzVmFsdWVzRmlsbFBvc2l0
aW9uKENTU1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFs
dWU+JiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4sIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+KTsKLSAgICB2b2lkIHBhcnNlNFZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJW
YWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYsIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPik7Cisg
ICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25Db21wb25l
bnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgdW5zaWduZWQmIGN1bXVsYXRpdmVGbGFncywgRmlsbFBv
c2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlID0gUmVz
b2x2ZVZhbHVlc0FzUGVyY2VudCk7CisgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGaWxs
UG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHBhcnNlRmlsbFBvc2l0aW9uWShDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKKyAgICB2b2lkIHBhcnNl
MlZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+
JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIGJvb2wgaXNQb3RlbnRpYWxQb3NpdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlJik7CisgICAgdm9pZCBwYXJzZUZpbGxQb3NpdGlvbihDU1NQYXJzZXJW
YWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIHZv
aWQgcGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxD
U1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4sIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KTsKKyAgICB2b2lkIHBhcnNlNFZhbHVl
c0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVm
UHRyPENTU1ZhbHVlPiYsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+LCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPik7CiAKICAgICB2b2lkIHBhcnNlRmlsbFJlcGVhdChSZWZQdHI8
Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgYm9vbCAmYWxsb3dDb21tYSk7CkBAIC0xNTAs
NyArMTUwLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oKTsKIAogICAgIGJvb2wgcGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9y
dGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFs
dWU+Jik7Ci0gICAgYm9vbCBwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQ
YXJzZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3VsdCk7CisgICAgYm9vbCBwYXJzZUN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGRv
dWJsZSYgcmVzdWx0KTsKICAgICBib29sIHBhcnNlQW5pbWF0aW9uUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYsIEFuaW1hdGlvblBhcnNlQ29udGV4dCYpOwogICAgIGJv
b2wgcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50
KTsKICAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQsIGJvb2wg
aW1wb3J0YW50KTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VHcmlkVHJhY2tMaXN0KCk7CiAgICAgYm9vbCBwYXJzZUdyaWRUcmFja1Jl
cGVhdEZ1bmN0aW9uKENTU1ZhbHVlTGlzdCYpOwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlR3JpZFRyYWNrU2l6ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdCk7Ci0gICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1
ZSopOworICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JpZEJyZWFkdGgo
Q1NTUGFyc2VyVmFsdWUmKTsKICAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFt
ZWRHcmlkQXJlYU1hcCYsIGNvbnN0IHVuc2lnbmVkLCB1bnNpZ25lZCYpOwogICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXMoKTsKICAgICBib29sIHBhcnNlR3Jp
ZExpbmVOYW1lcyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBDU1NWYWx1ZUxpc3QmLCBDU1NHcmlkTGlu
ZU5hbWVzVmFsdWUqID0gbnVsbHB0cik7CkBAIC0xODUsMjYgKzE4NSwyMiBAQCBwdWJsaWM6CiAK
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9w
ZXJ0eUlEIHByb3BJZCk7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VC
YXNpY1NoYXBlKCk7Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VTaGFw
ZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4g
cGFyc2VCYXNpY1NoYXBlUmVjdGFuZ2xlKENTU1BhcnNlclZhbHVlTGlzdCopOwotICAgIFBhc3NS
ZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVl
TGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VEZXByZWNhdGVkQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPENTU0Jh
c2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0Kik7Ci0g
ICAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZURlcHJlY2F0ZWRCYXNpY1NoYXBlRWxs
aXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+
IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1Jl
ZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNT
aGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCopOworICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBQYXNzUmVm
UHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxp
c3QmKTsKKyAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZUVsbGlw
c2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBw
YXJzZUJhc2ljU2hhcGVQb2x5Z29uKENTU1BhcnNlclZhbHVlTGlzdCYpOworICAgIFBhc3NSZWZQ
dHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0
Jik7CiAKICAgICBib29sIHBhcnNlRm9udChib29sIGltcG9ydGFudCk7CiAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhbWlseSgpOwogCiAgICAgYm9vbCBwYXJzZUNvdW50
ZXIoQ1NTUHJvcGVydHlJRCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpOwotICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVM
aXN0KiBhcmdzLCBib29sIGNvdW50ZXJzKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgYm9vbCBjb3VudGVycyk7
CiAKLSAgICBib29sIHBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlKiwgaW50KiBj
b2xvclZhbHVlcywgYm9vbCBwYXJzZUFscGhhKTsKLSAgICBib29sIHBhcnNlSFNMUGFyYW1ldGVy
cyhDU1NQYXJzZXJWYWx1ZSosIGRvdWJsZSogY29sb3JWYWx1ZXMsIGJvb2wgcGFyc2VBbHBoYSk7
Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb2xvcihDU1NQYXJzZXJW
YWx1ZSogPSAwKTsKLSAgICBib29sIHBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUq
LCBSR0JBMzImKTsKKyAgICBib29sIHBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVl
JiwgaW50KiBjb2xvclZhbHVlcywgYm9vbCBwYXJzZUFscGhhKTsKKyAgICBib29sIHBhcnNlSFNM
UGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYsIGRvdWJsZSogY29sb3JWYWx1ZXMsIGJvb2wgcGFy
c2VBbHBoYSk7CisgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb2xvcihD
U1NQYXJzZXJWYWx1ZSogPSBudWxscHRyKTsKKyAgICBib29sIHBhcnNlQ29sb3JGcm9tVmFsdWUo
Q1NTUGFyc2VyVmFsdWUmLCBSR0JBMzImKTsKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiwgQ1NTU2VsZWN0b3JMaXN0Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlPgpAQCAtMjI0LDcgKzIyMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZVBhaW50T3JkZXIoKTsKIAogICAgIC8vIENTUzMgUGFyc2luZyBSb3V0aW5lcyAo
Zm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gcGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0KiwgQ1NTUHJvcGVydHlJRCk7Cisg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlU2hhZG93KENTU1BhcnNlclZhbHVlTGlz
dCYsIENTU1Byb3BlcnR5SUQpOwogICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZShDU1NQcm9wZXJ0
eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgYm9v
bCBwYXJzZUJvcmRlckltYWdlUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICBib29sIHBh
cnNlQm9yZGVySW1hZ2VTbGljZShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlPiYpOwpAQCAtMjM2LDE5ICsyMzIsMTkgQEAgcHVibGljOgogCiAgICAgYm9vbCBw
YXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgYm9vbCBw
YXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBib29sIGltcG9ydGFudCk7CisgICAg
Ym9vbCBwYXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCk7
CiAKICAgICAvLyBJbWFnZSBnZW5lcmF0b3JzCi0gICAgYm9vbCBwYXJzZUNhbnZhcyhDU1NQYXJz
ZXJWYWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgYm9vbCBwYXJzZUNhbnZhcyhD
U1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAKLSAgICBib29sIHBhcnNl
RGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4m
KTsKLSAgICBib29sIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVl
TGlzdCosIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwot
ICAgIGJvb2wgcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0
KiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZyk7Ci0gICAg
Ym9vbCBwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxDU1NW
YWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwotICAgIGJvb2wgcGFyc2VSYWRp
YWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+JiwgQ1NTR3Jh
ZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNlR3JhZGllbnRDb2xvclN0b3Bz
KENTU1BhcnNlclZhbHVlTGlzdCosIENTU0dyYWRpZW50VmFsdWUqLCBib29sIGV4cGVjdENvbW1h
KTsKKyAgICBib29sIHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYs
IFJlZlB0cjxDU1NWYWx1ZT4mKTsKKyAgICBib29sIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJl
cGVhdCByZXBlYXRpbmcpOworICAgIGJvb2wgcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQo
Q1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0
IHJlcGVhdGluZyk7CisgICAgYm9vbCBwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVl
TGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwor
ICAgIGJvb2wgcGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8
Q1NTVmFsdWU+JiwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKKyAgICBib29sIHBhcnNl
R3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYsIENTU0dyYWRpZW50VmFsdWUm
LCBib29sIGV4cGVjdENvbW1hKTsKIAotICAgIGJvb2wgcGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2Vy
VmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIGJvb2wgcGFyc2VDcm9zc2ZhZGUo
Q1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogCiAjaWYgRU5BQkxFKENT
U19JTUFHRV9SRVNPTFVUSU9OKQogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlSW1hZ2VS
ZXNvbHV0aW9uKCk7CkBAIC0yNTgsMTAgKzI1NCwxMCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VJbWFnZVNldCgpOwogI2VuZGlmCiAKLSAgICBib29sIHBhcnNlRmls
dGVySW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIGJv
b2wgcGFyc2VGaWx0ZXJJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+
Jik7CiAKLSAgICBib29sIHBhcnNlRmlsdGVyKENTU1BhcnNlclZhbHVlTGlzdCosIFJlZlB0cjxD
U1NWYWx1ZT4mKTsKLSAgICBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2VyVmFsdWVMaXN0KiwgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkZpbHRlck9wZXJhdGlvblR5cGUpOworICAgIGJvb2wgcGFyc2VGaWx0ZXIoQ1NTUGFy
c2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIFBhc3NSZWZQdHI8V2ViS2l0
Q1NTRmlsdGVyVmFsdWU+IHBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSk7CiAKICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNsaXBQYXRoKCk7CiAKQEAgLTI2OSw3ICsyNjUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNDb21wb3NpdGVPcGVyYXRvcihDU1NWYWx1
ZUlEKTsKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZVRyYW5zZm9ybSgpOwot
ICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoQ1NTUGFyc2VyVmFs
dWUqKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKENTU1Bh
cnNlclZhbHVlJik7CiAgICAgYm9vbCBwYXJzZVRyYW5zZm9ybU9yaWdpbihDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMiwg
Q1NTUHJvcGVydHlJRCYgcHJvcElkMywgUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1
ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgYm9vbCBwYXJzZVBlcnNwZWN0aXZlT3JpZ2lu
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0
eUlEJiBwcm9wSWQyLCAgUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKIApA
QCAtMjg0LDkgKzI4MCw5IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZVRleHRJbmRlbnQoKTsKICAgICAKICAgICBib29sIHBhcnNlTGluZUJveENvbnRhaW4oYm9vbCBp
bXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSosIENh
bGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CisgICAgYm9vbCBwYXJzZUNhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKIAotICAg
IGJvb2wgcGFyc2VGb250RmVhdHVyZVRhZyhDU1NWYWx1ZUxpc3QqKTsKKyAgICBib29sIHBhcnNl
Rm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7CiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJl
U2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOwogCiAgICAgYm9vbCBjc3NSZWdpb25zRW5hYmxlZCgp
IGNvbnN0OwpAQCAtNDA2LDEzICs0MDIsMTMgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gY3JlYXRlVmlld3BvcnRSdWxlKCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJW
YWx1ZSopOwotICAgIFBhc3NSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZVN0
cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVlKik7CisgICAgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlJik7CisgICAgUGFz
c1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFy
c2VyVmFsdWUmKTsKIAogICAgIHN0YXRpYyBVUkwgY29tcGxldGVVUkwoY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIExvY2F0aW9uIGN1cnJlbnRMb2Nh
dGlvbigpOwotICAgIHN0YXRpYyBib29sIGlzQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUqKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJik7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBpczhCaXRTb3VyY2UoKSB7IHJldHVybiBtX2lzOEJpdFNvdXJjZTsgfQpA
QCAtNTAwLDE4ICs0OTYsMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldHVwUGFyc2VyKGNvbnN0
IGNoYXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBjaGFyKiBzdWZmaXgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCk7CiAgICAgYm9vbCBpblNob3J0
aGFuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYXJzZVNob3J0aGFuZDsgfQogCi0gICAgYm9vbCB2
YWxpZFdpZHRoKENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCB2YWxpZEhlaWdodChDU1NQYXJz
ZXJWYWx1ZSopOworICAgIGJvb2wgdmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSYpOworICAgIGJv
b2wgdmFsaWRIZWlnaHQoQ1NTUGFyc2VyVmFsdWUmKTsKIAogICAgIHZvaWQgZGVsZXRlRm9udEZh
Y2VPbmx5VmFsdWVzKCk7CiAKLSAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJz
ZXJWYWx1ZSopIGNvbnN0OwotICAgIGJvb2wgcGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJW
YWx1ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgYm9vbCBpc0dlbmVyYXRlZEltYWdl
VmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKKyAgICBib29sIHBhcnNlR2VuZXJhdGVkSW1h
Z2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogCiAgICAgYm9vbCBw
YXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmLCBib29sIGltcG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVT
aGVldCk7CiAgICAgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlRGVjbGFy
YXRpb24oY29uc3QgU3RyaW5nJiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVl
dCk7CiAKLSAgICBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlSW5zZXRSb3VuZGVkQ29y
bmVycyhQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4sIENTU1BhcnNlclZhbHVlTGlzdCop
OworICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VJbnNldFJvdW5kZWRDb3JuZXJz
KFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiwgQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAK
ICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgTm9uZSwKQEAgLTUyMyw3ICs1
MTksNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwYXJzZVBhZ2UoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICBib29sIHBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIFNpemVQYXJhbWV0ZXJUeXBlIHBhcnNlU2l6ZVBh
cmFtZXRlcihDU1NWYWx1ZUxpc3QqIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
LCBTaXplUGFyYW1ldGVyVHlwZSBwcmV2UGFyYW1UeXBlKTsKKyAgICBTaXplUGFyYW1ldGVyVHlw
ZSBwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBwYXJzZWRWYWx1ZXMsIENTU1BhcnNl
clZhbHVlJiwgU2l6ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSk7CiAKICNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQogICAgIGJvb2wgcGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwpAQCAtNTMxLDggKzUyNyw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBwYXJzZVNjcm9sbFNuYXBDb29yZGluYXRlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCk7CiAjZW5kaWYKIAotICAgIGJvb2wgcGFyc2VGb250RmFj
ZVNyY1VSSShDU1NWYWx1ZUxpc3QqKTsKLSAgICBib29sIHBhcnNlRm9udEZhY2VTcmNMb2NhbChD
U1NWYWx1ZUxpc3QqKTsKKyAgICBib29sIHBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0
Jik7CisgICAgYm9vbCBwYXJzZUZvbnRGYWNlU3JjTG9jYWwoQ1NTVmFsdWVMaXN0Jik7CiAKICAg
ICBib29sIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJik7CiAKQEAgLTYxNSwxMiArNjExLDEyIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc0xvZ2dpbmdFcnJvcnMoKTsKICAgICB2b2lkIGxvZ0Vycm9y
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIpOwogCi0gICAgYm9vbCB2YWxp
ZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSosIFVuaXRzLCBSZWxlYXNlUGFyc2VkQ2Fs
Y1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVl
KTsKKyAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiwgVW5pdHMs
IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWUpOwogCi0gICAgYm9vbCBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVl
cyhDU1NQYXJzZXJWYWx1ZSosIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKKyAgICBib29sIHNob3Vs
ZEFjY2VwdFVuaXRMZXNzVmFsdWVzKENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1v
ZGUpOwogCi0gICAgaW5saW5lIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiB2YWx1ZSwg
VW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VD
YWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSB7IHJldHVybiB2YWxpZFVuaXQodmFs
dWUsIHVuaXRmbGFncywgbV9jb250ZXh0Lm1vZGUsIHJlbGVhc2VDYWxjKTsgfQotICAgIGJvb2wg
dmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiwgVW5pdHMsIENTU1BhcnNlck1vZGUsIFJlbGVhc2VQ
YXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRD
YWxjVmFsdWUpOworICAgIGlubGluZSBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIFVuaXRzIHVuaXRmbGFncywgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxl
YXNlQ2FsYyA9IERvTm90UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkgeyByZXR1cm4gdmFsaWRVbml0
KHZhbHVlLCB1bml0ZmxhZ3MsIG1fY29udGV4dC5tb2RlLCByZWxlYXNlQ2FsYyk7IH0KKyAgICBi
b29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlLCBSZWxl
YXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFy
c2VkQ2FsY1ZhbHVlKTsKIAogICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMsIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKICAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoQ1NT
UGFyc2VyVmFsdWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKaW5kZXggMGMwNjVi
OWE3YmMxNjJkMWIwZWMzMTUyNjNlNTA4OWQ3YmJhYjM2ZC4uODQ3OWFkZDQwYzJmNTdkYzE2YjI3
NjA1ZDlmN2YyMTRhM2Q1OTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NT
U1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKQEAg
LTYyLDcgKzYyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICBpZCA+PSBDU1NWYWx1ZVN1cGVy
KQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBl
cmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5RG9taW5hbnRCYXNlbGluZToK
QEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+IHwgaW5oZXJp
dAotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBG
Tm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFs
aWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lam9pbjogICAvLyBt
aXRlciB8IHJvdW5kIHwgYmV2ZWwgfCBpbmhlcml0CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3RvcE9wYWNpdHk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBG
UGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAo
IWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRl
TW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTaGFwZVJlbmRl
cmluZzoKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAg
ICAgICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgIGlm
IChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNv
bG9yRnJvbVZhbHVlKG1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykp
CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVV
UklBbmRDb2xvcih2YWx1ZS0+c3RyaW5nLCBjKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2
YWx1ZS0+c3RyaW5nKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAKICAgICBjYXNl
IENTU1Byb3BlcnR5U3Ryb2tlV2lkdGg6ICAgICAgICAgLy8gPGxlbmd0aD4gfCBpbmhlcml0CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hvZmZzZXQ6Ci0gICAgICAgIHZhbGlkX3ByaW1p
dGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVN
b2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheTogICAgIC8vIG5vbmUgfCA8ZGFzaGFycmF5PiB8
IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKQEAgLTI1MCw3ICsyNTAs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0g
Q1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUs
IEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOiAgICAvLyA8dXJpPiB8IG5v
bmUgfCBpbmhlcml0CkBAIC0yNjcsNyArMjY3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZH
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dW
YWx1ZUxpc3QgPSBwYXJzZVNoYWRvdyhtX3ZhbHVlTGlzdC5nZXQoKSwgcHJvcElkKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hhZG93
KCptX3ZhbHVlTGlzdCwgcHJvcElkKTsKICAgICAgICAgICAgIGlmIChzaGFkb3dWYWx1ZUxpc3Qp
IHsKICAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHNoYWRvd1ZhbHVlTGlzdC5y
ZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVJ5
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlYOgogICAgIGNhc2UgQ1NTUHJvcGVydHlZOgotICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50KSk7CisgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2
YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIElmIHlvdSBjcmFzaCBoZXJlLCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEg
Y3NzIHByb3BlcnR5IGFuZCBhcmUgbm90IGhhbmRsaW5nIGl0CkBAIC0zMjQsNyArMzI0LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1
ZS0+dW5pdCk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID49IENTU1BhcnNlclZhbHVl
OjpRX0VNUykKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19FTVMpOwotICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZSkpCisgICAgICAgIGlm
IChpc0NhbGN1bGF0aW9uKCp2YWx1ZSkpCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOwogICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0KQEAgLTM0MSw3ICszNDEsNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGJv
b2wgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAg
dmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFs
aWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgU1ZHQXR0cmlidXRl
TW9kZSk7CiAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gMCkKQEAgLTM2MCw3ICszNjAsNyBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiB7CiAgICAgUkdCQTMy
IGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQorICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSgq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCiAgICAgICAgIHJldHVybiBTVkdQYWludDo6Y3Jl
YXRlVW5rbm93bigpOwogICAgIHJldHVybiBTVkdQYWludDo6Y3JlYXRlQ29sb3IoQ29sb3IoYykp
OwogfQpAQCAtMzY4LDcgKzM2OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VTVkdQYWludCgpCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZH
Q29sb3IoKQogewogICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGlmICgh
cGFyc2VDb2xvckZyb21WYWx1ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKKyAgICBpZiAo
IXBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gU1ZHQ29sb3I6OmNyZWF0ZUZyb21Db2xvcihDb2xvcihj
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcAppbmRleCA4ODg3YmNlZDhk
Y2JmNGNiZjYyYjEwMGFkZjkyZTgyNmFmNDdkZmMwLi44MGZkMmZmMzg5OTc3YWNkOGY3MmQ2MzFh
OTczMGIzMGMzOGViMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6
ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKQEAg
LTUwLDcgKzUwLDcgQEAgYm9vbCBTb3VyY2VTaXplOjptYXRjaChSZW5kZXJTdHlsZSYgc3R5bGUs
IEZyYW1lKiBmcmFtZSkKIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTGVuZ3RoKENTU1BhcnNlclZh
bHVlJiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAg
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUs
IHZpZXcpOwotICAgIGlmIChDU1NQYXJzZXI6OmlzQ2FsY3VsYXRpb24oJnZhbHVlKSkgeworICAg
IGlmIChDU1NQYXJzZXI6OmlzQ2FsY3VsYXRpb24odmFsdWUpKSB7CiAgICAgICAgIENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgICAgICBp
ZiAoYXJncyAmJiBhcmdzLT5zaXplKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NDYWxjVmFs
dWU+IGNhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAqYXJncywgQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>