<?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>111711</bug_id>
          
          <creation_ts>2013-03-07 05:05:29 -0800</creation_ts>
          <short_desc>Web Inspector: [CodeMirror] update codemirror to version 3.1</short_desc>
          <delta_ts>2013-03-07 08:13:30 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849975</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-07 05:05:29 -0800</bug_when>
    <thetext>Update codemirror experiment to use version 3.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849980</commentid>
    <comment_count>1</comment_count>
      <attachid>191975</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-07 05:08:50 -0800</bug_when>
    <thetext>Created attachment 191975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850105</commentid>
    <comment_count>2</comment_count>
      <attachid>191975</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 08:13:27 -0800</bug_when>
    <thetext>Comment on attachment 191975
Patch

Clearing flags on attachment: 191975

Committed r145080: &lt;http://trac.webkit.org/changeset/145080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850106</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 08:13:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191975</attachid>
            <date>2013-03-07 05:08:50 -0800</date>
            <delta_ts>2013-03-07 08:13:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111711-20130307170453.patch</filename>
            <type>text/plain</type>
            <size>199312</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFiMjkxMWJlMTdiMmY3
YThlZDIyNzhmNTU3NjEyOWM2ZmQ3MDIxZC4uMGZlMDg0ZDEyNTRlNzU5YTc5MGY5NDEwYjdmOTQ4
Mjg5YTczNzQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAzLTA3ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQ29kZU1pcnJvcl0gdXBkYXRlIGNvZGVtaXJyb3IgdG8gdmVyc2lvbiAzLjEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTcxMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2Rl
IG1pcnJvciBleHBlcmltZW50YWwgZWRpdG9yIHRvIHZlcnNpb24gMy4xCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9y
LmNzczoKKyAgICAgICAgKC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcik6CisgICAg
ICAgICguQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IpOgorICAgICAg
ICAoLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29y
KToKKyAgICAgICAgKC5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWly
cm9yLWN1cnNvcjpub3QoI25vbnNlbnNlX2lkKSk6CisgICAgICAgICguQ29kZU1pcnJvciBkaXYu
Q29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUpOgorICAgICAgICAoLkNvZGVN
aXJyb3ItZ3V0dGVycyk6CisgICAgICAgICguQ29kZU1pcnJvci1saW5ld2lkZ2V0KToKKyAgICAg
ICAgKC5Db2RlTWlycm9yLXdpZGdldCk6CisgICAgICAgICguQ29kZU1pcnJvci1mb2N1c2VkIGRp
di5Db2RlTWlycm9yLWN1cnNvcik6CisgICAgICAgIChAbWVkaWEgcHJpbnQpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5qczoKKyAgICAgICAgKHdpbmRvdy5D
b2RlTWlycm9yKToKKyAgICAgICAgKHdpbmRvdy5Db2RlTWlycm9yLik6CisKIDIwMTMtMDMtMDcg
IEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogUmVmYWN0b3JpbmdzOiBQcmVwYXJlIFN1Z2dlc3RCb3ggZm9yIHJldXNlLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWly
cm9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJv
ci5jc3MKaW5kZXggZjlmZjA1MGQzZGNlOTYyN2FkZjQ0ZmY0YTg3NTE3NGE5MmNjNjMwMS4uOGRl
MGIxOTA4ZTg5NzVlYmU2MDlkMGQ0OTRhYjFiYjRlYTRiMTM2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzCkBAIC0zOSwx
NCArMzksMTQgQEAKIAogLyogQ1VSU09SICovCiAKLS5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9y
LWN1cnNvciB7CisuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICBib3JkZXIt
bGVmdDogMXB4IHNvbGlkIGJsYWNrOwogfQogLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGly
ZWN0aW9uYWwgdGV4dCAqLwotLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vy
c29yIHsKKy5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgIGJv
cmRlci1sZWZ0OiAxcHggc29saWQgc2lsdmVyOwogfQotLmNtLWtleW1hcC1mYXQtY3Vyc29yIHBy
ZS5Db2RlTWlycm9yLWN1cnNvciB7CisuQ29kZU1pcnJvci5jbS1rZXltYXAtZmF0LWN1cnNvciBk
aXYuQ29kZU1pcnJvci1jdXJzb3IgewogICB3aWR0aDogYXV0bzsKICAgYm9yZGVyOiAwOwogICBi
YWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKQEAgLTU0LDExICs1NCwxMSBAQAogICBmaWx0ZXI6IHBy
b2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM2
NjAwYzgwMCwgZW5kQ29sb3JzdHI9IzRjMDBjODAwKTsKIH0KIC8qIEtsdWRnZSB0byB0dXJuIG9m
ZiBmaWx0ZXIgaW4gaWU5Kywgd2hpY2ggYWxzbyBhY2NlcHRzIHJnYmEgKi8KLS5jbS1rZXltYXAt
ZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3I6bm90KCNub25zZW5zZV9pZCkgeworLkNv
ZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yOm5vdCgj
bm9uc2Vuc2VfaWQpIHsKICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3Nv
ZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7CiB9CiAvKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZl
cmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLS5Db2RlTWlycm9yIHByZS5D
b2RlTWlycm9yLWN1cnNvci5Db2RlTWlycm9yLW92ZXJ3cml0ZSB7fQorLkNvZGVNaXJyb3IgZGl2
LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHt9CiAKIC8qIERFRkFVTFQg
VEhFTUUgKi8KIApAQCAtMTQ4LDYgKzE0OCw3IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1p
cnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIC5Db2RlTWlycm9yLWd1dHRl
cnMgewogICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKICAgaGVpZ2h0OiAx
MDAlOworICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgei1pbmRleDogMzsKIH0KIC5Db2RlTWly
cm9yLWd1dHRlciB7CkBAIC0xOTYsNiArMTk3LDExIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29k
ZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIC5Db2RlTWlycm9yLWxp
bmV3aWRnZXQgewogICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgIHotaW5kZXg6IDI7CisgIG92ZXJm
bG93OiBhdXRvOworfQorCisuQ29kZU1pcnJvci13aWRnZXQgeworICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7CiB9CiAKIC5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKQEAgLTIx
MCwxMyArMjE2LDEzIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGlu
Z2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIH0KIC5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsgcG9z
aXRpb246IHN0YXRpYzsgfQogCi0uQ29kZU1pcnJvciBwcmUuQ29kZU1pcnJvci1jdXJzb3Igewor
LkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgcG9zaXRpb246IGFic29sdXRl
OwogICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgd2lkdGg6
IDA7CiB9Ci0uQ29kZU1pcnJvci1mb2N1c2VkIHByZS5Db2RlTWlycm9yLWN1cnNvciB7CisuQ29k
ZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgIHZpc2liaWxpdHk6IHZp
c2libGU7CiB9CiAKQEAgLTIzMyw3ICsyMzksNyBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVN
aXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAKIEBtZWRpYSBwcmludCB7
CiAgIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCi0gIC5Db2RlTWlycm9yIHBy
ZS5Db2RlTWlycm9yLWN1cnNvciB7CisgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNv
ciB7CiAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMKaW5kZXggZmQxNmNjZWNl
NTE0MDljZGRhY2RmMjJmNzg4YjNhZWNlOTAwODc3Ni4uODczMzlkMDVmM2NkMjZmYjZiZWUwMjMz
MDQ3OTUzZThkYWRmZjhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9jbS9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvY20vY29kZW1pcnJvci5qcwpAQCAtMSwzICsxLDUgQEAKKy8vIENvZGVNaXJyb3Ig
dmVyc2lvbiAzLjEKKy8vCiAvLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2Ug
Y2xhaW0KIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAidXNlIHN0cmljdCI7
CkBAIC04LDggKzEwLDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8v
IGJ1Z3MgYW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzLgogICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xk
L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIGllID0gL01TSUUgXGQvLnRlc3Qo
bmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBpZV9sdDggPSAvTVNJRSBbMS03XVxiLy50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWVfbHQ5ID0gL01TSUUgWzEtOF1cYi8udGVz
dChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAgdmFyIGllX2x0OCA9IGllICYmIChkb2N1bWVudC5k
b2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA4KTsKKyAgdmFy
IGllX2x0OSA9IGllICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVu
dC5kb2N1bWVudE1vZGUgPCA5KTsKICAgdmFyIHdlYmtpdCA9IC9XZWJLaXRcLy8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KTsKICAgdmFyIHF0d2Via2l0ID0gd2Via2l0ICYmIC9RdFwvXGQrXC5c
ZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBjaHJvbWUgPSAvQ2hyb21lXC8v
LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CkBAIC0yMiw3ICsyNCw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIHZhciBpb3MgPSAvQXBwbGVXZWJLaXQvLnRlc3Qo
bmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2Vy
QWdlbnQpOwogICAvLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZv
ciBhbHRlcm5hdGl2ZSBtZXRob2RzIHdlbGNvbWUuCi0gIHZhciBtb2JpbGUgPSBpb3MgfHwgL0Fu
ZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKKyAgdmFyIG1vYmlsZSA9IGlvcyB8fCAvQW5kcm9pZHx3ZWJPU3xCbGFj
a0JlcnJ5fE9wZXJhIE1pbml8T3BlcmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVz
ZXJBZ2VudCk7CiAgIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZv
cm0pOwogICB2YXIgd2luZG93cyA9IC93aW5kb3dzL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0p
OwogCkBAIC0zMCw2ICszMiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICBpZiAob3BlcmFfdmVyc2lvbikgb3BlcmFfdmVyc2lvbiA9IE51bWJlcihvcGVyYV92ZXJzaW9u
WzFdKTsKICAgLy8gU29tZSBicm93c2VycyB1c2UgdGhlIHdyb25nIGV2ZW50IHByb3BlcnRpZXMg
dG8gc2lnbmFsIGNtZC9jdHJsIG9uIE9TIFgKICAgdmFyIGZsaXBDdHJsQ21kID0gbWFjICYmIChx
dHdlYmtpdCB8fCBvcGVyYSAmJiAob3BlcmFfdmVyc2lvbiA9PSBudWxsIHx8IG9wZXJhX3ZlcnNp
b24gPCAxMi4xMSkpOworICB2YXIgY2FwdHVyZU1pZGRsZUNsaWNrID0gZ2Vja28gfHwgKGllICYm
ICFpZV9sdDkpOwogCiAgIC8vIE9wdGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVz
IGFyZSBub3QgdXNlZAogICB2YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBz
ZWRTcGFucyA9IGZhbHNlOwpAQCAtNDUsMjQgKzQ4LDMxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgb3B0aW9uc1tvcHRdID0gZGVmYXVsdHNbb3B0XTsKICAgICBz
ZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucyk7CiAKLSAgICB2YXIgZGlzcGxheSA9IHRo
aXMuZGlzcGxheSA9IG1ha2VEaXNwbGF5KHBsYWNlKTsKKyAgICB2YXIgZG9jU3RhcnQgPSB0eXBl
b2Ygb3B0aW9ucy52YWx1ZSA9PSAic3RyaW5nIiA/IDAgOiBvcHRpb25zLnZhbHVlLmZpcnN0Owor
ICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbWFrZURpc3BsYXkocGxhY2UsIGRvY1N0
YXJ0KTsKICAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7CiAgICAgdXBkYXRl
R3V0dGVycyh0aGlzKTsKICAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZm9j
dXNJbnB1dCh0aGlzKTsKIAotICAgIHRoaXMudmlldyA9IG1ha2VWaWV3KG5ldyBCcmFuY2hDaHVu
ayhbbmV3IExlYWZDaHVuayhbbWFrZUxpbmUoIiIsIG51bGwsIHRleHRIZWlnaHQoZGlzcGxheSkp
XSldKSk7Ci0gICAgdGhpcy5uZXh0T3BJZCA9IDA7Ci0gICAgbG9hZE1vZGUodGhpcyk7CisgICAg
dGhpcy5zdGF0ZSA9IHtrZXlNYXBzOiBbXSwKKyAgICAgICAgICAgICAgICAgIG92ZXJsYXlzOiBb
XSwKKyAgICAgICAgICAgICAgICAgIG1vZGVHZW46IDAsCisgICAgICAgICAgICAgICAgICBvdmVy
d3JpdGU6IGZhbHNlLCBmb2N1c2VkOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIHN1cHByZXNz
RWRpdHM6IGZhbHNlLCBwYXN0ZUluY29taW5nOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIGRy
YWdnaW5nVGV4dDogZmFsc2UsCisgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IG5ldyBEZWxh
eWVkKCl9OworCiAgICAgdGhlbWVDaGFuZ2VkKHRoaXMpOwogICAgIGlmIChvcHRpb25zLmxpbmVX
cmFwcGluZykKICAgICAgIHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVN
aXJyb3Itd3JhcCI7CiAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBjb250ZW50LgotICAgIHRoaXMu
c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAiIik7CisgICAgdmFyIGRvYyA9IG9wdGlvbnMudmFs
dWU7CisgICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2Mob3B0aW9u
cy52YWx1ZSwgb3B0aW9ucy5tb2RlKTsKKyAgICBvcGVyYXRpb24odGhpcywgYXR0YWNoRG9jKSh0
aGlzLCBkb2MpOworCiAgICAgLy8gT3ZlcnJpZGUgbWFnaWMgdGV4dGFyZWEgY29udGVudCByZXN0
b3JlIHRoYXQgSUUgc29tZXRpbWVzIGRvZXMKICAgICAvLyBvbiBvdXIgaGlkZGVuIHRleHRhcmVh
IG9uIHJlbG9hZAogICAgIGlmIChpZSkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMs
IHRydWUpLCAyMCk7Ci0gICAgdGhpcy52aWV3Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpOwogCiAg
ICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpOwogICAgIC8vIElFIHRocm93cyB1bnNwZWNp
ZmllZCBlcnJvciBpbiBjZXJ0YWluIGNhc2VzLCB3aGVuCkBAIC04MSwxMCArOTEsMTEgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gRElTUExBWSBDT05TVFJVQ1RP
UgogCi0gIGZ1bmN0aW9uIG1ha2VEaXNwbGF5KHBsYWNlKSB7CisgIGZ1bmN0aW9uIG1ha2VEaXNw
bGF5KHBsYWNlLCBkb2NTdGFydCkgewogICAgIHZhciBkID0ge307CiAgICAgdmFyIGlucHV0ID0g
ZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRl
OyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZTsiKTsK
LSAgICBpZiAoIXdlYmtpdCkgaW5wdXQuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOworICAg
IGlmICh3ZWJraXQpIGlucHV0LnN0eWxlLndpZHRoID0gIjEwMDBweCI7CisgICAgZWxzZSBpbnB1
dC5zZXRBdHRyaWJ1dGUoIndyYXAiLCAib2ZmIik7CiAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJh
dXRvY29ycmVjdCIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIs
ICJvZmYiKTsKICAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICBkLmlu
cHV0RGl2ID0gZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsgcG9z
aXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKQEAgLTk2LDkgKzEw
Nyw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGQubGluZURpdiA9
IGVsdCgiZGl2Iik7CiAgICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoImRpdiIsIG51bGwsIG51bGws
ICJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKTsKICAgICAvLyBCbGlua3kgY3Vyc29y
LCBhbmQgZWxlbWVudCB1c2VkIHRvIGVuc3VyZSBjdXJzb3IgZml0cyBhdCB0aGUgZW5kIG9mIGEg
bGluZQotICAgIGQuY3Vyc29yID0gZWx0KCJwcmUiLCAiXHUwMGEwIiwgIkNvZGVNaXJyb3ItY3Vy
c29yIik7CisgICAgZC5jdXJzb3IgPSBlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1j
dXJzb3IiKTsKICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAn
IGluIGJpLWRpcmVjdGlvbmFsIHRleHQKLSAgICBkLm90aGVyQ3Vyc29yID0gZWx0KCJwcmUiLCAi
XHUwMGEwIiwgIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIik7
CisgICAgZC5vdGhlckN1cnNvciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1
cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpOwogICAgIC8vIFVzZWQgdG8gbWVhc3Vy
ZSB0ZXh0IHNpemUKICAgICBkLm1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LW1lYXN1cmUiKTsKICAgICAvLyBXcmFwcyBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gZXhpc3Qg
aW5zaWRlIHRoZSB2ZXJ0aWNhbGx5LXBhZGRlZCBjb29yZGluYXRlIHN5c3RlbQpAQCAtMTM0LDcg
KzE0NSw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGVsc2UgaWYg
KGllX2x0OCkgZC5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoID0gZC5zY3JvbGxiYXJWLnN0eWxl
Lm1pbldpZHRoID0gIjE4cHgiOwogCiAgICAgLy8gQ3VycmVudCB2aXNpYmxlIHJhbmdlIChtYXkg
YmUgYmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KLSAgICBkLnZpZXdPZmZzZXQgPSBkLnNo
b3dpbmdGcm9tID0gZC5zaG93aW5nVG8gPSBkLmxhc3RTaXplQyA9IDA7CisgICAgZC52aWV3T2Zm
c2V0ID0gZC5sYXN0U2l6ZUMgPSAwOworICAgIGQuc2hvd2luZ0Zyb20gPSBkLnNob3dpbmdUbyA9
IGRvY1N0YXJ0OwogCiAgICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIg
Z3V0dGVyIHdoZW4gbmVjZXNzYXJ5ICh3aGVuCiAgICAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBj
cm9zc2VzIGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKQpAQCAtMTYxLDcz
ICsxNzMsNjcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gc3Ry
aW5nIGluc3RlYWQgb2YgdGhlIChsYXJnZSkgc2VsZWN0aW9uLgogICAgIGQuaW5hY2N1cmF0ZVNl
bGVjdGlvbiA9IGZhbHNlOwogCi0gICAgLy8gVXNlZCB0byBhZGp1c3Qgb3ZlcndyaXRlIGJlaGF2
aW91ciB3aGVuIGEgcGFzdGUgaGFzIGJlZW4KLSAgICAvLyBkZXRlY3RlZAotICAgIGQucGFzdGVJ
bmNvbWluZyA9IGZhbHNlOworICAgIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBz
byB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhcgorICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRp
YyB3aGVuIHNjcm9sbGluZy4KKyAgICBkLm1heExpbmUgPSBudWxsOworICAgIGQubWF4TGluZUxl
bmd0aCA9IDA7CisgICAgZC5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOwogCisgICAgLy8gVXNlZCBm
b3IgbWVhc3VyaW5nIHdoZWVsIHNjcm9sbGluZyBncmFudWxhcml0eQorICAgIGQud2hlZWxEWCA9
IGQud2hlZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVsbDsKKyAgICAK
ICAgICByZXR1cm4gZDsKICAgfQogCi0gIC8vIFZJRVcgQ09OU1RSVUNUT1IKLQotICBmdW5jdGlv
biBtYWtlVmlldyhkb2MpIHsKLSAgICB2YXIgc2VsUG9zID0ge2xpbmU6IDAsIGNoOiAwfTsKLSAg
ICByZXR1cm4gewotICAgICAgZG9jOiBkb2MsCi0gICAgICAvLyBmcm9udGllciBpcyB0aGUgcG9p
bnQgdXAgdG8gd2hpY2ggdGhlIGNvbnRlbnQgaGFzIGJlZW4gcGFyc2VkLAotICAgICAgZnJvbnRp
ZXI6IDAsIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSwKLSAgICAgIHNlbDoge2Zyb206IHNlbFBv
cywgdG86IHNlbFBvcywgaGVhZDogc2VsUG9zLCBhbmNob3I6IHNlbFBvcywgc2hpZnQ6IGZhbHNl
LCBleHRlbmQ6IGZhbHNlfSwKLSAgICAgIHNjcm9sbFRvcDogMCwgc2Nyb2xsTGVmdDogMCwKLSAg
ICAgIG92ZXJ3cml0ZTogZmFsc2UsIGZvY3VzZWQ6IGZhbHNlLAotICAgICAgLy8gVHJhY2tzIHRo
ZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQKLSAgICAgIC8vIHRoZSBob3Jpem9udGFsIHNj
cm9sbGJhciBjYW4gYmUga2VwdAotICAgICAgLy8gc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgotICAg
ICAgbWF4TGluZTogZ2V0TGluZShkb2MsIDApLAotICAgICAgbWF4TGluZUxlbmd0aDogMCwKLSAg
ICAgIG1heExpbmVDaGFuZ2VkOiBmYWxzZSwKLSAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLAot
ICAgICAgZ29hbENvbHVtbjogbnVsbCwKLSAgICAgIGNhbnRFZGl0OiBmYWxzZSwKLSAgICAgIGtl
eU1hcHM6IFtdLAotICAgICAgb3ZlcmxheXM6IFtdLAotICAgICAgbW9kZUdlbjogMAotICAgIH07
Ci0gIH0KLQogICAvLyBTVEFURSBVUERBVEVTCiAKICAgLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRv
ciBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLgogCiAg
IGZ1bmN0aW9uIGxvYWRNb2RlKGNtKSB7Ci0gICAgdmFyIGRvYyA9IGNtLnZpZXcuZG9jOwotICAg
IGNtLnZpZXcubW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbS5vcHRpb25zLCBjbS5vcHRpb25z
Lm1vZGUpOwotICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IGlmIChs
aW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH0pOwotICAgIGNtLnZpZXcu
ZnJvbnRpZXIgPSAwOworICAgIGNtLmRvYy5tb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtLm9w
dGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKTsKKyAgICBjbS5kb2MuaXRlcihmdW5jdGlvbihsaW5l
KSB7CisgICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwor
ICAgICAgaWYgKGxpbmUuc3R5bGVzKSBsaW5lLnN0eWxlcyA9IG51bGw7CisgICAgfSk7CisgICAg
Y20uZG9jLmZyb250aWVyID0gY20uZG9jLmZpcnN0OwogICAgIHN0YXJ0V29ya2VyKGNtLCAxMDAp
OwotICAgIGNtLnZpZXcubW9kZUdlbisrOworICAgIGNtLnN0YXRlLm1vZGVHZW4rKzsKKyAgICBp
ZiAoY20uY3VyT3ApIHJlZ0NoYW5nZShjbSk7CiAgIH0KIAogICBmdW5jdGlvbiB3cmFwcGluZ0No
YW5nZWQoY20pIHsKLSAgICB2YXIgZG9jID0gY20udmlldy5kb2MsIHRoID0gdGV4dEhlaWdodChj
bS5kaXNwbGF5KTsKICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgIGNt
LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwotICAgICAg
dmFyIHBlckxpbmUgPSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRo
KGNtLmRpc3BsYXkpIC0gMzsKLSAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihs
aW5lKSB7Ci0gICAgICAgIGlmIChsaW5lLmhlaWdodCA9PSAwKSByZXR1cm47Ci0gICAgICAgIHZh
ciBndWVzcyA9IE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsKLSAg
ICAgICAgaWYgKGd1ZXNzICE9IDEpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MgKiB0aCk7
Ci0gICAgICB9KTsKICAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSAiIjsK
ICAgICB9IGVsc2UgewogICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRp
c3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsICIiKTsK
LSAgICAgIGNvbXB1dGVNYXhMZW5ndGgoY20udmlldyk7Ci0gICAgICBkb2MuaXRlcigwLCBkb2Mu
c2l6ZSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMCkgdXBk
YXRlTGluZUhlaWdodChsaW5lLCB0aCk7Ci0gICAgICB9KTsKKyAgICAgIGNvbXB1dGVNYXhMZW5n
dGgoY20pOwogICAgIH0KLSAgICByZWdDaGFuZ2UoY20sIDAsIGRvYy5zaXplKTsKKyAgICBlc3Rp
bWF0ZUxpbmVIZWlnaHRzKGNtKTsKKyAgICByZWdDaGFuZ2UoY20pOwogICAgIGNsZWFyQ2FjaGVz
KGNtKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNw
bGF5LCBjbS52aWV3LmRvYy5oZWlnaHQpO30sIDEwMCk7CisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpe3VwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20uZG9jLmhlaWdodCk7fSwgMTAwKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7CisgICAgdmFyIHRoID0gdGV4
dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZzsK
KyAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNtLmRpc3BsYXkuc2Ny
b2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAzKTsKKyAgICByZXR1
cm4gZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKGxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGVsc2UgaWYgKHdyYXBwaW5nKQorICAgICAgICBy
ZXR1cm4gKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsK
KyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHRoOworICAgIH07CisgIH0KKworICBmdW5jdGlv
biBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKSB7CisgICAgdmFyIGRvYyA9IGNtLmRvYywgZXN0ID0g
ZXN0aW1hdGVIZWlnaHQoY20pOworICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAg
IHZhciBlc3RIZWlnaHQgPSBlc3QobGluZSk7CisgICAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUu
aGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCk7CisgICAgfSk7CiAgIH0K
IAogICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKGNtKSB7CkBAIC0yNDQsNyArMjUwLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gZ3V0dGVyc0NoYW5n
ZWQoY20pIHsKICAgICB1cGRhdGVHdXR0ZXJzKGNtKTsKLSAgICB1cGRhdGVEaXNwbGF5KGNtLCB0
cnVlKTsKKyAgICByZWdDaGFuZ2UoY20pOwogICB9CiAKICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVy
cyhjbSkgewpAQCAtMjc5LDE1ICsyODUsMTYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgcmV0dXJuIGxlbjsKICAgfQogCi0gIGZ1bmN0aW9uIGNvbXB1dGVNYXhMZW5n
dGgodmlldykgewotICAgIHZpZXcubWF4TGluZSA9IGdldExpbmUodmlldy5kb2MsIDApOwotICAg
IHZpZXcubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5ndGgodmlldy5kb2MsIHZpZXcubWF4TGluZSk7
Ci0gICAgdmlldy5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgdmlldy5kb2MuaXRlcigxLCB2
aWV3LmRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgbGVuID0gbGluZUxlbmd0
aCh2aWV3LmRvYywgbGluZSk7Ci0gICAgICBpZiAobGVuID4gdmlldy5tYXhMaW5lTGVuZ3RoKSB7
Ci0gICAgICAgIHZpZXcubWF4TGluZUxlbmd0aCA9IGxlbjsKLSAgICAgICAgdmlldy5tYXhMaW5l
ID0gbGluZTsKKyAgZnVuY3Rpb24gY29tcHV0ZU1heExlbmd0aChjbSkgeworICAgIHZhciBkID0g
Y20uZGlzcGxheSwgZG9jID0gY20uZG9jOworICAgIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBk
b2MuZmlyc3QpOworICAgIGQubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5ndGgoZG9jLCBkLm1heExp
bmUpOworICAgIGQubWF4TGluZUNoYW5nZWQgPSB0cnVlOworICAgIGRvYy5pdGVyKGZ1bmN0aW9u
KGxpbmUpIHsKKyAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGluZSk7CisgICAgICBp
ZiAobGVuID4gZC5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxl
bjsKKyAgICAgICAgZC5tYXhMaW5lID0gbGluZTsKICAgICAgIH0KICAgICB9KTsKICAgfQpAQCAt
MzUwLDE4ICszNTcsMTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAg
ZnVuY3Rpb24gYWxpZ25Ib3Jpem9udGFsbHkoY20pIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRp
c3BsYXk7Ci0gICAgaWYgKCFkaXNwbGF5LmFsaWduV2lkZ2V0cyAmJiAhZGlzcGxheS5ndXR0ZXJz
LmZpcnN0Q2hpbGQpIHJldHVybjsKLSAgICB2YXIgY29tcCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xs
KGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgY20udmlldy5zY3JvbGxM
ZWZ0OworICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYgKCFkaXNwbGF5Lmd1dHRlcnMu
Zmlyc3RDaGlsZCB8fCAhY20ub3B0aW9ucy5maXhlZEd1dHRlcikpIHJldHVybjsKKyAgICB2YXIg
Y29tcCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxMZWZ0ICsgY20uZG9jLnNjcm9sbExlZnQ7CiAgICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5
Lmd1dHRlcnMub2Zmc2V0V2lkdGgsIGwgPSBjb21wICsgInB4IjsKICAgICBmb3IgKHZhciBuID0g
ZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7IG47IG4gPSBuLm5leHRTaWJsaW5nKSBpZiAobi5h
bGlnbmFibGUpIHsKICAgICAgIGZvciAodmFyIGkgPSAwLCBhID0gbi5hbGlnbmFibGU7IGkgPCBh
Lmxlbmd0aDsgKytpKSBhW2ldLnN0eWxlLmxlZnQgPSBsOwogICAgIH0KLSAgICBkaXNwbGF5Lmd1
dHRlcnMuc3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykgKyAicHgiOworICAgIGlmIChjbS5v
cHRpb25zLmZpeGVkR3V0dGVyKQorICAgICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSAo
Y29tcCArIGd1dHRlclcpICsgInB4IjsKICAgfQogCiAgIGZ1bmN0aW9uIG1heWJlVXBkYXRlTGlu
ZU51bWJlcldpZHRoKGNtKSB7CiAgICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzKSByZXR1
cm4gZmFsc2U7Ci0gICAgdmFyIGRvYyA9IGNtLnZpZXcuZG9jLCBsYXN0ID0gbGluZU51bWJlckZv
cihjbS5vcHRpb25zLCBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICB2
YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBkb2MuZmly
c3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICBpZiAobGFzdC5s
ZW5ndGggIT0gZGlzcGxheS5saW5lTnVtQ2hhcnMpIHsKICAgICAgIHZhciB0ZXN0ID0gZGlzcGxh
eS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbGFzdCldLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2RlTWlycm9y
LWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpOwpAQCAtMzgwLDcgKzM4OCw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBTdHJpbmcob3B0
aW9ucy5saW5lTnVtYmVyRm9ybWF0dGVyKGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlcikpOwog
ICB9CiAgIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHsKLSAgICByZXR1
cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZGlzcGxh
eS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OworICAgIHJldHVybiBnZXRSZWN0
KGRpc3BsYXkuc2Nyb2xsZXIpLmxlZnQgLSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIpLmxlZnQ7CiAg
IH0KIAogICAvLyBESVNQTEFZIERSQVdJTkcKQEAgLTM4OSwxMiArMzk3LDEyIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBvbGRGcm9tID0gY20uZGlzcGxheS5z
aG93aW5nRnJvbSwgb2xkVG8gPSBjbS5kaXNwbGF5LnNob3dpbmdUbzsKICAgICB2YXIgdXBkYXRl
ZCA9IHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywgdmlld1BvcnQpOwogICAgIGlmICh1
cGRhdGVkKSB7Ci0gICAgICBzaWduYWxMYXRlcihjbSwgY20sICJ1cGRhdGUiLCBjbSk7CisgICAg
ICBzaWduYWxMYXRlcihjbSwgInVwZGF0ZSIsIGNtKTsKICAgICAgIGlmIChjbS5kaXNwbGF5LnNo
b3dpbmdGcm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0gb2xkVG8pCi0g
ICAgICAgIHNpZ25hbExhdGVyKGNtLCBjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3Bs
YXkuc2hvd2luZ0Zyb20sIGNtLmRpc3BsYXkuc2hvd2luZ1RvKTsKKyAgICAgICAgc2lnbmFsTGF0
ZXIoY20sICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5LnNob3dpbmdGcm9tLCBjbS5k
aXNwbGF5LnNob3dpbmdUbyk7CiAgICAgfQogICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAg
dXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNwbGF5LCBjbS52aWV3LmRvYy5oZWlnaHQpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20uZG9jLmhlaWdodCk7CiAKICAgICByZXR1cm4g
dXBkYXRlZDsKICAgfQpAQCAtNDAzLDkgKzQxMSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgLy8gZGV0ZXJtaW5lIHdoaWNoIERPTSB1cGRhdGVzIGhhdmUgdG8gYmUg
bWFkZSwgYW5kIG1ha2VzIHRoZQogICAvLyB1cGRhdGVzLgogICBmdW5jdGlvbiB1cGRhdGVEaXNw
bGF5SW5uZXIoY20sIGNoYW5nZXMsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5LCBkb2MgPSBjbS52aWV3LmRvYzsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXks
IGRvYyA9IGNtLmRvYzsKICAgICBpZiAoIWRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCkgewot
ICAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGRpc3BsYXkuc2hvd2luZ1RvID0gZGlzcGxheS52
aWV3T2Zmc2V0ID0gMDsKKyAgICAgIGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBkaXNwbGF5LnNob3dp
bmdUbyA9IGRvYy5maXJzdDsKKyAgICAgIGRpc3BsYXkudmlld09mZnNldCA9IDA7CiAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00MTQsNDUgKzQyMyw1MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAvLyB0byByZW5kZXIgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBz
Y3JvbGxiYXIgcG9zaXRpb24uCiAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoZGlzcGxh
eSwgZG9jLCB2aWV3UG9ydCk7CiAgICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBp
cyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCi0gICAgaWYgKGNoYW5nZXMg
IT09IHRydWUgJiYgY2hhbmdlcy5sZW5ndGggPT0gMCAmJgorICAgIGlmIChjaGFuZ2VzLmxlbmd0
aCA9PSAwICYmCiAgICAgICAgIHZpc2libGUuZnJvbSA+IGRpc3BsYXkuc2hvd2luZ0Zyb20gJiYg
dmlzaWJsZS50byA8IGRpc3BsYXkuc2hvd2luZ1RvKQogICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGNoYW5nZXMgJiYgbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKQotICAgICAgY2hhbmdl
cyA9IHRydWU7Ci0gICAgZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gZGlzcGxheS5z
Y3JvbGxiYXJILnN0eWxlLmxlZnQgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgi
OwotCi0gICAgLy8gV2hlbiBtZXJnZWQgbGluZXMgYXJlIHByZXNlbnQsIHRoZSBsaW5lIHRoYXQg
bmVlZHMgdG8gYmUKLSAgICAvLyByZWRyYXduIG1pZ2h0IG5vdCBiZSB0aGUgb25lIHRoYXQgd2Fz
IGNoYW5nZWQuCi0gICAgaWYgKGNoYW5nZXMgIT09IHRydWUgJiYgc2F3Q29sbGFwc2VkU3BhbnMp
Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgdmFyIGNoID0gY2hhbmdlc1tpXSwgbWVyZ2VkOwotICAgICAgICB3aGlsZSAobWVyZ2VkID0g
Y29sbGFwc2VkU3BhbkF0U3RhcnQoZ2V0TGluZShkb2MsIGNoLmZyb20pKSkgewotICAgICAgICAg
IHZhciBmcm9tID0gbWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmU7Ci0gICAgICAgICAgaWYgKGNoLmRp
ZmYpIGNoLmRpZmYgLT0gY2guZnJvbSAtIGZyb207Ci0gICAgICAgICAgY2guZnJvbSA9IGZyb207
Ci0gICAgICAgIH0KLSAgICAgIH0KKyAgICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgo
Y20pKQorICAgICAgY2hhbmdlcyA9IFt7ZnJvbTogZG9jLmZpcnN0LCB0bzogZG9jLmZpcnN0ICsg
ZG9jLnNpemV9XTsKKyAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2lu
TGVmdCA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7CisgICAgZGlzcGxheS5z
Y3JvbGxiYXJILnN0eWxlLmxlZnQgPSBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyVyA6
ICIwIjsKIAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxpbmVzIG5lZWQgdGhlaXIg
bGluZSBudW1iZXJzIHVwZGF0ZWQKLSAgICB2YXIgcG9zaXRpb25zQ2hhbmdlZEZyb20gPSBjaGFu
Z2VzID09PSB0cnVlID8gMCA6IEluZmluaXR5OwotICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1i
ZXJzICYmIGNoYW5nZXMgJiYgY2hhbmdlcyAhPT0gdHJ1ZSkKKyAgICB2YXIgcG9zaXRpb25zQ2hh
bmdlZEZyb20gPSBJbmZpbml0eTsKKyAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycykKICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7ICsraSkKICAgICAgICAgaWYg
KGNoYW5nZXNbaV0uZGlmZikgeyBwb3NpdGlvbnNDaGFuZ2VkRnJvbSA9IGNoYW5nZXNbaV0uZnJv
bTsgYnJlYWs7IH0KIAotICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gY20u
b3B0aW9ucy52aWV3cG9ydE1hcmdpbiwgMCk7Ci0gICAgdmFyIHRvID0gTWF0aC5taW4oZG9jLnNp
emUsIHZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKLSAgICBpZiAoZGlz
cGxheS5zaG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkuc2hvd2luZ0Zyb20gPCAy
MCkgZnJvbSA9IGRpc3BsYXkuc2hvd2luZ0Zyb207Ci0gICAgaWYgKGRpc3BsYXkuc2hvd2luZ1Rv
ID4gdG8gJiYgZGlzcGxheS5zaG93aW5nVG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGRvYy5z
aXplLCBkaXNwbGF5LnNob3dpbmdUbyk7CisgICAgdmFyIGVuZCA9IGRvYy5maXJzdCArIGRvYy5z
aXplOworICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52
aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTsKKyAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHZp
c2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKKyAgICBpZiAoZGlzcGxheS5z
aG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkuc2hvd2luZ0Zyb20gPCAyMCkgZnJv
bSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS5zaG93aW5nRnJvbSk7CisgICAgaWYgKGRp
c3BsYXkuc2hvd2luZ1RvID4gdG8gJiYgZGlzcGxheS5zaG93aW5nVG8gLSB0byA8IDIwKSB0byA9
IE1hdGgubWluKGVuZCwgZGlzcGxheS5zaG93aW5nVG8pOwogICAgIGlmIChzYXdDb2xsYXBzZWRT
cGFucykgewogICAgICAgZnJvbSA9IGxpbmVObyh2aXN1YWxMaW5lKGRvYywgZ2V0TGluZShkb2Ms
IGZyb20pKSk7Ci0gICAgICB3aGlsZSAodG8gPCBkb2Muc2l6ZSAmJiBsaW5lSXNIaWRkZW4oZ2V0
TGluZShkb2MsIHRvKSkpICsrdG87CisgICAgICB3aGlsZSAodG8gPCBlbmQgJiYgbGluZUlzSGlk
ZGVuKGRvYywgZ2V0TGluZShkb2MsIHRvKSkpICsrdG87CiAgICAgfQogCiAgICAgLy8gQ3JlYXRl
IGEgcmFuZ2Ugb2YgdGhlb3JldGljYWxseSBpbnRhY3QgbGluZXMsIGFuZCBwdW5jaCBob2xlcwog
ICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgotICAgIHZhciBpbnRhY3QgPSBj
aGFuZ2VzID09PSB0cnVlID8gW10gOgotICAgICAgY29tcHV0ZUludGFjdChbe2Zyb206IGRpc3Bs
YXkuc2hvd2luZ0Zyb20sIHRvOiBkaXNwbGF5LnNob3dpbmdUb31dLCBjaGFuZ2VzKTsKKyAgICB2
YXIgaW50YWN0ID0gW3tmcm9tOiBNYXRoLm1heChkaXNwbGF5LnNob3dpbmdGcm9tLCBkb2MuZmly
c3QpLAorICAgICAgICAgICAgICAgICAgIHRvOiBNYXRoLm1pbihkaXNwbGF5LnNob3dpbmdUbywg
ZW5kKX1dOworICAgIGlmIChpbnRhY3RbMF0uZnJvbSA+PSBpbnRhY3RbMF0udG8pIGludGFjdCA9
IFtdOworICAgIGVsc2UgaW50YWN0ID0gY29tcHV0ZUludGFjdChpbnRhY3QsIGNoYW5nZXMpOwor
ICAgIC8vIFdoZW4gbWVyZ2VkIGxpbmVzIGFyZSBwcmVzZW50LCB3ZSBtaWdodCBoYXZlIHRvIHJl
ZHVjZSB0aGUKKyAgICAvLyBpbnRhY3QgcmFuZ2VzIGJlY2F1c2UgY2hhbmdlcyBpbiBjb250aW51
ZWQgZnJhZ21lbnRzIG9mIHRoZQorICAgIC8vIGludGFjdCBsaW5lcyBkbyByZXF1aXJlIHRoZSBs
aW5lcyB0byBiZSByZWRyYXduLgorICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciByYW5n
ZSA9IGludGFjdFtpXSwgbWVyZ2VkOworICAgICAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2Vk
U3BhbkF0RW5kKGdldExpbmUoZG9jLCByYW5nZS50byAtIDEpKSkgeworICAgICAgICAgIHZhciBu
ZXdUbyA9IG1lcmdlZC5maW5kKCkuZnJvbS5saW5lOworICAgICAgICAgIGlmIChuZXdUbyA+IHJh
bmdlLmZyb20pIHJhbmdlLnRvID0gbmV3VG87CisgICAgICAgICAgZWxzZSB7IGludGFjdC5zcGxp
Y2UoaS0tLCAxKTsgYnJlYWs7IH0KKyAgICAgICAgfQorICAgICAgfQorCiAgICAgLy8gQ2xpcCBv
ZmYgdGhlIHBhcnRzIHRoYXQgd29uJ3QgYmUgdmlzaWJsZQogICAgIHZhciBpbnRhY3RMaW5lcyA9
IDA7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKQEAgLTQ2
Miw4ICs0NzYsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBp
ZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEpOwogICAgICAg
ZWxzZSBpbnRhY3RMaW5lcyArPSByYW5nZS50byAtIHJhbmdlLmZyb207CiAgICAgfQotICAgIGlm
IChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20gJiYgZnJvbSA9PSBkaXNwbGF5LnNob3dpbmdGcm9t
ICYmIHRvID09IGRpc3BsYXkuc2hvd2luZ1RvKQorICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAt
IGZyb20gJiYgZnJvbSA9PSBkaXNwbGF5LnNob3dpbmdGcm9tICYmIHRvID09IGRpc3BsYXkuc2hv
d2luZ1RvKSB7CisgICAgICB1cGRhdGVWaWV3T2Zmc2V0KGNtKTsKICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmZyb20gLSBiLmZy
b207fSk7CiAKICAgICB2YXIgZm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CkBAIC00
ODcsMjAgKzUwMywzMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTsKICAgICAgICAgcHJldkJvdHRvbSA9IGJvdDsK
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBib3ggPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOworICAgICAgICB2YXIgYm94ID0gZ2V0UmVjdChub2RlKTsKICAgICAgICAgaGVpZ2h0
ID0gYm94LmJvdHRvbSAtIGJveC50b3A7CiAgICAgICB9CiAgICAgICB2YXIgZGlmZiA9IG5vZGUu
bGluZU9iai5oZWlnaHQgLSBoZWlnaHQ7CiAgICAgICBpZiAoaGVpZ2h0IDwgMikgaGVpZ2h0ID0g
dGV4dEhlaWdodChkaXNwbGF5KTsKLSAgICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZmIDwgLS4w
MDEpCisgICAgICBpZiAoZGlmZiA+IC4wMDEgfHwgZGlmZiA8IC0uMDAxKSB7CiAgICAgICAgIHVw
ZGF0ZUxpbmVIZWlnaHQobm9kZS5saW5lT2JqLCBoZWlnaHQpOworICAgICAgICB2YXIgd2lkZ2V0
cyA9IG5vZGUubGluZU9iai53aWRnZXRzOworICAgICAgICBpZiAod2lkZ2V0cykgZm9yICh2YXIg
aSA9IDA7IGkgPCB3aWRnZXRzLmxlbmd0aDsgKytpKQorICAgICAgICAgIHdpZGdldHNbaV0uaGVp
Z2h0ID0gd2lkZ2V0c1tpXS5ub2RlLm9mZnNldEhlaWdodDsKKyAgICAgIH0KICAgICB9Ci0gICAg
ZGlzcGxheS52aWV3T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGNtLCBnZXRMaW5lKGRvYywgZnJvbSkp
OwotICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVu
dCB2aXJ0dWFsIHNjcm9sbCBwb3NpdGlvbgotICAgIGRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0g
ZGlzcGxheS52aWV3T2Zmc2V0ICsgInB4IjsKKyAgICB1cGRhdGVWaWV3T2Zmc2V0KGNtKTsKKwor
ICAgIGlmICh2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3UG9ydCkudG8gPiB0bykKKyAg
ICAgIHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgW10sIHZpZXdQb3J0KTsKICAgICByZXR1cm4gdHJ1
ZTsKICAgfQogCisgIGZ1bmN0aW9uIHVwZGF0ZVZpZXdPZmZzZXQoY20pIHsKKyAgICB2YXIgb2Zm
ID0gY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGNtLCBnZXRMaW5lKGNtLmRv
YywgY20uZGlzcGxheS5zaG93aW5nRnJvbSkpOworICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBk
aXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCB2aXJ0dWFsIHNjcm9sbCBwb3NpdGlvbgorICAg
IGNtLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0gb2ZmICsgInB4IjsKKyAgfQorCiAgIGZ1bmN0
aW9uIGNvbXB1dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKSB7CiAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAwOyBpIDwgbDsgKytpKSB7CiAgICAgICB2YXIgY2hhbmdl
ID0gY2hhbmdlc1tpXSwgaW50YWN0MiA9IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKQEAg
LTUzOCw5ICs1NjUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVu
Y3Rpb24gcGF0Y2hEaXNwbGF5KGNtLCBmcm9tLCB0bywgaW50YWN0LCB1cGRhdGVOdW1iZXJzRnJv
bSkgewogICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CiAgICAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5LCBsaW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnM7Ci0gICAg
Ly8gSUUgZG9lcyBiYWQgdGhpbmdzIHRvIG5vZGVzIHdoZW4gLmlubmVySFRNTCA9ICIiIGlzIHVz
ZWQgb24gYSBwYXJlbnQKLSAgICAvLyB3ZSBzdGlsbCBuZWVkIHdpZGdldHMgYW5kIG1hcmtlcnMg
aW50YWN0IHRvIGFkZCBiYWNrIHRvIHRoZSBuZXcgY29udGVudCBsYXRlcgotICAgIGlmICghaW50
YWN0Lmxlbmd0aCAmJiAhaWUgJiYgKCF3ZWJraXQgfHwgIWNtLmRpc3BsYXkuY3VycmVudFdoZWVs
VGFyZ2V0KSkKKyAgICBpZiAoIWludGFjdC5sZW5ndGggJiYgKCF3ZWJraXQgfHwgIWNtLmRpc3Bs
YXkuY3VycmVudFdoZWVsVGFyZ2V0KSkKICAgICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubGlu
ZURpdik7CiAgICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGluZURpdiwgY3VyID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQ7CiAKQEAgLTU1MCw1MCArNTc1LDEwNiBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgbm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwog
ICAgICAgICBub2RlLmxpbmVPYmogPSBudWxsOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29u
dGFpbmVyLnJlbW92ZUNoaWxkKG5vZGUpOworICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQobm9kZSk7CiAgICAgICB9CiAgICAgICByZXR1cm4gbmV4dDsKICAgICB9CiAKLSAgICB2
YXIgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpLCBsaW5lTm8gPSBmcm9tOwotICAgIGNtLnZp
ZXcuZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChuZXh0SW50
YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gbGluZU5vKSBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0
KCk7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGxpbmUpKSB7CisgICAgdmFyIG5leHRJbnRhY3Qg
PSBpbnRhY3Quc2hpZnQoKSwgbGluZU4gPSBmcm9tOworICAgIGNtLmRvYy5pdGVyKGZyb20sIHRv
LCBmdW5jdGlvbihsaW5lKSB7CisgICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRv
ID09IGxpbmVOKSBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCk7CisgICAgICBpZiAobGluZUlz
SGlkZGVuKGNtLmRvYywgbGluZSkpIHsKICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDApIHVw
ZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICB9IGVsc2UgaWYgKG5leHRJbnRhY3QgJiYg
bmV4dEludGFjdC5mcm9tIDw9IGxpbmVObyAmJiBuZXh0SW50YWN0LnRvID4gbGluZU5vKSB7Cisg
ICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyLnByZXZpb3VzU2libGluZykgZm9yICh2YXIg
aSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgaWYgKGxpbmUu
d2lkZ2V0c1tpXS5zaG93SWZIaWRkZW4pIHsKKyAgICAgICAgICAgIHZhciBwcmV2ID0gY3VyLnBy
ZXZpb3VzU2libGluZzsKKyAgICAgICAgICAgIGlmICgvcHJlL2kudGVzdChwcmV2Lm5vZGVOYW1l
KSkgeworICAgICAgICAgICAgICB2YXIgd3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiByZWxhdGl2ZSIpOworICAgICAgICAgICAgICBwcmV2LnBhcmVudE5vZGUucmVwbGFj
ZUNoaWxkKHdyYXAsIHByZXYpOworICAgICAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHByZXYp
OworICAgICAgICAgICAgICBwcmV2ID0gd3JhcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciB3bm9kZSA9IHByZXYuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBbbGluZS53aWRnZXRzW2ld
Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikpOworICAgICAgICAgICAgcG9zaXRpb25M
aW5lV2lkZ2V0KGxpbmUud2lkZ2V0c1tpXSwgd25vZGUsIHByZXYsIGRpbXMpOworICAgICAgICAg
IH0KKyAgICAgIH0gZWxzZSBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LmZyb20gPD0gbGlu
ZU4gJiYgbmV4dEludGFjdC50byA+IGxpbmVOKSB7CiAgICAgICAgIC8vIFRoaXMgbGluZSBpcyBp
bnRhY3QuIFNraXAgdG8gdGhlIGFjdHVhbCBub2RlLiBVcGRhdGUgaXRzCiAgICAgICAgIC8vIGxp
bmUgbnVtYmVyIGlmIG5lZWRlZC4KICAgICAgICAgd2hpbGUgKGN1ci5saW5lT2JqICE9IGxpbmUp
IGN1ciA9IHJtKGN1cik7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJz
RnJvbSA8PSBsaW5lTm8gJiYgY3VyLmxpbmVOdW1iZXIpCi0gICAgICAgICAgc2V0VGV4dENvbnRl
bnQoY3VyLmxpbmVOdW1iZXIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU5vKSk7Cisg
ICAgICAgIGlmIChsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBj
dXIubGluZU51bWJlcikKKyAgICAgICAgICBzZXRUZXh0Q29udGVudChjdXIubGluZU51bWJlciwg
bGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTikpOwogICAgICAgICBjdXIgPSBjdXIubmV4
dFNpYmxpbmc7CiAgICAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgbGluZXMgd2l0aCB3aWRn
ZXRzLCBtYWtlIGFuIGF0dGVtcHQgdG8gZmluZCBhbmQgcmV1c2UKKyAgICAgICAgLy8gdGhlIGV4
aXN0aW5nIGVsZW1lbnQsIHNvIHRoYXQgd2lkZ2V0cyBhcmVuJ3QgbmVlZGxlc3NseQorICAgICAg
ICAvLyByZW1vdmVkIGFuZCByZS1pbnNlcnRlZCBpbnRvIHRoZSBkb20KKyAgICAgICAgaWYgKGxp
bmUud2lkZ2V0cykgZm9yICh2YXIgaiA9IDAsIHNlYXJjaCA9IGN1ciwgcmV1c2U7IHNlYXJjaCAm
JiBqIDwgMjA7ICsraiwgc2VhcmNoID0gc2VhcmNoLm5leHRTaWJsaW5nKQorICAgICAgICAgIGlm
IChzZWFyY2gubGluZU9iaiA9PSBsaW5lICYmIC9kaXYvaS50ZXN0KHNlYXJjaC5ub2RlTmFtZSkp
IHsgcmV1c2UgPSBzZWFyY2g7IGJyZWFrOyB9CiAgICAgICAgIC8vIFRoaXMgbGluZSBuZWVkcyB0
byBiZSBnZW5lcmF0ZWQuCi0gICAgICAgIHZhciBsaW5lTm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQo
Y20sIGxpbmUsIGxpbmVObywgZGltcyk7Ci0gICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUo
bGluZU5vZGUsIGN1cik7CisgICAgICAgIHZhciBsaW5lTm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQo
Y20sIGxpbmUsIGxpbmVOLCBkaW1zLCByZXVzZSk7CisgICAgICAgIGlmIChsaW5lTm9kZSAhPSBy
ZXVzZSkgeworICAgICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUobGluZU5vZGUsIGN1cik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgd2hpbGUgKGN1ciAhPSByZXVzZSkgY3VyID0g
cm0oY3VyKTsKKyAgICAgICAgICBjdXIgPSBjdXIubmV4dFNpYmxpbmc7CisgICAgICAgIH0KKwog
ICAgICAgICBsaW5lTm9kZS5saW5lT2JqID0gbGluZTsKICAgICAgIH0KLSAgICAgICsrbGluZU5v
OworICAgICAgKytsaW5lTjsKICAgICB9KTsKICAgICB3aGlsZSAoY3VyKSBjdXIgPSBybShjdXIp
OwogICB9CiAKLSAgZnVuY3Rpb24gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU5vLCBk
aW1zKSB7CisgIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmUsIGxpbmVObywgZGlt
cywgcmV1c2UpIHsKICAgICB2YXIgbGluZUVsZW1lbnQgPSBsaW5lQ29udGVudChjbSwgbGluZSk7
Ci0gICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5OwotCi0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICFtYXJrZXJzICYmICFs
aW5lLmJnQ2xhc3MgJiYgIWxpbmUud3JhcENsYXNzICYmCi0gICAgICAgICghbGluZS53aWRnZXRz
IHx8ICFsaW5lLndpZGdldHMubGVuZ3RoKSkgcmV0dXJuIGxpbmVFbGVtZW50OworICAgIHZhciBt
YXJrZXJzID0gbGluZS5ndXR0ZXJNYXJrZXJzLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgd3JhcDsK
IAotICAgIC8vIExpbmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzIG9yIGEgYmFja2dyb3VuZCBjbGFz
cyBuZWVkCi0gICAgLy8gdG8gYmUgd3JhcHBlZCBhZ2FpbiwgYW5kIGhhdmUgdGhlIGV4dHJhIGVs
ZW1lbnRzIGFkZGVkCi0gICAgLy8gdG8gdGhlIHdyYXBwZXIgZGl2CisgICAgaWYgKCFjbS5vcHRp
b25zLmxpbmVOdW1iZXJzICYmICFtYXJrZXJzICYmICFsaW5lLmJnQ2xhc3MgJiYgIWxpbmUud3Jh
cENsYXNzICYmICFsaW5lLndpZGdldHMpCisgICAgICByZXR1cm4gbGluZUVsZW1lbnQ7CiAKLSAg
ICB2YXIgd3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbGluZS53cmFwQ2xhc3MsICJwb3NpdGlvbjog
cmVsYXRpdmUiKTsKKyAgICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBv
ciBhIGJhY2tncm91bmQgY2xhc3MgbmVlZAorICAgIC8vIHRvIGJlIHdyYXBwZWQgYWdhaW4sIGFu
ZCBoYXZlIHRoZSBleHRyYSBlbGVtZW50cyBhZGRlZCB0byB0aGUKKyAgICAvLyB3cmFwcGVyIGRp
dgorICAgIAorICAgIGlmIChyZXVzZSkgeworICAgICAgcmV1c2UuYWxpZ25hYmxlID0gbnVsbDsK
KyAgICAgIHZhciBpc09rID0gdHJ1ZSwgd2lkZ2V0c1NlZW4gPSAwOworICAgICAgZm9yICh2YXIg
biA9IHJldXNlLmZpcnN0Q2hpbGQsIG5leHQ7IG47IG4gPSBuZXh0KSB7CisgICAgICAgIG5leHQg
PSBuLm5leHRTaWJsaW5nOworICAgICAgICBpZiAoIS9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxi
Ly50ZXN0KG4uY2xhc3NOYW1lKSkgeworICAgICAgICAgIHJldXNlLnJlbW92ZUNoaWxkKG4pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBmaXJzdCA9IHRydWU7
IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB3aWRnZXQg
PSBsaW5lLndpZGdldHNbaV0sIGlzRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghd2lk
Z2V0LmFib3ZlKSB7IGlzRmlyc3QgPSBmaXJzdDsgZmlyc3QgPSBmYWxzZTsgfQorICAgICAgICAg
ICAgaWYgKHdpZGdldC5ub2RlID09IG4uZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgICBwb3Np
dGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBuLCByZXVzZSwgZGltcyk7CisgICAgICAgICAgICAgICsr
d2lkZ2V0c1NlZW47CisgICAgICAgICAgICAgIGlmIChpc0ZpcnN0KSByZXVzZS5pbnNlcnRCZWZv
cmUobGluZUVsZW1lbnQsIG4pOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGkgPT0gbGluZS53aWRnZXRzLmxlbmd0aCkgeyBp
c09rID0gZmFsc2U7IGJyZWFrOyB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChpc09r
ICYmIHdpZGdldHNTZWVuID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsKKyAgICAgICAgd3JhcCA9
IHJldXNlOworICAgICAgICByZXVzZS5jbGFzc05hbWUgPSBsaW5lLndyYXBDbGFzcyB8fCAiIjsK
KyAgICAgIH0KKyAgICB9CisgICAgaWYgKCF3cmFwKSB7CisgICAgICB3cmFwID0gZWx0KCJkaXYi
LCBudWxsLCBsaW5lLndyYXBDbGFzcywgInBvc2l0aW9uOiByZWxhdGl2ZSIpOworICAgICAgd3Jh
cC5hcHBlbmRDaGlsZChsaW5lRWxlbWVudCk7CisgICAgfQorICAgIC8vIEtsdWRnZSB0byBtYWtl
IHN1cmUgdGhlIHN0eWxlZCBlbGVtZW50IGxpZXMgYmVoaW5kIHRoZSBzZWxlY3Rpb24gKGJ5IHot
aW5kZXgpCisgICAgaWYgKGxpbmUuYmdDbGFzcykKKyAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGVs
dCgiZGl2IiwgIlx1MDBhMCIsIGxpbmUuYmdDbGFzcyArICIgQ29kZU1pcnJvci1saW5lYmFja2dy
b3VuZCIpLCB3cmFwLmZpcnN0Q2hpbGQpOwogICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJz
IHx8IG1hcmtlcnMpIHsKLSAgICAgIHZhciBndXR0ZXJXcmFwID0gd3JhcC5hcHBlbmRDaGlsZChl
bHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zLmZpeGVkUG9zICsg
InB4IikpOwotICAgICAgd3JhcC5hbGlnbmFibGUgPSBbZ3V0dGVyV3JhcF07CisgICAgICB2YXIg
Z3V0dGVyV3JhcCA9IHdyYXAuaW5zZXJ0QmVmb3JlKGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3Mg
OiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwLmZpcnN0Q2hpbGQpOworICAgICAgaWYgKGNtLm9wdGlv
bnMuZml4ZWRHdXR0ZXIpICh3cmFwLmFsaWduYWJsZSB8fCAod3JhcC5hbGlnbmFibGUgPSBbXSkp
LnB1c2goZ3V0dGVyV3JhcCk7CiAgICAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAo
IW1hcmtlcnMgfHwgIW1hcmtlcnNbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSkpCiAgICAgICAg
IHdyYXAubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoCiAgICAgICAgICAgZWx0
KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVObyksCkBAIC02MDgsNDQgKzY4
OSw0MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMuZ3V0dGVyTGVmdFtpZF0gKyAicHg7IHdpZHRo
OiAiICsgZGltcy5ndXR0ZXJXaWR0aFtpZF0gKyAicHgiKSk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgLy8gS2x1ZGdlIHRvIG1ha2Ugc3VyZSB0aGUgc3R5bGVkIGVsZW1lbnQgbGllcyBiZWhpbmQg
dGhlIHNlbGVjdGlvbiAoYnkgei1pbmRleCkKLSAgICBpZiAobGluZS5iZ0NsYXNzKQotICAgICAg
d3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCBsaW5lLmJnQ2xhc3MgKyAiIENv
ZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSk7Ci0gICAgd3JhcC5hcHBlbmRDaGlsZChsaW5lRWxl
bWVudCk7Ci0gICAgaWYgKGxpbmUud2lkZ2V0cykKLSAgICAgIGZvciAodmFyIGkgPSAwLCB3cyA9
IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciB3aWRnZXQg
PSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNvZGVNaXJyb3ItbGlu
ZXdpZGdldCIpOwotICAgICAgICBub2RlLndpZGdldCA9IHdpZGdldDsKLSAgICAgICAgaWYgKHdp
ZGdldC5ub0hTY3JvbGwpIHsKLSAgICAgICAgICAod3JhcC5hbGlnbmFibGUgfHwgKHdyYXAuYWxp
Z25hYmxlID0gW10pKS5wdXNoKG5vZGUpOwotICAgICAgICAgIHZhciB3aWR0aCA9IGRpbXMud3Jh
cHBlcldpZHRoOwotICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAi
cHgiOwotICAgICAgICAgIGlmICghd2lkZ2V0LmNvdmVyR3V0dGVyKSB7Ci0gICAgICAgICAgICB3
aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7Ci0gICAgICAgICAgICBub2RlLnN0eWxlLnBh
ZGRpbmdMZWZ0ID0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IjsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgbm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAod2lkZ2V0LmNvdmVyR3V0dGVyKSB7Ci0gICAgICAgICAgbm9kZS5zdHlsZS56SW5k
ZXggPSA1OwotICAgICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAg
ICAgICAgIGlmICghd2lkZ2V0Lm5vSFNjcm9sbCkgbm9kZS5zdHlsZS5tYXJnaW5MZWZ0ID0gLWRp
bXMuZ3V0dGVyVG90YWxXaWR0aCArICJweCI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdpZGdl
dC5hYm92ZSkKLSAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZShub2RlLCBjbS5vcHRpb25zLmxp
bmVOdW1iZXJzICYmIGxpbmUuaGVpZ2h0ICE9IDAgPyBndXR0ZXJXcmFwIDogbGluZUVsZW1lbnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChub2RlKTsKLSAgICAg
IH0KLQogICAgIGlmIChpZV9sdDgpIHdyYXAuc3R5bGUuekluZGV4ID0gMjsKKyAgICBpZiAobGlu
ZS53aWRnZXRzICYmIHdyYXAgIT0gcmV1c2UpIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lk
Z2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5v
ZGUgPSBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTsK
KyAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIHdyYXAsIGRpbXMpOworICAg
ICAgaWYgKHdpZGdldC5hYm92ZSkKKyAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20u
b3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5lLmhlaWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxp
bmVFbGVtZW50KTsKKyAgICAgIGVsc2UKKyAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChub2RlKTsK
KyAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgInJlZHJhdyIpOworICAgIH0KICAgICByZXR1cm4g
d3JhcDsKICAgfQogCisgIGZ1bmN0aW9uIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUs
IHdyYXAsIGRpbXMpIHsKKyAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgeworICAgICAgKHdyYXAu
YWxpZ25hYmxlIHx8ICh3cmFwLmFsaWduYWJsZSA9IFtdKSkucHVzaChub2RlKTsKKyAgICAgIHZh
ciB3aWR0aCA9IGRpbXMud3JhcHBlcldpZHRoOworICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gZGlt
cy5maXhlZFBvcyArICJweCI7CisgICAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikgeworICAg
ICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7CisgICAgICAgIG5vZGUuc3R5bGUu
cGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgiOworICAgICAgfQorICAg
ICAgbm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKKyAgICB9CisgICAgaWYgKHdpZGdl
dC5jb3Zlckd1dHRlcikgeworICAgICAgbm9kZS5zdHlsZS56SW5kZXggPSA1OworICAgICAgbm9k
ZS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CisgICAgICBpZiAoIXdpZGdldC5ub0hTY3Jv
bGwpIG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1kaW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgi
OworICAgIH0KKyAgfQorCiAgIC8vIFNFTEVDVElPTiAvIENVUlNPUgogCiAgIGZ1bmN0aW9uIHVw
ZGF0ZVNlbGVjdGlvbihjbSkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB2
YXIgY29sbGFwc2VkID0gcG9zRXEoY20udmlldy5zZWwuZnJvbSwgY20udmlldy5zZWwudG8pOwor
ICAgIHZhciBjb2xsYXBzZWQgPSBwb3NFcShjbS5kb2Muc2VsLmZyb20sIGNtLmRvYy5zZWwudG8p
OwogICAgIGlmIChjb2xsYXBzZWQgfHwgY20ub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGlu
ZykKICAgICAgIHVwZGF0ZVNlbGVjdGlvbkN1cnNvcihjbSk7CiAgICAgZWxzZQpAQCAtNjU2LDgg
KzczNSw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGlzcGxh
eS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKIAogICAgIC8vIE1vdmUgdGhl
IGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0
aWZhY3RzCi0gICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLnZpZXcuc2VsLmhl
YWQsICJkaXYiKTsKLSAgICB2YXIgd3JhcE9mZiA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSwgbGluZU9mZiA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgY20uZG9jLnNlbC5o
ZWFkLCAiZGl2Iik7CisgICAgdmFyIHdyYXBPZmYgPSBnZXRSZWN0KGRpc3BsYXkud3JhcHBlciks
IGxpbmVPZmYgPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7CiAgICAgZGlzcGxheS5pbnB1dERp
di5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50
SGVpZ2h0IC0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKSArICJw
eCI7CiAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5t
aW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCkBAIC02NjYsNyArNzQ1LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gTm8gc2VsZWN0aW9uLCBw
bGFpbiBjdXJzb3IKICAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uQ3Vyc29yKGNtKSB7Ci0gICAg
dmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBwb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLnZpZXcu
c2VsLmhlYWQsICJkaXYiKTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHBvcyA9IGN1
cnNvckNvb3JkcyhjbSwgY20uZG9jLnNlbC5oZWFkLCAiZGl2Iik7CiAgICAgZGlzcGxheS5jdXJz
b3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKICAgICBkaXNwbGF5LmN1cnNvci5zdHls
ZS50b3AgPSBwb3MudG9wICsgInB4IjsKICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5oZWlnaHQg
PSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBjbS5vcHRpb25zLmN1cnNvckhl
aWdodCArICJweCI7CkBAIC02ODIsNyArNzYxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgLy8gSGlnaGxpZ2h0IHNlbGVjdGlvbgogICBmdW5jdGlvbiB1cGRhdGVT
ZWxlY3Rpb25SYW5nZShjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0g
Y20udmlldy5kb2MsIHNlbCA9IGNtLnZpZXcuc2VsOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlz
cGxheSwgZG9jID0gY20uZG9jLCBzZWwgPSBjbS5kb2Muc2VsOwogICAgIHZhciBmcmFnbWVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICB2YXIgY2xpZW50V2lkdGgg
PSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRXaWR0aCwgcGwgPSBwYWRkaW5nTGVmdChjbS5kaXNw
bGF5KTsKIApAQCAtNjk3LDcgKzc3Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7CiAgICAgICB2YXIg
bGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIHJWYWwgPSByZXRUb3AgPyBJbmZpbml0eSA6
IC1JbmZpbml0eTsKICAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCkgewotICAgICAgICByZXR1cm4g
Y2hhckNvb3JkcyhjbSwge2xpbmU6IGxpbmUsIGNoOiBjaH0sICJkaXYiLCBsaW5lT2JqKTsKKyAg
ICAgICAgcmV0dXJuIGNoYXJDb29yZHMoY20sIFBvcyhsaW5lLCBjaCksICJkaXYiLCBsaW5lT2Jq
KTsKICAgICAgIH0KIAogICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhnZXRPcmRlcihsaW5lT2Jq
KSwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlv
bihmcm9tLCB0bywgZGlyKSB7CkBAIC03NzUsMzMgKzg1NCwzMyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgLy8gSElHSExJR0hUIFdPUktFUgogCiAgIGZ1bmN0aW9uIHN0
YXJ0V29ya2VyKGNtLCB0aW1lKSB7Ci0gICAgaWYgKGNtLnZpZXcubW9kZS5zdGFydFN0YXRlICYm
IGNtLnZpZXcuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnNob3dpbmdUbykKLSAgICAgIGNtLnZpZXcu
aGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsKKyAgICBpZiAo
Y20uZG9jLm1vZGUuc3RhcnRTdGF0ZSAmJiBjbS5kb2MuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnNo
b3dpbmdUbykKKyAgICAgIGNtLnN0YXRlLmhpZ2hsaWdodC5zZXQodGltZSwgYmluZChoaWdobGln
aHRXb3JrZXIsIGNtKSk7CiAgIH0KIAogICBmdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoY20pIHsK
LSAgICB2YXIgdmlldyA9IGNtLnZpZXcsIGRvYyA9IHZpZXcuZG9jOwotICAgIGlmICh2aWV3LmZy
b250aWVyID49IGNtLmRpc3BsYXkuc2hvd2luZ1RvKSByZXR1cm47CisgICAgdmFyIGRvYyA9IGNt
LmRvYzsKKyAgICBpZiAoZG9jLmZyb250aWVyIDwgZG9jLmZpcnN0KSBkb2MuZnJvbnRpZXIgPSBk
b2MuZmlyc3Q7CisgICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnNob3dpbmdUbykg
cmV0dXJuOwogICAgIHZhciBlbmQgPSArbmV3IERhdGUgKyBjbS5vcHRpb25zLndvcmtUaW1lOwot
ICAgIHZhciBzdGF0ZSA9IGNvcHlTdGF0ZSh2aWV3Lm1vZGUsIGdldFN0YXRlQmVmb3JlKGNtLCB2
aWV3LmZyb250aWVyKSk7CisgICAgdmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRT
dGF0ZUJlZm9yZShjbSwgZG9jLmZyb250aWVyKSk7CiAgICAgdmFyIGNoYW5nZWQgPSBbXSwgcHJl
dkNoYW5nZTsKLSAgICBkb2MuaXRlcih2aWV3LmZyb250aWVyLCBNYXRoLm1pbihkb2Muc2l6ZSwg
Y20uZGlzcGxheS5zaG93aW5nVG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAo
dmlldy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnNob3dpbmdGcm9tKSB7IC8vIFZpc2libGUKKyAg
ICBkb2MuaXRlcihkb2MuZnJvbnRpZXIsIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCBj
bS5kaXNwbGF5LnNob3dpbmdUbyArIDUwMCksIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGlmIChk
b2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSkgeyAvLyBWaXNpYmxlCiAgICAg
ICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlczsKICAgICAgICAgbGluZS5zdHlsZXMgPSBo
aWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSk7CiAgICAgICAgIHZhciBpc2NoYW5nZSA9ICFv
bGRTdHlsZXMgfHwgb2xkU3R5bGVzLmxlbmd0aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGg7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7ICFpc2NoYW5nZSAmJiBpIDwgb2xkU3R5bGVzLmxlbmd0
aDsgKytpKSBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsKICAgICAg
ICAgaWYgKGlzY2hhbmdlKSB7Ci0gICAgICAgICAgaWYgKHByZXZDaGFuZ2UgJiYgcHJldkNoYW5n
ZS5lbmQgPT0gdmlldy5mcm9udGllcikgcHJldkNoYW5nZS5lbmQrKzsKLSAgICAgICAgICBlbHNl
IGNoYW5nZWQucHVzaChwcmV2Q2hhbmdlID0ge3N0YXJ0OiB2aWV3LmZyb250aWVyLCBlbmQ6IHZp
ZXcuZnJvbnRpZXIgKyAxfSk7CisgICAgICAgICAgaWYgKHByZXZDaGFuZ2UgJiYgcHJldkNoYW5n
ZS5lbmQgPT0gZG9jLmZyb250aWVyKSBwcmV2Q2hhbmdlLmVuZCsrOworICAgICAgICAgIGVsc2Ug
Y2hhbmdlZC5wdXNoKHByZXZDaGFuZ2UgPSB7c3RhcnQ6IGRvYy5mcm9udGllciwgZW5kOiBkb2Mu
ZnJvbnRpZXIgKyAxfSk7CiAgICAgICAgIH0KLSAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29w
eVN0YXRlKHZpZXcubW9kZSwgc3RhdGUpOworICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5
U3RhdGUoZG9jLm1vZGUsIHN0YXRlKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHByb2Nlc3NM
aW5lKGNtLCBsaW5lLCBzdGF0ZSk7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IHZpZXcuZnJv
bnRpZXIgJSA1ID09IDAgPyBjb3B5U3RhdGUodmlldy5tb2RlLCBzdGF0ZSkgOiBudWxsOworICAg
ICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBkb2MuZnJvbnRpZXIgJSA1ID09IDAgPyBjb3B5U3RhdGUo
ZG9jLm1vZGUsIHN0YXRlKSA6IG51bGw7CiAgICAgICB9Ci0gICAgICArK3ZpZXcuZnJvbnRpZXI7
CisgICAgICArK2RvYy5mcm9udGllcjsKICAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHsKICAg
ICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC04MjAsMTAgKzg5OSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQg
dGhlIGxlYXN0IGNvbnRleHQgdG8KICAgLy8gcGFyc2UgY29ycmVjdGx5LgogICBmdW5jdGlvbiBm
aW5kU3RhcnRMaW5lKGNtLCBuKSB7Ci0gICAgdmFyIG1pbmluZGVudCwgbWlubGluZSwgZG9jID0g
Y20udmlldy5kb2M7CisgICAgdmFyIG1pbmluZGVudCwgbWlubGluZSwgZG9jID0gY20uZG9jOwog
ICAgIGZvciAodmFyIHNlYXJjaCA9IG4sIGxpbSA9IG4gLSAxMDA7IHNlYXJjaCA+IGxpbTsgLS1z
ZWFyY2gpIHsKLSAgICAgIGlmIChzZWFyY2ggPT0gMCkgcmV0dXJuIDA7Ci0gICAgICB2YXIgbGlu
ZSA9IGdldExpbmUoZG9jLCBzZWFyY2gtMSk7CisgICAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJz
dCkgcmV0dXJuIGRvYy5maXJzdDsKKyAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJj
aCAtIDEpOwogICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgcmV0dXJuIHNlYXJjaDsKICAgICAg
IHZhciBpbmRlbnRlZCA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwgY20ub3B0aW9ucy50
YWJTaXplKTsKICAgICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50ID4gaW5kZW50
ZWQpIHsKQEAgLTgzNSwxNSArOTE0LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICB9CiAKICAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4pIHsKLSAgICB2YXIg
dmlldyA9IGNtLnZpZXc7Ci0gICAgaWYgKCF2aWV3Lm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRy
dWU7Ci0gICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4pLCBzdGF0ZSA9IHBvcyAmJiBn
ZXRMaW5lKHZpZXcuZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKLSAgICBpZiAoIXN0YXRlKSBzdGF0
ZSA9IHN0YXJ0U3RhdGUodmlldy5tb2RlKTsKLSAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKHZp
ZXcubW9kZSwgc3RhdGUpOwotICAgIHZpZXcuZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5l
KSB7CisgICAgdmFyIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgICBp
ZiAoIWRvYy5tb2RlLnN0YXJ0U3RhdGUpIHJldHVybiB0cnVlOworICAgIHZhciBwb3MgPSBmaW5k
U3RhcnRMaW5lKGNtLCBuKSwgc3RhdGUgPSBwb3MgPiBkb2MuZmlyc3QgJiYgZ2V0TGluZShkb2Ms
IHBvcy0xKS5zdGF0ZUFmdGVyOworICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShk
b2MubW9kZSk7CisgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpOwor
ICAgIGRvYy5pdGVyKHBvcywgbiwgZnVuY3Rpb24obGluZSkgewogICAgICAgcHJvY2Vzc0xpbmUo
Y20sIGxpbmUsIHN0YXRlKTsKLSAgICAgIHZhciBzYXZlID0gcG9zID09IG4gLSAxIHx8IHBvcyAl
IDUgPT0gMCB8fCBwb3MgPj0gdmlldy5zaG93aW5nRnJvbSAmJiBwb3MgPCB2aWV3LnNob3dpbmdU
bzsKLSAgICAgIGxpbmUuc3RhdGVBZnRlciA9IHNhdmUgPyBjb3B5U3RhdGUodmlldy5tb2RlLCBz
dGF0ZSkgOiBudWxsOworICAgICAgdmFyIHNhdmUgPSBwb3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9
PSAwIHx8IHBvcyA+PSBkaXNwbGF5LnNob3dpbmdGcm9tICYmIHBvcyA8IGRpc3BsYXkuc2hvd2lu
Z1RvOworICAgICAgbGluZS5zdGF0ZUFmdGVyID0gc2F2ZSA/IGNvcHlTdGF0ZShkb2MubW9kZSwg
c3RhdGUpIDogbnVsbDsKICAgICAgICsrcG9zOwogICAgIH0pOwogICAgIHJldHVybiBzdGF0ZTsK
QEAgLTg1Myw3ICs5MzIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
CiAgIGZ1bmN0aW9uIHBhZGRpbmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFj
ZS5vZmZzZXRUb3A7fQogICBmdW5jdGlvbiBwYWRkaW5nTGVmdChkaXNwbGF5KSB7Ci0gICAgdmFy
IGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIGVsdCgicHJlIikpLmFw
cGVuZENoaWxkKGVsdCgic3BhbiIsICJ4IikpOworICAgIHZhciBlID0gcmVtb3ZlQ2hpbGRyZW5B
bmRBZGQoZGlzcGxheS5tZWFzdXJlLCBlbHQoInByZSIsIG51bGwsIG51bGwsICJ0ZXh0LWFsaWdu
OiBsZWZ0IikpLmFwcGVuZENoaWxkKGVsdCgic3BhbiIsICJ4IikpOwogICAgIHJldHVybiBlLm9m
ZnNldExlZnQ7CiAgIH0KIApAQCAtODc3LDE0ICs5NTYsMTYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZS5sZW5ndGg7ICsr
aSkgewogICAgICAgdmFyIG1lbW8gPSBjYWNoZVtpXTsKICAgICAgIGlmIChtZW1vLnRleHQgPT0g
bGluZS50ZXh0ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAmJgotICAg
ICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0aCkKKyAgICAg
ICAgICBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoID09IG1lbW8ud2lkdGggJiYKKyAgICAg
ICAgICBtZW1vLmNsYXNzZXMgPT0gbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLmJnQ2xhc3Mg
KyAifCIgKyBsaW5lLndyYXBDbGFzcykKICAgICAgICAgcmV0dXJuIG1lbW8ubWVhc3VyZTsKICAg
ICB9CiAgICAgCiAgICAgdmFyIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKTsK
ICAgICAvLyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCiAgICAgdmFyIG1lbW8gPSB7dGV4dDog
bGluZS50ZXh0LCB3aWR0aDogZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAg
ICAgICAgICBtYXJrZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTogbWVhc3VyZX07
CisgICAgICAgICAgICAgICAgbWFya2VkU3BhbnM6IGxpbmUubWFya2VkU3BhbnMsIG1lYXN1cmU6
IG1lYXN1cmUsCisgICAgICAgICAgICAgICAgY2xhc3NlczogbGluZS50ZXh0Q2xhc3MgKyAifCIg
KyBsaW5lLmJnQ2xhc3MgKyAifCIgKyBsaW5lLndyYXBDbGFzc307CiAgICAgaWYgKGNhY2hlLmxl
bmd0aCA9PSAxNikgY2FjaGVbKytkaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MgJSAxNl0gPSBt
ZW1vOwogICAgIGVsc2UgY2FjaGUucHVzaChtZW1vKTsKICAgICByZXR1cm4gbWVhc3VyZTsKQEAg
LTkyMSwxMCArMTAwMiwxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKIAotICAgIHZh
ciBvdXRlciA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICB2
YXIgb3V0ZXIgPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7CiAgICAgdmFyIHZyYW5nZXMgPSBb
XSwgZGF0YSA9IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCksIG1heEJvdCA9IHByZS5vZmZz
ZXRIZWlnaHQ7CisgICAgLy8gV29yayBhcm91bmQgYW4gSUU3LzggYnVnIHdoZXJlIGl0IHdpbGwg
c29tZXRpbWVzIGhhdmUgcmFuZG9tbHkKKyAgICAvLyByZXBsYWNlZCBvdXIgcHJlIHdpdGggYSBj
bG9uZSBhdCB0aGlzIHBvaW50LgorICAgIGlmIChpZV9sdDkgJiYgZGlzcGxheS5tZWFzdXJlLmZp
cnN0ICE9IHByZSkKKyAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwg
cHJlKTsKKwogICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytp
KSBpZiAoY3VyID0gbWVhc3VyZVtpXSkgewotICAgICAgdmFyIHNpemUgPSBjdXIuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgICB2YXIgc2l6ZSA9IGdldFJlY3QoY3VyKTsKICAgICAgIHZh
ciB0b3AgPSBNYXRoLm1heCgwLCBzaXplLnRvcCAtIG91dGVyLnRvcCksIGJvdCA9IE1hdGgubWlu
KHNpemUuYm90dG9tIC0gb3V0ZXIudG9wLCBtYXhCb3QpOwogICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCB2cmFuZ2VzLmxlbmd0aDsgaiArPSAyKSB7CiAgICAgICAgIHZhciBydG9wID0gdnJhbmdl
c1tqXSwgcmJvdCA9IHZyYW5nZXNbaisxXTsKQEAgLTkzOCwyNSArMTAyNCwzNCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYg
KGogPT0gdnJhbmdlcy5sZW5ndGgpIHZyYW5nZXMucHVzaCh0b3AsIGJvdCk7Ci0gICAgICBkYXRh
W2ldID0ge2xlZnQ6IHNpemUubGVmdCAtIG91dGVyLmxlZnQsIHJpZ2h0OiBzaXplLnJpZ2h0IC0g
b3V0ZXIubGVmdCwgdG9wOiBqfTsKKyAgICAgIHZhciByaWdodCA9IHNpemUucmlnaHQ7CisgICAg
ICBpZiAoY3VyLm1lYXN1cmVSaWdodCkgcmlnaHQgPSBnZXRSZWN0KGN1ci5tZWFzdXJlUmlnaHQp
LmxlZnQ7CisgICAgICBkYXRhW2ldID0ge2xlZnQ6IHNpemUubGVmdCAtIG91dGVyLmxlZnQsIHJp
Z2h0OiByaWdodCAtIG91dGVyLmxlZnQsIHRvcDogan07CiAgICAgfQogICAgIGZvciAodmFyIGkg
PSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgewogICAg
ICAgdmFyIHZyID0gY3VyLnRvcDsKICAgICAgIGN1ci50b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJv
dHRvbSA9IHZyYW5nZXNbdnIrMV07CiAgICAgfQorICAgIGlmICghY20ub3B0aW9ucy5saW5lV3Jh
cHBpbmcpIHsKKyAgICAgIHZhciBsYXN0ID0gcHJlLmxhc3RDaGlsZDsKKyAgICAgIGlmIChsYXN0
Lm5vZGVUeXBlID09IDMpIGxhc3QgPSBwcmUuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgIlx1MjAw
YiIpKTsKKyAgICAgIGRhdGEud2lkdGggPSBnZXRSZWN0KGxhc3QpLnJpZ2h0IC0gb3V0ZXIubGVm
dDsKKyAgICB9CisKICAgICByZXR1cm4gZGF0YTsKICAgfQogCiAgIGZ1bmN0aW9uIGNsZWFyQ2Fj
aGVzKGNtKSB7CiAgICAgY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9IGNtLmRp
c3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyA9IDA7CiAgICAgY20uZGlzcGxheS5jYWNoZWRDaGFy
V2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBudWxsOwotICAgIGNtLnZpZXcu
bWF4TGluZUNoYW5nZWQgPSB0cnVlOworICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0
cnVlOworICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVsbDsKICAgfQogCiAgIC8vIENv
bnRleHQgaXMgb25lIG9mICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIv
bnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiCiAgIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwg
bGluZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAgIGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53
aWRnZXRzW2ldLmFib3ZlKSB7Ci0gICAgICB2YXIgc2l6ZSA9IGxpbmVPYmoud2lkZ2V0c1tpXS5u
b2RlLm9mZnNldEhlaWdodDsKKyAgICAgIHZhciBzaXplID0gd2lkZ2V0SGVpZ2h0KGxpbmVPYmou
d2lkZ2V0c1tpXSk7CiAgICAgICByZWN0LnRvcCArPSBzaXplOyByZWN0LmJvdHRvbSArPSBzaXpl
OwogICAgIH0KICAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJldHVybiByZWN0OwpAQCAtOTY0
LDcgKzEwNTksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIg
eU9mZiA9IGhlaWdodEF0TGluZShjbSwgbGluZU9iaik7CiAgICAgaWYgKGNvbnRleHQgIT0gImxv
Y2FsIikgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7CiAgICAgaWYgKGNvbnRleHQgPT0g
InBhZ2UiKSB7Ci0gICAgICB2YXIgbE9mZiA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICAgICAgdmFyIGxPZmYgPSBnZXRSZWN0KGNtLmRpc3BsYXkubGlu
ZVNwYWNlKTsKICAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAod2luZG93LnBhZ2VZT2Zmc2V0IHx8
IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wKTsK
ICAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQpOwogICAg
ICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKQEAgLTk3NCwxMiArMTA2
OSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0
aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaikgewotICAgIGlmICghbGlu
ZU9iaikgbGluZU9iaiA9IGdldExpbmUoY20udmlldy5kb2MsIHBvcy5saW5lKTsKKyAgICBpZiAo
IWxpbmVPYmopIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgIHJldHVy
biBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBw
b3MuY2gpLCBjb250ZXh0KTsKICAgfQogCiAgIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9z
LCBjb250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVudCkgewotICAgIGxpbmVPYmogPSBsaW5lT2Jq
IHx8IGdldExpbmUoY20udmlldy5kb2MsIHBvcy5saW5lKTsKKyAgICBsaW5lT2JqID0gbGluZU9i
aiB8fCBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgIGlmICghbWVhc3VyZW1lbnQpIG1l
YXN1cmVtZW50ID0gbWVhc3VyZUxpbmUoY20sIGxpbmVPYmopOwogICAgIGZ1bmN0aW9uIGdldChj
aCwgcmlnaHQpIHsKICAgICAgIHZhciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIGNoLCBt
ZWFzdXJlbWVudCk7CkBAIC05OTQsMTAgKzEwODksOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIGlmIChwYXJ0LmZyb20gPCBjaCAmJiBwYXJ0LnRvID4gY2gpIHJl
dHVybiBnZXQoY2gsIHJ0bCk7CiAgICAgICB2YXIgbGVmdCA9IHJ0bCA/IHBhcnQudG8gOiBwYXJ0
LmZyb20sIHJpZ2h0ID0gcnRsID8gcGFydC5mcm9tIDogcGFydC50bzsKICAgICAgIGlmIChsZWZ0
ID09IGNoKSB7Ci0gICAgICAgIC8vIE9wZXJhIGFuZCBJRSByZXR1cm4gYm9ndXMgb2Zmc2V0cyBh
bmQgd2lkdGhzIGZvciBlZGdlcwotICAgICAgICAvLyB3aGVyZSB0aGUgZGlyZWN0aW9uIGZsaXBz
LCBidXQgb25seSBmb3IgdGhlIHNpZGUgd2l0aCB0aGUKLSAgICAgICAgLy8gbG93ZXIgbGV2ZWwu
IFNvIHdlIHRyeSB0byB1c2UgdGhlIHNpZGUgd2l0aCB0aGUgaGlnaGVyCi0gICAgICAgIC8vIGxl
dmVsLgorICAgICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIG9mZnNldHMgYW5kIHdpZHRocyBmb3Ig
ZWRnZXMgd2hlcmUgdGhlCisgICAgICAgIC8vIGRpcmVjdGlvbiBmbGlwcywgYnV0IG9ubHkgZm9y
IHRoZSBzaWRlIHdpdGggdGhlIGxvd2VyCisgICAgICAgIC8vIGxldmVsLiBTbyB3ZSB0cnkgdG8g
dXNlIHRoZSBzaWRlIHdpdGggdGhlIGhpZ2hlciBsZXZlbC4KICAgICAgICAgaWYgKGkgJiYgcGFy
dC5sZXZlbCA8IChuYiA9IG9yZGVyW2ktMV0pLmxldmVsKSBoZXJlID0gZ2V0KG5iLmxldmVsICUg
MiA/IG5iLmZyb20gOiBuYi50byAtIDEsIHRydWUpOwogICAgICAgICBlbHNlIGhlcmUgPSBnZXQo
cnRsICYmIHBhcnQuZnJvbSAhPSBwYXJ0LnRvID8gY2ggLSAxIDogY2gpOwogICAgICAgICBpZiAo
cnRsID09IGxpbmVkaXIpIG1haW4gPSBoZXJlOyBlbHNlIG90aGVyID0gaGVyZTsKQEAgLTEwMTUs
MjEgKzExMDksMjkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIG1haW47CiAgIH0KIAorICBmdW5jdGlvbiBQb3NNYXliZU91dHNpZGUobGluZSwgY2gsIG91
dHNpZGUpIHsKKyAgICB2YXIgcG9zID0gbmV3IFBvcyhsaW5lLCBjaCk7CisgICAgaWYgKG91dHNp
ZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKKyAgICByZXR1cm4gcG9zOworICB9CisKICAgLy8gQ29v
cmRzIG11c3QgYmUgbGluZVNwYWNlLWxvY2FsCiAgIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoY20sIHgs
IHkpIHsKLSAgICB2YXIgZG9jID0gY20udmlldy5kb2M7CisgICAgdmFyIGRvYyA9IGNtLmRvYzsK
ICAgICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoeSA8IDApIHJldHVybiB7
bGluZTogMCwgY2g6IDAsIG91dHNpZGU6IHRydWV9OwotICAgIHZhciBsaW5lTm8gPSBsaW5lQXRI
ZWlnaHQoZG9jLCB5KTsKLSAgICBpZiAobGluZU5vID49IGRvYy5zaXplKSByZXR1cm4ge2xpbmU6
IGRvYy5zaXplIC0gMSwgY2g6IGdldExpbmUoZG9jLCBkb2Muc2l6ZSAtIDEpLnRleHQubGVuZ3Ro
fTsKKyAgICBpZiAoeSA8IDApIHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0LCAwLCB0
cnVlKTsKKyAgICB2YXIgbGluZU5vID0gbGluZUF0SGVpZ2h0KGRvYywgeSksIGxhc3QgPSBkb2Mu
Zmlyc3QgKyBkb2Muc2l6ZSAtIDE7CisgICAgaWYgKGxpbmVObyA+IGxhc3QpCisgICAgICByZXR1
cm4gUG9zTWF5YmVPdXRzaWRlKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2Ms
IGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlKTsKICAgICBpZiAoeCA8IDApIHggPSAwOwogCiAgICAg
Zm9yICg7OykgewogICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU5vKTsKICAg
ICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5vLCB4LCB5
KTsKICAgICAgIHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZU9iaik7Ci0gICAg
ICBpZiAobWVyZ2VkICYmIGZvdW5kLmNoID09IGxpbmVSaWdodChsaW5lT2JqKSkKLSAgICAgICAg
bGluZU5vID0gbWVyZ2VkLmZpbmQoKS50by5saW5lOworICAgICAgdmFyIG1lcmdlZFBvcyA9IG1l
cmdlZCAmJiBtZXJnZWQuZmluZCgpOworICAgICAgaWYgKG1lcmdlZCAmJiBmb3VuZC5jaCA+PSBt
ZXJnZWRQb3MuZnJvbS5jaCkKKyAgICAgICAgbGluZU5vID0gbWVyZ2VkUG9zLnRvLmxpbmU7CiAg
ICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC0xMDQxLDcgKzExNDMs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgbWVhc3VyZW1l
bnQgPSBtZWFzdXJlTGluZShjbSwgbGluZU9iaik7CiAKICAgICBmdW5jdGlvbiBnZXRYKGNoKSB7
Ci0gICAgICB2YXIgc3AgPSBjdXJzb3JDb29yZHMoY20sIHtsaW5lOiBsaW5lTm8sIGNoOiBjaH0s
ICJsaW5lIiwKKyAgICAgIHZhciBzcCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgY2gp
LCAibGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9iaiwgbWVhc3VyZW1l
bnQpOwogICAgICAgd3JvbmdMaW5lID0gdHJ1ZTsKICAgICAgIGlmIChpbm5lck9mZiA+IHNwLmJv
dHRvbSkgcmV0dXJuIE1hdGgubWF4KDAsIHNwLmxlZnQgLSBjV2lkdGgpOwpAQCAtMTA1MiwxNSAr
MTE1NCwxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIHZhciBi
aWRpID0gZ2V0T3JkZXIobGluZU9iaiksIGRpc3QgPSBsaW5lT2JqLnRleHQubGVuZ3RoOwogICAg
IHZhciBmcm9tID0gbGluZUxlZnQobGluZU9iaiksIHRvID0gbGluZVJpZ2h0KGxpbmVPYmopOwot
ICAgIHZhciBmcm9tWCA9IHBhZGRpbmdMZWZ0KGNtLmRpc3BsYXkpLCB0b1ggPSBnZXRYKHRvKTsK
KyAgICB2YXIgZnJvbVggPSBnZXRYKGZyb20pLCBmcm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9Y
ID0gZ2V0WCh0byksIHRvT3V0c2lkZSA9IHdyb25nTGluZTsKIAotICAgIGlmICh4ID4gdG9YKSBy
ZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IHRvLCBvdXRzaWRlOiB3cm9uZ0xpbmV9OworICAgIGlm
ICh4ID4gdG9YKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRlKGxpbmVObywgdG8sIHRvT3V0c2lkZSk7
CiAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgIGZv
ciAoOzspIHsKICAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlzdWFs
bHkobGluZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewogICAgICAgICB2YXIgYWZ0
ZXIgPSB4IC0gZnJvbVggPCB0b1ggLSB4LCBjaCA9IGFmdGVyID8gZnJvbSA6IHRvOwogICAgICAg
ICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyLnRlc3QobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSAr
K2NoOwotICAgICAgICByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IGNoLCBhZnRlcjogYWZ0ZXIs
IG91dHNpZGU6IHdyb25nTGluZX07CisgICAgICAgIHZhciBwb3MgPSBQb3NNYXliZU91dHNpZGUo
bGluZU5vLCBjaCwgYWZ0ZXIgPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSk7CisgICAgICAgIHBv
cy5hZnRlciA9IGFmdGVyOworICAgICAgICByZXR1cm4gcG9zOwogICAgICAgfQogICAgICAgdmFy
IHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUgPSBmcm9tICsgc3RlcDsKICAgICAg
IGlmIChiaWRpKSB7CkBAIC0xMDY4LDggKzExNzIsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwOyArK2kpIG1pZGRs
ZSA9IG1vdmVWaXN1YWxseShsaW5lT2JqLCBtaWRkbGUsIDEpOwogICAgICAgfQogICAgICAgdmFy
IG1pZGRsZVggPSBnZXRYKG1pZGRsZSk7Ci0gICAgICBpZiAobWlkZGxlWCA+IHgpIHt0byA9IG1p
ZGRsZTsgdG9YID0gbWlkZGxlWDsgaWYgKHdyb25nTGluZSkgdG9YICs9IDEwMDA7IGRpc3QgLT0g
c3RlcDt9Ci0gICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRsZVg7IGRpc3Qg
PSBzdGVwO30KKyAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRk
bGVYOyBpZiAodG9PdXRzaWRlID0gd3JvbmdMaW5lKSB0b1ggKz0gMTAwMDsgZGlzdCAtPSBzdGVw
O30KKyAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDsgZnJvbU91dHNp
ZGUgPSB3cm9uZ0xpbmU7IGRpc3QgPSBzdGVwO30KICAgICB9CiAgIH0KIApAQCAtMTExMCw4MSAr
MTIxNCwxMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIGJlIGF3
a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCiAg
IC8vIGJhdGNoZWQgYW5kIHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgog
CisgIHZhciBuZXh0T3BJZCA9IDA7CiAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7Ci0g
ICAgaWYgKGNtLmN1ck9wKSArK2NtLmN1ck9wLmRlcHRoOwotICAgIGVsc2UgY20uY3VyT3AgPSB7
Ci0gICAgICAvLyBOZXN0ZWQgb3BlcmF0aW9ucyBkZWxheSB1cGRhdGUgdW50aWwgdGhlIG91dGVy
bW9zdCBvbmUKLSAgICAgIC8vIGZpbmlzaGVzLgotICAgICAgZGVwdGg6IDEsCisgICAgY20uY3Vy
T3AgPSB7CiAgICAgICAvLyBBbiBhcnJheSBvZiByYW5nZXMgb2YgbGluZXMgdGhhdCBoYXZlIHRv
IGJlIHVwZGF0ZWQuIFNlZQogICAgICAgLy8gdXBkYXRlRGlzcGxheS4KICAgICAgIGNoYW5nZXM6
IFtdLAotICAgICAgZGVsYXllZENhbGxiYWNrczogW10sCiAgICAgICB1cGRhdGVJbnB1dDogbnVs
bCwKICAgICAgIHVzZXJTZWxDaGFuZ2U6IG51bGwsCiAgICAgICB0ZXh0Q2hhbmdlZDogbnVsbCwK
ICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZhbHNlLAogICAgICAgdXBkYXRlTWF4TGluZTogZmFs
c2UsCi0gICAgICBpZDogKytjbS5uZXh0T3BJZAorICAgICAgdXBkYXRlU2Nyb2xsUG9zOiBmYWxz
ZSwKKyAgICAgIGlkOiArK25leHRPcElkCiAgICAgfTsKKyAgICBpZiAoIWRlbGF5ZWRDYWxsYmFj
a0RlcHRoKyspIGRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKICAgfQogCiAgIGZ1bmN0aW9uIGVuZE9w
ZXJhdGlvbihjbSkgewotICAgIHZhciBvcCA9IGNtLmN1ck9wOwotICAgIGlmICgtLW9wLmRlcHRo
KSByZXR1cm47CisgICAgdmFyIG9wID0gY20uY3VyT3AsIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9
IGNtLmRpc3BsYXk7CiAgICAgY20uY3VyT3AgPSBudWxsOwotICAgIHZhciB2aWV3ID0gY20udmll
dywgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIGNvbXB1
dGVNYXhMZW5ndGgodmlldyk7Ci0gICAgaWYgKHZpZXcubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9w
dGlvbnMubGluZVdyYXBwaW5nKSB7Ci0gICAgICB2YXIgd2lkdGggPSBtZWFzdXJlQ2hhcihjbSwg
dmlldy5tYXhMaW5lLCB2aWV3Lm1heExpbmUudGV4dC5sZW5ndGgpLnJpZ2h0OwotICAgICAgZGlz
cGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9ICh3aWR0aCArIDMgKyBzY3JvbGxlckN1dE9mZikg
KyAicHgiOwotICAgICAgdmlldy5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOworCisgICAgaWYgKG9w
LnVwZGF0ZU1heExpbmUpIGNvbXB1dGVNYXhMZW5ndGgoY20pOworICAgIGlmIChkaXNwbGF5Lm1h
eExpbmVDaGFuZ2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeworICAgICAgdmFyIHdp
ZHRoID0gbWVhc3VyZUxpbmUoY20sIGRpc3BsYXkubWF4TGluZSkud2lkdGg7CisgICAgICBkaXNw
bGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzICsgc2Nyb2xs
ZXJDdXRPZmYpICsgInB4IjsKKyAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsK
ICAgICAgIHZhciBtYXhTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgZGlzcGxheS5zaXplci5vZmZz
ZXRMZWZ0ICsgZGlzcGxheS5zaXplci5vZmZzZXRXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xp
ZW50V2lkdGgpOwotICAgICAgaWYgKG1heFNjcm9sbExlZnQgPCB2aWV3LnNjcm9sbExlZnQpCisg
ICAgICBpZiAobWF4U2Nyb2xsTGVmdCA8IGRvYy5zY3JvbGxMZWZ0ICYmICFvcC51cGRhdGVTY3Jv
bGxQb3MpCiAgICAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsTGVmdCwgbWF4U2Nyb2xsTGVmdCksIHRydWUpOwogICAgIH0KICAgICB2YXIgbmV3
U2Nyb2xsUG9zLCB1cGRhdGVkOwotICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSB7Ci0gICAg
ICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCB2aWV3LnNlbC5oZWFkKTsKKyAgICBpZiAo
b3AudXBkYXRlU2Nyb2xsUG9zKSB7CisgICAgICBuZXdTY3JvbGxQb3MgPSBvcC51cGRhdGVTY3Jv
bGxQb3M7CisgICAgfSBlbHNlIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkICYmIGRpc3BsYXkuc2Ny
b2xsZXIuY2xpZW50SGVpZ2h0KSB7IC8vIGRvbid0IHJlc2Nyb2xsIGlmIG5vdCB2aXNpYmxlCisg
ICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBkb2Muc2VsLmhlYWQpOwogICAgICAg
bmV3U2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCBjb29yZHMubGVmdCwgY29vcmRz
LnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20pOwogICAgIH0KICAgICBpZiAob3AuY2hh
bmdlcy5sZW5ndGggfHwgbmV3U2Nyb2xsUG9zICYmIG5ld1Njcm9sbFBvcy5zY3JvbGxUb3AgIT0g
bnVsbCkKICAgICAgIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNtLCBvcC5jaGFuZ2VzLCBuZXdT
Y3JvbGxQb3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCk7CiAgICAgaWYgKCF1cGRhdGVkICYm
IG9wLnNlbGVjdGlvbkNoYW5nZWQpIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAgaWYgKG5ld1Nj
cm9sbFBvcykgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY20pOworICAgIGlmIChvcC51cGRhdGVTY3Jv
bGxQb3MpIHsKKyAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gZGlzcGxheS5zY3Jv
bGxiYXJWLnNjcm9sbFRvcCA9IGRvYy5zY3JvbGxUb3AgPSBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9w
OworICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gZGlzcGxheS5zY3JvbGxiYXJI
LnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IG5ld1Njcm9sbFBvcy5zY3JvbGxMZWZ0Owor
ICAgICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOworICAgIH0gZWxzZSBpZiAobmV3U2Nyb2xsUG9z
KSB7CisgICAgICBzY3JvbGxDdXJzb3JJbnRvVmlldyhjbSk7CisgICAgfQogICAgIGlmIChvcC5z
ZWxlY3Rpb25DaGFuZ2VkKSByZXN0YXJ0QmxpbmsoY20pOwogCi0gICAgaWYgKHZpZXcuZm9jdXNl
ZCAmJiBvcC51cGRhdGVJbnB1dCkKKyAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCAmJiBvcC51cGRh
dGVJbnB1dCkKICAgICAgIHJlc2V0SW5wdXQoY20sIG9wLnVzZXJTZWxDaGFuZ2UpOwogCisgICAg
dmFyIGhpZGRlbiA9IG9wLm1heWJlSGlkZGVuTWFya2VycywgdW5oaWRkZW4gPSBvcC5tYXliZVVu
aGlkZGVuTWFya2VyczsKKyAgICBpZiAoaGlkZGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRl
bi5sZW5ndGg7ICsraSkKKyAgICAgIGlmICghaGlkZGVuW2ldLmxpbmVzLmxlbmd0aCkgc2lnbmFs
KGhpZGRlbltpXSwgImhpZGUiKTsKKyAgICBpZiAodW5oaWRkZW4pIGZvciAodmFyIGkgPSAwOyBp
IDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kpCisgICAgICBpZiAodW5oaWRkZW5baV0ubGluZXMubGVu
Z3RoKSBzaWduYWwodW5oaWRkZW5baV0sICJ1bmhpZGUiKTsKKworICAgIHZhciBkZWxheWVkOwor
ICAgIGlmICghLS1kZWxheWVkQ2FsbGJhY2tEZXB0aCkgeworICAgICAgZGVsYXllZCA9IGRlbGF5
ZWRDYWxsYmFja3M7CisgICAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKKyAgICB9CiAgICAg
aWYgKG9wLnRleHRDaGFuZ2VkKQogICAgICAgc2lnbmFsKGNtLCAiY2hhbmdlIiwgY20sIG9wLnRl
eHRDaGFuZ2VkKTsKICAgICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgc2lnbmFsKGNtLCAiY3Vy
c29yQWN0aXZpdHkiLCBjbSk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcC5kZWxheWVkQ2Fs
bGJhY2tzLmxlbmd0aDsgKytpKSBvcC5kZWxheWVkQ2FsbGJhY2tzW2ldKGNtKTsKKyAgICBpZiAo
ZGVsYXllZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVk
W2ldKCk7CiAgIH0KIAogICAvLyBXcmFwcyBhIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvbi4gUmV0
dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbi4KICAgZnVuY3Rpb24gb3BlcmF0aW9uKGNtMSwgZikg
ewogICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBjbSA9IGNtMSB8fCB0aGlzOwot
ICAgICAgc3RhcnRPcGVyYXRpb24oY20pOwotICAgICAgdHJ5IHt2YXIgcmVzdWx0ID0gZi5hcHBs
eShjbSwgYXJndW1lbnRzKTt9Ci0gICAgICBmaW5hbGx5IHtlbmRPcGVyYXRpb24oY20pO30KKyAg
ICAgIHZhciBjbSA9IGNtMSB8fCB0aGlzLCB3aXRoT3AgPSAhY20uY3VyT3A7CisgICAgICBpZiAo
d2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgICB0cnkgeyB2YXIgcmVzdWx0ID0gZi5h
cHBseShjbSwgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGlmICh3aXRoT3ApIGVuZE9w
ZXJhdGlvbihjbSk7IH0KICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfTsKICAgfQorICBmdW5j
dGlvbiBkb2NPcGVyYXRpb24oZikgeworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIHZh
ciB3aXRoT3AgPSB0aGlzLmNtICYmICF0aGlzLmNtLmN1ck9wLCByZXN1bHQ7CisgICAgICBpZiAo
d2l0aE9wKSBzdGFydE9wZXJhdGlvbih0aGlzLmNtKTsKKyAgICAgIHRyeSB7IHJlc3VsdCA9IGYu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGlmICh3aXRoT3ApIGVu
ZE9wZXJhdGlvbih0aGlzLmNtKTsgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICB9
CisgIGZ1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKKyAgICB2YXIgd2l0aE9wID0gIWNtLmN1ck9w
LCByZXN1bHQ7CisgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOworICAgIHRyeSB7
IHJlc3VsdCA9IGYoKTsgfQorICAgIGZpbmFsbHkgeyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24o
Y20pOyB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQogCiAgIGZ1bmN0aW9uIHJlZ0NoYW5nZShj
bSwgZnJvbSwgdG8sIGxlbmRpZmYpIHsKKyAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gY20u
ZG9jLmZpcnN0OworICAgIGlmICh0byA9PSBudWxsKSB0byA9IGNtLmRvYy5maXJzdCArIGNtLmRv
Yy5zaXplOwogICAgIGNtLmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbSwgdG86IHRvLCBk
aWZmOiBsZW5kaWZmfSk7CiAgIH0KIAogICAvLyBJTlBVVCBIQU5ETElORwogCiAgIGZ1bmN0aW9u
IHNsb3dQb2xsKGNtKSB7Ci0gICAgaWYgKGNtLnZpZXcucG9sbGluZ0Zhc3QpIHJldHVybjsKKyAg
ICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkgcmV0dXJuOwogICAgIGNtLmRpc3BsYXkucG9s
bC5zZXQoY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewogICAgICAgcmVhZElu
cHV0KGNtKTsKLSAgICAgIGlmIChjbS52aWV3LmZvY3VzZWQpIHNsb3dQb2xsKGNtKTsKKyAgICAg
IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzbG93UG9sbChjbSk7CiAgICAgfSk7CiAgIH0KIApAQCAt
MTIwNSw1MCArMTM0Myw1OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
Ly8gZXZlbnRzIHRoYXQgaW5kaWNhdGUgSU1FIHRha2luZyBwbGFjZSwgYnV0IHRoZXNlIGFyZSBu
b3Qgd2lkZWx5CiAgIC8vIHN1cHBvcnRlZCBvciBjb21wYXRpYmxlIGVub3VnaCB5ZXQgdG8gcmVs
eSBvbi4pCiAgIGZ1bmN0aW9uIHJlYWRJbnB1dChjbSkgewotICAgIHZhciBpbnB1dCA9IGNtLmRp
c3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCB2aWV3ID0gY20u
dmlldywgc2VsID0gdmlldy5zZWw7Ci0gICAgaWYgKCF2aWV3LmZvY3VzZWQgfHwgaGFzU2VsZWN0
aW9uKGlucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuIGZhbHNlOworICAgIHZhciBpbnB1
dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCBk
b2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5zZWw7CisgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8
IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkpIHJldHVybiBmYWxzZTsKICAg
ICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlOwogICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCAmJiBw
b3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGZhbHNlOwotICAgIHN0YXJ0T3BlcmF0aW9u
KGNtKTsKLSAgICB2aWV3LnNlbC5zaGlmdCA9IGZhbHNlOworICAgIC8vIElFIGVuam95cyByYW5k
b21seSBkZXNlbGVjdGluZyBvdXIgaW5wdXQncyB0ZXh0IHdoZW4KKyAgICAvLyByZS1mb2N1c2lu
Zy4gSWYgdGhlIHNlbGVjdGlvbiBpcyBnb25lIGJ1dCB0aGUgY3Vyc29yIGlzIGF0IHRoZQorICAg
IC8vIHN0YXJ0IG9mIHRoZSBpbnB1dCwgdGhhdCdzIHByb2JhYmx5IHdoYXQgaGFwcGVuZWQuCisg
ICAgaWYgKGllICYmIHRleHQgJiYgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT09IDApIHsKKyAgICAg
IHJlc2V0SW5wdXQoY20sIHRydWUpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2
YXIgd2l0aE9wID0gIWNtLmN1ck9wOworICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNt
KTsKKyAgICBzZWwuc2hpZnQgPSBmYWxzZTsKICAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1p
bihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7CiAgICAgd2hpbGUgKHNhbWUgPCBsICYm
IHByZXZJbnB1dFtzYW1lXSA9PSB0ZXh0W3NhbWVdKSArK3NhbWU7CiAgICAgdmFyIGZyb20gPSBz
ZWwuZnJvbSwgdG8gPSBzZWwudG87CiAgICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQot
ICAgICAgZnJvbSA9IHtsaW5lOiBmcm9tLmxpbmUsIGNoOiBmcm9tLmNoIC0gKHByZXZJbnB1dC5s
ZW5ndGggLSBzYW1lKX07Ci0gICAgZWxzZSBpZiAodmlldy5vdmVyd3JpdGUgJiYgcG9zRXEoZnJv
bSwgdG8pICYmICFjbS5kaXNwbGF5LnBhc3RlSW5jb21pbmcpCi0gICAgICB0byA9IHtsaW5lOiB0
by5saW5lLCBjaDogTWF0aC5taW4oZ2V0TGluZShjbS52aWV3LmRvYywgdG8ubGluZSkudGV4dC5s
ZW5ndGgsIHRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpfTsKKyAgICAgIGZyb20gPSBQb3Mo
ZnJvbS5saW5lLCBmcm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKSk7CisgICAgZWxz
ZSBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmIHBvc0VxKGZyb20sIHRvKSAmJiAhY20uc3RhdGUu
cGFzdGVJbmNvbWluZykKKyAgICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUo
ZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyAodGV4dC5sZW5ndGggLSBzYW1lKSkp
OwogICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0OwotICAgIHVwZGF0
ZURvYyhjbSwgZnJvbSwgdG8sIHNwbGl0TGluZXModGV4dC5zbGljZShzYW1lKSksICJlbmQiLAot
ICAgICAgICAgICAgICBjbS5kaXNwbGF5LnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogImlucHV0
Iiwge2Zyb206IGZyb20sIHRvOiB0b30pOworICAgIG1ha2VDaGFuZ2UoY20uZG9jLCB7ZnJvbTog
ZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExpbmVzKHRleHQuc2xpY2Uoc2FtZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3Rl
IiA6ICIraW5wdXQifSwgImVuZCIpOworICAgICAgICAgICAgICAgCiAgICAgY20uY3VyT3AudXBk
YXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwKSBpbnB1
dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7CiAgICAgZWxzZSBjbS5kaXNwbGF5
LnByZXZJbnB1dCA9IHRleHQ7Ci0gICAgZW5kT3BlcmF0aW9uKGNtKTsKLSAgICBjbS5kaXNwbGF5
LnBhc3RlSW5jb21pbmcgPSBmYWxzZTsKKyAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20p
OworICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
ICAgfQogCiAgIGZ1bmN0aW9uIHJlc2V0SW5wdXQoY20sIHVzZXIpIHsKLSAgICB2YXIgdmlldyA9
IGNtLnZpZXcsIG1pbmltYWwsIHNlbGVjdGVkOwotICAgIGlmICghcG9zRXEodmlldy5zZWwuZnJv
bSwgdmlldy5zZWwudG8pKSB7CisgICAgdmFyIG1pbmltYWwsIHNlbGVjdGVkLCBkb2MgPSBjbS5k
b2M7CisgICAgaWYgKCFwb3NFcShkb2Muc2VsLmZyb20sIGRvYy5zZWwudG8pKSB7CiAgICAgICBj
bS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOwogICAgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAm
JgotICAgICAgICAodmlldy5zZWwudG8ubGluZSAtIHZpZXcuc2VsLmZyb20ubGluZSA+IDEwMCB8
fCAoc2VsZWN0ZWQgPSBjbS5nZXRTZWxlY3Rpb24oKSkubGVuZ3RoID4gMTAwMCk7CisgICAgICAg
IChkb2Muc2VsLnRvLmxpbmUgLSBkb2Muc2VsLmZyb20ubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQg
PSBjbS5nZXRTZWxlY3Rpb24oKSkubGVuZ3RoID4gMTAwMCk7CiAgICAgICBpZiAobWluaW1hbCkg
Y20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICItIjsKICAgICAgIGVsc2UgY20uZGlzcGxheS5pbnB1
dC52YWx1ZSA9IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOwotICAgICAgaWYgKHZpZXcu
Zm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7CisgICAgICBpZiAoY20uc3Rh
dGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7CiAgICAgfSBlbHNlIGlm
ICh1c2VyKSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAi
IjsKICAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwogICB9CiAK
ICAgZnVuY3Rpb24gZm9jdXNJbnB1dChjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5
ICE9ICJub2N1cnNvciIgJiYgKGllIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gY20uZGlz
cGxheS5pbnB1dCkpCisgICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIiAm
JiAoIW1vYmlsZSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IGNtLmRpc3BsYXkuaW5wdXQp
KQogICAgICAgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICB9CiAKICAgZnVuY3Rpb24gaXNS
ZWFkT25seShjbSkgewotICAgIHJldHVybiBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLnZpZXcu
Y2FudEVkaXQ7CisgICAgcmV0dXJuIGNtLm9wdGlvbnMucmVhZE9ubHkgfHwgY20uZG9jLmNhbnRF
ZGl0OwogICB9CiAKICAgLy8gRVZFTlQgSEFORExFUlMKQEAgLTEyNjMsNyArMTQxMCw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIEdlY2tvIGJyb3dzZXJzIGZp
cmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAogICAgIC8vIHdoaWNo
IHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAg
ICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciBHZWNrby4KLSAgICBpZiAoIWdlY2tvKSBv
bihkLnNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0TWVudShj
bSwgZSk7fSk7CisgICAgaWYgKCFjYXB0dXJlTWlkZGxlQ2xpY2spIG9uKGQuc2Nyb2xsZXIsICJj
b250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHtvbkNvbnRleHRNZW51KGNtLCBlKTt9KTsKIAogICAg
IG9uKGQuc2Nyb2xsZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKICAgICAgIHNldFNjcm9sbFRv
cChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApOwpAQCAtMTI4MCwyMiArMTQyNywzMiBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2V3
aGVlbCIsIGZ1bmN0aW9uKGUpe29uU2Nyb2xsV2hlZWwoY20sIGUpO30pOwogICAgIG9uKGQuc2Ny
b2xsZXIsICJET01Nb3VzZVNjcm9sbCIsIGZ1bmN0aW9uKGUpe29uU2Nyb2xsV2hlZWwoY20sIGUp
O30pOwogCi0gICAgZnVuY3Rpb24gcmVGb2N1cygpIHsgaWYgKGNtLnZpZXcuZm9jdXNlZCkgc2V0
VGltZW91dChiaW5kKGZvY3VzSW5wdXQsIGNtKSwgMCk7IH0KKyAgICBmdW5jdGlvbiByZUZvY3Vz
KCkgeyBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2V0VGltZW91dChiaW5kKGZvY3VzSW5wdXQsIGNt
KSwgMCk7IH0KICAgICBvbihkLnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCByZUZvY3VzKTsKICAg
ICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCByZUZvY3VzKTsKICAgICAvLyBQcmV2ZW50
IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZwogICAgIG9uKGQud3JhcHBlciwgInNjcm9sbCIs
IGZ1bmN0aW9uKCkgeyBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9sbExlZnQg
PSAwOyB9KTsKLSAgICBvbih3aW5kb3csICJyZXNpemUiLCBmdW5jdGlvbiByZXNpemVIYW5kbGVy
KCkgeworCisgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7CiAgICAgICAvLyBNaWdodCBiZSBhIHRl
eHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgogICAgICAgZC5jYWNoZWRD
aGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBudWxsOwogICAgICAgY2xlYXJDYWNoZXMo
Y20pOwotICAgICAgaWYgKGQud3JhcHBlci5wYXJlbnROb2RlKSB1cGRhdGVEaXNwbGF5KGNtLCB0
cnVlKTsKLSAgICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIsIHJlc2l6ZUhhbmRsZXIpOwot
ICAgIH0pOworICAgICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7CisgICAgfQor
ICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIG9uUmVzaXplKTsKKyAgICAvLyBBYm92ZSBoYW5kbGVy
IGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuCisgICAgLy8g
SGVyZSB3ZSBwb2xsIHRvIHVucmVnaXN0ZXIgaXQgd2hlbiB0aGUgZWRpdG9yIGlzIG5vIGxvbmdl
ciBpbgorICAgIC8vIHRoZSBkb2N1bWVudCwgc28gdGhhdCBpdCBjYW4gYmUgZ2FyYmFnZS1jb2xs
ZWN0ZWQuCisgICAgZnVuY3Rpb24gdW5yZWdpc3RlcigpIHsKKyAgICAgIGZvciAodmFyIHAgPSBk
LndyYXBwZXIucGFyZW50Tm9kZTsgcCAmJiBwICE9IGRvY3VtZW50LmJvZHk7IHAgPSBwLnBhcmVu
dE5vZGUpIHt9CisgICAgICBpZiAocCkgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKKyAg
ICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIsIG9uUmVzaXplKTsKKyAgICB9ICAgIAorICAg
IHNldFRpbWVvdXQodW5yZWdpc3RlciwgNTAwMCk7CiAKICAgICBvbihkLmlucHV0LCAia2V5dXAi
LCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKICAgICAgIGlmIChjbS5vcHRpb25zLm9uS2V5
RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwot
ICAgICAgaWYgKGVfcHJvcChlLCAia2V5Q29kZSIpID09IDE2KSBjbS52aWV3LnNlbC5zaGlmdCA9
IGZhbHNlOworICAgICAgaWYgKGUua2V5Q29kZSA9PSAxNikgY20uZG9jLnNlbC5zaGlmdCA9IGZh
bHNlOwogICAgIH0pKTsKICAgICBvbihkLmlucHV0LCAiaW5wdXQiLCBiaW5kKGZhc3RQb2xsLCBj
bSkpOwogICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24p
KTsKQEAgLTEzMTMsMTMgKzE0NzAsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ292ZXIiLCBkcmFnXyk7CiAgICAgICBvbihk
LnNjcm9sbGVyLCAiZHJvcCIsIG9wZXJhdGlvbihjbSwgb25Ecm9wKSk7CiAgICAgfQotICAgIG9u
KGQuc2Nyb2xsZXIsICJwYXN0ZSIsIGZ1bmN0aW9uKCl7CisgICAgb24oZC5zY3JvbGxlciwgInBh
c3RlIiwgZnVuY3Rpb24oZSl7CiAgICAgICBpZiAoZXZlbnRJbldpZGdldChkLCBlKSkgcmV0dXJu
OwogICAgICAgZm9jdXNJbnB1dChjbSk7IAogICAgICAgZmFzdFBvbGwoY20pOwogICAgIH0pOwog
ICAgIG9uKGQuaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgZC5wYXN0ZUluY29t
aW5nID0gdHJ1ZTsKKyAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwogICAgICAg
ZmFzdFBvbGwoY20pOwogICAgIH0pOwogCkBAIC0xMzQyLDkgKzE0OTksMTEgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBldmVudEluV2lkZ2V0
KGRpc3BsYXksIGUpIHsKLSAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxh
eS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQorICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChl
KTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKKyAgICAgIGlmICgh
bikgcmV0dXJuIHRydWU7CiAgICAgICBpZiAoL1xiQ29kZU1pcnJvci0oPzpsaW5lKT93aWRnZXRc
Yi8udGVzdChuLmNsYXNzTmFtZSkgfHwKICAgICAgICAgICBuLnBhcmVudE5vZGUgPT0gZGlzcGxh
eS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOworICAgIH0KICAgfQog
CiAgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCkgewpAQCAtMTM1NSw3ICsx
NTE0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGFy
Z2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyViB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJW
LmZpcnN0Q2hpbGQgfHwKICAgICAgICAgICB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJGaWxs
ZXIpIHJldHVybiBudWxsOwogICAgIH0KLSAgICB2YXIgeCwgeSwgc3BhY2UgPSBkaXNwbGF5Lmxp
bmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICB2YXIgeCwgeSwgc3BhY2UgPSBn
ZXRSZWN0KGRpc3BsYXkubGluZVNwYWNlKTsKICAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9u
IElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCiAgICAgdHJ5IHsg
eCA9IGUuY2xpZW50WDsgeSA9IGUuY2xpZW50WTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsg
fQogICAgIHJldHVybiBjb29yZHNDaGFyKGNtLCB4IC0gc3BhY2UubGVmdCwgeSAtIHNwYWNlLnRv
cCk7CkBAIC0xMzYzLDggKzE1MjIsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKIAogICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7CiAgIGZ1bmN0aW9uIG9uTW91
c2VEb3duKGUpIHsKLSAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdmll
dyA9IGNtLnZpZXcsIHNlbCA9IHZpZXcuc2VsLCBkb2MgPSB2aWV3LmRvYzsKLSAgICBzZWwuc2hp
ZnQgPSBlX3Byb3AoZSwgInNoaWZ0S2V5Iik7CisgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9
IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKKyAgICBzZWwuc2hpZnQg
PSBlLnNoaWZ0S2V5OwogCiAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsKICAg
ICAgIGlmICghd2Via2l0KSB7CkBAIC0xMzc4LDEwICsxNTM3LDEwIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgc3dpdGNoIChlX2J1dHRvbihlKSkgewogICAgIGNh
c2UgMzoKLSAgICAgIGlmIChnZWNrbykgb25Db250ZXh0TWVudS5jYWxsKGNtLCBjbSwgZSk7Cisg
ICAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSBvbkNvbnRleHRNZW51LmNhbGwoY20sIGNtLCBl
KTsKICAgICAgIHJldHVybjsKICAgICBjYXNlIDI6Ci0gICAgICBpZiAoc3RhcnQpIGV4dGVuZFNl
bGVjdGlvbihjbSwgc3RhcnQpOworICAgICAgaWYgKHN0YXJ0KSBleHRlbmRTZWxlY3Rpb24oY20u
ZG9jLCBzdGFydCk7CiAgICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7
CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgcmV0dXJuOwpAQCAtMTM5MSw3ICsx
NTUwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gc2VsZWN0
aW9uLgogICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gZGlzcGxheS5zY3JvbGxl
cikgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KIAotICAgIGlmICghdmlldy5mb2N1c2Vk
KSBvbkZvY3VzKGNtKTsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwog
CiAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZSwgdHlwZSA9ICJzaW5nbGUiOwogICAgIGlmIChsYXN0
RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEo
bGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CkBAIC0xNDA0LDcgKzE1NjMsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGxhc3REb3VibGVDbGljayA9IHt0
aW1lOiBub3csIHBvczogc3RhcnR9OwogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAg
IHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgc3RhcnQubGluZSkudGV4dCwgc3Rh
cnQpOwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLCB3b3JkLmZyb20sIHdvcmQudG8pOworICAg
ICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3JkLnRvKTsKICAgICB9IGVs
c2UgeyBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsgfQogCiAgICAgdmFyIGxh
c3QgPSBzdGFydDsKQEAgLTE0MTIsMTggKzE1NzEsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICAgICFwb3NMZXNzKHN0YXJ0LCBzZWwuZnJvbSkgJiYgIXBvc0xl
c3Moc2VsLnRvLCBzdGFydCkgJiYgdHlwZSA9PSAic2luZ2xlIikgewogICAgICAgdmFyIGRyYWdF
bmQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUyKSB7CiAgICAgICAgIGlmICh3ZWJraXQpIGRp
c3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7Ci0gICAgICAgIHZpZXcuZHJhZ2dpbmdU
ZXh0ID0gZmFsc2U7CisgICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGZhbHNlOwogICAg
ICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCk7CiAgICAgICAgIG9mZihkaXNw
bGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwogICAgICAgICBpZiAoTWF0aC5hYnMoZS5j
bGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBlMi5jbGllbnRZKSA8
IDEwKSB7CiAgICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlMik7Ci0gICAgICAgICAgZXh0ZW5k
U2VsZWN0aW9uKGNtLCBzdGFydCk7CisgICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywg
c3RhcnQpOwogICAgICAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAgICB9CiAgICAgICB9KTsK
ICAgICAgIC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLgogICAgICAgaWYgKHdl
YmtpdCkgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwotICAgICAgdmlldy5kcmFn
Z2luZ1RleHQgPSBkcmFnRW5kOworICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0Vu
ZDsKICAgICAgIC8vIElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCiAgICAgICBpZiAoZGlzcGxh
eS5zY3JvbGxlci5kcmFnRHJvcCkgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOwogICAgICAg
b24oZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCk7CkBAIC0xNDMxLDEzICsxNTkwLDEzIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgIGlmICh0eXBlID09ICJzaW5nbGUiKSBleHRl
bmRTZWxlY3Rpb24oY20sIGNsaXBQb3MoZG9jLCBzdGFydCkpOworICAgIGlmICh0eXBlID09ICJz
aW5nbGUiKSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBjbGlwUG9zKGRvYywgc3RhcnQpKTsKIAog
ICAgIHZhciBzdGFydHN0YXJ0ID0gc2VsLmZyb20sIHN0YXJ0ZW5kID0gc2VsLnRvOwogCiAgICAg
ZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7CiAgICAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgewot
ICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20sIGNsaXBQb3MoZG9jLCBzdGFydCksIGN1cik7Cisg
ICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIGNsaXBQb3MoZG9jLCBzdGFydCksIGN1cik7
CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KIApAQCAtMTQ0NSwxNSArMTYwNCwxNSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHN0YXJ0ZW5kID0gY2xpcFBvcyhk
b2MsIHN0YXJ0ZW5kKTsKICAgICAgIGlmICh0eXBlID09ICJkb3VibGUiKSB7CiAgICAgICAgIHZh
ciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgY3VyLmxpbmUpLnRleHQsIGN1cik7Ci0g
ICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFydCkpIGV4dGVuZFNlbGVjdGlvbihjbSwg
d29yZC5mcm9tLCBzdGFydGVuZCk7Ci0gICAgICAgIGVsc2UgZXh0ZW5kU2VsZWN0aW9uKGNtLCBz
dGFydHN0YXJ0LCB3b3JkLnRvKTsKKyAgICAgICAgaWYgKHBvc0xlc3MoY3VyLCBzdGFydHN0YXJ0
KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCBzdGFydGVuZCk7CisgICAgICAg
IGVsc2UgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnRzdGFydCwgd29yZC50byk7CiAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgICAgaWYgKHBvc0xlc3MoY3Vy
LCBzdGFydHN0YXJ0KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLCBzdGFydGVuZCwgY2xpcFBvcyhkb2Ms
IHtsaW5lOiBjdXIubGluZSwgY2g6IDB9KSk7Ci0gICAgICAgIGVsc2UgZXh0ZW5kU2VsZWN0aW9u
KGNtLCBzdGFydHN0YXJ0LCBjbGlwUG9zKGRvYywge2xpbmU6IGN1ci5saW5lICsgMSwgY2g6IDB9
KSk7CisgICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFydCkpIGV4dGVuZFNlbGVjdGlv
bihjbS5kb2MsIHN0YXJ0ZW5kLCBjbGlwUG9zKGRvYywgUG9zKGN1ci5saW5lLCAwKSkpOworICAg
ICAgICBlbHNlIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0c3RhcnQsIGNsaXBQb3MoZG9j
LCBQb3MoY3VyLmxpbmUgKyAxLCAwKSkpOwogICAgICAgfQogICAgIH0KIAotICAgIHZhciBlZGl0
b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHZh
ciBlZGl0b3JTaXplID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpOwogICAgIC8vIFVzZWQgdG8g
ZW5zdXJlIHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kCiAg
ICAgLy8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFi
bGUgLS0gYXQKICAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBw
ZW4gZXZlbiB3aGVuIGNsZWFyZWQsCkBAIC0xNDY1LDcgKzE2MjQsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUs
IHRydWUpOwogICAgICAgaWYgKCFjdXIpIHJldHVybjsKICAgICAgIGlmICghcG9zRXEoY3VyLCBs
YXN0KSkgewotICAgICAgICBpZiAoIXZpZXcuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CisgICAgICAg
IGlmICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CiAgICAgICAgIGxhc3QgPSBjdXI7
CiAgICAgICAgIGRvU2VsZWN0KGN1cik7CiAgICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxp
bmVzKGRpc3BsYXksIGRvYyk7CkBAIC0xNTE0LDExICsxNjczLDggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHsK
ICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICBpZiAoKytyZWFk
ID09IG4pIHsKLSAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20udmlldy5kb2MsIHBvcyk7Ci0g
ICAgICAgICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICB2YXIg
ZW5kID0gcmVwbGFjZVJhbmdlKGNtLCB0ZXh0LmpvaW4oIiIpLCBwb3MsIHBvcywgInBhc3RlIik7
Ci0gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihjbSwgcG9zLCBlbmQpOwotICAgICAgICAgICAg
fSkoKTsKKyAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOworICAgICAgICAg
ICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgdGV4dC5qb2luKCIiKSwgcG9zLCAiYXJvdW5kIiwgInBh
c3RlIik7CiAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICByZWFkZXIucmVhZEFzVGV4
dChmaWxlKTsKQEAgLTE1MjYsMTcgKzE2ODIsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmls
ZXNbaV0sIGkpOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYg
dGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgotICAgICAgaWYg
KGNtLnZpZXcuZHJhZ2dpbmdUZXh0ICYmICEocG9zTGVzcyhwb3MsIGNtLnZpZXcuc2VsLmZyb20p
IHx8IHBvc0xlc3MoY20udmlldy5zZWwudG8sIHBvcykpKSB7Ci0gICAgICAgIGNtLnZpZXcuZHJh
Z2dpbmdUZXh0KGUpOwotICAgICAgICBpZiAoaWUpIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0
LCBjbSksIDUwKTsKKyAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShwb3NMZXNz
KHBvcywgY20uZG9jLnNlbC5mcm9tKSB8fCBwb3NMZXNzKGNtLmRvYy5zZWwudG8sIHBvcykpKSB7
CisgICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dChlKTsKKyAgICAgICAgLy8gRW5zdXJlIHRo
ZSBlZGl0b3IgaXMgcmUtZm9jdXNlZAorICAgICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1
dCwgY20pLCAyMCk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHRyeSB7CiAgICAg
ICAgIHZhciB0ZXh0ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpOwogICAgICAgICBp
ZiAodGV4dCkgewotICAgICAgICAgIHZhciBjdXJGcm9tID0gY20udmlldy5zZWwuZnJvbSwgY3Vy
VG8gPSBjbS52aWV3LnNlbC50bzsKLSAgICAgICAgICBzZXRTZWxlY3Rpb24oY20sIHBvcywgcG9z
KTsKLSAgICAgICAgICBpZiAoY20udmlldy5kcmFnZ2luZ1RleHQpIHJlcGxhY2VSYW5nZShjbSwg
IiIsIGN1ckZyb20sIGN1clRvLCAicGFzdGUiKTsKKyAgICAgICAgICB2YXIgY3VyRnJvbSA9IGNt
LmRvYy5zZWwuZnJvbSwgY3VyVG8gPSBjbS5kb2Muc2VsLnRvOworICAgICAgICAgIHNldFNlbGVj
dGlvbihjbS5kb2MsIHBvcywgcG9zKTsKKyAgICAgICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdU
ZXh0KSByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwgY3VyRnJvbSwgY3VyVG8sICJwYXN0ZSIpOwog
ICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCwgbnVsbCwgInBhc3RlIik7CiAgICAg
ICAgICAgZm9jdXNJbnB1dChjbSk7CiAgICAgICAgICAgb25Gb2N1cyhjbSk7CkBAIC0xNTUxLDIw
ICsxNzA4LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHRyeSB7
IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0KICAgICBjYXRjaChlKSB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgaWYgKG1YID49IE1hdGguZmxvb3IoZGlzcGxheS5ndXR0ZXJz
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOworICAgIGlmICht
WCA+PSBNYXRoLmZsb29yKGdldFJlY3QoZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBm
YWxzZTsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgIGlmICghaGFzSGFuZGxlcihjbSwg
Imd1dHRlckNsaWNrIikpIHJldHVybiB0cnVlOwogCi0gICAgdmFyIGxpbmVCb3ggPSBkaXNwbGF5
LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgdmFyIGxpbmVCb3ggPSBnZXRS
ZWN0KGRpc3BsYXkubGluZURpdik7CiAgICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20pIHJldHVy
biB0cnVlOwogICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0OwogCiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsK
ICAgICAgIHZhciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNbaV07Ci0gICAgICBpZiAo
ZyAmJiBnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ID49IG1YKSB7Ci0gICAgICAgIHZh
ciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLnZpZXcuZG9jLCBtWSk7CisgICAgICBpZiAoZyAmJiBn
ZXRSZWN0KGcpLnJpZ2h0ID49IG1YKSB7CisgICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0
KGNtLmRvYywgbVkpOwogICAgICAgICB2YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ld
OwotICAgICAgICBzaWduYWxMYXRlcihjbSwgY20sICJndXR0ZXJDbGljayIsIGNtLCBsaW5lLCBn
dXR0ZXIsIGUpOworICAgICAgICBzaWduYWxMYXRlcihjbSwgImd1dHRlckNsaWNrIiwgY20sIGxp
bmUsIGd1dHRlciwgZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTE1Nzks
MjIgKzE3MzYsMzEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICAv
LyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAg
IC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdo
ZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KLSAgICBpZiAoZS5kYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpCi0gICAgICBlLmRhdGFUcmFuc2Zlci5z
ZXREcmFnSW1hZ2UoZWx0KCdpbWcnKSwgMCwgMCk7CisgICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNl
dERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7CisgICAgICB2YXIgaW1nID0gZWx0KCJpbWciLCBudWxs
LCBudWxsLCAicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7CisgICAgICBpZiAo
b3BlcmEpIHsKKyAgICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdodCA9IDE7CisgICAgICAgIGNt
LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChpbWcpOworICAgICAgICAvLyBGb3JjZSBhIHJl
bGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVh
c29uCisgICAgICAgIGltZy5fdG9wID0gaW1nLm9mZnNldFRvcDsKKyAgICAgIH0KKyAgICAgIGUu
ZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOworICAgICAgaWYgKG9wZXJhKSBp
bWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOworICAgIH0KICAgfQogCiAgIGZ1bmN0aW9u
IHNldFNjcm9sbFRvcChjbSwgdmFsKSB7Ci0gICAgaWYgKE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xs
VG9wIC0gdmFsKSA8IDIpIHJldHVybjsKLSAgICBjbS52aWV3LnNjcm9sbFRvcCA9IHZhbDsKKyAg
ICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSByZXR1cm47CisgICAg
Y20uZG9jLnNjcm9sbFRvcCA9IHZhbDsKICAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5KGNt
LCBbXSwgdmFsKTsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gdmFs
KSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKICAgICBpZiAoY20uZGlzcGxh
eS5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3Jv
bGxUb3AgPSB2YWw7CiAgICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSk7CiAgIH0K
ICAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyKSB7Ci0gICAgaWYg
KGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20udmlldy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20udmll
dy5zY3JvbGxMZWZ0IC0gdmFsKSA8IDIpIHJldHVybjsKKyAgICBpZiAoaXNTY3JvbGxlciA/IHZh
bCA9PSBjbS5kb2Muc2Nyb2xsTGVmdCA6IE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gdmFs
KSA8IDIpIHJldHVybjsKICAgICB2YWwgPSBNYXRoLm1pbih2YWwsIGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBj
bS52aWV3LnNjcm9sbExlZnQgPSB2YWw7CisgICAgY20uZG9jLnNjcm9sbExlZnQgPSB2YWw7CiAg
ICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbExlZnQgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2YWw7CiAg
ICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ICE9IHZhbCkgY20uZGlzcGxh
eS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSB2YWw7CkBAIC0xNjExLDcgKzE3NzcsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gaXMgdGhhdCBpdCBnaXZlcyB1cyBh
IGNoYW5jZSB0byB1cGRhdGUgdGhlIGRpc3BsYXkgYmVmb3JlIHRoZQogICAvLyBhY3R1YWwgc2Ny
b2xsaW5nIGhhcHBlbnMsIHJlZHVjaW5nIGZsaWNrZXJpbmcuCiAKLSAgdmFyIHdoZWVsU2FtcGxl
cyA9IDAsIHdoZWVsRFgsIHdoZWVsRFksIHdoZWVsU3RhcnRYLCB3aGVlbFN0YXJ0WSwgd2hlZWxQ
aXhlbHNQZXJVbml0ID0gbnVsbDsKKyAgdmFyIHdoZWVsU2FtcGxlcyA9IDAsIHdoZWVsUGl4ZWxz
UGVyVW5pdCA9IG51bGw7CiAgIC8vIEZpbGwgaW4gYSBicm93c2VyLWRldGVjdGVkIHN0YXJ0aW5n
IHZhbHVlIG9uIGJyb3dzZXJzIHdoZXJlIHdlCiAgIC8vIGtub3cgb25lLiBUaGVzZSBkb24ndCBo
YXZlIHRvIGJlIGFjY3VyYXRlIC0tIHRoZSByZXN1bHQgb2YgdGhlbQogICAvLyBiZWluZyB3cm9u
ZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0IGZsaWNrZXIgb24gdGhlIGZpcnN0IHdoZWVsCkBAIC0x
NjQwLDcgKzE4MDYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IH0KICAgICB9CiAKLSAgICB2YXIgc2Nyb2xsID0gY20uZGlzcGxheS5zY3JvbGxlcjsKKyAgICB2
YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3BsYXkuc2Nyb2xsZXI7CiAgICAg
Ly8gT24gc29tZSBicm93c2VycywgaG9yaXpvbnRhbCBzY3JvbGxpbmcgd2lsbCBjYXVzZSByZWRy
YXdzIHRvCiAgICAgLy8gaGFwcGVuIGJlZm9yZSB0aGUgZ3V0dGVyIGhhcyBiZWVuIHJlYWxpZ25l
ZCwgY2F1c2luZyBpdCB0bwogICAgIC8vIHdyaWdnbGUgYXJvdW5kIGluIGEgbW9zdCB1bnNlZW1s
eSB3YXkuIFdoZW4gd2UgaGF2ZSBhbgpAQCAtMTY1MiwzNSArMTgxOCwzNSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBNYXRoLm1h
eCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsVG9wICsgZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQs
IHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBzY3JvbGwuY2xpZW50SGVpZ2h0KSkpOwogICAgICAgc2V0
U2Nyb2xsTGVmdChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbExlZnQgKyBk
eCAqIHdoZWVsUGl4ZWxzUGVyVW5pdCwgc2Nyb2xsLnNjcm9sbFdpZHRoIC0gc2Nyb2xsLmNsaWVu
dFdpZHRoKSkpOwogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHdoZWVsU3RhcnRY
ID0gbnVsbDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzCisgICAgICBkaXNw
bGF5LndoZWVsU3RhcnRYID0gbnVsbDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dy
ZXNzCiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxzUGVy
VW5pdCAhPSBudWxsKSB7CiAgICAgICB2YXIgcGl4ZWxzID0gZHkgKiB3aGVlbFBpeGVsc1BlclVu
aXQ7Ci0gICAgICB2YXIgdG9wID0gY20udmlldy5zY3JvbGxUb3AsIGJvdCA9IHRvcCArIGNtLmRp
c3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisgICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9s
bFRvcCwgYm90ID0gdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIGlm
IChwaXhlbHMgPCAwKSB0b3AgPSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7Ci0gICAg
ICBlbHNlIGJvdCA9IE1hdGgubWluKGNtLnZpZXcuZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzICsg
NTApOworICAgICAgZWxzZSBib3QgPSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhl
bHMgKyA1MCk7CiAgICAgICB1cGRhdGVEaXNwbGF5KGNtLCBbXSwge3RvcDogdG9wLCBib3R0b206
IGJvdH0pOwogICAgIH0KIAogICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkgewotICAgICAgaWYg
KHdoZWVsU3RhcnRYID09IG51bGwpIHsKLSAgICAgICAgd2hlZWxTdGFydFggPSBzY3JvbGwuc2Ny
b2xsTGVmdDsgd2hlZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wOwotICAgICAgICB3aGVlbERY
ID0gZHg7IHdoZWVsRFkgPSBkeTsKKyAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51
bGwpIHsKKyAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IHNjcm9sbC5zY3JvbGxMZWZ0OyBk
aXNwbGF5LndoZWVsU3RhcnRZID0gc2Nyb2xsLnNjcm9sbFRvcDsKKyAgICAgICAgZGlzcGxheS53
aGVlbERYID0gZHg7IGRpc3BsYXkud2hlZWxEWSA9IGR5OwogICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgewotICAgICAgICAgIGlmICh3aGVlbFN0YXJ0WCA9PSBudWxsKSByZXR1cm47Ci0g
ICAgICAgICAgdmFyIG1vdmVkWCA9IHNjcm9sbC5zY3JvbGxMZWZ0IC0gd2hlZWxTdGFydFg7Ci0g
ICAgICAgICAgdmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSB3aGVlbFN0YXJ0WTsKLSAg
ICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiB3aGVlbERZICYmIG1vdmVkWSAvIHdoZWVs
RFkpIHx8Ci0gICAgICAgICAgICAobW92ZWRYICYmIHdoZWVsRFggJiYgbW92ZWRYIC8gd2hlZWxE
WCk7Ci0gICAgICAgICAgd2hlZWxTdGFydFggPSB3aGVlbFN0YXJ0WSA9IG51bGw7CisgICAgICAg
ICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgcmV0dXJuOworICAgICAgICAgIHZh
ciBtb3ZlZFggPSBzY3JvbGwuc2Nyb2xsTGVmdCAtIGRpc3BsYXkud2hlZWxTdGFydFg7CisgICAg
ICAgICAgdmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSBkaXNwbGF5LndoZWVsU3RhcnRZ
OworICAgICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIGRpc3BsYXkud2hlZWxEWSAmJiBt
b3ZlZFkgLyBkaXNwbGF5LndoZWVsRFkpIHx8CisgICAgICAgICAgICAobW92ZWRYICYmIGRpc3Bs
YXkud2hlZWxEWCAmJiBtb3ZlZFggLyBkaXNwbGF5LndoZWVsRFgpOworICAgICAgICAgIGRpc3Bs
YXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKICAgICAgICAgICBp
ZiAoIXNhbXBsZSkgcmV0dXJuOwogICAgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5pdCA9ICh3aGVl
bFBpeGVsc1BlclVuaXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVsU2FtcGxlcyAr
IDEpOwogICAgICAgICAgICsrd2hlZWxTYW1wbGVzOwogICAgICAgICB9LCAyMDApOwogICAgICAg
fSBlbHNlIHsKLSAgICAgICAgd2hlZWxEWCArPSBkeDsgd2hlZWxEWSArPSBkeTsKKyAgICAgICAg
ZGlzcGxheS53aGVlbERYICs9IGR4OyBkaXNwbGF5LndoZWVsRFkgKz0gZHk7CiAgICAgICB9CiAg
ICAgfQogICB9CkBAIC0xNjkzLDIzICsxODU5LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIC8vIEVuc3VyZSBwcmV2aW91cyBpbnB1dCBoYXMgYmVlbiByZWFkLCBz
byB0aGF0IHRoZSBoYW5kbGVyIHNlZXMgYQogICAgIC8vIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUg
ZG9jdW1lbnQKICAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCAmJiByZWFkSW5wdXQoY20p
KSBjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0gZmFsc2U7Ci0gICAgdmFyIHZpZXcgPSBjbS52aWV3
LCBwcmV2U2hpZnQgPSB2aWV3LnNlbC5zaGlmdDsKKyAgICB2YXIgZG9jID0gY20uZG9jLCBwcmV2
U2hpZnQgPSBkb2Muc2VsLnNoaWZ0LCBkb25lID0gZmFsc2U7CiAgICAgdHJ5IHsKLSAgICAgIGlm
IChpc1JlYWRPbmx5KGNtKSkgdmlldy5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsKLSAgICAgIGlmIChk
cm9wU2hpZnQpIHZpZXcuc2VsLnNoaWZ0ID0gZmFsc2U7Ci0gICAgICBib3VuZChjbSk7Ci0gICAg
fSBjYXRjaChlKSB7Ci0gICAgICBpZiAoZSAhPSBQYXNzKSB0aHJvdyBlOwotICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRz
ID0gdHJ1ZTsKKyAgICAgIGlmIChkcm9wU2hpZnQpIGRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKKyAg
ICAgIGRvbmUgPSBib3VuZChjbSkgIT0gUGFzczsKICAgICB9IGZpbmFsbHkgewotICAgICAgdmll
dy5zZWwuc2hpZnQgPSBwcmV2U2hpZnQ7Ci0gICAgICB2aWV3LnN1cHByZXNzRWRpdHMgPSBmYWxz
ZTsKKyAgICAgIGRvYy5zZWwuc2hpZnQgPSBwcmV2U2hpZnQ7CisgICAgICBjbS5zdGF0ZS5zdXBw
cmVzc0VkaXRzID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBk
b25lOwogICB9CiAKICAgZnVuY3Rpb24gYWxsS2V5TWFwcyhjbSkgewotICAgIHZhciBtYXBzID0g
Y20udmlldy5rZXlNYXBzLnNsaWNlKDApOworICAgIHZhciBtYXBzID0gY20uc3RhdGUua2V5TWFw
cy5zbGljZSgwKTsKICAgICBtYXBzLnB1c2goY20ub3B0aW9ucy5rZXlNYXApOwogICAgIGlmIChj
bS5vcHRpb25zLmV4dHJhS2V5cykgbWFwcy51bnNoaWZ0KGNtLm9wdGlvbnMuZXh0cmFLZXlzKTsK
ICAgICByZXR1cm4gbWFwczsKQEAgLTE3MjUsMjcgKzE4ODgsMjMgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNtLm9wdGlvbnMua2V5TWFwID0gKG5leHQuY2Fs
bCA/IG5leHQuY2FsbChudWxsLCBjbSkgOiBuZXh0KTsKICAgICB9LCA1MCk7CiAKLSAgICB2YXIg
bmFtZSA9IGtleU5hbWVzW2VfcHJvcChlLCAia2V5Q29kZSIpXSwgaGFuZGxlZCA9IGZhbHNlOwot
ICAgIGlmIChuYW1lID09IG51bGwgfHwgZS5hbHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlX3Byb3AoZSwgImFsdEtleSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKLSAgICBpZiAo
ZV9wcm9wKGUsIGZsaXBDdHJsQ21kID8gIm1ldGFLZXkiIDogImN0cmxLZXkiKSkgbmFtZSA9ICJD
dHJsLSIgKyBuYW1lOwotICAgIGlmIChlX3Byb3AoZSwgZmxpcEN0cmxDbWQgPyAiY3RybEtleSIg
OiAibWV0YUtleSIpKSBuYW1lID0gIkNtZC0iICsgbmFtZTsKLQotICAgIHZhciBzdG9wcGVkID0g
ZmFsc2U7Ci0gICAgZnVuY3Rpb24gc3RvcCgpIHsgc3RvcHBlZCA9IHRydWU7IH0KKyAgICB2YXIg
bmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoIW5hbWUp
IHJldHVybiBmYWxzZTsKICAgICB2YXIga2V5bWFwcyA9IGFsbEtleU1hcHMoY20pOwogCi0gICAg
aWYgKGVfcHJvcChlLCAic2hpZnRLZXkiKSkgewotICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleSgi
U2hpZnQtIiArIG5hbWUsIGtleW1hcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGIpIHtyZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9LCBzdG9wKQotICAg
ICAgICB8fCBsb29rdXBLZXkobmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikgewotICAgICAgICAg
IGlmICh0eXBlb2YgYiA9PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBk
b0hhbmRsZUJpbmRpbmcoY20sIGIpOwotICAgICAgICB9LCBzdG9wKTsKKyAgICBpZiAoZS5zaGlm
dEtleSkgeworICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgZnVsbCBuYW1lIChpbmNsdWRp
bmcgJ1NoaWZ0LScpLiBGYWlsaW5nCisgICAgICAvLyB0aGF0LCBzZWUgaWYgdGhlcmUgaXMgYSBj
dXJzb3ItbW90aW9uIGNvbW1hbmQgKHN0YXJ0aW5nIHdpdGgKKyAgICAgIC8vICdnbycpIGJvdW5k
IHRvIHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCisgICAgICBoYW5kbGVkID0gbG9va3Vw
S2V5KCJTaGlmdC0iICsgbmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikge3JldHVybiBkb0hhbmRs
ZUJpbmRpbmcoY20sIGIsIHRydWUpO30pCisgICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUs
IGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9
PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hhbmRsZUJpbmRpbmco
Y20sIGIpOworICAgICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICBoYW5kbGVk
ID0gbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0sIHN0b3ApOworICAg
ICAgaGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7IHJldHVy
biBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KTsKICAgICB9Ci0gICAgaWYgKHN0b3BwZWQpIGhh
bmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoaGFuZGxlZCA9PSAic3RvcCIpIGhhbmRsZWQgPSBmYWxz
ZTsKKwogICAgIGlmIChoYW5kbGVkKSB7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAg
ICAgcmVzdGFydEJsaW5rKGNtKTsKQEAgLTE3NjcsMTggKzE5MjYsMTggQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIHZhciBsYXN0U3RvcHBlZEtleSA9IG51bGw7CiAgIGZ1
bmN0aW9uIG9uS2V5RG93bihlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoIWNtLnZp
ZXcuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CisgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZv
Y3VzKGNtKTsKICAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09IDI3KSB7IGUucmV0dXJuVmFsdWUg
PSBmYWxzZTsgfQogICAgIGlmIChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5v
bktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwotICAgIHZhciBjb2RlID0gZV9wcm9w
KGUsICJrZXlDb2RlIik7CisgICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7CiAgICAgLy8gSUUgZG9l
cyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KLSAgICBjbS52aWV3LnNlbC5zaGlmdCA9IGNv
ZGUgPT0gMTYgfHwgZV9wcm9wKGUsICJzaGlmdEtleSIpOworICAgIGNtLmRvYy5zZWwuc2hpZnQg
PSBjb2RlID09IDE2IHx8IGUuc2hpZnRLZXk7CiAgICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50
IG9wdGlvbiBhIGNoYW5jZSB0byBoYW5kbGUgdGhpcy4KICAgICB2YXIgaGFuZGxlZCA9IGhhbmRs
ZUtleUJpbmRpbmcoY20sIGUpOwogICAgIGlmIChvcGVyYSkgewogICAgICAgbGFzdFN0b3BwZWRL
ZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7CiAgICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2
ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCi0gICAgICBpZiAo
IWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiAhaGFzQ29weUV2ZW50ICYmIGVfcHJvcChlLCBtYWMg
PyAibWV0YUtleSIgOiAiY3RybEtleSIpKQorICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0g
ODggJiYgIWhhc0NvcHlFdmVudCAmJiAobWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSkKICAg
ICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7CiAgICAgfQogICB9CkBAIC0xNzg2LDU2ICsx
OTQ1LDU1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBv
bktleVByZXNzKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwogICAgIGlmIChjbS5vcHRpb25zLm9u
S2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJu
OwotICAgIHZhciBrZXlDb2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIiksIGNoYXJDb2RlID0gZV9w
cm9wKGUsICJjaGFyQ29kZSIpOworICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29k
ZSA9IGUuY2hhckNvZGU7CiAgICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRL
ZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9
CiAgICAgaWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1s
KSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBjaCA9IFN0cmlu
Zy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7Ci0g
ICAgaWYgKHRoaXMub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIHRoaXMudmlldy5tb2RlLmVsZWN0
cmljQ2hhcnMgJiYKKyAgICBpZiAodGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYgdGhpcy5k
b2MubW9kZS5lbGVjdHJpY0NoYXJzICYmCiAgICAgICAgIHRoaXMub3B0aW9ucy5zbWFydEluZGVu
dCAmJiAhaXNSZWFkT25seSh0aGlzKSAmJgotICAgICAgICB0aGlzLnZpZXcubW9kZS5lbGVjdHJp
Y0NoYXJzLmluZGV4T2YoY2gpID4gLTEpCi0gICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oKSB7aW5kZW50TGluZShjbSwgY20udmlldy5zZWwudG8ubGluZSwgInNtYXJ0Iik7
fSksIDc1KTsKKyAgICAgICAgdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoY2gp
ID4gLTEpCisgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7aW5kZW50
TGluZShjbSwgY20uZG9jLnNlbC50by5saW5lLCAic21hcnQiKTt9KSwgNzUpOwogICAgIGlmICho
YW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47CiAgICAgZmFzdFBvbGwoY20pOwog
ICB9CiAKICAgZnVuY3Rpb24gb25Gb2N1cyhjbSkgewogICAgIGlmIChjbS5vcHRpb25zLnJlYWRP
bmx5ID09ICJub2N1cnNvciIpIHJldHVybjsKLSAgICBpZiAoIWNtLnZpZXcuZm9jdXNlZCkgewor
ICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgewogICAgICAgc2lnbmFsKGNtLCAiZm9jdXMiLCBj
bSk7Ci0gICAgICBjbS52aWV3LmZvY3VzZWQgPSB0cnVlOwotICAgICAgaWYgKGNtLmRpc3BsYXku
c2Nyb2xsZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pID09IC0x
KQotICAgICAgICBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3It
Zm9jdXNlZCI7CisgICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTsKKyAgICAgIGlmIChjbS5k
aXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8p
ID09IC0xKQorICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1p
cnJvci1mb2N1c2VkIjsKICAgICAgIHJlc2V0SW5wdXQoY20sIHRydWUpOwogICAgIH0KICAgICBz
bG93UG9sbChjbSk7CiAgICAgcmVzdGFydEJsaW5rKGNtKTsKICAgfQogICBmdW5jdGlvbiBvbkJs
dXIoY20pIHsKLSAgICBpZiAoY20udmlldy5mb2N1c2VkKSB7CisgICAgaWYgKGNtLnN0YXRlLmZv
Y3VzZWQpIHsKICAgICAgIHNpZ25hbChjbSwgImJsdXIiLCBjbSk7Ci0gICAgICBjbS52aWV3LmZv
Y3VzZWQgPSBmYWxzZTsKLSAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xhc3NOYW1lID0gY20u
ZGlzcGxheS5zY3JvbGxlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIs
ICIiKTsKKyAgICAgIGNtLnN0YXRlLmZvY3VzZWQgPSBmYWxzZTsKKyAgICAgIGNtLmRpc3BsYXku
d3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2Uo
IiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7CiAgICAgfQogICAgIGNsZWFySW50ZXJ2YWwoY20u
ZGlzcGxheS5ibGlua2VyKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2lmICghY20udmll
dy5mb2N1c2VkKSBjbS52aWV3LnNlbC5zaGlmdCA9IGZhbHNlO30sIDE1MCk7CisgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNtLmRvYy5zZWwuc2hpZnQg
PSBmYWxzZTt9LCAxNTApOwogICB9CiAKICAgdmFyIGRldGVjdGluZ1NlbGVjdEFsbDsKICAgZnVu
Y3Rpb24gb25Db250ZXh0TWVudShjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNlbCA9IGNtLmRvYy5zZWw7CiAgICAg
aWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAKLSAgICB2YXIgc2Vs
ID0gY20udmlldy5zZWw7CisKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Ny
b2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CiAgICAgaWYgKCFwb3MgfHwgb3Bl
cmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgogICAgIGlmIChwb3NFcShzZWwuZnJv
bSwgc2VsLnRvKSB8fCBwb3NMZXNzKHBvcywgc2VsLmZyb20pIHx8ICFwb3NMZXNzKHBvcywgc2Vs
LnRvKSkKLSAgICAgIG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbSwgcG9zLCBwb3MpOwor
ICAgICAgb3BlcmF0aW9uKGNtLCBzZXRTZWxlY3Rpb24pKGNtLmRvYywgcG9zLCBwb3MpOwogCiAg
ICAgdmFyIG9sZENTUyA9IGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICBkaXNwbGF5
LmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICBkaXNwbGF5LmlucHV0
LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGZpeGVkOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAz
MHB4OyB0b3A6ICIgKyAoZS5jbGllbnRZIC0gNSkgKwogICAgICAgInB4OyBsZWZ0OiAiICsgKGUu
Y2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0
bGluZTogbm9uZTsiICsKLSAgICAgICJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92
ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7
CisgICAgICAiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVu
OyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01
KTsiOwogICAgIGZvY3VzSW5wdXQoY20pOwogICAgIHJlc2V0SW5wdXQoY20sIHRydWUpOwogICAg
IC8vIEFkZHMgIlNlbGVjdCBhbGwiIHRvIGNvbnRleHQgbWVudSBpbiBGRgpAQCAtMTg0OCwyNiAr
MjAwNiwyOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHNsb3dQ
b2xsKGNtKTsKIAogICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxl
Y3QtYWxsIAotICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkg
eworICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCAmJiAoIWll
IHx8IGllX2x0OSkpIHsKICAgICAgICAgY2xlYXJUaW1lb3V0KGRldGVjdGluZ1NlbGVjdEFsbCk7
CiAgICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIiAiICsgKHBvc0Vx
KHNlbC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVlKSwgaSA9IDA7CiAg
ICAgICAgIGRpc3BsYXkucHJldklucHV0ID0gIiAiOwogICAgICAgICBkaXNwbGF5LmlucHV0LnNl
bGVjdGlvblN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVu
Z3RoOwotICAgICAgICBkZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHBv
bGwoKXsKKyAgICAgICAgdmFyIHBvbGwgPSBmdW5jdGlvbigpewogICAgICAgICAgIGlmIChkaXNw
bGF5LnByZXZJbnB1dCA9PSAiICIgJiYgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9PSAw
KQogICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBjb21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKICAg
ICAgICAgICBlbHNlIGlmIChpKysgPCAxMCkgZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91
dChwb2xsLCA1MDApOwogICAgICAgICAgIGVsc2UgcmVzZXRJbnB1dChjbSk7Ci0gICAgICAgIH0s
IDIwMCk7CisgICAgICAgIH07CisgICAgICAgIGRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVv
dXQocG9sbCwgMjAwKTsKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZ2Vja28pIHsKKyAgICBp
ZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSB7CiAgICAgICBlX3N0b3AoZSk7Ci0gICAgICBvbih3aW5k
b3csICJtb3VzZXVwIiwgZnVuY3Rpb24gbW91c2V1cCgpIHsKKyAgICAgIHZhciBtb3VzZXVwID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgIG9mZih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1cCk7CiAg
ICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7Ci0gICAgICB9KTsKKyAgICAgIH07CisgICAg
ICBvbih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1cCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHNl
dFRpbWVvdXQocmVoaWRlLCA1MCk7CiAgICAgfQpAQCAtMTg3NSwxMjQgKzIwMzUsMjA0IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFVQREFUSU5HCiAKLSAgLy8g
UmVwbGFjZSB0aGUgcmFuZ2UgZnJvbSBmcm9tIHRvIHRvIGJ5IHRoZSBzdHJpbmdzIGluIG5ld1Rl
eHQuCi0gIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2VsZWN0aW9uIHRvIHNlbEZyb20sIHNlbFRv
LgotICBmdW5jdGlvbiB1cGRhdGVEb2MoY20sIGZyb20sIHRvLCBuZXdUZXh0LCBzZWxVcGRhdGUs
IG9yaWdpbikgeworICBmdW5jdGlvbiBjaGFuZ2VFbmQoY2hhbmdlKSB7CisgICAgcmV0dXJuIFBv
cyhjaGFuZ2UuZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSwKKyAgICAgICAgICAg
ICAgIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8g
Y2hhbmdlLmZyb20uY2ggOiAwKSk7CisgIH0KKworICAvLyBNYWtlIHN1cmUgYSBwb3NpdGlvbiB3
aWxsIGJlIHZhbGlkIGFmdGVyIHRoZSBnaXZlbiBjaGFuZ2UuCisgIGZ1bmN0aW9uIGNsaXBQb3N0
Q2hhbmdlKGRvYywgY2hhbmdlLCBwb3MpIHsKKyAgICBpZiAoIXBvc0xlc3MoY2hhbmdlLmZyb20s
IHBvcykpIHJldHVybiBjbGlwUG9zKGRvYywgcG9zKTsKKyAgICB2YXIgZGlmZiA9IChjaGFuZ2Uu
dGV4dC5sZW5ndGggLSAxKSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpOwor
ICAgIGlmIChwb3MubGluZSA+IGNoYW5nZS50by5saW5lICsgZGlmZikgeworICAgICAgdmFyIHBy
ZUxpbmUgPSBwb3MubGluZSAtIGRpZmYsIGxhc3RMaW5lID0gZG9jLmZpcnN0ICsgZG9jLnNpemUg
LSAxOworICAgICAgaWYgKHByZUxpbmUgPiBsYXN0TGluZSkgcmV0dXJuIFBvcyhsYXN0TGluZSwg
Z2V0TGluZShkb2MsIGxhc3RMaW5lKS50ZXh0Lmxlbmd0aCk7CisgICAgICByZXR1cm4gY2xpcFRv
TGVuKHBvcywgZ2V0TGluZShkb2MsIHByZUxpbmUpLnRleHQubGVuZ3RoKTsKKyAgICB9CisgICAg
aWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lICsgZGlmZikKKyAgICAgIHJldHVybiBjbGlw
VG9MZW4ocG9zLCBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFuZ2UudGV4dC5sZW5ndGgg
PT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkgKworICAgICAgICAgICAgICAgICAgICAgICBnZXRM
aW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpLnRleHQubGVuZ3RoIC0gY2hhbmdlLnRvLmNoKTsKKyAg
ICB2YXIgaW5zaWRlID0gcG9zLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lOworICAgIHJldHVybiBj
bGlwVG9MZW4ocG9zLCBjaGFuZ2UudGV4dFtpbnNpZGVdLmxlbmd0aCArIChpbnNpZGUgPyAwIDog
Y2hhbmdlLmZyb20uY2gpKTsKKyAgfQorCisgIC8vIEhpbnQgY2FuIGJlIG51bGx8ImVuZCJ8InN0
YXJ0InwiYXJvdW5kInx7YW5jaG9yLGhlYWR9CisgIGZ1bmN0aW9uIGNvbXB1dGVTZWxBZnRlckNo
YW5nZShkb2MsIGNoYW5nZSwgaGludCkgeworICAgIGlmIChoaW50ICYmIHR5cGVvZiBoaW50ID09
ICJvYmplY3QiKSAvLyBBc3N1bWVkIHRvIGJlIHthbmNob3IsIGhlYWR9IG9iamVjdAorICAgICAg
cmV0dXJuIHthbmNob3I6IGNsaXBQb3N0Q2hhbmdlKGRvYywgY2hhbmdlLCBoaW50LmFuY2hvciks
CisgICAgICAgICAgICAgIGhlYWQ6IGNsaXBQb3N0Q2hhbmdlKGRvYywgY2hhbmdlLCBoaW50Lmhl
YWQpfTsKKworICAgIGlmIChoaW50ID09ICJzdGFydCIpIHJldHVybiB7YW5jaG9yOiBjaGFuZ2Uu
ZnJvbSwgaGVhZDogY2hhbmdlLmZyb219OworICAgIAorICAgIHZhciBlbmQgPSBjaGFuZ2VFbmQo
Y2hhbmdlKTsKKyAgICBpZiAoaGludCA9PSAiYXJvdW5kIikgcmV0dXJuIHthbmNob3I6IGNoYW5n
ZS5mcm9tLCBoZWFkOiBlbmR9OworICAgIGlmIChoaW50ID09ICJlbmQiKSByZXR1cm4ge2FuY2hv
cjogZW5kLCBoZWFkOiBlbmR9OworCisgICAgLy8gaGludCBpcyBudWxsLCBsZWF2ZSB0aGUgc2Vs
ZWN0aW9uIGFsb25lIGFzIG11Y2ggYXMgcG9zc2libGUKKyAgICB2YXIgYWRqdXN0UG9zID0gZnVu
Y3Rpb24ocG9zKSB7CisgICAgICBpZiAocG9zTGVzcyhwb3MsIGNoYW5nZS5mcm9tKSkgcmV0dXJu
IHBvczsKKyAgICAgIGlmICghcG9zTGVzcyhjaGFuZ2UudG8sIHBvcykpIHJldHVybiBlbmQ7CisK
KyAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAoY2hhbmdl
LnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSAtIDEsIGNoID0gcG9zLmNoOworICAgICAgaWYg
KHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSBjaCArPSBlbmQuY2ggLSBjaGFuZ2UudG8uY2g7
CisgICAgICByZXR1cm4gUG9zKGxpbmUsIGNoKTsKKyAgICB9OworICAgIHJldHVybiB7YW5jaG9y
OiBhZGp1c3RQb3MoZG9jLnNlbC5hbmNob3IpLCBoZWFkOiBhZGp1c3RQb3MoZG9jLnNlbC5oZWFk
KX07CisgIH0KKworICBmdW5jdGlvbiBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgICB2
YXIgb2JqID0geworICAgICAgY2FuY2VsZWQ6IGZhbHNlLAorICAgICAgZnJvbTogY2hhbmdlLmZy
b20sCisgICAgICB0bzogY2hhbmdlLnRvLAorICAgICAgdGV4dDogY2hhbmdlLnRleHQsCisgICAg
ICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sCisgICAgICB1cGRhdGU6IGZ1bmN0aW9uKGZyb20sIHRv
LCB0ZXh0LCBvcmlnaW4pIHsKKyAgICAgICAgaWYgKGZyb20pIHRoaXMuZnJvbSA9IGNsaXBQb3Mo
ZG9jLCBmcm9tKTsKKyAgICAgICAgaWYgKHRvKSB0aGlzLnRvID0gY2xpcFBvcyhkb2MsIHRvKTsK
KyAgICAgICAgaWYgKHRleHQpIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIGlmIChvcmlnaW4g
IT09IHVuZGVmaW5lZCkgdGhpcy5vcmlnaW4gPSBvcmlnaW47CisgICAgICB9LAorICAgICAgY2Fu
Y2VsOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxlZCA9IHRydWU7IH0KKyAgICB9OworICAgIHNp
Z25hbChkb2MsICJiZWZvcmVDaGFuZ2UiLCBkb2MsIG9iaik7CisgICAgaWYgKGRvYy5jbSkgc2ln
bmFsKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKKworICAgIGlmIChvYmou
Y2FuY2VsZWQpIHJldHVybiBudWxsOworICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBv
YmoudG8sIHRleHQ6IG9iai50ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59OworICB9CisKKyAgLy8g
UmVwbGFjZSB0aGUgcmFuZ2UgZnJvbSBmcm9tIHRvIHRvIGJ5IHRoZSBzdHJpbmdzIGluIHJlcGxh
Y2VtZW50LgorICAvLyBjaGFuZ2UgaXMgYSB7ZnJvbSwgdG8sIHRleHQgWywgb3JpZ2luXX0gb2Jq
ZWN0CisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2UoZG9jLCBjaGFuZ2UsIHNlbFVwZGF0ZSwgaWdub3Jl
UmVhZE9ubHkpIHsKKyAgICBpZiAoZG9jLmNtKSB7CisgICAgICBpZiAoIWRvYy5jbS5jdXJPcCkg
cmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBzZWxVcGRh
dGUsIGlnbm9yZVJlYWRPbmx5KTsKKyAgICAgIGlmIChkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0
cykgcmV0dXJuOworICAgIH0KKworICAgIGlmIChoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5n
ZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpKSB7Cisg
ICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOworICAgICAgaWYgKCFjaGFu
Z2UpIHJldHVybjsKKyAgICB9CisKICAgICAvLyBQb3NzaWJseSBzcGxpdCBvciBzdXBwcmVzcyB0
aGUgdXBkYXRlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZQogICAgIC8vIG9mIHJlYWQtb25seSBzcGFu
cyBpbiBpdHMgcmFuZ2UuCi0gICAgdmFyIHNwbGl0ID0gc2F3UmVhZE9ubHlTcGFucyAmJgotICAg
ICAgcmVtb3ZlUmVhZE9ubHlSYW5nZXMoY20udmlldy5kb2MsIGZyb20sIHRvKTsKKyAgICB2YXIg
c3BsaXQgPSBzYXdSZWFkT25seVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFk
T25seVJhbmdlcyhkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwogICAgIGlmIChzcGxpdCkg
ewogICAgICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKQotICAg
ICAgICB1cGRhdGVEb2NJbm5lcihjbSwgc3BsaXRbaV0uZnJvbSwgc3BsaXRbaV0udG8sIFsiIl0s
IG9yaWdpbik7CisgICAgICAgIG1ha2VDaGFuZ2VOb1JlYWRvbmx5KGRvYywge2Zyb206IHNwbGl0
W2ldLmZyb20sIHRvOiBzcGxpdFtpXS50bywgdGV4dDogWyIiXX0pOwogICAgICAgaWYgKHNwbGl0
Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHVwZGF0ZURvY0lubmVyKGNtLCBzcGxpdFswXS5mcm9t
LCBzcGxpdFswXS50bywgbmV3VGV4dCwgc2VsVXBkYXRlLCBvcmlnaW4pOworICAgICAgICBtYWtl
Q2hhbmdlTm9SZWFkb25seShkb2MsIHtmcm9tOiBzcGxpdFswXS5mcm9tLCB0bzogc3BsaXRbMF0u
dG8sIHRleHQ6IGNoYW5nZS50ZXh0fSwgc2VsVXBkYXRlKTsKICAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIHVwZGF0ZURvY0lubmVyKGNtLCBmcm9tLCB0bywgbmV3VGV4dCwgc2VsVXBkYXRlLCBv
cmlnaW4pOworICAgICAgbWFrZUNoYW5nZU5vUmVhZG9ubHkoZG9jLCBjaGFuZ2UsIHNlbFVwZGF0
ZSk7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gdXBkYXRlRG9jSW5uZXIoY20sIGZyb20sIHRv
LCBuZXdUZXh0LCBzZWxVcGRhdGUsIG9yaWdpbikgewotICAgIGlmIChjbS52aWV3LnN1cHByZXNz
RWRpdHMpIHJldHVybjsKKyAgZnVuY3Rpb24gbWFrZUNoYW5nZU5vUmVhZG9ubHkoZG9jLCBjaGFu
Z2UsIHNlbFVwZGF0ZSkgeworICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5n
ZShkb2MsIGNoYW5nZSwgc2VsVXBkYXRlKTsKKyAgICBhZGRUb0hpc3RvcnkoZG9jLCBjaGFuZ2Us
IHNlbEFmdGVyLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4pOwogCi0gICAgdmFyIHZp
ZXcgPSBjbS52aWV3LCBkb2MgPSB2aWV3LmRvYywgb2xkID0gW107Ci0gICAgZG9jLml0ZXIoZnJv
bS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgb2xkLnB1c2gobmV3
SEwobGluZS50ZXh0LCBsaW5lLm1hcmtlZFNwYW5zKSk7CisgICAgbWFrZUNoYW5nZVNpbmdsZURv
Yyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UpKTsKKyAgICB2YXIgcmViYXNlZCA9IFtdOworCisgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0
aW9uKGRvYywgc2hhcmVkSGlzdCkgeworICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2Yo
cmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7CisgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhp
c3RvcnksIGNoYW5nZSk7CisgICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7CisgICAg
ICB9CisgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBzdHJldGNo
U3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7CiAgICAgfSk7Ci0gICAgdmFyIHN0YXJ0U2Vs
RnJvbSA9IHZpZXcuc2VsLmZyb20sIHN0YXJ0U2VsVG8gPSB2aWV3LnNlbC50bzsKLSAgICB2YXIg
bGluZXMgPSB1cGRhdGVNYXJrZWRTcGFucyhobFNwYW5zKG9sZFswXSksIGhsU3BhbnMobHN0KG9s
ZCkpLCBmcm9tLmNoLCB0by5jaCwgbmV3VGV4dCk7Ci0gICAgdmFyIHJldHZhbCA9IHVwZGF0ZURv
Y05vVW5kbyhjbSwgZnJvbSwgdG8sIGxpbmVzLCBzZWxVcGRhdGUsIG9yaWdpbik7Ci0gICAgaWYg
KHZpZXcuaGlzdG9yeSkgYWRkQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBv
bGQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWxGcm9t
LCBzdGFydFNlbFRvLCB2aWV3LnNlbC5mcm9tLCB2aWV3LnNlbC50byk7Ci0gICAgcmV0dXJuIHJl
dHZhbDsKLSAgfQotCi0gIGZ1bmN0aW9uIHVucmVkb0hlbHBlcihjbSwgdHlwZSkgewotICAgIHZh
ciBkb2MgPSBjbS52aWV3LmRvYywgaGlzdCA9IGNtLnZpZXcuaGlzdG9yeTsKLSAgICB2YXIgc2V0
ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUpLnBvcCgpOwotICAg
IGlmICghc2V0KSByZXR1cm47Ci0gICAgdmFyIGFudGkgPSB7ZXZlbnRzOiBbXSwgZnJvbUJlZm9y
ZTogc2V0LmZyb21BZnRlciwgdG9CZWZvcmU6IHNldC50b0FmdGVyLAotICAgICAgICAgICAgICAg
IGZyb21BZnRlcjogc2V0LmZyb21CZWZvcmUsIHRvQWZ0ZXI6IHNldC50b0JlZm9yZX07Ci0gICAg
Zm9yICh2YXIgaSA9IHNldC5ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKLSAg
ICAgIGhpc3QuZGlydHlDb3VudGVyICs9IHR5cGUgPT0gInVuZG8iID8gLTEgOiAxOwotICAgICAg
dmFyIGNoYW5nZSA9IHNldC5ldmVudHNbaV07Ci0gICAgICB2YXIgcmVwbGFjZWQgPSBbXSwgZW5k
ID0gY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLmFkZGVkOwotICAgICAgZG9jLml0ZXIoY2hhbmdlLnN0
YXJ0LCBlbmQsIGZ1bmN0aW9uKGxpbmUpIHsgcmVwbGFjZWQucHVzaChuZXdITChsaW5lLnRleHQs
IGxpbmUubWFya2VkU3BhbnMpKTsgfSk7Ci0gICAgICBhbnRpLmV2ZW50cy5wdXNoKHtzdGFydDog
Y2hhbmdlLnN0YXJ0LCBhZGRlZDogY2hhbmdlLm9sZC5sZW5ndGgsIG9sZDogcmVwbGFjZWR9KTsK
LSAgICAgIHZhciBzZWxQb3MgPSBpID8gbnVsbCA6IHtmcm9tOiBzZXQuZnJvbUJlZm9yZSwgdG86
IHNldC50b0JlZm9yZX07Ci0gICAgICB1cGRhdGVEb2NOb1VuZG8oY20sIHtsaW5lOiBjaGFuZ2Uu
c3RhcnQsIGNoOiAwfSwge2xpbmU6IGVuZCAtIDEsIGNoOiBnZXRMaW5lKGRvYywgZW5kLTEpLnRl
eHQubGVuZ3RofSwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Uub2xkLCBzZWxQb3MsIHR5
cGUpOwotICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShkb2Ms
IHR5cGUpIHsKKyAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OworICAgIHZhciBldmVudCA9ICh0
eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5wb3AoKTsKKyAgICBpZiAo
IWV2ZW50KSByZXR1cm47CisgICAgaGlzdC5kaXJ0eUNvdW50ZXIgKz0gdHlwZSA9PSAidW5kbyIg
PyAtMSA6IDE7CisKKyAgICB2YXIgYW50aSA9IHtjaGFuZ2VzOiBbXSwgYW5jaG9yQmVmb3JlOiBl
dmVudC5hbmNob3JBZnRlciwgaGVhZEJlZm9yZTogZXZlbnQuaGVhZEFmdGVyLAorICAgICAgICAg
ICAgICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZlbnQu
aGVhZEJlZm9yZX07CiAgICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC51bmRvbmUgOiBoaXN0LmRv
bmUpLnB1c2goYW50aSk7CisKKyAgICBmb3IgKHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGgg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07
CisgICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKKyAgICAgIGFudGkuY2hhbmdlcy5wdXNoKGhp
c3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7CisKKyAgICAgIHZhciBhZnRlciA9
IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIG51bGwpCisgICAgICAgICAg
ICAgICAgICAgIDoge2FuY2hvcjogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkOiBldmVudC5oZWFk
QmVmb3JlfTsKKyAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBt
ZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7CisgICAgICB2YXIgcmViYXNlZCA9IFtdOworCisg
ICAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24oZG9jLCBzaGFyZWRIaXN0KSB7CisgICAgICAg
IGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkg
eworICAgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7CisgICAgICAgICAg
cmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTsKKyAgICAgICAgfQorICAgICAgICBtYWtlQ2hhbmdl
U2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7
CisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzaGlmdERvYyhkb2MsIGRpc3Rh
bmNlKSB7CisgICAgZnVuY3Rpb24gc2hpZnRQb3MocG9zKSB7cmV0dXJuIFBvcyhwb3MubGluZSAr
IGRpc3RhbmNlLCBwb3MuY2gpO30KKyAgICBkb2MuZmlyc3QgKz0gZGlzdGFuY2U7CisgICAgaWYg
KGRvYy5jbSkgcmVnQ2hhbmdlKGRvYy5jbSwgZG9jLmZpcnN0LCBkb2MuZmlyc3QsIGRpc3RhbmNl
KTsKKyAgICBkb2Muc2VsLmhlYWQgPSBzaGlmdFBvcyhkb2Muc2VsLmhlYWQpOyBkb2Muc2VsLmFu
Y2hvciA9IHNoaWZ0UG9zKGRvYy5zZWwuYW5jaG9yKTsKKyAgICBkb2Muc2VsLmZyb20gPSBzaGlm
dFBvcyhkb2Muc2VsLmZyb20pOyBkb2Muc2VsLnRvID0gc2hpZnRQb3MoZG9jLnNlbC50byk7CiAg
IH0KIAotICBmdW5jdGlvbiB1cGRhdGVEb2NOb1VuZG8oY20sIGZyb20sIHRvLCBsaW5lcywgc2Vs
VXBkYXRlLCBvcmlnaW4pIHsKLSAgICB2YXIgdmlldyA9IGNtLnZpZXcsIGRvYyA9IHZpZXcuZG9j
LCBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBpZiAodmlldy5zdXBwcmVzc0VkaXRzKSByZXR1
cm47CisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVy
LCBzcGFucykgeworICAgIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkKKyAgICAgIHJldHVy
biBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlU2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2Vs
QWZ0ZXIsIHNwYW5zKTsKKworICAgIGlmIChjaGFuZ2UudG8ubGluZSA8IGRvYy5maXJzdCkgewor
ICAgICAgc2hpZnREb2MoZG9jLCBjaGFuZ2UudGV4dC5sZW5ndGggLSAxIC0gKGNoYW5nZS50by5s
aW5lIC0gY2hhbmdlLmZyb20ubGluZSkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
Y2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm47CisKKyAgICAvLyBDbGlw
IHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhpcyBkb2MKKyAgICBpZiAoY2hhbmdlLmZyb20u
bGluZSA8IGRvYy5maXJzdCkgeworICAgICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3Ro
IC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTsKKyAgICAgIHNoaWZ0RG9jKGRv
Yywgc2hpZnQpOworICAgICAgY2hhbmdlID0ge2Zyb206IFBvcyhkb2MuZmlyc3QsIDApLCB0bzog
UG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50by5jaCksCisgICAgICAgICAgICAg
ICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59OworICAg
IH0KKyAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGluZSgpOworICAgIGlmIChjaGFuZ2UudG8ubGlu
ZSA+IGxhc3QpIHsKKyAgICAgIGNoYW5nZSA9IHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IFBvcyhs
YXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpLAorICAgICAgICAgICAgICAgIHRl
eHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdlLm9yaWdpbn07CisgICAgfQorCisg
ICAgaWYgKCFzZWxBZnRlcikgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBj
aGFuZ2UsIG51bGwpOworICAgIGlmIChkb2MuY20pIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRv
cihkb2MuY20sIGNoYW5nZSwgc3BhbnMsIHNlbEFmdGVyKTsKKyAgICBlbHNlIHVwZGF0ZURvYyhk
b2MsIGNoYW5nZSwgc3BhbnMsIHNlbEFmdGVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1ha2VDaGFu
Z2VTaW5nbGVEb2NJbkVkaXRvcihjbSwgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpIHsKKyAgICB2
YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZnJvbSA9IGNoYW5nZS5mcm9t
LCB0byA9IGNoYW5nZS50bzsKIAotICAgIHZhciBubGluZXMgPSB0by5saW5lIC0gZnJvbS5saW5l
LCBmaXJzdExpbmUgPSBnZXRMaW5lKGRvYywgZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5l
KGRvYywgdG8ubGluZSk7CiAgICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBjaGVj
a1dpZHRoU3RhcnQgPSBmcm9tLmxpbmU7CiAgICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZykgewotICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZG9jLCBmaXJz
dExpbmUpKTsKKyAgICAgIGNoZWNrV2lkdGhTdGFydCA9IGxpbmVObyh2aXN1YWxMaW5lKGRvYywg
Z2V0TGluZShkb2MsIGZyb20ubGluZSkpKTsKICAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFy
dCwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYgKGxpbmVMZW5ndGgo
ZG9jLCBsaW5lKSA9PSB2aWV3Lm1heExpbmVMZW5ndGgpIHsKKyAgICAgICAgaWYgKGxpbmUgPT0g
ZGlzcGxheS5tYXhMaW5lKSB7CiAgICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsK
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgfSk7CiAgICAgfQogCi0g
ICAgdmFyIGxhc3RITCA9IGxzdChsaW5lcyksIHRoID0gdGV4dEhlaWdodChkaXNwbGF5KTsKLQot
ICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAoZnJvbS5jaCA9
PSAwICYmIHRvLmNoID09IDAgJiYgaGxUZXh0KGxhc3RITCkgPT0gIiIpIHsKLSAgICAgIC8vIFRo
aXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKLSAg
ICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0
by4KLSAgICAgIHZhciBhZGRlZCA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5l
cy5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKGhs
VGV4dChsaW5lc1tpXSksIGhsU3BhbnMobGluZXNbaV0pLCB0aCkpOwotICAgICAgdXBkYXRlTGlu
ZShjbSwgbGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGhsU3BhbnMobGFzdEhMKSk7Ci0gICAgICBp
ZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzLCBjbSk7Ci0gICAgICBpZiAo
YWRkZWQubGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwotICAgIH0gZWxzZSBp
ZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7Ci0gICAgICBpZiAobGluZXMubGVuZ3RoID09IDEp
IHsKLSAgICAgICAgdXBkYXRlTGluZShjbSwgZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGlj
ZSgwLCBmcm9tLmNoKSArIGhsVGV4dChsaW5lc1swXSkgKwotICAgICAgICAgICAgICAgICAgIGZp
cnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgaGxTcGFucyhsaW5lc1swXSkpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9IDEsIGUgPSBsaW5lcy5sZW5n
dGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUoaGxUZXh0
KGxpbmVzW2ldKSwgaGxTcGFucyhsaW5lc1tpXSksIHRoKSk7Ci0gICAgICAgIGFkZGVkLnB1c2go
bWFrZUxpbmUoaGxUZXh0KGxhc3RITCkgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGhs
U3BhbnMobGFzdEhMKSwgdGgpKTsKLSAgICAgICAgdXBkYXRlTGluZShjbSwgZmlyc3RMaW5lLCBm
aXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGhsVGV4dChsaW5lc1swXSksIGhsU3Bh
bnMobGluZXNbMF0pKTsKLSAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7
Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChsaW5lcy5sZW5ndGggPT0gMSkgewotICAgICAgdXBk
YXRlTGluZShjbSwgZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSAr
IGhsVGV4dChsaW5lc1swXSkgKwotICAgICAgICAgICAgICAgICBsYXN0TGluZS50ZXh0LnNsaWNl
KHRvLmNoKSwgaGxTcGFucyhsaW5lc1swXSkpOwotICAgICAgZG9jLnJlbW92ZShmcm9tLmxpbmUg
KyAxLCBubGluZXMsIGNtKTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIGFkZGVkID0gW107Ci0g
ICAgICB1cGRhdGVMaW5lKGNtLCBmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZy
b20uY2gpICsgaGxUZXh0KGxpbmVzWzBdKSwgaGxTcGFucyhsaW5lc1swXSkpOwotICAgICAgdXBk
YXRlTGluZShjbSwgbGFzdExpbmUsIGhsVGV4dChsYXN0SEwpICsgbGFzdExpbmUudGV4dC5zbGlj
ZSh0by5jaCksIGhsU3BhbnMobGFzdEhMKSk7Ci0gICAgICBmb3IgKHZhciBpID0gMSwgZSA9IGxp
bmVzLmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCi0gICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUo
aGxUZXh0KGxpbmVzW2ldKSwgaGxTcGFucyhsaW5lc1tpXSksIHRoKSk7Ci0gICAgICBpZiAobmxp
bmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxLCBjbSk7Ci0gICAg
ICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKLSAgICB9CisgICAgdXBkYXRlRG9j
KGRvYywgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIsIGVzdGltYXRlSGVpZ2h0KGNtKSk7CiAKLSAg
ICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIHZhciBwZXJMaW5lID0gTWF0
aC5tYXgoNSwgZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aChkaXNwbGF5
KSAtIDMpOwotICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBsaW5lcy5sZW5n
dGgsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHJldHVy
bjsKLSAgICAgICAgdmFyIGd1ZXNzID0gKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVy
TGluZSkgfHwgMSkgKiB0aDsKLSAgICAgICAgaWYgKGd1ZXNzICE9IGxpbmUuaGVpZ2h0KSB1cGRh
dGVMaW5lSGVpZ2h0KGxpbmUsIGd1ZXNzKTsKLSAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGluZSArIGxpbmVzLmxlbmd0aCwgZnVu
Y3Rpb24obGluZSkgeworICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAg
IGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3Ro
LCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGlu
ZSk7Ci0gICAgICAgIGlmIChsZW4gPiB2aWV3Lm1heExpbmVMZW5ndGgpIHsKLSAgICAgICAgICB2
aWV3Lm1heExpbmUgPSBsaW5lOwotICAgICAgICAgIHZpZXcubWF4TGluZUxlbmd0aCA9IGxlbjsK
LSAgICAgICAgICB2aWV3Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGxlbiA+
IGRpc3BsYXkubWF4TGluZUxlbmd0aCkgeworICAgICAgICAgIGRpc3BsYXkubWF4TGluZSA9IGxp
bmU7CisgICAgICAgICAgZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuOworICAgICAgICAgIGRp
c3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0
aCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICB9KTsKQEAgLTIwMDAsODIgKzIyNDAsNjIgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogCiAgICAgLy8gQWRqdXN0
IGZyb250aWVyLCBzY2hlZHVsZSB3b3JrZXIKLSAgICB2aWV3LmZyb250aWVyID0gTWF0aC5taW4o
dmlldy5mcm9udGllciwgZnJvbS5saW5lKTsKKyAgICBkb2MuZnJvbnRpZXIgPSBNYXRoLm1pbihk
b2MuZnJvbnRpZXIsIGZyb20ubGluZSk7CiAgICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7CiAKLSAg
ICB2YXIgbGVuZGlmZiA9IGxpbmVzLmxlbmd0aCAtIG5saW5lcyAtIDE7CisgICAgdmFyIGxlbmRp
ZmYgPSBjaGFuZ2UudGV4dC5sZW5ndGggLSAodG8ubGluZSAtIGZyb20ubGluZSkgLSAxOwogICAg
IC8vIFJlbWVtYmVyIHRoYXQgdGhlc2UgbGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBk
aXNwbGF5CiAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZm
KTsKICAgICBpZiAoaGFzSGFuZGxlcihjbSwgImNoYW5nZSIpKSB7Ci0gICAgICAvLyBOb3JtYWxp
emUgbGluZXMgdG8gY29udGFpbiBvbmx5IHN0cmluZ3MsIHNpbmNlIHRoYXQncyB3aGF0Ci0gICAg
ICAvLyB0aGUgY2hhbmdlIGV2ZW50IGhhbmRsZXIgZXhwZWN0cwotICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKHR5cGVvZiBsaW5lc1tpXSAh
PSAic3RyaW5nIikgbGluZXNbaV0gPSBsaW5lc1tpXS50ZXh0OwotICAgICAgdmFyIGNoYW5nZU9i
aiA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGxpbmVzLCBvcmlnaW46IG9yaWdpbn07Cisg
ICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogY2hhbmdlLnRl
eHQsIG9yaWdpbjogY2hhbmdlLm9yaWdpbn07CiAgICAgICBpZiAoY20uY3VyT3AudGV4dENoYW5n
ZWQpIHsKICAgICAgICAgZm9yICh2YXIgY3VyID0gY20uY3VyT3AudGV4dENoYW5nZWQ7IGN1ci5u
ZXh0OyBjdXIgPSBjdXIubmV4dCkge30KICAgICAgICAgY3VyLm5leHQgPSBjaGFuZ2VPYmo7CiAg
ICAgICB9IGVsc2UgY20uY3VyT3AudGV4dENoYW5nZWQgPSBjaGFuZ2VPYmo7CiAgICAgfQotCi0g
ICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24KLSAgICB2YXIgbmV3U2VsRnJvbSwgbmV3U2VsVG8s
IGVuZCA9IHtsaW5lOiBmcm9tLmxpbmUgKyBsaW5lcy5sZW5ndGggLSAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoOiBobFRleHQobGFzdEhMKS5sZW5ndGggICsgKGxp
bmVzLmxlbmd0aCA9PSAxID8gZnJvbS5jaCA6IDApfTsKLSAgICBpZiAoc2VsVXBkYXRlICYmIHR5
cGVvZiBzZWxVcGRhdGUgIT0gInN0cmluZyIpIHsKLSAgICAgIGlmIChzZWxVcGRhdGUuZnJvbSkg
eyBuZXdTZWxGcm9tID0gc2VsVXBkYXRlLmZyb207IG5ld1NlbFRvID0gc2VsVXBkYXRlLnRvOyB9
Ci0gICAgICBlbHNlIG5ld1NlbEZyb20gPSBuZXdTZWxUbyA9IHNlbFVwZGF0ZTsKLSAgICB9IGVs
c2UgaWYgKHNlbFVwZGF0ZSA9PSAiZW5kIikgewotICAgICAgbmV3U2VsRnJvbSA9IG5ld1NlbFRv
ID0gZW5kOwotICAgIH0gZWxzZSBpZiAoc2VsVXBkYXRlID09ICJzdGFydCIpIHsKLSAgICAgIG5l
d1NlbEZyb20gPSBuZXdTZWxUbyA9IGZyb207Ci0gICAgfSBlbHNlIGlmIChzZWxVcGRhdGUgPT0g
ImFyb3VuZCIpIHsKLSAgICAgIG5ld1NlbEZyb20gPSBmcm9tOyBuZXdTZWxUbyA9IGVuZDsKLSAg
ICB9IGVsc2UgewotICAgICAgdmFyIGFkanVzdFBvcyA9IGZ1bmN0aW9uKHBvcykgewotICAgICAg
ICBpZiAocG9zTGVzcyhwb3MsIGZyb20pKSByZXR1cm4gcG9zOwotICAgICAgICBpZiAoIXBvc0xl
c3ModG8sIHBvcykpIHJldHVybiBlbmQ7Ci0gICAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBs
ZW5kaWZmOwotICAgICAgICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgICAgIGlmIChwb3MubGluZSA9
PSB0by5saW5lKQotICAgICAgICAgIGNoICs9IGhsVGV4dChsYXN0SEwpLmxlbmd0aCAtICh0by5j
aCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiAwKSk7Ci0gICAgICAgIHJldHVy
biB7bGluZTogbGluZSwgY2g6IGNofTsKLSAgICAgIH07Ci0gICAgICBuZXdTZWxGcm9tID0gYWRq
dXN0UG9zKHZpZXcuc2VsLmZyb20pOwotICAgICAgbmV3U2VsVG8gPSBhZGp1c3RQb3Modmlldy5z
ZWwudG8pOwotICAgIH0KLSAgICBzZXRTZWxlY3Rpb24oY20sIG5ld1NlbEZyb20sIG5ld1NlbFRv
LCBudWxsLCB0cnVlKTsKLSAgICByZXR1cm4gZW5kOwogICB9CiAKLSAgZnVuY3Rpb24gcmVwbGFj
ZVJhbmdlKGNtLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7CisgIGZ1bmN0aW9uIHJlcGxhY2VS
YW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKICAgICBpZiAoIXRvKSB0byA9IGZy
b207CiAgICAgaWYgKHBvc0xlc3ModG8sIGZyb20pKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9t
OyBmcm9tID0gdG1wOyB9Ci0gICAgcmV0dXJuIHVwZGF0ZURvYyhjbSwgZnJvbSwgdG8sIHNwbGl0
TGluZXMoY29kZSksIG51bGwsIG9yaWdpbik7CisgICAgaWYgKHR5cGVvZiBjb2RlID09ICJzdHJp
bmciKSBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKKyAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206
IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59LCBudWxsKTsKICAgfQog
Ci0gIC8vIFNFTEVDVElPTgorICAvLyBQT1NJVElPTiBPQkpFQ1QKKworICBmdW5jdGlvbiBQb3Mo
bGluZSwgY2gpIHsKKyAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkgcmV0dXJuIG5ldyBQ
b3MobGluZSwgY2gpOworICAgIHRoaXMubGluZSA9IGxpbmU7IHRoaXMuY2ggPSBjaDsKKyAgfQor
ICBDb2RlTWlycm9yLlBvcyA9IFBvczsKIAogICBmdW5jdGlvbiBwb3NFcShhLCBiKSB7cmV0dXJu
IGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA9PSBiLmNoO30KICAgZnVuY3Rpb24gcG9zTGVzcyhh
LCBiKSB7cmV0dXJuIGEubGluZSA8IGIubGluZSB8fCAoYS5saW5lID09IGIubGluZSAmJiBhLmNo
IDwgYi5jaCk7fQotICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4ge2xpbmU6IHgubGluZSwg
Y2g6IHguY2h9O30KKyAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHgu
Y2gpO30KIAotICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwg
TWF0aC5taW4obiwgZG9jLnNpemUtMSkpO30KKyAgLy8gU0VMRUNUSU9OCisKKyAgZnVuY3Rpb24g
Y2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4obiwg
ZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQogICBmdW5jdGlvbiBjbGlwUG9zKGRvYywgcG9z
KSB7Ci0gICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJuIHtsaW5lOiAwLCBjaDogMH07Ci0gICAg
aWYgKHBvcy5saW5lID49IGRvYy5zaXplKSByZXR1cm4ge2xpbmU6IGRvYy5zaXplLTEsIGNoOiBn
ZXRMaW5lKGRvYywgZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9OwotICAgIHZhciBjaCA9IHBvcy5j
aCwgbGluZWxlbiA9IGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dC5sZW5ndGg7Ci0gICAgaWYg
KGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDog
bGluZWxlbn07Ci0gICAgZWxzZSBpZiAoY2ggPCAwKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBj
aDogMH07CisgICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5maXJz
dCwgMCk7CisgICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7CisgICAgaWYg
KHBvcy5saW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4
dC5sZW5ndGgpOworICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxp
bmUpLnRleHQubGVuZ3RoKTsKKyAgfQorICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVu
KSB7CisgICAgdmFyIGNoID0gcG9zLmNoOworICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGlu
ZWxlbikgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7CisgICAgZWxzZSBpZiAoY2ggPCAw
KSByZXR1cm4gUG9zKHBvcy5saW5lLCAwKTsKICAgICBlbHNlIHJldHVybiBwb3M7CiAgIH0KLSAg
ZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IDAgJiYgbCA8IGRvYy5zaXplO30K
KyAgZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwg
ZG9jLmZpcnN0ICsgZG9jLnNpemU7fQogCiAgIC8vIElmIHNoaWZ0IGlzIGhlbGQsIHRoaXMgd2ls
bCBtb3ZlIHRoZSBzZWxlY3Rpb24gYW5jaG9yLiBPdGhlcndpc2UsCiAgIC8vIGl0J2xsIHNldCB0
aGUgd2hvbGUgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oY20sIHBvcywg
b3RoZXIsIGJpYXMpIHsKLSAgICB2YXIgc2VsID0gY20udmlldy5zZWw7Ci0gICAgaWYgKHNlbC5z
aGlmdCB8fCBzZWwuZXh0ZW5kKSB7Ci0gICAgICB2YXIgYW5jaG9yID0gc2VsLmFuY2hvcjsKKyAg
ZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9uKGRvYywgcG9zLCBvdGhlciwgYmlhcykgeworICAgIGlm
IChkb2Muc2VsLnNoaWZ0IHx8IGRvYy5zZWwuZXh0ZW5kKSB7CisgICAgICB2YXIgYW5jaG9yID0g
ZG9jLnNlbC5hbmNob3I7CiAgICAgICBpZiAob3RoZXIpIHsKICAgICAgICAgdmFyIHBvc0JlZm9y
ZSA9IHBvc0xlc3MocG9zLCBhbmNob3IpOwogICAgICAgICBpZiAocG9zQmVmb3JlICE9IHBvc0xl
c3Mob3RoZXIsIGFuY2hvcikpIHsKQEAgLTIwODUsMjQgKzIzMDUsMzggQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgcG9zID0gb3RoZXI7CiAgICAgICAgIH0K
ICAgICAgIH0KLSAgICAgIHNldFNlbGVjdGlvbihjbSwgYW5jaG9yLCBwb3MsIGJpYXMpOworICAg
ICAgc2V0U2VsZWN0aW9uKGRvYywgYW5jaG9yLCBwb3MsIGJpYXMpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICBzZXRTZWxlY3Rpb24oY20sIHBvcywgb3RoZXIgfHwgcG9zLCBiaWFzKTsKKyAgICAgIHNl
dFNlbGVjdGlvbihkb2MsIHBvcywgb3RoZXIgfHwgcG9zLCBiaWFzKTsKICAgICB9Ci0gICAgY20u
Y3VyT3AudXNlclNlbENoYW5nZSA9IHRydWU7CisgICAgaWYgKGRvYy5jbSkgZG9jLmNtLmN1ck9w
LnVzZXJTZWxDaGFuZ2UgPSB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9u
Q2hhbmdlKGRvYywgYW5jaG9yLCBoZWFkKSB7CisgICAgdmFyIG9iaiA9IHthbmNob3I6IGFuY2hv
ciwgaGVhZDogaGVhZH07CisgICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIs
IGRvYywgb2JqKTsKKyAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlU2VsZWN0
aW9uQ2hhbmdlIiwgZG9jLmNtLCBvYmopOworICAgIG9iai5hbmNob3IgPSBjbGlwUG9zKGRvYywg
b2JqLmFuY2hvcik7IG9iai5oZWFkID0gY2xpcFBvcyhkb2MsIG9iai5oZWFkKTsKKyAgICByZXR1
cm4gb2JqOwogICB9CiAKICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3Mg
YXJlIG9ubHkgdXNlZCBieQogICAvLyB1cGRhdGVEb2MsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBl
eHByZXNzZWQgaW4gdGhlIGxpbmUKICAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KLSAg
ZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGNtLCBhbmNob3IsIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWlj
KSB7Ci0gICAgY20udmlldy5nb2FsQ29sdW1uID0gbnVsbDsKLSAgICB2YXIgc2VsID0gY20udmll
dy5zZWw7CisgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2MsIGFuY2hvciwgaGVhZCwgYmlhcywg
Y2hlY2tBdG9taWMpIHsKKyAgICBpZiAoIWNoZWNrQXRvbWljICYmIGhhc0hhbmRsZXIoZG9jLCAi
YmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAi
YmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpIHsKKyAgICAgIHZhciBmaWx0ZXJlZCA9IGZpbHRlclNl
bGVjdGlvbkNoYW5nZShkb2MsIGFuY2hvciwgaGVhZCk7CisgICAgICBoZWFkID0gZmlsdGVyZWQu
aGVhZDsKKyAgICAgIGFuY2hvciA9IGZpbHRlcmVkLmFuY2hvcjsKKyAgICB9CisKKyAgICB2YXIg
c2VsID0gZG9jLnNlbDsKKyAgICBzZWwuZ29hbENvbHVtbiA9IG51bGw7CiAgICAgLy8gU2tpcCBv
dmVyIGF0b21pYyBzcGFucy4KICAgICBpZiAoY2hlY2tBdG9taWMgfHwgIXBvc0VxKGFuY2hvciwg
c2VsLmFuY2hvcikpCi0gICAgICBhbmNob3IgPSBza2lwQXRvbWljKGNtLCBhbmNob3IsIGJpYXMs
IGNoZWNrQXRvbWljICE9ICJwdXNoIik7CisgICAgICBhbmNob3IgPSBza2lwQXRvbWljKGRvYywg
YW5jaG9yLCBiaWFzLCBjaGVja0F0b21pYyAhPSAicHVzaCIpOwogICAgIGlmIChjaGVja0F0b21p
YyB8fCAhcG9zRXEoaGVhZCwgc2VsLmhlYWQpKQotICAgICAgaGVhZCA9IHNraXBBdG9taWMoY20s
IGhlYWQsIGJpYXMsIGNoZWNrQXRvbWljICE9ICJwdXNoIik7CisgICAgICBoZWFkID0gc2tpcEF0
b21pYyhkb2MsIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWljICE9ICJwdXNoIik7CiAKICAgICBpZiAo
cG9zRXEoc2VsLmFuY2hvciwgYW5jaG9yKSAmJiBwb3NFcShzZWwuaGVhZCwgaGVhZCkpIHJldHVy
bjsKIApAQCAtMjExMSwxOCArMjM0NSwyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBzZWwuZnJvbSA9IGludiA/IGhlYWQgOiBhbmNob3I7CiAgICAgc2VsLnRvID0g
aW52ID8gYW5jaG9yIDogaGVhZDsKIAotICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdHJ1ZTsK
LSAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoZG9jLmNtKQor
ICAgICAgZG9jLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNo
YW5nZWQgPSB0cnVlOworCisgICAgc2lnbmFsTGF0ZXIoZG9jLCAiY3Vyc29yQWN0aXZpdHkiLCBk
b2MpOwogICB9CiAKICAgZnVuY3Rpb24gcmVDaGVja1NlbGVjdGlvbihjbSkgewotICAgIHNldFNl
bGVjdGlvbihjbSwgY20udmlldy5zZWwuZnJvbSwgY20udmlldy5zZWwudG8sIG51bGwsICJwdXNo
Iik7CisgICAgc2V0U2VsZWN0aW9uKGNtLmRvYywgY20uZG9jLnNlbC5mcm9tLCBjbS5kb2Muc2Vs
LnRvLCBudWxsLCAicHVzaCIpOwogICB9CiAKLSAgZnVuY3Rpb24gc2tpcEF0b21pYyhjbSwgcG9z
LCBiaWFzLCBtYXlDbGVhcikgewotICAgIHZhciBkb2MgPSBjbS52aWV3LmRvYywgZmxpcHBlZCA9
IGZhbHNlLCBjdXJQb3MgPSBwb3M7CisgIGZ1bmN0aW9uIHNraXBBdG9taWMoZG9jLCBwb3MsIGJp
YXMsIG1heUNsZWFyKSB7CisgICAgdmFyIGZsaXBwZWQgPSBmYWxzZSwgY3VyUG9zID0gcG9zOwog
ICAgIHZhciBkaXIgPSBiaWFzIHx8IDE7Ci0gICAgY20udmlldy5jYW50RWRpdCA9IGZhbHNlOwor
ICAgIGRvYy5jYW50RWRpdCA9IGZhbHNlOwogICAgIHNlYXJjaDogZm9yICg7OykgewogICAgICAg
dmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpLCB0b0NsZWFyOwogICAgICAgaWYg
KGxpbmUubWFya2VkU3BhbnMpIHsKQEAgLTIxMzgsMjAgKzIzNzQsMjAgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBpZiAocG9zRXEobmV3UG9zLCBjdXJQ
b3MpKSB7CiAgICAgICAgICAgICAgIG5ld1Bvcy5jaCArPSBkaXI7CiAgICAgICAgICAgICAgIGlm
IChuZXdQb3MuY2ggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lKSBuZXdQ
b3MgPSBjbGlwUG9zKGRvYywge2xpbmU6IG5ld1Bvcy5saW5lIC0gMX0pOworICAgICAgICAgICAg
ICAgIGlmIChuZXdQb3MubGluZSA+IGRvYy5maXJzdCkgbmV3UG9zID0gY2xpcFBvcyhkb2MsIFBv
cyhuZXdQb3MubGluZSAtIDEpKTsKICAgICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7
CiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3UG9zLmNoID4gbGluZS50ZXh0Lmxlbmd0aCkg
ewotICAgICAgICAgICAgICAgIGlmIChuZXdQb3MubGluZSA8IGRvYy5zaXplIC0gMSkgbmV3UG9z
ID0ge2xpbmU6IG5ld1Bvcy5saW5lICsgMSwgY2g6IDB9OworICAgICAgICAgICAgICAgIGlmIChu
ZXdQb3MubGluZSA8IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkgbmV3UG9zID0gUG9zKG5ld1Bv
cy5saW5lICsgMSwgMCk7CiAgICAgICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOwogICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICghbmV3UG9zKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGZsaXBwZWQpIHsKICAgICAgICAgICAgICAgICAgIC8vIERyaXZlbiBpbiBhIGNvcm5l
ciAtLSBubyB2YWxpZCBjdXJzb3IgcG9zaXRpb24gZm91bmQgYXQgYWxsCiAgICAgICAgICAgICAg
ICAgICAvLyAtLSB0cnkgYWdhaW4gKndpdGgqIGNsZWFyaW5nLCBpZiB3ZSBkaWRuJ3QgYWxyZWFk
eQotICAgICAgICAgICAgICAgICAgaWYgKCFtYXlDbGVhcikgcmV0dXJuIHNraXBBdG9taWMoY20s
IHBvcywgYmlhcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBpZiAoIW1heUNsZWFyKSByZXR1
cm4gc2tpcEF0b21pYyhkb2MsIHBvcywgYmlhcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVkaXRpbmcgdW50aWwgZnVydGhlciBub3RpY2UsIGFuZCBy
ZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkb2MKLSAgICAgICAgICAgICAgICAgIGNtLnZpZXcuY2Fu
dEVkaXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIHtsaW5lOiAwLCBjaDogMH07
CisgICAgICAgICAgICAgICAgICBkb2MuY2FudEVkaXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBmbGlwcGVkID0gdHJ1ZTsgbmV3UG9zID0gcG9zOyBkaXIgPSAtZGlyOwogICAgICAg
ICAgICAgICB9CkBAIC0yMTY5LDEwICsyNDA1LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgIC8vIFNDUk9MTElORwogCiAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9W
aWV3KGNtKSB7Ci0gICAgdmFyIHZpZXcgPSBjbS52aWV3OwotICAgIHZhciBjb29yZHMgPSBzY3Jv
bGxQb3NJbnRvVmlldyhjbSwgdmlldy5zZWwuaGVhZCk7Ci0gICAgaWYgKCF2aWV3LmZvY3VzZWQp
IHJldHVybjsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRpc3BsYXkuc2l6
ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvU2Nyb2xsID0gbnVsbDsKKyAgICB2YXIgY29v
cmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNtLmRvYy5zZWwuaGVhZCk7CisgICAgaWYgKCFj
bS5zdGF0ZS5mb2N1c2VkKSByZXR1cm47CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBi
b3ggPSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIpLCBkb1Njcm9sbCA9IG51bGw7CiAgICAgaWYgKGNv
b3Jkcy50b3AgKyBib3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOwogICAgIGVsc2UgaWYgKGNv
b3Jkcy5ib3R0b20gKyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgZG9TY3JvbGwgPSBmYWxzZTsKICAgICBpZiAo
ZG9TY3JvbGwgIT0gbnVsbCAmJiAhcGhhbnRvbSkgewpAQCAtMjE5MSwxNCArMjQyNiwxNCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICB2
YXIgY2hhbmdlZCA9IGZhbHNlLCBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHBvcyk7CiAgICAg
ICB2YXIgc2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCBjb29yZHMubGVmdCwgY29v
cmRzLnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20pOwotICAgICAgdmFyIHN0YXJ0VG9w
ID0gY20udmlldy5zY3JvbGxUb3AsIHN0YXJ0TGVmdCA9IGNtLnZpZXcuc2Nyb2xsTGVmdDsKKyAg
ICAgIHZhciBzdGFydFRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIHN0YXJ0TGVmdCA9IGNtLmRvYy5z
Y3JvbGxMZWZ0OwogICAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgewogICAg
ICAgICBzZXRTY3JvbGxUb3AoY20sIHNjcm9sbFBvcy5zY3JvbGxUb3ApOwotICAgICAgICBpZiAo
TWF0aC5hYnMoY20udmlldy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAx
KSBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgIH0KICAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVm
dCAhPSBudWxsKSB7CiAgICAgICAgIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxM
ZWZ0KTsKLSAgICAgICAgaWYgKE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xsTGVmdCAtIHN0YXJ0TGVm
dCkgPiAxKSBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3Jv
bGxMZWZ0IC0gc3RhcnRMZWZ0KSA+IDEpIGNoYW5nZWQgPSB0cnVlOwogICAgICAgfQogICAgICAg
aWYgKCFjaGFuZ2VkKSByZXR1cm4gY29vcmRzOwogICAgIH0KQEAgLTIyMTQsNyArMjQ0OSw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgcHQgPSBwYWRkaW5nVG9wKGRpc3BsYXkpOwogICAgIHkxICs9IHB0OyB5MiArPSBw
dDsKICAgICB2YXIgc2NyZWVuID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3Jv
bGxlckN1dE9mZiwgc2NyZWVudG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AsIHJlc3Vs
dCA9IHt9OwotICAgIHZhciBkb2NCb3R0b20gPSBjbS52aWV3LmRvYy5oZWlnaHQgKyAyICogcHQ7
CisgICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWlnaHQgKyAyICogcHQ7CiAgICAgdmFyIGF0
VG9wID0geTEgPCBwdCArIDEwLCBhdEJvdHRvbSA9IHkyICsgcHQgPiBkb2NCb3R0b20gLSAxMDsK
ICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHJlc3VsdC5zY3JvbGxUb3AgPSBhdFRvcCA/IDAgOiBN
YXRoLm1heCgwLCB5MSk7CiAgICAgZWxzZSBpZiAoeTIgPiBzY3JlZW50b3AgKyBzY3JlZW4pIHJl
c3VsdC5zY3JvbGxUb3AgPSAoYXRCb3R0b20gPyBkb2NCb3R0b20gOiB5MikgLSBzY3JlZW47CkBA
IC0yMjM1LDEwICsyNDcwLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAvLyBBUEkgVVRJTElUSUVTCiAKICAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBh
Z2dyZXNzaXZlKSB7Ci0gICAgdmFyIGRvYyA9IGNtLnZpZXcuZG9jOworICAgIHZhciBkb2MgPSBj
bS5kb2M7CiAgICAgaWYgKCFob3cpIGhvdyA9ICJhZGQiOwogICAgIGlmIChob3cgPT0gInNtYXJ0
IikgewotICAgICAgaWYgKCFjbS52aWV3Lm1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CisgICAg
ICBpZiAoIWNtLmRvYy5tb2RlLmluZGVudCkgaG93ID0gInByZXYiOwogICAgICAgZWxzZSB2YXIg
c3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbik7CiAgICAgfQogCkBAIC0yMjQ2LDE4ICsyNDgx
LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBsaW5lID0g
Z2V0TGluZShkb2MsIG4pLCBjdXJTcGFjZSA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwg
dGFiU2l6ZSk7CiAgICAgdmFyIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMq
LylbMF0sIGluZGVudGF0aW9uOwogICAgIGlmIChob3cgPT0gInNtYXJ0IikgewotICAgICAgaW5k
ZW50YXRpb24gPSBjbS52aWV3Lm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3Vy
U3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKKyAgICAgIGluZGVudGF0aW9uID0gY20u
ZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVu
Z3RoKSwgbGluZS50ZXh0KTsKICAgICAgIGlmIChpbmRlbnRhdGlvbiA9PSBQYXNzKSB7CiAgICAg
ICAgIGlmICghYWdncmVzc2l2ZSkgcmV0dXJuOwogICAgICAgICBob3cgPSAicHJldiI7CiAgICAg
ICB9CiAgICAgfQogICAgIGlmIChob3cgPT0gInByZXYiKSB7Ci0gICAgICBpZiAobikgaW5kZW50
YXRpb24gPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgbi0xKS50ZXh0LCBudWxsLCB0YWJTaXpl
KTsKKyAgICAgIGlmIChuID4gZG9jLmZpcnN0KSBpbmRlbnRhdGlvbiA9IGNvdW50Q29sdW1uKGdl
dExpbmUoZG9jLCBuLTEpLnRleHQsIG51bGwsIHRhYlNpemUpOwogICAgICAgZWxzZSBpbmRlbnRh
dGlvbiA9IDA7CisgICAgfSBlbHNlIGlmIChob3cgPT0gImFkZCIpIHsKKyAgICAgIGluZGVudGF0
aW9uID0gY3VyU3BhY2UgKyBjbS5vcHRpb25zLmluZGVudFVuaXQ7CisgICAgfSBlbHNlIGlmICho
b3cgPT0gInN1YnRyYWN0IikgeworICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9w
dGlvbnMuaW5kZW50VW5pdDsKICAgICB9Ci0gICAgZWxzZSBpZiAoaG93ID09ICJhZGQiKSBpbmRl
bnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OwotICAgIGVsc2UgaWYg
KGhvdyA9PSAic3VidHJhY3QiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gY20ub3B0aW9ucy5p
bmRlbnRVbml0OwogICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pOwog
CiAgICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAwOwpAQCAtMjI2NiwxMiArMjUwMywx
MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAocG9zIDwgaW5k
ZW50YXRpb24pIGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7CiAK
ICAgICBpZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKQotICAgICAgcmVwbGFjZVJh
bmdlKGNtLCBpbmRlbnRTdHJpbmcsIHtsaW5lOiBuLCBjaDogMH0sIHtsaW5lOiBuLCBjaDogY3Vy
U3BhY2VTdHJpbmcubGVuZ3RofSwgImlucHV0Iik7CisgICAgICByZXBsYWNlUmFuZ2UoY20uZG9j
LCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCks
ICIraW5wdXQiKTsKICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwogICB9CiAKICAgZnVuY3Rp
b24gY2hhbmdlTGluZShjbSwgaGFuZGxlLCBvcCkgewotICAgIHZhciBubyA9IGhhbmRsZSwgbGlu
ZSA9IGhhbmRsZSwgZG9jID0gY20udmlldy5kb2M7CisgICAgdmFyIG5vID0gaGFuZGxlLCBsaW5l
ID0gaGFuZGxlLCBkb2MgPSBjbS5kb2M7CiAgICAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gIm51bWJl
ciIpIGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9jLCBoYW5kbGUpKTsKICAgICBlbHNl
IG5vID0gbGluZU5vKGhhbmRsZSk7CiAgICAgaWYgKG5vID09IG51bGwpIHJldHVybiBudWxsOwpA
QCAtMjI4MCwxMiArMjUxNywxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gbGluZTsKICAgfQogCi0gIGZ1bmN0aW9uIGZpbmRQb3NIKGNtLCBkaXIsIHVu
aXQsIHZpc3VhbGx5KSB7Ci0gICAgdmFyIGRvYyA9IGNtLnZpZXcuZG9jLCBlbmQgPSBjbS52aWV3
LnNlbC5oZWFkLCBsaW5lID0gZW5kLmxpbmUsIGNoID0gZW5kLmNoOworICBmdW5jdGlvbiBmaW5k
UG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkgeworICAgIHZhciBsaW5lID0gcG9z
LmxpbmUsIGNoID0gcG9zLmNoOwogICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUp
OworICAgIHZhciBwb3NzaWJsZSA9IHRydWU7CiAgICAgZnVuY3Rpb24gZmluZE5leHRMaW5lKCkg
ewogICAgICAgdmFyIGwgPSBsaW5lICsgZGlyOwotICAgICAgaWYgKGwgPCAwIHx8IGwgPT0gZG9j
LnNpemUpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwgPj0gZG9j
LmZpcnN0ICsgZG9jLnNpemUpIHJldHVybiAocG9zc2libGUgPSBmYWxzZSk7CiAgICAgICBsaW5l
ID0gbDsKICAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGwpOwogICAgIH0KQEAg
LTIyOTUsMTAgKzI1MzMsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpIHsKICAgICAgICAgICBp
ZiAodmlzdWFsbHkpIGNoID0gKGRpciA8IDAgPyBsaW5lUmlnaHQgOiBsaW5lTGVmdCkobGluZU9i
aik7CiAgICAgICAgICAgZWxzZSBjaCA9IGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3RoIDog
MDsKLSAgICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHJldHVybiAo
cG9zc2libGUgPSBmYWxzZSk7CiAgICAgICB9IGVsc2UgY2ggPSBuZXh0OwogICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQorCiAgICAgaWYgKHVuaXQgPT0gImNoYXIiKSBtb3ZlT25jZSgpOwogICAg
IGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUpOwogICAgIGVsc2UgaWYg
KHVuaXQgPT0gIndvcmQiKSB7CkBAIC0yMzEwLDcgKzI1NDksMjYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChkaXIgPiAwKSBpZiAoIW1vdmVPbmNlKCkp
IGJyZWFrOwogICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gc2tpcEF0b21pYyhjbSwge2xpbmU6
IGxpbmUsIGNoOiBjaH0sIGRpciwgdHJ1ZSk7CisgICAgdmFyIHJlc3VsdCA9IHNraXBBdG9taWMo
ZG9jLCBQb3MobGluZSwgY2gpLCBkaXIsIHRydWUpOworICAgIGlmICghcG9zc2libGUpIHJlc3Vs
dC5oaXRTaWRlID0gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24g
ZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7CisgICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9
IHBvcy5sZWZ0LCB5OworICAgIGlmICh1bml0ID09ICJwYWdlIikgeworICAgICAgdmFyIHBhZ2VT
aXplID0gTWF0aC5taW4oY20uZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCwgd2luZG93Lmlu
bmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOworICAg
ICAgeSA9IHBvcy50b3AgKyBkaXIgKiBwYWdlU2l6ZTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0g
ImxpbmUiKSB7CisgICAgICB5ID0gZGlyID4gMCA/IHBvcy5ib3R0b20gKyAzIDogcG9zLnRvcCAt
IDM7CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgIHZhciB0YXJnZXQgPSBjb29yZHNDaGFy
KGNtLCB4LCB5KTsKKyAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIGJyZWFrOworICAgICAgaWYg
KGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0
cnVlOyBicmVhazsgfQorICAgICAgeSArPSBkaXIgKiA1OworICAgIH0KKyAgICByZXR1cm4gdGFy
Z2V0OwogICB9CiAKICAgZnVuY3Rpb24gZmluZFdvcmRBdChsaW5lLCBwb3MpIHsKQEAgLTIzMjQs
MTEgKzI1ODIsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB3
aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0
OwogICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVu
ZCkpKSArK2VuZDsKICAgICB9Ci0gICAgcmV0dXJuIHtmcm9tOiB7bGluZTogcG9zLmxpbmUsIGNo
OiBzdGFydH0sIHRvOiB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9fTsKKyAgICByZXR1cm4ge2Zy
b206IFBvcyhwb3MubGluZSwgc3RhcnQpLCB0bzogUG9zKHBvcy5saW5lLCBlbmQpfTsKICAgfQog
CiAgIGZ1bmN0aW9uIHNlbGVjdExpbmUoY20sIGxpbmUpIHsKLSAgICBleHRlbmRTZWxlY3Rpb24o
Y20sIHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3MoY20udmlldy5kb2MsIHtsaW5lOiBsaW5l
ICsgMSwgY2g6IDB9KSk7CisgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgUG9zKGxpbmUsIDAp
LCBjbGlwUG9zKGNtLmRvYywgUG9zKGxpbmUgKyAxLCAwKSkpOwogICB9CiAKICAgLy8gUFJPVE9U
WVBFCkBAIC0yMzM3LDI0ICsyNTk1LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlz
YCBwYXJhbWV0ZXInCiAKICAgQ29kZU1pcnJvci5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0VmFsdWU6
IGZ1bmN0aW9uKGxpbmVTZXApIHsKLSAgICAgIHZhciB0ZXh0ID0gW10sIGRvYyA9IHRoaXMudmll
dy5kb2M7Ci0gICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeyB0ZXh0
LnB1c2gobGluZS50ZXh0KTsgfSk7Ci0gICAgICByZXR1cm4gdGV4dC5qb2luKGxpbmVTZXAgfHwg
IlxuIik7Ci0gICAgfSwKLQotICAgIHNldFZhbHVlOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24o
Y29kZSkgewotICAgICAgdmFyIGRvYyA9IHRoaXMudmlldy5kb2MsIHRvcCA9IHtsaW5lOiAwLCBj
aDogMH0sIGxhc3RMZW4gPSBnZXRMaW5lKGRvYywgZG9jLnNpemUtMSkudGV4dC5sZW5ndGg7Ci0g
ICAgICB1cGRhdGVEb2NJbm5lcih0aGlzLCB0b3AsIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBs
YXN0TGVufSwgc3BsaXRMaW5lcyhjb2RlKSwgdG9wLCB0b3AsICJzZXRWYWx1ZSIpOwotICAgIH0p
LAotCi0gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7IHJldHVybiB0aGlzLmdl
dFJhbmdlKHRoaXMudmlldy5zZWwuZnJvbSwgdGhpcy52aWV3LnNlbC50bywgbGluZVNlcCk7IH0s
Ci0KLSAgICByZXBsYWNlU2VsZWN0aW9uOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oY29kZSwg
Y29sbGFwc2UsIG9yaWdpbikgewotICAgICAgdmFyIHNlbCA9IHRoaXMudmlldy5zZWw7Ci0gICAg
ICB1cGRhdGVEb2ModGhpcywgc2VsLmZyb20sIHNlbC50bywgc3BsaXRMaW5lcyhjb2RlKSwgY29s
bGFwc2UgfHwgImFyb3VuZCIsIG9yaWdpbik7Ci0gICAgfSksCi0KICAgICBmb2N1czogZnVuY3Rp
b24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJbnB1dCh0aGlzKTsgb25Gb2N1cyh0aGlzKTsgZmFz
dFBvbGwodGhpcyk7fSwKIAogICAgIHNldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uLCB2YWx1ZSkg
ewpAQCAtMjM2NiwxNSArMjYwNiwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB9LAogCiAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gdGhp
cy5vcHRpb25zW29wdGlvbl07fSwKLQotICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0
aGlzLnZpZXcubW9kZTt9LAorICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9j
O30sCiAKICAgICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1hcCkgewotICAgICAgdGhpcy52aWV3Lmtl
eU1hcHMucHVzaChtYXApOworICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzLnB1c2gobWFwKTsKICAg
ICB9LAotCiAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHsKLSAgICAgIHZhciBtYXBz
ID0gdGhpcy52aWV3LmtleU1hcHM7CisgICAgICB2YXIgbWFwcyA9IHRoaXMuc3RhdGUua2V5TWFw
czsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkKICAgICAgICAg
aWYgKCh0eXBlb2YgbWFwID09ICJzdHJpbmciID8gbWFwc1tpXS5uYW1lIDogbWFwc1tpXSkgPT0g
bWFwKSB7CiAgICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7CkBAIC0yMzg1LDg0ICsyNjIzLDQy
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGFkZE92ZXJsYXk6IG9w
ZXJhdGlvbihudWxsLCBmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7CiAgICAgICB2YXIgbW9kZSA9
IHNwZWMudG9rZW4gPyBzcGVjIDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3Bl
Yyk7CiAgICAgICBpZiAobW9kZS5zdGFydFN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXlz
IG1heSBub3QgYmUgc3RhdGVmdWwuIik7Ci0gICAgICB0aGlzLnZpZXcub3ZlcmxheXMucHVzaCh7
bW9kZTogbW9kZSwgbW9kZVNwZWM6IHNwZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRpb25zLm9w
YXF1ZX0pOwotICAgICAgdGhpcy52aWV3Lm1vZGVHZW4rKzsKLSAgICAgIHJlZ0NoYW5nZSh0aGlz
LCAwLCB0aGlzLnZpZXcuZG9jLnNpemUpOworICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5cy5wdXNo
KHttb2RlOiBtb2RlLCBtb2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMu
b3BhcXVlfSk7CisgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKKyAgICAgIHJlZ0NoYW5nZSh0
aGlzKTsKICAgICB9KSwKICAgICByZW1vdmVPdmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rp
b24oc3BlYykgewotICAgICAgdmFyIG92ZXJsYXlzID0gdGhpcy52aWV3Lm92ZXJsYXlzOworICAg
ICAgdmFyIG92ZXJsYXlzID0gdGhpcy5zdGF0ZS5vdmVybGF5czsKICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKG92ZXJsYXlzW2ld
Lm1vZGVTcGVjID09IHNwZWMpIHsKICAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7Ci0g
ICAgICAgICAgdGhpcy52aWV3Lm1vZGVHZW4rKzsKLSAgICAgICAgICByZWdDaGFuZ2UodGhpcywg
MCwgdGhpcy52aWV3LmRvYy5zaXplKTsKKyAgICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsK
KyAgICAgICAgICByZWdDaGFuZ2UodGhpcyk7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICB9CiAgICAgfSksCiAKLSAgICB1bmRvOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24o
KSB7dW5yZWRvSGVscGVyKHRoaXMsICJ1bmRvIik7fSksCi0gICAgcmVkbzogb3BlcmF0aW9uKG51
bGwsIGZ1bmN0aW9uKCkge3VucmVkb0hlbHBlcih0aGlzLCAicmVkbyIpO30pLAotCiAgICAgaW5k
ZW50TGluZTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKG4sIGRpciwgYWdncmVzc2l2ZSkgewog
ICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIpIHsKICAgICAgICAgaWYgKGRpciA9PSBu
dWxsKSBkaXIgPSB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYiOwog
ICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKICAgICAgIH0KLSAg
ICAgIGlmIChpc0xpbmUodGhpcy52aWV3LmRvYywgbikpIGluZGVudExpbmUodGhpcywgbiwgZGly
LCBhZ2dyZXNzaXZlKTsKKyAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRMaW5l
KHRoaXMsIG4sIGRpciwgYWdncmVzc2l2ZSk7CiAgICAgfSksCi0KICAgICBpbmRlbnRTZWxlY3Rp
b246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihob3cpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlz
LnZpZXcuc2VsOworICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbDsKICAgICAgIGlmIChwb3NF
cShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGluZGVudExpbmUodGhpcywgc2VsLmZyb20ubGlu
ZSwgaG93KTsKICAgICAgIHZhciBlID0gc2VsLnRvLmxpbmUgLSAoc2VsLnRvLmNoID8gMCA6IDEp
OwogICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9tLmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRM
aW5lKHRoaXMsIGksIGhvdyk7CiAgICAgfSksCiAKLSAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24o
KSB7Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMudmlldy5oaXN0b3J5OwotICAgICAgcmV0dXJuIHt1
bmRvOiBoaXN0LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0LnVuZG9uZS5sZW5ndGh9OwotICAgIH0s
Ci0KLSAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMudmlldy5oaXN0b3J5ID0gbWFr
ZUhpc3RvcnkoKTt9LAotCi0gICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMu
dmlldy5oaXN0b3J5LmRpcnR5Q291bnRlciA9IDA7Ci0gICAgICB0aGlzLnZpZXcuaGlzdG9yeS5s
YXN0T3AgPSB0aGlzLnZpZXcuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKLSAgICB9LAotCi0g
ICAgaXNDbGVhbjogZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnZpZXcuaGlzdG9yeS5kaXJ0eUNv
dW50ZXIgPT0gMDt9LAotICAgICAgCi0gICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7Ci0gICAg
ICB2YXIgaGlzdCA9IHRoaXMudmlldy5oaXN0b3J5OwotICAgICAgZnVuY3Rpb24gY3AoYXJyKSB7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBudyA9IFtdLCBud2VsdDsgaSA8IGFyci5sZW5ndGg7
ICsraSkgewotICAgICAgICAgIHZhciBzZXQgPSBhcnJbaV07Ci0gICAgICAgICAgbncucHVzaCh7
ZXZlbnRzOiBud2VsdCA9IFtdLCBmcm9tQmVmb3JlOiBzZXQuZnJvbUJlZm9yZSwgdG9CZWZvcmU6
IHNldC50b0JlZm9yZSwKLSAgICAgICAgICAgICAgICAgICBmcm9tQWZ0ZXI6IHNldC5mcm9tQWZ0
ZXIsIHRvQWZ0ZXI6IHNldC50b0FmdGVyfSk7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGVs
dCA9IHNldC5ldmVudHM7IGogPCBlbHQubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgIHZhciBv
bGQgPSBbXSwgY3VyID0gZWx0W2pdOwotICAgICAgICAgICAgbndlbHQucHVzaCh7c3RhcnQ6IGN1
ci5zdGFydCwgYWRkZWQ6IGN1ci5hZGRlZCwgb2xkOiBvbGR9KTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGsgPSAwOyBrIDwgY3VyLm9sZC5sZW5ndGg7ICsraykgb2xkLnB1c2goaGxUZXh0KGN1ci5v
bGRba10pKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG53OwotICAg
ICAgfQotICAgICAgcmV0dXJuIHtkb25lOiBjcChoaXN0LmRvbmUpLCB1bmRvbmU6IGNwKGhpc3Qu
dW5kb25lKX07Ci0gICAgfSwKLQotICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7
Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMudmlldy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKLSAg
ICAgIGhpc3QuZG9uZSA9IGhpc3REYXRhLmRvbmU7Ci0gICAgICBoaXN0LnVuZG9uZSA9IGhpc3RE
YXRhLnVuZG9uZTsKLSAgICB9LAotCiAgICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3Ig
YSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MKICAgICAvLyB0aGF0IHdhbnQgdG8g
aW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICAgZ2V0VG9r
ZW5BdDogZnVuY3Rpb24ocG9zKSB7Ci0gICAgICB2YXIgZG9jID0gdGhpcy52aWV3LmRvYzsKKyAg
ICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKICAgICAgIHBvcyA9IGNsaXBQb3MoZG9jLCBwb3MpOwot
ICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUodGhpcywgcG9zLmxpbmUpLCBtb2RlID0g
dGhpcy52aWV3Lm1vZGU7CisgICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBw
b3MubGluZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOwogICAgICAgdmFyIGxpbmUgPSBnZXRMaW5l
KGRvYywgcG9zLmxpbmUpOwogICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGlu
ZS50ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8
IHBvcy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7CkBAIC0yNDc4LDUzICsyNjc0LDMyIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sCiAKICAgICBnZXRTdGF0ZUFmdGVy
OiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgZG9jID0gdGhpcy52aWV3LmRvYzsKLSAgICAg
IGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5zaXplIC0gMTogbGluZSk7
CisgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CisgICAgICBsaW5lID0gY2xpcExpbmUoZG9jLCBs
aW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpOwogICAgICAgcmV0
dXJuIGdldFN0YXRlQmVmb3JlKHRoaXMsIGxpbmUgKyAxKTsKICAgICB9LAogCiAgICAgY3Vyc29y
Q29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkgewotICAgICAgdmFyIHBvcywgc2VsID0gdGhp
cy52aWV3LnNlbDsKKyAgICAgIHZhciBwb3MsIHNlbCA9IHRoaXMuZG9jLnNlbDsKICAgICAgIGlm
IChzdGFydCA9PSBudWxsKSBwb3MgPSBzZWwuaGVhZDsKLSAgICAgIGVsc2UgaWYgKHR5cGVvZiBz
dGFydCA9PSAib2JqZWN0IikgcG9zID0gY2xpcFBvcyh0aGlzLnZpZXcuZG9jLCBzdGFydCk7Cisg
ICAgICBlbHNlIGlmICh0eXBlb2Ygc3RhcnQgPT0gIm9iamVjdCIpIHBvcyA9IGNsaXBQb3ModGhp
cy5kb2MsIHN0YXJ0KTsKICAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50
bzsKICAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8ICJwYWdlIik7
CiAgICAgfSwKIAogICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcywgbW9kZSkgewotICAgICAg
cmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLnZpZXcuZG9jLCBwb3MpLCBtb2Rl
IHx8ICJwYWdlIik7CisgICAgICByZXR1cm4gY2hhckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMu
ZG9jLCBwb3MpLCBtb2RlIHx8ICJwYWdlIik7CiAgICAgfSwKIAogICAgIGNvb3Jkc0NoYXI6IGZ1
bmN0aW9uKGNvb3JkcykgewotICAgICAgdmFyIG9mZiA9IHRoaXMuZGlzcGxheS5saW5lU3BhY2Uu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICByZXR1cm4gY29vcmRzQ2hhcih0aGlzLCBj
b29yZHMubGVmdCAtIG9mZi5sZWZ0LCBjb29yZHMudG9wIC0gb2ZmLnRvcCk7CisgICAgICB2YXIg
b2ZmID0gZ2V0UmVjdCh0aGlzLmRpc3BsYXkubGluZVNwYWNlKTsKKyAgICAgIHZhciBzY3JvbGxZ
ID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9j
dW1lbnQuYm9keSkuc2Nyb2xsVG9wOworICAgICAgdmFyIHNjcm9sbFggPSB3aW5kb3cucGFnZVhP
ZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3Jv
bGxMZWZ0OworICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQgLSBvZmYu
bGVmdCAtIHNjcm9sbFgsIGNvb3Jkcy50b3AgLSBvZmYudG9wIC0gc2Nyb2xsWSk7CiAgICAgfSwK
IAogICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQo
dGhpcy5kaXNwbGF5KTsgfSwKIAotICAgIG1hcmtUZXh0OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rp
b24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBjbGlw
UG9zKHRoaXMudmlldy5kb2MsIGZyb20pLCBjbGlwUG9zKHRoaXMudmlldy5kb2MsIHRvKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCAicmFuZ2UiKTsKLSAgICB9KSwKLQotICAgIHNl
dEJvb2ttYXJrOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24ocG9zLCB3aWRnZXQpIHsKLSAgICAg
IHBvcyA9IGNsaXBQb3ModGhpcy52aWV3LmRvYywgcG9zKTsKLSAgICAgIHJldHVybiBtYXJrVGV4
dCh0aGlzLCBwb3MsIHBvcywgd2lkZ2V0ID8ge3JlcGxhY2VkV2l0aDogd2lkZ2V0fSA6IHt9LCAi
Ym9va21hcmsiKTsKLSAgICB9KSwKLQotICAgIGZpbmRNYXJrc0F0OiBmdW5jdGlvbihwb3MpIHsK
LSAgICAgIHZhciBkb2MgPSB0aGlzLnZpZXcuZG9jOwotICAgICAgcG9zID0gY2xpcFBvcyhkb2Ms
IHBvcyk7Ci0gICAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUoZG9jLCBwb3Mu
bGluZSkubWFya2VkU3BhbnM7Ci0gICAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwg
c3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKLSAgICAg
ICAgaWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJgotICAg
ICAgICAgICAgKHNwYW4udG8gPT0gbnVsbCB8fCBzcGFuLnRvID49IHBvcy5jaCkpCi0gICAgICAg
ICAgbWFya2Vycy5wdXNoKHNwYW4ubWFya2VyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtYXJr
ZXJzOwotICAgIH0sCi0KICAgICBzZXRHdXR0ZXJNYXJrZXI6IG9wZXJhdGlvbihudWxsLCBmdW5j
dGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKICAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRo
aXMsIGxpbmUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1
dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTsKQEAgLTI1MzUsOCArMjcx
MCw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pLAogCiAgICAg
Y2xlYXJHdXR0ZXI6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihndXR0ZXJJRCkgewotICAgICAg
dmFyIGkgPSAwLCBjbSA9IHRoaXMsIGRvYyA9IGNtLnZpZXcuZG9jOwotICAgICAgZG9jLml0ZXIo
MCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIHZhciBjbSA9IHRoaXMsIGRvYyA9
IGNtLmRvYywgaSA9IGRvYy5maXJzdDsKKyAgICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsK
ICAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0
dGVySURdKSB7CiAgICAgICAgICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7
CiAgICAgICAgICAgcmVnQ2hhbmdlKGNtLCBpLCBpICsgMSk7CkBAIC0yNTcyLDMxICsyNzQ3LDE2
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pLAogCiAgICAgYWRk
TGluZVdpZGdldDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9u
cykgewotICAgICAgdmFyIHdpZGdldCA9IG9wdGlvbnMgfHwge307Ci0gICAgICB3aWRnZXQubm9k
ZSA9IG5vZGU7Ci0gICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgdGhpcy5kaXNwbGF5LmFsaWdu
V2lkZ2V0cyA9IHRydWU7Ci0gICAgICBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgZnVuY3Rpb24o
bGluZSkgewotICAgICAgICAobGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSkpLnB1
c2god2lkZ2V0KTsKLSAgICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHdpZGdldDsKKyAgICAgIHJldHVybiBhZGRM
aW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7CiAgICAgfSksCiAKLSAgICBy
ZW1vdmVMaW5lV2lkZ2V0OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24od2lkZ2V0KSB7Ci0gICAg
ICB2YXIgd3MgPSB3aWRnZXQubGluZS53aWRnZXRzLCBubyA9IGxpbmVObyh3aWRnZXQubGluZSk7
Ci0gICAgICBpZiAobm8gPT0gbnVsbCB8fCAhd3MpIHJldHVybjsKLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB3aWRnZXQpIHdzLnNwbGljZShp
LS0sIDEpOwotICAgICAgdmFyIG5ld0hlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodCA/
IHdpZGdldC5saW5lLmhlaWdodCAtIHdpZGdldC5ub2RlLm9mZnNldEhlaWdodCA6IHRleHRIZWln
aHQodGhpcy5kaXNwbGF5KTsKLSAgICAgIHVwZGF0ZUxpbmVIZWlnaHQod2lkZ2V0LmxpbmUsIG5l
d0hlaWdodCk7Ci0gICAgICByZWdDaGFuZ2UodGhpcywgbm8sIG5vICsgMSk7Ci0gICAgfSksCisg
ICAgcmVtb3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigpOyB9
LAogCiAgICAgbGluZUluZm86IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIGlmICh0eXBlb2YgbGlu
ZSA9PSAibnVtYmVyIikgewotICAgICAgICBpZiAoIWlzTGluZSh0aGlzLnZpZXcuZG9jLCBsaW5l
KSkgcmV0dXJuIG51bGw7CisgICAgICAgIGlmICghaXNMaW5lKHRoaXMuZG9jLCBsaW5lKSkgcmV0
dXJuIG51bGw7CiAgICAgICAgIHZhciBuID0gbGluZTsKLSAgICAgICAgbGluZSA9IGdldExpbmUo
dGhpcy52aWV3LmRvYywgbGluZSk7CisgICAgICAgIGxpbmUgPSBnZXRMaW5lKHRoaXMuZG9jLCBs
aW5lKTsKICAgICAgICAgaWYgKCFsaW5lKSByZXR1cm4gbnVsbDsKICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgIHZhciBuID0gbGluZU5vKGxpbmUpOwpAQCAtMjYxMSwxNiArMjc3MSwyMCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGFkZFdpZGdldDogZnVuY3Rpb24o
cG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7CiAgICAgICB2YXIgZGlzcGxheSA9IHRo
aXMuZGlzcGxheTsKLSAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMu
dmlldy5kb2MsIHBvcykpOwotICAgICAgdmFyIHRvcCA9IHBvcy50b3AsIGxlZnQgPSBwb3MubGVm
dDsKKyAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3Mp
KTsKKyAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7CiAgICAgICBu
b2RlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgIGRpc3BsYXkuc2l6ZXIuYXBw
ZW5kQ2hpbGQobm9kZSk7Ci0gICAgICBpZiAodmVydCA9PSAib3ZlciIpIHRvcCA9IHBvcy50b3A7
Ci0gICAgICBlbHNlIGlmICh2ZXJ0ID09ICJuZWFyIikgewotICAgICAgICB2YXIgdnNwYWNlID0g
TWF0aC5tYXgoZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCwgdGhpcy52aWV3LmRvYy5oZWln
aHQpLAorICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB7CisgICAgICAgIHRvcCA9IHBvcy50b3A7
CisgICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gImFib3ZlIiB8fCB2ZXJ0ID09ICJuZWFyIikgewor
ICAgICAgICB2YXIgdnNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdo
dCwgdGhpcy5kb2MuaGVpZ2h0KSwKICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS5z
aXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xpZW50V2lkdGgpOwotICAgICAg
ICBpZiAocG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0ID4gdnNwYWNlICYmIHBvcy50b3Ag
PiBub2RlLm9mZnNldEhlaWdodCkKKyAgICAgICAgLy8gRGVmYXVsdCB0byBwb3NpdGlvbmluZyBh
Ym92ZSAoaWYgc3BlY2lmaWVkIGFuZCBwb3NzaWJsZSk7IG90aGVyd2lzZSBkZWZhdWx0IHRvIHBv
c2l0aW9uaW5nIGJlbG93CisgICAgICAgIGlmICgodmVydCA9PSAnYWJvdmUnIHx8IHBvcy5ib3R0
b20gKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSkgJiYgcG9zLnRvcCA+IG5vZGUub2Zmc2V0
SGVpZ2h0KQogICAgICAgICAgIHRvcCA9IHBvcy50b3AgLSBub2RlLm9mZnNldEhlaWdodDsKKyAg
ICAgICAgZWxzZSBpZiAocG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0IDw9IHZzcGFjZSkK
KyAgICAgICAgICB0b3AgPSBwb3MuYm90dG9tOwogICAgICAgICBpZiAobGVmdCArIG5vZGUub2Zm
c2V0V2lkdGggPiBoc3BhY2UpCiAgICAgICAgICAgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0
V2lkdGg7CiAgICAgICB9CkBAIC0yNjM4LDE0NyArMjgwMiw3MSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgbGVmdCwgdG9w
LCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAg
IH0sCiAKLSAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnZpZXcuZG9jLnNp
emU7fSwKKyAgICB0cmlnZ2VyT25LZXlEb3duOiBvcGVyYXRpb24obnVsbCwgb25LZXlEb3duKSwK
IAotICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMudmlldy5k
b2MsIHBvcyk7fSwKKyAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7cmV0dXJuIGNvbW1h
bmRzW2NtZF0odGhpcyk7fSwKIAotICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAg
ICAgIHZhciBzZWwgPSB0aGlzLnZpZXcuc2VsLCBwb3M7Ci0gICAgICBpZiAoc3RhcnQgPT0gbnVs
bCB8fCBzdGFydCA9PSAiaGVhZCIpIHBvcyA9IHNlbC5oZWFkOwotICAgICAgZWxzZSBpZiAoc3Rh
cnQgPT0gImFuY2hvciIpIHBvcyA9IHNlbC5hbmNob3I7Ci0gICAgICBlbHNlIGlmIChzdGFydCA9
PSAiZW5kIiB8fCBzdGFydCA9PT0gZmFsc2UpIHBvcyA9IHNlbC50bzsKLSAgICAgIGVsc2UgcG9z
ID0gc2VsLmZyb207Ci0gICAgICByZXR1cm4gY29weVBvcyhwb3MpOworICAgIGZpbmRQb3NIOiBm
dW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7CisgICAgICB2YXIgZGlyID0g
MTsKKyAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9
CisgICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7IGkg
PCBhbW91bnQ7ICsraSkgeworICAgICAgICBjdXIgPSBmaW5kUG9zSCh0aGlzLmRvYywgY3VyLCBk
aXIsIHVuaXQsIHZpc3VhbGx5KTsKKyAgICAgICAgaWYgKGN1ci5oaXRTaWRlKSBicmVhazsKKyAg
ICAgIH0KKyAgICAgIHJldHVybiBjdXI7CiAgICAgfSwKIAotICAgIHNvbWV0aGluZ1NlbGVjdGVk
OiBmdW5jdGlvbigpIHtyZXR1cm4gIXBvc0VxKHRoaXMudmlldy5zZWwuZnJvbSwgdGhpcy52aWV3
LnNlbC50byk7fSwKLQotICAgIHNldEN1cnNvcjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGxp
bmUsIGNoLCBleHRlbmQpIHsKLSAgICAgIHZhciBwb3MgPSBjbGlwUG9zKHRoaXMudmlldy5kb2Ms
IHR5cGVvZiBsaW5lID09ICJudW1iZXIiID8ge2xpbmU6IGxpbmUsIGNoOiBjaCB8fCAwfSA6IGxp
bmUpOwotICAgICAgaWYgKGV4dGVuZCkgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIHBvcyk7Ci0gICAg
ICBlbHNlIHNldFNlbGVjdGlvbih0aGlzLCBwb3MsIHBvcyk7Ci0gICAgfSksCi0KLSAgICBzZXRT
ZWxlY3Rpb246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihhbmNob3IsIGhlYWQpIHsKLSAgICAg
IHZhciBkb2MgPSB0aGlzLnZpZXcuZG9jOwotICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIGNsaXBQ
b3MoZG9jLCBhbmNob3IpLCBjbGlwUG9zKGRvYywgaGVhZCB8fCBhbmNob3IpKTsKKyAgICBtb3Zl
SDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgeworICAgICAgdmFyIHNlbCA9
IHRoaXMuZG9jLnNlbCwgcG9zOworICAgICAgaWYgKHNlbC5zaGlmdCB8fCBzZWwuZXh0ZW5kIHx8
IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQorICAgICAgICBwb3MgPSBmaW5kUG9zSCh0aGlzLmRv
Yywgc2VsLmhlYWQsIGRpciwgdW5pdCwgdGhpcy5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSk7Cisg
ICAgICBlbHNlCisgICAgICAgIHBvcyA9IGRpciA8IDAgPyBzZWwuZnJvbSA6IHNlbC50bzsKKyAg
ICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLmRvYywgcG9zLCBwb3MsIGRpcik7CiAgICAgfSksCiAK
LSAgICBleHRlbmRTZWxlY3Rpb246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihmcm9tLCB0bykg
ewotICAgICAgdmFyIGRvYyA9IHRoaXMudmlldy5kb2M7Ci0gICAgICBleHRlbmRTZWxlY3Rpb24o
dGhpcywgY2xpcFBvcyhkb2MsIGZyb20pLCB0byAmJiBjbGlwUG9zKGRvYywgdG8pKTsKKyAgICBk
ZWxldGVIOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIg
c2VsID0gdGhpcy5kb2Muc2VsOworICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkg
cmVwbGFjZVJhbmdlKHRoaXMuZG9jLCAiIiwgc2VsLmZyb20sIHNlbC50bywgIitkZWxldGUiKTsK
KyAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKHRoaXMuZG9jLCAiIiwgc2VsLmZyb20sIGZpbmRQb3NI
KHRoaXMuZG9jLCBzZWwuaGVhZCwgZGlyLCB1bml0LCBmYWxzZSksICIrZGVsZXRlIik7CisgICAg
ICB0aGlzLmN1ck9wLnVzZXJTZWxDaGFuZ2UgPSB0cnVlOwogICAgIH0pLAogCi0gICAgc2V0RXh0
ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLnZpZXcuc2VsLmV4dGVuZCA9IHZhbDt9LAotCi0g
ICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxp
bmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKLQotICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9u
KGxpbmUpIHsKLSAgICAgIHZhciBkb2MgPSB0aGlzLnZpZXcuZG9jOwotICAgICAgaWYgKGlzTGlu
ZShkb2MsIGxpbmUpKSByZXR1cm4gZ2V0TGluZShkb2MsIGxpbmUpOworICAgIGZpbmRQb3NWOiBm
dW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHsKKyAgICAgIHZhciBkaXIg
PSAxLCB4ID0gZ29hbENvbHVtbjsKKyAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBh
bW91bnQgPSAtYW1vdW50OyB9CisgICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0
aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91bnQ7ICsraSkgeworICAgICAgICB2YXIgY29vcmRzID0g
Y3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgImRpdiIpOworICAgICAgICBpZiAoeCA9PSBudWxsKSB4
ID0gY29vcmRzLmxlZnQ7CisgICAgICAgIGVsc2UgY29vcmRzLmxlZnQgPSB4OworICAgICAgICBj
dXIgPSBmaW5kUG9zVih0aGlzLCBjb29yZHMsIGRpciwgdW5pdCk7CisgICAgICAgIGlmIChjdXIu
aGl0U2lkZSkgYnJlYWs7CisgICAgICB9CisgICAgICByZXR1cm4gY3VyOwogICAgIH0sCiAKLSAg
ICBnZXRMaW5lTnVtYmVyOiBmdW5jdGlvbihsaW5lKSB7cmV0dXJuIGxpbmVObyhsaW5lKTt9LAot
Ci0gICAgc2V0TGluZTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGxpbmUsIHRleHQpIHsKLSAg
ICAgIGlmIChpc0xpbmUodGhpcy52aWV3LmRvYywgbGluZSkpCi0gICAgICAgIHJlcGxhY2VSYW5n
ZSh0aGlzLCB0ZXh0LCB7bGluZTogbGluZSwgY2g6IDB9LCB7bGluZTogbGluZSwgY2g6IGdldExp
bmUodGhpcy52aWV3LmRvYywgbGluZSkudGV4dC5sZW5ndGh9KTsKLSAgICB9KSwKLQotICAgIHJl
bW92ZUxpbmU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAoaXNM
aW5lKHRoaXMudmlldy5kb2MsIGxpbmUpKQotICAgICAgICByZXBsYWNlUmFuZ2UodGhpcywgIiIs
IHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3ModGhpcy52aWV3LmRvYywge2xpbmU6IGxpbmUr
MSwgY2g6IDB9KSk7Ci0gICAgfSksCi0KLSAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbihjb2RlLCBmcm9tLCB0bykgewotICAgICAgdmFyIGRvYyA9IHRoaXMudmlldy5k
b2M7Ci0gICAgICBmcm9tID0gY2xpcFBvcyhkb2MsIGZyb20pOwotICAgICAgdG8gPSB0byA/IGNs
aXBQb3MoZG9jLCB0bykgOiBmcm9tOwotICAgICAgcmV0dXJuIHJlcGxhY2VSYW5nZSh0aGlzLCBj
b2RlLCBmcm9tLCB0byk7CisgICAgbW92ZVY6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIs
IHVuaXQpIHsKKyAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWw7CisgICAgICB2YXIgcG9zID0g
Y3Vyc29yQ29vcmRzKHRoaXMsIHNlbC5oZWFkLCAiZGl2Iik7CisgICAgICBpZiAoc2VsLmdvYWxD
b2x1bW4gIT0gbnVsbCkgcG9zLmxlZnQgPSBzZWwuZ29hbENvbHVtbjsKKyAgICAgIHZhciB0YXJn
ZXQgPSBmaW5kUG9zVih0aGlzLCBwb3MsIGRpciwgdW5pdCk7CisKKyAgICAgIGlmICh1bml0ID09
ICJwYWdlIikKKyAgICAgICAgdGhpcy5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wICs9IGNo
YXJDb29yZHModGhpcywgdGFyZ2V0LCAiZGl2IikudG9wIC0gcG9zLnRvcDsKKyAgICAgIGV4dGVu
ZFNlbGVjdGlvbih0aGlzLmRvYywgdGFyZ2V0LCB0YXJnZXQsIGRpcik7CisgICAgICBzZWwuZ29h
bENvbHVtbiA9IHBvcy5sZWZ0OwogICAgIH0pLAogCi0gICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZy
b20sIHRvLCBsaW5lU2VwKSB7Ci0gICAgICB2YXIgZG9jID0gdGhpcy52aWV3LmRvYzsKLSAgICAg
IGZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7IHRvID0gY2xpcFBvcyhkb2MsIHRvKTsKLSAgICAg
IHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5lOwotICAgICAgaWYgKGwxID09IGwyKSBy
ZXR1cm4gZ2V0TGluZShkb2MsIGwxKS50ZXh0LnNsaWNlKGZyb20uY2gsIHRvLmNoKTsKLSAgICAg
IHZhciBjb2RlID0gW2dldExpbmUoZG9jLCBsMSkudGV4dC5zbGljZShmcm9tLmNoKV07Ci0gICAg
ICBkb2MuaXRlcihsMSArIDEsIGwyLCBmdW5jdGlvbihsaW5lKSB7IGNvZGUucHVzaChsaW5lLnRl
eHQpOyB9KTsKLSAgICAgIGNvZGUucHVzaChnZXRMaW5lKGRvYywgbDIpLnRleHQuc2xpY2UoMCwg
dG8uY2gpKTsKLSAgICAgIHJldHVybiBjb2RlLmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICB0
b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuc3RhdGUub3Zlcndy
aXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQorICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29y
LmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3Itb3ZlcndyaXRlIjsKKyAgICAgIGVsc2UKKyAgICAg
ICAgdGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUgPSB0aGlzLmRpc3BsYXkuY3Vyc29yLmNs
YXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCAiIik7CiAgICAgfSwKIAot
ICAgIHRyaWdnZXJPbktleURvd246IG9wZXJhdGlvbihudWxsLCBvbktleURvd24pLAotCi0gICAg
ZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkge3JldHVybiBjb21tYW5kc1tjbWRdKHRoaXMpO30s
Ci0KLSAgICAvLyBTdHVmZiB1c2VkIGJ5IGNvbW1hbmRzLCBwcm9iYWJseSBub3QgbXVjaCB1c2Ug
dG8gb3V0c2lkZSBjb2RlLgotICAgIG1vdmVIOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZGly
LCB1bml0KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy52aWV3LnNlbCwgcG9zID0gZGlyIDwgMCA/
IHNlbC5mcm9tIDogc2VsLnRvOwotICAgICAgaWYgKHNlbC5zaGlmdCB8fCBzZWwuZXh0ZW5kIHx8
IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQotICAgICAgICBwb3MgPSBmaW5kUG9zSCh0aGlzLCBk
aXIsIHVuaXQsIHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOwotICAgICAgZXh0ZW5kU2Vs
ZWN0aW9uKHRoaXMsIHBvcywgcG9zLCBkaXIpOwotICAgIH0pLAotCi0gICAgZGVsZXRlSDogb3Bl
cmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgewotICAgICAgdmFyIHNlbCA9IHRoaXMu
dmlldy5zZWw7Ci0gICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBsYWNlUmFu
Z2UodGhpcywgIiIsIHNlbC5mcm9tLCBzZWwudG8sICJkZWxldGUiKTsKLSAgICAgIGVsc2UgcmVw
bGFjZVJhbmdlKHRoaXMsICIiLCBzZWwuZnJvbSwgZmluZFBvc0godGhpcywgZGlyLCB1bml0LCBm
YWxzZSksICJkZWxldGUiKTsKLSAgICAgIHRoaXMuY3VyT3AudXNlclNlbENoYW5nZSA9IHRydWU7
CisgICAgc2Nyb2xsVG86IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbih4LCB5KSB7CisgICAgICB0
aGlzLmN1ck9wLnVwZGF0ZVNjcm9sbFBvcyA9IHtzY3JvbGxMZWZ0OiB4LCBzY3JvbGxUb3A6IHl9
OwogICAgIH0pLAotCi0gICAgbW92ZVY6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIsIHVu
aXQpIHsKLSAgICAgIHZhciB2aWV3ID0gdGhpcy52aWV3LCBkb2MgPSB2aWV3LmRvYywgZGlzcGxh
eSA9IHRoaXMuZGlzcGxheTsKLSAgICAgIHZhciBjdXIgPSB2aWV3LnNlbC5oZWFkLCBwb3MgPSBj
dXJzb3JDb29yZHModGhpcywgY3VyLCAiZGl2Iik7Ci0gICAgICB2YXIgeCA9IHBvcy5sZWZ0LCB5
OwotICAgICAgaWYgKHZpZXcuZ29hbENvbHVtbiAhPSBudWxsKSB4ID0gdmlldy5nb2FsQ29sdW1u
OwotICAgICAgaWYgKHVuaXQgPT0gInBhZ2UiKSB7Ci0gICAgICAgIHZhciBwYWdlU2l6ZSA9IE1h
dGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8
fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgeSA9IHBv
cy50b3AgKyBkaXIgKiBwYWdlU2l6ZTsKLSAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAibGluZSIp
IHsKLSAgICAgICAgeSA9IGRpciA+IDAgPyBwb3MuYm90dG9tICsgMyA6IHBvcy50b3AgLSAzOwot
ICAgICAgfQotICAgICAgZG8gewotICAgICAgICB2YXIgdGFyZ2V0ID0gY29vcmRzQ2hhcih0aGlz
LCB4LCB5KTsKLSAgICAgICAgeSArPSBkaXIgKiA1OwotICAgICAgfSB3aGlsZSAodGFyZ2V0Lm91
dHNpZGUgJiYgKGRpciA8IDAgPyB5ID4gMCA6IHkgPCBkb2MuaGVpZ2h0KSk7Ci0KLSAgICAgIGlm
ICh1bml0ID09ICJwYWdlIikgZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCArPSBjaGFyQ29v
cmRzKHRoaXMsIHRhcmdldCwgImRpdiIpLnRvcCAtIHBvcy50b3A7Ci0gICAgICBleHRlbmRTZWxl
Y3Rpb24odGhpcywgdGFyZ2V0LCB0YXJnZXQsIGRpcik7Ci0gICAgICB2aWV3LmdvYWxDb2x1bW4g
PSB4OwotICAgIH0pLAotCi0gICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbigpIHsKLSAgICAg
IGlmICh0aGlzLnZpZXcub3ZlcndyaXRlID0gIXRoaXMudmlldy5vdmVyd3JpdGUpCi0gICAgICAg
IHRoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci1vdmVyd3JpdGUi
OwotICAgICAgZWxzZQotICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSA9IHRo
aXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLW92ZXJ3cml0
ZSIsICIiKTsKLSAgICB9LAotCi0gICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHsKLSAg
ICAgIHZhciBsaW5lTm8gPSAwLCBjaCwgZG9jID0gdGhpcy52aWV3LmRvYzsKLSAgICAgIGRvYy5p
dGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBzeiA9IGxpbmUu
dGV4dC5sZW5ndGggKyAxOwotICAgICAgICBpZiAoc3ogPiBvZmYpIHsgY2ggPSBvZmY7IHJldHVy
biB0cnVlOyB9Ci0gICAgICAgIG9mZiAtPSBzejsKLSAgICAgICAgKytsaW5lTm87Ci0gICAgICB9
KTsKLSAgICAgIHJldHVybiBjbGlwUG9zKGRvYywge2xpbmU6IGxpbmVObywgY2g6IGNofSk7Ci0g
ICAgfSwKLSAgICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHsKLSAgICAgIGNvb3Jk
cyA9IGNsaXBQb3ModGhpcy52aWV3LmRvYywgY29vcmRzKTsKLSAgICAgIHZhciBpbmRleCA9IGNv
b3Jkcy5jaDsKLSAgICAgIHRoaXMudmlldy5kb2MuaXRlcigwLCBjb29yZHMubGluZSwgZnVuY3Rp
b24gKGxpbmUpIHsKLSAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7Ci0gICAg
ICB9KTsKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICB9LAotCi0gICAgc2Nyb2xsVG86IGZ1bmN0
aW9uKHgsIHkpIHsKLSAgICAgIGlmICh4ICE9IG51bGwpIHRoaXMuZGlzcGxheS5zY3JvbGxiYXJI
LnNjcm9sbExlZnQgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHg7Ci0gICAg
ICBpZiAoeSAhPSBudWxsKSB0aGlzLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSB0aGlz
LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0geTsKLSAgICAgIHVwZGF0ZURpc3BsYXkodGhp
cywgW10pOwotICAgIH0sCiAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CiAgICAgICB2
YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXIsIGNvID0gc2Nyb2xsZXJDdXRPZmY7
CiAgICAgICByZXR1cm4ge2xlZnQ6IHNjcm9sbGVyLnNjcm9sbExlZnQsIHRvcDogc2Nyb2xsZXIu
c2Nyb2xsVG9wLApAQCAtMjc4Nyw5ICsyODc1LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgfSwKIAogICAgIHNjcm9sbEludG9WaWV3OiBmdW5jdGlvbihwb3MpIHsK
LSAgICAgIGlmICh0eXBlb2YgcG9zID09ICJudW1iZXIiKSBwb3MgPSB7bGluZTogcG9zLCBjaDog
MH07CisgICAgICBpZiAodHlwZW9mIHBvcyA9PSAibnVtYmVyIikgcG9zID0gUG9zKHBvcywgMCk7
CiAgICAgICBpZiAoIXBvcyB8fCBwb3MubGluZSAhPSBudWxsKSB7Ci0gICAgICAgIHBvcyA9IHBv
cyA/IGNsaXBQb3ModGhpcy52aWV3LmRvYywgcG9zKSA6IHRoaXMudmlldy5zZWwuaGVhZDsKKyAg
ICAgICAgcG9zID0gcG9zID8gY2xpcFBvcyh0aGlzLmRvYywgcG9zKSA6IHRoaXMuZG9jLnNlbC5o
ZWFkOwogICAgICAgICBzY3JvbGxQb3NJbnRvVmlldyh0aGlzLCBwb3MpOwogICAgICAgfSBlbHNl
IHsKICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgcG9zLmxlZnQsIHBvcy50b3AsIHBvcy5y
aWdodCwgcG9zLmJvdHRvbSk7CkBAIC0yODA4LDE0ICsyODk2LDIyIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uOiBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywg
dHlwZSwgZik7fSwKICAgICBvZmY6IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwg
Zik7fSwKIAotICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbih0aGlz
LCBmKSgpO30sCisgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlz
LCBmKTt9LAogCi0gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7CisgICAgcmVmcmVzaDogb3BlcmF0
aW9uKG51bGwsIGZ1bmN0aW9uKCkgewogICAgICAgY2xlYXJDYWNoZXModGhpcyk7Ci0gICAgICBp
ZiAodGhpcy5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodCA+IHRoaXMudmlldy5zY3JvbGxU
b3ApCi0gICAgICAgIHRoaXMuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IHRoaXMuZGlz
cGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB0aGlzLnZpZXcuc2Nyb2xsVG9wOwotICAgICAgdXBk
YXRlRGlzcGxheSh0aGlzLCB0cnVlKTsKLSAgICB9LAorICAgICAgdGhpcy5jdXJPcC51cGRhdGVT
Y3JvbGxQb3MgPSB7c2Nyb2xsVG9wOiB0aGlzLmRvYy5zY3JvbGxUb3AsIHNjcm9sbExlZnQ6IHRo
aXMuZG9jLnNjcm9sbExlZnR9OworICAgICAgcmVnQ2hhbmdlKHRoaXMpOworICAgIH0pLAorCisg
ICAgc3dhcERvYzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRvYykgeworICAgICAgdmFyIG9s
ZCA9IHRoaXMuZG9jOworICAgICAgb2xkLmNtID0gbnVsbDsKKyAgICAgIGF0dGFjaERvYyh0aGlz
LCBkb2MpOworICAgICAgY2xlYXJDYWNoZXModGhpcyk7CisgICAgICB0aGlzLmN1ck9wLnVwZGF0
ZVNjcm9sbFBvcyA9IHtzY3JvbGxUb3A6IGRvYy5zY3JvbGxUb3AsIHNjcm9sbExlZnQ6IGRvYy5z
Y3JvbGxMZWZ0fTsKKyAgICAgIHJldHVybiBvbGQ7CisgICAgfSksCiAKICAgICBnZXRJbnB1dEZp
ZWxkOiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQ7fSwKICAgICBnZXRXcmFw
cGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXI7fSwKQEAg
LTI4NDAsOCArMjkzNiwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3Ig
YmVjYXVzZSB0aGV5CiAgIC8vIGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlZGl0
b3IgY2FuIHN0YXJ0IGF0IGFsbC4KLSAgb3B0aW9uKCJ2YWx1ZSIsICIiLCBmdW5jdGlvbihjbSwg
dmFsKSB7Y20uc2V0VmFsdWUodmFsKTt9LCB0cnVlKTsKLSAgb3B0aW9uKCJtb2RlIiwgbnVsbCwg
bG9hZE1vZGUsIHRydWUpOworICBvcHRpb24oInZhbHVlIiwgIiIsIGZ1bmN0aW9uKGNtLCB2YWwp
IHsKKyAgICBjbS5zZXRWYWx1ZSh2YWwpOworICB9LCB0cnVlKTsKKyAgb3B0aW9uKCJtb2RlIiwg
bnVsbCwgZnVuY3Rpb24oY20sIHZhbCkgeworICAgIGNtLmRvYy5tb2RlT3B0aW9uID0gdmFsOwor
ICAgIGxvYWRNb2RlKGNtKTsKKyAgfSwgdHJ1ZSk7CiAKICAgb3B0aW9uKCJpbmRlbnRVbml0Iiwg
MiwgbG9hZE1vZGUsIHRydWUpOwogICBvcHRpb24oImluZGVudFdpdGhUYWJzIiwgZmFsc2UpOwpA
QCAtMjg0OSw3ICsyOTUwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IG9wdGlvbigidGFiU2l6ZSIsIDQsIGZ1bmN0aW9uKGNtKSB7CiAgICAgbG9hZE1vZGUoY20pOwog
ICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgICB1cGRhdGVEaXNwbGF5KGNtLCB0cnVlKTsKKyAgICBy
ZWdDaGFuZ2UoY20pOwogICB9LCB0cnVlKTsKICAgb3B0aW9uKCJlbGVjdHJpY0NoYXJzIiwgdHJ1
ZSk7CiAgIG9wdGlvbigicnRsTW92ZVZpc3VhbGx5IiwgIXdpbmRvd3MpOwpAQCAtMjg2OSw2ICsy
OTcwLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHNldEd1dHRl
cnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKICAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CiAg
IH0sIHRydWUpOworICBvcHRpb24oImZpeGVkR3V0dGVyIiwgdHJ1ZSwgZnVuY3Rpb24oY20sIHZh
bCkgeworICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0
ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAiOworICAgIGNtLnJlZnJlc2goKTsK
KyAgfSwgdHJ1ZSk7CiAgIG9wdGlvbigibGluZU51bWJlcnMiLCBmYWxzZSwgZnVuY3Rpb24oY20p
IHsKICAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20ub3B0aW9ucyk7CiAgICAgZ3V0dGVy
c0NoYW5nZWQoY20pOwpAQCAtMjg4OSw3ICsyOTk0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgIG9wdGlvbigid29ya0RlbGF5IiwgMTAwKTsKICAgb3B0aW9uKCJmbGF0
dGVuU3BhbnMiLCB0cnVlKTsKICAgb3B0aW9uKCJwb2xsSW50ZXJ2YWwiLCAxMDApOwotICBvcHRp
b24oInVuZG9EZXB0aCIsIDQwKTsKKyAgb3B0aW9uKCJ1bmRvRGVwdGgiLCA0MCwgZnVuY3Rpb24o
Y20sIHZhbCl7Y20uZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdmFsO30pOwogICBvcHRpb24oInZp
ZXdwb3J0TWFyZ2luIiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7CiAK
ICAgb3B0aW9uKCJ0YWJpbmRleCIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKQEAgLTI5NDks
OCArMzA1NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB2YXIgbW9k
ZUV4dGVuc2lvbnMgPSBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zID0ge307CiAgIENvZGVNaXJy
b3IuZXh0ZW5kTW9kZSA9IGZ1bmN0aW9uKG1vZGUsIHByb3BlcnRpZXMpIHsKICAgICB2YXIgZXh0
cyA9IG1vZGVFeHRlbnNpb25zLmhhc093blByb3BlcnR5KG1vZGUpID8gbW9kZUV4dGVuc2lvbnNb
bW9kZV0gOiAobW9kZUV4dGVuc2lvbnNbbW9kZV0gPSB7fSk7Ci0gICAgZm9yICh2YXIgcHJvcCBp
biBwcm9wZXJ0aWVzKSBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkKLSAgICAg
IGV4dHNbcHJvcF0gPSBwcm9wZXJ0aWVzW3Byb3BdOworICAgIGNvcHlPYmoocHJvcGVydGllcywg
ZXh0cyk7CiAgIH07CiAKICAgLy8gRVhURU5TSU9OUwpAQCAtMjk5OCwyMSArMzEwMiwyMSBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gU1RBTkRBUkQgQ09NTUFORFMK
IAogICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewotICAgIHNlbGVjdEFs
bDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6
IGNtLmxpbmVDb3VudCgpIC0gMX0pO30sCisgICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2Nt
LnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSkp
O30sCiAgICAga2lsbExpbmU6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICB2YXIgZnJvbSA9IGNtLmdl
dEN1cnNvcih0cnVlKSwgdG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJv
bSwgdG8pOwogICAgICAgaWYgKCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0aCA9
PSBmcm9tLmNoKQotICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBmcm9t
LmxpbmUgKyAxLCBjaDogMH0sICJkZWxldGUiKTsKLSAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdl
KCIiLCBmcm9tLCBzZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9LCAiZGVsZXRlIik7CisgICAg
ICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwgUG9zKGZyb20ubGluZSArIDEsIDApLCAiK2Rl
bGV0ZSIpOworICAgICAgZWxzZSBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHNlbCA/IHRvIDog
UG9zKGZyb20ubGluZSksICIrZGVsZXRlIik7CiAgICAgfSwKICAgICBkZWxldGVMaW5lOiBmdW5j
dGlvbihjbSkgewogICAgICAgdmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwotICAgICAgY20u
cmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbCwgY2g6IDB9LCB7bGluZTogbH0sICJkZWxldGUiKTsK
KyAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGwsIDApLCBQb3MobCksICIrZGVsZXRlIik7
CiAgICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgIHJlZG86
IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCi0gICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20p
IHtjbS5leHRlbmRTZWxlY3Rpb24oe2xpbmU6IDAsIGNoOiAwfSk7fSwKLSAgICBnb0RvY0VuZDog
ZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVDb3VudCgpIC0g
MX0pO30sCisgICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24o
UG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7fSwKKyAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtj
bS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmxhc3RMaW5lKCkpKTt9LAogICAgIGdvTGluZVN0YXJ0
OiBmdW5jdGlvbihjbSkgewogICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKGxpbmVTdGFydChjbSwg
Y20uZ2V0Q3Vyc29yKCkubGluZSkpOwogICAgIH0sCkBAIC0zMDIzLDcgKzMxMjcsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJb
MF0ubGV2ZWwgPT0gMCkgewogICAgICAgICB2YXIgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIGxp
bmUudGV4dC5zZWFyY2goL1xTLykpOwogICAgICAgICB2YXIgaW5XUyA9IGN1ci5saW5lID09IHN0
YXJ0LmxpbmUgJiYgY3VyLmNoIDw9IGZpcnN0Tm9uV1MgJiYgY3VyLmNoOwotICAgICAgICBjbS5l
eHRlbmRTZWxlY3Rpb24oe2xpbmU6IHN0YXJ0LmxpbmUsIGNoOiBpbldTID8gMCA6IGZpcnN0Tm9u
V1N9KTsKKyAgICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhzdGFydC5saW5lLCBpbldTID8g
MCA6IGZpcnN0Tm9uV1MpKTsKICAgICAgIH0gZWxzZSBjbS5leHRlbmRTZWxlY3Rpb24oc3RhcnQp
OwogICAgIH0sCiAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewpAQCAtMzA0NiwyMCArMzE1
MCwyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpbmRlbnRBdXRv
OiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic21hcnQiKTt9LAogICAgIGluZGVu
dE1vcmU6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTt9LAogICAgIGlu
ZGVudExlc3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30s
Ci0gICAgaW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0Iiwg
ImVuZCIsICJpbnB1dCIpO30sCisgICAgaW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJlcGxh
Y2VTZWxlY3Rpb24oIlx0IiwgImVuZCIsICIraW5wdXQiKTt9LAogICAgIGRlZmF1bHRUYWI6IGZ1
bmN0aW9uKGNtKSB7CiAgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgY20uaW5kZW50
U2VsZWN0aW9uKCJhZGQiKTsKLSAgICAgIGVsc2UgY20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAi
ZW5kIiwgImlucHV0Iik7CisgICAgICBlbHNlIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVu
ZCIsICIraW5wdXQiKTsKICAgICB9LAogICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbihjbSkg
ewogICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZShjdXIu
bGluZSk7CiAgICAgICBpZiAoY3VyLmNoID4gMCAmJiBjdXIuY2ggPCBsaW5lLmxlbmd0aCAtIDEp
CiAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2gpICsgbGluZS5jaGFy
QXQoY3VyLmNoIC0gMSksCi0gICAgICAgICAgICAgICAgICAgICAgICB7bGluZTogY3VyLmxpbmUs
IGNoOiBjdXIuY2ggLSAxfSwge2xpbmU6IGN1ci5saW5lLCBjaDogY3VyLmNoICsgMX0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKSwgUG9zKGN1ci5s
aW5lLCBjdXIuY2ggKyAxKSk7CiAgICAgfSwKICAgICBuZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlv
bihjbSkgewogICAgICAgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKLSAgICAgICAgY20ucmVw
bGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIiwgImlucHV0Iik7CisgICAgICAgIGNtLnJlcGxhY2VT
ZWxlY3Rpb24oIlxuIiwgImVuZCIsICIraW5wdXQiKTsKICAgICAgICAgY20uaW5kZW50TGluZShj
bS5nZXRDdXJzb3IoKS5saW5lLCBudWxsLCB0cnVlKTsKICAgICAgIH0pKCk7CiAgICAgfSwKQEAg
LTMxMTAsMzcgKzMyMTQsNDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgZWxzZSByZXR1cm4gdmFsOwogICB9CiAKLSAgZnVuY3Rpb24gbG9va3VwS2V5KG5hbWUsIG1h
cHMsIGhhbmRsZSwgc3RvcCkgeworICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgbWFwcywgaGFu
ZGxlKSB7CiAgICAgZnVuY3Rpb24gbG9va3VwKG1hcCkgewogICAgICAgbWFwID0gZ2V0S2V5TWFw
KG1hcCk7CiAgICAgICB2YXIgZm91bmQgPSBtYXBbbmFtZV07Ci0gICAgICBpZiAoZm91bmQgPT09
IGZhbHNlKSB7Ci0gICAgICAgIGlmIChzdG9wKSBzdG9wKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgfQorICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgcmV0dXJuICJzdG9wIjsKICAg
ICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOwotICAg
ICAgaWYgKG1hcC5ub2ZhbGx0aHJvdWdoKSB7Ci0gICAgICAgIGlmIChzdG9wKSBzdG9wKCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQorICAgICAgaWYgKG1hcC5ub2ZhbGx0aHJvdWdo
KSByZXR1cm4gInN0b3AiOworCiAgICAgICB2YXIgZmFsbHRocm91Z2ggPSBtYXAuZmFsbHRocm91
Z2g7CiAgICAgICBpZiAoZmFsbHRocm91Z2ggPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAg
aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmYWxsdGhyb3VnaCkgIT0gIltvYmpl
Y3QgQXJyYXldIikKICAgICAgICAgcmV0dXJuIGxvb2t1cChmYWxsdGhyb3VnaCk7CiAgICAgICBm
b3IgKHZhciBpID0gMCwgZSA9IGZhbGx0aHJvdWdoLmxlbmd0aDsgaSA8IGU7ICsraSkgewotICAg
ICAgICBpZiAobG9va3VwKGZhbGx0aHJvdWdoW2ldKSkgcmV0dXJuIHRydWU7CisgICAgICAgIHZh
ciBkb25lID0gbG9va3VwKGZhbGx0aHJvdWdoW2ldKTsKKyAgICAgICAgaWYgKGRvbmUpIHJldHVy
biBkb25lOwogICAgICAgfQogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkKLSAgICAgIGlmIChsb29rdXAobWFwc1tp
XSkpIHJldHVybiB0cnVlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsr
aSkgeworICAgICAgdmFyIGRvbmUgPSBsb29rdXAobWFwc1tpXSk7CisgICAgICBpZiAoZG9uZSkg
cmV0dXJuIGRvbmU7CisgICAgfQogICB9CiAgIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkoZXZlbnQp
IHsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVudCwgImtleUNvZGUiKV07Cisg
ICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlDb2RlXTsKICAgICByZXR1cm4gbmFtZSA9
PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAi
TW9kIjsKICAgfQorICBmdW5jdGlvbiBrZXlOYW1lKGV2ZW50LCBub1NoaWZ0KSB7CisgICAgdmFy
IG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlDb2RlXTsKKyAgICBpZiAobmFtZSA9PSBudWxsIHx8
IGV2ZW50LmFsdEdyYXBoS2V5KSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGV2ZW50LmFsdEtleSkg
bmFtZSA9ICJBbHQtIiArIG5hbWU7CisgICAgaWYgKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtl
eSA6IGV2ZW50LmN0cmxLZXkpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKKyAgICBpZiAoZmxpcEN0
cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgbmFtZSA9ICJDbWQtIiArIG5h
bWU7CisgICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5KSBuYW1lID0gIlNoaWZ0LSIg
KyBuYW1lOworICAgIHJldHVybiBuYW1lOworICB9CisgIENvZGVNaXJyb3IubG9va3VwS2V5ID0g
bG9va3VwS2V5OwogICBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBpc01vZGlmaWVyS2V5Owor
ICBDb2RlTWlycm9yLmtleU5hbWUgPSBrZXlOYW1lOwogCiAgIC8vIEZST01URVhUQVJFQQogCkBA
IC0zMTY1LDcgKzMyNzgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIG9uKHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBzYXZlKTsKICAgICAgIHZhciBmb3JtID0g
dGV4dGFyZWEuZm9ybSwgcmVhbFN1Ym1pdCA9IGZvcm0uc3VibWl0OwogICAgICAgdHJ5IHsKLSAg
ICAgICAgZm9ybS5zdWJtaXQgPSBmdW5jdGlvbiB3cmFwcGVkU3VibWl0KCkgeworICAgICAgICB2
YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
c2F2ZSgpOwogICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgICAgICBm
b3JtLnN1Ym1pdCgpOwpAQCAtMzI1NywxNSArMzM3MCwxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKIAogICAvLyBURVhUTUFSS0VSUwogCi0gIGZ1bmN0aW9uIFRleHRNYXJr
ZXIoY20sIHR5cGUpIHsKKyAgZnVuY3Rpb24gVGV4dE1hcmtlcihkb2MsIHR5cGUpIHsKICAgICB0
aGlzLmxpbmVzID0gW107CiAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLmNtID0gY207
CisgICAgdGhpcy5kb2MgPSBkb2M7CiAgIH0KKyAgQ29kZU1pcnJvci5UZXh0TWFya2VyID0gVGV4
dE1hcmtlcjsKIAogICBUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewog
ICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47Ci0gICAgc3RhcnRPcGVyYXRp
b24odGhpcy5jbSk7CisgICAgdmFyIGNtID0gdGhpcy5kb2MuY20sIHdpdGhPcCA9IGNtICYmICFj
bS5jdXJPcDsKKyAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7CiAgICAgdmFyIG1p
biA9IG51bGwsIG1heCA9IG51bGw7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVz
Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07CkBAIC0zMjc0
LDE4ICszMzg5LDI3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
bGluZS5tYXJrZWRTcGFucyA9IHJlbW92ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bh
bik7CiAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpCiAgICAgICAgIG1pbiA9IGxpbmVObyhs
aW5lKTsKLSAgICAgIGVsc2UgaWYgKHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4obGlu
ZSkpCi0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhlaWdodCh0aGlzLmNtLmRp
c3BsYXkpKTsKKyAgICAgIGVsc2UgaWYgKHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4o
dGhpcy5kb2MsIGxpbmUpICYmIGNtKQorICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRl
eHRIZWlnaHQoY20uZGlzcGxheSkpOworICAgIH0KKyAgICBpZiAoY20gJiYgdGhpcy5jb2xsYXBz
ZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
bGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGNtLmRv
YywgdGhpcy5saW5lc1tpXSksIGxlbiA9IGxpbmVMZW5ndGgoY20uZG9jLCB2aXN1YWwpOworICAg
ICAgaWYgKGxlbiA+IGNtLmRpc3BsYXkubWF4TGluZUxlbmd0aCkgeworICAgICAgICBjbS5kaXNw
bGF5Lm1heExpbmUgPSB2aXN1YWw7CisgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUxlbmd0aCA9
IGxlbjsKKyAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7CisgICAgICB9
CiAgICAgfQotICAgIGlmIChtaW4gIT0gbnVsbCkgcmVnQ2hhbmdlKHRoaXMuY20sIG1pbiwgbWF4
ICsgMSk7CisKKyAgICBpZiAobWluICE9IG51bGwgJiYgY20pIHJlZ0NoYW5nZShjbSwgbWluLCBt
YXggKyAxKTsKICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7CiAgICAgdGhpcy5leHBsaWNpdGx5
Q2xlYXJlZCA9IHRydWU7Ci0gICAgaWYgKHRoaXMuY29sbGFwc2VkICYmIHRoaXMuY20udmlldy5j
YW50RWRpdCkgewotICAgICAgdGhpcy5jbS52aWV3LmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgICBy
ZUNoZWNrU2VsZWN0aW9uKHRoaXMuY20pOworICAgIGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlz
LmRvYy5jYW50RWRpdCkgeworICAgICAgdGhpcy5kb2MuY2FudEVkaXQgPSBmYWxzZTsKKyAgICAg
IGlmIChjbSkgcmVDaGVja1NlbGVjdGlvbihjbSk7CiAgICAgfQotICAgIGVuZE9wZXJhdGlvbih0
aGlzLmNtKTsKLSAgICBzaWduYWxMYXRlcih0aGlzLmNtLCB0aGlzLCAiY2xlYXIiKTsKKyAgICBp
ZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOworICAgIHNpZ25hbExhdGVyKHRoaXMsICJjbGVh
ciIpOwogICB9OwogCiAgIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbigpIHsK
QEAgLTMyOTUsMjggKzM0MTksNTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhp
cyk7CiAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwgfHwgc3Bhbi50byAhPSBudWxsKSB7CiAg
ICAgICAgIHZhciBmb3VuZCA9IGxpbmVObyhsaW5lKTsKLSAgICAgICAgaWYgKHNwYW4uZnJvbSAh
PSBudWxsKSBmcm9tID0ge2xpbmU6IGZvdW5kLCBjaDogc3Bhbi5mcm9tfTsKLSAgICAgICAgaWYg
KHNwYW4udG8gIT0gbnVsbCkgdG8gPSB7bGluZTogZm91bmQsIGNoOiBzcGFuLnRvfTsKKyAgICAg
ICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKSBmcm9tID0gUG9zKGZvdW5kLCBzcGFuLmZyb20pOwor
ICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB0byA9IFBvcyhmb3VuZCwgc3Bhbi50byk7CiAg
ICAgICB9CiAgICAgfQogICAgIGlmICh0aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgcmV0dXJuIGZy
b207CiAgICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b307CiAgIH07CiAKLSAg
ZnVuY3Rpb24gbWFya1RleHQoY20sIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7Ci0gICAgdmFy
IGRvYyA9IGNtLnZpZXcuZG9jOwotICAgIHZhciBtYXJrZXIgPSBuZXcgVGV4dE1hcmtlcihjbSwg
dHlwZSk7CisgIFRleHRNYXJrZXIucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbihjb3B5
V2lkZ2V0KSB7CisgICAgdmFyIHJlcGwgPSB0aGlzLnJlcGxhY2VkV2l0aDsKKyAgICByZXR1cm4g
e2NsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsCisgICAgICAgICAgICBpbmNsdXNpdmVMZWZ0OiB0
aGlzLmluY2x1c2l2ZUxlZnQsIGluY2x1c2l2ZVJpZ2h0OiB0aGlzLmluY2x1c2l2ZVJpZ2h0LAor
ICAgICAgICAgICAgYXRvbWljOiB0aGlzLmF0b21pYywKKyAgICAgICAgICAgIGNvbGxhcHNlZDog
dGhpcy5jb2xsYXBzZWQsCisgICAgICAgICAgICBjbGVhck9uRW50ZXI6IHRoaXMuY2xlYXJPbkVu
dGVyLAorICAgICAgICAgICAgcmVwbGFjZWRXaXRoOiBjb3B5V2lkZ2V0ID8gcmVwbCAmJiByZXBs
LmNsb25lTm9kZSh0cnVlKSA6IHJlcGwsCisgICAgICAgICAgICByZWFkT25seTogdGhpcy5yZWFk
T25seSwKKyAgICAgICAgICAgIHN0YXJ0U3R5bGU6IHRoaXMuc3RhcnRTdHlsZSwgZW5kU3R5bGU6
IHRoaXMuZW5kU3R5bGV9OworICB9OworCisgIFRleHRNYXJrZXIucHJvdG90eXBlLmF0dGFjaExp
bmUgPSBmdW5jdGlvbihsaW5lKSB7CisgICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlz
LmRvYy5jbSkgeworICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3A7CisgICAgICBpZiAo
IW9wLm1heWJlSGlkZGVuTWFya2VycyB8fCBpbmRleE9mKG9wLm1heWJlSGlkZGVuTWFya2Vycywg
dGhpcykgPT0gLTEpCisgICAgICAgIChvcC5tYXliZVVuaGlkZGVuTWFya2VycyB8fCAob3AubWF5
YmVVbmhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7CisgICAgfQorICAgIHRoaXMubGlu
ZXMucHVzaChsaW5lKTsKKyAgfTsKKyAgVGV4dE1hcmtlci5wcm90b3R5cGUuZGV0YWNoTGluZSA9
IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICB0aGlzLmxpbmVzLnNwbGljZShpbmRleE9mKHRoaXMubGlu
ZXMsIGxpbmUpLCAxKTsKKyAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNt
KSB7CisgICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDsKKyAgICAgIChvcC5tYXliZUhp
ZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlSGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTsK
KyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9u
cywgdHlwZSkgeworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkKSByZXR1cm4gbWFy
a1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSk7CisgICAgaWYgKGRvYy5j
bSAmJiAhZG9jLmNtLmN1ck9wKSByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFya1RleHQpKGRv
YywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpOworCisgICAgdmFyIG1hcmtlciA9IG5ldyBUZXh0
TWFya2VyKGRvYywgdHlwZSk7CiAgICAgaWYgKHR5cGUgPT0gInJhbmdlIiAmJiAhcG9zTGVzcyhm
cm9tLCB0bykpIHJldHVybiBtYXJrZXI7Ci0gICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBp
biBvcHRpb25zKSBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQotICAgICAgbWFya2Vy
W29wdF0gPSBvcHRpb25zW29wdF07CisgICAgaWYgKG9wdGlvbnMpIGNvcHlPYmoob3B0aW9ucywg
bWFya2VyKTsKICAgICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkgewogICAgICAgbWFya2VyLmNv
bGxhcHNlZCA9IHRydWU7CiAgICAgICBtYXJrZXIucmVwbGFjZWRXaXRoID0gZWx0KCJzcGFuIiwg
W21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1pcnJvci13aWRnZXQiKTsKICAgICB9CiAgICAg
aWYgKG1hcmtlci5jb2xsYXBzZWQpIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTsKIAotICAgIHZh
ciBjdXJMaW5lID0gZnJvbS5saW5lLCBzaXplID0gMCwgY29sbGFwc2VkQXRTdGFydCwgY29sbGFw
c2VkQXRFbmQ7CisgICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIHNpemUgPSAwLCBjb2xsYXBz
ZWRBdFN0YXJ0LCBjb2xsYXBzZWRBdEVuZCwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7CiAg
ICAgZG9jLml0ZXIoY3VyTGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAg
IGlmIChjbSAmJiBtYXJrZXIuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAm
JiB2aXN1YWxMaW5lKGRvYywgbGluZSkgPT0gY20uZGlzcGxheS5tYXhMaW5lKQorICAgICAgICB1
cGRhdGVNYXhMaW5lID0gdHJ1ZTsKICAgICAgIHZhciBzcGFuID0ge2Zyb206IG51bGwsIHRvOiBu
dWxsLCBtYXJrZXI6IG1hcmtlcn07CiAgICAgICBzaXplICs9IGxpbmUudGV4dC5sZW5ndGg7CiAg
ICAgICBpZiAoY3VyTGluZSA9PSBmcm9tLmxpbmUpIHtzcGFuLmZyb20gPSBmcm9tLmNoOyBzaXpl
IC09IGZyb20uY2g7fQpAQCAtMzMyNywxNSArMzQ4MiwxNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgICAgZWxzZSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwog
ICAgICAgfQogICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKTsKLSAgICAgIGlmIChtYXJr
ZXIuY29sbGFwc2VkICYmIGN1ckxpbmUgPT0gZnJvbS5saW5lICYmIGxpbmVJc0hpZGRlbihsaW5l
KSkKLSAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsKICAgICAgICsrY3VyTGluZTsK
ICAgICB9KTsKKyAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgZG9jLml0ZXIoZnJvbS5saW5lLCB0
by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKGxpbmVJc0hpZGRlbihkb2Ms
IGxpbmUpKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOworICAgIH0pOwogCiAgICAgaWYgKG1h
cmtlci5yZWFkT25seSkgewogICAgICAgc2F3UmVhZE9ubHlTcGFucyA9IHRydWU7Ci0gICAgICBp
ZiAoY20udmlldy5oaXN0b3J5LmRvbmUubGVuZ3RoIHx8IGNtLnZpZXcuaGlzdG9yeS51bmRvbmUu
bGVuZ3RoKQotICAgICAgICBjbS5jbGVhckhpc3RvcnkoKTsKKyAgICAgIGlmIChkb2MuaGlzdG9y
eS5kb25lLmxlbmd0aCB8fCBkb2MuaGlzdG9yeS51bmRvbmUubGVuZ3RoKQorICAgICAgICBkb2Mu
Y2xlYXJIaXN0b3J5KCk7CiAgICAgfQogICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7CiAgICAg
ICBpZiAoY29sbGFwc2VkQXRTdGFydCAhPSBjb2xsYXBzZWRBdEVuZCkKQEAgLTMzNDMsMTIgKzM0
OTksNTYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBtYXJrZXIu
c2l6ZSA9IHNpemU7CiAgICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxl
IHx8IG1hcmtlci5jb2xsYXBzZWQpCi0gICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8u
bGluZSArIDEpOwotICAgIGlmIChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtKTsK
KyAgICBpZiAoY20pIHsKKyAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVN
YXhMaW5lID0gdHJ1ZTsKKyAgICAgIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci5zdGFy
dFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY29sbGFwc2VkKQorICAgICAgICBy
ZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOworICAgICAgaWYgKG1hcmtlci5h
dG9taWMpIHJlQ2hlY2tTZWxlY3Rpb24oY20pOworICAgIH0KICAgICByZXR1cm4gbWFya2VyOwog
ICB9CiAKKyAgLy8gU0hBUkVEIFRFWFRNQVJLRVJTCisKKyAgZnVuY3Rpb24gU2hhcmVkVGV4dE1h
cmtlcihtYXJrZXJzLCBwcmltYXJ5KSB7CisgICAgdGhpcy5tYXJrZXJzID0gbWFya2VyczsKKyAg
ICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5OworICAgIGZvciAodmFyIGkgPSAwLCBtZSA9IHRoaXM7
IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICBtYXJrZXJzW2ldLnBhcmVudCA9IHRo
aXM7CisgICAgICBvbihtYXJrZXJzW2ldLCAiY2xlYXIiLCBmdW5jdGlvbigpe21lLmNsZWFyKCk7
fSk7CisgICAgfQorICB9CisgIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRl
eHRNYXJrZXI7CisKKyAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlv
bigpIHsKKyAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOworICAgIHRoaXMu
ZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5t
YXJrZXJzLmxlbmd0aDsgKytpKQorICAgICAgdGhpcy5tYXJrZXJzW2ldLmNsZWFyKCk7CisgICAg
c2lnbmFsTGF0ZXIodGhpcywgImNsZWFyIik7CisgIH07CisgIFNoYXJlZFRleHRNYXJrZXIucHJv
dG90eXBlLmZpbmQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQo
KTsKKyAgfTsKKyAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0
aW9uKGNvcHlXaWRnZXQpIHsKKyAgICB2YXIgaW5uZXIgPSB0aGlzLnByaW1hcnkuZ2V0T3B0aW9u
cyhjb3B5V2lkZ2V0KTsKKyAgICBpbm5lci5zaGFyZWQgPSB0cnVlOworICAgIHJldHVybiBpbm5l
cjsKKyAgfTsKKworICBmdW5jdGlvbiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRp
b25zLCB0eXBlKSB7CisgICAgb3B0aW9ucyA9IGNvcHlPYmoob3B0aW9ucyk7CisgICAgb3B0aW9u
cy5zaGFyZWQgPSBmYWxzZTsKKyAgICB2YXIgbWFya2VycyA9IFttYXJrVGV4dChkb2MsIGZyb20s
IHRvLCBvcHRpb25zLCB0eXBlKV0sIHByaW1hcnkgPSBtYXJrZXJzWzBdOworICAgIGxpbmtlZERv
Y3MoZG9jLCBmdW5jdGlvbihkb2MpIHsKKyAgICAgIG1hcmtlcnMucHVzaChtYXJrVGV4dChkb2Ms
IGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhkb2MsIHRvKSwgb3B0aW9ucywgdHlwZSkpOwor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKQorICAgICAg
ICBpZiAoZG9jLmxpbmtlZFtpXS5pc1BhcmVudCkgcmV0dXJuOworICAgICAgcHJpbWFyeSA9IGxz
dChtYXJrZXJzKTsKKyAgICB9KTsKKyAgICByZXR1cm4gbmV3IFNoYXJlZFRleHRNYXJrZXIobWFy
a2VycywgcHJpbWFyeSk7CisgIH0KKwogICAvLyBURVhUTUFSS0VSIFNQQU5TCiAKICAgZnVuY3Rp
b24gZ2V0TWFya2VkU3BhbkZvcihzcGFucywgbWFya2VyKSB7CkBAIC0zMzY0LDE0ICszNTY0LDE0
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAgIGZ1bmN0aW9uIGFk
ZE1hcmtlZFNwYW4obGluZSwgc3BhbikgewogICAgIGxpbmUubWFya2VkU3BhbnMgPSBsaW5lLm1h
cmtlZFNwYW5zID8gbGluZS5tYXJrZWRTcGFucy5jb25jYXQoW3NwYW5dKSA6IFtzcGFuXTsKLSAg
ICBzcGFuLm1hcmtlci5saW5lcy5wdXNoKGxpbmUpOworICAgIHNwYW4ubWFya2VyLmF0dGFjaExp
bmUobGluZSk7CiAgIH0KIAotICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0
Q2gpIHsKKyAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2Vy
dCkgewogICAgIGlmIChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsr
aSkgewogICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAg
ICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVz
aXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBzdGFydENoIDogc3Bhbi5mcm9tIDwgc3RhcnRDaCk7Ci0g
ICAgICBpZiAoc3RhcnRzQmVmb3JlIHx8IG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgc3Bh
bi5mcm9tID09IHN0YXJ0Q2gpIHsKKyAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwgbWFya2VyLnR5
cGUgPT0gImJvb2ttYXJrIiAmJiBzcGFuLmZyb20gPT0gc3RhcnRDaCAmJiAoIWlzSW5zZXJ0IHx8
ICFzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewogICAgICAgICB2YXIgZW5kc0FmdGVyID0gc3Bh
bi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IHN0YXJ0
Q2ggOiBzcGFuLnRvID4gc3RhcnRDaCk7CiAgICAgICAgIChudyB8fCAobncgPSBbXSkpLnB1c2go
e2Zyb206IHNwYW4uZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IGVu
ZHNBZnRlciA/IG51bGwgOiBzcGFuLnRvLApAQCAtMzM4MSwxMSArMzU4MSwxMSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gbnc7CiAgIH0KIAotICBmdW5j
dGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgc3RhcnRDaCwgZW5kQ2gpIHsKKyAgZnVuY3Rpb24g
bWFya2VkU3BhbnNBZnRlcihvbGQsIGVuZENoLCBpc0luc2VydCkgewogICAgIGlmIChvbGQpIGZv
ciAodmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHNwYW4g
PSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAgICAgdmFyIGVuZHNBZnRlciA9IHNw
YW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBlbmRD
aCA6IHNwYW4udG8gPiBlbmRDaCk7Ci0gICAgICBpZiAoZW5kc0FmdGVyIHx8IG1hcmtlci50eXBl
ID09ICJib29rbWFyayIgJiYgc3Bhbi5mcm9tID09IGVuZENoICYmIHNwYW4uZnJvbSAhPSBzdGFy
dENoKSB7CisgICAgICBpZiAoZW5kc0FmdGVyIHx8IG1hcmtlci50eXBlID09ICJib29rbWFyayIg
JiYgc3Bhbi5mcm9tID09IGVuZENoICYmICghaXNJbnNlcnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0
TGVmdCkpIHsKICAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8
IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8
IGVuZENoKTsKICAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaCh7ZnJvbTogc3RhcnRzQmVm
b3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bzogc3Bhbi50byA9PSBudWxsID8gbnVsbCA6IHNwYW4udG8gLSBlbmRDaCwKQEAg
LTMzOTUsMTQgKzM1OTUsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgcmV0dXJuIG53OwogICB9CiAKLSAgZnVuY3Rpb24gdXBkYXRlTWFya2VkU3BhbnMob2xkRmly
c3QsIG9sZExhc3QsIHN0YXJ0Q2gsIGVuZENoLCBuZXdUZXh0KSB7Ci0gICAgaWYgKCFvbGRGaXJz
dCAmJiAhb2xkTGFzdCkgcmV0dXJuIG5ld1RleHQ7CisgIGZ1bmN0aW9uIHN0cmV0Y2hTcGFuc092
ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgICB2YXIgb2xkRmlyc3QgPSBpc0xpbmUoZG9jLCBj
aGFuZ2UuZnJvbS5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkubWFya2Vk
U3BhbnM7CisgICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkgJiYg
Z2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFuczsKKyAgICBpZiAoIW9sZEZp
cnN0ICYmICFvbGRMYXN0KSByZXR1cm4gbnVsbDsKKworICAgIHZhciBzdGFydENoID0gY2hhbmdl
LmZyb20uY2gsIGVuZENoID0gY2hhbmdlLnRvLmNoLCBpc0luc2VydCA9IHBvc0VxKGNoYW5nZS5m
cm9tLCBjaGFuZ2UudG8pOwogICAgIC8vIEdldCB0aGUgc3BhbnMgdGhhdCAnc3RpY2sgb3V0JyBv
biBib3RoIHNpZGVzCi0gICAgdmFyIGZpcnN0ID0gbWFya2VkU3BhbnNCZWZvcmUob2xkRmlyc3Qs
IHN0YXJ0Q2gpOwotICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBzdGFy
dENoLCBlbmRDaCk7CisgICAgdmFyIGZpcnN0ID0gbWFya2VkU3BhbnNCZWZvcmUob2xkRmlyc3Qs
IHN0YXJ0Q2gsIGlzSW5zZXJ0KTsKKyAgICB2YXIgbGFzdCA9IG1hcmtlZFNwYW5zQWZ0ZXIob2xk
TGFzdCwgZW5kQ2gsIGlzSW5zZXJ0KTsKIAogICAgIC8vIE5leHQsIG1lcmdlIHRob3NlIHR3byBl
bmRzCi0gICAgdmFyIHNhbWVMaW5lID0gbmV3VGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0
KG5ld1RleHQpLmxlbmd0aCArIChzYW1lTGluZSA/IHN0YXJ0Q2ggOiAwKTsKKyAgICB2YXIgc2Ft
ZUxpbmUgPSBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0KGNoYW5nZS50ZXh0
KS5sZW5ndGggKyAoc2FtZUxpbmUgPyBzdGFydENoIDogMCk7CiAgICAgaWYgKGZpcnN0KSB7CiAg
ICAgICAvLyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3QKICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpIHsKQEAgLTM0MzIsMjEgKzM2MzYsNDMgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogCi0gICAgdmFy
IG5ld01hcmtlcnMgPSBbbmV3SEwobmV3VGV4dFswXSwgZmlyc3QpXTsKKyAgICB2YXIgbmV3TWFy
a2VycyA9IFtmaXJzdF07CiAgICAgaWYgKCFzYW1lTGluZSkgewogICAgICAgLy8gRmlsbCBnYXAg
d2l0aCB3aG9sZS1saW5lLXNwYW5zCi0gICAgICB2YXIgZ2FwID0gbmV3VGV4dC5sZW5ndGggLSAy
LCBnYXBNYXJrZXJzOworICAgICAgdmFyIGdhcCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDIsIGdh
cE1hcmtlcnM7CiAgICAgICBpZiAoZ2FwID4gMCAmJiBmaXJzdCkKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7ICsraSkKICAgICAgICAgICBpZiAoZmlyc3RbaV0udG8g
PT0gbnVsbCkKICAgICAgICAgICAgIChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5w
dXNoKHtmcm9tOiBudWxsLCB0bzogbnVsbCwgbWFya2VyOiBmaXJzdFtpXS5tYXJrZXJ9KTsKICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FwOyArK2kpCi0gICAgICAgIG5ld01hcmtlcnMucHVz
aChuZXdITChuZXdUZXh0W2krMV0sIGdhcE1hcmtlcnMpKTsKLSAgICAgIG5ld01hcmtlcnMucHVz
aChuZXdITChsc3QobmV3VGV4dCksIGxhc3QpKTsKKyAgICAgICAgbmV3TWFya2Vycy5wdXNoKGdh
cE1hcmtlcnMpOworICAgICAgbmV3TWFya2Vycy5wdXNoKGxhc3QpOwogICAgIH0KICAgICByZXR1
cm4gbmV3TWFya2VyczsKICAgfQogCisgIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFu
Z2UpIHsKKyAgICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpOworICAgIHZhciBz
dHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKKyAgICBpZiAo
IW9sZCkgcmV0dXJuIHN0cmV0Y2hlZDsKKyAgICBpZiAoIXN0cmV0Y2hlZCkgcmV0dXJuIG9sZDsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIg
b2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldOworICAgICAgaWYgKG9s
ZEN1ciAmJiBzdHJldGNoQ3VyKSB7CisgICAgICAgIHNwYW5zOiBmb3IgKHZhciBqID0gMDsgaiA8
IHN0cmV0Y2hDdXIubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICB2YXIgc3BhbiA9IHN0cmV0Y2hD
dXJbal07CisgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDdXIubGVuZ3RoOyArK2sp
CisgICAgICAgICAgICBpZiAob2xkQ3VyW2tdLm1hcmtlciA9PSBzcGFuLm1hcmtlcikgY29udGlu
dWUgc3BhbnM7CisgICAgICAgICAgb2xkQ3VyLnB1c2goc3Bhbik7CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSBpZiAoc3RyZXRjaEN1cikgeworICAgICAgICBvbGRbaV0gPSBzdHJldGNoQ3VyOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2xkOworICB9CisKICAgZnVuY3Rpb24gcmVtb3Zl
UmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykgewogICAgIHZhciBtYXJrZXJzID0gbnVsbDsK
ICAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CkBA
IC0zNDU5LDEzICszNjg1LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIGlmICghbWFya2VycykgcmV0dXJuIG51bGw7CiAgICAgdmFyIHBhcnRzID0gW3tmcm9tOiBm
cm9tLCB0bzogdG99XTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgIHZhciBtID0gbWFya2Vyc1tpXS5maW5kKCk7CisgICAgICB2YXIgbWsgPSBt
YXJrZXJzW2ldLCBtID0gbWsuZmluZCgpOwogICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0
cy5sZW5ndGg7ICsraikgewogICAgICAgICB2YXIgcCA9IHBhcnRzW2pdOwotICAgICAgICBpZiAo
IXBvc0xlc3MobS5mcm9tLCBwLnRvKSB8fCBwb3NMZXNzKG0udG8sIHAuZnJvbSkpIGNvbnRpbnVl
OworICAgICAgICBpZiAocG9zTGVzcyhwLnRvLCBtLmZyb20pIHx8IHBvc0xlc3MobS50bywgcC5m
cm9tKSkgY29udGludWU7CiAgICAgICAgIHZhciBuZXdQYXJ0cyA9IFtqLCAxXTsKLSAgICAgICAg
aWYgKHBvc0xlc3MocC5mcm9tLCBtLmZyb20pKSBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBwLmZyb20s
IHRvOiBtLmZyb219KTsKLSAgICAgICAgaWYgKHBvc0xlc3MobS50bywgcC50bykpIG5ld1BhcnRz
LnB1c2goe2Zyb206IG0udG8sIHRvOiBwLnRvfSk7CisgICAgICAgIGlmIChwb3NMZXNzKHAuZnJv
bSwgbS5mcm9tKSB8fCAhbWsuaW5jbHVzaXZlTGVmdCAmJiBwb3NFcShwLmZyb20sIG0uZnJvbSkp
CisgICAgICAgICAgbmV3UGFydHMucHVzaCh7ZnJvbTogcC5mcm9tLCB0bzogbS5mcm9tfSk7Cisg
ICAgICAgIGlmIChwb3NMZXNzKG0udG8sIHAudG8pIHx8ICFtay5pbmNsdXNpdmVSaWdodCAmJiBw
b3NFcShwLnRvLCBtLnRvKSkKKyAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBtLnRvLCB0
bzogcC50b30pOwogICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMsIG5ld1BhcnRzKTsK
ICAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAxOwogICAgICAgfQpAQCAtMzQ5NSw4MSAr
MzcyMywxMjcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJu
IGxpbmU7CiAgIH0KIAotICBmdW5jdGlvbiBsaW5lSXNIaWRkZW4obGluZSkgeworICBmdW5jdGlv
biBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSB7CiAgICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNw
YW5zICYmIGxpbmUubWFya2VkU3BhbnM7CiAgICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAw
OyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7CiAgICAgICBzcCA9IHNwc1tpXTsKICAgICAgIGlmICgh
c3AubWFya2VyLmNvbGxhcHNlZCkgY29udGludWU7CiAgICAgICBpZiAoc3AuZnJvbSA9PSBudWxs
KSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1
c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVuSW5uZXIobGluZSwgc3ApKQorICAgICAgaWYgKHNwLmZy
b20gPT0gMCAmJiBzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihk
b2MsIGxpbmUsIHNwKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9Ci0gIHdpbmRv
dy5saW5lSXNIaWRkZW4gPSBsaW5lSXNIaWRkZW47Ci0gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklu
bmVyKGxpbmUsIHNwYW4pIHsKLSAgICBpZiAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4ubWFya2Vy
LmluY2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKKyAgZnVuY3Rp
b24gbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcGFuKSB7CisgICAgaWYgKHNwYW4udG8g
PT0gbnVsbCkgeworICAgICAgdmFyIGVuZCA9IHNwYW4ubWFya2VyLmZpbmQoKS50bywgZW5kTGlu
ZSA9IGdldExpbmUoZG9jLCBlbmQubGluZSk7CisgICAgICByZXR1cm4gbGluZUlzSGlkZGVuSW5u
ZXIoZG9jLCBlbmRMaW5lLCBnZXRNYXJrZWRTcGFuRm9yKGVuZExpbmUubWFya2VkU3BhbnMsIHNw
YW4ubWFya2VyKSk7CisgICAgfQorICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCAm
JiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBm
b3IgKHZhciBzcCwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CiAg
ICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07CiAgICAgICBpZiAoc3AubWFya2VyLmNvbGxh
cHNlZCAmJiBzcC5mcm9tID09IHNwYW4udG8gJiYKICAgICAgICAgICAoc3AubWFya2VyLmluY2x1
c2l2ZUxlZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmCi0gICAgICAgICAgbGlu
ZUlzSGlkZGVuSW5uZXIobGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAv
LyBobCBzdGFuZHMgZm9yIGhpc3RvcnktbGluZSwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNhbiBi
ZSBlaXRoZXIgYQotICAvLyBzdHJpbmcgKGxpbmUgd2l0aG91dCBtYXJrZXJzKSBvciBhIHt0ZXh0
LCBtYXJrZWRTcGFuc30gb2JqZWN0LgotICBmdW5jdGlvbiBobFRleHQodmFsKSB7IHJldHVybiB0
eXBlb2YgdmFsID09ICJzdHJpbmciID8gdmFsIDogdmFsLnRleHQ7IH0KLSAgZnVuY3Rpb24gaGxT
cGFucyh2YWwpIHsKLSAgICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIG51bGw7
Ci0gICAgdmFyIHNwYW5zID0gdmFsLm1hcmtlZFNwYW5zLCBvdXQgPSBudWxsOwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGlmIChzcGFuc1tpXS5t
YXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIG91dCA9IHNwYW5zLnNsaWNlKDAs
IGkpOyB9Ci0gICAgICBlbHNlIGlmIChvdXQpIG91dC5wdXNoKHNwYW5zW2ldKTsKKyAgICAgICAg
ICBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkgcmV0dXJuIHRydWU7CiAgICAgfQot
ICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbDsKICAgfQot
ICBmdW5jdGlvbiBuZXdITCh0ZXh0LCBzcGFucykgeyByZXR1cm4gc3BhbnMgPyB7dGV4dDogdGV4
dCwgbWFya2VkU3BhbnM6IHNwYW5zfSA6IHRleHQ7IH0KIAogICBmdW5jdGlvbiBkZXRhY2hNYXJr
ZWRTcGFucyhsaW5lKSB7CiAgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsKICAgICBp
ZiAoIXNwYW5zKSByZXR1cm47Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7
ICsraSkgewotICAgICAgdmFyIGxpbmVzID0gc3BhbnNbaV0ubWFya2VyLmxpbmVzOwotICAgICAg
dmFyIGl4ID0gaW5kZXhPZihsaW5lcywgbGluZSk7Ci0gICAgICBsaW5lcy5zcGxpY2UoaXgsIDEp
OwotICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQorICAg
ICAgc3BhbnNbaV0ubWFya2VyLmRldGFjaExpbmUobGluZSk7CiAgICAgbGluZS5tYXJrZWRTcGFu
cyA9IG51bGw7CiAgIH0KIAogICBmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFu
cykgewogICAgIGlmICghc3BhbnMpIHJldHVybjsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNw
YW5zLmxlbmd0aDsgKytpKQotICAgICAgc3BhbnNbaV0ubWFya2VyLmxpbmVzLnB1c2gobGluZSk7
CisgICAgICBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKICAgICBsaW5lLm1hcmtl
ZFNwYW5zID0gc3BhbnM7CiAgIH0KIAorICAvLyBMSU5FIFdJREdFVFMKKworICB2YXIgTGluZVdp
ZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBvcHRpb25z
KSB7CisgICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3Bl
cnR5KG9wdCkpCisgICAgICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07CisgICAgdGhpcy5jbSA9
IGNtOworICAgIHRoaXMubm9kZSA9IG5vZGU7CisgIH07CisgIGZ1bmN0aW9uIHdpZGdldE9wZXJh
dGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHdpdGhPcCA9ICF0
aGlzLmNtLmN1ck9wOworICAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24odGhpcy5jbSk7
CisgICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7fQorICAg
ICAgZmluYWxseSB7aWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKHRoaXMuY20pO30KKyAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKKyAgfQorICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9
IHdpZGdldE9wZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICB2YXIgd3MgPSB0aGlzLmxpbmUud2lk
Z2V0cywgbm8gPSBsaW5lTm8odGhpcy5saW5lKTsKKyAgICBpZiAobm8gPT0gbnVsbCB8fCAhd3Mp
IHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSBpZiAod3Nb
aV0gPT0gdGhpcykgd3Muc3BsaWNlKGktLSwgMSk7CisgICAgaWYgKCF3cy5sZW5ndGgpIHRoaXMu
bGluZS53aWRnZXRzID0gbnVsbDsKKyAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGluZSwgTWF0
aC5tYXgoMCwgdGhpcy5saW5lLmhlaWdodCAtIHdpZGdldEhlaWdodCh0aGlzKSkpOworICAgIHJl
Z0NoYW5nZSh0aGlzLmNtLCBubywgbm8gKyAxKTsKKyAgfSk7CisgIExpbmVXaWRnZXQucHJvdG90
eXBlLmNoYW5nZWQgPSB3aWRnZXRPcGVyYXRpb24oZnVuY3Rpb24oKSB7CisgICAgdmFyIG9sZEgg
PSB0aGlzLmhlaWdodDsKKyAgICB0aGlzLmhlaWdodCA9IG51bGw7CisgICAgdmFyIGRpZmYgPSB3
aWRnZXRIZWlnaHQodGhpcykgLSBvbGRIOworICAgIGlmICghZGlmZikgcmV0dXJuOworICAgIHVw
ZGF0ZUxpbmVIZWlnaHQodGhpcy5saW5lLCB0aGlzLmxpbmUuaGVpZ2h0ICsgZGlmZik7CisgICAg
dmFyIG5vID0gbGluZU5vKHRoaXMubGluZSk7CisgICAgcmVnQ2hhbmdlKHRoaXMuY20sIG5vLCBu
byArIDEpOworICB9KTsKKworICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7CisgICAg
aWYgKHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7CisgICAgaWYg
KCF3aWRnZXQubm9kZS5wYXJlbnROb2RlIHx8IHdpZGdldC5ub2RlLnBhcmVudE5vZGUubm9kZVR5
cGUgIT0gMSkKKyAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHdpZGdldC5jbS5kaXNwbGF5Lm1l
YXN1cmUsIGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2
ZSIpKTsKKyAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdo
dDsKKyAgfQorCisgIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoY20sIGhhbmRsZSwgbm9kZSwgb3B0
aW9ucykgeworICAgIHZhciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChjbSwgbm9kZSwgb3B0aW9u
cyk7CisgICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0g
dHJ1ZTsKKyAgICBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAg
IChsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKSkucHVzaCh3aWRnZXQpOworICAg
ICAgd2lkZ2V0LmxpbmUgPSBsaW5lOworICAgICAgaWYgKCFsaW5lSXNIaWRkZW4oY20uZG9jLCBs
aW5lKSB8fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7CisgICAgICAgIHZhciBhYm92ZVZpc2libGUg
PSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7
CisgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWln
aHQod2lkZ2V0KSk7CisgICAgICAgIGlmIChhYm92ZVZpc2libGUpCisgICAgICAgICAgY20uY3Vy
T3AudXBkYXRlU2Nyb2xsUG9zID0ge3Njcm9sbFRvcDogY20uZG9jLnNjcm9sbFRvcCArIHdpZGdl
dC5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbExl
ZnQ6IGNtLmRvYy5zY3JvbGxMZWZ0fTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAg
IH0pOworICAgIHJldHVybiB3aWRnZXQ7CisgIH0KKwogICAvLyBMSU5FIERBVEEgU1RSVUNUVVJF
CiAKICAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5l
LCBpbmNsdWRpbmcKICAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLgot
ICBmdW5jdGlvbiBtYWtlTGluZSh0ZXh0LCBtYXJrZWRTcGFucywgaGVpZ2h0KSB7Ci0gICAgdmFy
IGxpbmUgPSB7dGV4dDogdGV4dCwgaGVpZ2h0OiBoZWlnaHR9OworICBmdW5jdGlvbiBtYWtlTGlu
ZSh0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsKKyAgICB2YXIgbGluZSA9IHt0
ZXh0OiB0ZXh0fTsKICAgICBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBtYXJrZWRTcGFucyk7Ci0g
ICAgaWYgKGxpbmVJc0hpZGRlbihsaW5lKSkgbGluZS5oZWlnaHQgPSAwOworICAgIGxpbmUuaGVp
Z2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodChsaW5lKSA6IDE7CiAgICAgcmV0
dXJuIGxpbmU7CiAgIH0KIAotICBmdW5jdGlvbiB1cGRhdGVMaW5lKGNtLCBsaW5lLCB0ZXh0LCBt
YXJrZWRTcGFucykgeworICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIG1hcmtlZFNw
YW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgIGxpbmUudGV4dCA9IHRleHQ7CiAgICAgaWYgKGxp
bmUuc3RhdGVBZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICBpZiAobGluZS5zdHls
ZXMpIGxpbmUuc3R5bGVzID0gbnVsbDsKICAgICBpZiAobGluZS5vcmRlciAhPSBudWxsKSBsaW5l
Lm9yZGVyID0gbnVsbDsKICAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTsKICAgICBhdHRhY2hN
YXJrZWRTcGFucyhsaW5lLCBtYXJrZWRTcGFucyk7Ci0gICAgaWYgKGxpbmVJc0hpZGRlbihsaW5l
KSkgbGluZS5oZWlnaHQgPSAwOwotICAgIGVsc2UgaWYgKCFsaW5lLmhlaWdodCkgbGluZS5oZWln
aHQgPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOwotICAgIHNpZ25hbExhdGVyKGNtLCBsaW5lLCAi
Y2hhbmdlIik7CisgICAgdmFyIGVzdEhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1hdGVI
ZWlnaHQobGluZSkgOiAxOworICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHVwZGF0
ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsKKyAgICBzaWduYWxMYXRlcihsaW5lLCAiY2hh
bmdlIik7CiAgIH0KIAogICBmdW5jdGlvbiBjbGVhblVwTGluZShsaW5lKSB7CkBAIC0zNTg4LDgg
KzM4NjIsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB3aGlsZSAo
IXN0cmVhbS5lb2woKSkgewogICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0
YXRlKTsKICAgICAgIGlmIChzdHJlYW0ucG9zID4gNTAwMCkgeworICAgICAgICBmbGF0dGVuU3Bh
bnMgPSBmYWxzZTsKICAgICAgICAgLy8gV2Via2l0IHNlZW1zIHRvIHJlZnVzZSB0byByZW5kZXIg
dGV4dCBub2RlcyBsb25nZXIgdGhhbiA1NzQ0NCBjaGFyYWN0ZXJzCi0gICAgICAgIHN0cmVhbS5w
b3MgPSBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgc3RyZWFtLnBvcyArIDUwMDAwKTsKKyAgICAgICAg
c3RyZWFtLnBvcyA9IE1hdGgubWluKHRleHQubGVuZ3RoLCBzdHJlYW0uc3RhcnQgKyA1MDAwMCk7
CiAgICAgICAgIHN0eWxlID0gbnVsbDsKICAgICAgIH0KICAgICAgIHZhciBzdWJzdHIgPSBzdHJl
YW0uY3VycmVudCgpOwpAQCAtMzYwNSwxMyArMzg4MCwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUp
IHsKICAgICAvLyBBIHN0eWxlcyBhcnJheSBhbHdheXMgc3RhcnRzIHdpdGggYSBudW1iZXIgaWRl
bnRpZnlpbmcgdGhlCiAgICAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJhc2VkIG9uIChm
b3IgZWFzeSBpbnZhbGlkYXRpb24pLgotICAgIHZhciBzdCA9IFtjbS52aWV3Lm1vZGVHZW5dOwor
ICAgIHZhciBzdCA9IFtjbS5zdGF0ZS5tb2RlR2VuXTsKICAgICAvLyBDb21wdXRlIHRoZSBiYXNl
IGFycmF5IG9mIHN0eWxlcwotICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgY20udmlldy5tb2Rl
LCBzdGF0ZSwgZnVuY3Rpb24odHh0LCBzdHlsZSkge3N0LnB1c2godHh0LCBzdHlsZSk7fSk7Cisg
ICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1bmN0aW9uKHR4
dCwgc3R5bGUpIHtzdC5wdXNoKHR4dCwgc3R5bGUpO30pOwogCiAgICAgLy8gUnVuIG92ZXJsYXlz
LCBhZGp1c3Qgc3R5bGUgYXJyYXkuCi0gICAgZm9yICh2YXIgbyA9IDA7IG8gPCBjbS52aWV3Lm92
ZXJsYXlzLmxlbmd0aDsgKytvKSB7Ci0gICAgICB2YXIgb3ZlcmxheSA9IGNtLnZpZXcub3Zlcmxh
eXNbb10sIGkgPSAxOworICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMu
bGVuZ3RoOyArK28pIHsKKyAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10s
IGkgPSAxOwogICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUs
IGZ1bmN0aW9uKHR4dCwgc3R5bGUpIHsKICAgICAgICAgdmFyIHN0YXJ0ID0gaSwgbGVuID0gdHh0
Lmxlbmd0aDsKICAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1
cnJlbnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0CkBAIC0zNjQyLDcgKzM5MTcs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9u
IGdldExpbmVTdHlsZXMoY20sIGxpbmUpIHsKLSAgICBpZiAoIWxpbmUuc3R5bGVzIHx8IGxpbmUu
c3R5bGVzWzBdICE9IGNtLnZpZXcubW9kZUdlbikKKyAgICBpZiAoIWxpbmUuc3R5bGVzIHx8IGxp
bmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1vZGVHZW4pCiAgICAgICBsaW5lLnN0eWxlcyA9IGhp
Z2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUuc3RhdGVBZnRlciA9IGdldFN0YXRlQmVmb3JlKGNt
LCBsaW5lTm8obGluZSkpKTsKICAgICByZXR1cm4gbGluZS5zdHlsZXM7CiAgIH0KQEAgLTM2NTAs
NyArMzkyNSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBMaWdo
dHdlaWdodCBmb3JtIG9mIGhpZ2hsaWdodCAtLSBwcm9jZWVkIG92ZXIgdGhpcyBsaW5lIGFuZAog
ICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZlIGEgc3R5bGUgYXJyYXkuCiAgIGZ1bmN0
aW9uIHByb2Nlc3NMaW5lKGNtLCBsaW5lLCBzdGF0ZSkgewotICAgIHZhciBtb2RlID0gY20udmll
dy5tb2RlOworICAgIHZhciBtb2RlID0gY20uZG9jLm1vZGU7CiAgICAgdmFyIHN0cmVhbSA9IG5l
dyBTdHJpbmdTdHJlYW0obGluZS50ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUpOwogICAgIGlmIChs
aW5lLnRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsK
ICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiBzdHJlYW0ucG9zIDw9IDUwMDApIHsKQEAgLTM2
NzAsNyArMzk0NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZh
ciBtZXJnZWQsIGxpbmUgPSByZWFsTGluZSwgbGluZUJlZm9yZSwgc2F3QmVmb3JlLCBzaW1wbGUg
PSB0cnVlOwogICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkg
ewogICAgICAgc2ltcGxlID0gZmFsc2U7Ci0gICAgICBsaW5lID0gZ2V0TGluZShjbS52aWV3LmRv
YywgbWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmUpOworICAgICAgbGluZSA9IGdldExpbmUoY20uZG9j
LCBtZXJnZWQuZmluZCgpLmZyb20ubGluZSk7CiAgICAgICBpZiAoIWxpbmVCZWZvcmUpIGxpbmVC
ZWZvcmUgPSBsaW5lOwogICAgIH0KIApAQCAtMzY4OSwxNiArMzk2NCwzMSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRl
bnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwogICAgICAgc2F3QmVm
b3JlID0gbGluZSA9PSBsaW5lQmVmb3JlOwogICAgICAgaWYgKG5leHQpIHsKLSAgICAgICAgbGlu
ZSA9IGdldExpbmUoY20udmlldy5kb2MsIG5leHQudG8ubGluZSk7CisgICAgICAgIGxpbmUgPSBn
ZXRMaW5lKGNtLmRvYywgbmV4dC50by5saW5lKTsKICAgICAgICAgc2ltcGxlID0gZmFsc2U7CiAg
ICAgICB9CiAgICAgfSB3aGlsZSAobmV4dCk7CiAKICAgICBpZiAobWVhc3VyZSAmJiAhYnVpbGRl
ci5hZGRlZE9uZSkKICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChz
aW1wbGUgPyBlbHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3Bs
YXkubWVhc3VyZSkpOwotICAgIGlmICghYnVpbGRlci5wcmUuZmlyc3RDaGlsZCAmJiAhbGluZUlz
SGlkZGVuKHJlYWxMaW5lKSkKKyAgICBpZiAoIWJ1aWxkZXIucHJlLmZpcnN0Q2hpbGQgJiYgIWxp
bmVJc0hpZGRlbihjbS5kb2MsIHJlYWxMaW5lKSkKICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTAwYTAiKSk7CiAKKyAgICB2YXIgb3JkZXI7
CisgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIHRoZSByZXBvcnRlZCBkaW1lbnNpb25z
IG9mIHNpbmdsZS1jaGFyCisgICAgLy8gZGlyZWN0aW9uIHNwYW5zIG9uIElFIChpc3N1ZSAjMTEy
OSkuIFNlZSBhbHNvIHRoZSBjb21tZW50IGluCisgICAgLy8gY3Vyc29yQ29vcmRzLgorICAgIGlm
IChtZWFzdXJlICYmIGllICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUpKSkgeworICAgICAgdmFy
IGwgPSBvcmRlci5sZW5ndGggLSAxOworICAgICAgaWYgKG9yZGVyW2xdLmZyb20gPT0gb3JkZXJb
bF0udG8pIC0tbDsKKyAgICAgIHZhciBsYXN0ID0gb3JkZXJbbF0sIHByZXYgPSBvcmRlcltsIC0g
MV07CisgICAgICBpZiAobGFzdC5mcm9tICsgMSA9PSBsYXN0LnRvICYmIHByZXYgJiYgbGFzdC5s
ZXZlbCA8IHByZXYubGV2ZWwpIHsKKyAgICAgICAgdmFyIHNwYW4gPSBtZWFzdXJlW2J1aWxkZXIu
cG9zIC0gMV07CisgICAgICAgIGlmIChzcGFuKSBzcGFuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KHNwYW4ubWVhc3VyZVJpZ2h0ID0gemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLm5l
eHRTaWJsaW5nKTsKKyAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gYnVpbGRlci5wcmU7CiAg
IH0KIApAQCAtMzc0MywxMyArNDAzMywxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKIAogICBmdW5jdGlvbiBidWlsZFRva2VuTWVhc3VyZShidWlsZGVyLCB0ZXh0LCBzdHls
ZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpIHsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQu
bGVuZ3RoOyArK2kpIHsKLSAgICAgIGlmIChpICYmIGkgPCB0ZXh0Lmxlbmd0aCAtIDEgJiYKLSAg
ICAgICAgICBidWlsZGVyLmNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmCi0gICAgICAgICAgc3Bh
bkFmZmVjdHNXcmFwcGluZy50ZXN0KHRleHQuc2xpY2UoaSAtIDEsIGkgKyAxKSkpCisgICAgICB2
YXIgY2ggPSB0ZXh0LmNoYXJBdChpKSwgc3RhcnQgPSBpID09IDA7CisgICAgICBpZiAoY2ggPj0g
Ilx1ZDgwMCIgJiYgY2ggPCAiXHVkYmZmIiAmJiBpIDwgdGV4dC5sZW5ndGggLSAxKSB7CisgICAg
ICAgIGNoID0gdGV4dC5zbGljZShpLCBpICsgMik7CisgICAgICAgICsraTsKKyAgICAgIH0gZWxz
ZSBpZiAoaSAmJiBidWlsZGVyLmNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmCisgICAgICAgICAg
ICAgICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcudGVzdCh0ZXh0LnNsaWNlKGkgLSAxLCBpICsgMSkp
KSB7CiAgICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVsdCgid2JyIikpOwotICAgICAg
YnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zKytdID0KLSAgICAgICAgYnVpbGRUb2tlbihidWls
ZGVyLCB0ZXh0LmNoYXJBdChpKSwgc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgaSA9PSAwICYm
IHN0YXJ0U3R5bGUsIGkgPT0gdGV4dC5sZW5ndGggLSAxICYmIGVuZFN0eWxlKTsKKyAgICAgIH0K
KyAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPQorICAgICAgICBidWlsZFRva2Vu
KGJ1aWxkZXIsIGNoLCBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICBzdGFydCAmJiBzdGFydFN0
eWxlLCBpID09IHRleHQubGVuZ3RoIC0gMSAmJiBlbmRTdHlsZSk7CisgICAgICBidWlsZGVyLnBv
cyArPSBjaC5sZW5ndGg7CiAgICAgfQogICAgIGlmICh0ZXh0Lmxlbmd0aCkgYnVpbGRlci5hZGRl
ZE9uZSA9IHRydWU7CiAgIH0KQEAgLTM4MTQsNyArNDEwOSw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDsK
ICAgICAgICAgICBpZiAoIWNvbGxhcHNlZCkgewogICAgICAgICAgICAgdmFyIHRva2VuVGV4dCA9
IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dDsKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHlsZSArIHNwYW5TdHls
ZSwKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHls
ZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hh
bmdlID8gc3BhbkVuZFN0eWxlIDogIiIpOwogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoZW5k
ID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJl
YWs7fQpAQCAtMzgyOCw2ICs0MTIzLDUwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogCiAgIC8vIERPQ1VNRU5UIERBVEEgU1RSVUNUVVJFCiAKKyAgZnVuY3Rpb24gdXBkYXRl
RG9jKGRvYywgY2hhbmdlLCBtYXJrZWRTcGFucywgc2VsQWZ0ZXIsIGVzdGltYXRlSGVpZ2h0KSB7
CisgICAgZnVuY3Rpb24gc3BhbnNGb3Iobikge3JldHVybiBtYXJrZWRTcGFucyA/IG1hcmtlZFNw
YW5zW25dIDogbnVsbDt9CisKKyAgICB2YXIgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNoYW5n
ZS50bywgdGV4dCA9IGNoYW5nZS50ZXh0OworICAgIHZhciBmaXJzdExpbmUgPSBnZXRMaW5lKGRv
YywgZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKGRvYywgdG8ubGluZSk7CisgICAgdmFy
IGxhc3RUZXh0ID0gbHN0KHRleHQpLCBsYXN0U3BhbnMgPSBzcGFuc0Zvcih0ZXh0Lmxlbmd0aCAt
IDEpLCBubGluZXMgPSB0by5saW5lIC0gZnJvbS5saW5lOworCisgICAgLy8gRmlyc3QgYWRqdXN0
IHRoZSBsaW5lIHN0cnVjdHVyZQorICAgIGlmIChmcm9tLmNoID09IDAgJiYgdG8uY2ggPT0gMCAm
JiBsYXN0VGV4dCA9PSAiIikgeworICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVwbGFj
ZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQorICAgICAgLy8gc3VyZSBsaW5lIG9iamVjdHMg
bW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgorICAgICAgZm9yICh2YXIgaSA9IDAs
IGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCisgICAgICAgIGFk
ZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
CisgICAgICB1cGRhdGVMaW5lKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMsIGVz
dGltYXRlSGVpZ2h0KTsKKyAgICAgIGlmIChubGluZXMpIGRvYy5yZW1vdmUoZnJvbS5saW5lLCBu
bGluZXMpOworICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9jLmluc2VydChmcm9tLmxpbmUsIGFk
ZGVkKTsKKyAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkgeworICAgICAgaWYg
KHRleHQubGVuZ3RoID09IDEpIHsKKyAgICAgICAgdXBkYXRlTGluZShmaXJzdExpbmUsIGZpcnN0
TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5z
bGljZSh0by5jaCksCisgICAgICAgICAgICAgICAgICAgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdo
dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHZhciBhZGRlZCA9IFtdLCBpID0gMSwg
ZSA9IHRleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKKyAgICAgICAgICBhZGRlZC5wdXNoKG1h
a2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOworICAgICAgICBh
ZGRlZC5wdXNoKG1ha2VMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICAgIHVwZGF0ZUxpbmUoZmlyc3RM
aW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9y
KDApLCBlc3RpbWF0ZUhlaWdodCk7CisgICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwg
YWRkZWQpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkgeworICAg
ICAgdXBkYXRlTGluZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gp
ICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLAorICAgICAgICAgICAgICAg
ICBzcGFuc0ZvcigwKSwgZXN0aW1hdGVIZWlnaHQpOworICAgICAgZG9jLnJlbW92ZShmcm9tLmxp
bmUgKyAxLCBubGluZXMpOworICAgIH0gZWxzZSB7CisgICAgICB1cGRhdGVMaW5lKGZpcnN0TGlu
ZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0Zvcigw
KSwgZXN0aW1hdGVIZWlnaHQpOworICAgICAgdXBkYXRlTGluZShsYXN0TGluZSwgbGFzdFRleHQg
KyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCk7
CisgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsg
aSA8IGU7ICsraSkKKyAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0Zv
cihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3Zl
KGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOworICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUg
KyAxLCBhZGRlZCk7CisgICAgfQorCisgICAgc2lnbmFsTGF0ZXIoZG9jLCAiY2hhbmdlIiwgZG9j
LCBjaGFuZ2UpOworICAgIHNldFNlbGVjdGlvbihkb2MsIHNlbEFmdGVyLmFuY2hvciwgc2VsQWZ0
ZXIuaGVhZCwgbnVsbCwgdHJ1ZSk7CisgIH0KKwogICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMp
IHsKICAgICB0aGlzLmxpbmVzID0gbGluZXM7CiAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwpAQCAt
Mzg0MCwxOSArNDE3OSwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICBMZWFmQ2h1bmsucHJvdG90eXBlID0gewogICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJl
dHVybiB0aGlzLmxpbmVzLmxlbmd0aDsgfSwKLSAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBj
bSkgeworICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewogICAgICAgZm9yICh2YXIg
aSA9IGF0LCBlID0gYXQgKyBuOyBpIDwgZTsgKytpKSB7CiAgICAgICAgIHZhciBsaW5lID0gdGhp
cy5saW5lc1tpXTsKICAgICAgICAgdGhpcy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7CiAgICAgICAg
IGNsZWFuVXBMaW5lKGxpbmUpOwotICAgICAgICBzaWduYWxMYXRlcihjbSwgbGluZSwgImRlbGV0
ZSIpOworICAgICAgICBzaWduYWxMYXRlcihsaW5lLCAiZGVsZXRlIik7CiAgICAgICB9CiAgICAg
ICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7CiAgICAgfSwKICAgICBjb2xsYXBzZTogZnVuY3Rp
b24obGluZXMpIHsKICAgICAgIGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgW2xpbmVzLmxlbmd0
aCwgMF0uY29uY2F0KHRoaXMubGluZXMpKTsKICAgICB9LAotICAgIGluc2VydEhlaWdodDogZnVu
Y3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKKyAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQs
IGxpbmVzLCBoZWlnaHQpIHsKICAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKICAgICAgIHRo
aXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKDAsIGF0KS5jb25jYXQobGluZXMpLmNvbmNhdCh0
aGlzLmxpbmVzLnNsaWNlKGF0KSk7CiAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxl
bmd0aDsgaSA8IGU7ICsraSkgbGluZXNbaV0ucGFyZW50ID0gdGhpczsKQEAgLTM4NzgsMTMgKzQy
MTcsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgQnJhbmNoQ2h1
bmsucHJvdG90eXBlID0gewogICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlz
LnNpemU7IH0sCi0gICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbiwgY2FsbGJhY2tzKSB7CisgICAg
cmVtb3ZlSW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7CiAgICAgICB0aGlzLnNpemUgLT0gbjsKICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgp
OwogICAgICAgICBpZiAoYXQgPCBzeikgewogICAgICAgICAgIHZhciBybSA9IE1hdGgubWluKG4s
IHN6IC0gYXQpLCBvbGRIZWlnaHQgPSBjaGlsZC5oZWlnaHQ7Ci0gICAgICAgICAgY2hpbGQucmVt
b3ZlKGF0LCBybSwgY2FsbGJhY2tzKTsKKyAgICAgICAgICBjaGlsZC5yZW1vdmVJbm5lcihhdCwg
cm0pOwogICAgICAgICAgIHRoaXMuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDsK
ICAgICAgICAgICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsg
Y2hpbGQucGFyZW50ID0gbnVsbDsgfQogICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgYnJl
YWs7CkBAIC0zOTAxLDE4ICs0MjQwLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewogICAgICAgZm9yICh2YXIgaSA9
IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5jaGlsZHJlbltp
XS5jb2xsYXBzZShsaW5lcyk7CiAgICAgfSwKLSAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0LCBsaW5l
cykgewotICAgICAgdmFyIGhlaWdodCA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxp
bmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKLSAgICAg
IHRoaXMuaW5zZXJ0SGVpZ2h0KGF0LCBsaW5lcywgaGVpZ2h0KTsKLSAgICB9LAotICAgIGluc2Vy
dEhlaWdodDogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKKyAgICBpbnNlcnRJbm5lcjog
ZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgIHRoaXMuc2l6ZSArPSBsaW5lcy5s
ZW5ndGg7CiAgICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAgICBmb3IgKHZhciBpID0g
MCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgIHZhciBj
aGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAg
IGlmIChhdCA8PSBzeikgewotICAgICAgICAgIGNoaWxkLmluc2VydEhlaWdodChhdCwgbGluZXMs
IGhlaWdodCk7CisgICAgICAgICAgY2hpbGQuaW5zZXJ0SW5uZXIoYXQsIGxpbmVzLCBoZWlnaHQp
OwogICAgICAgICAgIGlmIChjaGlsZC5saW5lcyAmJiBjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkg
ewogICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7CiAgICAgICAg
ICAgICAgIHZhciBzcGlsbGVkID0gY2hpbGQubGluZXMuc3BsaWNlKGNoaWxkLmxpbmVzLmxlbmd0
aCAtIDI1LCAyNSk7CkBAIC0zOTQ5LDcgKzQyODMsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIH0gd2hpbGUgKG1lLmNoaWxkcmVuLmxlbmd0aCA+IDEwKTsKICAg
ICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7CiAgICAgfSwKLSAgICBpdGVyOiBmdW5jdGlvbihm
cm9tLCB0bywgb3ApIHsgdGhpcy5pdGVyTihmcm9tLCB0byAtIGZyb20sIG9wKTsgfSwKICAgICBp
dGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CiAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgIHZhciBjaGlsZCA9IHRo
aXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CkBAIC0zOTYzLDkgKzQyOTYs
MjY4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfTsKIAor
ICB2YXIgbmV4dERvY0lkID0gMDsKKyAgdmFyIERvYyA9IENvZGVNaXJyb3IuRG9jID0gZnVuY3Rp
b24odGV4dCwgbW9kZSwgZmlyc3RMaW5lKSB7CisgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERv
YykpIHJldHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSk7CisgICAgaWYgKGZpcnN0
TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAwOworICAgIAorICAgIEJyYW5jaENodW5rLmNhbGwo
dGhpcywgW25ldyBMZWFmQ2h1bmsoW21ha2VMaW5lKCIiLCBudWxsKV0pXSk7CisgICAgdGhpcy5m
aXJzdCA9IGZpcnN0TGluZTsKKyAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9
IDA7CisgICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlOworICAgIHRoaXMuaGlzdG9yeSA9IG1ha2VI
aXN0b3J5KCk7CisgICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKKyAgICB2YXIgc3RhcnQg
PSBQb3MoZmlyc3RMaW5lLCAwKTsKKyAgICB0aGlzLnNlbCA9IHtmcm9tOiBzdGFydCwgdG86IHN0
YXJ0LCBoZWFkOiBzdGFydCwgYW5jaG9yOiBzdGFydCwgc2hpZnQ6IGZhbHNlLCBleHRlbmQ6IGZh
bHNlLCBnb2FsQ29sdW1uOiBudWxsfTsKKyAgICB0aGlzLmlkID0gKytuZXh0RG9jSWQ7CisgICAg
dGhpcy5tb2RlT3B0aW9uID0gbW9kZTsKKworICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3RyaW5n
IikgdGV4dCA9IHNwbGl0TGluZXModGV4dCk7CisgICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9tOiBz
dGFydCwgdG86IHN0YXJ0LCB0ZXh0OiB0ZXh0fSwgbnVsbCwge2hlYWQ6IHN0YXJ0LCBhbmNob3I6
IHN0YXJ0fSk7CisgIH07CisKKyAgRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVu
ay5wcm90b3R5cGUsIHsKKyAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsKKyAgICAg
IGlmIChvcCkgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7Cisg
ICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSwg
ZnJvbSk7CisgICAgfSwKKworICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7CisgICAg
ICB2YXIgaGVpZ2h0ID0gMDsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3Ro
OyBpIDwgZTsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OworICAgICAgdGhpcy5pbnNl
cnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpOworICAgIH0sCisgICAgcmVt
b3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhpcy5maXJzdCwg
bik7IH0sCisKKyAgICBnZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkgeworICAgICAgdmFyIGxp
bmVzID0gZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7
CisgICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKKyAgICAgIHJldHVy
biBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxuIik7CisgICAgfSwKKyAgICBzZXRWYWx1ZTogZnVu
Y3Rpb24oY29kZSkgeworICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9
IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOworICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJv
bTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAi
c2V0VmFsdWUifSwKKyAgICAgICAgICAgICAgICAge2hlYWQ6IHRvcCwgYW5jaG9yOiB0b3B9LCB0
cnVlKTsKKyAgICB9LAorICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8s
IG9yaWdpbikgeworICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7CisgICAgICB0byA9
IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tOworICAgICAgcmVwbGFjZVJhbmdlKHRoaXMs
IGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pOworICAgIH0sCisgICAgZ2V0UmFuZ2U6IGZ1bmN0aW9u
KGZyb20sIHRvLCBsaW5lU2VwKSB7CisgICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRoaXMs
IGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKKyAgICAgIGlmIChsaW5l
U2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOworICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGlu
ZVNlcCB8fCAiXG4iKTsKKyAgICB9LAorCisgICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3Zh
ciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKKyAg
ICBzZXRMaW5lOiBmdW5jdGlvbihsaW5lLCB0ZXh0KSB7CisgICAgICBpZiAoaXNMaW5lKHRoaXMs
IGxpbmUpKQorICAgICAgICByZXBsYWNlUmFuZ2UodGhpcywgdGV4dCwgUG9zKGxpbmUsIDApLCBj
bGlwUG9zKHRoaXMsIFBvcyhsaW5lKSkpOworICAgIH0sCisgICAgcmVtb3ZlTGluZTogZnVuY3Rp
b24obGluZSkgeworICAgICAgaWYgKGlzTGluZSh0aGlzLCBsaW5lKSkKKyAgICAgICAgcmVwbGFj
ZVJhbmdlKHRoaXMsICIiLCBQb3MobGluZSwgMCksIGNsaXBQb3ModGhpcywgUG9zKGxpbmUgKyAx
LCAwKSkpOworICAgIH0sCisKKyAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYg
KGlzTGluZSh0aGlzLCBsaW5lKSkgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSk7fSwKKyAgICBn
ZXRMaW5lTnVtYmVyOiBmdW5jdGlvbihsaW5lKSB7cmV0dXJuIGxpbmVObyhsaW5lKTt9LAorCisg
ICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30sCisgICAgZmlyc3RM
aW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdDt9LAorICAgIGxhc3RMaW5lOiBmdW5j
dGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwKKworICAgIGNsaXBQ
b3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7fSwKKworICAgIGdl
dEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKKyAgICAgIHZhciBzZWwgPSB0aGlzLnNlbCwgcG9z
OworICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSBzZWwu
aGVhZDsKKyAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJhbmNob3IiKSBwb3MgPSBzZWwuYW5jaG9y
OworICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImVuZCIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3Mg
PSBzZWwudG87CisgICAgICBlbHNlIHBvcyA9IHNlbC5mcm9tOworICAgICAgcmV0dXJuIGNvcHlQ
b3MocG9zKTsKKyAgICB9LAorICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1
cm4gIXBvc0VxKHRoaXMuc2VsLmhlYWQsIHRoaXMuc2VsLmFuY2hvcik7fSwKKworICAgIHNldEN1
cnNvcjogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIGNoLCBleHRlbmQpIHsKKyAgICAgIHZh
ciBwb3MgPSBjbGlwUG9zKHRoaXMsIHR5cGVvZiBsaW5lID09ICJudW1iZXIiID8gUG9zKGxpbmUs
IGNoIHx8IDApIDogbGluZSk7CisgICAgICBpZiAoZXh0ZW5kKSBleHRlbmRTZWxlY3Rpb24odGhp
cywgcG9zKTsKKyAgICAgIGVsc2Ugc2V0U2VsZWN0aW9uKHRoaXMsIHBvcywgcG9zKTsKKyAgICB9
KSwKKyAgICBzZXRTZWxlY3Rpb246IGRvY09wZXJhdGlvbihmdW5jdGlvbihhbmNob3IsIGhlYWQp
IHsKKyAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQ
b3ModGhpcywgaGVhZCB8fCBhbmNob3IpKTsKKyAgICB9KSwKKyAgICBleHRlbmRTZWxlY3Rpb246
IGRvY09wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bykgeworICAgICAgZXh0ZW5kU2VsZWN0aW9u
KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIHRvICYmIGNsaXBQb3ModGhpcywgdG8pKTsKKyAg
ICB9KSwKKworICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkge3JldHVybiB0aGlz
LmdldFJhbmdlKHRoaXMuc2VsLmZyb20sIHRoaXMuc2VsLnRvLCBsaW5lU2VwKTt9LAorICAgIHJl
cGxhY2VTZWxlY3Rpb246IGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlLCBvcmlnaW4pIHsKKyAgICAg
IG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRoaXMuc2VsLmZyb20sIHRvOiB0aGlzLnNlbC50bywg
dGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiBvcmlnaW59LCBjb2xsYXBzZSB8fCAiYXJv
dW5kIik7CisgICAgfSwKKyAgICB1bmRvOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oKSB7bWFrZUNo
YW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSksCisgICAgcmVkbzogZG9jT3BlcmF0aW9u
KGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIpO30pLAorCisg
ICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLnNlbC5leHRlbmQgPSB2YWw7fSwK
KworICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBoaXN0ID0gdGhpcy5o
aXN0b3J5OworICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0
LnVuZG9uZS5sZW5ndGh9OworICAgIH0sCisgICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0
aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCisKKyAgICBtYXJrQ2xlYW46IGZ1bmN0aW9u
KCkgeworICAgICAgdGhpcy5oaXN0b3J5LmRpcnR5Q291bnRlciA9IDA7CisgICAgICB0aGlzLmhp
c3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOworICAgIH0sCisg
ICAgaXNDbGVhbjogZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLmhpc3RvcnkuZGlydHlDb3VudGVy
ID09IDA7fSwKKyAgICAgIAorICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0
dXJuIHtkb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKKyAgICAgICAg
ICAgICAgdW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKKyAg
ICB9LAorICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7CisgICAgICB2YXIgaGlz
dCA9IHRoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7CisgICAgICBoaXN0LmRvbmUgPSBoaXN0
RGF0YS5kb25lLnNsaWNlKDApOworICAgICAgaGlzdC51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmUu
c2xpY2UoMCk7CisgICAgfSwKKworICAgIG1hcmtUZXh0OiBmdW5jdGlvbihmcm9tLCB0bywgb3B0
aW9ucykgeworICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSks
IGNsaXBQb3ModGhpcywgdG8pLCBvcHRpb25zLCAicmFuZ2UiKTsKKyAgICB9LAorICAgIHNldEJv
b2ttYXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHsKKyAgICAgIHZhciByZWFsT3B0cyA9IHty
ZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlv
bnMud2lkZ2V0IDogb3B0aW9ucyksCisgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDog
b3B0aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnR9OworICAgICAgcG9zID0gY2xpcFBvcyh0aGlz
LCBwb3MpOworICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIHBvcywgcG9zLCByZWFsT3B0cywg
ImJvb2ttYXJrIik7CisgICAgfSwKKyAgICBmaW5kTWFya3NBdDogZnVuY3Rpb24ocG9zKSB7Cisg
ICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7CisgICAgICB2YXIgbWFya2VycyA9IFtdLCBz
cGFucyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNwYW5zOworICAgICAgaWYgKHNw
YW5zKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZh
ciBzcGFuID0gc3BhbnNbaV07CisgICAgICAgIGlmICgoc3Bhbi5mcm9tID09IG51bGwgfHwgc3Bh
bi5mcm9tIDw9IHBvcy5jaCkgJiYKKyAgICAgICAgICAgIChzcGFuLnRvID09IG51bGwgfHwgc3Bh
bi50byA+PSBwb3MuY2gpKQorICAgICAgICAgIG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJl
bnQgfHwgc3Bhbi5tYXJrZXIpOworICAgICAgfQorICAgICAgcmV0dXJuIG1hcmtlcnM7CisgICAg
fSwKKyAgICBnZXRBbGxNYXJrczogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbWFya2VycyA9IFtd
OworICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIHNwcyA9IGxp
bmUubWFya2VkU3BhbnM7CisgICAgICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3Bz
Lmxlbmd0aDsgKytpKQorICAgICAgICAgIGlmIChzcHNbaV0uZnJvbSAhPSBudWxsKSBtYXJrZXJz
LnB1c2goc3BzW2ldLm1hcmtlcik7CisgICAgICB9KTsKKyAgICAgIHJldHVybiBtYXJrZXJzOwor
ICAgIH0sCisKKyAgICBwb3NGcm9tSW5kZXg6IGZ1bmN0aW9uKG9mZikgeworICAgICAgdmFyIGNo
LCBsaW5lTm8gPSB0aGlzLmZpcnN0OworICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsK
KyAgICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CisgICAgICAgIGlmIChzeiA+
IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgb2ZmIC09IHN6OworICAg
ICAgICArK2xpbmVObzsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIGNsaXBQb3ModGhpcywgUG9z
KGxpbmVObywgY2gpKTsKKyAgICB9LAorICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3Jk
cykgeworICAgICAgY29vcmRzID0gY2xpcFBvcyh0aGlzLCBjb29yZHMpOworICAgICAgdmFyIGlu
ZGV4ID0gY29vcmRzLmNoOworICAgICAgaWYgKGNvb3Jkcy5saW5lIDwgdGhpcy5maXJzdCB8fCBj
b29yZHMuY2ggPCAwKSByZXR1cm4gMDsKKyAgICAgIHRoaXMuaXRlcih0aGlzLmZpcnN0LCBjb29y
ZHMubGluZSwgZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxl
bmd0aCArIDE7CisgICAgICB9KTsKKyAgICAgIHJldHVybiBpbmRleDsKKyAgICB9LAorCisgICAg
Y29weTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHsKKyAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdl
dExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLCB0aGlzLm1v
ZGVPcHRpb24sIHRoaXMuZmlyc3QpOworICAgICAgZG9jLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xs
VG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKKyAgICAgIGRvYy5zZWwgPSB7
ZnJvbTogdGhpcy5zZWwuZnJvbSwgdG86IHRoaXMuc2VsLnRvLCBoZWFkOiB0aGlzLnNlbC5oZWFk
LCBhbmNob3I6IHRoaXMuc2VsLmFuY2hvciwKKyAgICAgICAgICAgICAgICAgc2hpZnQ6IHRoaXMu
c2VsLnNoaWZ0LCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29sdW1uOiB0aGlzLnNlbC5nb2FsQ29sdW1u
fTsKKyAgICAgIGlmIChjb3B5SGlzdG9yeSkgeworICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVw
dGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoOworICAgICAgICBkb2Muc2V0SGlzdG9yeSh0aGlz
LmdldEhpc3RvcnkoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gZG9jOworICAgIH0sCisKKyAg
ICBsaW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIGlmICghb3B0aW9ucykgb3B0
aW9ucyA9IHt9OworICAgICAgdmFyIGZyb20gPSB0aGlzLmZpcnN0LCB0byA9IHRoaXMuZmlyc3Qg
KyB0aGlzLnNpemU7CisgICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5m
cm9tID4gZnJvbSkgZnJvbSA9IG9wdGlvbnMuZnJvbTsKKyAgICAgIGlmIChvcHRpb25zLnRvICE9
IG51bGwgJiYgb3B0aW9ucy50byA8IHRvKSB0byA9IG9wdGlvbnMudG87CisgICAgICB2YXIgY29w
eSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhp
cy5tb2RlT3B0aW9uLCBmcm9tKTsKKyAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIGNvcHku
aGlzdG9yeSA9IHRoaXMuaGlzdG9yeTsKKyAgICAgICh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5r
ZWQgPSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0
fSk7CisgICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hh
cmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07CisgICAgICByZXR1cm4gY29weTsKKyAgICB9
LAorICAgIHVubGlua0RvYzogZnVuY3Rpb24ob3RoZXIpIHsKKyAgICAgIGlmIChvdGhlciBpbnN0
YW5jZW9mIENvZGVNaXJyb3IpIG90aGVyID0gb3RoZXIuZG9jOworICAgICAgaWYgKHRoaXMubGlu
a2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgIHZhciBsaW5rID0gdGhpcy5saW5rZWRbaV07CisgICAgICAgIGlmIChsaW5rLmRvYyAhPSBv
dGhlcikgY29udGludWU7CisgICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAxKTsKKyAgICAg
ICAgb3RoZXIudW5saW5rRG9jKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IC8vIElmIHRoZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4KKyAgICAg
IGlmIChvdGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgeworICAgICAgICB2YXIgc3BsaXRJ
ZHMgPSBbb3RoZXIuaWRdOworICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlvbihkb2Mp
IHtzcGxpdElkcy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7CisgICAgICAgIG90aGVyLmhpc3Rvcnkg
PSBtYWtlSGlzdG9yeSgpOworICAgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5SGlzdG9y
eUFycmF5KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcyk7CisgICAgICAgIG90aGVyLmhpc3Rv
cnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElk
cyk7CisgICAgICB9CisgICAgfSwKKyAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xp
bmtlZERvY3ModGhpcywgZik7fSwKKworICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0
aGlzLm1vZGU7fSwKKyAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30K
KyAgfSk7CisKKyAgRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERvYy5wcm90b3R5cGUuaXRlcjsK
KworICAvLyBUaGUgRG9jIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIENvZGVN
aXJyb3IgaW5zdGFuY2VzCisgIHZhciBkb250RGVsZWdhdGUgPSAiaXRlciBpbnNlcnQgcmVtb3Zl
IGNvcHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpOworICBmb3IgKHZhciBwcm9wIGluIERvYy5wcm90
b3R5cGUpIGlmIChEb2MucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGluZGV4T2Yo
ZG9udERlbGVnYXRlLCBwcm9wKSA8IDApCisgICAgQ29kZU1pcnJvci5wcm90b3R5cGVbcHJvcF0g
PSAoZnVuY3Rpb24obWV0aG9kKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7cmV0dXJuIG1l
dGhvZC5hcHBseSh0aGlzLmRvYywgYXJndW1lbnRzKTt9OworICAgIH0pKERvYy5wcm90b3R5cGVb
cHJvcF0pOworCisgIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkg
eworICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHsKKyAgICAg
IGlmIChkb2MubGlua2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlbCA9IGRvYy5saW5rZWRbaV07CisgICAgICAgIGlmIChyZWwu
ZG9jID09IHNraXApIGNvbnRpbnVlOworICAgICAgICB2YXIgc2hhcmVkID0gc2hhcmVkSGlzdCAm
JiByZWwuc2hhcmVkSGlzdDsKKyAgICAgICAgaWYgKHNoYXJlZEhpc3RPbmx5ICYmICFzaGFyZWQp
IGNvbnRpbnVlOworICAgICAgICBmKHJlbC5kb2MsIHNoYXJlZCk7CisgICAgICAgIHByb3BhZ2F0
ZShyZWwuZG9jLCBkb2MsIHNoYXJlZCk7CisgICAgICB9CisgICAgfQorICAgIHByb3BhZ2F0ZShk
b2MsIG51bGwsIHRydWUpOworICB9CisKKyAgZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHsK
KyAgICBpZiAoZG9jLmNtKSB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFk
eSBpbiB1c2UuIik7CisgICAgY20uZG9jID0gZG9jOworICAgIGRvYy5jbSA9IGNtOworICAgIGVz
dGltYXRlTGluZUhlaWdodHMoY20pOworICAgIGxvYWRNb2RlKGNtKTsKKyAgICBpZiAoIWNtLm9w
dGlvbnMubGluZVdyYXBwaW5nKSBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKKyAgICBjbS5vcHRpb25z
Lm1vZGUgPSBkb2MubW9kZU9wdGlvbjsKKyAgICByZWdDaGFuZ2UoY20pOworICB9CisKICAgLy8g
TElORSBVVElMSVRJRVMKIAogICBmdW5jdGlvbiBnZXRMaW5lKGNodW5rLCBuKSB7CisgICAgbiAt
PSBjaHVuay5maXJzdDsKICAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7CiAgICAgICBmb3IgKHZh
ciBpID0gMDs7ICsraSkgewogICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwg
c3ogPSBjaGlsZC5jaHVua1NpemUoKTsKQEAgLTM5NzYsNiArNDU2OCwyMyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gY2h1bmsubGluZXNbbl07CiAgIH0K
IAorICBmdW5jdGlvbiBnZXRCZXR3ZWVuKGRvYywgc3RhcnQsIGVuZCkgeworICAgIHZhciBvdXQg
PSBbXSwgbiA9IHN0YXJ0LmxpbmU7CisgICAgZG9jLml0ZXIoc3RhcnQubGluZSwgZW5kLmxpbmUg
KyAxLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICB2YXIgdGV4dCA9IGxpbmUudGV4dDsKKyAgICAg
IGlmIChuID09IGVuZC5saW5lKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCBlbmQuY2gpOworICAgICAg
aWYgKG4gPT0gc3RhcnQubGluZSkgdGV4dCA9IHRleHQuc2xpY2Uoc3RhcnQuY2gpOworICAgICAg
b3V0LnB1c2godGV4dCk7CisgICAgICArK247CisgICAgfSk7CisgICAgcmV0dXJuIG91dDsKKyAg
fQorICBmdW5jdGlvbiBnZXRMaW5lcyhkb2MsIGZyb20sIHRvKSB7CisgICAgdmFyIG91dCA9IFtd
OworICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7IG91dC5wdXNoKGxpbmUu
dGV4dCk7IH0pOworICAgIHJldHVybiBvdXQ7CisgIH0KKwogICBmdW5jdGlvbiB1cGRhdGVMaW5l
SGVpZ2h0KGxpbmUsIGhlaWdodCkgewogICAgIHZhciBkaWZmID0gaGVpZ2h0IC0gbGluZS5oZWln
aHQ7CiAgICAgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0g
ZGlmZjsKQEAgLTM5OTAsMTEgKzQ1OTksMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICAgIG5vICs9IGNodW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpOwogICAg
ICAgfQogICAgIH0KLSAgICByZXR1cm4gbm87CisgICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0Owog
ICB9CiAKICAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7Ci0gICAgdmFyIG4gPSAw
OworICAgIHZhciBuID0gY2h1bmsuZmlyc3Q7CiAgICAgb3V0ZXI6IGRvIHsKICAgICAgIGZvciAo
dmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAg
ICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBjaCA9IGNoaWxkLmhlaWdodDsKQEAg
LTQwMTMsNyArNDYyMiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9
CiAKICAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKSB7Ci0gICAgbGluZU9iaiA9
IHZpc3VhbExpbmUoY20udmlldy5kb2MsIGxpbmVPYmopOworICAgIGxpbmVPYmogPSB2aXN1YWxM
aW5lKGNtLmRvYywgbGluZU9iaik7CiAKICAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5w
YXJlbnQ7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkg
ewpAQCAtNDA0NCw3ICs0NjUzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICAvLyBBcnJheXMgb2YgaGlzdG9yeSBldmVudHMuIERvaW5nIHNvbWV0aGluZyBhZGRz
IGFuIGV2ZW50IHRvCiAgICAgICAvLyBkb25lIGFuZCBjbGVhcnMgdW5kby4gVW5kb2luZyBtb3Zl
cyBldmVudHMgZnJvbSBkb25lIHRvCiAgICAgICAvLyB1bmRvbmUsIHJlZG9pbmcgbW92ZXMgdGhl
bSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgotICAgICAgZG9uZTogW10sIHVuZG9uZTogW10sCisg
ICAgICBkb25lOiBbXSwgdW5kb25lOiBbXSwgdW5kb0RlcHRoOiBJbmZpbml0eSwKICAgICAgIC8v
IFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1
bmRvCiAgICAgICAvLyBldmVudAogICAgICAgbGFzdFRpbWU6IDAsIGxhc3RPcDogbnVsbCwgbGFz
dE9yaWdpbjogbnVsbCwKQEAgLTQwNTMsNDcgKzQ2NjIsMTUxIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIH07CiAgIH0KIAotICBmdW5jdGlvbiBhZGRDaGFuZ2UoY20s
IHN0YXJ0LCBhZGRlZCwgb2xkLCBvcmlnaW4sIGZyb21CZWZvcmUsIHRvQmVmb3JlLCBmcm9tQWZ0
ZXIsIHRvQWZ0ZXIpIHsKLSAgICB2YXIgaGlzdG9yeSA9IGNtLnZpZXcuaGlzdG9yeTsKLSAgICBo
aXN0b3J5LnVuZG9uZS5sZW5ndGggPSAwOwotICAgIHZhciB0aW1lID0gK25ldyBEYXRlLCBjdXIg
PSBsc3QoaGlzdG9yeS5kb25lKTsKLSAgICAKKyAgZnVuY3Rpb24gYXR0YWNoTG9jYWxTcGFucyhk
b2MsIGNoYW5nZSwgZnJvbSwgdG8pIHsKKyAgICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5z
XyIgKyBkb2MuaWRdLCBuID0gMDsKKyAgICBkb2MuaXRlcihNYXRoLm1heChkb2MuZmlyc3QsIGZy
b20pLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgdG8pLCBmdW5jdGlvbihsaW5lKSB7
CisgICAgICBpZiAobGluZS5tYXJrZWRTcGFucykKKyAgICAgICAgKGV4aXN0aW5nIHx8IChleGlz
dGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0gPSB7fSkpW25dID0gbGluZS5tYXJrZWRT
cGFuczsKKyAgICAgICsrbjsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGhpc3RvcnlDaGFu
Z2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSB7CisgICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTog
Y2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2Ms
IGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTsKKyAgICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlz
dENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTsKKyAgICBsaW5r
ZWREb2NzKGRvYywgZnVuY3Rpb24oZG9jKSB7YXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFu
Z2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7fSwgdHJ1ZSk7CisgICAg
cmV0dXJuIGhpc3RDaGFuZ2U7CisgIH0KKworICBmdW5jdGlvbiBhZGRUb0hpc3RvcnkoZG9jLCBj
aGFuZ2UsIHNlbEFmdGVyLCBvcElkKSB7CisgICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeTsKKyAg
ICBoaXN0LnVuZG9uZS5sZW5ndGggPSAwOworICAgIHZhciB0aW1lID0gK25ldyBEYXRlLCBjdXIg
PSBsc3QoaGlzdC5kb25lKTsKKwogICAgIGlmIChjdXIgJiYKLSAgICAgICAgKGhpc3RvcnkubGFz
dE9wID09IGNtLmN1ck9wLmlkIHx8Ci0gICAgICAgICBoaXN0b3J5Lmxhc3RPcmlnaW4gPT0gb3Jp
Z2luICYmIChvcmlnaW4gPT0gImlucHV0IiB8fCBvcmlnaW4gPT0gImRlbGV0ZSIpICYmCi0gICAg
ICAgICBoaXN0b3J5Lmxhc3RUaW1lID4gdGltZSAtIDYwMCkpIHsKKyAgICAgICAgKGhpc3QubGFz
dE9wID09IG9wSWQgfHwKKyAgICAgICAgIGhpc3QubGFzdE9yaWdpbiA9PSBjaGFuZ2Uub3JpZ2lu
ICYmIGNoYW5nZS5vcmlnaW4gJiYKKyAgICAgICAgICgoY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkg
PT0gIisiICYmIGhpc3QubGFzdFRpbWUgPiB0aW1lIC0gNjAwKSB8fCBjaGFuZ2Uub3JpZ2luLmNo
YXJBdCgwKSA9PSAiKiIpKSkgewogICAgICAgLy8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUg
bGFzdCBldmVudAotICAgICAgdmFyIGxhc3QgPSBsc3QoY3VyLmV2ZW50cyk7Ci0gICAgICBpZiAo
bGFzdC5zdGFydCA+IHN0YXJ0ICsgb2xkLmxlbmd0aCB8fCBsYXN0LnN0YXJ0ICsgbGFzdC5hZGRl
ZCA8IHN0YXJ0KSB7Ci0gICAgICAgIC8vIERvZXNuJ3QgaW50ZXJzZWN0IHdpdGggbGFzdCBzdWIt
ZXZlbnQsIGFkZCBuZXcgc3ViLWV2ZW50Ci0gICAgICAgIGN1ci5ldmVudHMucHVzaCh7c3RhcnQ6
IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfSk7CisgICAgICB2YXIgbGFzdCA9IGxzdChj
dXIuY2hhbmdlcyk7CisgICAgICBpZiAocG9zRXEoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgJiYg
cG9zRXEoY2hhbmdlLmZyb20sIGxhc3QudG8pKSB7CisgICAgICAgIC8vIE9wdGltaXplZCBjYXNl
IGZvciBzaW1wbGUgaW5zZXJ0aW9uIC0tIGRvbid0IHdhbnQgdG8gYWRkCisgICAgICAgIC8vIG5l
dyBjaGFuZ2VzZXRzIGZvciBldmVyeSBjaGFyYWN0ZXIgdHlwZWQKKyAgICAgICAgbGFzdC50byA9
IGNoYW5nZUVuZChjaGFuZ2UpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUGF0Y2ggdXAg
dGhlIGxhc3Qgc3ViLWV2ZW50Ci0gICAgICAgIHZhciBzdGFydEJlZm9yZSA9IE1hdGgubWF4KDAs
IGxhc3Quc3RhcnQgLSBzdGFydCksCi0gICAgICAgIGVuZEFmdGVyID0gTWF0aC5tYXgoMCwgKHN0
YXJ0ICsgb2xkLmxlbmd0aCkgLSAobGFzdC5zdGFydCArIGxhc3QuYWRkZWQpKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IHN0YXJ0QmVmb3JlOyBpID4gMDsgLS1pKSBsYXN0Lm9sZC51bnNoaWZ0KG9s
ZFtpIC0gMV0pOwotICAgICAgICBmb3IgKHZhciBpID0gZW5kQWZ0ZXI7IGkgPiAwOyAtLWkpIGxh
c3Qub2xkLnB1c2gob2xkW29sZC5sZW5ndGggLSBpXSk7Ci0gICAgICAgIGlmIChzdGFydEJlZm9y
ZSkgbGFzdC5zdGFydCA9IHN0YXJ0OwotICAgICAgICBsYXN0LmFkZGVkICs9IGFkZGVkIC0gKG9s
ZC5sZW5ndGggLSBzdGFydEJlZm9yZSAtIGVuZEFmdGVyKTsKKyAgICAgICAgLy8gQWRkIG5ldyBz
dWItZXZlbnQKKyAgICAgICAgY3VyLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5n
ZShkb2MsIGNoYW5nZSkpOwogICAgICAgfQotICAgICAgY3VyLmZyb21BZnRlciA9IGZyb21BZnRl
cjsgY3VyLnRvQWZ0ZXIgPSB0b0FmdGVyOworICAgICAgY3VyLmFuY2hvckFmdGVyID0gc2VsQWZ0
ZXIuYW5jaG9yOyBjdXIuaGVhZEFmdGVyID0gc2VsQWZ0ZXIuaGVhZDsKICAgICB9IGVsc2Ugewog
ICAgICAgLy8gQ2FuIG5vdCBiZSBtZXJnZWQsIHN0YXJ0IGEgbmV3IGV2ZW50LgotICAgICAgY3Vy
ID0ge2V2ZW50czogW3tzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9XSwKLSAg
ICAgICAgICAgICBmcm9tQmVmb3JlOiBmcm9tQmVmb3JlLCB0b0JlZm9yZTogdG9CZWZvcmUsIGZy
b21BZnRlcjogZnJvbUFmdGVyLCB0b0FmdGVyOiB0b0FmdGVyfTsKLSAgICAgIGhpc3RvcnkuZG9u
ZS5wdXNoKGN1cik7Ci0gICAgICB3aGlsZSAoaGlzdG9yeS5kb25lLmxlbmd0aCA+IGNtLm9wdGlv
bnMudW5kb0RlcHRoKQotICAgICAgICBoaXN0b3J5LmRvbmUuc2hpZnQoKTsKLSAgICAgIGlmICho
aXN0b3J5LmRpcnR5Q291bnRlciA8IDApCi0gICAgICAgICAgLy8gVGhlIHVzZXIgaGFzIG1hZGUg
YSBjaGFuZ2UgYWZ0ZXIgdW5kb2luZyBwYXN0IHRoZSBsYXN0IGNsZWFuIHN0YXRlLiAKLSAgICAg
ICAgICAvLyBXZSBjYW4gbmV2ZXIgZ2V0IGJhY2sgdG8gYSBjbGVhbiBzdGF0ZSBub3cgdW50aWwg
bWFya0NsZWFuKCkgaXMgY2FsbGVkLgotICAgICAgICAgIGhpc3RvcnkuZGlydHlDb3VudGVyID0g
TmFOOworICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2Ms
IGNoYW5nZSldLAorICAgICAgICAgICAgIGFuY2hvckJlZm9yZTogZG9jLnNlbC5hbmNob3IsIGhl
YWRCZWZvcmU6IGRvYy5zZWwuaGVhZCwKKyAgICAgICAgICAgICBhbmNob3JBZnRlcjogc2VsQWZ0
ZXIuYW5jaG9yLCBoZWFkQWZ0ZXI6IHNlbEFmdGVyLmhlYWR9OworICAgICAgaGlzdC5kb25lLnB1
c2goY3VyKTsKKyAgICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgp
CisgICAgICAgIGhpc3QuZG9uZS5zaGlmdCgpOworICAgICAgaWYgKGhpc3QuZGlydHlDb3VudGVy
IDwgMCkKKyAgICAgICAgLy8gVGhlIHVzZXIgaGFzIG1hZGUgYSBjaGFuZ2UgYWZ0ZXIgdW5kb2lu
ZyBwYXN0IHRoZSBsYXN0IGNsZWFuIHN0YXRlLiAKKyAgICAgICAgLy8gV2UgY2FuIG5ldmVyIGdl
dCBiYWNrIHRvIGEgY2xlYW4gc3RhdGUgbm93IHVudGlsIG1hcmtDbGVhbigpIGlzIGNhbGxlZC4K
KyAgICAgICAgaGlzdC5kaXJ0eUNvdW50ZXIgPSBOYU47CiAgICAgICBlbHNlCi0gICAgICAgIGhp
c3RvcnkuZGlydHlDb3VudGVyKys7CisgICAgICAgIGhpc3QuZGlydHlDb3VudGVyKys7CisgICAg
fQorICAgIGhpc3QubGFzdFRpbWUgPSB0aW1lOworICAgIGhpc3QubGFzdE9wID0gb3BJZDsKKyAg
ICBoaXN0Lmxhc3RPcmlnaW4gPSBjaGFuZ2Uub3JpZ2luOworICB9CisKKyAgZnVuY3Rpb24gcmVt
b3ZlQ2xlYXJlZFNwYW5zKHNwYW5zKSB7CisgICAgaWYgKCFzcGFucykgcmV0dXJuIG51bGw7Cisg
ICAgZm9yICh2YXIgaSA9IDAsIG91dDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICBp
ZiAoc3BhbnNbaV0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkKSB7IGlmICghb3V0KSBvdXQgPSBz
cGFucy5zbGljZSgwLCBpKTsgfQorICAgICAgZWxzZSBpZiAob3V0KSBvdXQucHVzaChzcGFuc1tp
XSk7CiAgICAgfQotICAgIGhpc3RvcnkubGFzdFRpbWUgPSB0aW1lOwotICAgIGhpc3RvcnkubGFz
dE9wID0gY20uY3VyT3AuaWQ7Ci0gICAgaGlzdG9yeS5sYXN0T3JpZ2luID0gb3JpZ2luOworICAg
IHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbDsKKyAgfQorCisg
IGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7CisgICAgdmFyIGZvdW5kID0gY2hh
bmdlWyJzcGFuc18iICsgZG9jLmlkXTsKKyAgICBpZiAoIWZvdW5kKSByZXR1cm4gbnVsbDsKKyAg
ICBmb3IgKHZhciBpID0gMCwgbncgPSBbXTsgaSA8IGNoYW5nZS50ZXh0Lmxlbmd0aDsgKytpKQor
ICAgICAgbncucHVzaChyZW1vdmVDbGVhcmVkU3BhbnMoZm91bmRbaV0pKTsKKyAgICByZXR1cm4g
bnc7CisgIH0KKworICAvLyBVc2VkIGJvdGggdG8gcHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3Qg
aW4gLmdldEhpc3RvcnksIGFuZCwgd2hlbgorICAvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8g
c3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvCisgIGZ1bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZl
bnRzLCBuZXdHcm91cCkgeworICAgIGZvciAodmFyIGkgPSAwLCBjb3B5ID0gW107IGkgPCBldmVu
dHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBldmVudCA9IGV2ZW50c1tpXSwgY2hhbmdlcyA9
IGV2ZW50LmNoYW5nZXMsIG5ld0NoYW5nZXMgPSBbXTsKKyAgICAgIGNvcHkucHVzaCh7Y2hhbmdl
czogbmV3Q2hhbmdlcywgYW5jaG9yQmVmb3JlOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRCZWZv
cmU6IGV2ZW50LmhlYWRCZWZvcmUsCisgICAgICAgICAgICAgICAgIGFuY2hvckFmdGVyOiBldmVu
dC5hbmNob3JBZnRlciwgaGVhZEFmdGVyOiBldmVudC5oZWFkQWZ0ZXJ9KTsKKyAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7ICsraikgeworICAgICAgICB2YXIgY2hhbmdl
ID0gY2hhbmdlc1tqXSwgbTsKKyAgICAgICAgbmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2Uu
ZnJvbSwgdG86IGNoYW5nZS50bywgdGV4dDogY2hhbmdlLnRleHR9KTsKKyAgICAgICAgaWYgKG5l
d0dyb3VwKSBmb3IgKHZhciBwcm9wIGluIGNoYW5nZSkgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3Bh
bnNfKFxkKykkLykpIHsKKyAgICAgICAgICBpZiAoaW5kZXhPZihuZXdHcm91cCwgTnVtYmVyKG1b
MV0pKSA+IC0xKSB7CisgICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2Vb
cHJvcF07CisgICAgICAgICAgICBkZWxldGUgY2hhbmdlW3Byb3BdOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29weTsKKyAgfQorCisgIC8vIFJl
YmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQg
Y2hhbmdlcworCisgIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWwocG9zLCBmcm9tLCB0bywgZGlmZikg
eworICAgIGlmICh0byA8IHBvcy5saW5lKSB7CisgICAgICBwb3MubGluZSArPSBkaWZmOworICAg
IH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7CisgICAgICBwb3MubGluZSA9IGZyb207Cisg
ICAgICBwb3MuY2ggPSAwOworICAgIH0KKyAgfQorCisgIC8vIFRyaWVzIHRvIHJlYmFzZSBhbiBh
cnJheSBvZiBoaXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGUKKyAgLy8gZG9jdW1l
bnQuIElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRo
ZQorICAvLyBldmVudCwgYW5kIGV2ZXJ5dGhpbmcgJ2JlaGluZCcgaXQsIGlzIGRpc2NhcmRlZC4g
SWYgdGhlIGNoYW5nZSBpcworICAvLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBwb3Np
dGlvbnMgYXJlIHVwZGF0ZWQuIFVzZXMgYQorICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3Ig
dGhlIHBvc2l0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvCisgIC8vIHJlYWxsb2NhdGUgdGhlbSBh
bGwgb24gZXZlcnkgcmViYXNlLCBidXQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoCisgIC8vIHNo
YXJlZCBwb3NpdGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuCisgIGZ1bmN0aW9u
IHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgc3ViID0gYXJyYXlbaV0s
IG9rID0gdHJ1ZTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViLmNoYW5nZXMubGVuZ3Ro
OyArK2opIHsKKyAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2pdOworICAgICAgICBpZiAo
IXN1Yi5jb3BpZWQpIHsgY3VyLmZyb20gPSBjb3B5UG9zKGN1ci5mcm9tKTsgY3VyLnRvID0gY29w
eVBvcyhjdXIudG8pOyB9CisgICAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUpIHsKKyAgICAg
ICAgICBjdXIuZnJvbS5saW5lICs9IGRpZmY7CisgICAgICAgICAgY3VyLnRvLmxpbmUgKz0gZGlm
ZjsKKyAgICAgICAgfSBlbHNlIGlmIChmcm9tIDw9IGN1ci50by5saW5lKSB7CisgICAgICAgICAg
b2sgPSBmYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAg
aWYgKCFzdWIuY29waWVkKSB7CisgICAgICAgIHN1Yi5hbmNob3JCZWZvcmUgPSBjb3B5UG9zKHN1
Yi5hbmNob3JCZWZvcmUpOyBzdWIuaGVhZEJlZm9yZSA9IGNvcHlQb3Moc3ViLmhlYWRCZWZvcmUp
OworICAgICAgICBzdWIuYW5jaG9yQWZ0ZXIgPSBjb3B5UG9zKHN1Yi5hbmNob3JBZnRlcik7IHN1
Yi5yZWFkQWZ0ZXIgPSBjb3B5UG9zKHN1Yi5oZWFkQWZ0ZXIpOworICAgICAgICBzdWIuY29waWVk
ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmICghb2spIHsKKyAgICAgICAgYXJyYXkuc3BsaWNl
KDAsIGkgKyAxKTsKKyAgICAgICAgaSA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICByZWJh
c2VIaXN0U2VsKHN1Yi5hbmNob3JCZWZvcmUpOyByZWJhc2VIaXN0U2VsKHN1Yi5oZWFkQmVmb3Jl
KTsKKyAgICAgICAgcmViYXNlSGlzdFNlbChzdWIuYW5jaG9yQWZ0ZXIpOyByZWJhc2VIaXN0U2Vs
KHN1Yi5oZWFkQWZ0ZXIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJlYmFz
ZUhpc3QoaGlzdCwgY2hhbmdlKSB7CisgICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbS5saW5lLCB0
byA9IGNoYW5nZS50by5saW5lLCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvIC0gZnJv
bSkgLSAxOworICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTsK
KyAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZmKTsKICAgfQog
CiAgIC8vIEVWRU5UIE9QRVJBVE9SUwpAQCAtNDEzMCwxMyArNDg0Myw2IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBiOwogICB9CiAKLSAgLy8gQWxsb3cg
M3JkLXBhcnR5IGNvZGUgdG8gb3ZlcnJpZGUgZXZlbnQgcHJvcGVydGllcyBieSBhZGRpbmcgYW4g
b3ZlcnJpZGUKLSAgLy8gb2JqZWN0IHRvIGFuIGV2ZW50IG9iamVjdC4KLSAgZnVuY3Rpb24gZV9w
cm9wKGUsIHByb3ApIHsKLSAgICB2YXIgb3ZlcnJpZGRlbiA9IGUub3ZlcnJpZGUgJiYgZS5vdmVy
cmlkZS5oYXNPd25Qcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gb3ZlcnJpZGRlbiA/IGUub3Zl
cnJpZGVbcHJvcF0gOiBlW3Byb3BdOwotICB9Ci0KICAgLy8gRVZFTlQgSEFORExJTkcKIAogICBm
dW5jdGlvbiBvbihlbWl0dGVyLCB0eXBlLCBmKSB7CkBAIC00MTcxLDE0ICs0ODc3LDI2IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YXJyLmxlbmd0aDsgKytpKSBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7CiAgIH0KIAotICBmdW5j
dGlvbiBzaWduYWxMYXRlcihjbSwgZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKKyAg
dmFyIGRlbGF5ZWRDYWxsYmFja3MsIGRlbGF5ZWRDYWxsYmFja0RlcHRoID0gMDsKKyAgZnVuY3Rp
b24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKICAgICB2YXIg
YXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07CiAgICAg
aWYgKCFhcnIpIHJldHVybjsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cywgMyksIGZsaXN0ID0gY20uY3VyT3AgJiYgY20uY3VyT3AuZGVsYXllZENh
bGxiYWNrczsKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7CisgICAgaWYgKCFkZWxheWVkQ2FsbGJhY2tzKSB7CisgICAgICArK2RlbGF5ZWRD
YWxsYmFja0RlcHRoOworICAgICAgZGVsYXllZENhbGxiYWNrcyA9IFtdOworICAgICAgc2V0VGlt
ZW91dChmaXJlRGVsYXllZCwgMCk7CisgICAgfQogICAgIGZ1bmN0aW9uIGJuZChmKSB7cmV0dXJu
IGZ1bmN0aW9uKCl7Zi5hcHBseShudWxsLCBhcmdzKTt9O307CiAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAgICBpZiAoZmxpc3QpIGZsaXN0LnB1c2goYm5kKGFy
cltpXSkpOwotICAgICAgZWxzZSBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7CisgICAgICBkZWxh
eWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFycltpXSkpOworICB9CisKKyAgZnVuY3Rpb24gZmlyZURl
bGF5ZWQoKSB7CisgICAgLS1kZWxheWVkQ2FsbGJhY2tEZXB0aDsKKyAgICB2YXIgZGVsYXllZCA9
IGRlbGF5ZWRDYWxsYmFja3M7CisgICAgZGVsYXllZENhbGxiYWNrcyA9IG51bGw7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7CiAgIH0K
IAogICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHsKQEAgLTQyMzgsNiArNDk1
NiwyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gLTE7
CiAgIH0KIAorICBmdW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJvcHMpIHsKKyAgICBmdW5jdGlv
biBPYmooKSB7fQorICAgIE9iai5wcm90b3R5cGUgPSBiYXNlOworICAgIHZhciBpbnN0ID0gbmV3
IE9iaigpOworICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7CisgICAgcmV0dXJu
IGluc3Q7CisgIH0KKworICBmdW5jdGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0KSB7CisgICAgaWYg
KCF0YXJnZXQpIHRhcmdldCA9IHt9OworICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSBpZiAob2Jq
Lmhhc093blByb3BlcnR5KHByb3ApKSB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07CisgICAgcmV0
dXJuIHRhcmdldDsKKyAgfQorCiAgIGZ1bmN0aW9uIGVtcHR5QXJyYXkoc2l6ZSkgewogICAgIGZv
ciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIGEucHVzaCh1bmRlZmluZWQpOwog
ICAgIHJldHVybiBhOwpAQCAtNDI1NSwxMiArNDk4NywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7Ci0gICAgdmFy
IGMgPSAwOwotICAgIGZvciAodmFyIG4gaW4gb2JqKSBpZiAob2JqLmhhc093blByb3BlcnR5KG4p
ICYmIG9ialtuXSkgKytjOwotICAgIHJldHVybiAhYzsKKyAgICBmb3IgKHZhciBuIGluIG9iaikg
aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuKSAmJiBvYmpbbl0pIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKICAgfQogCi0gIHZhciBpc0V4dGVuZGluZ0NoYXIgPSAvW1x1MDMwMC1cdTAz
NkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUw
NUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUw
NkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1
QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXS87CisgIHZhciBpc0V4dGVuZGluZ0NoYXIg
PSAvW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRc
dTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEIt
XHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVB
LVx1MDZFRFx1QTY2Rlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZm
Zl0vOwogCiAgIC8vIERPTSBVVElMSVRJRVMKIApAQCAtNDI3NCw3ICs1MDA1LDkgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiByZW1vdmVDaGls
ZHJlbihlKSB7Ci0gICAgZS5pbm5lckhUTUwgPSAiIjsKKyAgICAvLyBJRSB3aWxsIGJyZWFrIGFs
bCBwYXJlbnQtY2hpbGQgcmVsYXRpb25zIGluIHN1Ym5vZGVzIHdoZW4gc2V0dGluZyBpbm5lckhU
TUwKKyAgICBpZiAoIWllKSBlLmlubmVySFRNTCA9ICIiOworICAgIGVsc2Ugd2hpbGUgKGUuZmly
c3RDaGlsZCkgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOwogICAgIHJldHVybiBlOwogICB9
CiAKQEAgLTQyODksNiArNTAyMiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB9IGVsc2UgZS50ZXh0Q29udGVudCA9IHN0cjsKICAgfQogCisgIGZ1bmN0aW9uIGdl
dFJlY3Qobm9kZSkgeworICAgIHJldHVybiBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwor
ICB9CisgIENvZGVNaXJyb3IucmVwbGFjZUdldFJlY3QgPSBmdW5jdGlvbihmKSB7IGdldFJlY3Qg
PSBmOyB9OworCiAgIC8vIEZFQVRVUkUgREVURUNUSU9OCiAKICAgLy8gRGV0ZWN0IGRyYWctYW5k
LWRyb3AKQEAgLTQ0MTMsMjAgKzUxNTEsMjAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7Ci0gICAgdmFy
IGxpbmUgPSBnZXRMaW5lKGNtLnZpZXcuZG9jLCBsaW5lTik7Ci0gICAgdmFyIHZpc3VhbCA9IHZp
c3VhbExpbmUoY20udmlldy5kb2MsIGxpbmUpOworICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5k
b2MsIGxpbmVOKTsKKyAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShjbS5kb2MsIGxpbmUpOwog
ICAgIGlmICh2aXN1YWwgIT0gbGluZSkgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsKICAgICB2YXIg
b3JkZXIgPSBnZXRPcmRlcih2aXN1YWwpOwogICAgIHZhciBjaCA9ICFvcmRlciA/IDAgOiBvcmRl
clswXS5sZXZlbCAlIDIgPyBsaW5lUmlnaHQodmlzdWFsKSA6IGxpbmVMZWZ0KHZpc3VhbCk7Ci0g
ICAgcmV0dXJuIHtsaW5lOiBsaW5lTiwgY2g6IGNofTsKKyAgICByZXR1cm4gUG9zKGxpbmVOLCBj
aCk7CiAgIH0KLSAgZnVuY3Rpb24gbGluZUVuZChjbSwgbGluZU5vKSB7CisgIGZ1bmN0aW9uIGxp
bmVFbmQoY20sIGxpbmVOKSB7CiAgICAgdmFyIG1lcmdlZCwgbGluZTsKLSAgICB3aGlsZSAobWVy
Z2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUgPSBnZXRMaW5lKGNtLnZpZXcuZG9jLCBsaW5l
Tm8pKSkKLSAgICAgIGxpbmVObyA9IG1lcmdlZC5maW5kKCkudG8ubGluZTsKKyAgICB3aGlsZSAo
bWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4p
KSkKKyAgICAgIGxpbmVOID0gbWVyZ2VkLmZpbmQoKS50by5saW5lOwogICAgIHZhciBvcmRlciA9
IGdldE9yZGVyKGxpbmUpOwogICAgIHZhciBjaCA9ICFvcmRlciA/IGxpbmUudGV4dC5sZW5ndGgg
OiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lTGVmdChsaW5lKSA6IGxpbmVSaWdodChsaW5lKTsK
LSAgICByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IGNofTsKKyAgICByZXR1cm4gUG9zKGxpbmVO
LCBjaCk7CiAgIH0KIAogICAvLyBUaGlzIGlzIHNvbWV3aGF0IGludm9sdmVkLiBJdCBpcyBuZWVk
ZWQgaW4gb3JkZXIgdG8gbW92ZQpAQCAtNDUxOCw3ICs1MjU2LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gQnJvd3NlcnMgc2VlbSB0byBhbHdheXMgdHJlYXQg
dGhlIGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMgYXMgYmVpbmcgTC4KICAgICB2YXIgb3V0
ZXJUeXBlID0gIkwiOwogCi0gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYXJPcmRlcmluZyhzdHIpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oc3RyKSB7CiAgICAgICBpZiAoIWJpZGlSRS50ZXN0KHN0cikp
IHJldHVybiBmYWxzZTsKICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdOwog
ICAgICAgZm9yICh2YXIgaSA9IDAsIHR5cGU7IGkgPCBsZW47ICsraSkKQEAgLTQ2NDAsNyArNTM3
OCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFRIRSBFTkQK
IAotICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4wICsiOworICBDb2RlTWlycm9yLnZlcnNpb24g
PSAiMy4xIjsKIAogICByZXR1cm4gQ29kZU1pcnJvcjsKIH0pKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>