<?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>165677</bug_id>
          
          <creation_ts>2016-12-09 13:18:42 -0800</creation_ts>
          <short_desc>Web Inspector: Update CodeMirror to support async/await keyword and other ES2017 features</short_desc>
          <delta_ts>2016-12-20 13:42:27 -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</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258271</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-12-09 13:18:42 -0800</bug_when>
    <thetext>Summary:
Update CodeMirror to support async/await keyword and other ES2017 features

Support for new ES2017 features in JavaScript was added in June-August:
https://github.com/codemirror/CodeMirror/issues/4085
https://github.com/codemirror/CodeMirror/issues/4152

All of these seem useful / relevant:
&gt; cbbd941 [javascript mode] Improve handling of async in object literal
&gt; b3482bb [javascript mode] Fix a bug in parsing of arrow function with no args
&gt; 5e29ee6 [javascript mode] Fix bug in array literal parsing
&gt; 31eb1b2 [javascript mode] Handle trailing commas better
&gt; 2319665 [javascript mode] Improve support for async keyword
&gt; b2c1116 [javascript mode] Support async and await
&gt; 0d73c4b [javascript mode] Allow trailing comma in object destructure

This would highlight the keywords and potentially improve other syntax highlighting surrounding new syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261242</commentid>
    <comment_count>1</comment_count>
      <attachid>297485</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-12-19 15:43:15 -0800</bug_when>
    <thetext>Created attachment 297485
[PATCH] Proposed Fix

Tested viewing resources, styles sidebar, syntax highlighting of JavaScript/CSS/HTML, pretty printing, inline markers (errors/warnings), breakpoints, and some other general testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261271</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-19 16:38:09 -0800</bug_when>
    <thetext>&lt;rdar://problem/29744608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261581</commentid>
    <comment_count>3</comment_count>
      <attachid>297485</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-20 11:16:27 -0800</bug_when>
    <thetext>Comment on attachment 297485
[PATCH] Proposed Fix

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261736</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-12-20 13:42:27 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/210032</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297485</attachid>
            <date>2016-12-19 15:43:15 -0800</date>
            <delta_ts>2016-12-20 11:16:27 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>cm-1.patch</filename>
            <type>text/plain</type>
            <size>827643</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGU3YzBjMWIuLjllZWVkYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE2LTEyLTE5ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVXBkYXRl
IENvZGVNaXJyb3IgdG8gc3VwcG9ydCBhc3luYy9hd2FpdCBrZXl3b3JkIGFuZCBvdGhlciBFUzIw
MTcgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBDb2RlTWlycm9yIGZyb20gdmVyc2lvbiA1LjUuMSB0byA1LjIxLjEuIEhpZ2hs
aWdodHMgaW5jbHVkZToKKworICAgICAgICAgIC0gU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgRVMy
MDE3IGZlYXR1cmVzIChhc3luYy9hd2FpdCkKKyAgICAgICAgICAtIFN5bnRheCBoaWdobGlnaHRp
bmcgaW1wcm92ZW1lbnRzIGZvciBzb21lIEVTNiBmZWF0dXJlcyAobmV3LnRhcmdldCkKKyAgICAg
ICAgICAtIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIENTUzQgI3JyZ2diYmFhIGFuZCAjcmdiYSBj
b2xvcnMKKworICAgICAgICBBcyB3ZWxsIGFzIGEgbnVtYmVyIG9mIHNtYWxsZXIgYnVnIGZpeGVz
LgorCisgICAgICAgICogU2NyaXB0cy91cGRhdGUtY29kZW1pcnJvci1yZXNvdXJjZXMucmI6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL0xJQ0VOU0U6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanM6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanM6
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3Iu
Y3NzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWly
cm9yLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2Zm
ZWVzY3JpcHQuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2NvbW1lbnQuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2Nzcy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRt
bG1peGVkLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9q
YXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJv
ci9saXZlc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9tYXRjaGJyYWNrZXRzLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9vdmVybGF5LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9wbGFjZWhvbGRlci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvcnVubW9kZS5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3Ivc3FsLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9zdWJsaW1lLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci94bWwuanM6CisKIDIwMTYtMTItMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0NvbnRleHQgSW5zcGVjdG9yOiBBdm9pZCBzb21l
IHBvc3NpYmxlIGV4Y2VwdGlvbnMgaW5zcGVjdGluZyBhIEpTQ29udGV4dApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2Vz
LnJiIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVz
b3VyY2VzLnJiCmluZGV4IGM0YWIzNDcuLjJmMTU4YWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1jb2RlbWlycm9yLXJlc291cmNlcy5yYgorKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy91cGRhdGUtY29kZW1pcnJvci1yZXNvdXJjZXMu
cmIKQEAgLTE0LDcgKzE0LDcgQEAgZGVmIHZlcmlmeV9jb2RlX21pcnJvcl9yZXBvc2l0b3J5X3Bh
dGgocGF0aCkKICAgZW5kCiAKICAgRGlyLmNoZGlyKHBhdGgpIGRvCi0gICAgcmVzdWx0cyA9IGBn
aXQgY29uZmlnIC0tbGlzdCB8IGdyZXAgJ21hcmlqbmgvQ29kZU1pcnJvclwuZ2l0J2AKKyAgICBy
ZXN1bHRzID0gYGdpdCBjb25maWcgLS1saXN0IHwgZ3JlcCAnY29kZW1pcnJvci9Db2RlTWlycm9y
XC5naXQnYAogICAgIGlmICQ/LmV4aXRzdGF0dXMgIT0gMCB8fCByZXN1bHRzLnNwbGl0KCJcbiIp
LmVtcHR5PwogICAgICAgcHV0cyAiRVJST1I6IFByb3ZpZGVkIENvZGVNaXJyb3IgcGF0aCBkb2Vz
IG5vdCBhcHBlYXIgdG8gYmUgYSBDb2RlTWlycm9yIGNoZWNrb3V0LiIKICAgICAgIGV4aXQgMQpA
QCAtMjksNiArMjksNyBAQCB3ZWJfaW5zcGVjdG9yX3VzZXJfaW50ZXJmYWNlX3BhdGggPSBGaWxl
LmV4cGFuZF9wYXRoIEZpbGUuam9pbihGaWxlLmRpcm5hbWUoX19GSQogd2ViX2luc3BlY3Rvcl9j
b2RlX21pcnJvcl9yZXNvdXJjZXNfcGF0aCA9IEZpbGUuam9pbiB3ZWJfaW5zcGVjdG9yX3VzZXJf
aW50ZXJmYWNlX3BhdGgsICIvRXh0ZXJuYWwvQ29kZU1pcnJvciIKIAogQ09ERV9NSVJST1JfRklM
RVNfVE9fQ09QWSA9ICV3KAorICBMSUNFTlNFCiAgIGFkZG9uL2NvbW1lbnQvY29tbWVudC5qcwog
ICBhZGRvbi9kaXNwbGF5L3BsYWNlaG9sZGVyLmpzCiAgIGFkZG9uL2VkaXQvY2xvc2VicmFja2V0
cy5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFCmluZGV4IGY0YTVhNGEuLjc2NjEzMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvTElDRU5TRQorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL0xJQ0VOU0UKQEAgLTEsNCArMSw0IEBACi1Db3B5cmln
aHQgKEMpIDIwMTUgYnkgTWFyaWpuIEhhdmVyYmVrZSA8bWFyaWpuaEBnbWFpbC5jb20+IGFuZCBv
dGhlcnMKK0NvcHlyaWdodCAoQykgMjAxNiBieSBNYXJpam4gSGF2ZXJiZWtlIDxtYXJpam5oQGdt
YWlsLmNvbT4gYW5kIG90aGVycwogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg
dG8gZGVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzCmluZGV4IGQ1MzEwMjIu
LmVkNmFmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanMKQEAgLTMxLDE0
ICszMSw3MCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0
aW9ucykgewogICAgIHZhciBhdG9tcyA9IG1ha2VLZXl3b3JkcygidHJ1ZSBmYWxzZSBuaWwiKTsK
IAogICAgIHZhciBrZXl3b3JkcyA9IG1ha2VLZXl3b3JkcygKLSAgICAgICJkZWZuIGRlZm4tIGRl
ZiBkZWYtIGRlZm9uY2UgZGVmbXVsdGkgZGVmbWV0aG9kIGRlZm1hY3JvIGRlZnN0cnVjdCBkZWZ0
eXBlIGRlZnByb3RvY29sIGRlZnJlY29yZCBkZWZwcm9qZWN0IGRlZnRlc3Qgc2xpY2UgZGVmYWxp
YXMgZGVmaGludGVkIGRlZm1hY3JvLSBkZWZuLW1lbW8gZGVmbmsgZGVmbmsgZGVmb25jZS0gZGVm
dW5ib3VuZCBkZWZ1bmJvdW5kLSBkZWZ2YXIgZGVmdmFyLSBsZXQgbGV0Zm4gZG8gY2FzZSBjb25k
IGNvbmRwIGZvciBsb29wIHJlY3VyIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgd2hlbi1maXJzdCBp
ZiBpZi1sZXQgaWYtbm90IC4gLi4gLT4gLT4+IGRvdG8gYW5kIG9yIGRvc3luYyBkb3NlcSBkb3Rp
bWVzIGRvcnVuIGRvYWxsIGxvYWQgaW1wb3J0IHVuaW1wb3J0IG5zIGluLW5zIHJlZmVyIHRyeSBj
YXRjaCBmaW5hbGx5IHRocm93IHdpdGgtb3BlbiB3aXRoLWxvY2FsLXZhcnMgYmluZGluZyBnZW4t
Y2xhc3MgZ2VuLWFuZC1sb2FkLWNsYXNzIGdlbi1hbmQtc2F2ZS1jbGFzcyBoYW5kbGVyLWNhc2Ug
aGFuZGxlIik7CisgICAgICAiZGVmbiBkZWZuLSBkZWYgZGVmLSBkZWZvbmNlIGRlZm11bHRpIGRl
Zm1ldGhvZCBkZWZtYWNybyBkZWZzdHJ1Y3QgZGVmdHlwZSBkZWZwcm90b2NvbCBkZWZyZWNvcmQg
ZGVmcHJvamVjdCBkZWZ0ZXN0ICIgKworICAgICAgInNsaWNlIGRlZmFsaWFzIGRlZmhpbnRlZCBk
ZWZtYWNyby0gZGVmbi1tZW1vIGRlZm5rIGRlZm5rIGRlZm9uY2UtIGRlZnVuYm91bmQgZGVmdW5i
b3VuZC0gZGVmdmFyIGRlZnZhci0gbGV0IGxldGZuICIgKworICAgICAgImRvIGNhc2UgY29uZCBj
b25kcCBmb3IgbG9vcCByZWN1ciB3aGVuIHdoZW4tbm90IHdoZW4tbGV0IHdoZW4tZmlyc3QgaWYg
aWYtbGV0IGlmLW5vdCAuIC4uIC0+IC0+PiBkb3RvIGFuZCBvciBkb3N5bmMgIiArCisgICAgICAi
ZG9zZXEgZG90aW1lcyBkb3J1biBkb2FsbCBsb2FkIGltcG9ydCB1bmltcG9ydCBucyBpbi1ucyBy
ZWZlciB0cnkgY2F0Y2ggZmluYWxseSB0aHJvdyB3aXRoLW9wZW4gd2l0aC1sb2NhbC12YXJzICIg
KworICAgICAgImJpbmRpbmcgZ2VuLWNsYXNzIGdlbi1hbmQtbG9hZC1jbGFzcyBnZW4tYW5kLXNh
dmUtY2xhc3MgaGFuZGxlci1jYXNlIGhhbmRsZSIpOwogCiAgICAgdmFyIGJ1aWx0aW5zID0gbWFr
ZUtleXdvcmRzKAotICAgICAgICAiKiAqJyAqMSAqMiAqMyAqYWdlbnQqICphbGxvdy11bnJlc29s
dmVkLXZhcnMqICphc3NlcnQqICpjbG9qdXJlLXZlcnNpb24qICpjb21tYW5kLWxpbmUtYXJncyog
KmNvbXBpbGUtZmlsZXMqICpjb21waWxlLXBhdGgqICpjb21waWxlci1vcHRpb25zKiAqZGF0YS1y
ZWFkZXJzKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICpmbi1sb2FkZXIqICpp
biogKm1hdGgtY29udGV4dCogKm5zKiAqb3V0KiAqcHJpbnQtZHVwKiAqcHJpbnQtbGVuZ3RoKiAq
cHJpbnQtbGV2ZWwqICpwcmludC1tZXRhKiAqcHJpbnQtcmVhZGFibHkqICpyZWFkLWV2YWwqICpz
b3VyY2UtcGF0aCogKnVuY2hlY2tlZC1tYXRoKiAqdXNlLWNvbnRleHQtY2xhc3Nsb2FkZXIqICp2
ZXJib3NlLWRlZnJlY29yZHMqICp3YXJuLW9uLXJlZmxlY3Rpb24qICsgKycgLSAtJyAtPiAtPj4g
LT5BcnJheUNodW5rIC0+VmVjIC0+VmVjTm9kZSAtPlZlY1NlcSAtY2FjaGUtcHJvdG9jb2wtZm4g
LXJlc2V0LW1ldGhvZHMgLi4gLyA8IDw9ID0gPT0gPiA+PSBFTVBUWS1OT0RFIGFjY2Vzc29yIGFj
bG9uZSBhZGQtY2xhc3NwYXRoIGFkZC13YXRjaCBhZ2VudCBhZ2VudC1lcnJvciBhZ2VudC1lcnJv
cnMgYWdldCBhbGVuZ3RoIGFsaWFzIGFsbC1ucyBhbHRlciBhbHRlci1tZXRhISBhbHRlci12YXIt
cm9vdCBhbWFwIGFuY2VzdG9ycyBhbmQgYXBwbHkgYXJlZHVjZSBhcnJheS1tYXAgYXNldCBhc2V0
LWJvb2xlYW4gYXNldC1ieXRlIGFzZXQtY2hhciBhc2V0LWRvdWJsZSBhc2V0LWZsb2F0IGFzZXQt
aW50IGFzZXQtbG9uZyBhc2V0LXNob3J0IGFzc2VydCBhc3NvYyBhc3NvYyEgYXNzb2MtaW4gYXNz
b2NpYXRpdmU/IGF0b20gYXdhaXQgYXdhaXQtZm9yIGF3YWl0MSBiYXNlcyBiZWFuIGJpZ2RlYyBi
aWdpbnQgYmlnaW50ZWdlciBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJp
dC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJp
Z2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5k
LWZuIGJvdW5kLWZuKiBib3VuZD8gYnV0bGFzdCBieXRlIGJ5dGUtYXJyYXkgYnl0ZXMgY2FzZSBj
YXN0IGNoYXIgY2hhci1hcnJheSBjaGFyLWVzY2FwZS1zdHJpbmcgY2hhci1uYW1lLXN0cmluZyBj
aGFyPyBjaGFycyBjaHVuayBjaHVuay1hcHBlbmQgY2h1bmstYnVmZmVyIGNodW5rLWNvbnMgY2h1
bmstZmlyc3QgY2h1bmstbmV4dCBjaHVuay1yZXN0IGNodW5rZWQtc2VxPyBjbGFzcyBjbGFzcz8g
Y2xlYXItYWdlbnQtZXJyb3JzIGNsb2p1cmUtdmVyc2lvbiBjb2xsPyBjb21tZW50IGNvbW11dGUg
Y29tcCBjb21wYXJhdG9yIGNvbXBhcmUgY29tcGFyZS1hbmQtc2V0ISBjb21waWxlIGNvbXBsZW1l
bnQgY29uY2F0IGNvbmQgY29uZHAgY29uaiBjb25qISBjb25zIGNvbnN0YW50bHkgY29uc3RydWN0
LXByb3h5IGNvbnRhaW5zPyBjb3VudCBjb3VudGVkPyBjcmVhdGUtbnMgY3JlYXRlLXN0cnVjdCBj
eWNsZSBkZWMgZGVjJyBkZWNpbWFsPyBkZWNsYXJlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIGRlZmlu
bGluZSBkZWZpbnRlcmZhY2UgZGVmbWFjcm8gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gZGVmbi0g
ZGVmb25jZSBkZWZwcm90b2NvbCBkZWZyZWNvcmQgZGVmc3RydWN0IGRlZnR5cGUgZGVsYXkgZGVs
YXk/IGRlbGl2ZXIgZGVub21pbmF0b3IgZGVyZWYgZGVyaXZlIGRlc2NlbmRhbnRzIGRlc3RydWN0
dXJlIGRpc2ogZGlzaiEgZGlzc29jIGRpc3NvYyEgZGlzdGluY3QgZGlzdGluY3Q/IGRvYWxsIGRv
cnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlIGRvdWJsZS1hcnJheSBkb3VibGVz
IGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlv
bi1zZXEgZXJyb3ItaGFuZGxlciBlcnJvci1tb2RlIGV2YWwgZXZlbj8gZXZlcnktcHJlZCBldmVy
eT8gZXgtZGF0YSBleC1pbmZvIGV4dGVuZCBleHRlbmQtcHJvdG9jb2wgZXh0ZW5kLXR5cGUgZXh0
ZW5kZXJzIGV4dGVuZHM/IGZhbHNlPyBmZmlyc3QgZmlsZS1zZXEgZmlsdGVyIGZpbHRlcnYgZmlu
ZCBmaW5kLWtleXdvcmQgZmluZC1ucyBmaW5kLXByb3RvY29sLWltcGwgZmluZC1wcm90b2NvbC1t
ZXRob2QgZmluZC12YXIgZmlyc3QgZmxhdHRlbiBmbG9hdCBmbG9hdC1hcnJheSBmbG9hdD8gZmxv
YXRzIGZsdXNoIGZuIGZuPyBmbmV4dCBmbmlsIGZvciBmb3JjZSBmb3JtYXQgZnJlcXVlbmNpZXMg
ZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNhbmNlbGxlZD8gZnV0dXJl
LWRvbmU/IGZ1dHVyZT8gZ2VuLWNsYXNzIGdlbi1pbnRlcmZhY2UgZ2Vuc3ltIGdldCBnZXQtaW4g
Z2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRh
dG9yIGdyb3VwLWJ5IGhhc2ggaGFzaC1jb21iaW5lIGhhc2gtbWFwIGhhc2gtc2V0IGlkZW50aWNh
bD8gaWRlbnRpdHkgaWYtbGV0IGlmLW5vdCBpZm4/IGltcG9ydCBpbi1ucyBpbmMgaW5jJyBpbml0
LXByb3h5IGluc3RhbmNlPyBpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJu
IGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9y
LXNlcSBqdXh0IGtlZXAga2VlcC1pbmRleGVkIGtleSBrZXlzIGtleXdvcmQga2V5d29yZD8gbGFz
dCBsYXp5LWNhdCBsYXp5LXNlcSBsZXQgbGV0Zm4gbGluZS1zZXEgbGlzdCBsaXN0KiBsaXN0PyBs
b2FkIGxvYWQtZmlsZSBsb2FkLXJlYWRlciBsb2FkLXN0cmluZyBsb2FkZWQtbGlicyBsb2NraW5n
IGxvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFr
ZS1hcnJheSBtYWtlLWhpZXJhcmNoeSBtYXAgbWFwLWluZGV4ZWQgbWFwPyBtYXBjYXQgbWFwdiBt
YXggbWF4LWtleSBtZW1mbiBtZW1vaXplIG1lcmdlIG1lcmdlLXdpdGggbWV0YSBtZXRob2Qtc2ln
IG1ldGhvZHMgbWluIG1pbi1rZXkgbW9kIG11bmdlIG5hbWUgbmFtZXNwYWNlIG5hbWVzcGFjZS1t
dW5nZSBuZWc/IG5ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90
LWVtcHR5IG5vdC1ldmVyeT8gbm90PSBucyBucy1hbGlhc2VzIG5zLWltcG9ydHMgbnMtaW50ZXJu
cyBucy1tYXAgbnMtbmFtZSBucy1wdWJsaWNzIG5zLXJlZmVycyBucy1yZXNvbHZlIG5zLXVuYWxp
YXMgbnMtdW5tYXAgbnRoIG50aG5leHQgbnRocmVzdCBudW0gbnVtYmVyPyBudW1lcmF0b3Igb2Jq
ZWN0LWFycmF5IG9kZD8gb3IgcGFyZW50cyBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb24tYWxs
IHBhcnRpdGlvbi1ieSBwY2FsbHMgcGVlayBwZXJzaXN0ZW50ISBwbWFwIHBvcCBwb3AhIHBvcC10
aHJlYWQtYmluZGluZ3MgcG9zPyBwciBwci1zdHIgcHJlZmVyLW1ldGhvZCBwcmVmZXJzIHByaW1p
dGl2ZXMtY2xhc3NuYW1lcyBwcmludCBwcmludC1jdG9yIHByaW50LWR1cCBwcmludC1tZXRob2Qg
cHJpbnQtc2ltcGxlIHByaW50LXN0ciBwcmludGYgcHJpbnRsbiBwcmludGxuLXN0ciBwcm4gcHJu
LXN0ciBwcm9taXNlIHByb3h5IHByb3h5LWNhbGwtd2l0aC1zdXBlciBwcm94eS1tYXBwaW5ncyBw
cm94eS1uYW1lIHByb3h5LXN1cGVyIHB1c2gtdGhyZWFkLWJpbmRpbmdzIHB2YWx1ZXMgcXVvdCBy
YW5kIHJhbmQtaW50IHJhbmQtbnRoIHJhbmdlIHJhdGlvPyByYXRpb25hbD8gcmF0aW9uYWxpemUg
cmUtZmluZCByZS1ncm91cHMgcmUtbWF0Y2hlciByZS1tYXRjaGVzIHJlLXBhdHRlcm4gcmUtc2Vx
IHJlYWQgcmVhZC1saW5lIHJlYWQtc3RyaW5nIHJlYWxpemVkPyByZWR1Y2UgcmVkdWNlLWt2IHJl
ZHVjdGlvbnMgcmVmIHJlZi1oaXN0b3J5LWNvdW50IHJlZi1tYXgtaGlzdG9yeSByZWYtbWluLWhp
c3RvcnkgcmVmLXNldCByZWZlciByZWZlci1jbG9qdXJlIHJlaWZ5IHJlbGVhc2UtcGVuZGluZy1z
ZW5kcyByZW0gcmVtb3ZlIHJlbW92ZS1hbGwtbWV0aG9kcyByZW1vdmUtbWV0aG9kIHJlbW92ZS1u
cyByZW1vdmUtd2F0Y2ggcmVwZWF0IHJlcGVhdGVkbHkgcmVwbGFjZSByZXBsaWNhdGUgcmVxdWly
ZSByZXNldCEgcmVzZXQtbWV0YSEgcmVzb2x2ZSByZXN0IHJlc3RhcnQtYWdlbnQgcmVzdWx0c2V0
LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBz
ZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRp
YWw/IHNldCBzZXQtZXJyb3ItaGFuZGxlciEgc2V0LWVycm9yLW1vZGUhIHNldC12YWxpZGF0b3Ih
IHNldD8gc2hvcnQgc2hvcnQtYXJyYXkgc2hvcnRzIHNodWZmbGUgc2h1dGRvd24tYWdlbnRzIHNs
dXJwIHNvbWUgc29tZS1mbiBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNv
cnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtc3ltYm9sPyBzcGl0IHNwbGl0
LWF0IHNwbGl0LXdpdGggc3RyIHN0cmluZz8gc3RydWN0IHN0cnVjdC1tYXAgc3VicyBzdWJzZXEg
c3VidmVjIHN1cGVycyBzd2FwISBzeW1ib2wgc3ltYm9sPyBzeW5jIHRha2UgdGFrZS1sYXN0IHRh
a2UtbnRoIHRha2Utd2hpbGUgdGVzdCB0aGUtbnMgdGhyZWFkLWJvdW5kPyB0aW1lIHRvLWFycmF5
IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5j
aGVja2VkLWFkZCB1bmNoZWNrZWQtYWRkLWludCB1bmNoZWNrZWQtYnl0ZSB1bmNoZWNrZWQtY2hh
ciB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kZWMtaW50IHVuY2hlY2tlZC1kaXZpZGUtaW50IHVu
Y2hlY2tlZC1kb3VibGUgdW5jaGVja2VkLWZsb2F0IHVuY2hlY2tlZC1pbmMgdW5jaGVja2VkLWlu
Yy1pbnQgdW5jaGVja2VkLWludCB1bmNoZWNrZWQtbG9uZyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5j
aGVja2VkLW11bHRpcGx5LWludCB1bmNoZWNrZWQtbmVnYXRlIHVuY2hlY2tlZC1uZWdhdGUtaW50
IHVuY2hlY2tlZC1yZW1haW5kZXItaW50IHVuY2hlY2tlZC1zaG9ydCB1bmNoZWNrZWQtc3VidHJh
Y3QgdW5jaGVja2VkLXN1YnRyYWN0LWludCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNp
bmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZh
cj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yLW9mIHZlY3Rvcj8gd2hlbiB3aGVuLWZpcnN0
IHdoZW4tbGV0IHdoZW4tbm90IHdoaWxlIHdpdGgtYmluZGluZ3Mgd2l0aC1iaW5kaW5ncyogd2l0
aC1pbi1zdHIgd2l0aC1sb2FkaW5nLWNvbnRleHQgd2l0aC1sb2NhbC12YXJzIHdpdGgtbWV0YSB3
aXRoLW9wZW4gd2l0aC1vdXQtc3RyIHdpdGgtcHJlY2lzaW9uIHdpdGgtcmVkZWZzIHdpdGgtcmVk
ZWZzLWZuIHhtbC1zZXEgemVybz8gemlwbWFwICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiBhcy0+
IGNvbmQtPiBjb25kLT4+IHJlZHVjZWQgcmVkdWNlZD8gc2VuZC12aWEgc2V0LWFnZW50LXNlbmQt
ZXhlY3V0b3IhIHNldC1hZ2VudC1zZW5kLW9mZi1leGVjdXRvciEgc29tZS0+IHNvbWUtPj4iKTsK
KyAgICAgICAgIiogKicgKjEgKjIgKjMgKmFnZW50KiAqYWxsb3ctdW5yZXNvbHZlZC12YXJzKiAq
YXNzZXJ0KiAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZp
bGVzKiAiICsKKyAgICAgICAgIipjb21waWxlLXBhdGgqICpjb21waWxlci1vcHRpb25zKiAqZGF0
YS1yZWFkZXJzKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICpmbi1sb2FkZXIq
ICppbiogIiArCisgICAgICAgICIqbWF0aC1jb250ZXh0KiAqbnMqICpvdXQqICpwcmludC1kdXAq
ICpwcmludC1sZW5ndGgqICpwcmludC1sZXZlbCogKnByaW50LW1ldGEqICpwcmludC1yZWFkYWJs
eSogKnJlYWQtZXZhbCogIiArCisgICAgICAgICIqc291cmNlLXBhdGgqICp1bmNoZWNrZWQtbWF0
aCogKnVzZS1jb250ZXh0LWNsYXNzbG9hZGVyKiAqdmVyYm9zZS1kZWZyZWNvcmRzKiAqd2Fybi1v
bi1yZWZsZWN0aW9uKiArICsnIC0gLScgLT4gIiArCisgICAgICAgICItPj4gLT5BcnJheUNodW5r
IC0+VmVjIC0+VmVjTm9kZSAtPlZlY1NlcSAtY2FjaGUtcHJvdG9jb2wtZm4gLXJlc2V0LW1ldGhv
ZHMgLi4gLyA8IDw9ID0gPT0gPiA+PSBFTVBUWS1OT0RFIGFjY2Vzc29yICIgKworICAgICAgICAi
YWNsb25lIGFkZC1jbGFzc3BhdGggYWRkLXdhdGNoIGFnZW50IGFnZW50LWVycm9yIGFnZW50LWVy
cm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhICIgKworICAg
ICAgICAiYWx0ZXItdmFyLXJvb3QgYW1hcCBhbmNlc3RvcnMgYW5kIGFwcGx5IGFyZWR1Y2UgYXJy
YXktbWFwIGFzZXQgYXNldC1ib29sZWFuIGFzZXQtYnl0ZSBhc2V0LWNoYXIgYXNldC1kb3VibGUg
IiArCisgICAgICAgICJhc2V0LWZsb2F0IGFzZXQtaW50IGFzZXQtbG9uZyBhc2V0LXNob3J0IGFz
c2VydCBhc3NvYyBhc3NvYyEgYXNzb2MtaW4gYXNzb2NpYXRpdmU/IGF0b20gYXdhaXQgYXdhaXQt
Zm9yIGF3YWl0MSAiICsKKyAgICAgICAgImJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaWdpbnRl
Z2VyIGJpbmRpbmcgYml0LWFuZCBiaXQtYW5kLW5vdCBiaXQtY2xlYXIgYml0LWZsaXAgYml0LW5v
dCBiaXQtb3IgYml0LXNldCAiICsKKyAgICAgICAgImJpdC1zaGlmdC1sZWZ0IGJpdC1zaGlmdC1y
aWdodCBiaXQtdGVzdCBiaXQteG9yIGJvb2xlYW4gYm9vbGVhbi1hcnJheSBib29sZWFucyBib3Vu
ZC1mbiBib3VuZC1mbiogYm91bmQ/IGJ1dGxhc3QgIiArCisgICAgICAgICJieXRlIGJ5dGUtYXJy
YXkgYnl0ZXMgY2FzZSBjYXQgY2FzdCBjaGFyIGNoYXItYXJyYXkgY2hhci1lc2NhcGUtc3RyaW5n
IGNoYXItbmFtZS1zdHJpbmcgY2hhcj8gY2hhcnMgY2h1bmsgY2h1bmstYXBwZW5kICIgKworICAg
ICAgICAiY2h1bmstYnVmZmVyIGNodW5rLWNvbnMgY2h1bmstZmlyc3QgY2h1bmstbmV4dCBjaHVu
ay1yZXN0IGNodW5rZWQtc2VxPyBjbGFzcyBjbGFzcz8gY2xlYXItYWdlbnQtZXJyb3JzICIgKwor
ICAgICAgICAiY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSBjb21wIGNvbXBh
cmF0b3IgY29tcGFyZSBjb21wYXJlLWFuZC1zZXQhIGNvbXBpbGUgY29tcGxlbWVudCBjb21wbGV0
aW5nIGNvbmNhdCBjb25kIGNvbmRwICIgKworICAgICAgICAiY29uaiBjb25qISBjb25zIGNvbnN0
YW50bHkgY29uc3RydWN0LXByb3h5IGNvbnRhaW5zPyBjb3VudCBjb3VudGVkPyBjcmVhdGUtbnMg
Y3JlYXRlLXN0cnVjdCBjeWNsZSBkZWMgZGVjJyBkZWNpbWFsPyAiICsKKyAgICAgICAgImRlY2xh
cmUgZGVkdXBlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIGRlZmlubGluZSBkZWZpbnRlcmZhY2UgZGVm
bWFjcm8gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gZGVmbi0gZGVmb25jZSBkZWZwcm90b2NvbCAi
ICsKKyAgICAgICAgImRlZnJlY29yZCBkZWZzdHJ1Y3QgZGVmdHlwZSBkZWxheSBkZWxheT8gZGVs
aXZlciBkZW5vbWluYXRvciBkZXJlZiBkZXJpdmUgZGVzY2VuZGFudHMgZGVzdHJ1Y3R1cmUgZGlz
aiBkaXNqISBkaXNzb2MgIiArCisgICAgICAgICJkaXNzb2MhIGRpc3RpbmN0IGRpc3RpbmN0PyBk
b2FsbCBkb3J1biBkb3NlcSBkb3N5bmMgZG90aW1lcyBkb3RvIGRvdWJsZSBkb3VibGUtYXJyYXkg
ZG91YmxlcyBkcm9wIGRyb3AtbGFzdCAiICsKKyAgICAgICAgImRyb3Atd2hpbGUgZWR1Y3Rpb24g
ZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlvbi1zZXEgZXJyb3ItaGFuZGxlciBlcnJvci1t
b2RlIGV2YWwgZXZlbj8gZXZlcnktcHJlZCBldmVyeT8gZXgtZGF0YSBleC1pbmZvICIgKworICAg
ICAgICAiZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSBleHRlbmRlcnMgZXh0ZW5k
cz8gZmFsc2U/IGZmaXJzdCBmaWxlLXNlcSBmaWx0ZXIgZmlsdGVydiBmaW5kIGZpbmQta2V5d29y
ZCAiICsKKyAgICAgICAgImZpbmQtbnMgZmluZC1wcm90b2NvbC1pbXBsIGZpbmQtcHJvdG9jb2wt
bWV0aG9kIGZpbmQtdmFyIGZpcnN0IGZsYXR0ZW4gZmxvYXQgZmxvYXQtYXJyYXkgZmxvYXQ/IGZs
b2F0cyBmbHVzaCBmbiBmbj8gIiArCisgICAgICAgICJmbmV4dCBmbmlsIGZvciBmb3JjZSBmb3Jt
YXQgZnJlcXVlbmNpZXMgZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNh
bmNlbGxlZD8gZnV0dXJlLWRvbmU/IGZ1dHVyZT8gIiArCisgICAgICAgICJnZW4tY2xhc3MgZ2Vu
LWludGVyZmFjZSBnZW5zeW0gZ2V0IGdldC1pbiBnZXQtbWV0aG9kIGdldC1wcm94eS1jbGFzcyBn
ZXQtdGhyZWFkLWJpbmRpbmdzIGdldC12YWxpZGF0b3IgZ3JvdXAtYnkgaGFzaCAiICsKKyAgICAg
ICAgImhhc2gtY29tYmluZSBoYXNoLW1hcCBoYXNoLXNldCBpZGVudGljYWw/IGlkZW50aXR5IGlm
LWxldCBpZi1ub3QgaWZuPyBpbXBvcnQgaW4tbnMgaW5jIGluYycgaW5pdC1wcm94eSBpbnN0YW5j
ZT8gIiArCisgICAgICAgICJpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJu
IGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9y
LXNlcSBqdXh0IGtlZXAgIiArCisgICAgICAgICJrZWVwLWluZGV4ZWQga2V5IGtleXMga2V5d29y
ZCBrZXl3b3JkPyBsYXN0IGxhenktY2F0IGxhenktc2VxIGxldCBsZXRmbiBsaW5lLXNlcSBsaXN0
IGxpc3QqIGxpc3Q/IGxvYWQgbG9hZC1maWxlICIgKworICAgICAgICAibG9hZC1yZWFkZXIgbG9h
ZC1zdHJpbmcgbG9hZGVkLWxpYnMgbG9ja2luZyBsb25nIGxvbmctYXJyYXkgbG9uZ3MgbG9vcCBt
YWNyb2V4cGFuZCBtYWNyb2V4cGFuZC0xIG1ha2UtYXJyYXkgIiArCisgICAgICAgICJtYWtlLWhp
ZXJhcmNoeSBtYXAgbWFwLWluZGV4ZWQgbWFwPyBtYXBjYXQgbWFwdiBtYXggbWF4LWtleSBtZW1m
biBtZW1vaXplIG1lcmdlIG1lcmdlLXdpdGggbWV0YSBtZXRob2Qtc2lnIG1ldGhvZHMgIiArCisg
ICAgICAgICJtaW4gbWluLWtleSBtb2QgbXVuZ2UgbmFtZSBuYW1lc3BhY2UgbmFtZXNwYWNlLW11
bmdlIG5lZz8gbmV3bGluZSBuZXh0IG5maXJzdCBuaWw/IG5uZXh0IG5vdCBub3QtYW55PyBub3Qt
ZW1wdHkgIiArCisgICAgICAgICJub3QtZXZlcnk/IG5vdD0gbnMgbnMtYWxpYXNlcyBucy1pbXBv
cnRzIG5zLWludGVybnMgbnMtbWFwIG5zLW5hbWUgbnMtcHVibGljcyBucy1yZWZlcnMgbnMtcmVz
b2x2ZSBucy11bmFsaWFzICIgKworICAgICAgICAibnMtdW5tYXAgbnRoIG50aG5leHQgbnRocmVz
dCBudW0gbnVtYmVyPyBudW1lcmF0b3Igb2JqZWN0LWFycmF5IG9kZD8gb3IgcGFyZW50cyBwYXJ0
aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb24tYWxsICIgKworICAgICAgICAicGFydGl0aW9uLWJ5IHBj
YWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgcG9wLXRocmVhZC1iaW5kaW5ncyBw
b3M/IHByIHByLXN0ciBwcmVmZXItbWV0aG9kIHByZWZlcnMgIiArCisgICAgICAgICJwcmltaXRp
dmVzLWNsYXNzbmFtZXMgcHJpbnQgcHJpbnQtY3RvciBwcmludC1kdXAgcHJpbnQtbWV0aG9kIHBy
aW50LXNpbXBsZSBwcmludC1zdHIgcHJpbnRmIHByaW50bG4gcHJpbnRsbi1zdHIgIiArCisgICAg
ICAgICJwcm4gcHJuLXN0ciBwcm9taXNlIHByb3h5IHByb3h5LWNhbGwtd2l0aC1zdXBlciBwcm94
eS1tYXBwaW5ncyBwcm94eS1uYW1lIHByb3h5LXN1cGVyIHB1c2gtdGhyZWFkLWJpbmRpbmdzIHB2
YWx1ZXMgIiArCisgICAgICAgICJxdW90IHJhbmQgcmFuZC1pbnQgcmFuZC1udGggcmFuZG9tLXNh
bXBsZSByYW5nZSByYXRpbz8gcmF0aW9uYWw/IHJhdGlvbmFsaXplIHJlLWZpbmQgcmUtZ3JvdXBz
IHJlLW1hdGNoZXIgcmUtbWF0Y2hlcyByZS1wYXR0ZXJuICIgKworICAgICAgICAicmUtc2VxIHJl
YWQgcmVhZC1saW5lIHJlYWQtc3RyaW5nIHJlYWxpemVkPyByZWR1Y2UgcmVkdWNlLWt2IHJlZHVj
dGlvbnMgcmVmIHJlZi1oaXN0b3J5LWNvdW50IHJlZi1tYXgtaGlzdG9yeSAiICsKKyAgICAgICAg
InJlZi1taW4taGlzdG9yeSByZWYtc2V0IHJlZmVyIHJlZmVyLWNsb2p1cmUgcmVpZnkgcmVsZWFz
ZS1wZW5kaW5nLXNlbmRzIHJlbSByZW1vdmUgcmVtb3ZlLWFsbC1tZXRob2RzICIgKworICAgICAg
ICAicmVtb3ZlLW1ldGhvZCByZW1vdmUtbnMgcmVtb3ZlLXdhdGNoIHJlcGVhdCByZXBlYXRlZGx5
IHJlcGxhY2UgcmVwbGljYXRlIHJlcXVpcmUgcmVzZXQhIHJlc2V0LW1ldGEhIHJlc29sdmUgcmVz
dCAiICsKKyAgICAgICAgInJlc3RhcnQtYWdlbnQgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVy
c2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNl
bmQtb2ZmIHNlcSBzZXE/ICIgKworICAgICAgICAic2VxdWUgc2VxdWVuY2Ugc2VxdWVudGlhbD8g
c2V0IHNldC1lcnJvci1oYW5kbGVyISBzZXQtZXJyb3ItbW9kZSEgc2V0LXZhbGlkYXRvciEgc2V0
PyBzaG9ydCBzaG9ydC1hcnJheSBzaG9ydHMgIiArCisgICAgICAgICJzaHVmZmxlIHNodXRkb3du
LWFnZW50cyBzbHVycCBzb21lIHNvbWUtZm4gc29ydCBzb3J0LWJ5IHNvcnRlZC1tYXAgc29ydGVk
LW1hcC1ieSBzb3J0ZWQtc2V0IHNvcnRlZC1zZXQtYnkgc29ydGVkPyAiICsKKyAgICAgICAgInNw
ZWNpYWwtc3ltYm9sPyBzcGl0IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmluZz8gc3RydWN0
IHN0cnVjdC1tYXAgc3VicyBzdWJzZXEgc3VidmVjIHN1cGVycyBzd2FwISBzeW1ib2wgIiArCisg
ICAgICAgICJzeW1ib2w/IHN5bmMgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0
ZXN0IHRoZS1ucyB0aHJlYWQtYm91bmQ/IHRpbWUgdG8tYXJyYXkgdG8tYXJyYXktMmQgdHJhbXBv
bGluZSB0cmFuc2R1Y2UgIiArCisgICAgICAgICJ0cmFuc2llbnQgdHJlZS1zZXEgdHJ1ZT8gdHlw
ZSB1bmNoZWNrZWQtYWRkIHVuY2hlY2tlZC1hZGQtaW50IHVuY2hlY2tlZC1ieXRlIHVuY2hlY2tl
ZC1jaGFyIHVuY2hlY2tlZC1kZWMgIiArCisgICAgICAgICJ1bmNoZWNrZWQtZGVjLWludCB1bmNo
ZWNrZWQtZGl2aWRlLWludCB1bmNoZWNrZWQtZG91YmxlIHVuY2hlY2tlZC1mbG9hdCB1bmNoZWNr
ZWQtaW5jIHVuY2hlY2tlZC1pbmMtaW50ICIgKworICAgICAgICAidW5jaGVja2VkLWludCB1bmNo
ZWNrZWQtbG9uZyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW11bHRpcGx5LWludCB1bmNo
ZWNrZWQtbmVnYXRlIHVuY2hlY2tlZC1uZWdhdGUtaW50ICIrCisgICAgICAgICJ1bmNoZWNrZWQt
cmVtYWluZGVyLWludCB1bmNoZWNrZWQtc2hvcnQgdW5jaGVja2VkLXN1YnRyYWN0IHVuY2hlY2tl
ZC1zdWJ0cmFjdC1pbnQgdW5kZXJpdmUgdW5xdW90ZSAiICsKKyAgICAgICAgInVucXVvdGUtc3Bs
aWNpbmcgdXBkYXRlIHVwZGF0ZS1pbiB1cGRhdGUtcHJveHkgdXNlIHZhbCB2YWxzIHZhci1nZXQg
dmFyLXNldCB2YXI/IHZhcnktbWV0YSB2ZWMgdmVjdG9yIHZlY3Rvci1vZiAiICsKKyAgICAgICAg
InZlY3Rvcj8gdm9sYXRpbGUhIHZvbGF0aWxlPyB2cmVzZXQhIHZzd2FwISB3aGVuIHdoZW4tZmly
c3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3
aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCAiICsKKyAgICAgICAgIndpdGgtbG9jYWwt
dmFycyB3aXRoLW1ldGEgd2l0aC1vcGVuIHdpdGgtb3V0LXN0ciB3aXRoLXByZWNpc2lvbiB3aXRo
LXJlZGVmcyB3aXRoLXJlZGVmcy1mbiB4bWwtc2VxIHplcm8/IHppcG1hcCAiICsKKyAgICAgICAg
IipkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiBhcy0+IGNvbmQtPiBjb25kLT4+IHJlZHVjZWQgcmVk
dWNlZD8gc2VuZC12aWEgc2V0LWFnZW50LXNlbmQtZXhlY3V0b3IhICIgKworICAgICAgICAic2V0
LWFnZW50LXNlbmQtb2ZmLWV4ZWN1dG9yISBzb21lLT4gc29tZS0+PiIpOwogCiAgICAgdmFyIGlu
ZGVudEtleXMgPSBtYWtlS2V5d29yZHMoCiAgICAgICAgIC8vIEJ1aWx0LWlucwotICAgICAgICAi
bnMgZm4gZGVmIGRlZm4gZGVmbWV0aG9kIGJvdW5kLWZuIGlmIGlmLW5vdCBjYXNlIGNvbmRwIHdo
ZW4gd2hpbGUgd2hlbi1ub3Qgd2hlbi1maXJzdCBkbyBmdXR1cmUgY29tbWVudCBkb3RvIGxvY2tp
bmcgcHJveHkgd2l0aC1vcGVuIHdpdGgtcHJlY2lzaW9uIHJlaWZ5IGRlZnR5cGUgZGVmcmVjb3Jk
IGRlZnByb3RvY29sIGV4dGVuZCBleHRlbmQtcHJvdG9jb2wgZXh0ZW5kLXR5cGUgdHJ5IGNhdGNo
ICIgKworICAgICAgICAibnMgZm4gZGVmIGRlZm4gZGVmbWV0aG9kIGJvdW5kLWZuIGlmIGlmLW5v
dCBjYXNlIGNvbmRwIHdoZW4gd2hpbGUgd2hlbi1ub3Qgd2hlbi1maXJzdCBkbyBmdXR1cmUgY29t
bWVudCBkb3RvICIgKworICAgICAgICAibG9ja2luZyBwcm94eSB3aXRoLW9wZW4gd2l0aC1wcmVj
aXNpb24gcmVpZnkgZGVmdHlwZSBkZWZyZWNvcmQgZGVmcHJvdG9jb2wgZXh0ZW5kIGV4dGVuZC1w
cm90b2NvbCBleHRlbmQtdHlwZSAiICsKKyAgICAgICAgInRyeSBjYXRjaCAiICsKIAogICAgICAg
ICAvLyBCaW5kaW5nIGZvcm1zCiAgICAgICAgICJsZXQgbGV0Zm4gYmluZGluZyBsb29wIGZvciBk
b3NlcSBkb3RpbWVzIHdoZW4tbGV0IGlmLWxldCAiICsKQEAgLTU5LDcgKzExNSw4IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAg
IHNpZ246IC9bKy1dLywKICAgICAgICAgZXhwb25lbnQ6IC9lL2ksCiAgICAgICAgIGtleXdvcmRf
Y2hhcjogL1teXHNcKFxbXDtcKVxdXS8sCi0gICAgICAgIHN5bWJvbDogL1tcdyorIVwtXC5fPzo8
PlwvXHhhMS1cdWZmZmZdLworICAgICAgICBzeW1ib2w6IC9bXHcqKyFcLVwuXz86PD5cL1x4YTEt
XHVmZmZmXS8sCisgICAgICAgIGJsb2NrX2luZGVudDogL14oPzpkZWZ8d2l0aClbXlwvXSskfFwv
KD86ZGVmfHdpdGgpLwogICAgIH07CiAKICAgICBmdW5jdGlvbiBzdGF0ZVN0YWNrKGluZGVudCwg
dHlwZSwgcHJldikgeyAvLyByZXByZXNlbnRzIGEgc3RhdGUgc3RhY2sgb2JqZWN0CkBAIC05Niw2
ICsxNTMsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0
aW9ucykgewogICAgICAgICAgICAgaWYgKCAnLicgPT0gc3RyZWFtLnBlZWsoKSApIHsKICAgICAg
ICAgICAgICAgICBzdHJlYW0uZWF0KCcuJyk7CiAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdo
aWxlKHRlc3RzLmRpZ2l0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJy8nID09IHN0cmVhbS5w
ZWVrKCkgKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgnLycpOworICAgICAgICAgICAg
ICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5kaWdpdCk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICggc3RyZWFtLmVhdCh0ZXN0cy5leHBvbmVudCkgKSB7CkBAIC0xMzksNyArMTk5
LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMp
IHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgICAg
ICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUg
IT0gInN0cmluZyIgJiYgc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVs
bDsKQEAgLTE4Nyw3ICsyNDcsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBm
dW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIChpbmRlbnRLZXlzLnBy
b3BlcnR5SXNFbnVtZXJhYmxlKGtleVdvcmQpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvXig/OmRlZnx3aXRoKS8udGVzdChrZXlXb3JkKSkp
IHsgLy8gaW5kZW50LXdvcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RzLmJsb2NrX2luZGVudC50ZXN0KGtleVdvcmQpKSkgeyAvLyBpbmRl
bnQtd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5k
ZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7IC8vIG5vbi1pbmRlbnQgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdlIGNvbnRpbnVlIGVhdGluZyB0aGUgc3BhY2VzCkBAIC0yNDAsNSArMzAwLDcgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKIH0pOwog
CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jbG9qdXJlIiwgImNsb2p1cmUiKTsKK0Nv
ZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNsb2p1cmVzY3JpcHQiLCAiY2xvanVyZSIpOwor
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9lZG4iLCAiY2xvanVyZSIpOwogCiB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcwppbmRleCA3
MDMwMjY4Li43YzQ3YmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJy
YWNrZXRzLmpzCkBAIC02Myw3ICs2Myw3IEBACiAgICAgfQogICAgIGZvciAodmFyIGkgPSByYW5n
ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0u
aGVhZDsKLSAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAx
KSwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CisgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIs
IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSksICIr
ZGVsZXRlIik7CiAgICAgfQogICB9CiAKQEAgLTkwLDYgKzkwLDEyIEBACiAgICAgfSk7CiAgIH0K
IAorICBmdW5jdGlvbiBjb250cmFjdFNlbGVjdGlvbihzZWwpIHsKKyAgICB2YXIgaW52ZXJ0ZWQg
PSBDb2RlTWlycm9yLmNtcFBvcyhzZWwuYW5jaG9yLCBzZWwuaGVhZCkgPiAwOworICAgIHJldHVy
biB7YW5jaG9yOiBuZXcgUG9zKHNlbC5hbmNob3IubGluZSwgc2VsLmFuY2hvci5jaCArIChpbnZl
cnRlZCA/IC0xIDogMSkpLAorICAgICAgICAgICAgaGVhZDogbmV3IFBvcyhzZWwuaGVhZC5saW5l
LCBzZWwuaGVhZC5jaCArIChpbnZlcnRlZCA/IDEgOiAtMSkpfTsKKyAgfQorCiAgIGZ1bmN0aW9u
IGhhbmRsZUNoYXIoY20sIGNoKSB7CiAgICAgdmFyIGNvbmYgPSBnZXRDb25maWcoY20pOwogICAg
IGlmICghY29uZiB8fCBjbS5nZXRPcHRpb24oImRpc2FibGVJbnB1dCIpKSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOwpAQCAtMTAzLDE0ICsxMDksMTYgQEAKICAgICB2YXIgcmFuZ2VzID0gY20ubGlz
dFNlbGVjdGlvbnMoKTsKICAgICB2YXIgb3BlbmluZyA9IHBvcyAlIDIgPT0gMDsKIAotICAgIHZh
ciB0eXBlLCBuZXh0OworICAgIHZhciB0eXBlOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFu
Z2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV0sIGN1ciA9IHJh
bmdlLmhlYWQsIGN1clR5cGU7CiAgICAgICB2YXIgbmV4dCA9IGNtLmdldFJhbmdlKGN1ciwgUG9z
KGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CiAgICAgICBpZiAob3BlbmluZyAmJiAhcmFuZ2UuZW1w
dHkoKSkgewogICAgICAgICBjdXJUeXBlID0gInN1cnJvdW5kIjsKICAgICAgIH0gZWxzZSBpZiAo
KGlkZW50aWNhbCB8fCAhb3BlbmluZykgJiYgbmV4dCA9PSBjaCkgewotICAgICAgICBpZiAodHJp
cGxlcy5pbmRleE9mKGNoKSA+PSAwICYmIGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBj
dXIuY2ggKyAzKSkgPT0gY2ggKyBjaCArIGNoKQorICAgICAgICBpZiAoaWRlbnRpY2FsICYmIHN0
cmluZ1N0YXJ0c0FmdGVyKGNtLCBjdXIpKQorICAgICAgICAgIGN1clR5cGUgPSAiYm90aCI7Cisg
ICAgICAgIGVsc2UgaWYgKHRyaXBsZXMuaW5kZXhPZihjaCkgPj0gMCAmJiBjbS5nZXRSYW5nZShj
dXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMykpID09IGNoICsgY2ggKyBjaCkKICAgICAgICAg
ICBjdXJUeXBlID0gInNraXBUaHJlZSI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBjdXJUeXBl
ID0gInNraXAiOwpAQCAtMTQ1LDYgKzE1MywxMCBAQAogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNlbHMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ld
ICsgcmlnaHQ7CiAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsICJhcm91bmQiKTsK
KyAgICAgICAgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCkuc2xpY2UoKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzZWxzLmxlbmd0aDsgaSsrKQorICAgICAgICAgIHNlbHNbaV0gPSBj
b250cmFjdFNlbGVjdGlvbihzZWxzW2ldKTsKKyAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhzZWxz
KTsKICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYm90aCIpIHsKICAgICAgICAgY20ucmVwbGFj
ZVNlbGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpOwogICAgICAgICBjbS50cmlnZ2VyRWxlY3Ry
aWMobGVmdCArIHJpZ2h0KTsKQEAgLTE4Miw0ICsxOTQsOSBAQAogICAgICAgc3RyZWFtLnN0YXJ0
ID0gc3RyZWFtLnBvczsKICAgICB9CiAgIH0KKworICBmdW5jdGlvbiBzdHJpbmdTdGFydHNBZnRl
cihjbSwgcG9zKSB7CisgICAgdmFyIHRva2VuID0gY20uZ2V0VG9rZW5BdChQb3MocG9zLmxpbmUs
IHBvcy5jaCArIDEpKQorICAgIHJldHVybiAvXGJzdHJpbmcvLnRlc3QodG9rZW4udHlwZSkgJiYg
dG9rZW4uc3RhcnQgPT0gcG9zLmNoCisgIH0KIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNz
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvY29kZW1pcnJvci5jc3MKaW5kZXggMzU0MzUyMy4uMmE2YTI2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2Rl
bWlycm9yLmNzcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCkBAIC01Miw3ICs1Miw3IEBACiB9CiAuY20t
ZmF0LWN1cnNvciAuQ29kZU1pcnJvci1jdXJzb3IgewogICB3aWR0aDogYXV0bzsKLSAgYm9yZGVy
OiAwOworICBib3JkZXI6IDAgIWltcG9ydGFudDsKICAgYmFja2dyb3VuZDogIzdlNzsKIH0KIC5j
bS1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewpAQCAtODgsOCArODgsMTQgQEAK
IAogLmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBpbmhl
cml0OyB9CiAKKy5Db2RlTWlycm9yLXJ1bGVycyB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
bGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogLTUwcHg7IGJvdHRvbTogLTIwcHg7CisgIG92ZXJmbG93
OiBoaWRkZW47Cit9CiAuQ29kZU1pcnJvci1ydWxlciB7CiAgIGJvcmRlci1sZWZ0OiAxcHggc29s
aWQgI2NjYzsKKyAgdG9wOiAwOyBib3R0b206IDA7CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKIH0K
IApAQCAtMTY1LDcgKzE3MSw3IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25t
YXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIH0KIAogLyogVGhlIGZha2UsIHZpc2libGUg
c2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwotICAgYmVm
b3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFu
ZAorICAgYmVmb3JlIGFjdHVhbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNo
YWtpbmcgYW5kCiAgICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KIC5Db2RlTWlycm9yLXZzY3Jv
bGxiYXIsIC5Db2RlTWlycm9yLWhzY3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxs
ZXIsIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICBwb3NpdGlvbjogYWJzb2x1dGU7CkBA
IC0xOTEsMTYgKzE5NywxNSBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0
Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAKIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICBw
b3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKKyAgbWluLWhlaWdodDogMTAwJTsK
ICAgei1pbmRleDogMzsKIH0KIC5Db2RlTWlycm9yLWd1dHRlciB7CiAgIHdoaXRlLXNwYWNlOiBu
b3JtYWw7CiAgIGhlaWdodDogMTAwJTsKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB2ZXJ0
aWNhbC1hbGlnbjogdG9wOwogICBtYXJnaW4tYm90dG9tOiAtMzBweDsKLSAgLyogSGFjayB0byBt
YWtlIElFNyBiZWhhdmUgKi8KLSAgKnpvb206MTsKLSAgKmRpc3BsYXk6aW5saW5lOwogfQogLkNv
ZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIgewogICBwb3NpdGlvbjogYWJzb2x1dGU7CkBAIC0yNDQs
NiArMjQ5LDggQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJh
Y2tldCB7Y29sb3I6ICNmMjI7fQogICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgIG92ZXJmbG93OiB2
aXNpYmxlOwogICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OworICAt
d2Via2l0LWZvbnQtdmFyaWFudC1saWdhdHVyZXM6IGNvbnRleHR1YWw7CisgIGZvbnQtdmFyaWFu
dC1saWdhdHVyZXM6IGNvbnRleHR1YWw7CiB9CiAuQ29kZU1pcnJvci13cmFwIHByZSB7CiAgIHdv
cmQtd3JhcDogYnJlYWstd29yZDsKQEAgLTI4Nyw3ICsyOTQsMTAgQEAgZGl2LkNvZGVNaXJyb3Ig
c3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICB2aXNp
YmlsaXR5OiBoaWRkZW47CiB9CiAKLS5Db2RlTWlycm9yLWN1cnNvciB7IHBvc2l0aW9uOiBhYnNv
bHV0ZTsgfQorLkNvZGVNaXJyb3ItY3Vyc29yIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBw
b2ludGVyLWV2ZW50czogbm9uZTsKK30KIC5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsgcG9zaXRp
b246IHN0YXRpYzsgfQogCiBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKQEAgLTMxNCw5ICszMjQs
NiBAQCBkaXYuQ29kZU1pcnJvci1kcmFnY3Vyc29ycyB7CiAgIGJhY2tncm91bmQ6IHJnYmEoMjU1
LCAyNTUsIDAsIC40KTsKIH0KIAotLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVy
bmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwotLkNvZGVNaXJyb3Igc3BhbiB7
ICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207IH0KLQogLyogVXNlZCB0byBmb3JjZSBhIGJv
cmRlciBtb2RlbCBmb3IgYSBub2RlICovCiAuY20tZm9yY2UtYm9yZGVyIHsgcGFkZGluZy1yaWdo
dDogLjFweDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKaW5k
ZXggODBhNzA5Ni4uOTRmMWFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1p
cnJvci5qcwpAQCAtNyw0OTA2ICs3LDc3MDcgQEAKIC8vIFlvdSBjYW4gZmluZCBzb21lIHRlY2hu
aWNhbCBiYWNrZ3JvdW5kIGZvciBzb21lIG9mIHRoZSBjb2RlIGJlbG93CiAvLyBhdCBodHRwOi8v
bWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvI2NtLWludGVybmFscyAuCiAKLShmdW5jdGlvbihtb2Qp
IHsKLSAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0g
Im9iamVjdCIpIC8vIENvbW1vbkpTCi0gICAgbW9kdWxlLmV4cG9ydHMgPSBtb2QoKTsKLSAgZWxz
ZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAot
ICAgIHJldHVybiBkZWZpbmUoW10sIG1vZCk7Ci0gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYK
LSAgICB0aGlzLkNvZGVNaXJyb3IgPSBtb2QoKTsKLX0pKGZ1bmN0aW9uKCkgewotICAidXNlIHN0
cmljdCI7Ci0KLSAgLy8gQlJPV1NFUiBTTklGRklORwotCi0gIC8vIEtsdWRnZXMgZm9yIGJ1Z3Mg
YW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQotICAvLyBkZXRl
Y3RlZCBhcmUgZW5hYmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgotCi0gIHZh
ciBnZWNrbyA9IC9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIg
aWVfdXB0bzEwID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBp
ZV8xMXVwID0gL1RyaWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4ZWMobmF2
aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBpZSA9IGllX3VwdG8xMCB8fCBpZV8xMXVwOwotICB2
YXIgaWVfdmVyc2lvbiA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUg
fHwgNiA6IGllXzExdXBbMV0pOwotICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOwotICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XC9cZCtcLlxk
Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIGNocm9tZSA9IC9DaHJvbWVcLy8u
dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIHByZXN0byA9IC9PcGVyYVwvLy50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50
ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwotICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBP
UyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZh
ciBwaGFudG9tID0gL1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLQotICB2
YXIgaW9zID0gL0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9Nb2Jp
bGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgLy8gVGhpcyBpcyB3b2VmdWxs
eSBpbmNvbXBsZXRlLiBTdWdnZXN0aW9ucyBmb3IgYWx0ZXJuYXRpdmUgbWV0aG9kcyB3ZWxjb21l
LgotICB2YXIgbW9iaWxlID0gaW9zIHx8IC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEg
TWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAg
dmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7Ci0gIHZhciB3
aW5kb3dzID0gL3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKLQotICB2YXIgcHJlc3Rv
X3ZlcnNpb24gPSBwcmVzdG8gJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwv
KFxkKlwuXGQqKS8pOwotICBpZiAocHJlc3RvX3ZlcnNpb24pIHByZXN0b192ZXJzaW9uID0gTnVt
YmVyKHByZXN0b192ZXJzaW9uWzFdKTsKLSAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192
ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9Ci0gIC8vIFNv
bWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQv
Y3RybCBvbiBPUyBYCi0gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJl
c3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEp
KTsKLSAgdmFyIGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmIGllX3ZlcnNpb24g
Pj0gOSk7Ci0KLSAgLy8gT3B0aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJl
IG5vdCB1c2VkLgotICB2YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBzZWRT
cGFucyA9IGZhbHNlOwotCi0gIC8vIEVESVRPUiBDT05TVFJVQ1RPUgotCi0gIC8vIEEgQ29kZU1p
cnJvciBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0Ci0g
IC8vIHRoYXQgdXNlciBjb2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLgotCi0gIGZ1bmN0aW9u
IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2Yg
Q29kZU1pcnJvcikpIHJldHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucyk7Ci0KLSAg
ICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7
fTsKLSAgICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIG9wdGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFs
dWVzIGFuZCBkZWZhdWx0cy4KLSAgICBjb3B5T2JqKGRlZmF1bHRzLCBvcHRpb25zLCBmYWxzZSk7
Ci0gICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpOwotCi0gICAgdmFyIGRvYyA9
IG9wdGlvbnMudmFsdWU7Ci0gICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpIGRvYyA9IG5l
dyBEb2MoZG9jLCBvcHRpb25zLm1vZGUsIG51bGwsIG9wdGlvbnMubGluZVNlcGFyYXRvcik7Ci0g
ICAgdGhpcy5kb2MgPSBkb2M7Ci0KLSAgICB2YXIgaW5wdXQgPSBuZXcgQ29kZU1pcnJvci5pbnB1
dFN0eWxlc1tvcHRpb25zLmlucHV0U3R5bGVdKHRoaXMpOwotICAgIHZhciBkaXNwbGF5ID0gdGhp
cy5kaXNwbGF5ID0gbmV3IERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQpOwotICAgIGRpc3BsYXku
d3JhcHBlci5Db2RlTWlycm9yID0gdGhpczsKLSAgICB1cGRhdGVHdXR0ZXJzKHRoaXMpOwotICAg
IHRoZW1lQ2hhbmdlZCh0aGlzKTsKLSAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAg
ICB0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwot
ICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSBkaXNwbGF5LmlucHV0LmZvY3Vz
KCk7Ci0gICAgaW5pdFNjcm9sbGJhcnModGhpcyk7Ci0KLSAgICB0aGlzLnN0YXRlID0gewotICAg
ICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFwcyBhZGRlZCBieSBhZGRLZXlNYXAKLSAgICAg
IG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRP
dmVybGF5Ci0gICAgICBtb2RlR2VuOiAwLCAgIC8vIGJ1bXBlZCB3aGVuIG1vZGUvb3ZlcmxheSBj
aGFuZ2VzLCB1c2VkIHRvIGludmFsaWRhdGUgaGlnaGxpZ2h0aW5nIGluZm8KLSAgICAgIG92ZXJ3
cml0ZTogZmFsc2UsCi0gICAgICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsCi0gICAgICBmb2N1
c2VkOiBmYWxzZSwKLSAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1c2VkIHRvIGRpc2Fi
bGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9ubHkgbW9kZQotICAg
ICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNv
Z25pemUgcGFzdGUvY3V0IGVkaXRzIGluIGlucHV0LnBvbGwKLSAgICAgIHNlbGVjdGluZ1RleHQ6
IGZhbHNlLAotICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSwKLSAgICAgIGhpZ2hsaWdodDogbmV3
IERlbGF5ZWQoKSwgLy8gc3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAotICAgICAga2V5
U2VxOiBudWxsLCAgLy8gVW5maW5pc2hlZCBrZXkgc2VxdWVuY2UKLSAgICAgIHNwZWNpYWxDaGFy
czogbnVsbAotICAgIH07Ci0KLSAgICB2YXIgY20gPSB0aGlzOwotCi0gICAgLy8gT3ZlcnJpZGUg
bWFnaWMgdGV4dGFyZWEgY29udGVudCByZXN0b3JlIHRoYXQgSUUgc29tZXRpbWVzIGRvZXMKLSAg
ICAvLyBvbiBvdXIgaGlkZGVuIHRleHRhcmVhIG9uIHJlbG9hZAotICAgIGlmIChpZSAmJiBpZV92
ZXJzaW9uIDwgMTEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVz
ZXQodHJ1ZSk7IH0sIDIwKTsKLQotICAgIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyh0aGlzKTsKLSAg
ICBlbnN1cmVHbG9iYWxIYW5kbGVycygpOwotCi0gICAgc3RhcnRPcGVyYXRpb24odGhpcyk7Ci0g
ICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0gICAgYXR0YWNoRG9jKHRoaXMsIGRv
Yyk7Ci0KLSAgICBpZiAoKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IGNtLmhhc0Zv
Y3VzKCkpCi0gICAgICBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsKLSAgICBl
bHNlCi0gICAgICBvbkJsdXIodGhpcyk7Ci0KLSAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9uSGFu
ZGxlcnMpIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKQotICAgICAgb3B0
aW9uSGFuZGxlcnNbb3B0XSh0aGlzLCBvcHRpb25zW29wdF0sIEluaXQpOwotICAgIG1heWJlVXBk
YXRlTGluZU51bWJlcldpZHRoKHRoaXMpOwotICAgIGlmIChvcHRpb25zLmZpbmlzaEluaXQpIG9w
dGlvbnMuZmluaXNoSW5pdCh0aGlzKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29r
cy5sZW5ndGg7ICsraSkgaW5pdEhvb2tzW2ldKHRoaXMpOwotICAgIGVuZE9wZXJhdGlvbih0aGlz
KTsKLSAgICAvLyBTdXBwcmVzcyBvcHRpbWl6ZWxlZ2liaWxpdHkgaW4gV2Via2l0LCBzaW5jZSBp
dCBicmVha3MgdGV4dAotICAgIC8vIG1lYXN1cmluZyBvbiBsaW5lIHdyYXBwaW5nIGJvdW5kYXJp
ZXMuCi0gICAgaWYgKHdlYmtpdCAmJiBvcHRpb25zLmxpbmVXcmFwcGluZyAmJgotICAgICAgICBn
ZXRDb21wdXRlZFN0eWxlKGRpc3BsYXkubGluZURpdikudGV4dFJlbmRlcmluZyA9PSAib3B0aW1p
emVsZWdpYmlsaXR5IikKLSAgICAgIGRpc3BsYXkubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5n
ID0gImF1dG8iOwotICB9Ci0KLSAgLy8gRElTUExBWSBDT05TVFJVQ1RPUgotCi0gIC8vIFRoZSBk
aXNwbGF5IGhhbmRsZXMgdGhlIERPTSBpbnRlZ3JhdGlvbiwgYm90aCBmb3IgaW5wdXQgcmVhZGlu
ZwotICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBu
b2RlcyBhbmQKLSAgLy8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLgotCi0gIGZ1bmN0aW9uIERpc3Bs
YXkocGxhY2UsIGRvYywgaW5wdXQpIHsKLSAgICB2YXIgZCA9IHRoaXM7Ci0gICAgdGhpcy5pbnB1
dCA9IGlucHV0OwotCi0gICAgLy8gQ292ZXJzIGJvdHRvbS1yaWdodCBzcXVhcmUgd2hlbiBib3Ro
IHNjcm9sbGJhcnMgYXJlIHByZXNlbnQuCi0gICAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIiKTsKLSAgICBkLnNjcm9sbGJh
ckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwgInRydWUiKTsKLSAgICAvLyBD
b3ZlcnMgYm90dG9tIG9mIGd1dHRlciB3aGVuIGNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIGlz
IG9uCi0gICAgLy8gYW5kIGggc2Nyb2xsYmFyIGlzIHByZXNlbnQuCi0gICAgZC5ndXR0ZXJGaWxs
ZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci1maWxsZXIiKTsKLSAgICBk
Lmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwgInRydWUiKTsKLSAg
ICAvLyBXaWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBjb2RlLCBwb3NpdGlvbmVkIHRvIGNvdmVyIHRo
ZSB2aWV3cG9ydC4KLSAgICBkLmxpbmVEaXYgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LWNvZGUiKTsKLSAgICAvLyBFbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlc2UgdG8gcmVwcmVzZW50
IHNlbGVjdGlvbiBhbmQgY3Vyc29ycy4KLSAgICBkLnNlbGVjdGlvbkRpdiA9IGVsdCgiZGl2Iiwg
bnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpOwotICAgIGQuY3Vy
c29yRGl2ID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jdXJzb3JzIik7Ci0gICAgLy8g
QSB2aXNpYmlsaXR5OiBoaWRkZW4gZWxlbWVudCB1c2VkIHRvIGZpbmQgdGhlIHNpemUgb2YgdGhp
bmdzLgotICAgIGQubWVhc3VyZSA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItbWVhc3Vy
ZSIpOwotICAgIC8vIFdoZW4gbGluZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYXJlIG1lYXN1
cmVkLCB0aGV5IGFyZSBkcmF3biBpbiB0aGlzLgotICAgIGQubGluZU1lYXN1cmUgPSBlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKTsKLSAgICAvLyBXcmFwcyBldmVyeXRoaW5n
IHRoYXQgbmVlZHMgdG8gZXhpc3QgaW5zaWRlIHRoZSB2ZXJ0aWNhbGx5LXBhZGRlZCBjb29yZGlu
YXRlIHN5c3RlbQotICAgIGQubGluZVNwYWNlID0gZWx0KCJkaXYiLCBbZC5tZWFzdXJlLCBkLmxp
bmVNZWFzdXJlLCBkLnNlbGVjdGlvbkRpdiwgZC5jdXJzb3JEaXYsIGQubGluZURpdl0sCi0gICAg
ICAgICAgICAgICAgICAgICAgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9u
ZSIpOwotICAgIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmll
dy4KLSAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAi
Q29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwotICAgIC8v
IFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLgot
ICAgIGQuc2l6ZXIgPSBlbHQoImRpdiIsIFtkLm1vdmVyXSwgIkNvZGVNaXJyb3Itc2l6ZXIiKTsK
LSAgICBkLnNpemVyV2lkdGggPSBudWxsOwotICAgIC8vIEJlaGF2aW9yIG9mIGVsdHMgd2l0aCBv
dmVyZmxvdzogYXV0byBhbmQgcGFkZGluZyBpcwotICAgIC8vIGluY29uc2lzdGVudCBhY3Jvc3Mg
YnJvd3NlcnMuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlCi0gICAgLy8gc2Nyb2xsYWJsZSBh
cmVhIGlzIGJpZyBlbm91Z2guCi0gICAgZC5oZWlnaHRGb3JjZXIgPSBlbHQoImRpdiIsIG51bGws
IG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIiArIHNjcm9sbGVyR2FwICsgInB4
OyB3aWR0aDogMXB4OyIpOwotICAgIC8vIFdpbGwgY29udGFpbiB0aGUgZ3V0dGVycywgaWYgYW55
LgotICAgIGQuZ3V0dGVycyA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVycyIp
OwotICAgIGQubGluZUd1dHRlciA9IG51bGw7Ci0gICAgLy8gQWN0dWFsIHNjcm9sbGFibGUgZWxl
bWVudC4KLSAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3Jj
ZXIsIGQuZ3V0dGVyc10sICJDb2RlTWlycm9yLXNjcm9sbCIpOwotICAgIGQuc2Nyb2xsZXIuc2V0
QXR0cmlidXRlKCJ0YWJJbmRleCIsICItMSIpOwotICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNo
IHRoZSBlZGl0b3IgbGl2ZXMuCi0gICAgZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5zY3JvbGxi
YXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKLQot
ICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZyAobm90IHBlcmZlY3QsIGhlbmNlIElF
NyBub3QgcmVhbGx5IGJlaW5nIHN1cHBvcnRlZCkKLSAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8
IDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRp
bmdSaWdodCA9IDA7IH0KLSAgICBpZiAoIXdlYmtpdCAmJiAhKGdlY2tvICYmIG1vYmlsZSkpIGQu
c2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKLQotICAgIGlmIChwbGFjZSkgewotICAgICAgaWYg
KHBsYWNlLmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOwotICAgICAg
ZWxzZSBwbGFjZShkLndyYXBwZXIpOwotICAgIH0KLQotICAgIC8vIEN1cnJlbnQgcmVuZGVyZWQg
cmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLgotICAgIGQudmlld0Zy
b20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDsKLSAgICBkLnJlcG9ydGVkVmlld0Zyb20gPSBkLnJl
cG9ydGVkVmlld1RvID0gZG9jLmZpcnN0OwotICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBy
ZW5kZXJlZCBsaW5lcy4KLSAgICBkLnZpZXcgPSBbXTsKLSAgICBkLnJlbmRlcmVkVmlldyA9IG51
bGw7Ci0gICAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4g
aXQgd2FzIHJlbmRlcmVkCi0gICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmll
dy4KLSAgICBkLmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwotICAgIC8vIEVtcHR5IHNwYWNlIChp
biBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3Ci0gICAgZC52aWV3T2Zmc2V0ID0gMDsKLSAgICBkLmxh
c3RXcmFwSGVpZ2h0ID0gZC5sYXN0V3JhcFdpZHRoID0gMDsKLSAgICBkLnVwZGF0ZUxpbmVOdW1i
ZXJzID0gbnVsbDsKLQotICAgIGQubmF0aXZlQmFyV2lkdGggPSBkLmJhckhlaWdodCA9IGQuYmFy
V2lkdGggPSAwOwotICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTsKLQotICAgIC8vIFVz
ZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5lY2Vzc2FyeSAo
d2hlbgotICAgIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgY3Jvc3NlcyBhIGJvdW5kYXJ5IHRoYXQg
bWFrZXMgaXRzIHdpZHRoIGNoYW5nZSkKLSAgICBkLmxpbmVOdW1XaWR0aCA9IGQubGluZU51bUlu
bmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7Ci0gICAgLy8gU2V0IHRvIHRydWUgd2hl
biBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpcwotICAgIC8vIGFkZGVk
LiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlzIHNraXBwZWQgd2hl
bgotICAgIC8vIHRoaXMgaXMgZmFsc2UuCi0gICAgZC5hbGlnbldpZGdldHMgPSBmYWxzZTsKLQot
ICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRk
aW5nSCA9IG51bGw7Ci0KLSAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28g
dGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKLSAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMg
d2hlbiBzY3JvbGxpbmcuCi0gICAgZC5tYXhMaW5lID0gbnVsbDsKLSAgICBkLm1heExpbmVMZW5n
dGggPSAwOwotICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIFVzZWQgZm9y
IG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHkKLSAgICBkLndoZWVsRFggPSBk
LndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7Ci0KLSAgICAv
LyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLgotICAgIGQuc2hpZnQgPSBmYWxzZTsKLQot
ICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hldGhlciBhbnl0aGluZyBoYXBwZW5lZCBzaW5jZSB0aGUg
Y29udGV4dCBtZW51Ci0gICAgLy8gd2FzIG9wZW5lZC4KLSAgICBkLnNlbEZvckNvbnRleHRNZW51
ID0gbnVsbDsKLQotICAgIGQuYWN0aXZlVG91Y2ggPSBudWxsOwotCi0gICAgaW5wdXQuaW5pdChk
KTsKLSAgfQotCi0gIC8vIFNUQVRFIFVQREFURVMKLQotICAvLyBVc2VkIHRvIGdldCB0aGUgZWRp
dG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdoZW4gb3B0aW9ucyBjaGFuZ2UuCi0K
LSAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKLSAgICBjbS5kb2MubW9kZSA9IENvZGVNaXJyb3Iu
Z2V0TW9kZShjbS5vcHRpb25zLCBjbS5kb2MubW9kZU9wdGlvbik7Ci0gICAgcmVzZXRNb2RlU3Rh
dGUoY20pOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRNb2RlU3RhdGUoY20pIHsKLSAgICBjbS5k
b2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5l
LnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgICAgaWYgKGxpbmUuc3R5bGVzKSBsaW5lLnN0eWxlcyA9
IG51bGw7Ci0gICAgfSk7Ci0gICAgY20uZG9jLmZyb250aWVyID0gY20uZG9jLmZpcnN0OwotICAg
IHN0YXJ0V29ya2VyKGNtLCAxMDApOwotICAgIGNtLnN0YXRlLm1vZGVHZW4rKzsKLSAgICBpZiAo
Y20uY3VyT3ApIHJlZ0NoYW5nZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5n
ZWQoY20pIHsKLSAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGFkZENs
YXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwotICAgICAgY20uZGlz
cGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9ICIiOwotICAgICAgY20uZGlzcGxheS5zaXplcldp
ZHRoID0gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBw
ZXIsICJDb2RlTWlycm9yLXdyYXAiKTsKLSAgICAgIGZpbmRNYXhMaW5lKGNtKTsKLSAgICB9Ci0g
ICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7Ci0gICAgcmVnQ2hhbmdlKGNtKTsKLSAgICBjbGVh
ckNhY2hlcyhjbSk7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpe3VwZGF0ZVNjcm9sbGJhcnMo
Y20pO30sIDEwMCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBlc3RpbWF0
ZXMgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHRvIHVzZSBhcwotICAvLyBmaXJzdCBhcHByb3hpbWF0
aW9uIHVudGlsIHRoZSBsaW5lIGJlY29tZXMgdmlzaWJsZSAoYW5kIGlzIHRodXMKLSAgLy8gcHJv
cGVybHkgbWVhc3VyYWJsZSkuCi0gIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7Ci0gICAg
dmFyIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxp
bmVXcmFwcGluZzsKLSAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAz
KTsKLSAgICByZXR1cm4gZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmVJc0hpZGRlbihj
bS5kb2MsIGxpbmUpKSByZXR1cm4gMDsKLQotICAgICAgdmFyIHdpZGdldHNIZWlnaHQgPSAwOwot
ICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHdpZGdl
dHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhlaWdodDsKKyhmdW5jdGlvbiAoZ2xvYmFsLCBm
YWN0b3J5KSB7CisgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxl
ICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDoKKyAgdHlwZW9m
IGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDoK
KyAgKGdsb2JhbC5Db2RlTWlycm9yID0gZmFjdG9yeSgpKTsKK30odGhpcywgKGZ1bmN0aW9uICgp
IHsgJ3VzZSBzdHJpY3QnOworCisvLyBLbHVkZ2VzIGZvciBidWdzIGFuZCBiZWhhdmlvciBkaWZm
ZXJlbmNlcyB0aGF0IGNhbid0IGJlIGZlYXR1cmUKKy8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJh
c2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuCit2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9y
LnVzZXJBZ2VudAordmFyIHBsYXRmb3JtID0gbmF2aWdhdG9yLnBsYXRmb3JtCisKK3ZhciBnZWNr
byA9IC9nZWNrb1wvXGQvaS50ZXN0KHVzZXJBZ2VudCkKK3ZhciBpZV91cHRvMTAgPSAvTVNJRSBc
ZC8udGVzdCh1c2VyQWdlbnQpCit2YXIgaWVfMTF1cCA9IC9UcmlkZW50XC8oPzpbNy05XXxcZHsy
LH0pXC4uKnJ2OihcZCspLy5leGVjKHVzZXJBZ2VudCkKK3ZhciBpZSA9IGllX3VwdG8xMCB8fCBp
ZV8xMXVwCit2YXIgaWVfdmVyc2lvbiA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1
bWVudE1vZGUgfHwgNiA6IGllXzExdXBbMV0pCit2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0
KHVzZXJBZ2VudCkKK3ZhciBxdHdlYmtpdCA9IHdlYmtpdCAmJiAvUXRcL1xkK1wuXGQrLy50ZXN0
KHVzZXJBZ2VudCkKK3ZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QodXNlckFnZW50KQordmFy
IHByZXN0byA9IC9PcGVyYVwvLy50ZXN0KHVzZXJBZ2VudCkKK3ZhciBzYWZhcmkgPSAvQXBwbGUg
Q29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvcikKK3ZhciBtYWNfZ2VNb3VudGFpbkxpb24g
PSAvTWFjIE9TIFggMVxkXEQoWzgtOV18XGRcZClcRC8udGVzdCh1c2VyQWdlbnQpCit2YXIgcGhh
bnRvbSA9IC9QaGFudG9tSlMvLnRlc3QodXNlckFnZW50KQorCit2YXIgaW9zID0gL0FwcGxlV2Vi
S2l0Ly50ZXN0KHVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KHVzZXJBZ2VudCkKKy8v
IFRoaXMgaXMgd29lZnVsbHkgaW5jb21wbGV0ZS4gU3VnZ2VzdGlvbnMgZm9yIGFsdGVybmF0aXZl
IG1ldGhvZHMgd2VsY29tZS4KK3ZhciBtb2JpbGUgPSBpb3MgfHwgL0FuZHJvaWR8d2ViT1N8Qmxh
Y2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHVzZXJBZ2VudCkK
K3ZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChwbGF0Zm9ybSkKK3ZhciBjaHJvbWVPUyA9IC9c
YkNyT1NcYi8udGVzdCh1c2VyQWdlbnQpCit2YXIgd2luZG93cyA9IC93aW4vaS50ZXN0KHBsYXRm
b3JtKQorCit2YXIgcHJlc3RvX3ZlcnNpb24gPSBwcmVzdG8gJiYgdXNlckFnZW50Lm1hdGNoKC9W
ZXJzaW9uXC8oXGQqXC5cZCopLykKK2lmIChwcmVzdG9fdmVyc2lvbikgeyBwcmVzdG9fdmVyc2lv
biA9IE51bWJlcihwcmVzdG9fdmVyc2lvblsxXSkgfQoraWYgKHByZXN0b192ZXJzaW9uICYmIHBy
ZXN0b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlIH0KKy8v
IFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBj
bWQvY3RybCBvbiBPUyBYCit2YXIgZmxpcEN0cmxDbWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IHBy
ZXN0byAmJiAocHJlc3RvX3ZlcnNpb24gPT0gbnVsbCB8fCBwcmVzdG9fdmVyc2lvbiA8IDEyLjEx
KSkKK3ZhciBjYXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49
IDkpCisKK2Z1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIihefFxc
cykiICsgY2xzICsgIig/OiR8XFxzKVxccyoiKSB9CisKK3ZhciBybUNsYXNzID0gZnVuY3Rpb24o
bm9kZSwgY2xzKSB7CisgIHZhciBjdXJyZW50ID0gbm9kZS5jbGFzc05hbWUKKyAgdmFyIG1hdGNo
ID0gY2xhc3NUZXN0KGNscykuZXhlYyhjdXJyZW50KQorICBpZiAobWF0Y2gpIHsKKyAgICB2YXIg
YWZ0ZXIgPSBjdXJyZW50LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKQorICAg
IG5vZGUuY2xhc3NOYW1lID0gY3VycmVudC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAoYWZ0ZXIg
PyBtYXRjaFsxXSArIGFmdGVyIDogIiIpCisgIH0KK30KKworZnVuY3Rpb24gcmVtb3ZlQ2hpbGRy
ZW4oZSkgeworICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4g
MDsgLS1jb3VudCkKKyAgICB7IGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSB9CisgIHJldHVy
biBlCit9CisKK2Z1bmN0aW9uIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHBhcmVudCwgZSkgeworICBy
ZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKQorfQorCitmdW5jdGlv
biBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7CisgIHZhciBlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCh0YWcpCisgIGlmIChjbGFzc05hbWUpIHsgZS5jbGFzc05hbWUgPSBj
bGFzc05hbWUgfQorICBpZiAoc3R5bGUpIHsgZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGUgfQorICBp
ZiAodHlwZW9mIGNvbnRlbnQgPT0gInN0cmluZyIpIHsgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShjb250ZW50KSkgfQorICBlbHNlIGlmIChjb250ZW50KSB7IGZvciAodmFy
IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7ICsraSkgeyBlLmFwcGVuZENoaWxkKGNvbnRlbnRb
aV0pIH0gfQorICByZXR1cm4gZQorfQorCit2YXIgcmFuZ2UKK2lmIChkb2N1bWVudC5jcmVhdGVS
YW5nZSkgeyByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZE5vZGUpIHsKKyAg
dmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpCisgIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9k
ZSwgZW5kKQorICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KQorICByZXR1cm4gcgorfSB9CitlbHNl
IHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7CisgIHZhciByID0gZG9jdW1l
bnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKQorICB0cnkgeyByLm1vdmVUb0VsZW1lbnRUZXh0KG5v
ZGUucGFyZW50Tm9kZSkgfQorICBjYXRjaChlKSB7IHJldHVybiByIH0KKyAgci5jb2xsYXBzZSh0
cnVlKQorICByLm1vdmVFbmQoImNoYXJhY3RlciIsIGVuZCkKKyAgci5tb3ZlU3RhcnQoImNoYXJh
Y3RlciIsIHN0YXJ0KQorICByZXR1cm4gcgorfSB9CisKK2Z1bmN0aW9uIGNvbnRhaW5zKHBhcmVu
dCwgY2hpbGQpIHsKKyAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpIC8vIEFuZHJvaWQgYnJvd3Nl
ciBhbHdheXMgcmV0dXJucyBmYWxzZSB3aGVuIGNoaWxkIGlzIGEgdGV4dG5vZGUKKyAgICB7IGNo
aWxkID0gY2hpbGQucGFyZW50Tm9kZSB9CisgIGlmIChwYXJlbnQuY29udGFpbnMpCisgICAgeyBy
ZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKSB9CisgIGRvIHsKKyAgICBpZiAoY2hpbGQubm9k
ZVR5cGUgPT0gMTEpIHsgY2hpbGQgPSBjaGlsZC5ob3N0IH0KKyAgICBpZiAoY2hpbGQgPT0gcGFy
ZW50KSB7IHJldHVybiB0cnVlIH0KKyAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2Rl
KQorfQorCitmdW5jdGlvbiBhY3RpdmVFbHQoKSB7CisgIC8vIElFIGFuZCBFZGdlIG1heSB0aHJv
dyBhbiAiVW5zcGVjaWZpZWQgRXJyb3IiIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuCisgIC8vIElFIDwgMTAgd2lsbCB0aHJvdyB3aGVuIGFjY2Vzc2VkIHdoaWxlIHRoZSBw
YWdlIGlzIGxvYWRpbmcgb3IgaW4gYW4gaWZyYW1lLgorICAvLyBJRSA+IDkgYW5kIEVkZ2Ugd2ls
bCB0aHJvdyB3aGVuIGFjY2Vzc2VkIGluIGFuIGlmcmFtZSBpZiBkb2N1bWVudC5ib2R5IGlzIHVu
YXZhaWxhYmxlLgorICB2YXIgYWN0aXZlRWxlbWVudAorICB0cnkgeworICAgIGFjdGl2ZUVsZW1l
bnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50CisgIH0gY2F0Y2goZSkgeworICAgIGFjdGl2ZUVs
ZW1lbnQgPSBkb2N1bWVudC5ib2R5IHx8IG51bGwKKyAgfQorICB3aGlsZSAoYWN0aXZlRWxlbWVu
dCAmJiBhY3RpdmVFbGVtZW50LnJvb3QgJiYgYWN0aXZlRWxlbWVudC5yb290LmFjdGl2ZUVsZW1l
bnQpCisgICAgeyBhY3RpdmVFbGVtZW50ID0gYWN0aXZlRWxlbWVudC5yb290LmFjdGl2ZUVsZW1l
bnQgfQorICByZXR1cm4gYWN0aXZlRWxlbWVudAorfQorCitmdW5jdGlvbiBhZGRDbGFzcyhub2Rl
LCBjbHMpIHsKKyAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZQorICBpZiAoIWNsYXNzVGVz
dChjbHMpLnRlc3QoY3VycmVudCkpIHsgbm9kZS5jbGFzc05hbWUgKz0gKGN1cnJlbnQgPyAiICIg
OiAiIikgKyBjbHMgfQorfQorZnVuY3Rpb24gam9pbkNsYXNzZXMoYSwgYikgeworICB2YXIgYXMg
PSBhLnNwbGl0KCIgIikKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykKKyAg
ICB7IGlmIChhc1tpXSAmJiAhY2xhc3NUZXN0KGFzW2ldKS50ZXN0KGIpKSB7IGIgKz0gIiAiICsg
YXNbaV0gfSB9CisgIHJldHVybiBiCit9CisKK3ZhciBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5v
ZGUpIHsgbm9kZS5zZWxlY3QoKSB9CitpZiAoaW9zKSAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50
bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KKyAgeyBzZWxlY3RJbnB1dCA9
IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7IG5vZGUuc2VsZWN0aW9u
RW5kID0gbm9kZS52YWx1ZS5sZW5ndGggfSB9CitlbHNlIGlmIChpZSkgLy8gU3VwcHJlc3MgbXlz
dGVyaW91cyBJRTEwIGVycm9ycworICB7IHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyB0
cnkgeyBub2RlLnNlbGVjdCgpIH0gY2F0Y2goX2UpIHt9IH0gfQorCitmdW5jdGlvbiBiaW5kKGYp
IHsKKyAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEp
CisgIHJldHVybiBmdW5jdGlvbigpe3JldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpfQorfQorCitm
dW5jdGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0LCBvdmVyd3JpdGUpIHsKKyAgaWYgKCF0YXJnZXQp
IHsgdGFyZ2V0ID0ge30gfQorICBmb3IgKHZhciBwcm9wIGluIG9iaikKKyAgICB7IGlmIChvYmou
aGFzT3duUHJvcGVydHkocHJvcCkgJiYgKG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5o
YXNPd25Qcm9wZXJ0eShwcm9wKSkpCisgICAgICB7IHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXSB9
IH0KKyAgcmV0dXJuIHRhcmdldAorfQorCisvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4g
YSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KKy8vIFVzZWQgbW9zdGx5IHRvIGZp
bmQgaW5kZW50YXRpb24uCitmdW5jdGlvbiBjb3VudENvbHVtbihzdHJpbmcsIGVuZCwgdGFiU2l6
ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkgeworICBpZiAoZW5kID09IG51bGwpIHsKKyAgICBl
bmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pCisgICAgaWYgKGVuZCA9PSAtMSkgeyBl
bmQgPSBzdHJpbmcubGVuZ3RoIH0KKyAgfQorICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAw
LCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHsKKyAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRl
eE9mKCJcdCIsIGkpCisgICAgaWYgKG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKQorICAg
ICAgeyByZXR1cm4gbiArIChlbmQgLSBpKSB9CisgICAgbiArPSBuZXh0VGFiIC0gaQorICAgIG4g
Kz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSkKKyAgICBpID0gbmV4dFRhYiArIDEKKyAgfQorfQor
CitmdW5jdGlvbiBEZWxheWVkKCkge3RoaXMuaWQgPSBudWxsfQorRGVsYXllZC5wcm90b3R5cGUu
c2V0ID0gZnVuY3Rpb24obXMsIGYpIHsKKyAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpCisgIHRoaXMu
aWQgPSBzZXRUaW1lb3V0KGYsIG1zKQorfQorCitmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbHQp
IHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkKKyAgICB7IGlmIChh
cnJheVtpXSA9PSBlbHQpIHsgcmV0dXJuIGkgfSB9CisgIHJldHVybiAtMQorfQorCisvLyBOdW1i
ZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9sbGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJh
cgordmFyIHNjcm9sbGVyR2FwID0gMzAKKworLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlv
dXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdAorLy8gaGFuZGxpbmcgdGhpcycuCit2YXIg
UGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuUGFzcyJ9fQor
CisvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHMKK3Zh
ciBzZWxfZG9udFNjcm9sbCA9IHtzY3JvbGw6IGZhbHNlfTsKK3ZhciBzZWxfbW91c2UgPSB7b3Jp
Z2luOiAiKm1vdXNlIn07Cit2YXIgc2VsX21vdmUgPSB7b3JpZ2luOiAiK21vdmUifTsKKy8vIFRo
ZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3Bv
bmRzIHRvCisvLyBhIHBhcnRpY3VsYXIgY29sdW1uLgorZnVuY3Rpb24gZmluZENvbHVtbihzdHJp
bmcsIGdvYWwsIHRhYlNpemUpIHsKKyAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7Cisg
ICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBwb3MpCisgICAgaWYgKG5leHRU
YWIgPT0gLTEpIHsgbmV4dFRhYiA9IHN0cmluZy5sZW5ndGggfQorICAgIHZhciBza2lwcGVkID0g
bmV4dFRhYiAtIHBvcworICAgIGlmIChuZXh0VGFiID09IHN0cmluZy5sZW5ndGggfHwgY29sICsg
c2tpcHBlZCA+PSBnb2FsKQorICAgICAgeyByZXR1cm4gcG9zICsgTWF0aC5taW4oc2tpcHBlZCwg
Z29hbCAtIGNvbCkgfQorICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zCisgICAgY29sICs9IHRhYlNp
emUgLSAoY29sICUgdGFiU2l6ZSkKKyAgICBwb3MgPSBuZXh0VGFiICsgMQorICAgIGlmIChjb2wg
Pj0gZ29hbCkgeyByZXR1cm4gcG9zIH0KKyAgfQorfQorCit2YXIgc3BhY2VTdHJzID0gWyIiXQor
ZnVuY3Rpb24gc3BhY2VTdHIobikgeworICB3aGlsZSAoc3BhY2VTdHJzLmxlbmd0aCA8PSBuKQor
ICAgIHsgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyAiICIpIH0KKyAgcmV0dXJuIHNw
YWNlU3Ryc1tuXQorfQorCitmdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0
aC0xXSB9CisKK2Z1bmN0aW9uIG1hcChhcnJheSwgZikgeworICB2YXIgb3V0ID0gW10KKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBvdXRbaV0gPSBmKGFycmF5W2ld
LCBpKSB9CisgIHJldHVybiBvdXQKK30KKworZnVuY3Rpb24gaW5zZXJ0U29ydGVkKGFycmF5LCB2
YWx1ZSwgc2NvcmUpIHsKKyAgdmFyIHBvcyA9IDAsIHByaW9yaXR5ID0gc2NvcmUodmFsdWUpCisg
IHdoaWxlIChwb3MgPCBhcnJheS5sZW5ndGggJiYgc2NvcmUoYXJyYXlbcG9zXSkgPD0gcHJpb3Jp
dHkpIHsgcG9zKysgfQorICBhcnJheS5zcGxpY2UocG9zLCAwLCB2YWx1ZSkKK30KKworZnVuY3Rp
b24gbm90aGluZygpIHt9CisKK2Z1bmN0aW9uIGNyZWF0ZU9iaihiYXNlLCBwcm9wcykgeworICB2
YXIgaW5zdAorICBpZiAoT2JqZWN0LmNyZWF0ZSkgeworICAgIGluc3QgPSBPYmplY3QuY3JlYXRl
KGJhc2UpCisgIH0gZWxzZSB7CisgICAgbm90aGluZy5wcm90b3R5cGUgPSBiYXNlCisgICAgaW5z
dCA9IG5ldyBub3RoaW5nKCkKKyAgfQorICBpZiAocHJvcHMpIHsgY29weU9iaihwcm9wcywgaW5z
dCkgfQorICByZXR1cm4gaW5zdAorfQorCit2YXIgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIg
PSAvW1x1MDBkZlx1MDU4N1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUzMDQwLVx1MzA5Zlx1
MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLworZnVu
Y3Rpb24gaXNXb3JkQ2hhckJhc2ljKGNoKSB7CisgIHJldHVybiAvXHcvLnRlc3QoY2gpIHx8IGNo
ID4gIlx4ODAiICYmCisgICAgKGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8
fCBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhci50ZXN0KGNoKSkKK30KK2Z1bmN0aW9uIGlzV29y
ZENoYXIoY2gsIGhlbHBlcikgeworICBpZiAoIWhlbHBlcikgeyByZXR1cm4gaXNXb3JkQ2hhckJh
c2ljKGNoKSB9CisgIGlmIChoZWxwZXIuc291cmNlLmluZGV4T2YoIlxcdyIpID4gLTEgJiYgaXNX
b3JkQ2hhckJhc2ljKGNoKSkgeyByZXR1cm4gdHJ1ZSB9CisgIHJldHVybiBoZWxwZXIudGVzdChj
aCkKK30KKworZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKKyAgZm9yICh2YXIgbiBpbiBvYmopIHsg
aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuKSAmJiBvYmpbbl0pIHsgcmV0dXJuIGZhbHNlIH0gfQor
ICByZXR1cm4gdHJ1ZQorfQorCisvLyBFeHRlbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLiBBIHNl
cmllcyBvZiBhIG5vbi1leHRlbmRpbmcgY2hhciArCisvLyBhbnkgbnVtYmVyIG9mIGV4dGVuZGlu
ZyBjaGFycyBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyCisvLyBhcyBlZGl0aW5n
IGFuZCBtZWFzdXJpbmcgaXMgY29uY2VybmVkLiBUaGlzIGlzIG5vdCBmdWxseSBjb3JyZWN0LAor
Ly8gc2luY2Ugc29tZSBzY3JpcHRzL2ZvbnRzL2Jyb3dzZXJzIGFsc28gdHJlYXQgb3RoZXIgY29u
ZmlndXJhdGlvbnMKKy8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAuCit2YXIgZXh0ZW5kaW5n
Q2hhcnMgPSAvW1x1MDMwMC1cdTAzNmZcdTA0ODMtXHUwNDg5XHUwNTkxLVx1MDViZFx1MDViZlx1
MDVjMVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVjN1x1MDYxMC1cdTA2MWFcdTA2NGItXHUwNjVlXHUw
NjcwXHUwNmQ2LVx1MDZkY1x1MDZkZS1cdTA2ZTRcdTA2ZTdcdTA2ZThcdTA2ZWEtXHUwNmVkXHUw
NzExXHUwNzMwLVx1MDc0YVx1MDdhNi1cdTA3YjBcdTA3ZWItXHUwN2YzXHUwODE2LVx1MDgxOVx1
MDgxYi1cdTA4MjNcdTA4MjUtXHUwODI3XHUwODI5LVx1MDgyZFx1MDkwMC1cdTA5MDJcdTA5M2Nc
dTA5NDEtXHUwOTQ4XHUwOTRkXHUwOTUxLVx1MDk1NVx1MDk2Mlx1MDk2M1x1MDk4MVx1MDliY1x1
MDliZVx1MDljMS1cdTA5YzRcdTA5Y2RcdTA5ZDdcdTA5ZTJcdTA5ZTNcdTBhMDFcdTBhMDJcdTBh
M2NcdTBhNDFcdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTcwXHUwYTcx
XHUwYTc1XHUwYTgxXHUwYTgyXHUwYWJjXHUwYWMxLVx1MGFjNVx1MGFjN1x1MGFjOFx1MGFjZFx1
MGFlMlx1MGFlM1x1MGIwMVx1MGIzY1x1MGIzZVx1MGIzZlx1MGI0MS1cdTBiNDRcdTBiNGRcdTBi
NTZcdTBiNTdcdTBiNjJcdTBiNjNcdTBiODJcdTBiYmVcdTBiYzBcdTBiY2RcdTBiZDdcdTBjM2Ut
XHUwYzQwXHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNjJcdTBjNjNc
dTBjYmNcdTBjYmZcdTBjYzJcdTBjYzZcdTBjY2NcdTBjY2RcdTBjZDVcdTBjZDZcdTBjZTJcdTBj
ZTNcdTBkM2VcdTBkNDEtXHUwZDQ0XHUwZDRkXHUwZDU3XHUwZDYyXHUwZDYzXHUwZGNhXHUwZGNm
XHUwZGQyLVx1MGRkNFx1MGRkNlx1MGRkZlx1MGUzMVx1MGUzNC1cdTBlM2FcdTBlNDctXHUwZTRl
XHUwZWIxXHUwZWI0LVx1MGViOVx1MGViYlx1MGViY1x1MGVjOC1cdTBlY2RcdTBmMThcdTBmMTlc
dTBmMzVcdTBmMzdcdTBmMzlcdTBmNzEtXHUwZjdlXHUwZjgwLVx1MGY4NFx1MGY4Nlx1MGY4N1x1
MGY5MC1cdTBmOTdcdTBmOTktXHUwZmJjXHUwZmM2XHUxMDJkLVx1MTAzMFx1MTAzMi1cdTEwMzdc
dTEwMzlcdTEwM2FcdTEwM2RcdTEwM2VcdTEwNThcdTEwNTlcdTEwNWUtXHUxMDYwXHUxMDcxLVx1
MTA3NFx1MTA4Mlx1MTA4NVx1MTA4Nlx1MTA4ZFx1MTA5ZFx1MTM1Zlx1MTcxMi1cdTE3MTRcdTE3
MzItXHUxNzM0XHUxNzUyXHUxNzUzXHUxNzcyXHUxNzczXHUxN2I3LVx1MTdiZFx1MTdjNlx1MTdj
OS1cdTE3ZDNcdTE3ZGRcdTE4MGItXHUxODBkXHUxOGE5XHUxOTIwLVx1MTkyMlx1MTkyN1x1MTky
OFx1MTkzMlx1MTkzOS1cdTE5M2JcdTFhMTdcdTFhMThcdTFhNTZcdTFhNTgtXHUxYTVlXHUxYTYw
XHUxYTYyXHUxYTY1LVx1MWE2Y1x1MWE3My1cdTFhN2NcdTFhN2ZcdTFiMDAtXHUxYjAzXHUxYjM0
XHUxYjM2LVx1MWIzYVx1MWIzY1x1MWI0Mlx1MWI2Yi1cdTFiNzNcdTFiODBcdTFiODFcdTFiYTIt
XHUxYmE1XHUxYmE4XHUxYmE5XHUxYzJjLVx1MWMzM1x1MWMzNlx1MWMzN1x1MWNkMC1cdTFjZDJc
dTFjZDQtXHUxY2UwXHUxY2UyLVx1MWNlOFx1MWNlZFx1MWRjMC1cdTFkZTZcdTFkZmQtXHUxZGZm
XHUyMDBjXHUyMDBkXHUyMGQwLVx1MjBmMFx1MmNlZi1cdTJjZjFcdTJkZTAtXHUyZGZmXHUzMDJh
LVx1MzAyZlx1MzA5OVx1MzA5YVx1YTY2Zi1cdWE2NzJcdWE2N2NcdWE2N2RcdWE2ZjBcdWE2ZjFc
dWE4MDJcdWE4MDZcdWE4MGJcdWE4MjVcdWE4MjZcdWE4YzRcdWE4ZTAtXHVhOGYxXHVhOTI2LVx1
YTkyZFx1YTk0Ny1cdWE5NTFcdWE5ODAtXHVhOTgyXHVhOWIzXHVhOWI2LVx1YTliOVx1YTliY1x1
YWEyOS1cdWFhMmVcdWFhMzFcdWFhMzJcdWFhMzVcdWFhMzZcdWFhNDNcdWFhNGNcdWFhYjBcdWFh
YjItXHVhYWI0XHVhYWI3XHVhYWI4XHVhYWJlXHVhYWJmXHVhYWMxXHVhYmU1XHVhYmU4XHVhYmVk
XHVkYzAwLVx1ZGZmZlx1ZmIxZVx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZjllXHVmZjlm
XS8KK2Z1bmN0aW9uIGlzRXh0ZW5kaW5nQ2hhcihjaCkgeyByZXR1cm4gY2guY2hhckNvZGVBdCgw
KSA+PSA3NjggJiYgZXh0ZW5kaW5nQ2hhcnMudGVzdChjaCkgfQorCisvLyBUaGUgZGlzcGxheSBo
YW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRpbmcKKy8vIGFu
ZCBjb250ZW50IGRyYXdpbmcuIEl0IGhvbGRzIHJlZmVyZW5jZXMgdG8gRE9NIG5vZGVzIGFuZAor
Ly8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLgorCitmdW5jdGlvbiBEaXNwbGF5KHBsYWNlLCBkb2Ms
IGlucHV0KSB7CisgIHZhciBkID0gdGhpcworICB0aGlzLmlucHV0ID0gaW5wdXQKKworICAvLyBD
b3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUgcHJlc2Vu
dC4KKyAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLXNj
cm9sbGJhci1maWxsZXIiKQorICBkLnNjcm9sbGJhckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5v
dC1jb250ZW50IiwgInRydWUiKQorICAvLyBDb3ZlcnMgYm90dG9tIG9mIGd1dHRlciB3aGVuIGNv
dmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIGlzIG9uCisgIC8vIGFuZCBoIHNjcm9sbGJhciBpcyBw
cmVzZW50LgorICBkLmd1dHRlckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3It
Z3V0dGVyLWZpbGxlciIpCisgIGQuZ3V0dGVyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNv
bnRlbnQiLCAidHJ1ZSIpCisgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0
aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LgorICBkLmxpbmVEaXYgPSBlbHQoImRpdiIsIG51
bGwsICJDb2RlTWlycm9yLWNvZGUiKQorICAvLyBFbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlc2Ug
dG8gcmVwcmVzZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycy4KKyAgZC5zZWxlY3Rpb25EaXYgPSBl
bHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKQor
ICBkLmN1cnNvckRpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItY3Vyc29ycyIpCisg
IC8vIEEgdmlzaWJpbGl0eTogaGlkZGVuIGVsZW1lbnQgdXNlZCB0byBmaW5kIHRoZSBzaXplIG9m
IHRoaW5ncy4KKyAgZC5tZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1tZWFz
dXJlIikKKyAgLy8gV2hlbiBsaW5lcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydCBhcmUgbWVhc3Vy
ZWQsIHRoZXkgYXJlIGRyYXduIGluIHRoaXMuCisgIGQubGluZU1lYXN1cmUgPSBlbHQoImRpdiIs
IG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKQorICAvLyBXcmFwcyBldmVyeXRoaW5nIHRoYXQg
bmVlZHMgdG8gZXhpc3QgaW5zaWRlIHRoZSB2ZXJ0aWNhbGx5LXBhZGRlZCBjb29yZGluYXRlIHN5
c3RlbQorICBkLmxpbmVTcGFjZSA9IGVsdCgiZGl2IiwgW2QubWVhc3VyZSwgZC5saW5lTWVhc3Vy
ZSwgZC5zZWxlY3Rpb25EaXYsIGQuY3Vyc29yRGl2LCBkLmxpbmVEaXZdLAorICAgICAgICAgICAg
ICAgICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lIikKKyAgLy8g
TW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJsZSB2aWV3LgorICBkLm1vdmVy
ID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1saW5l
cyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpCisgIC8vIFNldCB0byB0aGUgaGVpZ2h0
IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLgorICBkLnNpemVyID0gZWx0KCJk
aXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIikKKyAgZC5zaXplcldpZHRoID0gbnVs
bAorICAvLyBCZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcg
aXMKKyAgLy8gaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVu
c3VyZSB0aGUKKyAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCisgIGQuaGVpZ2h0
Rm9yY2VyID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBoZWln
aHQ6ICIgKyBzY3JvbGxlckdhcCArICJweDsgd2lkdGg6IDFweDsiKQorICAvLyBXaWxsIGNvbnRh
aW4gdGhlIGd1dHRlcnMsIGlmIGFueS4KKyAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxsLCAi
Q29kZU1pcnJvci1ndXR0ZXJzIikKKyAgZC5saW5lR3V0dGVyID0gbnVsbAorICAvLyBBY3R1YWwg
c2Nyb2xsYWJsZSBlbGVtZW50LgorICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXplciwg
ZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sICJDb2RlTWlycm9yLXNjcm9sbCIpCisgIGQuc2Ny
b2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsICItMSIpCisgIC8vIFRoZSBlbGVtZW50IGlu
IHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCisgIGQud3JhcHBlciA9IGVsdCgiZGl2IiwgW2Quc2Ny
b2xsYmFyRmlsbGVyLCBkLmd1dHRlckZpbGxlciwgZC5zY3JvbGxlcl0sICJDb2RlTWlycm9yIikK
KworICAvLyBXb3JrIGFyb3VuZCBJRTcgei1pbmRleCBidWcgKG5vdCBwZXJmZWN0LCBoZW5jZSBJ
RTcgbm90IHJlYWxseSBiZWluZyBzdXBwb3J0ZWQpCisgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwg
OCkgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGlu
Z1JpZ2h0ID0gMCB9CisgIGlmICghd2Via2l0ICYmICEoZ2Vja28gJiYgbW9iaWxlKSkgeyBkLnNj
cm9sbGVyLmRyYWdnYWJsZSA9IHRydWUgfQorCisgIGlmIChwbGFjZSkgeworICAgIGlmIChwbGFj
ZS5hcHBlbmRDaGlsZCkgeyBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpIH0KKyAgICBlbHNl
IHsgcGxhY2UoZC53cmFwcGVyKSB9CisgIH0KKworICAvLyBDdXJyZW50IHJlbmRlcmVkIHJhbmdl
IChtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KKyAgZC52aWV3RnJvbSA9IGQu
dmlld1RvID0gZG9jLmZpcnN0CisgIGQucmVwb3J0ZWRWaWV3RnJvbSA9IGQucmVwb3J0ZWRWaWV3
VG8gPSBkb2MuZmlyc3QKKyAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlcmVkIGxpbmVz
LgorICBkLnZpZXcgPSBbXQorICBkLnJlbmRlcmVkVmlldyA9IG51bGwKKyAgLy8gSG9sZHMgaW5m
byBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkCisgIC8v
IGZvciBtZWFzdXJlbWVudCwgd2hpbGUgbm90IGluIHZpZXcuCisgIGQuZXh0ZXJuYWxNZWFzdXJl
ZCA9IG51bGwKKyAgLy8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXcKKyAg
ZC52aWV3T2Zmc2V0ID0gMAorICBkLmxhc3RXcmFwSGVpZ2h0ID0gZC5sYXN0V3JhcFdpZHRoID0g
MAorICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbAorCisgIGQubmF0aXZlQmFyV2lkdGggPSBk
LmJhckhlaWdodCA9IGQuYmFyV2lkdGggPSAwCisgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxz
ZQorCisgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVu
IG5lY2Vzc2FyeSAod2hlbgorICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3Vu
ZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpCisgIGQubGluZU51bVdpZHRoID0gZC5s
aW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbAorICAvLyBTZXQgdG8gdHJ1
ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzCisgIC8vIGFk
ZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlzIHNraXBwZWQg
d2hlbgorICAvLyB0aGlzIGlzIGZhbHNlLgorICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlCisKKyAg
ZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdI
ID0gbnVsbAorCisgIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRo
ZSBob3Jpem9udGFsIHNjcm9sbGJhcgorICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3Jv
bGxpbmcuCisgIGQubWF4TGluZSA9IG51bGwKKyAgZC5tYXhMaW5lTGVuZ3RoID0gMAorICBkLm1h
eExpbmVDaGFuZ2VkID0gZmFsc2UKKworICAvLyBVc2VkIGZvciBtZWFzdXJpbmcgd2hlZWwgc2Ny
b2xsaW5nIGdyYW51bGFyaXR5CisgIGQud2hlZWxEWCA9IGQud2hlZWxEWSA9IGQud2hlZWxTdGFy
dFggPSBkLndoZWVsU3RhcnRZID0gbnVsbAorCisgIC8vIFRydWUgd2hlbiBzaGlmdCBpcyBoZWxk
IGRvd24uCisgIGQuc2hpZnQgPSBmYWxzZQorCisgIC8vIFVzZWQgdG8gdHJhY2sgd2hldGhlciBh
bnl0aGluZyBoYXBwZW5lZCBzaW5jZSB0aGUgY29udGV4dCBtZW51CisgIC8vIHdhcyBvcGVuZWQu
CisgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsCisKKyAgZC5hY3RpdmVUb3VjaCA9IG51bGwK
KworICBpbnB1dC5pbml0KGQpCit9CisKKy8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgorZnVuY3Rpb24gZ2V0TGluZShkb2MsIG4p
IHsKKyAgbiAtPSBkb2MuZmlyc3QKKyAgaWYgKG4gPCAwIHx8IG4gPj0gZG9jLnNpemUpIHsgdGhy
b3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIgKyAobiArIGRvYy5maXJzdCkgKyAiIGlu
IHRoZSBkb2N1bWVudC4iKSB9CisgIHZhciBjaHVuayA9IGRvYworICB3aGlsZSAoIWNodW5rLmxp
bmVzKSB7CisgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKKyAgICAgIHZhciBjaGlsZCA9IGNo
dW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpCisgICAgICBpZiAobiA8IHN6
KSB7IGNodW5rID0gY2hpbGQ7IGJyZWFrIH0KKyAgICAgIG4gLT0gc3oKKyAgICB9CisgIH0KKyAg
cmV0dXJuIGNodW5rLmxpbmVzW25dCit9CisKKy8vIEdldCB0aGUgcGFydCBvZiBhIGRvY3VtZW50
IGJldHdlZW4gdHdvIHBvc2l0aW9ucywgYXMgYW4gYXJyYXkgb2YKKy8vIHN0cmluZ3MuCitmdW5j
dGlvbiBnZXRCZXR3ZWVuKGRvYywgc3RhcnQsIGVuZCkgeworICB2YXIgb3V0ID0gW10sIG4gPSBz
dGFydC5saW5lCisgIGRvYy5pdGVyKHN0YXJ0LmxpbmUsIGVuZC5saW5lICsgMSwgZnVuY3Rpb24g
KGxpbmUpIHsKKyAgICB2YXIgdGV4dCA9IGxpbmUudGV4dAorICAgIGlmIChuID09IGVuZC5saW5l
KSB7IHRleHQgPSB0ZXh0LnNsaWNlKDAsIGVuZC5jaCkgfQorICAgIGlmIChuID09IHN0YXJ0Lmxp
bmUpIHsgdGV4dCA9IHRleHQuc2xpY2Uoc3RhcnQuY2gpIH0KKyAgICBvdXQucHVzaCh0ZXh0KQor
ICAgICsrbgorICB9KQorICByZXR1cm4gb3V0Cit9CisvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4g
ZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3MuCitmdW5jdGlvbiBnZXRMaW5lcyhkb2Ms
IGZyb20sIHRvKSB7CisgIHZhciBvdXQgPSBbXQorICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rp
b24gKGxpbmUpIHsgb3V0LnB1c2gobGluZS50ZXh0KSB9KSAvLyBpdGVyIGFib3J0cyB3aGVuIGNh
bGxiYWNrIHJldHVybnMgdHJ1dGh5IHZhbHVlCisgIHJldHVybiBvdXQKK30KKworLy8gVXBkYXRl
IHRoZSBoZWlnaHQgb2YgYSBsaW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZQorLy8g
dXB3YXJkcyB0byBwYXJlbnQgbm9kZXMuCitmdW5jdGlvbiB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUs
IGhlaWdodCkgeworICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0CisgIGlmIChkaWZm
KSB7IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIHsgbi5oZWlnaHQgKz0gZGlm
ZiB9IH0KK30KKworLy8gR2l2ZW4gYSBsaW5lIG9iamVjdCwgZmluZCBpdHMgbGluZSBudW1iZXIg
Ynkgd2Fsa2luZyB1cCB0aHJvdWdoCisvLyBpdHMgcGFyZW50IGxpbmtzLgorZnVuY3Rpb24gbGlu
ZU5vKGxpbmUpIHsKKyAgaWYgKGxpbmUucGFyZW50ID09IG51bGwpIHsgcmV0dXJuIG51bGwgfQor
ICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpCisg
IGZvciAodmFyIGNodW5rID0gY3VyLnBhcmVudDsgY2h1bms7IGN1ciA9IGNodW5rLCBjaHVuayA9
IGNodW5rLnBhcmVudCkgeworICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7CisgICAgICBpZiAo
Y2h1bmsuY2hpbGRyZW5baV0gPT0gY3VyKSB7IGJyZWFrIH0KKyAgICAgIG5vICs9IGNodW5rLmNo
aWxkcmVuW2ldLmNodW5rU2l6ZSgpCisgICAgfQorICB9CisgIHJldHVybiBubyArIGN1ci5maXJz
dAorfQorCisvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwg
dXNpbmcgdGhlIGhlaWdodAorLy8gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHRyZWUuCitm
dW5jdGlvbiBsaW5lQXRIZWlnaHQoY2h1bmssIGgpIHsKKyAgdmFyIG4gPSBjaHVuay5maXJzdAor
ICBvdXRlcjogZG8geworICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNodW5rLmNoaWxkcmVu
Lmxlbmd0aDsgKytpJDEpIHsKKyAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2kkMV0s
IGNoID0gY2hpbGQuaGVpZ2h0CisgICAgICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNv
bnRpbnVlIG91dGVyIH0KKyAgICAgIGggLT0gY2gKKyAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXpl
KCkKKyAgICB9CisgICAgcmV0dXJuIG4KKyAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKQorICB2YXIg
aSA9IDAKKyAgZm9yICg7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgeworICAgIHZhciBs
aW5lID0gY2h1bmsubGluZXNbaV0sIGxoID0gbGluZS5oZWlnaHQKKyAgICBpZiAoaCA8IGxoKSB7
IGJyZWFrIH0KKyAgICBoIC09IGxoCisgIH0KKyAgcmV0dXJuIG4gKyBpCit9CisKK2Z1bmN0aW9u
IGlzTGluZShkb2MsIGwpIHtyZXR1cm4gbCA+PSBkb2MuZmlyc3QgJiYgbCA8IGRvYy5maXJzdCAr
IGRvYy5zaXplfQorCitmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHsKKyAgcmV0
dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RM
aW5lTnVtYmVyKSkKK30KKworLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBvc2l0aW9u
IHdpdGhpbiB0aGUgdGV4dC4KK2Z1bmN0aW9uIFBvcyAobGluZSwgY2gpIHsKKyAgaWYgKCEodGhp
cyBpbnN0YW5jZW9mIFBvcykpIHsgcmV0dXJuIG5ldyBQb3MobGluZSwgY2gpIH0KKyAgdGhpcy5s
aW5lID0gbGluZTsgdGhpcy5jaCA9IGNoCit9CisKKy8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywg
cmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmUKKy8vIG51bWJlciB3aGVu
IGEgaXMgbGVzcywgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KK2Z1bmN0aW9uIGNt
cChhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2ggfQorCitmdW5j
dGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4gUG9zKHgubGluZSwgeC5jaCl9CitmdW5jdGlvbiBtYXhQ
b3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGIgOiBhIH0KK2Z1bmN0aW9uIG1pblBv
cyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYSA6IGIgfQorCisvLyBNb3N0IG9mIHRo
ZSBleHRlcm5hbCBBUEkgY2xpcHMgZ2l2ZW4gcG9zaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5Cisv
LyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LgorZnVuY3Rpb24gY2xpcExpbmUo
ZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4obiwgZG9jLmZpcnN0
ICsgZG9jLnNpemUgLSAxKSl9CitmdW5jdGlvbiBjbGlwUG9zKGRvYywgcG9zKSB7CisgIGlmIChw
b3MubGluZSA8IGRvYy5maXJzdCkgeyByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCkgfQorICB2YXIg
bGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMQorICBpZiAocG9zLmxpbmUgPiBsYXN0KSB7
IHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSB9CisgIHJl
dHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQubGVuZ3RoKQor
fQorZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGluZWxlbikgeworICB2YXIgY2ggPSBwb3MuY2gK
KyAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSB7IHJldHVybiBQb3MocG9zLmxpbmUs
IGxpbmVsZW4pIH0KKyAgZWxzZSBpZiAoY2ggPCAwKSB7IHJldHVybiBQb3MocG9zLmxpbmUsIDAp
IH0KKyAgZWxzZSB7IHJldHVybiBwb3MgfQorfQorZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywg
YXJyYXkpIHsKKyAgdmFyIG91dCA9IFtdCisgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyBpKyspIHsgb3V0W2ldID0gY2xpcFBvcyhkb2MsIGFycmF5W2ldKSB9CisgIHJldHVybiBv
dXQKK30KKworLy8gT3B0aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5v
dCB1c2VkLgordmFyIHNhd1JlYWRPbmx5U3BhbnMgPSBmYWxzZTsKK3ZhciBzYXdDb2xsYXBzZWRT
cGFucyA9IGZhbHNlOworZnVuY3Rpb24gc2VlUmVhZE9ubHlTcGFucygpIHsKKyAgc2F3UmVhZE9u
bHlTcGFucyA9IHRydWUKK30KKworZnVuY3Rpb24gc2VlQ29sbGFwc2VkU3BhbnMoKSB7CisgIHNh
d0NvbGxhcHNlZFNwYW5zID0gdHJ1ZQorfQorCisvLyBURVhUTUFSS0VSIFNQQU5TCisKK2Z1bmN0
aW9uIE1hcmtlZFNwYW4obWFya2VyLCBmcm9tLCB0bykgeworICB0aGlzLm1hcmtlciA9IG1hcmtl
cgorICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG8KK30KKworLy8gU2VhcmNoIGFuIGFy
cmF5IG9mIHNwYW5zIGZvciBhIHNwYW4gbWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci4KK2Z1bmN0
aW9uIGdldE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikgeworICBpZiAoc3BhbnMpIHsgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAgIHZhciBzcGFuID0gc3Bh
bnNbaV0KKyAgICBpZiAoc3Bhbi5tYXJrZXIgPT0gbWFya2VyKSB7IHJldHVybiBzcGFuIH0KKyAg
fSB9Cit9CisvLyBSZW1vdmUgYSBzcGFuIGZyb20gYW4gYXJyYXksIHJldHVybmluZyB1bmRlZmlu
ZWQgaWYgbm8gc3BhbnMgYXJlCisvLyBsZWZ0ICh3ZSBkb24ndCBzdG9yZSBhcnJheXMgZm9yIGxp
bmVzIHdpdGhvdXQgc3BhbnMpLgorZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3Bh
bikgeworICB2YXIgcgorICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQor
ICAgIHsgaWYgKHNwYW5zW2ldICE9IHNwYW4pIHsgKHIgfHwgKHIgPSBbXSkpLnB1c2goc3BhbnNb
aV0pIH0gfQorICByZXR1cm4gcgorfQorLy8gQWRkIGEgc3BhbiB0byBhIGxpbmUuCitmdW5jdGlv
biBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHsKKyAgbGluZS5tYXJrZWRTcGFucyA9IGxpbmUu
bWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDogW3NwYW5dCisg
IHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSkKK30KKworLy8gVXNlZCBmb3IgdGhlIGFsZ29y
aXRobSB0aGF0IGFkanVzdHMgbWFya2VycyBmb3IgYSBjaGFuZ2UgaW4gdGhlCisvLyBkb2N1bWVu
dC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBvZiBzcGFucyBhdCBhIGdpdmVuCisvLyBj
aGFyYWN0ZXIgcG9zaXRpb24sIHJldHVybmluZyBhbiBhcnJheSBvZiByZW1haW5pbmcgY2h1bmtz
IChvcgorLy8gdW5kZWZpbmVkIGlmIG5vdGhpbmcgcmVtYWlucykuCitmdW5jdGlvbiBtYXJrZWRT
cGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlzSW5zZXJ0KSB7CisgIHZhciBudworICBpZiAob2xk
KSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIHNwYW4g
PSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyCisgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNw
YW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBz
dGFydENoIDogc3Bhbi5mcm9tIDwgc3RhcnRDaCkKKyAgICBpZiAoc3RhcnRzQmVmb3JlIHx8IHNw
YW4uZnJvbSA9PSBzdGFydENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0lu
c2VydCB8fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKKyAgICAgIHZhciBlbmRzQWZ0ZXIg
PSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0g
c3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENoKQorICAgICAgOyhudyB8fCAobncgPSBbXSkpLnB1
c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzcGFuLmZyb20sIGVuZHNBZnRlciA/IG51bGwgOiBz
cGFuLnRvKSkKKyAgICB9CisgIH0gfQorICByZXR1cm4gbncKK30KK2Z1bmN0aW9uIG1hcmtlZFNw
YW5zQWZ0ZXIob2xkLCBlbmRDaCwgaXNJbnNlcnQpIHsKKyAgdmFyIG53CisgIGlmIChvbGQpIHsg
Zm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgc3BhbiA9IG9s
ZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXIKKyAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9
PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IGVuZENoIDogc3Bh
bi50byA+IGVuZENoKQorICAgIGlmIChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09IGVuZENoICYm
IG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0luc2VydCB8fCBzcGFuLm1hcmtlci5p
bnNlcnRMZWZ0KSkgeworICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxs
IHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJv
bSA8IGVuZENoKQorICAgICAgOyhudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4o
bWFya2VyLCBzdGFydHNCZWZvcmUgPyBudWxsIDogc3Bhbi5mcm9tIC0gZW5kQ2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51
bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKQorICAgIH0KKyAgfSB9CisgIHJldHVybiBudworfQorCisv
LyBHaXZlbiBhIGNoYW5nZSBvYmplY3QsIGNvbXB1dGUgdGhlIG5ldyBzZXQgb2YgbWFya2VyIHNw
YW5zIHRoYXQKKy8vIGNvdmVyIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBjaGFuZ2UgdG9vayBwbGFj
ZS4gUmVtb3ZlcyBzcGFucworLy8gZW50aXJlbHkgd2l0aGluIHRoZSBjaGFuZ2UsIHJlY29ubmVj
dHMgc3BhbnMgYmVsb25naW5nIHRvIHRoZQorLy8gc2FtZSBtYXJrZXIgdGhhdCBhcHBlYXIgb24g
Ym90aCBzaWRlcyBvZiB0aGUgY2hhbmdlLCBhbmQgY3V0cyBvZmYKKy8vIHNwYW5zIHBhcnRpYWxs
eSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBzcGFuCisvLyBhcnJheXMg
d2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5lIGluIChhZnRlcikgdGhlIGNoYW5nZS4KK2Z1
bmN0aW9uIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgaWYgKGNoYW5n
ZS5mdWxsKSB7IHJldHVybiBudWxsIH0KKyAgdmFyIG9sZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hh
bmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNw
YW5zCisgIHZhciBvbGRMYXN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpICYmIGdldExp
bmUoZG9jLCBjaGFuZ2UudG8ubGluZSkubWFya2VkU3BhbnMKKyAgaWYgKCFvbGRGaXJzdCAmJiAh
b2xkTGFzdCkgeyByZXR1cm4gbnVsbCB9CisKKyAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5j
aCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFu
Z2UudG8pID09IDAKKyAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGgg
c2lkZXMKKyAgdmFyIGZpcnN0ID0gbWFya2VkU3BhbnNCZWZvcmUob2xkRmlyc3QsIHN0YXJ0Q2gs
IGlzSW5zZXJ0KQorICB2YXIgbGFzdCA9IG1hcmtlZFNwYW5zQWZ0ZXIob2xkTGFzdCwgZW5kQ2gs
IGlzSW5zZXJ0KQorCisgIC8vIE5leHQsIG1lcmdlIHRob3NlIHR3byBlbmRzCisgIHZhciBzYW1l
TGluZSA9IGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxLCBvZmZzZXQgPSBsc3QoY2hhbmdlLnRleHQp
Lmxlbmd0aCArIChzYW1lTGluZSA/IHN0YXJ0Q2ggOiAwKQorICBpZiAoZmlyc3QpIHsKKyAgICAv
LyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3QKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGZpcnN0Lmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgc3BhbiA9IGZpcnN0W2ldCisgICAgICBp
ZiAoc3Bhbi50byA9PSBudWxsKSB7CisgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNwYW5G
b3IobGFzdCwgc3Bhbi5tYXJrZXIpCisgICAgICAgIGlmICghZm91bmQpIHsgc3Bhbi50byA9IHN0
YXJ0Q2ggfQorICAgICAgICBlbHNlIGlmIChzYW1lTGluZSkgeyBzcGFuLnRvID0gZm91bmQudG8g
PT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNldCB9CisgICAgICB9CisgICAgfQorICB9
CisgIGlmIChsYXN0KSB7CisgICAgLy8gRml4IHVwIC5mcm9tIGluIGxhc3QgKG9yIG1vdmUgdGhl
bSBpbnRvIGZpcnN0IGluIGNhc2Ugb2Ygc2FtZUxpbmUpCisgICAgZm9yICh2YXIgaSQxID0gMDsg
aSQxIDwgbGFzdC5sZW5ndGg7ICsraSQxKSB7CisgICAgICB2YXIgc3BhbiQxID0gbGFzdFtpJDFd
CisgICAgICBpZiAoc3BhbiQxLnRvICE9IG51bGwpIHsgc3BhbiQxLnRvICs9IG9mZnNldCB9Cisg
ICAgICBpZiAoc3BhbiQxLmZyb20gPT0gbnVsbCkgeworICAgICAgICB2YXIgZm91bmQkMSA9IGdl
dE1hcmtlZFNwYW5Gb3IoZmlyc3QsIHNwYW4kMS5tYXJrZXIpCisgICAgICAgIGlmICghZm91bmQk
MSkgeworICAgICAgICAgIHNwYW4kMS5mcm9tID0gb2Zmc2V0CisgICAgICAgICAgaWYgKHNhbWVM
aW5lKSB7IChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3BhbiQxKSB9CisgICAgICAgIH0K
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNwYW4kMS5mcm9tICs9IG9mZnNldAorICAgICAgICBp
ZiAoc2FtZUxpbmUpIHsgKGZpcnN0IHx8IChmaXJzdCA9IFtdKSkucHVzaChzcGFuJDEpIH0KICAg
ICAgIH0KKyAgICB9CisgIH0KKyAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHpl
cm8tbGVuZ3RoIHNwYW5zCisgIGlmIChmaXJzdCkgeyBmaXJzdCA9IGNsZWFyRW1wdHlTcGFucyhm
aXJzdCkgfQorICBpZiAobGFzdCAmJiBsYXN0ICE9IGZpcnN0KSB7IGxhc3QgPSBjbGVhckVtcHR5
U3BhbnMobGFzdCkgfQorCisgIHZhciBuZXdNYXJrZXJzID0gW2ZpcnN0XQorICBpZiAoIXNhbWVM
aW5lKSB7CisgICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zCisgICAgdmFyIGdh
cCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDIsIGdhcE1hcmtlcnMKKyAgICBpZiAoZ2FwID4gMCAm
JiBmaXJzdCkKKyAgICAgIHsgZm9yICh2YXIgaSQyID0gMDsgaSQyIDwgZmlyc3QubGVuZ3RoOyAr
K2kkMikKKyAgICAgICAgeyBpZiAoZmlyc3RbaSQyXS50byA9PSBudWxsKQorICAgICAgICAgIHsg
KGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4oZmly
c3RbaSQyXS5tYXJrZXIsIG51bGwsIG51bGwpKSB9IH0gfQorICAgIGZvciAodmFyIGkkMyA9IDA7
IGkkMyA8IGdhcDsgKytpJDMpCisgICAgICB7IG5ld01hcmtlcnMucHVzaChnYXBNYXJrZXJzKSB9
CisgICAgbmV3TWFya2Vycy5wdXNoKGxhc3QpCisgIH0KKyAgcmV0dXJuIG5ld01hcmtlcnMKK30K
KworLy8gUmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xlYXJX
aGVuRW1wdHkKKy8vIG9wdGlvbiBvZiBmYWxzZS4KK2Z1bmN0aW9uIGNsZWFyRW1wdHlTcGFucyhz
cGFucykgeworICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAg
dmFyIHNwYW4gPSBzcGFuc1tpXQorICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBzcGFuLmZy
b20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpCisg
ICAgICB7IHNwYW5zLnNwbGljZShpLS0sIDEpIH0KKyAgfQorICBpZiAoIXNwYW5zLmxlbmd0aCkg
eyByZXR1cm4gbnVsbCB9CisgIHJldHVybiBzcGFucworfQorCisvLyBVc2VkIHRvICdjbGlwJyBv
dXQgcmVhZE9ubHkgcmFuZ2VzIHdoZW4gbWFraW5nIGEgY2hhbmdlLgorZnVuY3Rpb24gcmVtb3Zl
UmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykgeworICB2YXIgbWFya2VycyA9IG51bGwKKyAg
ZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHsKKyAgICBp
ZiAobGluZS5tYXJrZWRTcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3Bh
bnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBtYXJrID0gbGluZS5tYXJrZWRTcGFuc1tpXS5t
YXJrZXIKKyAgICAgIGlmIChtYXJrLnJlYWRPbmx5ICYmICghbWFya2VycyB8fCBpbmRleE9mKG1h
cmtlcnMsIG1hcmspID09IC0xKSkKKyAgICAgICAgeyAobWFya2VycyB8fCAobWFya2VycyA9IFtd
KSkucHVzaChtYXJrKSB9CisgICAgfSB9CisgIH0pCisgIGlmICghbWFya2VycykgeyByZXR1cm4g
bnVsbCB9CisgIHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV0KKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIG1rID0gbWFya2Vyc1tp
XSwgbSA9IG1rLmZpbmQoMCkKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsg
KytqKSB7CisgICAgICB2YXIgcCA9IHBhcnRzW2pdCisgICAgICBpZiAoY21wKHAudG8sIG0uZnJv
bSkgPCAwIHx8IGNtcChwLmZyb20sIG0udG8pID4gMCkgeyBjb250aW51ZSB9CisgICAgICB2YXIg
bmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRvID0gY21w
KHAudG8sIG0udG8pCisgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNpdmVMZWZ0ICYm
ICFkZnJvbSkKKyAgICAgICAgeyBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBwLmZyb20sIHRvOiBtLmZy
b219KSB9CisgICAgICBpZiAoZHRvID4gMCB8fCAhbWsuaW5jbHVzaXZlUmlnaHQgJiYgIWR0bykK
KyAgICAgICAgeyBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBtLnRvLCB0bzogcC50b30pIH0KKyAgICAg
IHBhcnRzLnNwbGljZS5hcHBseShwYXJ0cywgbmV3UGFydHMpCisgICAgICBqICs9IG5ld1BhcnRz
Lmxlbmd0aCAtIDEKKyAgICB9CisgIH0KKyAgcmV0dXJuIHBhcnRzCit9CisKKy8vIENvbm5lY3Qg
b3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS4KK2Z1bmN0aW9uIGRldGFjaE1hcmtlZFNw
YW5zKGxpbmUpIHsKKyAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucworICBpZiAoIXNwYW5z
KSB7IHJldHVybiB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCisg
ICAgeyBzcGFuc1tpXS5tYXJrZXIuZGV0YWNoTGluZShsaW5lKSB9CisgIGxpbmUubWFya2VkU3Bh
bnMgPSBudWxsCit9CitmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykgewor
ICBpZiAoIXNwYW5zKSB7IHJldHVybiB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVu
Z3RoOyArK2kpCisgICAgeyBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKSB9CisgIGxp
bmUubWFya2VkU3BhbnMgPSBzcGFucworfQorCisvLyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRp
bmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2VkIHNwYW4KKy8vIGNvdW50cyBhcyB0aGUgbGFy
Z2VyIG9uZS4KK2Z1bmN0aW9uIGV4dHJhTGVmdChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNs
dXNpdmVMZWZ0ID8gLTEgOiAwIH0KK2Z1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVy
biBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyAxIDogMCB9CisKKy8vIFJldHVybnMgYSBudW1iZXIg
aW5kaWNhdGluZyB3aGljaCBvZiB0d28gb3ZlcmxhcHBpbmcgY29sbGFwc2VkCisvLyBzcGFucyBp
cyBsYXJnZXIgKGFuZCB0aHVzIGluY2x1ZGVzIHRoZSBvdGhlcikuIEZhbGxzIGJhY2sgdG8KKy8v
IGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5n
ZS4KK2Z1bmN0aW9uIGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGEsIGIpIHsKKyAgdmFyIGxlbkRp
ZmYgPSBhLmxpbmVzLmxlbmd0aCAtIGIubGluZXMubGVuZ3RoCisgIGlmIChsZW5EaWZmICE9IDAp
IHsgcmV0dXJuIGxlbkRpZmYgfQorICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5k
KCkKKyAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVm
dChhKSAtIGV4dHJhTGVmdChiKQorICBpZiAoZnJvbUNtcCkgeyByZXR1cm4gLWZyb21DbXAgfQor
ICB2YXIgdG9DbXAgPSBjbXAoYVBvcy50bywgYlBvcy50bykgfHwgZXh0cmFSaWdodChhKSAtIGV4
dHJhUmlnaHQoYikKKyAgaWYgKHRvQ21wKSB7IHJldHVybiB0b0NtcCB9CisgIHJldHVybiBiLmlk
IC0gYS5pZAorfQorCisvLyBGaW5kIG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9yIHN0YXJ0cyBp
biBhIGNvbGxhcHNlZCBzcGFuLiBJZgorLy8gc28sIHJldHVybiB0aGUgbWFya2VyIGZvciB0aGF0
IHNwYW4uCitmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7CisgIHZh
ciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZAorICBp
ZiAoc3BzKSB7IGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsg
KytpKSB7CisgICAgc3AgPSBzcHNbaV0KKyAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAo
c3RhcnQgPyBzcC5mcm9tIDogc3AudG8pID09IG51bGwgJiYKKyAgICAgICAgKCFmb3VuZCB8fCBj
b21wYXJlQ29sbGFwc2VkTWFya2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKQorICAgICAgeyBm
b3VuZCA9IHNwLm1hcmtlciB9CisgIH0gfQorICByZXR1cm4gZm91bmQKK30KK2Z1bmN0aW9uIGNv
bGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGlu
ZSwgdHJ1ZSkgfQorZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNv
bGxhcHNlZFNwYW5BdFNpZGUobGluZSwgZmFsc2UpIH0KKworLy8gVGVzdCB3aGV0aGVyIHRoZXJl
IGV4aXN0cyBhIGNvbGxhcHNlZCBzcGFuIHRoYXQgcGFydGlhbGx5CisvLyBvdmVybGFwcyAoY292
ZXJzIHRoZSBzdGFydCBvciBlbmQsIGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi4KKy8vIFN1
Y2ggb3ZlcmxhcCBpcyBub3QgYWxsb3dlZC4KK2Z1bmN0aW9uIGNvbmZsaWN0aW5nQ29sbGFwc2Vk
UmFuZ2UoZG9jLCBsaW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHsKKyAgdmFyIGxpbmUgPSBnZXRM
aW5lKGRvYywgbGluZU5vKQorICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5t
YXJrZWRTcGFucworICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsg
KytpKSB7CisgICAgdmFyIHNwID0gc3BzW2ldCisgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2Vk
KSB7IGNvbnRpbnVlIH0KKyAgICB2YXIgZm91bmQgPSBzcC5tYXJrZXIuZmluZCgwKQorICAgIHZh
ciBmcm9tQ21wID0gY21wKGZvdW5kLmZyb20sIGZyb20pIHx8IGV4dHJhTGVmdChzcC5tYXJrZXIp
IC0gZXh0cmFMZWZ0KG1hcmtlcikKKyAgICB2YXIgdG9DbXAgPSBjbXAoZm91bmQudG8sIHRvKSB8
fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcikKKyAgICBpZiAoZnJv
bUNtcCA+PSAwICYmIHRvQ21wIDw9IDAgfHwgZnJvbUNtcCA8PSAwICYmIHRvQ21wID49IDApIHsg
Y29udGludWUgfQorICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKHNwLm1hcmtlci5pbmNsdXNpdmVS
aWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IGNtcChmb3VuZC50bywgZnJvbSkgPj0gMCA6
IGNtcChmb3VuZC50bywgZnJvbSkgPiAwKSB8fAorICAgICAgICBmcm9tQ21wID49IDAgJiYgKHNw
Lm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IGNtcChmb3Vu
ZC5mcm9tLCB0bykgPD0gMCA6IGNtcChmb3VuZC5mcm9tLCB0bykgPCAwKSkKKyAgICAgIHsgcmV0
dXJuIHRydWUgfQorICB9IH0KK30KKworLy8gQSB2aXN1YWwgbGluZSBpcyBhIGxpbmUgYXMgZHJh
d24gb24gdGhlIHNjcmVlbi4gRm9sZGluZywgZm9yCisvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVs
dGlwbGUgbG9naWNhbCBsaW5lcyB0byBhcHBlYXIgb24gdGhlIHNhbWUKKy8vIHZpc3VhbCBsaW5l
LiBUaGlzIGZpbmRzIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGUKKy8vIGdp
dmVuIGxpbmUgaXMgcGFydCBvZiAodXN1YWxseSB0aGF0IGlzIHRoZSBsaW5lIGl0c2VsZikuCitm
dW5jdGlvbiB2aXN1YWxMaW5lKGxpbmUpIHsKKyAgdmFyIG1lcmdlZAorICB3aGlsZSAobWVyZ2Vk
ID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpCisgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQo
LTEsIHRydWUpLmxpbmUgfQorICByZXR1cm4gbGluZQorfQorCisvLyBSZXR1cm5zIGFuIGFycmF5
IG9mIGxvZ2ljYWwgbGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmUKKy8vIHN0YXJ0
ZWQgYnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGlu
ZXMuCitmdW5jdGlvbiB2aXN1YWxMaW5lQ29udGludWVkKGxpbmUpIHsKKyAgdmFyIG1lcmdlZCwg
bGluZXMKKyAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgeworICAg
IGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lCisgICAgOyhsaW5lcyB8fCAobGluZXMg
PSBbXSkpLnB1c2gobGluZSkKKyAgfQorICByZXR1cm4gbGluZXMKK30KKworLy8gR2V0IHRoZSBs
aW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHZpc3VhbCBsaW5lIHRoYXQgdGhlCisvLyBn
aXZlbiBsaW5lIG51bWJlciBpcyBwYXJ0IG9mLgorZnVuY3Rpb24gdmlzdWFsTGluZU5vKGRvYywg
bGluZU4pIHsKKyAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCB2aXMgPSB2aXN1YWxM
aW5lKGxpbmUpCisgIGlmIChsaW5lID09IHZpcykgeyByZXR1cm4gbGluZU4gfQorICByZXR1cm4g
bGluZU5vKHZpcykKK30KKworLy8gR2V0IHRoZSBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2Yg
dGhlIG5leHQgdmlzdWFsIGxpbmUgYWZ0ZXIKKy8vIHRoZSBnaXZlbiBsaW5lLgorZnVuY3Rpb24g
dmlzdWFsTGluZUVuZE5vKGRvYywgbGluZU4pIHsKKyAgaWYgKGxpbmVOID4gZG9jLmxhc3RMaW5l
KCkpIHsgcmV0dXJuIGxpbmVOIH0KKyAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCBt
ZXJnZWQKKyAgaWYgKCFsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyByZXR1cm4gbGluZU4gfQor
ICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKQorICAgIHsgbGluZSA9
IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmUgfQorICByZXR1cm4gbGluZU5vKGxpbmUpICsgMQor
fQorCisvLyBDb21wdXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMg
aGlkZGVuIHdoZW4gdGhleQorLy8gYXJlIHBhcnQgb2YgYSB2aXN1YWwgbGluZSB0aGF0IHN0YXJ0
cyB3aXRoIGFub3RoZXIgbGluZSwgb3Igd2hlbgorLy8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJl
ZCBieSBjb2xsYXBzZWQsIG5vbi13aWRnZXQgc3Bhbi4KK2Z1bmN0aW9uIGxpbmVJc0hpZGRlbihk
b2MsIGxpbmUpIHsKKyAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2Vk
U3BhbnMKKyAgaWYgKHNwcykgeyBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IHNw
cy5sZW5ndGg7ICsraSkgeworICAgIHNwID0gc3BzW2ldCisgICAgaWYgKCFzcC5tYXJrZXIuY29s
bGFwc2VkKSB7IGNvbnRpbnVlIH0KKyAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSB7IHJldHVybiB0
cnVlIH0KKyAgICBpZiAoc3AubWFya2VyLndpZGdldE5vZGUpIHsgY29udGludWUgfQorICAgIGlm
IChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVu
SW5uZXIoZG9jLCBsaW5lLCBzcCkpCisgICAgICB7IHJldHVybiB0cnVlIH0KKyAgfSB9Cit9Citm
dW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHsKKyAgaWYgKHNwYW4u
dG8gPT0gbnVsbCkgeworICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpCisg
ICAgcmV0dXJuIGxpbmVJc0hpZGRlbklubmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5G
b3IoZW5kLmxpbmUubWFya2VkU3BhbnMsIHNwYW4ubWFya2VyKSkKKyAgfQorICBpZiAoc3Bhbi5t
YXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgc3Bhbi50byA9PSBsaW5lLnRleHQubGVuZ3RoKQorICAg
IHsgcmV0dXJuIHRydWUgfQorICBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IGxp
bmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHsKKyAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNb
aV0KKyAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAhc3AubWFya2VyLndpZGdldE5vZGUg
JiYgc3AuZnJvbSA9PSBzcGFuLnRvICYmCisgICAgICAgIChzcC50byA9PSBudWxsIHx8IHNwLnRv
ICE9IHNwYW4uZnJvbSkgJiYKKyAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNw
YW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgorICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihk
b2MsIGxpbmUsIHNwKSkgeyByZXR1cm4gdHJ1ZSB9CisgIH0KK30KIAotICAgICAgaWYgKHdyYXBw
aW5nKQotICAgICAgICByZXR1cm4gd2lkZ2V0c0hlaWdodCArIChNYXRoLmNlaWwobGluZS50ZXh0
Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGg7CisvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUg
dGhlIGdpdmVuIGxpbmUuCitmdW5jdGlvbiBoZWlnaHRBdExpbmUobGluZU9iaikgeworICBsaW5l
T2JqID0gdmlzdWFsTGluZShsaW5lT2JqKQorCisgIHZhciBoID0gMCwgY2h1bmsgPSBsaW5lT2Jq
LnBhcmVudAorICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytpKSB7
CisgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXQorICAgIGlmIChsaW5lID09IGxpbmVPYmop
IHsgYnJlYWsgfQorICAgIGVsc2UgeyBoICs9IGxpbmUuaGVpZ2h0IH0KKyAgfQorICBmb3IgKHZh
ciBwID0gY2h1bmsucGFyZW50OyBwOyBjaHVuayA9IHAsIHAgPSBjaHVuay5wYXJlbnQpIHsKKyAg
ICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwLmNoaWxkcmVuLmxlbmd0aDsgKytpJDEpIHsKKyAg
ICAgIHZhciBjdXIgPSBwLmNoaWxkcmVuW2kkMV0KKyAgICAgIGlmIChjdXIgPT0gY2h1bmspIHsg
YnJlYWsgfQorICAgICAgZWxzZSB7IGggKz0gY3VyLmhlaWdodCB9CisgICAgfQorICB9CisgIHJl
dHVybiBoCit9CisKKy8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0
YWtpbmcgaW50byBhY2NvdW50CisvLyBjb2xsYXBzZWQgcmFuZ2VzIChzZWUgbWFya1RleHQpIHRo
YXQgbWlnaHQgaGlkZSBwYXJ0cywgYW5kIGpvaW4KKy8vIG90aGVyIGxpbmVzIG9udG8gaXQuCitm
dW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHsKKyAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHsgcmV0
dXJuIDAgfQorICB2YXIgbGVuID0gbGluZS50ZXh0Lmxlbmd0aCwgbWVyZ2VkLCBjdXIgPSBsaW5l
CisgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChjdXIpKSB7CisgICAgdmFy
IGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSkKKyAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmUK
KyAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoCisgIH0KKyAgY3VyID0gbGlu
ZQorICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGN1cikpIHsKKyAgICB2YXIg
Zm91bmQkMSA9IG1lcmdlZC5maW5kKDAsIHRydWUpCisgICAgbGVuIC09IGN1ci50ZXh0Lmxlbmd0
aCAtIGZvdW5kJDEuZnJvbS5jaAorICAgIGN1ciA9IGZvdW5kJDEudG8ubGluZQorICAgIGxlbiAr
PSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZCQxLnRvLmNoCisgIH0KKyAgcmV0dXJuIGxlbgorfQor
CisvLyBGaW5kIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50LgorZnVuY3Rpb24gZmlu
ZE1heExpbmUoY20pIHsKKyAgdmFyIGQgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2MKKyAgZC5t
YXhMaW5lID0gZ2V0TGluZShkb2MsIGRvYy5maXJzdCkKKyAgZC5tYXhMaW5lTGVuZ3RoID0gbGlu
ZUxlbmd0aChkLm1heExpbmUpCisgIGQubWF4TGluZUNoYW5nZWQgPSB0cnVlCisgIGRvYy5pdGVy
KGZ1bmN0aW9uIChsaW5lKSB7CisgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSkKKyAgICBp
ZiAobGVuID4gZC5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW4K
KyAgICAgIGQubWF4TGluZSA9IGxpbmUKKyAgICB9CisgIH0pCit9CisKKy8vIEJJREkgSEVMUEVS
UworCitmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikgewor
ICBpZiAoIW9yZGVyKSB7IHJldHVybiBmKGZyb20sIHRvLCAibHRyIikgfQorICB2YXIgZm91bmQg
PSBmYWxzZQorICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7CisgICAg
dmFyIHBhcnQgPSBvcmRlcltpXQorICAgIGlmIChwYXJ0LmZyb20gPCB0byAmJiBwYXJ0LnRvID4g
ZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkgeworICAgICAgZihNYXRoLm1h
eChwYXJ0LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byksIHBhcnQubGV2ZWwgPT0g
MSA/ICJydGwiIDogImx0ciIpCisgICAgICBmb3VuZCA9IHRydWUKKyAgICB9CisgIH0KKyAgaWYg
KCFmb3VuZCkgeyBmKGZyb20sIHRvLCAibHRyIikgfQorfQorCitmdW5jdGlvbiBiaWRpTGVmdChw
YXJ0KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb20gfQorZnVu
Y3Rpb24gYmlkaVJpZ2h0KHBhcnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8gcGFydC5mcm9t
IDogcGFydC50byB9CisKK2Z1bmN0aW9uIGxpbmVMZWZ0KGxpbmUpIHsgdmFyIG9yZGVyID0gZ2V0
T3JkZXIobGluZSk7IHJldHVybiBvcmRlciA/IGJpZGlMZWZ0KG9yZGVyWzBdKSA6IDAgfQorZnVu
Y3Rpb24gbGluZVJpZ2h0KGxpbmUpIHsKKyAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSkKKyAg
aWYgKCFvcmRlcikgeyByZXR1cm4gbGluZS50ZXh0Lmxlbmd0aCB9CisgIHJldHVybiBiaWRpUmln
aHQobHN0KG9yZGVyKSkKK30KKworZnVuY3Rpb24gY29tcGFyZUJpZGlMZXZlbChvcmRlciwgYSwg
YikgeworICB2YXIgbGluZWRpciA9IG9yZGVyWzBdLmxldmVsCisgIGlmIChhID09IGxpbmVkaXIp
IHsgcmV0dXJuIHRydWUgfQorICBpZiAoYiA9PSBsaW5lZGlyKSB7IHJldHVybiBmYWxzZSB9Cisg
IHJldHVybiBhIDwgYgorfQorCit2YXIgYmlkaU90aGVyID0gbnVsbAorZnVuY3Rpb24gZ2V0Qmlk
aVBhcnRBdChvcmRlciwgcG9zKSB7CisgIHZhciBmb3VuZAorICBiaWRpT3RoZXIgPSBudWxsCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgY3VyID0g
b3JkZXJbaV0KKyAgICBpZiAoY3VyLmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSB7IHJldHVy
biBpIH0KKyAgICBpZiAoKGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9zKSkgeworICAg
ICAgaWYgKGZvdW5kID09IG51bGwpIHsKKyAgICAgICAgZm91bmQgPSBpCisgICAgICB9IGVsc2Ug
aWYgKGNvbXBhcmVCaWRpTGV2ZWwob3JkZXIsIGN1ci5sZXZlbCwgb3JkZXJbZm91bmRdLmxldmVs
KSkgeworICAgICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvKSB7IGJpZGlPdGhlciA9IGZvdW5k
IH0KKyAgICAgICAgcmV0dXJuIGkKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjdXIuZnJv
bSAhPSBjdXIudG8pIHsgYmlkaU90aGVyID0gaSB9CisgICAgICAgIHJldHVybiBmb3VuZAorICAg
ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gZm91bmQKK30KKworZnVuY3Rpb24gbW92ZUluTGlu
ZShsaW5lLCBwb3MsIGRpciwgYnlVbml0KSB7CisgIGlmICghYnlVbml0KSB7IHJldHVybiBwb3Mg
KyBkaXIgfQorICBkbyB7IHBvcyArPSBkaXIgfQorICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVu
ZGluZ0NoYXIobGluZS50ZXh0LmNoYXJBdChwb3MpKSkKKyAgcmV0dXJuIHBvcworfQorCisvLyBU
aGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBtb3ZlICd2aXN1YWxseScgdGhyb3VnaCBiaS1kaXJl
Y3Rpb25hbAorLy8gdGV4dCAtLSBpLmUuLCBwcmVzc2luZyBsZWZ0IHNob3VsZCBtYWtlIHRoZSBj
dXJzb3IgZ28gbGVmdCwgZXZlbgorLy8gd2hlbiBpbiBSVEwgdGV4dC4gVGhlIHRyaWNreSBwYXJ0
IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kCisvLyBMVFIgdGV4dCB0b3VjaCBlYWNoIG90
aGVyLiBUaGlzIG9mdGVuIHJlcXVpcmVzIHRoZSBjdXJzb3Igb2Zmc2V0CisvLyB0byBtb3ZlIG1v
cmUgdGhhbiBvbmUgdW5pdCwgaW4gb3JkZXIgdG8gdmlzdWFsbHkgbW92ZSBvbmUgdW5pdC4KK2Z1
bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKKyAgdmFyIGJp
ZGkgPSBnZXRPcmRlcihsaW5lKQorICBpZiAoIWJpZGkpIHsgcmV0dXJuIG1vdmVMb2dpY2FsbHko
bGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB9CisgIHZhciBwb3MgPSBnZXRCaWRpUGFydEF0KGJp
ZGksIHN0YXJ0KSwgcGFydCA9IGJpZGlbcG9zXQorICB2YXIgdGFyZ2V0ID0gbW92ZUluTGluZShs
aW5lLCBzdGFydCwgcGFydC5sZXZlbCAlIDIgPyAtZGlyIDogZGlyLCBieVVuaXQpCisKKyAgZm9y
ICg7OykgeworICAgIGlmICh0YXJnZXQgPiBwYXJ0LmZyb20gJiYgdGFyZ2V0IDwgcGFydC50bykg
eyByZXR1cm4gdGFyZ2V0IH0KKyAgICBpZiAodGFyZ2V0ID09IHBhcnQuZnJvbSB8fCB0YXJnZXQg
PT0gcGFydC50bykgeworICAgICAgaWYgKGdldEJpZGlQYXJ0QXQoYmlkaSwgdGFyZ2V0KSA9PSBw
b3MpIHsgcmV0dXJuIHRhcmdldCB9CisgICAgICBwYXJ0ID0gYmlkaVtwb3MgKz0gZGlyXQorICAg
ICAgcmV0dXJuIChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZy
b20KKyAgICB9IGVsc2UgeworICAgICAgcGFydCA9IGJpZGlbcG9zICs9IGRpcl0KKyAgICAgIGlm
ICghcGFydCkgeyByZXR1cm4gbnVsbCB9CisgICAgICBpZiAoKGRpciA+IDApID09IHBhcnQubGV2
ZWwgJSAyKQorICAgICAgICB7IHRhcmdldCA9IG1vdmVJbkxpbmUobGluZSwgcGFydC50bywgLTEs
IGJ5VW5pdCkgfQogICAgICAgZWxzZQotICAgICAgICByZXR1cm4gd2lkZ2V0c0hlaWdodCArIHRo
OwotICAgIH07CisgICAgICAgIHsgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBwYXJ0LmZyb20s
IDEsIGJ5VW5pdCkgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxp
bmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgeworICB2YXIgdGFyZ2V0ID0gc3RhcnQgKyBkaXIKKyAg
aWYgKGJ5VW5pdCkgeyB3aGlsZSAodGFyZ2V0ID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGluZS50
ZXh0LmNoYXJBdCh0YXJnZXQpKSkgeyB0YXJnZXQgKz0gZGlyIH0gfQorICByZXR1cm4gdGFyZ2V0
IDwgMCB8fCB0YXJnZXQgPiBsaW5lLnRleHQubGVuZ3RoID8gbnVsbCA6IHRhcmdldAorfQorCisv
LyBCaWRpcmVjdGlvbmFsIG9yZGVyaW5nIGFsZ29yaXRobQorLy8gU2VlIGh0dHA6Ly91bmljb2Rl
Lm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobQorLy8gdGhhdCB0
aGlzIChwYXJ0aWFsbHkpIGltcGxlbWVudHMuCisKKy8vIE9uZS1jaGFyIGNvZGVzIHVzZWQgZm9y
IGNoYXJhY3RlciB0eXBlczoKKy8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHQKKy8vIFIgKFIpOiAg
IFJpZ2h0LXRvLUxlZnQKKy8vIHIgKEFMKTogIFJpZ2h0LXRvLUxlZnQgQXJhYmljCisvLyAxIChF
Tik6ICBFdXJvcGVhbiBOdW1iZXIKKy8vICsgKEVTKTogIEV1cm9wZWFuIE51bWJlciBTZXBhcmF0
b3IKKy8vICUgKEVUKTogIEV1cm9wZWFuIE51bWJlciBUZXJtaW5hdG9yCisvLyBuIChBTik6ICBB
cmFiaWMgTnVtYmVyCisvLyAsIChDUyk6ICBDb21tb24gTnVtYmVyIFNlcGFyYXRvcgorLy8gbSAo
TlNNKTogTm9uLVNwYWNpbmcgTWFyaworLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbAorLy8g
cyAoQik6ICAgUGFyYWdyYXBoIFNlcGFyYXRvcgorLy8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0
b3IKKy8vIHcgKFdTKTogIFdoaXRlc3BhY2UKKy8vIE4gKE9OKTogIE90aGVyIE5ldXRyYWxzCisK
Ky8vIFJldHVybnMgbnVsbCBpZiBjaGFyYWN0ZXJzIGFyZSBvcmRlcmVkIGFzIHRoZXkgYXBwZWFy
CisvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8s
IGxldmVsfQorLy8gb2JqZWN0cykgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgdmlz
dWFsbHkuCit2YXIgYmlkaU9yZGVyaW5nID0gKGZ1bmN0aW9uKCkgeworICAvLyBDaGFyYWN0ZXIg
dHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmCisgIHZhciBsb3dUeXBlcyA9ICJiYmJiYmJi
YmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5O
TkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExM
TExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUl
MTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExM
TExMTExMTExMTExMTiIKKyAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDB4NjAw
IHRvIDB4NmY5CisgIHZhciBhcmFiaWNUeXBlcyA9ICJubm5ubm5OTnIlJXIsck5ObW1tbW1tbW1t
bW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1t
bW1tbW1tbW1tbW1tbW1ubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJybW1tbW1tbW5ObW1tbW1tcnJtbU5tbW1tcnIxMTExMTExMTExIgor
ICBmdW5jdGlvbiBjaGFyVHlwZShjb2RlKSB7CisgICAgaWYgKGNvZGUgPD0gMHhmNykgeyByZXR1
cm4gbG93VHlwZXMuY2hhckF0KGNvZGUpIH0KKyAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYm
IGNvZGUgPD0gMHg1ZjQpIHsgcmV0dXJuICJSIiB9CisgICAgZWxzZSBpZiAoMHg2MDAgPD0gY29k
ZSAmJiBjb2RlIDw9IDB4NmY5KSB7IHJldHVybiBhcmFiaWNUeXBlcy5jaGFyQXQoY29kZSAtIDB4
NjAwKSB9CisgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSB7IHJl
dHVybiAiciIgfQorICAgIGVsc2UgaWYgKDB4MjAwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgyMDBi
KSB7IHJldHVybiAidyIgfQorICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSB7IHJldHVybiAi
YiIgfQorICAgIGVsc2UgeyByZXR1cm4gIkwiIH0KKyAgfQorCisgIHZhciBiaWRpUkUgPSAvW1x1
MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vCisgIHZhciBpc05ldXRyYWwg
PSAvW3N0d05dLywgaXNTdHJvbmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywg
Y291bnRzQXNOdW0gPSAvWzFuXS8KKyAgLy8gQnJvd3NlcnMgc2VlbSB0byBhbHdheXMgdHJlYXQg
dGhlIGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMgYXMgYmVpbmcgTC4KKyAgdmFyIG91dGVy
VHlwZSA9ICJMIgorCisgIGZ1bmN0aW9uIEJpZGlTcGFuKGxldmVsLCBmcm9tLCB0bykgeworICAg
IHRoaXMubGV2ZWwgPSBsZXZlbAorICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bwor
ICB9CisKKyAgcmV0dXJuIGZ1bmN0aW9uKHN0cikgeworICAgIGlmICghYmlkaVJFLnRlc3Qoc3Ry
KSkgeyByZXR1cm4gZmFsc2UgfQorICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtd
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgIHsgdHlwZXMucHVzaChj
aGFyVHlwZShzdHIuY2hhckNvZGVBdChpKSkpIH0KKworICAgIC8vIFcxLiBFeGFtaW5lIGVhY2gg
bm9uLXNwYWNpbmcgbWFyayAoTlNNKSBpbiB0aGUgbGV2ZWwgcnVuLCBhbmQKKyAgICAvLyBjaGFu
Z2UgdGhlIHR5cGUgb2YgdGhlIE5TTSB0byB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXMKKyAgICAv
LyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4s
IGl0IHdpbGwKKyAgICAvLyBnZXQgdGhlIHR5cGUgb2Ygc29yLgorICAgIGZvciAodmFyIGkkMSA9
IDAsIHByZXYgPSBvdXRlclR5cGU7IGkkMSA8IGxlbjsgKytpJDEpIHsKKyAgICAgIHZhciB0eXBl
ID0gdHlwZXNbaSQxXQorICAgICAgaWYgKHR5cGUgPT0gIm0iKSB7IHR5cGVzW2kkMV0gPSBwcmV2
IH0KKyAgICAgIGVsc2UgeyBwcmV2ID0gdHlwZSB9CisgICAgfQorCisgICAgLy8gVzIuIFNlYXJj
aCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyCisgICAg
Ly8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3Vu
ZC4gSWYgYW4KKyAgICAvLyBBTCBpcyBmb3VuZCwgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJv
cGVhbiBudW1iZXIgdG8gQXJhYmljCisgICAgLy8gbnVtYmVyLgorICAgIC8vIFczLiBDaGFuZ2Ug
YWxsIEFMcyB0byBSLgorICAgIGZvciAodmFyIGkkMiA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSQy
IDwgbGVuOyArK2kkMikgeworICAgICAgdmFyIHR5cGUkMSA9IHR5cGVzW2kkMl0KKyAgICAgIGlm
ICh0eXBlJDEgPT0gIjEiICYmIGN1ciA9PSAiciIpIHsgdHlwZXNbaSQyXSA9ICJuIiB9CisgICAg
ICBlbHNlIGlmIChpc1N0cm9uZy50ZXN0KHR5cGUkMSkpIHsgY3VyID0gdHlwZSQxOyBpZiAodHlw
ZSQxID09ICJyIikgeyB0eXBlc1tpJDJdID0gIlIiIH0gfQorICAgIH0KKworICAgIC8vIFc0LiBB
IHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gRXVyb3BlYW4gbnVtYmVycwor
ICAgIC8vIGNoYW5nZXMgdG8gYSBFdXJvcGVhbiBudW1iZXIuIEEgc2luZ2xlIGNvbW1vbiBzZXBh
cmF0b3IgYmV0d2VlbgorICAgIC8vIHR3byBudW1iZXJzIG9mIHRoZSBzYW1lIHR5cGUgY2hhbmdl
cyB0byB0aGF0IHR5cGUuCisgICAgZm9yICh2YXIgaSQzID0gMSwgcHJldiQxID0gdHlwZXNbMF07
IGkkMyA8IGxlbiAtIDE7ICsraSQzKSB7CisgICAgICB2YXIgdHlwZSQyID0gdHlwZXNbaSQzXQor
ICAgICAgaWYgKHR5cGUkMiA9PSAiKyIgJiYgcHJldiQxID09ICIxIiAmJiB0eXBlc1tpJDMrMV0g
PT0gIjEiKSB7IHR5cGVzW2kkM10gPSAiMSIgfQorICAgICAgZWxzZSBpZiAodHlwZSQyID09ICIs
IiAmJiBwcmV2JDEgPT0gdHlwZXNbaSQzKzFdICYmCisgICAgICAgICAgICAgICAocHJldiQxID09
ICIxIiB8fCBwcmV2JDEgPT0gIm4iKSkgeyB0eXBlc1tpJDNdID0gcHJldiQxIH0KKyAgICAgIHBy
ZXYkMSA9IHR5cGUkMgorICAgIH0KKworICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFu
IHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuCisgICAgLy8gbnVtYmVycyBjaGFuZ2Vz
IHRvIGFsbCBFdXJvcGVhbiBudW1iZXJzLgorICAgIC8vIFc2LiBPdGhlcndpc2UsIHNlcGFyYXRv
cnMgYW5kIHRlcm1pbmF0b3JzIGNoYW5nZSB0byBPdGhlcgorICAgIC8vIE5ldXRyYWwuCisgICAg
Zm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgbGVuOyArK2kkNCkgeworICAgICAgdmFyIHR5cGUkMyA9
IHR5cGVzW2kkNF0KKyAgICAgIGlmICh0eXBlJDMgPT0gIiwiKSB7IHR5cGVzW2kkNF0gPSAiTiIg
fQorICAgICAgZWxzZSBpZiAodHlwZSQzID09ICIlIikgeworICAgICAgICB2YXIgZW5kID0gKHZv
aWQgMCkKKyAgICAgICAgZm9yIChlbmQgPSBpJDQgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5k
XSA9PSAiJSI7ICsrZW5kKSB7fQorICAgICAgICB2YXIgcmVwbGFjZSA9IChpJDQgJiYgdHlwZXNb
aSQ0LTFdID09ICIhIikgfHwgKGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09ICIxIikgPyAiMSIg
OiAiTiIKKyAgICAgICAgZm9yICh2YXIgaiA9IGkkNDsgaiA8IGVuZDsgKytqKSB7IHR5cGVzW2pd
ID0gcmVwbGFjZSB9CisgICAgICAgIGkkNCA9IGVuZCAtIDEKKyAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBXNy4gU2VhcmNoIGJhY2t3YXJkcyBmcm9tIGVhY2ggaW5zdGFuY2Ugb2YgYSBFdXJvcGVh
biBudW1iZXIKKyAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNv
cikgaXMgZm91bmQuIElmIGFuIEwgaXMKKyAgICAvLyBmb3VuZCwgdGhlbiBjaGFuZ2UgdGhlIHR5
cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBMLgorICAgIGZvciAodmFyIGkkNSA9IDAsIGN1
ciQxID0gb3V0ZXJUeXBlOyBpJDUgPCBsZW47ICsraSQ1KSB7CisgICAgICB2YXIgdHlwZSQ0ID0g
dHlwZXNbaSQ1XQorICAgICAgaWYgKGN1ciQxID09ICJMIiAmJiB0eXBlJDQgPT0gIjEiKSB7IHR5
cGVzW2kkNV0gPSAiTCIgfQorICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDQpKSB7
IGN1ciQxID0gdHlwZSQ0IH0KKyAgICB9CisKKyAgICAvLyBOMS4gQSBzZXF1ZW5jZSBvZiBuZXV0
cmFscyB0YWtlcyB0aGUgZGlyZWN0aW9uIG9mIHRoZQorICAgIC8vIHN1cnJvdW5kaW5nIHN0cm9u
ZyB0ZXh0IGlmIHRoZSB0ZXh0IG9uIGJvdGggc2lkZXMgaGFzIHRoZSBzYW1lCisgICAgLy8gZGly
ZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBS
IGluCisgICAgLy8gdGVybXMgb2YgdGhlaXIgaW5mbHVlbmNlIG9uIG5ldXRyYWxzLiBTdGFydC1v
Zi1sZXZlbC1ydW4gKHNvcikKKyAgICAvLyBhbmQgZW5kLW9mLWxldmVsLXJ1biAoZW9yKSBhcmUg
dXNlZCBhdCBsZXZlbCBydW4gYm91bmRhcmllcy4KKyAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBu
ZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLgorICAgIGZvciAodmFyIGkkNiA9
IDA7IGkkNiA8IGxlbjsgKytpJDYpIHsKKyAgICAgIGlmIChpc05ldXRyYWwudGVzdCh0eXBlc1tp
JDZdKSkgeworICAgICAgICB2YXIgZW5kJDEgPSAodm9pZCAwKQorICAgICAgICBmb3IgKGVuZCQx
ID0gaSQ2ICsgMTsgZW5kJDEgPCBsZW4gJiYgaXNOZXV0cmFsLnRlc3QodHlwZXNbZW5kJDFdKTsg
KytlbmQkMSkge30KKyAgICAgICAgdmFyIGJlZm9yZSA9IChpJDYgPyB0eXBlc1tpJDYtMV0gOiBv
dXRlclR5cGUpID09ICJMIgorICAgICAgICB2YXIgYWZ0ZXIgPSAoZW5kJDEgPCBsZW4gPyB0eXBl
c1tlbmQkMV0gOiBvdXRlclR5cGUpID09ICJMIgorICAgICAgICB2YXIgcmVwbGFjZSQxID0gYmVm
b3JlIHx8IGFmdGVyID8gIkwiIDogIlIiCisgICAgICAgIGZvciAodmFyIGokMSA9IGkkNjsgaiQx
IDwgZW5kJDE7ICsraiQxKSB7IHR5cGVzW2okMV0gPSByZXBsYWNlJDEgfQorICAgICAgICBpJDYg
PSBlbmQkMSAtIDEKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIZXJlIHdlIGRlcGFydCBmcm9t
IHRoZSBkb2N1bWVudGVkIGFsZ29yaXRobSwgaW4gb3JkZXIgdG8gYXZvaWQKKyAgICAvLyBidWls
ZGluZyB1cCBhbiBhY3R1YWwgbGV2ZWxzIGFycmF5LiBTaW5jZSB0aGVyZSBhcmUgb25seSB0aHJl
ZQorICAgIC8vIGxldmVscyAoMCwgMSwgMikgaW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vz
bid0IHRha2UKKyAgICAvLyBleHBsaWNpdCBlbWJlZGRpbmcgaW50byBhY2NvdW50LCB3ZSBjYW4g
YnVpbGQgdXAgdGhlIG9yZGVyIG9uCisgICAgLy8gdGhlIGZseSwgd2l0aG91dCBmb2xsb3dpbmcg
dGhlIGxldmVsLWJhc2VkIGFsZ29yaXRobS4KKyAgICB2YXIgb3JkZXIgPSBbXSwgbQorICAgIGZv
ciAodmFyIGkkNyA9IDA7IGkkNyA8IGxlbjspIHsKKyAgICAgIGlmIChjb3VudHNBc0xlZnQudGVz
dCh0eXBlc1tpJDddKSkgeworICAgICAgICB2YXIgc3RhcnQgPSBpJDcKKyAgICAgICAgZm9yICgr
K2kkNzsgaSQ3IDwgbGVuICYmIGNvdW50c0FzTGVmdC50ZXN0KHR5cGVzW2kkN10pOyArK2kkNykg
e30KKyAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgc3RhcnQsIGkkNykpCisgICAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgcG9zID0gaSQ3LCBhdCA9IG9yZGVyLmxlbmd0aAorICAg
ICAgICBmb3IgKCsraSQ3OyBpJDcgPCBsZW4gJiYgdHlwZXNbaSQ3XSAhPSAiTCI7ICsraSQ3KSB7
fQorICAgICAgICBmb3IgKHZhciBqJDIgPSBwb3M7IGokMiA8IGkkNzspIHsKKyAgICAgICAgICBp
ZiAoY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKSkgeworICAgICAgICAgICAgaWYgKHBvcyA8
IGokMikgeyBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGokMikpIH0K
KyAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqJDIKKyAgICAgICAgICAgIGZvciAoKytqJDI7IGok
MiA8IGkkNyAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2okMl0pOyArK2okMikge30KKyAgICAg
ICAgICAgIG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDIsIG5zdGFydCwgaiQyKSkK
KyAgICAgICAgICAgIHBvcyA9IGokMgorICAgICAgICAgIH0gZWxzZSB7ICsraiQyIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocG9zIDwgaSQ3KSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJp
ZGlTcGFuKDEsIHBvcywgaSQ3KSkgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAob3JkZXJbMF0u
bGV2ZWwgPT0gMSAmJiAobSA9IHN0ci5tYXRjaCgvXlxzKy8pKSkgeworICAgICAgb3JkZXJbMF0u
ZnJvbSA9IG1bMF0ubGVuZ3RoCisgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigwLCAw
LCBtWzBdLmxlbmd0aCkpCisgICAgfQorICAgIGlmIChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYg
KG0gPSBzdHIubWF0Y2goL1xzKyQvKSkpIHsKKyAgICAgIGxzdChvcmRlcikudG8gLT0gbVswXS5s
ZW5ndGgKKyAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3Ro
LCBsZW4pKQorICAgIH0KKyAgICBpZiAob3JkZXJbMF0ubGV2ZWwgPT0gMikKKyAgICAgIHsgb3Jk
ZXIudW5zaGlmdChuZXcgQmlkaVNwYW4oMSwgb3JkZXJbMF0udG8sIG9yZGVyWzBdLnRvKSkgfQor
ICAgIGlmIChvcmRlclswXS5sZXZlbCAhPSBsc3Qob3JkZXIpLmxldmVsKQorICAgICAgeyBvcmRl
ci5wdXNoKG5ldyBCaWRpU3BhbihvcmRlclswXS5sZXZlbCwgbGVuLCBsZW4pKSB9CisKKyAgICBy
ZXR1cm4gb3JkZXIKICAgfQorfSkoKQorCisvLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRo
ZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zCisvLyBmYWxzZSBmb3IgbGluZXMg
dGhhdCBhcmUgZnVsbHkgbGVmdC10by1yaWdodCwgYW5kIGFuIGFycmF5IG9mCisvLyBCaWRpU3Bh
biBvYmplY3RzIG90aGVyd2lzZS4KK2Z1bmN0aW9uIGdldE9yZGVyKGxpbmUpIHsKKyAgdmFyIG9y
ZGVyID0gbGluZS5vcmRlcgorICBpZiAob3JkZXIgPT0gbnVsbCkgeyBvcmRlciA9IGxpbmUub3Jk
ZXIgPSBiaWRpT3JkZXJpbmcobGluZS50ZXh0KSB9CisgIHJldHVybiBvcmRlcgorfQorCisvLyBF
VkVOVCBIQU5ETElORworCisvLyBMaWdodHdlaWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBh
bHNvIHdvcmsgb24gRE9NIG5vZGVzLAorLy8gcmVnaXN0ZXJpbmcgbmF0aXZlIERPTSBoYW5kbGVy
cy4KKwordmFyIG5vSGFuZGxlcnMgPSBbXQorCit2YXIgb24gPSBmdW5jdGlvbihlbWl0dGVyLCB0
eXBlLCBmKSB7CisgIGlmIChlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgICBlbWl0dGVy
LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpCisgIH0gZWxzZSBpZiAoZW1pdHRlci5h
dHRhY2hFdmVudCkgeworICAgIGVtaXR0ZXIuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpCisg
IH0gZWxzZSB7CisgICAgdmFyIG1hcCA9IGVtaXR0ZXIuX2hhbmRsZXJzIHx8IChlbWl0dGVyLl9o
YW5kbGVycyA9IHt9KQorICAgIG1hcFt0eXBlXSA9IChtYXBbdHlwZV0gfHwgbm9IYW5kbGVycyku
Y29uY2F0KGYpCisgIH0KK30KKworZnVuY3Rpb24gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSkg
eworICByZXR1cm4gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV0g
fHwgbm9IYW5kbGVycworfQorCitmdW5jdGlvbiBvZmYoZW1pdHRlciwgdHlwZSwgZikgeworICBp
ZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisgICAgZW1pdHRlci5yZW1vdmVFdmVu
dExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKQorICB9IGVsc2UgaWYgKGVtaXR0ZXIuZGV0YWNoRXZl
bnQpIHsKKyAgICBlbWl0dGVyLmRldGFjaEV2ZW50KCJvbiIgKyB0eXBlLCBmKQorICB9IGVsc2Ug
eworICAgIHZhciBtYXAgPSBlbWl0dGVyLl9oYW5kbGVycywgYXJyID0gbWFwICYmIG1hcFt0eXBl
XQorICAgIGlmIChhcnIpIHsKKyAgICAgIHZhciBpbmRleCA9IGluZGV4T2YoYXJyLCBmKQorICAg
ICAgaWYgKGluZGV4ID4gLTEpCisgICAgICAgIHsgbWFwW3R5cGVdID0gYXJyLnNsaWNlKDAsIGlu
ZGV4KS5jb25jYXQoYXJyLnNsaWNlKGluZGV4ICsgMSkpIH0KKyAgICB9CisgIH0KK30KKworZnVu
Y3Rpb24gc2lnbmFsKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7CisgIHZhciBoYW5k
bGVycyA9IGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpCisgIGlmICghaGFuZGxlcnMubGVuZ3Ro
KSB7IHJldHVybiB9CisgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAyKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgKytpKSB7
IGhhbmRsZXJzW2ldLmFwcGx5KG51bGwsIGFyZ3MpIH0KK30KKworLy8gVGhlIERPTSBldmVudHMg
dGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKy8vIHJlZ2lzdGVy
aW5nIGEgKG5vbi1ET00pIGhhbmRsZXIgb24gdGhlIGVkaXRvciBmb3IgdGhlIGV2ZW50IG5hbWUs
CisvLyBhbmQgcHJldmVudERlZmF1bHQtaW5nIHRoZSBldmVudCBpbiB0aGF0IGhhbmRsZXIuCitm
dW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHsKKyAgaWYgKHR5cGVvZiBl
ID09ICJzdHJpbmciKQorICAgIHsgZSA9IHt0eXBlOiBlLCBwcmV2ZW50RGVmYXVsdDogZnVuY3Rp
b24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWUgfX0gfQorICBzaWduYWwoY20sIG92
ZXJyaWRlIHx8IGUudHlwZSwgY20sIGUpCisgIHJldHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkg
fHwgZS5jb2RlbWlycm9ySWdub3JlCit9CisKK2Z1bmN0aW9uIHNpZ25hbEN1cnNvckFjdGl2aXR5
KGNtKSB7CisgIHZhciBhcnIgPSBjbS5faGFuZGxlcnMgJiYgY20uX2hhbmRsZXJzLmN1cnNvckFj
dGl2aXR5CisgIGlmICghYXJyKSB7IHJldHVybiB9CisgIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJz
b3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0g
W10pCisgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7IGlmIChpbmRleE9m
KHNldCwgYXJyW2ldKSA9PSAtMSkKKyAgICB7IHNldC5wdXNoKGFycltpXSkgfSB9Cit9CisKK2Z1
bmN0aW9uIGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkgeworICByZXR1cm4gZ2V0SGFuZGxlcnMo
ZW1pdHRlciwgdHlwZSkubGVuZ3RoID4gMAorfQorCisvLyBBZGQgb24gYW5kIG9mZiBtZXRob2Rz
IHRvIGEgY29uc3RydWN0b3IncyBwcm90b3R5cGUsIHRvIG1ha2UKKy8vIHJlZ2lzdGVyaW5nIGV2
ZW50cyBvbiBzdWNoIG9iamVjdHMgbW9yZSBjb252ZW5pZW50LgorZnVuY3Rpb24gZXZlbnRNaXhp
bihjdG9yKSB7CisgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlwZSwgZikge29uKHRo
aXMsIHR5cGUsIGYpfQorICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7
b2ZmKHRoaXMsIHR5cGUsIGYpfQorfQorCisvLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBzdGls
bCBzdXBwb3J0IGp1cmFzc2ljIElFIHZlcnNpb25zLCBzb21lCisvLyBjb21wYXRpYmlsaXR5IHdy
YXBwZXJzIGFyZSBuZWVkZWQuCisKK2Z1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkgeworICBp
ZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCkgfQorICBlbHNlIHsgZS5y
ZXR1cm5WYWx1ZSA9IGZhbHNlIH0KK30KK2Z1bmN0aW9uIGVfc3RvcFByb3BhZ2F0aW9uKGUpIHsK
KyAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfQorICBlbHNl
IHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlIH0KK30KK2Z1bmN0aW9uIGVfZGVmYXVsdFByZXZlbnRl
ZChlKSB7CisgIHJldHVybiBlLmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFBy
ZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFsc2UKK30KK2Z1bmN0aW9uIGVfc3RvcChlKSB7
ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFnYXRpb24oZSl9CisKK2Z1bmN0aW9uIGVf
dGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50fQorZnVuY3Rpb24gZV9i
dXR0b24oZSkgeworICB2YXIgYiA9IGUud2hpY2gKKyAgaWYgKGIgPT0gbnVsbCkgeworICAgIGlm
IChlLmJ1dHRvbiAmIDEpIHsgYiA9IDEgfQorICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMikgeyBi
ID0gMyB9CisgICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSB7IGIgPSAyIH0KKyAgfQorICBpZiAo
bWFjICYmIGUuY3RybEtleSAmJiBiID09IDEpIHsgYiA9IDMgfQorICByZXR1cm4gYgorfQorCisv
LyBEZXRlY3QgZHJhZy1hbmQtZHJvcAordmFyIGRyYWdBbmREcm9wID0gZnVuY3Rpb24oKSB7Cisg
IC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYt
OCwgYnV0IEkKKyAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgorICBpZiAoaWUgJiYg
aWVfdmVyc2lvbiA8IDkpIHsgcmV0dXJuIGZhbHNlIH0KKyAgdmFyIGRpdiA9IGVsdCgnZGl2JykK
KyAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRpdgorfSgpCisK
K3ZhciB6d3NwU3VwcG9ydGVkCitmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50KG1lYXN1cmUpIHsK
KyAgaWYgKHp3c3BTdXBwb3J0ZWQgPT0gbnVsbCkgeworICAgIHZhciB0ZXN0ID0gZWx0KCJzcGFu
IiwgIlx1MjAwYiIpCisgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KCJzcGFu
IiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSkKKyAgICBpZiAobWVhc3Vy
ZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQorICAgICAgeyB6d3NwU3VwcG9ydGVkID0g
dGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKGllICYm
IGllX3ZlcnNpb24gPCA4KSB9CisgIH0KKyAgdmFyIG5vZGUgPSB6d3NwU3VwcG9ydGVkID8gZWx0
KCJzcGFuIiwgIlx1MjAwYiIpIDoKKyAgICBlbHQoInNwYW4iLCAiXHUwMGEwIiwgbnVsbCwgImRp
c3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4IikKKyAg
bm9kZS5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCAiIikKKyAgcmV0dXJuIG5vZGUKK30KKworLy8g
RmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRp
IHRleHQKK3ZhciBiYWRCaWRpUmVjdHMKK2Z1bmN0aW9uIGhhc0JhZEJpZGlSZWN0cyhtZWFzdXJl
KSB7CisgIGlmIChiYWRCaWRpUmVjdHMgIT0gbnVsbCkgeyByZXR1cm4gYmFkQmlkaVJlY3RzIH0K
KyAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJBXHUwNjJlQSIpKQorICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpCisgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkKKyAgcmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSkKKyAgaWYgKCFyMCB8fCBy
MC5sZWZ0ID09IHIwLnJpZ2h0KSB7IHJldHVybiBmYWxzZSB9IC8vIFNhZmFyaSByZXR1cm5zIG51
bGwgaW4gc29tZSBjYXNlcyAoIzI3ODApCisgIHJldHVybiBiYWRCaWRpUmVjdHMgPSAocjEucmln
aHQgLSByMC5yaWdodCA8IDMpCit9CisKKy8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2Vu
IElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCisvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3Bs
aXQgbGluZXMuCit2YXIgc3BsaXRMaW5lc0F1dG8gPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0
aCAhPSAzID8gZnVuY3Rpb24gKHN0cmluZykgeworICB2YXIgcG9zID0gMCwgcmVzdWx0ID0gW10s
IGwgPSBzdHJpbmcubGVuZ3RoCisgIHdoaWxlIChwb3MgPD0gbCkgeworICAgIHZhciBubCA9IHN0
cmluZy5pbmRleE9mKCJcbiIsIHBvcykKKyAgICBpZiAobmwgPT0gLTEpIHsgbmwgPSBzdHJpbmcu
bGVuZ3RoIH0KKyAgICB2YXIgbGluZSA9IHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQo
bmwgLSAxKSA9PSAiXHIiID8gbmwgLSAxIDogbmwpCisgICAgdmFyIHJ0ID0gbGluZS5pbmRleE9m
KCJcciIpCisgICAgaWYgKHJ0ICE9IC0xKSB7CisgICAgICByZXN1bHQucHVzaChsaW5lLnNsaWNl
KDAsIHJ0KSkKKyAgICAgIHBvcyArPSBydCArIDEKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0
LnB1c2gobGluZSkKKyAgICAgIHBvcyA9IG5sICsgMQorICAgIH0KKyAgfQorICByZXR1cm4gcmVz
dWx0Cit9IDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gc3RyaW5nLnNwbGl0KC9cclxuP3xc
bi8pOyB9CisKK3ZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rp
b24gKHRlKSB7CisgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rp
b25FbmQgfQorICBjYXRjaChlKSB7IHJldHVybiBmYWxzZSB9Cit9IDogZnVuY3Rpb24gKHRlKSB7
CisgIHZhciByYW5nZQorICB0cnkge3JhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24u
Y3JlYXRlUmFuZ2UoKX0KKyAgY2F0Y2goZSkge30KKyAgaWYgKCFyYW5nZSB8fCByYW5nZS5wYXJl
bnRFbGVtZW50KCkgIT0gdGUpIHsgcmV0dXJuIGZhbHNlIH0KKyAgcmV0dXJuIHJhbmdlLmNvbXBh
cmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLCByYW5nZSkgIT0gMAorfQorCit2YXIgaGFzQ29weUV2
ZW50ID0gKGZ1bmN0aW9uICgpIHsKKyAgdmFyIGUgPSBlbHQoImRpdiIpCisgIGlmICgib25jb3B5
IiBpbiBlKSB7IHJldHVybiB0cnVlIH0KKyAgZS5zZXRBdHRyaWJ1dGUoIm9uY29weSIsICJyZXR1
cm47IikKKyAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24iCit9KSgpCisKK3Zh
ciBiYWRab29tZWRSZWN0cyA9IG51bGwKK2Z1bmN0aW9uIGhhc0JhZFpvb21lZFJlY3RzKG1lYXN1
cmUpIHsKKyAgaWYgKGJhZFpvb21lZFJlY3RzICE9IG51bGwpIHsgcmV0dXJuIGJhZFpvb21lZFJl
Y3RzIH0KKyAgdmFyIG5vZGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoInNw
YW4iLCAieCIpKQorICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKQor
ICB2YXIgZnJvbVJhbmdlID0gcmFuZ2Uobm9kZSwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkKKyAgcmV0dXJuIGJhZFpvb21lZFJlY3RzID0gTWF0aC5hYnMobm9ybWFsLmxlZnQgLSBmcm9t
UmFuZ2UubGVmdCkgPiAxCit9CisKK3ZhciBtb2RlcyA9IHt9OwordmFyIG1pbWVNb2RlcyA9IHt9
OworLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNp
ZXMsIHdoaWNoIGlzCisvLyB1c2VkIGJ5IChsZWdhY3kpIG1lY2hhbmlzbXMgbGlrZSBsb2FkbW9k
ZS5qcyB0byBhdXRvbWF0aWNhbGx5CisvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5p
c20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLikKK2Z1bmN0aW9uIGRlZmluZU1vZGUobmFt
ZSwgbW9kZSkgeworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpCisgICAgeyBtb2RlLmRlcGVu
ZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikgfQorICBt
b2Rlc1tuYW1lXSA9IG1vZGUKK30KKworZnVuY3Rpb24gZGVmaW5lTUlNRShtaW1lLCBzcGVjKSB7
CisgIG1pbWVNb2Rlc1ttaW1lXSA9IHNwZWMKK30KKworLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEg
e25hbWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZQorLy8gc3RyaW5nLCBy
ZXR1cm4gYSBtb2RlIGNvbmZpZyBvYmplY3QuCitmdW5jdGlvbiByZXNvbHZlTW9kZShzcGVjKSB7
CisgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVy
dHkoc3BlYykpIHsKKyAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNdCisgIH0gZWxzZSBpZiAoc3Bl
YyAmJiB0eXBlb2Ygc3BlYy5uYW1lID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9w
ZXJ0eShzcGVjLm5hbWUpKSB7CisgICAgdmFyIGZvdW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV0K
KyAgICBpZiAodHlwZW9mIGZvdW5kID09ICJzdHJpbmciKSB7IGZvdW5kID0ge25hbWU6IGZvdW5k
fSB9CisgICAgc3BlYyA9IGNyZWF0ZU9iaihmb3VuZCwgc3BlYykKKyAgICBzcGVjLm5hbWUgPSBm
b3VuZC5uYW1lCisgIH0gZWxzZSBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgL15bXHdc
LV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KHNwZWMpKSB7CisgICAgcmV0dXJuIHJlc29sdmVNb2Rl
KCJhcHBsaWNhdGlvbi94bWwiKQorICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmci
ICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wranNvbiQvLnRlc3Qoc3BlYykpIHsKKyAgICByZXR1cm4g
cmVzb2x2ZU1vZGUoImFwcGxpY2F0aW9uL2pzb24iKQorICB9CisgIGlmICh0eXBlb2Ygc3BlYyA9
PSAic3RyaW5nIikgeyByZXR1cm4ge25hbWU6IHNwZWN9IH0KKyAgZWxzZSB7IHJldHVybiBzcGVj
IHx8IHtuYW1lOiAibnVsbCJ9IH0KK30KKworLy8gR2l2ZW4gYSBtb2RlIHNwZWMgKGFueXRoaW5n
IHRoYXQgcmVzb2x2ZU1vZGUgYWNjZXB0cyksIGZpbmQgYW5kCisvLyBpbml0aWFsaXplIGFuIGFj
dHVhbCBtb2RlIG9iamVjdC4KK2Z1bmN0aW9uIGdldE1vZGUob3B0aW9ucywgc3BlYykgeworICBz
cGVjID0gcmVzb2x2ZU1vZGUoc3BlYykKKyAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1l
XQorICBpZiAoIW1mYWN0b3J5KSB7IHJldHVybiBnZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWlu
IikgfQorICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpCisgIGlmIChtb2Rl
RXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7CisgICAgdmFyIGV4dHMgPSBt
b2RlRXh0ZW5zaW9uc1tzcGVjLm5hbWVdCisgICAgZm9yICh2YXIgcHJvcCBpbiBleHRzKSB7Cisg
ICAgICBpZiAoIWV4dHMuaGFzT3duUHJvcGVydHkocHJvcCkpIHsgY29udGludWUgfQorICAgICAg
aWYgKG1vZGVPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgbW9kZU9ialsiXyIgKyBwcm9wXSA9
IG1vZGVPYmpbcHJvcF0gfQorICAgICAgbW9kZU9ialtwcm9wXSA9IGV4dHNbcHJvcF0KKyAgICB9
CisgIH0KKyAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lCisgIGlmIChzcGVjLmhlbHBlclR5cGUp
IHsgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlIH0KKyAgaWYgKHNwZWMubW9k
ZVByb3BzKSB7IGZvciAodmFyIHByb3AkMSBpbiBzcGVjLm1vZGVQcm9wcykKKyAgICB7IG1vZGVP
YmpbcHJvcCQxXSA9IHNwZWMubW9kZVByb3BzW3Byb3AkMV0gfSB9CisKKyAgcmV0dXJuIG1vZGVP
YmoKK30KKworLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2Rl
IG9iamVjdHMgZnJvbQorLy8gb3V0c2lkZSB0aGUgYWN0dWFsIG1vZGUgZGVmaW5pdGlvbi4KK3Zh
ciBtb2RlRXh0ZW5zaW9ucyA9IHt9CitmdW5jdGlvbiBleHRlbmRNb2RlKG1vZGUsIHByb3BlcnRp
ZXMpIHsKKyAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/
IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pCisgIGNv
cHlPYmoocHJvcGVydGllcywgZXh0cykKK30KKworZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0
YXRlKSB7CisgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgeyByZXR1cm4gc3RhdGUgfQorICBpZiAobW9k
ZS5jb3B5U3RhdGUpIHsgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKSB9CisgIHZhciBuc3Rh
dGUgPSB7fQorICBmb3IgKHZhciBuIGluIHN0YXRlKSB7CisgICAgdmFyIHZhbCA9IHN0YXRlW25d
CisgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB7IHZhbCA9IHZhbC5jb25jYXQoW10pIH0K
KyAgICBuc3RhdGVbbl0gPSB2YWwKKyAgfQorICByZXR1cm4gbnN0YXRlCit9CisKKy8vIEdpdmVu
IGEgbW9kZSBhbmQgYSBzdGF0ZSAoZm9yIHRoYXQgbW9kZSksIGZpbmQgdGhlIGlubmVyIG1vZGUg
YW5kCisvLyBzdGF0ZSBhdCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLgor
ZnVuY3Rpb24gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKSB7CisgIHZhciBpbmZvCisgIHdoaWxlICht
b2RlLmlubmVyTW9kZSkgeworICAgIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSkKKyAgICBp
ZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIHsgYnJlYWsgfQorICAgIHN0YXRlID0gaW5m
by5zdGF0ZQorICAgIG1vZGUgPSBpbmZvLm1vZGUKKyAgfQorICByZXR1cm4gaW5mbyB8fCB7bW9k
ZTogbW9kZSwgc3RhdGU6IHN0YXRlfQorfQorCitmdW5jdGlvbiBzdGFydFN0YXRlKG1vZGUsIGEx
LCBhMikgeworICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5zdGFydFN0YXRlKGExLCBh
MikgOiB0cnVlCit9CisKKy8vIFNUUklORyBTVFJFQU0KKworLy8gRmVkIHRvIHRoZSBtb2RlIHBh
cnNlcnMsIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZQorLy8gcGFyc2VycyBtb3Jl
IHN1Y2NpbmN0LgorCit2YXIgU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXpl
KSB7CisgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDAKKyAgdGhpcy5zdHJpbmcgPSBzdHJpbmcK
KyAgdGhpcy50YWJTaXplID0gdGFiU2l6ZSB8fCA4CisgIHRoaXMubGFzdENvbHVtblBvcyA9IHRo
aXMubGFzdENvbHVtblZhbHVlID0gMAorICB0aGlzLmxpbmVTdGFydCA9IDAKK30KKworU3RyaW5n
U3RyZWFtLnByb3RvdHlwZSA9IHsKKyAgZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3Mg
Pj0gdGhpcy5zdHJpbmcubGVuZ3RofSwKKyAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5w
b3MgPT0gdGhpcy5saW5lU3RhcnR9LAorICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5z
dHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWR9LAorICBuZXh0OiBmdW5jdGlvbigp
IHsKKyAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCisgICAgICB7IHJldHVy
biB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKykgfQorICB9LAorICBlYXQ6IGZ1bmN0aW9u
KG1hdGNoKSB7CisgICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKQorICAg
IHZhciBvaworICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHsgb2sgPSBjaCA9PSBt
YXRjaCB9CisgICAgZWxzZSB7IG9rID0gY2ggJiYgKG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNo
KSA6IG1hdGNoKGNoKSkgfQorICAgIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaH0KKyAg
fSwKKyAgZWF0V2hpbGU6IGZ1bmN0aW9uKG1hdGNoKSB7CisgICAgdmFyIHN0YXJ0ID0gdGhpcy5w
b3MKKyAgICB3aGlsZSAodGhpcy5lYXQobWF0Y2gpKXt9CisgICAgcmV0dXJuIHRoaXMucG9zID4g
c3RhcnQKKyAgfSwKKyAgZWF0U3BhY2U6IGZ1bmN0aW9uKCkgeworICAgIHZhciB0aGlzJDEgPSB0
aGlzOworCisgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3MKKyAgICB3aGlsZSAoL1tcc1x1MDBhMF0v
LnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHsgKyt0aGlzJDEucG9zIH0KKyAg
ICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydAorICB9LAorICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkg
e3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RofSwKKyAgc2tpcFRvOiBmdW5jdGlvbihjaCkg
eworICAgIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKQorICAg
IGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWV9CisgIH0sCisg
IGJhY2tVcDogZnVuY3Rpb24obikge3RoaXMucG9zIC09IG59LAorICBjb2x1bW46IGZ1bmN0aW9u
KCkgeworICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7CisgICAgICB0
aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0
LCB0aGlzLnRhYlNpemUsIHRoaXMubGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUp
CisgICAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLnN0YXJ0CisgICAgfQorICAgIHJldHVy
biB0aGlzLmxhc3RDb2x1bW5WYWx1ZSAtICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRo
aXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApCisgIH0sCisgIGlu
ZGVudGF0aW9uOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJp
bmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLQorICAgICAgKHRoaXMubGluZVN0YXJ0ID8gY291bnRD
b2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMCkKKyAg
fSwKKyAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkg
eworICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgeworICAgICAgdmFyIGNhc2Vk
ID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJD
YXNlKCkgOiBzdHI7IH0KKyAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnN0cmluZy5zdWJzdHIodGhp
cy5wb3MsIHBhdHRlcm4ubGVuZ3RoKQorICAgICAgaWYgKGNhc2VkKHN1YnN0cikgPT0gY2FzZWQo
cGF0dGVybikpIHsKKyAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB7IHRoaXMucG9zICs9
IHBhdHRlcm4ubGVuZ3RoIH0KKyAgICAgICAgcmV0dXJuIHRydWUKKyAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNo
KHBhdHRlcm4pCisgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPiAwKSB7IHJldHVybiBu
dWxsIH0KKyAgICAgIGlmIChtYXRjaCAmJiBjb25zdW1lICE9PSBmYWxzZSkgeyB0aGlzLnBvcyAr
PSBtYXRjaFswXS5sZW5ndGggfQorICAgICAgcmV0dXJuIG1hdGNoCisgICAgfQorICB9LAorICBj
dXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0
aGlzLnBvcyl9LAorICBoaWRlRmlyc3RDaGFyczogZnVuY3Rpb24obiwgaW5uZXIpIHsKKyAgICB0
aGlzLmxpbmVTdGFydCArPSBuCisgICAgdHJ5IHsgcmV0dXJuIGlubmVyKCkgfQorICAgIGZpbmFs
bHkgeyB0aGlzLmxpbmVTdGFydCAtPSBuIH0KKyAgfQorfQorCisvLyBDb21wdXRlIGEgc3R5bGUg
YXJyYXkgKGFuIGFycmF5IHN0YXJ0aW5nIHdpdGggYSBtb2RlIGdlbmVyYXRpb24KKy8vIC0tIGZv
ciBpbnZhbGlkYXRpb24gLS0gZm9sbG93ZWQgYnkgcGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQK
Ky8vIHN0eWxlIHN0cmluZ3MpLCB3aGljaCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgdG9rZW5z
IG9uIHRoZQorLy8gbGluZS4KK2Z1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRl
LCBmb3JjZVRvRW5kKSB7CisgIC8vIEEgc3R5bGVzIGFycmF5IGFsd2F5cyBzdGFydHMgd2l0aCBh
IG51bWJlciBpZGVudGlmeWluZyB0aGUKKyAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJh
c2VkIG9uIChmb3IgZWFzeSBpbnZhbGlkYXRpb24pLgorICB2YXIgc3QgPSBbY20uc3RhdGUubW9k
ZUdlbl0sIGxpbmVDbGFzc2VzID0ge30KKyAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBvZiBz
dHlsZXMKKyAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1bmN0
aW9uIChlbmQsIHN0eWxlKSB7IHJldHVybiBzdC5wdXNoKGVuZCwgc3R5bGUpOyB9LAorICAgIGxp
bmVDbGFzc2VzLCBmb3JjZVRvRW5kKQorCisgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0eWxl
IGFycmF5LgorICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggbyApIHsKKyAgICB2YXIgb3ZlcmxheSA9
IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwgYXQgPSAwCisgICAgcnVuTW9kZShjbSwgbGlu
ZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uIChlbmQsIHN0eWxlKSB7CisgICAg
ICB2YXIgc3RhcnQgPSBpCisgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0
aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXQKKyAgICAgIHdoaWxl
IChhdCA8IGVuZCkgeworICAgICAgICB2YXIgaV9lbmQgPSBzdFtpXQorICAgICAgICBpZiAoaV9l
bmQgPiBlbmQpCisgICAgICAgICAgeyBzdC5zcGxpY2UoaSwgMSwgZW5kLCBzdFtpKzFdLCBpX2Vu
ZCkgfQorICAgICAgICBpICs9IDIKKyAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKQor
ICAgICAgfQorICAgICAgaWYgKCFzdHlsZSkgeyByZXR1cm4gfQorICAgICAgaWYgKG92ZXJsYXku
b3BhcXVlKSB7CisgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsICJvdmVy
bGF5ICIgKyBzdHlsZSkKKyAgICAgICAgaSA9IHN0YXJ0ICsgMgorICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yICg7IHN0YXJ0IDwgaTsgc3RhcnQgKz0gMikgeworICAgICAgICAgIHZhciBjdXIg
PSBzdFtzdGFydCsxXQorICAgICAgICAgIHN0W3N0YXJ0KzFdID0gKGN1ciA/IGN1ciArICIgIiA6
ICIiKSArICJvdmVybGF5ICIgKyBzdHlsZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwgbGlu
ZUNsYXNzZXMpCisgIH07CisKKyAgZm9yICh2YXIgbyA9IDA7IG8gPCBjbS5zdGF0ZS5vdmVybGF5
cy5sZW5ndGg7ICsrbykgbG9vcCggbyApOworCisgIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3Nl
czogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xh
c3NlcyA6IG51bGx9Cit9CisKK2Z1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIHVwZGF0
ZUZyb250aWVyKSB7CisgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20u
c3RhdGUubW9kZUdlbikgeworICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKGNtLCBsaW5l
Tm8obGluZSkpCisgICAgdmFyIHJlc3VsdCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUu
dGV4dC5sZW5ndGggPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCA/IGNvcHlTdGF0ZShj
bS5kb2MubW9kZSwgc3RhdGUpIDogc3RhdGUpCisgICAgbGluZS5zdGF0ZUFmdGVyID0gc3RhdGUK
KyAgICBsaW5lLnN0eWxlcyA9IHJlc3VsdC5zdHlsZXMKKyAgICBpZiAocmVzdWx0LmNsYXNzZXMp
IHsgbGluZS5zdHlsZUNsYXNzZXMgPSByZXN1bHQuY2xhc3NlcyB9CisgICAgZWxzZSBpZiAobGlu
ZS5zdHlsZUNsYXNzZXMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsIH0KKyAgICBpZiAodXBk
YXRlRnJvbnRpZXIgPT09IGNtLmRvYy5mcm9udGllcikgeyBjbS5kb2MuZnJvbnRpZXIrKyB9Cisg
IH0KKyAgcmV0dXJuIGxpbmUuc3R5bGVzCit9CisKK2Z1bmN0aW9uIGdldFN0YXRlQmVmb3JlKGNt
LCBuLCBwcmVjaXNlKSB7CisgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5
CisgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgeyByZXR1cm4gdHJ1ZSB9CisgIHZhciBwb3Mg
PSBmaW5kU3RhcnRMaW5lKGNtLCBuLCBwcmVjaXNlKSwgc3RhdGUgPSBwb3MgPiBkb2MuZmlyc3Qg
JiYgZ2V0TGluZShkb2MsIHBvcy0xKS5zdGF0ZUFmdGVyCisgIGlmICghc3RhdGUpIHsgc3RhdGUg
PSBzdGFydFN0YXRlKGRvYy5tb2RlKSB9CisgIGVsc2UgeyBzdGF0ZSA9IGNvcHlTdGF0ZShkb2Mu
bW9kZSwgc3RhdGUpIH0KKyAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbiAobGluZSkgeworICAg
IHByb2Nlc3NMaW5lKGNtLCBsaW5lLnRleHQsIHN0YXRlKQorICAgIHZhciBzYXZlID0gcG9zID09
IG4gLSAxIHx8IHBvcyAlIDUgPT0gMCB8fCBwb3MgPj0gZGlzcGxheS52aWV3RnJvbSAmJiBwb3Mg
PCBkaXNwbGF5LnZpZXdUbworICAgIGxpbmUuc3RhdGVBZnRlciA9IHNhdmUgPyBjb3B5U3RhdGUo
ZG9jLm1vZGUsIHN0YXRlKSA6IG51bGwKKyAgICArK3BvcworICB9KQorICBpZiAocHJlY2lzZSkg
eyBkb2MuZnJvbnRpZXIgPSBwb3MgfQorICByZXR1cm4gc3RhdGUKK30KKworLy8gTGlnaHR3ZWln
aHQgZm9ybSBvZiBoaWdobGlnaHQgLS0gcHJvY2VlZCBvdmVyIHRoaXMgbGluZSBhbmQKKy8vIHVw
ZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMg
dGhhdAorLy8gYXJlbid0IGN1cnJlbnRseSB2aXNpYmxlLgorZnVuY3Rpb24gcHJvY2Vzc0xpbmUo
Y20sIHRleHQsIHN0YXRlLCBzdGFydEF0KSB7CisgIHZhciBtb2RlID0gY20uZG9jLm1vZGUKKyAg
dmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplKQor
ICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zID0gc3RhcnRBdCB8fCAwCisgIGlmICh0ZXh0ID09
ICIiKSB7IGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpIH0KKyAgd2hpbGUgKCFzdHJlYW0uZW9s
KCkpIHsKKyAgICByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSkKKyAgICBzdHJlYW0uc3Rh
cnQgPSBzdHJlYW0ucG9zCisgIH0KK30KKworZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBz
dGF0ZSkgeworICBpZiAobW9kZS5ibGFua0xpbmUpIHsgcmV0dXJuIG1vZGUuYmxhbmtMaW5lKHN0
YXRlKSB9CisgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIH0KKyAgdmFyIGlubmVyID0g
aW5uZXJNb2RlKG1vZGUsIHN0YXRlKQorICBpZiAoaW5uZXIubW9kZS5ibGFua0xpbmUpIHsgcmV0
dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKSB9Cit9CisKK2Z1bmN0aW9uIHJl
YWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikgeworICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwOyBpKyspIHsKKyAgICBpZiAoaW5uZXIpIHsgaW5uZXJbMF0gPSBpbm5lck1vZGUobW9k
ZSwgc3RhdGUpLm1vZGUgfQorICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0
ZSkKKyAgICBpZiAoc3RyZWFtLnBvcyA+IHN0cmVhbS5zdGFydCkgeyByZXR1cm4gc3R5bGUgfQor
ICB9CisgIHRocm93IG5ldyBFcnJvcigiTW9kZSAiICsgbW9kZS5uYW1lICsgIiBmYWlsZWQgdG8g
YWR2YW5jZSBzdHJlYW0uIikKK30KKworLy8gVXRpbGl0eSBmb3IgZ2V0VG9rZW5BdCBhbmQgZ2V0
TGluZVRva2VucworZnVuY3Rpb24gdGFrZVRva2VuKGNtLCBwb3MsIHByZWNpc2UsIGFzQXJyYXkp
IHsKKyAgdmFyIGdldE9iaiA9IGZ1bmN0aW9uIChjb3B5KSB7IHJldHVybiAoeworICAgIHN0YXJ0
OiBzdHJlYW0uc3RhcnQsIGVuZDogc3RyZWFtLnBvcywKKyAgICBzdHJpbmc6IHN0cmVhbS5jdXJy
ZW50KCksCisgICAgdHlwZTogc3R5bGUgfHwgbnVsbCwKKyAgICBzdGF0ZTogY29weSA/IGNvcHlT
dGF0ZShkb2MubW9kZSwgc3RhdGUpIDogc3RhdGUKKyAgfSk7IH0KKworICB2YXIgZG9jID0gY20u
ZG9jLCBtb2RlID0gZG9jLm1vZGUsIHN0eWxlCisgIHBvcyA9IGNsaXBQb3MoZG9jLCBwb3MpCisg
IHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKSwgc3RhdGUgPSBnZXRTdGF0ZUJlZm9y
ZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpCisgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFt
KGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgdG9rZW5zCisgIGlmIChhc0FycmF5KSB7
IHRva2VucyA9IFtdIH0KKyAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gp
ICYmICFzdHJlYW0uZW9sKCkpIHsKKyAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zCisgICAg
c3R5bGUgPSByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSkKKyAgICBpZiAoYXNBcnJheSkg
eyB0b2tlbnMucHVzaChnZXRPYmoodHJ1ZSkpIH0KKyAgfQorICByZXR1cm4gYXNBcnJheSA/IHRv
a2VucyA6IGdldE9iaigpCit9CisKK2Z1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBv
dXRwdXQpIHsKKyAgaWYgKHR5cGUpIHsgZm9yICg7OykgeworICAgIHZhciBsaW5lQ2xhc3MgPSB0
eXBlLm1hdGNoKC8oPzpefFxzKylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKQorICAgIGlmICgh
bGluZUNsYXNzKSB7IGJyZWFrIH0KKyAgICB0eXBlID0gdHlwZS5zbGljZSgwLCBsaW5lQ2xhc3Mu
aW5kZXgpICsgdHlwZS5zbGljZShsaW5lQ2xhc3MuaW5kZXggKyBsaW5lQ2xhc3NbMF0ubGVuZ3Ro
KQorICAgIHZhciBwcm9wID0gbGluZUNsYXNzWzFdID8gImJnQ2xhc3MiIDogInRleHRDbGFzcyIK
KyAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpCisgICAgICB7IG91dHB1dFtwcm9wXSA9IGxp
bmVDbGFzc1syXSB9CisgICAgZWxzZSBpZiAoIShuZXcgUmVnRXhwKCIoPzpefFxzKSIgKyBsaW5l
Q2xhc3NbMl0gKyAiKD86JHxccykiKSkudGVzdChvdXRwdXRbcHJvcF0pKQorICAgICAgeyBvdXRw
dXRbcHJvcF0gKz0gIiAiICsgbGluZUNsYXNzWzJdIH0KKyAgfSB9CisgIHJldHVybiB0eXBlCit9
CisKKy8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgY2FsbGluZyBm
IGZvciBlYWNoIHRva2VuLgorZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUs
IGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7CisgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2Rl
LmZsYXR0ZW5TcGFucworICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIHsgZmxhdHRlblNwYW5z
ID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnMgfQorICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHls
ZSA9IG51bGwKKyAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9u
cy50YWJTaXplKSwgc3R5bGUKKyAgdmFyIGlubmVyID0gY20ub3B0aW9ucy5hZGRNb2RlQ2xhc3Mg
JiYgW251bGxdCisgIGlmICh0ZXh0ID09ICIiKSB7IGV4dHJhY3RMaW5lQ2xhc3NlcyhjYWxsQmxh
bmtMaW5lKG1vZGUsIHN0YXRlKSwgbGluZUNsYXNzZXMpIH0KKyAgd2hpbGUgKCFzdHJlYW0uZW9s
KCkpIHsKKyAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3Ro
KSB7CisgICAgICBmbGF0dGVuU3BhbnMgPSBmYWxzZQorICAgICAgaWYgKGZvcmNlVG9FbmQpIHsg
cHJvY2Vzc0xpbmUoY20sIHRleHQsIHN0YXRlLCBzdHJlYW0ucG9zKSB9CisgICAgICBzdHJlYW0u
cG9zID0gdGV4dC5sZW5ndGgKKyAgICAgIHN0eWxlID0gbnVsbAorICAgIH0gZWxzZSB7CisgICAg
ICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0
ZSwgaW5uZXIpLCBsaW5lQ2xhc3NlcykKKyAgICB9CisgICAgaWYgKGlubmVyKSB7CisgICAgICB2
YXIgbU5hbWUgPSBpbm5lclswXS5uYW1lCisgICAgICBpZiAobU5hbWUpIHsgc3R5bGUgPSAibS0i
ICsgKHN0eWxlID8gbU5hbWUgKyAiICIgKyBzdHlsZSA6IG1OYW1lKSB9CisgICAgfQorICAgIGlm
ICghZmxhdHRlblNwYW5zIHx8IGN1clN0eWxlICE9IHN0eWxlKSB7CisgICAgICB3aGlsZSAoY3Vy
U3RhcnQgPCBzdHJlYW0uc3RhcnQpIHsKKyAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJl
YW0uc3RhcnQsIGN1clN0YXJ0ICsgNTAwMCkKKyAgICAgICAgZihjdXJTdGFydCwgY3VyU3R5bGUp
CisgICAgICB9CisgICAgICBjdXJTdHlsZSA9IHN0eWxlCisgICAgfQorICAgIHN0cmVhbS5zdGFy
dCA9IHN0cmVhbS5wb3MKKyAgfQorICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0ucG9zKSB7Cisg
ICAgLy8gV2Via2l0IHNlZW1zIHRvIHJlZnVzZSB0byByZW5kZXIgdGV4dCBub2RlcyBsb25nZXIg
dGhhbiA1NzQ0NAorICAgIC8vIGNoYXJhY3RlcnMsIGFuZCByZXR1cm5zIGluYWNjdXJhdGUgbWVh
c3VyZW1lbnRzIGluIG5vZGVzCisgICAgLy8gc3RhcnRpbmcgYXJvdW5kIDUwMDAgY2hhcnMuCisg
ICAgdmFyIHBvcyA9IE1hdGgubWluKHN0cmVhbS5wb3MsIGN1clN0YXJ0ICsgNTAwMCkKKyAgICBm
KHBvcywgY3VyU3R5bGUpCisgICAgY3VyU3RhcnQgPSBwb3MKKyAgfQorfQorCisvLyBGaW5kcyB0
aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KKy8v
IGZpbmQgYSBsaW5lIHdpdGggYSBzdGF0ZUFmdGVyLCBzbyB0aGF0IGl0IGNhbiBzdGFydCB3aXRo
IGEKKy8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdp
dGggdGhlCisvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUg
bGVhc3QgY29udGV4dCB0bworLy8gcGFyc2UgY29ycmVjdGx5LgorZnVuY3Rpb24gZmluZFN0YXJ0
TGluZShjbSwgbiwgcHJlY2lzZSkgeworICB2YXIgbWluaW5kZW50LCBtaW5saW5lLCBkb2MgPSBj
bS5kb2MKKyAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJN
b2RlID8gMTAwMCA6IDEwMCkKKyAgZm9yICh2YXIgc2VhcmNoID0gbjsgc2VhcmNoID4gbGltOyAt
LXNlYXJjaCkgeworICAgIGlmIChzZWFyY2ggPD0gZG9jLmZpcnN0KSB7IHJldHVybiBkb2MuZmly
c3QgfQorICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpCisgICAgaWYgKGxp
bmUuc3RhdGVBZnRlciAmJiAoIXByZWNpc2UgfHwgc2VhcmNoIDw9IGRvYy5mcm9udGllcikpIHsg
cmV0dXJuIHNlYXJjaCB9CisgICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0
LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpCisgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBt
aW5pbmRlbnQgPiBpbmRlbnRlZCkgeworICAgICAgbWlubGluZSA9IHNlYXJjaCAtIDEKKyAgICAg
IG1pbmluZGVudCA9IGluZGVudGVkCisgICAgfQorICB9CisgIHJldHVybiBtaW5saW5lCit9CisK
Ky8vIExJTkUgREFUQSBTVFJVQ1RVUkUKKworLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0
YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKKy8vIGhpZ2hsaWdodGluZyBpbmZvICh0
aGUgc3R5bGVzIGFycmF5KS4KK2Z1bmN0aW9uIExpbmUodGV4dCwgbWFya2VkU3BhbnMsIGVzdGlt
YXRlSGVpZ2h0KSB7CisgIHRoaXMudGV4dCA9IHRleHQKKyAgYXR0YWNoTWFya2VkU3BhbnModGhp
cywgbWFya2VkU3BhbnMpCisgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0
ZUhlaWdodCh0aGlzKSA6IDEKK30KK2V2ZW50TWl4aW4oTGluZSkKK0xpbmUucHJvdG90eXBlLmxp
bmVObyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpIH0KKworLy8gQ2hhbmdlIHRo
ZSBjb250ZW50ICh0ZXh0LCBtYXJrZXJzKSBvZiBhIGxpbmUuIEF1dG9tYXRpY2FsbHkKKy8vIGlu
dmFsaWRhdGVzIGNhY2hlZCBpbmZvcm1hdGlvbiBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhl
CisvLyBsaW5lJ3MgaGVpZ2h0LgorZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJr
ZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsKKyAgbGluZS50ZXh0ID0gdGV4dAorICBpZiAobGlu
ZS5zdGF0ZUFmdGVyKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGwgfQorICBpZiAobGluZS5zdHls
ZXMpIHsgbGluZS5zdHlsZXMgPSBudWxsIH0KKyAgaWYgKGxpbmUub3JkZXIgIT0gbnVsbCkgeyBs
aW5lLm9yZGVyID0gbnVsbCB9CisgIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpCisgIGF0dGFjaE1h
cmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKQorICB2YXIgZXN0SGVpZ2h0ID0gZXN0aW1hdGVI
ZWlnaHQgPyBlc3RpbWF0ZUhlaWdodChsaW5lKSA6IDEKKyAgaWYgKGVzdEhlaWdodCAhPSBsaW5l
LmhlaWdodCkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCkgfQorfQorCisvLyBE
ZXRhY2ggYSBsaW5lIGZyb20gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGl0cyBtYXJrZXJzLgorZnVu
Y3Rpb24gY2xlYW5VcExpbmUobGluZSkgeworICBsaW5lLnBhcmVudCA9IG51bGwKKyAgZGV0YWNo
TWFya2VkU3BhbnMobGluZSkKK30KKworLy8gQ29udmVydCBhIHN0eWxlIGFzIHJldHVybmVkIGJ5
IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9yIGEgc3RyaW5nCisvLyBjb250YWluaW5nIG9uZSBvciBt
b3JlIHN0eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLAorLy8gYW5kIGFsc28g
bG9va3MgZm9yIGxpbmUtd2lkZSBzdHlsZXMuCit2YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fTsK
K3ZhciBzdHlsZVRvQ2xhc3NDYWNoZVdpdGhNb2RlID0ge307CitmdW5jdGlvbiBpbnRlcnByZXRU
b2tlblN0eWxlKHN0eWxlLCBvcHRpb25zKSB7CisgIGlmICghc3R5bGUgfHwgL15ccyokLy50ZXN0
KHN0eWxlKSkgeyByZXR1cm4gbnVsbCB9CisgIHZhciBjYWNoZSA9IG9wdGlvbnMuYWRkTW9kZUNs
YXNzID8gc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA6IHN0eWxlVG9DbGFzc0NhY2hlCisgIHJl
dHVybiBjYWNoZVtzdHlsZV0gfHwKKyAgICAoY2FjaGVbc3R5bGVdID0gc3R5bGUucmVwbGFjZSgv
XFMrL2csICJjbS0kJiIpKQorfQorCisvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzCisvLyB1cCBhICdsaW5lIG1hcCcsIHdo
aWNoIHBvaW50cyBhdCB0aGUgRE9NIG5vZGVzIHRoYXQgcmVwcmVzZW50CisvLyBzcGVjaWZpYyBz
dHJldGNoZXMgb2YgdGV4dCwgYW5kIGlzIHVzZWQgYnkgdGhlIG1lYXN1cmluZyBjb2RlLgorLy8g
VGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmQK
Ky8vIGluZm9ybWF0aW9uIGFib3V0IGxpbmUtd2lkZSBzdHlsZXMgdGhhdCB3ZXJlIHNldCBieSB0
aGUgbW9kZS4KK2Z1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7CisgIC8v
IFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRlcics
IHdoaWNoCisgIC8vIGlzIG5lZWRlZCBvbiBXZWJraXQgdG8gYmUgYWJsZSB0byBnZXQgbGluZS1s
ZXZlbCBib3VuZGluZworICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNoYXIpLgor
ICB2YXIgY29udGVudCA9IGVsdCgic3BhbiIsIG51bGwsIG51bGwsIHdlYmtpdCA/ICJwYWRkaW5n
LXJpZ2h0OiAuMXB4IiA6IG51bGwpCisgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiLCBb
Y29udGVudF0sICJDb2RlTWlycm9yLWxpbmUiKSwgY29udGVudDogY29udGVudCwKKyAgICAgICAg
ICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSwKKyAgICAgICAgICAgICAgICAgdHJhaWxp
bmdTcGFjZTogZmFsc2UsCisgICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiAoaWUgfHwgd2Vi
a2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpfQorICBsaW5lVmlldy5tZWFzdXJl
ID0ge30KKworICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVw
IHRoaXMgdmlzdWFsIGxpbmUuCisgIGZvciAodmFyIGkgPSAwOyBpIDw9IChsaW5lVmlldy5yZXN0
ID8gbGluZVZpZXcucmVzdC5sZW5ndGggOiAwKTsgaSsrKSB7CisgICAgdmFyIGxpbmUgPSBpID8g
bGluZVZpZXcucmVzdFtpIC0gMV0gOiBsaW5lVmlldy5saW5lLCBvcmRlciA9ICh2b2lkIDApCisg
ICAgYnVpbGRlci5wb3MgPSAwCisgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW4KKyAg
ICAvLyBPcHRpb25hbGx5IHdpcmUgaW4gc29tZSBoYWNrcyBpbnRvIHRoZSB0b2tlbi1yZW5kZXJp
bmcKKyAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1aXJrcy4KKyAgICBp
ZiAoaGFzQmFkQmlkaVJlY3RzKGNtLmRpc3BsYXkubWVhc3VyZSkgJiYgKG9yZGVyID0gZ2V0T3Jk
ZXIobGluZSkpKQorICAgICAgeyBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbkJhZEJpZGko
YnVpbGRlci5hZGRUb2tlbiwgb3JkZXIpIH0KKyAgICBidWlsZGVyLm1hcCA9IFtdCisgICAgdmFy
IGFsbG93RnJvbnRpZXJVcGRhdGUgPSBsaW5lVmlldyAhPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVh
c3VyZWQgJiYgbGluZU5vKGxpbmUpCisgICAgaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRl
ciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSwgYWxsb3dGcm9udGllclVwZGF0ZSkpCisgICAgaWYg
KGxpbmUuc3R5bGVDbGFzc2VzKSB7CisgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFz
cykKKyAgICAgICAgeyBidWlsZGVyLmJnQ2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xh
c3Nlcy5iZ0NsYXNzLCBidWlsZGVyLmJnQ2xhc3MgfHwgIiIpIH0KKyAgICAgIGlmIChsaW5lLnN0
eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MpCisgICAgICAgIHsgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2lu
Q2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8
ICIiKSB9CisgICAgfQogCi0gIGZ1bmN0aW9uIGVzdGltYXRlTGluZUhlaWdodHMoY20pIHsKLSAg
ICB2YXIgZG9jID0gY20uZG9jLCBlc3QgPSBlc3RpbWF0ZUhlaWdodChjbSk7Ci0gICAgZG9jLml0
ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAgdmFyIGVzdEhlaWdodCA9IGVzdChsaW5lKTsKLSAg
ICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwg
ZXN0SGVpZ2h0KTsKLSAgICB9KTsKKyAgICAvLyBFbnN1cmUgYXQgbGVhc3QgYSBzaW5nbGUgbm9k
ZSBpcyBwcmVzZW50LCBmb3IgbWVhc3VyaW5nLgorICAgIGlmIChidWlsZGVyLm1hcC5sZW5ndGgg
PT0gMCkKKyAgICAgIHsgYnVpbGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBw
ZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSkgfQorCisgICAg
Ly8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2lj
YWwgbGluZQorICAgIGlmIChpID09IDApIHsKKyAgICAgIGxpbmVWaWV3Lm1lYXN1cmUubWFwID0g
YnVpbGRlci5tYXAKKyAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fQorICAgIH0gZWxz
ZSB7CisgICAgICA7KGxpbmVWaWV3Lm1lYXN1cmUubWFwcyB8fCAobGluZVZpZXcubWVhc3VyZS5t
YXBzID0gW10pKS5wdXNoKGJ1aWxkZXIubWFwKQorICAgICAgOyhsaW5lVmlldy5tZWFzdXJlLmNh
Y2hlcyB8fCAobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgPSBbXSkpLnB1c2goe30pCisgICAgfQog
ICB9CiAKLSAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKGNtKSB7Ci0gICAgY20uZGlzcGxheS53cmFw
cGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMq
Y20tcy1cUysvZywgIiIpICsKLSAgICAgIGNtLm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMp
XHMqL2csICIgY20tcy0iKTsKLSAgICBjbGVhckNhY2hlcyhjbSk7CisgIC8vIFNlZSBpc3N1ZSAj
MjkwMQorICBpZiAod2Via2l0KSB7CisgICAgdmFyIGxhc3QgPSBidWlsZGVyLmNvbnRlbnQubGFz
dENoaWxkCisgICAgaWYgKC9cYmNtLXRhYlxiLy50ZXN0KGxhc3QuY2xhc3NOYW1lKSB8fCAobGFz
dC5xdWVyeVNlbGVjdG9yICYmIGxhc3QucXVlcnlTZWxlY3RvcigiLmNtLXRhYiIpKSkKKyAgICAg
IHsgYnVpbGRlci5jb250ZW50LmNsYXNzTmFtZSA9ICJjbS10YWItd3JhcC1oYWNrIiB9CisgIH0K
KworICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20sIGxpbmVWaWV3LmxpbmUsIGJ1aWxkZXIu
cHJlKQorICBpZiAoYnVpbGRlci5wcmUuY2xhc3NOYW1lKQorICAgIHsgYnVpbGRlci50ZXh0Q2xh
c3MgPSBqb2luQ2xhc3NlcyhidWlsZGVyLnByZS5jbGFzc05hbWUsIGJ1aWxkZXIudGV4dENsYXNz
IHx8ICIiKSB9CisKKyAgcmV0dXJuIGJ1aWxkZXIKK30KKworZnVuY3Rpb24gZGVmYXVsdFNwZWNp
YWxDaGFyUGxhY2Vob2xkZXIoY2gpIHsKKyAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgIlx1MjAy
MiIsICJjbS1pbnZhbGlkY2hhciIpCisgIHRva2VuLnRpdGxlID0gIlxcdSIgKyBjaC5jaGFyQ29k
ZUF0KDApLnRvU3RyaW5nKDE2KQorICB0b2tlbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCB0
b2tlbi50aXRsZSkKKyAgcmV0dXJuIHRva2VuCit9CisKKy8vIEJ1aWxkIHVwIHRoZSBET00gcmVw
cmVzZW50YXRpb24gZm9yIGEgc2luZ2xlIHRva2VuLCBhbmQgYWRkIGl0IHRvCisvLyB0aGUgbGlu
ZSBtYXAuIFRha2VzIGNhcmUgdG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5
LgorZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwg
ZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHsKKyAgaWYgKCF0ZXh0KSB7IHJldHVybiB9CisgIHZhciBk
aXNwbGF5VGV4dCA9IGJ1aWxkZXIuc3BsaXRTcGFjZXMgPyBzcGxpdFNwYWNlcyh0ZXh0LCBidWls
ZGVyLnRyYWlsaW5nU3BhY2UpIDogdGV4dAorICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3Rh
dGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlCisgIHZhciBjb250ZW50CisgIGlmICgh
c3BlY2lhbC50ZXN0KHRleHQpKSB7CisgICAgYnVpbGRlci5jb2wgKz0gdGV4dC5sZW5ndGgKKyAg
ICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQpCisgICAgYnVp
bGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyB0ZXh0Lmxlbmd0aCwgY29u
dGVudCkKKyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgbXVzdFdyYXAgPSB0cnVlIH0K
KyAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aAorICB9IGVsc2UgeworICAgIGNvbnRlbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKKyAgICB2YXIgcG9zID0gMAorICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvcworICAgICAgdmFy
IG0gPSBzcGVjaWFsLmV4ZWModGV4dCkKKyAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXgg
LSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvcworICAgICAgaWYgKHNraXBwZWQpIHsKKyAgICAgICAg
dmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0LnNsaWNlKHBvcywg
cG9zICsgc2tpcHBlZCkpCisgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBjb250
ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSkgfQorICAgICAgICBlbHNlIHsgY29u
dGVudC5hcHBlbmRDaGlsZCh0eHQpIH0KKyAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVy
LnBvcywgYnVpbGRlci5wb3MgKyBza2lwcGVkLCB0eHQpCisgICAgICAgIGJ1aWxkZXIuY29sICs9
IHNraXBwZWQKKyAgICAgICAgYnVpbGRlci5wb3MgKz0gc2tpcHBlZAorICAgICAgfQorICAgICAg
aWYgKCFtKSB7IGJyZWFrIH0KKyAgICAgIHBvcyArPSBza2lwcGVkICsgMQorICAgICAgdmFyIHR4
dCQxID0gKHZvaWQgMCkKKyAgICAgIGlmIChtWzBdID09ICJcdCIpIHsKKyAgICAgICAgdmFyIHRh
YlNpemUgPSBidWlsZGVyLmNtLm9wdGlvbnMudGFiU2l6ZSwgdGFiV2lkdGggPSB0YWJTaXplIC0g
YnVpbGRlci5jb2wgJSB0YWJTaXplCisgICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGls
ZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSkKKyAgICAgICAgdHh0
JDEuc2V0QXR0cmlidXRlKCJyb2xlIiwgInByZXNlbnRhdGlvbiIpCisgICAgICAgIHR4dCQxLnNl
dEF0dHJpYnV0ZSgiY20tdGV4dCIsICJcdCIpCisgICAgICAgIGJ1aWxkZXIuY29sICs9IHRhYldp
ZHRoCisgICAgICB9IGVsc2UgaWYgKG1bMF0gPT0gIlxyIiB8fCBtWzBdID09ICJcbiIpIHsKKyAg
ICAgICAgdHh0JDEgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIG1bMF0gPT0gIlxy
IiA/ICJcdTI0MGQiIDogIlx1MjQyNCIsICJjbS1pbnZhbGlkY2hhciIpKQorICAgICAgICB0eHQk
MS5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCBtWzBdKQorICAgICAgICBidWlsZGVyLmNvbCArPSAx
CisgICAgICB9IGVsc2UgeworICAgICAgICB0eHQkMSA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVj
aWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pCisgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZSgiY20t
dGV4dCIsIG1bMF0pCisgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBjb250ZW50
LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHQkMV0pKSB9CisgICAgICAgIGVsc2UgeyBjb250
ZW50LmFwcGVuZENoaWxkKHR4dCQxKSB9CisgICAgICAgIGJ1aWxkZXIuY29sICs9IDEKKyAgICAg
IH0KKyAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgMSwg
dHh0JDEpCisgICAgICBidWlsZGVyLnBvcysrCisgICAgfQorICB9CisgIGJ1aWxkZXIudHJhaWxp
bmdTcGFjZSA9IGRpc3BsYXlUZXh0LmNoYXJDb2RlQXQodGV4dC5sZW5ndGggLSAxKSA9PSAzMgor
ICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0V3JhcCB8fCBjc3Mp
IHsKKyAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgIiIKKyAgICBpZiAoc3RhcnRTdHlsZSkg
eyBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZSB9CisgICAgaWYgKGVuZFN0eWxlKSB7IGZ1bGxTdHls
ZSArPSBlbmRTdHlsZSB9CisgICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgW2NvbnRlbnRdLCBm
dWxsU3R5bGUsIGNzcykKKyAgICBpZiAodGl0bGUpIHsgdG9rZW4udGl0bGUgPSB0aXRsZSB9Cisg
ICAgcmV0dXJuIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZCh0b2tlbikKKyAgfQorICBidWls
ZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudCkKK30KKworZnVuY3Rpb24gc3BsaXRTcGFj
ZXModGV4dCwgdHJhaWxpbmdCZWZvcmUpIHsKKyAgaWYgKHRleHQubGVuZ3RoID4gMSAmJiAhLyAg
Ly50ZXN0KHRleHQpKSB7IHJldHVybiB0ZXh0IH0KKyAgdmFyIHNwYWNlQmVmb3JlID0gdHJhaWxp
bmdCZWZvcmUsIHJlc3VsdCA9ICIiCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7
IGkrKykgeworICAgIHZhciBjaCA9IHRleHQuY2hhckF0KGkpCisgICAgaWYgKGNoID09ICIgIiAm
JiBzcGFjZUJlZm9yZSAmJiAoaSA9PSB0ZXh0Lmxlbmd0aCAtIDEgfHwgdGV4dC5jaGFyQ29kZUF0
KGkgKyAxKSA9PSAzMikpCisgICAgICB7IGNoID0gIlx1MDBhMCIgfQorICAgIHJlc3VsdCArPSBj
aAorICAgIHNwYWNlQmVmb3JlID0gY2ggPT0gIiAiCisgIH0KKyAgcmV0dXJuIHJlc3VsdAorfQor
CisvLyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBz
dHJldGNoZXMgb2YKKy8vIHJpZ2h0LXRvLWxlZnQgdGV4dC4KK2Z1bmN0aW9uIGJ1aWxkVG9rZW5C
YWRCaWRpKGlubmVyLCBvcmRlcikgeworICByZXR1cm4gZnVuY3Rpb24gKGJ1aWxkZXIsIHRleHQs
IHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUsIGNzcykgeworICAgIHN0eWxlID0g
c3R5bGUgPyBzdHlsZSArICIgY20tZm9yY2UtYm9yZGVyIiA6ICJjbS1mb3JjZS1ib3JkZXIiCisg
ICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGgKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAvLyBGaW5kIHRoZSBwYXJ0IHRoYXQgb3ZlcmxhcHMgd2l0aCB0
aGUgc3RhcnQgb2YgdGhpcyB0ZXh0CisgICAgICB2YXIgcGFydCA9ICh2b2lkIDApCisgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHBhcnQgPSBv
cmRlcltpXQorICAgICAgICBpZiAocGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFy
dCkgeyBicmVhayB9CisgICAgICB9CisgICAgICBpZiAocGFydC50byA+PSBlbmQpIHsgcmV0dXJu
IGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUs
IGNzcykgfQorICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5zbGljZSgwLCBwYXJ0LnRvIC0gc3Rh
cnQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgbnVsbCwgdGl0bGUsIGNzcykKKyAgICAgIHN0YXJ0U3R5
bGUgPSBudWxsCisgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpCisgICAg
ICBzdGFydCA9IHBhcnQudG8KKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gYnVpbGRDb2xsYXBz
ZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7CisgIHZhciB3aWRn
ZXQgPSAhaWdub3JlV2lkZ2V0ICYmIG1hcmtlci53aWRnZXROb2RlCisgIGlmICh3aWRnZXQpIHsg
YnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQp
IH0KKyAgaWYgKCFpZ25vcmVXaWRnZXQgJiYgYnVpbGRlci5jbS5kaXNwbGF5LmlucHV0Lm5lZWRz
Q29udGVudEF0dHJpYnV0ZSkgeworICAgIGlmICghd2lkZ2V0KQorICAgICAgeyB3aWRnZXQgPSBi
dWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
KSB9CisgICAgd2lkZ2V0LnNldEF0dHJpYnV0ZSgiY20tbWFya2VyIiwgbWFya2VyLmlkKQorICB9
CisgIGlmICh3aWRnZXQpIHsKKyAgICBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0
YWJsZSh3aWRnZXQpCisgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHdpZGdldCkKKyAg
fQorICBidWlsZGVyLnBvcyArPSBzaXplCisgIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSA9IGZhbHNl
Cit9CisKKy8vIE91dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRh
a2luZyBoaWdobGlnaHRpbmcKKy8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291bnQuCitmdW5j
dGlvbiBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBzdHlsZXMpIHsKKyAgdmFyIHNw
YW5zID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwCisgIGlm
ICghc3BhbnMpIHsKKyAgICBmb3IgKHZhciBpJDEgPSAxOyBpJDEgPCBzdHlsZXMubGVuZ3RoOyBp
JDErPTIpCisgICAgICB7IGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShh
dCwgYXQgPSBzdHlsZXNbaSQxXSksIGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2kkMSsxXSwg
YnVpbGRlci5jbS5vcHRpb25zKSkgfQorICAgIHJldHVybgogICB9CiAKLSAgZnVuY3Rpb24gZ3V0
dGVyc0NoYW5nZWQoY20pIHsKLSAgICB1cGRhdGVHdXR0ZXJzKGNtKTsKLSAgICByZWdDaGFuZ2Uo
Y20pOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXthbGlnbkhvcml6b250YWxseShjbSk7fSwg
MjApOworICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0g
IiIsIHN0eWxlLCBjc3MKKyAgdmFyIG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRT
dHlsZSwgc3BhblN0YXJ0U3R5bGUsIHRpdGxlLCBjb2xsYXBzZWQKKyAgZm9yICg7OykgeworICAg
IGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0Cisg
ICAgICBzcGFuU3R5bGUgPSBzcGFuRW5kU3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9IHRpdGxlID0g
Y3NzID0gIiIKKyAgICAgIGNvbGxhcHNlZCA9IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eQor
ICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW10sIGVuZFN0eWxlcyA9ICh2b2lkIDApCisgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7CisgICAgICAgIHZhciBz
cCA9IHNwYW5zW2pdLCBtID0gc3AubWFya2VyCisgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2tt
YXJrIiAmJiBzcC5mcm9tID09IHBvcyAmJiBtLndpZGdldE5vZGUpIHsKKyAgICAgICAgICBmb3Vu
ZEJvb2ttYXJrcy5wdXNoKG0pCisgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYg
KHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0g
cG9zICYmIHNwLmZyb20gPT0gcG9zKSkgeworICAgICAgICAgIGlmIChzcC50byAhPSBudWxsICYm
IHNwLnRvICE9IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AudG8pIHsKKyAgICAgICAgICAgIG5leHRD
aGFuZ2UgPSBzcC50bworICAgICAgICAgICAgc3BhbkVuZFN0eWxlID0gIiIKKyAgICAgICAgICB9
CisgICAgICAgICAgaWYgKG0uY2xhc3NOYW1lKSB7IHNwYW5TdHlsZSArPSAiICIgKyBtLmNsYXNz
TmFtZSB9CisgICAgICAgICAgaWYgKG0uY3NzKSB7IGNzcyA9IChjc3MgPyBjc3MgKyAiOyIgOiAi
IikgKyBtLmNzcyB9CisgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBv
cykgeyBzcGFuU3RhcnRTdHlsZSArPSAiICIgKyBtLnN0YXJ0U3R5bGUgfQorICAgICAgICAgIGlm
IChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRDaGFuZ2UpIHsgKGVuZFN0eWxlcyB8fCAoZW5k
U3R5bGVzID0gW10pKS5wdXNoKG0uZW5kU3R5bGUsIHNwLnRvKSB9CisgICAgICAgICAgaWYgKG0u
dGl0bGUgJiYgIXRpdGxlKSB7IHRpdGxlID0gbS50aXRsZSB9CisgICAgICAgICAgaWYgKG0uY29s
bGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGNvbGxhcHNl
ZC5tYXJrZXIsIG0pIDwgMCkpCisgICAgICAgICAgICB7IGNvbGxhcHNlZCA9IHNwIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7Cisg
ICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb20KKyAgICAgICAgfQorICAgICAgfQorICAgICAg
aWYgKGVuZFN0eWxlcykgeyBmb3IgKHZhciBqJDEgPSAwOyBqJDEgPCBlbmRTdHlsZXMubGVuZ3Ro
OyBqJDEgKz0gMikKKyAgICAgICAgeyBpZiAoZW5kU3R5bGVzW2okMSArIDFdID09IG5leHRDaGFu
Z2UpIHsgc3BhbkVuZFN0eWxlICs9ICIgIiArIGVuZFN0eWxlc1tqJDFdIH0gfSB9CisKKyAgICAg
IGlmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5mcm9tID09IHBvcykgeyBmb3IgKHZhciBqJDIg
PSAwOyBqJDIgPCBmb3VuZEJvb2ttYXJrcy5sZW5ndGg7ICsraiQyKQorICAgICAgICB7IGJ1aWxk
Q29sbGFwc2VkU3BhbihidWlsZGVyLCAwLCBmb3VuZEJvb2ttYXJrc1tqJDJdKSB9IH0KKyAgICAg
IGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5mcm9tIHx8IDApID09IHBvcykgeworICAgICAg
ICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVu
ICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xsYXBzZWQubWFya2VyLCBjb2xsYXBzZWQuZnJvbSA9PSBudWxsKQorICAgICAgICBpZiAoY29s
bGFwc2VkLnRvID09IG51bGwpIHsgcmV0dXJuIH0KKyAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9
PSBwb3MpIHsgY29sbGFwc2VkID0gZmFsc2UgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAocG9z
ID49IGxlbikgeyBicmVhayB9CisKKyAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENo
YW5nZSkKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgaWYgKHRleHQpIHsKKyAgICAgICAgdmFy
IGVuZCA9IHBvcyArIHRleHQubGVuZ3RoCisgICAgICAgIGlmICghY29sbGFwc2VkKSB7CisgICAg
ICAgICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBw
b3MpIDogdGV4dAorICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0
LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4
dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0aXRsZSwgY3NzKQorICAgICAgICB9CisgICAg
ICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3Mg
PSB1cHRvOyBicmVha30KKyAgICAgICAgcG9zID0gZW5kCisgICAgICAgIHNwYW5TdGFydFN0eWxl
ID0gIiIKKyAgICAgIH0KKyAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxl
c1tpKytdKQorICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBi
dWlsZGVyLmNtLm9wdGlvbnMpCisgICAgfQogICB9Cit9CisKKworLy8gVGhlc2Ugb2JqZWN0cyBh
cmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRseSBkcmF3bikKKy8vIHBh
cnQgb2YgdGhlIGRvY3VtZW50LiBBIExpbmVWaWV3IG1heSBjb3JyZXNwb25kIHRvIG11bHRpcGxl
CisvLyBsb2dpY2FsIGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNlZCBy
YW5nZXMuCitmdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUsIGxpbmVOKSB7CisgIC8vIFRoZSBz
dGFydGluZyBsaW5lCisgIHRoaXMubGluZSA9IGxpbmUKKyAgLy8gQ29udGludWluZyBsaW5lcywg
aWYgYW55CisgIHRoaXMucmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSkKKyAgLy8gTnVt
YmVyIG9mIGxvZ2ljYWwgbGluZXMgaW4gdGhpcyB2aXN1YWwgbGluZQorICB0aGlzLnNpemUgPSB0
aGlzLnJlc3QgPyBsaW5lTm8obHN0KHRoaXMucmVzdCkpIC0gbGluZU4gKyAxIDogMQorICB0aGlz
Lm5vZGUgPSB0aGlzLnRleHQgPSBudWxsCisgIHRoaXMuaGlkZGVuID0gbGluZUlzSGlkZGVuKGRv
YywgbGluZSkKK30KKworLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgTGluZVZpZXcgb2JqZWN0cyBmb3Ig
dGhlIGdpdmVuIGxpbmVzLgorZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKSB7
CisgIHZhciBhcnJheSA9IFtdLCBuZXh0UG9zCisgIGZvciAodmFyIHBvcyA9IGZyb207IHBvcyA8
IHRvOyBwb3MgPSBuZXh0UG9zKSB7CisgICAgdmFyIHZpZXcgPSBuZXcgTGluZVZpZXcoY20uZG9j
LCBnZXRMaW5lKGNtLmRvYywgcG9zKSwgcG9zKQorICAgIG5leHRQb3MgPSBwb3MgKyB2aWV3LnNp
emUKKyAgICBhcnJheS5wdXNoKHZpZXcpCisgIH0KKyAgcmV0dXJuIGFycmF5Cit9CisKK3ZhciBv
cGVyYXRpb25Hcm91cCA9IG51bGwKKworZnVuY3Rpb24gcHVzaE9wZXJhdGlvbihvcCkgeworICBp
ZiAob3BlcmF0aW9uR3JvdXApIHsKKyAgICBvcGVyYXRpb25Hcm91cC5vcHMucHVzaChvcCkKKyAg
fSBlbHNlIHsKKyAgICBvcC5vd25zR3JvdXAgPSBvcGVyYXRpb25Hcm91cCA9IHsKKyAgICAgIG9w
czogW29wXSwKKyAgICAgIGRlbGF5ZWRDYWxsYmFja3M6IFtdCisgICAgfQorICB9Cit9CisKK2Z1
bmN0aW9uIGZpcmVDYWxsYmFja3NGb3JPcHMoZ3JvdXApIHsKKyAgLy8gQ2FsbHMgZGVsYXllZCBj
YWxsYmFja3MgYW5kIGN1cnNvckFjdGl2aXR5IGhhbmRsZXJzIHVudGlsIG5vCisgIC8vIG5ldyBv
bmVzIGFwcGVhcgorICB2YXIgY2FsbGJhY2tzID0gZ3JvdXAuZGVsYXllZENhbGxiYWNrcywgaSA9
IDAKKyAgZG8geworICAgIGZvciAoOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKQorICAgICAg
eyBjYWxsYmFja3NbaV0uY2FsbChudWxsKSB9CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91
cC5vcHMubGVuZ3RoOyBqKyspIHsKKyAgICAgIHZhciBvcCA9IGdyb3VwLm9wc1tqXQorICAgICAg
aWYgKG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpCisgICAgICAgIHsgd2hpbGUgKG9wLmN1cnNv
ckFjdGl2aXR5Q2FsbGVkIDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGgpCisgICAg
ICAgICAgeyBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVk
KytdLmNhbGwobnVsbCwgb3AuY20pIH0gfQorICAgIH0KKyAgfSB3aGlsZSAoaSA8IGNhbGxiYWNr
cy5sZW5ndGgpCit9CiAKLSAgLy8gUmVidWlsZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUg
dGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0aGUKLSAgLy8gY29kZSBtYXRjaGVzIHRoZWlyIHdp
ZHRoLgotICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7Ci0gICAgdmFyIGd1dHRlcnMgPSBj
bS5kaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gY20ub3B0aW9ucy5ndXR0ZXJzOwotICAgIHJlbW92
ZUNoaWxkcmVuKGd1dHRlcnMpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BlY3MubGVuZ3Ro
OyArK2kpIHsKLSAgICAgIHZhciBndXR0ZXJDbGFzcyA9IHNwZWNzW2ldOwotICAgICAgdmFyIGdF
bHQgPSBndXR0ZXJzLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0
dGVyICIgKyBndXR0ZXJDbGFzcykpOwotICAgICAgaWYgKGd1dHRlckNsYXNzID09ICJDb2RlTWly
cm9yLWxpbmVudW1iZXJzIikgewotICAgICAgICBjbS5kaXNwbGF5LmxpbmVHdXR0ZXIgPSBnRWx0
OwotICAgICAgICBnRWx0LnN0eWxlLndpZHRoID0gKGNtLmRpc3BsYXkubGluZU51bVdpZHRoIHx8
IDEpICsgInB4IjsKK2Z1bmN0aW9uIGZpbmlzaE9wZXJhdGlvbihvcCwgZW5kQ2IpIHsKKyAgdmFy
IGdyb3VwID0gb3Aub3duc0dyb3VwCisgIGlmICghZ3JvdXApIHsgcmV0dXJuIH0KKworICB0cnkg
eyBmaXJlQ2FsbGJhY2tzRm9yT3BzKGdyb3VwKSB9CisgIGZpbmFsbHkgeworICAgIG9wZXJhdGlv
bkdyb3VwID0gbnVsbAorICAgIGVuZENiKGdyb3VwKQorICB9Cit9CisKK3ZhciBvcnBoYW5EZWxh
eWVkQ2FsbGJhY2tzID0gbnVsbAorCisvLyBPZnRlbiwgd2Ugd2FudCB0byBzaWduYWwgZXZlbnRz
IGF0IGEgcG9pbnQgd2hlcmUgd2UgYXJlIGluIHRoZQorLy8gbWlkZGxlIG9mIHNvbWUgd29yaywg
YnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZworLy8gb3RoZXIgbWV0
aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnQKKy8v
IHN0YXRlIG9yIHNpbXBseSBub3QgZXhwZWN0IGFueSBvdGhlciBldmVudHMgdG8gaGFwcGVuLgor
Ly8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQg
c2NoZWR1bGVzCisvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9u
IGVuZHMsIG9yLCBpZiBubworLy8gb3BlcmF0aW9uIGlzIGFjdGl2ZSwgd2hlbiBhIHRpbWVvdXQg
ZmlyZXMuCitmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4q
LykgeworICB2YXIgYXJyID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSkKKyAgaWYgKCFhcnIu
bGVuZ3RoKSB7IHJldHVybiB9CisgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKSwgbGlzdAorICBpZiAob3BlcmF0aW9uR3JvdXApIHsKKyAgICBsaXN0
ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrcworICB9IGVsc2UgaWYgKG9ycGhhbkRl
bGF5ZWRDYWxsYmFja3MpIHsKKyAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcworICB9
IGVsc2UgeworICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzID0gW10KKyAgICBzZXRU
aW1lb3V0KGZpcmVPcnBoYW5EZWxheWVkLCAwKQorICB9CisgIHZhciBsb29wID0gZnVuY3Rpb24g
KCBpICkgeworICAgIGxpc3QucHVzaChmdW5jdGlvbiAoKSB7IHJldHVybiBhcnJbaV0uYXBwbHko
bnVsbCwgYXJncyk7IH0pCisgIH07CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3Ro
OyArK2kpCisgICAgbG9vcCggaSApOworfQorCitmdW5jdGlvbiBmaXJlT3JwaGFuRGVsYXllZCgp
IHsKKyAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzCisgIG9ycGhhbkRlbGF5
ZWRDYWxsYmFja3MgPSBudWxsCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7
ICsraSkgeyBkZWxheWVkW2ldKCkgfQorfQorCisvLyBXaGVuIGFuIGFzcGVjdCBvZiBhIGxpbmUg
Y2hhbmdlcywgYSBzdHJpbmcgaXMgYWRkZWQgdG8KKy8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMg
dXBkYXRlcyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgbGluZSdzCisvLyBET00gc3RydWN0dXJl
LgorZnVuY3Rpb24gdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGlt
cykgeworICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKysp
IHsKKyAgICB2YXIgdHlwZSA9IGxpbmVWaWV3LmNoYW5nZXNbal0KKyAgICBpZiAodHlwZSA9PSAi
dGV4dCIpIHsgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KSB9CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAiZ3V0dGVyIikgeyB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRp
bXMpIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHsgdXBkYXRlTGluZUNsYXNzZXMo
bGluZVZpZXcpIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJ3aWRnZXQiKSB7IHVwZGF0ZUxpbmVX
aWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykgfQorICB9CisgIGxpbmVWaWV3LmNoYW5nZXMgPSBu
dWxsCit9CisKKy8vIExpbmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzLCB3aWRnZXRzIG9yIGEgYmFj
a2dyb3VuZCBjbGFzcyBuZWVkIHRvCisvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEg
ZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2CitmdW5jdGlvbiBlbnN1cmVMaW5lV3Jh
cHBlZChsaW5lVmlldykgeworICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lVmlldy50ZXh0KSB7
CisgICAgbGluZVZpZXcubm9kZSA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBy
ZWxhdGl2ZSIpCisgICAgaWYgKGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZSkKKyAgICAgIHsgbGlu
ZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmll
dy50ZXh0KSB9CisgICAgbGluZVZpZXcubm9kZS5hcHBlbmRDaGlsZChsaW5lVmlldy50ZXh0KQor
ICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRl
eCA9IDIgfQorICB9CisgIHJldHVybiBsaW5lVmlldy5ub2RlCit9CisKK2Z1bmN0aW9uIHVwZGF0
ZUxpbmVCYWNrZ3JvdW5kKGxpbmVWaWV3KSB7CisgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNz
ID8gbGluZVZpZXcuYmdDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLmJnQ2xhc3MgfHwgIiIp
IDogbGluZVZpZXcubGluZS5iZ0NsYXNzCisgIGlmIChjbHMpIHsgY2xzICs9ICIgQ29kZU1pcnJv
ci1saW5lYmFja2dyb3VuZCIgfQorICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkgeworICAgIGlm
IChjbHMpIHsgbGluZVZpZXcuYmFja2dyb3VuZC5jbGFzc05hbWUgPSBjbHMgfQorICAgIGVsc2Ug
eyBsaW5lVmlldy5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuYmFj
a2dyb3VuZCk7IGxpbmVWaWV3LmJhY2tncm91bmQgPSBudWxsIH0KKyAgfSBlbHNlIGlmIChjbHMp
IHsKKyAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KQorICAgIGxpbmVW
aWV3LmJhY2tncm91bmQgPSB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGNscyks
IHdyYXAuZmlyc3RDaGlsZCkKKyAgfQorfQorCisvLyBXcmFwcGVyIGFyb3VuZCBidWlsZExpbmVD
b250ZW50IHdoaWNoIHdpbGwgcmV1c2UgdGhlIHN0cnVjdHVyZQorLy8gaW4gZGlzcGxheS5leHRl
cm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUuCitmdW5jdGlvbiBnZXRMaW5lQ29udGVudChjbSwg
bGluZVZpZXcpIHsKKyAgdmFyIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZAorICBp
ZiAoZXh0ICYmIGV4dC5saW5lID09IGxpbmVWaWV3LmxpbmUpIHsKKyAgICBjbS5kaXNwbGF5LmV4
dGVybmFsTWVhc3VyZWQgPSBudWxsCisgICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJl
CisgICAgcmV0dXJuIGV4dC5idWlsdAorICB9CisgIHJldHVybiBidWlsZExpbmVDb250ZW50KGNt
LCBsaW5lVmlldykKK30KKworLy8gUmVkcmF3IHRoZSBsaW5lJ3MgdGV4dC4gSW50ZXJhY3RzIHdp
dGggdGhlIGJhY2tncm91bmQgYW5kIHRleHQKKy8vIGNsYXNzZXMgYmVjYXVzZSB0aGUgbW9kZSBt
YXkgb3V0cHV0IHRva2VucyB0aGF0IGluZmx1ZW5jZSB0aGVzZQorLy8gY2xhc3Nlcy4KK2Z1bmN0
aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykgeworICB2YXIgY2xzID0gbGluZVZpZXcu
dGV4dC5jbGFzc05hbWUKKyAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3
KQorICBpZiAobGluZVZpZXcudGV4dCA9PSBsaW5lVmlldy5ub2RlKSB7IGxpbmVWaWV3Lm5vZGUg
PSBidWlsdC5wcmUgfQorICBsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGJ1
aWx0LnByZSwgbGluZVZpZXcudGV4dCkKKyAgbGluZVZpZXcudGV4dCA9IGJ1aWx0LnByZQorICBp
ZiAoYnVpbHQuYmdDbGFzcyAhPSBsaW5lVmlldy5iZ0NsYXNzIHx8IGJ1aWx0LnRleHRDbGFzcyAh
PSBsaW5lVmlldy50ZXh0Q2xhc3MpIHsKKyAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdD
bGFzcworICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzcworICAgIHVwZGF0
ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KQorICB9IGVsc2UgaWYgKGNscykgeworICAgIGxpbmVWaWV3
LnRleHQuY2xhc3NOYW1lID0gY2xzCisgIH0KK30KKworZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNz
ZXMobGluZVZpZXcpIHsKKyAgdXBkYXRlTGluZUJhY2tncm91bmQobGluZVZpZXcpCisgIGlmIChs
aW5lVmlldy5saW5lLndyYXBDbGFzcykKKyAgICB7IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3
KS5jbGFzc05hbWUgPSBsaW5lVmlldy5saW5lLndyYXBDbGFzcyB9CisgIGVsc2UgaWYgKGxpbmVW
aWV3Lm5vZGUgIT0gbGluZVZpZXcudGV4dCkKKyAgICB7IGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1l
ID0gIiIgfQorICB2YXIgdGV4dENsYXNzID0gbGluZVZpZXcudGV4dENsYXNzID8gbGluZVZpZXcu
dGV4dENsYXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUudGV4dENsYXNzIHx8ICIiKSA6IGxpbmVW
aWV3LmxpbmUudGV4dENsYXNzCisgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4dENsYXNz
IHx8ICIiCit9CisKK2Z1bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5l
TiwgZGltcykgeworICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7CisgICAgbGluZVZpZXcubm9kZS5y
ZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXIpCisgICAgbGluZVZpZXcuZ3V0dGVyID0gbnVsbAor
ICB9CisgIGlmIChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKSB7CisgICAgbGluZVZpZXcubm9k
ZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKQorICAgIGxpbmVWaWV3Lmd1
dHRlckJhY2tncm91bmQgPSBudWxsCisgIH0KKyAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xh
c3MpIHsKKyAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KQorICAgIGxp
bmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1
dHRlci1iYWNrZ3JvdW5kICIgKyBsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJsZWZ0OiAiICsgKGNtLm9wdGlvbnMuZml4ZWRH
dXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHg7IHdp
ZHRoOiAiICsgKGRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKSkKKyAgICB3cmFwLmluc2Vy
dEJlZm9yZShsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kLCBsaW5lVmlldy50ZXh0KQorICB9Cisg
IHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJzCisgIGlmIChjbS5vcHRp
b25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKKyAgICB2YXIgd3JhcCQxID0gZW5zdXJlTGlu
ZVdyYXBwZWQobGluZVZpZXcpCisgICAgdmFyIGd1dHRlcldyYXAgPSBsaW5lVmlldy5ndXR0ZXIg
PSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwgKCJsZWZ0OiAi
ICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVy
VG90YWxXaWR0aCkgKyAicHgiKSkKKyAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUo
Z3V0dGVyV3JhcCkKKyAgICB3cmFwJDEuaW5zZXJ0QmVmb3JlKGd1dHRlcldyYXAsIGxpbmVWaWV3
LnRleHQpCisgICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpCisgICAgICB7IGd1dHRl
cldyYXAuY2xhc3NOYW1lICs9ICIgIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MgfQorICAg
IGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29k
ZU1pcnJvci1saW5lbnVtYmVycyJdKSkKKyAgICAgIHsgbGluZVZpZXcubGluZU51bWJlciA9IGd1
dHRlcldyYXAuYXBwZW5kQ2hpbGQoCisgICAgICAgIGVsdCgiZGl2IiwgbGluZU51bWJlckZvcihj
bS5vcHRpb25zLCBsaW5lTiksCisgICAgICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENv
ZGVNaXJyb3ItZ3V0dGVyLWVsdCIsCisgICAgICAgICAgICAoImxlZnQ6ICIgKyAoZGltcy5ndXR0
ZXJMZWZ0WyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pICsgInB4OyB3aWR0aDogIiArIChjbS5k
aXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoKSArICJweCIpKSkgfQorICAgIGlmIChtYXJrZXJzKSB7
IGZvciAodmFyIGsgPSAwOyBrIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytrKSB7Cisg
ICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFya2Vycy5oYXNP
d25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF0KKyAgICAgIGlmIChmb3VuZCkKKyAgICAgICAg
eyBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwgIkNvZGVNaXJyb3It
Z3V0dGVyLWVsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibGVmdDog
IiArIChkaW1zLmd1dHRlckxlZnRbaWRdKSArICJweDsgd2lkdGg6ICIgKyAoZGltcy5ndXR0ZXJX
aWR0aFtpZF0pICsgInB4IikpKSB9CisgICAgfSB9CisgIH0KK30KKworZnVuY3Rpb24gdXBkYXRl
TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CisgIGlmIChsaW5lVmlldy5hbGlnbmFi
bGUpIHsgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbCB9CisgIGZvciAodmFyIG5vZGUgPSBsaW5l
Vmlldy5ub2RlLmZpcnN0Q2hpbGQsIG5leHQgPSAodm9pZCAwKTsgbm9kZTsgbm9kZSA9IG5leHQp
IHsKKyAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZworICAgIGlmIChub2RlLmNsYXNzTmFtZSA9
PSAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikKKyAgICAgIHsgbGluZVZpZXcubm9kZS5yZW1vdmVD
aGlsZChub2RlKSB9CisgIH0KKyAgaW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1z
KQorfQorCisvLyBCdWlsZCBhIGxpbmUncyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNo
CitmdW5jdGlvbiBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHsK
KyAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KQorICBsaW5lVmlldy50
ZXh0ID0gbGluZVZpZXcubm9kZSA9IGJ1aWx0LnByZQorICBpZiAoYnVpbHQuYmdDbGFzcykgeyBs
aW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzcyB9CisgIGlmIChidWlsdC50ZXh0Q2xhc3Mp
IHsgbGluZVZpZXcudGV4dENsYXNzID0gYnVpbHQudGV4dENsYXNzIH0KKworICB1cGRhdGVMaW5l
Q2xhc3NlcyhsaW5lVmlldykKKyAgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVO
LCBkaW1zKQorICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpCisgIHJldHVy
biBsaW5lVmlldy5ub2RlCit9CisKKy8vIEEgbGluZVZpZXcgbWF5IGNvbnRhaW4gbXVsdGlwbGUg
bG9naWNhbCBsaW5lcyAod2hlbiBtZXJnZWQgYnkKKy8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3
aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLgorZnVuY3Rpb24gaW5zZXJ0
TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CisgIGluc2VydExpbmVXaWRnZXRzRm9y
KGNtLCBsaW5lVmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSkKKyAgaWYgKGxpbmVWaWV3
LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQor
ICAgIHsgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3
LCBkaW1zLCBmYWxzZSkgfSB9Cit9CisKK2Z1bmN0aW9uIGluc2VydExpbmVXaWRnZXRzRm9yKGNt
LCBsaW5lLCBsaW5lVmlldywgZGltcywgYWxsb3dBYm92ZSkgeworICBpZiAoIWxpbmUud2lkZ2V0
cykgeyByZXR1cm4gfQorICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KQor
ICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkg
eworICAgIHZhciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2Rl
XSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpCisgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VF
dmVudHMpIHsgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCAidHJ1ZSIpIH0K
KyAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykKKyAg
ICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobm9kZSkKKyAgICBpZiAoYWxsb3dBYm92
ZSAmJiB3aWRnZXQuYWJvdmUpCisgICAgICB7IHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpbmVW
aWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KSB9CisgICAgZWxzZQorICAgICAgeyB3cmFwLmFw
cGVuZENoaWxkKG5vZGUpIH0KKyAgICBzaWduYWxMYXRlcih3aWRnZXQsICJyZWRyYXciKQorICB9
Cit9CisKK2Z1bmN0aW9uIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3
LCBkaW1zKSB7CisgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSB7CisgICAgOyhsaW5lVmlldy5hbGln
bmFibGUgfHwgKGxpbmVWaWV3LmFsaWduYWJsZSA9IFtdKSkucHVzaChub2RlKQorICAgIHZhciB3
aWR0aCA9IGRpbXMud3JhcHBlcldpZHRoCisgICAgbm9kZS5zdHlsZS5sZWZ0ID0gZGltcy5maXhl
ZFBvcyArICJweCIKKyAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikgeworICAgICAgd2lkdGgg
LT0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoCisgICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0g
ZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IgorICAgIH0KKyAgICBub2RlLnN0eWxlLndpZHRo
ID0gd2lkdGggKyAicHgiCisgIH0KKyAgaWYgKHdpZGdldC5jb3Zlckd1dHRlcikgeworICAgIG5v
ZGUuc3R5bGUuekluZGV4ID0gNQorICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUi
CisgICAgaWYgKCF3aWRnZXQubm9IU2Nyb2xsKSB7IG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1k
aW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgiIH0KKyAgfQorfQorCitmdW5jdGlvbiB3aWRnZXRI
ZWlnaHQod2lkZ2V0KSB7CisgIGlmICh3aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHsgcmV0dXJuIHdp
ZGdldC5oZWlnaHQgfQorICB2YXIgY20gPSB3aWRnZXQuZG9jLmNtCisgIGlmICghY20pIHsgcmV0
dXJuIDAgfQorICBpZiAoIWNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkgewor
ICAgIHZhciBwYXJlbnRTdHlsZSA9ICJwb3NpdGlvbjogcmVsYXRpdmU7IgorICAgIGlmICh3aWRn
ZXQuY292ZXJHdXR0ZXIpCisgICAgICB7IHBhcmVudFN0eWxlICs9ICJtYXJnaW4tbGVmdDogLSIg
KyBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHg7IiB9CisgICAgaWYgKHdpZGdl
dC5ub0hTY3JvbGwpCisgICAgICB7IHBhcmVudFN0eWxlICs9ICJ3aWR0aDogIiArIGNtLmRpc3Bs
YXkud3JhcHBlci5jbGllbnRXaWR0aCArICJweDsiIH0KKyAgICByZW1vdmVDaGlsZHJlbkFuZEFk
ZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgbnVsbCwgcGFy
ZW50U3R5bGUpKQorICB9CisgIHJldHVybiB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0Lm5vZGUucGFy
ZW50Tm9kZS5vZmZzZXRIZWlnaHQKK30KKworLy8gUmV0dXJuIHRydWUgd2hlbiB0aGUgZ2l2ZW4g
bW91c2UgZXZlbnQgaGFwcGVuZWQgaW4gYSB3aWRnZXQKK2Z1bmN0aW9uIGV2ZW50SW5XaWRnZXQo
ZGlzcGxheSwgZSkgeworICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53
cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7CisgICAgaWYgKCFuIHx8IChuLm5vZGVUeXBlID09
IDEgJiYgbi5nZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiKSA9PSAidHJ1ZSIpIHx8Cisg
ICAgICAgIChuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92
ZXIpKQorICAgICAgeyByZXR1cm4gdHJ1ZSB9CisgIH0KK30KKworLy8gUE9TSVRJT04gTUVBU1VS
RU1FTlQKKworZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubGlu
ZVNwYWNlLm9mZnNldFRvcH0KK2Z1bmN0aW9uIHBhZGRpbmdWZXJ0KGRpc3BsYXkpIHtyZXR1cm4g
ZGlzcGxheS5tb3Zlci5vZmZzZXRIZWlnaHQgLSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRIZWln
aHR9CitmdW5jdGlvbiBwYWRkaW5nSChkaXNwbGF5KSB7CisgIGlmIChkaXNwbGF5LmNhY2hlZFBh
ZGRpbmdIKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIIH0KKyAgdmFyIGUgPSByZW1v
dmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIGVsdCgicHJlIiwgIngiKSkKKyAgdmFy
IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZShlKSA6IGUuY3VycmVudFN0eWxlCisgIHZhciBkYXRhID0ge2xlZnQ6IHBhcnNlSW50KHN0eWxl
LnBhZGRpbmdMZWZ0KSwgcmlnaHQ6IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCl9CisgIGlm
ICghaXNOYU4oZGF0YS5sZWZ0KSAmJiAhaXNOYU4oZGF0YS5yaWdodCkpIHsgZGlzcGxheS5jYWNo
ZWRQYWRkaW5nSCA9IGRhdGEgfQorICByZXR1cm4gZGF0YQorfQorCitmdW5jdGlvbiBzY3JvbGxH
YXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aCB9
CitmdW5jdGlvbiBkaXNwbGF5V2lkdGgoY20pIHsKKyAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuY2xpZW50V2lkdGggLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJXaWR0aAorfQor
ZnVuY3Rpb24gZGlzcGxheUhlaWdodChjbSkgeworICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxl
ci5jbGllbnRIZWlnaHQgLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJIZWlnaHQKK30K
KworLy8gRW5zdXJlIHRoZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVs
YXRlZC4gVGhpcyBpcworLy8gYW4gYXJyYXkgb2YgYm90dG9tIG9mZnNldHMgZm9yIHRoZSBsaW5l
cyB0aGF0IG1ha2UgdXAgYSBkcmF3bgorLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24s
IHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUKKy8vIGhlaWdodC4KK2Z1bmN0aW9uIGVuc3Vy
ZUxpbmVIZWlnaHRzKGNtLCBsaW5lVmlldywgcmVjdCkgeworICB2YXIgd3JhcHBpbmcgPSBjbS5v
cHRpb25zLmxpbmVXcmFwcGluZworICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBkaXNwbGF5
V2lkdGgoY20pCisgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYm
IGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHsKKyAgICB2YXIgaGVpZ2h0cyA9
IGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IFtdCisgICAgaWYgKHdyYXBwaW5nKSB7CisgICAg
ICBsaW5lVmlldy5tZWFzdXJlLndpZHRoID0gY3VyV2lkdGgKKyAgICAgIHZhciByZWN0cyA9IGxp
bmVWaWV3LnRleHQuZmlyc3RDaGlsZC5nZXRDbGllbnRSZWN0cygpCisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJlY3RzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICB2YXIgY3VyID0gcmVj
dHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV0KKyAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0
b20gLSBuZXh0LmJvdHRvbSkgPiAyKQorICAgICAgICAgIHsgaGVpZ2h0cy5wdXNoKChjdXIuYm90
dG9tICsgbmV4dC50b3ApIC8gMiAtIHJlY3QudG9wKSB9CiAgICAgICB9CiAgICAgfQotICAgIGd1
dHRlcnMuc3R5bGUuZGlzcGxheSA9IGkgPyAiIiA6ICJub25lIjsKLSAgICB1cGRhdGVHdXR0ZXJT
cGFjZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShjbSkgewotICAg
IHZhciB3aWR0aCA9IGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKLSAgICBjbS5kaXNw
bGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQgPSB3aWR0aCArICJweCI7Ci0gIH0KLQotICAvLyBD
b21wdXRlIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgbGluZSwgdGFraW5nIGludG8gYWNjb3Vu
dAotICAvLyBjb2xsYXBzZWQgcmFuZ2VzIChzZWUgbWFya1RleHQpIHRoYXQgbWlnaHQgaGlkZSBw
YXJ0cywgYW5kIGpvaW4KLSAgLy8gb3RoZXIgbGluZXMgb250byBpdC4KLSAgZnVuY3Rpb24gbGlu
ZUxlbmd0aChsaW5lKSB7Ci0gICAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHJldHVybiAwOwotICAg
IHZhciBsZW4gPSBsaW5lLnRleHQubGVuZ3RoLCBtZXJnZWQsIGN1ciA9IGxpbmU7Ci0gICAgd2hp
bGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGN1cikpIHsKLSAgICAgIHZhciBmb3Vu
ZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpOwotICAgICAgY3VyID0gZm91bmQuZnJvbS5saW5lOwot
ICAgICAgbGVuICs9IGZvdW5kLmZyb20uY2ggLSBmb3VuZC50by5jaDsKLSAgICB9Ci0gICAgY3Vy
ID0gbGluZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGN1cikpIHsK
LSAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpOwotICAgICAgbGVuIC09IGN1
ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLmZyb20uY2g7Ci0gICAgICBjdXIgPSBmb3VuZC50by5saW5l
OwotICAgICAgbGVuICs9IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLnRvLmNoOwotICAgIH0KLSAg
ICByZXR1cm4gbGVuOwotICB9Ci0KLSAgLy8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBk
b2N1bWVudC4KLSAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHsKLSAgICB2YXIgZCA9IGNtLmRp
c3BsYXksIGRvYyA9IGNtLmRvYzsKLSAgICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZp
cnN0KTsKLSAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7Ci0gICAg
ZC5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewot
ICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7Ci0gICAgICBpZiAobGVuID4gZC5tYXhM
aW5lTGVuZ3RoKSB7Ci0gICAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxlbjsKLSAgICAgICAgZC5t
YXhMaW5lID0gbGluZTsKKyAgICBoZWlnaHRzLnB1c2gocmVjdC5ib3R0b20gLSByZWN0LnRvcCkK
KyAgfQorfQorCisvLyBGaW5kIGEgbGluZSBtYXAgKG1hcHBpbmcgY2hhcmFjdGVyIG9mZnNldHMg
dG8gdGV4dCBub2RlcykgYW5kIGEKKy8vIG1lYXN1cmVtZW50IGNhY2hlIGZvciB0aGUgZ2l2ZW4g
bGluZSBudW1iZXIuIChBIGxpbmUgdmlldyBtaWdodAorLy8gY29udGFpbiBtdWx0aXBsZSBsaW5l
cyB3aGVuIGNvbGxhcHNlZCByYW5nZXMgYXJlIHByZXNlbnQuKQorZnVuY3Rpb24gbWFwRnJvbUxp
bmVWaWV3KGxpbmVWaWV3LCBsaW5lLCBsaW5lTikgeworICBpZiAobGluZVZpZXcubGluZSA9PSBs
aW5lKQorICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwLCBjYWNoZTogbGlu
ZVZpZXcubWVhc3VyZS5jYWNoZX0gfQorICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJl
c3QubGVuZ3RoOyBpKyspCisgICAgeyBpZiAobGluZVZpZXcucmVzdFtpXSA9PSBsaW5lKQorICAg
ICAgeyByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZp
ZXcubWVhc3VyZS5jYWNoZXNbaV19IH0gfQorICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBsaW5l
Vmlldy5yZXN0Lmxlbmd0aDsgaSQxKyspCisgICAgeyBpZiAobGluZU5vKGxpbmVWaWV3LnJlc3Rb
aSQxXSkgPiBsaW5lTikKKyAgICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFw
c1tpJDFdLCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaSQxXSwgYmVmb3JlOiB0cnVl
fSB9IH0KK30KKworLy8gUmVuZGVyIGEgbGluZSBpbnRvIHRoZSBoaWRkZW4gbm9kZSBkaXNwbGF5
LmV4dGVybmFsTWVhc3VyZWQuIFVzZWQKKy8vIHdoZW4gbWVhc3VyZW1lbnQgaXMgbmVlZGVkIGZv
ciBhIGxpbmUgdGhhdCdzIG5vdCBpbiB0aGUgdmlld3BvcnQuCitmdW5jdGlvbiB1cGRhdGVFeHRl
cm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CisgIGxpbmUgPSB2aXN1YWxMaW5lKGxpbmUpCisg
IHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKQorICB2YXIgdmlldyA9IGNtLmRpc3BsYXkuZXh0ZXJu
YWxNZWFzdXJlZCA9IG5ldyBMaW5lVmlldyhjbS5kb2MsIGxpbmUsIGxpbmVOKQorICB2aWV3Lmxp
bmVOID0gbGluZU4KKyAgdmFyIGJ1aWx0ID0gdmlldy5idWlsdCA9IGJ1aWxkTGluZUNvbnRlbnQo
Y20sIHZpZXcpCisgIHZpZXcudGV4dCA9IGJ1aWx0LnByZQorICByZW1vdmVDaGlsZHJlbkFuZEFk
ZChjbS5kaXNwbGF5LmxpbmVNZWFzdXJlLCBidWlsdC5wcmUpCisgIHJldHVybiB2aWV3Cit9CisK
Ky8vIEdldCBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCAoaW4gbGluZS1sb2NhbCBj
b29yZGluYXRlcykKKy8vIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4KK2Z1bmN0aW9uIG1lYXN1cmVD
aGFyKGNtLCBsaW5lLCBjaCwgYmlhcykgeworICByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChj
bSwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSwgY2gsIGJpYXMpCit9CisKKy8vIEZp
bmQgYSBsaW5lIHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIu
CitmdW5jdGlvbiBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKSB7CisgIGlmIChsaW5lTiA+PSBj
bS5kaXNwbGF5LnZpZXdGcm9tICYmIGxpbmVOIDwgY20uZGlzcGxheS52aWV3VG8pCisgICAgeyBy
ZXR1cm4gY20uZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmVOKV0gfQorICB2YXIg
ZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkCisgIGlmIChleHQgJiYgbGluZU4gPj0g
ZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCisgICAgeyByZXR1cm4g
ZXh0IH0KK30KKworLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBzdGVwcywgdGhl
IHNldC11cCB3b3JrIHRoYXQKKy8vIGFwcGxpZXMgdG8gdGhlIHdob2xlIGxpbmUsIGFuZCB0aGUg
bWVhc3VyZW1lbnQgb2YgdGhlIGFjdHVhbAorLy8gY2hhcmFjdGVyLiBGdW5jdGlvbnMgbGlrZSBj
b29yZHNDaGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBsb3Qgb2YKKy8vIG1lYXN1cmVtZW50cyBpbiBh
IHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3JrIGlzCisvLyBvbmx5IGRv
bmUgb25jZS4KK2Z1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkgeworICB2
YXIgbGluZU4gPSBsaW5lTm8obGluZSkKKyAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20s
IGxpbmVOKQorICBpZiAodmlldyAmJiAhdmlldy50ZXh0KSB7CisgICAgdmlldyA9IG51bGwKKyAg
fSBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykgeworICAgIHVwZGF0ZUxpbmVGb3JDaGFu
Z2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpCisgICAgY20uY3VyT3AuZm9y
Y2VVcGRhdGUgPSB0cnVlCisgIH0KKyAgaWYgKCF2aWV3KQorICAgIHsgdmlldyA9IHVwZGF0ZUV4
dGVybmFsTWVhc3VyZW1lbnQoY20sIGxpbmUpIH0KKworICB2YXIgaW5mbyA9IG1hcEZyb21MaW5l
Vmlldyh2aWV3LCBsaW5lLCBsaW5lTikKKyAgcmV0dXJuIHsKKyAgICBsaW5lOiBsaW5lLCB2aWV3
OiB2aWV3LCByZWN0OiBudWxsLAorICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hl
LCBiZWZvcmU6IGluZm8uYmVmb3JlLAorICAgIGhhc0hlaWdodHM6IGZhbHNlCisgIH0KK30KKwor
Ly8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRoZSBwb3Np
dGlvbiBvZiBhbgorLy8gYWN0dWFsIGNoYXJhY3RlciAob3IgZmV0Y2hlcyBpdCBmcm9tIHRoZSBj
YWNoZSkuCitmdW5jdGlvbiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJp
YXMsIHZhckhlaWdodCkgeworICBpZiAocHJlcGFyZWQuYmVmb3JlKSB7IGNoID0gLTEgfQorICB2
YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiksIGZvdW5kCisgIGlmIChwcmVwYXJlZC5jYWNoZS5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgZm91bmQgPSBwcmVwYXJlZC5jYWNoZVtrZXldCisg
IH0gZWxzZSB7CisgICAgaWYgKCFwcmVwYXJlZC5yZWN0KQorICAgICAgeyBwcmVwYXJlZC5yZWN0
ID0gcHJlcGFyZWQudmlldy50ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIH0KKyAgICBpZiAo
IXByZXBhcmVkLmhhc0hlaWdodHMpIHsKKyAgICAgIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBwcmVw
YXJlZC52aWV3LCBwcmVwYXJlZC5yZWN0KQorICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9IHRy
dWUKKyAgICB9CisgICAgZm91bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gs
IGJpYXMpCisgICAgaWYgKCFmb3VuZC5ib2d1cykgeyBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91
bmQgfQorICB9CisgIHJldHVybiB7bGVmdDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0
LAorICAgICAgICAgIHRvcDogdmFySGVpZ2h0ID8gZm91bmQucnRvcCA6IGZvdW5kLnRvcCwKKyAg
ICAgICAgICBib3R0b206IHZhckhlaWdodCA/IGZvdW5kLnJib3R0b20gOiBmb3VuZC5ib3R0b219
Cit9CisKK3ZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206
IDB9CisKK2Z1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwLCBjaCwgYmlhcykgewor
ICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2UsIG1TdGFydCwgbUVuZAorICAvLyBGaXJz
dCwgc2VhcmNoIHRoZSBsaW5lIG1hcCBmb3IgdGhlIHRleHQgbm9kZSBjb3JyZXNwb25kaW5nIHRv
LAorICAvLyBvciBjbG9zZXN0IHRvLCB0aGUgdGFyZ2V0IGNoYXJhY3Rlci4KKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHsKKyAgICBtU3RhcnQgPSBtYXBbaV0KKyAg
ICBtRW5kID0gbWFwW2kgKyAxXQorICAgIGlmIChjaCA8IG1TdGFydCkgeworICAgICAgc3RhcnQg
PSAwOyBlbmQgPSAxCisgICAgICBjb2xsYXBzZSA9ICJsZWZ0IgorICAgIH0gZWxzZSBpZiAoY2gg
PCBtRW5kKSB7CisgICAgICBzdGFydCA9IGNoIC0gbVN0YXJ0CisgICAgICBlbmQgPSBzdGFydCAr
IDEKKyAgICB9IGVsc2UgaWYgKGkgPT0gbWFwLmxlbmd0aCAtIDMgfHwgY2ggPT0gbUVuZCAmJiBt
YXBbaSArIDNdID4gY2gpIHsKKyAgICAgIGVuZCA9IG1FbmQgLSBtU3RhcnQKKyAgICAgIHN0YXJ0
ID0gZW5kIC0gMQorICAgICAgaWYgKGNoID49IG1FbmQpIHsgY29sbGFwc2UgPSAicmlnaHQiIH0K
KyAgICB9CisgICAgaWYgKHN0YXJ0ICE9IG51bGwpIHsKKyAgICAgIG5vZGUgPSBtYXBbaSArIDJd
CisgICAgICBpZiAobVN0YXJ0ID09IG1FbmQgJiYgYmlhcyA9PSAobm9kZS5pbnNlcnRMZWZ0ID8g
ImxlZnQiIDogInJpZ2h0IikpCisgICAgICAgIHsgY29sbGFwc2UgPSBiaWFzIH0KKyAgICAgIGlm
IChiaWFzID09ICJsZWZ0IiAmJiBzdGFydCA9PSAwKQorICAgICAgICB7IHdoaWxlIChpICYmIG1h
cFtpIC0gMl0gPT0gbWFwW2kgLSAzXSAmJiBtYXBbaSAtIDFdLmluc2VydExlZnQpIHsKKyAgICAg
ICAgICBub2RlID0gbWFwWyhpIC09IDMpICsgMl0KKyAgICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0
IgorICAgICAgICB9IH0KKyAgICAgIGlmIChiaWFzID09ICJyaWdodCIgJiYgc3RhcnQgPT0gbUVu
ZCAtIG1TdGFydCkKKyAgICAgICAgeyB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtp
ICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7CisgICAgICAg
ICAgbm9kZSA9IG1hcFsoaSArPSAzKSArIDJdCisgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQi
CisgICAgICAgIH0gfQorICAgICAgYnJlYWsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHtub2RlOiBu
b2RlLCBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBjb2xsYXBzZTogY29sbGFwc2UsIGNvdmVyU3Rh
cnQ6IG1TdGFydCwgY292ZXJFbmQ6IG1FbmR9Cit9CisKK2Z1bmN0aW9uIGdldFVzZWZ1bFJlY3Qo
cmVjdHMsIGJpYXMpIHsKKyAgdmFyIHJlY3QgPSBudWxsUmVjdAorICBpZiAoYmlhcyA9PSAibGVm
dCIpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykgeworICAgIGlmICgo
cmVjdCA9IHJlY3RzW2ldKS5sZWZ0ICE9IHJlY3QucmlnaHQpIHsgYnJlYWsgfQorICB9IH0gZWxz
ZSB7IGZvciAodmFyIGkkMSA9IHJlY3RzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSkgewor
ICAgIGlmICgocmVjdCA9IHJlY3RzW2kkMV0pLmxlZnQgIT0gcmVjdC5yaWdodCkgeyBicmVhayB9
CisgIH0gfQorICByZXR1cm4gcmVjdAorfQorCitmdW5jdGlvbiBtZWFzdXJlQ2hhcklubmVyKGNt
LCBwcmVwYXJlZCwgY2gsIGJpYXMpIHsKKyAgdmFyIHBsYWNlID0gbm9kZUFuZE9mZnNldEluTGlu
ZU1hcChwcmVwYXJlZC5tYXAsIGNoLCBiaWFzKQorICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0
YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xs
YXBzZQorCisgIHZhciByZWN0CisgIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsgLy8gSWYgaXQg
aXMgYSB0ZXh0IG5vZGUsIHVzZSBhIHJhbmdlIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy4K
KyAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCA0OyBpJDErKykgeyAvLyBSZXRyeSBhIG1heGlt
dW0gb2YgNCB0aW1lcyB3aGVuIG5vbnNlbnNlIHJlY3RhbmdsZXMgYXJlIHJldHVybmVkCisgICAg
ICB3aGlsZSAoc3RhcnQgJiYgaXNFeHRlbmRpbmdDaGFyKHByZXBhcmVkLmxpbmUudGV4dC5jaGFy
QXQocGxhY2UuY292ZXJTdGFydCArIHN0YXJ0KSkpIHsgLS1zdGFydCB9CisgICAgICB3aGlsZSAo
cGxhY2UuY292ZXJTdGFydCArIGVuZCA8IHBsYWNlLmNvdmVyRW5kICYmIGlzRXh0ZW5kaW5nQ2hh
cihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQpKSkgeyAr
K2VuZCB9CisgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkgJiYgc3RhcnQgPT0gMCAmJiBl
bmQgPT0gcGxhY2UuY292ZXJFbmQgLSBwbGFjZS5jb3ZlclN0YXJ0KQorICAgICAgICB7IHJlY3Qg
PSBub2RlLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfQorICAgICAgZWxzZQor
ICAgICAgICB7IHJlY3QgPSBnZXRVc2VmdWxSZWN0KHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdl
dENsaWVudFJlY3RzKCksIGJpYXMpIH0KKyAgICAgIGlmIChyZWN0LmxlZnQgfHwgcmVjdC5yaWdo
dCB8fCBzdGFydCA9PSAwKSB7IGJyZWFrIH0KKyAgICAgIGVuZCA9IHN0YXJ0CisgICAgICBzdGFy
dCA9IHN0YXJ0IC0gMQorICAgICAgY29sbGFwc2UgPSAicmlnaHQiCisgICAgfQorICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uIDwgMTEpIHsgcmVjdCA9IG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmco
Y20uZGlzcGxheS5tZWFzdXJlLCByZWN0KSB9CisgIH0gZWxzZSB7IC8vIElmIGl0IGlzIGEgd2lk
Z2V0LCBzaW1wbHkgZ2V0IHRoZSBib3ggZm9yIHRoZSB3aG9sZSB3aWRnZXQuCisgICAgaWYgKHN0
YXJ0ID4gMCkgeyBjb2xsYXBzZSA9IGJpYXMgPSAicmlnaHQiIH0KKyAgICB2YXIgcmVjdHMKKyAg
ICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRS
ZWN0cygpKS5sZW5ndGggPiAxKQorICAgICAgeyByZWN0ID0gcmVjdHNbYmlhcyA9PSAicmlnaHQi
ID8gcmVjdHMubGVuZ3RoIC0gMSA6IDBdIH0KKyAgICBlbHNlCisgICAgICB7IHJlY3QgPSBub2Rl
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIH0KKyAgfQorICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8
IDkgJiYgIXN0YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkgewor
ICAgIHZhciByU3BhbiA9IG5vZGUucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdCisgICAg
aWYgKHJTcGFuKQorICAgICAgeyByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bh
bi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiBy
U3Bhbi5ib3R0b219IH0KKyAgICBlbHNlCisgICAgICB7IHJlY3QgPSBudWxsUmVjdCB9CisgIH0K
KworICB2YXIgcnRvcCA9IHJlY3QudG9wIC0gcHJlcGFyZWQucmVjdC50b3AsIHJib3QgPSByZWN0
LmJvdHRvbSAtIHByZXBhcmVkLnJlY3QudG9wCisgIHZhciBtaWQgPSAocnRvcCArIHJib3QpIC8g
MgorICB2YXIgaGVpZ2h0cyA9IHByZXBhcmVkLnZpZXcubWVhc3VyZS5oZWlnaHRzCisgIHZhciBp
ID0gMAorICBmb3IgKDsgaSA8IGhlaWdodHMubGVuZ3RoIC0gMTsgaSsrKQorICAgIHsgaWYgKG1p
ZCA8IGhlaWdodHNbaV0pIHsgYnJlYWsgfSB9CisgIHZhciB0b3AgPSBpID8gaGVpZ2h0c1tpIC0g
MV0gOiAwLCBib3QgPSBoZWlnaHRzW2ldCisgIHZhciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNl
ID09ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVm
dCwKKyAgICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09ICJsZWZ0IiA/IHJlY3QubGVm
dCA6IHJlY3QucmlnaHQpIC0gcHJlcGFyZWQucmVjdC5sZWZ0LAorICAgICAgICAgICAgICAgIHRv
cDogdG9wLCBib3R0b206IGJvdH0KKyAgaWYgKCFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpIHsg
cmVzdWx0LmJvZ3VzID0gdHJ1ZSB9CisgIGlmICghY20ub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWln
aHRQZXJMaW5lKSB7IHJlc3VsdC5ydG9wID0gcnRvcDsgcmVzdWx0LnJib3R0b20gPSByYm90IH0K
KworICByZXR1cm4gcmVzdWx0Cit9CisKKy8vIFdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCBib3Vu
ZGluZyBjbGllbnQgcmVjdHMgb24gcmFuZ2VzIGJlaW5nCisvLyByZXR1cm5lZCBpbmNvcnJlY3Rs
eSB3aGVuIHpvb21lZCBvbiBJRTEwIGFuZCBiZWxvdy4KK2Z1bmN0aW9uIG1heWJlVXBkYXRlUmVj
dEZvclpvb21pbmcobWVhc3VyZSwgcmVjdCkgeworICBpZiAoIXdpbmRvdy5zY3JlZW4gfHwgc2Ny
ZWVuLmxvZ2ljYWxYRFBJID09IG51bGwgfHwKKyAgICAgIHNjcmVlbi5sb2dpY2FsWERQSSA9PSBz
Y3JlZW4uZGV2aWNlWERQSSB8fCAhaGFzQmFkWm9vbWVkUmVjdHMobWVhc3VyZSkpCisgICAgeyBy
ZXR1cm4gcmVjdCB9CisgIHZhciBzY2FsZVggPSBzY3JlZW4ubG9naWNhbFhEUEkgLyBzY3JlZW4u
ZGV2aWNlWERQSQorICB2YXIgc2NhbGVZID0gc2NyZWVuLmxvZ2ljYWxZRFBJIC8gc2NyZWVuLmRl
dmljZVlEUEkKKyAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgKiBzY2FsZVgsIHJpZ2h0OiByZWN0
LnJpZ2h0ICogc2NhbGVYLAorICAgICAgICAgIHRvcDogcmVjdC50b3AgKiBzY2FsZVksIGJvdHRv
bTogcmVjdC5ib3R0b20gKiBzY2FsZVl9Cit9CisKK2Z1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVt
ZW50Q2FjaGVGb3IobGluZVZpZXcpIHsKKyAgaWYgKGxpbmVWaWV3Lm1lYXN1cmUpIHsKKyAgICBs
aW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge30KKyAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMg
PSBudWxsCisgICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5l
Vmlldy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgeyBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tp
XSA9IHt9IH0gfQorICB9Cit9CisKK2Z1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUo
Y20pIHsKKyAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmUgPSBudWxsCisgIHJlbW92ZUNoaWxk
cmVuKGNtLmRpc3BsYXkubGluZU1lYXN1cmUpCisgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlz
cGxheS52aWV3Lmxlbmd0aDsgaSsrKQorICAgIHsgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZv
cihjbS5kaXNwbGF5LnZpZXdbaV0pIH0KK30KKworZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHsK
KyAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZShjbSkKKyAgY20uZGlzcGxheS5jYWNoZWRDaGFy
V2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBjbS5kaXNwbGF5LmNhY2hlZFBh
ZGRpbmdIID0gbnVsbAorICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGNtLmRpc3Bs
YXkubWF4TGluZUNoYW5nZWQgPSB0cnVlIH0KKyAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBu
dWxsCit9CisKK2Z1bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93LnBhZ2VYT2Zm
c2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xs
TGVmdCB9CitmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNl
dCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRv
cCB9CisKKy8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20g
bGluZS1sb2NhbAorLy8gY29vcmRpbmF0ZXMgaW50byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVt
LiBDb250ZXh0IG1heSBiZSBvbmUgb2YKKy8vICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURp
diksICJsb2NhbCIuL251bGwgKGVkaXRvciksICJ3aW5kb3ciLAorLy8gb3IgInBhZ2UiLgorZnVu
Y3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0LCBpbmNsdWRl
V2lkZ2V0cykgeworICBpZiAoIWluY2x1ZGVXaWRnZXRzICYmIGxpbmVPYmoud2lkZ2V0cykgeyBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgeyBpZiAobGlu
ZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CisgICAgdmFyIHNpemUgPSB3aWRnZXRIZWlnaHQobGlu
ZU9iai53aWRnZXRzW2ldKQorICAgIHJlY3QudG9wICs9IHNpemU7IHJlY3QuYm90dG9tICs9IHNp
emUKKyAgfSB9IH0KKyAgaWYgKGNvbnRleHQgPT0gImxpbmUiKSB7IHJldHVybiByZWN0IH0KKyAg
aWYgKCFjb250ZXh0KSB7IGNvbnRleHQgPSAibG9jYWwiIH0KKyAgdmFyIHlPZmYgPSBoZWlnaHRB
dExpbmUobGluZU9iaikKKyAgaWYgKGNvbnRleHQgPT0gImxvY2FsIikgeyB5T2ZmICs9IHBhZGRp
bmdUb3AoY20uZGlzcGxheSkgfQorICBlbHNlIHsgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZz
ZXQgfQorICBpZiAoY29udGV4dCA9PSAicGFnZSIgfHwgY29udGV4dCA9PSAid2luZG93Iikgewor
ICAgIHZhciBsT2ZmID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkKKyAgICB5T2ZmICs9IGxPZmYudG9wICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAwIDogcGFn
ZVNjcm9sbFkoKSkKKyAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArIChjb250ZXh0ID09ICJ3aW5k
b3ciID8gMCA6IHBhZ2VTY3JvbGxYKCkpCisgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3Qucmln
aHQgKz0geE9mZgorICB9CisgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmYK
KyAgcmV0dXJuIHJlY3QKK30KKworLy8gQ292ZXJ0cyBhIGJveCBmcm9tICJkaXYiIGNvb3JkcyB0
byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLgorLy8gQ29udGV4dCBtYXkgYmUgIndpbmRvdyIs
ICJwYWdlIiwgImRpdiIsIG9yICJsb2NhbCIuL251bGwuCitmdW5jdGlvbiBmcm9tQ29vcmRTeXN0
ZW0oY20sIGNvb3JkcywgY29udGV4dCkgeworICBpZiAoY29udGV4dCA9PSAiZGl2IikgeyByZXR1
cm4gY29vcmRzIH0KKyAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0gY29vcmRzLnRvcAor
ICAvLyBGaXJzdCBtb3ZlIGludG8gInBhZ2UiIGNvb3JkaW5hdGUgc3lzdGVtCisgIGlmIChjb250
ZXh0ID09ICJwYWdlIikgeworICAgIGxlZnQgLT0gcGFnZVNjcm9sbFgoKQorICAgIHRvcCAtPSBw
YWdlU2Nyb2xsWSgpCisgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAibG9jYWwiIHx8ICFjb250ZXh0
KSB7CisgICAgdmFyIGxvY2FsQm94ID0gY20uZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKQorICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdAorICAgIHRvcCArPSBsb2NhbEJveC50
b3AKKyAgfQorCisgIHZhciBsaW5lU3BhY2VCb3ggPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKQorICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gu
bGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfQorfQorCitmdW5jdGlvbiBjaGFyQ29v
cmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIGJpYXMpIHsKKyAgaWYgKCFsaW5lT2JqKSB7
IGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpIH0KKyAgcmV0dXJuIGludG9Db29y
ZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgYmlh
cyksIGNvbnRleHQpCit9CisKKy8vIFJldHVybnMgYSBib3ggZm9yIGEgZ2l2ZW4gY3Vyc29yIHBv
c2l0aW9uLCB3aGljaCBtYXkgaGF2ZSBhbgorLy8gJ290aGVyJyBwcm9wZXJ0eSBjb250YWluaW5n
IHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kYXJ5IGN1cnNvcgorLy8gb24gYSBiaWRpIGJvdW5k
YXJ5LgorZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHBy
ZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7CisgIGxpbmVPYmogPSBsaW5lT2JqIHx8IGdldExp
bmUoY20uZG9jLCBwb3MubGluZSkKKyAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHsgcHJlcGFyZWRN
ZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKSB9CisgIGZ1bmN0aW9u
IGdldChjaCwgcmlnaHQpIHsKKyAgICB2YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHBy
ZXBhcmVkTWVhc3VyZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0IiwgdmFySGVpZ2h0KQor
ICAgIGlmIChyaWdodCkgeyBtLmxlZnQgPSBtLnJpZ2h0OyB9IGVsc2UgeyBtLnJpZ2h0ID0gbS5s
ZWZ0IH0KKyAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtLCBjb250ZXh0
KQorICB9CisgIGZ1bmN0aW9uIGdldEJpZGkoY2gsIHBhcnRQb3MpIHsKKyAgICB2YXIgcGFydCA9
IG9yZGVyW3BhcnRQb3NdLCByaWdodCA9IHBhcnQubGV2ZWwgJSAyCisgICAgaWYgKGNoID09IGJp
ZGlMZWZ0KHBhcnQpICYmIHBhcnRQb3MgJiYgcGFydC5sZXZlbCA8IG9yZGVyW3BhcnRQb3MgLSAx
XS5sZXZlbCkgeworICAgICAgcGFydCA9IG9yZGVyWy0tcGFydFBvc10KKyAgICAgIGNoID0gYmlk
aVJpZ2h0KHBhcnQpIC0gKHBhcnQubGV2ZWwgJSAyID8gMCA6IDEpCisgICAgICByaWdodCA9IHRy
dWUKKyAgICB9IGVsc2UgaWYgKGNoID09IGJpZGlSaWdodChwYXJ0KSAmJiBwYXJ0UG9zIDwgb3Jk
ZXIubGVuZ3RoIC0gMSAmJiBwYXJ0LmxldmVsIDwgb3JkZXJbcGFydFBvcyArIDFdLmxldmVsKSB7
CisgICAgICBwYXJ0ID0gb3JkZXJbKytwYXJ0UG9zXQorICAgICAgY2ggPSBiaWRpTGVmdChwYXJ0
KSAtIHBhcnQubGV2ZWwgJSAyCisgICAgICByaWdodCA9IGZhbHNlCisgICAgfQorICAgIGlmIChy
aWdodCAmJiBjaCA9PSBwYXJ0LnRvICYmIGNoID4gcGFydC5mcm9tKSB7IHJldHVybiBnZXQoY2gg
LSAxKSB9CisgICAgcmV0dXJuIGdldChjaCwgcmlnaHQpCisgIH0KKyAgdmFyIG9yZGVyID0gZ2V0
T3JkZXIobGluZU9iaiksIGNoID0gcG9zLmNoCisgIGlmICghb3JkZXIpIHsgcmV0dXJuIGdldChj
aCkgfQorICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoKQorICB2YXIgdmFs
ID0gZ2V0QmlkaShjaCwgcGFydFBvcykKKyAgaWYgKGJpZGlPdGhlciAhPSBudWxsKSB7IHZhbC5v
dGhlciA9IGdldEJpZGkoY2gsIGJpZGlPdGhlcikgfQorICByZXR1cm4gdmFsCit9CisKKy8vIFVz
ZWQgdG8gY2hlYXBseSBlc3RpbWF0ZSB0aGUgY29vcmRpbmF0ZXMgZm9yIGEgcG9zaXRpb24uIFVz
ZWQgZm9yCisvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuCitmdW5jdGlvbiBlc3RpbWF0
ZUNvb3JkcyhjbSwgcG9zKSB7CisgIHZhciBsZWZ0ID0gMAorICBwb3MgPSBjbGlwUG9zKGNtLmRv
YywgcG9zKQorICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGxlZnQgPSBjaGFyV2lk
dGgoY20uZGlzcGxheSkgKiBwb3MuY2ggfQorICB2YXIgbGluZU9iaiA9IGdldExpbmUoY20uZG9j
LCBwb3MubGluZSkKKyAgdmFyIHRvcCA9IGhlaWdodEF0TGluZShsaW5lT2JqKSArIHBhZGRpbmdU
b3AoY20uZGlzcGxheSkKKyAgcmV0dXJuIHtsZWZ0OiBsZWZ0LCByaWdodDogbGVmdCwgdG9wOiB0
b3AsIGJvdHRvbTogdG9wICsgbGluZU9iai5oZWlnaHR9Cit9CisKKy8vIFBvc2l0aW9ucyByZXR1
cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZvcm1hdGlvbi4KKy8vIHhS
ZWwgaXMgdGhlIHJlbGF0aXZlIHggcG9zaXRpb24gb2YgdGhlIGlucHV0IGNvb3JkaW5hdGVzIGNv
bXBhcmVkCisvLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBj
b29yZGluYXRlcyBhcmUgdG8KKy8vIHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9u
LCBmb3IgZXhhbXBsZSkuIFdoZW4gb3V0c2lkZQorLy8gaXMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUg
Y29vcmRpbmF0ZXMgbGllIG91dHNpZGUgdGhlIGxpbmUncworLy8gdmVydGljYWwgcmFuZ2UuCitm
dW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgeworICB2YXIgcG9z
ID0gUG9zKGxpbmUsIGNoKQorICBwb3MueFJlbCA9IHhSZWwKKyAgaWYgKG91dHNpZGUpIHsgcG9z
Lm91dHNpZGUgPSB0cnVlIH0KKyAgcmV0dXJuIHBvcworfQorCisvLyBDb21wdXRlIHRoZSBjaGFy
YWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCisvLyBJbnB1
dCBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbCAoImRpdiIgY29vcmRpbmF0ZSBzeXN0ZW0pLgorZnVu
Y3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkgeworICB2YXIgZG9jID0gY20uZG9jCisgIHkgKz0g
Y20uZGlzcGxheS52aWV3T2Zmc2V0CisgIGlmICh5IDwgMCkgeyByZXR1cm4gUG9zV2l0aEluZm8o
ZG9jLmZpcnN0LCAwLCB0cnVlLCAtMSkgfQorICB2YXIgbGluZU4gPSBsaW5lQXRIZWlnaHQoZG9j
LCB5KSwgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMQorICBpZiAobGluZU4gPiBsYXN0
KQorICAgIHsgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0
TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlLCAxKSB9CisgIGlmICh4IDwgMCkgeyB4
ID0gMCB9CisKKyAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pCisgIGZvciAoOzsp
IHsKKyAgICB2YXIgZm91bmQgPSBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVOLCB4
LCB5KQorICAgIHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZU9iaikKKyAgICB2
YXIgbWVyZ2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5kKDAsIHRydWUpCisgICAgaWYgKG1l
cmdlZCAmJiAoZm91bmQuY2ggPiBtZXJnZWRQb3MuZnJvbS5jaCB8fCBmb3VuZC5jaCA9PSBtZXJn
ZWRQb3MuZnJvbS5jaCAmJiBmb3VuZC54UmVsID4gMCkpCisgICAgICB7IGxpbmVOID0gbGluZU5v
KGxpbmVPYmogPSBtZXJnZWRQb3MudG8ubGluZSkgfQorICAgIGVsc2UKKyAgICAgIHsgcmV0dXJu
IGZvdW5kIH0KKyAgfQorfQorCitmdW5jdGlvbiBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmos
IGxpbmVObywgeCwgeSkgeworICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGxpbmVP
YmopCisgIHZhciB3cm9uZ0xpbmUgPSBmYWxzZSwgYWRqdXN0ID0gMiAqIGNtLmRpc3BsYXkud3Jh
cHBlci5jbGllbnRXaWR0aAorICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVG
b3JMaW5lKGNtLCBsaW5lT2JqKQorCisgIGZ1bmN0aW9uIGdldFgoY2gpIHsKKyAgICB2YXIgc3Ag
PSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoKSwgImxpbmUiLCBsaW5lT2JqLCBwcmVw
YXJlZE1lYXN1cmUpCisgICAgd3JvbmdMaW5lID0gdHJ1ZQorICAgIGlmIChpbm5lck9mZiA+IHNw
LmJvdHRvbSkgeyByZXR1cm4gc3AubGVmdCAtIGFkanVzdCB9CisgICAgZWxzZSBpZiAoaW5uZXJP
ZmYgPCBzcC50b3ApIHsgcmV0dXJuIHNwLmxlZnQgKyBhZGp1c3QgfQorICAgIGVsc2UgeyB3cm9u
Z0xpbmUgPSBmYWxzZSB9CisgICAgcmV0dXJuIHNwLmxlZnQKKyAgfQorCisgIHZhciBiaWRpID0g
Z2V0T3JkZXIobGluZU9iaiksIGRpc3QgPSBsaW5lT2JqLnRleHQubGVuZ3RoCisgIHZhciBmcm9t
ID0gbGluZUxlZnQobGluZU9iaiksIHRvID0gbGluZVJpZ2h0KGxpbmVPYmopCisgIHZhciBmcm9t
WCA9IGdldFgoZnJvbSksIGZyb21PdXRzaWRlID0gd3JvbmdMaW5lLCB0b1ggPSBnZXRYKHRvKSwg
dG9PdXRzaWRlID0gd3JvbmdMaW5lCisKKyAgaWYgKHggPiB0b1gpIHsgcmV0dXJuIFBvc1dpdGhJ
bmZvKGxpbmVObywgdG8sIHRvT3V0c2lkZSwgMSkgfQorICAvLyBEbyBhIGJpbmFyeSBzZWFyY2gg
YmV0d2VlbiB0aGVzZSBib3VuZHMuCisgIGZvciAoOzspIHsKKyAgICBpZiAoYmlkaSA/IHRvID09
IGZyb20gfHwgdG8gPT0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIGZyb20sIDEpIDogdG8gLSBmcm9t
IDw9IDEpIHsKKyAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVggPD0gdG9YIC0g
eCA/IGZyb20gOiB0bworICAgICAgdmFyIG91dHNpZGUgPSBjaCA9PSBmcm9tID8gZnJvbU91dHNp
ZGUgOiB0b091dHNpZGUKKyAgICAgIHZhciB4RGlmZiA9IHggLSAoY2ggPT0gZnJvbSA/IGZyb21Y
IDogdG9YKQorICAgICAgLy8gVGhpcyBpcyBhIGtsdWRnZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgdGhlIGNvb3JkaW5hdGVzCisgICAgICAvLyBhcmUgYWZ0ZXIgYSBsaW5lLXdyYXBwZWQgbGlu
ZS4gV2Ugc2hvdWxkIHJlcGxhY2UgaXQgd2l0aCBhCisgICAgICAvLyBtb3JlIGdlbmVyYWwgaGFu
ZGxpbmcgb2YgY3Vyc29yIHBvc2l0aW9ucyBhcm91bmQgbGluZQorICAgICAgLy8gYnJlYWtzLiAo
SXNzdWUgIzQwNzgpCisgICAgICBpZiAodG9PdXRzaWRlICYmICFiaWRpICYmICEvXHMvLnRlc3Qo
bGluZU9iai50ZXh0LmNoYXJBdChjaCkpICYmIHhEaWZmID4gMCAmJgorICAgICAgICAgIGNoIDwg
bGluZU9iai50ZXh0Lmxlbmd0aCAmJiBwcmVwYXJlZE1lYXN1cmUudmlldy5tZWFzdXJlLmhlaWdo
dHMubGVuZ3RoID4gMSkgeworICAgICAgICB2YXIgY2hhclNpemUgPSBtZWFzdXJlQ2hhclByZXBh
cmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoLCAicmlnaHQiKQorICAgICAgICBpZiAoaW5uZXJP
ZmYgPD0gY2hhclNpemUuYm90dG9tICYmIGlubmVyT2ZmID49IGNoYXJTaXplLnRvcCAmJiBNYXRo
LmFicyh4IC0gY2hhclNpemUucmlnaHQpIDwgeERpZmYpIHsKKyAgICAgICAgICBvdXRzaWRlID0g
ZmFsc2UKKyAgICAgICAgICBjaCsrCisgICAgICAgICAgeERpZmYgPSB4IC0gY2hhclNpemUucmln
aHQKKyAgICAgICAgfQogICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIHRo
ZSBndXR0ZXJzIG9wdGlvbnMgY29udGFpbnMgdGhlIGVsZW1lbnQKLSAgLy8gIkNvZGVNaXJyb3It
bGluZW51bWJlcnMiIHdoZW4gdGhlIGxpbmVOdW1iZXJzIG9wdGlvbiBpcyB0cnVlLgotICBmdW5j
dGlvbiBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucykgewotICAgIHZhciBmb3VuZCA9
IGluZGV4T2Yob3B0aW9ucy5ndXR0ZXJzLCAiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOwotICAg
IGlmIChmb3VuZCA9PSAtMSAmJiBvcHRpb25zLmxpbmVOdW1iZXJzKSB7Ci0gICAgICBvcHRpb25z
Lmd1dHRlcnMgPSBvcHRpb25zLmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVy
cyJdKTsKLSAgICB9IGVsc2UgaWYgKGZvdW5kID4gLTEgJiYgIW9wdGlvbnMubGluZU51bWJlcnMp
IHsKLSAgICAgIG9wdGlvbnMuZ3V0dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5zbGljZSgwKTsKLSAg
ICAgIG9wdGlvbnMuZ3V0dGVycy5zcGxpY2UoZm91bmQsIDEpOwotICAgIH0KLSAgfQotCi0gIC8v
IFNDUk9MTEJBUlMKLQotICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRo
ZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZQotICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9t
ZWFzdXJlIHJvdW5kdHJpcHMuCi0gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7
Ci0gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRo
OwotICAgIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQo
Y20uZGlzcGxheSkpOwotICAgIHJldHVybiB7Ci0gICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0LAotICAgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdo
dCwKLSAgICAgIHNjcm9sbFdpZHRoOiBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0
aDogZC5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNs
aWVudFdpZHRoLAotICAgICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRl
clcgOiAwLAotICAgICAgZG9jSGVpZ2h0OiBkb2NILAotICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NI
ICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LAotICAgICAgbmF0aXZlQmFyV2lkdGg6IGQu
bmF0aXZlQmFyV2lkdGgsCi0gICAgICBndXR0ZXJXaWR0aDogZ3V0dGVyVwotICAgIH07Ci0gIH0K
LQotICBmdW5jdGlvbiBOYXRpdmVTY3JvbGxiYXJzKHBsYWNlLCBzY3JvbGwsIGNtKSB7Ci0gICAg
dGhpcy5jbSA9IGNtOwotICAgIHZhciB2ZXJ0ID0gdGhpcy52ZXJ0ID0gZWx0KCJkaXYiLCBbZWx0
KCJkaXYiLCBudWxsLCBudWxsLCAibWluLXdpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZzY3Jv
bGxiYXIiKTsKLSAgICB2YXIgaG9yaXogPSB0aGlzLmhvcml6ID0gZWx0KCJkaXYiLCBbZWx0KCJk
aXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sICJDb2Rl
TWlycm9yLWhzY3JvbGxiYXIiKTsKLSAgICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopOwotCi0g
ICAgb24odmVydCwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHZlcnQuY2xpZW50
SGVpZ2h0KSBzY3JvbGwodmVydC5zY3JvbGxUb3AsICJ2ZXJ0aWNhbCIpOwotICAgIH0pOwotICAg
IG9uKGhvcml6LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoaG9yaXouY2xpZW50
V2lkdGgpIHNjcm9sbChob3Jpei5zY3JvbGxMZWZ0LCAiaG9yaXpvbnRhbCIpOwotICAgIH0pOwot
Ci0gICAgdGhpcy5jaGVja2VkT3ZlcmxheSA9IGZhbHNlOwotICAgIC8vIE5lZWQgdG8gc2V0IGEg
bWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBz
ZXQgaXQgb24gSUU4KS4KLSAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHRoaXMuaG9yaXou
c3R5bGUubWluSGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLm1pbldpZHRoID0gIjE4cHgiOwotICB9
Ci0KLSAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUgPSBjb3B5T2JqKHsKLSAgICB1cGRhdGU6
IGZ1bmN0aW9uKG1lYXN1cmUpIHsKLSAgICAgIHZhciBuZWVkc0ggPSBtZWFzdXJlLnNjcm9sbFdp
ZHRoID4gbWVhc3VyZS5jbGllbnRXaWR0aCArIDE7Ci0gICAgICB2YXIgbmVlZHNWID0gbWVhc3Vy
ZS5zY3JvbGxIZWlnaHQgPiBtZWFzdXJlLmNsaWVudEhlaWdodCArIDE7Ci0gICAgICB2YXIgc1dp
ZHRoID0gbWVhc3VyZS5uYXRpdmVCYXJXaWR0aDsKLQotICAgICAgaWYgKG5lZWRzVikgewotICAg
ICAgICB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgICAgIHRoaXMudmVy
dC5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzV2lkdGggKyAicHgiIDogIjAiOwotICAgICAgICB2
YXIgdG90YWxIZWlnaHQgPSBtZWFzdXJlLnZpZXdIZWlnaHQgLSAobmVlZHNIID8gc1dpZHRoIDog
MCk7Ci0gICAgICAgIC8vIEEgYnVnIGluIElFOCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBu
ZWdhdGl2ZSwgc28gZ3VhcmQgaXQuCi0gICAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxl
LmhlaWdodCA9Ci0gICAgICAgICAgTWF0aC5tYXgoMCwgbWVhc3VyZS5zY3JvbGxIZWlnaHQgLSBt
ZWFzdXJlLmNsaWVudEhlaWdodCArIHRvdGFsSGVpZ2h0KSArICJweCI7CisgICAgICB3aGlsZSAo
aXNFeHRlbmRpbmdDaGFyKGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgeyArK2NoIH0KKyAgICAg
IHZhciBwb3MgPSBQb3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBvdXRzaWRlLCB4RGlmZiA8IC0xID8g
LTEgOiB4RGlmZiA+IDEgPyAxIDogMCkKKyAgICAgIHJldHVybiBwb3MKKyAgICB9CisgICAgdmFy
IHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUgPSBmcm9tICsgc3RlcAorICAgIGlm
IChiaWRpKSB7CisgICAgICBtaWRkbGUgPSBmcm9tCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHN0ZXA7ICsraSkgeyBtaWRkbGUgPSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgbWlkZGxlLCAxKSB9
CisgICAgfQorICAgIHZhciBtaWRkbGVYID0gZ2V0WChtaWRkbGUpCisgICAgaWYgKG1pZGRsZVgg
PiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7IGlmICh0b091dHNpZGUgPSB3cm9uZ0xp
bmUpIHsgdG9YICs9IDEwMDA7IH0gZGlzdCA9IHN0ZXB9CisgICAgZWxzZSB7ZnJvbSA9IG1pZGRs
ZTsgZnJvbVggPSBtaWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsgZGlzdCAtPSBzdGVw
fQorICB9Cit9CisKK3ZhciBtZWFzdXJlVGV4dAorLy8gQ29tcHV0ZSB0aGUgZGVmYXVsdCB0ZXh0
IGhlaWdodC4KK2Z1bmN0aW9uIHRleHRIZWlnaHQoZGlzcGxheSkgeworICBpZiAoZGlzcGxheS5j
YWNoZWRUZXh0SGVpZ2h0ICE9IG51bGwpIHsgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdo
dCB9CisgIGlmIChtZWFzdXJlVGV4dCA9PSBudWxsKSB7CisgICAgbWVhc3VyZVRleHQgPSBlbHQo
InByZSIpCisgICAgLy8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMgdGhh
dCBjb21wdXRlCisgICAgLy8gZnJhY3Rpb25hbCBoZWlnaHRzLgorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgNDk7ICsraSkgeworICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIngiKSkKKyAgICAgIG1lYXN1cmVUZXh0LmFwcGVuZENoaWxkKGVsdCgi
YnIiKSkKKyAgICB9CisgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIngiKSkKKyAgfQorICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1
cmUsIG1lYXN1cmVUZXh0KQorICB2YXIgaGVpZ2h0ID0gbWVhc3VyZVRleHQub2Zmc2V0SGVpZ2h0
IC8gNTAKKyAgaWYgKGhlaWdodCA+IDMpIHsgZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gaGVp
Z2h0IH0KKyAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKQorICByZXR1cm4gaGVpZ2h0
IHx8IDEKK30KKworLy8gQ29tcHV0ZSB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgd2lkdGguCitmdW5j
dGlvbiBjaGFyV2lkdGgoZGlzcGxheSkgeworICBpZiAoZGlzcGxheS5jYWNoZWRDaGFyV2lkdGgg
IT0gbnVsbCkgeyByZXR1cm4gZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggfQorICB2YXIgYW5jaG9y
ID0gZWx0KCJzcGFuIiwgInh4eHh4eHh4eHgiKQorICB2YXIgcHJlID0gZWx0KCJwcmUiLCBbYW5j
aG9yXSkKKyAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpCisgIHZh
ciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0KSAvIDEwCisgIGlmICh3aWR0aCA+IDIpIHsgZGlzcGxheS5jYWNoZWRD
aGFyV2lkdGggPSB3aWR0aCB9CisgIHJldHVybiB3aWR0aCB8fCAxMAorfQorCisvLyBEbyBhIGJ1
bGstcmVhZCBvZiB0aGUgRE9NIHBvc2l0aW9ucyBhbmQgc2l6ZXMgbmVlZGVkIHRvIGRyYXcgdGhl
CisvLyB2aWV3LCBzbyB0aGF0IHdlIGRvbid0IGludGVybGVhdmUgcmVhZGluZyBhbmQgd3JpdGlu
ZyB0byB0aGUgRE9NLgorZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgeworICB2YXIgZCA9IGNt
LmRpc3BsYXksIGxlZnQgPSB7fSwgd2lkdGggPSB7fQorICB2YXIgZ3V0dGVyTGVmdCA9IGQuZ3V0
dGVycy5jbGllbnRMZWZ0CisgIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9
IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKKyAgICBsZWZ0W2NtLm9wdGlvbnMuZ3V0
dGVyc1tpXV0gPSBuLm9mZnNldExlZnQgKyBuLmNsaWVudExlZnQgKyBndXR0ZXJMZWZ0CisgICAg
d2lkdGhbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4uY2xpZW50V2lkdGgKKyAgfQorICByZXR1
cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwKKyAgICAgICAgICBndXR0ZXJU
b3RhbFdpZHRoOiBkLmd1dHRlcnMub2Zmc2V0V2lkdGgsCisgICAgICAgICAgZ3V0dGVyTGVmdDog
bGVmdCwKKyAgICAgICAgICBndXR0ZXJXaWR0aDogd2lkdGgsCisgICAgICAgICAgd3JhcHBlcldp
ZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGh9Cit9CisKKy8vIENvbXB1dGVzIGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsTGVmdCArIGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwKKy8vIGJ1dCB1
c2luZyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgdG8gZ2V0IGEgc3ViLXBpeGVsLWFjY3VyYXRlCisv
LyByZXN1bHQuCitmdW5jdGlvbiBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSB7CisgIHJl
dHVybiBkaXNwbGF5LnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkaXNw
bGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQKK30KKworLy8gUmV0dXJucyBh
IGZ1bmN0aW9uIHRoYXQgZXN0aW1hdGVzIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCB0byB1c2UgYXMK
Ky8vIGZpcnN0IGFwcHJveGltYXRpb24gdW50aWwgdGhlIGxpbmUgYmVjb21lcyB2aXNpYmxlIChh
bmQgaXMgdGh1cworLy8gcHJvcGVybHkgbWVhc3VyYWJsZSkuCitmdW5jdGlvbiBlc3RpbWF0ZUhl
aWdodChjbSkgeworICB2YXIgdGggPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCB3cmFwcGluZyA9
IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nCisgIHZhciBwZXJMaW5lID0gd3JhcHBpbmcgJiYgTWF0
aC5tYXgoNSwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aChjbS5k
aXNwbGF5KSAtIDMpCisgIHJldHVybiBmdW5jdGlvbiAobGluZSkgeworICAgIGlmIChsaW5lSXNI
aWRkZW4oY20uZG9jLCBsaW5lKSkgeyByZXR1cm4gMCB9CisKKyAgICB2YXIgd2lkZ2V0c0hlaWdo
dCA9IDAKKyAgICBpZiAobGluZS53aWRnZXRzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53
aWRnZXRzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAobGluZS53aWRnZXRzW2ldLmhlaWdodCkg
eyB3aWRnZXRzSGVpZ2h0ICs9IGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQgfQorICAgIH0gfQorCisg
ICAgaWYgKHdyYXBwaW5nKQorICAgICAgeyByZXR1cm4gd2lkZ2V0c0hlaWdodCArIChNYXRoLmNl
aWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGggfQorICAgIGVsc2UKKyAg
ICAgIHsgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aCB9CisgIH0KK30KKworZnVuY3Rpb24gZXN0
aW1hdGVMaW5lSGVpZ2h0cyhjbSkgeworICB2YXIgZG9jID0gY20uZG9jLCBlc3QgPSBlc3RpbWF0
ZUhlaWdodChjbSkKKyAgZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHsKKyAgICB2YXIgZXN0SGVp
Z2h0ID0gZXN0KGxpbmUpCisgICAgaWYgKGVzdEhlaWdodCAhPSBsaW5lLmhlaWdodCkgeyB1cGRh
dGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCkgfQorICB9KQorfQorCisvLyBHaXZlbiBhIG1v
dXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsCisv
LyBpcyBmYWxzZSwgaXQgY2hlY2tzIHdoZXRoZXIgYSBndXR0ZXIgb3Igc2Nyb2xsYmFyIHdhcyBj
bGlja2VkLAorLy8gYW5kIHJldHVybnMgbnVsbCBpZiBpdCB3YXMuIGZvclJlY3QgaXMgdXNlZCBi
eSByZWN0YW5ndWxhcgorLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hh
cmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yCisvLyBjb29yZGluYXRlcyBiZXlvbmQgdGhlIHJpZ2h0
IG9mIHRoZSB0ZXh0LgorZnVuY3Rpb24gcG9zRnJvbU1vdXNlKGNtLCBlLCBsaWJlcmFsLCBmb3JS
ZWN0KSB7CisgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheQorICBpZiAoIWxpYmVyYWwgJiYgZV90
YXJnZXQoZSkuZ2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIpID09ICJ0cnVlIikgeyByZXR1
cm4gbnVsbCB9CisKKyAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkKKyAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hl
biBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LgorICB0cnkgeyB4ID0gZS5jbGllbnRY
IC0gc3BhY2UubGVmdDsgeSA9IGUuY2xpZW50WSAtIHNwYWNlLnRvcCB9CisgIGNhdGNoIChlKSB7
IHJldHVybiBudWxsIH0KKyAgdmFyIGNvb3JkcyA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpLCBsaW5l
CisgIGlmIChmb3JSZWN0ICYmIGNvb3Jkcy54UmVsID09IDEgJiYgKGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHsKKyAgICB2YXIg
Y29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25zLnRhYlNp
emUpIC0gbGluZS5sZW5ndGgKKyAgICBjb29yZHMgPSBQb3MoY29vcmRzLmxpbmUsIE1hdGgubWF4
KDAsIE1hdGgucm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNwbGF5KS5sZWZ0KSAvIGNoYXJXaWR0
aChjbS5kaXNwbGF5KSkgLSBjb2xEaWZmKSkKKyAgfQorICByZXR1cm4gY29vcmRzCit9CisKKy8v
IEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gbGluZS4gUmV0
dXJuIG51bGwKKy8vIHdoZW4gdGhlIGxpbmUgaXNuJ3QgdmlzaWJsZS4KK2Z1bmN0aW9uIGZpbmRW
aWV3SW5kZXgoY20sIG4pIHsKKyAgaWYgKG4gPj0gY20uZGlzcGxheS52aWV3VG8pIHsgcmV0dXJu
IG51bGwgfQorICBuIC09IGNtLmRpc3BsYXkudmlld0Zyb20KKyAgaWYgKG4gPCAwKSB7IHJldHVy
biBudWxsIH0KKyAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CisgICAgbiAtPSB2aWV3W2ldLnNpemUKKyAgICBpZiAo
biA8IDApIHsgcmV0dXJuIGkgfQorICB9Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihj
bSkgeworICBjbS5kaXNwbGF5LmlucHV0LnNob3dTZWxlY3Rpb24oY20uZGlzcGxheS5pbnB1dC5w
cmVwYXJlU2VsZWN0aW9uKCkpCit9CisKK2Z1bmN0aW9uIHByZXBhcmVTZWxlY3Rpb24oY20sIHBy
aW1hcnkpIHsKKyAgdmFyIGRvYyA9IGNtLmRvYywgcmVzdWx0ID0ge30KKyAgdmFyIGN1ckZyYWdt
ZW50ID0gcmVzdWx0LmN1cnNvcnMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkK
KyAgdmFyIHNlbEZyYWdtZW50ID0gcmVzdWx0LnNlbGVjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKQorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICBpZiAocHJpbWFyeSA9PT0gZmFsc2UgJiYgaSA9PSBkb2Muc2Vs
LnByaW1JbmRleCkgeyBjb250aW51ZSB9CisgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNb
aV0KKyAgICBpZiAocmFuZ2UuZnJvbSgpLmxpbmUgPj0gY20uZGlzcGxheS52aWV3VG8gfHwgcmFu
Z2UudG8oKS5saW5lIDwgY20uZGlzcGxheS52aWV3RnJvbSkgeyBjb250aW51ZSB9CisgICAgdmFy
IGNvbGxhcHNlZCA9IHJhbmdlLmVtcHR5KCkKKyAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlv
bnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCisgICAgICB7IGRyYXdTZWxlY3Rpb25DdXJzb3Io
Y20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KSB9CisgICAgaWYgKCFjb2xsYXBzZWQpCisgICAg
ICB7IGRyYXdTZWxlY3Rpb25SYW5nZShjbSwgcmFuZ2UsIHNlbEZyYWdtZW50KSB9CisgIH0KKyAg
cmV0dXJuIHJlc3VsdAorfQorCisvLyBEcmF3cyBhIGN1cnNvciBmb3IgdGhlIGdpdmVuIHJhbmdl
CitmdW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBoZWFkLCBvdXRwdXQpIHsKKyAgdmFy
IHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgImRpdiIsIG51bGwsIG51bGwsICFjbS5vcHRp
b25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpCisKKyAgdmFyIGN1cnNvciA9IG91dHB1dC5h
cHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IiKSkKKyAg
Y3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCIKKyAgY3Vyc29yLnN0eWxlLnRvcCA9
IHBvcy50b3AgKyAicHgiCisgIGN1cnNvci5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBwb3Mu
Ym90dG9tIC0gcG9zLnRvcCkgKiBjbS5vcHRpb25zLmN1cnNvckhlaWdodCArICJweCIKKworICBp
ZiAocG9zLm90aGVyKSB7CisgICAgLy8gU2Vjb25kYXJ5IGN1cnNvciwgc2hvd24gd2hlbiBvbiBh
ICdqdW1wJyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0CisgICAgdmFyIG90aGVyQ3Vyc29yID0gb3V0
cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciBD
b2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpKQorICAgIG90aGVyQ3Vyc29yLnN0eWxlLmRpc3Bs
YXkgPSAiIgorICAgIG90aGVyQ3Vyc29yLnN0eWxlLmxlZnQgPSBwb3Mub3RoZXIubGVmdCArICJw
eCIKKyAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgInB4IgorICAg
IG90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mub3RoZXIuYm90dG9tIC0gcG9zLm90aGVy
LnRvcCkgKiAuODUgKyAicHgiCisgIH0KK30KKworLy8gRHJhd3MgdGhlIGdpdmVuIHJhbmdlIGFz
IGEgaGlnaGxpZ2h0ZWQgc2VsZWN0aW9uCitmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20s
IHJhbmdlLCBvdXRwdXQpIHsKKyAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5k
b2MKKyAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCisg
IHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFkZGluZy5s
ZWZ0CisgIHZhciByaWdodFNpZGUgPSBNYXRoLm1heChkaXNwbGF5LnNpemVyV2lkdGgsIGRpc3Bs
YXlXaWR0aChjbSkgLSBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQpIC0gcGFkZGluZy5yaWdodAor
CisgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHdpZHRoLCBib3R0b20pIHsKKyAgICBpZiAodG9w
IDwgMCkgeyB0b3AgPSAwIH0KKyAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCkKKyAgICBib3R0b20g
PSBNYXRoLnJvdW5kKGJvdHRvbSkKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoImRpdiIs
IG51bGwsICJDb2RlTWlycm9yLXNlbGVjdGVkIiwgKCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6
ICIgKyBsZWZ0ICsgInB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICIgKyB0
b3AgKyAicHg7IHdpZHRoOiAiICsgKHdpZHRoID09IG51bGwgPyByaWdodFNpZGUgLSBsZWZ0IDog
d2lkdGgpICsgInB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIgKyAo
Ym90dG9tIC0gdG9wKSArICJweCIpKSkKKyAgfQorCisgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxp
bmUsIGZyb21BcmcsIHRvQXJnKSB7CisgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGlu
ZSkKKyAgICB2YXIgbGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGgKKyAgICB2YXIgc3RhcnQs
IGVuZAorICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCwgYmlhcykgeworICAgICAgcmV0dXJuIGNoYXJD
b29yZHMoY20sIFBvcyhsaW5lLCBjaCksICJkaXYiLCBsaW5lT2JqLCBiaWFzKQorICAgIH0KKwor
ICAgIGl0ZXJhdGVCaWRpU2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwgMCwg
dG9BcmcgPT0gbnVsbCA/IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24gKGZyb20sIHRvLCBkaXIp
IHsKKyAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGZyb20sICJsZWZ0IiksIHJpZ2h0UG9zLCBs
ZWZ0LCByaWdodAorICAgICAgaWYgKGZyb20gPT0gdG8pIHsKKyAgICAgICAgcmlnaHRQb3MgPSBs
ZWZ0UG9zCisgICAgICAgIGxlZnQgPSByaWdodCA9IGxlZnRQb3MubGVmdAogICAgICAgfSBlbHNl
IHsKLSAgICAgICAgdGhpcy52ZXJ0LnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgdGhpcy52
ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gIjAiOworICAgICAgICByaWdodFBvcyA9IGNv
b3Jkcyh0byAtIDEsICJyaWdodCIpCisgICAgICAgIGlmIChkaXIgPT0gInJ0bCIpIHsgdmFyIHRt
cCA9IGxlZnRQb3M7IGxlZnRQb3MgPSByaWdodFBvczsgcmlnaHRQb3MgPSB0bXAgfQorICAgICAg
ICBsZWZ0ID0gbGVmdFBvcy5sZWZ0CisgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQKICAg
ICAgIH0KKyAgICAgIGlmIChmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSB7IGxlZnQgPSBs
ZWZ0U2lkZSB9CisgICAgICBpZiAocmlnaHRQb3MudG9wIC0gbGVmdFBvcy50b3AgPiAzKSB7IC8v
IERpZmZlcmVudCBsaW5lcywgZHJhdyB0b3AgcGFydAorICAgICAgICBhZGQobGVmdCwgbGVmdFBv
cy50b3AsIG51bGwsIGxlZnRQb3MuYm90dG9tKQorICAgICAgICBsZWZ0ID0gbGVmdFNpZGUKKyAg
ICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSB7IGFkZChsZWZ0LCBsZWZ0
UG9zLmJvdHRvbSwgbnVsbCwgcmlnaHRQb3MudG9wKSB9CisgICAgICB9CisgICAgICBpZiAodG9B
cmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuKSB7IHJpZ2h0ID0gcmlnaHRTaWRlIH0KKyAgICAg
IGlmICghc3RhcnQgfHwgbGVmdFBvcy50b3AgPCBzdGFydC50b3AgfHwgbGVmdFBvcy50b3AgPT0g
c3RhcnQudG9wICYmIGxlZnRQb3MubGVmdCA8IHN0YXJ0LmxlZnQpCisgICAgICAgIHsgc3RhcnQg
PSBsZWZ0UG9zIH0KKyAgICAgIGlmICghZW5kIHx8IHJpZ2h0UG9zLmJvdHRvbSA+IGVuZC5ib3R0
b20gfHwgcmlnaHRQb3MuYm90dG9tID09IGVuZC5ib3R0b20gJiYgcmlnaHRQb3MucmlnaHQgPiBl
bmQucmlnaHQpCisgICAgICAgIHsgZW5kID0gcmlnaHRQb3MgfQorICAgICAgaWYgKGxlZnQgPCBs
ZWZ0U2lkZSArIDEpIHsgbGVmdCA9IGxlZnRTaWRlIH0KKyAgICAgIGFkZChsZWZ0LCByaWdodFBv
cy50b3AsIHJpZ2h0IC0gbGVmdCwgcmlnaHRQb3MuYm90dG9tKQorICAgIH0pCisgICAgcmV0dXJu
IHtzdGFydDogc3RhcnQsIGVuZDogZW5kfQorICB9CiAKLSAgICAgIGlmIChuZWVkc0gpIHsKLSAg
ICAgICAgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgICAgdGhpcy5o
b3Jpei5zdHlsZS5yaWdodCA9IG5lZWRzViA/IHNXaWR0aCArICJweCIgOiAiMCI7Ci0gICAgICAg
IHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IG1lYXN1cmUuYmFyTGVmdCArICJweCI7Ci0gICAgICAg
IHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAo
bmVlZHNWID8gc1dpZHRoIDogMCk7Ci0gICAgICAgIHRoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHls
ZS53aWR0aCA9Ci0gICAgICAgICAgKG1lYXN1cmUuc2Nyb2xsV2lkdGggLSBtZWFzdXJlLmNsaWVu
dFdpZHRoICsgdG90YWxXaWR0aCkgKyAicHgiOworICB2YXIgc0Zyb20gPSByYW5nZS5mcm9tKCks
IHNUbyA9IHJhbmdlLnRvKCkKKyAgaWYgKHNGcm9tLmxpbmUgPT0gc1RvLmxpbmUpIHsKKyAgICBk
cmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwgc1RvLmNoKQorICB9IGVsc2UgeworICAg
IHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGlu
ZShkb2MsIHNUby5saW5lKQorICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxp
bmUpID09IHZpc3VhbExpbmUodG9MaW5lKQorICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUo
c0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGgg
KyAxIDogbnVsbCkuZW5kCisgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGlu
ZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydAorICAgIGlmIChzaW5nbGVW
TGluZSkgeworICAgICAgaWYgKGxlZnRFbmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7Cisg
ICAgICAgIGFkZChsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLnRvcCwgbnVsbCwgbGVmdEVuZC5ib3R0
b20pCisgICAgICAgIGFkZChsZWZ0U2lkZSwgcmlnaHRTdGFydC50b3AsIHJpZ2h0U3RhcnQubGVm
dCwgcmlnaHRTdGFydC5ib3R0b20pCiAgICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLmhvcml6
LnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxl
LndpZHRoID0gIjAiOworICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJp
Z2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKQogICAgICAgfQor
ICAgIH0KKyAgICBpZiAobGVmdEVuZC5ib3R0b20gPCByaWdodFN0YXJ0LnRvcCkKKyAgICAgIHsg
YWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApIH0KKyAg
fQogCi0gICAgICBpZiAoIXRoaXMuY2hlY2tlZE92ZXJsYXkgJiYgbWVhc3VyZS5jbGllbnRIZWln
aHQgPiAwKSB7Ci0gICAgICAgIGlmIChzV2lkdGggPT0gMCkgdGhpcy5vdmVybGF5SGFjaygpOwot
ICAgICAgICB0aGlzLmNoZWNrZWRPdmVybGF5ID0gdHJ1ZTsKKyAgb3V0cHV0LmFwcGVuZENoaWxk
KGZyYWdtZW50KQorfQorCisvLyBDdXJzb3ItYmxpbmtpbmcKK2Z1bmN0aW9uIHJlc3RhcnRCbGlu
ayhjbSkgeworICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgcmV0dXJuIH0KKyAgdmFyIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5CisgIGNsZWFySW50ZXJ2YWwoZGlzcGxheS5ibGlua2VyKQorICB2YXIg
b24gPSB0cnVlCisgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiIgorICBp
ZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPiAwKQorICAgIHsgZGlzcGxheS5ibGlua2Vy
ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5jdXJzb3JEaXYuc3R5
bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOyB9LAorICAgICAgY20u
b3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpIH0KKyAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JC
bGlua1JhdGUgPCAwKQorICAgIHsgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iIH0KK30KKworZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsKKyAgaWYgKCFjbS5z
dGF0ZS5mb2N1c2VkKSB7IGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgb25Gb2N1cyhjbSkgfQor
fQorCitmdW5jdGlvbiBkZWxheUJsdXJFdmVudChjbSkgeworICBjbS5zdGF0ZS5kZWxheWluZ0Js
dXJFdmVudCA9IHRydWUKKyAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5k
ZWxheWluZ0JsdXJFdmVudCkgeworICAgIGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50ID0gZmFs
c2UKKyAgICBvbkJsdXIoY20pCisgIH0gfSwgMTAwKQorfQorCitmdW5jdGlvbiBvbkZvY3VzKGNt
LCBlKSB7CisgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxh
eWluZ0JsdXJFdmVudCA9IGZhbHNlIH0KKworICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSAi
bm9jdXJzb3IiKSB7IHJldHVybiB9CisgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeworICAgIHNp
Z25hbChjbSwgImZvY3VzIiwgY20sIGUpCisgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWUKKyAg
ICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3VzZWQiKQorICAg
IC8vIFRoaXMgdGVzdCBwcmV2ZW50cyB0aGlzIGZyb20gZmlyaW5nIHdoZW4gYSBjb250ZXh0Cisg
ICAgLy8gbWVudSBpcyBjbG9zZWQgKHNpbmNlIHRoZSBpbnB1dCByZXNldCB3b3VsZCBraWxsIHRo
ZQorICAgIC8vIHNlbGVjdC1hbGwgZGV0ZWN0aW9uIGhhY2spCisgICAgaWYgKCFjbS5jdXJPcCAm
JiBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ICE9IGNtLmRvYy5zZWwpIHsKKyAgICAgIGNt
LmRpc3BsYXkuaW5wdXQucmVzZXQoKQorICAgICAgaWYgKHdlYmtpdCkgeyBzZXRUaW1lb3V0KGZ1
bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKSB9
IC8vIElzc3VlICMxNzMwCisgICAgfQorICAgIGNtLmRpc3BsYXkuaW5wdXQucmVjZWl2ZWRGb2N1
cygpCisgIH0KKyAgcmVzdGFydEJsaW5rKGNtKQorfQorZnVuY3Rpb24gb25CbHVyKGNtLCBlKSB7
CisgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyByZXR1cm4gfQorCisgIGlmIChj
bS5zdGF0ZS5mb2N1c2VkKSB7CisgICAgc2lnbmFsKGNtLCAiYmx1ciIsIGNtLCBlKQorICAgIGNt
LnN0YXRlLmZvY3VzZWQgPSBmYWxzZQorICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAi
Q29kZU1pcnJvci1mb2N1c2VkIikKKyAgfQorICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxp
bmtlcikKKyAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmICghY20uc3RhdGUuZm9jdXNlZCkg
eyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2UgfSB9LCAxNTApCit9CisKKy8vIFJlLWFsaWduIGxp
bmUgbnVtYmVycyBhbmQgZ3V0dGVyIG1hcmtzIHRvIGNvbXBlbnNhdGUgZm9yCisvLyBob3Jpem9u
dGFsIHNjcm9sbGluZy4KK2Z1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7CisgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheSwgdmlldyA9IGRpc3BsYXkudmlldworICBpZiAoIWRpc3BsYXku
YWxpZ25XaWRnZXRzICYmICghZGlzcGxheS5ndXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWNtLm9wdGlv
bnMuZml4ZWRHdXR0ZXIpKSB7IHJldHVybiB9CisgIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhT
Y3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Ny
b2xsTGVmdAorICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbGVm
dCA9IGNvbXAgKyAicHgiCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykg
eyBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7CisgICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIp
IHsKKyAgICAgIGlmICh2aWV3W2ldLmd1dHRlcikKKyAgICAgICAgeyB2aWV3W2ldLmd1dHRlci5z
dHlsZS5sZWZ0ID0gbGVmdCB9CisgICAgICBpZiAodmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kKQor
ICAgICAgICB7IHZpZXdbaV0uZ3V0dGVyQmFja2dyb3VuZC5zdHlsZS5sZWZ0ID0gbGVmdCB9Cisg
ICAgfQorICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlCisgICAgaWYgKGFsaWduKSB7
IGZvciAodmFyIGogPSAwOyBqIDwgYWxpZ24ubGVuZ3RoOyBqKyspCisgICAgICB7IGFsaWduW2pd
LnN0eWxlLmxlZnQgPSBsZWZ0IH0gfQorICB9IH0KKyAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0
ZXIpCisgICAgeyBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykg
KyAicHgiIH0KK30KKworLy8gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgbGluZSBudW1iZXIgZ3V0
dGVyIGlzIHN0aWxsIHRoZSByaWdodAorLy8gc2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQg
c2l6ZS4gUmV0dXJucyB0cnVlIHdoZW4gYW4gdXBkYXRlCisvLyBpcyBuZWVkZWQuCitmdW5jdGlv
biBtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkgeworICBpZiAoIWNtLm9wdGlvbnMubGlu
ZU51bWJlcnMpIHsgcmV0dXJuIGZhbHNlIH0KKyAgdmFyIGRvYyA9IGNtLmRvYywgbGFzdCA9IGxp
bmVOdW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSwgZGlzcGxh
eSA9IGNtLmRpc3BsYXkKKyAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJz
KSB7CisgICAgdmFyIHRlc3QgPSBkaXNwbGF5Lm1lYXN1cmUuYXBwZW5kQ2hpbGQoZWx0KCJkaXYi
LCBbZWx0KCJkaXYiLCBsYXN0KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0
IikpCisgICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGlu
ZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBpbm5lclcKKyAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5
bGUud2lkdGggPSAiIgorICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChp
bm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpICsgMQorICAg
IGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArIHBhZGRp
bmcKKyAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGgg
PyBsYXN0Lmxlbmd0aCA6IC0xCisgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxlLndpZHRoID0g
ZGlzcGxheS5saW5lTnVtV2lkdGggKyAicHgiCisgICAgdXBkYXRlR3V0dGVyU3BhY2UoY20pCisg
ICAgcmV0dXJuIHRydWUKKyAgfQorICByZXR1cm4gZmFsc2UKK30KKworLy8gUmVhZCB0aGUgYWN0
dWFsIGhlaWdodHMgb2YgdGhlIHJlbmRlcmVkIGxpbmVzLCBhbmQgdXBkYXRlIHRoZWlyCisvLyBz
dG9yZWQgaGVpZ2h0cyB0byBtYXRjaC4KK2Z1bmN0aW9uIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0
KGNtKSB7CisgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheQorICB2YXIgcHJldkJvdHRvbSA9IGRp
c3BsYXkubGluZURpdi5vZmZzZXRUb3AKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5LnZp
ZXcubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCBoZWlnaHQg
PSAodm9pZCAwKQorICAgIGlmIChjdXIuaGlkZGVuKSB7IGNvbnRpbnVlIH0KKyAgICBpZiAoaWUg
JiYgaWVfdmVyc2lvbiA8IDgpIHsKKyAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3Ag
KyBjdXIubm9kZS5vZmZzZXRIZWlnaHQKKyAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b20K
KyAgICAgIHByZXZCb3R0b20gPSBib3QKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGJveCA9IGN1
ci5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisgICAgICBoZWlnaHQgPSBib3guYm90dG9t
IC0gYm94LnRvcAorICAgIH0KKyAgICB2YXIgZGlmZiA9IGN1ci5saW5lLmhlaWdodCAtIGhlaWdo
dAorICAgIGlmIChoZWlnaHQgPCAyKSB7IGhlaWdodCA9IHRleHRIZWlnaHQoZGlzcGxheSkgfQor
ICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZmIDwgLS4wMDEpIHsKKyAgICAgIHVwZGF0ZUxpbmVI
ZWlnaHQoY3VyLmxpbmUsIGhlaWdodCkKKyAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChjdXIubGlu
ZSkKKyAgICAgIGlmIChjdXIucmVzdCkgeyBmb3IgKHZhciBqID0gMDsgaiA8IGN1ci5yZXN0Lmxl
bmd0aDsgaisrKQorICAgICAgICB7IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSkgfSB9
CisgICAgfQorICB9Cit9CisKKy8vIFJlYWQgYW5kIHN0b3JlIHRoZSBoZWlnaHQgb2YgbGluZSB3
aWRnZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKy8vIGdpdmVuIGxpbmUuCitmdW5jdGlvbiB1cGRh
dGVXaWRnZXRIZWlnaHQobGluZSkgeworICBpZiAobGluZS53aWRnZXRzKSB7IGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKQorICAgIHsgbGluZS53aWRnZXRzW2ld
LmhlaWdodCA9IGxpbmUud2lkZ2V0c1tpXS5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0IH0g
fQorfQorCisvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4g
dmlld3BvcnQgKGRlZmF1bHRzCisvLyB0aGUgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uKS4g
dmlld3BvcnQgbWF5IGNvbnRhaW4gdG9wLAorLy8gaGVpZ2h0LCBhbmQgZW5zdXJlIChzZWUgb3Au
c2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCitmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwg
ZG9jLCB2aWV3cG9ydCkgeworICB2YXIgdG9wID0gdmlld3BvcnQgJiYgdmlld3BvcnQudG9wICE9
IG51bGwgPyBNYXRoLm1heCgwLCB2aWV3cG9ydC50b3ApIDogZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3AKKyAgdG9wID0gTWF0aC5mbG9vcih0b3AgLSBwYWRkaW5nVG9wKGRpc3BsYXkpKQorICB2
YXIgYm90dG9tID0gdmlld3BvcnQgJiYgdmlld3BvcnQuYm90dG9tICE9IG51bGwgPyB2aWV3cG9y
dC5ib3R0b20gOiB0b3AgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0CisKKyAgdmFyIGZy
b20gPSBsaW5lQXRIZWlnaHQoZG9jLCB0b3ApLCB0byA9IGxpbmVBdEhlaWdodChkb2MsIGJvdHRv
bSkKKyAgLy8gRW5zdXJlIGlzIGEge2Zyb206IHtsaW5lLCBjaH0sIHRvOiB7bGluZSwgY2h9fSBv
YmplY3QsIGFuZAorICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlm
IHBvc3NpYmxlKS4KKyAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkgeworICAgIHZh
ciBlbnN1cmVGcm9tID0gdmlld3BvcnQuZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3
cG9ydC5lbnN1cmUudG8ubGluZQorICAgIGlmIChlbnN1cmVGcm9tIDwgZnJvbSkgeworICAgICAg
ZnJvbSA9IGVuc3VyZUZyb20KKyAgICAgIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRM
aW5lKGdldExpbmUoZG9jLCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVp
Z2h0KQorICAgIH0gZWxzZSBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+
PSB0bykgeworICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRM
aW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpCisgICAg
ICB0byA9IGVuc3VyZVRvCisgICAgfQorICB9CisgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IE1h
dGgubWF4KHRvLCBmcm9tICsgMSl9Cit9CisKKy8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBh
bmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydAorLy8gY292ZXJzIHRoZSB2aXNpYmxl
IGFyZWEuCitmdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20sIHZhbCkgeworICBpZiAoTWF0aC5hYnMo
Y20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSB7IHJldHVybiB9CisgIGNtLmRvYy5zY3JvbGxU
b3AgPSB2YWwKKyAgaWYgKCFnZWNrbykgeyB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB2
YWx9KSB9CisgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSB2YWwpIHsgY20u
ZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB2YWwgfQorICBjbS5kaXNwbGF5LnNjcm9sbGJh
cnMuc2V0U2Nyb2xsVG9wKHZhbCkKKyAgaWYgKGdlY2tvKSB7IHVwZGF0ZURpc3BsYXlTaW1wbGUo
Y20pIH0KKyAgc3RhcnRXb3JrZXIoY20sIDEwMCkKK30KKy8vIFN5bmMgc2Nyb2xsZXIgYW5kIHNj
cm9sbGJhciwgZW5zdXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlCisvLyBhbGlnbmVkLgorZnVu
Y3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyKSB7CisgIGlmIChpc1Njcm9s
bGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9sbExl
ZnQgLSB2YWwpIDwgMikgeyByZXR1cm4gfQorICB2YWwgPSBNYXRoLm1pbih2YWwsIGNtLmRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRo
KQorICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbAorICBhbGlnbkhvcml6b250YWxseShjbSkKKyAg
aWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIHsgY20uZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsIH0KKyAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNj
cm9sbExlZnQodmFsKQorfQorCisvLyBTaW5jZSB0aGUgZGVsdGEgdmFsdWVzIHJlcG9ydGVkIG9u
IG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKKy8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3Nl
cnMgYW5kIGV2ZW4gYnJvd3NlciB2ZXJzaW9ucywgYW5kCisvLyBnZW5lcmFsbHkgaG9ycmlibHkg
dW5wcmVkaWN0YWJsZSwgdGhpcyBjb2RlIHN0YXJ0cyBieSBtZWFzdXJpbmcKKy8vIHRoZSBzY3Jv
bGwgZWZmZWN0IHRoYXQgdGhlIGZpcnN0IGZldyBtb3VzZSB3aGVlbCBldmVudHMgaGF2ZSwKKy8v
IGFuZCwgZnJvbSB0aGF0LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVsdGFzIHRv
IHBpeGVsCisvLyBvZmZzZXRzIGFmdGVyd2FyZHMuCisvLworLy8gVGhlIHJlYXNvbiB3ZSB3YW50
IHRvIGtub3cgdGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xsCisvLyBpcyB0aGF0
IGl0IGdpdmVzIHVzIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgdGhlCisv
LyBhY3R1YWwgc2Nyb2xsaW5nIGhhcHBlbnMsIHJlZHVjaW5nIGZsaWNrZXJpbmcuCisKK3ZhciB3
aGVlbFNhbXBsZXMgPSAwOwordmFyIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IG51bGw7CisvLyBGaWxs
IGluIGEgYnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3
ZQorLy8ga25vdyBvbmUuIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgYWNjdXJhdGUgLS0gdGhlIHJl
c3VsdCBvZiB0aGVtCisvLyBiZWluZyB3cm9uZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0IGZsaWNr
ZXIgb24gdGhlIGZpcnN0IHdoZWVsCisvLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCku
CitpZiAoaWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS41MyB9CitlbHNlIGlmIChnZWNrbykg
eyB3aGVlbFBpeGVsc1BlclVuaXQgPSAxNSB9CitlbHNlIGlmIChjaHJvbWUpIHsgd2hlZWxQaXhl
bHNQZXJVbml0ID0gLS43IH0KK2Vsc2UgaWYgKHNhZmFyaSkgeyB3aGVlbFBpeGVsc1BlclVuaXQg
PSAtMS8zIH0KKworZnVuY3Rpb24gd2hlZWxFdmVudERlbHRhKGUpIHsKKyAgdmFyIGR4ID0gZS53
aGVlbERlbHRhWCwgZHkgPSBlLndoZWVsRGVsdGFZCisgIGlmIChkeCA9PSBudWxsICYmIGUuZGV0
YWlsICYmIGUuYXhpcyA9PSBlLkhPUklaT05UQUxfQVhJUykgeyBkeCA9IGUuZGV0YWlsIH0KKyAg
aWYgKGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuVkVSVElDQUxfQVhJUykg
eyBkeSA9IGUuZGV0YWlsIH0KKyAgZWxzZSBpZiAoZHkgPT0gbnVsbCkgeyBkeSA9IGUud2hlZWxE
ZWx0YSB9CisgIHJldHVybiB7eDogZHgsIHk6IGR5fQorfQorZnVuY3Rpb24gd2hlZWxFdmVudFBp
eGVscyhlKSB7CisgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKQorICBkZWx0YS54ICo9
IHdoZWVsUGl4ZWxzUGVyVW5pdAorICBkZWx0YS55ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdAorICBy
ZXR1cm4gZGVsdGEKK30KKworZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkgeworICB2YXIg
ZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSksIGR4ID0gZGVsdGEueCwgZHkgPSBkZWx0YS55CisK
KyAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzY3JvbGwgPSBkaXNwbGF5LnNjcm9sbGVyCisg
IC8vIFF1aXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNjcm9sbCBoZXJlCisgIHZhciBjYW5TY3Jv
bGxYID0gc2Nyb2xsLnNjcm9sbFdpZHRoID4gc2Nyb2xsLmNsaWVudFdpZHRoCisgIHZhciBjYW5T
Y3JvbGxZID0gc2Nyb2xsLnNjcm9sbEhlaWdodCA+IHNjcm9sbC5jbGllbnRIZWlnaHQKKyAgaWYg
KCEoZHggJiYgY2FuU2Nyb2xsWCB8fCBkeSAmJiBjYW5TY3JvbGxZKSkgeyByZXR1cm4gfQorCisg
IC8vIFdlYmtpdCBicm93c2VycyBvbiBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0
aGUgdGFyZ2V0CisgIC8vIG9mIHRoZSBzY3JvbGwgZXZlbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBz
Y3JvbGxhYmxlIGVsZW1lbnQuCisgIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29kZSBpbiBw
YXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlCisgIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQu
CisgIGlmIChkeSAmJiBtYWMgJiYgd2Via2l0KSB7CisgICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9
IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIu
cGFyZW50Tm9kZSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGlmICh2aWV3W2ldLm5vZGUgPT0gY3VyKSB7CisgICAgICAgICAgY20uZGlz
cGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXIKKyAgICAgICAgICBicmVhayBvdXRlcgorICAg
ICAgICB9CiAgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gT24gc29tZSBicm93c2VycywgaG9y
aXpvbnRhbCBzY3JvbGxpbmcgd2lsbCBjYXVzZSByZWRyYXdzIHRvCisgIC8vIGhhcHBlbiBiZWZv
cmUgdGhlIGd1dHRlciBoYXMgYmVlbiByZWFsaWduZWQsIGNhdXNpbmcgaXQgdG8KKyAgLy8gd3Jp
Z2dsZSBhcm91bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuCisgIC8v
IGVzdGltYXRlZCBwaXhlbHMvZGVsdGEgdmFsdWUsIHdlIGp1c3QgaGFuZGxlIGhvcml6b250YWwK
KyAgLy8gc2Nyb2xsaW5nIGVudGlyZWx5IGhlcmUuIEl0J2xsIGJlIHNsaWdodGx5IG9mZiBmcm9t
IG5hdGl2ZSwgYnV0CisgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCisgIGlmIChkeCAm
JiAhZ2Vja28gJiYgIXByZXN0byAmJiB3aGVlbFBpeGVsc1BlclVuaXQgIT0gbnVsbCkgeworICAg
IGlmIChkeSAmJiBjYW5TY3JvbGxZKQorICAgICAgeyBzZXRTY3JvbGxUb3AoY20sIE1hdGgubWF4
KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxUb3AgKyBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdCwg
c2Nyb2xsLnNjcm9sbEhlaWdodCAtIHNjcm9sbC5jbGllbnRIZWlnaHQpKSkgfQorICAgIHNldFNj
cm9sbExlZnQoY20sIE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHgg
KiB3aGVlbFBpeGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRX
aWR0aCkpKQorICAgIC8vIE9ubHkgcHJldmVudCBkZWZhdWx0IHNjcm9sbGluZyBpZiB2ZXJ0aWNh
bCBzY3JvbGxpbmcgaXMKKyAgICAvLyBhY3R1YWxseSBwb3NzaWJsZS4gT3RoZXJ3aXNlLCBpdCBj
YXVzZXMgdmVydGljYWwgc2Nyb2xsCisgICAgLy8gaml0dGVyIG9uIE9TWCB0cmFja3BhZHMgd2hl
biBkZWx0YVggaXMgc21hbGwgYW5kIGRlbHRhWQorICAgIC8vIGlzIGxhcmdlIChpc3N1ZSAjMzU3
OSkKKyAgICBpZiAoIWR5IHx8IChkeSAmJiBjYW5TY3JvbGxZKSkKKyAgICAgIHsgZV9wcmV2ZW50
RGVmYXVsdChlKSB9CisgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IG51bGwgLy8gQWJvcnQgbWVh
c3VyZW1lbnQsIGlmIGluIHByb2dyZXNzCisgICAgcmV0dXJuCisgIH0KIAotICAgICAgcmV0dXJu
IHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAw
fTsKLSAgICB9LAotICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAgaWYg
KHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHRoaXMuaG9yaXouc2Nyb2xsTGVmdCA9IHBv
czsKLSAgICB9LAotICAgIHNldFNjcm9sbFRvcDogZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBpZiAo
dGhpcy52ZXJ0LnNjcm9sbFRvcCAhPSBwb3MpIHRoaXMudmVydC5zY3JvbGxUb3AgPSBwb3M7Ci0g
ICAgfSwKLSAgICBvdmVybGF5SGFjazogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgdyA9IG1hYyAm
JiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOwotICAgICAgdGhpcy5ob3Jp
ei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWluV2lkdGggPSB3OwotICAgICAg
dmFyIHNlbGYgPSB0aGlzOwotICAgICAgdmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgaWYgKGVfdGFyZ2V0KGUpICE9IHNlbGYudmVydCAmJiBlX3RhcmdldChlKSAhPSBz
ZWxmLmhvcml6KQotICAgICAgICAgIG9wZXJhdGlvbihzZWxmLmNtLCBvbk1vdXNlRG93bikoZSk7
Ci0gICAgICB9OwotICAgICAgb24odGhpcy52ZXJ0LCAibW91c2Vkb3duIiwgYmFyTW91c2VEb3du
KTsKLSAgICAgIG9uKHRoaXMuaG9yaXosICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAg
IH0sCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHBhcmVudCA9IHRoaXMuaG9y
aXoucGFyZW50Tm9kZTsKLSAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KTsKLSAg
ICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpOwotICAgIH0KLSAgfSwgTmF0aXZlU2Ny
b2xsYmFycy5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIE51bGxTY3JvbGxiYXJzKCkge30KLQot
ICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUgPSBjb3B5T2JqKHsKLSAgICB1cGRhdGU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4ge2JvdHRvbTogMCwgcmlnaHQ6IDB9OyB9LAotICAgIHNldFNjcm9sbExl
ZnQ6IGZ1bmN0aW9uKCkge30sCi0gICAgc2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpIHt9LAotICAg
IGNsZWFyOiBmdW5jdGlvbigpIHt9Ci0gIH0sIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZSk7Ci0K
LSAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHsibmF0aXZlIjogTmF0aXZlU2Nyb2xsYmFy
cywgIm51bGwiOiBOdWxsU2Nyb2xsYmFyc307Ci0KLSAgZnVuY3Rpb24gaW5pdFNjcm9sbGJhcnMo
Y20pIHsKLSAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzKSB7Ci0gICAgICBjbS5kaXNwbGF5
LnNjcm9sbGJhcnMuY2xlYXIoKTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRk
Q2xhc3MpCi0gICAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNj
cm9sbGJhcnMuYWRkQ2xhc3MpOwotICAgIH0KLQotICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycyA9
IG5ldyBDb2RlTWlycm9yLnNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVd
KGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUo
bm9kZSwgY20uZGlzcGxheS5zY3JvbGxiYXJGaWxsZXIpOwotICAgICAgLy8gUHJldmVudCBjbGlj
a3MgaW4gdGhlIHNjcm9sbGJhcnMgZnJvbSBraWxsaW5nIGZvY3VzCi0gICAgICBvbihub2RlLCAi
bW91c2Vkb3duIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDApOwot
ICAgICAgfSk7Ci0gICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1
ZSIpOwotICAgIH0sIGZ1bmN0aW9uKHBvcywgYXhpcykgewotICAgICAgaWYgKGF4aXMgPT0gImhv
cml6b250YWwiKSBzZXRTY3JvbGxMZWZ0KGNtLCBwb3MpOwotICAgICAgZWxzZSBzZXRTY3JvbGxU
b3AoY20sIHBvcyk7Ci0gICAgfSwgY20pOworICAvLyAnUHJvamVjdCcgdGhlIHZpc2libGUgdmll
d3BvcnQgdG8gY292ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZworICAvLyBzY3JvbGxlZCBpbnRv
IHZpZXcgKGlmIHdlIGtub3cgZW5vdWdoIHRvIGVzdGltYXRlIGl0KS4KKyAgaWYgKGR5ICYmIHdo
ZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7CisgICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQ
aXhlbHNQZXJVbml0CisgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9IHRvcCAr
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQKKyAgICBpZiAocGl4ZWxzIDwgMCkgeyB0b3Ag
PSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCkgfQorICAgIGVsc2UgeyBib3QgPSBNYXRo
Lm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCkgfQorICAgIHVwZGF0ZURpc3Bs
YXlTaW1wbGUoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KQorICB9CisKKyAgaWYgKHdoZWVs
U2FtcGxlcyA8IDIwKSB7CisgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgewor
ICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IHNjcm9sbC5zY3JvbGxMZWZ0OyBkaXNwbGF5Lndo
ZWVsU3RhcnRZID0gc2Nyb2xsLnNjcm9sbFRvcAorICAgICAgZGlzcGxheS53aGVlbERYID0gZHg7
IGRpc3BsYXkud2hlZWxEWSA9IGR5CisgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgeyByZXR1cm4gfQorICAgICAg
ICB2YXIgbW92ZWRYID0gc2Nyb2xsLnNjcm9sbExlZnQgLSBkaXNwbGF5LndoZWVsU3RhcnRYCisg
ICAgICAgIHZhciBtb3ZlZFkgPSBzY3JvbGwuc2Nyb2xsVG9wIC0gZGlzcGxheS53aGVlbFN0YXJ0
WQorICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiBkaXNwbGF5LndoZWVsRFkgJiYgbW92
ZWRZIC8gZGlzcGxheS53aGVlbERZKSB8fAorICAgICAgICAgIChtb3ZlZFggJiYgZGlzcGxheS53
aGVlbERYICYmIG1vdmVkWCAvIGRpc3BsYXkud2hlZWxEWCkKKyAgICAgICAgZGlzcGxheS53aGVl
bFN0YXJ0WCA9IGRpc3BsYXkud2hlZWxTdGFydFkgPSBudWxsCisgICAgICAgIGlmICghc2FtcGxl
KSB7IHJldHVybiB9CisgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5pdCA9ICh3aGVlbFBpeGVsc1Bl
clVuaXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVsU2FtcGxlcyArIDEpCisgICAg
ICAgICsrd2hlZWxTYW1wbGVzCisgICAgICB9LCAyMDApCisgICAgfSBlbHNlIHsKKyAgICAgIGRp
c3BsYXkud2hlZWxEWCArPSBkeDsgZGlzcGxheS53aGVlbERZICs9IGR5CisgICAgfQorICB9Cit9
CisKKy8vIFNDUk9MTEJBUlMKKworLy8gUHJlcGFyZSBET00gcmVhZHMgbmVlZGVkIHRvIHVwZGF0
ZSB0aGUgc2Nyb2xsYmFycy4gRG9uZSBpbiBvbmUKKy8vIHNob3QgdG8gbWluaW1pemUgdXBkYXRl
L21lYXN1cmUgcm91bmR0cmlwcy4KK2Z1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7
CisgIHZhciBkID0gY20uZGlzcGxheSwgZ3V0dGVyVyA9IGQuZ3V0dGVycy5vZmZzZXRXaWR0aAor
ICB2YXIgZG9jSCA9IE1hdGgucm91bmQoY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRp
c3BsYXkpKQorICByZXR1cm4geworICAgIGNsaWVudEhlaWdodDogZC5zY3JvbGxlci5jbGllbnRI
ZWlnaHQsCisgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCwKKyAgICBzY3Jv
bGxXaWR0aDogZC5zY3JvbGxlci5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGg6IGQuc2Nyb2xsZXIu
Y2xpZW50V2lkdGgsCisgICAgdmlld1dpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGgsCisgICAg
YmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLAorICAgIGRvY0hl
aWdodDogZG9jSCwKKyAgICBzY3JvbGxIZWlnaHQ6IGRvY0ggKyBzY3JvbGxHYXAoY20pICsgZC5i
YXJIZWlnaHQsCisgICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsCisgICAgZ3V0
dGVyV2lkdGg6IGd1dHRlclcKKyAgfQorfQorCit2YXIgTmF0aXZlU2Nyb2xsYmFycyA9IGZ1bmN0
aW9uKHBsYWNlLCBzY3JvbGwsIGNtKSB7CisgIHRoaXMuY20gPSBjbQorICB2YXIgdmVydCA9IHRo
aXMudmVydCA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgIm1pbi13aWR0aDog
MXB4IildLCAiQ29kZU1pcnJvci12c2Nyb2xsYmFyIikKKyAgdmFyIGhvcml6ID0gdGhpcy5ob3Jp
eiA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImhlaWdodDogMTAwJTsgbWlu
LWhlaWdodDogMXB4IildLCAiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIikKKyAgcGxhY2UodmVydCk7
IHBsYWNlKGhvcml6KQorCisgIG9uKHZlcnQsICJzY3JvbGwiLCBmdW5jdGlvbiAoKSB7CisgICAg
aWYgKHZlcnQuY2xpZW50SGVpZ2h0KSB7IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgInZlcnRpY2Fs
IikgfQorICB9KQorICBvbihob3JpeiwgInNjcm9sbCIsIGZ1bmN0aW9uICgpIHsKKyAgICBpZiAo
aG9yaXouY2xpZW50V2lkdGgpIHsgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsICJob3Jpem9udGFs
IikgfQorICB9KQorCisgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IGZhbHNlCisgIC8vIE5lZWQg
dG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBt
dXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KKyAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7IHRo
aXMuaG9yaXouc3R5bGUubWluSGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLm1pbldpZHRoID0gIjE4
cHgiIH0KK307CisKK05hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9u
IChtZWFzdXJlKSB7CisgIHZhciBuZWVkc0ggPSBtZWFzdXJlLnNjcm9sbFdpZHRoID4gbWVhc3Vy
ZS5jbGllbnRXaWR0aCArIDEKKyAgdmFyIG5lZWRzViA9IG1lYXN1cmUuc2Nyb2xsSGVpZ2h0ID4g
bWVhc3VyZS5jbGllbnRIZWlnaHQgKyAxCisgIHZhciBzV2lkdGggPSBtZWFzdXJlLm5hdGl2ZUJh
cldpZHRoCisKKyAgaWYgKG5lZWRzVikgeworICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0g
ImJsb2NrIgorICAgIHRoaXMudmVydC5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzV2lkdGggKyAi
cHgiIDogIjAiCisgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5l
ZWRzSCA/IHNXaWR0aCA6IDApCisgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZh
bHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC4KKyAgICB0aGlzLnZlcnQuZmlyc3RDaGls
ZC5zdHlsZS5oZWlnaHQgPQorICAgICAgTWF0aC5tYXgoMCwgbWVhc3VyZS5zY3JvbGxIZWlnaHQg
LSBtZWFzdXJlLmNsaWVudEhlaWdodCArIHRvdGFsSGVpZ2h0KSArICJweCIKKyAgfSBlbHNlIHsK
KyAgICB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9ICIiCisgICAgdGhpcy52ZXJ0LmZpcnN0Q2hp
bGQuc3R5bGUuaGVpZ2h0ID0gIjAiCisgIH0KKworICBpZiAobmVlZHNIKSB7CisgICAgdGhpcy5o
b3Jpei5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIgorICAgIHRoaXMuaG9yaXouc3R5bGUucmlnaHQg
PSBuZWVkc1YgPyBzV2lkdGggKyAicHgiIDogIjAiCisgICAgdGhpcy5ob3Jpei5zdHlsZS5sZWZ0
ID0gbWVhc3VyZS5iYXJMZWZ0ICsgInB4IgorICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52
aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCkKKyAgICB0
aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPQorICAgICAgKG1lYXN1cmUuc2Nyb2xs
V2lkdGggLSBtZWFzdXJlLmNsaWVudFdpZHRoICsgdG90YWxXaWR0aCkgKyAicHgiCisgIH0gZWxz
ZSB7CisgICAgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5ID0gIiIKKyAgICB0aGlzLmhvcml6LmZp
cnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiMCIKKyAgfQorCisgIGlmICghdGhpcy5jaGVja2VkWmVy
b1dpZHRoICYmIG1lYXN1cmUuY2xpZW50SGVpZ2h0ID4gMCkgeworICAgIGlmIChzV2lkdGggPT0g
MCkgeyB0aGlzLnplcm9XaWR0aEhhY2soKSB9CisgICAgdGhpcy5jaGVja2VkWmVyb1dpZHRoID0g
dHJ1ZQorICB9CisKKyAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9t
OiBuZWVkc0ggPyBzV2lkdGggOiAwfQorfTsKKworTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUu
c2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uIChwb3MpIHsKKyAgaWYgKHRoaXMuaG9yaXouc2Nyb2xs
TGVmdCAhPSBwb3MpIHsgdGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gcG9zIH0KKyAgaWYgKHRoaXMu
ZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMu
ZGlzYWJsZUhvcml6KSB9Cit9OworCitOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS5zZXRTY3Jv
bGxUb3AgPSBmdW5jdGlvbiAocG9zKSB7CisgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBv
cykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zIH0KKyAgaWYgKHRoaXMuZGlzYWJsZVZlcnQp
IHsgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0KSB9
Cit9OworCitOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rp
b24gKCkgeworICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDog
IjE4cHgiCisgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRo
ID0gdworICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUu
cG9pbnRlckV2ZW50cyA9ICJub25lIgorICB0aGlzLmRpc2FibGVIb3JpeiA9IG5ldyBEZWxheWVk
CisgIHRoaXMuZGlzYWJsZVZlcnQgPSBuZXcgRGVsYXllZAorfTsKKworTmF0aXZlU2Nyb2xsYmFy
cy5wcm90b3R5cGUuZW5hYmxlWmVyb1dpZHRoQmFyID0gZnVuY3Rpb24gKGJhciwgZGVsYXkpIHsK
KyAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYXV0byIKKyAgZnVuY3Rpb24gbWF5YmVEaXNh
YmxlKCkgeworICAgIC8vIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIHNjcm9sbGJhciBpcyBzdGls
bCB2aXNpYmxlLCB3ZQorICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGVsZW1lbnQgdW5kZXIgdGhl
IHBpeGVsIGluIHRoZSBib3R0b20KKyAgICAvLyBsZWZ0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFy
IGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveAorICAgIC8vIGl0c2VsZiAod2hlbiB0aGUgYmFyIGlz
IHN0aWxsIHZpc2libGUpIG9yIGl0cyBmaWxsZXIgY2hpbGQKKyAgICAvLyAod2hlbiB0aGUgYmFy
IGlzIGhpZGRlbikuIElmIGl0IGlzIHN0aWxsIHZpc2libGUsIHdlIGtlZXAKKyAgICAvLyBpdCBl
bmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy4KKyAgICB2
YXIgYm94ID0gYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisgICAgdmFyIGVsdCA9IGRvY3Vt
ZW50LmVsZW1lbnRGcm9tUG9pbnQoYm94LmxlZnQgKyAxLCBib3guYm90dG9tIC0gMSkKKyAgICBp
ZiAoZWx0ICE9IGJhcikgeyBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIiB9CisgICAg
ZWxzZSB7IGRlbGF5LnNldCgxMDAwLCBtYXliZURpc2FibGUpIH0KKyAgfQorICBkZWxheS5zZXQo
MTAwMCwgbWF5YmVEaXNhYmxlKQorfTsKKworTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xl
YXIgPSBmdW5jdGlvbiAoKSB7CisgIHZhciBwYXJlbnQgPSB0aGlzLmhvcml6LnBhcmVudE5vZGUK
KyAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuaG9yaXopCisgIHBhcmVudC5yZW1vdmVDaGlsZCh0
aGlzLnZlcnQpCit9OworCit2YXIgTnVsbFNjcm9sbGJhcnMgPSBmdW5jdGlvbiAoKSB7fTsKKwor
TnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHti
b3R0b206IDAsIHJpZ2h0OiAwfSB9OworTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9s
bExlZnQgPSBmdW5jdGlvbiAoKSB7fTsKK051bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5zZXRTY3Jv
bGxUb3AgPSBmdW5jdGlvbiAoKSB7fTsKK051bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9
IGZ1bmN0aW9uICgpIHt9OworCitmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJl
KSB7CisgIGlmICghbWVhc3VyZSkgeyBtZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20p
IH0KKyAgdmFyIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoLCBzdGFydEhlaWdodCA9
IGNtLmRpc3BsYXkuYmFySGVpZ2h0CisgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3Vy
ZSkKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCA0ICYmIHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5i
YXJXaWR0aCB8fCBzdGFydEhlaWdodCAhPSBjbS5kaXNwbGF5LmJhckhlaWdodDsgaSsrKSB7Cisg
ICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxp
bmVXcmFwcGluZykKKyAgICAgIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIH0KKyAgICB1
cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSkKKyAgICBz
dGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aDsgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5
LmJhckhlaWdodAorICB9Cit9CisKKy8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJh
cnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCisvLyBjb250ZW50LgorZnVuY3Rpb24gdXBk
YXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlKSB7CisgIHZhciBkID0gY20uZGlzcGxheQor
ICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpCisKKyAgZC5zaXplci5z
dHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArICJweCIKKyAg
ZC5zaXplci5zdHlsZS5wYWRkaW5nQm90dG9tID0gKGQuYmFySGVpZ2h0ID0gc2l6ZXMuYm90dG9t
KSArICJweCIKKyAgZC5oZWlnaHRGb3JjZXIuc3R5bGUuYm9yZGVyQm90dG9tID0gc2l6ZXMuYm90
dG9tICsgInB4IHNvbGlkIHRyYW5zcGFyZW50IgorCisgIGlmIChzaXplcy5yaWdodCAmJiBzaXpl
cy5ib3R0b20pIHsKKyAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2Nr
IgorICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodCA9IHNpemVzLmJvdHRvbSArICJw
eCIKKyAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgInB4
IgorICB9IGVsc2UgeyBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiIgfQorICBp
ZiAoc2l6ZXMuYm90dG9tICYmIGNtLm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIg
JiYgY20ub3B0aW9ucy5maXhlZEd1dHRlcikgeworICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRp
c3BsYXkgPSAiYmxvY2siCisgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMu
Ym90dG9tICsgInB4IgorICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoID0gbWVhc3VyZS5n
dXR0ZXJXaWR0aCArICJweCIKKyAgfSBlbHNlIHsgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxh
eSA9ICIiIH0KK30KKwordmFyIHNjcm9sbGJhck1vZGVsID0geyJuYXRpdmUiOiBOYXRpdmVTY3Jv
bGxiYXJzLCAibnVsbCI6IE51bGxTY3JvbGxiYXJzfQorCitmdW5jdGlvbiBpbml0U2Nyb2xsYmFy
cyhjbSkgeworICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzKSB7CisgICAgY20uZGlzcGxheS5z
Y3JvbGxiYXJzLmNsZWFyKCkKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNz
KQotICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJh
cnMuYWRkQ2xhc3MpOwotICB9Ci0KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhjbSwgbWVh
c3VyZSkgewotICAgIGlmICghbWVhc3VyZSkgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJz
KGNtKTsKLSAgICB2YXIgc3RhcnRXaWR0aCA9IGNtLmRpc3BsYXkuYmFyV2lkdGgsIHN0YXJ0SGVp
Z2h0ID0gY20uZGlzcGxheS5iYXJIZWlnaHQ7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNt
LCBtZWFzdXJlKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQgJiYgc3RhcnRXaWR0aCAhPSBj
bS5kaXNwbGF5LmJhcldpZHRoIHx8IHN0YXJ0SGVpZ2h0ICE9IGNtLmRpc3BsYXkuYmFySGVpZ2h0
OyBpKyspIHsKLSAgICAgIGlmIChzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggJiYg
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0
KGNtKTsKLSAgICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZUZvclNjcm9sbGJh
cnMoY20pKTsKLSAgICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhl
aWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0OwotICAgIH0KKyAgICAgIHsgcm1DbGFzcyhjbS5k
aXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcykgfQogICB9CiAK
LSAgLy8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3aXRoIHRoZSBhY3R1YWwg
c2l6ZSBvZiB0aGUKLSAgLy8gY29udGVudC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFyc0lu
bmVyKGNtLCBtZWFzdXJlKSB7Ci0gICAgdmFyIGQgPSBjbS5kaXNwbGF5OwotICAgIHZhciBzaXpl
cyA9IGQuc2Nyb2xsYmFycy51cGRhdGUobWVhc3VyZSk7Ci0KLSAgICBkLnNpemVyLnN0eWxlLnBh
ZGRpbmdSaWdodCA9IChkLmJhcldpZHRoID0gc2l6ZXMucmlnaHQpICsgInB4IjsKLSAgICBkLnNp
emVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsg
InB4IjsKLQotICAgIGlmIChzaXplcy5yaWdodCAmJiBzaXplcy5ib3R0b20pIHsKLSAgICAgIGQu
c2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgICAgZC5zY3JvbGxi
YXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9tICsgInB4IjsKLSAgICAgIGQuc2Ny
b2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoID0gc2l6ZXMucmlnaHQgKyAicHgiOwotICAgIH0gZWxz
ZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgaWYgKHNpemVzLmJv
dHRvbSAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlv
bnMuZml4ZWRHdXR0ZXIpIHsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9t
ICsgInB4IjsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoID0gbWVhc3VyZS5ndXR0
ZXJXaWR0aCArICJweCI7Ci0gICAgfSBlbHNlIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkg
PSAiIjsKLSAgfQotCi0gIC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4g
YSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHMKLSAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBw
b3NpdGlvbikuIHZpZXdwb3J0IG1heSBjb250YWluIHRvcCwKLSAgLy8gaGVpZ2h0LCBhbmQgZW5z
dXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCi0gIGZ1bmN0aW9uIHZpc2libGVM
aW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdwb3J0KSB7Ci0gICAgdmFyIHRvcCA9IHZpZXdwb3J0ICYm
IHZpZXdwb3J0LnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld3BvcnQudG9wKSA6IGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIHRvcCA9IE1hdGguZmxvb3IodG9wIC0gcGFkZGlu
Z1RvcChkaXNwbGF5KSk7Ci0gICAgdmFyIGJvdHRvbSA9IHZpZXdwb3J0ICYmIHZpZXdwb3J0LmJv
dHRvbSAhPSBudWxsID8gdmlld3BvcnQuYm90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNs
aWVudEhlaWdodDsKLQotICAgIHZhciBmcm9tID0gbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG8g
PSBsaW5lQXRIZWlnaHQoZG9jLCBib3R0b20pOwotICAgIC8vIEVuc3VyZSBpcyBhIHtmcm9tOiB7
bGluZSwgY2h9LCB0bzoge2xpbmUsIGNofX0gb2JqZWN0LCBhbmQKLSAgICAvLyBmb3JjZXMgdGhv
c2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4KLSAgICBpZiAodmlld3Bv
cnQgJiYgdmlld3BvcnQuZW5zdXJlKSB7Ci0gICAgICB2YXIgZW5zdXJlRnJvbSA9IHZpZXdwb3J0
LmVuc3VyZS5mcm9tLmxpbmUsIGVuc3VyZVRvID0gdmlld3BvcnQuZW5zdXJlLnRvLmxpbmU7Ci0g
ICAgICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pIHsKLSAgICAgICAgZnJvbSA9IGVuc3VyZUZyb207
Ci0gICAgICAgIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9j
LCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KTsKLSAgICAgIH0g
ZWxzZSBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykgewotICAg
ICAgICBmcm9tID0gbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9jLCBl
bnN1cmVUbykpIC0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7Ci0gICAgICAgIHRvID0g
ZW5zdXJlVG87Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IE1h
dGgubWF4KHRvLCBmcm9tICsgMSl9OwotICB9Ci0KLSAgLy8gTElORSBOVU1CRVJTCi0KLSAgLy8g
UmUtYWxpZ24gbGluZSBudW1iZXJzIGFuZCBndXR0ZXIgbWFya3MgdG8gY29tcGVuc2F0ZSBmb3IK
LSAgLy8gaG9yaXpvbnRhbCBzY3JvbGxpbmcuCi0gIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5
KGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3
OwotICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYgKCFkaXNwbGF5Lmd1dHRlcnMuZmly
c3RDaGlsZCB8fCAhY20ub3B0aW9ucy5maXhlZEd1dHRlcikpIHJldHVybjsKLSAgICB2YXIgY29t
cCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxMZWZ0ICsgY20uZG9jLnNjcm9sbExlZnQ7Ci0gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1
dHRlcnMub2Zmc2V0V2lkdGgsIGxlZnQgPSBjb21wICsgInB4IjsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIGlmICghdmlld1tpXS5oaWRkZW4pIHsKLSAgICAgIGlm
IChjbS5vcHRpb25zLmZpeGVkR3V0dGVyICYmIHZpZXdbaV0uZ3V0dGVyKQotICAgICAgICB2aWV3
W2ldLmd1dHRlci5zdHlsZS5sZWZ0ID0gbGVmdDsKLSAgICAgIHZhciBhbGlnbiA9IHZpZXdbaV0u
YWxpZ25hYmxlOwotICAgICAgaWYgKGFsaWduKSBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxl
bmd0aDsgaisrKQotICAgICAgICBhbGlnbltqXS5zdHlsZS5sZWZ0ID0gbGVmdDsKKyAgY20uZGlz
cGxheS5zY3JvbGxiYXJzID0gbmV3IHNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFy
U3R5bGVdKGZ1bmN0aW9uIChub2RlKSB7CisgICAgY20uZGlzcGxheS53cmFwcGVyLmluc2VydEJl
Zm9yZShub2RlLCBjbS5kaXNwbGF5LnNjcm9sbGJhckZpbGxlcikKKyAgICAvLyBQcmV2ZW50IGNs
aWNrcyBpbiB0aGUgc2Nyb2xsYmFycyBmcm9tIGtpbGxpbmcgZm9jdXMKKyAgICBvbihub2RlLCAi
bW91c2Vkb3duIiwgZnVuY3Rpb24gKCkgeworICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHsg
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7
IH0sIDApIH0KKyAgICB9KQorICAgIG5vZGUuc2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIs
ICJ0cnVlIikKKyAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykgeworICAgIGlmIChheGlzID09ICJo
b3Jpem9udGFsIikgeyBzZXRTY3JvbGxMZWZ0KGNtLCBwb3MpIH0KKyAgICBlbHNlIHsgc2V0U2Ny
b2xsVG9wKGNtLCBwb3MpIH0KKyAgfSwgY20pCisgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMu
YWRkQ2xhc3MpCisgICAgeyBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXku
c2Nyb2xsYmFycy5hZGRDbGFzcykgfQorfQorCisvLyBTQ1JPTExJTkcgVEhJTkdTIElOVE8gVklF
VworCisvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgd2lu
ZG93LCBwYXJ0aWFsbHkKKy8vIHNjcm9sbGVkIG91dCBvZiB2aWV3LCB0aGlzIGVuc3VyZXMgdGhh
dCB0aGUgY3Vyc29yIGlzIHZpc2libGUuCitmdW5jdGlvbiBtYXliZVNjcm9sbFdpbmRvdyhjbSwg
Y29vcmRzKSB7CisgIGlmIChzaWduYWxET01FdmVudChjbSwgInNjcm9sbEN1cnNvckludG9WaWV3
IikpIHsgcmV0dXJuIH0KKworICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRpc3Bs
YXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvU2Nyb2xsID0gbnVsbAorICBpZiAo
Y29vcmRzLnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZSB9CisgIGVsc2UgaWYg
KGNvb3Jkcy5ib3R0b20gKyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgeyBkb1Njcm9sbCA9IGZhbHNlIH0KKyAg
aWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHsKKyAgICB2YXIgc2Nyb2xsTm9kZSA9
IGVsdCgiZGl2IiwgIlx1MjAwYiIsIG51bGwsICgicG9zaXRpb246IGFic29sdXRlO1xuICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcDogIiArIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zm
c2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyAicHg7XG4gICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0OiAiICsgKGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wICsgc2Nyb2xsR2Fw
KGNtKSArIGRpc3BsYXkuYmFySGVpZ2h0KSArICJweDtcbiAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0OiAiICsgKGNvb3Jkcy5sZWZ0KSArICJweDsgd2lkdGg6IDJweDsiKSkKKyAgICBjbS5k
aXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3JvbGxOb2RlKQorICAgIHNjcm9sbE5vZGUu
c2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpCisgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3Zl
Q2hpbGQoc2Nyb2xsTm9kZSkKKyAgfQorfQorCisvLyBTY3JvbGwgYSBnaXZlbiBwb3NpdGlvbiBp
bnRvIHZpZXcgKGltbWVkaWF0ZWx5KSwgdmVyaWZ5aW5nIHRoYXQKKy8vIGl0IGFjdHVhbGx5IGJl
Y2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHkKKy8vIG1lYXN1cmVk
LCB0aGUgcG9zaXRpb24gb2Ygc29tZXRoaW5nIG1heSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4K
K2Z1bmN0aW9uIHNjcm9sbFBvc0ludG9WaWV3KGNtLCBwb3MsIGVuZCwgbWFyZ2luKSB7CisgIGlm
IChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSAwIH0KKyAgdmFyIGNvb3JkcworICBmb3IgKHZh
ciBsaW1pdCA9IDA7IGxpbWl0IDwgNTsgbGltaXQrKykgeworICAgIHZhciBjaGFuZ2VkID0gZmFs
c2UKKyAgICBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHBvcykKKyAgICB2YXIgZW5kQ29vcmRz
ID0gIWVuZCB8fCBlbmQgPT0gcG9zID8gY29vcmRzIDogY3Vyc29yQ29vcmRzKGNtLCBlbmQpCisg
ICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgTWF0aC5taW4oY29vcmRz
LmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hdGgubWluKGNvb3Jkcy50b3AsIGVuZENvb3Jkcy50b3ApIC0gbWFyZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoY29vcmRzLmxlZnQs
IGVuZENvb3Jkcy5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1hdGgubWF4KGNvb3Jkcy5ib3R0b20sIGVuZENvb3Jkcy5ib3R0b20pICsgbWFyZ2luKQorICAg
IHZhciBzdGFydFRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIHN0YXJ0TGVmdCA9IGNtLmRvYy5zY3Jv
bGxMZWZ0CisgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgeworICAgICAgc2V0
U2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKQorICAgICAgaWYgKE1hdGguYWJzKGNt
LmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlIH0KICAgICB9
Ci0gICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpCi0gICAgICBkaXNwbGF5Lmd1dHRlcnMu
c3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykgKyAicHgiOwotICB9Ci0KLSAgLy8gVXNlZCB0
byBlbnN1cmUgdGhhdCB0aGUgbGluZSBudW1iZXIgZ3V0dGVyIGlzIHN0aWxsIHRoZSByaWdodAot
ICAvLyBzaXplIGZvciB0aGUgY3VycmVudCBkb2N1bWVudCBzaXplLiBSZXR1cm5zIHRydWUgd2hl
biBhbiB1cGRhdGUKLSAgLy8gaXMgbmVlZGVkLgotICBmdW5jdGlvbiBtYXliZVVwZGF0ZUxpbmVO
dW1iZXJXaWR0aChjbSkgewotICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycykgcmV0dXJu
IGZhbHNlOwotICAgIHZhciBkb2MgPSBjbS5kb2MsIGxhc3QgPSBsaW5lTnVtYmVyRm9yKGNtLm9w
dGlvbnMsIGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSksIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owot
ICAgIGlmIChsYXN0Lmxlbmd0aCAhPSBkaXNwbGF5LmxpbmVOdW1DaGFycykgewotICAgICAgdmFy
IHRlc3QgPSBkaXNwbGF5Lm1lYXN1cmUuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBbZWx0KCJkaXYi
LCBsYXN0KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSk7Ci0gICAg
ICB2YXIgaW5uZXJXID0gdGVzdC5maXJzdENoaWxkLm9mZnNldFdpZHRoLCBwYWRkaW5nID0gdGVz
dC5vZmZzZXRXaWR0aCAtIGlubmVyVzsKLSAgICAgIGRpc3BsYXkubGluZUd1dHRlci5zdHlsZS53
aWR0aCA9ICIiOwotICAgICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlu
bmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxOwotICAg
ICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFk
ZGluZzsKLSAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJX
aWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7Ci0gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUu
d2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7Ci0gICAgICB1cGRhdGVHdXR0ZXJT
cGFjZShjbSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExl
ZnQgIT0gbnVsbCkgeworICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgc2Nyb2xsUG9zLnNjcm9sbExl
ZnQpCisgICAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSBzdGFydExlZnQpID4g
MSkgeyBjaGFuZ2VkID0gdHJ1ZSB9CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWNoYW5nZWQpIHsgYnJlYWsgfQogICB9Ci0KLSAgZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRp
b25zLCBpKSB7Ci0gICAgcmV0dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIo
aSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSk7CisgIHJldHVybiBjb29yZHMKK30KKworLy8g
U2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkp
LgorZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY20sIHgxLCB5MSwgeDIsIHkyKSB7CisgIHZhciBz
Y3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKQorICBpZiAo
c2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7IHNldFNjcm9sbFRvcChjbSwgc2Nyb2xsUG9z
LnNjcm9sbFRvcCkgfQorICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRT
Y3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCkgfQorfQorCisvLyBDYWxjdWxhdGUg
YSBuZXcgc2Nyb2xsIHBvc2l0aW9uIG5lZWRlZCB0byBzY3JvbGwgdGhlIGdpdmVuCisvLyByZWN0
YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmQKKy8v
IHNjcm9sbExlZnQgcHJvcGVydGllcy4gV2hlbiB0aGVzZSBhcmUgdW5kZWZpbmVkLCB0aGUKKy8v
IHZlcnRpY2FsL2hvcml6b250YWwgcG9zaXRpb24gZG9lcyBub3QgbmVlZCB0byBiZSBhZGp1c3Rl
ZC4KK2Z1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKKyAg
dmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChjbS5kaXNw
bGF5KQorICBpZiAoeTEgPCAwKSB7IHkxID0gMCB9CisgIHZhciBzY3JlZW50b3AgPSBjbS5jdXJP
cCAmJiBjbS5jdXJPcC5zY3JvbGxUb3AgIT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbFRvcCA6IGRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wCisgIHZhciBzY3JlZW4gPSBkaXNwbGF5SGVpZ2h0KGNt
KSwgcmVzdWx0ID0ge30KKyAgaWYgKHkyIC0geTEgPiBzY3JlZW4pIHsgeTIgPSB5MSArIHNjcmVl
biB9CisgIHZhciBkb2NCb3R0b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxh
eSkKKyAgdmFyIGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90
dG9tIC0gc25hcE1hcmdpbgorICBpZiAoeTEgPCBzY3JlZW50b3ApIHsKKyAgICByZXN1bHQuc2Ny
b2xsVG9wID0gYXRUb3AgPyAwIDogeTEKKyAgfSBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNj
cmVlbikgeworICAgIHZhciBuZXdUb3AgPSBNYXRoLm1pbih5MSwgKGF0Qm90dG9tID8gZG9jQm90
dG9tIDogeTIpIC0gc2NyZWVuKQorICAgIGlmIChuZXdUb3AgIT0gc2NyZWVudG9wKSB7IHJlc3Vs
dC5zY3JvbGxUb3AgPSBuZXdUb3AgfQogICB9CiAKLSAgLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3Jv
bGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLAotICAvLyBidXQg
dXNpbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IHRvIGdldCBhIHN1Yi1waXhlbC1hY2N1cmF0ZQot
ICAvLyByZXN1bHQuCi0gIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHsK
LSAgICByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0
IC0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OworICB2YXIgc2Ny
ZWVubGVmdCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbExlZnQgIT0gbnVsbCA/IGNtLmN1
ck9wLnNjcm9sbExlZnQgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQKKyAgdmFyIHNjcmVl
bncgPSBkaXNwbGF5V2lkdGgoY20pIC0gKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaXNwbGF5
Lmd1dHRlcnMub2Zmc2V0V2lkdGggOiAwKQorICB2YXIgdG9vV2lkZSA9IHgyIC0geDEgPiBzY3Jl
ZW53CisgIGlmICh0b29XaWRlKSB7IHgyID0geDEgKyBzY3JlZW53IH0KKyAgaWYgKHgxIDwgMTAp
CisgICAgeyByZXN1bHQuc2Nyb2xsTGVmdCA9IDAgfQorICBlbHNlIGlmICh4MSA8IHNjcmVlbmxl
ZnQpCisgICAgeyByZXN1bHQuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHgxIC0gKHRvb1dpZGUg
PyAwIDogMTApKSB9CisgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKQor
ICAgIHsgcmVzdWx0LnNjcm9sbExlZnQgPSB4MiArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVl
bncgfQorICByZXR1cm4gcmVzdWx0Cit9CisKKy8vIFN0b3JlIGEgcmVsYXRpdmUgYWRqdXN0bWVu
dCB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50CisvLyBvcGVyYXRpb24gKHRv
IGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS4KK2Z1bmN0aW9uIGFkZFRv
U2Nyb2xsUG9zKGNtLCBsZWZ0LCB0b3ApIHsKKyAgaWYgKGxlZnQgIT0gbnVsbCB8fCB0b3AgIT0g
bnVsbCkgeyByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pIH0KKyAgaWYgKGxlZnQgIT0gbnVsbCkKKyAg
ICB7IGNtLmN1ck9wLnNjcm9sbExlZnQgPSAoY20uY3VyT3Auc2Nyb2xsTGVmdCA9PSBudWxsID8g
Y20uZG9jLnNjcm9sbExlZnQgOiBjbS5jdXJPcC5zY3JvbGxMZWZ0KSArIGxlZnQgfQorICBpZiAo
dG9wICE9IG51bGwpCisgICAgeyBjbS5jdXJPcC5zY3JvbGxUb3AgPSAoY20uY3VyT3Auc2Nyb2xs
VG9wID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsVG9wIDogY20uY3VyT3Auc2Nyb2xsVG9wKSArIHRv
cCB9Cit9CisKKy8vIE1ha2Ugc3VyZSB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiB0
aGUgY3VycmVudCBjdXJzb3IgaXMKKy8vIHNob3duLgorZnVuY3Rpb24gZW5zdXJlQ3Vyc29yVmlz
aWJsZShjbSkgeworICByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pCisgIHZhciBjdXIgPSBjbS5nZXRD
dXJzb3IoKSwgZnJvbSA9IGN1ciwgdG8gPSBjdXIKKyAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFw
cGluZykgeworICAgIGZyb20gPSBjdXIuY2ggPyBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpIDog
Y3VyCisgICAgdG8gPSBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpCiAgIH0KLQotICAvLyBESVNQ
TEFZIERSQVdJTkcKLQotICBmdW5jdGlvbiBEaXNwbGF5VXBkYXRlKGNtLCB2aWV3cG9ydCwgZm9y
Y2UpIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0KLSAgICB0aGlzLnZpZXdwb3J0
ID0gdmlld3BvcnQ7Ci0gICAgLy8gU3RvcmUgc29tZSB2YWx1ZXMgdGhhdCB3ZSdsbCBuZWVkIGxh
dGVyIChidXQgZG9uJ3Qgd2FudCB0byBmb3JjZSBhIHJlbGF5b3V0IGZvcikKLSAgICB0aGlzLnZp
c2libGUgPSB2aXNpYmxlTGluZXMoZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7Ci0gICAgdGhp
cy5lZGl0b3JJc0hpZGRlbiA9ICFkaXNwbGF5LndyYXBwZXIub2Zmc2V0V2lkdGg7Ci0gICAgdGhp
cy53cmFwcGVySGVpZ2h0ID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICB0aGlz
LndyYXBwZXJXaWR0aCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aDsKLSAgICB0aGlzLm9s
ZERpc3BsYXlXaWR0aCA9IGRpc3BsYXlXaWR0aChjbSk7Ci0gICAgdGhpcy5mb3JjZSA9IGZvcmNl
OwotICAgIHRoaXMuZGltcyA9IGdldERpbWVuc2lvbnMoY20pOwotICAgIHRoaXMuZXZlbnRzID0g
W107CisgIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0ge2Zyb206IGZyb20sIHRvOiB0bywgbWFyZ2lu
OiBjbS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbiwgaXNDdXJzb3I6IHRydWV9Cit9CisKKy8v
IFdoZW4gYW4gb3BlcmF0aW9uIGhhcyBpdHMgc2Nyb2xsVG9Qb3MgcHJvcGVydHkgc2V0LCBhbmQg
YW5vdGhlcgorLy8gc2Nyb2xsIGFjdGlvbiBpcyBhcHBsaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRo
ZSBvcGVyYXRpb24sIHRoaXMKKy8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9u
IGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc28KKy8vIHRoYXQgdGhlIGVmZmVjdCBvZiBpbnRl
cm1lZGlhdGUgc2Nyb2xsIGNvbW1hbmRzIGlzIG5vdCBpZ25vcmVkLgorZnVuY3Rpb24gcmVzb2x2
ZVNjcm9sbFRvUG9zKGNtKSB7CisgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zCisg
IGlmIChyYW5nZSkgeworICAgIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0gbnVsbAorICAgIHZhciBm
cm9tID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLmZyb20pLCB0byA9IGVzdGltYXRlQ29vcmRz
KGNtLCByYW5nZS50bykKKyAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgTWF0
aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYXRoLm1pbihmcm9tLnRvcCwgdG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcm9tLnJpZ2h0LCB0by5yaWdodCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoZnJvbS5ib3R0b20s
IHRvLmJvdHRvbSkgKyByYW5nZS5tYXJnaW4pCisgICAgY20uc2Nyb2xsVG8oc1Bvcy5zY3JvbGxM
ZWZ0LCBzUG9zLnNjcm9sbFRvcCkKICAgfQotCi0gIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNp
Z25hbCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsKLSAgICBpZiAoaGFzSGFuZGxlcihlbWl0
dGVyLCB0eXBlKSkKLSAgICAgIHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsKLSAgfTsKLSAg
RGlzcGxheVVwZGF0ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIHNpZ25hbC5hcHBs
eShudWxsLCB0aGlzLmV2ZW50c1tpXSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gbWF5YmVDbGlwU2Ny
b2xsYmFycyhjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBpZiAoIWRp
c3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgJiYgZGlzcGxheS5zY3JvbGxlci5vZmZzZXRXaWR0aCkg
ewotICAgICAgZGlzcGxheS5uYXRpdmVCYXJXaWR0aCA9IGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0
V2lkdGggLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOwotICAgICAgZGlzcGxheS5oZWln
aHRGb3JjZXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsR2FwKGNtKSArICJweCI7Ci0gICAgICBkaXNw
bGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsg
InB4IjsKLSAgICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9IHNjcm9s
bEdhcChjbSkgKyAicHgiOwotICAgICAgZGlzcGxheS5zY3JvbGxiYXJzQ2xpcHBlZCA9IHRydWU7
Ci0gICAgfQorfQorCisvLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgYSBzZXJpZXMgb2Yg
Y2hhbmdlcyB0byB0aGUgZWRpdG9yCisvLyBzdGF0ZSBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaCBj
aGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlCisvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdo
aWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZAorLy8gZXJyb3ItcHJvbmUpLiBJbnN0ZWFk
LCBkaXNwbGF5IHVwZGF0ZXMgYXJlIGJhdGNoZWQgYW5kIHRoZW4gYWxsCisvLyBjb21iaW5lZCBh
bmQgZXhlY3V0ZWQgYXQgb25jZS4KKwordmFyIG5leHRPcElkID0gMAorLy8gU3RhcnQgYSBuZXcg
b3BlcmF0aW9uLgorZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24oY20pIHsKKyAgY20uY3VyT3AgPSB7
CisgICAgY206IGNtLAorICAgIHZpZXdDaGFuZ2VkOiBmYWxzZSwgICAgICAvLyBGbGFnIHRoYXQg
aW5kaWNhdGVzIHRoYXQgbGluZXMgbWlnaHQgbmVlZCB0byBiZSByZWRyYXduCisgICAgc3RhcnRI
ZWlnaHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVzZWQgdG8gZGV0ZWN0IG5lZWQgdG8gdXBkYXRlIHNj
cm9sbGJhcgorICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEg
cmVkcmF3CisgICAgdXBkYXRlSW5wdXQ6IG51bGwsICAgICAgIC8vIFdoZXRoZXIgdG8gcmVzZXQg
dGhlIGlucHV0IHRleHRhcmVhCisgICAgdHlwaW5nOiBmYWxzZSwgICAgICAgICAgIC8vIFdoZXRo
ZXIgdGhpcyByZXNldCBzaG91bGQgYmUgY2FyZWZ1bCB0byBsZWF2ZSBleGlzdGluZyB0ZXh0IChm
b3IgY29tcG9zaXRpbmcpCisgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxh
dGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50cworICAgIGN1cnNvckFjdGl2aXR5
SGFuZGxlcnM6IG51bGwsIC8vIFNldCBvZiBoYW5kbGVycyB0byBmaXJlIGN1cnNvckFjdGl2aXR5
IG9uCisgICAgY3Vyc29yQWN0aXZpdHlDYWxsZWQ6IDAsIC8vIFRyYWNrcyB3aGljaCBjdXJzb3JB
Y3Rpdml0eSBoYW5kbGVycyBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkKKyAgICBzZWxlY3Rpb25D
aGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJh
d24KKyAgICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVzdCBs
aW5lIG5lZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldworICAgIHNjcm9sbExlZnQ6IG51bGwsIHNj
cm9sbFRvcDogbnVsbCwgLy8gSW50ZXJtZWRpYXRlIHNjcm9sbCBwb3NpdGlvbiwgbm90IHB1c2hl
ZCB0byBET00geWV0CisgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Ny
b2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24KKyAgICBmb2N1czogZmFsc2UsCisgICAgaWQ6ICsr
bmV4dE9wSWQgICAgICAgICAgIC8vIFVuaXF1ZSBJRAorICB9CisgIHB1c2hPcGVyYXRpb24oY20u
Y3VyT3ApCit9CisKKy8vIEZpbmlzaCBhbiBvcGVyYXRpb24sIHVwZGF0aW5nIHRoZSBkaXNwbGF5
IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRzCitmdW5jdGlvbiBlbmRPcGVyYXRpb24oY20p
IHsKKyAgdmFyIG9wID0gY20uY3VyT3AKKyAgZmluaXNoT3BlcmF0aW9uKG9wLCBmdW5jdGlvbiAo
Z3JvdXApIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm9wcy5sZW5ndGg7IGkrKykK
KyAgICAgIHsgZ3JvdXAub3BzW2ldLmNtLmN1ck9wID0gbnVsbCB9CisgICAgZW5kT3BlcmF0aW9u
cyhncm91cCkKKyAgfSkKK30KKworLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVy
YXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KKy8vIHRoYXQgdGhlIG1pbmltdW0gbnVtYmVy
IG9mIHJlbGF5b3V0cyBhcmUgcmVxdWlyZWQuCitmdW5jdGlvbiBlbmRPcGVyYXRpb25zKGdyb3Vw
KSB7CisgIHZhciBvcHMgPSBncm91cC5vcHMKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVu
Z3RoOyBpKyspIC8vIFJlYWQgRE9NCisgICAgeyBlbmRPcGVyYXRpb25fUjEob3BzW2ldKSB9Cisg
IGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IG9wcy5sZW5ndGg7IGkkMSsrKSAvLyBXcml0ZSBET00g
KG1heWJlKQorICAgIHsgZW5kT3BlcmF0aW9uX1cxKG9wc1tpJDFdKSB9CisgIGZvciAodmFyIGkk
MiA9IDA7IGkkMiA8IG9wcy5sZW5ndGg7IGkkMisrKSAvLyBSZWFkIERPTQorICAgIHsgZW5kT3Bl
cmF0aW9uX1IyKG9wc1tpJDJdKSB9CisgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG9wcy5sZW5n
dGg7IGkkMysrKSAvLyBXcml0ZSBET00gKG1heWJlKQorICAgIHsgZW5kT3BlcmF0aW9uX1cyKG9w
c1tpJDNdKSB9CisgIGZvciAodmFyIGkkNCA9IDA7IGkkNCA8IG9wcy5sZW5ndGg7IGkkNCsrKSAv
LyBSZWFkIERPTQorICAgIHsgZW5kT3BlcmF0aW9uX2ZpbmlzaChvcHNbaSQ0XSkgfQorfQorCitm
dW5jdGlvbiBlbmRPcGVyYXRpb25fUjEob3ApIHsKKyAgdmFyIGNtID0gb3AuY20sIGRpc3BsYXkg
PSBjbS5kaXNwbGF5CisgIG1heWJlQ2xpcFNjcm9sbGJhcnMoY20pCisgIGlmIChvcC51cGRhdGVN
YXhMaW5lKSB7IGZpbmRNYXhMaW5lKGNtKSB9CisKKyAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdD
aGFuZ2VkIHx8IG9wLmZvcmNlVXBkYXRlIHx8IG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8CisgICAg
b3Auc2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8IGRpc3BsYXkudmll
d0Zyb20gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+
PSBkaXNwbGF5LnZpZXdUbykgfHwKKyAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9w
dGlvbnMubGluZVdyYXBwaW5nCisgIG9wLnVwZGF0ZSA9IG9wLm11c3RVcGRhdGUgJiYKKyAgICBu
ZXcgRGlzcGxheVVwZGF0ZShjbSwgb3AubXVzdFVwZGF0ZSAmJiB7dG9wOiBvcC5zY3JvbGxUb3As
IGVuc3VyZTogb3Auc2Nyb2xsVG9Qb3N9LCBvcC5mb3JjZVVwZGF0ZSkKK30KKworZnVuY3Rpb24g
ZW5kT3BlcmF0aW9uX1cxKG9wKSB7CisgIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3AubXVzdFVwZGF0
ZSAmJiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSkKK30KKworZnVuY3Rp
b24gZW5kT3BlcmF0aW9uX1IyKG9wKSB7CisgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20u
ZGlzcGxheQorICBpZiAob3AudXBkYXRlZERpc3BsYXkpIHsgdXBkYXRlSGVpZ2h0c0luVmlld3Bv
cnQoY20pIH0KKworICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pCisK
KyAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQs
IG1lYXN1cmUgaXQsCisgIC8vIGFuZCBlbnN1cmUgdGhlIGRvY3VtZW50J3Mgd2lkdGggbWF0Y2hl
cyBpdC4KKyAgLy8gdXBkYXRlRGlzcGxheV9XMiB3aWxsIHVzZSB0aGVzZSBwcm9wZXJ0aWVzIHRv
IGRvIHRoZSBhY3R1YWwgcmVzaXppbmcKKyAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYg
IWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CisgICAgb3AuYWRqdXN0V2lkdGhUbyA9IG1lYXN1
cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50ZXh0Lmxlbmd0aCku
bGVmdCArIDMKKyAgICBjbS5kaXNwbGF5LnNpemVyV2lkdGggPSBvcC5hZGp1c3RXaWR0aFRvCisg
ICAgb3AuYmFyTWVhc3VyZS5zY3JvbGxXaWR0aCA9CisgICAgICBNYXRoLm1heChkaXNwbGF5LnNj
cm9sbGVyLmNsaWVudFdpZHRoLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RX
aWR0aFRvICsgc2Nyb2xsR2FwKGNtKSArIGNtLmRpc3BsYXkuYmFyV2lkdGgpCisgICAgb3AubWF4
U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG9wLmFk
anVzdFdpZHRoVG8gLSBkaXNwbGF5V2lkdGgoY20pKQogICB9CiAKLSAgLy8gRG9lcyB0aGUgYWN0
dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dAotICAvLyAocmV0dXJu
aW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlz
Ci0gIC8vIGZhbHNlLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0
ZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOworICBpZiAo
b3AudXBkYXRlZERpc3BsYXkgfHwgb3Auc2VsZWN0aW9uQ2hhbmdlZCkKKyAgICB7IG9wLnByZXBh
cmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKG9wLmZvY3VzKSB9
Cit9CiAKLSAgICBpZiAodXBkYXRlLmVkaXRvcklzSGlkZGVuKSB7Ci0gICAgICByZXNldFZpZXco
Y20pOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KK2Z1bmN0aW9uIGVuZE9wZXJhdGlvbl9X
MihvcCkgeworICB2YXIgY20gPSBvcC5jbQogCi0gICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2li
bGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCi0gICAgaWYg
KCF1cGRhdGUuZm9yY2UgJiYKLSAgICAgICAgdXBkYXRlLnZpc2libGUuZnJvbSA+PSBkaXNwbGF5
LnZpZXdGcm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGRpc3BsYXkudmlld1RvICYmCi0gICAg
ICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVM
aW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykgJiYKLSAgICAgICAgZGlzcGxheS5yZW5kZXJl
ZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmIGNvdW50RGlydHlWaWV3KGNtKSA9PSAwKQotICAgICAg
cmV0dXJuIGZhbHNlOworICBpZiAob3AuYWRqdXN0V2lkdGhUbyAhPSBudWxsKSB7CisgICAgY20u
ZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG9wLmFkanVzdFdpZHRoVG8gKyAicHgiCisg
ICAgaWYgKG9wLm1heFNjcm9sbExlZnQgPCBjbS5kb2Muc2Nyb2xsTGVmdCkKKyAgICAgIHsgc2V0
U2Nyb2xsTGVmdChjbSwgTWF0aC5taW4oY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LCBv
cC5tYXhTY3JvbGxMZWZ0KSwgdHJ1ZSkgfQorICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQg
PSBmYWxzZQorICB9CiAKLSAgICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKSB7
Ci0gICAgICByZXNldFZpZXcoY20pOwotICAgICAgdXBkYXRlLmRpbXMgPSBnZXREaW1lbnNpb25z
KGNtKTsKLSAgICB9CisgIHZhciB0YWtlRm9jdXMgPSBvcC5mb2N1cyAmJiBvcC5mb2N1cyA9PSBh
Y3RpdmVFbHQoKSAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkp
CisgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbikKKyAgICB7IGNtLmRpc3BsYXkuaW5wdXQuc2hv
d1NlbGVjdGlvbihvcC5wcmVwYXJlZFNlbGVjdGlvbiwgdGFrZUZvY3VzKSB9CisgIGlmIChvcC51
cGRhdGVkRGlzcGxheSB8fCBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KQorICAgIHsg
dXBkYXRlU2Nyb2xsYmFycyhjbSwgb3AuYmFyTWVhc3VyZSkgfQorICBpZiAob3AudXBkYXRlZERp
c3BsYXkpCisgICAgeyBzZXREb2N1bWVudEhlaWdodChjbSwgb3AuYmFyTWVhc3VyZSkgfQogCi0g
ICAgLy8gQ29tcHV0ZSBhIHN1aXRhYmxlIG5ldyB2aWV3cG9ydCAoZnJvbSAmIHRvKQotICAgIHZh
ciBlbmQgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZTsKLSAgICB2YXIgZnJvbSA9IE1hdGgubWF4KHVw
ZGF0ZS52aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3Qp
OwotICAgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRp
b25zLnZpZXdwb3J0TWFyZ2luKTsKLSAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA8IGZyb20gJiYg
ZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwg
ZGlzcGxheS52aWV3RnJvbSk7Ci0gICAgaWYgKGRpc3BsYXkudmlld1RvID4gdG8gJiYgZGlzcGxh
eS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxheS52aWV3VG8pOwot
ICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewotICAgICAgZnJvbSA9IHZpc3VhbExpbmVObyhj
bS5kb2MsIGZyb20pOwotICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0byk7Ci0g
ICAgfQorICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgeyByZXN0YXJ0QmxpbmsoY20pIH0KIAot
ICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3BsYXkudmlld0Zyb20gfHwgdG8gIT0gZGlz
cGxheS52aWV3VG8gfHwKLSAgICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgIT0gdXBkYXRlLndy
YXBwZXJIZWlnaHQgfHwgZGlzcGxheS5sYXN0V3JhcFdpZHRoICE9IHVwZGF0ZS53cmFwcGVyV2lk
dGg7Ci0gICAgYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pOwotCi0gICAgZGlzcGxheS52aWV3T2Zm
c2V0ID0gaGVpZ2h0QXRMaW5lKGdldExpbmUoY20uZG9jLCBkaXNwbGF5LnZpZXdGcm9tKSk7Ci0g
ICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBjdXJyZW50IHNj
cm9sbCBwb3NpdGlvbgotICAgIGNtLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0gZGlzcGxheS52
aWV3T2Zmc2V0ICsgInB4IjsKLQotICAgIHZhciB0b1VwZGF0ZSA9IGNvdW50RGlydHlWaWV3KGNt
KTsKLSAgICBpZiAoIWRpZmZlcmVudCAmJiB0b1VwZGF0ZSA9PSAwICYmICF1cGRhdGUuZm9yY2Ug
JiYgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmCi0gICAgICAgIChkaXNw
bGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVy
cyA+PSBkaXNwbGF5LnZpZXdUbykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Ig
YmlnIGNoYW5nZXMsIHdlIGhpZGUgdGhlIGVuY2xvc2luZyBlbGVtZW50IGR1cmluZyB0aGUKLSAg
ICAvLyB1cGRhdGUsIHNpbmNlIHRoYXQgc3BlZWRzIHVwIHRoZSBvcGVyYXRpb25zIG9uIG1vc3Qg
YnJvd3NlcnMuCi0gICAgdmFyIGZvY3VzZWQgPSBhY3RpdmVFbHQoKTsKLSAgICBpZiAodG9VcGRh
dGUgPiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICBwYXRj
aERpc3BsYXkoY20sIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMsIHVwZGF0ZS5kaW1zKTsKLSAg
ICBpZiAodG9VcGRhdGUgPiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwot
ICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID0gZGlzcGxheS52aWV3OwotICAgIC8vIFRoZXJlIG1p
Z2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290Ci0g
ICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LgotICAgIGlmIChmb2N1
c2VkICYmIGFjdGl2ZUVsdCgpICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZzZXRIZWlnaHQpIGZv
Y3VzZWQuZm9jdXMoKTsKLQotICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZy
b20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc2Nyb2xsCi0gICAgLy8gd2lkdGggYW5kIGhlaWdodC4K
LSAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LmN1cnNvckRpdik7Ci0gICAgcmVtb3ZlQ2hpbGRy
ZW4oZGlzcGxheS5zZWxlY3Rpb25EaXYpOwotICAgIGRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWln
aHQgPSBkaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IDA7Ci0KLSAgICBpZiAoZGlmZmVy
ZW50KSB7Ci0gICAgICBkaXNwbGF5Lmxhc3RXcmFwSGVpZ2h0ID0gdXBkYXRlLndyYXBwZXJIZWln
aHQ7Ci0gICAgICBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggPSB1cGRhdGUud3JhcHBlcldpZHRoOwot
ICAgICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7Ci0gICAgfQorICBpZiAoY20uc3RhdGUuZm9jdXNl
ZCAmJiBvcC51cGRhdGVJbnB1dCkKKyAgICB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQob3AudHlw
aW5nKSB9CisgIGlmICh0YWtlRm9jdXMpIHsgZW5zdXJlRm9jdXMob3AuY20pIH0KK30KIAotICAg
IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBudWxsOworZnVuY3Rpb24gZW5kT3BlcmF0aW9u
X2ZpbmlzaChvcCkgeworICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRv
YyA9IGNtLmRvYwogCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KKyAgaWYgKG9wLnVwZGF0ZWREaXNw
bGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpIH0KIAotICBmdW5jdGlvbiBw
b3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7Ci0gICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRl
LnZpZXdwb3J0OwotICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsK
LSAgICAgIGlmICghZmlyc3QgfHwgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nIHx8IHVwZGF0ZS5v
bGREaXNwbGF5V2lkdGggPT0gZGlzcGxheVdpZHRoKGNtKSkgewotICAgICAgICAvLyBDbGlwIGZv
cmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgotICAgICAgICBpZiAodmll
d3BvcnQgJiYgdmlld3BvcnQudG9wICE9IG51bGwpCi0gICAgICAgICAgdmlld3BvcnQgPSB7dG9w
OiBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkgLSBkaXNw
bGF5SGVpZ2h0KGNtKSwgdmlld3BvcnQudG9wKX07Ci0gICAgICAgIC8vIFVwZGF0ZWQgbGluZSBo
ZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3QKLSAgICAgICAgLy8gYWN0
dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4K
LSAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9j
LCB2aWV3cG9ydCk7Ci0gICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRpc3Bs
YXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pCi0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJZk5lZWRl
ZChjbSwgdXBkYXRlKSkgYnJlYWs7Ci0gICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7
Ci0gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKLSAgICAg
IHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVh
c3VyZSk7Ci0gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKLSAgICB9Cisg
IC8vIEFib3J0IG1vdXNlIHdoZWVsIGRlbHRhIG1lYXN1cmVtZW50LCB3aGVuIHNjcm9sbGluZyBl
eHBsaWNpdGx5CisgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51bGwgJiYgKG9wLnNjcm9s
bFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBvcC5zY3JvbGxUb1Bvcykp
CisgICAgeyBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVlbFN0YXJ0WSA9IG51bGwg
fQogCi0gICAgdXBkYXRlLnNpZ25hbChjbSwgInVwZGF0ZSIsIGNtKTsKLSAgICBpZiAoY20uZGlz
cGxheS52aWV3RnJvbSAhPSBjbS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20gfHwgY20uZGlzcGxh
eS52aWV3VG8gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbykgewotICAgICAgdXBkYXRlLnNp
Z25hbChjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRp
c3BsYXkudmlld1RvKTsKLSAgICAgIGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbSA9IGNtLmRp
c3BsYXkudmlld0Zyb207IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8gPSBjbS5kaXNwbGF5LnZp
ZXdUbzsKLSAgICB9CisgIC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBh
Y3R1YWwgRE9NIHNjcm9sbGVyCisgIGlmIChvcC5zY3JvbGxUb3AgIT0gbnVsbCAmJiAoZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gb3Auc2Nyb2xsVG9wIHx8IG9wLmZvcmNlU2Nyb2xsKSkg
eworICAgIGRvYy5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbEhlaWdodCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCBvcC5zY3Jv
bGxUb3ApKQorICAgIGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZG9jLnNjcm9sbFRv
cCkKKyAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IGRvYy5zY3JvbGxUb3AKICAgfQot
Ci0gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHZpZXdwb3J0KSB7Ci0gICAgdmFy
IHVwZGF0ZSA9IG5ldyBEaXNwbGF5VXBkYXRlKGNtLCB2aWV3cG9ydCk7Ci0gICAgaWYgKHVwZGF0
ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkgewotICAgICAgdXBkYXRlSGVpZ2h0c0luVmll
d3BvcnQoY20pOwotICAgICAgcG9zdFVwZGF0ZURpc3BsYXkoY20sIHVwZGF0ZSk7Ci0gICAgICB2
YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKLSAgICAgIHVwZGF0ZVNl
bGVjdGlvbihjbSk7Ci0gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7Ci0g
ICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKLSAgICAgIHVwZGF0ZS5maW5p
c2goKTsKLSAgICB9CisgIGlmIChvcC5zY3JvbGxMZWZ0ICE9IG51bGwgJiYgKGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsTGVmdCAhPSBvcC5zY3JvbGxMZWZ0IHx8IG9wLmZvcmNlU2Nyb2xsKSkgewor
ICAgIGRvYy5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxl
ci5zY3JvbGxXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsIG9wLnNjcm9sbExl
ZnQpKQorICAgIGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGRvYy5zY3JvbGxMZWZ0
KQorICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IGRvYy5zY3JvbGxMZWZ0CisgICAg
YWxpZ25Ib3Jpem9udGFsbHkoY20pCiAgIH0KLQotICBmdW5jdGlvbiBzZXREb2N1bWVudEhlaWdo
dChjbSwgbWVhc3VyZSkgewotICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0g
bWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOwotICAgIHZhciB0b3RhbCA9IG1lYXN1cmUuZG9jSGVp
Z2h0ICsgY20uZGlzcGxheS5iYXJIZWlnaHQ7Ci0gICAgY20uZGlzcGxheS5oZWlnaHRGb3JjZXIu
c3R5bGUudG9wID0gdG90YWwgKyAicHgiOwotICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5o
ZWlnaHQgPSBNYXRoLm1heCh0b3RhbCArIHNjcm9sbEdhcChjbSksIG1lYXN1cmUuY2xpZW50SGVp
Z2h0KSArICJweCI7Ci0gIH0KLQotICAvLyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0aGUg
cmVuZGVyZWQgbGluZXMsIGFuZCB1cGRhdGUgdGhlaXIKLSAgLy8gc3RvcmVkIGhlaWdodHMgdG8g
bWF0Y2guCi0gIGZ1bmN0aW9uIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKSB7Ci0gICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5l
RGl2Lm9mZnNldFRvcDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXkudmlldy5sZW5n
dGg7IGkrKykgewotICAgICAgdmFyIGN1ciA9IGRpc3BsYXkudmlld1tpXSwgaGVpZ2h0OwotICAg
ICAgaWYgKGN1ci5oaWRkZW4pIGNvbnRpbnVlOwotICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24g
PCA4KSB7Ci0gICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5v
ZmZzZXRIZWlnaHQ7Ci0gICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207Ci0gICAgICAg
IHByZXZCb3R0b20gPSBib3Q7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgYm94ID0gY3Vy
Lm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgIGhlaWdodCA9IGJveC5ib3R0
b20gLSBib3gudG9wOwotICAgICAgfQotICAgICAgdmFyIGRpZmYgPSBjdXIubGluZS5oZWlnaHQg
LSBoZWlnaHQ7Ci0gICAgICBpZiAoaGVpZ2h0IDwgMikgaGVpZ2h0ID0gdGV4dEhlaWdodChkaXNw
bGF5KTsKLSAgICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZmIDwgLS4wMDEpIHsKLSAgICAgICAg
dXBkYXRlTGluZUhlaWdodChjdXIubGluZSwgaGVpZ2h0KTsKLSAgICAgICAgdXBkYXRlV2lkZ2V0
SGVpZ2h0KGN1ci5saW5lKTsKLSAgICAgICAgaWYgKGN1ci5yZXN0KSBmb3IgKHZhciBqID0gMDsg
aiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisrKQotICAgICAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChj
dXIucmVzdFtqXSk7Ci0gICAgICB9Ci0gICAgfQorICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBh
IHNwZWNpZmljIHBvc2l0aW9uIGludG8gdmlldywgZG8gc28uCisgIGlmIChvcC5zY3JvbGxUb1Bv
cykgeworICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhkb2Ms
IG9wLnNjcm9sbFRvUG9zLmZyb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGlwUG9zKGRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJnaW4p
CisgICAgaWYgKG9wLnNjcm9sbFRvUG9zLmlzQ3Vyc29yICYmIGNtLnN0YXRlLmZvY3VzZWQpIHsg
bWF5YmVTY3JvbGxXaW5kb3coY20sIGNvb3JkcykgfQogICB9CiAKLSAgLy8gUmVhZCBhbmQgc3Rv
cmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAvLyBn
aXZlbiBsaW5lLgotICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkgewotICAgIGlm
IChsaW5lLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsg
KytpKQotICAgICAgbGluZS53aWRnZXRzW2ldLmhlaWdodCA9IGxpbmUud2lkZ2V0c1tpXS5ub2Rl
Lm9mZnNldEhlaWdodDsKKyAgLy8gRmlyZSBldmVudHMgZm9yIG1hcmtlcnMgdGhhdCBhcmUgaGlk
ZGVuL3VuaWRkZW4gYnkgZWRpdGluZyBvcgorICAvLyB1bmRvaW5nCisgIHZhciBoaWRkZW4gPSBv
cC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnMK
KyAgaWYgKGhpZGRlbikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlbi5sZW5ndGg7ICsraSkK
KyAgICB7IGlmICghaGlkZGVuW2ldLmxpbmVzLmxlbmd0aCkgeyBzaWduYWwoaGlkZGVuW2ldLCAi
aGlkZSIpIH0gfSB9CisgIGlmICh1bmhpZGRlbikgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB1
bmhpZGRlbi5sZW5ndGg7ICsraSQxKQorICAgIHsgaWYgKHVuaGlkZGVuW2kkMV0ubGluZXMubGVu
Z3RoKSB7IHNpZ25hbCh1bmhpZGRlbltpJDFdLCAidW5oaWRlIikgfSB9IH0KKworICBpZiAoZGlz
cGxheS53cmFwcGVyLm9mZnNldEhlaWdodCkKKyAgICB7IGRvYy5zY3JvbGxUb3AgPSBjbS5kaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcCB9CisKKyAgLy8gRmlyZSBjaGFuZ2UgZXZlbnRzLCBhbmQg
ZGVsYXllZCBldmVudCBoYW5kbGVycworICBpZiAob3AuY2hhbmdlT2JqcykKKyAgICB7IHNpZ25h
bChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hhbmdlT2JqcykgfQorICBpZiAob3AudXBkYXRlKQor
ICAgIHsgb3AudXBkYXRlLmZpbmlzaCgpIH0KK30KKworLy8gUnVuIHRoZSBnaXZlbiBmdW5jdGlv
biBpbiBhbiBvcGVyYXRpb24KK2Z1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKKyAgaWYgKGNtLmN1
ck9wKSB7IHJldHVybiBmKCkgfQorICBzdGFydE9wZXJhdGlvbihjbSkKKyAgdHJ5IHsgcmV0dXJu
IGYoKSB9CisgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pIH0KK30KKy8vIFdyYXBzIGEgZnVu
Y3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLgorZnVu
Y3Rpb24gb3BlcmF0aW9uKGNtLCBmKSB7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICBpZiAo
Y20uY3VyT3ApIHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfQorICAgIHN0YXJ0T3Bl
cmF0aW9uKGNtKQorICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KGNtLCBhcmd1bWVudHMpIH0KKyAg
ICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKSB9CiAgIH0KLQotICAvLyBEbyBhIGJ1bGstcmVh
ZCBvZiB0aGUgRE9NIHBvc2l0aW9ucyBhbmQgc2l6ZXMgbmVlZGVkIHRvIGRyYXcgdGhlCi0gIC8v
IHZpZXcsIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJsZWF2ZSByZWFkaW5nIGFuZCB3cml0aW5nIHRv
IHRoZSBET00uCi0gIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20pIHsKLSAgICB2YXIgZCA9IGNt
LmRpc3BsYXksIGxlZnQgPSB7fSwgd2lkdGggPSB7fTsKLSAgICB2YXIgZ3V0dGVyTGVmdCA9IGQu
Z3V0dGVycy5jbGllbnRMZWZ0OwotICAgIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGls
ZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKLSAgICAgIGxlZnRbY20ub3B0
aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0TGVmdCArIG4uY2xpZW50TGVmdCArIGd1dHRlckxl
ZnQ7Ci0gICAgICB3aWR0aFtjbS5vcHRpb25zLmd1dHRlcnNbaV1dID0gbi5jbGllbnRXaWR0aDsK
LSAgICB9Ci0gICAgcmV0dXJuIHtmaXhlZFBvczogY29tcGVuc2F0ZUZvckhTY3JvbGwoZCksCi0g
ICAgICAgICAgICBndXR0ZXJUb3RhbFdpZHRoOiBkLmd1dHRlcnMub2Zmc2V0V2lkdGgsCi0gICAg
ICAgICAgICBndXR0ZXJMZWZ0OiBsZWZ0LAotICAgICAgICAgICAgZ3V0dGVyV2lkdGg6IHdpZHRo
LAotICAgICAgICAgICAgd3JhcHBlcldpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGh9OwotICB9
Ci0KLSAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3BsYXkgRE9NIHN0cnVjdHVyZSB3aXRoIGRpc3Bs
YXkudmlldywgcmVtb3ZpbmcKLSAgLy8gbm9kZXMgZm9yIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdl
ciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9uZXMKLSAgLy8gdGhhdCBhcmUgbm90IHRoZXJl
IHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRoYXQgYXJlIG91dCBvZgotICAvLyBkYXRlLgot
ICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVwZGF0ZU51bWJlcnNGcm9tLCBkaW1zKSB7Ci0g
ICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGlu
ZU51bWJlcnM7Ci0gICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGluZURpdiwgY3VyID0gY29u
dGFpbmVyLmZpcnN0Q2hpbGQ7Ci0KLSAgICBmdW5jdGlvbiBybShub2RlKSB7Ci0gICAgICB2YXIg
bmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICAvLyBXb3JrcyBhcm91bmQgYSB0aHJvdy1z
Y3JvbGwgYnVnIGluIE9TIFggV2Via2l0Ci0gICAgICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5k
aXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2RlKQotICAgICAgICBub2RlLnN0eWxlLmRp
c3BsYXkgPSAibm9uZSI7Ci0gICAgICBlbHNlCi0gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChub2RlKTsKLSAgICAgIHJldHVybiBuZXh0OwotICAgIH0KLQotICAgIHZhciB2aWV3
ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRpc3BsYXkudmlld0Zyb207Ci0gICAgLy8gTG9vcCBv
dmVyIHRoZSBlbGVtZW50cyBpbiB0aGUgdmlldywgc3luY2luZyBjdXIgKHRoZSBET00gbm9kZXMK
LSAgICAvLyBpbiBkaXNwbGF5LmxpbmVEaXYpIHdpdGggdGhlIHZpZXcgYXMgd2UgZ28uCi0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgbGluZVZp
ZXcgPSB2aWV3W2ldOwotICAgICAgaWYgKGxpbmVWaWV3LmhpZGRlbikgewotICAgICAgfSBlbHNl
IGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFp
bmVyKSB7IC8vIE5vdCBkcmF3biB5ZXQKLSAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVt
ZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwotICAgICAgICBjb250YWluZXIuaW5zZXJ0
QmVmb3JlKG5vZGUsIGN1cik7Ci0gICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCi0gICAg
ICAgIHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgY3VyID0gcm0oY3VyKTsKLSAgICAgICAg
dmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51
bGwgJiYKLSAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmlldy5s
aW5lTnVtYmVyOwotICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykgewotICAgICAgICAgIGlm
IChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsICJndXR0ZXIiKSA+IC0xKSB1cGRhdGVOdW1iZXIg
PSBmYWxzZTsKLSAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxp
bmVOLCBkaW1zKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7Ci0gICAg
ICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7Ci0gICAgICAgICAgbGlu
ZVZpZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5l
TnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpOwotICAgICAgICB9Ci0gICAgICAgIGN1ciA9
IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICB9Ci0gICAgICBsaW5lTiArPSBsaW5l
Vmlldy5zaXplOworfQorLy8gVXNlZCB0byBhZGQgbWV0aG9kcyB0byBlZGl0b3IgYW5kIGRvYyBp
bnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW4KKy8vIG9wZXJhdGlvbnMuCitmdW5jdGlvbiBtZXRo
b2RPcChmKSB7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5jdXJPcCkgeyBy
ZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0KKyAgICBzdGFydE9wZXJhdGlvbih0aGlz
KQorICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfQorICAgIGZpbmFs
bHkgeyBlbmRPcGVyYXRpb24odGhpcykgfQorICB9Cit9CitmdW5jdGlvbiBkb2NNZXRob2RPcChm
KSB7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgY20gPSB0aGlzLmNtCisgICAgaWYg
KCFjbSB8fCBjbS5jdXJPcCkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0KKyAg
ICBzdGFydE9wZXJhdGlvbihjbSkKKyAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1
bWVudHMpIH0KKyAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKSB9CisgIH0KK30KKworLy8g
VXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5n
ZSB0byB0aGUKKy8vIGRvY3VtZW50LiBGcm9tIGFuZCB0byBhcmUgaW4gcHJlLWNoYW5nZSBjb29y
ZGluYXRlcy4gTGVuZGlmZiBpcworLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBhZGRlZCBvciBzdWJ0
cmFjdGVkIGJ5IHRoZSBjaGFuZ2UuIFRoaXMgaXMKKy8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBz
cGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheQorLy8gbGluZXMgYXJlIGRpdmlk
ZWQgaW50byB2aXN1YWwgbGluZXMuIHJlZ0xpbmVDaGFuZ2UgKGJlbG93KQorLy8gcmVnaXN0ZXJz
IHNpbmdsZS1saW5lIGNoYW5nZXMuCitmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBs
ZW5kaWZmKSB7CisgIGlmIChmcm9tID09IG51bGwpIHsgZnJvbSA9IGNtLmRvYy5maXJzdCB9Cisg
IGlmICh0byA9PSBudWxsKSB7IHRvID0gY20uZG9jLmZpcnN0ICsgY20uZG9jLnNpemUgfQorICBp
ZiAoIWxlbmRpZmYpIHsgbGVuZGlmZiA9IDAgfQorCisgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eQorICBpZiAobGVuZGlmZiAmJiB0byA8IGRpc3BsYXkudmlld1RvICYmCisgICAgICAoZGlzcGxh
eS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMg
PiBmcm9tKSkKKyAgICB7IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tIH0KKworICBj
bS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWUKKworICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdU
bykgeyAvLyBDaGFuZ2UgYWZ0ZXIKKyAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFs
TGluZU5vKGNtLmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKKyAgICAgIHsgcmVzZXRWaWV3
KGNtKSB9CisgIH0gZWxzZSBpZiAodG8gPD0gZGlzcGxheS52aWV3RnJvbSkgeyAvLyBDaGFuZ2Ug
YmVmb3JlCisgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5k
b2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7CisgICAgICByZXNldFZpZXco
Y20pCisgICAgfSBlbHNlIHsKKyAgICAgIGRpc3BsYXkudmlld0Zyb20gKz0gbGVuZGlmZgorICAg
ICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZgogICAgIH0KLSAgICB3aGlsZSAoY3VyKSBjdXIg
PSBybShjdXIpOwotICB9Ci0KLSAgLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMs
IGEgc3RyaW5nIGlzIGFkZGVkIHRvCi0gIC8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMgdXBkYXRl
cyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgbGluZSdzCi0gIC8vIERPTSBzdHJ1Y3R1cmUuCi0g
IGZ1bmN0aW9uIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMp
IHsKLSAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKysp
IHsKLSAgICAgIHZhciB0eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKLSAgICAgIGlmICh0eXBl
ID09ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwg
ZGltcyk7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2Vz
KGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVX
aWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7CisgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5
LnZpZXdGcm9tICYmIHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEZ1bGwgb3ZlcmxhcAorICAg
IHJlc2V0VmlldyhjbSkKKyAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20pIHsg
Ly8gVG9wIG92ZXJsYXAKKyAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRv
ICsgbGVuZGlmZiwgMSkKKyAgICBpZiAoY3V0KSB7CisgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNw
bGF5LnZpZXcuc2xpY2UoY3V0LmluZGV4KQorICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGN1dC5s
aW5lTgorICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZgorICAgIH0gZWxzZSB7CisgICAg
ICByZXNldFZpZXcoY20pCiAgICAgfQotICAgIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsOwotICB9
Ci0KLSAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNrZ3Jv
dW5kIGNsYXNzIG5lZWQgdG8KLSAgLy8gYmUgd3JhcHBlZCwgYW5kIGhhdmUgdGhlIGV4dHJhIGVs
ZW1lbnRzIGFkZGVkIHRvIHRoZSB3cmFwcGVyIGRpdgotICBmdW5jdGlvbiBlbnN1cmVMaW5lV3Jh
cHBlZChsaW5lVmlldykgewotICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVWaWV3LnRleHQp
IHsKLSAgICAgIGxpbmVWaWV3Lm5vZGUgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlv
bjogcmVsYXRpdmUiKTsKLSAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpCi0gICAg
ICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwg
bGluZVZpZXcudGV4dCk7Ci0gICAgICBsaW5lVmlldy5ub2RlLmFwcGVuZENoaWxkKGxpbmVWaWV3
LnRleHQpOwotICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSBsaW5lVmlldy5ub2RlLnN0
eWxlLnpJbmRleCA9IDI7CisgIH0gZWxzZSBpZiAodG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8g
Qm90dG9tIG92ZXJsYXAKKyAgICB2YXIgY3V0JDEgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9t
LCBmcm9tLCAtMSkKKyAgICBpZiAoY3V0JDEpIHsKKyAgICAgIGRpc3BsYXkudmlldyA9IGRpc3Bs
YXkudmlldy5zbGljZSgwLCBjdXQkMS5pbmRleCkKKyAgICAgIGRpc3BsYXkudmlld1RvID0gY3V0
JDEubGluZU4KKyAgICB9IGVsc2UgeworICAgICAgcmVzZXRWaWV3KGNtKQogICAgIH0KLSAgICBy
ZXR1cm4gbGluZVZpZXcubm9kZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3Jv
dW5kKGxpbmVWaWV3KSB7Ci0gICAgdmFyIGNscyA9IGxpbmVWaWV3LmJnQ2xhc3MgPyBsaW5lVmll
dy5iZ0NsYXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5lVmll
dy5saW5lLmJnQ2xhc3M7Ci0gICAgaWYgKGNscykgY2xzICs9ICIgQ29kZU1pcnJvci1saW5lYmFj
a2dyb3VuZCI7Ci0gICAgaWYgKGxpbmVWaWV3LmJhY2tncm91bmQpIHsKLSAgICAgIGlmIChjbHMp
IGxpbmVWaWV3LmJhY2tncm91bmQuY2xhc3NOYW1lID0gY2xzOwotICAgICAgZWxzZSB7IGxpbmVW
aWV3LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5k
KTsgbGluZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH0KLSAgICB9IGVsc2UgaWYgKGNscykgewot
ICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7Ci0gICAgICBsaW5l
Vmlldy5iYWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCBjbHMp
LCB3cmFwLmZpcnN0Q2hpbGQpOworICB9IGVsc2UgeyAvLyBHYXAgaW4gdGhlIG1pZGRsZQorICAg
IHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSkKKyAgICB2
YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSkKKyAg
ICBpZiAoY3V0VG9wICYmIGN1dEJvdCkgeworICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52
aWV3LnNsaWNlKDAsIGN1dFRvcC5pbmRleCkKKyAgICAgICAgLmNvbmNhdChidWlsZFZpZXdBcnJh
eShjbSwgY3V0VG9wLmxpbmVOLCBjdXRCb3QubGluZU4pKQorICAgICAgICAuY29uY2F0KGRpc3Bs
YXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKQorICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVu
ZGlmZgorICAgIH0gZWxzZSB7CisgICAgICByZXNldFZpZXcoY20pCiAgICAgfQogICB9CiAKLSAg
Ly8gV3JhcHBlciBhcm91bmQgYnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBz
dHJ1Y3R1cmUKLSAgLy8gaW4gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUu
Ci0gIGZ1bmN0aW9uIGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldykgewotICAgIHZhciBleHQg
PSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCAmJiBleHQubGluZSA9
PSBsaW5lVmlldy5saW5lKSB7Ci0gICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBu
dWxsOwotICAgICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlOwotICAgICAgcmV0dXJu
IGV4dC5idWlsdDsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVW
aWV3KTsKLSAgfQotCi0gIC8vIFJlZHJhdyB0aGUgbGluZSdzIHRleHQuIEludGVyYWN0cyB3aXRo
IHRoZSBiYWNrZ3JvdW5kIGFuZCB0ZXh0Ci0gIC8vIGNsYXNzZXMgYmVjYXVzZSB0aGUgbW9kZSBt
YXkgb3V0cHV0IHRva2VucyB0aGF0IGluZmx1ZW5jZSB0aGVzZQotICAvLyBjbGFzc2VzLgotICBm
dW5jdGlvbiB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpIHsKLSAgICB2YXIgY2xzID0gbGlu
ZVZpZXcudGV4dC5jbGFzc05hbWU7Ci0gICAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20s
IGxpbmVWaWV3KTsKLSAgICBpZiAobGluZVZpZXcudGV4dCA9PSBsaW5lVmlldy5ub2RlKSBsaW5l
Vmlldy5ub2RlID0gYnVpbHQucHJlOwotICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQoYnVpbHQucHJlLCBsaW5lVmlldy50ZXh0KTsKLSAgICBsaW5lVmlldy50ZXh0ID0g
YnVpbHQucHJlOwotICAgIGlmIChidWlsdC5iZ0NsYXNzICE9IGxpbmVWaWV3LmJnQ2xhc3MgfHwg
YnVpbHQudGV4dENsYXNzICE9IGxpbmVWaWV3LnRleHRDbGFzcykgewotICAgICAgbGluZVZpZXcu
YmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7Ci0gICAgICBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWls
dC50ZXh0Q2xhc3M7Ci0gICAgICB1cGRhdGVMaW5lQ2xhc3NlcyhsaW5lVmlldyk7Ci0gICAgfSBl
bHNlIGlmIChjbHMpIHsKLSAgICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gY2xzOworICB2
YXIgZXh0ID0gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkCisgIGlmIChleHQpIHsKKyAgICBpZiAo
dG8gPCBleHQubGluZU4pCisgICAgICB7IGV4dC5saW5lTiArPSBsZW5kaWZmIH0KKyAgICBlbHNl
IGlmIChmcm9tIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCisgICAgICB7IGRpc3BsYXkuZXh0ZXJu
YWxNZWFzdXJlZCA9IG51bGwgfQorICB9Cit9CisKKy8vIFJlZ2lzdGVyIGEgY2hhbmdlIHRvIGEg
c2luZ2xlIGxpbmUuIFR5cGUgbXVzdCBiZSBvbmUgb2YgInRleHQiLAorLy8gImd1dHRlciIsICJj
bGFzcyIsICJ3aWRnZXQiCitmdW5jdGlvbiByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lLCB0eXBlKSB7
CisgIGNtLmN1ck9wLnZpZXdDaGFuZ2VkID0gdHJ1ZQorICB2YXIgZGlzcGxheSA9IGNtLmRpc3Bs
YXksIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZAorICBpZiAoZXh0ICYmIGxpbmUg
Pj0gZXh0LmxpbmVOICYmIGxpbmUgPCBleHQubGluZU4gKyBleHQuc2l6ZSkKKyAgICB7IGRpc3Bs
YXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGwgfQorCisgIGlmIChsaW5lIDwgZGlzcGxheS52aWV3
RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9CisgIHZhciBsaW5lVmll
dyA9IGRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lKV0KKyAgaWYgKGxpbmVWaWV3
Lm5vZGUgPT0gbnVsbCkgeyByZXR1cm4gfQorICB2YXIgYXJyID0gbGluZVZpZXcuY2hhbmdlcyB8
fCAobGluZVZpZXcuY2hhbmdlcyA9IFtdKQorICBpZiAoaW5kZXhPZihhcnIsIHR5cGUpID09IC0x
KSB7IGFyci5wdXNoKHR5cGUpIH0KK30KKworLy8gQ2xlYXIgdGhlIHZpZXcuCitmdW5jdGlvbiBy
ZXNldFZpZXcoY20pIHsKKyAgY20uZGlzcGxheS52aWV3RnJvbSA9IGNtLmRpc3BsYXkudmlld1Rv
ID0gY20uZG9jLmZpcnN0CisgIGNtLmRpc3BsYXkudmlldyA9IFtdCisgIGNtLmRpc3BsYXkudmll
d09mZnNldCA9IDAKK30KKworZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3
TiwgZGlyKSB7CisgIHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBkaWZmLCB2
aWV3ID0gY20uZGlzcGxheS52aWV3CisgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMgfHwgbmV3TiA9
PSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZSkKKyAgICB7IHJldHVybiB7aW5kZXg6IGluZGV4
LCBsaW5lTjogbmV3Tn0gfQorICB2YXIgbiA9IGNtLmRpc3BsYXkudmlld0Zyb20KKyAgZm9yICh2
YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQorICAgIHsgbiArPSB2aWV3W2ldLnNpemUgfQorICBp
ZiAobiAhPSBvbGROKSB7CisgICAgaWYgKGRpciA+IDApIHsKKyAgICAgIGlmIChpbmRleCA9PSB2
aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfQorICAgICAgZGlmZiA9IChuICsgdmlld1tp
bmRleF0uc2l6ZSkgLSBvbGROCisgICAgICBpbmRleCsrCisgICAgfSBlbHNlIHsKKyAgICAgIGRp
ZmYgPSBuIC0gb2xkTgogICAgIH0KKyAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZgogICB9
Ci0KLSAgZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcpIHsKLSAgICB1cGRhdGVM
aW5lQmFja2dyb3VuZChsaW5lVmlldyk7Ci0gICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNz
KQotICAgICAgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3
LmxpbmUud3JhcENsYXNzOwotICAgIGVsc2UgaWYgKGxpbmVWaWV3Lm5vZGUgIT0gbGluZVZpZXcu
dGV4dCkKLSAgICAgIGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gIiI7Ci0gICAgdmFyIHRleHRD
bGFzcyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/IGxpbmVWaWV3LnRleHRDbGFzcyArICIgIiArIChs
aW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzczsK
LSAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IHRleHRDbGFzcyB8fCAiIjsKKyAgd2hpbGUg
KHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHsKKyAgICBpZiAoaW5kZXggPT0g
KGRpciA8IDAgPyAwIDogdmlldy5sZW5ndGggLSAxKSkgeyByZXR1cm4gbnVsbCB9CisgICAgbmV3
TiArPSBkaXIgKiB2aWV3W2luZGV4IC0gKGRpciA8IDAgPyAxIDogMCldLnNpemUKKyAgICBpbmRl
eCArPSBkaXIKICAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3
LCBsaW5lTiwgZGltcykgewotICAgIGlmIChsaW5lVmlldy5ndXR0ZXIpIHsKLSAgICAgIGxpbmVW
aWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyKTsKLSAgICAgIGxpbmVWaWV3Lmd1
dHRlciA9IG51bGw7Ci0gICAgfQotICAgIGlmIChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKSB7
Ci0gICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91
bmQpOwotICAgICAgbGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCA9IG51bGw7Ci0gICAgfQotICAg
IGlmIChsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzKSB7Ci0gICAgICB2YXIgd3JhcCA9IGVuc3Vy
ZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKLSAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQg
PSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kICIgKyBsaW5l
Vmlldy5saW5lLmd1dHRlckNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibGVmdDogIiArIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZGltcy5maXhlZFBvcyA6
IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInB4OyB3aWR0aDogIiArIGRpbXMuZ3V0dGVyVG90YWxXaWR0aCArICJweCIpOwot
ICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZp
ZXcudGV4dCk7Ci0gICAgfQotICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJN
YXJrZXJzOwotICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKLSAg
ICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOwotICAgICAgdmFyIGd1
dHRlcldyYXAgPSBsaW5lVmlldy5ndXR0ZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LWd1dHRlci13cmFwcGVyIiwgImxlZnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9z
IDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5w
dXQuc2V0VW5lZGl0YWJsZShndXR0ZXJXcmFwKTsKLSAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGd1
dHRlcldyYXAsIGxpbmVWaWV3LnRleHQpOwotICAgICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVy
Q2xhc3MpCi0gICAgICAgIGd1dHRlcldyYXAuY2xhc3NOYW1lICs9ICIgIiArIGxpbmVWaWV3Lmxp
bmUuZ3V0dGVyQ2xhc3M7Ci0gICAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAoIW1h
cmtlcnMgfHwgIW1hcmtlcnNbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSkpCi0gICAgICAgIGxp
bmVWaWV3LmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKAotICAgICAgICAgIGVs
dCgiZGl2IiwgbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTiksCi0gICAgICAgICAgICAg
ICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwKLSAgICAgICAg
ICAgICAgImxlZnQ6ICIgKyBkaW1zLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMi
XSArICJweDsgd2lkdGg6ICIKLSAgICAgICAgICAgICAgKyBjbS5kaXNwbGF5LmxpbmVOdW1Jbm5l
cldpZHRoICsgInB4IikpOwotICAgICAgaWYgKG1hcmtlcnMpIGZvciAodmFyIGsgPSAwOyBrIDwg
Y20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytrKSB7Ci0gICAgICAgIHZhciBpZCA9IGNtLm9w
dGlvbnMuZ3V0dGVyc1trXSwgZm91bmQgPSBtYXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBt
YXJrZXJzW2lkXTsKLSAgICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgIGd1dHRlcldyYXAuYXBw
ZW5kQ2hpbGQoZWx0KCJkaXYiLCBbZm91bmRdLCAiQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwgImxl
ZnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMuZ3V0dGVy
TGVmdFtpZF0gKyAicHg7IHdpZHRoOiAiICsgZGltcy5ndXR0ZXJXaWR0aFtpZF0gKyAicHgiKSk7
Ci0gICAgICB9Ci0gICAgfQorICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059Cit9
CisKKy8vIEZvcmNlIHRoZSB2aWV3IHRvIGNvdmVyIGEgZ2l2ZW4gcmFuZ2UsIGFkZGluZyBlbXB0
eSB2aWV3IGVsZW1lbnQKKy8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRl
ZC4KK2Z1bmN0aW9uIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7CisgIHZhciBkaXNwbGF5ID0g
Y20uZGlzcGxheSwgdmlldyA9IGRpc3BsYXkudmlldworICBpZiAodmlldy5sZW5ndGggPT0gMCB8
fCBmcm9tID49IGRpc3BsYXkudmlld1RvIHx8IHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsKKyAg
ICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pCisgICAgZGlzcGxh
eS52aWV3RnJvbSA9IGZyb20KKyAgfSBlbHNlIHsKKyAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA+
IGZyb20pCisgICAgICB7IGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCBk
aXNwbGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52aWV3KSB9CisgICAgZWxzZSBpZiAoZGlz
cGxheS52aWV3RnJvbSA8IGZyb20pCisgICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmll
dy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSkgfQorICAgIGRpc3BsYXkudmlld0Zyb20g
PSBmcm9tCisgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pCisgICAgICB7IGRpc3BsYXkudmll
dyA9IGRpc3BsYXkudmlldy5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGRpc3BsYXkudmlld1Rv
LCB0bykpIH0KKyAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvKQorICAgICAgeyBkaXNw
bGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgZmluZFZpZXdJbmRleChjbSwgdG8pKSB9
CiAgIH0KLQotICBmdW5jdGlvbiB1cGRhdGVMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMp
IHsKLSAgICBpZiAobGluZVZpZXcuYWxpZ25hYmxlKSBsaW5lVmlldy5hbGlnbmFibGUgPSBudWxs
OwotICAgIGZvciAodmFyIG5vZGUgPSBsaW5lVmlldy5ub2RlLmZpcnN0Q2hpbGQsIG5leHQ7IG5v
ZGU7IG5vZGUgPSBuZXh0KSB7Ci0gICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7Ci0g
ICAgICBpZiAobm9kZS5jbGFzc05hbWUgPT0gIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpCi0gICAg
ICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgfQotICAgIGluc2VydExp
bmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7Ci0gIH0KLQotICAvLyBCdWlsZCBhIGxpbmUn
cyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoCi0gIGZ1bmN0aW9uIGJ1aWxkTGluZUVs
ZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgewotICAgIHZhciBidWlsdCA9IGdldExp
bmVDb250ZW50KGNtLCBsaW5lVmlldyk7Ci0gICAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5v
ZGUgPSBidWlsdC5wcmU7Ci0gICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIGxpbmVWaWV3LmJnQ2xhc3Mg
PSBidWlsdC5iZ0NsYXNzOwotICAgIGlmIChidWlsdC50ZXh0Q2xhc3MpIGxpbmVWaWV3LnRleHRD
bGFzcyA9IGJ1aWx0LnRleHRDbGFzczsKLQotICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3
KTsKLSAgICB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwotICAg
IGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7Ci0gICAgcmV0dXJuIGxpbmVW
aWV3Lm5vZGU7Ci0gIH0KLQotICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxv
Z2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5Ci0gIC8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3
aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLgotICBmdW5jdGlvbiBpbnNl
cnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpIHsKLSAgICBpbnNlcnRMaW5lV2lkZ2V0
c0ZvcihjbSwgbGluZVZpZXcubGluZSwgbGluZVZpZXcsIGRpbXMsIHRydWUpOwotICAgIGlmIChs
aW5lVmlldy5yZXN0KSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBp
KyspCi0gICAgICBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcucmVzdFtpXSwgbGlu
ZVZpZXcsIGRpbXMsIGZhbHNlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGluc2VydExpbmVXaWRnZXRz
Rm9yKGNtLCBsaW5lLCBsaW5lVmlldywgZGltcywgYWxsb3dBYm92ZSkgewotICAgIGlmICghbGlu
ZS53aWRnZXRzKSByZXR1cm47Ci0gICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5l
Vmlldyk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVu
Z3RoOyArK2kpIHsKLSAgICAgIHZhciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2Iiwg
W3dpZGdldC5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpOwotICAgICAgaWYgKCF3aWRn
ZXQuaGFuZGxlTW91c2VFdmVudHMpIG5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRz
IiwgInRydWUiKTsKLSAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVW
aWV3LCBkaW1zKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShub2RlKTsK
LSAgICAgIGlmIChhbGxvd0Fib3ZlICYmIHdpZGdldC5hYm92ZSkKLSAgICAgICAgd3JhcC5pbnNl
cnRCZWZvcmUobm9kZSwgbGluZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOwotICAgICAg
ZWxzZQotICAgICAgICB3cmFwLmFwcGVuZENoaWxkKG5vZGUpOwotICAgICAgc2lnbmFsTGF0ZXIo
d2lkZ2V0LCAicmVkcmF3Iik7Ci0gICAgfQorICBkaXNwbGF5LnZpZXdUbyA9IHRvCit9CisKKy8v
IENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2Vu
dGF0aW9uIGlzCisvLyBvdXQgb2YgZGF0ZSAob3Igbm9uZXhpc3RlbnQpLgorZnVuY3Rpb24gY291
bnREaXJ0eVZpZXcoY20pIHsKKyAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0g
MAorICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbGlu
ZVZpZXcgPSB2aWV3W2ldCisgICAgaWYgKCFsaW5lVmlldy5oaWRkZW4gJiYgKCFsaW5lVmlldy5u
b2RlIHx8IGxpbmVWaWV3LmNoYW5nZXMpKSB7ICsrZGlydHkgfQogICB9Ci0KLSAgZnVuY3Rpb24g
cG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpIHsKLSAgICBp
ZiAod2lkZ2V0Lm5vSFNjcm9sbCkgewotICAgICAgKGxpbmVWaWV3LmFsaWduYWJsZSB8fCAobGlu
ZVZpZXcuYWxpZ25hYmxlID0gW10pKS5wdXNoKG5vZGUpOwotICAgICAgdmFyIHdpZHRoID0gZGlt
cy53cmFwcGVyV2lkdGg7Ci0gICAgICBub2RlLnN0eWxlLmxlZnQgPSBkaW1zLmZpeGVkUG9zICsg
InB4IjsKLSAgICAgIGlmICghd2lkZ2V0LmNvdmVyR3V0dGVyKSB7Ci0gICAgICAgIHdpZHRoIC09
IGRpbXMuZ3V0dGVyVG90YWxXaWR0aDsKLSAgICAgICAgbm9kZS5zdHlsZS5wYWRkaW5nTGVmdCA9
IGRpbXMuZ3V0dGVyVG90YWxXaWR0aCArICJweCI7Ci0gICAgICB9Ci0gICAgICBub2RlLnN0eWxl
LndpZHRoID0gd2lkdGggKyAicHgiOworICByZXR1cm4gZGlydHkKK30KKworLy8gSElHSExJR0hU
IFdPUktFUgorCitmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkgeworICBpZiAoY20uZG9j
Lm1vZGUuc3RhcnRTdGF0ZSAmJiBjbS5kb2MuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbykK
KyAgICB7IGNtLnN0YXRlLmhpZ2hsaWdodC5zZXQodGltZSwgYmluZChoaWdobGlnaHRXb3JrZXIs
IGNtKSkgfQorfQorCitmdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoY20pIHsKKyAgdmFyIGRvYyA9
IGNtLmRvYworICBpZiAoZG9jLmZyb250aWVyIDwgZG9jLmZpcnN0KSB7IGRvYy5mcm9udGllciA9
IGRvYy5maXJzdCB9CisgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52aWV3VG8pIHsg
cmV0dXJuIH0KKyAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWUKKyAg
dmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0ZUJlZm9yZShjbSwgZG9jLmZy
b250aWVyKSkKKyAgdmFyIGNoYW5nZWRMaW5lcyA9IFtdCisKKyAgZG9jLml0ZXIoZG9jLmZyb250
aWVyLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1
MDApLCBmdW5jdGlvbiAobGluZSkgeworICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxh
eS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlCisgICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHls
ZXMsIHRvb0xvbmcgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRM
ZW5ndGgKKyAgICAgIHZhciBoaWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHRv
b0xvbmcgPyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IHN0YXRlLCB0cnVlKQorICAgICAg
bGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXMKKyAgICAgIHZhciBvbGRDbHMgPSBsaW5l
LnN0eWxlQ2xhc3NlcywgbmV3Q2xzID0gaGlnaGxpZ2h0ZWQuY2xhc3NlcworICAgICAgaWYgKG5l
d0NscykgeyBsaW5lLnN0eWxlQ2xhc3NlcyA9IG5ld0NscyB9CisgICAgICBlbHNlIGlmIChvbGRD
bHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsIH0KKyAgICAgIHZhciBpc2NoYW5nZSA9ICFv
bGRTdHlsZXMgfHwgb2xkU3R5bGVzLmxlbmd0aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGggfHwKKyAg
ICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5i
Z0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRl
eHRDbGFzcykKKyAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxl
cy5sZW5ndGg7ICsraSkgeyBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tp
XSB9CisgICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goZG9jLmZyb250aWVy
KSB9CisgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSB0b29Mb25nID8gc3RhdGUgOiBjb3B5U3RhdGUo
ZG9jLm1vZGUsIHN0YXRlKQorICAgIH0gZWxzZSB7CisgICAgICBpZiAobGluZS50ZXh0Lmxlbmd0
aCA8PSBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCkKKyAgICAgICAgeyBwcm9jZXNzTGlu
ZShjbSwgbGluZS50ZXh0LCBzdGF0ZSkgfQorICAgICAgbGluZS5zdGF0ZUFmdGVyID0gZG9jLmZy
b250aWVyICUgNSA9PSAwID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsCiAgICAg
fQotICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpIHsKLSAgICAgIG5vZGUuc3R5bGUuekluZGV4
ID0gNTsKLSAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgICAgaWYg
KCF3aWRnZXQubm9IU2Nyb2xsKSBub2RlLnN0eWxlLm1hcmdpbkxlZnQgPSAtZGltcy5ndXR0ZXJU
b3RhbFdpZHRoICsgInB4IjsKKyAgICArK2RvYy5mcm9udGllcgorICAgIGlmICgrbmV3IERhdGUg
PiBlbmQpIHsKKyAgICAgIHN0YXJ0V29ya2VyKGNtLCBjbS5vcHRpb25zLndvcmtEZWxheSkKKyAg
ICAgIHJldHVybiB0cnVlCiAgICAgfQorICB9KQorICBpZiAoY2hhbmdlZExpbmVzLmxlbmd0aCkg
eyBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFu
Z2VkTGluZXMubGVuZ3RoOyBpKyspCisgICAgICB7IHJlZ0xpbmVDaGFuZ2UoY20sIGNoYW5nZWRM
aW5lc1tpXSwgInRleHQiKSB9CisgIH0pIH0KK30KKworLy8gRElTUExBWSBEUkFXSU5HCisKK3Zh
ciBEaXNwbGF5VXBkYXRlID0gZnVuY3Rpb24oY20sIHZpZXdwb3J0LCBmb3JjZSkgeworICB2YXIg
ZGlzcGxheSA9IGNtLmRpc3BsYXkKKworICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQKKyAgLy8g
U3RvcmUgc29tZSB2YWx1ZXMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyIChidXQgZG9uJ3Qgd2FudCB0
byBmb3JjZSBhIHJlbGF5b3V0IGZvcikKKyAgdGhpcy52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRp
c3BsYXksIGNtLmRvYywgdmlld3BvcnQpCisgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxh
eS53cmFwcGVyLm9mZnNldFdpZHRoCisgIHRoaXMud3JhcHBlckhlaWdodCA9IGRpc3BsYXkud3Jh
cHBlci5jbGllbnRIZWlnaHQKKyAgdGhpcy53cmFwcGVyV2lkdGggPSBkaXNwbGF5LndyYXBwZXIu
Y2xpZW50V2lkdGgKKyAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pCisg
IHRoaXMuZm9yY2UgPSBmb3JjZQorICB0aGlzLmRpbXMgPSBnZXREaW1lbnNpb25zKGNtKQorICB0
aGlzLmV2ZW50cyA9IFtdCit9OworCitEaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5zaWduYWwgPSBm
dW5jdGlvbiAoZW1pdHRlciwgdHlwZSkgeworICBpZiAoaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBl
KSkKKyAgICB7IHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKSB9Cit9OworRGlzcGxheVVwZGF0
ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gKCkgeworICAgIHZhciB0aGlzJDEgPSB0aGlz
OworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ldmVudHMubGVuZ3RoOyBpKyspCisgICAg
eyBzaWduYWwuYXBwbHkobnVsbCwgdGhpcyQxLmV2ZW50c1tpXSkgfQorfTsKKworZnVuY3Rpb24g
bWF5YmVDbGlwU2Nyb2xsYmFycyhjbSkgeworICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXkKKyAg
aWYgKCFkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkICYmIGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0
V2lkdGgpIHsKKyAgICBkaXNwbGF5Lm5hdGl2ZUJhcldpZHRoID0gZGlzcGxheS5zY3JvbGxlci5v
ZmZzZXRXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgKKyAgICBkaXNwbGF5Lmhl
aWdodEZvcmNlci5zdHlsZS5oZWlnaHQgPSBzY3JvbGxHYXAoY20pICsgInB4IgorICAgIGRpc3Bs
YXkuc2l6ZXIuc3R5bGUubWFyZ2luQm90dG9tID0gLWRpc3BsYXkubmF0aXZlQmFyV2lkdGggKyAi
cHgiCisgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2Fw
KGNtKSArICJweCIKKyAgICBkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkID0gdHJ1ZQogICB9Cit9
CiAKLSAgLy8gUE9TSVRJT04gT0JKRUNUCi0KLSAgLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50
cyBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC4KLSAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9z
ID0gZnVuY3Rpb24obGluZSwgY2gpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkg
cmV0dXJuIG5ldyBQb3MobGluZSwgY2gpOwotICAgIHRoaXMubGluZSA9IGxpbmU7IHRoaXMuY2gg
PSBjaDsKLSAgfTsKKy8vIERvZXMgdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0aGUgbGluZSBkaXNw
bGF5LiBCYWlscyBvdXQKKy8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMgbm90aGlu
ZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXMKKy8vIGZhbHNlLgorZnVuY3Rpb24gdXBkYXRlRGlz
cGxheUlmTmVlZGVkKGNtLCB1cGRhdGUpIHsKKyAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBk
b2MgPSBjbS5kb2MKIAotICAvLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHJldHVybiAwIGlmIHRo
ZXkgYXJlIHRoZSBzYW1lLCBhIG5lZ2F0aXZlCi0gIC8vIG51bWJlciB3aGVuIGEgaXMgbGVzcywg
YW5kIGEgcG9zaXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgdmFyIGNtcCA9IENvZGVNaXJyb3Iu
Y21wUG9zID0gZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYS5saW5lIC0gYi5saW5lIHx8IGEuY2gg
LSBiLmNoOyB9OworICBpZiAodXBkYXRlLmVkaXRvcklzSGlkZGVuKSB7CisgICAgcmVzZXRWaWV3
KGNtKQorICAgIHJldHVybiBmYWxzZQorICB9CiAKLSAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0
dXJuIFBvcyh4LmxpbmUsIHguY2gpO30KLSAgZnVuY3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJu
IGNtcChhLCBiKSA8IDAgPyBiIDogYTsgfQotICBmdW5jdGlvbiBtaW5Qb3MoYSwgYikgeyByZXR1
cm4gY21wKGEsIGIpIDwgMCA/IGEgOiBiOyB9CisgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxl
IGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLgorICBpZiAoIXVw
ZGF0ZS5mb3JjZSAmJgorICAgICAgdXBkYXRlLnZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdG
cm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGRpc3BsYXkudmlld1RvICYmCisgICAgICAoZGlz
cGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJl
cnMgPj0gZGlzcGxheS52aWV3VG8pICYmCisgICAgICBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBk
aXNwbGF5LnZpZXcgJiYgY291bnREaXJ0eVZpZXcoY20pID09IDApCisgICAgeyByZXR1cm4gZmFs
c2UgfQogCi0gIC8vIElOUFVUIEhBTkRMSU5HCisgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJX
aWR0aChjbSkpIHsKKyAgICByZXNldFZpZXcoY20pCisgICAgdXBkYXRlLmRpbXMgPSBnZXREaW1l
bnNpb25zKGNtKQorICB9CiAKLSAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsKLSAgICBpZiAo
IWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNt
KTsgfQorICAvLyBDb21wdXRlIGEgc3VpdGFibGUgbmV3IHZpZXdwb3J0IChmcm9tICYgdG8pCisg
IHZhciBlbmQgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZQorICB2YXIgZnJvbSA9IE1hdGgubWF4KHVw
ZGF0ZS52aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3Qp
CisgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRpb25z
LnZpZXdwb3J0TWFyZ2luKQorICBpZiAoZGlzcGxheS52aWV3RnJvbSA8IGZyb20gJiYgZnJvbSAt
IGRpc3BsYXkudmlld0Zyb20gPCAyMCkgeyBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNw
bGF5LnZpZXdGcm9tKSB9CisgIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvICYmIGRpc3BsYXkudmll
d1RvIC0gdG8gPCAyMCkgeyB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxheS52aWV3VG8pIH0KKyAg
aWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7CisgICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2Ms
IGZyb20pCisgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0bykKICAgfQogCi0gIGZ1
bmN0aW9uIGlzUmVhZE9ubHkoY20pIHsKLSAgICByZXR1cm4gY20ub3B0aW9ucy5yZWFkT25seSB8
fCBjbS5kb2MuY2FudEVkaXQ7CisgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3BsYXkudmll
d0Zyb20gfHwgdG8gIT0gZGlzcGxheS52aWV3VG8gfHwKKyAgICBkaXNwbGF5Lmxhc3RXcmFwSGVp
Z2h0ICE9IHVwZGF0ZS53cmFwcGVySGVpZ2h0IHx8IGRpc3BsYXkubGFzdFdyYXBXaWR0aCAhPSB1
cGRhdGUud3JhcHBlcldpZHRoCisgIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKQorCisgIGRpc3Bs
YXkudmlld09mZnNldCA9IGhlaWdodEF0TGluZShnZXRMaW5lKGNtLmRvYywgZGlzcGxheS52aWV3
RnJvbSkpCisgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3Vy
cmVudCBzY3JvbGwgcG9zaXRpb24KKyAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNw
bGF5LnZpZXdPZmZzZXQgKyAicHgiCisKKyAgdmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXco
Y20pCisgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAgJiYgIXVwZGF0ZS5mb3JjZSAm
JiBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBkaXNwbGF5LnZpZXcgJiYKKyAgICAgIChkaXNwbGF5
LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+
PSBkaXNwbGF5LnZpZXdUbykpCisgICAgeyByZXR1cm4gZmFsc2UgfQorCisgIC8vIEZvciBiaWcg
Y2hhbmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQorICAvLyB1
cGRhdGUsIHNpbmNlIHRoYXQgc3BlZWRzIHVwIHRoZSBvcGVyYXRpb25zIG9uIG1vc3QgYnJvd3Nl
cnMuCisgIHZhciBmb2N1c2VkID0gYWN0aXZlRWx0KCkKKyAgaWYgKHRvVXBkYXRlID4gNCkgeyBk
aXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIiB9CisgIHBhdGNoRGlzcGxheShj
bSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywgdXBkYXRlLmRpbXMpCisgIGlmICh0b1VwZGF0
ZSA+IDQpIHsgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIiB9CisgIGRpc3BsYXku
cmVuZGVyZWRWaWV3ID0gZGlzcGxheS52aWV3CisgIC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBh
IHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290CisgIC8vIGhpZGRlbiBvciB1
cGRhdGVkLCBpZiBzbyByZS1mb2N1cyBpdC4KKyAgaWYgKGZvY3VzZWQgJiYgYWN0aXZlRWx0KCkg
IT0gZm9jdXNlZCAmJiBmb2N1c2VkLm9mZnNldEhlaWdodCkgeyBmb2N1c2VkLmZvY3VzKCkgfQor
CisgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZyb20gaW50ZXJmZXJpbmcgd2l0
aCB0aGUgc2Nyb2xsCisgIC8vIHdpZHRoIGFuZCBoZWlnaHQuCisgIHJlbW92ZUNoaWxkcmVuKGRp
c3BsYXkuY3Vyc29yRGl2KQorICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LnNlbGVjdGlvbkRpdikK
KyAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWlu
SGVpZ2h0ID0gMAorCisgIGlmIChkaWZmZXJlbnQpIHsKKyAgICBkaXNwbGF5Lmxhc3RXcmFwSGVp
Z2h0ID0gdXBkYXRlLndyYXBwZXJIZWlnaHQKKyAgICBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggPSB1
cGRhdGUud3JhcHBlcldpZHRoCisgICAgc3RhcnRXb3JrZXIoY20sIDQwMCkKICAgfQogCi0gIC8v
IFRoaXMgd2lsbCBiZSBzZXQgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGVuIGNvcHlpbmcsIHNv
IHRoYXQsCi0gIC8vIHdoZW4gcGFzdGluZywgd2Uga25vdyB3aGF0IGtpbmQgb2Ygc2VsZWN0aW9u
cyB0aGUgY29waWVkIHRleHQKLSAgLy8gd2FzIG1hZGUgb3V0IG9mLgotICB2YXIgbGFzdENvcGll
ZCA9IG51bGw7CisgIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBudWxsCiAKLSAgZnVuY3Rp
b24gYXBwbHlUZXh0SW5wdXQoY20sIGluc2VydGVkLCBkZWxldGVkLCBzZWwsIG9yaWdpbikgewot
ICAgIHZhciBkb2MgPSBjbS5kb2M7Ci0gICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOwotICAg
IGlmICghc2VsKSBzZWwgPSBkb2Muc2VsOworICByZXR1cm4gdHJ1ZQorfQogCi0gICAgdmFyIHBh
c3RlID0gY20uc3RhdGUucGFzdGVJbmNvbWluZyB8fCBvcmlnaW4gPT0gInBhc3RlIjsKLSAgICB2
YXIgdGV4dExpbmVzID0gZG9jLnNwbGl0TGluZXMoaW5zZXJ0ZWQpLCBtdWx0aVBhc3RlID0gbnVs
bDsKLSAgICAvLyBXaGVuIHBhc2luZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQg
b25lIGxpbmUgcGVyIHNlbGVjdGlvbgotICAgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0
aCA+IDEpIHsKLSAgICAgIGlmIChsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQuam9pbigiXG4iKSA9
PSBpbnNlcnRlZCkgewotICAgICAgICBpZiAoc2VsLnJhbmdlcy5sZW5ndGggJSBsYXN0Q29waWVk
Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgbXVsdGlQYXN0ZSA9IFtdOwotICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGFzdENvcGllZC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG11
bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkW2ldKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0gZWxzZSBpZiAodGV4dExpbmVzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCkg
ewotICAgICAgICBtdWx0aVBhc3RlID0gbWFwKHRleHRMaW5lcywgZnVuY3Rpb24obCkgeyByZXR1
cm4gW2xdOyB9KTsKLSAgICAgIH0KLSAgICB9CitmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShj
bSwgdXBkYXRlKSB7CisgIHZhciB2aWV3cG9ydCA9IHVwZGF0ZS52aWV3cG9ydAogCi0gICAgLy8g
Tm9ybWFsIGJlaGF2aW9yIGlzIHRvIGluc2VydCB0aGUgbmV3IHRleHQgaW50byBldmVyeSBzZWxl
Y3Rpb24KLSAgICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkgewotICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKLSAgICAgIHZhciBmcm9tID0g
cmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7Ci0gICAgICBpZiAocmFuZ2UuZW1wdHkoKSkg
ewotICAgICAgICBpZiAoZGVsZXRlZCAmJiBkZWxldGVkID4gMCkgLy8gSGFuZGxlIGRlbGV0aW9u
Ci0gICAgICAgICAgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSBkZWxldGVkKTsKLSAg
ICAgICAgZWxzZSBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmICFwYXN0ZSkgLy8gSGFuZGxlIG92
ZXJ3cml0ZQotICAgICAgICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9j
LCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsK
LSAgICAgIH0KLSAgICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0Owot
ICAgICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQ
YXN0ZSA/IG11bHRpUGFzdGVbaSAlIG11bHRpUGFzdGUubGVuZ3RoXSA6IHRleHRMaW5lcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IG9yaWdpbiB8fCAocGFzdGUgPyAicGFzdGUi
IDogY20uc3RhdGUuY3V0SW5jb21pbmcgPyAiY3V0IiA6ICIraW5wdXQiKX07Ci0gICAgICBtYWtl
Q2hhbmdlKGNtLmRvYywgY2hhbmdlRXZlbnQpOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1
dFJlYWQiLCBjbSwgY2hhbmdlRXZlbnQpOwotICAgIH0KLSAgICBpZiAoaW5zZXJ0ZWQgJiYgIXBh
c3RlKQotICAgICAgdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCk7Ci0KLSAgICBlbnN1cmVD
dXJzb3JWaXNpYmxlKGNtKTsKLSAgICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0
OwotICAgIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7Ci0gICAgY20uc3RhdGUucGFzdGVJbmNvbWlu
ZyA9IGNtLnN0YXRlLmN1dEluY29taW5nID0gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5k
bGVQYXN0ZShlLCBjbSkgewotICAgIHZhciBwYXN0ZWQgPSBlLmNsaXBib2FyZERhdGEgJiYgZS5j
bGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKTsKLSAgICBpZiAocGFzdGVkKSB7Ci0g
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICBpZiAoIWlzUmVhZE9ubHkoY20pICYmICFj
bS5vcHRpb25zLmRpc2FibGVJbnB1dCkKLSAgICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7
IGFwcGx5VGV4dElucHV0KGNtLCBwYXN0ZWQsIDAsIG51bGwsICJwYXN0ZSIpOyB9KTsKLSAgICAg
IHJldHVybiB0cnVlOworICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7
CisgICAgaWYgKCFmaXJzdCB8fCAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgdXBkYXRlLm9s
ZERpc3BsYXlXaWR0aCA9PSBkaXNwbGF5V2lkdGgoY20pKSB7CisgICAgICAvLyBDbGlwIGZvcmNl
ZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgaWYgKHZpZXdwb3J0
ICYmIHZpZXdwb3J0LnRvcCAhPSBudWxsKQorICAgICAgICB7IHZpZXdwb3J0ID0ge3RvcDogTWF0
aC5taW4oY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpIC0gZGlzcGxheUhl
aWdodChjbSksIHZpZXdwb3J0LnRvcCl9IH0KKyAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRz
IG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3QKKyAgICAgIC8vIGFjdHVhbGx5IGNv
dmVyaW5nIHRoZSB2aWV3cG9ydC4gS2VlcCBsb29waW5nIHVudGlsIGl0IGRvZXMuCisgICAgICB1
cGRhdGUudmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdwb3J0
KQorICAgICAgaWYgKHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAm
JiB1cGRhdGUudmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnZpZXdUbykKKyAgICAgICAgeyBicmVh
ayB9CiAgICAgfQorICAgIGlmICghdXBkYXRlRGlzcGxheUlmTmVlZGVkKGNtLCB1cGRhdGUpKSB7
IGJyZWFrIH0KKyAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSkKKyAgICB2YXIgYmFyTWVh
c3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKQorICAgIHVwZGF0ZVNlbGVjdGlvbihjbSkK
KyAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKQorICAgIHNldERvY3VtZW50SGVp
Z2h0KGNtLCBiYXJNZWFzdXJlKQogICB9CiAKLSAgZnVuY3Rpb24gdHJpZ2dlckVsZWN0cmljKGNt
LCBpbnNlcnRlZCkgewotICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5z
ZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudAotICAgIGlmICghY20ub3B0aW9u
cy5lbGVjdHJpY0NoYXJzIHx8ICFjbS5vcHRpb25zLnNtYXJ0SW5kZW50KSByZXR1cm47Ci0gICAg
dmFyIHNlbCA9IGNtLmRvYy5zZWw7Ci0KLSAgICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsK
LSAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4gMTAwIHx8IChpICYmIHNlbC5yYW5nZXNbaSAtIDFd
LmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxpbmUpKSBjb250aW51ZTsKLSAgICAgIHZhciBtb2Rl
ID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQpOwotICAgICAgdmFyIGluZGVudGVkID0gZmFsc2U7
Ci0gICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7Ci0gICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKQotICAgICAgICAgIGlmIChpbnNl
cnRlZC5pbmRleE9mKG1vZGUuZWxlY3RyaWNDaGFycy5jaGFyQXQoaikpID4gLTEpIHsKLSAgICAg
ICAgICAgIGluZGVudGVkID0gaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobW9k
ZS5lbGVjdHJpY0lucHV0KSB7Ci0gICAgICAgIGlmIChtb2RlLmVsZWN0cmljSW5wdXQudGVzdChn
ZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5saW5lKS50ZXh0LnNsaWNlKDAsIHJhbmdlLmhlYWQu
Y2gpKSkKLSAgICAgICAgICBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGlu
ZSwgInNtYXJ0Iik7Ci0gICAgICB9Ci0gICAgICBpZiAoaW5kZW50ZWQpIHNpZ25hbExhdGVyKGNt
LCAiZWxlY3RyaWNJbnB1dCIsIGNtLCByYW5nZS5oZWFkLmxpbmUpOwotICAgIH0KKyAgdXBkYXRl
LnNpZ25hbChjbSwgInVwZGF0ZSIsIGNtKQorICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAhPSBj
bS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20gfHwgY20uZGlzcGxheS52aWV3VG8gIT0gY20uZGlz
cGxheS5yZXBvcnRlZFZpZXdUbykgeworICAgIHVwZGF0ZS5zaWduYWwoY20sICJ2aWV3cG9ydENo
YW5nZSIsIGNtLCBjbS5kaXNwbGF5LnZpZXdGcm9tLCBjbS5kaXNwbGF5LnZpZXdUbykKKyAgICBj
bS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdGcm9tOyBjbS5kaXNw
bGF5LnJlcG9ydGVkVmlld1RvID0gY20uZGlzcGxheS52aWV3VG8KKyAgfQorfQorCitmdW5jdGlv
biB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB2aWV3cG9ydCkgeworICB2YXIgdXBkYXRlID0gbmV3
IERpc3BsYXlVcGRhdGUoY20sIHZpZXdwb3J0KQorICBpZiAodXBkYXRlRGlzcGxheUlmTmVlZGVk
KGNtLCB1cGRhdGUpKSB7CisgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pCisgICAgcG9z
dFVwZGF0ZURpc3BsYXkoY20sIHVwZGF0ZSkKKyAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVG
b3JTY3JvbGxiYXJzKGNtKQorICAgIHVwZGF0ZVNlbGVjdGlvbihjbSkKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzKGNtLCBiYXJNZWFzdXJlKQorICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFz
dXJlKQorICAgIHVwZGF0ZS5maW5pc2goKQorICB9Cit9CisKKy8vIFN5bmMgdGhlIGFjdHVhbCBk
aXNwbGF5IERPTSBzdHJ1Y3R1cmUgd2l0aCBkaXNwbGF5LnZpZXcsIHJlbW92aW5nCisvLyBub2Rl
cyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUg
b25lcworLy8gdGhhdCBhcmUgbm90IHRoZXJlIHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRo
YXQgYXJlIG91dCBvZgorLy8gZGF0ZS4KK2Z1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRl
TnVtYmVyc0Zyb20sIGRpbXMpIHsKKyAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5lTnVt
YmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnMKKyAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXku
bGluZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQKKworICBmdW5jdGlvbiBybShub2Rl
KSB7CisgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nCisgICAgLy8gV29ya3MgYXJvdW5k
IGEgdGhyb3ctc2Nyb2xsIGJ1ZyBpbiBPUyBYIFdlYmtpdAorICAgIGlmICh3ZWJraXQgJiYgbWFj
ICYmIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUpCisgICAgICB7IG5vZGUu
c3R5bGUuZGlzcGxheSA9ICJub25lIiB9CisgICAgZWxzZQorICAgICAgeyBub2RlLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQobm9kZSkgfQorICAgIHJldHVybiBuZXh0CiAgIH0KIAotICBmdW5jdGlv
biBjb3B5YWJsZVJhbmdlcyhjbSkgewotICAgIHZhciB0ZXh0ID0gW10sIHJhbmdlcyA9IFtdOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsK
LSAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lOwotICAgICAg
dmFyIGxpbmVSYW5nZSA9IHthbmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAx
LCAwKX07Ci0gICAgICByYW5nZXMucHVzaChsaW5lUmFuZ2UpOwotICAgICAgdGV4dC5wdXNoKGNt
LmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKSk7Ci0gICAgfQotICAg
IHJldHVybiB7dGV4dDogdGV4dCwgcmFuZ2VzOiByYW5nZXN9OwotICB9Ci0KLSAgZnVuY3Rpb24g
ZGlzYWJsZUJyb3dzZXJNYWdpYyhmaWVsZCkgewotICAgIGZpZWxkLnNldEF0dHJpYnV0ZSgiYXV0
b2NvcnJlY3QiLCAib2ZmIik7Ci0gICAgZmllbGQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6
ZSIsICJvZmYiKTsKLSAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCAiZmFsc2Ui
KTsKLSAgfQotCi0gIC8vIFRFWFRBUkVBIElOUFVUIFNUWUxFCi0KLSAgZnVuY3Rpb24gVGV4dGFy
ZWFJbnB1dChjbSkgewotICAgIHRoaXMuY20gPSBjbTsKLSAgICAvLyBTZWUgaW5wdXQucG9sbCBh
bmQgaW5wdXQucmVzZXQKLSAgICB0aGlzLnByZXZJbnB1dCA9ICIiOwotCi0gICAgLy8gRmxhZyB0
aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29u
Ci0gICAgLy8gbm93IChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAnaW5wdXQn
KSBhbmQgYXJlCi0gICAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS4KLSAgICB0aGlzLnBvbGxpbmdG
YXN0ID0gZmFsc2U7Ci0gICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhlIHBvbGxl
cgotICAgIHRoaXMucG9sbGluZyA9IG5ldyBEZWxheWVkKCk7Ci0gICAgLy8gVHJhY2tzIHdoZW4g
aW5wdXQucmVzZXQgaGFzIHB1bnRlZCB0byBqdXN0IHB1dHRpbmcgYSBzaG9ydAotICAgIC8vIHN0
cmluZyBpbnRvIHRoZSB0ZXh0YXJlYSBpbnN0ZWFkIG9mIHRoZSBmdWxsIHNlbGVjdGlvbi4KLSAg
ICB0aGlzLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAvLyBVc2VkIHRvIHdvcmsg
YXJvdW5kIElFIGlzc3VlIHdpdGggc2VsZWN0aW9uIGJlaW5nIGZvcmdvdHRlbiB3aGVuIGZvY3Vz
IG1vdmVzIGF3YXkgZnJvbSB0ZXh0YXJlYQotICAgIHRoaXMuaGFzU2VsZWN0aW9uID0gZmFsc2U7
Ci0gICAgdGhpcy5jb21wb3NpbmcgPSBudWxsOwotICB9OwotCi0gIGZ1bmN0aW9uIGhpZGRlblRl
eHRhcmVhKCkgewotICAgIHZhciB0ZSA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9z
aXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0
bGluZTogbm9uZSIpOwotICAgIHZhciBkaXYgPSBlbHQoImRpdiIsIFt0ZV0sIG51bGwsICJvdmVy
ZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4
OyIpOwotICAgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0IHBvc2l0aW9uZWQgbmVhciB0aGUgY3Vy
c29yIHRvIHByZXZlbnQgdGhlCi0gICAgLy8gZmFjdCB0aGF0IGl0J2xsIGJlIHNjcm9sbGVkIGlu
dG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZwotICAgIC8vIG91ciBmYWtlIGN1cnNvciBv
dXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9b2ZmLCBwYXN0ZSBpcwotICAgIC8vIHZl
cnkgc2xvdy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGluc3RlYWQuCi0gICAgaWYgKHdlYmtpdCkg
dGUuc3R5bGUud2lkdGggPSAiMTAwMHB4IjsKLSAgICBlbHNlIHRlLnNldEF0dHJpYnV0ZSgid3Jh
cCIsICJvZmYiKTsKLSAgICAvLyBJZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtl
eWJvYXJkIChpc3N1ZSAjMTI4NykKLSAgICBpZiAoaW9zKSB0ZS5zdHlsZS5ib3JkZXIgPSAiMXB4
IHNvbGlkIGJsYWNrIjsKLSAgICBkaXNhYmxlQnJvd3Nlck1hZ2ljKHRlKTsKLSAgICByZXR1cm4g
ZGl2OwotICB9Ci0KLSAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUgPSBjb3B5T2JqKHsKLSAgICBp
bml0OiBmdW5jdGlvbihkaXNwbGF5KSB7Ci0gICAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IHRo
aXMuY207Ci0KLSAgICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQotICAgICAg
dmFyIGRpdiA9IHRoaXMud3JhcHBlciA9IGhpZGRlblRleHRhcmVhKCk7Ci0gICAgICAvLyBUaGUg
c2VtaWhpZGRlbiB0ZXh0YXJlYSB0aGF0IGlzIGZvY3VzZWQgd2hlbiB0aGUgZWRpdG9yIGlzCi0g
ICAgICAvLyBmb2N1c2VkLCBhbmQgcmVjZWl2ZXMgaW5wdXQuCi0gICAgICB2YXIgdGUgPSB0aGlz
LnRleHRhcmVhID0gZGl2LmZpcnN0Q2hpbGQ7Ci0gICAgICBkaXNwbGF5LndyYXBwZXIuaW5zZXJ0
QmVmb3JlKGRpdiwgZGlzcGxheS53cmFwcGVyLmZpcnN0Q2hpbGQpOwotCi0gICAgICAvLyBOZWVk
ZWQgdG8gaGlkZSBiaWcgYmx1ZSBibGlua2luZyBjdXJzb3Igb24gTW9iaWxlIFNhZmFyaSAoZG9l
c24ndCBzZWVtIHRvIHdvcmsgaW4gaU9TIDggYW55bW9yZSkKLSAgICAgIGlmIChpb3MpIHRlLnN0
eWxlLndpZHRoID0gIjBweCI7Ci0KLSAgICAgIG9uKHRlLCAiaW5wdXQiLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiBpbnB1dC5oYXNTZWxlY3Rpb24p
IGlucHV0Lmhhc1NlbGVjdGlvbiA9IG51bGw7Ci0gICAgICAgIGlucHV0LnBvbGwoKTsKLSAgICAg
IH0pOwotCi0gICAgICBvbih0ZSwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAo
aGFuZGxlUGFzdGUoZSwgY20pKSByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjbS5zdGF0ZS5wYXN0
ZUluY29taW5nID0gdHJ1ZTsKLSAgICAgICAgaW5wdXQuZmFzdFBvbGwoKTsKLSAgICAgIH0pOwot
Ci0gICAgICBmdW5jdGlvbiBwcmVwYXJlQ29weUN1dChlKSB7Ci0gICAgICAgIGlmIChjbS5zb21l
dGhpbmdTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNlbGVjdGlv
bnMoKTsKLSAgICAgICAgICBpZiAoaW5wdXQuaW5hY2N1cmF0ZVNlbGVjdGlvbikgewotICAgICAg
ICAgICAgaW5wdXQucHJldklucHV0ID0gIiI7Ci0gICAgICAgICAgICBpbnB1dC5pbmFjY3VyYXRl
U2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB0ZS52YWx1ZSA9IGxhc3RDb3BpZWQuam9p
bigiXG4iKTsKLSAgICAgICAgICAgIHNlbGVjdElucHV0KHRlKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJs
ZVJhbmdlcyhjbSk7Ci0gICAgICAgICAgbGFzdENvcGllZCA9IHJhbmdlcy50ZXh0OwotICAgICAg
ICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsKLSAgICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMo
cmFuZ2VzLnJhbmdlcywgbnVsbCwgc2VsX2RvbnRTY3JvbGwpOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSAiIjsKLSAgICAgICAgICAgIHRlLnZhbHVl
ID0gcmFuZ2VzLnRleHQuam9pbigiXG4iKTsKLSAgICAgICAgICAgIHNlbGVjdElucHV0KHRlKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgY20u
c3RhdGUuY3V0SW5jb21pbmcgPSB0cnVlOwotICAgICAgfQotICAgICAgb24odGUsICJjdXQiLCBw
cmVwYXJlQ29weUN1dCk7Ci0gICAgICBvbih0ZSwgImNvcHkiLCBwcmVwYXJlQ29weUN1dCk7Ci0K
LSAgICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAgICAgY20uc3Rh
dGUucGFzdGVJbmNvbWluZyA9IHRydWU7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7Ci0gICAgICB9
KTsKLQotICAgICAgLy8gUHJldmVudCBub3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdl
IGhhbmRsZSBvdXIgb3duKQotICAgICAgb24oZGlzcGxheS5saW5lU3BhY2UsICJzZWxlY3RzdGFy
dCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKCFldmVudEluV2lkZ2V0KGRpc3BsYXksIGUp
KSBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgfSk7Ci0KLSAgICAgIG9uKHRlLCAiY29tcG9z
aXRpb25zdGFydCIsIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgc3RhcnQgPSBjbS5nZXRDdXJz
b3IoImZyb20iKTsKLSAgICAgICAgaW5wdXQuY29tcG9zaW5nID0gewotICAgICAgICAgIHN0YXJ0
OiBzdGFydCwKLSAgICAgICAgICByYW5nZTogY20ubWFya1RleHQoc3RhcnQsIGNtLmdldEN1cnNv
cigidG8iKSwge2NsYXNzTmFtZTogIkNvZGVNaXJyb3ItY29tcG9zaW5nIn0pCi0gICAgICAgIH07
Ci0gICAgICB9KTsKLSAgICAgIG9uKHRlLCAiY29tcG9zaXRpb25lbmQiLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykgewotICAgICAgICAgIGlucHV0LnBvbGwoKTsK
LSAgICAgICAgICBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTsKLSAgICAgICAgICBpbnB1
dC5jb21wb3NpbmcgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAg
cHJlcGFyZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBSZWRyYXcgdGhlIHNlbGVj
dGlvbiBhbmQvb3IgY3Vyc29yCi0gICAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgZG9jID0gY20uZG9jOwotICAgICAgdmFyIHJlc3VsdCA9IHByZXBhcmVTZWxlY3Rp
b24oY20pOwotCi0gICAgICAvLyBNb3ZlIHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0aGUgY3Vy
c29yIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGFydGlmYWN0cwotICAgICAgaWYgKGNtLm9wdGlvbnMu
bW92ZUlucHV0V2l0aEN1cnNvcikgewotICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3Jk
cyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgImRpdiIpOwotICAgICAgICB2YXIgd3JhcE9m
ZiA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGluZU9mZiA9IGRp
c3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgcmVzdWx0LnRl
VG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAt
IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9z
LnRvcCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTsKLSAgICAgICAgcmVzdWx0LnRlTGVm
dCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCAtIDEw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5s
ZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7Ci0gICAgICB9Ci0KLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIHNob3dTZWxlY3Rpb246IGZ1bmN0aW9uKGRyYXdu
KSB7Ci0gICAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuY3Vyc29yRGl2LCBkcmF3bi5jdXJzb3JzKTsK
LSAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBkcmF3bi5z
ZWxlY3Rpb24pOwotICAgICAgaWYgKGRyYXduLnRlVG9wICE9IG51bGwpIHsKLSAgICAgICAgdGhp
cy53cmFwcGVyLnN0eWxlLnRvcCA9IGRyYXduLnRlVG9wICsgInB4IjsKLSAgICAgICAgdGhpcy53
cmFwcGVyLnN0eWxlLmxlZnQgPSBkcmF3bi50ZUxlZnQgKyAicHgiOwotICAgICAgfQotICAgIH0s
Ci0KLSAgICAvLyBSZXNldCB0aGUgaW5wdXQgdG8gY29ycmVzcG9uZCB0byB0aGUgc2VsZWN0aW9u
IChvciB0byBiZSBlbXB0eSwKLSAgICAvLyB3aGVuIG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMg
c2VsZWN0ZWQpCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKHR5cGluZykgewotICAgICAgaWYgKHRoaXMu
Y29udGV4dE1lbnVQZW5kaW5nKSByZXR1cm47Ci0gICAgICB2YXIgbWluaW1hbCwgc2VsZWN0ZWQs
IGNtID0gdGhpcy5jbSwgZG9jID0gY20uZG9jOwotICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVj
dGVkKCkpIHsKLSAgICAgICAgdGhpcy5wcmV2SW5wdXQgPSAiIjsKLSAgICAgICAgdmFyIHJhbmdl
ID0gZG9jLnNlbC5wcmltYXJ5KCk7Ci0gICAgICAgIG1pbmltYWwgPSBoYXNDb3B5RXZlbnQgJiYK
LSAgICAgICAgICAocmFuZ2UudG8oKS5saW5lIC0gcmFuZ2UuZnJvbSgpLmxpbmUgPiAxMDAgfHwg
KHNlbGVjdGVkID0gY20uZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aCA+IDEwMDApOwotICAgICAgICB2
YXIgY29udGVudCA9IG1pbmltYWwgPyAiLSIgOiBzZWxlY3RlZCB8fCBjbS5nZXRTZWxlY3Rpb24o
KTsKLSAgICAgICAgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7Ci0gICAgICAgIGlmIChj
bS5zdGF0ZS5mb2N1c2VkKSBzZWxlY3RJbnB1dCh0aGlzLnRleHRhcmVhKTsKLSAgICAgICAgaWYg
KGllICYmIGllX3ZlcnNpb24gPj0gOSkgdGhpcy5oYXNTZWxlY3Rpb24gPSBjb250ZW50OwotICAg
ICAgfSBlbHNlIGlmICghdHlwaW5nKSB7Ci0gICAgICAgIHRoaXMucHJldklucHV0ID0gdGhpcy50
ZXh0YXJlYS52YWx1ZSA9ICIiOwotICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB0
aGlzLmhhc1NlbGVjdGlvbiA9IG51bGw7Ci0gICAgICB9Ci0gICAgICB0aGlzLmluYWNjdXJhdGVT
ZWxlY3Rpb24gPSBtaW5pbWFsOwotICAgIH0sCi0KLSAgICBnZXRGaWVsZDogZnVuY3Rpb24oKSB7
IHJldHVybiB0aGlzLnRleHRhcmVhOyB9LAotCi0gICAgc3VwcG9ydHNUb3VjaDogZnVuY3Rpb24o
KSB7IHJldHVybiBmYWxzZTsgfSwKLQotICAgIGZvY3VzOiBmdW5jdGlvbigpIHsKLSAgICAgIGlm
ICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIiAmJiAoIW1vYmlsZSB8fCBh
Y3RpdmVFbHQoKSAhPSB0aGlzLnRleHRhcmVhKSkgewotICAgICAgICB0cnkgeyB0aGlzLnRleHRh
cmVhLmZvY3VzKCk7IH0KLSAgICAgICAgY2F0Y2ggKGUpIHt9IC8vIElFOCB3aWxsIHRocm93IGlm
IHRoZSB0ZXh0YXJlYSBpcyBkaXNwbGF5OiBub25lIG9yIG5vdCBpbiBET00KLSAgICAgIH0KLSAg
ICB9LAotCi0gICAgYmx1cjogZnVuY3Rpb24oKSB7IHRoaXMudGV4dGFyZWEuYmx1cigpOyB9LAot
Ci0gICAgcmVzZXRQb3NpdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLndyYXBwZXIuc3R5
bGUudG9wID0gdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQgPSAwOwotICAgIH0sCi0KLSAgICByZWNl
aXZlZEZvY3VzOiBmdW5jdGlvbigpIHsgdGhpcy5zbG93UG9sbCgpOyB9LAotCi0gICAgLy8gUG9s
bCBmb3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcuIFRo
aXMKLSAgICAvLyBydW5zIGFzIGxvbmcgYXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLgotICAgIHNs
b3dQb2xsOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBpbnB1dCA9IHRoaXM7Ci0gICAgICBpZiAo
aW5wdXQucG9sbGluZ0Zhc3QpIHJldHVybjsKLSAgICAgIGlucHV0LnBvbGxpbmcuc2V0KHRoaXMu
Y20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewotICAgICAgICBpbnB1dC5wb2xs
KCk7Ci0gICAgICAgIGlmIChpbnB1dC5jbS5zdGF0ZS5mb2N1c2VkKSBpbnB1dC5zbG93UG9sbCgp
OwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29t
ZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCi0gICAgLy8gc29tZXRoaW5nIGlu
IHRoZSBpbnB1dCB0ZXh0YXJlYSwgd2UgcG9sbCBmYXN0ZXIsIHRvIGVuc3VyZSB0aGF0Ci0gICAg
Ly8gdGhlIGNoYW5nZSBhcHBlYXJzIG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KLSAgICBmYXN0UG9s
bDogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgbWlzc2VkID0gZmFsc2UsIGlucHV0ID0gdGhpczsK
LSAgICAgIGlucHV0LnBvbGxpbmdGYXN0ID0gdHJ1ZTsKLSAgICAgIGZ1bmN0aW9uIHAoKSB7Ci0g
ICAgICAgIHZhciBjaGFuZ2VkID0gaW5wdXQucG9sbCgpOwotICAgICAgICBpZiAoIWNoYW5nZWQg
JiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IGlucHV0LnBvbGxpbmcuc2V0KDYwLCBwKTt9Ci0g
ICAgICAgIGVsc2Uge2lucHV0LnBvbGxpbmdGYXN0ID0gZmFsc2U7IGlucHV0LnNsb3dQb2xsKCk7
fQotICAgICAgfQotICAgICAgaW5wdXQucG9sbGluZy5zZXQoMjAsIHApOwotICAgIH0sCi0KLSAg
ICAvLyBSZWFkIGlucHV0IGZyb20gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIHRoZSBkb2N1bWVu
dCB0byBtYXRjaC4KLSAgICAvLyBXaGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJl
c2VudCBpbiB0aGUgdGV4dGFyZWEsIGFuZAotICAgIC8vIHNlbGVjdGVkICh1bmxlc3MgaXQgaXMg
aHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNlaG9sZGVyIGlzCi0gICAgLy8gdXNlZCkuIFdoZW4g
bm90aGluZyBpcyBzZWxlY3RlZCwgdGhlIGN1cnNvciBzaXRzIGFmdGVyIHByZXZpb3VzbHkKLSAg
ICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5w
dXQgKHdlIG11c3QKLSAgICAvLyBub3QgcmVzZXQgdGhlIHRleHRhcmVhIHdoZW4gdHlwaW5nLCBi
ZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuCi0gICAgcG9sbDogZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgY20gPSB0aGlzLmNtLCBpbnB1dCA9IHRoaXMudGV4dGFyZWEsIHByZXZJbnB1dCA9IHRoaXMu
cHJldklucHV0OwotICAgICAgLy8gU2luY2UgdGhpcyBpcyBjYWxsZWQgYSAqbG90KiwgdHJ5IHRv
IGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMKLSAgICAgIC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xl
YXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNTZWxlY3Rpb24KLSAgICAgIC8vIHdpbGwgYmUg
dGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwKLSAg
ICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBpdHMgdmFsdWUgd291bGQgYmUgZXhwZW5zaXZl
LgotICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8ICFjbS5zdGF0ZS5mb2N1c2Vk
IHx8Ci0gICAgICAgICAgKGhhc1NlbGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCAmJiAhdGhp
cy5jb21wb3NpbmcpIHx8Ci0gICAgICAgICAgaXNSZWFkT25seShjbSkgfHwgY20ub3B0aW9ucy5k
aXNhYmxlSW5wdXQgfHwgY20uc3RhdGUua2V5U2VxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7Ci0gICAgICAvLyBJZiBub3RoaW5nIGNoYW5n
ZWQsIGJhaWwuCi0gICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNvbWV0aGluZ1Nl
bGVjdGVkKCkpIHJldHVybiBmYWxzZTsKLSAgICAgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNpY2Fs
IHNlbGVjdGlvbiByZXNldHRpbmcgaW4gSUU5LzEwLCBhbmQKLSAgICAgIC8vIGluZXhwbGljYWJs
ZSBhcHBlYXJhbmNlIG9mIHByaXZhdGUgYXJlYSB1bmljb2RlIGNoYXJhY3RlcnMgb24KLSAgICAg
IC8vIHNvbWUga2V5IGNvbWJvcyBpbiBNYWMgKCMyNjg5KS4KLSAgICAgIGlmIChpZSAmJiBpZV92
ZXJzaW9uID49IDkgJiYgdGhpcy5oYXNTZWxlY3Rpb24gPT09IHRleHQgfHwKLSAgICAgICAgICBt
YWMgJiYgL1tcdWY3MDAtXHVmN2ZmXS8udGVzdCh0ZXh0KSkgewotICAgICAgICBjbS5kaXNwbGF5
LmlucHV0LnJlc2V0KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgdmFyIHZpZXcgPSBkaXNw
bGF5LnZpZXcsIGxpbmVOID0gZGlzcGxheS52aWV3RnJvbQorICAvLyBMb29wIG92ZXIgdGhlIGVs
ZW1lbnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2RlcworICAvLyBpbiBk
aXNwbGF5LmxpbmVEaXYpIHdpdGggdGhlIHZpZXcgYXMgd2UgZ28uCisgIGZvciAodmFyIGkgPSAw
OyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeworICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV0KKyAg
ICBpZiAobGluZVZpZXcuaGlkZGVuKSB7CisgICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8
fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5
ZXQKKyAgICAgIHZhciBub2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZVZpZXcsIGxpbmVO
LCBkaW1zKQorICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShub2RlLCBjdXIpCisgICAgfSBl
bHNlIHsgLy8gQWxyZWFkeSBkcmF3bgorICAgICAgd2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2Rl
KSB7IGN1ciA9IHJtKGN1cikgfQorICAgICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJz
ICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51bGwgJiYKKyAgICAgICAgdXBkYXRlTnVtYmVyc0Zy
b20gPD0gbGluZU4gJiYgbGluZVZpZXcubGluZU51bWJlcgorICAgICAgaWYgKGxpbmVWaWV3LmNo
YW5nZXMpIHsKKyAgICAgICAgaWYgKGluZGV4T2YobGluZVZpZXcuY2hhbmdlcywgImd1dHRlciIp
ID4gLTEpIHsgdXBkYXRlTnVtYmVyID0gZmFsc2UgfQorICAgICAgICB1cGRhdGVMaW5lRm9yQ2hh
bmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKQogICAgICAgfQotCi0gICAgICBpZiAoY20u
ZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7Ci0gICAgICAgIHZhciBm
aXJzdCA9IHRleHQuY2hhckNvZGVBdCgwKTsKLSAgICAgICAgaWYgKGZpcnN0ID09IDB4MjAwYiAm
JiAhcHJldklucHV0KSBwcmV2SW5wdXQgPSAiXHUyMDBiIjsKLSAgICAgICAgaWYgKGZpcnN0ID09
IDB4MjFkYSkgeyB0aGlzLnJlc2V0KCk7IHJldHVybiB0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRv
Iik7IH0KKyAgICAgIGlmICh1cGRhdGVOdW1iZXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hpbGRyZW4o
bGluZVZpZXcubGluZU51bWJlcikKKyAgICAgICAgbGluZVZpZXcubGluZU51bWJlci5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVOKSkpCiAgICAgICB9Ci0gICAgICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0
IGlzIGFjdHVhbGx5IG5ldwotICAgICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklu
cHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwotICAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJ
bnB1dC5jaGFyQ29kZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkgKytzYW1lOwot
Ci0gICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgYXBwbHlUZXh0SW5wdXQoY20sIHRleHQuc2xpY2Uoc2FtZSksIHByZXZJbnB1dC5s
ZW5ndGggLSBzYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBzZWxmLmNvbXBvc2lu
ZyA/ICIqY29tcG9zZSIgOiBudWxsKTsKLQotICAgICAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRl
eHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvdwot
ICAgICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+IC0x
KSBpbnB1dC52YWx1ZSA9IHNlbGYucHJldklucHV0ID0gIiI7Ci0gICAgICAgIGVsc2Ugc2VsZi5w
cmV2SW5wdXQgPSB0ZXh0OwotCi0gICAgICAgIGlmIChzZWxmLmNvbXBvc2luZykgewotICAgICAg
ICAgIHNlbGYuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7Ci0gICAgICAgICAgc2VsZi5jb21wb3Np
bmcucmFuZ2UgPSBjbS5tYXJrVGV4dChzZWxmLmNvbXBvc2luZy5zdGFydCwgY20uZ2V0Q3Vyc29y
KCJ0byIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Ns
YXNzTmFtZTogIkNvZGVNaXJyb3ItY29tcG9zaW5nIn0pOwotICAgICAgICB9Ci0gICAgICB9KTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCisgICAgICBjdXIgPSBsaW5lVmlldy5ub2RlLm5l
eHRTaWJsaW5nCisgICAgfQorICAgIGxpbmVOICs9IGxpbmVWaWV3LnNpemUKKyAgfQorICB3aGls
ZSAoY3VyKSB7IGN1ciA9IHJtKGN1cikgfQorfQorCitmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFj
ZShjbSkgeworICB2YXIgd2lkdGggPSBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgKKyAg
Y20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyAicHgiCit9CisKK2Z1
bmN0aW9uIHNldERvY3VtZW50SGVpZ2h0KGNtLCBtZWFzdXJlKSB7CisgIGNtLmRpc3BsYXkuc2l6
ZXIuc3R5bGUubWluSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiCisgIGNtLmRpc3Bs
YXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IgorICBj
bS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gKG1lYXN1cmUuZG9jSGVpZ2h0ICsgY20u
ZGlzcGxheS5iYXJIZWlnaHQgKyBzY3JvbGxHYXAoY20pKSArICJweCIKK30KKworLy8gUmVidWls
ZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0
aGUKKy8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC4KK2Z1bmN0aW9uIHVwZGF0ZUd1dHRlcnMo
Y20pIHsKKyAgdmFyIGd1dHRlcnMgPSBjbS5kaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gY20ub3B0
aW9ucy5ndXR0ZXJzCisgIHJlbW92ZUNoaWxkcmVuKGd1dHRlcnMpCisgIHZhciBpID0gMAorICBm
b3IgKDsgaSA8IHNwZWNzLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGd1dHRlckNsYXNzID0gc3Bl
Y3NbaV0KKyAgICB2YXIgZ0VsdCA9IGd1dHRlcnMuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxs
LCAiQ29kZU1pcnJvci1ndXR0ZXIgIiArIGd1dHRlckNsYXNzKSkKKyAgICBpZiAoZ3V0dGVyQ2xh
c3MgPT0gIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKSB7CisgICAgICBjbS5kaXNwbGF5LmxpbmVH
dXR0ZXIgPSBnRWx0CisgICAgICBnRWx0LnN0eWxlLndpZHRoID0gKGNtLmRpc3BsYXkubGluZU51
bVdpZHRoIHx8IDEpICsgInB4IgorICAgIH0KKyAgfQorICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkg
PSBpID8gIiIgOiAibm9uZSIKKyAgdXBkYXRlR3V0dGVyU3BhY2UoY20pCit9CisKKy8vIE1ha2Ug
c3VyZSB0aGUgZ3V0dGVycyBvcHRpb25zIGNvbnRhaW5zIHRoZSBlbGVtZW50CisvLyAiQ29kZU1p
cnJvci1saW5lbnVtYmVycyIgd2hlbiB0aGUgbGluZU51bWJlcnMgb3B0aW9uIGlzIHRydWUuCitm
dW5jdGlvbiBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucykgeworICB2YXIgZm91bmQg
PSBpbmRleE9mKG9wdGlvbnMuZ3V0dGVycywgIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKQorICBp
ZiAoZm91bmQgPT0gLTEgJiYgb3B0aW9ucy5saW5lTnVtYmVycykgeworICAgIG9wdGlvbnMuZ3V0
dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0p
CisgIH0gZWxzZSBpZiAoZm91bmQgPiAtMSAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgeworICAg
IG9wdGlvbnMuZ3V0dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5zbGljZSgwKQorICAgIG9wdGlvbnMu
Z3V0dGVycy5zcGxpY2UoZm91bmQsIDEpCisgIH0KK30KKworLy8gU2VsZWN0aW9uIG9iamVjdHMg
YXJlIGltbXV0YWJsZS4gQSBuZXcgb25lIGlzIGNyZWF0ZWQgZXZlcnkgdGltZQorLy8gdGhlIHNl
bGVjdGlvbiBjaGFuZ2VzLiBBIHNlbGVjdGlvbiBpcyBvbmUgb3IgbW9yZSBub24tb3ZlcmxhcHBp
bmcKKy8vIChhbmQgbm9uLXRvdWNoaW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIg
dGhhdCBpbmRpY2F0ZXMKKy8vIHdoaWNoIG9uZSBpcyB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gKHRo
ZSBvbmUgdGhhdCdzIHNjcm9sbGVkIGludG8KKy8vIHZpZXcsIHRoYXQgZ2V0Q3Vyc29yIHJldHVy
bnMsIGV0YykuCitmdW5jdGlvbiBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKKyAgdGhp
cy5yYW5nZXMgPSByYW5nZXMKKyAgdGhpcy5wcmltSW5kZXggPSBwcmltSW5kZXgKK30KKworU2Vs
ZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgcHJpbWFyeTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlz
LnJhbmdlc1t0aGlzLnByaW1JbmRleF0gfSwKKyAgZXF1YWxzOiBmdW5jdGlvbihvdGhlcikgewor
ICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgaWYgKG90aGVyID09IHRoaXMpIHsgcmV0dXJu
IHRydWUgfQorICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXggfHwgb3Ro
ZXIucmFuZ2VzLmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlIH0K
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICB2YXIgaGVyZSA9IHRoaXMkMS5yYW5nZXNbaV0sIHRoZXJlID0gb3RoZXIucmFuZ2VzW2ldCisg
ICAgICBpZiAoY21wKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpICE9IDAgfHwgY21wKGhlcmUu
aGVhZCwgdGhlcmUuaGVhZCkgIT0gMCkgeyByZXR1cm4gZmFsc2UgfQorICAgIH0KKyAgICByZXR1
cm4gdHJ1ZQorICB9LAorICBkZWVwQ29weTogZnVuY3Rpb24oKSB7CisgICAgdmFyIHRoaXMkMSA9
IHRoaXM7CisKKyAgICB2YXIgb3V0ID0gW10KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
cmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgeyBvdXRbaV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0
aGlzJDEucmFuZ2VzW2ldLmFuY2hvciksIGNvcHlQb3ModGhpcyQxLnJhbmdlc1tpXS5oZWFkKSkg
fQorICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgdGhpcy5wcmltSW5kZXgpCisgIH0sCisg
IHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGhpcyQxID0gdGhpczsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAg
ICB7IGlmICghdGhpcyQxLnJhbmdlc1tpXS5lbXB0eSgpKSB7IHJldHVybiB0cnVlIH0gfQorICAg
IHJldHVybiBmYWxzZQorICB9LAorICBjb250YWluczogZnVuY3Rpb24ocG9zLCBlbmQpIHsKKyAg
ICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgIGlmICghZW5kKSB7IGVuZCA9IHBvcyB9CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFy
IHJhbmdlID0gdGhpcyQxLnJhbmdlc1tpXQorICAgICAgaWYgKGNtcChlbmQsIHJhbmdlLmZyb20o
KSkgPj0gMCAmJiBjbXAocG9zLCByYW5nZS50bygpKSA8PSAwKQorICAgICAgICB7IHJldHVybiBp
IH0KKyAgICB9CisgICAgcmV0dXJuIC0xCisgIH0KK30KIAotICAgIGVuc3VyZVBvbGxlZDogZnVu
Y3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkgdGhp
cy5wb2xsaW5nRmFzdCA9IGZhbHNlOwotICAgIH0sCitmdW5jdGlvbiBSYW5nZShhbmNob3IsIGhl
YWQpIHsKKyAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQKK30KIAotICAg
IG9uS2V5UHJlc3M6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0g
OSkgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOwotICAgICAgdGhpcy5mYXN0UG9sbCgpOwotICAg
IH0sCitSYW5nZS5wcm90b3R5cGUgPSB7CisgIGZyb206IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWlu
UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpIH0sCisgIHRvOiBmdW5jdGlvbigpIHsgcmV0dXJu
IG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKSB9LAorICBlbXB0eTogZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuaGVhZC5saW5lID09IHRoaXMuYW5jaG9yLmxpbmUgJiYgdGhpcy5o
ZWFkLmNoID09IHRoaXMuYW5jaG9yLmNoCisgIH0KK30KKworLy8gVGFrZSBhbiB1bnNvcnRlZCwg
cG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5kCisvLyBidWlsZCBhIHNl
bGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2VzIGFycmF5IChtb2RpZnlpbmcKKy8v
IGl0KS4KK2Z1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCkgewor
ICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhdCisgIHJhbmdlcy5zb3J0KGZ1bmN0aW9uIChh
LCBiKSB7IHJldHVybiBjbXAoYS5mcm9tKCksIGIuZnJvbSgpKTsgfSkKKyAgcHJpbUluZGV4ID0g
aW5kZXhPZihyYW5nZXMsIHByaW0pCisgIGZvciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0
aDsgaSsrKSB7CisgICAgdmFyIGN1ciA9IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV0K
KyAgICBpZiAoY21wKHByZXYudG8oKSwgY3VyLmZyb20oKSkgPj0gMCkgeworICAgICAgdmFyIGZy
b20gPSBtaW5Qb3MocHJldi5mcm9tKCksIGN1ci5mcm9tKCkpLCB0byA9IG1heFBvcyhwcmV2LnRv
KCksIGN1ci50bygpKQorICAgICAgdmFyIGludiA9IHByZXYuZW1wdHkoKSA/IGN1ci5mcm9tKCkg
PT0gY3VyLmhlYWQgOiBwcmV2LmZyb20oKSA9PSBwcmV2LmhlYWQKKyAgICAgIGlmIChpIDw9IHBy
aW1JbmRleCkgeyAtLXByaW1JbmRleCB9CisgICAgICByYW5nZXMuc3BsaWNlKC0taSwgMiwgbmV3
IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKSkKKyAgICB9CisgIH0KKyAg
cmV0dXJuIG5ldyBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpCit9CisKK2Z1bmN0aW9uIHNp
bXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpIHsKKyAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW25l
dyBSYW5nZShhbmNob3IsIGhlYWQgfHwgYW5jaG9yKV0sIDApCit9CisKKy8vIENvbXB1dGUgdGhl
IHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgYSBjaGFuZ2UgKGl0cyAndG8nIHByb3BlcnR5CisvLyBy
ZWZlcnMgdG8gdGhlIHByZS1jaGFuZ2UgZW5kKS4KK2Z1bmN0aW9uIGNoYW5nZUVuZChjaGFuZ2Up
IHsKKyAgaWYgKCFjaGFuZ2UudGV4dCkgeyByZXR1cm4gY2hhbmdlLnRvIH0KKyAgcmV0dXJuIFBv
cyhjaGFuZ2UuZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSwKKyAgICAgICAgICAg
ICBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSA/IGNo
YW5nZS5mcm9tLmNoIDogMCkpCit9CisKKy8vIEFkanVzdCBhIHBvc2l0aW9uIHRvIHJlZmVyIHRv
IHRoZSBwb3N0LWNoYW5nZSBwb3NpdGlvbiBvZiB0aGUKKy8vIHNhbWUgdGV4dCwgb3IgdGhlIGVu
ZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgorZnVuY3Rpb24gYWRqdXN0
Rm9yQ2hhbmdlKHBvcywgY2hhbmdlKSB7CisgIGlmIChjbXAocG9zLCBjaGFuZ2UuZnJvbSkgPCAw
KSB7IHJldHVybiBwb3MgfQorICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSB7IHJldHVy
biBjaGFuZ2VFbmQoY2hhbmdlKSB9CisKKyAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNoYW5nZS50
ZXh0Lmxlbmd0aCAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpIC0gMSwgY2gg
PSBwb3MuY2gKKyAgaWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSB7IGNoICs9IGNoYW5n
ZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoIH0KKyAgcmV0dXJuIFBvcyhsaW5lLCBjaCkK
K30KKworZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7CisgIHZh
ciBvdXQgPSBbXQorICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsg
aSsrKSB7CisgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV0KKyAgICBvdXQucHVzaChu
ZXcgUmFuZ2UoYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmFuY2hvciwgY2hhbmdlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkpKQorICB9
CisgIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleCkKK30K
KworZnVuY3Rpb24gb2Zmc2V0UG9zKHBvcywgb2xkLCBudykgeworICBpZiAocG9zLmxpbmUgPT0g
b2xkLmxpbmUpCisgICAgeyByZXR1cm4gUG9zKG53LmxpbmUsIHBvcy5jaCAtIG9sZC5jaCArIG53
LmNoKSB9CisgIGVsc2UKKyAgICB7IHJldHVybiBQb3MobncubGluZSArIChwb3MubGluZSAtIG9s
ZC5saW5lKSwgcG9zLmNoKSB9Cit9CisKKy8vIFVzZWQgYnkgcmVwbGFjZVNlbGVjdGlvbnMgdG8g
YWxsb3cgbW92aW5nIHRoZSBzZWxlY3Rpb24gdG8gdGhlCisvLyBzdGFydCBvciBhcm91bmQgdGhl
IHJlcGxhY2VkIHRlc3QuIEhpbnQgbWF5IGJlICJzdGFydCIgb3IgImFyb3VuZCIuCitmdW5jdGlv
biBjb21wdXRlUmVwbGFjZWRTZWwoZG9jLCBjaGFuZ2VzLCBoaW50KSB7CisgIHZhciBvdXQgPSBb
XQorICB2YXIgb2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldgor
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgY2hh
bmdlID0gY2hhbmdlc1tpXQorICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBv
bGRQcmV2LCBuZXdQcmV2KQorICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdl
KSwgb2xkUHJldiwgbmV3UHJldikKKyAgICBvbGRQcmV2ID0gY2hhbmdlLnRvCisgICAgbmV3UHJl
diA9IHRvCisgICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHsKKyAgICAgIHZhciByYW5nZSA9IGRv
Yy5zZWwucmFuZ2VzW2ldLCBpbnYgPSBjbXAocmFuZ2UuaGVhZCwgcmFuZ2UuYW5jaG9yKSA8IDAK
KyAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0
bykKKyAgICB9IGVsc2UgeworICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGZyb20sIGZyb20pCisg
ICAgfQorICB9CisgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5wcmltSW5kZXgp
Cit9CisKKy8vIFVzZWQgdG8gZ2V0IHRoZSBlZGl0b3IgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUg
YWdhaW4gd2hlbiBvcHRpb25zIGNoYW5nZS4KKworZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKKyAg
Y20uZG9jLm1vZGUgPSBnZXRNb2RlKGNtLm9wdGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKQorICBy
ZXNldE1vZGVTdGF0ZShjbSkKK30KKworZnVuY3Rpb24gcmVzZXRNb2RlU3RhdGUoY20pIHsKKyAg
Y20uZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHsKKyAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSB7
IGxpbmUuc3RhdGVBZnRlciA9IG51bGwgfQorICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0
eWxlcyA9IG51bGwgfQorICB9KQorICBjbS5kb2MuZnJvbnRpZXIgPSBjbS5kb2MuZmlyc3QKKyAg
c3RhcnRXb3JrZXIoY20sIDEwMCkKKyAgY20uc3RhdGUubW9kZUdlbisrCisgIGlmIChjbS5jdXJP
cCkgeyByZWdDaGFuZ2UoY20pIH0KK30KKworLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkUKKwor
Ly8gQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGF0IHN0YXJ0IGFuZCBlbmQgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIGxpbmUKKy8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0
aGUgYXNzb2NpYXRpb24gb2YgbGluZQorLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdp
dGggdGhlIHRleHQgYmVoYXZlIG1vcmUgaW50dWl0aXZlLgorZnVuY3Rpb24gaXNXaG9sZUxpbmVV
cGRhdGUoZG9jLCBjaGFuZ2UpIHsKKyAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hh
bmdlLnRvLmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSAiIiAmJgorICAgICghZG9jLmNt
IHx8IGRvYy5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSkKK30KKworLy8gUGVyZm9y
bSBhIGNoYW5nZSBvbiB0aGUgZG9jdW1lbnQgZGF0YSBzdHJ1Y3R1cmUuCitmdW5jdGlvbiB1cGRh
dGVEb2MoZG9jLCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgeworICBmdW5j
dGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBu
dWxsfQorICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3BhbnMpIHsKKyAgICB1cGRhdGVM
aW5lKGxpbmUsIHRleHQsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodCkKKyAgICBzaWduYWxMYXRlcihs
aW5lLCAiY2hhbmdlIiwgbGluZSwgY2hhbmdlKQorICB9CisgIGZ1bmN0aW9uIGxpbmVzRm9yKHN0
YXJ0LCBlbmQpIHsKKyAgICB2YXIgcmVzdWx0ID0gW10KKyAgICBmb3IgKHZhciBpID0gc3RhcnQ7
IGkgPCBlbmQ7ICsraSkKKyAgICAgIHsgcmVzdWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3Bh
bnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSkgfQorICAgIHJldHVybiByZXN1bHQKKyAgfQogCi0g
ICAgb25Db250ZXh0TWVudTogZnVuY3Rpb24oZSkgewotICAgICAgdmFyIGlucHV0ID0gdGhpcywg
Y20gPSBpbnB1dC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHRlID0gaW5wdXQudGV4dGFyZWE7
Ci0gICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxUb3A7Ci0gICAgICBpZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsg
Ly8gT3BlcmEgaXMgZGlmZmljdWx0LgotCi0gICAgICAvLyBSZXNldCB0aGUgY3VycmVudCB0ZXh0
IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUgb2YgdGhlIHNlbGVj
dGlvbgotICAgICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBp
cyB0cnVlLgotICAgICAgdmFyIHJlc2V0ID0gY20ub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29u
dGV4dE1lbnU7Ci0gICAgICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID09
IC0xKQotICAgICAgICBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVT
ZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOwotCi0gICAgICB2YXIgb2xkQ1NTID0gdGUu
c3R5bGUuY3NzVGV4dDsKLSAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAiYWJz
b2x1dGUiOwotICAgICAgdGUuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRo
OiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCi0gICAgICAg
ICJweDsgbGVmdDogIiArIChlLmNsaWVudFggLSA1KSArICJweDsgei1pbmRleDogMTAwMDsgYmFj
a2dyb3VuZDogIiArCi0gICAgICAgIChpZSA/ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkiIDog
InRyYW5zcGFyZW50IikgKwotICAgICAgICAiOyBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6
IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVy
OiBhbHBoYShvcGFjaXR5PTUpOyI7Ci0gICAgICBpZiAod2Via2l0KSB2YXIgb2xkU2Nyb2xsWSA9
IHdpbmRvdy5zY3JvbGxZOyAvLyBXb3JrIGFyb3VuZCBDaHJvbWUgaXNzdWUgKCMyNzEyKQotICAg
ICAgZGlzcGxheS5pbnB1dC5mb2N1cygpOwotICAgICAgaWYgKHdlYmtpdCkgd2luZG93LnNjcm9s
bFRvKG51bGwsIG9sZFNjcm9sbFkpOwotICAgICAgZGlzcGxheS5pbnB1dC5yZXNldCgpOwotICAg
ICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZGCi0gICAgICBpZiAo
IWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHRlLnZhbHVlID0gaW5wdXQucHJldklucHV0ID0gIiAi
OwotICAgICAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gdHJ1ZTsKLSAgICAgIGRpc3BsYXku
c2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOwotICAgICAgY2xlYXJUaW1lb3V0KGRpc3Bs
YXkuZGV0ZWN0aW5nU2VsZWN0QWxsKTsKLQotICAgICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdy
ZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KLSAgICAgIC8vIHRoaXMg
YWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3ZSBjYW4gbGF0ZXIgY2hlY2sgd2hldGhl
cgotICAgICAgLy8gaXQgZ290IHNlbGVjdGVkLgotICAgICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVj
dEFsbEhhY2soKSB7Ci0gICAgICAgIGlmICh0ZS5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Ci0g
ICAgICAgICAgdmFyIHNlbGVjdGVkID0gY20uc29tZXRoaW5nU2VsZWN0ZWQoKTsKLSAgICAgICAg
ICB2YXIgZXh0dmFsID0gIlx1MjAwYiIgKyAoc2VsZWN0ZWQgPyB0ZS52YWx1ZSA6ICIiKTsKLSAg
ICAgICAgICB0ZS52YWx1ZSA9ICJcdTIxZGEiOyAvLyBVc2VkIHRvIGNhdGNoIGNvbnRleHQtbWVu
dSB1bmRvCi0gICAgICAgICAgdGUudmFsdWUgPSBleHR2YWw7Ci0gICAgICAgICAgaW5wdXQucHJl
dklucHV0ID0gc2VsZWN0ZWQgPyAiIiA6ICJcdTIwMGIiOwotICAgICAgICAgIHRlLnNlbGVjdGlv
blN0YXJ0ID0gMTsgdGUuc2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aDsKLSAgICAgICAgICAv
LyBSZS1zZXQgdGhpcywgaW4gY2FzZSBzb21lIG90aGVyIGhhbmRsZXIgdG91Y2hlZCB0aGUKLSAg
ICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLgotICAgICAgICAgIGRpc3BsYXku
c2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICBmdW5jdGlvbiByZWhpZGUoKSB7Ci0gICAgICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9
IGZhbHNlOwotICAgICAgICBpbnB1dC53cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZl
IjsKLSAgICAgICAgdGUuc3R5bGUuY3NzVGV4dCA9IG9sZENTUzsKLSAgICAgICAgaWYgKGllICYm
IGllX3ZlcnNpb24gPCA5KSBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zKTsKLQotICAgICAgICAvLyBUcnkgdG8gZGV0
ZWN0IHRoZSB1c2VyIGNob29zaW5nIHNlbGVjdC1hbGwKLSAgICAgICAgaWYgKHRlLnNlbGVjdGlv
blN0YXJ0ICE9IG51bGwpIHsKLSAgICAgICAgICBpZiAoIWllIHx8IChpZSAmJiBpZV92ZXJzaW9u
IDwgOSkpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7Ci0gICAgICAgICAgdmFyIGkgPSAwLCBwb2xs
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheS5zZWxGb3JDb250ZXh0TWVu
dSA9PSBjbS5kb2Muc2VsICYmIHRlLnNlbGVjdGlvblN0YXJ0ID09IDAgJiYKLSAgICAgICAgICAg
ICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSAiXHUyMDBiIikK
LSAgICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBjb21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9
IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKLSAgICAgICAgICAgIGVsc2UgZGlzcGxheS5pbnB1dC5y
ZXNldCgpOwotICAgICAgICAgIH07Ci0gICAgICAgICAgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RB
bGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIwMCk7Ci0gICAgICAgIH0KLSAgICAgIH0KKyAgdmFyIGZy
b20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dAorICB2
YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGlu
ZShkb2MsIHRvLmxpbmUpCisgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0g
c3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZQor
CisgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKKyAgaWYgKGNoYW5nZS5mdWxsKSB7Cisg
ICAgZG9jLmluc2VydCgwLCBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCkpCisgICAgZG9jLnJlbW92
ZSh0ZXh0Lmxlbmd0aCwgZG9jLnNpemUgLSB0ZXh0Lmxlbmd0aCkKKyAgfSBlbHNlIGlmIChpc1do
b2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkpIHsKKyAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGlu
ZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCisgICAgLy8gc3VyZSBsaW5lIG9i
amVjdHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgorICAgIHZhciBhZGRlZCA9
IGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoIC0gMSkKKyAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RM
aW5lLnRleHQsIGxhc3RTcGFucykKKyAgICBpZiAobmxpbmVzKSB7IGRvYy5yZW1vdmUoZnJvbS5s
aW5lLCBubGluZXMpIH0KKyAgICBpZiAoYWRkZWQubGVuZ3RoKSB7IGRvYy5pbnNlcnQoZnJvbS5s
aW5lLCBhZGRlZCkgfQorICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkgeworICAg
IGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7CisgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExp
bmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xp
Y2UodG8uY2gpLCBsYXN0U3BhbnMpCisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBhZGRlZCQxID0g
bGluZXNGb3IoMSwgdGV4dC5sZW5ndGggLSAxKQorICAgICAgYWRkZWQkMS5wdXNoKG5ldyBMaW5l
KGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGlt
YXRlSGVpZ2h0KSkKKyAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNl
KDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpCisgICAgICBkb2MuaW5zZXJ0KGZy
b20ubGluZSArIDEsIGFkZGVkJDEpCisgICAgfQorICB9IGVsc2UgaWYgKHRleHQubGVuZ3RoID09
IDEpIHsKKyAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9t
LmNoKSArIHRleHRbMF0gKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgc3BhbnNGb3IoMCkp
CisgICAgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMpCisgIH0gZWxzZSB7CisgICAg
dXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0
WzBdLCBzcGFuc0ZvcigwKSkKKyAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExp
bmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucykKKyAgICB2YXIgYWRkZWQkMiA9IGxpbmVz
Rm9yKDEsIHRleHQubGVuZ3RoIC0gMSkKKyAgICBpZiAobmxpbmVzID4gMSkgeyBkb2MucmVtb3Zl
KGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpIH0KKyAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSAr
IDEsIGFkZGVkJDIpCisgIH0KIAotICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgcHJl
cGFyZVNlbGVjdEFsbEhhY2soKTsKLSAgICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykgewotICAg
ICAgICBlX3N0b3AoZSk7Ci0gICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgb2ZmKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKLSAgICAgICAgICBzZXRUaW1l
b3V0KHJlaGlkZSwgMjApOwotICAgICAgICB9OwotICAgICAgICBvbih3aW5kb3csICJtb3VzZXVw
IiwgbW91c2V1cCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwg
NTApOworICBzaWduYWxMYXRlcihkb2MsICJjaGFuZ2UiLCBkb2MsIGNoYW5nZSkKK30KKworLy8g
Q2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy4KK2Z1bmN0aW9uIGxpbmtlZERvY3MoZG9j
LCBmLCBzaGFyZWRIaXN0T25seSkgeworICBmdW5jdGlvbiBwcm9wYWdhdGUoZG9jLCBza2lwLCBz
aGFyZWRIaXN0KSB7CisgICAgaWYgKGRvYy5saW5rZWQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBk
b2MubGlua2VkLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgcmVsID0gZG9jLmxpbmtlZFtpXQor
ICAgICAgaWYgKHJlbC5kb2MgPT0gc2tpcCkgeyBjb250aW51ZSB9CisgICAgICB2YXIgc2hhcmVk
ID0gc2hhcmVkSGlzdCAmJiByZWwuc2hhcmVkSGlzdAorICAgICAgaWYgKHNoYXJlZEhpc3RPbmx5
ICYmICFzaGFyZWQpIHsgY29udGludWUgfQorICAgICAgZihyZWwuZG9jLCBzaGFyZWQpCisgICAg
ICBwcm9wYWdhdGUocmVsLmRvYywgZG9jLCBzaGFyZWQpCisgICAgfSB9CisgIH0KKyAgcHJvcGFn
YXRlKGRvYywgbnVsbCwgdHJ1ZSkKK30KKworLy8gQXR0YWNoIGEgZG9jdW1lbnQgdG8gYW4gZWRp
dG9yLgorZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHsKKyAgaWYgKGRvYy5jbSkgeyB0aHJv
dyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIikgfQorICBjbS5k
b2MgPSBkb2MKKyAgZG9jLmNtID0gY20KKyAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkKKyAgbG9h
ZE1vZGUoY20pCisgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZmluZE1heExpbmUo
Y20pIH0KKyAgY20ub3B0aW9ucy5tb2RlID0gZG9jLm1vZGVPcHRpb24KKyAgcmVnQ2hhbmdlKGNt
KQorfQorCitmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7CisgIC8vIEFycmF5cyBvZiBjaGFu
Z2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhbgorICAvLyBl
dmVudCB0byBkb25lIGFuZCBjbGVhcnMgdW5kby4gVW5kb2luZyBtb3ZlcyBldmVudHMgZnJvbSBk
b25lCisgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGluIHRoZSBvdGhlciBkaXJl
Y3Rpb24uCisgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdCisgIHRoaXMudW5kb0Rl
cHRoID0gSW5maW5pdHkKKyAgLy8gVXNlZCB0byB0cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1l
cmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KKyAgLy8gZXZlbnQKKyAgdGhpcy5sYXN0TW9kVGltZSA9
IHRoaXMubGFzdFNlbFRpbWUgPSAwCisgIHRoaXMubGFzdE9wID0gdGhpcy5sYXN0U2VsT3AgPSBu
dWxsCisgIHRoaXMubGFzdE9yaWdpbiA9IHRoaXMubGFzdFNlbE9yaWdpbiA9IG51bGwKKyAgLy8g
VXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAorICB0aGlzLmdlbmVyYXRpb24gPSB0aGlzLm1h
eEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxCit9CisKKy8vIENyZWF0ZSBhIGhpc3RvcnkgY2hh
bmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0eWxlIGNoYW5nZQorLy8gb2JqZWN0LgorZnVu
Y3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgdmFyIGhpc3RD
aGFuZ2UgPSB7ZnJvbTogY29weVBvcyhjaGFuZ2UuZnJvbSksIHRvOiBjaGFuZ2VFbmQoY2hhbmdl
KSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfQorICBhdHRh
Y2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRv
LmxpbmUgKyAxKQorICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gYXR0
YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50
by5saW5lICsgMSk7IH0sIHRydWUpCisgIHJldHVybiBoaXN0Q2hhbmdlCit9CisKKy8vIFBvcCBh
bGwgc2VsZWN0aW9uIGV2ZW50cyBvZmYgdGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3Ag
YXQKKy8vIGEgY2hhbmdlIGV2ZW50LgorZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25FdmVudHMoYXJy
YXkpIHsKKyAgd2hpbGUgKGFycmF5Lmxlbmd0aCkgeworICAgIHZhciBsYXN0ID0gbHN0KGFycmF5
KQorICAgIGlmIChsYXN0LnJhbmdlcykgeyBhcnJheS5wb3AoKSB9CisgICAgZWxzZSB7IGJyZWFr
IH0KKyAgfQorfQorCisvLyBGaW5kIHRoZSB0b3AgY2hhbmdlIGV2ZW50IGluIHRoZSBoaXN0b3J5
LiBQb3Agb2ZmIHNlbGVjdGlvbgorLy8gZXZlbnRzIHRoYXQgYXJlIGluIHRoZSB3YXkuCitmdW5j
dGlvbiBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgZm9yY2UpIHsKKyAgaWYgKGZvcmNlKSB7CisgICAg
Y2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC5kb25lKQorICAgIHJldHVybiBsc3QoaGlzdC5kb25l
KQorICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJhbmdl
cykgeworICAgIHJldHVybiBsc3QoaGlzdC5kb25lKQorICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5s
ZW5ndGggPiAxICYmICFoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDJdLnJhbmdlcykgewor
ICAgIGhpc3QuZG9uZS5wb3AoKQorICAgIHJldHVybiBsc3QoaGlzdC5kb25lKQorICB9Cit9CisK
Ky8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJnZXMgY2hhbmdlcyB0aGF0
IGFyZSB3aXRoaW4KKy8vIGEgc2luZ2xlIG9wZXJhdGlvbiwgb3IgYXJlIGNsb3NlIHRvZ2V0aGVy
IHdpdGggYW4gb3JpZ2luIHRoYXQKKy8vIGFsbG93cyBtZXJnaW5nIChzdGFydGluZyB3aXRoICIr
IikgaW50byBhIHNpbmdsZSBldmVudC4KK2Z1bmN0aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2Ms
IGNoYW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHsKKyAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeQorICBo
aXN0LnVuZG9uZS5sZW5ndGggPSAwCisgIHZhciB0aW1lID0gK25ldyBEYXRlLCBjdXIKKyAgdmFy
IGxhc3QKKworICBpZiAoKGhpc3QubGFzdE9wID09IG9wSWQgfHwKKyAgICAgICBoaXN0Lmxhc3RP
cmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2luICYmCisgICAgICAgKChjaGFu
Z2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdE1vZFRpbWUg
PiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8CisgICAgICAgIGNo
YW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIqIikpICYmCisgICAgICAoY3VyID0gbGFzdENoYW5n
ZUV2ZW50KGhpc3QsIGhpc3QubGFzdE9wID09IG9wSWQpKSkgeworICAgIC8vIE1lcmdlIHRoaXMg
Y2hhbmdlIGludG8gdGhlIGxhc3QgZXZlbnQKKyAgICBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKQor
ICAgIGlmIChjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZy
b20sIGxhc3QudG8pID09IDApIHsKKyAgICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzaW1wbGUg
aW5zZXJ0aW9uIC0tIGRvbid0IHdhbnQgdG8gYWRkCisgICAgICAvLyBuZXcgY2hhbmdlc2V0cyBm
b3IgZXZlcnkgY2hhcmFjdGVyIHR5cGVkCisgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5n
ZSkKKyAgICB9IGVsc2UgeworICAgICAgLy8gQWRkIG5ldyBzdWItZXZlbnQKKyAgICAgIGN1ci5j
aGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKQorICAgIH0K
KyAgfSBlbHNlIHsKKyAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQu
CisgICAgdmFyIGJlZm9yZSA9IGxzdChoaXN0LmRvbmUpCisgICAgaWYgKCFiZWZvcmUgfHwgIWJl
Zm9yZS5yYW5nZXMpCisgICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLnNlbCwgaGlz
dC5kb25lKSB9CisgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShk
b2MsIGNoYW5nZSldLAorICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259Cisg
ICAgaGlzdC5kb25lLnB1c2goY3VyKQorICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlz
dC51bmRvRGVwdGgpIHsKKyAgICAgIGhpc3QuZG9uZS5zaGlmdCgpCisgICAgICBpZiAoIWhpc3Qu
ZG9uZVswXS5yYW5nZXMpIHsgaGlzdC5kb25lLnNoaWZ0KCkgfQorICAgIH0KKyAgfQorICBoaXN0
LmRvbmUucHVzaChzZWxBZnRlcikKKyAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVy
YXRpb24KKyAgaGlzdC5sYXN0TW9kVGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lCisgIGhp
c3QubGFzdE9wID0gaGlzdC5sYXN0U2VsT3AgPSBvcElkCisgIGhpc3QubGFzdE9yaWdpbiA9IGhp
c3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW4KKworICBpZiAoIWxhc3QpIHsgc2lnbmFs
KGRvYywgImhpc3RvcnlBZGRlZCIpIH0KK30KKworZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5C
ZU1lcmdlZChkb2MsIG9yaWdpbiwgcHJldiwgc2VsKSB7CisgIHZhciBjaCA9IG9yaWdpbi5jaGFy
QXQoMCkKKyAgcmV0dXJuIGNoID09ICIqIiB8fAorICAgIGNoID09ICIrIiAmJgorICAgIHByZXYu
cmFuZ2VzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJgorICAgIHByZXYuc29tZXRoaW5n
U2VsZWN0ZWQoKSA9PSBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSAmJgorICAgIG5ldyBEYXRlIC0g
ZG9jLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3Rv
cnlFdmVudERlbGF5IDogNTAwKQorfQorCisvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlv
biBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzCisvLyB0aGUgcGVuZGluZyBzZWxl
Y3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5nCisvLyBzZWxl
Y3Rpb24gaW50byB0aGUgJ2RvbmUnIGFycmF5IHdoZW4gaXQgd2FzIHNpZ25pZmljYW50bHkKKy8v
IGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywgZW1wdGluZXNzLCBvciB0
aW1lKS4KK2Z1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIHNlbCwgb3BJZCwgb3B0
aW9ucykgeworICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBvcmlnaW4gPSBvcHRpb25zICYmIG9w
dGlvbnMub3JpZ2luCisKKyAgLy8gQSBuZXcgZXZlbnQgaXMgc3RhcnRlZCB3aGVuIHRoZSBwcmV2
aW91cyBvcmlnaW4gZG9lcyBub3QgbWF0Y2gKKyAgLy8gdGhlIGN1cnJlbnQsIG9yIHRoZSBvcmln
aW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5zCisgIC8vIHN0YXJ0aW5nIHdpdGggKiBh
cmUgYWx3YXlzIG1lcmdlZCwgdGhvc2Ugc3RhcnRpbmcgd2l0aCArIGFyZQorICAvLyBtZXJnZWQg
d2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhlciBpbiB0aW1lLgorICBpZiAob3BJZCA9PSBo
aXN0Lmxhc3RTZWxPcCB8fAorICAgICAgKG9yaWdpbiAmJiBoaXN0Lmxhc3RTZWxPcmlnaW4gPT0g
b3JpZ2luICYmCisgICAgICAgKGhpc3QubGFzdE1vZFRpbWUgPT0gaGlzdC5sYXN0U2VsVGltZSAm
JiBoaXN0Lmxhc3RPcmlnaW4gPT0gb3JpZ2luIHx8CisgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2Fu
QmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxzdChoaXN0LmRvbmUpLCBzZWwpKSkpCisgICAgeyBoaXN0
LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDFdID0gc2VsIH0KKyAgZWxzZQorICAgIHsgcHVzaFNl
bGVjdGlvblRvSGlzdG9yeShzZWwsIGhpc3QuZG9uZSkgfQorCisgIGhpc3QubGFzdFNlbFRpbWUg
PSArbmV3IERhdGUKKyAgaGlzdC5sYXN0U2VsT3JpZ2luID0gb3JpZ2luCisgIGhpc3QubGFzdFNl
bE9wID0gb3BJZAorICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNsZWFyUmVkbyAhPT0gZmFsc2Up
CisgICAgeyBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LnVuZG9uZSkgfQorfQorCitmdW5jdGlv
biBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgZGVzdCkgeworICB2YXIgdG9wID0gbHN0KGRl
c3QpCisgIGlmICghKHRvcCAmJiB0b3AucmFuZ2VzICYmIHRvcC5lcXVhbHMoc2VsKSkpCisgICAg
eyBkZXN0LnB1c2goc2VsKSB9Cit9CisKKy8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5m
b3JtYXRpb24gaW4gdGhlIGhpc3RvcnkuCitmdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywg
Y2hhbmdlLCBmcm9tLCB0bykgeworICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBk
b2MuaWRdLCBuID0gMAorICBkb2MuaXRlcihNYXRoLm1heChkb2MuZmlyc3QsIGZyb20pLCBNYXRo
Lm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgdG8pLCBmdW5jdGlvbiAobGluZSkgeworICAgIGlm
IChsaW5lLm1hcmtlZFNwYW5zKQorICAgICAgeyAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hh
bmdlWyJzcGFuc18iICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zIH0KKyAg
ICArK24KKyAgfSkKK30KKworLy8gV2hlbiB1bi9yZS1kb2luZyByZXN0b3JlcyB0ZXh0IGNvbnRh
aW5pbmcgbWFya2VkIHNwYW5zLCB0aG9zZQorLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBj
bGVhcmVkIHNob3VsZCBub3QgYmUgcmVzdG9yZWQuCitmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3Bh
bnMoc3BhbnMpIHsKKyAgaWYgKCFzcGFucykgeyByZXR1cm4gbnVsbCB9CisgIHZhciBvdXQKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAgIGlmIChzcGFuc1tp
XS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIHsgb3V0ID0gc3BhbnMuc2xp
Y2UoMCwgaSkgfSB9CisgICAgZWxzZSBpZiAob3V0KSB7IG91dC5wdXNoKHNwYW5zW2ldKSB9Cisg
IH0KKyAgcmV0dXJuICFvdXQgPyBzcGFucyA6IG91dC5sZW5ndGggPyBvdXQgOiBudWxsCit9CisK
Ky8vIFJldHJpZXZlIGFuZCBmaWx0ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVkIGluIGEg
Y2hhbmdlIGV2ZW50LgorZnVuY3Rpb24gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsKKyAgdmFy
IGZvdW5kID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXQorICBpZiAoIWZvdW5kKSB7IHJldHVy
biBudWxsIH0KKyAgdmFyIG53ID0gW10KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2UudGV4
dC5sZW5ndGg7ICsraSkKKyAgICB7IG53LnB1c2gocmVtb3ZlQ2xlYXJlZFNwYW5zKGZvdW5kW2ld
KSkgfQorICByZXR1cm4gbncKK30KKworLy8gVXNlZCBmb3IgdW4vcmUtZG9pbmcgY2hhbmdlcyBm
cm9tIHRoZSBoaXN0b3J5LiBDb21iaW5lcyB0aGUKKy8vIHJlc3VsdCBvZiBjb21wdXRpbmcgdGhl
IGV4aXN0aW5nIHNwYW5zIHdpdGggdGhlIHNldCBvZiBzcGFucyB0aGF0CisvLyBleGlzdGVkIGlu
IHRoZSBoaXN0b3J5IChzbyB0aGF0IGRlbGV0aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW4KKy8v
IHVuZG9pbmcgYnJpbmdzIGJhY2sgdGhlIHNwYW4pLgorZnVuY3Rpb24gbWVyZ2VPbGRTcGFucyhk
b2MsIGNoYW5nZSkgeworICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpCisgIHZh
ciBzdHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKQorICBpZiAo
IW9sZCkgeyByZXR1cm4gc3RyZXRjaGVkIH0KKyAgaWYgKCFzdHJldGNoZWQpIHsgcmV0dXJuIG9s
ZCB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIg
b2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldCisgICAgaWYgKG9sZEN1
ciAmJiBzdHJldGNoQ3VyKSB7CisgICAgICBzcGFuczogZm9yICh2YXIgaiA9IDA7IGogPCBzdHJl
dGNoQ3VyLmxlbmd0aDsgKytqKSB7CisgICAgICAgIHZhciBzcGFuID0gc3RyZXRjaEN1cltqXQor
ICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9sZEN1ci5sZW5ndGg7ICsraykKKyAgICAgICAg
ICB7IGlmIChvbGRDdXJba10ubWFya2VyID09IHNwYW4ubWFya2VyKSB7IGNvbnRpbnVlIHNwYW5z
IH0gfQorICAgICAgICBvbGRDdXIucHVzaChzcGFuKQogICAgICAgfQotICAgIH0sCi0KLSAgICBz
ZXRVbmVkaXRhYmxlOiBub3RoaW5nLAotCi0gICAgbmVlZHNDb250ZW50QXR0cmlidXRlOiBmYWxz
ZQotICB9LCBUZXh0YXJlYUlucHV0LnByb3RvdHlwZSk7Ci0KLSAgLy8gQ09OVEVOVEVESVRBQkxF
IElOUFVUIFNUWUxFCi0KLSAgZnVuY3Rpb24gQ29udGVudEVkaXRhYmxlSW5wdXQoY20pIHsKLSAg
ICB0aGlzLmNtID0gY207Ci0gICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHRoaXMubGFzdEFuY2hv
ck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9kZSA9IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gbnVs
bDsKLSAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpOwotICAgIHRoaXMuZ3JhY2VQZXJp
b2QgPSBmYWxzZTsKLSAgfQotCi0gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZSA9IGNv
cHlPYmooewotICAgIGluaXQ6IGZ1bmN0aW9uKGRpc3BsYXkpIHsKLSAgICAgIHZhciBpbnB1dCA9
IHRoaXMsIGNtID0gaW5wdXQuY207Ci0gICAgICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxh
eS5saW5lRGl2OwotICAgICAgZGl2LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVlIjsKLSAgICAgIGRp
c2FibGVCcm93c2VyTWFnaWMoZGl2KTsKLQotICAgICAgb24oZGl2LCAicGFzdGUiLCBmdW5jdGlv
bihlKSB7IGhhbmRsZVBhc3RlKGUsIGNtKTsgfSkKLQotICAgICAgb24oZGl2LCAiY29tcG9zaXRp
b25zdGFydCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGRhdGEgPSBlLmRhdGE7Ci0gICAg
ICAgIGlucHV0LmNvbXBvc2luZyA9IHtzZWw6IGNtLmRvYy5zZWwsIGRhdGE6IGRhdGEsIHN0YXJ0
RGF0YTogZGF0YX07Ci0gICAgICAgIGlmICghZGF0YSkgcmV0dXJuOwotICAgICAgICB2YXIgcHJp
bSA9IGNtLmRvYy5zZWwucHJpbWFyeSgpOwotICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUo
cHJpbS5oZWFkLmxpbmUpOwotICAgICAgICB2YXIgZm91bmQgPSBsaW5lLmluZGV4T2YoZGF0YSwg
TWF0aC5tYXgoMCwgcHJpbS5oZWFkLmNoIC0gZGF0YS5sZW5ndGgpKTsKLSAgICAgICAgaWYgKGZv
dW5kID4gLTEgJiYgZm91bmQgPD0gcHJpbS5oZWFkLmNoKQotICAgICAgICAgIGlucHV0LmNvbXBv
c2luZy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oUG9zKHByaW0uaGVhZC5saW5lLCBmb3VuZCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MocHJpbS5o
ZWFkLmxpbmUsIGZvdW5kICsgZGF0YS5sZW5ndGgpKTsKLSAgICAgIH0pOwotICAgICAgb24oZGl2
LCAiY29tcG9zaXRpb251cGRhdGUiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlucHV0LmNvbXBv
c2luZy5kYXRhID0gZS5kYXRhOwotICAgICAgfSk7Ci0gICAgICBvbihkaXYsICJjb21wb3NpdGlv
bmVuZCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIG91cnMgPSBpbnB1dC5jb21wb3Npbmc7
Ci0gICAgICAgIGlmICghb3VycykgcmV0dXJuOwotICAgICAgICBpZiAoZS5kYXRhICE9IG91cnMu
c3RhcnREYXRhICYmICEvXHUyMDBiLy50ZXN0KGUuZGF0YSkpCi0gICAgICAgICAgb3Vycy5kYXRh
ID0gZS5kYXRhOwotICAgICAgICAvLyBOZWVkIGEgc21hbGwgZGVsYXkgdG8gcHJldmVudCBvdGhl
ciBjb2RlIChpbnB1dCBldmVudCwKLSAgICAgICAgLy8gc2VsZWN0aW9uIHBvbGxpbmcpIGZyb20g
ZG9pbmcgZGFtYWdlIHdoZW4gZmlyZWQgcmlnaHQgYWZ0ZXIKLSAgICAgICAgLy8gY29tcG9zaXRp
b25lbmQuCi0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKCFv
dXJzLmhhbmRsZWQpCi0gICAgICAgICAgICBpbnB1dC5hcHBseUNvbXBvc2l0aW9uKG91cnMpOwot
ICAgICAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcgPT0gb3VycykKLSAgICAgICAgICAgIGlucHV0
LmNvbXBvc2luZyA9IG51bGw7Ci0gICAgICAgIH0sIDUwKTsKLSAgICAgIH0pOwotCi0gICAgICBv
bihkaXYsICJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlucHV0LmZvcmNlQ29t
cG9zaXRpb25FbmQoKTsKLSAgICAgIH0pOwotCi0gICAgICBvbihkaXYsICJpbnB1dCIsIGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAoaW5wdXQuY29tcG9zaW5nKSByZXR1cm47Ci0gICAgICAgIGlm
ICghaW5wdXQucG9sbENvbnRlbnQoKSkKLSAgICAgICAgICBydW5Jbk9wKGlucHV0LmNtLCBmdW5j
dGlvbigpIHtyZWdDaGFuZ2UoY20pO30pOwotICAgICAgfSk7Ci0KLSAgICAgIGZ1bmN0aW9uIG9u
Q29weUN1dChlKSB7Ci0gICAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7Ci0gICAg
ICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNlbGVjdGlvbnMoKTsKLSAgICAgICAgICBpZiAoZS50
eXBlID09ICJjdXQiKSBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiLCBudWxsLCAiY3V0Iik7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJs
ZVJhbmdlcyhjbSk7Ci0gICAgICAgICAgbGFzdENvcGllZCA9IHJhbmdlcy50ZXh0OwotICAgICAg
ICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsKLSAgICAgICAgICAgIGNtLm9wZXJhdGlvbihmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAw
LCBzZWxfZG9udFNjcm9sbCk7Ci0gICAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIs
IG51bGwsICJjdXQiKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAvLyBpT1MgZXhwb3NlcyB0aGUgY2xpcGJvYXJkIEFQSSwgYnV0IHNlZW1zIHRvIGRp
c2NhcmQgY29udGVudCBpbnNlcnRlZCBpbnRvIGl0Ci0gICAgICAgIGlmIChlLmNsaXBib2FyZERh
dGEgJiYgIWlvcykgewotICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICBl
LmNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7Ci0gICAgICAgICAgZS5jbGlwYm9hcmREYXRhLnNl
dERhdGEoInRleHQvcGxhaW4iLCBsYXN0Q29waWVkLmpvaW4oIlxuIikpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIC8vIE9sZC1mYXNoaW9uZWQgYnJpZWZseS1mb2N1cy1hLXRleHRhcmVh
IGhhY2sKLSAgICAgICAgICB2YXIga2x1ZGdlID0gaGlkZGVuVGV4dGFyZWEoKSwgdGUgPSBrbHVk
Z2UuZmlyc3RDaGlsZDsKLSAgICAgICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZv
cmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTsKLSAgICAgICAgICB0
ZS52YWx1ZSA9IGxhc3RDb3BpZWQuam9pbigiXG4iKTsKLSAgICAgICAgICB2YXIgaGFkRm9jdXMg
PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgICAgICAgIHNlbGVjdElucHV0KHRlKTsKLSAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgY20uZGlzcGxheS5s
aW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdlKTsKLSAgICAgICAgICAgIGhhZEZvY3VzLmZvY3Vz
KCk7Ci0gICAgICAgICAgfSwgNTApOworICAgIH0gZWxzZSBpZiAoc3RyZXRjaEN1cikgeworICAg
ICAgb2xkW2ldID0gc3RyZXRjaEN1cgorICAgIH0KKyAgfQorICByZXR1cm4gb2xkCit9CisKKy8v
IFVzZWQgYm90aCB0byBwcm92aWRlIGEgSlNPTi1zYWZlIG9iamVjdCBpbiAuZ2V0SGlzdG9yeSwg
YW5kLCB3aGVuCisvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3Rvcnkg
aW4gdHdvCitmdW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXAsIGluc3Rh
bnRpYXRlU2VsKSB7CisgIHZhciBjb3B5ID0gW10KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVu
dHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZXZlbnQgPSBldmVudHNbaV0KKyAgICBpZiAoZXZl
bnQucmFuZ2VzKSB7CisgICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24u
cHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpCisgICAgICBjb250aW51ZQor
ICAgIH0KKyAgICB2YXIgY2hhbmdlcyA9IGV2ZW50LmNoYW5nZXMsIG5ld0NoYW5nZXMgPSBbXQor
ICAgIGNvcHkucHVzaCh7Y2hhbmdlczogbmV3Q2hhbmdlc30pCisgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytqKSB7CisgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tq
XSwgbSA9ICh2b2lkIDApCisgICAgICBuZXdDaGFuZ2VzLnB1c2goe2Zyb206IGNoYW5nZS5mcm9t
LCB0bzogY2hhbmdlLnRvLCB0ZXh0OiBjaGFuZ2UudGV4dH0pCisgICAgICBpZiAobmV3R3JvdXAp
IHsgZm9yICh2YXIgcHJvcCBpbiBjaGFuZ2UpIHsgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3BhbnNf
KFxkKykkLykpIHsKKyAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkg
PiAtMSkgeworICAgICAgICAgIGxzdChuZXdDaGFuZ2VzKVtwcm9wXSA9IGNoYW5nZVtwcm9wXQor
ICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VbcHJvcF0KICAgICAgICAgfQorICAgICAgfSB9IH0KKyAg
ICB9CisgIH0KKyAgcmV0dXJuIGNvcHkKK30KKworLy8gVGhlICdzY3JvbGwnIHBhcmFtZXRlciBn
aXZlbiB0byBtYW55IG9mIHRoZXNlIGluZGljYXRlZCB3aGV0aGVyCisvLyB0aGUgbmV3IGN1cnNv
ciBwb3NpdGlvbiBzaG91bGQgYmUgc2Nyb2xsZWQgaW50byB2aWV3IGFmdGVyCisvLyBtb2RpZnlp
bmcgdGhlIHNlbGVjdGlvbi4KKworLy8gSWYgc2hpZnQgaXMgaGVsZCBvciB0aGUgZXh0ZW5kIGZs
YWcgaXMgc2V0LCBleHRlbmRzIGEgcmFuZ2UgdG8KKy8vIGluY2x1ZGUgYSBnaXZlbiBwb3NpdGlv
biAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLgorLy8gT3RoZXJ3aXNlLCBzaW1w
bHkgcmV0dXJucyB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zLgorLy8gVXNl
ZCBmb3IgY3Vyc29yIG1vdGlvbiBhbmQgc3VjaC4KK2Z1bmN0aW9uIGV4dGVuZFJhbmdlKGRvYywg
cmFuZ2UsIGhlYWQsIG90aGVyKSB7CisgIGlmIChkb2MuY20gJiYgZG9jLmNtLmRpc3BsYXkuc2hp
ZnQgfHwgZG9jLmV4dGVuZCkgeworICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3IKKyAgICBp
ZiAob3RoZXIpIHsKKyAgICAgIHZhciBwb3NCZWZvcmUgPSBjbXAoaGVhZCwgYW5jaG9yKSA8IDAK
KyAgICAgIGlmIChwb3NCZWZvcmUgIT0gKGNtcChvdGhlciwgYW5jaG9yKSA8IDApKSB7CisgICAg
ICAgIGFuY2hvciA9IGhlYWQKKyAgICAgICAgaGVhZCA9IG90aGVyCisgICAgICB9IGVsc2UgaWYg
KHBvc0JlZm9yZSAhPSAoY21wKGhlYWQsIG90aGVyKSA8IDApKSB7CisgICAgICAgIGhlYWQgPSBv
dGhlcgogICAgICAgfQotICAgICAgb24oZGl2LCAiY29weSIsIG9uQ29weUN1dCk7Ci0gICAgICBv
bihkaXYsICJjdXQiLCBvbkNvcHlDdXQpOwotICAgIH0sCi0KLSAgICBwcmVwYXJlU2VsZWN0aW9u
OiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKHRoaXMu
Y20sIGZhbHNlKTsKLSAgICAgIHJlc3VsdC5mb2N1cyA9IHRoaXMuY20uc3RhdGUuZm9jdXNlZDsK
LSAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBuZXcgUmFuZ2UoYW5jaG9y
LCBoZWFkKQorICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwg
aGVhZCkKKyAgfQorfQorCisvLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBk
aXNjYXJkIHRoZSByZXN0LgorZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9uKGRvYywgaGVhZCwgb3Ro
ZXIsIG9wdGlvbnMpIHsKKyAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbZXh0ZW5k
UmFuZ2UoZG9jLCBkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIpXSwgMCksIG9wdGlvbnMp
Cit9CisKKy8vIEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVj
dGlvbnMgd2l0aCBsZW5ndGgKKy8vIGVxdWFsIHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucykKK2Z1
bmN0aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykgeworICB2YXIgb3V0
ID0gW10KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykK
KyAgICB7IG91dFtpXSA9IGV4dGVuZFJhbmdlKGRvYywgZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRz
W2ldLCBudWxsKSB9CisgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Mu
c2VsLnByaW1JbmRleCkKKyAgc2V0U2VsZWN0aW9uKGRvYywgbmV3U2VsLCBvcHRpb25zKQorfQor
CisvLyBVcGRhdGVzIGEgc2luZ2xlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24uCitmdW5jdGlvbiBy
ZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgaSwgcmFuZ2UsIG9wdGlvbnMpIHsKKyAgdmFyIHJhbmdl
cyA9IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApCisgIHJhbmdlc1tpXSA9IHJhbmdlCisgIHNldFNl
bGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIGRvYy5zZWwucHJpbUluZGV4
KSwgb3B0aW9ucykKK30KKworLy8gUmVzZXQgdGhlIHNlbGVjdGlvbiB0byBhIHNpbmdsZSByYW5n
ZS4KK2Z1bmN0aW9uIHNldFNpbXBsZVNlbGVjdGlvbihkb2MsIGFuY2hvciwgaGVhZCwgb3B0aW9u
cykgeworICBzZXRTZWxlY3Rpb24oZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwg
b3B0aW9ucykKK30KKworLy8gR2l2ZSBiZWZvcmVTZWxlY3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBj
aGFuZ2UgdG8gaW5mbHVlbmNlIGEKKy8vIHNlbGVjdGlvbiB1cGRhdGUuCitmdW5jdGlvbiBmaWx0
ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwsIG9wdGlvbnMpIHsKKyAgdmFyIG9iaiA9IHsKKyAg
ICByYW5nZXM6IHNlbC5yYW5nZXMsCisgICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHsKKyAg
ICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgICB0aGlzLnJhbmdlcyA9IFtdCisgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgeyB0aGlzJDEu
cmFuZ2VzW2ldID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uYW5jaG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5o
ZWFkKSkgfQogICAgIH0sCisgICAgb3JpZ2luOiBvcHRpb25zICYmIG9wdGlvbnMub3JpZ2luCisg
IH0KKyAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYywgb2JqKQorICBp
ZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLCBkb2Mu
Y20sIG9iaikgfQorICBpZiAob2JqLnJhbmdlcyAhPSBzZWwucmFuZ2VzKSB7IHJldHVybiBub3Jt
YWxpemVTZWxlY3Rpb24ob2JqLnJhbmdlcywgb2JqLnJhbmdlcy5sZW5ndGggLSAxKSB9CisgIGVs
c2UgeyByZXR1cm4gc2VsIH0KK30KKworZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3Rv
cnkoZG9jLCBzZWwsIG9wdGlvbnMpIHsKKyAgdmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBs
YXN0ID0gbHN0KGRvbmUpCisgIGlmIChsYXN0ICYmIGxhc3QucmFuZ2VzKSB7CisgICAgZG9uZVtk
b25lLmxlbmd0aCAtIDFdID0gc2VsCisgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBv
cHRpb25zKQorICB9IGVsc2UgeworICAgIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucykK
KyAgfQorfQogCi0gICAgc2hvd1NlbGVjdGlvbjogZnVuY3Rpb24oaW5mbykgewotICAgICAgaWYg
KCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgpIHJldHVybjsKLSAgICAgIGlm
IChpbmZvLmZvY3VzKSB0aGlzLnNob3dQcmltYXJ5U2VsZWN0aW9uKCk7Ci0gICAgICB0aGlzLnNo
b3dNdWx0aXBsZVNlbGVjdGlvbnMoaW5mbyk7Ci0gICAgfSwKKy8vIFNldCBhIG5ldyBzZWxlY3Rp
b24uCitmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHsKKyAgc2V0U2Vs
ZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKQorICBhZGRTZWxlY3Rpb25Ub0hpc3Rvcnko
ZG9jLCBkb2Muc2VsLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4sIG9wdGlvbnMpCit9
CiAKLSAgICBzaG93UHJpbWFyeVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgc2Vs
ID0gd2luZG93LmdldFNlbGVjdGlvbigpLCBwcmltID0gdGhpcy5jbS5kb2Muc2VsLnByaW1hcnko
KTsKLSAgICAgIHZhciBjdXJBbmNob3IgPSBkb21Ub1Bvcyh0aGlzLmNtLCBzZWwuYW5jaG9yTm9k
ZSwgc2VsLmFuY2hvck9mZnNldCk7Ci0gICAgICB2YXIgY3VyRm9jdXMgPSBkb21Ub1Bvcyh0aGlz
LmNtLCBzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpOwotICAgICAgaWYgKGN1ckFuY2hv
ciAmJiAhY3VyQW5jaG9yLmJhZCAmJiBjdXJGb2N1cyAmJiAhY3VyRm9jdXMuYmFkICYmCi0gICAg
ICAgICAgY21wKG1pblBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgcHJpbS5mcm9tKCkpID09IDAg
JiYKLSAgICAgICAgICBjbXAobWF4UG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCBwcmltLnRvKCkp
ID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgICAgdmFyIHN0YXJ0ID0gcG9zVG9ET00odGhp
cy5jbSwgcHJpbS5mcm9tKCkpOwotICAgICAgdmFyIGVuZCA9IHBvc1RvRE9NKHRoaXMuY20sIHBy
aW0udG8oKSk7Ci0gICAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHJldHVybjsKLQotICAgICAgdmFy
IHZpZXcgPSB0aGlzLmNtLmRpc3BsYXkudmlldzsKLSAgICAgIHZhciBvbGQgPSBzZWwucmFuZ2VD
b3VudCAmJiBzZWwuZ2V0UmFuZ2VBdCgwKTsKLSAgICAgIGlmICghc3RhcnQpIHsKLSAgICAgICAg
c3RhcnQgPSB7bm9kZTogdmlld1swXS5tZWFzdXJlLm1hcFsyXSwgb2Zmc2V0OiAwfTsKLSAgICAg
IH0gZWxzZSBpZiAoIWVuZCkgeyAvLyBGSVhNRSBkYW5nZXJvdXNseSBoYWNreQotICAgICAgICB2
YXIgbWVhc3VyZSA9IHZpZXdbdmlldy5sZW5ndGggLSAxXS5tZWFzdXJlOwotICAgICAgICB2YXIg
bWFwID0gbWVhc3VyZS5tYXBzID8gbWVhc3VyZS5tYXBzW21lYXN1cmUubWFwcy5sZW5ndGggLSAx
XSA6IG1lYXN1cmUubWFwOwotICAgICAgICBlbmQgPSB7bm9kZTogbWFwW21hcC5sZW5ndGggLSAx
XSwgb2Zmc2V0OiBtYXBbbWFwLmxlbmd0aCAtIDJdIC0gbWFwW21hcC5sZW5ndGggLSAzXX07Ci0g
ICAgICB9CitmdW5jdGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHsK
KyAgaWYgKGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikgfHwgZG9jLmNt
ICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpCisgICAgeyBz
ZWwgPSBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwsIG9wdGlvbnMpIH0KIAotICAgICAg
dHJ5IHsgdmFyIHJuZyA9IHJhbmdlKHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCwgZW5kLm9mZnNl
dCwgZW5kLm5vZGUpOyB9Ci0gICAgICBjYXRjaChlKSB7fSAvLyBPdXIgbW9kZWwgb2YgdGhlIERP
TSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmFuZ2Ugd2UgdHJ5IHRvIHNl
dCBjYW4gYmUgaW1wb3NzaWJsZQotICAgICAgaWYgKHJuZykgewotICAgICAgICBzZWwucmVtb3Zl
QWxsUmFuZ2VzKCk7Ci0gICAgICAgIHNlbC5hZGRSYW5nZShybmcpOwotICAgICAgICBpZiAob2xk
ICYmIHNlbC5hbmNob3JOb2RlID09IG51bGwpIHNlbC5hZGRSYW5nZShvbGQpOwotICAgICAgICBl
bHNlIGlmIChnZWNrbykgdGhpcy5zdGFydEdyYWNlUGVyaW9kKCk7Ci0gICAgICB9Ci0gICAgICB0
aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7Ci0gICAgfSwKKyAgdmFyIGJpYXMgPSBvcHRpb25zICYm
IG9wdGlvbnMuYmlhcyB8fAorICAgIChjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnBy
aW1hcnkoKS5oZWFkKSA8IDAgPyAtMSA6IDEpCisgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tp
cEF0b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCB0cnVlKSkKIAotICAgIHN0YXJ0R3Jh
Y2VQZXJpb2Q6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGlucHV0ID0gdGhpczsKLSAgICAgIGNs
ZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTsKLSAgICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBpbnB1dC5ncmFjZVBlcmlvZCA9IGZhbHNl
OwotICAgICAgICBpZiAoaW5wdXQuc2VsZWN0aW9uQ2hhbmdlZCgpKQotICAgICAgICAgIGlucHV0
LmNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgaW5wdXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdl
ZCA9IHRydWU7IH0pOwotICAgICAgfSwgMjApOwotICAgIH0sCisgIGlmICghKG9wdGlvbnMgJiYg
b3B0aW9ucy5zY3JvbGwgPT09IGZhbHNlKSAmJiBkb2MuY20pCisgICAgeyBlbnN1cmVDdXJzb3JW
aXNpYmxlKGRvYy5jbSkgfQorfQogCi0gICAgc2hvd011bHRpcGxlU2VsZWN0aW9uczogZnVuY3Rp
b24oaW5mbykgewotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQodGhpcy5jbS5kaXNwbGF5LmN1
cnNvckRpdiwgaW5mby5jdXJzb3JzKTsKLSAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMu
Y20uZGlzcGxheS5zZWxlY3Rpb25EaXYsIGluZm8uc2VsZWN0aW9uKTsKLSAgICB9LAorZnVuY3Rp
b24gc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBzZWwpIHsKKyAgaWYgKHNlbC5lcXVhbHMoZG9jLnNl
bCkpIHsgcmV0dXJuIH0KIAotICAgIHJlbWVtYmVyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICB0aGlzLmxhc3RBbmNo
b3JOb2RlID0gc2VsLmFuY2hvck5vZGU7IHRoaXMubGFzdEFuY2hvck9mZnNldCA9IHNlbC5hbmNo
b3JPZmZzZXQ7Ci0gICAgICB0aGlzLmxhc3RGb2N1c05vZGUgPSBzZWwuZm9jdXNOb2RlOyB0aGlz
Lmxhc3RGb2N1c09mZnNldCA9IHNlbC5mb2N1c09mZnNldDsKLSAgICB9LAorICBkb2Muc2VsID0g
c2VsCiAKLSAgICBzZWxlY3Rpb25JbkVkaXRvcjogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgc2Vs
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgaWYgKCFzZWwucmFuZ2VDb3VudCkgcmV0
dXJuIGZhbHNlOwotICAgICAgdmFyIG5vZGUgPSBzZWwuZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNl
c3RvckNvbnRhaW5lcjsKLSAgICAgIHJldHVybiBjb250YWlucyh0aGlzLmRpdiwgbm9kZSk7Ci0g
ICAgfSwKLQotICAgIGZvY3VzOiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLmNtLm9wdGlv
bnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIikgdGhpcy5kaXYuZm9jdXMoKTsKLSAgICB9LAotICAg
IGJsdXI6IGZ1bmN0aW9uKCkgeyB0aGlzLmRpdi5ibHVyKCk7IH0sCi0gICAgZ2V0RmllbGQ6IGZ1
bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kaXY7IH0sCi0KLSAgICBzdXBwb3J0c1RvdWNoOiBmdW5j
dGlvbigpIHsgcmV0dXJuIHRydWU7IH0sCi0KLSAgICByZWNlaXZlZEZvY3VzOiBmdW5jdGlvbigp
IHsKLSAgICAgIHZhciBpbnB1dCA9IHRoaXM7Ci0gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbkVk
aXRvcigpKQotICAgICAgICB0aGlzLnBvbGxTZWxlY3Rpb24oKTsKLSAgICAgIGVsc2UKLSAgICAg
ICAgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbigpIHsgaW5wdXQuY20uY3VyT3Auc2VsZWN0aW9u
Q2hhbmdlZCA9IHRydWU7IH0pOwotCi0gICAgICBmdW5jdGlvbiBwb2xsKCkgewotICAgICAgICBp
ZiAoaW5wdXQuY20uc3RhdGUuZm9jdXNlZCkgewotICAgICAgICAgIGlucHV0LnBvbGxTZWxlY3Rp
b24oKTsKLSAgICAgICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJ
bnRlcnZhbCwgcG9sbCk7CisgIGlmIChkb2MuY20pIHsKKyAgICBkb2MuY20uY3VyT3AudXBkYXRl
SW5wdXQgPSBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWUKKyAgICBzaWduYWxD
dXJzb3JBY3Rpdml0eShkb2MuY20pCisgIH0KKyAgc2lnbmFsTGF0ZXIoZG9jLCAiY3Vyc29yQWN0
aXZpdHkiLCBkb2MpCit9CisKKy8vIFZlcmlmeSB0aGF0IHRoZSBzZWxlY3Rpb24gZG9lcyBub3Qg
cGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljCisvLyBtYXJrZWQgcmFuZ2VzLgorZnVuY3Rpb24g
cmVDaGVja1NlbGVjdGlvbihkb2MpIHsKKyAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRv
bWljSW5TZWxlY3Rpb24oZG9jLCBkb2Muc2VsLCBudWxsLCBmYWxzZSksIHNlbF9kb250U2Nyb2xs
KQorfQorCisvLyBSZXR1cm4gYSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5vdCBwYXJ0aWFsbHkgc2Vs
ZWN0IGFueSBhdG9taWMKKy8vIHJhbmdlcy4KK2Z1bmN0aW9uIHNraXBBdG9taWNJblNlbGVjdGlv
bihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHsKKyAgdmFyIG91dAorICBmb3IgKHZhciBpID0g
MDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgcmFuZ2UgPSBzZWwucmFu
Z2VzW2ldCisgICAgdmFyIG9sZCA9IHNlbC5yYW5nZXMubGVuZ3RoID09IGRvYy5zZWwucmFuZ2Vz
Lmxlbmd0aCAmJiBkb2Muc2VsLnJhbmdlc1tpXQorICAgIHZhciBuZXdBbmNob3IgPSBza2lwQXRv
bWljKGRvYywgcmFuZ2UuYW5jaG9yLCBvbGQgJiYgb2xkLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIp
CisgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgb2xkICYmIG9s
ZC5oZWFkLCBiaWFzLCBtYXlDbGVhcikKKyAgICBpZiAob3V0IHx8IG5ld0FuY2hvciAhPSByYW5n
ZS5hbmNob3IgfHwgbmV3SGVhZCAhPSByYW5nZS5oZWFkKSB7CisgICAgICBpZiAoIW91dCkgeyBv
dXQgPSBzZWwucmFuZ2VzLnNsaWNlKDAsIGkpIH0KKyAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShu
ZXdBbmNob3IsIG5ld0hlYWQpCisgICAgfQorICB9CisgIHJldHVybiBvdXQgPyBub3JtYWxpemVT
ZWxlY3Rpb24ob3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbAorfQorCitmdW5jdGlvbiBza2lwQXRv
bWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgZGlyLCBtYXlDbGVhcikgeworICB2YXIgbGluZSA9
IGdldExpbmUoZG9jLCBwb3MubGluZSkKKyAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIHNw
ID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcgorICAgIGlmICgoc3AuZnJvbSA9
PSBudWxsIHx8IChtLmluY2x1c2l2ZUxlZnQgPyBzcC5mcm9tIDw9IHBvcy5jaCA6IHNwLmZyb20g
PCBwb3MuY2gpKSAmJgorICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVSaWdo
dCA/IHNwLnRvID49IHBvcy5jaCA6IHNwLnRvID4gcG9zLmNoKSkpIHsKKyAgICAgIGlmIChtYXlD
bGVhcikgeworICAgICAgICBzaWduYWwobSwgImJlZm9yZUN1cnNvckVudGVyIikKKyAgICAgICAg
aWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHsKKyAgICAgICAgICBpZiAoIWxpbmUubWFya2VkU3Bh
bnMpIHsgYnJlYWsgfQorICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWV9CiAgICAgICAgIH0K
ICAgICAgIH0KLSAgICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRl
cnZhbCwgcG9sbCk7Ci0gICAgfSwKLQotICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIHJldHVybiBz
ZWwuYW5jaG9yTm9kZSAhPSB0aGlzLmxhc3RBbmNob3JOb2RlIHx8IHNlbC5hbmNob3JPZmZzZXQg
IT0gdGhpcy5sYXN0QW5jaG9yT2Zmc2V0IHx8Ci0gICAgICAgIHNlbC5mb2N1c05vZGUgIT0gdGhp
cy5sYXN0Rm9jdXNOb2RlIHx8IHNlbC5mb2N1c09mZnNldCAhPSB0aGlzLmxhc3RGb2N1c09mZnNl
dDsKLSAgICB9LAotCi0gICAgcG9sbFNlbGVjdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAo
IXRoaXMuY29tcG9zaW5nICYmICF0aGlzLmdyYWNlUGVyaW9kICYmIHRoaXMuc2VsZWN0aW9uQ2hh
bmdlZCgpKSB7Ci0gICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIGNtID0g
dGhpcy5jbTsKLSAgICAgICAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpOwotICAgICAgICB2YXIg
YW5jaG9yID0gZG9tVG9Qb3MoY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTsK
LSAgICAgICAgdmFyIGhlYWQgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3Vz
T2Zmc2V0KTsKLSAgICAgICAgaWYgKGFuY2hvciAmJiBoZWFkKSBydW5Jbk9wKGNtLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5j
aG9yLCBoZWFkKSwgc2VsX2RvbnRTY3JvbGwpOwotICAgICAgICAgIGlmIChhbmNob3IuYmFkIHx8
IGhlYWQuYmFkKSBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfSk7
Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHBvbGxDb250ZW50OiBmdW5jdGlvbigpIHsKLSAgICAg
IHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzZWwgPSBjbS5kb2Muc2Vs
LnByaW1hcnkoKTsKLSAgICAgIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKTsK
LSAgICAgIGlmIChmcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IHRvLmxpbmUgPiBkaXNw
bGF5LnZpZXdUbyAtIDEpIHJldHVybiBmYWxzZTsKLQotICAgICAgdmFyIGZyb21JbmRleDsKLSAg
ICAgIGlmIChmcm9tLmxpbmUgPT0gZGlzcGxheS52aWV3RnJvbSB8fCAoZnJvbUluZGV4ID0gZmlu
ZFZpZXdJbmRleChjbSwgZnJvbS5saW5lKSkgPT0gMCkgewotICAgICAgICB2YXIgZnJvbUxpbmUg
PSBsaW5lTm8oZGlzcGxheS52aWV3WzBdLmxpbmUpOwotICAgICAgICB2YXIgZnJvbU5vZGUgPSBk
aXNwbGF5LnZpZXdbMF0ubm9kZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBmcm9tTGlu
ZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbZnJvbUluZGV4XS5saW5lKTsKLSAgICAgICAgdmFyIGZy
b21Ob2RlID0gZGlzcGxheS52aWV3W2Zyb21JbmRleCAtIDFdLm5vZGUubmV4dFNpYmxpbmc7Ci0g
ICAgICB9Ci0gICAgICB2YXIgdG9JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIHRvLmxpbmUpOwot
ICAgICAgaWYgKHRvSW5kZXggPT0gZGlzcGxheS52aWV3Lmxlbmd0aCAtIDEpIHsKLSAgICAgICAg
dmFyIHRvTGluZSA9IGRpc3BsYXkudmlld1RvIC0gMTsKLSAgICAgICAgdmFyIHRvTm9kZSA9IGRp
c3BsYXkubGluZURpdi5sYXN0Q2hpbGQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgdG9M
aW5lID0gbGluZU5vKGRpc3BsYXkudmlld1t0b0luZGV4ICsgMV0ubGluZSkgLSAxOwotICAgICAg
ICB2YXIgdG9Ob2RlID0gZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5ub2RlLnByZXZpb3VzU2li
bGluZzsKKyAgICAgIGlmICghbS5hdG9taWMpIHsgY29udGludWUgfQorCisgICAgICBpZiAob2xk
UG9zKSB7CisgICAgICAgIHZhciBuZWFyID0gbS5maW5kKGRpciA8IDAgPyAxIDogLTEpLCBkaWZm
ID0gKHZvaWQgMCkKKyAgICAgICAgaWYgKGRpciA8IDAgPyBtLmluY2x1c2l2ZVJpZ2h0IDogbS5p
bmNsdXNpdmVMZWZ0KQorICAgICAgICAgIHsgbmVhciA9IG1vdmVQb3MoZG9jLCBuZWFyLCAtZGly
LCBuZWFyICYmIG5lYXIubGluZSA9PSBwb3MubGluZSA/IGxpbmUgOiBudWxsKSB9CisgICAgICAg
IGlmIChuZWFyICYmIG5lYXIubGluZSA9PSBwb3MubGluZSAmJiAoZGlmZiA9IGNtcChuZWFyLCBv
bGRQb3MpKSAmJiAoZGlyIDwgMCA/IGRpZmYgPCAwIDogZGlmZiA+IDApKQorICAgICAgICAgIHsg
cmV0dXJuIHNraXBBdG9taWNJbm5lcihkb2MsIG5lYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgfQog
ICAgICAgfQogCi0gICAgICB2YXIgbmV3VGV4dCA9IGNtLmRvYy5zcGxpdExpbmVzKGRvbVRleHRC
ZXR3ZWVuKGNtLCBmcm9tTm9kZSwgdG9Ob2RlLCBmcm9tTGluZSwgdG9MaW5lKSk7Ci0gICAgICB2
YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20uZG9jLCBQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9M
aW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5lKS50ZXh0Lmxlbmd0aCkpOwotICAgICAgd2hpbGUg
KG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0aCA+IDEpIHsKLSAgICAgICAgaWYg
KGxzdChuZXdUZXh0KSA9PSBsc3Qob2xkVGV4dCkpIHsgbmV3VGV4dC5wb3AoKTsgb2xkVGV4dC5w
b3AoKTsgdG9MaW5lLS07IH0KLSAgICAgICAgZWxzZSBpZiAobmV3VGV4dFswXSA9PSBvbGRUZXh0
WzBdKSB7IG5ld1RleHQuc2hpZnQoKTsgb2xkVGV4dC5zaGlmdCgpOyBmcm9tTGluZSsrOyB9Ci0g
ICAgICAgIGVsc2UgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjdXRGcm9udCA9IDAsIGN1
dEVuZCA9IDA7Ci0gICAgICB2YXIgbmV3VG9wID0gbmV3VGV4dFswXSwgb2xkVG9wID0gb2xkVGV4
dFswXSwgbWF4Q3V0RnJvbnQgPSBNYXRoLm1pbihuZXdUb3AubGVuZ3RoLCBvbGRUb3AubGVuZ3Ro
KTsKLSAgICAgIHdoaWxlIChjdXRGcm9udCA8IG1heEN1dEZyb250ICYmIG5ld1RvcC5jaGFyQ29k
ZUF0KGN1dEZyb250KSA9PSBvbGRUb3AuY2hhckNvZGVBdChjdXRGcm9udCkpCi0gICAgICAgICsr
Y3V0RnJvbnQ7Ci0gICAgICB2YXIgbmV3Qm90ID0gbHN0KG5ld1RleHQpLCBvbGRCb3QgPSBsc3Qo
b2xkVGV4dCk7Ci0gICAgICB2YXIgbWF4Q3V0RW5kID0gTWF0aC5taW4obmV3Qm90Lmxlbmd0aCAt
IChuZXdUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAwKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBjdXRG
cm9udCA6IDApKTsKLSAgICAgIHdoaWxlIChjdXRFbmQgPCBtYXhDdXRFbmQgJiYKLSAgICAgICAg
ICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkgPT0gb2xk
Qm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpKQotICAgICAgICArK2N1
dEVuZDsKLQotICAgICAgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID0gbmV3Qm90LnNsaWNl
KDAsIG5ld0JvdC5sZW5ndGggLSBjdXRFbmQpOwotICAgICAgbmV3VGV4dFswXSA9IG5ld1RleHRb
MF0uc2xpY2UoY3V0RnJvbnQpOwotCi0gICAgICB2YXIgY2hGcm9tID0gUG9zKGZyb21MaW5lLCBj
dXRGcm9udCk7Ci0gICAgICB2YXIgY2hUbyA9IFBvcyh0b0xpbmUsIG9sZFRleHQubGVuZ3RoID8g
bHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApOwotICAgICAgaWYgKG5ld1RleHQubGVu
Z3RoID4gMSB8fCBuZXdUZXh0WzBdIHx8IGNtcChjaEZyb20sIGNoVG8pKSB7Ci0gICAgICAgIHJl
cGxhY2VSYW5nZShjbS5kb2MsIG5ld1RleHQsIGNoRnJvbSwgY2hUbywgIitpbnB1dCIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgZW5zdXJlUG9sbGVkOiBm
dW5jdGlvbigpIHsKLSAgICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpOwotICAgIH0sCi0g
ICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCk7
Ci0gICAgfSwKLSAgICBmb3JjZUNvbXBvc2l0aW9uRW5kOiBmdW5jdGlvbigpIHsKLSAgICAgIGlm
ICghdGhpcy5jb21wb3NpbmcgfHwgdGhpcy5jb21wb3NpbmcuaGFuZGxlZCkgcmV0dXJuOwotICAg
ICAgdGhpcy5hcHBseUNvbXBvc2l0aW9uKHRoaXMuY29tcG9zaW5nKTsKLSAgICAgIHRoaXMuY29t
cG9zaW5nLmhhbmRsZWQgPSB0cnVlOwotICAgICAgdGhpcy5kaXYuYmx1cigpOwotICAgICAgdGhp
cy5kaXYuZm9jdXMoKTsKLSAgICB9LAotICAgIGFwcGx5Q29tcG9zaXRpb246IGZ1bmN0aW9uKGNv
bXBvc2luZykgewotICAgICAgaWYgKGNvbXBvc2luZy5kYXRhICYmIGNvbXBvc2luZy5kYXRhICE9
IGNvbXBvc2luZy5zdGFydERhdGEpCi0gICAgICAgIG9wZXJhdGlvbih0aGlzLmNtLCBhcHBseVRl
eHRJbnB1dCkodGhpcy5jbSwgY29tcG9zaW5nLmRhdGEsIDAsIGNvbXBvc2luZy5zZWwpOwotICAg
IH0sCi0KLSAgICBzZXRVbmVkaXRhYmxlOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICBub2RlLnNl
dEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgImZhbHNlIik7Ci0gICAgfSwKLQotICAgIG9u
S2V5UHJlc3M6IGZ1bmN0aW9uKGUpIHsKLSAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICAg
IG9wZXJhdGlvbih0aGlzLmNtLCBhcHBseVRleHRJbnB1dCkodGhpcy5jbSwgU3RyaW5nLmZyb21D
aGFyQ29kZShlLmNoYXJDb2RlID09IG51bGwgPyBlLmtleUNvZGUgOiBlLmNoYXJDb2RlKSwgMCk7
Ci0gICAgfSwKLQotICAgIG9uQ29udGV4dE1lbnU6IG5vdGhpbmcsCi0gICAgcmVzZXRQb3NpdGlv
bjogbm90aGluZywKLQotICAgIG5lZWRzQ29udGVudEF0dHJpYnV0ZTogdHJ1ZQotICB9LCBDb250
ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIHBvc1RvRE9NKGNtLCBw
b3MpIHsKLSAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgcG9zLmxpbmUpOwotICAg
IGlmICghdmlldyB8fCB2aWV3LmhpZGRlbikgcmV0dXJuIG51bGw7Ci0gICAgdmFyIGxpbmUgPSBn
ZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3
KHZpZXcsIGxpbmUsIHBvcy5saW5lKTsKLQotICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUp
LCBzaWRlID0gImxlZnQiOwotICAgIGlmIChvcmRlcikgewotICAgICAgdmFyIHBhcnRQb3MgPSBn
ZXRCaWRpUGFydEF0KG9yZGVyLCBwb3MuY2gpOwotICAgICAgc2lkZSA9IHBhcnRQb3MgJSAyID8g
InJpZ2h0IiA6ICJsZWZ0IjsKKyAgICAgIHZhciBmYXIgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDog
MSkKKyAgICAgIGlmIChkaXIgPCAwID8gbS5pbmNsdXNpdmVMZWZ0IDogbS5pbmNsdXNpdmVSaWdo
dCkKKyAgICAgICAgeyBmYXIgPSBtb3ZlUG9zKGRvYywgZmFyLCBkaXIsIGZhci5saW5lID09IHBv
cy5saW5lID8gbGluZSA6IG51bGwpIH0KKyAgICAgIHJldHVybiBmYXIgPyBza2lwQXRvbWljSW5u
ZXIoZG9jLCBmYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgOiBudWxsCiAgICAgfQotICAgIHZhciBy
ZXN1bHQgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKGluZm8ubWFwLCBwb3MuY2gsIHNpZGUpOwot
ICAgIHJlc3VsdC5vZmZzZXQgPSByZXN1bHQuY29sbGFwc2UgPT0gInJpZ2h0IiA/IHJlc3VsdC5l
bmQgOiByZXN1bHQuc3RhcnQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgfSB9CisgIHJldHVybiBw
b3MKK30KKworLy8gRW5zdXJlIGEgZ2l2ZW4gcG9zaXRpb24gaXMgbm90IGluc2lkZSBhbiBhdG9t
aWMgcmFuZ2UuCitmdW5jdGlvbiBza2lwQXRvbWljKGRvYywgcG9zLCBvbGRQb3MsIGJpYXMsIG1h
eUNsZWFyKSB7CisgIHZhciBkaXIgPSBiaWFzIHx8IDEKKyAgdmFyIGZvdW5kID0gc2tpcEF0b21p
Y0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHx8CisgICAgICAoIW1heUNs
ZWFyICYmIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCBkaXIsIHRydWUpKSB8fAor
ICAgICAgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIC1kaXIsIG1heUNsZWFyKSB8
fAorICAgICAgKCFtYXlDbGVhciAmJiBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywg
LWRpciwgdHJ1ZSkpCisgIGlmICghZm91bmQpIHsKKyAgICBkb2MuY2FudEVkaXQgPSB0cnVlCisg
ICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApCisgIH0KKyAgcmV0dXJuIGZvdW5kCit9CisKK2Z1
bmN0aW9uIG1vdmVQb3MoZG9jLCBwb3MsIGRpciwgbGluZSkgeworICBpZiAoZGlyIDwgMCAmJiBw
b3MuY2ggPT0gMCkgeworICAgIGlmIChwb3MubGluZSA+IGRvYy5maXJzdCkgeyByZXR1cm4gY2xp
cFBvcyhkb2MsIFBvcyhwb3MubGluZSAtIDEpKSB9CisgICAgZWxzZSB7IHJldHVybiBudWxsIH0K
KyAgfSBlbHNlIGlmIChkaXIgPiAwICYmIHBvcy5jaCA9PSAobGluZSB8fCBnZXRMaW5lKGRvYywg
cG9zLmxpbmUpKS50ZXh0Lmxlbmd0aCkgeworICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCAr
IGRvYy5zaXplIC0gMSkgeyByZXR1cm4gUG9zKHBvcy5saW5lICsgMSwgMCkgfQorICAgIGVsc2Ug
eyByZXR1cm4gbnVsbCB9CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBQb3MocG9zLmxpbmUs
IHBvcy5jaCArIGRpcikKKyAgfQorfQorCitmdW5jdGlvbiBzZWxlY3RBbGwoY20pIHsKKyAgY20u
c2V0U2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCksIFBvcyhjbS5sYXN0TGluZSgpKSwg
c2VsX2RvbnRTY3JvbGwpCit9CisKKy8vIFVQREFUSU5HCisKKy8vIEFsbG93ICJiZWZvcmVDaGFu
Z2UiIGV2ZW50IGhhbmRsZXJzIHRvIGluZmx1ZW5jZSBhIGNoYW5nZQorZnVuY3Rpb24gZmlsdGVy
Q2hhbmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHsKKyAgdmFyIG9iaiA9IHsKKyAgICBjYW5jZWxl
ZDogZmFsc2UsCisgICAgZnJvbTogY2hhbmdlLmZyb20sCisgICAgdG86IGNoYW5nZS50bywKKyAg
ICB0ZXh0OiBjaGFuZ2UudGV4dCwKKyAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sCisgICAgY2Fu
Y2VsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmouY2FuY2VsZWQgPSB0cnVlOyB9CisgIH0KKyAg
aWYgKHVwZGF0ZSkgeyBvYmoudXBkYXRlID0gZnVuY3Rpb24gKGZyb20sIHRvLCB0ZXh0LCBvcmln
aW4pIHsKKyAgICBpZiAoZnJvbSkgeyBvYmouZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKSB9Cisg
ICAgaWYgKHRvKSB7IG9iai50byA9IGNsaXBQb3MoZG9jLCB0bykgfQorICAgIGlmICh0ZXh0KSB7
IG9iai50ZXh0ID0gdGV4dCB9CisgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7IG9iai5v
cmlnaW4gPSBvcmlnaW4gfQorICB9IH0KKyAgc2lnbmFsKGRvYywgImJlZm9yZUNoYW5nZSIsIGRv
Yywgb2JqKQorICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sICJiZWZvcmVDaGFuZ2UiLCBk
b2MuY20sIG9iaikgfQorCisgIGlmIChvYmouY2FuY2VsZWQpIHsgcmV0dXJuIG51bGwgfQorICBy
ZXR1cm4ge2Zyb206IG9iai5mcm9tLCB0bzogb2JqLnRvLCB0ZXh0OiBvYmoudGV4dCwgb3JpZ2lu
OiBvYmoub3JpZ2lufQorfQorCisvLyBBcHBseSBhIGNoYW5nZSB0byBhIGRvY3VtZW50LCBhbmQg
YWRkIGl0IHRvIHRoZSBkb2N1bWVudCdzCisvLyBoaXN0b3J5LCBhbmQgcHJvcGFnYXRpbmcgaXQg
dG8gYWxsIGxpbmtlZCBkb2N1bWVudHMuCitmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdl
LCBpZ25vcmVSZWFkT25seSkgeworICBpZiAoZG9jLmNtKSB7CisgICAgaWYgKCFkb2MuY20uY3Vy
T3ApIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBp
Z25vcmVSZWFkT25seSkgfQorICAgIGlmIChkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0cykgeyBy
ZXR1cm4gfQogICB9CiAKLSAgZnVuY3Rpb24gYmFkUG9zKHBvcywgYmFkKSB7IGlmIChiYWQpIHBv
cy5iYWQgPSB0cnVlOyByZXR1cm4gcG9zOyB9CisgIGlmIChoYXNIYW5kbGVyKGRvYywgImJlZm9y
ZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIp
KSB7CisgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB0cnVlKQorICAgIGlm
ICghY2hhbmdlKSB7IHJldHVybiB9CisgIH0KIAotICBmdW5jdGlvbiBkb21Ub1BvcyhjbSwgbm9k
ZSwgb2Zmc2V0KSB7Ci0gICAgdmFyIGxpbmVOb2RlOwotICAgIGlmIChub2RlID09IGNtLmRpc3Bs
YXkubGluZURpdikgewotICAgICAgbGluZU5vZGUgPSBjbS5kaXNwbGF5LmxpbmVEaXYuY2hpbGRO
b2Rlc1tvZmZzZXRdOwotICAgICAgaWYgKCFsaW5lTm9kZSkgcmV0dXJuIGJhZFBvcyhjbS5jbGlw
UG9zKFBvcyhjbS5kaXNwbGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSk7Ci0gICAgICBub2RlID0gbnVs
bDsgb2Zmc2V0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgZm9yIChsaW5lTm9kZSA9IG5vZGU7
OyBsaW5lTm9kZSA9IGxpbmVOb2RlLnBhcmVudE5vZGUpIHsKLSAgICAgICAgaWYgKCFsaW5lTm9k
ZSB8fCBsaW5lTm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHJldHVybiBudWxsOwotICAgICAg
ICBpZiAobGluZU5vZGUucGFyZW50Tm9kZSAmJiBsaW5lTm9kZS5wYXJlbnROb2RlID09IGNtLmRp
c3BsYXkubGluZURpdikgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgbGluZVZpZXcg
PSBjbS5kaXNwbGF5LnZpZXdbaV07Ci0gICAgICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lTm9k
ZSkKLSAgICAgICAgcmV0dXJuIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBv
ZmZzZXQpOwotICAgIH0KKyAgLy8gUG9zc2libHkgc3BsaXQgb3Igc3VwcHJlc3MgdGhlIHVwZGF0
ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UKKyAgLy8gb2YgcmVhZC1vbmx5IHNwYW5zIGluIGl0cyBy
YW5nZS4KKyAgdmFyIHNwbGl0ID0gc2F3UmVhZE9ubHlTcGFucyAmJiAhaWdub3JlUmVhZE9ubHkg
JiYgcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKQorICBp
ZiAoc3BsaXQpIHsKKyAgICBmb3IgKHZhciBpID0gc3BsaXQubGVuZ3RoIC0gMTsgaSA+PSAwOyAt
LWkpCisgICAgICB7IG1ha2VDaGFuZ2VJbm5lcihkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0
bzogc3BsaXRbaV0udG8sIHRleHQ6IGkgPyBbIiJdIDogY2hhbmdlLnRleHR9KSB9CisgIH0gZWxz
ZSB7CisgICAgbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKQogICB9Cit9CiAKLSAgZnVuY3Rp
b24gbG9jYXRlTm9kZUluTGluZVZpZXcobGluZVZpZXcsIG5vZGUsIG9mZnNldCkgewotICAgIHZh
ciB3cmFwcGVyID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLCBiYWQgPSBmYWxzZTsKLSAgICBp
ZiAoIW5vZGUgfHwgIWNvbnRhaW5zKHdyYXBwZXIsIG5vZGUpKSByZXR1cm4gYmFkUG9zKFBvcyhs
aW5lTm8obGluZVZpZXcubGluZSksIDApLCB0cnVlKTsKLSAgICBpZiAobm9kZSA9PSB3cmFwcGVy
KSB7Ci0gICAgICBiYWQgPSB0cnVlOwotICAgICAgbm9kZSA9IHdyYXBwZXIuY2hpbGROb2Rlc1tv
ZmZzZXRdOwotICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgIGlmICghbm9kZSkgewotICAgICAgICB2
YXIgbGluZSA9IGxpbmVWaWV3LnJlc3QgPyBsc3QobGluZVZpZXcucmVzdCkgOiBsaW5lVmlldy5s
aW5lOwotICAgICAgICByZXR1cm4gYmFkUG9zKFBvcyhsaW5lTm8obGluZSksIGxpbmUudGV4dC5s
ZW5ndGgpLCBiYWQpOwotICAgICAgfQotICAgIH0KK2Z1bmN0aW9uIG1ha2VDaGFuZ2VJbm5lcihk
b2MsIGNoYW5nZSkgeworICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdlLnRl
eHRbMF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHsgcmV0dXJu
IH0KKyAgdmFyIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKQor
ICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBkb2MuY20gPyBkb2Mu
Y20uY3VyT3AuaWQgOiBOYU4pCiAKLSAgICB2YXIgdGV4dE5vZGUgPSBub2RlLm5vZGVUeXBlID09
IDMgPyBub2RlIDogbnVsbCwgdG9wTm9kZSA9IG5vZGU7Ci0gICAgaWYgKCF0ZXh0Tm9kZSAmJiBu
b2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09
IDMpIHsKLSAgICAgIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkOwotICAgICAgaWYgKG9mZnNl
dCkgb2Zmc2V0ID0gdGV4dE5vZGUubm9kZVZhbHVlLmxlbmd0aDsKLSAgICB9Ci0gICAgd2hpbGUg
KHRvcE5vZGUucGFyZW50Tm9kZSAhPSB3cmFwcGVyKSB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnRO
b2RlOwotICAgIHZhciBtZWFzdXJlID0gbGluZVZpZXcubWVhc3VyZSwgbWFwcyA9IG1lYXN1cmUu
bWFwczsKLQotICAgIGZ1bmN0aW9uIGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCkgewot
ICAgICAgZm9yICh2YXIgaSA9IC0xOyBpIDwgKG1hcHMgPyBtYXBzLmxlbmd0aCA6IDApOyBpKysp
IHsKLSAgICAgICAgdmFyIG1hcCA9IGkgPCAwID8gbWVhc3VyZS5tYXAgOiBtYXBzW2ldOwotICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGogKz0gMykgewotICAgICAgICAg
IHZhciBjdXJOb2RlID0gbWFwW2ogKyAyXTsKLSAgICAgICAgICBpZiAoY3VyTm9kZSA9PSB0ZXh0
Tm9kZSB8fCBjdXJOb2RlID09IHRvcE5vZGUpIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gbGlu
ZU5vKGkgPCAwID8gbGluZVZpZXcubGluZSA6IGxpbmVWaWV3LnJlc3RbaV0pOwotICAgICAgICAg
ICAgdmFyIGNoID0gbWFwW2pdICsgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAg
fHwgY3VyTm9kZSAhPSB0ZXh0Tm9kZSkgY2ggPSBtYXBbaiArIChvZmZzZXQgPyAxIDogMCldOwot
ICAgICAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciBmb3VuZCA9IGZpbmQodGV4dE5vZGUsIHRvcE5vZGUs
IG9mZnNldCk7Ci0gICAgaWYgKGZvdW5kKSByZXR1cm4gYmFkUG9zKGZvdW5kLCBiYWQpOwotCi0g
ICAgLy8gRklYTUUgdGhpcyBpcyBhbGwgcmVhbGx5IHNoYWt5LiBtaWdodCBoYW5kbGUgdGhlIGZl
dyBjYXNlcyBpdCBuZWVkcyB0byBoYW5kbGUsIGJ1dCBsaWtlbHkgdG8gY2F1c2UgcHJvYmxlbXMK
LSAgICBmb3IgKHZhciBhZnRlciA9IHRvcE5vZGUubmV4dFNpYmxpbmcsIGRpc3QgPSB0ZXh0Tm9k
ZSA/IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGggLSBvZmZzZXQgOiAwOyBhZnRlcjsgYWZ0ZXIg
PSBhZnRlci5uZXh0U2libGluZykgewotICAgICAgZm91bmQgPSBmaW5kKGFmdGVyLCBhZnRlci5m
aXJzdENoaWxkLCAwKTsKLSAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgcmV0dXJuIGJhZFBvcyhQ
b3MoZm91bmQubGluZSwgZm91bmQuY2ggLSBkaXN0KSwgYmFkKTsKLSAgICAgIGVsc2UKLSAgICAg
ICAgZGlzdCArPSBhZnRlci50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgfQotICAgIGZvciAodmFy
IGJlZm9yZSA9IHRvcE5vZGUucHJldmlvdXNTaWJsaW5nLCBkaXN0ID0gb2Zmc2V0OyBiZWZvcmU7
IGJlZm9yZSA9IGJlZm9yZS5wcmV2aW91c1NpYmxpbmcpIHsKLSAgICAgIGZvdW5kID0gZmluZChi
ZWZvcmUsIGJlZm9yZS5maXJzdENoaWxkLCAtMSk7Ci0gICAgICBpZiAoZm91bmQpCi0gICAgICAg
IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoICsgZGlzdCksIGJhZCk7Ci0g
ICAgICBlbHNlCi0gICAgICAgIGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOworICBt
YWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3Zl
ckNoYW5nZShkb2MsIGNoYW5nZSkpCisgIHZhciByZWJhc2VkID0gW10KKworICBsaW5rZWREb2Nz
KGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkgeworICAgIGlmICghc2hhcmVkSGlzdCAm
JiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkgeworICAgICAgcmViYXNlSGlz
dChkb2MuaGlzdG9yeSwgY2hhbmdlKQorICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KQog
ICAgIH0KKyAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBzdHJldGNo
U3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSkKKyAgfSkKK30KKworLy8gUmV2ZXJ0IGEgY2hh
bmdlIHN0b3JlZCBpbiBhIGRvY3VtZW50J3MgaGlzdG9yeS4KK2Z1bmN0aW9uIG1ha2VDaGFuZ2VG
cm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkgeworICBpZiAoZG9jLmNt
ICYmIGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzICYmICFhbGxvd1NlbGVjdGlvbk9ubHkpIHsg
cmV0dXJuIH0KKworICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBldmVudCwgc2VsQWZ0ZXIgPSBk
b2Muc2VsCisgIHZhciBzb3VyY2UgPSB0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3Qu
dW5kb25lLCBkZXN0ID0gdHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZQor
CisgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJs
LXogd29uJ3QKKyAgLy8gbmVlZGxlc3NseSBjbGVhciBzZWxlY3Rpb24gZXZlbnRzKQorICB2YXIg
aSA9IDAKKyAgZm9yICg7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKKyAgICBldmVudCA9IHNv
dXJjZVtpXQorICAgIGlmIChhbGxvd1NlbGVjdGlvbk9ubHkgPyBldmVudC5yYW5nZXMgJiYgIWV2
ZW50LmVxdWFscyhkb2Muc2VsKSA6ICFldmVudC5yYW5nZXMpCisgICAgICB7IGJyZWFrIH0KICAg
fQotCi0gIGZ1bmN0aW9uIGRvbVRleHRCZXR3ZWVuKGNtLCBmcm9tLCB0bywgZnJvbUxpbmUsIHRv
TGluZSkgewotICAgIHZhciB0ZXh0ID0gIiIsIGNsb3NpbmcgPSBmYWxzZSwgbGluZVNlcCA9IGNt
LmRvYy5saW5lU2VwYXJhdG9yKCk7Ci0gICAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7
IHJldHVybiBmdW5jdGlvbihtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pZCA9PSBpZDsgfTsgfQot
ICAgIGZ1bmN0aW9uIHdhbGsobm9kZSkgewotICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkg
ewotICAgICAgICB2YXIgY21UZXh0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNtLXRleHQiKTsKLSAg
ICAgICAgaWYgKGNtVGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYgKGNtVGV4dCA9PSAiIikg
Y21UZXh0ID0gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9cdTIwMGIvZywgIiIpOwotICAgICAg
ICAgIHRleHQgKz0gY21UZXh0OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB2YXIgbWFya2VySUQgPSBub2RlLmdldEF0dHJpYnV0ZSgiY20tbWFya2VyIiksIHJhbmdlOwot
ICAgICAgICBpZiAobWFya2VySUQpIHsKLSAgICAgICAgICB2YXIgZm91bmQgPSBjbS5maW5kTWFy
a3MoUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGluZSArIDEsIDApLCByZWNvZ25pemVNYXJrZXIo
K21hcmtlcklEKSk7Ci0gICAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UgPSBmb3Vu
ZFswXS5maW5kKCkpKQotICAgICAgICAgICAgdGV4dCArPSBnZXRCZXR3ZWVuKGNtLmRvYywgcmFu
Z2UuZnJvbSwgcmFuZ2UudG8pLmpvaW4obGluZVNlcCk7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikg
PT0gImZhbHNlIikgcmV0dXJuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hp
bGROb2Rlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7
Ci0gICAgICAgIGlmICgvXihwcmV8ZGl2fHApJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkpCi0gICAg
ICAgICAgY2xvc2luZyA9IHRydWU7Ci0gICAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0g
MykgewotICAgICAgICB2YXIgdmFsID0gbm9kZS5ub2RlVmFsdWU7Ci0gICAgICAgIGlmICghdmFs
KSByZXR1cm47Ci0gICAgICAgIGlmIChjbG9zaW5nKSB7Ci0gICAgICAgICAgdGV4dCArPSBsaW5l
U2VwOwotICAgICAgICAgIGNsb3NpbmcgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0ZXh0
ICs9IHZhbDsKKyAgaWYgKGkgPT0gc291cmNlLmxlbmd0aCkgeyByZXR1cm4gfQorICBoaXN0Lmxh
c3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBudWxsCisKKyAgZm9yICg7OykgeworICAg
IGV2ZW50ID0gc291cmNlLnBvcCgpCisgICAgaWYgKGV2ZW50LnJhbmdlcykgeworICAgICAgcHVz
aFNlbGVjdGlvblRvSGlzdG9yeShldmVudCwgZGVzdCkKKyAgICAgIGlmIChhbGxvd1NlbGVjdGlv
bk9ubHkgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSkgeworICAgICAgICBzZXRTZWxlY3Rpb24o
ZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KQorICAgICAgICByZXR1cm4KICAgICAgIH0K
KyAgICAgIHNlbEFmdGVyID0gZXZlbnQKICAgICB9Ci0gICAgZm9yICg7OykgewotICAgICAgd2Fs
ayhmcm9tKTsKLSAgICAgIGlmIChmcm9tID09IHRvKSBicmVhazsKLSAgICAgIGZyb20gPSBmcm9t
Lm5leHRTaWJsaW5nOwotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKKyAgICBlbHNlIHsgYnJlYWsg
fQogICB9CiAKLSAgQ29kZU1pcnJvci5pbnB1dFN0eWxlcyA9IHsidGV4dGFyZWEiOiBUZXh0YXJl
YUlucHV0LCAiY29udGVudGVkaXRhYmxlIjogQ29udGVudEVkaXRhYmxlSW5wdXR9OworICAvLyBC
dWlsZCB1cCBhIHJldmVyc2UgY2hhbmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhp
c3RvcnkKKyAgLy8gc3RhY2sgKHJlZG8gd2hlbiB1bmRvaW5nLCBhbmQgdmljZSB2ZXJzYSkuCisg
IHZhciBhbnRpQ2hhbmdlcyA9IFtdCisgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIs
IGRlc3QpCisgIGRlc3QucHVzaCh7Y2hhbmdlczogYW50aUNoYW5nZXMsIGdlbmVyYXRpb246IGhp
c3QuZ2VuZXJhdGlvbn0pCisgIGhpc3QuZ2VuZXJhdGlvbiA9IGV2ZW50LmdlbmVyYXRpb24gfHwg
KytoaXN0Lm1heEdlbmVyYXRpb24KKworICB2YXIgZmlsdGVyID0gaGFzSGFuZGxlcihkb2MsICJi
ZWZvcmVDaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVDaGFu
Z2UiKQorCisgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkgeworICAgIHZhciBjaGFuZ2UgPSBl
dmVudC5jaGFuZ2VzW2ldCisgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGUKKyAgICBpZiAoZmlsdGVy
ICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkgeworICAgICAgc291cmNlLmxl
bmd0aCA9IDAKKyAgICAgIHJldHVybiB7fQorICAgIH0KIAotICAvLyBTRUxFQ1RJT04gLyBDVVJT
T1IKKyAgICBhbnRpQ2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hh
bmdlKSkKIAotICAvLyBTZWxlY3Rpb24gb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBBIG5ldyBvbmUg
aXMgY3JlYXRlZCBldmVyeSB0aW1lCi0gIC8vIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gQSBzZWxl
Y3Rpb24gaXMgb25lIG9yIG1vcmUgbm9uLW92ZXJsYXBwaW5nCi0gIC8vIChhbmQgbm9uLXRvdWNo
aW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIgdGhhdCBpbmRpY2F0ZXMKLSAgLy8g
d2hpY2ggb25lIGlzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiAodGhlIG9uZSB0aGF0J3Mgc2Nyb2xs
ZWQgaW50bwotICAvLyB2aWV3LCB0aGF0IGdldEN1cnNvciByZXR1cm5zLCBldGMpLgotICBmdW5j
dGlvbiBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKLSAgICB0aGlzLnJhbmdlcyA9IHJh
bmdlczsKLSAgICB0aGlzLnByaW1JbmRleCA9IHByaW1JbmRleDsKLSAgfQorICAgIHZhciBhZnRl
ciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSkK
KyAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFu
cyhkb2MsIGNoYW5nZSkpCisgICAgaWYgKCFpICYmIGRvYy5jbSkgeyBkb2MuY20uc2Nyb2xsSW50
b1ZpZXcoe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSl9KSB9CisgICAg
dmFyIHJlYmFzZWQgPSBbXQogCi0gIFNlbGVjdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgcHJpbWFy
eTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnByaW1JbmRleF07IH0sCi0g
ICAgZXF1YWxzOiBmdW5jdGlvbihvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IHRoaXMpIHJl
dHVybiB0cnVlOwotICAgICAgaWYgKG90aGVyLnByaW1JbmRleCAhPSB0aGlzLnByaW1JbmRleCB8
fCBvdGhlci5yYW5nZXMubGVuZ3RoICE9IHRoaXMucmFuZ2VzLmxlbmd0aCkgcmV0dXJuIGZhbHNl
OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykgewot
ICAgICAgICB2YXIgaGVyZSA9IHRoaXMucmFuZ2VzW2ldLCB0aGVyZSA9IG90aGVyLnJhbmdlc1tp
XTsKLSAgICAgICAgaWYgKGNtcChoZXJlLmFuY2hvciwgdGhlcmUuYW5jaG9yKSAhPSAwIHx8IGNt
cChoZXJlLmhlYWQsIHRoZXJlLmhlYWQpICE9IDApIHJldHVybiBmYWxzZTsKKyAgICAvLyBQcm9w
YWdhdGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHMKKyAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rp
b24gKGRvYywgc2hhcmVkSGlzdCkgeworICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2Yo
cmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7CisgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhp
c3RvcnksIGNoYW5nZSkKKyAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KQogICAgICAg
fQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLSAgICBkZWVwQ29weTogZnVuY3Rpb24oKSB7
Ci0gICAgICBmb3IgKHZhciBvdXQgPSBbXSwgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7
IGkrKykKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcy5yYW5nZXNbaV0u
YW5jaG9yKSwgY29weVBvcyh0aGlzLnJhbmdlc1tpXS5oZWFkKSk7Ci0gICAgICByZXR1cm4gbmV3
IFNlbGVjdGlvbihvdXQsIHRoaXMucHJpbUluZGV4KTsKLSAgICB9LAotICAgIHNvbWV0aGluZ1Nl
bGVjdGVkOiBmdW5jdGlvbigpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5n
ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGlmICghdGhpcy5yYW5nZXNbaV0uZW1wdHkoKSkgcmV0
dXJuIHRydWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLSAgICBjb250YWluczogZnVu
Y3Rpb24ocG9zLCBlbmQpIHsKLSAgICAgIGlmICghZW5kKSBlbmQgPSBwb3M7Ci0gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBy
YW5nZSA9IHRoaXMucmFuZ2VzW2ldOwotICAgICAgICBpZiAoY21wKGVuZCwgcmFuZ2UuZnJvbSgp
KSA+PSAwICYmIGNtcChwb3MsIHJhbmdlLnRvKCkpIDw9IDApCi0gICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgbWFrZUNoYW5nZVNpbmds
ZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpCisgICAg
fSkKICAgfTsKIAotICBmdW5jdGlvbiBSYW5nZShhbmNob3IsIGhlYWQpIHsKLSAgICB0aGlzLmFu
Y2hvciA9IGFuY2hvcjsgdGhpcy5oZWFkID0gaGVhZDsKKyAgZm9yICh2YXIgaSQxID0gZXZlbnQu
Y2hhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgLS1pJDEpIHsKKyAgICB2YXIgcmV0dXJuZWQg
PSBsb29wKCBpJDEgKTsKKworICAgIGlmICggcmV0dXJuZWQgKSByZXR1cm4gcmV0dXJuZWQudjsK
KyAgfQorfQorCisvLyBTdWItdmlld3MgbmVlZCB0aGVpciBsaW5lIG51bWJlcnMgc2hpZnRlZCB3
aGVuIHRleHQgaXMgYWRkZWQKKy8vIGFib3ZlIG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBk
b2N1bWVudC4KK2Z1bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHsKKyAgaWYgKGRpc3Rh
bmNlID09IDApIHsgcmV0dXJuIH0KKyAgZG9jLmZpcnN0ICs9IGRpc3RhbmNlCisgIGRvYy5zZWwg
PSBuZXcgU2VsZWN0aW9uKG1hcChkb2Muc2VsLnJhbmdlcywgZnVuY3Rpb24gKHJhbmdlKSB7IHJl
dHVybiBuZXcgUmFuZ2UoCisgICAgUG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJh
bmdlLmFuY2hvci5jaCksCisgICAgUG9zKHJhbmdlLmhlYWQubGluZSArIGRpc3RhbmNlLCByYW5n
ZS5oZWFkLmNoKQorICApOyB9KSwgZG9jLnNlbC5wcmltSW5kZXgpCisgIGlmIChkb2MuY20pIHsK
KyAgICByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBk
aXN0YW5jZSkKKyAgICBmb3IgKHZhciBkID0gZG9jLmNtLmRpc3BsYXksIGwgPSBkLnZpZXdGcm9t
OyBsIDwgZC52aWV3VG87IGwrKykKKyAgICAgIHsgcmVnTGluZUNoYW5nZShkb2MuY20sIGwsICJn
dXR0ZXIiKSB9CiAgIH0KK30KIAotICBSYW5nZS5wcm90b3R5cGUgPSB7Ci0gICAgZnJvbTogZnVu
Y3Rpb24oKSB7IHJldHVybiBtaW5Qb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7IH0sCi0gICAg
dG86IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9
LAotICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLmhlYWQubGluZSA9
PSB0aGlzLmFuY2hvci5saW5lICYmIHRoaXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaDsKLSAg
ICB9Ci0gIH07CisvLyBNb3JlIGxvd2VyLWxldmVsIGNoYW5nZSBmdW5jdGlvbiwgaGFuZGxpbmcg
b25seSBhIHNpbmdsZSBkb2N1bWVudAorLy8gKG5vdCBsaW5rZWQgb25lcykuCitmdW5jdGlvbiBt
YWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpIHsKKyAgaWYg
KGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKQorICAgIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20s
IG1ha2VDaGFuZ2VTaW5nbGVEb2MpKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpIH0KIAot
ICAvLyBUYWtlIGFuIHVuc29ydGVkLCBwb3RlbnRpYWxseSBvdmVybGFwcGluZyBzZXQgb2YgcmFu
Z2VzLCBhbmQKLSAgLy8gYnVpbGQgYSBzZWxlY3Rpb24gb3V0IG9mIGl0LiAnQ29uc3VtZXMnIHJh
bmdlcyBhcnJheSAobW9kaWZ5aW5nCi0gIC8vIGl0KS4KLSAgZnVuY3Rpb24gbm9ybWFsaXplU2Vs
ZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KSB7Ci0gICAgdmFyIHByaW0gPSByYW5nZXNbcHJpbUlu
ZGV4XTsKLSAgICByYW5nZXMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBjbXAoYS5mcm9t
KCksIGIuZnJvbSgpKTsgfSk7Ci0gICAgcHJpbUluZGV4ID0gaW5kZXhPZihyYW5nZXMsIHByaW0p
OwotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2
YXIgY3VyID0gcmFuZ2VzW2ldLCBwcmV2ID0gcmFuZ2VzW2kgLSAxXTsKLSAgICAgIGlmIChjbXAo
cHJldi50bygpLCBjdXIuZnJvbSgpKSA+PSAwKSB7Ci0gICAgICAgIHZhciBmcm9tID0gbWluUG9z
KHByZXYuZnJvbSgpLCBjdXIuZnJvbSgpKSwgdG8gPSBtYXhQb3MocHJldi50bygpLCBjdXIudG8o
KSk7Ci0gICAgICAgIHZhciBpbnYgPSBwcmV2LmVtcHR5KCkgPyBjdXIuZnJvbSgpID09IGN1ci5o
ZWFkIDogcHJldi5mcm9tKCkgPT0gcHJldi5oZWFkOwotICAgICAgICBpZiAoaSA8PSBwcmltSW5k
ZXgpIC0tcHJpbUluZGV4OwotICAgICAgICByYW5nZXMuc3BsaWNlKC0taSwgMiwgbmV3IFJhbmdl
KGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKSk7Ci0gICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBuZXcgU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KTsKLSAgfQotCi0gIGZ1bmN0
aW9uIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpIHsKLSAgICByZXR1cm4gbmV3IFNlbGVj
dGlvbihbbmV3IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMCk7Ci0gIH0KLQotICAv
LyBNb3N0IG9mIHRoZSBleHRlcm5hbCBBUEkgY2xpcHMgZ2l2ZW4gcG9zaXRpb25zIHRvIG1ha2Ug
c3VyZSB0aGV5Ci0gIC8vIGFjdHVhbGx5IGV4aXN0IHdpdGhpbiB0aGUgZG9jdW1lbnQuCi0gIGZ1
bmN0aW9uIGNsaXBMaW5lKGRvYywgbikge3JldHVybiBNYXRoLm1heChkb2MuZmlyc3QsIE1hdGgu
bWluKG4sIGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkpO30KLSAgZnVuY3Rpb24gY2xpcFBvcyhk
b2MsIHBvcykgewotICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgcmV0dXJuIFBvcyhkb2Mu
Zmlyc3QsIDApOwotICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwotICAg
IGlmIChwb3MubGluZSA+IGxhc3QpIHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3Qp
LnRleHQubGVuZ3RoKTsKLSAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShkb2MsIHBv
cy5saW5lKS50ZXh0Lmxlbmd0aCk7Ci0gIH0KLSAgZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGlu
ZWxlbikgewotICAgIHZhciBjaCA9IHBvcy5jaDsKLSAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+
IGxpbmVsZW4pIHJldHVybiBQb3MocG9zLmxpbmUsIGxpbmVsZW4pOwotICAgIGVsc2UgaWYgKGNo
IDwgMCkgcmV0dXJuIFBvcyhwb3MubGluZSwgMCk7Ci0gICAgZWxzZSByZXR1cm4gcG9zOwotICB9
Ci0gIGZ1bmN0aW9uIGlzTGluZShkb2MsIGwpIHtyZXR1cm4gbCA+PSBkb2MuZmlyc3QgJiYgbCA8
IGRvYy5maXJzdCArIGRvYy5zaXplO30KLSAgZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywgYXJy
YXkpIHsKLSAgICBmb3IgKHZhciBvdXQgPSBbXSwgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkr
Kykgb3V0W2ldID0gY2xpcFBvcyhkb2MsIGFycmF5W2ldKTsKLSAgICByZXR1cm4gb3V0OwotICB9
Ci0KLSAgLy8gU0VMRUNUSU9OIFVQREFURVMKLQotICAvLyBUaGUgJ3Njcm9sbCcgcGFyYW1ldGVy
IGdpdmVuIHRvIG1hbnkgb2YgdGhlc2UgaW5kaWNhdGVkIHdoZXRoZXIKLSAgLy8gdGhlIG5ldyBj
dXJzb3IgcG9zaXRpb24gc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldyBhZnRlcgotICAvLyBt
b2RpZnlpbmcgdGhlIHNlbGVjdGlvbi4KLQotICAvLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBl
eHRlbmQgZmxhZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0bwotICAvLyBpbmNsdWRlIGEgZ2l2
ZW4gcG9zaXRpb24gKGFuZCBvcHRpb25hbGx5IGEgc2Vjb25kIHBvc2l0aW9uKS4KLSAgLy8gT3Ro
ZXJ3aXNlLCBzaW1wbHkgcmV0dXJucyB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRp
b25zLgotICAvLyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLgotICBmdW5jdGlvbiBl
eHRlbmRSYW5nZShkb2MsIHJhbmdlLCBoZWFkLCBvdGhlcikgewotICAgIGlmIChkb2MuY20gJiYg
ZG9jLmNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkgewotICAgICAgdmFyIGFuY2hvciA9
IHJhbmdlLmFuY2hvcjsKLSAgICAgIGlmIChvdGhlcikgewotICAgICAgICB2YXIgcG9zQmVmb3Jl
ID0gY21wKGhlYWQsIGFuY2hvcikgPCAwOwotICAgICAgICBpZiAocG9zQmVmb3JlICE9IChjbXAo
b3RoZXIsIGFuY2hvcikgPCAwKSkgewotICAgICAgICAgIGFuY2hvciA9IGhlYWQ7Ci0gICAgICAg
ICAgaGVhZCA9IG90aGVyOwotICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9yZSAhPSAoY21wKGhl
YWQsIG90aGVyKSA8IDApKSB7Ci0gICAgICAgICAgaGVhZCA9IG90aGVyOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gbmV3IFJhbmdlKGFuY2hvciwgaGVhZCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZCk7Ci0gICAgfQor
ICBpZiAoY2hhbmdlLnRvLmxpbmUgPCBkb2MuZmlyc3QpIHsKKyAgICBzaGlmdERvYyhkb2MsIGNo
YW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5l
KSkKKyAgICByZXR1cm4KICAgfQotCi0gIC8vIEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24g
cmFuZ2UsIGRpc2NhcmQgdGhlIHJlc3QuCi0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2Ms
IGhlYWQsIG90aGVyLCBvcHRpb25zKSB7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVj
dGlvbihbZXh0ZW5kUmFuZ2UoZG9jLCBkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIpXSwg
MCksIG9wdGlvbnMpOworICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSB7
IHJldHVybiB9CisKKyAgLy8gQ2xpcCB0aGUgY2hhbmdlIHRvIHRoZSBzaXplIG9mIHRoaXMgZG9j
CisgIGlmIChjaGFuZ2UuZnJvbS5saW5lIDwgZG9jLmZpcnN0KSB7CisgICAgdmFyIHNoaWZ0ID0g
Y2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKQor
ICAgIHNoaWZ0RG9jKGRvYywgc2hpZnQpCisgICAgY2hhbmdlID0ge2Zyb206IFBvcyhkb2MuZmly
c3QsIDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50by5jaCksCisg
ICAgICAgICAgICAgIHRleHQ6IFtsc3QoY2hhbmdlLnRleHQpXSwgb3JpZ2luOiBjaGFuZ2Uub3Jp
Z2lufQogICB9Ci0KLSAgLy8gRXh0ZW5kIGFsbCBzZWxlY3Rpb25zIChwb3MgaXMgYW4gYXJyYXkg
b2Ygc2VsZWN0aW9ucyB3aXRoIGxlbmd0aAotICAvLyBlcXVhbCB0aGUgbnVtYmVyIG9mIHNlbGVj
dGlvbnMpCi0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykg
ewotICAgIGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0
aDsgaSsrKQotICAgICAgb3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLCBkb2Muc2VsLnJhbmdlc1tp
XSwgaGVhZHNbaV0sIG51bGwpOwotICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24o
b3V0LCBkb2Muc2VsLnByaW1JbmRleCk7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3U2VsLCBv
cHRpb25zKTsKKyAgdmFyIGxhc3QgPSBkb2MubGFzdExpbmUoKQorICBpZiAoY2hhbmdlLnRvLmxp
bmUgPiBsYXN0KSB7CisgICAgY2hhbmdlID0ge2Zyb206IGNoYW5nZS5mcm9tLCB0bzogUG9zKGxh
c3QsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCksCisgICAgICAgICAgICAgIHRleHQ6
IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdlLm9yaWdpbn0KICAgfQogCi0gIC8vIFVw
ZGF0ZXMgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIHNlbGVjdGlvbi4KLSAgZnVuY3Rpb24gcmVwbGFj
ZU9uZVNlbGVjdGlvbihkb2MsIGksIHJhbmdlLCBvcHRpb25zKSB7Ci0gICAgdmFyIHJhbmdlcyA9
IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApOwotICAgIHJhbmdlc1tpXSA9IHJhbmdlOwotICAgIHNl
dFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIGRvYy5zZWwucHJpbUlu
ZGV4KSwgb3B0aW9ucyk7CisgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5n
ZS5mcm9tLCBjaGFuZ2UudG8pCisKKyAgaWYgKCFzZWxBZnRlcikgeyBzZWxBZnRlciA9IGNvbXB1
dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkgfQorICBpZiAoZG9jLmNtKSB7IG1ha2VDaGFu
Z2VTaW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpIH0KKyAgZWxzZSB7IHVw
ZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpIH0KKyAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywg
c2VsQWZ0ZXIsIHNlbF9kb250U2Nyb2xsKQorfQorCisvLyBIYW5kbGUgdGhlIGludGVyYWN0aW9u
IG9mIGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQgd2l0aCB0aGUgZWRpdG9yCisvLyB0aGF0IHRoaXMg
ZG9jdW1lbnQgaXMgcGFydCBvZi4KK2Z1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRv
cihjbSwgY2hhbmdlLCBzcGFucykgeworICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNoYW5nZS50bworCisgIHZhciByZWNv
bXB1dGVNYXhMZW5ndGggPSBmYWxzZSwgY2hlY2tXaWR0aFN0YXJ0ID0gZnJvbS5saW5lCisgIGlm
ICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5l
Tm8odmlzdWFsTGluZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkpCisgICAgZG9jLml0ZXIoY2hl
Y2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAgIGlmIChs
aW5lID09IGRpc3BsYXkubWF4TGluZSkgeworICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSB0
cnVlCisgICAgICAgIHJldHVybiB0cnVlCisgICAgICB9CisgICAgfSkKICAgfQogCi0gIC8vIFJl
c2V0IHRoZSBzZWxlY3Rpb24gdG8gYSBzaW5nbGUgcmFuZ2UuCi0gIGZ1bmN0aW9uIHNldFNpbXBs
ZVNlbGVjdGlvbihkb2MsIGFuY2hvciwgaGVhZCwgb3B0aW9ucykgewotICAgIHNldFNlbGVjdGlv
bihkb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBvcHRpb25zKTsKKyAgaWYgKGRv
Yy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSkKKyAgICB7IHNpZ25h
bEN1cnNvckFjdGl2aXR5KGNtKSB9CisKKyAgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucywg
ZXN0aW1hdGVIZWlnaHQoY20pKQorCisgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsK
KyAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxl
bmd0aCwgZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUp
CisgICAgICBpZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICAgIGRpc3Bs
YXkubWF4TGluZSA9IGxpbmUKKyAgICAgICAgZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuCisg
ICAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlCisgICAgICAgIHJlY29tcHV0ZU1h
eExlbmd0aCA9IGZhbHNlCisgICAgICB9CisgICAgfSkKKyAgICBpZiAocmVjb21wdXRlTWF4TGVu
Z3RoKSB7IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlIH0KICAgfQogCi0gIC8vIEdpdmUg
YmVmb3JlU2VsZWN0aW9uQ2hhbmdlIGhhbmRsZXJzIGEgY2hhbmdlIHRvIGluZmx1ZW5jZSBhCi0g
IC8vIHNlbGVjdGlvbiB1cGRhdGUuCi0gIGZ1bmN0aW9uIGZpbHRlclNlbGVjdGlvbkNoYW5nZShk
b2MsIHNlbCkgeworICAvLyBBZGp1c3QgZnJvbnRpZXIsIHNjaGVkdWxlIHdvcmtlcgorICBkb2Mu
ZnJvbnRpZXIgPSBNYXRoLm1pbihkb2MuZnJvbnRpZXIsIGZyb20ubGluZSkKKyAgc3RhcnRXb3Jr
ZXIoY20sIDQwMCkKKworICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0by5s
aW5lIC0gZnJvbS5saW5lKSAtIDEKKyAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFu
Z2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKKyAgaWYgKGNoYW5nZS5mdWxsKQorICAgIHsg
cmVnQ2hhbmdlKGNtKSB9CisgIGVsc2UgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5n
ZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkp
CisgICAgeyByZWdMaW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUsICJ0ZXh0IikgfQorICBlbHNlCisg
ICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpIH0KKwor
ICB2YXIgY2hhbmdlc0hhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCAiY2hhbmdlcyIpLCBjaGFuZ2VI
YW5kbGVyID0gaGFzSGFuZGxlcihjbSwgImNoYW5nZSIpCisgIGlmIChjaGFuZ2VIYW5kbGVyIHx8
IGNoYW5nZXNIYW5kbGVyKSB7CiAgICAgdmFyIG9iaiA9IHsKLSAgICAgIHJhbmdlczogc2VsLnJh
bmdlcywKLSAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocmFuZ2VzKSB7Ci0gICAgICAgIHRoaXMucmFu
Z2VzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsr
KQotICAgICAgICAgIHRoaXMucmFuZ2VzW2ldID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCByYW5n
ZXNbaV0uYW5jaG9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlw
UG9zKGRvYywgcmFuZ2VzW2ldLmhlYWQpKTsKKyAgICAgIGZyb206IGZyb20sIHRvOiB0bywKKyAg
ICAgIHRleHQ6IGNoYW5nZS50ZXh0LAorICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCisg
ICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4KKyAgICB9CisgICAgaWYgKGNoYW5nZUhhbmRsZXIp
IHsgc2lnbmFsTGF0ZXIoY20sICJjaGFuZ2UiLCBjbSwgb2JqKSB9CisgICAgaWYgKGNoYW5nZXNI
YW5kbGVyKSB7IChjbS5jdXJPcC5jaGFuZ2VPYmpzIHx8IChjbS5jdXJPcC5jaGFuZ2VPYmpzID0g
W10pKS5wdXNoKG9iaikgfQorICB9CisgIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBu
dWxsCit9CisKK2Z1bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmln
aW4pIHsKKyAgaWYgKCF0bykgeyB0byA9IGZyb20gfQorICBpZiAoY21wKHRvLCBmcm9tKSA8IDAp
IHsgdmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXAgfQorICBpZiAodHlwZW9mIGNv
ZGUgPT0gInN0cmluZyIpIHsgY29kZSA9IGRvYy5zcGxpdExpbmVzKGNvZGUpIH0KKyAgbWFrZUNo
YW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lu
fSkKK30KKworLy8gUmViYXNpbmcvcmVzZXR0aW5nIGhpc3RvcnkgdG8gZGVhbCB3aXRoIGV4dGVy
bmFsbHktc291cmNlZCBjaGFuZ2VzCisKK2Z1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9z
LCBmcm9tLCB0bywgZGlmZikgeworICBpZiAodG8gPCBwb3MubGluZSkgeworICAgIHBvcy5saW5l
ICs9IGRpZmYKKyAgfSBlbHNlIGlmIChmcm9tIDwgcG9zLmxpbmUpIHsKKyAgICBwb3MubGluZSA9
IGZyb20KKyAgICBwb3MuY2ggPSAwCisgIH0KK30KKworLy8gVHJpZXMgdG8gcmViYXNlIGFuIGFy
cmF5IG9mIGhpc3RvcnkgZXZlbnRzIGdpdmVuIGEgY2hhbmdlIGluIHRoZQorLy8gZG9jdW1lbnQu
IElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRoZQor
Ly8gZXZlbnQsIGFuZCBldmVyeXRoaW5nICdiZWhpbmQnIGl0LCBpcyBkaXNjYXJkZWQuIElmIHRo
ZSBjaGFuZ2UgaXMKKy8vIGJlZm9yZSB0aGUgZXZlbnQsIHRoZSBldmVudCdzIHBvc2l0aW9ucyBh
cmUgdXBkYXRlZC4gVXNlcyBhCisvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3IgdGhlIHBvc2l0
aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvCisvLyByZWFsbG9jYXRlIHRoZW0gYWxsIG9uIGV2ZXJ5
IHJlYmFzZSwgYnV0IGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aAorLy8gc2hhcmVkIHBvc2l0aW9u
IG9iamVjdHMgYmVpbmcgdW5zYWZlbHkgdXBkYXRlZC4KK2Z1bmN0aW9uIHJlYmFzZUhpc3RBcnJh
eShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgeworICAgIHZhciBzdWIgPSBhcnJheVtpXSwgb2sgPSB0cnVlCisgICAgaWYg
KHN1Yi5yYW5nZXMpIHsKKyAgICAgIGlmICghc3ViLmNvcGllZCkgeyBzdWIgPSBhcnJheVtpXSA9
IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0gdHJ1ZSB9CisgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgcmViYXNlSGlzdFNlbFNp
bmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwgZnJvbSwgdG8sIGRpZmYpCisgICAgICAgIHJlYmFz
ZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdlc1tqXS5oZWFkLCBmcm9tLCB0bywgZGlmZikKICAgICAg
IH0KLSAgICB9OwotICAgIHNpZ25hbChkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLCBkb2Ms
IG9iaik7Ci0gICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJlZm9yZVNlbGVjdGlvbkNo
YW5nZSIsIGRvYy5jbSwgb2JqKTsKLSAgICBpZiAob2JqLnJhbmdlcyAhPSBzZWwucmFuZ2VzKSBy
ZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKG9iai5yYW5nZXMsIG9iai5yYW5nZXMubGVuZ3RoIC0g
MSk7Ci0gICAgZWxzZSByZXR1cm4gc2VsOworICAgICAgY29udGludWUKKyAgICB9CisgICAgZm9y
ICh2YXIgaiQxID0gMDsgaiQxIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyArK2okMSkgeworICAgICAg
dmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2okMV0KKyAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUp
IHsKKyAgICAgICAgY3VyLmZyb20gPSBQb3MoY3VyLmZyb20ubGluZSArIGRpZmYsIGN1ci5mcm9t
LmNoKQorICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRvLmxpbmUgKyBkaWZmLCBjdXIudG8uY2gp
CisgICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3VyLnRvLmxpbmUpIHsKKyAgICAgICAgb2sgPSBm
YWxzZQorICAgICAgICBicmVhaworICAgICAgfQorICAgIH0KKyAgICBpZiAoIW9rKSB7CisgICAg
ICBhcnJheS5zcGxpY2UoMCwgaSArIDEpCisgICAgICBpID0gMAorICAgIH0KICAgfQorfQorCitm
dW5jdGlvbiByZWJhc2VIaXN0KGhpc3QsIGNoYW5nZSkgeworICB2YXIgZnJvbSA9IGNoYW5nZS5m
cm9tLmxpbmUsIHRvID0gY2hhbmdlLnRvLmxpbmUsIGRpZmYgPSBjaGFuZ2UudGV4dC5sZW5ndGgg
LSAodG8gLSBmcm9tKSAtIDEKKyAgcmViYXNlSGlzdEFycmF5KGhpc3QuZG9uZSwgZnJvbSwgdG8s
IGRpZmYpCisgIHJlYmFzZUhpc3RBcnJheShoaXN0LnVuZG9uZSwgZnJvbSwgdG8sIGRpZmYpCit9
CisKKy8vIFV0aWxpdHkgZm9yIGFwcGx5aW5nIGEgY2hhbmdlIHRvIGEgbGluZSBieSBoYW5kbGUg
b3IgbnVtYmVyLAorLy8gcmV0dXJuaW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0
ZXJpbmcgdGhlIGxpbmUgYXMKKy8vIGNoYW5nZWQuCitmdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywg
aGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkgeworICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5k
bGUKKyAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gIm51bWJlciIpIHsgbGluZSA9IGdldExpbmUoZG9j
LCBjbGlwTGluZShkb2MsIGhhbmRsZSkpIH0KKyAgZWxzZSB7IG5vID0gbGluZU5vKGhhbmRsZSkg
fQorICBpZiAobm8gPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9CisgIGlmIChvcChsaW5lLCBubykg
JiYgZG9jLmNtKSB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBubywgY2hhbmdlVHlwZSkgfQorICBy
ZXR1cm4gbGluZQorfQogCi0gIGZ1bmN0aW9uIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGRv
Yywgc2VsLCBvcHRpb25zKSB7Ci0gICAgdmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBsYXN0
ID0gbHN0KGRvbmUpOwotICAgIGlmIChsYXN0ICYmIGxhc3QucmFuZ2VzKSB7Ci0gICAgICBkb25l
W2RvbmUubGVuZ3RoIC0gMV0gPSBzZWw7Ci0gICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBz
ZWwsIG9wdGlvbnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWws
IG9wdGlvbnMpOworLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUgY29u
c2lzdGluZyBvZiBsZWF2ZXMsIHdpdGgKKy8vIGNodW5rIG9mIGxpbmVzIGluIHRoZW0sIGFuZCBi
cmFuY2hlcywgd2l0aCB1cCB0byB0ZW4gbGVhdmVzIG9yCisvLyBvdGhlciBicmFuY2ggbm9kZXMg
YmVsb3cgdGhlbS4gVGhlIHRvcCBub2RlIGlzIGFsd2F5cyBhIGJyYW5jaAorLy8gbm9kZSwgYW5k
IGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhcworLy8gYWRkaXRp
b25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzKS4KKy8vCisvLyBBbGwgbm9kZXMgaGF2ZSBwYXJl
bnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9tCisvLyBsaW5lIG51bWJl
cnMgdG8gbGluZSBvYmplY3RzLCBhbmQgdG8gZ28gZnJvbSBvYmplY3RzIHRvIG51bWJlcnMuCisv
LyBJdCBhbHNvIGluZGV4ZXMgYnkgaGVpZ2h0LCBhbmQgaXMgdXNlZCB0byBjb252ZXJ0IGJldHdl
ZW4gaGVpZ2h0CisvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0byBmaW5kIHRoZSB0b3RhbCBoZWln
aHQgb2YgdGhlIGRvY3VtZW50LgorLy8KKy8vIFNlZSBhbHNvIGh0dHA6Ly9tYXJpam5oYXZlcmJl
a2UubmwvYmxvZy9jb2RlbWlycm9yLWxpbmUtdHJlZS5odG1sCisKK2Z1bmN0aW9uIExlYWZDaHVu
ayhsaW5lcykgeworICB2YXIgdGhpcyQxID0gdGhpczsKKworICB0aGlzLmxpbmVzID0gbGluZXMK
KyAgdGhpcy5wYXJlbnQgPSBudWxsCisgIHZhciBoZWlnaHQgPSAwCisgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzJDEK
KyAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0CisgIH0KKyAgdGhpcy5oZWlnaHQgPSBoZWln
aHQKK30KKworTGVhZkNodW5rLnByb3RvdHlwZSA9IHsKKyAgY2h1bmtTaXplOiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoIH0sCisgIC8vIFJlbW92ZSB0aGUgbiBsaW5lcyBh
dCBvZmZzZXQgJ2F0Jy4KKyAgcmVtb3ZlSW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7CisgICAgdmFy
IHRoaXMkMSA9IHRoaXM7CisKKyAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBl
OyArK2kpIHsKKyAgICAgIHZhciBsaW5lID0gdGhpcyQxLmxpbmVzW2ldCisgICAgICB0aGlzJDEu
aGVpZ2h0IC09IGxpbmUuaGVpZ2h0CisgICAgICBjbGVhblVwTGluZShsaW5lKQorICAgICAgc2ln
bmFsTGF0ZXIobGluZSwgImRlbGV0ZSIpCiAgICAgfQorICAgIHRoaXMubGluZXMuc3BsaWNlKGF0
LCBuKQorICB9LAorICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBp
bnRvIGEgc2luZ2xlIGxlYWYuCisgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgeworICAgIGxp
bmVzLnB1c2guYXBwbHkobGluZXMsIHRoaXMubGluZXMpCisgIH0sCisgIC8vIEluc2VydCB0aGUg
Z2l2ZW4gYXJyYXkgb2YgbGluZXMgYXQgb2Zmc2V0ICdhdCcsIGNvdW50IHRoZW0gYXMKKyAgLy8g
aGF2aW5nIHRoZSBnaXZlbiBoZWlnaHQuCisgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGlu
ZXMsIGhlaWdodCkgeworICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgdGhpcy5oZWlnaHQg
Kz0gaGVpZ2h0CisgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQpLmNvbmNh
dChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKQorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgbGluZXNbaV0ucGFyZW50ID0gdGhpcyQxIH0KKyAg
fSwKKyAgLy8gVXNlZCB0byBpdGVyYXRlIG92ZXIgYSBwYXJ0IG9mIHRoZSB0cmVlLgorICBpdGVy
TjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CisgICAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgICBm
b3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpCisgICAgICB7IGlmIChvcCh0aGlzJDEu
bGluZXNbYXRdKSkgeyByZXR1cm4gdHJ1ZSB9IH0KICAgfQorfQorCitmdW5jdGlvbiBCcmFuY2hD
aHVuayhjaGlsZHJlbikgeworICB2YXIgdGhpcyQxID0gdGhpczsKIAotICAvLyBTZXQgYSBuZXcg
c2VsZWN0aW9uLgotICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHsK
LSAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpOwotICAgIGFkZFNlbGVj
dGlvblRvSGlzdG9yeShkb2MsIGRvYy5zZWwsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5h
Tiwgb3B0aW9ucyk7CisgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbgorICB2YXIgc2l6ZSA9IDAs
IGhlaWdodCA9IDAKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkg
eworICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldCisgICAgc2l6ZSArPSBjaC5jaHVua1NpemUoKTsg
aGVpZ2h0ICs9IGNoLmhlaWdodAorICAgIGNoLnBhcmVudCA9IHRoaXMkMQogICB9CisgIHRoaXMu
c2l6ZSA9IHNpemUKKyAgdGhpcy5oZWlnaHQgPSBoZWlnaHQKKyAgdGhpcy5wYXJlbnQgPSBudWxs
Cit9CisKK0JyYW5jaENodW5rLnByb3RvdHlwZSA9IHsKKyAgY2h1bmtTaXplOiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuc2l6ZSB9LAorICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHsK
KyAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgIHRoaXMuc2l6ZSAtPSBuCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgY2hp
bGQgPSB0aGlzJDEuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCkKKyAgICAgIGlm
IChhdCA8IHN6KSB7CisgICAgICAgIHZhciBybSA9IE1hdGgubWluKG4sIHN6IC0gYXQpLCBvbGRI
ZWlnaHQgPSBjaGlsZC5oZWlnaHQKKyAgICAgICAgY2hpbGQucmVtb3ZlSW5uZXIoYXQsIHJtKQor
ICAgICAgICB0aGlzJDEuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodAorICAgICAg
ICBpZiAoc3ogPT0gcm0pIHsgdGhpcyQxLmNoaWxkcmVuLnNwbGljZShpLS0sIDEpOyBjaGlsZC5w
YXJlbnQgPSBudWxsIH0KKyAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSB7IGJyZWFrIH0KKyAg
ICAgICAgYXQgPSAwCisgICAgICB9IGVsc2UgeyBhdCAtPSBzeiB9CisgICAgfQorICAgIC8vIElm
IHRoZSByZXN1bHQgaXMgc21hbGxlciB0aGFuIDI1IGxpbmVzLCBlbnN1cmUgdGhhdCBpdCBpcyBh
CisgICAgLy8gc2luZ2xlIGxlYWYgbm9kZS4KKyAgICBpZiAodGhpcy5zaXplIC0gbiA8IDI1ICYm
CisgICAgICAgICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgISh0aGlzLmNoaWxkcmVuWzBd
IGluc3RhbmNlb2YgTGVhZkNodW5rKSkpIHsKKyAgICAgIHZhciBsaW5lcyA9IFtdCisgICAgICB0
aGlzLmNvbGxhcHNlKGxpbmVzKQorICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5r
KGxpbmVzKV0KKyAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpcworICAgIH0KKyAg
fSwKKyAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CisgICAgdmFyIHRoaXMkMSA9IHRoaXM7
CiAKLSAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKSB7Ci0g
ICAgaWYgKGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikgfHwgZG9jLmNt
ICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpCi0gICAgICBz
ZWwgPSBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgeyB0aGlzJDEuY2hpbGRyZW5baV0uY29s
bGFwc2UobGluZXMpIH0KKyAgfSwKKyAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywg
aGVpZ2h0KSB7CisgICAgdmFyIHRoaXMkMSA9IHRoaXM7CiAKLSAgICB2YXIgYmlhcyA9IG9wdGlv
bnMgJiYgb3B0aW9ucy5iaWFzIHx8Ci0gICAgICAoY21wKHNlbC5wcmltYXJ5KCkuaGVhZCwgZG9j
LnNlbC5wcmltYXJ5KCkuaGVhZCkgPCAwID8gLTEgOiAxKTsKLSAgICBzZXRTZWxlY3Rpb25Jbm5l
cihkb2MsIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgdHJ1ZSkpOworICAg
IHRoaXMuc2l6ZSArPSBsaW5lcy5sZW5ndGgKKyAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKKyAgICAg
IHZhciBjaGlsZCA9IHRoaXMkMS5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKQor
ICAgICAgaWYgKGF0IDw9IHN6KSB7CisgICAgICAgIGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5l
cywgaGVpZ2h0KQorICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3Ro
ID4gNTApIHsKKyAgICAgICAgICAvLyBUbyBhdm9pZCBtZW1vcnkgdGhyYXNoaW5nIHdoZW4gY2hp
bGQubGluZXMgaXMgaHVnZSAoZS5nLiBmaXJzdCB2aWV3IG9mIGEgbGFyZ2UgZmlsZSksIGl0J3Mg
bmV2ZXIgc3BsaWNlZC4KKyAgICAgICAgICAvLyBJbnN0ZWFkLCBzbWFsbCBzbGljZXMgYXJlIHRh
a2VuLiBUaGV5J3JlIHRha2VuIGluIG9yZGVyIGJlY2F1c2Ugc2VxdWVudGlhbCBtZW1vcnkgYWNj
ZXNzZXMgYXJlIGZhc3Rlc3QuCisgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGNoaWxkLmxpbmVz
Lmxlbmd0aCAlIDI1ICsgMjUKKyAgICAgICAgICBmb3IgKHZhciBwb3MgPSByZW1haW5pbmc7IHBv
cyA8IGNoaWxkLmxpbmVzLmxlbmd0aDspIHsKKyAgICAgICAgICAgIHZhciBsZWFmID0gbmV3IExl
YWZDaHVuayhjaGlsZC5saW5lcy5zbGljZShwb3MsIHBvcyArPSAyNSkpCisgICAgICAgICAgICBj
aGlsZC5oZWlnaHQgLT0gbGVhZi5oZWlnaHQKKyAgICAgICAgICAgIHRoaXMkMS5jaGlsZHJlbi5z
cGxpY2UoKytpLCAwLCBsZWFmKQorICAgICAgICAgICAgbGVhZi5wYXJlbnQgPSB0aGlzJDEKKyAg
ICAgICAgICB9CisgICAgICAgICAgY2hpbGQubGluZXMgPSBjaGlsZC5saW5lcy5zbGljZSgwLCBy
ZW1haW5pbmcpCisgICAgICAgICAgdGhpcyQxLm1heWJlU3BpbGwoKQorICAgICAgICB9CisgICAg
ICAgIGJyZWFrCisgICAgICB9CisgICAgICBhdCAtPSBzegorICAgIH0KKyAgfSwKKyAgLy8gV2hl
biBhIG5vZGUgaGFzIGdyb3duLCBjaGVjayB3aGV0aGVyIGl0IHNob3VsZCBiZSBzcGxpdC4KKyAg
bWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9
IDEwKSB7IHJldHVybiB9CisgICAgdmFyIG1lID0gdGhpcworICAgIGRvIHsKKyAgICAgIHZhciBz
cGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNlKG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpCisg
ICAgICB2YXIgc2libGluZyA9IG5ldyBCcmFuY2hDaHVuayhzcGlsbGVkKQorICAgICAgaWYgKCFt
ZS5wYXJlbnQpIHsgLy8gQmVjb21lIHRoZSBwYXJlbnQgbm9kZQorICAgICAgICB2YXIgY29weSA9
IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbikKKyAgICAgICAgY29weS5wYXJlbnQgPSBtZQor
ICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXQorICAgICAgICBtZSA9IGNvcHkK
KyAgICAgfSBlbHNlIHsKKyAgICAgICAgbWUuc2l6ZSAtPSBzaWJsaW5nLnNpemUKKyAgICAgICAg
bWUuaGVpZ2h0IC09IHNpYmxpbmcuaGVpZ2h0CisgICAgICAgIHZhciBteUluZGV4ID0gaW5kZXhP
ZihtZS5wYXJlbnQuY2hpbGRyZW4sIG1lKQorICAgICAgICBtZS5wYXJlbnQuY2hpbGRyZW4uc3Bs
aWNlKG15SW5kZXggKyAxLCAwLCBzaWJsaW5nKQorICAgICAgfQorICAgICAgc2libGluZy5wYXJl
bnQgPSBtZS5wYXJlbnQKKyAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMCkKKyAg
ICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpCisgIH0sCisgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwg
b3ApIHsKKyAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIGNoaWxkID0gdGhpcyQxLmNo
aWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpCisgICAgICBpZiAoYXQgPCBzeikgewor
ICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpCisgICAgICAgIGlmIChjaGls
ZC5pdGVyTihhdCwgdXNlZCwgb3ApKSB7IHJldHVybiB0cnVlIH0KKyAgICAgICAgaWYgKChuIC09
IHVzZWQpID09IDApIHsgYnJlYWsgfQorICAgICAgICBhdCA9IDAKKyAgICAgIH0gZWxzZSB7IGF0
IC09IHN6IH0KKyAgICB9CisgIH0KK30KKworLy8gTGluZSB3aWRnZXRzIGFyZSBibG9jayBlbGVt
ZW50cyBkaXNwbGF5ZWQgYWJvdmUgb3IgYmVsb3cgYSBsaW5lLgorCitmdW5jdGlvbiBMaW5lV2lk
Z2V0KGRvYywgbm9kZSwgb3B0aW9ucykgeworICB2YXIgdGhpcyQxID0gdGhpczsKKworICBpZiAo
b3B0aW9ucykgeyBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgeyBpZiAob3B0aW9ucy5oYXNPd25Q
cm9wZXJ0eShvcHQpKQorICAgIHsgdGhpcyQxW29wdF0gPSBvcHRpb25zW29wdF0gfSB9IH0KKyAg
dGhpcy5kb2MgPSBkb2MKKyAgdGhpcy5ub2RlID0gbm9kZQorfQorZXZlbnRNaXhpbihMaW5lV2lk
Z2V0KQorCitmdW5jdGlvbiBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBk
aWZmKSB7CisgIGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9w
LnNjcm9sbFRvcCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpCisgICAgeyBhZGRUb1Njcm9sbFBvcyhj
bSwgbnVsbCwgZGlmZikgfQorfQorCitMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0
aW9uKCkgeworICB2YXIgdGhpcyQxID0gdGhpczsKKworICB2YXIgY20gPSB0aGlzLmRvYy5jbSwg
d3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGlu
ZSkKKyAgaWYgKG5vID09IG51bGwgfHwgIXdzKSB7IHJldHVybiB9CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgd3MubGVuZ3RoOyArK2kpIHsgaWYgKHdzW2ldID09IHRoaXMkMSkgeyB3cy5zcGxpY2Uo
aS0tLCAxKSB9IH0KKyAgaWYgKCF3cy5sZW5ndGgpIHsgbGluZS53aWRnZXRzID0gbnVsbCB9Cisg
IHZhciBoZWlnaHQgPSB3aWRnZXRIZWlnaHQodGhpcykKKyAgdXBkYXRlTGluZUhlaWdodChsaW5l
LCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpCisgIGlmIChjbSkgeyBydW5Jbk9w
KGNtLCBmdW5jdGlvbiAoKSB7CisgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwg
bGluZSwgLWhlaWdodCkKKyAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpCisgIH0p
IH0KK30KK0xpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgdmFy
IG9sZEggPSB0aGlzLmhlaWdodCwgY20gPSB0aGlzLmRvYy5jbSwgbGluZSA9IHRoaXMubGluZQor
ICB0aGlzLmhlaWdodCA9IG51bGwKKyAgdmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBv
bGRICisgIGlmICghZGlmZikgeyByZXR1cm4gfQorICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxp
bmUuaGVpZ2h0ICsgZGlmZikKKyAgaWYgKGNtKSB7IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHsK
KyAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWUKKyAgICBhZGp1c3RTY3JvbGxXaGVuQWJv
dmVWaXNpYmxlKGNtLCBsaW5lLCBkaWZmKQorICB9KSB9Cit9CisKK2Z1bmN0aW9uIGFkZExpbmVX
aWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKKyAgdmFyIHdpZGdldCA9IG5ldyBM
aW5lV2lkZ2V0KGRvYywgbm9kZSwgb3B0aW9ucykKKyAgdmFyIGNtID0gZG9jLmNtCisgIGlmIChj
bSAmJiB3aWRnZXQubm9IU2Nyb2xsKSB7IGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZSB9
CisgIGNoYW5nZUxpbmUoZG9jLCBoYW5kbGUsICJ3aWRnZXQiLCBmdW5jdGlvbiAobGluZSkgewor
ICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSkKKyAg
ICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHsgd2lkZ2V0cy5wdXNoKHdpZGdldCkgfQor
ICAgIGVsc2UgeyB3aWRnZXRzLnNwbGljZShNYXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1h
dGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkpLCAwLCB3aWRnZXQpIH0KKyAgICB3aWRnZXQubGlu
ZSA9IGxpbmUKKyAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB7CisgICAg
ICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGxpbmUpIDwgZG9jLnNjcm9sbFRvcAor
ICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIHdpZGdldEhlaWdodCh3
aWRnZXQpKQorICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgeyBhZGRUb1Njcm9sbFBvcyhjbSwgbnVs
bCwgd2lkZ2V0LmhlaWdodCkgfQorICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlCisg
ICAgfQorICAgIHJldHVybiB0cnVlCisgIH0pCisgIHJldHVybiB3aWRnZXQKK30KKworLy8gVEVY
VE1BUktFUlMKKworLy8gQ3JlYXRlZCB3aXRoIG1hcmtUZXh0IGFuZCBzZXRCb29rbWFyayBtZXRo
b2RzLiBBIFRleHRNYXJrZXIgaXMgYQorLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xl
YXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGUKKy8vIGRvY3VtZW50LiBMaW5lIG9i
amVjdHMgaG9sZCBhcnJheXMgKG1hcmtlZFNwYW5zKSBjb250YWluaW5nCisvLyB7ZnJvbSwgdG8s
IG1hcmtlcn0gb2JqZWN0IHBvaW50aW5nIHRvIHN1Y2ggbWFya2VyIG9iamVjdHMsIGFuZAorLy8g
aW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11
bHRpcGxlCisvLyBsaW5lcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgbWFya2VyIHdoZW4gaXQgc3Bh
bnMgYWNyb3NzIGxpbmVzLgorLy8gVGhlIHNwYW5zIHdpbGwgaGF2ZSBudWxsIGZvciB0aGVpciBm
cm9tL3RvIHByb3BlcnRpZXMgd2hlbiB0aGUKKy8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRo
ZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQorLy8gbGlua3MgYmFjayB0byB0
aGUgbGluZXMgdGhleSBjdXJyZW50bHkgdG91Y2guCisKKy8vIENvbGxhcHNlZCBtYXJrZXJzIGhh
dmUgdW5pcXVlIGlkcywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvcmRlcgorLy8gdGhlbSwgd2hp
Y2ggaXMgbmVlZGVkIGZvciB1bmlxdWVseSBkZXRlcm1pbmluZyBhbiBvdXRlciBtYXJrZXIKKy8v
IHdoZW4gdGhleSBvdmVybGFwICh0aGV5IG1heSBuZXN0LCBidXQgbm90IHBhcnRpYWxseSBvdmVy
bGFwKS4KK3ZhciBuZXh0TWFya2VySWQgPSAwCisKK2Z1bmN0aW9uIFRleHRNYXJrZXIoZG9jLCB0
eXBlKSB7CisgIHRoaXMubGluZXMgPSBbXQorICB0aGlzLnR5cGUgPSB0eXBlCisgIHRoaXMuZG9j
ID0gZG9jCisgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZAorfQorZXZlbnRNaXhpbihUZXh0TWFy
a2VyKQorCisvLyBDbGVhciB0aGUgbWFya2VyLgorVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIg
PSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgaWYgKHRoaXMuZXhwbGlj
aXRseUNsZWFyZWQpIHsgcmV0dXJuIH0KKyAgdmFyIGNtID0gdGhpcy5kb2MuY20sIHdpdGhPcCA9
IGNtICYmICFjbS5jdXJPcAorICBpZiAod2l0aE9wKSB7IHN0YXJ0T3BlcmF0aW9uKGNtKSB9Cisg
IGlmIChoYXNIYW5kbGVyKHRoaXMsICJjbGVhciIpKSB7CisgICAgdmFyIGZvdW5kID0gdGhpcy5m
aW5kKCkKKyAgICBpZiAoZm91bmQpIHsgc2lnbmFsTGF0ZXIodGhpcywgImNsZWFyIiwgZm91bmQu
ZnJvbSwgZm91bmQudG8pIH0KKyAgfQorICB2YXIgbWluID0gbnVsbCwgbWF4ID0gbnVsbAorICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgbGlu
ZSA9IHRoaXMkMS5saW5lc1tpXQorICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5l
Lm1hcmtlZFNwYW5zLCB0aGlzJDEpCisgICAgaWYgKGNtICYmICF0aGlzJDEuY29sbGFwc2VkKSB7
IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObyhsaW5lKSwgInRleHQiKSB9CisgICAgZWxzZSBpZiAo
Y20pIHsKKyAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsgbWF4ID0gbGluZU5vKGxpbmUpIH0K
KyAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgeyBtaW4gPSBsaW5lTm8obGluZSkgfQorICAg
IH0KKyAgICBsaW5lLm1hcmtlZFNwYW5zID0gcmVtb3ZlTWFya2VkU3BhbihsaW5lLm1hcmtlZFNw
YW5zLCBzcGFuKQorICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlzJDEuY29sbGFwc2Vk
ICYmICFsaW5lSXNIaWRkZW4odGhpcyQxLmRvYywgbGluZSkgJiYgY20pCisgICAgICB7IHVwZGF0
ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhlaWdodChjbS5kaXNwbGF5KSkgfQorICB9CisgIGlmIChj
bSAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZm9yICh2
YXIgaSQxID0gMDsgaSQxIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSQxKSB7CisgICAgdmFyIHZp
c3VhbCA9IHZpc3VhbExpbmUodGhpcyQxLmxpbmVzW2kkMV0pLCBsZW4gPSBsaW5lTGVuZ3RoKHZp
c3VhbCkKKyAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICBj
bS5kaXNwbGF5Lm1heExpbmUgPSB2aXN1YWwKKyAgICAgIGNtLmRpc3BsYXkubWF4TGluZUxlbmd0
aCA9IGxlbgorICAgICAgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWUKKyAgICB9Cisg
IH0gfQogCi0gICAgaWYgKCEob3B0aW9ucyAmJiBvcHRpb25zLnNjcm9sbCA9PT0gZmFsc2UpICYm
IGRvYy5jbSkKLSAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoZG9jLmNtKTsKKyAgaWYgKG1pbiAh
PSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSB7IHJlZ0NoYW5nZShjbSwgbWluLCBtYXgg
KyAxKSB9CisgIHRoaXMubGluZXMubGVuZ3RoID0gMAorICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVk
ID0gdHJ1ZQorICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKKyAgICB0
aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlCisgICAgaWYgKGNtKSB7IHJlQ2hlY2tTZWxlY3Rpb24o
Y20uZG9jKSB9CiAgIH0KKyAgaWYgKGNtKSB7IHNpZ25hbExhdGVyKGNtLCAibWFya2VyQ2xlYXJl
ZCIsIGNtLCB0aGlzKSB9CisgIGlmICh3aXRoT3ApIHsgZW5kT3BlcmF0aW9uKGNtKSB9CisgIGlm
ICh0aGlzLnBhcmVudCkgeyB0aGlzLnBhcmVudC5jbGVhcigpIH0KK30KIAotICBmdW5jdGlvbiBz
ZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNlbCkgewotICAgIGlmIChzZWwuZXF1YWxzKGRvYy5zZWwp
KSByZXR1cm47CisvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFya2VyIGluIHRoZSBkb2N1
bWVudC4gUmV0dXJucyBhIHtmcm9tLAorLy8gdG99IG9iamVjdCBieSBkZWZhdWx0LiBTaWRlIGNh
biBiZSBwYXNzZWQgdG8gZ2V0IGEgc3BlY2lmaWMgc2lkZQorLy8gLS0gMCAoYm90aCksIC0xIChs
ZWZ0KSwgb3IgMSAocmlnaHQpLiBXaGVuIGxpbmVPYmogaXMgdHJ1ZSwgdGhlCisvLyBQb3Mgb2Jq
ZWN0cyByZXR1cm5lZCBjb250YWluIGEgbGluZSBvYmplY3QsIHJhdGhlciB0aGFuIGEgbGluZQor
Ly8gbnVtYmVyICh1c2VkIHRvIHByZXZlbnQgbG9va2luZyB1cCB0aGUgc2FtZSBsaW5lIHR3aWNl
KS4KK1RleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihzaWRlLCBsaW5lT2JqKSB7
CisgIHZhciB0aGlzJDEgPSB0aGlzOwogCi0gICAgZG9jLnNlbCA9IHNlbDsKKyAgaWYgKHNpZGUg
PT0gbnVsbCAmJiB0aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgeyBzaWRlID0gMSB9CisgIHZhciBm
cm9tLCB0bworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsK
KyAgICB2YXIgbGluZSA9IHRoaXMkMS5saW5lc1tpXQorICAgIHZhciBzcGFuID0gZ2V0TWFya2Vk
U3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzJDEpCisgICAgaWYgKHNwYW4uZnJvbSAhPSBu
dWxsKSB7CisgICAgICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBz
cGFuLmZyb20pCisgICAgICBpZiAoc2lkZSA9PSAtMSkgeyByZXR1cm4gZnJvbSB9CisgICAgfQor
ICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsKKyAgICAgIHRvID0gUG9zKGxpbmVPYmogPyBsaW5l
IDogbGluZU5vKGxpbmUpLCBzcGFuLnRvKQorICAgICAgaWYgKHNpZGUgPT0gMSkgeyByZXR1cm4g
dG8gfQorICAgIH0KKyAgfQorICByZXR1cm4gZnJvbSAmJiB7ZnJvbTogZnJvbSwgdG86IHRvfQor
fQogCi0gICAgaWYgKGRvYy5jbSkgewotICAgICAgZG9jLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0g
ZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwotICAgICAgc2lnbmFsQ3Vyc29y
QWN0aXZpdHkoZG9jLmNtKTsKKy8vIFNpZ25hbHMgdGhhdCB0aGUgbWFya2VyJ3Mgd2lkZ2V0IGNo
YW5nZWQsIGFuZCBzdXJyb3VuZGluZyBsYXlvdXQKKy8vIHNob3VsZCBiZSByZWNvbXB1dGVkLgor
VGV4dE1hcmtlci5wcm90b3R5cGUuY2hhbmdlZCA9IGZ1bmN0aW9uKCkgeworICB2YXIgcG9zID0g
dGhpcy5maW5kKC0xLCB0cnVlKSwgd2lkZ2V0ID0gdGhpcywgY20gPSB0aGlzLmRvYy5jbQorICBp
ZiAoIXBvcyB8fCAhY20pIHsgcmV0dXJuIH0KKyAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkgewor
ICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBvcy5saW5lKQorICAgIHZh
ciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTikKKyAgICBpZiAodmlldykgeworICAg
ICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcih2aWV3KQorICAgICAgY20uY3VyT3Auc2Vs
ZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZQorICAgIH0KKyAgICBj
bS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZQorICAgIGlmICghbGluZUlzSGlkZGVuKHdpZGdl
dC5kb2MsIGxpbmUpICYmIHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgeworICAgICAgdmFyIG9sZEhl
aWdodCA9IHdpZGdldC5oZWlnaHQKKyAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxsCisgICAgICB2
YXIgZEhlaWdodCA9IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0CisgICAgICBpZiAo
ZEhlaWdodCkKKyAgICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsg
ZEhlaWdodCkgfQogICAgIH0KLSAgICBzaWduYWxMYXRlcihkb2MsICJjdXJzb3JBY3Rpdml0eSIs
IGRvYyk7CisgIH0pCit9CisKK1RleHRNYXJrZXIucHJvdG90eXBlLmF0dGFjaExpbmUgPSBmdW5j
dGlvbihsaW5lKSB7CisgIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHsK
KyAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcAorICAgIGlmICghb3AubWF5YmVIaWRkZW5N
YXJrZXJzIHx8IGluZGV4T2Yob3AubWF5YmVIaWRkZW5NYXJrZXJzLCB0aGlzKSA9PSAtMSkKKyAg
ICAgIHsgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZVVuaGlkZGVuTWFya2Vy
cyA9IFtdKSkucHVzaCh0aGlzKSB9CisgIH0KKyAgdGhpcy5saW5lcy5wdXNoKGxpbmUpCit9CitU
ZXh0TWFya2VyLnByb3RvdHlwZS5kZXRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkgeworICB0aGlz
LmxpbmVzLnNwbGljZShpbmRleE9mKHRoaXMubGluZXMsIGxpbmUpLCAxKQorICBpZiAoIXRoaXMu
bGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7CisgICAgdmFyIG9wID0gdGhpcy5kb2MuY20u
Y3VyT3AKKyAgICA7KG9wLm1heWJlSGlkZGVuTWFya2VycyB8fCAob3AubWF5YmVIaWRkZW5NYXJr
ZXJzID0gW10pKS5wdXNoKHRoaXMpCiAgIH0KK30KKworLy8gQ3JlYXRlIGEgbWFya2VyLCB3aXJl
IGl0IHVwIHRvIHRoZSByaWdodCBsaW5lcywgYW5kCitmdW5jdGlvbiBtYXJrVGV4dChkb2MsIGZy
b20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CisgIC8vIFNoYXJlZCBtYXJrZXJzIChhY3Jvc3MgbGlu
a2VkIGRvY3VtZW50cykgYXJlIGhhbmRsZWQgc2VwYXJhdGVseQorICAvLyAobWFya1RleHRTaGFy
ZWQgd2lsbCBjYWxsIG91dCB0byB0aGlzIGFnYWluLCBvbmNlIHBlcgorICAvLyBkb2N1bWVudCku
CisgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkKSB7IHJldHVybiBtYXJrVGV4dFNoYXJl
ZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB9CisgIC8vIEVuc3VyZSB3ZSBhcmUgaW4g
YW4gb3BlcmF0aW9uLgorICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApIHsgcmV0dXJuIG9w
ZXJhdGlvbihkb2MuY20sIG1hcmtUZXh0KShkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB9
CisKKyAgdmFyIG1hcmtlciA9IG5ldyBUZXh0TWFya2VyKGRvYywgdHlwZSksIGRpZmYgPSBjbXAo
ZnJvbSwgdG8pCisgIGlmIChvcHRpb25zKSB7IGNvcHlPYmoob3B0aW9ucywgbWFya2VyLCBmYWxz
ZSkgfQorICAvLyBEb24ndCBjb25uZWN0IGVtcHR5IG1hcmtlcnMgdW5sZXNzIGNsZWFyV2hlbkVt
cHR5IGlzIGZhbHNlCisgIGlmIChkaWZmID4gMCB8fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFy
V2hlbkVtcHR5ICE9PSBmYWxzZSkKKyAgICB7IHJldHVybiBtYXJrZXIgfQorICBpZiAobWFya2Vy
LnJlcGxhY2VkV2l0aCkgeworICAgIC8vIFNob3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBj
b2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0ZXh0KQorICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0
cnVlCisgICAgbWFya2VyLndpZGdldE5vZGUgPSBlbHQoInNwYW4iLCBbbWFya2VyLnJlcGxhY2Vk
V2l0aF0sICJDb2RlTWlycm9yLXdpZGdldCIpCisgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNl
RXZlbnRzKSB7IG1hcmtlci53aWRnZXROb2RlLnNldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50
cyIsICJ0cnVlIikgfQorICAgIGlmIChvcHRpb25zLmluc2VydExlZnQpIHsgbWFya2VyLndpZGdl
dE5vZGUuaW5zZXJ0TGVmdCA9IHRydWUgfQorICB9CisgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7
CisgICAgaWYgKGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBmcm9tLmxpbmUsIGZyb20s
IHRvLCBtYXJrZXIpIHx8CisgICAgICAgIGZyb20ubGluZSAhPSB0by5saW5lICYmIGNvbmZsaWN0
aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9tLCB0bywgbWFya2VyKSkKKyAgICAg
IHsgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkg
b3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIikgfQorICAgIHNlZUNvbGxhcHNlZFNwYW5zKCkK
KyAgfQorCisgIGlmIChtYXJrZXIuYWRkVG9IaXN0b3J5KQorICAgIHsgYWRkQ2hhbmdlVG9IaXN0
b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgb3JpZ2luOiAibWFya1RleHQifSwgZG9jLnNl
bCwgTmFOKSB9CisKKyAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRh
dGVNYXhMaW5lCisgIGRvYy5pdGVyKGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGlu
ZSkgeworICAgIGlmIChjbSAmJiBtYXJrZXIuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVX
cmFwcGluZyAmJiB2aXN1YWxMaW5lKGxpbmUpID09IGNtLmRpc3BsYXkubWF4TGluZSkKKyAgICAg
IHsgdXBkYXRlTWF4TGluZSA9IHRydWUgfQorICAgIGlmIChtYXJrZXIuY29sbGFwc2VkICYmIGN1
ckxpbmUgIT0gZnJvbS5saW5lKSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCkgfQorICAgIGFk
ZE1hcmtlZFNwYW4obGluZSwgbmV3IE1hcmtlZFNwYW4obWFya2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDog
bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxpbmUgPT0g
dG8ubGluZSA/IHRvLmNoIDogbnVsbCkpCisgICAgKytjdXJMaW5lCisgIH0pCisgIC8vIGxpbmVJ
c0hpZGRlbiBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgc3BhbnMsIHNvIG5lZWRzIGEg
c2Vjb25kIHBhc3MKKyAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsgZG9jLml0ZXIoZnJvbS5saW5l
LCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHsKKyAgICBpZiAobGluZUlzSGlkZGVuKGRv
YywgbGluZSkpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKSB9CisgIH0pIH0KKworICBpZiAo
bWFya2VyLmNsZWFyT25FbnRlcikgeyBvbihtYXJrZXIsICJiZWZvcmVDdXJzb3JFbnRlciIsIGZ1
bmN0aW9uICgpIHsgcmV0dXJuIG1hcmtlci5jbGVhcigpOyB9KSB9CiAKLSAgLy8gVmVyaWZ5IHRo
YXQgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKLSAg
Ly8gbWFya2VkIHJhbmdlcy4KLSAgZnVuY3Rpb24gcmVDaGVja1NlbGVjdGlvbihkb2MpIHsKLSAg
ICBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIGRvYy5z
ZWwsIG51bGwsIGZhbHNlKSwgc2VsX2RvbnRTY3JvbGwpOworICBpZiAobWFya2VyLnJlYWRPbmx5
KSB7CisgICAgc2VlUmVhZE9ubHlTcGFucygpCisgICAgaWYgKGRvYy5oaXN0b3J5LmRvbmUubGVu
Z3RoIHx8IGRvYy5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpCisgICAgICB7IGRvYy5jbGVhckhpc3Rv
cnkoKSB9CisgIH0KKyAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsKKyAgICBtYXJrZXIuaWQgPSAr
K25leHRNYXJrZXJJZAorICAgIG1hcmtlci5hdG9taWMgPSB0cnVlCisgIH0KKyAgaWYgKGNtKSB7
CisgICAgLy8gU3luYyBlZGl0b3Igc3RhdGUKKyAgICBpZiAodXBkYXRlTWF4TGluZSkgeyBjbS5j
dXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZSB9CisgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpCisg
ICAgICB7IHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSkgfQorICAgIGVsc2Ug
aWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5zdGFydFN0eWxl
IHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY3NzKQorICAgICAgeyBmb3IgKHZhciBpID0g
ZnJvbS5saW5lOyBpIDw9IHRvLmxpbmU7IGkrKykgeyByZWdMaW5lQ2hhbmdlKGNtLCBpLCAidGV4
dCIpIH0gfQorICAgIGlmIChtYXJrZXIuYXRvbWljKSB7IHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9j
KSB9CisgICAgc2lnbmFsTGF0ZXIoY20sICJtYXJrZXJBZGRlZCIsIGNtLCBtYXJrZXIpCisgIH0K
KyAgcmV0dXJuIG1hcmtlcgorfQorCisvLyBTSEFSRUQgVEVYVE1BUktFUlMKKworLy8gQSBzaGFy
ZWQgbWFya2VyIHNwYW5zIG11bHRpcGxlIGxpbmtlZCBkb2N1bWVudHMuIEl0IGlzCisvLyBpbXBs
ZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBub3Jt
YWwKKy8vIG1hcmtlcnMuCitmdW5jdGlvbiBTaGFyZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1h
cnkpIHsKKyAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgdGhpcy5tYXJrZXJzID0gbWFya2Vycwor
ICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5s
ZW5ndGg7ICsraSkKKyAgICB7IG1hcmtlcnNbaV0ucGFyZW50ID0gdGhpcyQxIH0KK30KK2V2ZW50
TWl4aW4oU2hhcmVkVGV4dE1hcmtlcikKKworU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xl
YXIgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgaWYgKHRoaXMuZXhw
bGljaXRseUNsZWFyZWQpIHsgcmV0dXJuIH0KKyAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRy
dWUKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK2kpCisgICAg
eyB0aGlzJDEubWFya2Vyc1tpXS5jbGVhcigpIH0KKyAgc2lnbmFsTGF0ZXIodGhpcywgImNsZWFy
IikKK30KK1NoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihzaWRlLCBs
aW5lT2JqKSB7CisgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZChzaWRlLCBsaW5lT2JqKQorfQor
CitmdW5jdGlvbiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7
CisgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpCisgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2UK
KyAgdmFyIG1hcmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSld
LCBwcmltYXJ5ID0gbWFya2Vyc1swXQorICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2Rl
CisgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jKSB7CisgICAgaWYgKHdpZGdldCkgeyBv
cHRpb25zLndpZGdldE5vZGUgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpIH0KKyAgICBtYXJrZXJz
LnB1c2gobWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byks
IG9wdGlvbnMsIHR5cGUpKQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5n
dGg7ICsraSkKKyAgICAgIHsgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHsgcmV0dXJuIH0g
fQorICAgIHByaW1hcnkgPSBsc3QobWFya2VycykKKyAgfSkKKyAgcmV0dXJuIG5ldyBTaGFyZWRU
ZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpCit9CisKK2Z1bmN0aW9uIGZpbmRTaGFyZWRNYXJr
ZXJzKGRvYykgeworICByZXR1cm4gZG9jLmZpbmRNYXJrcyhQb3MoZG9jLmZpcnN0LCAwKSwgZG9j
LmNsaXBQb3MoUG9zKGRvYy5sYXN0TGluZSgpKSksIGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLnBh
cmVudDsgfSkKK30KKworZnVuY3Rpb24gY29weVNoYXJlZE1hcmtlcnMoZG9jLCBtYXJrZXJzKSB7
CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgeworICAgIHZhciBt
YXJrZXIgPSBtYXJrZXJzW2ldLCBwb3MgPSBtYXJrZXIuZmluZCgpCisgICAgdmFyIG1Gcm9tID0g
ZG9jLmNsaXBQb3MocG9zLmZyb20pLCBtVG8gPSBkb2MuY2xpcFBvcyhwb3MudG8pCisgICAgaWYg
KGNtcChtRnJvbSwgbVRvKSkgeworICAgICAgdmFyIHN1Yk1hcmsgPSBtYXJrVGV4dChkb2MsIG1G
cm9tLCBtVG8sIG1hcmtlci5wcmltYXJ5LCBtYXJrZXIucHJpbWFyeS50eXBlKQorICAgICAgbWFy
a2VyLm1hcmtlcnMucHVzaChzdWJNYXJrKQorICAgICAgc3ViTWFyay5wYXJlbnQgPSBtYXJrZXIK
KyAgICB9CiAgIH0KK30KKworZnVuY3Rpb24gZGV0YWNoU2hhcmVkTWFya2VycyhtYXJrZXJzKSB7
CisgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkgeworICAgIHZhciBtYXJrZXIgPSBtYXJrZXJz
W2ldLCBsaW5rZWQgPSBbbWFya2VyLnByaW1hcnkuZG9jXQorICAgIGxpbmtlZERvY3MobWFya2Vy
LnByaW1hcnkuZG9jLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gbGlua2VkLnB1c2goZCk7IH0pCisg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykgeworICAg
ICAgdmFyIHN1Yk1hcmtlciA9IG1hcmtlci5tYXJrZXJzW2pdCisgICAgICBpZiAoaW5kZXhPZihs
aW5rZWQsIHN1Yk1hcmtlci5kb2MpID09IC0xKSB7CisgICAgICAgIHN1Yk1hcmtlci5wYXJlbnQg
PSBudWxsCisgICAgICAgIG1hcmtlci5tYXJrZXJzLnNwbGljZShqLS0sIDEpCisgICAgICB9Cisg
ICAgfQorICB9OworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykg
bG9vcCggaSApOworfQorCit2YXIgbmV4dERvY0lkID0gMAordmFyIERvYyA9IGZ1bmN0aW9uKHRl
eHQsIG1vZGUsIGZpcnN0TGluZSwgbGluZVNlcCkgeworICBpZiAoISh0aGlzIGluc3RhbmNlb2Yg
RG9jKSkgeyByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXApIH0K
KyAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSB7IGZpcnN0TGluZSA9IDAgfQorCisgIEJyYW5jaENo
dW5rLmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKCIiLCBudWxsKV0pXSkKKyAg
dGhpcy5maXJzdCA9IGZpcnN0TGluZQorICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVm
dCA9IDAKKyAgdGhpcy5jYW50RWRpdCA9IGZhbHNlCisgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0g
MQorICB0aGlzLmZyb250aWVyID0gZmlyc3RMaW5lCisgIHZhciBzdGFydCA9IFBvcyhmaXJzdExp
bmUsIDApCisgIHRoaXMuc2VsID0gc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KQorICB0aGlzLmhpc3Rv
cnkgPSBuZXcgSGlzdG9yeShudWxsKQorICB0aGlzLmlkID0gKytuZXh0RG9jSWQKKyAgdGhpcy5t
b2RlT3B0aW9uID0gbW9kZQorICB0aGlzLmxpbmVTZXAgPSBsaW5lU2VwCisgIHRoaXMuZXh0ZW5k
ID0gZmFsc2UKKworICBpZiAodHlwZW9mIHRleHQgPT0gInN0cmluZyIpIHsgdGV4dCA9IHRoaXMu
c3BsaXRMaW5lcyh0ZXh0KSB9CisgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBz
dGFydCwgdGV4dDogdGV4dH0pCisgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24o
c3RhcnQpLCBzZWxfZG9udFNjcm9sbCkKK30KKworRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihC
cmFuY2hDaHVuay5wcm90b3R5cGUsIHsKKyAgY29uc3RydWN0b3I6IERvYywKKyAgLy8gSXRlcmF0
ZSBvdmVyIHRoZSBkb2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0tIHdpdGggb25seSBvbmUK
KyAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVhY2ggbGluZSBpbiB0aGUgZG9jdW1l
bnQuIFdpdGgKKyAgLy8gdGhyZWUsIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIHJhbmdlIGdpdmVuIGJ5
IHRoZSBmaXJzdCB0d28gKHdpdGgKKyAgLy8gdGhlIHNlY29uZCBiZWluZyBub24taW5jbHVzaXZl
KS4KKyAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7CisgICAgaWYgKG9wKSB7IHRoaXMu
aXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApIH0KKyAgICBlbHNlIHsgdGhp
cy5pdGVyTih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplLCBmcm9tKSB9CisgIH0s
CisKKyAgLy8gTm9uLXB1YmxpYyBpbnRlcmZhY2UgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgbGlu
ZXMuCisgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7CisgICAgdmFyIGhlaWdodCA9IDAK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7IGhlaWdodCArPSBs
aW5lc1tpXS5oZWlnaHQgfQorICAgIHRoaXMuaW5zZXJ0SW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBs
aW5lcywgaGVpZ2h0KQorICB9LAorICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuKSB7IHRoaXMucmVt
b3ZlSW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBuKSB9LAorCisgIC8vIEZyb20gaGVyZSwgdGhlIG1l
dGhvZHMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIE1vc3QKKyAgLy8gYXJlIGFs
c28gYXZhaWxhYmxlIGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuCisKKyAgZ2V0
VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHsKKyAgICB2YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlz
LCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKQorICAgIGlmIChsaW5lU2VwID09
PSBmYWxzZSkgeyByZXR1cm4gbGluZXMgfQorICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAg
fHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpCisgIH0sCisgIHNldFZhbHVlOiBkb2NNZXRob2RPcChm
dW5jdGlvbihjb2RlKSB7CisgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9
IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxCisgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTog
dG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAorICAg
ICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAi
c2V0VmFsdWUiLCBmdWxsOiB0cnVlfSwgdHJ1ZSkKKyAgICBzZXRTZWxlY3Rpb24odGhpcywgc2lt
cGxlU2VsZWN0aW9uKHRvcCkpCisgIH0pLAorICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUs
IGZyb20sIHRvLCBvcmlnaW4pIHsKKyAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKQorICAg
IHRvID0gdG8gPyBjbGlwUG9zKHRoaXMsIHRvKSA6IGZyb20KKyAgICByZXBsYWNlUmFuZ2UodGhp
cywgY29kZSwgZnJvbSwgdG8sIG9yaWdpbikKKyAgfSwKKyAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZy
b20sIHRvLCBsaW5lU2VwKSB7CisgICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0aGlzLCBjbGlw
UG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSkKKyAgICBpZiAobGluZVNlcCA9PT0g
ZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH0KKyAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8
IHRoaXMubGluZVNlcGFyYXRvcigpKQorICB9LAorCisgIGdldExpbmU6IGZ1bmN0aW9uKGxpbmUp
IHt2YXIgbCA9IHRoaXMuZ2V0TGluZUhhbmRsZShsaW5lKTsgcmV0dXJuIGwgJiYgbC50ZXh0fSwK
KworICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZSh0aGlzLCBsaW5l
KSkgeyByZXR1cm4gZ2V0TGluZSh0aGlzLCBsaW5lKSB9fSwKKyAgZ2V0TGluZU51bWJlcjogZnVu
Y3Rpb24obGluZSkge3JldHVybiBsaW5lTm8obGluZSl9LAorCisgIGdldExpbmVIYW5kbGVWaXN1
YWxTdGFydDogZnVuY3Rpb24obGluZSkgeworICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVy
IikgeyBsaW5lID0gZ2V0TGluZSh0aGlzLCBsaW5lKSB9CisgICAgcmV0dXJuIHZpc3VhbExpbmUo
bGluZSkKKyAgfSwKKworICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNpemV9
LAorICBmaXJzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0fSwKKyAgbGFzdExp
bmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMX0sCisKKyAg
Y2xpcFBvczogZnVuY3Rpb24ocG9zKSB7cmV0dXJuIGNsaXBQb3ModGhpcywgcG9zKX0sCisKKyAg
Z2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgeworICAgIHZhciByYW5nZSA9IHRoaXMuc2VsLnBy
aW1hcnkoKSwgcG9zCisgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSB7
IHBvcyA9IHJhbmdlLmhlYWQgfQorICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJhbmNob3IiKSB7IHBv
cyA9IHJhbmdlLmFuY2hvciB9CisgICAgZWxzZSBpZiAoc3RhcnQgPT0gImVuZCIgfHwgc3RhcnQg
PT0gInRvIiB8fCBzdGFydCA9PT0gZmFsc2UpIHsgcG9zID0gcmFuZ2UudG8oKSB9CisgICAgZWxz
ZSB7IHBvcyA9IHJhbmdlLmZyb20oKSB9CisgICAgcmV0dXJuIHBvcworICB9LAorICBsaXN0U2Vs
ZWN0aW9uczogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNlbC5yYW5nZXMgfSwKKyAgc29tZXRo
aW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNlbC5zb21ldGhpbmdTZWxlY3Rl
ZCgpfSwKKworICBzZXRDdXJzb3I6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGNoLCBvcHRp
b25zKSB7CisgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgdHlwZW9m
IGxpbmUgPT0gIm51bWJlciIgPyBQb3MobGluZSwgY2ggfHwgMCkgOiBsaW5lKSwgbnVsbCwgb3B0
aW9ucykKKyAgfSksCisgIHNldFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9y
LCBoZWFkLCBvcHRpb25zKSB7CisgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3Mo
dGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIG9wdGlvbnMpCisg
IH0pLAorICBleHRlbmRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVy
LCBvcHRpb25zKSB7CisgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgaGVh
ZCksIG90aGVyICYmIGNsaXBQb3ModGhpcywgb3RoZXIpLCBvcHRpb25zKQorICB9KSwKKyAgZXh0
ZW5kU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZHMsIG9wdGlvbnMpIHsKKyAg
ICBleHRlbmRTZWxlY3Rpb25zKHRoaXMsIGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcyksIG9wdGlv
bnMpCisgIH0pLAorICBleHRlbmRTZWxlY3Rpb25zQnk6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGYs
IG9wdGlvbnMpIHsKKyAgICB2YXIgaGVhZHMgPSBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKQorICAg
IGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9u
cykKKyAgfSksCisgIHNldFNlbGVjdGlvbnM6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlcywg
cHJpbWFyeSwgb3B0aW9ucykgeworICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgaWYgKCFy
YW5nZXMubGVuZ3RoKSB7IHJldHVybiB9CisgICAgdmFyIG91dCA9IFtdCisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICB7IG91dFtpXSA9IG5ldyBSYW5n
ZShjbGlwUG9zKHRoaXMkMSwgcmFuZ2VzW2ldLmFuY2hvciksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xpcFBvcyh0aGlzJDEsIHJhbmdlc1tpXS5oZWFkKSkgfQorICAgIGlmIChwcmltYXJ5
ID09IG51bGwpIHsgcHJpbWFyeSA9IE1hdGgubWluKHJhbmdlcy5sZW5ndGggLSAxLCB0aGlzLnNl
bC5wcmltSW5kZXgpIH0KKyAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9u
KG91dCwgcHJpbWFyeSksIG9wdGlvbnMpCisgIH0pLAorICBhZGRTZWxlY3Rpb246IGRvY01ldGhv
ZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykgeworICAgIHZhciByYW5nZXMgPSB0
aGlzLnNlbC5yYW5nZXMuc2xpY2UoMCkKKyAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoY2xpcFBv
cyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSkpCisgICAgc2V0
U2VsZWN0aW9uKHRoaXMsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIHJhbmdlcy5sZW5ndGgg
LSAxKSwgb3B0aW9ucykKKyAgfSksCisKKyAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2Vw
KSB7CisgICAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwu
cmFuZ2VzLCBsaW5lcworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsr
KSB7CisgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzJDEsIHJhbmdlc1tpXS5mcm9tKCks
IHJhbmdlc1tpXS50bygpKQorICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwp
IDogc2VsCisgICAgfQorICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgeyByZXR1cm4gbGluZXMg
fQorICAgIGVsc2UgeyByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFy
YXRvcigpKSB9CisgIH0sCisgIGdldFNlbGVjdGlvbnM6IGZ1bmN0aW9uKGxpbmVTZXApIHsKKyAg
ICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgIHZhciBwYXJ0cyA9IFtdLCByYW5nZXMgPSB0aGlz
LnNlbC5yYW5nZXMKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykg
eworICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4odGhpcyQxLCByYW5nZXNbaV0uZnJvbSgpLCBy
YW5nZXNbaV0udG8oKSkKKyAgICAgIGlmIChsaW5lU2VwICE9PSBmYWxzZSkgeyBzZWwgPSBzZWwu
am9pbihsaW5lU2VwIHx8IHRoaXMkMS5saW5lU2VwYXJhdG9yKCkpIH0KKyAgICAgIHBhcnRzW2ld
ID0gc2VsCisgICAgfQorICAgIHJldHVybiBwYXJ0cworICB9LAorICByZXBsYWNlU2VsZWN0aW9u
OiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7CisgICAgdmFyIGR1cCA9IFtdCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAg
ICB7IGR1cFtpXSA9IGNvZGUgfQorICAgIHRoaXMucmVwbGFjZVNlbGVjdGlvbnMoZHVwLCBjb2xs
YXBzZSwgb3JpZ2luIHx8ICIraW5wdXQiKQorICB9LAorICByZXBsYWNlU2VsZWN0aW9uczogZG9j
TWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgeworICAgIHZhciB0aGlz
JDEgPSB0aGlzOwogCi0gIC8vIFJldHVybiBhIHNlbGVjdGlvbiB0aGF0IGRvZXMgbm90IHBhcnRp
YWxseSBzZWxlY3QgYW55IGF0b21pYwotICAvLyByYW5nZXMuCi0gIGZ1bmN0aW9uIHNraXBBdG9t
aWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHsKLSAgICB2YXIgb3V0Owor
ICAgIHZhciBjaGFuZ2VzID0gW10sIHNlbCA9IHRoaXMuc2VsCiAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFu
Z2VzW2ldOwotICAgICAgdmFyIG5ld0FuY2hvciA9IHNraXBBdG9taWMoZG9jLCByYW5nZS5hbmNo
b3IsIGJpYXMsIG1heUNsZWFyKTsKLSAgICAgIHZhciBuZXdIZWFkID0gc2tpcEF0b21pYyhkb2Ms
IHJhbmdlLmhlYWQsIGJpYXMsIG1heUNsZWFyKTsKLSAgICAgIGlmIChvdXQgfHwgbmV3QW5jaG9y
ICE9IHJhbmdlLmFuY2hvciB8fCBuZXdIZWFkICE9IHJhbmdlLmhlYWQpIHsKLSAgICAgICAgaWYg
KCFvdXQpIG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7Ci0gICAgICAgIG91dFtpXSA9IG5l
dyBSYW5nZShuZXdBbmNob3IsIG5ld0hlYWQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
b3V0ID8gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgc2VsLnByaW1JbmRleCkgOiBzZWw7Ci0gIH0K
LQotICAvLyBFbnN1cmUgYSBnaXZlbiBwb3NpdGlvbiBpcyBub3QgaW5zaWRlIGFuIGF0b21pYyBy
YW5nZS4KLSAgZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBvcywgYmlhcywgbWF5Q2xlYXIpIHsK
LSAgICB2YXIgZmxpcHBlZCA9IGZhbHNlLCBjdXJQb3MgPSBwb3M7Ci0gICAgdmFyIGRpciA9IGJp
YXMgfHwgMTsKLSAgICBkb2MuY2FudEVkaXQgPSBmYWxzZTsKLSAgICBzZWFyY2g6IGZvciAoOzsp
IHsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGN1clBvcy5saW5lKTsKLSAgICAgIGlm
IChsaW5lLm1hcmtlZFNwYW5zKSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5t
YXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewotICAgICAgICAgIHZhciBzcCA9IGxpbmUubWFya2Vk
U3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7Ci0gICAgICAgICAgaWYgKChzcC5mcm9tID09IG51bGwg
fHwgKG0uaW5jbHVzaXZlTGVmdCA/IHNwLmZyb20gPD0gY3VyUG9zLmNoIDogc3AuZnJvbSA8IGN1
clBvcy5jaCkpICYmCi0gICAgICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IChtLmluY2x1c2l2
ZVJpZ2h0ID8gc3AudG8gPj0gY3VyUG9zLmNoIDogc3AudG8gPiBjdXJQb3MuY2gpKSkgewotICAg
ICAgICAgICAgaWYgKG1heUNsZWFyKSB7Ci0gICAgICAgICAgICAgIHNpZ25hbChtLCAiYmVmb3Jl
Q3Vyc29yRW50ZXIiKTsKLSAgICAgICAgICAgICAgaWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWxpbmUubWFya2VkU3BhbnMpIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGVsc2Ugey0taTsgY29udGludWU7fQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoIW0uYXRvbWljKSBjb250aW51ZTsKLSAgICAgICAgICAgIHZh
ciBuZXdQb3MgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7Ci0gICAgICAgICAgICBpZiAoY21w
KG5ld1BvcywgY3VyUG9zKSA9PSAwKSB7Ci0gICAgICAgICAgICAgIG5ld1Bvcy5jaCArPSBkaXI7
Ci0gICAgICAgICAgICAgIGlmIChuZXdQb3MuY2ggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5ld1Bvcy5saW5lID4gZG9jLmZpcnN0KSBuZXdQb3MgPSBjbGlwUG9zKGRvYywgUG9zKG5ld1Bv
cy5saW5lIC0gMSkpOwotICAgICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuZXdQb3MuY2ggPiBsaW5lLnRleHQubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lIDwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSBu
ZXdQb3MgPSBQb3MobmV3UG9zLmxpbmUgKyAxLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIG5l
d1BvcyA9IG51bGw7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKCFuZXdQb3Mp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmxpcHBlZCkgewotICAgICAgICAgICAgICAgICAgLy8g
RHJpdmVuIGluIGEgY29ybmVyIC0tIG5vIHZhbGlkIGN1cnNvciBwb3NpdGlvbiBmb3VuZCBhdCBh
bGwKLSAgICAgICAgICAgICAgICAgIC8vIC0tIHRyeSBhZ2FpbiAqd2l0aCogY2xlYXJpbmcsIGlm
IHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICBpZiAoIW1heUNsZWFyKSByZXR1
cm4gc2tpcEF0b21pYyhkb2MsIHBvcywgYmlhcywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVkaXRpbmcgdW50aWwgZnVydGhlciBub3RpY2UsIGFuZCBy
ZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkb2MKLSAgICAgICAgICAgICAgICAgIGRvYy5jYW50RWRp
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZsaXBwZWQgPSB0cnVlOyBuZXdQb3Mg
PSBwb3M7IGRpciA9IC1kaXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGN1clBvcyA9IG5ld1BvczsKLSAgICAgICAgICAgIGNvbnRpbnVlIHNlYXJjaDsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBjdXJQb3M7Ci0gICAg
fQotICB9Ci0KLSAgLy8gU0VMRUNUSU9OIERSQVdJTkcKLQotICBmdW5jdGlvbiB1cGRhdGVTZWxl
Y3Rpb24oY20pIHsKLSAgICBjbS5kaXNwbGF5LmlucHV0LnNob3dTZWxlY3Rpb24oY20uZGlzcGxh
eS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJlcGFyZVNl
bGVjdGlvbihjbSwgcHJpbWFyeSkgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIHJlc3VsdCA9IHt9
OwotICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOwotICAgIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rp
b24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAocHJpbWFy
eSA9PT0gZmFsc2UgJiYgaSA9PSBkb2Muc2VsLnByaW1JbmRleCkgY29udGludWU7Ci0gICAgICB2
YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKLSAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5n
ZS5lbXB0eSgpOwotICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JX
aGVuU2VsZWN0aW5nKQotICAgICAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5nZS5oZWFk
LCBjdXJGcmFnbWVudCk7Ci0gICAgICBpZiAoIWNvbGxhcHNlZCkKLSAgICAgICAgZHJhd1NlbGVj
dGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotICB9Ci0KLSAgLy8gRHJhd3MgYSBjdXJzb3IgZm9yIHRoZSBnaXZlbiByYW5nZQotICBm
dW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBoZWFkLCBvdXRwdXQpIHsKLSAgICB2YXIg
cG9zID0gY3Vyc29yQ29vcmRzKGNtLCBoZWFkLCAiZGl2IiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlv
bnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7Ci0KLSAgICB2YXIgY3Vyc29yID0gb3V0cHV0
LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpKTsK
LSAgICBjdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKLSAgICBjdXJzb3Iuc3R5
bGUudG9wID0gcG9zLnRvcCArICJweCI7Ci0gICAgY3Vyc29yLnN0eWxlLmhlaWdodCA9IE1hdGgu
bWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAqIGNtLm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsg
InB4IjsKLQotICAgIGlmIChwb3Mub3RoZXIpIHsKLSAgICAgIC8vIFNlY29uZGFyeSBjdXJzb3Is
IHNob3duIHdoZW4gb24gYSAnanVtcCcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dAotICAgICAgdmFy
IG90aGVyQ3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJD
b2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpKTsKLSAgICAgIG90
aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmxl
ZnQgPSBwb3Mub3RoZXIubGVmdCArICJweCI7Ci0gICAgICBvdGhlckN1cnNvci5zdHlsZS50b3Ag
PSBwb3Mub3RoZXIudG9wICsgInB4IjsKLSAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9
IChwb3Mub3RoZXIuYm90dG9tIC0gcG9zLm90aGVyLnRvcCkgKiAuODUgKyAicHgiOwotICAgIH0K
LSAgfQotCi0gIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVj
dGlvbgotICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHsK
LSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKLSAgICB2YXIgZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgdmFyIHBhZGRp
bmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQ7Ci0gICAg
dmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRo
KGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0OwotCi0gICAg
ZnVuY3Rpb24gYWRkKGxlZnQsIHRvcCwgd2lkdGgsIGJvdHRvbSkgewotICAgICAgaWYgKHRvcCA8
IDApIHRvcCA9IDA7Ci0gICAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7Ci0gICAgICBib3R0b20g
PSBNYXRoLnJvdW5kKGJvdHRvbSk7Ci0gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLXNlbGVjdGVkIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVm
dDogIiArIGxlZnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgdG9wOiAi
ICsgdG9wICsgInB4OyB3aWR0aDogIiArICh3aWR0aCA9PSBudWxsID8gcmlnaHRTaWRlIC0gbGVm
dCA6IHdpZHRoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyBoZWlnaHQ6
ICIgKyAoYm90dG9tIC0gdG9wKSArICJweCIpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkcmF3
Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0FyZykgewotICAgICAgdmFyIGxpbmVPYmogPSBnZXRM
aW5lKGRvYywgbGluZSk7Ci0gICAgICB2YXIgbGluZUxlbiA9IGxpbmVPYmoudGV4dC5sZW5ndGg7
Ci0gICAgICB2YXIgc3RhcnQsIGVuZDsKLSAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCwgYmlhcykg
ewotICAgICAgICByZXR1cm4gY2hhckNvb3JkcyhjbSwgUG9zKGxpbmUsIGNoKSwgImRpdiIsIGxp
bmVPYmosIGJpYXMpOwotICAgICAgfQotCi0gICAgICBpdGVyYXRlQmlkaVNlY3Rpb25zKGdldE9y
ZGVyKGxpbmVPYmopLCBmcm9tQXJnIHx8IDAsIHRvQXJnID09IG51bGwgPyBsaW5lTGVuIDogdG9B
cmcsIGZ1bmN0aW9uKGZyb20sIHRvLCBkaXIpIHsKLSAgICAgICAgdmFyIGxlZnRQb3MgPSBjb29y
ZHMoZnJvbSwgImxlZnQiKSwgcmlnaHRQb3MsIGxlZnQsIHJpZ2h0OwotICAgICAgICBpZiAoZnJv
bSA9PSB0bykgewotICAgICAgICAgIHJpZ2h0UG9zID0gbGVmdFBvczsKLSAgICAgICAgICBsZWZ0
ID0gcmlnaHQgPSBsZWZ0UG9zLmxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmln
aHRQb3MgPSBjb29yZHModG8gLSAxLCAicmlnaHQiKTsKLSAgICAgICAgICBpZiAoZGlyID09ICJy
dGwiKSB7IHZhciB0bXAgPSBsZWZ0UG9zOyBsZWZ0UG9zID0gcmlnaHRQb3M7IHJpZ2h0UG9zID0g
dG1wOyB9Ci0gICAgICAgICAgbGVmdCA9IGxlZnRQb3MubGVmdDsKLSAgICAgICAgICByaWdodCA9
IHJpZ2h0UG9zLnJpZ2h0OwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcm9tQXJnID09IG51bGwg
JiYgZnJvbSA9PSAwKSBsZWZ0ID0gbGVmdFNpZGU7Ci0gICAgICAgIGlmIChyaWdodFBvcy50b3Ag
LSBsZWZ0UG9zLnRvcCA+IDMpIHsgLy8gRGlmZmVyZW50IGxpbmVzLCBkcmF3IHRvcCBwYXJ0Ci0g
ICAgICAgICAgYWRkKGxlZnQsIGxlZnRQb3MudG9wLCBudWxsLCBsZWZ0UG9zLmJvdHRvbSk7Ci0g
ICAgICAgICAgbGVmdCA9IGxlZnRTaWRlOwotICAgICAgICAgIGlmIChsZWZ0UG9zLmJvdHRvbSA8
IHJpZ2h0UG9zLnRvcCkgYWRkKGxlZnQsIGxlZnRQb3MuYm90dG9tLCBudWxsLCByaWdodFBvcy50
b3ApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVM
ZW4pIHJpZ2h0ID0gcmlnaHRTaWRlOwotICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9w
IDwgc3RhcnQudG9wIHx8IGxlZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQg
PCBzdGFydC5sZWZ0KQotICAgICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKLSAgICAgICAgaWYgKCFl
bmQgfHwgcmlnaHRQb3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0g
ZW5kLmJvdHRvbSAmJiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKLSAgICAgICAgICBlbmQg
PSByaWdodFBvczsKLSAgICAgICAgaWYgKGxlZnQgPCBsZWZ0U2lkZSArIDEpIGxlZnQgPSBsZWZ0
U2lkZTsKLSAgICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdo
dFBvcy5ib3R0b20pOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5k
OiBlbmR9OwotICAgIH0KLQotICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1RvID0gcmFu
Z2UudG8oKTsKLSAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkgewotICAgICAgZHJhd0Zv
ckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGlu
ZShkb2MsIHNUby5saW5lKTsKLSAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJv
bUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5lKTsKLSAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0Zv
ckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5s
ZW5ndGggKyAxIDogbnVsbCkuZW5kOwotICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGlu
ZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDsKLSAgICAg
IGlmIChzaW5nbGVWTGluZSkgewotICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0
LnRvcCAtIDIpIHsKLSAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51
bGwsIGxlZnRFbmQuYm90dG9tKTsKLSAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQu
dG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQu
bGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApCi0gICAgICAgIGFk
ZChsZWZ0U2lkZSwgbGVmdEVuZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKLSAgICB9
Ci0KLSAgICBvdXRwdXQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICB9Ci0KLSAgLy8gQ3Vyc29y
LWJsaW5raW5nCi0gIGZ1bmN0aW9uIHJlc3RhcnRCbGluayhjbSkgewotICAgIGlmICghY20uc3Rh
dGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBj
bGVhckludGVydmFsKGRpc3BsYXkuYmxpbmtlcik7Ci0gICAgdmFyIG9uID0gdHJ1ZTsKLSAgICBk
aXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gIiI7Ci0gICAgaWYgKGNtLm9wdGlv
bnMuY3Vyc29yQmxpbmtSYXRlID4gMCkKLSAgICAgIGRpc3BsYXkuYmxpbmtlciA9IHNldEludGVy
dmFsKGZ1bmN0aW9uKCkgewotICAgICAgICBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmls
aXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRlbiI7Ci0gICAgICB9LCBjbS5vcHRpb25zLmN1
cnNvckJsaW5rUmF0ZSk7Ci0gICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUg
PCAwKQotICAgICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4i
OwotICB9Ci0KLSAgLy8gSElHSExJR0hUIFdPUktFUgotCi0gIGZ1bmN0aW9uIHN0YXJ0V29ya2Vy
KGNtLCB0aW1lKSB7Ci0gICAgaWYgKGNtLmRvYy5tb2RlLnN0YXJ0U3RhdGUgJiYgY20uZG9jLmZy
b250aWVyIDwgY20uZGlzcGxheS52aWV3VG8pCi0gICAgICBjbS5zdGF0ZS5oaWdobGlnaHQuc2V0
KHRpbWUsIGJpbmQoaGlnaGxpZ2h0V29ya2VyLCBjbSkpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGln
aGxpZ2h0V29ya2VyKGNtKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAoZG9jLmZy
b250aWVyIDwgZG9jLmZpcnN0KSBkb2MuZnJvbnRpZXIgPSBkb2MuZmlyc3Q7Ci0gICAgaWYgKGRv
Yy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdUbykgcmV0dXJuOwotICAgIHZhciBlbmQgPSAr
bmV3IERhdGUgKyBjbS5vcHRpb25zLndvcmtUaW1lOwotICAgIHZhciBzdGF0ZSA9IGNvcHlTdGF0
ZShkb2MubW9kZSwgZ2V0U3RhdGVCZWZvcmUoY20sIGRvYy5mcm9udGllcikpOwotICAgIHZhciBj
aGFuZ2VkTGluZXMgPSBbXTsKLQotICAgIGRvYy5pdGVyKGRvYy5mcm9udGllciwgTWF0aC5taW4o
ZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24o
bGluZSkgewotICAgICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7
IC8vIFZpc2libGUKLSAgICAgICAgdmFyIG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzOwotICAgICAg
ICB2YXIgaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgdHJ1ZSk7
Ci0gICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzOwotICAgICAgICB2YXIg
b2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7
Ci0gICAgICAgIGlmIChuZXdDbHMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbmV3Q2xzOwotICAgICAg
ICBlbHNlIGlmIChvbGRDbHMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsKLSAgICAgICAgdmFy
IGlzY2hhbmdlID0gIW9sZFN0eWxlcyB8fCBvbGRTdHlsZXMubGVuZ3RoICE9IGxpbmUuc3R5bGVz
Lmxlbmd0aCB8fAotICAgICAgICAgIG9sZENscyAhPSBuZXdDbHMgJiYgKCFvbGRDbHMgfHwgIW5l
d0NscyB8fCBvbGRDbHMuYmdDbGFzcyAhPSBuZXdDbHMuYmdDbGFzcyB8fCBvbGRDbHMudGV4dENs
YXNzICE9IG5ld0Nscy50ZXh0Q2xhc3MpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgIWlzY2hh
bmdlICYmIGkgPCBvbGRTdHlsZXMubGVuZ3RoOyArK2kpIGlzY2hhbmdlID0gb2xkU3R5bGVzW2ld
ICE9IGxpbmUuc3R5bGVzW2ldOwotICAgICAgICBpZiAoaXNjaGFuZ2UpIGNoYW5nZWRMaW5lcy5w
dXNoKGRvYy5mcm9udGllcik7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShk
b2MubW9kZSwgc3RhdGUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJvY2Vzc0xpbmUoY20s
IGxpbmUudGV4dCwgc3RhdGUpOwotICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBkb2MuZnJvbnRp
ZXIgJSA1ID09IDAgPyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IG51bGw7Ci0gICAgICB9
Ci0gICAgICArK2RvYy5mcm9udGllcjsKLSAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHsKLSAg
ICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgp
IHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFu
Z2VkTGluZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGNoYW5nZWRM
aW5lc1tpXSwgInRleHQiKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIEZpbmRzIHRoZSBsaW5lIHRv
IHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwotICAvLyBmaW5kIGEg
bGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQgd2l0aCBhCi0gIC8v
IHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhl
Ci0gIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFz
dCBjb250ZXh0IHRvCi0gIC8vIHBhcnNlIGNvcnJlY3RseS4KLSAgZnVuY3Rpb24gZmluZFN0YXJ0
TGluZShjbSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9
IGNtLmRvYzsKLSAgICB2YXIgbGltID0gcHJlY2lzZSA/IC0xIDogbiAtIChjbS5kb2MubW9kZS5p
bm5lck1vZGUgPyAxMDAwIDogMTAwKTsKLSAgICBmb3IgKHZhciBzZWFyY2ggPSBuOyBzZWFyY2gg
PiBsaW07IC0tc2VhcmNoKSB7Ci0gICAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgcmV0dXJu
IGRvYy5maXJzdDsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpOwot
ICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlciAmJiAoIXByZWNpc2UgfHwgc2VhcmNoIDw9IGRvYy5m
cm9udGllcikpIHJldHVybiBzZWFyY2g7Ci0gICAgICB2YXIgaW5kZW50ZWQgPSBjb3VudENvbHVt
bihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6ZSk7Ci0gICAgICBpZiAobWlubGlu
ZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7Ci0gICAgICAgIG1pbmxpbmUgPSBz
ZWFyY2ggLSAxOwotICAgICAgICBtaW5pbmRlbnQgPSBpbmRlbnRlZDsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG1pbmxpbmU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShj
bSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5OwotICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRydWU7Ci0gICAgdmFy
IHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9IHBvcyA+IGRvYy5m
aXJzdCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7Ci0gICAgaWYgKCFzdGF0ZSkg
c3RhdGUgPSBzdGFydFN0YXRlKGRvYy5tb2RlKTsKLSAgICBlbHNlIHN0YXRlID0gY29weVN0YXRl
KGRvYy5tb2RlLCBzdGF0ZSk7Ci0gICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7
Ci0gICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0gICAgICB2YXIgc2F2
ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zy
b20gJiYgcG9zIDwgZGlzcGxheS52aWV3VG87Ci0gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBzYXZl
ID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwotICAgICAgKytwb3M7Ci0gICAg
fSk7Ci0gICAgaWYgKHByZWNpc2UpIGRvYy5mcm9udGllciA9IHBvczsKLSAgICByZXR1cm4gc3Rh
dGU7Ci0gIH0KLQotICAvLyBQT1NJVElPTiBNRUFTVVJFTUVOVAotCi0gIGZ1bmN0aW9uIHBhZGRp
bmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3A7fQotICBm
dW5jdGlvbiBwYWRkaW5nVmVydChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubW92ZXIub2Zmc2V0
SGVpZ2h0IC0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0O30KLSAgZnVuY3Rpb24gcGFk
ZGluZ0goZGlzcGxheSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdIKSByZXR1cm4g
ZGlzcGxheS5jYWNoZWRQYWRkaW5nSDsKLSAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRk
KGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCAieCIpKTsKLSAgICB2YXIgc3R5bGUgPSB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJy
ZW50U3R5bGU7Ci0gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xl
ZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07Ci0gICAgaWYgKCFpc05h
TihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgZGlzcGxheS5jYWNoZWRQYWRkaW5n
SCA9IGRhdGE7Ci0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KLQotICBmdW5jdGlvbiBzY3JvbGxHYXAo
Y20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aDsgfQot
ICBmdW5jdGlvbiBkaXNwbGF5V2lkdGgoY20pIHsKLSAgICByZXR1cm4gY20uZGlzcGxheS5zY3Jv
bGxlci5jbGllbnRXaWR0aCAtIHNjcm9sbEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhcldpZHRoOwot
ICB9Ci0gIGZ1bmN0aW9uIGRpc3BsYXlIZWlnaHQoY20pIHsKLSAgICByZXR1cm4gY20uZGlzcGxh
eS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJI
ZWlnaHQ7Ci0gIH0KLQotICAvLyBFbnN1cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMg
YXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzCi0gIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZz
ZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd24KLSAgLy8gbGluZS4gV2hlbiBs
aW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUKLSAgLy8gaGVp
Z2h0LgotICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsK
LSAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZzsKLSAgICB2YXIgY3Vy
V2lkdGggPSB3cmFwcGluZyAmJiBkaXNwbGF5V2lkdGgoY20pOwotICAgIGlmICghbGluZVZpZXcu
bWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0g
Y3VyV2lkdGgpIHsKLSAgICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRz
ID0gW107Ci0gICAgICBpZiAod3JhcHBpbmcpIHsKLSAgICAgICAgbGluZVZpZXcubWVhc3VyZS53
aWR0aCA9IGN1cldpZHRoOwotICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0
Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0
cy5sZW5ndGggLSAxOyBpKyspIHsKLSAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQg
PSByZWN0c1tpICsgMV07Ci0gICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0
LmJvdHRvbSkgPiAyKQotICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4
dC50b3ApIC8gMiAtIHJlY3QudG9wKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaGVpZ2h0
cy5wdXNoKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApOwotICAgIH0KLSAgfQotCi0gIC8vIEZpbmQg
YSBsaW5lIG1hcCAobWFwcGluZyBjaGFyYWN0ZXIgb2Zmc2V0cyB0byB0ZXh0IG5vZGVzKSBhbmQg
YQotICAvLyBtZWFzdXJlbWVudCBjYWNoZSBmb3IgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAoQSBs
aW5lIHZpZXcgbWlnaHQKLSAgLy8gY29udGFpbiBtdWx0aXBsZSBsaW5lcyB3aGVuIGNvbGxhcHNl
ZCByYW5nZXMgYXJlIHByZXNlbnQuKQotICBmdW5jdGlvbiBtYXBGcm9tTGluZVZpZXcobGluZVZp
ZXcsIGxpbmUsIGxpbmVOKSB7Ci0gICAgaWYgKGxpbmVWaWV3LmxpbmUgPT0gbGluZSkKLSAgICAg
IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1
cmUuY2FjaGV9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7
IGkrKykKLSAgICAgIGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUpCi0gICAgICAgIHJldHVy
biB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJl
LmNhY2hlc1tpXX07Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0
aDsgaSsrKQotICAgICAgaWYgKGxpbmVObyhsaW5lVmlldy5yZXN0W2ldKSA+IGxpbmVOKQotICAg
ICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZp
ZXcubWVhc3VyZS5jYWNoZXNbaV0sIGJlZm9yZTogdHJ1ZX07Ci0gIH0KLQotICAvLyBSZW5kZXIg
YSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNl
ZAotICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3Qg
aW4gdGhlIHZpZXdwb3J0LgotICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNt
LCBsaW5lKSB7Ci0gICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7Ci0gICAgdmFyIGxpbmVOID0g
bGluZU5vKGxpbmUpOwotICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVk
ID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pOwotICAgIHZpZXcubGluZU4gPSBs
aW5lTjsKLSAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwg
dmlldyk7Ci0gICAgdmlldy50ZXh0ID0gYnVpbHQucHJlOwotICAgIHJlbW92ZUNoaWxkcmVuQW5k
QWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7Ci0gICAgcmV0dXJuIHZpZXc7
Ci0gIH0KLQotICAvLyBHZXQgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxp
bmUtbG9jYWwgY29vcmRpbmF0ZXMpCi0gIC8vIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4KLSAgZnVu
Y3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBiaWFzKSB7Ci0gICAgcmV0dXJuIG1lYXN1
cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBi
aWFzKTsKLSAgfQotCi0gIC8vIEZpbmQgYSBsaW5lIHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0
aGUgZ2l2ZW4gbGluZSBudW1iZXIuCi0gIGZ1bmN0aW9uIGZpbmRWaWV3Rm9yTGluZShjbSwgbGlu
ZU4pIHsKLSAgICBpZiAobGluZU4gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBsaW5lTiA8IGNt
LmRpc3BsYXkudmlld1RvKQotICAgICAgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0lu
ZGV4KGNtLCBsaW5lTildOwotICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3Vy
ZWQ7Ci0gICAgaWYgKGV4dCAmJiBsaW5lTiA+PSBleHQubGluZU4gJiYgbGluZU4gPCBleHQubGlu
ZU4gKyBleHQuc2l6ZSkKLSAgICAgIHJldHVybiBleHQ7Ci0gIH0KLQotICAvLyBNZWFzdXJlbWVu
dCBjYW4gYmUgc3BsaXQgaW4gdHdvIHN0ZXBzLCB0aGUgc2V0LXVwIHdvcmsgdGhhdAotICAvLyBh
cHBsaWVzIHRvIHRoZSB3aG9sZSBsaW5lLCBhbmQgdGhlIG1lYXN1cmVtZW50IG9mIHRoZSBhY3R1
YWwKLSAgLy8gY2hhcmFjdGVyLiBGdW5jdGlvbnMgbGlrZSBjb29yZHNDaGFyLCB0aGF0IG5lZWQg
dG8gZG8gYSBsb3Qgb2YKLSAgLy8gbWVhc3VyZW1lbnRzIGluIGEgcm93LCBjYW4gdGh1cyBlbnN1
cmUgdGhhdCB0aGUgc2V0LXVwIHdvcmsgaXMKLSAgLy8gb25seSBkb25lIG9uY2UuCi0gIGZ1bmN0
aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkgewotICAgIHZhciBsaW5lTiA9IGxp
bmVObyhsaW5lKTsKLSAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOwot
ICAgIGlmICh2aWV3ICYmICF2aWV3LnRleHQpIHsKLSAgICAgIHZpZXcgPSBudWxsOwotICAgIH0g
ZWxzZSBpZiAodmlldyAmJiB2aWV3LmNoYW5nZXMpIHsKLSAgICAgIHVwZGF0ZUxpbmVGb3JDaGFu
Z2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpOwotICAgICAgY20uY3VyT3Au
Zm9yY2VVcGRhdGUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXZpZXcpCi0gICAgICB2aWV3ID0g
dXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7Ci0KLSAgICB2YXIgaW5mbyA9IG1h
cEZyb21MaW5lVmlldyh2aWV3LCBsaW5lLCBsaW5lTik7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGxp
bmU6IGxpbmUsIHZpZXc6IHZpZXcsIHJlY3Q6IG51bGwsCi0gICAgICBtYXA6IGluZm8ubWFwLCBj
YWNoZTogaW5mby5jYWNoZSwgYmVmb3JlOiBpbmZvLmJlZm9yZSwKLSAgICAgIGhhc0hlaWdodHM6
IGZhbHNlCi0gICAgfTsKLSAgfQotCi0gIC8vIEdpdmVuIGEgcHJlcGFyZWQgbWVhc3VyZW1lbnQg
b2JqZWN0LCBtZWFzdXJlcyB0aGUgcG9zaXRpb24gb2YgYW4KLSAgLy8gYWN0dWFsIGNoYXJhY3Rl
ciAob3IgZmV0Y2hlcyBpdCBmcm9tIHRoZSBjYWNoZSkuCi0gIGZ1bmN0aW9uIG1lYXN1cmVDaGFy
UHJlcGFyZWQoY20sIHByZXBhcmVkLCBjaCwgYmlhcywgdmFySGVpZ2h0KSB7Ci0gICAgaWYgKHBy
ZXBhcmVkLmJlZm9yZSkgY2ggPSAtMTsKLSAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiks
IGZvdW5kOwotICAgIGlmIChwcmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0g
ICAgICBmb3VuZCA9IHByZXBhcmVkLmNhY2hlW2tleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlm
ICghcHJlcGFyZWQucmVjdCkKLSAgICAgICAgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcu
dGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgIGlmICghcHJlcGFyZWQuaGFzSGVp
Z2h0cykgewotICAgICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJl
cGFyZWQucmVjdCk7Ci0gICAgICAgIHByZXBhcmVkLmhhc0hlaWdodHMgPSB0cnVlOwotICAgICAg
fQotICAgICAgZm91bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMp
OwotICAgICAgaWYgKCFmb3VuZC5ib2d1cykgcHJlcGFyZWQuY2FjaGVba2V5XSA9IGZvdW5kOwot
ICAgIH0KLSAgICByZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCwK
LSAgICAgICAgICAgIHRvcDogdmFySGVpZ2h0ID8gZm91bmQucnRvcCA6IGZvdW5kLnRvcCwKLSAg
ICAgICAgICAgIGJvdHRvbTogdmFySGVpZ2h0ID8gZm91bmQucmJvdHRvbSA6IGZvdW5kLmJvdHRv
bX07Ci0gIH0KLQotICB2YXIgbnVsbFJlY3QgPSB7bGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwg
Ym90dG9tOiAwfTsKLQotICBmdW5jdGlvbiBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKG1hcCwgY2gs
IGJpYXMpIHsKLSAgICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2U7Ci0gICAgLy8gRmly
c3QsIHNlYXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0
bywKLSAgICAvLyBvciBjbG9zZXN0IHRvLCB0aGUgdGFyZ2V0IGNoYXJhY3Rlci4KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkgKz0gMykgewotICAgICAgdmFyIG1TdGFydCA9
IG1hcFtpXSwgbUVuZCA9IG1hcFtpICsgMV07Ci0gICAgICBpZiAoY2ggPCBtU3RhcnQpIHsKLSAg
ICAgICAgc3RhcnQgPSAwOyBlbmQgPSAxOwotICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKLSAg
ICAgIH0gZWxzZSBpZiAoY2ggPCBtRW5kKSB7Ci0gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7
Ci0gICAgICAgIGVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVu
Z3RoIC0gMyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkgewotICAgICAgICBlbmQg
PSBtRW5kIC0gbVN0YXJ0OwotICAgICAgICBzdGFydCA9IGVuZCAtIDE7Ci0gICAgICAgIGlmIChj
aCA+PSBtRW5kKSBjb2xsYXBzZSA9ICJyaWdodCI7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhcnQg
IT0gbnVsbCkgewotICAgICAgICBub2RlID0gbWFwW2kgKyAyXTsKLSAgICAgICAgaWYgKG1TdGFy
dCA9PSBtRW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/ICJsZWZ0IiA6ICJyaWdodCIp
KQotICAgICAgICAgIGNvbGxhcHNlID0gYmlhczsKLSAgICAgICAgaWYgKGJpYXMgPT0gImxlZnQi
ICYmIHN0YXJ0ID09IDApCi0gICAgICAgICAgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBb
aSAtIDNdICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9kZSA9IG1h
cFsoaSAtPSAzKSArIDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAibGVmdCI7Ci0gICAgICAg
ICAgfQotICAgICAgICBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3Rh
cnQpCi0gICAgICAgICAgd2hpbGUgKGkgPCBtYXAubGVuZ3RoIC0gMyAmJiBtYXBbaSArIDNdID09
IG1hcFtpICsgNF0gJiYgIW1hcFtpICsgNV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9k
ZSA9IG1hcFsoaSArPSAzKSArIDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOwot
ICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7
bm9kZTogbm9kZSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCwgY29sbGFwc2U6IGNvbGxhcHNlLCBj
b3ZlclN0YXJ0OiBtU3RhcnQsIGNvdmVyRW5kOiBtRW5kfTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1l
YXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykgewotICAgIHZhciBwbGFjZSA9
IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAocHJlcGFyZWQubWFwLCBjaCwgYmlhcyk7Ci0gICAgdmFy
IG5vZGUgPSBwbGFjZS5ub2RlLCBzdGFydCA9IHBsYWNlLnN0YXJ0LCBlbmQgPSBwbGFjZS5lbmQs
IGNvbGxhcHNlID0gcGxhY2UuY29sbGFwc2U7Ci0KLSAgICB2YXIgcmVjdDsKLSAgICBpZiAobm9k
ZS5ub2RlVHlwZSA9PSAzKSB7IC8vIElmIGl0IGlzIGEgdGV4dCBub2RlLCB1c2UgYSByYW5nZSB0
byByZXRyaWV2ZSB0aGUgY29vcmRpbmF0ZXMuCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7
IGkrKykgeyAvLyBSZXRyeSBhIG1heGltdW0gb2YgNCB0aW1lcyB3aGVuIG5vbnNlbnNlIHJlY3Rh
bmdsZXMgYXJlIHJldHVybmVkCi0gICAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0No
YXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkg
LS1zdGFydDsKLSAgICAgICAgd2hpbGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5j
b3ZlckVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFj
ZS5jb3ZlclN0YXJ0ICsgZW5kKSkpICsrZW5kOwotICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lv
biA8IDkgJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gcGxhY2UuY292ZXJFbmQgLSBwbGFjZS5jb3Zl
clN0YXJ0KSB7Ci0gICAgICAgICAgcmVjdCA9IG5vZGUucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFw
cGluZykgewotICAgICAgICAgIHZhciByZWN0cyA9IHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdl
dENsaWVudFJlY3RzKCk7Ci0gICAgICAgICAgaWYgKHJlY3RzLmxlbmd0aCkKLSAgICAgICAgICAg
IHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07Ci0g
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdCA9IG51bGxSZWN0OwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHJlY3QgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSB8fCBudWxsUmVjdDsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVjdC5s
ZWZ0IHx8IHJlY3QucmlnaHQgfHwgc3RhcnQgPT0gMCkgYnJlYWs7Ci0gICAgICAgIGVuZCA9IHN0
YXJ0OwotICAgICAgICBzdGFydCA9IHN0YXJ0IC0gMTsKLSAgICAgICAgY29sbGFwc2UgPSAicmln
aHQiOwotICAgICAgfQotICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgcmVjdCA9IG1h
eWJlVXBkYXRlUmVjdEZvclpvb21pbmcoY20uZGlzcGxheS5tZWFzdXJlLCByZWN0KTsKLSAgICB9
IGVsc2UgeyAvLyBJZiBpdCBpcyBhIHdpZGdldCwgc2ltcGx5IGdldCB0aGUgYm94IGZvciB0aGUg
d2hvbGUgd2lkZ2V0LgotICAgICAgaWYgKHN0YXJ0ID4gMCkgY29sbGFwc2UgPSBiaWFzID0gInJp
Z2h0IjsKLSAgICAgIHZhciByZWN0czsKLSAgICAgIGlmIChjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZyAmJiAocmVjdHMgPSBub2RlLmdldENsaWVudFJlY3RzKCkpLmxlbmd0aCA+IDEpCi0gICAgICAg
IHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07Ci0g
ICAgICBlbHNlCi0gICAgICAgIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwot
ICAgIH0KLSAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkgJiYgIXN0YXJ0ICYmICghcmVjdCB8
fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkgewotICAgICAgdmFyIHJTcGFuID0gbm9kZS5w
YXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07Ci0gICAgICBpZiAoclNwYW4pCi0gICAgICAg
IHJlY3QgPSB7bGVmdDogclNwYW4ubGVmdCwgcmlnaHQ6IHJTcGFuLmxlZnQgKyBjaGFyV2lkdGgo
Y20uZGlzcGxheSksIHRvcDogclNwYW4udG9wLCBib3R0b206IHJTcGFuLmJvdHRvbX07Ci0gICAg
ICBlbHNlCi0gICAgICAgIHJlY3QgPSBudWxsUmVjdDsKLSAgICB9Ci0KLSAgICB2YXIgcnRvcCA9
IHJlY3QudG9wIC0gcHJlcGFyZWQucmVjdC50b3AsIHJib3QgPSByZWN0LmJvdHRvbSAtIHByZXBh
cmVkLnJlY3QudG9wOwotICAgIHZhciBtaWQgPSAocnRvcCArIHJib3QpIC8gMjsKLSAgICB2YXIg
aGVpZ2h0cyA9IHByZXBhcmVkLnZpZXcubWVhc3VyZS5oZWlnaHRzOwotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgaGVpZ2h0cy5sZW5ndGggLSAxOyBpKyspCi0gICAgICBpZiAobWlkIDwgaGVpZ2h0
c1tpXSkgYnJlYWs7Ci0gICAgdmFyIHRvcCA9IGkgPyBoZWlnaHRzW2kgLSAxXSA6IDAsIGJvdCA9
IGhlaWdodHNbaV07Ci0gICAgdmFyIHJlc3VsdCA9IHtsZWZ0OiAoY29sbGFwc2UgPT0gInJpZ2h0
IiA/IHJlY3QucmlnaHQgOiByZWN0LmxlZnQpIC0gcHJlcGFyZWQucmVjdC5sZWZ0LAotICAgICAg
ICAgICAgICAgICAgcmlnaHQ6IChjb2xsYXBzZSA9PSAibGVmdCIgPyByZWN0LmxlZnQgOiByZWN0
LnJpZ2h0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKLSAgICAgICAgICAgICAgICAgIHRvcDogdG9w
LCBib3R0b206IGJvdH07Ci0gICAgaWYgKCFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpIHJlc3Vs
dC5ib2d1cyA9IHRydWU7Ci0gICAgaWYgKCFjbS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBl
ckxpbmUpIHsgcmVzdWx0LnJ0b3AgPSBydG9wOyByZXN1bHQucmJvdHRvbSA9IHJib3Q7IH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIHdpdGgg
Ym91bmRpbmcgY2xpZW50IHJlY3RzIG9uIHJhbmdlcyBiZWluZwotICAvLyByZXR1cm5lZCBpbmNv
cnJlY3RseSB3aGVuIHpvb21lZCBvbiBJRTEwIGFuZCBiZWxvdy4KLSAgZnVuY3Rpb24gbWF5YmVV
cGRhdGVSZWN0Rm9yWm9vbWluZyhtZWFzdXJlLCByZWN0KSB7Ci0gICAgaWYgKCF3aW5kb3cuc2Ny
ZWVuIHx8IHNjcmVlbi5sb2dpY2FsWERQSSA9PSBudWxsIHx8Ci0gICAgICAgIHNjcmVlbi5sb2dp
Y2FsWERQSSA9PSBzY3JlZW4uZGV2aWNlWERQSSB8fCAhaGFzQmFkWm9vbWVkUmVjdHMobWVhc3Vy
ZSkpCi0gICAgICByZXR1cm4gcmVjdDsKLSAgICB2YXIgc2NhbGVYID0gc2NyZWVuLmxvZ2ljYWxY
RFBJIC8gc2NyZWVuLmRldmljZVhEUEk7Ci0gICAgdmFyIHNjYWxlWSA9IHNjcmVlbi5sb2dpY2Fs
WURQSSAvIHNjcmVlbi5kZXZpY2VZRFBJOwotICAgIHJldHVybiB7bGVmdDogcmVjdC5sZWZ0ICog
c2NhbGVYLCByaWdodDogcmVjdC5yaWdodCAqIHNjYWxlWCwKLSAgICAgICAgICAgIHRvcDogcmVj
dC50b3AgKiBzY2FsZVksIGJvdHRvbTogcmVjdC5ib3R0b20gKiBzY2FsZVl9OwotICB9Ci0KLSAg
ZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihsaW5lVmlldykgewotICAgIGlm
IChsaW5lVmlldy5tZWFzdXJlKSB7Ci0gICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307
Ci0gICAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBudWxsOwotICAgICAgaWYgKGxpbmVW
aWV3LnJlc3QpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykK
LSAgICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV0gPSB7fTsKLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKSB7Ci0gICAgY20uZGlzcGxh
eS5leHRlcm5hbE1lYXN1cmUgPSBudWxsOwotICAgIHJlbW92ZUNoaWxkcmVuKGNtLmRpc3BsYXku
bGluZU1lYXN1cmUpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS52aWV3Lmxl
bmd0aDsgaSsrKQotICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihjbS5kaXNwbGF5
LnZpZXdbaV0pOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHsKLSAgICBjbGVh
ckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKTsKLSAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0
aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGlu
Z0ggPSBudWxsOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNtLmRpc3BsYXku
bWF4TGluZUNoYW5nZWQgPSB0cnVlOwotICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVs
bDsKLSAgfQotCi0gIGZ1bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93LnBhZ2VY
T2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Ny
b2xsTGVmdDsgfQotICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRvdy5wYWdl
WU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNj
cm9sbFRvcDsgfQotCi0gIC8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0g
Ym94IGZyb20gbGluZS1sb2NhbAotICAvLyBjb29yZGluYXRlcyBpbnRvIGFub3RoZXIgY29vcmRp
bmF0ZSBzeXN0ZW0uIENvbnRleHQgbWF5IGJlIG9uZSBvZgotICAvLyAibGluZSIsICJkaXYiIChk
aXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciksICJ3aW5kb3ciLAotICAvLyBv
ciAicGFnZSIuCi0gIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwg
Y29udGV4dCkgewotICAgIGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwg
bGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3Zl
KSB7Ci0gICAgICB2YXIgc2l6ZSA9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOwot
ICAgICAgcmVjdC50b3AgKz0gc2l6ZTsgcmVjdC5ib3R0b20gKz0gc2l6ZTsKLSAgICB9Ci0gICAg
aWYgKGNvbnRleHQgPT0gImxpbmUiKSByZXR1cm4gcmVjdDsKLSAgICBpZiAoIWNvbnRleHQpIGNv
bnRleHQgPSAibG9jYWwiOwotICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwot
ICAgIGlmIChjb250ZXh0ID09ICJsb2NhbCIpIHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5
KTsKLSAgICBlbHNlIHlPZmYgLT0gY20uZGlzcGxheS52aWV3T2Zmc2V0OwotICAgIGlmIChjb250
ZXh0ID09ICJwYWdlIiB8fCBjb250ZXh0ID09ICJ3aW5kb3ciKSB7Ci0gICAgICB2YXIgbE9mZiA9
IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgeU9m
ZiArPSBsT2ZmLnRvcCArIChjb250ZXh0ID09ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxZKCkp
OwotICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAg
OiBwYWdlU2Nyb2xsWCgpKTsKLSAgICAgIHJlY3QubGVmdCArPSB4T2ZmOyByZWN0LnJpZ2h0ICs9
IHhPZmY7Ci0gICAgfQotICAgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmY7
Ci0gICAgcmV0dXJuIHJlY3Q7Ci0gIH0KLQotICAvLyBDb3ZlcnRzIGEgYm94IGZyb20gImRpdiIg
Y29vcmRzIHRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gIC8vIENvbnRleHQgbWF5IGJl
ICJ3aW5kb3ciLCAicGFnZSIsICJkaXYiLCBvciAibG9jYWwiL251bGwuCi0gIGZ1bmN0aW9uIGZy
b21Db29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7Ci0gICAgaWYgKGNvbnRleHQgPT0g
ImRpdiIpIHJldHVybiBjb29yZHM7Ci0gICAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0g
Y29vcmRzLnRvcDsKLSAgICAvLyBGaXJzdCBtb3ZlIGludG8gInBhZ2UiIGNvb3JkaW5hdGUgc3lz
dGVtCi0gICAgaWYgKGNvbnRleHQgPT0gInBhZ2UiKSB7Ci0gICAgICBsZWZ0IC09IHBhZ2VTY3Jv
bGxYKCk7Ci0gICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTsKLSAgICB9IGVsc2UgaWYgKGNvbnRl
eHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkgewotICAgICAgdmFyIGxvY2FsQm94ID0gY20uZGlz
cGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgIGxlZnQgKz0gbG9jYWxC
b3gubGVmdDsKLSAgICAgIHRvcCArPSBsb2NhbEJveC50b3A7Ci0gICAgfQotCi0gICAgdmFyIGxp
bmVTcGFjZUJveCA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwotICAgIHJldHVybiB7bGVmdDogbGVmdCAtIGxpbmVTcGFjZUJveC5sZWZ0LCB0b3A6IHRvcCAt
IGxpbmVTcGFjZUJveC50b3B9OwotICB9Ci0KLSAgZnVuY3Rpb24gY2hhckNvb3JkcyhjbSwgcG9z
LCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7Ci0gICAgaWYgKCFsaW5lT2JqKSBsaW5lT2JqID0g
Z2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKLSAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNt
LCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgcG9zLmNoLCBiaWFzKSwgY29udGV4
dCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgYm94IGZvciBhIGdpdmVuIGN1cnNvciBwb3NpdGlv
biwgd2hpY2ggbWF5IGhhdmUgYW4KLSAgLy8gJ290aGVyJyBwcm9wZXJ0eSBjb250YWluaW5nIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kYXJ5IGN1cnNvcgotICAvLyBvbiBhIGJpZGkgYm91bmRh
cnkuCi0gIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBw
cmVwYXJlZE1lYXN1cmUsIHZhckhlaWdodCkgewotICAgIGxpbmVPYmogPSBsaW5lT2JqIHx8IGdl
dExpbmUoY20uZG9jLCBwb3MubGluZSk7Ci0gICAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHByZXBh
cmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7Ci0gICAgZnVu
Y3Rpb24gZ2V0KGNoLCByaWdodCkgewotICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhclByZXBhcmVk
KGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoLCByaWdodCA/ICJyaWdodCIgOiAibGVmdCIsIHZhckhl
aWdodCk7Ci0gICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdodCA9
IG0ubGVmdDsKLSAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNv
bnRleHQpOwotICAgIH0KLSAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBwYXJ0UG9zKSB7Ci0gICAg
ICB2YXIgcGFydCA9IG9yZGVyW3BhcnRQb3NdLCByaWdodCA9IHBhcnQubGV2ZWwgJSAyOwotICAg
ICAgaWYgKGNoID09IGJpZGlMZWZ0KHBhcnQpICYmIHBhcnRQb3MgJiYgcGFydC5sZXZlbCA8IG9y
ZGVyW3BhcnRQb3MgLSAxXS5sZXZlbCkgewotICAgICAgICBwYXJ0ID0gb3JkZXJbLS1wYXJ0UG9z
XTsKLSAgICAgICAgY2ggPSBiaWRpUmlnaHQocGFydCkgLSAocGFydC5sZXZlbCAlIDIgPyAwIDog
MSk7Ci0gICAgICAgIHJpZ2h0ID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoY2ggPT0gYmlkaVJp
Z2h0KHBhcnQpICYmIHBhcnRQb3MgPCBvcmRlci5sZW5ndGggLSAxICYmIHBhcnQubGV2ZWwgPCBv
cmRlcltwYXJ0UG9zICsgMV0ubGV2ZWwpIHsKLSAgICAgICAgcGFydCA9IG9yZGVyWysrcGFydFBv
c107Ci0gICAgICAgIGNoID0gYmlkaUxlZnQocGFydCkgLSBwYXJ0LmxldmVsICUgMjsKLSAgICAg
ICAgcmlnaHQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChyaWdodCAmJiBjaCA9PSBwYXJ0
LnRvICYmIGNoID4gcGFydC5mcm9tKSByZXR1cm4gZ2V0KGNoIC0gMSk7Ci0gICAgICByZXR1cm4g
Z2V0KGNoLCByaWdodCk7Ci0gICAgfQotICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmop
LCBjaCA9IHBvcy5jaDsKLSAgICBpZiAoIW9yZGVyKSByZXR1cm4gZ2V0KGNoKTsKLSAgICB2YXIg
cGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoKTsKLSAgICB2YXIgdmFsID0gZ2V0Qmlk
aShjaCwgcGFydFBvcyk7Ci0gICAgaWYgKGJpZGlPdGhlciAhPSBudWxsKSB2YWwub3RoZXIgPSBn
ZXRCaWRpKGNoLCBiaWRpT3RoZXIpOwotICAgIHJldHVybiB2YWw7Ci0gIH0KLQotICAvLyBVc2Vk
IHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2Vk
IGZvcgotICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuCi0gIGZ1bmN0aW9uIGVzdGlt
YXRlQ29vcmRzKGNtLCBwb3MpIHsKLSAgICB2YXIgbGVmdCA9IDAsIHBvcyA9IGNsaXBQb3MoY20u
ZG9jLCBwb3MpOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGxlZnQgPSBjaGFy
V2lkdGgoY20uZGlzcGxheSkgKiBwb3MuY2g7Ci0gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNt
LmRvYywgcG9zLmxpbmUpOwotICAgIHZhciB0b3AgPSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBw
YWRkaW5nVG9wKGNtLmRpc3BsYXkpOwotICAgIHJldHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxl
ZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0fTsKLSAgfQotCi0gIC8v
IFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZv
cm1hdGlvbi4KLSAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgaW5w
dXQgY29vcmRpbmF0ZXMgY29tcGFyZWQKLSAgLy8gdG8gdGhlIGZvdW5kIHBvc2l0aW9uIChzbyB4
UmVsID4gMCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgYXJlIHRvCi0gIC8vIHRoZSByaWdodCBvZiB0
aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdoZW4gb3V0c2lkZQotICAvLyBp
cyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUgb3V0c2lkZSB0aGUgbGluZSdz
Ci0gIC8vIHZlcnRpY2FsIHJhbmdlLgotICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwg
b3V0c2lkZSwgeFJlbCkgewotICAgIHZhciBwb3MgPSBQb3MobGluZSwgY2gpOwotICAgIHBvcy54
UmVsID0geFJlbDsKLSAgICBpZiAob3V0c2lkZSkgcG9zLm91dHNpZGUgPSB0cnVlOwotICAgIHJl
dHVybiBwb3M7Ci0gIH0KLQotICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xv
c2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCi0gIC8vIElucHV0IG11c3QgYmUgbGluZVNw
YWNlLWxvY2FsICgiZGl2IiBjb29yZGluYXRlIHN5c3RlbSkuCi0gIGZ1bmN0aW9uIGNvb3Jkc0No
YXIoY20sIHgsIHkpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jOwotICAgIHkgKz0gY20uZGlzcGxh
eS52aWV3T2Zmc2V0OwotICAgIGlmICh5IDwgMCkgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJz
dCwgMCwgdHJ1ZSwgLTEpOwotICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBs
YXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwotICAgIGlmIChsaW5lTiA+IGxhc3QpCi0g
ICAgICByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5l
KGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUsIDEpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7
Ci0KLSAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTik7Ci0gICAgZm9yICg7Oykg
ewotICAgICAgdmFyIGZvdW5kID0gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTiwg
eCwgeSk7Ci0gICAgICB2YXIgbWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmVPYmopOwot
ICAgICAgdmFyIG1lcmdlZFBvcyA9IG1lcmdlZCAmJiBtZXJnZWQuZmluZCgwLCB0cnVlKTsKLSAg
ICAgIGlmIChtZXJnZWQgJiYgKGZvdW5kLmNoID4gbWVyZ2VkUG9zLmZyb20uY2ggfHwgZm91bmQu
Y2ggPT0gbWVyZ2VkUG9zLmZyb20uY2ggJiYgZm91bmQueFJlbCA+IDApKQotICAgICAgICBsaW5l
TiA9IGxpbmVObyhsaW5lT2JqID0gbWVyZ2VkUG9zLnRvLmxpbmUpOwotICAgICAgZWxzZQotICAg
ICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY29vcmRzQ2hhcklu
bmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHsKLSAgICB2YXIgaW5uZXJPZmYgPSB5IC0g
aGVpZ2h0QXRMaW5lKGxpbmVPYmopOwotICAgIHZhciB3cm9uZ0xpbmUgPSBmYWxzZSwgYWRqdXN0
ID0gMiAqIGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aDsKLSAgICB2YXIgcHJlcGFyZWRN
ZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKLQotICAgIGZ1bmN0
aW9uIGdldFgoY2gpIHsKLSAgICAgIHZhciBzcCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVO
bywgY2gpLCAibGluZSIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7Ci0gICAgICB3cm9uZ0xp
bmUgPSB0cnVlOwotICAgICAgaWYgKGlubmVyT2ZmID4gc3AuYm90dG9tKSByZXR1cm4gc3AubGVm
dCAtIGFkanVzdDsKLSAgICAgIGVsc2UgaWYgKGlubmVyT2ZmIDwgc3AudG9wKSByZXR1cm4gc3Au
bGVmdCArIGFkanVzdDsKLSAgICAgIGVsc2Ugd3JvbmdMaW5lID0gZmFsc2U7Ci0gICAgICByZXR1
cm4gc3AubGVmdDsKLSAgICB9Ci0KLSAgICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmVPYmopLCBk
aXN0ID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAgICB2YXIgZnJvbSA9IGxpbmVMZWZ0KGxpbmVP
YmopLCB0byA9IGxpbmVSaWdodChsaW5lT2JqKTsKLSAgICB2YXIgZnJvbVggPSBnZXRYKGZyb20p
LCBmcm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9YID0gZ2V0WCh0byksIHRvT3V0c2lkZSA9IHdy
b25nTGluZTsKLQotICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9zV2l0aEluZm8obGluZU5vLCB0
bywgdG9PdXRzaWRlLCAxKTsKLSAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVz
ZSBib3VuZHMuCi0gICAgZm9yICg7OykgewotICAgICAgaWYgKGJpZGkgPyB0byA9PSBmcm9tIHx8
IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6IHRvIC0gZnJvbSA8PSAxKSB7
Ci0gICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVggPD0gdG9YIC0geCA/IGZy
b20gOiB0bzsKLSAgICAgICAgdmFyIHhEaWZmID0geCAtIChjaCA9PSBmcm9tID8gZnJvbVggOiB0
b1gpOwotICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyKGxpbmVPYmoudGV4dC5jaGFyQXQo
Y2gpKSkgKytjaDsKLSAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNo
ID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhEaWZmIDwgLTEgPyAtMSA6IHhEaWZmID4gMSA/IDEgOiAwKTsKLSAgICAgICAg
cmV0dXJuIHBvczsKLSAgICAgIH0KLSAgICAgIHZhciBzdGVwID0gTWF0aC5jZWlsKGRpc3QgLyAy
KSwgbWlkZGxlID0gZnJvbSArIHN0ZXA7Ci0gICAgICBpZiAoYmlkaSkgewotICAgICAgICBtaWRk
bGUgPSBmcm9tOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7ICsraSkgbWlkZGxl
ID0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIG1pZGRsZSwgMSk7Ci0gICAgICB9Ci0gICAgICB2YXIg
bWlkZGxlWCA9IGdldFgobWlkZGxlKTsKLSAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlk
ZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRzaWRlID0gd3JvbmdMaW5lKSB0b1ggKz0gMTAw
MDsgZGlzdCA9IHN0ZXA7fQotICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRk
bGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsgZGlzdCAtPSBzdGVwO30KLSAgICB9Ci0gIH0K
LQotICB2YXIgbWVhc3VyZVRleHQ7Ci0gIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgdGV4dCBoZWln
aHQuCi0gIGZ1bmN0aW9uIHRleHRIZWlnaHQoZGlzcGxheSkgewotICAgIGlmIChkaXNwbGF5LmNh
Y2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDsK
LSAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewotICAgICAgbWVhc3VyZVRleHQgPSBlbHQo
InByZSIpOwotICAgICAgLy8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMg
dGhhdCBjb21wdXRlCi0gICAgICAvLyBmcmFjdGlvbmFsIGhlaWdodHMuCi0gICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDQ5OyArK2kpIHsKLSAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7Ci0gICAgICAgIG1lYXN1cmVUZXh0LmFwcGVu
ZENoaWxkKGVsdCgiYnIiKSk7Ci0gICAgICB9Ci0gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKLSAgICB9Ci0gICAgcmVtb3ZlQ2hpbGRy
ZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7Ci0gICAgdmFyIGhlaWdodCA9
IG1lYXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUwOwotICAgIGlmIChoZWlnaHQgPiAzKSBkaXNw
bGF5LmNhY2hlZFRleHRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxh
eS5tZWFzdXJlKTsKLSAgICByZXR1cm4gaGVpZ2h0IHx8IDE7Ci0gIH0KLQotICAvLyBDb21wdXRl
IHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC4KLSAgZnVuY3Rpb24gY2hhcldpZHRoKGRpc3Bs
YXkpIHsKLSAgICBpZiAoZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggIT0gbnVsbCkgcmV0dXJuIGRp
c3BsYXkuY2FjaGVkQ2hhcldpZHRoOwotICAgIHZhciBhbmNob3IgPSBlbHQoInNwYW4iLCAieHh4
eHh4eHh4eCIpOwotICAgIHZhciBwcmUgPSBlbHQoInByZSIsIFthbmNob3JdKTsKLSAgICByZW1v
dmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7Ci0gICAgdmFyIHJlY3QgPSBh
bmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0
LmxlZnQpIC8gMTA7Ci0gICAgaWYgKHdpZHRoID4gMikgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGgg
PSB3aWR0aDsKLSAgICByZXR1cm4gd2lkdGggfHwgMTA7Ci0gIH0KLQotICAvLyBPUEVSQVRJT05T
Ci0KLSAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGEgc2VyaWVzIG9mIGNoYW5nZXMg
dG8gdGhlIGVkaXRvcgotICAvLyBzdGF0ZSBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaCBjaGFuZ2Ug
d29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlCi0gIC8vIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2gg
d291bGQgYmUgYXdrd2FyZCwgc2xvdywgYW5kCi0gIC8vIGVycm9yLXByb25lKS4gSW5zdGVhZCwg
ZGlzcGxheSB1cGRhdGVzIGFyZSBiYXRjaGVkIGFuZCB0aGVuIGFsbAotICAvLyBjb21iaW5lZCBh
bmQgZXhlY3V0ZWQgYXQgb25jZS4KLQotICB2YXIgb3BlcmF0aW9uR3JvdXAgPSBudWxsOwotCi0g
IHZhciBuZXh0T3BJZCA9IDA7Ci0gIC8vIFN0YXJ0IGEgbmV3IG9wZXJhdGlvbi4KLSAgZnVuY3Rp
b24gc3RhcnRPcGVyYXRpb24oY20pIHsKLSAgICBjbS5jdXJPcCA9IHsKLSAgICAgIGNtOiBjbSwK
LSAgICAgIHZpZXdDaGFuZ2VkOiBmYWxzZSwgICAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHRo
YXQgbGluZXMgbWlnaHQgbmVlZCB0byBiZSByZWRyYXduCi0gICAgICBzdGFydEhlaWdodDogY20u
ZG9jLmhlaWdodCwgLy8gVXNlZCB0byBkZXRlY3QgbmVlZCB0byB1cGRhdGUgc2Nyb2xsYmFyCi0g
ICAgICBmb3JjZVVwZGF0ZTogZmFsc2UsICAgICAgLy8gVXNlZCB0byBmb3JjZSBhIHJlZHJhdwot
ICAgICAgdXBkYXRlSW5wdXQ6IG51bGwsICAgICAgIC8vIFdoZXRoZXIgdG8gcmVzZXQgdGhlIGlu
cHV0IHRleHRhcmVhCi0gICAgICB0eXBpbmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hldGhlciB0
aGlzIHJlc2V0IHNob3VsZCBiZSBjYXJlZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQgKGZvciBj
b21wb3NpdGluZykKLSAgICAgIGNoYW5nZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1bXVsYXRl
ZCBjaGFuZ2VzLCBmb3IgZmlyaW5nIGNoYW5nZSBldmVudHMKLSAgICAgIGN1cnNvckFjdGl2aXR5
SGFuZGxlcnM6IG51bGwsIC8vIFNldCBvZiBoYW5kbGVycyB0byBmaXJlIGN1cnNvckFjdGl2aXR5
IG9uCi0gICAgICBjdXJzb3JBY3Rpdml0eUNhbGxlZDogMCwgLy8gVHJhY2tzIHdoaWNoIGN1cnNv
ckFjdGl2aXR5IGhhbmRsZXJzIGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeQotICAgICAgc2VsZWN0
aW9uQ2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSBy
ZWRyYXduCi0gICAgICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdp
ZGVzdCBsaW5lIG5lZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldwotICAgICAgc2Nyb2xsTGVmdDog
bnVsbCwgc2Nyb2xsVG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBu
b3QgcHVzaGVkIHRvIERPTSB5ZXQKLSAgICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBV
c2VkIHRvIHNjcm9sbCB0byBhIHNwZWNpZmljIHBvc2l0aW9uCi0gICAgICBmb2N1czogZmFsc2Us
Ci0gICAgICBpZDogKytuZXh0T3BJZCAgICAgICAgICAgLy8gVW5pcXVlIElECi0gICAgfTsKLSAg
ICBpZiAob3BlcmF0aW9uR3JvdXApIHsKLSAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKGNt
LmN1ck9wKTsKLSAgICB9IGVsc2UgewotICAgICAgY20uY3VyT3Aub3duc0dyb3VwID0gb3BlcmF0
aW9uR3JvdXAgPSB7Ci0gICAgICAgIG9wczogW2NtLmN1ck9wXSwKLSAgICAgICAgZGVsYXllZENh
bGxiYWNrczogW10KLSAgICAgIH07Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZmlyZUNhbGxi
YWNrc0Zvck9wcyhncm91cCkgewotICAgIC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBj
dXJzb3JBY3Rpdml0eSBoYW5kbGVycyB1bnRpbCBubwotICAgIC8vIG5ldyBvbmVzIGFwcGVhcgot
ICAgIHZhciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDsKLSAgICBk
byB7Ci0gICAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykKLSAgICAgICAgY2Fs
bGJhY2tzW2ldLmNhbGwobnVsbCk7Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLm9w
cy5sZW5ndGg7IGorKykgewotICAgICAgICB2YXIgb3AgPSBncm91cC5vcHNbal07Ci0gICAgICAg
IGlmIChvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKQotICAgICAgICAgIHdoaWxlIChvcC5jdXJz
b3JBY3Rpdml0eUNhbGxlZCA8IG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKQotICAg
ICAgICAgICAgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tvcC5jdXJzb3JBY3Rpdml0eUNhbGxl
ZCsrXS5jYWxsKG51bGwsIG9wLmNtKTsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChpIDwgY2FsbGJh
Y2tzLmxlbmd0aCk7Ci0gIH0KLQotICAvLyBGaW5pc2ggYW4gb3BlcmF0aW9uLCB1cGRhdGluZyB0
aGUgZGlzcGxheSBhbmQgc2lnbmFsbGluZyBkZWxheWVkIGV2ZW50cwotICBmdW5jdGlvbiBlbmRP
cGVyYXRpb24oY20pIHsKLSAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZ3JvdXAgPSBvcC5vd25zR3Jv
dXA7Ci0gICAgaWYgKCFncm91cCkgcmV0dXJuOwotCi0gICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zv
ck9wcyhncm91cCk7IH0KLSAgICBmaW5hbGx5IHsKLSAgICAgIG9wZXJhdGlvbkdyb3VwID0gbnVs
bDsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAub3BzLmxlbmd0aDsgaSsrKQotICAg
ICAgICBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOwotICAgICAgZW5kT3BlcmF0aW9ucyhn
cm91cCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBv
cGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KLSAgLy8gdGhhdCB0aGUgbWluaW11bSBu
dW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC4KLSAgZnVuY3Rpb24gZW5kT3BlcmF0aW9u
cyhncm91cCkgewotICAgIHZhciBvcHMgPSBncm91cC5vcHM7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NCi0gICAgICBlbmRPcGVyYXRpb25fUjEo
b3BzW2ldKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gV3Jp
dGUgRE9NIChtYXliZSkKLSAgICAgIGVuZE9wZXJhdGlvbl9XMShvcHNbaV0pOwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSAvLyBSZWFkIERPTQotICAgICAgZW5kT3Bl
cmF0aW9uX1IyKG9wc1tpXSk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBp
KyspIC8vIFdyaXRlIERPTSAobWF5YmUpCi0gICAgICBlbmRPcGVyYXRpb25fVzIob3BzW2ldKTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00KLSAg
ICAgIGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2ldKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuZE9w
ZXJhdGlvbl9SMShvcCkgewotICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxh
eTsKLSAgICBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKTsKLSAgICBpZiAob3AudXBkYXRlTWF4TGlu
ZSkgZmluZE1heExpbmUoY20pOwotCi0gICAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdDaGFuZ2Vk
IHx8IG9wLmZvcmNlVXBkYXRlIHx8IG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8Ci0gICAgICBvcC5z
Y3JvbGxUb1BvcyAmJiAob3Auc2Nyb2xsVG9Qb3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJv
bSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0g
ZGlzcGxheS52aWV3VG8pIHx8Ci0gICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9w
dGlvbnMubGluZVdyYXBwaW5nOwotICAgIG9wLnVwZGF0ZSA9IG9wLm11c3RVcGRhdGUgJiYKLSAg
ICAgIG5ldyBEaXNwbGF5VXBkYXRlKGNtLCBvcC5tdXN0VXBkYXRlICYmIHt0b3A6IG9wLnNjcm9s
bFRvcCwgZW5zdXJlOiBvcC5zY3JvbGxUb1Bvc30sIG9wLmZvcmNlVXBkYXRlKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9XMShvcCkgewotICAgIG9wLnVwZGF0ZWREaXNwbGF5ID0g
b3AubXVzdFVwZGF0ZSAmJiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7
Ci0gIH0KLQotICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjIob3ApIHsKLSAgICB2YXIgY20gPSBv
cC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB1
cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7Ci0KLSAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3Vy
ZUZvclNjcm9sbGJhcnMoY20pOwotCi0gICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2lu
Y2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsCi0gICAgLy8gYW5kIGVuc3VyZSB0
aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LgotICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIg
d2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nCi0gICAg
aWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7
Ci0gICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGlu
ZSwgZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMzsKLSAgICAgIGNtLmRpc3Bs
YXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87Ci0gICAgICBvcC5iYXJNZWFzdXJlLnNj
cm9sbFdpZHRoID0KLSAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdh
cChjbSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTsKLSAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBN
YXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0g
ZGlzcGxheVdpZHRoKGNtKSk7Ci0gICAgfQotCi0gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8
IG9wLnNlbGVjdGlvbkNoYW5nZWQpCi0gICAgICBvcC5wcmVwYXJlZFNlbGVjdGlvbiA9IGRpc3Bs
YXkuaW5wdXQucHJlcGFyZVNlbGVjdGlvbigpOwotICB9Ci0KLSAgZnVuY3Rpb24gZW5kT3BlcmF0
aW9uX1cyKG9wKSB7Ci0gICAgdmFyIGNtID0gb3AuY207Ci0KLSAgICBpZiAob3AuYWRqdXN0V2lk
dGhUbyAhPSBudWxsKSB7Ci0gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0g
b3AuYWRqdXN0V2lkdGhUbyArICJweCI7Ci0gICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNt
LmRvYy5zY3JvbGxMZWZ0KQotICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5k
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAg
ICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
b3AucHJlcGFyZWRTZWxlY3Rpb24pCi0gICAgICBjbS5kaXNwbGF5LmlucHV0LnNob3dTZWxlY3Rp
b24ob3AucHJlcGFyZWRTZWxlY3Rpb24pOwotICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSkKLSAg
ICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBvcC5iYXJNZWFzdXJlKTsKLSAgICBpZiAob3AudXBk
YXRlZERpc3BsYXkgfHwgb3Auc3RhcnRIZWlnaHQgIT0gY20uZG9jLmhlaWdodCkKLSAgICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOwotCi0gICAgaWYgKG9wLnNlbGVjdGlv
bkNoYW5nZWQpIHJlc3RhcnRCbGluayhjbSk7Ci0KLSAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCAm
JiBvcC51cGRhdGVJbnB1dCkKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQob3AudHlwaW5n
KTsKLSAgICBpZiAob3AuZm9jdXMgJiYgb3AuZm9jdXMgPT0gYWN0aXZlRWx0KCkpIGVuc3VyZUZv
Y3VzKG9wLmNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9maW5pc2gob3ApIHsK
LSAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsK
LQotICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSkgcG9zdFVwZGF0ZURpc3BsYXkoY20sIG9wLnVw
ZGF0ZSk7Ci0KLSAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hl
biBzY3JvbGxpbmcgZXhwbGljaXRseQotICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51
bGwgJiYgKG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBv
cC5zY3JvbGxUb1BvcykpCi0gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVl
bFN0YXJ0WSA9IG51bGw7Ci0KLSAgICAvLyBQcm9wYWdhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiB0
byB0aGUgYWN0dWFsIERPTSBzY3JvbGxlcgotICAgIGlmIChvcC5zY3JvbGxUb3AgIT0gbnVsbCAm
JiAoZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gb3Auc2Nyb2xsVG9wIHx8IG9wLmZvcmNl
U2Nyb2xsKSkgewotICAgICAgZG9jLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWln
aHQsIG9wLnNjcm9sbFRvcCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRv
cChkb2Muc2Nyb2xsVG9wKTsKLSAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gZG9j
LnNjcm9sbFRvcDsKLSAgICB9Ci0gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCAmJiAoZGlz
cGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICE9IG9wLnNjcm9sbExlZnQgfHwgb3AuZm9yY2VTY3Jv
bGwpKSB7Ci0gICAgICBkb2Muc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBkaXNwbGF5V2lkdGgoY20pLCBvcC5zY3JvbGxMZWZ0
KSk7Ci0gICAgICBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChkb2Muc2Nyb2xsTGVm
dCk7Ci0gICAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdDsK
LSAgICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTsKLSAgICB9Ci0gICAgLy8gSWYgd2UgbmVlZCB0
byBzY3JvbGwgYSBzcGVjaWZpYyBwb3NpdGlvbiBpbnRvIHZpZXcsIGRvIHNvLgotICAgIGlmIChv
cC5zY3JvbGxUb1BvcykgewotICAgICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNt
LCBjbGlwUG9zKGRvYywgb3Auc2Nyb2xsVG9Qb3MuZnJvbSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Ny
b2xsVG9Qb3MubWFyZ2luKTsKLSAgICAgIGlmIChvcC5zY3JvbGxUb1Bvcy5pc0N1cnNvciAmJiBj
bS5zdGF0ZS5mb2N1c2VkKSBtYXliZVNjcm9sbFdpbmRvdyhjbSwgY29vcmRzKTsKLSAgICB9Ci0K
LSAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBi
eSBlZGl0aW5nIG9yCi0gICAgLy8gdW5kb2luZwotICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhp
ZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7Ci0gICAgaWYg
KGhpZGRlbikgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW4ubGVuZ3RoOyArK2kpCi0gICAgICBp
ZiAoIWhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbChoaWRkZW5baV0sICJoaWRlIik7Ci0g
ICAgaWYgKHVuaGlkZGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IHVuaGlkZGVuLmxlbmd0aDsgKytp
KQotICAgICAgaWYgKHVuaGlkZGVuW2ldLmxpbmVzLmxlbmd0aCkgc2lnbmFsKHVuaGlkZGVuW2ld
LCAidW5oaWRlIik7Ci0KLSAgICBpZiAoZGlzcGxheS53cmFwcGVyLm9mZnNldEhlaWdodCkKLSAg
ICAgIGRvYy5zY3JvbGxUb3AgPSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKLQotICAg
IC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnMKLSAgICBp
ZiAob3AuY2hhbmdlT2JqcykKLSAgICAgIHNpZ25hbChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hh
bmdlT2Jqcyk7Ci0gICAgaWYgKG9wLnVwZGF0ZSkKLSAgICAgIG9wLnVwZGF0ZS5maW5pc2goKTsK
LSAgfQotCi0gIC8vIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uCi0gIGZ1
bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKLSAgICBpZiAoY20uY3VyT3ApIHJldHVybiBmKCk7Ci0g
ICAgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHRyeSB7IHJldHVybiBmKCk7IH0KLSAgICBmaW5h
bGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfQotICB9Ci0gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4g
YW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLgotICBmdW5jdGlvbiBv
cGVyYXRpb24oY20sIGYpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoY20u
Y3VyT3ApIHJldHVybiBmLmFwcGx5KGNtLCBhcmd1bWVudHMpOwotICAgICAgc3RhcnRPcGVyYXRp
b24oY20pOwotICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7IH0KLSAg
ICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgfTsKLSAgfQotICAvLyBVc2Vk
IHRvIGFkZCBtZXRob2RzIHRvIGVkaXRvciBhbmQgZG9jIGluc3RhbmNlcywgd3JhcHBpbmcgdGhl
bSBpbgotICAvLyBvcGVyYXRpb25zLgotICBmdW5jdGlvbiBtZXRob2RPcChmKSB7Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuY3VyT3ApIHJldHVybiBmLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0gICAgICBzdGFydE9wZXJhdGlvbih0aGlzKTsKLSAgICAgIHRyeSB7
IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRP
cGVyYXRpb24odGhpcyk7IH0KLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGRvY01ldGhvZE9wKGYp
IHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgY20gPSB0aGlzLmNtOwotICAg
ICAgaWYgKCFjbSB8fCBjbS5jdXJPcCkgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsK
LSAgICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9Ci0g
ICAgfTsKLSAgfQotCi0gIC8vIFZJRVcgVFJBQ0tJTkcKLQotICAvLyBUaGVzZSBvYmplY3RzIGFy
ZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgdmlzaWJsZSAoY3VycmVudGx5IGRyYXduKQotICAvLyBw
YXJ0IG9mIHRoZSBkb2N1bWVudC4gQSBMaW5lVmlldyBtYXkgY29ycmVzcG9uZCB0byBtdWx0aXBs
ZQotICAvLyBsb2dpY2FsIGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNl
ZCByYW5nZXMuCi0gIGZ1bmN0aW9uIExpbmVWaWV3KGRvYywgbGluZSwgbGluZU4pIHsKLSAgICAv
LyBUaGUgc3RhcnRpbmcgbGluZQotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgLy8gQ29udGlu
dWluZyBsaW5lcywgaWYgYW55Ci0gICAgdGhpcy5yZXN0ID0gdmlzdWFsTGluZUNvbnRpbnVlZChs
aW5lKTsKLSAgICAvLyBOdW1iZXIgb2YgbG9naWNhbCBsaW5lcyBpbiB0aGlzIHZpc3VhbCBsaW5l
Ci0gICAgdGhpcy5zaXplID0gdGhpcy5yZXN0ID8gbGluZU5vKGxzdCh0aGlzLnJlc3QpKSAtIGxp
bmVOICsgMSA6IDE7Ci0gICAgdGhpcy5ub2RlID0gdGhpcy50ZXh0ID0gbnVsbDsKLSAgICB0aGlz
LmhpZGRlbiA9IGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEg
cmFuZ2Ugb2YgTGluZVZpZXcgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGxpbmVzLgotICBmdW5jdGlv
biBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pIHsKLSAgICB2YXIgYXJyYXkgPSBbXSwgbmV4
dFBvczsKLSAgICBmb3IgKHZhciBwb3MgPSBmcm9tOyBwb3MgPCB0bzsgcG9zID0gbmV4dFBvcykg
ewotICAgICAgdmFyIHZpZXcgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBnZXRMaW5lKGNtLmRvYywg
cG9zKSwgcG9zKTsKLSAgICAgIG5leHRQb3MgPSBwb3MgKyB2aWV3LnNpemU7Ci0gICAgICBhcnJh
eS5wdXNoKHZpZXcpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci0gIH0KLQotICAvLyBVcGRh
dGVzIHRoZSBkaXNwbGF5LnZpZXcgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gY2hhbmdlIHRv
IHRoZQotICAvLyBkb2N1bWVudC4gRnJvbSBhbmQgdG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRp
bmF0ZXMuIExlbmRpZmYgaXMKLSAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBhZGRlZCBvciBzdWJ0
cmFjdGVkIGJ5IHRoZSBjaGFuZ2UuIFRoaXMgaXMKLSAgLy8gdXNlZCBmb3IgY2hhbmdlcyB0aGF0
IHNwYW4gbXVsdGlwbGUgbGluZXMsIG9yIGNoYW5nZSB0aGUgd2F5Ci0gIC8vIGxpbmVzIGFyZSBk
aXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiByZWdMaW5lQ2hhbmdlIChiZWxvdykKLSAgLy8gcmVn
aXN0ZXJzIHNpbmdsZS1saW5lIGNoYW5nZXMuCi0gIGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJv
bSwgdG8sIGxlbmRpZmYpIHsKLSAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZp
cnN0OwotICAgIGlmICh0byA9PSBudWxsKSB0byA9IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXpl
OwotICAgIGlmICghbGVuZGlmZikgbGVuZGlmZiA9IDA7Ci0KLSAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXk7Ci0gICAgaWYgKGxlbmRpZmYgJiYgdG8gPCBkaXNwbGF5LnZpZXdUbyAmJgotICAg
ICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRl
TGluZU51bWJlcnMgPiBmcm9tKSkKLSAgICAgIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBm
cm9tOwotCi0gICAgY20uY3VyT3Audmlld0NoYW5nZWQgPSB0cnVlOwotCi0gICAgaWYgKGZyb20g
Pj0gZGlzcGxheS52aWV3VG8pIHsgLy8gQ2hhbmdlIGFmdGVyCi0gICAgICBpZiAoc2F3Q29sbGFw
c2VkU3BhbnMgJiYgdmlzdWFsTGluZU5vKGNtLmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykK
LSAgICAgICAgcmVzZXRWaWV3KGNtKTsKLSAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmll
d0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZQotICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYm
IHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9t
KSB7Ci0gICAgICAgIHJlc2V0VmlldyhjbSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkaXNw
bGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7Ci0gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRp
ZmY7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYg
dG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwCi0gICAgICByZXNldFZpZXco
Y20pOwotICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBv
dmVybGFwCi0gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVu
ZGlmZiwgMSk7Ci0gICAgICBpZiAoY3V0KSB7Ci0gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3Bs
YXkudmlldy5zbGljZShjdXQuaW5kZXgpOwotICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0
LmxpbmVOOwotICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmVzZXRWaWV3KGNtKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRvID49
IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVybGFwCi0gICAgICB2YXIgY3V0ID0gdmll
d0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOwotICAgICAgaWYgKGN1dCkgewotICAg
ICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0LmluZGV4KTsKLSAg
ICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQubGluZU47Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXNldFZpZXcoY20pOwotICAgICAgfQotICAgIH0gZWxzZSB7IC8vIEdhcCBpbiB0aGUgbWlk
ZGxlCi0gICAgICB2YXIgY3V0VG9wID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwg
LTEpOwotICAgICAgdmFyIGN1dEJvdCA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIHRvLCB0byArIGxl
bmRpZmYsIDEpOwotICAgICAgaWYgKGN1dFRvcCAmJiBjdXRCb3QpIHsKLSAgICAgICAgZGlzcGxh
eS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dFRvcC5pbmRleCkKLSAgICAgICAgICAu
Y29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBjdXRUb3AubGluZU4sIGN1dEJvdC5saW5lTikpCi0g
ICAgICAgICAgLmNvbmNhdChkaXNwbGF5LnZpZXcuc2xpY2UoY3V0Qm90LmluZGV4KSk7Ci0gICAg
ICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBy
ZXNldFZpZXcoY20pOwotICAgICAgfQotICAgIH0KLQotICAgIHZhciBleHQgPSBkaXNwbGF5LmV4
dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCkgewotICAgICAgaWYgKHRvIDwgZXh0LmxpbmVO
KQotICAgICAgICBleHQubGluZU4gKz0gbGVuZGlmZjsKLSAgICAgIGVsc2UgaWYgKGZyb20gPCBl
eHQubGluZU4gKyBleHQuc2l6ZSkKLSAgICAgICAgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0g
bnVsbDsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWdpc3RlciBhIGNoYW5nZSB0byBhIHNpbmdsZSBs
aW5lLiBUeXBlIG11c3QgYmUgb25lIG9mICJ0ZXh0IiwKLSAgLy8gImd1dHRlciIsICJjbGFzcyIs
ICJ3aWRnZXQiCi0gIGZ1bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHsKLSAg
ICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCAmJiBs
aW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCi0gICAgICBk
aXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwotCi0gICAgaWYgKGxpbmUgPCBkaXNwbGF5
LnZpZXdGcm9tIHx8IGxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHJldHVybjsKLSAgICB2YXIgbGlu
ZVZpZXcgPSBkaXNwbGF5LnZpZXdbZmluZFZpZXdJbmRleChjbSwgbGluZSldOwotICAgIGlmIChs
aW5lVmlldy5ub2RlID09IG51bGwpIHJldHVybjsKLSAgICB2YXIgYXJyID0gbGluZVZpZXcuY2hh
bmdlcyB8fCAobGluZVZpZXcuY2hhbmdlcyA9IFtdKTsKLSAgICBpZiAoaW5kZXhPZihhcnIsIHR5
cGUpID09IC0xKSBhcnIucHVzaCh0eXBlKTsKLSAgfQotCi0gIC8vIENsZWFyIHRoZSB2aWV3Lgot
ICBmdW5jdGlvbiByZXNldFZpZXcoY20pIHsKLSAgICBjbS5kaXNwbGF5LnZpZXdGcm9tID0gY20u
ZGlzcGxheS52aWV3VG8gPSBjbS5kb2MuZmlyc3Q7Ci0gICAgY20uZGlzcGxheS52aWV3ID0gW107
Ci0gICAgY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gMDsKLSAgfQotCi0gIC8vIEZpbmQgdGhlIHZp
ZXcgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gbGluZS4gUmV0dXJuIG51bGwKLSAg
Ly8gd2hlbiB0aGUgbGluZSBpc24ndCB2aXNpYmxlLgotICBmdW5jdGlvbiBmaW5kVmlld0luZGV4
KGNtLCBuKSB7Ci0gICAgaWYgKG4gPj0gY20uZGlzcGxheS52aWV3VG8pIHJldHVybiBudWxsOwot
ICAgIG4gLT0gY20uZGlzcGxheS52aWV3RnJvbTsKLSAgICBpZiAobiA8IDApIHJldHVybiBudWxs
OwotICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS52aWV3OwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdmlldy5sZW5ndGg7IGkrKykgewotICAgICAgbiAtPSB2aWV3W2ldLnNpemU7Ci0gICAgICBp
ZiAobiA8IDApIHJldHVybiBpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHZpZXdDdXR0aW5n
UG9pbnQoY20sIG9sZE4sIG5ld04sIGRpcikgewotICAgIHZhciBpbmRleCA9IGZpbmRWaWV3SW5k
ZXgoY20sIG9sZE4pLCBkaWZmLCB2aWV3ID0gY20uZGlzcGxheS52aWV3OwotICAgIGlmICghc2F3
Q29sbGFwc2VkU3BhbnMgfHwgbmV3TiA9PSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZSkKLSAg
ICAgIHJldHVybiB7aW5kZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07Ci0gICAgZm9yICh2YXIgaSA9
IDAsIG4gPSBjbS5kaXNwbGF5LnZpZXdGcm9tOyBpIDwgaW5kZXg7IGkrKykKLSAgICAgIG4gKz0g
dmlld1tpXS5zaXplOwotICAgIGlmIChuICE9IG9sZE4pIHsKLSAgICAgIGlmIChkaXIgPiAwKSB7
Ci0gICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOwotICAg
ICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47Ci0gICAgICAgIGluZGV4
Kys7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkaWZmID0gbiAtIG9sZE47Ci0gICAgICB9Ci0g
ICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjsKLSAgICB9Ci0gICAgd2hpbGUgKHZpc3Vh
bExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHsKLSAgICAgIGlmIChpbmRleCA9PSAoZGly
IDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSByZXR1cm4gbnVsbDsKLSAgICAgIG5ld04gKz0g
ZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplOwotICAgICAgaW5kZXgg
Kz0gZGlyOwotICAgIH0KLSAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059Owot
ICB9Ci0KLSAgLy8gRm9yY2UgdGhlIHZpZXcgdG8gY292ZXIgYSBnaXZlbiByYW5nZSwgYWRkaW5n
IGVtcHR5IHZpZXcgZWxlbWVudAotICAvLyBvciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBh
cyBuZWVkZWQuCi0gIGZ1bmN0aW9uIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7Ci0gICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3OwotICAgIGlmICh2aWV3
Lmxlbmd0aCA9PSAwIHx8IGZyb20gPj0gZGlzcGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52
aWV3RnJvbSkgewotICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20s
IHRvKTsKLSAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBpZiAoZGlzcGxheS52aWV3RnJvbSA+IGZyb20pCi0gICAgICAgIGRpc3BsYXkudmlldyA9IGJ1
aWxkVmlld0FycmF5KGNtLCBmcm9tLCBkaXNwbGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52
aWV3KTsKLSAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKQotICAgICAgICBk
aXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkp
OwotICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207Ci0gICAgICBpZiAoZGlzcGxheS52aWV3
VG8gPCB0bykKLSAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWls
ZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7Ci0gICAgICBlbHNlIGlmIChkaXNw
bGF5LnZpZXdUbyA+IHRvKQotICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xp
Y2UoMCwgZmluZFZpZXdJbmRleChjbSwgdG8pKTsKLSAgICB9Ci0gICAgZGlzcGxheS52aWV3VG8g
PSB0bzsKLSAgfQotCi0gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcg
d2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlzCi0gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlz
dGVudCkuCi0gIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7Ci0gICAgdmFyIHZpZXcgPSBj
bS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcu
bGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07Ci0gICAgICBpZiAo
IWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykp
ICsrZGlydHk7Ci0gICAgfQotICAgIHJldHVybiBkaXJ0eTsKLSAgfQotCi0gIC8vIEVWRU5UIEhB
TkRMRVJTCi0KLSAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBp
bml0aWFsaXppbmcgdGhlIGVkaXRvcgotICBmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMo
Y20pIHsKLSAgICB2YXIgZCA9IGNtLmRpc3BsYXk7Ci0gICAgb24oZC5zY3JvbGxlciwgIm1vdXNl
ZG93biIsIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKTsKLSAgICAvLyBPbGRlciBJRSdzIHdp
bGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBjbGljawotICAgIGlm
IChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpCi0gICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2si
LCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSkgcmV0dXJuOwotICAgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTsK
LSAgICAgICAgaWYgKCFwb3MgfHwgY2xpY2tJbkd1dHRlcihjbSwgZSkgfHwgZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwot
ICAgICAgICB2YXIgd29yZCA9IGNtLmZpbmRXb3JkQXQocG9zKTsKLSAgICAgICAgZXh0ZW5kU2Vs
ZWN0aW9uKGNtLmRvYywgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7Ci0gICAgICB9KSk7Ci0gICAg
ZWxzZQotICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkgeyBzaWdu
YWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7Ci0gICAgLy8gU29t
ZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQK
LSAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4
dCBtZW51IGlzCi0gICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3Nl
cnMuCi0gICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24oZC5zY3JvbGxlciwgImNvbnRleHRt
ZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOwotCi0gICAgLy8gVXNl
ZCB0byBzdXBwcmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVucwot
ICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTsKLSAgICBmdW5jdGlv
biBmaW5pc2hUb3VjaCgpIHsKLSAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7Ci0gICAgICAgIHRv
dWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2QuYWN0aXZlVG91Y2ggPSBudWxs
O30sIDEwMDApOwotICAgICAgICBwcmV2VG91Y2ggPSBkLmFjdGl2ZVRvdWNoOwotICAgICAgICBw
cmV2VG91Y2guZW5kID0gK25ldyBEYXRlOwotICAgICAgfQotICAgIH07Ci0gICAgZnVuY3Rpb24g
aXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpIHsKLSAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9
IDEpIHJldHVybiBmYWxzZTsKLSAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTsKLSAgICAg
IHJldHVybiB0b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gucmFkaXVzWSA8PSAxOwotICAgIH0K
LSAgICBmdW5jdGlvbiBmYXJBd2F5KHRvdWNoLCBvdGhlcikgewotICAgICAgaWYgKG90aGVyLmxl
ZnQgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICB2YXIgZHggPSBvdGhlci5sZWZ0IC0gdG91
Y2gubGVmdCwgZHkgPSBvdGhlci50b3AgLSB0b3VjaC50b3A7Ci0gICAgICByZXR1cm4gZHggKiBk
eCArIGR5ICogZHkgPiAyMCAqIDIwOwotICAgIH0KLSAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hz
dGFydCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmICghaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUp
KSB7Ci0gICAgICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlzaGVkKTsKLSAgICAgICAgdmFyIG5v
dyA9ICtuZXcgRGF0ZTsKLSAgICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBtb3Zl
ZDogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbm93IC0gcHJldlRvdWNo
LmVuZCA8PSAzMDAgPyBwcmV2VG91Y2ggOiBudWxsfTsKLSAgICAgICAgaWYgKGUudG91Y2hlcy5s
ZW5ndGggPT0gMSkgewotICAgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1sw
XS5wYWdlWDsKLSAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5wYWdl
WTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICAgIG9uKGQuc2Nyb2xsZXIsICJ0b3Vj
aG1vdmUiLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSBkLmFjdGl2ZVRv
dWNoLm1vdmVkID0gdHJ1ZTsKLSAgICB9KTsKLSAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hlbmQi
LCBmdW5jdGlvbihlKSB7Ci0gICAgICB2YXIgdG91Y2ggPSBkLmFjdGl2ZVRvdWNoOwotICAgICAg
aWYgKHRvdWNoICYmICFldmVudEluV2lkZ2V0KGQsIGUpICYmIHRvdWNoLmxlZnQgIT0gbnVsbCAm
JgotICAgICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0ZSAtIHRvdWNoLnN0YXJ0IDwgMzAw
KSB7Ci0gICAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFyKGQuYWN0aXZlVG91Y2gsICJwYWdl
IiksIHJhbmdlOwotICAgICAgICBpZiAoIXRvdWNoLnByZXYgfHwgZmFyQXdheSh0b3VjaCwgdG91
Y2gucHJldikpIC8vIFNpbmdsZSB0YXAKLSAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShwb3Ms
IHBvcyk7Ci0gICAgICAgIGVsc2UgaWYgKCF0b3VjaC5wcmV2LnByZXYgfHwgZmFyQXdheSh0b3Vj
aCwgdG91Y2gucHJldi5wcmV2KSkgLy8gRG91YmxlIHRhcAotICAgICAgICAgIHJhbmdlID0gY20u
ZmluZFdvcmRBdChwb3MpOwotICAgICAgICBlbHNlIC8vIFRyaXBsZSB0YXAKLSAgICAgICAgICBy
YW5nZSA9IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGNtLmRvYywgUG9zKHBv
cy5saW5lICsgMSwgMCkpKTsKLSAgICAgICAgY20uc2V0U2VsZWN0aW9uKHJhbmdlLmFuY2hvciwg
cmFuZ2UuaGVhZCk7Ci0gICAgICAgIGNtLmZvY3VzKCk7Ci0gICAgICAgIGVfcHJldmVudERlZmF1
bHQoZSk7Ci0gICAgICB9Ci0gICAgICBmaW5pc2hUb3VjaCgpOwotICAgIH0pOwotICAgIG9uKGQu
c2Nyb2xsZXIsICJ0b3VjaGNhbmNlbCIsIGZpbmlzaFRvdWNoKTsKLQotICAgIC8vIFN5bmMgc2Ny
b2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFibGUKLSAgICAv
LyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGluZy4KLSAgICBv
bihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxl
ci5jbGllbnRIZWlnaHQpIHsKLSAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGVyLnNj
cm9sbFRvcCk7Ci0gICAgICAgIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVm
dCwgdHJ1ZSk7Ci0gICAgICAgIHNpZ25hbChjbSwgInNjcm9sbCIsIGNtKTsKLSAgICAgIH0KLSAg
ICB9KTsKLQotICAgIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFu
ZCB1cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuCi0gICAgb24oZC5zY3JvbGxlciwgIm1vdXNl
d2hlZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKLSAgICBvbihkLnNj
cm9sbGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBl
KTt9KTsKLQotICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCi0gICAg
b24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxUb3Ag
PSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwotCi0gICAgZC5kcmFnRnVuY3Rpb25zID0g
ewotICAgICAgZW50ZXI6IGZ1bmN0aW9uKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkg
ZV9zdG9wKGUpO30sCi0gICAgICBvdmVyOiBmdW5jdGlvbihlKSB7aWYgKCFzaWduYWxET01FdmVu
dChjbSwgZSkpIHsgb25EcmFnT3ZlcihjbSwgZSk7IGVfc3RvcChlKTsgfX0sCi0gICAgICBzdGFy
dDogZnVuY3Rpb24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30sCi0gICAgICBkcm9wOiBvcGVyYXRp
b24oY20sIG9uRHJvcCksCi0gICAgICBsZWF2ZTogZnVuY3Rpb24oKSB7Y2xlYXJEcmFnQ3Vyc29y
KGNtKTt9Ci0gICAgfTsKLQotICAgIHZhciBpbnAgPSBkLmlucHV0LmdldEZpZWxkKCk7Ci0gICAg
b24oaW5wLCAia2V5dXAiLCBmdW5jdGlvbihlKSB7IG9uS2V5VXAuY2FsbChjbSwgZSk7IH0pOwot
ICAgIG9uKGlucCwgImtleWRvd24iLCBvcGVyYXRpb24oY20sIG9uS2V5RG93bikpOwotICAgIG9u
KGlucCwgImtleXByZXNzIiwgb3BlcmF0aW9uKGNtLCBvbktleVByZXNzKSk7Ci0gICAgb24oaW5w
LCAiZm9jdXMiLCBiaW5kKG9uRm9jdXMsIGNtKSk7Ci0gICAgb24oaW5wLCAiYmx1ciIsIGJpbmQo
b25CbHVyLCBjbSkpOwotICB9Ci0KLSAgZnVuY3Rpb24gZHJhZ0Ryb3BDaGFuZ2VkKGNtLCB2YWx1
ZSwgb2xkKSB7Ci0gICAgdmFyIHdhc09uID0gb2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQ7
Ci0gICAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHsKLSAgICAgIHZhciBmdW5jcyA9IGNtLmRpc3Bs
YXkuZHJhZ0Z1bmN0aW9uczsKLSAgICAgIHZhciB0b2dnbGUgPSB2YWx1ZSA/IG9uIDogb2ZmOwot
ICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFnc3RhcnQiLCBmdW5jcy5zdGFy
dCk7Ci0gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWdlbnRlciIsIGZ1bmNz
LmVudGVyKTsKLSAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ292ZXIiLCBm
dW5jcy5vdmVyKTsKLSAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ2xlYXZl
IiwgZnVuY3MubGVhdmUpOwotICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcm9w
IiwgZnVuY3MuZHJvcCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpbmRv
dyByZXNpemVzCi0gIGZ1bmN0aW9uIG9uUmVzaXplKGNtKSB7Ci0gICAgdmFyIGQgPSBjbS5kaXNw
bGF5OwotICAgIGlmIChkLmxhc3RXcmFwSGVpZ2h0ID09IGQud3JhcHBlci5jbGllbnRIZWlnaHQg
JiYgZC5sYXN0V3JhcFdpZHRoID09IGQud3JhcHBlci5jbGllbnRXaWR0aCkKLSAgICAgIHJldHVy
bjsKLSAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNpemUg
Y2FjaGVzLgotICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5j
YWNoZWRQYWRkaW5nSCA9IG51bGw7Ci0gICAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlOwot
ICAgIGNtLnNldFNpemUoKTsKLSAgfQotCi0gIC8vIE1PVVNFIEVWRU5UUwotCi0gIC8vIFJldHVy
biB0cnVlIHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2ZW50IGhhcHBlbmVkIGluIGEgd2lkZ2V0Ci0g
IGZ1bmN0aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgewotICAgIGZvciAodmFyIG4gPSBl
X3RhcmdldChlKTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKLSAg
ICAgIGlmICghbiB8fCAobi5ub2RlVHlwZSA9PSAxICYmIG4uZ2V0QXR0cmlidXRlKCJjbS1pZ25v
cmUtZXZlbnRzIikgPT0gInRydWUiKSB8fAotICAgICAgICAgIChuLnBhcmVudE5vZGUgPT0gZGlz
cGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gIH0KLQotICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNw
b25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsCi0gIC8vIGlzIGZhbHNlLCBpdCBjaGVja3Mgd2hl
dGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNrZWQsCi0gIC8vIGFuZCByZXR1cm5z
IG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVjdGFuZ3VsYXIKLSAgLy8gc2Vs
ZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFjdGVyIHBvc2l0aW9uIGV2ZW4g
Zm9yCi0gIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmlnaHQgb2YgdGhlIHRleHQuCi0gIGZ1
bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9yUmVjdCkgewotICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBpZiAoIWxpYmVyYWwgJiYgZV90YXJnZXQoZSkuZ2V0
QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIpID09ICJ0cnVlIikgcmV0dXJuIG51bGw7Ci0KLSAg
ICB2YXIgeCwgeSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKLSAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlz
IGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCi0gICAgdHJ5IHsgeCA9IGUuY2xpZW50WCAtIHNwYWNl
LmxlZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KLSAgICBjYXRjaCAoZSkgeyByZXR1
cm4gbnVsbDsgfQotICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTsK
LSAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA9PSAxICYmIChsaW5lID0gZ2V0TGluZShj
bS5kb2MsIGNvb3Jkcy5saW5lKS50ZXh0KS5sZW5ndGggPT0gY29vcmRzLmNoKSB7Ci0gICAgICB2
YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25zLnRh
YlNpemUpIC0gbGluZS5sZW5ndGg7Ci0gICAgICBjb29yZHMgPSBQb3MoY29vcmRzLmxpbmUsIE1h
dGgubWF4KDAsIE1hdGgucm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNwbGF5KS5sZWZ0KSAvIGNo
YXJXaWR0aChjbS5kaXNwbGF5KSkgLSBjb2xEaWZmKSk7Ci0gICAgfQotICAgIHJldHVybiBjb29y
ZHM7Ci0gIH0KLQotICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBkb3Vi
bGUgY2xpY2ssIHRyaXBsZSBjbGljaywKLSAgLy8gc3RhcnQgb2Ygc2VsZWN0aW9uIGRyYWcsIHN0
YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvcgotICAvLyAoY3RybC1jbGljayksIHJlY3Rhbmds
ZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW4KLSAgLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBp
dCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKLSAgLy8gbm90IGludGVy
ZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC4KLSAgZnVuY3Rpb24gb25N
b3VzZURvd24oZSkgewotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owot
ICAgIGlmIChkaXNwbGF5LmFjdGl2ZVRvdWNoICYmIGRpc3BsYXkuaW5wdXQuc3VwcG9ydHNUb3Vj
aCgpIHx8IHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwotICAgIGRpc3BsYXkuc2hpZnQg
PSBlLnNoaWZ0S2V5OwotCi0gICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsKLSAg
ICAgIGlmICghd2Via2l0KSB7Ci0gICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJhZ2dhYmls
aXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvCi0gICAgICAgIC8vIG5vcm1hbCBkcmFnZ2luZyB0
aGluZ3MuCi0gICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7Ci0gICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRy
dWU7fSwgMTAwKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNsaWNr
SW5HdXR0ZXIoY20sIGUpKSByZXR1cm47Ci0gICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGNt
LCBlKTsKLSAgICB3aW5kb3cuZm9jdXMoKTsKLQotICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsK
LSAgICBjYXNlIDE6Ci0gICAgICAvLyAjMzI2MTogbWFrZSBzdXJlLCB0aGF0IHdlJ3JlIG5vdCBz
dGFydGluZyBhIHNlY29uZCBzZWxlY3Rpb24KLSAgICAgIGlmIChjbS5zdGF0ZS5zZWxlY3RpbmdU
ZXh0KQotICAgICAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KGUpOwotICAgICAgZWxzZSBpZiAo
c3RhcnQpCi0gICAgICAgIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCk7Ci0gICAgICBlbHNl
IGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKQotICAgICAgICBlX3ByZXZlbnRE
ZWZhdWx0KGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgaWYgKHdlYmtpdCkg
Y20uc3RhdGUubGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7Ci0gICAgICBpZiAoc3RhcnQpIGV4
dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKLSAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7ZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQo
ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xp
Y2spIG9uQ29udGV4dE1lbnUoY20sIGUpOwotICAgICAgZWxzZSBkZWxheUJsdXJFdmVudChjbSk7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICB2YXIgbGFzdENsaWNrLCBsYXN0RG91Ymxl
Q2xpY2s7Ci0gIGZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCkgewotICAgIGlm
IChpZSkgc2V0VGltZW91dChiaW5kKGVuc3VyZUZvY3VzLCBjbSksIDApOwotICAgIGVsc2UgY20u
Y3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQoKTsKLQotICAgIHZhciBub3cgPSArbmV3IERhdGUsIHR5
cGU7Ci0gICAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2sudGltZSA+IG5v
dyAtIDQwMCAmJiBjbXAobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpID09IDApIHsKLSAgICAg
IHR5cGUgPSAidHJpcGxlIjsKLSAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2su
dGltZSA+IG5vdyAtIDQwMCAmJiBjbXAobGFzdENsaWNrLnBvcywgc3RhcnQpID09IDApIHsKLSAg
ICAgIHR5cGUgPSAiZG91YmxlIjsKLSAgICAgIGxhc3REb3VibGVDbGljayA9IHt0aW1lOiBub3cs
IHBvczogc3RhcnR9OworICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXQorICAgICAgY2hh
bmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpLCB0ZXh0OiB0aGlz
JDEuc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59CisgICAgfQorICAgIHZhciBu
ZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSAiZW5kIiAmJiBjb21wdXRlUmVwbGFjZWRT
ZWwodGhpcywgY2hhbmdlcywgY29sbGFwc2UpCisgICAgZm9yICh2YXIgaSQxID0gY2hhbmdlcy5s
ZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pCisgICAgICB7IG1ha2VDaGFuZ2UodGhpcyQxLCBj
aGFuZ2VzW2kkMV0pIH0KKyAgICBpZiAobmV3U2VsKSB7IHNldFNlbGVjdGlvblJlcGxhY2VIaXN0
b3J5KHRoaXMsIG5ld1NlbCkgfQorICAgIGVsc2UgaWYgKHRoaXMuY20pIHsgZW5zdXJlQ3Vyc29y
VmlzaWJsZSh0aGlzLmNtKSB9CisgIH0pLAorICB1bmRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigp
IHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInVuZG8iKX0pLAorICByZWRvOiBkb2NNZXRo
b2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInJlZG8iKX0pLAor
ICB1bmRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhp
c3RvcnkodGhpcywgInVuZG8iLCB0cnVlKX0pLAorICByZWRvU2VsZWN0aW9uOiBkb2NNZXRob2RP
cChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInJlZG8iLCB0cnVlKX0p
LAorCisgIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFsKSB7dGhpcy5leHRlbmQgPSB2YWx9LAor
ICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmV4dGVuZH0sCisKKyAgaGlz
dG9yeVNpemU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5LCBkb25l
ID0gMCwgdW5kb25lID0gMAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC5kb25lLmxlbmd0
aDsgaSsrKSB7IGlmICghaGlzdC5kb25lW2ldLnJhbmdlcykgeyArK2RvbmUgfSB9CisgICAgZm9y
ICh2YXIgaSQxID0gMDsgaSQxIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpJDErKykgeyBpZiAoIWhp
c3QudW5kb25lW2kkMV0ucmFuZ2VzKSB7ICsrdW5kb25lIH0gfQorICAgIHJldHVybiB7dW5kbzog
ZG9uZSwgcmVkbzogdW5kb25lfQorICB9LAorICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3Ro
aXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sCisK
KyAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRo
aXMuY2hhbmdlR2VuZXJhdGlvbih0cnVlKQorICB9LAorICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5j
dGlvbihmb3JjZVNwbGl0KSB7CisgICAgaWYgKGZvcmNlU3BsaXQpCisgICAgICB7IHRoaXMuaGlz
dG9yeS5sYXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdFNlbE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RP
cmlnaW4gPSBudWxsIH0KKyAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24KKyAgfSwK
KyAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikgeworICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2Vu
ZXJhdGlvbiA9PSAoZ2VuIHx8IHRoaXMuY2xlYW5HZW5lcmF0aW9uKQorICB9LAorCisgIGdldEhp
c3Rvcnk6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB7ZG9uZTogY29weUhpc3RvcnlBcnJheSh0
aGlzLmhpc3RvcnkuZG9uZSksCisgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXko
dGhpcy5oaXN0b3J5LnVuZG9uZSl9CisgIH0sCisgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3RE
YXRhKSB7CisgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhp
c3RvcnkubWF4R2VuZXJhdGlvbikKKyAgICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhp
c3REYXRhLmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpCisgICAgaGlzdC51bmRvbmUgPSBjb3B5
SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSkKKyAgfSwK
KworICBzZXRHdXR0ZXJNYXJrZXI6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGd1dHRlcklE
LCB2YWx1ZSkgeworICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGxpbmUsICJndXR0ZXIiLCBm
dW5jdGlvbiAobGluZSkgeworICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMg
fHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KQorICAgICAgbWFya2Vyc1tndXR0ZXJJRF0gPSB2
YWx1ZQorICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5KG1hcmtlcnMpKSB7IGxpbmUuZ3V0dGVy
TWFya2VycyA9IG51bGwgfQorICAgICAgcmV0dXJuIHRydWUKKyAgICB9KQorICB9KSwKKworICBj
bGVhckd1dHRlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHsKKyAgICB2YXIgdGhp
cyQxID0gdGhpczsKKworICAgIHZhciBpID0gdGhpcy5maXJzdAorICAgIHRoaXMuaXRlcihmdW5j
dGlvbiAobGluZSkgeworICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRl
ck1hcmtlcnNbZ3V0dGVySURdKSB7CisgICAgICAgIGNoYW5nZUxpbmUodGhpcyQxLCBsaW5lLCAi
Z3V0dGVyIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0
ZXJJRF0gPSBudWxsCisgICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkg
eyBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsIH0KKyAgICAgICAgICByZXR1cm4gdHJ1ZQorICAg
ICAgICB9KQorICAgICAgfQorICAgICAgKytpCisgICAgfSkKKyAgfSksCisKKyAgbGluZUluZm86
IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICB2YXIgbgorICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVt
YmVyIikgeworICAgICAgaWYgKCFpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIG51bGwgfQor
ICAgICAgbiA9IGxpbmUKKyAgICAgIGxpbmUgPSBnZXRMaW5lKHRoaXMsIGxpbmUpCisgICAgICBp
ZiAoIWxpbmUpIHsgcmV0dXJuIG51bGwgfQogICAgIH0gZWxzZSB7Ci0gICAgICB0eXBlID0gInNp
bmdsZSI7Ci0gICAgICBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsKLSAgICB9
Ci0KLSAgICB2YXIgc2VsID0gY20uZG9jLnNlbCwgbW9kaWZpZXIgPSBtYWMgPyBlLm1ldGFLZXkg
OiBlLmN0cmxLZXksIGNvbnRhaW5lZDsKLSAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBk
cmFnQW5kRHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYKLSAgICAgICAgdHlwZSA9PSAic2luZ2xl
IiAmJiAoY29udGFpbmVkID0gc2VsLmNvbnRhaW5zKHN0YXJ0KSkgPiAtMSAmJgotICAgICAgICAo
Y21wKChjb250YWluZWQgPSBzZWwucmFuZ2VzW2NvbnRhaW5lZF0pLmZyb20oKSwgc3RhcnQpIDwg
MCB8fCBzdGFydC54UmVsID4gMCkgJiYKLSAgICAgICAgKGNtcChjb250YWluZWQudG8oKSwgc3Rh
cnQpID4gMCB8fCBzdGFydC54UmVsIDwgMCkpCi0gICAgICBsZWZ0QnV0dG9uU3RhcnREcmFnKGNt
LCBlLCBzdGFydCwgbW9kaWZpZXIpOwotICAgIGVsc2UKLSAgICAgIGxlZnRCdXR0b25TZWxlY3Qo
Y20sIGUsIHN0YXJ0LCB0eXBlLCBtb2RpZmllcik7Ci0gIH0KLQotICAvLyBTdGFydCBhIHRleHQg
ZHJhZy4gV2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5Ci0gIC8vIGhh
cHBlbiwgYW5kIHRyZWF0IGFzIGEgY2xpY2sgaWYgaXQgZGlkbid0LgotICBmdW5jdGlvbiBsZWZ0
QnV0dG9uU3RhcnREcmFnKGNtLCBlLCBzdGFydCwgbW9kaWZpZXIpIHsKLSAgICB2YXIgZGlzcGxh
eSA9IGNtLmRpc3BsYXksIHN0YXJ0VGltZSA9ICtuZXcgRGF0ZTsKLSAgICB2YXIgZHJhZ0VuZCA9
IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZTIpIHsKLSAgICAgIGlmICh3ZWJraXQpIGRpc3BsYXku
c2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7Ci0gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQg
PSBmYWxzZTsKLSAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAgICAg
IG9mZihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwotICAgICAgaWYgKE1hdGgu
YWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xp
ZW50WSkgPCAxMCkgewotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUyKTsKLSAgICAgICAgaWYg
KCFtb2RpZmllciAmJiArbmV3IERhdGUgLSAyMDAgPCBzdGFydFRpbWUpCi0gICAgICAgICAgZXh0
ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4
cGxhaW5hYmxlIGZvY3VzIHByb2JsZW0gaW4gSUU5ICgjMjEyNykgYW5kIENocm9tZSAoIzMwODEp
Ci0gICAgICAgIGlmICh3ZWJraXQgfHwgaWUgJiYgaWVfdmVyc2lvbiA9PSA5KQotICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5mb2N1cygpOyBkaXNwbGF5Lmlu
cHV0LmZvY3VzKCk7fSwgMjApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGlzcGxheS5pbnB1
dC5mb2N1cygpOwotICAgICAgfQotICAgIH0pOwotICAgIC8vIExldCB0aGUgZHJhZyBoYW5kbGVy
IGhhbmRsZSB0aGlzLgotICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxl
ID0gdHJ1ZTsKLSAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBkcmFnRW5kOwotICAgIC8vIElF
J3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCi0gICAgaWYgKGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ry
b3ApIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsKLSAgICBvbihkb2N1bWVudCwgIm1vdXNl
dXAiLCBkcmFnRW5kKTsKLSAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQp
OwotICB9Ci0KLSAgLy8gTm9ybWFsIHNlbGVjdGlvbiwgYXMgb3Bwb3NlZCB0byB0ZXh0IGRyYWdn
aW5nLgotICBmdW5jdGlvbiBsZWZ0QnV0dG9uU2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgYWRk
TmV3KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAg
ZV9wcmV2ZW50RGVmYXVsdChlKTsKLQotICAgIHZhciBvdXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0
U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzOwotICAgIGlmIChhZGROZXcg
JiYgIWUuc2hpZnRLZXkpIHsKLSAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5jb250YWlucyhzdGFy
dCk7Ci0gICAgICBpZiAob3VySW5kZXggPiAtMSkKLSAgICAgICAgb3VyUmFuZ2UgPSByYW5nZXNb
b3VySW5kZXhdOwotICAgICAgZWxzZQotICAgICAgICBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFy
dCwgc3RhcnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucHJpbWFy
eSgpOwotICAgICAgb3VySW5kZXggPSBkb2Muc2VsLnByaW1JbmRleDsKLSAgICB9Ci0KLSAgICBp
ZiAoZS5hbHRLZXkpIHsKLSAgICAgIHR5cGUgPSAicmVjdCI7Ci0gICAgICBpZiAoIWFkZE5ldykg
b3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKLSAgICAgIHN0YXJ0ID0gcG9zRnJv
bU1vdXNlKGNtLCBlLCB0cnVlLCB0cnVlKTsKLSAgICAgIG91ckluZGV4ID0gLTE7Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09ICJkb3VibGUiKSB7Ci0gICAgICB2YXIgd29yZCA9IGNtLmZpbmRXb3Jk
QXQoc3RhcnQpOwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKLSAg
ICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCB3b3JkLmFuY2hvciwg
d29yZC5oZWFkKTsKLSAgICAgIGVsc2UKLSAgICAgICAgb3VyUmFuZ2UgPSB3b3JkOwotICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSAidHJpcGxlIikgewotICAgICAgdmFyIGxpbmUgPSBuZXcgUmFuZ2Uo
UG9zKHN0YXJ0LmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHN0YXJ0LmxpbmUgKyAxLCAwKSkp
OwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKLSAgICAgICAgb3Vy
UmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBsaW5lLmFuY2hvciwgbGluZS5oZWFk
KTsKLSAgICAgIGVsc2UKLSAgICAgICAgb3VyUmFuZ2UgPSBsaW5lOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIHN0YXJ0KTsKLSAgICB9
Ci0KLSAgICBpZiAoIWFkZE5ldykgewotICAgICAgb3VySW5kZXggPSAwOwotICAgICAgc2V0U2Vs
ZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTsKLSAg
ICAgIHN0YXJ0U2VsID0gZG9jLnNlbDsKLSAgICB9IGVsc2UgaWYgKG91ckluZGV4ID09IC0xKSB7
Ci0gICAgICBvdXJJbmRleCA9IHJhbmdlcy5sZW5ndGg7Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9j
LCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLmNvbmNhdChbb3VyUmFuZ2VdKSwgb3VySW5kZXgp
LAotICAgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46ICIqbW91c2UifSk7
Ci0gICAgfSBlbHNlIGlmIChyYW5nZXMubGVuZ3RoID4gMSAmJiByYW5nZXNbb3VySW5kZXhdLmVt
cHR5KCkgJiYgdHlwZSA9PSAic2luZ2xlIiAmJiAhZS5zaGlmdEtleSkgewotICAgICAgc2V0U2Vs
ZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCku
Y29uY2F0KHJhbmdlcy5zbGljZShvdXJJbmRleCArIDEpKSwgMCkpOwotICAgICAgc3RhcnRTZWwg
PSBkb2Muc2VsOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywg
b3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpOwotICAgIH0KLQotICAgIHZhciBsYXN0UG9z
ID0gc3RhcnQ7Ci0gICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9zKSB7Ci0gICAgICBpZiAoY21wKGxh
c3RQb3MsIHBvcykgPT0gMCkgcmV0dXJuOwotICAgICAgbGFzdFBvcyA9IHBvczsKLQotICAgICAg
aWYgKHR5cGUgPT0gInJlY3QiKSB7Ci0gICAgICAgIHZhciByYW5nZXMgPSBbXSwgdGFiU2l6ZSA9
IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgICAgdmFyIHN0YXJ0Q29sID0gY291bnRDb2x1bW4o
Z2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0LmNoLCB0YWJTaXplKTsKLSAgICAg
ICAgdmFyIHBvc0NvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dCwg
cG9zLmNoLCB0YWJTaXplKTsKLSAgICAgICAgdmFyIGxlZnQgPSBNYXRoLm1pbihzdGFydENvbCwg
cG9zQ29sKSwgcmlnaHQgPSBNYXRoLm1heChzdGFydENvbCwgcG9zQ29sKTsKLSAgICAgICAgZm9y
ICh2YXIgbGluZSA9IE1hdGgubWluKHN0YXJ0LmxpbmUsIHBvcy5saW5lKSwgZW5kID0gTWF0aC5t
aW4oY20ubGFzdExpbmUoKSwgTWF0aC5tYXgoc3RhcnQubGluZSwgcG9zLmxpbmUpKTsKLSAgICAg
ICAgICAgICBsaW5lIDw9IGVuZDsgbGluZSsrKSB7Ci0gICAgICAgICAgdmFyIHRleHQgPSBnZXRM
aW5lKGRvYywgbGluZSkudGV4dCwgbGVmdFBvcyA9IGZpbmRDb2x1bW4odGV4dCwgbGVmdCwgdGFi
U2l6ZSk7Ci0gICAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgICAgICByYW5nZXMu
cHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsK
LSAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpCi0gICAgICAgICAgICBy
YW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgZmluZENv
bHVtbih0ZXh0LCByaWdodCwgdGFiU2l6ZSkpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFy
YW5nZXMubGVuZ3RoKSByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSk7Ci0gICAg
ICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydFNlbC5yYW5nZXMu
c2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksCi0gICAgICAgICAg
ICAgICAgICAgICB7b3JpZ2luOiAiKm1vdXNlIiwgc2Nyb2xsOiBmYWxzZX0pOwotICAgICAgICBj
bS5zY3JvbGxJbnRvVmlldyhwb3MpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIG9sZFJh
bmdlID0gb3VyUmFuZ2U7Ci0gICAgICAgIHZhciBhbmNob3IgPSBvbGRSYW5nZS5hbmNob3IsIGhl
YWQgPSBwb3M7Ci0gICAgICAgIGlmICh0eXBlICE9ICJzaW5nbGUiKSB7Ci0gICAgICAgICAgaWYg
KHR5cGUgPT0gImRvdWJsZSIpCi0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBjbS5maW5kV29yZEF0
KHBvcyk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdl
KFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwot
ICAgICAgICAgIGlmIChjbXAocmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkgewotICAgICAgICAg
ICAgaGVhZCA9IHJhbmdlLmhlYWQ7Ci0gICAgICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFu
Z2UuZnJvbSgpLCByYW5nZS5hbmNob3IpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBoZWFkID0gcmFuZ2UuYW5jaG9yOwotICAgICAgICAgICAgYW5jaG9yID0gbWF4UG9zKG9sZFJh
bmdlLnRvKCksIHJhbmdlLmhlYWQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2
YXIgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApOwotICAgICAgICByYW5nZXNbb3Vy
SW5kZXhdID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCBhbmNob3IpLCBoZWFkKTsKLSAgICAgICAg
c2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcywgb3VySW5kZXgpLCBz
ZWxfbW91c2UpOwotICAgICAgfQotICAgIH0KLQotICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxh
eS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIC8vIFVzZWQgdG8gZW5zdXJl
IHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kCi0gICAgLy8g
aGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUgLS0g
YXQKLSAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZl
biB3aGVuIGNsZWFyZWQsCi0gICAgLy8gaWYgdGhlIGNsZWFyIGhhcHBlbnMgYWZ0ZXIgdGhlaXIg
c2NoZWR1bGVkIGZpcmluZyB0aW1lKS4KLSAgICB2YXIgY291bnRlciA9IDA7Ci0KLSAgICBmdW5j
dGlvbiBleHRlbmQoZSkgewotICAgICAgdmFyIGN1ckNvdW50ID0gKytjb3VudGVyOwotICAgICAg
dmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgdHlwZSA9PSAicmVjdCIpOwotICAg
ICAgaWYgKCFjdXIpIHJldHVybjsKLSAgICAgIGlmIChjbXAoY3VyLCBsYXN0UG9zKSAhPSAwKSB7
Ci0gICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7Ci0gICAgICAgIGV4dGVuZFRv
KGN1cik7Ci0gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7
Ci0gICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJs
ZS5mcm9tKQotICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpe2lm
IChjb3VudGVyID09IGN1ckNvdW50KSBleHRlbmQoZSk7fSksIDE1MCk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICB2YXIgb3V0c2lkZSA9IGUuY2xpZW50WSA8IGVkaXRvclNpemUudG9wID8gLTIw
IDogZS5jbGllbnRZID4gZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6IDA7Ci0gICAgICAgIGlmIChv
dXRzaWRlKSBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
aWYgKGNvdW50ZXIgIT0gY3VyQ291bnQpIHJldHVybjsKLSAgICAgICAgICBkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbFRvcCArPSBvdXRzaWRlOwotICAgICAgICAgIGV4dGVuZChlKTsKLSAgICAgICAg
fSksIDUwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkb25lKGUpIHsKLSAgICAg
IGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSBmYWxzZTsKLSAgICAgIGNvdW50ZXIgPSBJbmZpbml0
eTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBkaXNwbGF5LmlucHV0LmZvY3Vz
KCk7Ci0gICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBtb3ZlKTsKLSAgICAgIG9mZihk
b2N1bWVudCwgIm1vdXNldXAiLCB1cCk7Ci0gICAgICBkb2MuaGlzdG9yeS5sYXN0U2VsT3JpZ2lu
ID0gbnVsbDsKLSAgICB9Ci0KLSAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24o
ZSkgewotICAgICAgaWYgKCFlX2J1dHRvbihlKSkgZG9uZShlKTsKLSAgICAgIGVsc2UgZXh0ZW5k
KGUpOwotICAgIH0pOwotICAgIHZhciB1cCA9IG9wZXJhdGlvbihjbSwgZG9uZSk7Ci0gICAgY20u
c3RhdGUuc2VsZWN0aW5nVGV4dCA9IHVwOwotICAgIG9uKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwg
bW92ZSk7Ci0gICAgb24oZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwotICB9Ci0KLSAgLy8gRGV0
ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGhhcHBlbmVkIGluIHRoZSBndXR0ZXIsIGFuZCBmaXJl
cyB0aGUKLSAgLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LgotICBmdW5j
dGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlwZSwgcHJldmVudCwgc2lnbmFsZm4pIHsKLSAgICB0
cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9Ci0gICAgY2F0Y2goZSkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBpZiAobVggPj0gTWF0aC5mbG9vcihjbS5kaXNwbGF5Lmd1
dHRlcnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpKSByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHByZXZlbnQpIGVfcHJldmVudERlZmF1bHQoZSk7Ci0KLSAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXk7Ci0gICAgdmFyIGxpbmVCb3ggPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7Ci0KLSAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSB8fCAhaGFzSGFuZGxl
cihjbSwgdHlwZSkpIHJldHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSk7Ci0gICAgbVkgLT0gbGlu
ZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGcgPSBkaXNwbGF5
Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKLSAgICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkucmlnaHQgPj0gbVgpIHsKLSAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQo
Y20uZG9jLCBtWSk7Ci0gICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07
Ci0gICAgICAgIHNpZ25hbGZuKGNtLCB0eXBlLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKLSAgICAg
ICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7Ci0gICAgcmV0dXJuIGd1dHRlckV2ZW50
KGNtLCBlLCAiZ3V0dGVyQ2xpY2siLCB0cnVlLCBzaWduYWxMYXRlcik7Ci0gIH0KLQotICAvLyBL
bHVkZ2UgdG8gd29yayBhcm91bmQgc3RyYW5nZSBJRSBiZWhhdmlvciB3aGVyZSBpdCdsbCBzb21l
dGltZXMKLSAgLy8gcmUtZmlyZSBhIHNlcmllcyBvZiBkcmFnLXJlbGF0ZWQgZXZlbnRzIHJpZ2h0
IGFmdGVyIHRoZSBkcm9wICgjMTU1MSkKLSAgdmFyIGxhc3REcm9wID0gMDsKLQotICBmdW5jdGlv
biBvbkRyb3AoZSkgewotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgY2xlYXJEcmFnQ3Vyc29yKGNt
KTsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlz
cGxheSwgZSkpCi0gICAgICByZXR1cm47Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBp
ZiAoaWUpIGxhc3REcm9wID0gK25ldyBEYXRlOwotICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2Uo
Y20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwotICAgIGlmICghcG9z
IHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm47Ci0gICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3As
IGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKLSAgICAvLyBhbmQgaW5z
ZXJ0IGl0LgotICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFk
ZXIgJiYgd2luZG93LkZpbGUpIHsKLSAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0g
QXJyYXkobiksIHJlYWQgPSAwOwotICAgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwg
aSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7Ci0gICAgICAgIHJlYWRl
ci5vbmxvYWQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRleHRbaV0g
PSByZWFkZXIucmVzdWx0OwotICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewotICAgICAgICAg
ICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7Ci0gICAgICAgICAgICB2YXIgY2hhbmdlID0g
e2Zyb206IHBvcywgdG86IHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogY20u
ZG9jLnNwbGl0TGluZXModGV4dC5qb2luKGNtLmRvYy5saW5lU2VwYXJhdG9yKCkpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiAicGFzdGUifTsKLSAgICAgICAgICAgIG1ha2VD
aGFuZ2UoY20uZG9jLCBjaGFuZ2UpOwotICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmVwbGFjZUhp
c3RvcnkoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zLCBjaGFuZ2VFbmQoY2hhbmdlKSkpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUp
OwotICAgICAgfTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShm
aWxlc1tpXSwgaSk7Ci0gICAgfSBlbHNlIHsgLy8gTm9ybWFsIGRyb3AKLSAgICAgIC8vIERvbid0
IGRvIGEgcmVwbGFjZSBpZiB0aGUgZHJvcCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVk
IHRleHQuCi0gICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29u
dGFpbnMocG9zKSA+IC0xKSB7Ci0gICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dChlKTsKLSAg
ICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNlZAotICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkge2NtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LCAyMCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHZhciB0ZXh0ID0gZS5kYXRh
VHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpOwotICAgICAgICBpZiAodGV4dCkgewotICAgICAgICAg
IGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShtYWMgPyBlLmFsdEtleSA6IGUuY3RybEtl
eSkpCi0gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOwotICAg
ICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBv
cykpOwotICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rl
ZC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxl
Y3RlZFtpXS5hbmNob3IsIHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7Ci0gICAgICAgICAgY20u
cmVwbGFjZVNlbGVjdGlvbih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7Ci0gICAgICAgICAgY20u
ZGlzcGxheS5pbnB1dC5mb2N1cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChl
KXt9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gb25EcmFnU3RhcnQoY20sIGUpIHsKLSAgICBp
ZiAoaWUgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERyb3Ag
PCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuOyB9Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNt
LCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47Ci0KLSAgICBlLmRh
dGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgY20uZ2V0U2VsZWN0aW9uKCkpOwotCi0gICAgLy8g
VXNlIGR1bW15IGltYWdlIGluc3RlYWQgb2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS4KLSAgICAv
LyBSZWNlbnQgU2FmYXJpICh+Ni4wLjIpIGhhdmUgYSB0ZW5kZW5jeSB0byBzZWdmYXVsdCB3aGVu
IHRoaXMgaGFwcGVucywgc28gd2UgZG9uJ3QgZG8gaXQgdGhlcmUuCi0gICAgaWYgKGUuZGF0YVRy
YW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7Ci0gICAgICB2YXIgaW1nID0gZWx0KCJp
bWciLCBudWxsLCBudWxsLCAicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7Ci0g
ICAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNI
NUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09IjsKLSAgICAgIGlmIChwcmVzdG8pIHsK
LSAgICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdodCA9IDE7Ci0gICAgICAgIGNtLmRpc3BsYXku
d3JhcHBlci5hcHBlbmRDaGlsZChpbWcpOwotICAgICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBv
ciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVhc29uCi0gICAg
ICAgIGltZy5fdG9wID0gaW1nLm9mZnNldFRvcDsKLSAgICAgIH0KLSAgICAgIGUuZGF0YVRyYW5z
ZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOwotICAgICAgaWYgKHByZXN0bykgaW1nLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBvbkRyYWdP
dmVyKGNtLCBlKSB7Ci0gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Ci0gICAgaWYg
KCFwb3MpIHJldHVybjsKLSAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKTsKLSAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBwb3MsIGZyYWcpOwotICAgIGlm
ICghY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7Ci0gICAgICBjbS5kaXNwbGF5LmRyYWdDdXJzb3Ig
PSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWN1cnNvcnMgQ29kZU1pcnJvci1kcmFnY3Vy
c29ycyIpOwotICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGNtLmRpc3Bs
YXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JEaXYpOwotICAgIH0KLSAgICByZW1vdmVD
aGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGZyYWcpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7Ci0gICAgaWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNv
cikgewotICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoY20uZGlzcGxheS5k
cmFnQ3Vyc29yKTsKLSAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IG51bGw7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gU0NST0xMIEVWRU5UUwotCi0gIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJl
YSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydAotICAvLyBjb3ZlcnMgdGhlIHZp
c2libGUgYXJlYS4KLSAgZnVuY3Rpb24gc2V0U2Nyb2xsVG9wKGNtLCB2YWwpIHsKLSAgICBpZiAo
TWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSByZXR1cm47Ci0gICAgY20uZG9j
LnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5U2ltcGxlKGNt
LCB7dG9wOiB2YWx9KTsKLSAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0g
dmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBjbS5kaXNwbGF5
LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7Ci0gICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNw
bGF5U2ltcGxlKGNtKTsKLSAgICBzdGFydFdvcmtlcihjbSwgMTAwKTsKLSAgfQotICAvLyBTeW5j
IHNjcm9sbGVyIGFuZCBzY3JvbGxiYXIsIGVuc3VyZSB0aGUgZ3V0dGVyIGVsZW1lbnRzIGFyZQot
ICAvLyBhbGlnbmVkLgotICBmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGNtLCB2YWwsIGlzU2Nyb2xs
ZXIpIHsKLSAgICBpZiAoaXNTY3JvbGxlciA/IHZhbCA9PSBjbS5kb2Muc2Nyb2xsTGVmdCA6IE1h
dGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gdmFsKSA8IDIpIHJldHVybjsKLSAgICB2YWwgPSBN
YXRoLm1pbih2YWwsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNwbGF5
LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDsKLSAg
ICBhbGlnbkhvcml6b250YWxseShjbSk7Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Ny
b2xsTGVmdCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHZhbDsKLSAg
ICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdCh2YWwpOwotICB9Ci0KLSAgLy8g
U2luY2UgdGhlIGRlbHRhIHZhbHVlcyByZXBvcnRlZCBvbiBtb3VzZSB3aGVlbCBldmVudHMgYXJl
Ci0gIC8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3NlcnMgYW5kIGV2ZW4gYnJvd3NlciB2
ZXJzaW9ucywgYW5kCi0gIC8vIGdlbmVyYWxseSBob3JyaWJseSB1bnByZWRpY3RhYmxlLCB0aGlz
IGNvZGUgc3RhcnRzIGJ5IG1lYXN1cmluZwotICAvLyB0aGUgc2Nyb2xsIGVmZmVjdCB0aGF0IHRo
ZSBmaXJzdCBmZXcgbW91c2Ugd2hlZWwgZXZlbnRzIGhhdmUsCi0gIC8vIGFuZCwgZnJvbSB0aGF0
LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVsdGFzIHRvIHBpeGVsCi0gIC8vIG9m
ZnNldHMgYWZ0ZXJ3YXJkcy4KLSAgLy8KLSAgLy8gVGhlIHJlYXNvbiB3ZSB3YW50IHRvIGtub3cg
dGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xsCi0gIC8vIGlzIHRoYXQgaXQgZ2l2
ZXMgdXMgYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBkaXNwbGF5IGJlZm9yZSB0aGUKLSAgLy8gYWN0
dWFsIHNjcm9sbGluZyBoYXBwZW5zLCByZWR1Y2luZyBmbGlja2VyaW5nLgotCi0gIHZhciB3aGVl
bFNhbXBsZXMgPSAwLCB3aGVlbFBpeGVsc1BlclVuaXQgPSBudWxsOwotICAvLyBGaWxsIGluIGEg
YnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3ZQotICAv
LyBrbm93IG9uZS4gVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBhY2N1cmF0ZSAtLSB0aGUgcmVzdWx0
IG9mIHRoZW0KLSAgLy8gYmVpbmcgd3Jvbmcgd291bGQganVzdCBiZSBhIHNsaWdodCBmbGlja2Vy
IG9uIHRoZSBmaXJzdCB3aGVlbAotICAvLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCku
Ci0gIGlmIChpZSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS41MzsKLSAgZWxzZSBpZiAoZ2Vja28p
IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IDE1OwotICBlbHNlIGlmIChjaHJvbWUpIHdoZWVsUGl4ZWxz
UGVyVW5pdCA9IC0uNzsKLSAgZWxzZSBpZiAoc2FmYXJpKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAt
MS8zOwotCi0gIHZhciB3aGVlbEV2ZW50RGVsdGEgPSBmdW5jdGlvbihlKSB7Ci0gICAgdmFyIGR4
ID0gZS53aGVlbERlbHRhWCwgZHkgPSBlLndoZWVsRGVsdGFZOwotICAgIGlmIChkeCA9PSBudWxs
ICYmIGUuZGV0YWlsICYmIGUuYXhpcyA9PSBlLkhPUklaT05UQUxfQVhJUykgZHggPSBlLmRldGFp
bDsKLSAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNB
TF9BWElTKSBkeSA9IGUuZGV0YWlsOwotICAgIGVsc2UgaWYgKGR5ID09IG51bGwpIGR5ID0gZS53
aGVlbERlbHRhOwotICAgIHJldHVybiB7eDogZHgsIHk6IGR5fTsKLSAgfTsKLSAgQ29kZU1pcnJv
ci53aGVlbEV2ZW50UGl4ZWxzID0gZnVuY3Rpb24oZSkgewotICAgIHZhciBkZWx0YSA9IHdoZWVs
RXZlbnREZWx0YShlKTsKLSAgICBkZWx0YS54ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsKLSAgICBk
ZWx0YS55ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsKLSAgICByZXR1cm4gZGVsdGE7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkgewotICAgIHZhciBkZWx0YSA9IHdoZWVs
RXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7Ci0KLSAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3BsYXkuc2Nyb2xsZXI7Ci0gICAgLy8gUXVp
dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhlcmUKLSAgICBpZiAoIShkeCAmJiBzY3Jv
bGwuc2Nyb2xsV2lkdGggPiBzY3JvbGwuY2xpZW50V2lkdGggfHwKLSAgICAgICAgICBkeSAmJiBz
Y3JvbGwuc2Nyb2xsSGVpZ2h0ID4gc2Nyb2xsLmNsaWVudEhlaWdodCkpIHJldHVybjsKLQotICAg
IC8vIFdlYmtpdCBicm93c2VycyBvbiBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0
aGUgdGFyZ2V0Ci0gICAgLy8gb2YgdGhlIHNjcm9sbCBldmVudCBpcyByZW1vdmVkIGZyb20gdGhl
IHNjcm9sbGFibGUgZWxlbWVudC4KLSAgICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUg
aW4gcGF0Y2hEaXNwbGF5KSBtYWtlcyBzdXJlIHRoZQotICAgIC8vIGVsZW1lbnQgaXMga2VwdCBh
cm91bmQuCi0gICAgaWYgKGR5ICYmIG1hYyAmJiB3ZWJraXQpIHsKLSAgICAgIG91dGVyOiBmb3Ig
KHZhciBjdXIgPSBlLnRhcmdldCwgdmlldyA9IGRpc3BsYXkudmlldzsgY3VyICE9IHNjcm9sbDsg
Y3VyID0gY3VyLnBhcmVudE5vZGUpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKHZpZXdbaV0ubm9kZSA9PSBjdXIpIHsKLSAg
ICAgICAgICAgIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gY3VyOwotICAgICAgICAg
ICAgYnJlYWsgb3V0ZXI7Ci0gICAgICAgICAgfQorICAgICAgbiA9IGxpbmVObyhsaW5lKQorICAg
ICAgaWYgKG4gPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9CisgICAgfQorICAgIHJldHVybiB7bGlu
ZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIGd1dHRlck1hcmtlcnM6IGxpbmUu
Z3V0dGVyTWFya2VycywKKyAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJn
Q2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcywKKyAgICAgICAg
ICAgIHdpZGdldHM6IGxpbmUud2lkZ2V0c30KKyAgfSwKKworICBhZGRMaW5lQ2xhc3M6IGRvY01l
dGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgeworICAgIHJldHVybiBjaGFuZ2VM
aW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyIiA6ICJjbGFzcyIs
IGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0
ZXh0Q2xhc3MiCisgICAgICAgICAgICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0Ns
YXNzIgorICAgICAgICAgICAgICAgOiB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXJDbGFzcyIg
OiAid3JhcENsYXNzIgorICAgICAgaWYgKCFsaW5lW3Byb3BdKSB7IGxpbmVbcHJvcF0gPSBjbHMg
fQorICAgICAgZWxzZSBpZiAoY2xhc3NUZXN0KGNscykudGVzdChsaW5lW3Byb3BdKSkgeyByZXR1
cm4gZmFsc2UgfQorICAgICAgZWxzZSB7IGxpbmVbcHJvcF0gKz0gIiAiICsgY2xzIH0KKyAgICAg
IHJldHVybiB0cnVlCisgICAgfSkKKyAgfSksCisgIHJlbW92ZUxpbmVDbGFzczogZG9jTWV0aG9k
T3AoZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7CisgICAgcmV0dXJuIGNoYW5nZUxpbmUo
dGhpcywgaGFuZGxlLCB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXIiIDogImNsYXNzIiwgZnVu
Y3Rpb24gKGxpbmUpIHsKKyAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRD
bGFzcyIKKyAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3Mi
CisgICAgICAgICAgICAgICA6IHdoZXJlID09ICJndXR0ZXIiID8gImd1dHRlckNsYXNzIiA6ICJ3
cmFwQ2xhc3MiCisgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXQorICAgICAgaWYgKCFjdXIpIHsg
cmV0dXJuIGZhbHNlIH0KKyAgICAgIGVsc2UgaWYgKGNscyA9PSBudWxsKSB7IGxpbmVbcHJvcF0g
PSBudWxsIH0KKyAgICAgIGVsc2UgeworICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xh
c3NUZXN0KGNscykpCisgICAgICAgIGlmICghZm91bmQpIHsgcmV0dXJuIGZhbHNlIH0KKyAgICAg
ICAgdmFyIGVuZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoCisgICAgICAgIGxpbmVb
cHJvcF0gPSBjdXIuc2xpY2UoMCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5pbmRleCB8fCBlbmQg
PT0gY3VyLmxlbmd0aCA/ICIiIDogIiAiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGwKKyAgICAg
IH0KKyAgICAgIHJldHVybiB0cnVlCisgICAgfSkKKyAgfSksCisKKyAgYWRkTGluZVdpZGdldDog
ZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CisgICAgcmV0dXJu
IGFkZExpbmVXaWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKQorICB9KSwKKyAgcmVt
b3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigpIH0sCisKKyAg
bWFya1RleHQ6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7CisgICAgcmV0dXJuIG1hcmtU
ZXh0KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pLCBvcHRpb25z
LCBvcHRpb25zICYmIG9wdGlvbnMudHlwZSB8fCAicmFuZ2UiKQorICB9LAorICBzZXRCb29rbWFy
azogZnVuY3Rpb24ocG9zLCBvcHRpb25zKSB7CisgICAgdmFyIHJlYWxPcHRzID0ge3JlcGxhY2Vk
V2l0aDogb3B0aW9ucyAmJiAob3B0aW9ucy5ub2RlVHlwZSA9PSBudWxsID8gb3B0aW9ucy53aWRn
ZXQgOiBvcHRpb25zKSwKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAm
JiBvcHRpb25zLmluc2VydExlZnQsCisgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVtcHR5
OiBmYWxzZSwgc2hhcmVkOiBvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkLAorICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVNb3VzZUV2ZW50czogb3B0aW9ucyAmJiBvcHRpb25zLmhhbmRsZU1vdXNl
RXZlbnRzfQorICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKQorICAgIHJldHVybiBtYXJrVGV4
dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsICJib29rbWFyayIpCisgIH0sCisgIGZpbmRNYXJr
c0F0OiBmdW5jdGlvbihwb3MpIHsKKyAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcykKKyAgICB2
YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNw
YW5zCisgICAgaWYgKHNwYW5zKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgIHZhciBzcGFuID0gc3BhbnNbaV0KKyAgICAgIGlmICgoc3Bhbi5mcm9tID09
IG51bGwgfHwgc3Bhbi5mcm9tIDw9IHBvcy5jaCkgJiYKKyAgICAgICAgICAoc3Bhbi50byA9PSBu
dWxsIHx8IHNwYW4udG8gPj0gcG9zLmNoKSkKKyAgICAgICAgeyBtYXJrZXJzLnB1c2goc3Bhbi5t
YXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKSB9CisgICAgfSB9CisgICAgcmV0dXJuIG1hcmtl
cnMKKyAgfSwKKyAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7CisgICAg
ZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7IHRvID0gY2xpcFBvcyh0aGlzLCB0bykKKyAgICB2
YXIgZm91bmQgPSBbXSwgbGluZU5vID0gZnJvbS5saW5lCisgICAgdGhpcy5pdGVyKGZyb20ubGlu
ZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICB2YXIgc3BhbnMgPSBsaW5l
Lm1hcmtlZFNwYW5zCisgICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFu
cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldCisgICAgICAgIGlm
ICghKHNwYW4udG8gIT0gbnVsbCAmJiBsaW5lTm8gPT0gZnJvbS5saW5lICYmIGZyb20uY2ggPj0g
c3Bhbi50byB8fAorICAgICAgICAgICAgICBzcGFuLmZyb20gPT0gbnVsbCAmJiBsaW5lTm8gIT0g
ZnJvbS5saW5lIHx8CisgICAgICAgICAgICAgIHNwYW4uZnJvbSAhPSBudWxsICYmIGxpbmVObyA9
PSB0by5saW5lICYmIHNwYW4uZnJvbSA+PSB0by5jaCkgJiYKKyAgICAgICAgICAgICghZmlsdGVy
IHx8IGZpbHRlcihzcGFuLm1hcmtlcikpKQorICAgICAgICAgIHsgZm91bmQucHVzaChzcGFuLm1h
cmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpIH0KKyAgICAgIH0gfQorICAgICAgKytsaW5lTm8K
KyAgICB9KQorICAgIHJldHVybiBmb3VuZAorICB9LAorICBnZXRBbGxNYXJrczogZnVuY3Rpb24o
KSB7CisgICAgdmFyIG1hcmtlcnMgPSBbXQorICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkg
eworICAgICAgdmFyIHNwcyA9IGxpbmUubWFya2VkU3BhbnMKKyAgICAgIGlmIChzcHMpIHsgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpCisgICAgICAgIHsgaWYgKHNwc1tpXS5m
cm9tICE9IG51bGwpIHsgbWFya2Vycy5wdXNoKHNwc1tpXS5tYXJrZXIpIH0gfSB9CisgICAgfSkK
KyAgICByZXR1cm4gbWFya2VycworICB9LAorCisgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24ob2Zm
KSB7CisgICAgdmFyIGNoLCBsaW5lTm8gPSB0aGlzLmZpcnN0LCBzZXBTaXplID0gdGhpcy5saW5l
U2VwYXJhdG9yKCkubGVuZ3RoCisgICAgdGhpcy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7CisgICAg
ICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgc2VwU2l6ZQorICAgICAgaWYgKHN6ID4gb2Zm
KSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZSB9CisgICAgICBvZmYgLT0gc3oKKyAgICAgICsrbGlu
ZU5vCisgICAgfSkKKyAgICByZXR1cm4gY2xpcFBvcyh0aGlzLCBQb3MobGluZU5vLCBjaCkpCisg
IH0sCisgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgeworICAgIGNvb3JkcyA9IGNs
aXBQb3ModGhpcywgY29vcmRzKQorICAgIHZhciBpbmRleCA9IGNvb3Jkcy5jaAorICAgIGlmIChj
b29yZHMubGluZSA8IHRoaXMuZmlyc3QgfHwgY29vcmRzLmNoIDwgMCkgeyByZXR1cm4gMCB9Cisg
ICAgdmFyIHNlcFNpemUgPSB0aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGgKKyAgICB0aGlzLml0
ZXIodGhpcy5maXJzdCwgY29vcmRzLmxpbmUsIGZ1bmN0aW9uIChsaW5lKSB7IC8vIGl0ZXIgYWJv
cnRzIHdoZW4gY2FsbGJhY2sgcmV0dXJucyBhIHRydXRoeSB2YWx1ZQorICAgICAgaW5kZXggKz0g
bGluZS50ZXh0Lmxlbmd0aCArIHNlcFNpemUKKyAgICB9KQorICAgIHJldHVybiBpbmRleAorICB9
LAorCisgIGNvcHk6IGZ1bmN0aW9uKGNvcHlIaXN0b3J5KSB7CisgICAgdmFyIGRvYyA9IG5ldyBE
b2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksCisg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxp
bmVTZXApCisgICAgZG9jLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVm
dCA9IHRoaXMuc2Nyb2xsTGVmdAorICAgIGRvYy5zZWwgPSB0aGlzLnNlbAorICAgIGRvYy5leHRl
bmQgPSBmYWxzZQorICAgIGlmIChjb3B5SGlzdG9yeSkgeworICAgICAgZG9jLmhpc3RvcnkudW5k
b0RlcHRoID0gdGhpcy5oaXN0b3J5LnVuZG9EZXB0aAorICAgICAgZG9jLnNldEhpc3RvcnkodGhp
cy5nZXRIaXN0b3J5KCkpCisgICAgfQorICAgIHJldHVybiBkb2MKKyAgfSwKKworICBsaW5rZWRE
b2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICBpZiAoIW9wdGlvbnMpIHsgb3B0aW9ucyA9IHt9
IH0KKyAgICB2YXIgZnJvbSA9IHRoaXMuZmlyc3QsIHRvID0gdGhpcy5maXJzdCArIHRoaXMuc2l6
ZQorICAgIGlmIChvcHRpb25zLmZyb20gIT0gbnVsbCAmJiBvcHRpb25zLmZyb20gPiBmcm9tKSB7
IGZyb20gPSBvcHRpb25zLmZyb20gfQorICAgIGlmIChvcHRpb25zLnRvICE9IG51bGwgJiYgb3B0
aW9ucy50byA8IHRvKSB7IHRvID0gb3B0aW9ucy50byB9CisgICAgdmFyIGNvcHkgPSBuZXcgRG9j
KGdldExpbmVzKHRoaXMsIGZyb20sIHRvKSwgb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZU9wdGlv
biwgZnJvbSwgdGhpcy5saW5lU2VwKQorICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIHsgY29w
eS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5CisgICAgOyB9KHRoaXMubGlua2VkIHx8ICh0aGlzLmxp
bmtlZCA9IFtdKSkucHVzaCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhp
c3R9KQorICAgIGNvcHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFy
ZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9XQorICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHks
IGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKQorICAgIHJldHVybiBjb3B5CisgIH0sCisgIHVubGlu
a0RvYzogZnVuY3Rpb24ob3RoZXIpIHsKKyAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgIGlm
IChvdGhlciBpbnN0YW5jZW9mIENvZGVNaXJyb3IpIHsgb3RoZXIgPSBvdGhlci5kb2MgfQorICAg
IGlmICh0aGlzLmxpbmtlZCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0
aDsgKytpKSB7CisgICAgICB2YXIgbGluayA9IHRoaXMkMS5saW5rZWRbaV0KKyAgICAgIGlmIChs
aW5rLmRvYyAhPSBvdGhlcikgeyBjb250aW51ZSB9CisgICAgICB0aGlzJDEubGlua2VkLnNwbGlj
ZShpLCAxKQorICAgICAgb3RoZXIudW5saW5rRG9jKHRoaXMkMSkKKyAgICAgIGRldGFjaFNoYXJl
ZE1hcmtlcnMoZmluZFNoYXJlZE1hcmtlcnModGhpcyQxKSkKKyAgICAgIGJyZWFrCisgICAgfSB9
CisgICAgLy8gSWYgdGhlIGhpc3RvcmllcyB3ZXJlIHNoYXJlZCwgc3BsaXQgdGhlbSBhZ2Fpbgor
ICAgIGlmIChvdGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgeworICAgICAgdmFyIHNwbGl0
SWRzID0gW290aGVyLmlkXQorICAgICAgbGlua2VkRG9jcyhvdGhlciwgZnVuY3Rpb24gKGRvYykg
eyByZXR1cm4gc3BsaXRJZHMucHVzaChkb2MuaWQpOyB9LCB0cnVlKQorICAgICAgb3RoZXIuaGlz
dG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpCisgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5
SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcykKKyAgICAgIG90aGVyLmhp
c3RvcnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxp
dElkcykKKyAgICB9CisgIH0sCisgIGl0ZXJMaW5rZWREb2NzOiBmdW5jdGlvbihmKSB7bGlua2Vk
RG9jcyh0aGlzLCBmKX0sCisKKyAgZ2V0TW9kZTogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMubW9k
ZX0sCisgIGdldEVkaXRvcjogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuY219LAorCisgIHNwbGl0
TGluZXM6IGZ1bmN0aW9uKHN0cikgeworICAgIGlmICh0aGlzLmxpbmVTZXApIHsgcmV0dXJuIHN0
ci5zcGxpdCh0aGlzLmxpbmVTZXApIH0KKyAgICByZXR1cm4gc3BsaXRMaW5lc0F1dG8oc3RyKQor
ICB9LAorICBsaW5lU2VwYXJhdG9yOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZVNlcCB8
fCAiXG4iIH0KK30pCisKKy8vIFB1YmxpYyBhbGlhcy4KK0RvYy5wcm90b3R5cGUuZWFjaExpbmUg
PSBEb2MucHJvdG90eXBlLml0ZXIKKworLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2Ug
SUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzCisvLyByZS1maXJlIGEgc2VyaWVzIG9m
IGRyYWctcmVsYXRlZCBldmVudHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKQordmFyIGxh
c3REcm9wID0gMAorCitmdW5jdGlvbiBvbkRyb3AoZSkgeworICB2YXIgY20gPSB0aGlzCisgIGNs
ZWFyRHJhZ0N1cnNvcihjbSkKKyAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudElu
V2lkZ2V0KGNtLmRpc3BsYXksIGUpKQorICAgIHsgcmV0dXJuIH0KKyAgZV9wcmV2ZW50RGVmYXVs
dChlKQorICBpZiAoaWUpIHsgbGFzdERyb3AgPSArbmV3IERhdGUgfQorICB2YXIgcG9zID0gcG9z
RnJvbU1vdXNlKGNtLCBlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlcworICBp
ZiAoIXBvcyB8fCBjbS5pc1JlYWRPbmx5KCkpIHsgcmV0dXJuIH0KKyAgLy8gTWlnaHQgYmUgYSBm
aWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKKyAgLy8g
YW5kIGluc2VydCBpdC4KKyAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmls
ZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgeworICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0
ID0gQXJyYXkobiksIHJlYWQgPSAwCisgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24gKGZpbGUs
IGkpIHsKKyAgICAgIGlmIChjbS5vcHRpb25zLmFsbG93RHJvcEZpbGVUeXBlcyAmJgorICAgICAg
ICAgIGluZGV4T2YoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsIGZpbGUudHlwZSkgPT0g
LTEpCisgICAgICAgIHsgcmV0dXJuIH0KKworICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVh
ZGVyCisgICAgICByZWFkZXIub25sb2FkID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBjb250ZW50ID0gcmVhZGVyLnJlc3VsdAorICAgICAgICBpZiAoL1tceDAwLVx4
MDhceDBlLVx4MWZdezJ9Ly50ZXN0KGNvbnRlbnQpKSB7IGNvbnRlbnQgPSAiIiB9CisgICAgICAg
IHRleHRbaV0gPSBjb250ZW50CisgICAgICAgIGlmICgrK3JlYWQgPT0gbikgeworICAgICAgICAg
IHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpCisgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9t
OiBwb3MsIHRvOiBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5kb2Muc3Bs
aXRMaW5lcyh0ZXh0LmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luOiAicGFzdGUifQorICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9j
LCBjaGFuZ2UpCisgICAgICAgICAgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoY20uZG9jLCBz
aW1wbGVTZWxlY3Rpb24ocG9zLCBjaGFuZ2VFbmQoY2hhbmdlKSkpCiAgICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBPbiBzb21lIGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9sbGlu
ZyB3aWxsIGNhdXNlIHJlZHJhd3MgdG8KLSAgICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIg
aGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvCi0gICAgLy8gd3JpZ2dsZSBhcm91bmQg
aW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuCi0gICAgLy8gZXN0aW1hdGVk
IHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbAotICAgIC8vIHNj
cm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUs
IGJ1dAotICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCi0gICAgaWYgKGR4ICYmICFn
ZWNrbyAmJiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7Ci0gICAgICBp
ZiAoZHkpCi0gICAgICAgIHNldFNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Ny
b2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xsSGVp
Z2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCkpKTsKLSAgICAgIHNldFNjcm9sbExlZnQoY20sIE1h
dGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1Bl
clVuaXQsIHNjcm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRXaWR0aCkpKTsKLSAgICAg
IGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVsbDsg
Ly8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzCi0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gJ1Byb2plY3QnIHRoZSB2aXNpYmxlIHZpZXdwb3J0IHRvIGNvdmVyIHRoZSBh
cmVhIHRoYXQgaXMgYmVpbmcKLSAgICAvLyBzY3JvbGxlZCBpbnRvIHZpZXcgKGlmIHdlIGtub3cg
ZW5vdWdoIHRvIGVzdGltYXRlIGl0KS4KLSAgICBpZiAoZHkgJiYgd2hlZWxQaXhlbHNQZXJVbml0
ICE9IG51bGwpIHsKLSAgICAgIHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdDsK
LSAgICAgIHZhciB0b3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBkaXNwbGF5Lndy
YXBwZXIuY2xpZW50SGVpZ2h0OwotICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9IE1hdGgubWF4
KDAsIHRvcCArIHBpeGVscyAtIDUwKTsKLSAgICAgIGVsc2UgYm90ID0gTWF0aC5taW4oY20uZG9j
LmhlaWdodCwgYm90ICsgcGl4ZWxzICsgNTApOwotICAgICAgdXBkYXRlRGlzcGxheVNpbXBsZShj
bSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pOwotICAgIH0KLQotICAgIGlmICh3aGVlbFNhbXBs
ZXMgPCAyMCkgewotICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgewotICAg
ICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hl
ZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wOwotICAgICAgICBkaXNwbGF5LndoZWVsRFggPSBk
eDsgZGlzcGxheS53aGVlbERZID0gZHk7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgcmV0dXJuOwotICAg
ICAgICAgIHZhciBtb3ZlZFggPSBzY3JvbGwuc2Nyb2xsTGVmdCAtIGRpc3BsYXkud2hlZWxTdGFy
dFg7Ci0gICAgICAgICAgdmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSBkaXNwbGF5Lndo
ZWVsU3RhcnRZOwotICAgICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIGRpc3BsYXkud2hl
ZWxEWSAmJiBtb3ZlZFkgLyBkaXNwbGF5LndoZWVsRFkpIHx8Ci0gICAgICAgICAgICAobW92ZWRY
ICYmIGRpc3BsYXkud2hlZWxEWCAmJiBtb3ZlZFggLyBkaXNwbGF5LndoZWVsRFgpOwotICAgICAg
ICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKLSAg
ICAgICAgICBpZiAoIXNhbXBsZSkgcmV0dXJuOwotICAgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5p
dCA9ICh3aGVlbFBpeGVsc1BlclVuaXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVs
U2FtcGxlcyArIDEpOwotICAgICAgICAgICsrd2hlZWxTYW1wbGVzOwotICAgICAgICB9LCAyMDAp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlzcGxheS53aGVlbERYICs9IGR4OyBkaXNwbGF5
LndoZWVsRFkgKz0gZHk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gS0VZIEVWRU5UUwot
Ci0gIC8vIFJ1biBhIGhhbmRsZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCi0gIGZ1bmN0aW9u
IGRvSGFuZGxlQmluZGluZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkgewotICAgIGlmICh0eXBlb2Yg
Ym91bmQgPT0gInN0cmluZyIpIHsKLSAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwotICAg
ICAgaWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOworICAgICAgfSkKKyAgICAgIHJlYWRlci5yZWFk
QXNUZXh0KGZpbGUpCisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7IGxv
YWRGaWxlKGZpbGVzW2ldLCBpKSB9CisgIH0gZWxzZSB7IC8vIE5vcm1hbCBkcm9wCisgICAgLy8g
RG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhhcHBlbmVkIGluc2lkZSBvZiB0aGUgc2Vs
ZWN0ZWQgdGV4dC4KKyAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwu
Y29udGFpbnMocG9zKSA+IC0xKSB7CisgICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSkKKyAg
ICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlzIHJlLWZvY3VzZWQKKyAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeyByZXR1cm4gY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCkKKyAg
ICAgIHJldHVybgogICAgIH0KLSAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4g
cmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKLSAgICAvLyBjb25zaXN0ZW50IHZpZXcg
b2YgdGhlIGRvY3VtZW50Ci0gICAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTsKLSAg
ICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlOwogICAgIHRy
eSB7Ci0gICAgICBpZiAoaXNSZWFkT25seShjbSkpIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0
cnVlOwotICAgICAgaWYgKGRyb3BTaGlmdCkgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOwotICAg
ICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBjbS5k
aXNwbGF5LnNoaWZ0ID0gcHJldlNoaWZ0OwotICAgICAgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9
IGZhbHNlOworICAgICAgdmFyIHRleHQkMSA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQi
KQorICAgICAgaWYgKHRleHQkMSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQKKyAgICAgICAgaWYg
KGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhY20uc3RhdGUuZHJhZ2dpbmdUZXh0LmNvcHkpCisg
ICAgICAgICAgeyBzZWxlY3RlZCA9IGNtLmxpc3RTZWxlY3Rpb25zKCkgfQorICAgICAgICBzZXRT
ZWxlY3Rpb25Ob1VuZG8oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zLCBwb3MpKQorICAgICAg
ICBpZiAoc2VsZWN0ZWQpIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2VsZWN0ZWQubGVuZ3Ro
OyArK2kkMSkKKyAgICAgICAgICB7IHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxlY3RlZFtp
JDFdLmFuY2hvciwgc2VsZWN0ZWRbaSQxXS5oZWFkLCAiZHJhZyIpIH0gfQorICAgICAgICBjbS5y
ZXBsYWNlU2VsZWN0aW9uKHRleHQkMSwgImFyb3VuZCIsICJwYXN0ZSIpCisgICAgICAgIGNtLmRp
c3BsYXkuaW5wdXQuZm9jdXMoKQorICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gZG9uZTsKKyAg
ICBjYXRjaChlKXt9CiAgIH0KK30KIAotICBmdW5jdGlvbiBsb29rdXBLZXlGb3JFZGl0b3IoY20s
IG5hbWUsIGhhbmRsZSkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUua2V5TWFw
cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShuYW1lLCBjbS5z
dGF0ZS5rZXlNYXBzW2ldLCBoYW5kbGUsIGNtKTsKLSAgICAgIGlmIChyZXN1bHQpIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiAoY20ub3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3Vw
S2V5KG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBoYW5kbGUsIGNtKSkKLSAgICAgIHx8IGxv
b2t1cEtleShuYW1lLCBjbS5vcHRpb25zLmtleU1hcCwgaGFuZGxlLCBjbSk7Ci0gIH0KLQotICB2
YXIgc3RvcFNlcSA9IG5ldyBEZWxheWVkOwotICBmdW5jdGlvbiBkaXNwYXRjaEtleShjbSwgbmFt
ZSwgZSwgaGFuZGxlKSB7Ci0gICAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTsKLSAgICBpZiAo
c2VxKSB7Ci0gICAgICBpZiAoaXNNb2RpZmllcktleShuYW1lKSkgcmV0dXJuICJoYW5kbGVkIjsK
LSAgICAgIHN0b3BTZXEuc2V0KDUwLCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKGNtLnN0YXRl
LmtleVNlcSA9PSBzZXEpIHsKLSAgICAgICAgICBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsOwotICAg
ICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0g
ICAgICBuYW1lID0gc2VxICsgIiAiICsgbmFtZTsKLSAgICB9Ci0gICAgdmFyIHJlc3VsdCA9IGxv
b2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKTsKK2Z1bmN0aW9uIG9uRHJhZ1N0YXJ0
KGNtLCBlKSB7CisgIGlmIChpZSAmJiAoIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8fCArbmV3IERh
dGUgLSBsYXN0RHJvcCA8IDEwMCkpIHsgZV9zdG9wKGUpOyByZXR1cm4gfQorICBpZiAoc2lnbmFs
RE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHsgcmV0dXJu
IH0KIAotICAgIGlmIChyZXN1bHQgPT0gIm11bHRpIikKLSAgICAgIGNtLnN0YXRlLmtleVNlcSA9
IG5hbWU7Ci0gICAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIpCi0gICAgICBzaWduYWxMYXRlcihj
bSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09ICJoYW5k
bGVkIiB8fCByZXN1bHQgPT0gIm11bHRpIikgewotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
LSAgICAgIHJlc3RhcnRCbGluayhjbSk7Ci0gICAgfQotCi0gICAgaWYgKHNlcSAmJiAhcmVzdWx0
ICYmIC9cJyQvLnRlc3QobmFtZSkpIHsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotICB9Ci0KLSAgLy8g
SGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuCi0gIGZ1bmN0aW9uIGhhbmRsZUtl
eUJpbmRpbmcoY20sIGUpIHsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSk7Ci0gICAg
aWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZS5zaGlmdEtleSAmJiAhY20uc3Rh
dGUua2V5U2VxKSB7Ci0gICAgICAvLyBGaXJzdCB0cnkgdG8gcmVzb2x2ZSBmdWxsIG5hbWUgKGlu
Y2x1ZGluZyAnU2hpZnQtJykuIEZhaWxpbmcKLSAgICAgIC8vIHRoYXQsIHNlZSBpZiB0aGVyZSBp
cyBhIGN1cnNvci1tb3Rpb24gY29tbWFuZCAoc3RhcnRpbmcgd2l0aAotICAgICAgLy8gJ2dvJykg
Ym91bmQgdG8gdGhlIGtleW5hbWUgd2l0aG91dCAnU2hpZnQtJy4KLSAgICAgIHJldHVybiBkaXNw
YXRjaEtleShjbSwgIlNoaWZ0LSIgKyBuYW1lLCBlLCBmdW5jdGlvbihiKSB7cmV0dXJuIGRvSGFu
ZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7fSkKLSAgICAgICAgICB8fCBkaXNwYXRjaEtleShjbSwg
bmFtZSwgZSwgZnVuY3Rpb24oYikgewotICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJz
dHJpbmciID8gL15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24pCi0gICAgICAgICAgICAgICAg
IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOwotICAgICAgICAgICAgIH0pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uKGIp
IHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwotICAgIH0KLSAgfQotCi0gIC8v
IEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudAotICBmdW5jdGlvbiBoYW5kbGVD
aGFyQmluZGluZyhjbSwgZSwgY2gpIHsKLSAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICInIiAr
IGNoICsgIiciLCBlLAotICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVy
biBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsKLSAgfQorICBlLmRhdGFUcmFuc2Zl
ci5zZXREYXRhKCJUZXh0IiwgY20uZ2V0U2VsZWN0aW9uKCkpCisgIGUuZGF0YVRyYW5zZmVyLmVm
ZmVjdEFsbG93ZWQgPSAiY29weU1vdmUiCiAKLSAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDsK
LSAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHsKLSAgICB2YXIgY20gPSB0aGlzOwotICAgIGNtLmN1
ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkg
cmV0dXJuOwotICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCi0gICAg
aWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIGUucmV0dXJuVmFs
dWUgPSBmYWxzZTsKLSAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKLSAgICBjbS5kaXNwbGF5LnNo
aWZ0ID0gY29kZSA9PSAxNiB8fCBlLnNoaWZ0S2V5OwotICAgIHZhciBoYW5kbGVkID0gaGFuZGxl
S2V5QmluZGluZyhjbSwgZSk7CisgIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1
bHQgYnJvd3NlcnMgaW1hZ2UuCisgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRl
bmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0
aGVyZS4KKyAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7Cisg
ICAgdmFyIGltZyA9IGVsdCgiaW1nIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBmaXhlZDsgbGVm
dDogMDsgdG9wOiAwOyIpCisgICAgaW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBs
R09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIKICAgICBp
ZiAocHJlc3RvKSB7Ci0gICAgICBsYXN0U3RvcHBlZEtleSA9IGhhbmRsZWQgPyBjb2RlIDogbnVs
bDsKLSAgICAgIC8vIE9wZXJhIGhhcyBubyBjdXQgZXZlbnQuLi4gd2UgdHJ5IHRvIGF0IGxlYXN0
IGNhdGNoIHRoZSBrZXkgY29tYm8KLSAgICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYm
ICFoYXNDb3B5RXZlbnQgJiYgKG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpCi0gICAgICAg
IGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICJjdXQiKTsKKyAgICAgIGltZy53aWR0aCA9
IGltZy5oZWlnaHQgPSAxCisgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1n
KQorICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBpbWFn
ZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbgorICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9w
CiAgICAgfQotCi0gICAgLy8gVHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVuIEFsdCBpcyBo
ZWxkIG9uIE1hYy4KLSAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xiQ29kZU1pcnJvci1jcm9zc2hh
aXJcYi8udGVzdChjbS5kaXNwbGF5LmxpbmVEaXYuY2xhc3NOYW1lKSkKLSAgICAgIHNob3dDcm9z
c0hhaXIoY20pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkgewotICAgIHZh
ciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2OwotICAgIGFkZENsYXNzKGxpbmVEaXYsICJD
b2RlTWlycm9yLWNyb3NzaGFpciIpOwotCi0gICAgZnVuY3Rpb24gdXAoZSkgewotICAgICAgaWYg
KGUua2V5Q29kZSA9PSAxOCB8fCAhZS5hbHRLZXkpIHsKLSAgICAgICAgcm1DbGFzcyhsaW5lRGl2
LCAiQ29kZU1pcnJvci1jcm9zc2hhaXIiKTsKLSAgICAgICAgb2ZmKGRvY3VtZW50LCAia2V5dXAi
LCB1cCk7Ci0gICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgb24oZG9jdW1lbnQsICJrZXl1cCIsIHVwKTsKLSAgICBvbihkb2N1bWVudCwg
Im1vdXNlb3ZlciIsIHVwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIG9uS2V5VXAoZSkgewotICAgIGlm
IChlLmtleUNvZGUgPT0gMTYpIHRoaXMuZG9jLnNlbC5zaGlmdCA9IGZhbHNlOwotICAgIHNpZ25h
bERPTUV2ZW50KHRoaXMsIGUpOwotICB9Ci0KLSAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7Ci0g
ICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8
fCBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBtYWMg
JiYgZS5tZXRhS2V5KSByZXR1cm47Ci0gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJD
b2RlID0gZS5jaGFyQ29kZTsKLSAgICBpZiAocHJlc3RvICYmIGtleUNvZGUgPT0gbGFzdFN0b3Bw
ZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVy
bjt9Ci0gICAgaWYgKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpICYmIGhh
bmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47Ci0gICAgdmFyIGNoID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsKLSAgICBpZiAo
aGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOwotICAgIGNtLmRpc3BsYXkuaW5w
dXQub25LZXlQcmVzcyhlKTsKLSAgfQotCi0gIC8vIEZPQ1VTL0JMVVIgRVZFTlRTCi0KLSAgZnVu
Y3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHsKLSAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVu
dCA9IHRydWU7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgIGlmIChjbS5zdGF0
ZS5kZWxheWluZ0JsdXJFdmVudCkgewotICAgICAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVu
dCA9IGZhbHNlOwotICAgICAgICBvbkJsdXIoY20pOwotICAgICAgfQotICAgIH0sIDEwMCk7Ci0g
IH0KLQotICBmdW5jdGlvbiBvbkZvY3VzKGNtKSB7Ci0gICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5n
Qmx1ckV2ZW50KSBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOwotCi0gICAgaWYg
KGNtLm9wdGlvbnMucmVhZE9ubHkgPT0gIm5vY3Vyc29yIikgcmV0dXJuOwotICAgIGlmICghY20u
c3RhdGUuZm9jdXNlZCkgewotICAgICAgc2lnbmFsKGNtLCAiZm9jdXMiLCBjbSk7Ci0gICAgICBj
bS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTsKLSAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBl
ciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwotICAgICAgLy8gVGhpcyB0ZXN0IHByZXZlbnRzIHRo
aXMgZnJvbSBmaXJpbmcgd2hlbiBhIGNvbnRleHQKLSAgICAgIC8vIG1lbnUgaXMgY2xvc2VkIChz
aW5jZSB0aGUgaW5wdXQgcmVzZXQgd291bGQga2lsbCB0aGUKLSAgICAgIC8vIHNlbGVjdC1hbGwg
ZGV0ZWN0aW9uIGhhY2spCi0gICAgICBpZiAoIWNtLmN1ck9wICYmIGNtLmRpc3BsYXkuc2VsRm9y
Q29udGV4dE1lbnUgIT0gY20uZG9jLnNlbCkgewotICAgICAgICBjbS5kaXNwbGF5LmlucHV0LnJl
c2V0KCk7Ci0gICAgICAgIGlmICh3ZWJraXQpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNtLmRp
c3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgLy8gSXNzdWUgIzE3MzAKLSAgICAgIH0K
LSAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVjZWl2ZWRGb2N1cygpOwotICAgIH0KLSAgICByZXN0
YXJ0QmxpbmsoY20pOworICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDAp
CisgICAgaWYgKHByZXN0bykgeyBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpIH0KICAg
fQotICBmdW5jdGlvbiBvbkJsdXIoY20pIHsKLSAgICBpZiAoY20uc3RhdGUuZGVsYXlpbmdCbHVy
RXZlbnQpIHJldHVybjsKLQotICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSB7Ci0gICAgICBzaWdu
YWwoY20sICJibHVyIiwgY20pOwotICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlOwotICAg
ICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3VzZWQiKTsKLSAg
ICB9Ci0gICAgY2xlYXJJbnRlcnZhbChjbS5kaXNwbGF5LmJsaW5rZXIpOwotICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7aWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNwbGF5LnNoaWZ0ID0g
ZmFsc2U7fSwgMTUwKTsKK30KKworZnVuY3Rpb24gb25EcmFnT3ZlcihjbSwgZSkgeworICB2YXIg
cG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKQorICBpZiAoIXBvcykgeyByZXR1cm4gfQorICB2YXIg
ZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQorICBkcmF3U2VsZWN0aW9u
Q3Vyc29yKGNtLCBwb3MsIGZyYWcpCisgIGlmICghY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7Cisg
ICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1j
dXJzb3JzIENvZGVNaXJyb3ItZHJhZ2N1cnNvcnMiKQorICAgIGNtLmRpc3BsYXkubGluZVNwYWNl
Lmluc2VydEJlZm9yZShjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGNtLmRpc3BsYXkuY3Vyc29yRGl2
KQogICB9CisgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgZnJh
ZykKK30KIAotICAvLyBDT05URVhUIE1FTlUgSEFORExJTkcKLQotICAvLyBUbyBtYWtlIHRoZSBj
b250ZXh0IG1lbnUgd29yaywgd2UgbmVlZCB0byBicmllZmx5IHVuaGlkZSB0aGUKLSAgLy8gdGV4
dGFyZWEgKG1ha2luZyBpdCBhcyB1bm9idHJ1c2l2ZSBhcyBwb3NzaWJsZSkgdG8gbGV0IHRoZQot
ICAvLyByaWdodC1jbGljayB0YWtlIGVmZmVjdCBvbiBpdC4KLSAgZnVuY3Rpb24gb25Db250ZXh0
TWVudShjbSwgZSkgewotICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8IGNv
bnRleHRNZW51SW5HdXR0ZXIoY20sIGUpKSByZXR1cm47Ci0gICAgY20uZGlzcGxheS5pbnB1dC5v
bkNvbnRleHRNZW51KGUpOworZnVuY3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7CisgIGlmIChj
bS5kaXNwbGF5LmRyYWdDdXJzb3IpIHsKKyAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVD
aGlsZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IpCisgICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0g
bnVsbAogICB9Ci0KLSAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkgewotICAg
IGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNvbnRleHRNZW51IikpIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDb250ZXh0TWVudSIsIGZhbHNl
LCBzaWduYWwpOworfQorCisvLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgY2FyZWZ1bGx5LCBiZWNh
dXNlIG5haXZlbHkgcmVnaXN0ZXJpbmcgYQorLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2ls
bCBjYXVzZSB0aGUgZWRpdG9ycyB0byBuZXZlciBiZQorLy8gZ2FyYmFnZSBjb2xsZWN0ZWQuCisK
K2Z1bmN0aW9uIGZvckVhY2hDb2RlTWlycm9yKGYpIHsKKyAgaWYgKCFkb2N1bWVudC5ib2R5Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUpIHsgcmV0dXJuIH0KKyAgdmFyIGJ5Q2xhc3MgPSBkb2N1bWVu
dC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3IiKQorICBmb3IgKHZhciBp
ID0gMDsgaSA8IGJ5Q2xhc3MubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgY20gPSBieUNsYXNzW2ld
LkNvZGVNaXJyb3IKKyAgICBpZiAoY20pIHsgZihjbSkgfQogICB9Ci0KLSAgLy8gVVBEQVRJTkcK
LQotICAvLyBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIGEgY2hhbmdlIChpdHMg
J3RvJyBwcm9wZXJ0eQotICAvLyByZWZlcnMgdG8gdGhlIHByZS1jaGFuZ2UgZW5kKS4KLSAgdmFy
IGNoYW5nZUVuZCA9IENvZGVNaXJyb3IuY2hhbmdlRW5kID0gZnVuY3Rpb24oY2hhbmdlKSB7Ci0g
ICAgaWYgKCFjaGFuZ2UudGV4dCkgcmV0dXJuIGNoYW5nZS50bzsKLSAgICByZXR1cm4gUG9zKGNo
YW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLAotICAgICAgICAgICAgICAg
bHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFu
Z2UuZnJvbS5jaCA6IDApKTsKLSAgfTsKLQotICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZl
ciB0byB0aGUgcG9zdC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlCi0gIC8vIHNhbWUgdGV4dCwgb3Ig
dGhlIGVuZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgotICBmdW5jdGlv
biBhZGp1c3RGb3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdl
LmZyb20pIDwgMCkgcmV0dXJuIHBvczsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAw
KSByZXR1cm4gY2hhbmdlRW5kKGNoYW5nZSk7Ci0KLSAgICB2YXIgbGluZSA9IHBvcy5saW5lICsg
Y2hhbmdlLnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkg
LSAxLCBjaCA9IHBvcy5jaDsKLSAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNo
ICs9IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOwotICAgIHJldHVybiBQb3Mo
bGluZSwgY2gpOwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlKSB7Ci0gICAgdmFyIG91dCA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9j
LnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFu
Z2VzW2ldOwotICAgICAgb3V0LnB1c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5h
bmNob3IsIGNoYW5nZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdl
KHJhbmdlLmhlYWQsIGNoYW5nZSkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVj
dGlvbihvdXQsIGRvYy5zZWwucHJpbUluZGV4KTsKK30KKwordmFyIGdsb2JhbHNSZWdpc3RlcmVk
ID0gZmFsc2UKK2Z1bmN0aW9uIGVuc3VyZUdsb2JhbEhhbmRsZXJzKCkgeworICBpZiAoZ2xvYmFs
c1JlZ2lzdGVyZWQpIHsgcmV0dXJuIH0KKyAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVycygpCisgIGds
b2JhbHNSZWdpc3RlcmVkID0gdHJ1ZQorfQorZnVuY3Rpb24gcmVnaXN0ZXJHbG9iYWxIYW5kbGVy
cygpIHsKKyAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHdlIG5lZWQgdG8gcmVmcmVzaCBh
Y3RpdmUgZWRpdG9ycy4KKyAgdmFyIHJlc2l6ZVRpbWVyCisgIG9uKHdpbmRvdywgInJlc2l6ZSIs
IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkgeyByZXNpemVUaW1l
ciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgcmVzaXplVGltZXIgPSBudWxsCisg
ICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSkKKyAgICB9LCAxMDApIH0KKyAgfSkKKyAg
Ly8gV2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLCB3ZSB3YW50IHRvIHNob3cgdGhlIGVkaXRv
ciBhcyBibHVycmVkCisgIG9uKHdpbmRvdywgImJsdXIiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBm
b3JFYWNoQ29kZU1pcnJvcihvbkJsdXIpOyB9KQorfQorLy8gQ2FsbGVkIHdoZW4gdGhlIHdpbmRv
dyByZXNpemVzCitmdW5jdGlvbiBvblJlc2l6ZShjbSkgeworICB2YXIgZCA9IGNtLmRpc3BsYXkK
KyAgaWYgKGQubGFzdFdyYXBIZWlnaHQgPT0gZC53cmFwcGVyLmNsaWVudEhlaWdodCAmJiBkLmxh
c3RXcmFwV2lkdGggPT0gZC53cmFwcGVyLmNsaWVudFdpZHRoKQorICAgIHsgcmV0dXJuIH0KKyAg
Ly8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy4K
KyAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRp
bmdIID0gbnVsbAorICBkLnNjcm9sbGJhcnNDbGlwcGVkID0gZmFsc2UKKyAgY20uc2V0U2l6ZSgp
Cit9CisKK3ZhciBrZXlOYW1lcyA9IHsKKyAgMzogIkVudGVyIiwgODogIkJhY2tzcGFjZSIsIDk6
ICJUYWIiLCAxMzogIkVudGVyIiwgMTY6ICJTaGlmdCIsIDE3OiAiQ3RybCIsIDE4OiAiQWx0IiwK
KyAgMTk6ICJQYXVzZSIsIDIwOiAiQ2Fwc0xvY2siLCAyNzogIkVzYyIsIDMyOiAiU3BhY2UiLCAz
MzogIlBhZ2VVcCIsIDM0OiAiUGFnZURvd24iLCAzNTogIkVuZCIsCisgIDM2OiAiSG9tZSIsIDM3
OiAiTGVmdCIsIDM4OiAiVXAiLCAzOTogIlJpZ2h0IiwgNDA6ICJEb3duIiwgNDQ6ICJQcmludFNj
cm4iLCA0NTogIkluc2VydCIsCisgIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgNjE6ICI9IiwgOTE6
ICJNb2QiLCA5MjogIk1vZCIsIDkzOiAiTW9kIiwKKyAgMTA2OiAiKiIsIDEwNzogIj0iLCAxMDk6
ICItIiwgMTEwOiAiLiIsIDExMTogIi8iLCAxMjc6ICJEZWxldGUiLAorICAxNzM6ICItIiwgMTg2
OiAiOyIsIDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwg
MTkyOiAiYCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsCisgIDIyMTogIl0iLCAyMjI6ICInIiwgNjMy
MzI6ICJVcCIsIDYzMjMzOiAiRG93biIsIDYzMjM0OiAiTGVmdCIsIDYzMjM1OiAiUmlnaHQiLCA2
MzI3MjogIkRlbGV0ZSIsCisgIDYzMjczOiAiSG9tZSIsIDYzMjc1OiAiRW5kIiwgNjMyNzY6ICJQ
YWdlVXAiLCA2MzI3NzogIlBhZ2VEb3duIiwgNjMzMDI6ICJJbnNlcnQiCit9CisKKy8vIE51bWJl
ciBrZXlzCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsga2V5TmFtZXNbaSArIDQ4XSA9
IGtleU5hbWVzW2kgKyA5Nl0gPSBTdHJpbmcoaSkgfQorLy8gQWxwaGFiZXRpYyBrZXlzCitmb3Ig
KHZhciBpJDEgPSA2NTsgaSQxIDw9IDkwOyBpJDErKykgeyBrZXlOYW1lc1tpJDFdID0gU3RyaW5n
LmZyb21DaGFyQ29kZShpJDEpIH0KKy8vIEZ1bmN0aW9uIGtleXMKK2ZvciAodmFyIGkkMiA9IDE7
IGkkMiA8PSAxMjsgaSQyKyspIHsga2V5TmFtZXNbaSQyICsgMTExXSA9IGtleU5hbWVzW2kkMiAr
IDYzMjM1XSA9ICJGIiArIGkkMiB9CisKK3ZhciBrZXlNYXAgPSB7fQorCitrZXlNYXAuYmFzaWMg
PSB7CisgICJMZWZ0IjogImdvQ2hhckxlZnQiLCAiUmlnaHQiOiAiZ29DaGFyUmlnaHQiLCAiVXAi
OiAiZ29MaW5lVXAiLCAiRG93biI6ICJnb0xpbmVEb3duIiwKKyAgIkVuZCI6ICJnb0xpbmVFbmQi
LCAiSG9tZSI6ICJnb0xpbmVTdGFydFNtYXJ0IiwgIlBhZ2VVcCI6ICJnb1BhZ2VVcCIsICJQYWdl
RG93biI6ICJnb1BhZ2VEb3duIiwKKyAgIkRlbGV0ZSI6ICJkZWxDaGFyQWZ0ZXIiLCAiQmFja3Nw
YWNlIjogImRlbENoYXJCZWZvcmUiLCAiU2hpZnQtQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUi
LAorICAiVGFiIjogImRlZmF1bHRUYWIiLCAiU2hpZnQtVGFiIjogImluZGVudEF1dG8iLAorICAi
RW50ZXIiOiAibmV3bGluZUFuZEluZGVudCIsICJJbnNlcnQiOiAidG9nZ2xlT3ZlcndyaXRlIiwK
KyAgIkVzYyI6ICJzaW5nbGVTZWxlY3Rpb24iCit9CisvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5k
IGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQorLy8gZGVmYXVsdC4gVXNl
ciBjb2RlIG9yIGFkZG9ucyBjYW4gZGVmaW5lIHRoZW0uIFVua25vd24gY29tbWFuZHMKKy8vIGFy
ZSBzaW1wbHkgaWdub3JlZC4KK2tleU1hcC5wY0RlZmF1bHQgPSB7CisgICJDdHJsLUEiOiAic2Vs
ZWN0QWxsIiwgIkN0cmwtRCI6ICJkZWxldGVMaW5lIiwgIkN0cmwtWiI6ICJ1bmRvIiwgIlNoaWZ0
LUN0cmwtWiI6ICJyZWRvIiwgIkN0cmwtWSI6ICJyZWRvIiwKKyAgIkN0cmwtSG9tZSI6ICJnb0Rv
Y1N0YXJ0IiwgIkN0cmwtRW5kIjogImdvRG9jRW5kIiwgIkN0cmwtVXAiOiAiZ29MaW5lVXAiLCAi
Q3RybC1Eb3duIjogImdvTGluZURvd24iLAorICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0Iiwg
IkN0cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0Iiwg
IkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAorICAiQ3RybC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBC
ZWZvcmUiLCAiQ3RybC1EZWxldGUiOiAiZGVsR3JvdXBBZnRlciIsICJDdHJsLVMiOiAic2F2ZSIs
ICJDdHJsLUYiOiAiZmluZCIsCisgICJDdHJsLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ3RybC1H
IjogImZpbmRQcmV2IiwgIlNoaWZ0LUN0cmwtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUN0cmwtUiI6
ICJyZXBsYWNlQWxsIiwKKyAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJpbmRl
bnRNb3JlIiwKKyAgIkN0cmwtVSI6ICJ1bmRvU2VsZWN0aW9uIiwgIlNoaWZ0LUN0cmwtVSI6ICJy
ZWRvU2VsZWN0aW9uIiwgIkFsdC1VIjogInJlZG9TZWxlY3Rpb24iLAorICBmYWxsdGhyb3VnaDog
ImJhc2ljIgorfQorLy8gVmVyeSBiYXNpYyByZWFkbGluZS9lbWFjcy1zdHlsZSBiaW5kaW5ncywg
d2hpY2ggYXJlIHN0YW5kYXJkIG9uIE1hYy4KK2tleU1hcC5lbWFjc3kgPSB7CisgICJDdHJsLUYi
OiAiZ29DaGFyUmlnaHQiLCAiQ3RybC1CIjogImdvQ2hhckxlZnQiLCAiQ3RybC1QIjogImdvTGlu
ZVVwIiwgIkN0cmwtTiI6ICJnb0xpbmVEb3duIiwKKyAgIkFsdC1GIjogImdvV29yZFJpZ2h0Iiwg
IkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6
ICJnb0xpbmVFbmQiLAorICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjog
ImdvUGFnZVVwIiwgIkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJC
ZWZvcmUiLAorICAiQWx0LUQiOiAiZGVsV29yZEFmdGVyIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVs
V29yZEJlZm9yZSIsICJDdHJsLUsiOiAia2lsbExpbmUiLCAiQ3RybC1UIjogInRyYW5zcG9zZUNo
YXJzIiwKKyAgIkN0cmwtTyI6ICJvcGVuTGluZSIKK30KK2tleU1hcC5tYWNEZWZhdWx0ID0gewor
ICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAi
dW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjogInJlZG8iLAorICAiQ21kLUhv
bWUiOiAiZ29Eb2NTdGFydCIsICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdv
RG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0
IiwKKyAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lTGVm
dCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lUmlnaHQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91
cEJlZm9yZSIsCisgICJDdHJsLUFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQt
RGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5k
IiwKKyAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNt
ZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKKyAg
IkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3Nw
YWNlIjogImRlbFdyYXBwZWRMaW5lTGVmdCIsICJDbWQtRGVsZXRlIjogImRlbFdyYXBwZWRMaW5l
UmlnaHQiLAorICAiQ21kLVUiOiAidW5kb1NlbGVjdGlvbiIsICJTaGlmdC1DbWQtVSI6ICJyZWRv
U2VsZWN0aW9uIiwgIkN0cmwtVXAiOiAiZ29Eb2NTdGFydCIsICJDdHJsLURvd24iOiAiZ29Eb2NF
bmQiLAorICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQorfQora2V5TWFwWyJkZWZh
dWx0Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQKKworLy8g
S0VZTUFQIERJU1BBVENICisKK2Z1bmN0aW9uIG5vcm1hbGl6ZUtleU5hbWUobmFtZSkgeworICB2
YXIgcGFydHMgPSBuYW1lLnNwbGl0KC8tKD8hJCkvKQorICBuYW1lID0gcGFydHNbcGFydHMubGVu
Z3RoIC0gMV0KKyAgdmFyIGFsdCwgY3RybCwgc2hpZnQsIGNtZAorICBmb3IgKHZhciBpID0gMDsg
aSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgeworICAgIHZhciBtb2QgPSBwYXJ0c1tpXQorICAg
IGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIHsgY21kID0gdHJ1ZSB9CisgICAgZWxz
ZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSB7IGFsdCA9IHRydWUgfQorICAgIGVsc2UgaWYg
KC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpIHsgY3RybCA9IHRydWUgfQorICAgIGVs
c2UgaWYgKC9ecyhoaWZ0KT8kL2kudGVzdChtb2QpKSB7IHNoaWZ0ID0gdHJ1ZSB9CisgICAgZWxz
ZSB7IHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIgKyBtb2Qp
IH0KICAgfQotCi0gIGZ1bmN0aW9uIG9mZnNldFBvcyhwb3MsIG9sZCwgbncpIHsKLSAgICBpZiAo
cG9zLmxpbmUgPT0gb2xkLmxpbmUpCi0gICAgICByZXR1cm4gUG9zKG53LmxpbmUsIHBvcy5jaCAt
IG9sZC5jaCArIG53LmNoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gUG9zKG53LmxpbmUgKyAo
cG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCk7Ci0gIH0KLQotICAvLyBVc2VkIGJ5IHJlcGxh
Y2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0aW9uIHRvIHRoZQotICAvLyBz
dGFydCBvciBhcm91bmQgdGhlIHJlcGxhY2VkIHRlc3QuIEhpbnQgbWF5IGJlICJzdGFydCIgb3Ig
ImFyb3VuZCIuCi0gIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChkb2MsIGNoYW5nZXMsIGhp
bnQpIHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgdmFyIG9sZFByZXYgPSBQb3MoZG9jLmZpcnN0
LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2Vz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTsKLSAgICAgIHZh
ciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2LCBuZXdQcmV2KTsKLSAgICAg
IHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xkUHJldiwgbmV3UHJldik7
Ci0gICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvOwotICAgICAgbmV3UHJldiA9IHRvOwotICAgICAg
aWYgKGhpbnQgPT0gImFyb3VuZCIpIHsKLSAgICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5n
ZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNob3IpIDwgMDsKLSAgICAgICAg
b3V0W2ldID0gbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKTsKKyAg
aWYgKGFsdCkgeyBuYW1lID0gIkFsdC0iICsgbmFtZSB9CisgIGlmIChjdHJsKSB7IG5hbWUgPSAi
Q3RybC0iICsgbmFtZSB9CisgIGlmIChjbWQpIHsgbmFtZSA9ICJDbWQtIiArIG5hbWUgfQorICBp
ZiAoc2hpZnQpIHsgbmFtZSA9ICJTaGlmdC0iICsgbmFtZSB9CisgIHJldHVybiBuYW1lCit9CisK
Ky8vIFRoaXMgaXMgYSBrbHVkZ2UgdG8ga2VlcCBrZXltYXBzIG1vc3RseSB3b3JraW5nIGFzIHJh
dyBvYmplY3RzCisvLyAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpIHdoaWxlIGF0IHRoZSBzYW1l
IHRpbWUgc3VwcG9ydCBmZWF0dXJlcworLy8gbGlrZSBub3JtYWxpemF0aW9uIGFuZCBtdWx0aS1z
dHJva2Uga2V5IGJpbmRpbmdzLiBJdCBjb21waWxlcyBhCisvLyBuZXcgbm9ybWFsaXplZCBrZXlt
YXAsIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG9sZCBvYmplY3QgdG8gcmVmbGVjdAorLy8gdGhpcy4K
K2Z1bmN0aW9uIG5vcm1hbGl6ZUtleU1hcChrZXltYXApIHsKKyAgdmFyIGNvcHkgPSB7fQorICBm
b3IgKHZhciBrZXluYW1lIGluIGtleW1hcCkgeyBpZiAoa2V5bWFwLmhhc093blByb3BlcnR5KGtl
eW5hbWUpKSB7CisgICAgdmFyIHZhbHVlID0ga2V5bWFwW2tleW5hbWVdCisgICAgaWYgKC9eKG5h
bWV8ZmFsbHRocm91Z2h8KGRlfGF0KXRhY2gpJC8udGVzdChrZXluYW1lKSkgeyBjb250aW51ZSB9
CisgICAgaWYgKHZhbHVlID09ICIuLi4iKSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRp
bnVlIH0KKworICAgIHZhciBrZXlzID0gbWFwKGtleW5hbWUuc3BsaXQoIiAiKSwgbm9ybWFsaXpl
S2V5TmFtZSkKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciB2YWwgPSAodm9pZCAwKSwgbmFtZSA9ICh2b2lkIDApCisgICAgICBpZiAoaSA9PSBr
ZXlzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgbmFtZSA9IGtleXMuam9pbigiICIpCisgICAgICAg
IHZhbCA9IHZhbHVlCiAgICAgICB9IGVsc2UgewotICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2Uo
ZnJvbSwgZnJvbSk7CisgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCIg
IikKKyAgICAgICAgdmFsID0gIi4uLiIKICAgICAgIH0KKyAgICAgIHZhciBwcmV2ID0gY29weVtu
YW1lXQorICAgICAgaWYgKCFwcmV2KSB7IGNvcHlbbmFtZV0gPSB2YWwgfQorICAgICAgZWxzZSBp
ZiAocHJldiAhPSB2YWwpIHsgdGhyb3cgbmV3IEVycm9yKCJJbmNvbnNpc3RlbnQgYmluZGluZ3Mg
Zm9yICIgKyBuYW1lKSB9CiAgICAgfQotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgZG9j
LnNlbC5wcmltSW5kZXgpOwotICB9Ci0KLSAgLy8gQWxsb3cgImJlZm9yZUNoYW5nZSIgZXZlbnQg
aGFuZGxlcnMgdG8gaW5mbHVlbmNlIGEgY2hhbmdlCi0gIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShk
b2MsIGNoYW5nZSwgdXBkYXRlKSB7Ci0gICAgdmFyIG9iaiA9IHsKLSAgICAgIGNhbmNlbGVkOiBm
YWxzZSwKLSAgICAgIGZyb206IGNoYW5nZS5mcm9tLAotICAgICAgdG86IGNoYW5nZS50bywKLSAg
ICAgIHRleHQ6IGNoYW5nZS50ZXh0LAotICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLAotICAg
ICAgY2FuY2VsOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxlZCA9IHRydWU7IH0KLSAgICB9Owot
ICAgIGlmICh1cGRhdGUpIG9iai51cGRhdGUgPSBmdW5jdGlvbihmcm9tLCB0bywgdGV4dCwgb3Jp
Z2luKSB7Ci0gICAgICBpZiAoZnJvbSkgdGhpcy5mcm9tID0gY2xpcFBvcyhkb2MsIGZyb20pOwot
ICAgICAgaWYgKHRvKSB0aGlzLnRvID0gY2xpcFBvcyhkb2MsIHRvKTsKLSAgICAgIGlmICh0ZXh0
KSB0aGlzLnRleHQgPSB0ZXh0OwotICAgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB0aGlz
Lm9yaWdpbiA9IG9yaWdpbjsKLSAgICB9OwotICAgIHNpZ25hbChkb2MsICJiZWZvcmVDaGFuZ2Ui
LCBkb2MsIG9iaik7Ci0gICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJlZm9yZUNoYW5n
ZSIsIGRvYy5jbSwgb2JqKTsKLQotICAgIGlmIChvYmouY2FuY2VsZWQpIHJldHVybiBudWxsOwot
ICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmoudG8sIHRleHQ6IG9iai50ZXh0LCBv
cmlnaW46IG9iai5vcmlnaW59OwotICB9Ci0KLSAgLy8gQXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1
bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQncwotICAvLyBoaXN0b3J5LCBhbmQgcHJv
cGFnYXRpbmcgaXQgdG8gYWxsIGxpbmtlZCBkb2N1bWVudHMuCi0gIGZ1bmN0aW9uIG1ha2VDaGFu
Z2UoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB7Ci0gICAgaWYgKGRvYy5jbSkgewotICAg
ICAgaWYgKCFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdl
KShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpOwotICAgICAgaWYgKGRvYy5jbS5zdGF0ZS5z
dXBwcmVzc0VkaXRzKSByZXR1cm47Ci0gICAgfQorICAgIGRlbGV0ZSBrZXltYXBba2V5bmFtZV0K
KyAgfSB9CisgIGZvciAodmFyIHByb3AgaW4gY29weSkgeyBrZXltYXBbcHJvcF0gPSBjb3B5W3By
b3BdIH0KKyAgcmV0dXJuIGtleW1hcAorfQogCi0gICAgaWYgKGhhc0hhbmRsZXIoZG9jLCAiYmVm
b3JlQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdl
IikpIHsKLSAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7Ci0g
ICAgICBpZiAoIWNoYW5nZSkgcmV0dXJuOwotICAgIH0KK2Z1bmN0aW9uIGxvb2t1cEtleShrZXks
IG1hcCwgaGFuZGxlLCBjb250ZXh0KSB7CisgIG1hcCA9IGdldEtleU1hcChtYXApCisgIHZhciBm
b3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldCisgIGlm
IChmb3VuZCA9PT0gZmFsc2UpIHsgcmV0dXJuICJub3RoaW5nIiB9CisgIGlmIChmb3VuZCA9PT0g
Ii4uLiIpIHsgcmV0dXJuICJtdWx0aSIgfQorICBpZiAoZm91bmQgIT0gbnVsbCAmJiBoYW5kbGUo
Zm91bmQpKSB7IHJldHVybiAiaGFuZGxlZCIgfQogCi0gICAgLy8gUG9zc2libHkgc3BsaXQgb3Ig
c3VwcHJlc3MgdGhlIHVwZGF0ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UKLSAgICAvLyBvZiByZWFk
LW9ubHkgc3BhbnMgaW4gaXRzIHJhbmdlLgotICAgIHZhciBzcGxpdCA9IHNhd1JlYWRPbmx5U3Bh
bnMgJiYgIWlnbm9yZVJlYWRPbmx5ICYmIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgY2hhbmdl
LmZyb20sIGNoYW5nZS50byk7Ci0gICAgaWYgKHNwbGl0KSB7Ci0gICAgICBmb3IgKHZhciBpID0g
c3BsaXQubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgIG1ha2VDaGFuZ2VJbm5lcihk
b2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8sIHRleHQ6IGkgPyBbIiJd
IDogY2hhbmdlLnRleHR9KTsKLSAgICB9IGVsc2UgewotICAgICAgbWFrZUNoYW5nZUlubmVyKGRv
YywgY2hhbmdlKTsKKyAgaWYgKG1hcC5mYWxsdGhyb3VnaCkgeworICAgIGlmIChPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwobWFwLmZhbGx0aHJvdWdoKSAhPSAiW29iamVjdCBBcnJheV0i
KQorICAgICAgeyByZXR1cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUs
IGNvbnRleHQpIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcC5mYWxsdGhyb3VnaC5sZW5n
dGg7IGkrKykgeworICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhy
b3VnaFtpXSwgaGFuZGxlLCBjb250ZXh0KQorICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVz
dWx0IH0KICAgICB9CiAgIH0KK30KIAotICBmdW5jdGlvbiBtYWtlQ2hhbmdlSW5uZXIoZG9jLCBj
aGFuZ2UpIHsKLSAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdlLnRleHRb
MF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHJldHVybjsKLSAg
ICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOwotICAg
IGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/IGRvYy5j
bS5jdXJPcC5pZCA6IE5hTik7CisvLyBNb2RpZmllciBrZXkgcHJlc3NlcyBkb24ndCBjb3VudCBh
cyAncmVhbCcga2V5IHByZXNzZXMgZm9yIHRoZQorLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRo
cm91Z2guCitmdW5jdGlvbiBpc01vZGlmaWVyS2V5KHZhbHVlKSB7CisgIHZhciBuYW1lID0gdHlw
ZW9mIHZhbHVlID09ICJzdHJpbmciID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXQor
ICByZXR1cm4gbmFtZSA9PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlm
dCIgfHwgbmFtZSA9PSAiTW9kIgorfQogCi0gICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNo
YW5nZSwgc2VsQWZ0ZXIsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKLSAg
ICB2YXIgcmViYXNlZCA9IFtdOworLy8gTG9vayB1cCB0aGUgbmFtZSBvZiBhIGtleSBhcyBpbmRp
Y2F0ZWQgYnkgYW4gZXZlbnQgb2JqZWN0LgorZnVuY3Rpb24ga2V5TmFtZShldmVudCwgbm9TaGlm
dCkgeworICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNvZGUgPT0gMzQgJiYgZXZlbnRbImNoYXIi
XSkgeyByZXR1cm4gZmFsc2UgfQorICB2YXIgYmFzZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVd
LCBuYW1lID0gYmFzZQorICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSB7
IHJldHVybiBmYWxzZSB9CisgIGlmIChldmVudC5hbHRLZXkgJiYgYmFzZSAhPSAiQWx0IikgeyBu
YW1lID0gIkFsdC0iICsgbmFtZSB9CisgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5
IDogZXZlbnQuY3RybEtleSkgJiYgYmFzZSAhPSAiQ3RybCIpIHsgbmFtZSA9ICJDdHJsLSIgKyBu
YW1lIH0KKyAgaWYgKChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxLZXkgOiBldmVudC5tZXRhS2V5
KSAmJiBiYXNlICE9ICJDbWQiKSB7IG5hbWUgPSAiQ21kLSIgKyBuYW1lIH0KKyAgaWYgKCFub1No
aWZ0ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGJhc2UgIT0gIlNoaWZ0IikgeyBuYW1lID0gIlNoaWZ0
LSIgKyBuYW1lIH0KKyAgcmV0dXJuIG5hbWUKK30KIAotICAgIGxpbmtlZERvY3MoZG9jLCBmdW5j
dGlvbihkb2MsIHNoYXJlZEhpc3QpIHsKLSAgICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9m
KHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkgewotICAgICAgICByZWJhc2VIaXN0KGRvYy5o
aXN0b3J5LCBjaGFuZ2UpOwotICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpOworZnVu
Y3Rpb24gZ2V0S2V5TWFwKHZhbCkgeworICByZXR1cm4gdHlwZW9mIHZhbCA9PSAic3RyaW5nIiA/
IGtleU1hcFt2YWxdIDogdmFsCit9CisKKy8vIEhlbHBlciBmb3IgZGVsZXRpbmcgdGV4dCBuZWFy
IHRoZSBzZWxlY3Rpb24ocyksIHVzZWQgdG8gaW1wbGVtZW50CisvLyBiYWNrc3BhY2UsIGRlbGV0
ZSwgYW5kIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4KK2Z1bmN0aW9uIGRlbGV0ZU5lYXJTZWxlY3Rp
b24oY20sIGNvbXB1dGUpIHsKKyAgdmFyIHJhbmdlcyA9IGNtLmRvYy5zZWwucmFuZ2VzLCBraWxs
ID0gW10KKyAgLy8gQnVpbGQgdXAgYSBzZXQgb2YgcmFuZ2VzIHRvIGtpbGwgZmlyc3QsIG1lcmdp
bmcgb3ZlcmxhcHBpbmcKKyAgLy8gcmFuZ2VzLgorICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdl
cy5sZW5ndGg7IGkrKykgeworICAgIHZhciB0b0tpbGwgPSBjb21wdXRlKHJhbmdlc1tpXSkKKyAg
ICB3aGlsZSAoa2lsbC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBsc3Qoa2lsbCkudG8pIDw9
IDApIHsKKyAgICAgIHZhciByZXBsYWNlZCA9IGtpbGwucG9wKCkKKyAgICAgIGlmIChjbXAocmVw
bGFjZWQuZnJvbSwgdG9LaWxsLmZyb20pIDwgMCkgeworICAgICAgICB0b0tpbGwuZnJvbSA9IHJl
cGxhY2VkLmZyb20KKyAgICAgICAgYnJlYWsKICAgICAgIH0KLSAgICAgIG1ha2VDaGFuZ2VTaW5n
bGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UpKTsKLSAgICB9KTsKKyAgICB9CisgICAga2lsbC5wdXNoKHRvS2lsbCkKICAgfQorICAvLyBO
ZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy4KKyAgcnVuSW5PcChjbSwgZnVuY3Rpb24g
KCkgeworICAgIGZvciAodmFyIGkgPSBraWxsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorICAg
ICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCAi
K2RlbGV0ZSIpIH0KKyAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKQorICB9KQorfQogCi0gIC8v
IFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuCi0gIGZ1bmN0
aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkg
ewotICAgIGlmIChkb2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsK
LQotICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7
Ci0gICAgdmFyIHNvdXJjZSA9IHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRv
bmUsIGRlc3QgPSB0eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lOwotCi0g
ICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwt
eiB3b24ndAotICAgIC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cykKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewotICAgICAgZXZlbnQgPSBz
b3VyY2VbaV07Ci0gICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYm
ICFldmVudC5lcXVhbHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKQotICAgICAgICBicmVhazsK
Ky8vIENvbW1hbmRzIGFyZSBwYXJhbWV0ZXItbGVzcyBhY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZv
cm1lZCBvbiBhbgorLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuCit2YXIg
Y29tbWFuZHMgPSB7CisgIHNlbGVjdEFsbDogc2VsZWN0QWxsLAorICBzaW5nbGVTZWxlY3Rpb246
IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcigiYW5j
aG9yIiksIGNtLmdldEN1cnNvcigiaGVhZCIpLCBzZWxfZG9udFNjcm9sbCk7IH0sCisgIGtpbGxM
aW5lOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0
aW9uIChyYW5nZSkgeworICAgIGlmIChyYW5nZS5lbXB0eSgpKSB7CisgICAgICB2YXIgbGVuID0g
Z2V0TGluZShjbS5kb2MsIHJhbmdlLmhlYWQubGluZSkudGV4dC5sZW5ndGgKKyAgICAgIGlmIChy
YW5nZS5oZWFkLmNoID09IGxlbiAmJiByYW5nZS5oZWFkLmxpbmUgPCBjbS5sYXN0TGluZSgpKQor
ICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxp
bmUgKyAxLCAwKX0gfQorICAgICAgZWxzZQorICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2Uu
aGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUsIGxlbil9IH0KKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpfQorICAgIH0KKyAg
fSk7IH0sCisgIGRlbGV0ZUxpbmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNl
bGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiAoeworICAgIGZyb206IFBvcyhy
YW5nZS5mcm9tKCkubGluZSwgMCksCisgICAgdG86IGNsaXBQb3MoY20uZG9jLCBQb3MocmFuZ2Uu
dG8oKS5saW5lICsgMSwgMCkpCisgIH0pOyB9KTsgfSwKKyAgZGVsTGluZUxlZnQ6IGZ1bmN0aW9u
IChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7
IHJldHVybiAoeworICAgIGZyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5n
ZS5mcm9tKCkKKyAgfSk7IH0pOyB9LAorICBkZWxXcmFwcGVkTGluZUxlZnQ6IGZ1bmN0aW9uIChj
bSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7Cisg
ICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDUKKyAg
ICB2YXIgbGVmdFBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIp
CisgICAgcmV0dXJuIHtmcm9tOiBsZWZ0UG9zLCB0bzogcmFuZ2UuZnJvbSgpfQorICB9KTsgfSwK
KyAgZGVsV3JhcHBlZExpbmVSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFy
U2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsKKyAgICB2YXIgdG9wID0gY20uY2hhckNv
b3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNQorICAgIHZhciByaWdodFBvcyA9IGNtLmNv
b3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9w
OiB0b3B9LCAiZGl2IikKKyAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJpZ2h0
UG9zIH0KKyAgfSk7IH0sCisgIHVuZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kbygp
OyB9LAorICByZWRvOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZG8oKTsgfSwKKyAgdW5k
b1NlbGVjdGlvbjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS51bmRvU2VsZWN0aW9uKCk7IH0s
CisgIHJlZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkb1NlbGVjdGlv
bigpOyB9LAorICBnb0RvY1N0YXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNl
bGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApKTsgfSwKKyAgZ29Eb2NFbmQ6IGZ1bmN0aW9u
IChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5sYXN0TGluZSgpKSk7IH0s
CisgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlv
bnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5s
aW5lKTsgfSwKKyAgICB7b3JpZ2luOiAiK21vdmUiLCBiaWFzOiAxfQorICApOyB9LAorICBnb0xp
bmVTdGFydFNtYXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNC
eShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydFNtYXJ0KGNtLCByYW5nZS5oZWFk
KTsgfSwKKyAgICB7b3JpZ2luOiAiK21vdmUiLCBiaWFzOiAxfQorICApOyB9LAorICBnb0xpbmVF
bmQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9u
IChyYW5nZSkgeyByZXR1cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwKKyAgICB7
b3JpZ2luOiAiK21vdmUiLCBiaWFzOiAtMX0KKyAgKTsgfSwKKyAgZ29MaW5lUmlnaHQ6IGZ1bmN0
aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkg
eworICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1
CisgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZz
ZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2IikKKyAgfSwgc2VsX21vdmUpOyB9LAorICBn
b0xpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShm
dW5jdGlvbiAocmFuZ2UpIHsKKyAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFk
LCAiZGl2IikudG9wICsgNQorICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6
IHRvcH0sICJkaXYiKQorICB9LCBzZWxfbW92ZSk7IH0sCisgIGdvTGluZUxlZnRTbWFydDogZnVu
Y3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdl
KSB7CisgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCAr
IDUKKyAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2
IikKKyAgICBpZiAocG9zLmNoIDwgY20uZ2V0TGluZShwb3MubGluZSkuc2VhcmNoKC9cUy8pKSB7
IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCkgfQorICAgIHJldHVybiBwb3MK
KyAgfSwgc2VsX21vdmUpOyB9LAorICBnb0xpbmVVcDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBj
bS5tb3ZlVigtMSwgImxpbmUiKTsgfSwKKyAgZ29MaW5lRG93bjogZnVuY3Rpb24gKGNtKSB7IHJl
dHVybiBjbS5tb3ZlVigxLCAibGluZSIpOyB9LAorICBnb1BhZ2VVcDogZnVuY3Rpb24gKGNtKSB7
IHJldHVybiBjbS5tb3ZlVigtMSwgInBhZ2UiKTsgfSwKKyAgZ29QYWdlRG93bjogZnVuY3Rpb24g
KGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCAicGFnZSIpOyB9LAorICBnb0NoYXJMZWZ0OiBmdW5j
dGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCAiY2hhciIpOyB9LAorICBnb0NoYXJSaWdo
dDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCAiY2hhciIpOyB9LAorICBnb0Nv
bHVtbkxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsICJjb2x1bW4iKTsg
fSwKKyAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCAi
Y29sdW1uIik7IH0sCisgIGdvV29yZExlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92
ZUgoLTEsICJ3b3JkIik7IH0sCisgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVy
biBjbS5tb3ZlSCgxLCAiZ3JvdXAiKTsgfSwKKyAgZ29Hcm91cExlZnQ6IGZ1bmN0aW9uIChjbSkg
eyByZXR1cm4gY20ubW92ZUgoLTEsICJncm91cCIpOyB9LAorICBnb1dvcmRSaWdodDogZnVuY3Rp
b24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCAid29yZCIpOyB9LAorICBkZWxDaGFyQmVmb3Jl
OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsICJjaGFyIik7IH0sCisgIGRl
bENoYXJBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsICJjaGFyIik7
IH0sCisgIGRlbFdvcmRCZWZvcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgt
MSwgIndvcmQiKTsgfSwKKyAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNt
LmRlbGV0ZUgoMSwgIndvcmQiKTsgfSwKKyAgZGVsR3JvdXBCZWZvcmU6IGZ1bmN0aW9uIChjbSkg
eyByZXR1cm4gY20uZGVsZXRlSCgtMSwgImdyb3VwIik7IH0sCisgIGRlbEdyb3VwQWZ0ZXI6IGZ1
bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgxLCAiZ3JvdXAiKTsgfSwKKyAgaW5kZW50
QXV0bzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iik7
IH0sCisgIGluZGVudE1vcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0
aW9uKCJhZGQiKTsgfSwKKyAgaW5kZW50TGVzczogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5p
bmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iik7IH0sCisgIGluc2VydFRhYjogZnVuY3Rpb24gKGNt
KSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIpOyB9LAorICBpbnNlcnRTb2Z0VGFi
OiBmdW5jdGlvbiAoY20pIHsKKyAgICB2YXIgc3BhY2VzID0gW10sIHJhbmdlcyA9IGNtLmxpc3RT
ZWxlY3Rpb25zKCksIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemUKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHBvcyA9IHJhbmdlc1tp
XS5mcm9tKCkKKyAgICAgIHZhciBjb2wgPSBjb3VudENvbHVtbihjbS5nZXRMaW5lKHBvcy5saW5l
KSwgcG9zLmNoLCB0YWJTaXplKQorICAgICAgc3BhY2VzLnB1c2goc3BhY2VTdHIodGFiU2l6ZSAt
IGNvbCAlIHRhYlNpemUpKQogICAgIH0KLSAgICBpZiAoaSA9PSBzb3VyY2UubGVuZ3RoKSByZXR1
cm47Ci0gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gbnVsbDsKLQot
ICAgIGZvciAoOzspIHsKLSAgICAgIGV2ZW50ID0gc291cmNlLnBvcCgpOwotICAgICAgaWYgKGV2
ZW50LnJhbmdlcykgewotICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGV2ZW50LCBkZXN0
KTsKLSAgICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSAmJiAhZXZlbnQuZXF1YWxzKGRvYy5z
ZWwpKSB7Ci0gICAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgZXZlbnQsIHtjbGVhclJlZG86IGZh
bHNlfSk7Ci0gICAgICAgICAgcmV0dXJuOworICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNwYWNl
cykKKyAgfSwKKyAgZGVmYXVsdFRhYjogZnVuY3Rpb24gKGNtKSB7CisgICAgaWYgKGNtLnNvbWV0
aGluZ1NlbGVjdGVkKCkpIHsgY20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKSB9CisgICAgZWxzZSB7
IGNtLmV4ZWNDb21tYW5kKCJpbnNlcnRUYWIiKSB9CisgIH0sCisgIC8vIFN3YXAgdGhlIHR3byBj
aGFycyBsZWZ0IGFuZCByaWdodCBvZiBlYWNoIHNlbGVjdGlvbidzIGhlYWQuCisgIC8vIE1vdmUg
Y3Vyc29yIGJlaGluZCB0aGUgdHdvIHN3YXBwZWQgY2hhcmFjdGVycyBhZnRlcndhcmRzLgorICAv
LworICAvLyBEb2Vzbid0IGNvbnNpZGVyIGxpbmUgZmVlZHMgYSBjaGFyYWN0ZXIuCisgIC8vIERv
ZXNuJ3Qgc2NhbiBtb3JlIHRoYW4gb25lIGxpbmUgYWJvdmUgdG8gZmluZCBhIGNoYXJhY3Rlci4K
KyAgLy8gRG9lc24ndCBkbyBhbnl0aGluZyBvbiBhbiBlbXB0eSBsaW5lLgorICAvLyBEb2Vzbid0
IGRvIGFueXRoaW5nIHdpdGggbm9uLWVtcHR5IHNlbGVjdGlvbnMuCisgIHRyYW5zcG9zZUNoYXJz
OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHsKKyAgICB2
YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgbmV3U2VsID0gW10KKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFyYW5nZXNbaV0u
ZW1wdHkoKSkgeyBjb250aW51ZSB9CisgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQsIGxp
bmUgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUpLnRleHQKKyAgICAgIGlmIChsaW5lKSB7Cisg
ICAgICAgIGlmIChjdXIuY2ggPT0gbGluZS5sZW5ndGgpIHsgY3VyID0gbmV3IFBvcyhjdXIubGlu
ZSwgY3VyLmNoIC0gMSkgfQorICAgICAgICBpZiAoY3VyLmNoID4gMCkgeworICAgICAgICAgIGN1
ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpCisgICAgICAgICAgY20ucmVwbGFjZVJh
bmdlKGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMiksIGN1ciwg
Iit0cmFuc3Bvc2UiKQorICAgICAgICB9IGVsc2UgaWYgKGN1ci5saW5lID4gY20uZG9jLmZpcnN0
KSB7CisgICAgICAgICAgdmFyIHByZXYgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50
ZXh0CisgICAgICAgICAgaWYgKHByZXYpIHsKKyAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3Vy
LmxpbmUsIDEpCisgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyBj
bS5kb2MubGluZVNlcGFyYXRvcigpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
LmNoYXJBdChwcmV2Lmxlbmd0aCAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBv
cyhjdXIubGluZSAtIDEsIHByZXYubGVuZ3RoIC0gMSksIGN1ciwgIit0cmFuc3Bvc2UiKQorICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzZWxBZnRlciA9IGV2ZW50OwogICAgICAgfQot
ICAgICAgZWxzZSBicmVhazsKKyAgICAgIG5ld1NlbC5wdXNoKG5ldyBSYW5nZShjdXIsIGN1cikp
CiAgICAgfQorICAgIGNtLnNldFNlbGVjdGlvbnMobmV3U2VsKQorICB9KTsgfSwKKyAgbmV3bGlu
ZUFuZEluZGVudDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBydW5Jbk9wKGNtLCBmdW5jdGlvbiAo
KSB7CisgICAgdmFyIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpCisgICAgZm9yICh2YXIgaSA9
IHNlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICB7IGNtLnJlcGxhY2VSYW5nZShj
bS5kb2MubGluZVNlcGFyYXRvcigpLCBzZWxzW2ldLmFuY2hvciwgc2Vsc1tpXS5oZWFkLCAiK2lu
cHV0IikgfQorICAgIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpCisgICAgZm9yICh2YXIgaSQx
ID0gMDsgaSQxIDwgc2Vscy5sZW5ndGg7IGkkMSsrKQorICAgICAgeyBjbS5pbmRlbnRMaW5lKHNl
bHNbaSQxXS5mcm9tKCkubGluZSwgbnVsbCwgdHJ1ZSkgfQorICAgIGVuc3VyZUN1cnNvclZpc2li
bGUoY20pCisgIH0pOyB9LAorICBvcGVuTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5y
ZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJzdGFydCIpOyB9LAorICB0b2dnbGVPdmVyd3JpdGU6IGZ1
bmN0aW9uIChjbSkgeyByZXR1cm4gY20udG9nZ2xlT3ZlcndyaXRlKCk7IH0KK30KKworCitmdW5j
dGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7CisgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2Ms
IGxpbmVOKQorICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShsaW5lKQorICBpZiAodmlzdWFsICE9
IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKSB9CisgIHZhciBvcmRlciA9IGdldE9yZGVy
KHZpc3VhbCkKKyAgdmFyIGNoID0gIW9yZGVyID8gMCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxp
bmVSaWdodCh2aXN1YWwpIDogbGluZUxlZnQodmlzdWFsKQorICByZXR1cm4gUG9zKGxpbmVOLCBj
aCkKK30KK2Z1bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVOKSB7CisgIHZhciBtZXJnZWQsIGxpbmUg
PSBnZXRMaW5lKGNtLmRvYywgbGluZU4pCisgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFu
QXRFbmQobGluZSkpIHsKKyAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZQorICAg
IGxpbmVOID0gbnVsbAorICB9CisgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpCisgIHZhciBj
aCA9ICFvcmRlciA/IGxpbmUudGV4dC5sZW5ndGggOiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5l
TGVmdChsaW5lKSA6IGxpbmVSaWdodChsaW5lKQorICByZXR1cm4gUG9zKGxpbmVOID09IG51bGwg
PyBsaW5lTm8obGluZSkgOiBsaW5lTiwgY2gpCit9CitmdW5jdGlvbiBsaW5lU3RhcnRTbWFydChj
bSwgcG9zKSB7CisgIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpCisgIHZhciBs
aW5lID0gZ2V0TGluZShjbS5kb2MsIHN0YXJ0LmxpbmUpCisgIHZhciBvcmRlciA9IGdldE9yZGVy
KGxpbmUpCisgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgeworICAgIHZhciBm
aXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSkKKyAgICB2YXIg
aW5XUyA9IHBvcy5saW5lID09IHN0YXJ0LmxpbmUgJiYgcG9zLmNoIDw9IGZpcnN0Tm9uV1MgJiYg
cG9zLmNoCisgICAgcmV0dXJuIFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1Mp
CisgIH0KKyAgcmV0dXJuIHN0YXJ0Cit9CiAKLSAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hh
bmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhpc3RvcnkKLSAgICAvLyBzdGFjayAo
cmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS4KLSAgICB2YXIgYW50aUNoYW5nZXMg
PSBbXTsKLSAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbEFmdGVyLCBkZXN0KTsKLSAgICBk
ZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRp
b259KTsKLSAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5t
YXhHZW5lcmF0aW9uOwotCi0gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3Jl
Q2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7
Ci0KLSAgICBmb3IgKHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07Ci0gICAgICBjaGFuZ2Uu
b3JpZ2luID0gdHlwZTsKLSAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNo
YW5nZSwgZmFsc2UpKSB7Ci0gICAgICAgIHNvdXJjZS5sZW5ndGggPSAwOwotICAgICAgICByZXR1
cm47CisvLyBSdW4gYSBoYW5kbGVyIHRoYXQgd2FzIGJvdW5kIHRvIGEga2V5LgorZnVuY3Rpb24g
ZG9IYW5kbGVCaW5kaW5nKGNtLCBib3VuZCwgZHJvcFNoaWZ0KSB7CisgIGlmICh0eXBlb2YgYm91
bmQgPT0gInN0cmluZyIpIHsKKyAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXQorICAgIGlmICgh
Ym91bmQpIHsgcmV0dXJuIGZhbHNlIH0KKyAgfQorICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQg
aGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKKyAgLy8gY29uc2lzdGVu
dCB2aWV3IG9mIHRoZSBkb2N1bWVudAorICBjbS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgp
CisgIHZhciBwcmV2U2hpZnQgPSBjbS5kaXNwbGF5LnNoaWZ0LCBkb25lID0gZmFsc2UKKyAgdHJ5
IHsKKyAgICBpZiAoY20uaXNSZWFkT25seSgpKSB7IGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0
cnVlIH0KKyAgICBpZiAoZHJvcFNoaWZ0KSB7IGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZSB9Cisg
ICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzCisgIH0gZmluYWxseSB7CisgICAgY20uZGlzcGxh
eS5zaGlmdCA9IHByZXZTaGlmdAorICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZQor
ICB9CisgIHJldHVybiBkb25lCit9CisKK2Z1bmN0aW9uIGxvb2t1cEtleUZvckVkaXRvcihjbSwg
bmFtZSwgaGFuZGxlKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUua2V5TWFwcy5s
ZW5ndGg7IGkrKykgeworICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkobmFtZSwgY20uc3RhdGUu
a2V5TWFwc1tpXSwgaGFuZGxlLCBjbSkKKyAgICBpZiAocmVzdWx0KSB7IHJldHVybiByZXN1bHQg
fQorICB9CisgIHJldHVybiAoY20ub3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3VwS2V5KG5hbWUs
IGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBoYW5kbGUsIGNtKSkKKyAgICB8fCBsb29rdXBLZXkobmFt
ZSwgY20ub3B0aW9ucy5rZXlNYXAsIGhhbmRsZSwgY20pCit9CisKK3ZhciBzdG9wU2VxID0gbmV3
IERlbGF5ZWQKK2Z1bmN0aW9uIGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBoYW5kbGUpIHsKKyAg
dmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcQorICBpZiAoc2VxKSB7CisgICAgaWYgKGlzTW9kaWZp
ZXJLZXkobmFtZSkpIHsgcmV0dXJuICJoYW5kbGVkIiB9CisgICAgc3RvcFNlcS5zZXQoNTAsIGZ1
bmN0aW9uICgpIHsKKyAgICAgIGlmIChjbS5zdGF0ZS5rZXlTZXEgPT0gc2VxKSB7CisgICAgICAg
IGNtLnN0YXRlLmtleVNlcSA9IG51bGwKKyAgICAgICAgY20uZGlzcGxheS5pbnB1dC5yZXNldCgp
CiAgICAgICB9CisgICAgfSkKKyAgICBuYW1lID0gc2VxICsgIiAiICsgbmFtZQorICB9CisgIHZh
ciByZXN1bHQgPSBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRsZSkKIAotICAgICAg
YW50aUNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpOwor
ICBpZiAocmVzdWx0ID09ICJtdWx0aSIpCisgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBuYW1lIH0K
KyAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIpCisgICAgeyBzaWduYWxMYXRlcihjbSwgImtleUhh
bmRsZWQiLCBjbSwgbmFtZSwgZSkgfQogCi0gICAgICB2YXIgYWZ0ZXIgPSBpID8gY29tcHV0ZVNl
bEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSA6IGxzdChzb3VyY2UpOwotICAgICAgbWFrZUNoYW5n
ZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgYWZ0ZXIsIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2Up
KTsKLSAgICAgIGlmICghaSAmJiBkb2MuY20pIGRvYy5jbS5zY3JvbGxJbnRvVmlldyh7ZnJvbTog
Y2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKX0pOwotICAgICAgdmFyIHJlYmFzZWQg
PSBbXTsKKyAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIgfHwgcmVzdWx0ID09ICJtdWx0aSIpIHsK
KyAgICBlX3ByZXZlbnREZWZhdWx0KGUpCisgICAgcmVzdGFydEJsaW5rKGNtKQorICB9CiAKLSAg
ICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbGlua2VkIGRvY3VtZW50cwotICAgICAgbGlua2VkRG9j
cyhkb2MsIGZ1bmN0aW9uKGRvYywgc2hhcmVkSGlzdCkgewotICAgICAgICBpZiAoIXNoYXJlZEhp
c3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKLSAgICAgICAgICBy
ZWJhc2VIaXN0KGRvYy5oaXN0b3J5LCBjaGFuZ2UpOwotICAgICAgICAgIHJlYmFzZWQucHVzaChk
b2MuaGlzdG9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2Ms
IGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpOwotICAgICAgfSk7Ci0g
ICAgfQorICBpZiAoc2VxICYmICFyZXN1bHQgJiYgL1wnJC8udGVzdChuYW1lKSkgeworICAgIGVf
cHJldmVudERlZmF1bHQoZSkKKyAgICByZXR1cm4gdHJ1ZQogICB9CisgIHJldHVybiAhIXJlc3Vs
dAorfQogCi0gIC8vIFN1Yi12aWV3cyBuZWVkIHRoZWlyIGxpbmUgbnVtYmVycyBzaGlmdGVkIHdo
ZW4gdGV4dCBpcyBhZGRlZAotICAvLyBhYm92ZSBvciBiZWxvdyB0aGVtIGluIHRoZSBwYXJlbnQg
ZG9jdW1lbnQuCi0gIGZ1bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHsKLSAgICBpZiAo
ZGlzdGFuY2UgPT0gMCkgcmV0dXJuOwotICAgIGRvYy5maXJzdCArPSBkaXN0YW5jZTsKLSAgICBk
b2Muc2VsID0gbmV3IFNlbGVjdGlvbihtYXAoZG9jLnNlbC5yYW5nZXMsIGZ1bmN0aW9uKHJhbmdl
KSB7Ci0gICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhyYW5nZS5hbmNob3IubGluZSArIGRpc3Rh
bmNlLCByYW5nZS5hbmNob3IuY2gpLAotICAgICAgICAgICAgICAgICAgICAgICBQb3MocmFuZ2Uu
aGVhZC5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmhlYWQuY2gpKTsKLSAgICB9KSwgZG9jLnNlbC5w
cmltSW5kZXgpOwotICAgIGlmIChkb2MuY20pIHsKLSAgICAgIHJlZ0NoYW5nZShkb2MuY20sIGRv
Yy5maXJzdCwgZG9jLmZpcnN0IC0gZGlzdGFuY2UsIGRpc3RhbmNlKTsKLSAgICAgIGZvciAodmFy
IGQgPSBkb2MuY20uZGlzcGxheSwgbCA9IGQudmlld0Zyb207IGwgPCBkLnZpZXdUbzsgbCsrKQot
ICAgICAgICByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbCwgImd1dHRlciIpOwotICAgIH0KKy8vIEhh
bmRsZSBhIGtleSBmcm9tIHRoZSBrZXlkb3duIGV2ZW50LgorZnVuY3Rpb24gaGFuZGxlS2V5Qmlu
ZGluZyhjbSwgZSkgeworICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSkKKyAgaWYgKCFuYW1l
KSB7IHJldHVybiBmYWxzZSB9CisKKyAgaWYgKGUuc2hpZnRLZXkgJiYgIWNtLnN0YXRlLmtleVNl
cSkgeworICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5jbHVkaW5nICdT
aGlmdC0nKS4gRmFpbGluZworICAgIC8vIHRoYXQsIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnNvci1t
b3Rpb24gY29tbWFuZCAoc3RhcnRpbmcgd2l0aAorICAgIC8vICdnbycpIGJvdW5kIHRvIHRoZSBr
ZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCisgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCAiU2hp
ZnQtIiArIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20s
IGIsIHRydWUpOyB9KQorICAgICAgICB8fCBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgZnVuY3Rp
b24gKGIpIHsKKyAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gInN0cmluZyIgPyAvXmdvW0Et
Wl0vLnRlc3QoYikgOiBiLm1vdGlvbikKKyAgICAgICAgICAgICAgIHsgcmV0dXJuIGRvSGFuZGxl
QmluZGluZyhjbSwgYikgfQorICAgICAgICAgICB9KQorICB9IGVsc2UgeworICAgIHJldHVybiBk
aXNwYXRjaEtleShjbSwgbmFtZSwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmlu
ZGluZyhjbSwgYik7IH0pCiAgIH0KK30KIAotICAvLyBNb3JlIGxvd2VyLWxldmVsIGNoYW5nZSBm
dW5jdGlvbiwgaGFuZGxpbmcgb25seSBhIHNpbmdsZSBkb2N1bWVudAotICAvLyAobm90IGxpbmtl
ZCBvbmVzKS4KLSAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgc2Vs
QWZ0ZXIsIHNwYW5zKSB7Ci0gICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKQotICAgICAg
cmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2VTaW5nbGVEb2MpKGRvYywgY2hhbmdl
LCBzZWxBZnRlciwgc3BhbnMpOworLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleXByZXNzIGV2
ZW50CitmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKKyAgcmV0dXJuIGRp
c3BhdGNoS2V5KGNtLCAiJyIgKyBjaCArICInIiwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRv
SGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pCit9CiAKLSAgICBpZiAoY2hhbmdlLnRvLmxp
bmUgPCBkb2MuZmlyc3QpIHsKLSAgICAgIHNoaWZ0RG9jKGRvYywgY2hhbmdlLnRleHQubGVuZ3Ro
IC0gMSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPiBkb2MubGFzdExpbmUoKSkgcmV0
dXJuOwotCi0gICAgLy8gQ2xpcCB0aGUgY2hhbmdlIHRvIHRoZSBzaXplIG9mIHRoaXMgZG9jCi0g
ICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPCBkb2MuZmlyc3QpIHsKLSAgICAgIHZhciBzaGlmdCA9
IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoZG9jLmZpcnN0IC0gY2hhbmdlLmZyb20ubGluZSk7
Ci0gICAgICBzaGlmdERvYyhkb2MsIHNoaWZ0KTsKLSAgICAgIGNoYW5nZSA9IHtmcm9tOiBQb3Mo
ZG9jLmZpcnN0LCAwKSwgdG86IFBvcyhjaGFuZ2UudG8ubGluZSArIHNoaWZ0LCBjaGFuZ2UudG8u
Y2gpLAotICAgICAgICAgICAgICAgIHRleHQ6IFtsc3QoY2hhbmdlLnRleHQpXSwgb3JpZ2luOiBj
aGFuZ2Uub3JpZ2lufTsKLSAgICB9Ci0gICAgdmFyIGxhc3QgPSBkb2MubGFzdExpbmUoKTsKLSAg
ICBpZiAoY2hhbmdlLnRvLmxpbmUgPiBsYXN0KSB7Ci0gICAgICBjaGFuZ2UgPSB7ZnJvbTogY2hh
bmdlLmZyb20sIHRvOiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSwK
LSAgICAgICAgICAgICAgICB0ZXh0OiBbY2hhbmdlLnRleHRbMF1dLCBvcmlnaW46IGNoYW5nZS5v
cmlnaW59OwotICAgIH0KK3ZhciBsYXN0U3RvcHBlZEtleSA9IG51bGwKK2Z1bmN0aW9uIG9uS2V5
RG93bihlKSB7CisgIHZhciBjbSA9IHRoaXMKKyAgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQo
KQorICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9CisgIC8vIElFIGRvZXMg
c3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCisgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEg
JiYgZS5rZXlDb2RlID09IDI3KSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZSB9CisgIHZhciBjb2Rl
ID0gZS5rZXlDb2RlCisgIGNtLmRpc3BsYXkuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUuc2hpZnRL
ZXkKKyAgdmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKQorICBpZiAocHJlc3Rv
KSB7CisgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGwKKyAgICAvLyBP
cGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5
IGNvbWJvCisgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAm
JiAobWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSkKKyAgICAgIHsgY20ucmVwbGFjZVNlbGVj
dGlvbigiIiwgbnVsbCwgImN1dCIpIH0KKyAgfQorCisgIC8vIFR1cm4gbW91c2UgaW50byBjcm9z
c2hhaXIgd2hlbiBBbHQgaXMgaGVsZCBvbiBNYWMuCisgIGlmIChjb2RlID09IDE4ICYmICEvXGJD
b2RlTWlycm9yLWNyb3NzaGFpclxiLy50ZXN0KGNtLmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUp
KQorICAgIHsgc2hvd0Nyb3NzSGFpcihjbSkgfQorfQogCi0gICAgY2hhbmdlLnJlbW92ZWQgPSBn
ZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7CitmdW5jdGlvbiBzaG93Q3Jv
c3NIYWlyKGNtKSB7CisgIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2CisgIGFkZENs
YXNzKGxpbmVEaXYsICJDb2RlTWlycm9yLWNyb3NzaGFpciIpCiAKLSAgICBpZiAoIXNlbEFmdGVy
KSBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7Ci0gICAgaWYg
KGRvYy5jbSkgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFu
cyk7Ci0gICAgZWxzZSB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKLSAgICBzZXRTZWxl
Y3Rpb25Ob1VuZG8oZG9jLCBzZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpOworICBmdW5jdGlvbiB1
cChlKSB7CisgICAgaWYgKGUua2V5Q29kZSA9PSAxOCB8fCAhZS5hbHRLZXkpIHsKKyAgICAgIHJt
Q2xhc3MobGluZURpdiwgIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIikKKyAgICAgIG9mZihkb2N1bWVu
dCwgImtleXVwIiwgdXApCisgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCkKKyAg
ICB9CiAgIH0KKyAgb24oZG9jdW1lbnQsICJrZXl1cCIsIHVwKQorICBvbihkb2N1bWVudCwgIm1v
dXNlb3ZlciIsIHVwKQorfQogCi0gIC8vIEhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gb2YgYSBjaGFu
Z2UgdG8gYSBkb2N1bWVudCB3aXRoIHRoZSBlZGl0b3IKLSAgLy8gdGhhdCB0aGlzIGRvY3VtZW50
IGlzIHBhcnQgb2YuCi0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihjbSwg
Y2hhbmdlLCBzcGFucykgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvOworZnVuY3Rpb24gb25LZXlV
cChlKSB7CisgIGlmIChlLmtleUNvZGUgPT0gMTYpIHsgdGhpcy5kb2Muc2VsLnNoaWZ0ID0gZmFs
c2UgfQorICBzaWduYWxET01FdmVudCh0aGlzLCBlKQorfQogCi0gICAgdmFyIHJlY29tcHV0ZU1h
eExlbmd0aCA9IGZhbHNlLCBjaGVja1dpZHRoU3RhcnQgPSBmcm9tLmxpbmU7Ci0gICAgaWYgKCFj
bS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5v
KHZpc3VhbExpbmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTsKLSAgICAgIGRvYy5pdGVyKGNo
ZWNrV2lkdGhTdGFydCwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYg
KGxpbmUgPT0gZGlzcGxheS5tYXhMaW5lKSB7Ci0gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3Ro
ID0gdHJ1ZTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSk7Citm
dW5jdGlvbiBvbktleVByZXNzKGUpIHsKKyAgdmFyIGNtID0gdGhpcworICBpZiAoZXZlbnRJbldp
ZGdldChjbS5kaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZS5jdHJsS2V5
ICYmICFlLmFsdEtleSB8fCBtYWMgJiYgZS5tZXRhS2V5KSB7IHJldHVybiB9CisgIHZhciBrZXlD
b2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGUKKyAgaWYgKHByZXN0byAmJiBr
ZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZl
bnREZWZhdWx0KGUpOyByZXR1cm59CisgIGlmICgocHJlc3RvICYmICghZS53aGljaCB8fCBlLndo
aWNoIDwgMTApKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgeyByZXR1cm4gfQorICB2YXIg
Y2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hh
ckNvZGUpCisgIC8vIFNvbWUgYnJvd3NlcnMgZmlyZSBrZXlwcmVzcyBldmVudHMgZm9yIGJhY2tz
cGFjZQorICBpZiAoY2ggPT0gIlx4MDgiKSB7IHJldHVybiB9CisgIGlmIChoYW5kbGVDaGFyQmlu
ZGluZyhjbSwgZSwgY2gpKSB7IHJldHVybiB9CisgIGNtLmRpc3BsYXkuaW5wdXQub25LZXlQcmVz
cyhlKQorfQorCisvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBkb3VibGUg
Y2xpY2ssIHRyaXBsZSBjbGljaywKKy8vIHN0YXJ0IG9mIHNlbGVjdGlvbiBkcmFnLCBzdGFydCBv
ZiB0ZXh0IGRyYWcsIG5ldyBjdXJzb3IKKy8vIChjdHJsLWNsaWNrKSwgcmVjdGFuZ2xlIGRyYWcg
KGFsdC1kcmFnKSwgb3IgeHdpbgorLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBi
ZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKKy8vIG5vdCBpbnRlcmZlcmUgd2l0aCwg
c3VjaCBhcyBhIHNjcm9sbGJhciBvciB3aWRnZXQuCitmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7
CisgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5CisgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkgfHwgZGlzcGxheS5hY3RpdmVUb3VjaCAmJiBkaXNwbGF5LmlucHV0LnN1cHBv
cnRzVG91Y2goKSkgeyByZXR1cm4gfQorICBkaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpCisg
IGRpc3BsYXkuc2hpZnQgPSBlLnNoaWZ0S2V5CisKKyAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxh
eSwgZSkpIHsKKyAgICBpZiAoIXdlYmtpdCkgeworICAgICAgLy8gQnJpZWZseSB0dXJuIG9mZiBk
cmFnZ2FiaWxpdHksIHRvIGFsbG93IHdpZGdldHMgdG8gZG8KKyAgICAgIC8vIG5vcm1hbCBkcmFn
Z2luZyB0aGluZ3MuCisgICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlCisg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3BsYXkuc2Nyb2xsZXIuZHJh
Z2dhYmxlID0gdHJ1ZTsgfSwgMTAwKQogICAgIH0KKyAgICByZXR1cm4KKyAgfQorICBpZiAoY2xp
Y2tJbkd1dHRlcihjbSwgZSkpIHsgcmV0dXJuIH0KKyAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNl
KGNtLCBlKQorICB3aW5kb3cuZm9jdXMoKQogCi0gICAgaWYgKGRvYy5zZWwuY29udGFpbnMoY2hh
bmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSkKLSAgICAgIHNpZ25hbEN1cnNvckFjdGl2aXR5KGNt
KTsKKyAgc3dpdGNoIChlX2J1dHRvbihlKSkgeworICBjYXNlIDE6CisgICAgLy8gIzMyNjE6IG1h
a2Ugc3VyZSwgdGhhdCB3ZSdyZSBub3Qgc3RhcnRpbmcgYSBzZWNvbmQgc2VsZWN0aW9uCisgICAg
aWYgKGNtLnN0YXRlLnNlbGVjdGluZ1RleHQpCisgICAgICB7IGNtLnN0YXRlLnNlbGVjdGluZ1Rl
eHQoZSkgfQorICAgIGVsc2UgaWYgKHN0YXJ0KQorICAgICAgeyBsZWZ0QnV0dG9uRG93bihjbSwg
ZSwgc3RhcnQpIH0KKyAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVy
KQorICAgICAgeyBlX3ByZXZlbnREZWZhdWx0KGUpIH0KKyAgICBicmVhaworICBjYXNlIDI6Cisg
ICAgaWYgKHdlYmtpdCkgeyBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA9ICtuZXcgRGF0ZSB9Cisg
ICAgaWYgKHN0YXJ0KSB7IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KSB9CisgICAgc2V0
VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIw
KQorICAgIGVfcHJldmVudERlZmF1bHQoZSkKKyAgICBicmVhaworICBjYXNlIDM6CisgICAgaWYg
KGNhcHR1cmVSaWdodENsaWNrKSB7IG9uQ29udGV4dE1lbnUoY20sIGUpIH0KKyAgICBlbHNlIHsg
ZGVsYXlCbHVyRXZlbnQoY20pIH0KKyAgICBicmVhaworICB9Cit9CiAKLSAgICB1cGRhdGVEb2Mo
ZG9jLCBjaGFuZ2UsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodChjbSkpOwordmFyIGxhc3RDbGljazsK
K3ZhciBsYXN0RG91YmxlQ2xpY2s7CitmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3Rh
cnQpIHsKKyAgaWYgKGllKSB7IHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKSB9
CisgIGVsc2UgeyBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpIH0KIAotICAgIGlmICghY20u
b3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwg
ZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAg
IHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpOwotICAgICAgICBpZiAobGVuID4gZGlzcGxheS5t
YXhMaW5lTGVuZ3RoKSB7Ci0gICAgICAgICAgZGlzcGxheS5tYXhMaW5lID0gbGluZTsKLSAgICAg
ICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47Ci0gICAgICAgICAgZGlzcGxheS5tYXhM
aW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgY20u
Y3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7CisgIHZhciBub3cgPSArbmV3IERhdGUsIHR5cGUK
KyAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2sudGltZSA+IG5vdyAtIDQw
MCAmJiBjbXAobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpID09IDApIHsKKyAgICB0eXBlID0g
InRyaXBsZSIKKyAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cg
LSA0MDAgJiYgY21wKGxhc3RDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7CisgICAgdHlwZSA9ICJk
b3VibGUiCisgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH0KKyAg
fSBlbHNlIHsKKyAgICB0eXBlID0gInNpbmdsZSIKKyAgICBsYXN0Q2xpY2sgPSB7dGltZTogbm93
LCBwb3M6IHN0YXJ0fQorICB9CisKKyAgdmFyIHNlbCA9IGNtLmRvYy5zZWwsIG1vZGlmaWVyID0g
bWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5LCBjb250YWluZWQKKyAgaWYgKGNtLm9wdGlvbnMu
ZHJhZ0Ryb3AgJiYgZHJhZ0FuZERyb3AgJiYgIWNtLmlzUmVhZE9ubHkoKSAmJgorICAgICAgdHlw
ZSA9PSAic2luZ2xlIiAmJiAoY29udGFpbmVkID0gc2VsLmNvbnRhaW5zKHN0YXJ0KSkgPiAtMSAm
JgorICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJhbmdlc1tjb250YWluZWRdKS5mcm9tKCks
IHN0YXJ0KSA8IDAgfHwgc3RhcnQueFJlbCA+IDApICYmCisgICAgICAoY21wKGNvbnRhaW5lZC50
bygpLCBzdGFydCkgPiAwIHx8IHN0YXJ0LnhSZWwgPCAwKSkKKyAgICB7IGxlZnRCdXR0b25TdGFy
dERyYWcoY20sIGUsIHN0YXJ0LCBtb2RpZmllcikgfQorICBlbHNlCisgICAgeyBsZWZ0QnV0dG9u
U2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgbW9kaWZpZXIpIH0KK30KKworLy8gU3RhcnQgYSB0
ZXh0IGRyYWcuIFdoZW4gaXQgZW5kcywgc2VlIGlmIGFueSBkcmFnZ2luZyBhY3R1YWxseQorLy8g
aGFwcGVuLCBhbmQgdHJlYXQgYXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuCitmdW5jdGlvbiBsZWZ0
QnV0dG9uU3RhcnREcmFnKGNtLCBlLCBzdGFydCwgbW9kaWZpZXIpIHsKKyAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5LCBzdGFydFRpbWUgPSArbmV3IERhdGUKKyAgdmFyIGRyYWdFbmQgPSBvcGVy
YXRpb24oY20sIGZ1bmN0aW9uIChlMikgeworICAgIGlmICh3ZWJraXQpIHsgZGlzcGxheS5zY3Jv
bGxlci5kcmFnZ2FibGUgPSBmYWxzZSB9CisgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFs
c2UKKyAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCkKKyAgICBvZmYoZGlzcGxh
eS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKQorICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFgg
LSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsK
KyAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpCisgICAgICBpZiAoIW1vZGlmaWVyICYmICtuZXcg
RGF0ZSAtIDIwMCA8IHN0YXJ0VGltZSkKKyAgICAgICAgeyBleHRlbmRTZWxlY3Rpb24oY20uZG9j
LCBzdGFydCkgfQorICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9i
bGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKQorICAgICAgaWYgKHdlYmtpdCB8
fCBpZSAmJiBpZV92ZXJzaW9uID09IDkpCisgICAgICAgIHsgc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7ZG9jdW1lbnQuYm9keS5mb2N1cygpOyBkaXNwbGF5LmlucHV0LmZvY3VzKCl9LCAyMCkgfQor
ICAgICAgZWxzZQorICAgICAgICB7IGRpc3BsYXkuaW5wdXQuZm9jdXMoKSB9CiAgICAgfQorICB9
KQorICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KKyAgaWYgKHdlYmtpdCkg
eyBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWUgfQorICBjbS5zdGF0ZS5kcmFnZ2lu
Z1RleHQgPSBkcmFnRW5kCisgIGRyYWdFbmQuY29weSA9IG1hYyA/IGUuYWx0S2V5IDogZS5jdHJs
S2V5CisgIC8vIElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCisgIGlmIChkaXNwbGF5LnNjcm9s
bGVyLmRyYWdEcm9wKSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKSB9CisgIG9uKGRvY3Vt
ZW50LCAibW91c2V1cCIsIGRyYWdFbmQpCisgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwg
ZHJhZ0VuZCkKK30KIAotICAgIC8vIEFkanVzdCBmcm9udGllciwgc2NoZWR1bGUgd29ya2VyCi0g
ICAgZG9jLmZyb250aWVyID0gTWF0aC5taW4oZG9jLmZyb250aWVyLCBmcm9tLmxpbmUpOwotICAg
IHN0YXJ0V29ya2VyKGNtLCA0MDApOworLy8gTm9ybWFsIHNlbGVjdGlvbiwgYXMgb3Bwb3NlZCB0
byB0ZXh0IGRyYWdnaW5nLgorZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZSwgc3RhcnQs
IHR5cGUsIGFkZE5ldykgeworICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRv
YworICBlX3ByZXZlbnREZWZhdWx0KGUpCiAKLSAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0
Lmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7Ci0gICAgLy8gUmVtZW1iZXIgdGhh
dCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKLSAgICBpZiAo
Y2hhbmdlLmZ1bGwpCi0gICAgICByZWdDaGFuZ2UoY20pOwotICAgIGVsc2UgaWYgKGZyb20ubGlu
ZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVw
ZGF0ZShjbS5kb2MsIGNoYW5nZSkpCi0gICAgICByZWdMaW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUs
ICJ0ZXh0Iik7CisgIHZhciBvdXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwg
cmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzCisgIGlmIChhZGROZXcgJiYgIWUuc2hpZnRLZXkpIHsK
KyAgICBvdXJJbmRleCA9IGRvYy5zZWwuY29udGFpbnMoc3RhcnQpCisgICAgaWYgKG91ckluZGV4
ID4gLTEpCisgICAgICB7IG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XSB9CiAgICAgZWxzZQot
ICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsKLQot
ICAgIHZhciBjaGFuZ2VzSGFuZGxlciA9IGhhc0hhbmRsZXIoY20sICJjaGFuZ2VzIiksIGNoYW5n
ZUhhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCAiY2hhbmdlIik7Ci0gICAgaWYgKGNoYW5nZUhhbmRs
ZXIgfHwgY2hhbmdlc0hhbmRsZXIpIHsKLSAgICAgIHZhciBvYmogPSB7Ci0gICAgICAgIGZyb206
IGZyb20sIHRvOiB0bywKLSAgICAgICAgdGV4dDogY2hhbmdlLnRleHQsCi0gICAgICAgIHJlbW92
ZWQ6IGNoYW5nZS5yZW1vdmVkLAotICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4KLSAgICAg
IH07Ci0gICAgICBpZiAoY2hhbmdlSGFuZGxlcikgc2lnbmFsTGF0ZXIoY20sICJjaGFuZ2UiLCBj
bSwgb2JqKTsKLSAgICAgIGlmIChjaGFuZ2VzSGFuZGxlcikgKGNtLmN1ck9wLmNoYW5nZU9ianMg
fHwgKGNtLmN1ck9wLmNoYW5nZU9ianMgPSBbXSkpLnB1c2gob2JqKTsKLSAgICB9Ci0gICAgY20u
ZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7Ci0gIH0KLQotICBmdW5jdGlvbiByZXBs
YWNlUmFuZ2UoZG9jLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7Ci0gICAgaWYgKCF0bykgdG8g
PSBmcm9tOwotICAgIGlmIChjbXAodG8sIGZyb20pIDwgMCkgeyB2YXIgdG1wID0gdG87IHRvID0g
ZnJvbTsgZnJvbSA9IHRtcDsgfQotICAgIGlmICh0eXBlb2YgY29kZSA9PSAic3RyaW5nIikgY29k
ZSA9IGRvYy5zcGxpdExpbmVzKGNvZGUpOwotICAgIG1ha2VDaGFuZ2UoZG9jLCB7ZnJvbTogZnJv
bSwgdG86IHRvLCB0ZXh0OiBjb2RlLCBvcmlnaW46IG9yaWdpbn0pOwotICB9Ci0KLSAgLy8gU0NS
T0xMSU5HIFRISU5HUyBJTlRPIFZJRVcKLQotICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUg
dG9wIG9yIGJvdHRvbSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHkKLSAgLy8gc2Nyb2xsZWQgb3V0
IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS4KLSAgZnVu
Y3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIGNvb3JkcykgewotICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgInNjcm9sbEN1cnNvckludG9WaWV3IikpIHJldHVybjsKLQotICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKSwgZG9TY3JvbGwgPSBudWxsOwotICAgIGlmIChjb29yZHMudG9wICsgYm94LnRvcCA8IDAp
IGRvU2Nyb2xsID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+
ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl
aWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7Ci0gICAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBo
YW50b20pIHsKLSAgICAgIHZhciBzY3JvbGxOb2RlID0gZWx0KCJkaXYiLCAiXHUyMDBiIiwgbnVs
bCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNw
bGF5KSkgKyAicHg7IGhlaWdodDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY29v
cmRzLmJvdHRvbSAtIGNvb3Jkcy50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWln
aHQpICsgInB4OyBsZWZ0OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5s
ZWZ0ICsgInB4OyB3aWR0aDogMnB4OyIpOwotICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBw
ZW5kQ2hpbGQoc2Nyb2xsTm9kZSk7Ci0gICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRv
U2Nyb2xsKTsKLSAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKHNjcm9sbE5v
ZGUpOwotICAgIH0KKyAgICAgIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSB9
CisgIH0gZWxzZSB7CisgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKQorICAgIG91cklu
ZGV4ID0gZG9jLnNlbC5wcmltSW5kZXgKKyAgfQorCisgIGlmIChjaHJvbWVPUyA/IGUuc2hpZnRL
ZXkgJiYgZS5tZXRhS2V5IDogZS5hbHRLZXkpIHsKKyAgICB0eXBlID0gInJlY3QiCisgICAgaWYg
KCFhZGROZXcpIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSB9CisgICAgc3Rh
cnQgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpCisgICAgb3VySW5kZXggPSAtMQor
ICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsKKyAgICB2YXIgd29yZCA9IGNtLmZpbmRX
b3JkQXQoc3RhcnQpCisgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKKyAg
ICAgIHsgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCB3b3JkLmFuY2hvciwg
d29yZC5oZWFkKSB9CisgICAgZWxzZQorICAgICAgeyBvdXJSYW5nZSA9IHdvcmQgfQorICB9IGVs
c2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKKyAgICB2YXIgbGluZSA9IG5ldyBSYW5nZShQb3Mo
c3RhcnQubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3Moc3RhcnQubGluZSArIDEsIDApKSkKKyAg
ICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKQorICAgICAgeyBvdXJSYW5nZSA9
IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIGxpbmUuYW5jaG9yLCBsaW5lLmhlYWQpIH0KKyAg
ICBlbHNlCisgICAgICB7IG91clJhbmdlID0gbGluZSB9CisgIH0gZWxzZSB7CisgICAgb3VyUmFu
Z2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBzdGFydCkKKyAgfQorCisgIGlmICghYWRk
TmV3KSB7CisgICAgb3VySW5kZXggPSAwCisgICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVj
dGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKQorICAgIHN0YXJ0U2VsID0gZG9jLnNlbAor
ICB9IGVsc2UgaWYgKG91ckluZGV4ID09IC0xKSB7CisgICAgb3VySW5kZXggPSByYW5nZXMubGVu
Z3RoCisgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcy5jb25j
YXQoW291clJhbmdlXSksIG91ckluZGV4KSwKKyAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFs
c2UsIG9yaWdpbjogIiptb3VzZSJ9KQorICB9IGVsc2UgaWYgKHJhbmdlcy5sZW5ndGggPiAxICYm
IHJhbmdlc1tvdXJJbmRleF0uZW1wdHkoKSAmJiB0eXBlID09ICJzaW5nbGUiICYmICFlLnNoaWZ0
S2V5KSB7CisgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcy5z
bGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcy5zbGljZShvdXJJbmRleCArIDEpKSwgMCks
CisgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46ICIqbW91c2UifSkKKyAg
ICBzdGFydFNlbCA9IGRvYy5zZWwKKyAgfSBlbHNlIHsKKyAgICByZXBsYWNlT25lU2VsZWN0aW9u
KGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpCiAgIH0KIAotICAvLyBTY3JvbGwg
YSBnaXZlbiBwb3NpdGlvbiBpbnRvIHZpZXcgKGltbWVkaWF0ZWx5KSwgdmVyaWZ5aW5nIHRoYXQK
LSAgLy8gaXQgYWN0dWFsbHkgYmVjYW1lIHZpc2libGUgKGFzIGxpbmUgaGVpZ2h0cyBhcmUgYWNj
dXJhdGVseQotICAvLyBtZWFzdXJlZCwgdGhlIHBvc2l0aW9uIG9mIHNvbWV0aGluZyBtYXkgJ2Ry
aWZ0JyBkdXJpbmcgZHJhd2luZykuCi0gIGZ1bmN0aW9uIHNjcm9sbFBvc0ludG9WaWV3KGNtLCBw
b3MsIGVuZCwgbWFyZ2luKSB7Ci0gICAgaWYgKG1hcmdpbiA9PSBudWxsKSBtYXJnaW4gPSAwOwot
ICAgIGZvciAodmFyIGxpbWl0ID0gMDsgbGltaXQgPCA1OyBsaW1pdCsrKSB7Ci0gICAgICB2YXIg
Y2hhbmdlZCA9IGZhbHNlLCBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHBvcyk7Ci0gICAgICB2
YXIgZW5kQ29vcmRzID0gIWVuZCB8fCBlbmQgPT0gcG9zID8gY29vcmRzIDogY3Vyc29yQ29vcmRz
KGNtLCBlbmQpOwotICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwg
TWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oY29vcmRzLnRvcCwgZW5kQ29vcmRzLnRv
cCkgLSBtYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
dGgubWF4KGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGNvb3Jkcy5ib3R0b20sIGVuZENvb3Jkcy5i
b3R0b20pICsgbWFyZ2luKTsKLSAgICAgIHZhciBzdGFydFRvcCA9IGNtLmRvYy5zY3JvbGxUb3As
IHN0YXJ0TGVmdCA9IGNtLmRvYy5zY3JvbGxMZWZ0OwotICAgICAgaWYgKHNjcm9sbFBvcy5zY3Jv
bGxUb3AgIT0gbnVsbCkgewotICAgICAgICBzZXRTY3JvbGxUb3AoY20sIHNjcm9sbFBvcy5zY3Jv
bGxUb3ApOwotICAgICAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHN0YXJ0VG9w
KSA+IDEpIGNoYW5nZWQgPSB0cnVlOworICB2YXIgbGFzdFBvcyA9IHN0YXJ0CisgIGZ1bmN0aW9u
IGV4dGVuZFRvKHBvcykgeworICAgIGlmIChjbXAobGFzdFBvcywgcG9zKSA9PSAwKSB7IHJldHVy
biB9CisgICAgbGFzdFBvcyA9IHBvcworCisgICAgaWYgKHR5cGUgPT0gInJlY3QiKSB7CisgICAg
ICB2YXIgcmFuZ2VzID0gW10sIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemUKKyAgICAgIHZh
ciBzdGFydENvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBz
dGFydC5jaCwgdGFiU2l6ZSkKKyAgICAgIHZhciBwb3NDb2wgPSBjb3VudENvbHVtbihnZXRMaW5l
KGRvYywgcG9zLmxpbmUpLnRleHQsIHBvcy5jaCwgdGFiU2l6ZSkKKyAgICAgIHZhciBsZWZ0ID0g
TWF0aC5taW4oc3RhcnRDb2wsIHBvc0NvbCksIHJpZ2h0ID0gTWF0aC5tYXgoc3RhcnRDb2wsIHBv
c0NvbCkKKyAgICAgIGZvciAodmFyIGxpbmUgPSBNYXRoLm1pbihzdGFydC5saW5lLCBwb3MubGlu
ZSksIGVuZCA9IE1hdGgubWluKGNtLmxhc3RMaW5lKCksIE1hdGgubWF4KHN0YXJ0LmxpbmUsIHBv
cy5saW5lKSk7CisgICAgICAgICAgIGxpbmUgPD0gZW5kOyBsaW5lKyspIHsKKyAgICAgICAgdmFy
IHRleHQgPSBnZXRMaW5lKGRvYywgbGluZSkudGV4dCwgbGVmdFBvcyA9IGZpbmRDb2x1bW4odGV4
dCwgbGVmdCwgdGFiU2l6ZSkKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAg
eyByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVm
dFBvcykpKSB9CisgICAgICAgIGVsc2UgaWYgKHRleHQubGVuZ3RoID4gbGVmdFBvcykKKyAgICAg
ICAgICB7IHJhbmdlcy5wdXNoKG5ldyBSYW5nZShQb3MobGluZSwgbGVmdFBvcyksIFBvcyhsaW5l
LCBmaW5kQ29sdW1uKHRleHQsIHJpZ2h0LCB0YWJTaXplKSkpKSB9CiAgICAgICB9Ci0gICAgICBp
ZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkgewotICAgICAgICBzZXRTY3JvbGxMZWZ0
KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7Ci0gICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Mu
c2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgIGlmICgh
cmFuZ2VzLmxlbmd0aCkgeyByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSkgfQor
ICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHN0YXJ0U2VsLnJhbmdl
cy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcyksIG91ckluZGV4KSwKKyAgICAgICAg
ICAgICAgICAgICB7b3JpZ2luOiAiKm1vdXNlIiwgc2Nyb2xsOiBmYWxzZX0pCisgICAgICBjbS5z
Y3JvbGxJbnRvVmlldyhwb3MpCisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBvbGRSYW5nZSA9IG91
clJhbmdlCisgICAgICB2YXIgYW5jaG9yID0gb2xkUmFuZ2UuYW5jaG9yLCBoZWFkID0gcG9zCisg
ICAgICBpZiAodHlwZSAhPSAic2luZ2xlIikgeworICAgICAgICB2YXIgcmFuZ2UKKyAgICAgICAg
aWYgKHR5cGUgPT0gImRvdWJsZSIpCisgICAgICAgICAgeyByYW5nZSA9IGNtLmZpbmRXb3JkQXQo
cG9zKSB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7IHJhbmdlID0gbmV3IFJhbmdlKFBvcyhw
b3MubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpIH0KKyAgICAg
ICAgaWYgKGNtcChyYW5nZS5hbmNob3IsIGFuY2hvcikgPiAwKSB7CisgICAgICAgICAgaGVhZCA9
IHJhbmdlLmhlYWQKKyAgICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCBy
YW5nZS5hbmNob3IpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaGVhZCA9IHJhbmdlLmFu
Y2hvcgorICAgICAgICAgIGFuY2hvciA9IG1heFBvcyhvbGRSYW5nZS50bygpLCByYW5nZS5oZWFk
KQorICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZiAoIWNoYW5nZWQpIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gY29vcmRzOwotICB9Ci0KLSAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNv
b3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLgotICBmdW5jdGlvbiBzY3JvbGxJbnRv
VmlldyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICB2YXIgc2Nyb2xsUG9zID0gY2FsY3VsYXRl
U2Nyb2xsUG9zKGNtLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxU
b3AgIT0gbnVsbCkgc2V0U2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsKLSAgICBp
ZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkgc2V0U2Nyb2xsTGVmdChjbSwgc2Nyb2xs
UG9zLnNjcm9sbExlZnQpOwotICB9Ci0KLSAgLy8gQ2FsY3VsYXRlIGEgbmV3IHNjcm9sbCBwb3Np
dGlvbiBuZWVkZWQgdG8gc2Nyb2xsIHRoZSBnaXZlbgotICAvLyByZWN0YW5nbGUgaW50byB2aWV3
LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmQKLSAgLy8gc2Nyb2xsTGVmdCBw
cm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZQotICAvLyB2ZXJ0aWNhbC9o
b3Jpem9udGFsIHBvc2l0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQuCi0gIGZ1bmN0
aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIHNuYXBNYXJnaW4gPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOwot
ICAgIGlmICh5MSA8IDApIHkxID0gMDsKLSAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYg
Y20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbFRvcDsKLSAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSks
IHJlc3VsdCA9IHt9OwotICAgIGlmICh5MiAtIHkxID4gc2NyZWVuKSB5MiA9IHkxICsgc2NyZWVu
OwotICAgIHZhciBkb2NCb3R0b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxh
eSk7Ci0gICAgdmFyIGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9j
Qm90dG9tIC0gc25hcE1hcmdpbjsKLSAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsKLSAgICAgIHJl
c3VsdC5zY3JvbGxUb3AgPSBhdFRvcCA/IDAgOiB5MTsKLSAgICB9IGVsc2UgaWYgKHkyID4gc2Ny
ZWVudG9wICsgc2NyZWVuKSB7Ci0gICAgICB2YXIgbmV3VG9wID0gTWF0aC5taW4oeTEsIChhdEJv
dHRvbSA/IGRvY0JvdHRvbSA6IHkyKSAtIHNjcmVlbik7Ci0gICAgICBpZiAobmV3VG9wICE9IHNj
cmVlbnRvcCkgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsKKyAgICAgIHZhciByYW5nZXMkMSA9
IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKQorICAgICAgcmFuZ2VzJDFbb3VySW5kZXhdID0gbmV3
IFJhbmdlKGNsaXBQb3MoZG9jLCBhbmNob3IpLCBoZWFkKQorICAgICAgc2V0U2VsZWN0aW9uKGRv
Yywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcyQxLCBvdXJJbmRleCksIHNlbF9tb3VzZSkKICAg
ICB9CisgIH0KIAotICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Ny
b2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsTGVmdDsKLSAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0
aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApOwotICAg
IHZhciB0b29XaWRlID0geDIgLSB4MSA+IHNjcmVlbnc7Ci0gICAgaWYgKHRvb1dpZGUpIHgyID0g
eDEgKyBzY3JlZW53OwotICAgIGlmICh4MSA8IDEwKQotICAgICAgcmVzdWx0LnNjcm9sbExlZnQg
PSAwOwotICAgIGVsc2UgaWYgKHgxIDwgc2NyZWVubGVmdCkKLSAgICAgIHJlc3VsdC5zY3JvbGxM
ZWZ0ID0gTWF0aC5tYXgoMCwgeDEgLSAodG9vV2lkZSA/IDAgOiAxMCkpOwotICAgIGVsc2UgaWYg
KHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKQotICAgICAgcmVzdWx0LnNjcm9sbExlZnQg
PSB4MiArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSAgfQotCi0gIC8vIFN0b3JlIGEgcmVsYXRpdmUgYWRqdXN0bWVudCB0byB0aGUgc2Nyb2xsIHBv
c2l0aW9uIGluIHRoZSBjdXJyZW50Ci0gIC8vIG9wZXJhdGlvbiAodG8gYmUgYXBwbGllZCB3aGVu
IHRoZSBvcGVyYXRpb24gZmluaXNoZXMpLgotICBmdW5jdGlvbiBhZGRUb1Njcm9sbFBvcyhjbSwg
bGVmdCwgdG9wKSB7Ci0gICAgaWYgKGxlZnQgIT0gbnVsbCB8fCB0b3AgIT0gbnVsbCkgcmVzb2x2
ZVNjcm9sbFRvUG9zKGNtKTsKLSAgICBpZiAobGVmdCAhPSBudWxsKQotICAgICAgY20uY3VyT3Au
c2Nyb2xsTGVmdCA9IChjbS5jdXJPcC5zY3JvbGxMZWZ0ID09IG51bGwgPyBjbS5kb2Muc2Nyb2xs
TGVmdCA6IGNtLmN1ck9wLnNjcm9sbExlZnQpICsgbGVmdDsKLSAgICBpZiAodG9wICE9IG51bGwp
Ci0gICAgICBjbS5jdXJPcC5zY3JvbGxUb3AgPSAoY20uY3VyT3Auc2Nyb2xsVG9wID09IG51bGwg
PyBjbS5kb2Muc2Nyb2xsVG9wIDogY20uY3VyT3Auc2Nyb2xsVG9wKSArIHRvcDsKLSAgfQotCi0g
IC8vIE1ha2Ugc3VyZSB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiB0aGUgY3VycmVu
dCBjdXJzb3IgaXMKLSAgLy8gc2hvd24uCi0gIGZ1bmN0aW9uIGVuc3VyZUN1cnNvclZpc2libGUo
Y20pIHsKLSAgICByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOwotICAgIHZhciBjdXIgPSBjbS5nZXRD
dXJzb3IoKSwgZnJvbSA9IGN1ciwgdG8gPSBjdXI7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVX
cmFwcGluZykgewotICAgICAgZnJvbSA9IGN1ci5jaCA/IFBvcyhjdXIubGluZSwgY3VyLmNoIC0g
MSkgOiBjdXI7Ci0gICAgICB0byA9IFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSk7Ci0gICAgfQot
ICAgIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0ge2Zyb206IGZyb20sIHRvOiB0bywgbWFyZ2luOiBj
bS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbiwgaXNDdXJzb3I6IHRydWV9OwotICB9Ci0KLSAg
Ly8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFu
ZCBhbm90aGVyCi0gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBv
ZiB0aGUgb3BlcmF0aW9uLCB0aGlzCi0gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBv
c2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc28KLSAgLy8gdGhhdCB0aGUgZWZmZWN0
IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCi0gIGZ1bmN0
aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkgewotICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNj
cm9sbFRvUG9zOwotICAgIGlmIChyYW5nZSkgewotICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3Mg
PSBudWxsOwotICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSks
IHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTsKLSAgICAgIHZhciBzUG9zID0gY2Fs
Y3VsYXRlU2Nyb2xsUG9zKGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkg
LSByYW5nZS5tYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRo
Lm1heChmcm9tLnJpZ2h0LCB0by5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7
Ci0gICAgICBjbS5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAg
dmFyIGVkaXRvclNpemUgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkK
KyAgLy8gVXNlZCB0byBlbnN1cmUgdGltZW91dCByZS10cmllcyBkb24ndCBmaXJlIHdoZW4gYW5v
dGhlciBleHRlbmQKKyAgLy8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQg
aXNuJ3QgcmVsaWFibGUgLS0gYXQKKyAgLy8gbGVhc3Qgb24gQ2hyb21lLCB0aGUgdGltZW91dHMg
c3RpbGwgaGFwcGVuIGV2ZW4gd2hlbiBjbGVhcmVkLAorICAvLyBpZiB0aGUgY2xlYXIgaGFwcGVu
cyBhZnRlciB0aGVpciBzY2hlZHVsZWQgZmlyaW5nIHRpbWUpLgorICB2YXIgY291bnRlciA9IDAK
KworICBmdW5jdGlvbiBleHRlbmQoZSkgeworICAgIHZhciBjdXJDb3VudCA9ICsrY291bnRlcgor
ICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHR5cGUgPT0gInJlY3QiKQor
ICAgIGlmICghY3VyKSB7IHJldHVybiB9CisgICAgaWYgKGNtcChjdXIsIGxhc3RQb3MpICE9IDAp
IHsKKyAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCkKKyAgICAgIGV4dGVuZFRvKGN1
cikKKyAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYykKKyAgICAg
IGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQor
ICAgICAgICB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7aWYgKGNvdW50
ZXIgPT0gY3VyQ291bnQpIHsgZXh0ZW5kKGUpIH19KSwgMTUwKSB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIHZhciBvdXRzaWRlID0gZS5jbGllbnRZIDwgZWRpdG9yU2l6ZS50b3AgPyAtMjAgOiBlLmNs
aWVudFkgPiBlZGl0b3JTaXplLmJvdHRvbSA/IDIwIDogMAorICAgICAgaWYgKG91dHNpZGUpIHsg
c2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKGNvdW50
ZXIgIT0gY3VyQ291bnQpIHsgcmV0dXJuIH0KKyAgICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3AgKz0gb3V0c2lkZQorICAgICAgICBleHRlbmQoZSkKKyAgICAgIH0pLCA1MCkgfQogICAg
IH0KICAgfQogCi0gIC8vIEFQSSBVVElMSVRJRVMKLQotICAvLyBJbmRlbnQgdGhlIGdpdmVuIGxp
bmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSAic21hcnQiLAotICAvLyAiYWRkIi9udWxsLCAi
c3VidHJhY3QiLCBvciAicHJldiIuIFdoZW4gYWdncmVzc2l2ZSBpcyBmYWxzZQotICAvLyAodHlw
aWNhbGx5IHNldCB0byB0cnVlIGZvciBmb3JjZWQgc2luZ2xlLWxpbmUgaW5kZW50cyksIGVtcHR5
Ci0gIC8vIGxpbmVzIGFyZSBub3QgaW5kZW50ZWQsIGFuZCBwbGFjZXMgd2hlcmUgdGhlIG1vZGUg
cmV0dXJucyBQYXNzCi0gIC8vIGFyZSBsZWZ0IGFsb25lLgotICBmdW5jdGlvbiBpbmRlbnRMaW5l
KGNtLCBuLCBob3csIGFnZ3Jlc3NpdmUpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jLCBzdGF0ZTsK
LSAgICBpZiAoaG93ID09IG51bGwpIGhvdyA9ICJhZGQiOwotICAgIGlmIChob3cgPT0gInNtYXJ0
IikgewotICAgICAgLy8gRmFsbCBiYWNrIHRvICJwcmV2IiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3Qg
aGF2ZSBhbiBpbmRlbnRhdGlvbgotICAgICAgLy8gbWV0aG9kLgotICAgICAgaWYgKCFkb2MubW9k
ZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKLSAgICAgIGVsc2Ugc3RhdGUgPSBnZXRTdGF0ZUJlZm9y
ZShjbSwgbik7CisgIGZ1bmN0aW9uIGRvbmUoZSkgeworICAgIGNtLnN0YXRlLnNlbGVjdGluZ1Rl
eHQgPSBmYWxzZQorICAgIGNvdW50ZXIgPSBJbmZpbml0eQorICAgIGVfcHJldmVudERlZmF1bHQo
ZSkKKyAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCkKKyAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW1v
dmUiLCBtb3ZlKQorICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCkKKyAgICBkb2MuaGlz
dG9yeS5sYXN0U2VsT3JpZ2luID0gbnVsbAorICB9CisKKyAgdmFyIG1vdmUgPSBvcGVyYXRpb24o
Y20sIGZ1bmN0aW9uIChlKSB7CisgICAgaWYgKCFlX2J1dHRvbihlKSkgeyBkb25lKGUpIH0KKyAg
ICBlbHNlIHsgZXh0ZW5kKGUpIH0KKyAgfSkKKyAgdmFyIHVwID0gb3BlcmF0aW9uKGNtLCBkb25l
KQorICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gdXAKKyAgb24oZG9jdW1lbnQsICJtb3VzZW1v
dmUiLCBtb3ZlKQorICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCkKK30KKworCisvLyBEZXRl
cm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaGFwcGVuZWQgaW4gdGhlIGd1dHRlciwgYW5kIGZpcmVz
IHRoZQorLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LgorZnVuY3Rpb24g
Z3V0dGVyRXZlbnQoY20sIGUsIHR5cGUsIHByZXZlbnQpIHsKKyAgdmFyIG1YLCBtWQorICB0cnkg
eyBtWCA9IGUuY2xpZW50WDsgbVkgPSBlLmNsaWVudFkgfQorICBjYXRjaChlKSB7IHJldHVybiBm
YWxzZSB9CisgIGlmIChtWCA+PSBNYXRoLmZsb29yKGNtLmRpc3BsYXkuZ3V0dGVycy5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5yaWdodCkpIHsgcmV0dXJuIGZhbHNlIH0KKyAgaWYgKHByZXZlbnQp
IHsgZV9wcmV2ZW50RGVmYXVsdChlKSB9CisKKyAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5Cisg
IHZhciBsaW5lQm94ID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisK
KyAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20gfHwgIWhhc0hhbmRsZXIoY20sIHR5cGUpKSB7IHJl
dHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkgfQorICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3Bs
YXkudmlld09mZnNldAorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgY20ub3B0aW9ucy5ndXR0ZXJz
Lmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tp
XQorICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHsK
KyAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpCisgICAgICB2YXIgZ3V0
dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldCisgICAgICBzaWduYWwoY20sIHR5cGUsIGNtLCBs
aW5lLCBndXR0ZXIsIGUpCisgICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpCiAgICAg
fQorICB9Cit9CisKK2Z1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKKyAgcmV0dXJuIGd1
dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ2xpY2siLCB0cnVlKQorfQorCisvLyBDT05URVhUIE1F
TlUgSEFORExJTkcKKworLy8gVG8gbWFrZSB0aGUgY29udGV4dCBtZW51IHdvcmssIHdlIG5lZWQg
dG8gYnJpZWZseSB1bmhpZGUgdGhlCisvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVz
aXZlIGFzIHBvc3NpYmxlKSB0byBsZXQgdGhlCisvLyByaWdodC1jbGljayB0YWtlIGVmZmVjdCBv
biBpdC4KK2Z1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHsKKyAgaWYgKGV2ZW50SW5XaWRn
ZXQoY20uZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHsgcmV0dXJu
IH0KKyAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlLCAiY29udGV4dG1lbnUiKSkgeyByZXR1cm4g
fQorICBjbS5kaXNwbGF5LmlucHV0Lm9uQ29udGV4dE1lbnUoZSkKK30KKworZnVuY3Rpb24gY29u
dGV4dE1lbnVJbkd1dHRlcihjbSwgZSkgeworICBpZiAoIWhhc0hhbmRsZXIoY20sICJndXR0ZXJD
b250ZXh0TWVudSIpKSB7IHJldHVybiBmYWxzZSB9CisgIHJldHVybiBndXR0ZXJFdmVudChjbSwg
ZSwgImd1dHRlckNvbnRleHRNZW51IiwgZmFsc2UpCit9CisKK2Z1bmN0aW9uIHRoZW1lQ2hhbmdl
ZChjbSkgeworICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFw
cGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikgKworICAgIGNtLm9wdGlv
bnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csICIgY20tcy0iKQorICBjbGVhckNhY2hlcyhj
bSkKK30KKwordmFyIEluaXQgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuICJDb2RlTWly
cm9yLkluaXQifX0KKwordmFyIGRlZmF1bHRzID0ge30KK3ZhciBvcHRpb25IYW5kbGVycyA9IHt9
CisKK2Z1bmN0aW9uIGRlZmluZU9wdGlvbnMoQ29kZU1pcnJvcikgeworICB2YXIgb3B0aW9uSGFu
ZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzCiAKLSAgICB2YXIgdGFiU2l6ZSA9IGNt
Lm9wdGlvbnMudGFiU2l6ZTsKLSAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3Bh
Y2UgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIHRhYlNpemUpOwotICAgIGlmIChsaW5l
LnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7Ci0gICAgdmFyIGN1clNwYWNlU3Ry
aW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwotICAgIGlmICgh
YWdncmVzc2l2ZSAmJiAhL1xTLy50ZXN0KGxpbmUudGV4dCkpIHsKLSAgICAgIGluZGVudGF0aW9u
ID0gMDsKLSAgICAgIGhvdyA9ICJub3QiOwotICAgIH0gZWxzZSBpZiAoaG93ID09ICJzbWFydCIp
IHsKLSAgICAgIGluZGVudGF0aW9uID0gZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQu
c2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKLSAgICAgIGlmIChpbmRl
bnRhdGlvbiA9PSBQYXNzIHx8IGluZGVudGF0aW9uID4gMTUwKSB7Ci0gICAgICAgIGlmICghYWdn
cmVzc2l2ZSkgcmV0dXJuOwotICAgICAgICBob3cgPSAicHJldiI7CisgIGZ1bmN0aW9uIG9wdGlv
bihuYW1lLCBkZWZsdCwgaGFuZGxlLCBub3RPbkluaXQpIHsKKyAgICBDb2RlTWlycm9yLmRlZmF1
bHRzW25hbWVdID0gZGVmbHQKKyAgICBpZiAoaGFuZGxlKSB7IG9wdGlvbkhhbmRsZXJzW25hbWVd
ID0KKyAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtpZiAob2xkICE9
IEluaXQpIHsgaGFuZGxlKGNtLCB2YWwsIG9sZCkgfX0gOiBoYW5kbGUgfQorICB9CisKKyAgQ29k
ZU1pcnJvci5kZWZpbmVPcHRpb24gPSBvcHRpb24KKworICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhh
bmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLgorICBDb2RlTWlycm9yLkluaXQgPSBJ
bml0CisKKyAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwgY2FsbGVkIGZyb20gdGhlIGNvbnN0
cnVjdG9yIGJlY2F1c2UgdGhleQorICAvLyBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0
aGUgZWRpdG9yIGNhbiBzdGFydCBhdCBhbGwuCisgIG9wdGlvbigidmFsdWUiLCAiIiwgZnVuY3Rp
b24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLnNldFZhbHVlKHZhbCk7IH0sIHRydWUpCisgIG9wdGlv
bigibW9kZSIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7CisgICAgY20uZG9jLm1vZGVPcHRp
b24gPSB2YWwKKyAgICBsb2FkTW9kZShjbSkKKyAgfSwgdHJ1ZSkKKworICBvcHRpb24oImluZGVu
dFVuaXQiLCAyLCBsb2FkTW9kZSwgdHJ1ZSkKKyAgb3B0aW9uKCJpbmRlbnRXaXRoVGFicyIsIGZh
bHNlKQorICBvcHRpb24oInNtYXJ0SW5kZW50IiwgdHJ1ZSkKKyAgb3B0aW9uKCJ0YWJTaXplIiwg
NCwgZnVuY3Rpb24gKGNtKSB7CisgICAgcmVzZXRNb2RlU3RhdGUoY20pCisgICAgY2xlYXJDYWNo
ZXMoY20pCisgICAgcmVnQ2hhbmdlKGNtKQorICB9LCB0cnVlKQorICBvcHRpb24oImxpbmVTZXBh
cmF0b3IiLCBudWxsLCBmdW5jdGlvbiAoY20sIHZhbCkgeworICAgIGNtLmRvYy5saW5lU2VwID0g
dmFsCisgICAgaWYgKCF2YWwpIHsgcmV0dXJuIH0KKyAgICB2YXIgbmV3QnJlYWtzID0gW10sIGxp
bmVObyA9IGNtLmRvYy5maXJzdAorICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7Cisg
ICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHsKKyAgICAgICAgdmFyIGZvdW5kID0gbGluZS50ZXh0
LmluZGV4T2YodmFsLCBwb3MpCisgICAgICAgIGlmIChmb3VuZCA9PSAtMSkgeyBicmVhayB9Cisg
ICAgICAgIHBvcyA9IGZvdW5kICsgdmFsLmxlbmd0aAorICAgICAgICBuZXdCcmVha3MucHVzaChQ
b3MobGluZU5vLCBmb3VuZCkpCiAgICAgICB9Ci0gICAgfQotICAgIGlmIChob3cgPT0gInByZXYi
KSB7Ci0gICAgICBpZiAobiA+IGRvYy5maXJzdCkgaW5kZW50YXRpb24gPSBjb3VudENvbHVtbihn
ZXRMaW5lKGRvYywgbi0xKS50ZXh0LCBudWxsLCB0YWJTaXplKTsKLSAgICAgIGVsc2UgaW5kZW50
YXRpb24gPSAwOwotICAgIH0gZWxzZSBpZiAoaG93ID09ICJhZGQiKSB7Ci0gICAgICBpbmRlbnRh
dGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OwotICAgIH0gZWxzZSBpZiAo
aG93ID09ICJzdWJ0cmFjdCIpIHsKLSAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5v
cHRpb25zLmluZGVudFVuaXQ7Ci0gICAgfSBlbHNlIGlmICh0eXBlb2YgaG93ID09ICJudW1iZXIi
KSB7Ci0gICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgaG93OwotICAgIH0KLSAgICBpbmRl
bnRhdGlvbiA9IE1hdGgubWF4KDAsIGluZGVudGF0aW9uKTsKKyAgICAgIGxpbmVObysrCisgICAg
fSkKKyAgICBmb3IgKHZhciBpID0gbmV3QnJlYWtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQor
ICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCB2YWwsIG5ld0JyZWFrc1tpXSwgUG9zKG5ld0Jy
ZWFrc1tpXS5saW5lLCBuZXdCcmVha3NbaV0uY2ggKyB2YWwubGVuZ3RoKSkgfQorICB9KQorICBv
cHRpb24oInNwZWNpYWxDaGFycyIsIC9bXHUwMDAwLVx1MDAxZlx1MDA3Zlx1MDBhZFx1MDYxY1x1
MjAwYi1cdTIwMGZcdTIwMjhcdTIwMjlcdWZlZmZdL2csIGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQp
IHsKKyAgICBjbS5zdGF0ZS5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2UgKyAo
dmFsLnRlc3QoIlx0IikgPyAiIiA6ICJ8XHQiKSwgImciKQorICAgIGlmIChvbGQgIT0gSW5pdCkg
eyBjbS5yZWZyZXNoKCkgfQorICB9KQorICBvcHRpb24oInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIi
LCBkZWZhdWx0U3BlY2lhbENoYXJQbGFjZWhvbGRlciwgZnVuY3Rpb24gKGNtKSB7IHJldHVybiBj
bS5yZWZyZXNoKCk7IH0sIHRydWUpCisgIG9wdGlvbigiZWxlY3RyaWNDaGFycyIsIHRydWUpCisg
IG9wdGlvbigiaW5wdXRTdHlsZSIsIG1vYmlsZSA/ICJjb250ZW50ZWRpdGFibGUiIDogInRleHRh
cmVhIiwgZnVuY3Rpb24gKCkgeworICAgIHRocm93IG5ldyBFcnJvcigiaW5wdXRTdHlsZSBjYW4g
bm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvciIpIC8vIEZJWE1FCisgIH0s
IHRydWUpCisgIG9wdGlvbigic3BlbGxjaGVjayIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkg
eyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2sgPSB2YWw7IH0sIHRydWUpCisg
IG9wdGlvbigicnRsTW92ZVZpc3VhbGx5IiwgIXdpbmRvd3MpCisgIG9wdGlvbigid2hvbGVMaW5l
VXBkYXRlQmVmb3JlIiwgdHJ1ZSkKKworICBvcHRpb24oInRoZW1lIiwgImRlZmF1bHQiLCBmdW5j
dGlvbiAoY20pIHsKKyAgICB0aGVtZUNoYW5nZWQoY20pCisgICAgZ3V0dGVyc0NoYW5nZWQoY20p
CisgIH0sIHRydWUpCisgIG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBmdW5jdGlvbiAoY20s
IHZhbCwgb2xkKSB7CisgICAgdmFyIG5leHQgPSBnZXRLZXlNYXAodmFsKQorICAgIHZhciBwcmV2
ID0gb2xkICE9IEluaXQgJiYgZ2V0S2V5TWFwKG9sZCkKKyAgICBpZiAocHJldiAmJiBwcmV2LmRl
dGFjaCkgeyBwcmV2LmRldGFjaChjbSwgbmV4dCkgfQorICAgIGlmIChuZXh0LmF0dGFjaCkgeyBu
ZXh0LmF0dGFjaChjbSwgcHJldiB8fCBudWxsKSB9CisgIH0pCisgIG9wdGlvbigiZXh0cmFLZXlz
IiwgbnVsbCkKIAotICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiIiwgcG9zID0gMDsKLSAgICBpZiAo
Y20ub3B0aW9ucy5pbmRlbnRXaXRoVGFicykKLSAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29y
KGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRT
dHJpbmcgKz0gIlx0Ijt9Ci0gICAgaWYgKHBvcyA8IGluZGVudGF0aW9uKSBpbmRlbnRTdHJpbmcg
Kz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOworICBvcHRpb24oImxpbmVXcmFwcGluZyIs
IGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUpCisgIG9wdGlvbigiZ3V0dGVycyIsIFtdLCBm
dW5jdGlvbiAoY20pIHsKKyAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20ub3B0aW9ucykK
KyAgICBndXR0ZXJzQ2hhbmdlZChjbSkKKyAgfSwgdHJ1ZSkKKyAgb3B0aW9uKCJmaXhlZEd1dHRl
ciIsIHRydWUsIGZ1bmN0aW9uIChjbSwgdmFsKSB7CisgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0
eWxlLmxlZnQgPSB2YWwgPyBjb21wZW5zYXRlRm9ySFNjcm9sbChjbS5kaXNwbGF5KSArICJweCIg
OiAiMCIKKyAgICBjbS5yZWZyZXNoKCkKKyAgfSwgdHJ1ZSkKKyAgb3B0aW9uKCJjb3Zlckd1dHRl
ck5leHRUb1Njcm9sbGJhciIsIGZhbHNlLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHVwZGF0ZVNj
cm9sbGJhcnMoY20pOyB9LCB0cnVlKQorICBvcHRpb24oInNjcm9sbGJhclN0eWxlIiwgIm5hdGl2
ZSIsIGZ1bmN0aW9uIChjbSkgeworICAgIGluaXRTY3JvbGxiYXJzKGNtKQorICAgIHVwZGF0ZVNj
cm9sbGJhcnMoY20pCisgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChjbS5k
b2Muc2Nyb2xsVG9wKQorICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGNt
LmRvYy5zY3JvbGxMZWZ0KQorICB9LCB0cnVlKQorICBvcHRpb24oImxpbmVOdW1iZXJzIiwgZmFs
c2UsIGZ1bmN0aW9uIChjbSkgeworICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRp
b25zKQorICAgIGd1dHRlcnNDaGFuZ2VkKGNtKQorICB9LCB0cnVlKQorICBvcHRpb24oImZpcnN0
TGluZU51bWJlciIsIDEsIGd1dHRlcnNDaGFuZ2VkLCB0cnVlKQorICBvcHRpb24oImxpbmVOdW1i
ZXJGb3JtYXR0ZXIiLCBmdW5jdGlvbiAoaW50ZWdlcikgeyByZXR1cm4gaW50ZWdlcjsgfSwgZ3V0
dGVyc0NoYW5nZWQsIHRydWUpCisgIG9wdGlvbigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCBm
YWxzZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKQogCi0gICAgaWYgKGluZGVudFN0cmluZyAhPSBj
dXJTcGFjZVN0cmluZykgewotICAgICAgcmVwbGFjZVJhbmdlKGRvYywgaW5kZW50U3RyaW5nLCBQ
b3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCAiK2lucHV0Iik7Ci0gICAg
ICBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgICAgcmV0dXJuIHRydWU7CisgIG9wdGlvbigi
cmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwgdHJ1ZSkKKyAgb3B0aW9uKCJsaW5lV2lzZUNv
cHlDdXQiLCB0cnVlKQorCisgIG9wdGlvbigicmVhZE9ubHkiLCBmYWxzZSwgZnVuY3Rpb24gKGNt
LCB2YWwpIHsKKyAgICBpZiAodmFsID09ICJub2N1cnNvciIpIHsKKyAgICAgIG9uQmx1cihjbSkK
KyAgICAgIGNtLmRpc3BsYXkuaW5wdXQuYmx1cigpCisgICAgICBjbS5kaXNwbGF5LmRpc2FibGVk
ID0gdHJ1ZQogICAgIH0gZWxzZSB7Ci0gICAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNv
ciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0Ci0gICAgICAvLyBvZiB0aGUgbGlu
ZSwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNwYWNlLgotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgcmFu
Z2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKLSAgICAgICAgaWYgKHJhbmdlLmhlYWQubGluZSA9PSBu
ICYmIHJhbmdlLmhlYWQuY2ggPCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgICB2
YXIgcG9zID0gUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCk7Ci0gICAgICAgICAgcmVwbGFj
ZU9uZVNlbGVjdGlvbihkb2MsIGksIG5ldyBSYW5nZShwb3MsIHBvcykpOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICB9CisgICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gZmFs
c2UKICAgICB9CisgICAgY20uZGlzcGxheS5pbnB1dC5yZWFkT25seUNoYW5nZWQodmFsKQorICB9
KQorICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge2lm
ICghdmFsKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKSB9fSwgdHJ1ZSkKKyAgb3B0aW9uKCJk
cmFnRHJvcCIsIHRydWUsIGRyYWdEcm9wQ2hhbmdlZCkKKyAgb3B0aW9uKCJhbGxvd0Ryb3BGaWxl
VHlwZXMiLCBudWxsKQorCisgIG9wdGlvbigiY3Vyc29yQmxpbmtSYXRlIiwgNTMwKQorICBvcHRp
b24oImN1cnNvclNjcm9sbE1hcmdpbiIsIDApCisgIG9wdGlvbigiY3Vyc29ySGVpZ2h0IiwgMSwg
dXBkYXRlU2VsZWN0aW9uLCB0cnVlKQorICBvcHRpb24oInNpbmdsZUN1cnNvckhlaWdodFBlckxp
bmUiLCB0cnVlLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpCisgIG9wdGlvbigid29ya1RpbWUiLCAx
MDApCisgIG9wdGlvbigid29ya0RlbGF5IiwgMTAwKQorICBvcHRpb24oImZsYXR0ZW5TcGFucyIs
IHRydWUsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKQorICBvcHRpb24oImFkZE1vZGVDbGFzcyIsIGZh
bHNlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSkKKyAgb3B0aW9uKCJwb2xsSW50ZXJ2YWwiLCAxMDAp
CisgIG9wdGlvbigidW5kb0RlcHRoIiwgMjAwLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4g
Y20uZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdmFsOyB9KQorICBvcHRpb24oImhpc3RvcnlFdmVu
dERlbGF5IiwgMTI1MCkKKyAgb3B0aW9uKCJ2aWV3cG9ydE1hcmdpbiIsIDEwLCBmdW5jdGlvbiAo
Y20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSkKKyAgb3B0aW9uKCJtYXhIaWdobGln
aHRMZW5ndGgiLCAxMDAwMCwgcmVzZXRNb2RlU3RhdGUsIHRydWUpCisgIG9wdGlvbigibW92ZUlu
cHV0V2l0aEN1cnNvciIsIHRydWUsIGZ1bmN0aW9uIChjbSwgdmFsKSB7CisgICAgaWYgKCF2YWwp
IHsgY20uZGlzcGxheS5pbnB1dC5yZXNldFBvc2l0aW9uKCkgfQorICB9KQorCisgIG9wdGlvbigi
dGFiaW5kZXgiLCBudWxsLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZGlzcGxheS5p
bnB1dC5nZXRGaWVsZCgpLnRhYkluZGV4ID0gdmFsIHx8ICIiOyB9KQorICBvcHRpb24oImF1dG9m
b2N1cyIsIG51bGwpCit9CisKK2Z1bmN0aW9uIGd1dHRlcnNDaGFuZ2VkKGNtKSB7CisgIHVwZGF0
ZUd1dHRlcnMoY20pCisgIHJlZ0NoYW5nZShjbSkKKyAgYWxpZ25Ib3Jpem9udGFsbHkoY20pCit9
CisKK2Z1bmN0aW9uIGRyYWdEcm9wQ2hhbmdlZChjbSwgdmFsdWUsIG9sZCkgeworICB2YXIgd2Fz
T24gPSBvbGQgJiYgb2xkICE9IEluaXQKKyAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHsKKyAgICB2
YXIgZnVuY3MgPSBjbS5kaXNwbGF5LmRyYWdGdW5jdGlvbnMKKyAgICB2YXIgdG9nZ2xlID0gdmFs
dWUgPyBvbiA6IG9mZgorICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ3N0YXJ0
IiwgZnVuY3Muc3RhcnQpCisgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFnZW50
ZXIiLCBmdW5jcy5lbnRlcikKKyAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWdv
dmVyIiwgZnVuY3Mub3ZlcikKKyAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWds
ZWF2ZSIsIGZ1bmNzLmxlYXZlKQorICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJv
cCIsIGZ1bmNzLmRyb3ApCiAgIH0KK30KIAotICAvLyBVdGlsaXR5IGZvciBhcHBseWluZyBhIGNo
YW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlciwKLSAgLy8gcmV0dXJuaW5nIHRoZSBu
dW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXMKLSAgLy8gY2hhbmdl
ZC4KLSAgZnVuY3Rpb24gY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHsK
LSAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7Ci0gICAgaWYgKHR5cGVvZiBoYW5k
bGUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9jLCBoYW5kbGUp
KTsKLSAgICBlbHNlIG5vID0gbGluZU5vKGhhbmRsZSk7Ci0gICAgaWYgKG5vID09IG51bGwpIHJl
dHVybiBudWxsOwotICAgIGlmIChvcChsaW5lLCBubykgJiYgZG9jLmNtKSByZWdMaW5lQ2hhbmdl
KGRvYy5jbSwgbm8sIGNoYW5nZVR5cGUpOwotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgLy8g
SGVscGVyIGZvciBkZWxldGluZyB0ZXh0IG5lYXIgdGhlIHNlbGVjdGlvbihzKSwgdXNlZCB0byBp
bXBsZW1lbnQKLSAgLy8gYmFja3NwYWNlLCBkZWxldGUsIGFuZCBzaW1pbGFyIGZ1bmN0aW9uYWxp
dHkuCi0gIGZ1bmN0aW9uIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGNvbXB1dGUpIHsKLSAgICB2
YXIgcmFuZ2VzID0gY20uZG9jLnNlbC5yYW5nZXMsIGtpbGwgPSBbXTsKLSAgICAvLyBCdWlsZCB1
cCBhIHNldCBvZiByYW5nZXMgdG8ga2lsbCBmaXJzdCwgbWVyZ2luZyBvdmVybGFwcGluZwotICAg
IC8vIHJhbmdlcy4KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykg
ewotICAgICAgdmFyIHRvS2lsbCA9IGNvbXB1dGUocmFuZ2VzW2ldKTsKLSAgICAgIHdoaWxlIChr
aWxsLmxlbmd0aCAmJiBjbXAodG9LaWxsLmZyb20sIGxzdChraWxsKS50bykgPD0gMCkgewotICAg
ICAgICB2YXIgcmVwbGFjZWQgPSBraWxsLnBvcCgpOwotICAgICAgICBpZiAoY21wKHJlcGxhY2Vk
LmZyb20sIHRvS2lsbC5mcm9tKSA8IDApIHsKLSAgICAgICAgICB0b0tpbGwuZnJvbSA9IHJlcGxh
Y2VkLmZyb207Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KK2Z1bmN0aW9uIHdyYXBwaW5n
Q2hhbmdlZChjbSkgeworICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICBhZGRD
bGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLXdyYXAiKQorICAgIGNtLmRpc3Bs
YXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSAiIgorICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9
IG51bGwKKyAgfSBlbHNlIHsKKyAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVN
aXJyb3Itd3JhcCIpCisgICAgZmluZE1heExpbmUoY20pCisgIH0KKyAgZXN0aW1hdGVMaW5lSGVp
Z2h0cyhjbSkKKyAgcmVnQ2hhbmdlKGNtKQorICBjbGVhckNhY2hlcyhjbSkKKyAgc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgMTAwKQorfQor
CisvLyBBIENvZGVNaXJyb3IgaW5zdGFuY2UgcmVwcmVzZW50cyBhbiBlZGl0b3IuIFRoaXMgaXMg
dGhlIG9iamVjdAorLy8gdGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguCisK
K2Z1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHsKKyAgdmFyIHRoaXMkMSA9IHRo
aXM7CisKKyAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IpKSB7IHJldHVybiBuZXcg
Q29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgfQorCisgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMg
PSBvcHRpb25zID8gY29weU9iaihvcHRpb25zKSA6IHt9CisgIC8vIERldGVybWluZSBlZmZlY3Rp
dmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgorICBjb3B5T2Jq
KGRlZmF1bHRzLCBvcHRpb25zLCBmYWxzZSkKKyAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9w
dGlvbnMpCisKKyAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWUKKyAgaWYgKHR5cGVvZiBkb2MgPT0g
InN0cmluZyIpIHsgZG9jID0gbmV3IERvYyhkb2MsIG9wdGlvbnMubW9kZSwgbnVsbCwgb3B0aW9u
cy5saW5lU2VwYXJhdG9yKSB9CisgIHRoaXMuZG9jID0gZG9jCisKKyAgdmFyIGlucHV0ID0gbmV3
IENvZGVNaXJyb3IuaW5wdXRTdHlsZXNbb3B0aW9ucy5pbnB1dFN0eWxlXSh0aGlzKQorICB2YXIg
ZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG5ldyBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0KQor
ICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXMKKyAgdXBkYXRlR3V0dGVycyh0aGlz
KQorICB0aGVtZUNoYW5nZWQodGhpcykKKyAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQorICAg
IHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIiB9
CisgIGluaXRTY3JvbGxiYXJzKHRoaXMpCisKKyAgdGhpcy5zdGF0ZSA9IHsKKyAgICBrZXlNYXBz
OiBbXSwgIC8vIHN0b3JlcyBtYXBzIGFkZGVkIGJ5IGFkZEtleU1hcAorICAgIG92ZXJsYXlzOiBb
XSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRPdmVybGF5CisgICAg
bW9kZUdlbjogMCwgICAvLyBidW1wZWQgd2hlbiBtb2RlL292ZXJsYXkgY2hhbmdlcywgdXNlZCB0
byBpbnZhbGlkYXRlIGhpZ2hsaWdodGluZyBpbmZvCisgICAgb3ZlcndyaXRlOiBmYWxzZSwKKyAg
ICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsCisgICAgZm9jdXNlZDogZmFsc2UsCisgICAgc3Vw
cHJlc3NFZGl0czogZmFsc2UsIC8vIHVzZWQgdG8gZGlzYWJsZSBlZGl0aW5nIGR1cmluZyBrZXkg
aGFuZGxlcnMgd2hlbiBpbiByZWFkT25seSBtb2RlCisgICAgcGFzdGVJbmNvbWluZzogZmFsc2Us
IGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGlu
IGlucHV0LnBvbGwKKyAgICBzZWxlY3RpbmdUZXh0OiBmYWxzZSwKKyAgICBkcmFnZ2luZ1RleHQ6
IGZhbHNlLAorICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSwgLy8gc3RvcmVzIGhpZ2hsaWdo
dCB3b3JrZXIgdGltZW91dAorICAgIGtleVNlcTogbnVsbCwgIC8vIFVuZmluaXNoZWQga2V5IHNl
cXVlbmNlCisgICAgc3BlY2lhbENoYXJzOiBudWxsCisgIH0KKworICBpZiAob3B0aW9ucy5hdXRv
Zm9jdXMgJiYgIW1vYmlsZSkgeyBkaXNwbGF5LmlucHV0LmZvY3VzKCkgfQorCisgIC8vIE92ZXJy
aWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2Vz
CisgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkCisgIGlmIChpZSAmJiBpZV92
ZXJzaW9uIDwgMTEpIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuZGlz
cGxheS5pbnB1dC5yZXNldCh0cnVlKTsgfSwgMjApIH0KKworICByZWdpc3RlckV2ZW50SGFuZGxl
cnModGhpcykKKyAgZW5zdXJlR2xvYmFsSGFuZGxlcnMoKQorCisgIHN0YXJ0T3BlcmF0aW9uKHRo
aXMpCisgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlCisgIGF0dGFjaERvYyh0aGlzLCBk
b2MpCisKKyAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCB0aGlzLmhhc0Zv
Y3VzKCkpCisgICAgeyBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKSB9CisgIGVs
c2UKKyAgICB7IG9uQmx1cih0aGlzKSB9CisKKyAgZm9yICh2YXIgb3B0IGluIG9wdGlvbkhhbmRs
ZXJzKSB7IGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKQorICAgIHsgb3B0
aW9uSGFuZGxlcnNbb3B0XSh0aGlzJDEsIG9wdGlvbnNbb3B0XSwgSW5pdCkgfSB9CisgIG1heWJl
VXBkYXRlTGluZU51bWJlcldpZHRoKHRoaXMpCisgIGlmIChvcHRpb25zLmZpbmlzaEluaXQpIHsg
b3B0aW9ucy5maW5pc2hJbml0KHRoaXMpIH0KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9v
a3MubGVuZ3RoOyArK2kpIHsgaW5pdEhvb2tzW2ldKHRoaXMkMSkgfQorICBlbmRPcGVyYXRpb24o
dGhpcykKKyAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2luY2Ug
aXQgYnJlYWtzIHRleHQKKyAgLy8gbWVhc3VyaW5nIG9uIGxpbmUgd3JhcHBpbmcgYm91bmRhcmll
cy4KKyAgaWYgKHdlYmtpdCAmJiBvcHRpb25zLmxpbmVXcmFwcGluZyAmJgorICAgICAgZ2V0Q29t
cHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gIm9wdGltaXplbGVn
aWJpbGl0eSIpCisgICAgeyBkaXNwbGF5LmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZyA9ICJh
dXRvIiB9Cit9CisKKy8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK0NvZGVN
aXJyb3IuZGVmYXVsdHMgPSBkZWZhdWx0cworLy8gRnVuY3Rpb25zIHRvIHJ1biB3aGVuIG9wdGlv
bnMgYXJlIGNoYW5nZWQuCitDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzID0gb3B0aW9uSGFuZGxl
cnMKKworLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBpbml0aWFs
aXppbmcgdGhlIGVkaXRvcgorZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7Cisg
IHZhciBkID0gY20uZGlzcGxheQorICBvbihkLnNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0
aW9uKGNtLCBvbk1vdXNlRG93bikpCisgIC8vIE9sZGVyIElFJ3Mgd2lsbCBub3QgZmlyZSBhIHNl
Y29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrCisgIGlmIChpZSAmJiBpZV92ZXJzaW9u
IDwgMTEpCisgICAgeyBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBvcGVyYXRpb24oY20sIGZ1
bmN0aW9uIChlKSB7CisgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9
CisgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKQorICAgICAgaWYgKCFwb3MgfHwg
Y2xpY2tJbkd1dHRlcihjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkgeyBy
ZXR1cm4gfQorICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKQorICAgICAgdmFyIHdvcmQgPSBjbS5m
aW5kV29yZEF0KHBvcykKKyAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9y
LCB3b3JkLmhlYWQpCisgICAgfSkpIH0KKyAgZWxzZQorICAgIHsgb24oZC5zY3JvbGxlciwgImRi
bGNsaWNrIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBl
X3ByZXZlbnREZWZhdWx0KGUpOyB9KSB9CisgIC8vIFNvbWUgYnJvd3NlcnMgZmlyZSBjb250ZXh0
bWVudSAqYWZ0ZXIqIG9wZW5pbmcgdGhlIG1lbnUsIGF0CisgIC8vIHdoaWNoIHBvaW50IHdlIGNh
bid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKKyAgLy8gaGFuZGxlZCBp
biBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3NlcnMuCisgIGlmICghY2FwdHVyZVJpZ2h0Q2xp
Y2spIHsgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJu
IG9uQ29udGV4dE1lbnUoY20sIGUpOyB9KSB9CisKKyAgLy8gVXNlZCB0byBzdXBwcmVzcyBtb3Vz
ZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVucworICB2YXIgdG91Y2hGaW5pc2hl
ZCwgcHJldlRvdWNoID0ge2VuZDogMH0KKyAgZnVuY3Rpb24gZmluaXNoVG91Y2goKSB7CisgICAg
aWYgKGQuYWN0aXZlVG91Y2gpIHsKKyAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1
bmN0aW9uICgpIHsgcmV0dXJuIGQuYWN0aXZlVG91Y2ggPSBudWxsOyB9LCAxMDAwKQorICAgICAg
cHJldlRvdWNoID0gZC5hY3RpdmVUb3VjaAorICAgICAgcHJldlRvdWNoLmVuZCA9ICtuZXcgRGF0
ZQorICAgIH0KKyAgfQorICBmdW5jdGlvbiBpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkgeworICAg
IGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHsgcmV0dXJuIGZhbHNlIH0KKyAgICB2YXIgdG91
Y2ggPSBlLnRvdWNoZXNbMF0KKyAgICByZXR1cm4gdG91Y2gucmFkaXVzWCA8PSAxICYmIHRvdWNo
LnJhZGl1c1kgPD0gMQorICB9CisgIGZ1bmN0aW9uIGZhckF3YXkodG91Y2gsIG90aGVyKSB7Cisg
ICAgaWYgKG90aGVyLmxlZnQgPT0gbnVsbCkgeyByZXR1cm4gdHJ1ZSB9CisgICAgdmFyIGR4ID0g
b3RoZXIubGVmdCAtIHRvdWNoLmxlZnQsIGR5ID0gb3RoZXIudG9wIC0gdG91Y2gudG9wCisgICAg
cmV0dXJuIGR4ICogZHggKyBkeSAqIGR5ID4gMjAgKiAyMAorICB9CisgIG9uKGQuc2Nyb2xsZXIs
ICJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24gKGUpIHsKKyAgICBpZiAoIXNpZ25hbERPTUV2ZW50KGNt
LCBlKSAmJiAhaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpKSB7CisgICAgICBkLmlucHV0LmVuc3Vy
ZVBvbGxlZCgpCisgICAgICBjbGVhclRpbWVvdXQodG91Y2hGaW5pc2hlZCkKKyAgICAgIHZhciBu
b3cgPSArbmV3IERhdGUKKyAgICAgIGQuYWN0aXZlVG91Y2ggPSB7c3RhcnQ6IG5vdywgbW92ZWQ6
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICBwcmV2OiBub3cgLSBwcmV2VG91Y2guZW5k
IDw9IDMwMCA/IHByZXZUb3VjaCA6IG51bGx9CisgICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9
PSAxKSB7CisgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWAor
ICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5wYWdlWQogICAgICAgfQot
ICAgICAga2lsbC5wdXNoKHRvS2lsbCk7CiAgICAgfQotICAgIC8vIE5leHQsIHJlbW92ZSB0aG9z
ZSBhY3R1YWwgcmFuZ2VzLgotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgZm9y
ICh2YXIgaSA9IGtpbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCi0gICAgICAgIHJlcGxhY2VS
YW5nZShjbS5kb2MsICIiLCBraWxsW2ldLmZyb20sIGtpbGxbaV0udG8sICIrZGVsZXRlIik7Ci0g
ICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIFVzZWQg
Zm9yIGhvcml6b250YWwgcmVsYXRpdmUgbW90aW9uLiBEaXIgaXMgLTEgb3IgMSAobGVmdCBvcgot
ICAvLyByaWdodCksIHVuaXQgY2FuIGJlICJjaGFyIiwgImNvbHVtbiIgKGxpa2UgY2hhciwgYnV0
IGRvZXNuJ3QKLSAgLy8gY3Jvc3MgbGluZSBib3VuZGFyaWVzKSwgIndvcmQiIChhY3Jvc3MgbmV4
dCB3b3JkKSwgb3IgImdyb3VwIiAodG8KLSAgLy8gdGhlIHN0YXJ0IG9mIG5leHQgZ3JvdXAgb2Yg
d29yZCBvciBub24td29yZC1ub24td2hpdGVzcGFjZQotICAvLyBjaGFycykuIFRoZSB2aXN1YWxs
eSBwYXJhbSBjb250cm9scyB3aGV0aGVyLCBpbiByaWdodC10by1sZWZ0Ci0gIC8vIHRleHQsIGRp
cmVjdGlvbiAxIG1lYW5zIHRvIG1vdmUgdG93YXJkcyB0aGUgbmV4dCBpbmRleCBpbiB0aGUKLSAg
Ly8gc3RyaW5nLCBvciB0b3dhcmRzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBj
dXJyZW50Ci0gIC8vIHBvc2l0aW9uLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBh
IGhpdFNpZGU9dHJ1ZQotICAvLyBwcm9wZXJ0eSBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50LgotICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1
YWxseSkgewotICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGNoID0gcG9zLmNoLCBvcmlnRGlyID0g
ZGlyOwotICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUpOwotICAgIHZhciBwb3Nz
aWJsZSA9IHRydWU7Ci0gICAgZnVuY3Rpb24gZmluZE5leHRMaW5lKCkgewotICAgICAgdmFyIGwg
PSBsaW5lICsgZGlyOwotICAgICAgaWYgKGwgPCBkb2MuZmlyc3QgfHwgbCA+PSBkb2MuZmlyc3Qg
KyBkb2Muc2l6ZSkgcmV0dXJuIChwb3NzaWJsZSA9IGZhbHNlKTsKLSAgICAgIGxpbmUgPSBsOwot
ICAgICAgcmV0dXJuIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbCk7CisgIH0pCisgIG9uKGQuc2Ny
b2xsZXIsICJ0b3VjaG1vdmUiLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKGQuYWN0aXZlVG91Y2gp
IHsgZC5hY3RpdmVUb3VjaC5tb3ZlZCA9IHRydWUgfQorICB9KQorICBvbihkLnNjcm9sbGVyLCAi
dG91Y2hlbmQiLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciB0b3VjaCA9IGQuYWN0aXZlVG91Y2gK
KyAgICBpZiAodG91Y2ggJiYgIWV2ZW50SW5XaWRnZXQoZCwgZSkgJiYgdG91Y2gubGVmdCAhPSBu
dWxsICYmCisgICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0ZSAtIHRvdWNoLnN0YXJ0IDwg
MzAwKSB7CisgICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihkLmFjdGl2ZVRvdWNoLCAicGFn
ZSIpLCByYW5nZQorICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNo
LnByZXYpKSAvLyBTaW5nbGUgdGFwCisgICAgICAgIHsgcmFuZ2UgPSBuZXcgUmFuZ2UocG9zLCBw
b3MpIH0KKyAgICAgIGVsc2UgaWYgKCF0b3VjaC5wcmV2LnByZXYgfHwgZmFyQXdheSh0b3VjaCwg
dG91Y2gucHJldi5wcmV2KSkgLy8gRG91YmxlIHRhcAorICAgICAgICB7IHJhbmdlID0gY20uZmlu
ZFdvcmRBdChwb3MpIH0KKyAgICAgIGVsc2UgLy8gVHJpcGxlIHRhcAorICAgICAgICB7IHJhbmdl
ID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxp
bmUgKyAxLCAwKSkpIH0KKyAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdl
LmhlYWQpCisgICAgICBjbS5mb2N1cygpCisgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpCiAgICAg
fQotICAgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7Ci0gICAgICB2YXIgbmV4dCA9
ICh2aXN1YWxseSA/IG1vdmVWaXN1YWxseSA6IG1vdmVMb2dpY2FsbHkpKGxpbmVPYmosIGNoLCBk
aXIsIHRydWUpOwotICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewotICAgICAgICBpZiAoIWJvdW5k
VG9MaW5lICYmIGZpbmROZXh0TGluZSgpKSB7Ci0gICAgICAgICAgaWYgKHZpc3VhbGx5KSBjaCA9
IChkaXIgPCAwID8gbGluZVJpZ2h0IDogbGluZUxlZnQpKGxpbmVPYmopOwotICAgICAgICAgIGVs
c2UgY2ggPSBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDA7Ci0gICAgICAgIH0gZWxz
ZSByZXR1cm4gKHBvc3NpYmxlID0gZmFsc2UpOwotICAgICAgfSBlbHNlIGNoID0gbmV4dDsKLSAg
ICAgIHJldHVybiB0cnVlOworICAgIGZpbmlzaFRvdWNoKCkKKyAgfSkKKyAgb24oZC5zY3JvbGxl
ciwgInRvdWNoY2FuY2VsIiwgZmluaXNoVG91Y2gpCisKKyAgLy8gU3luYyBzY3JvbGxpbmcgYmV0
d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJsZQorICAvLyBhcmVhLCBlbnN1
cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGluZy4KKyAgb24oZC5zY3JvbGxlciwg
InNjcm9sbCIsIGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQp
IHsKKyAgICAgIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApCisgICAgICBz
ZXRTY3JvbGxMZWZ0KGNtLCBkLnNjcm9sbGVyLnNjcm9sbExlZnQsIHRydWUpCisgICAgICBzaWdu
YWwoY20sICJzY3JvbGwiLCBjbSkKICAgICB9CisgIH0pCiAKLSAgICBpZiAodW5pdCA9PSAiY2hh
ciIpIG1vdmVPbmNlKCk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAiY29sdW1uIikgbW92ZU9uY2Uo
dHJ1ZSk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwgdW5pdCA9PSAiZ3JvdXAiKSB7
Ci0gICAgICB2YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5pdCA9PSAiZ3JvdXAiOwotICAg
ICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVscGVyKHBvcywgIndvcmRDaGFy
cyIpOwotICAgICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkgewotICAg
ICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7Ci0gICAgICAgIHZh
ciBjdXIgPSBsaW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4iOwotICAgICAgICB2YXIgdHlw
ZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gInciCi0gICAgICAgICAgOiBncm91cCAmJiBj
dXIgPT0gIlxuIiA/ICJuIgotICAgICAgICAgIDogIWdyb3VwIHx8IC9ccy8udGVzdChjdXIpID8g
bnVsbAotICAgICAgICAgIDogInAiOwotICAgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0ICYmICF0
eXBlKSB0eXBlID0gInMiOwotICAgICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9IHR5cGUp
IHsKLSAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fQotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CisgIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3Jk
ZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuCisgIG9uKGQuc2Nyb2xs
ZXIsICJtb3VzZXdoZWVsIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uU2Nyb2xsV2hlZWwoY20s
IGUpOyB9KQorICBvbihkLnNjcm9sbGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbiAoZSkg
eyByZXR1cm4gb25TY3JvbGxXaGVlbChjbSwgZSk7IH0pCisKKyAgLy8gUHJldmVudCB3cmFwcGVy
IGZyb20gZXZlciBzY3JvbGxpbmcKKyAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24g
KCkgeyByZXR1cm4gZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5zY3JvbGxMZWZ0ID0g
MDsgfSkKKworICBkLmRyYWdGdW5jdGlvbnMgPSB7CisgICAgZW50ZXI6IGZ1bmN0aW9uIChlKSB7
aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgZV9zdG9wKGUpIH19LAorICAgIG92ZXI6IGZ1
bmN0aW9uIChlKSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgb25EcmFnT3ZlcihjbSwg
ZSk7IGVfc3RvcChlKSB9fSwKKyAgICBzdGFydDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uRHJh
Z1N0YXJ0KGNtLCBlKTsgfSwKKyAgICBkcm9wOiBvcGVyYXRpb24oY20sIG9uRHJvcCksCisgICAg
bGVhdmU6IGZ1bmN0aW9uIChlKSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgY2xlYXJE
cmFnQ3Vyc29yKGNtKSB9fQorICB9CisKKyAgdmFyIGlucCA9IGQuaW5wdXQuZ2V0RmllbGQoKQor
ICBvbihpbnAsICJrZXl1cCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbktleVVwLmNhbGwoY20s
IGUpOyB9KQorICBvbihpbnAsICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKQor
ICBvbihpbnAsICJrZXlwcmVzcyIsIG9wZXJhdGlvbihjbSwgb25LZXlQcmVzcykpCisgIG9uKGlu
cCwgImZvY3VzIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uRm9jdXMoY20sIGUpOyB9KQorICBv
bihpbnAsICJibHVyIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uQmx1cihjbSwgZSk7IH0pCit9
CisKK3ZhciBpbml0SG9va3MgPSBbXQorQ29kZU1pcnJvci5kZWZpbmVJbml0SG9vayA9IGZ1bmN0
aW9uIChmKSB7IHJldHVybiBpbml0SG9va3MucHVzaChmKTsgfQorCisvLyBJbmRlbnQgdGhlIGdp
dmVuIGxpbmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSAic21hcnQiLAorLy8gImFkZCIvbnVs
bCwgInN1YnRyYWN0Iiwgb3IgInByZXYiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2UKKy8vICh0
eXBpY2FsbHkgc2V0IHRvIHRydWUgZm9yIGZvcmNlZCBzaW5nbGUtbGluZSBpbmRlbnRzKSwgZW1w
dHkKKy8vIGxpbmVzIGFyZSBub3QgaW5kZW50ZWQsIGFuZCBwbGFjZXMgd2hlcmUgdGhlIG1vZGUg
cmV0dXJucyBQYXNzCisvLyBhcmUgbGVmdCBhbG9uZS4KK2Z1bmN0aW9uIGluZGVudExpbmUoY20s
IG4sIGhvdywgYWdncmVzc2l2ZSkgeworICB2YXIgZG9jID0gY20uZG9jLCBzdGF0ZQorICBpZiAo
aG93ID09IG51bGwpIHsgaG93ID0gImFkZCIgfQorICBpZiAoaG93ID09ICJzbWFydCIpIHsKKyAg
ICAvLyBGYWxsIGJhY2sgdG8gInByZXYiIHdoZW4gdGhlIG1vZGUgZG9lc24ndCBoYXZlIGFuIGlu
ZGVudGF0aW9uCisgICAgLy8gbWV0aG9kLgorICAgIGlmICghZG9jLm1vZGUuaW5kZW50KSB7IGhv
dyA9ICJwcmV2IiB9CisgICAgZWxzZSB7IHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pIH0K
KyAgfQorCisgIHZhciB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplCisgIHZhciBsaW5lID0g
Z2V0TGluZShkb2MsIG4pLCBjdXJTcGFjZSA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwg
dGFiU2l6ZSkKKyAgaWYgKGxpbmUuc3RhdGVBZnRlcikgeyBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxs
IH0KKyAgdmFyIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGlu
ZGVudGF0aW9uCisgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xTLy50ZXN0KGxpbmUudGV4dCkpIHsK
KyAgICBpbmRlbnRhdGlvbiA9IDAKKyAgICBob3cgPSAibm90IgorICB9IGVsc2UgaWYgKGhvdyA9
PSAic21hcnQiKSB7CisgICAgaW5kZW50YXRpb24gPSBkb2MubW9kZS5pbmRlbnQoc3RhdGUsIGxp
bmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpCisgICAgaWYg
KGluZGVudGF0aW9uID09IFBhc3MgfHwgaW5kZW50YXRpb24gPiAxNTApIHsKKyAgICAgIGlmICgh
YWdncmVzc2l2ZSkgeyByZXR1cm4gfQorICAgICAgaG93ID0gInByZXYiCisgICAgfQorICB9Cisg
IGlmIChob3cgPT0gInByZXYiKSB7CisgICAgaWYgKG4gPiBkb2MuZmlyc3QpIHsgaW5kZW50YXRp
b24gPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgbi0xKS50ZXh0LCBudWxsLCB0YWJTaXplKSB9
CisgICAgZWxzZSB7IGluZGVudGF0aW9uID0gMCB9CisgIH0gZWxzZSBpZiAoaG93ID09ICJhZGQi
KSB7CisgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNtLm9wdGlvbnMuaW5kZW50VW5pdAor
ICB9IGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSB7CisgICAgaW5kZW50YXRpb24gPSBjdXJT
cGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdAorICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0g
Im51bWJlciIpIHsKKyAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgaG93CisgIH0KKyAgaW5k
ZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbikKKworICB2YXIgaW5kZW50U3RyaW5n
ID0gIiIsIHBvcyA9IDAKKyAgaWYgKGNtLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpCisgICAgeyBm
b3IgKHZhciBpID0gTWF0aC5mbG9vcihpbmRlbnRhdGlvbiAvIHRhYlNpemUpOyBpOyAtLWkpIHtw
b3MgKz0gdGFiU2l6ZTsgaW5kZW50U3RyaW5nICs9ICJcdCJ9IH0KKyAgaWYgKHBvcyA8IGluZGVu
dGF0aW9uKSB7IGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcykgfQor
CisgIGlmIChpbmRlbnRTdHJpbmcgIT0gY3VyU3BhY2VTdHJpbmcpIHsKKyAgICByZXBsYWNlUmFu
Z2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxl
bmd0aCksICIraW5wdXQiKQorICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGwKKyAgICByZXR1cm4g
dHJ1ZQorICB9IGVsc2UgeworICAgIC8vIEVuc3VyZSB0aGF0LCBpZiB0aGUgY3Vyc29yIHdhcyBp
biB0aGUgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQKKyAgICAvLyBvZiB0aGUgbGluZSwgaXQgaXMg
bW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNwYWNlLgorICAgIGZvciAodmFyIGkkMSA9IDA7IGkk
MSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSQxKyspIHsKKyAgICAgIHZhciByYW5nZSA9IGRv
Yy5zZWwucmFuZ2VzW2kkMV0KKyAgICAgIGlmIChyYW5nZS5oZWFkLmxpbmUgPT0gbiAmJiByYW5n
ZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIHZhciBwb3MkMSA9
IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpCisgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rp
b24oZG9jLCBpJDEsIG5ldyBSYW5nZShwb3MkMSwgcG9zJDEpKQorICAgICAgICBicmVhaworICAg
ICAgfQorICAgIH0KKyAgfQorfQorCisvLyBUaGlzIHdpbGwgYmUgc2V0IHRvIGEge2xpbmVXaXNl
OiBib29sLCB0ZXh0OiBbc3RyaW5nXX0gb2JqZWN0LCBzbworLy8gdGhhdCwgd2hlbiBwYXN0aW5n
LCB3ZSBrbm93IHdoYXQga2luZCBvZiBzZWxlY3Rpb25zIHRoZSBjb3BpZWQKKy8vIHRleHQgd2Fz
IG1hZGUgb3V0IG9mLgordmFyIGxhc3RDb3BpZWQgPSBudWxsCisKK2Z1bmN0aW9uIHNldExhc3RD
b3BpZWQobmV3TGFzdENvcGllZCkgeworICBsYXN0Q29waWVkID0gbmV3TGFzdENvcGllZAorfQor
CitmdW5jdGlvbiBhcHBseVRleHRJbnB1dChjbSwgaW5zZXJ0ZWQsIGRlbGV0ZWQsIHNlbCwgb3Jp
Z2luKSB7CisgIHZhciBkb2MgPSBjbS5kb2MKKyAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlCisg
IGlmICghc2VsKSB7IHNlbCA9IGRvYy5zZWwgfQogCi0gICAgICAgIGlmICh0eXBlKSBzYXdUeXBl
ID0gdHlwZTsKLSAgICAgICAgaWYgKGRpciA+IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIGJyZWFr
OworICB2YXIgcGFzdGUgPSBjbS5zdGF0ZS5wYXN0ZUluY29taW5nIHx8IG9yaWdpbiA9PSAicGFz
dGUiCisgIHZhciB0ZXh0TGluZXMgPSBzcGxpdExpbmVzQXV0byhpbnNlcnRlZCksIG11bHRpUGFz
dGUgPSBudWxsCisgIC8vIFdoZW4gcGFzaW5nIE4gbGluZXMgaW50byBOIHNlbGVjdGlvbnMsIGlu
c2VydCBvbmUgbGluZSBwZXIgc2VsZWN0aW9uCisgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxl
bmd0aCA+IDEpIHsKKyAgICBpZiAobGFzdENvcGllZCAmJiBsYXN0Q29waWVkLnRleHQuam9pbigi
XG4iKSA9PSBpbnNlcnRlZCkgeworICAgICAgaWYgKHNlbC5yYW5nZXMubGVuZ3RoICUgbGFzdENv
cGllZC50ZXh0Lmxlbmd0aCA9PSAwKSB7CisgICAgICAgIG11bHRpUGFzdGUgPSBbXQorICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RDb3BpZWQudGV4dC5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICB7IG11bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkLnRleHRbaV0p
KSB9CiAgICAgICB9CisgICAgfSBlbHNlIGlmICh0ZXh0TGluZXMubGVuZ3RoID09IHNlbC5yYW5n
ZXMubGVuZ3RoKSB7CisgICAgICBtdWx0aVBhc3RlID0gbWFwKHRleHRMaW5lcywgZnVuY3Rpb24g
KGwpIHsgcmV0dXJuIFtsXTsgfSkKICAgICB9Ci0gICAgdmFyIHJlc3VsdCA9IHNraXBBdG9taWMo
ZG9jLCBQb3MobGluZSwgY2gpLCBvcmlnRGlyLCB0cnVlKTsKLSAgICBpZiAoIXBvc3NpYmxlKSBy
ZXN1bHQuaGl0U2lkZSA9IHRydWU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIEZv
ciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAtMSBvciAxLiBVbml0IGNh
biBiZQotICAvLyAicGFnZSIgb3IgImxpbmUiLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwg
aGF2ZSBhIGhpdFNpZGU9dHJ1ZQotICAvLyBwcm9wZXJ0eSBpZiBpdCByZWFjaGVkIHRoZSBlbmQg
b2YgdGhlIGRvY3VtZW50LgotICBmdW5jdGlvbiBmaW5kUG9zVihjbSwgcG9zLCBkaXIsIHVuaXQp
IHsKLSAgICB2YXIgZG9jID0gY20uZG9jLCB4ID0gcG9zLmxlZnQsIHk7Ci0gICAgaWYgKHVuaXQg
PT0gInBhZ2UiKSB7Ci0gICAgICB2YXIgcGFnZVNpemUgPSBNYXRoLm1pbihjbS5kaXNwbGF5Lndy
YXBwZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LmNsaWVudEhlaWdodCk7Ci0gICAgICB5ID0gcG9zLnRvcCArIGRpciAqIChwYWdl
U2l6ZSAtIChkaXIgPCAwID8gMS41IDogLjUpICogdGV4dEhlaWdodChjbS5kaXNwbGF5KSk7Ci0g
ICAgfSBlbHNlIGlmICh1bml0ID09ICJsaW5lIikgewotICAgICAgeSA9IGRpciA+IDAgPyBwb3Mu
Ym90dG9tICsgMyA6IHBvcy50b3AgLSAzOworICB9CisKKyAgdmFyIHVwZGF0ZUlucHV0CisgIC8v
IE5vcm1hbCBiZWhhdmlvciBpcyB0byBpbnNlcnQgdGhlIG5ldyB0ZXh0IGludG8gZXZlcnkgc2Vs
ZWN0aW9uCisgIGZvciAodmFyIGkkMSA9IHNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7
IGkkMS0tKSB7CisgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpJDFdCisgICAgdmFyIGZyb20g
PSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKQorICAgIGlmIChyYW5nZS5lbXB0eSgpKSB7
CisgICAgICBpZiAoZGVsZXRlZCAmJiBkZWxldGVkID4gMCkgLy8gSGFuZGxlIGRlbGV0aW9uCisg
ICAgICAgIHsgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSBkZWxldGVkKSB9CisgICAg
ICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgIXBhc3RlKSAvLyBIYW5kbGUgb3Zlcndy
aXRlCisgICAgICAgIHsgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRv
LmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0aCkpIH0KKyAg
ICAgIGVsc2UgaWYgKGxhc3RDb3BpZWQgJiYgbGFzdENvcGllZC5saW5lV2lzZSAmJiBsYXN0Q29w
aWVkLnRleHQuam9pbigiXG4iKSA9PSBpbnNlcnRlZCkKKyAgICAgICAgeyBmcm9tID0gdG8gPSBQ
b3MoZnJvbS5saW5lLCAwKSB9CiAgICAgfQotICAgIGZvciAoOzspIHsKLSAgICAgIHZhciB0YXJn
ZXQgPSBjb29yZHNDaGFyKGNtLCB4LCB5KTsKLSAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIGJy
ZWFrOwotICAgICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFy
Z2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhazsgfQotICAgICAgeSArPSBkaXIgKiA1OworICAgIHVw
ZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQKKyAgICB2YXIgY2hhbmdlRXZlbnQgPSB7
ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3RlID8gbXVsdGlQYXN0ZVtpJDEgJSBt
dWx0aVBhc3RlLmxlbmd0aF0gOiB0ZXh0TGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgIG9y
aWdpbjogb3JpZ2luIHx8IChwYXN0ZSA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/
ICJjdXQiIDogIitpbnB1dCIpfQorICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCkK
KyAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIsIGNtLCBjaGFuZ2VFdmVudCkKKyAgfQor
ICBpZiAoaW5zZXJ0ZWQgJiYgIXBhc3RlKQorICAgIHsgdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNl
cnRlZCkgfQorCisgIGVuc3VyZUN1cnNvclZpc2libGUoY20pCisgIGNtLmN1ck9wLnVwZGF0ZUlu
cHV0ID0gdXBkYXRlSW5wdXQKKyAgY20uY3VyT3AudHlwaW5nID0gdHJ1ZQorICBjbS5zdGF0ZS5w
YXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBmYWxzZQorfQorCitmdW5jdGlv
biBoYW5kbGVQYXN0ZShlLCBjbSkgeworICB2YXIgcGFzdGVkID0gZS5jbGlwYm9hcmREYXRhICYm
IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikKKyAgaWYgKHBhc3RlZCkgeworICAgIGUu
cHJldmVudERlZmF1bHQoKQorICAgIGlmICghY20uaXNSZWFkT25seSgpICYmICFjbS5vcHRpb25z
LmRpc2FibGVJbnB1dCkKKyAgICAgIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4g
YXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwgMCwgbnVsbCwgInBhc3RlIik7IH0pIH0KKyAgICBy
ZXR1cm4gdHJ1ZQorICB9Cit9CisKK2Z1bmN0aW9uIHRyaWdnZXJFbGVjdHJpYyhjbSwgaW5zZXJ0
ZWQpIHsKKyAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgaW1t
ZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50CisgIGlmICghY20ub3B0aW9ucy5lbGVjdHJpY0No
YXJzIHx8ICFjbS5vcHRpb25zLnNtYXJ0SW5kZW50KSB7IHJldHVybiB9CisgIHZhciBzZWwgPSBj
bS5kb2Muc2VsCisKKyAgZm9yICh2YXIgaSA9IHNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAw
OyBpLS0pIHsKKyAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldCisgICAgaWYgKHJhbmdlLmhl
YWQuY2ggPiAxMDAgfHwgKGkgJiYgc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lID09IHJhbmdl
LmhlYWQubGluZSkpIHsgY29udGludWUgfQorICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJh
bmdlLmhlYWQpCisgICAgdmFyIGluZGVudGVkID0gZmFsc2UKKyAgICBpZiAobW9kZS5lbGVjdHJp
Y0NoYXJzKSB7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1vZGUuZWxlY3RyaWNDaGFycy5s
ZW5ndGg7IGorKykKKyAgICAgICAgeyBpZiAoaW5zZXJ0ZWQuaW5kZXhPZihtb2RlLmVsZWN0cmlj
Q2hhcnMuY2hhckF0KGopKSA+IC0xKSB7CisgICAgICAgICAgaW5kZW50ZWQgPSBpbmRlbnRMaW5l
KGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpCisgICAgICAgICAgYnJlYWsKKyAgICAgICAg
fSB9CisgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHsKKyAgICAgIGlmIChtb2Rl
LmVsZWN0cmljSW5wdXQudGVzdChnZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5saW5lKS50ZXh0
LnNsaWNlKDAsIHJhbmdlLmhlYWQuY2gpKSkKKyAgICAgICAgeyBpbmRlbnRlZCA9IGluZGVudExp
bmUoY20sIHJhbmdlLmhlYWQubGluZSwgInNtYXJ0IikgfQogICAgIH0KLSAgICByZXR1cm4gdGFy
Z2V0OworICAgIGlmIChpbmRlbnRlZCkgeyBzaWduYWxMYXRlcihjbSwgImVsZWN0cmljSW5wdXQi
LCBjbSwgcmFuZ2UuaGVhZC5saW5lKSB9CiAgIH0KK30KKworZnVuY3Rpb24gY29weWFibGVSYW5n
ZXMoY20pIHsKKyAgdmFyIHRleHQgPSBbXSwgcmFuZ2VzID0gW10KKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjbS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBsaW5lID0gY20u
ZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lCisgICAgdmFyIGxpbmVSYW5nZSA9IHthbmNob3I6
IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX0KKyAgICByYW5nZXMucHVzaChs
aW5lUmFuZ2UpCisgICAgdGV4dC5wdXNoKGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxp
bmVSYW5nZS5oZWFkKSkKKyAgfQorICByZXR1cm4ge3RleHQ6IHRleHQsIHJhbmdlczogcmFuZ2Vz
fQorfQorCitmdW5jdGlvbiBkaXNhYmxlQnJvd3Nlck1hZ2ljKGZpZWxkLCBzcGVsbGNoZWNrKSB7
CisgIGZpZWxkLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIikKKyAgZmllbGQuc2V0
QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKQorICBmaWVsZC5zZXRBdHRyaWJ1dGUo
InNwZWxsY2hlY2siLCAhIXNwZWxsY2hlY2spCit9CisKK2Z1bmN0aW9uIGhpZGRlblRleHRhcmVh
KCkgeworICB2YXIgdGUgPSBlbHQoInRleHRhcmVhIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBh
YnNvbHV0ZTsgYm90dG9tOiAtMWVtOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFl
bTsgb3V0bGluZTogbm9uZSIpCisgIHZhciBkaXYgPSBlbHQoImRpdiIsIFt0ZV0sIG51bGwsICJv
dmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDog
MHB4OyIpCisgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0IHBvc2l0aW9uZWQgbmVhciB0aGUgY3Vy
c29yIHRvIHByZXZlbnQgdGhlCisgIC8vIGZhY3QgdGhhdCBpdCdsbCBiZSBzY3JvbGxlZCBpbnRv
IHZpZXcgb24gaW5wdXQgZnJvbSBzY3JvbGxpbmcKKyAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBv
ZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzCisgIC8vIHZlcnkgc2xv
dy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGluc3RlYWQuCisgIGlmICh3ZWJraXQpIHsgdGUuc3R5
bGUud2lkdGggPSAiMTAwMHB4IiB9CisgIGVsc2UgeyB0ZS5zZXRBdHRyaWJ1dGUoIndyYXAiLCAi
b2ZmIikgfQorICAvLyBJZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJk
IChpc3N1ZSAjMTI4NykKKyAgaWYgKGlvcykgeyB0ZS5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlk
IGJsYWNrIiB9CisgIGRpc2FibGVCcm93c2VyTWFnaWModGUpCisgIHJldHVybiBkaXYKK30KKwor
Ly8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgbWV0aG9kT3AoZikgbWVhbnMK
Ky8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJh
bWV0ZXInLgogCi0gIC8vIEVESVRPUiBNRVRIT0RTCisvLyBUaGlzIGlzIG5vdCB0aGUgY29tcGxl
dGUgc2V0IG9mIGVkaXRvciBtZXRob2RzLiBNb3N0IG9mIHRoZQorLy8gbWV0aG9kcyBkZWZpbmVk
IG9uIHRoZSBEb2MgdHlwZSBhcmUgYWxzbyBpbmplY3RlZCBpbnRvCisvLyBDb2RlTWlycm9yLnBy
b3RvdHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZAorLy8gY29udmVuaWVuY2Uu
CiAKLSAgLy8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgbWV0aG9kT3AoZikg
bWVhbnMKLSAgLy8gJ3dyYXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRo
aXNgIHBhcmFtZXRlcicuCitmdW5jdGlvbiBhZGRFZGl0b3JNZXRob2RzKENvZGVNaXJyb3IpIHsK
KyAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycwogCi0gIC8v
IFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRpdG9yIG1ldGhvZHMuIE1vc3Qgb2Yg
dGhlCi0gIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0
ZWQgaW50bwotICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5IGFuZAotICAvLyBjb252ZW5pZW5jZS4KKyAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9y
LmhlbHBlcnMgPSB7fQogCiAgIENvZGVNaXJyb3IucHJvdG90eXBlID0gewogICAgIGNvbnN0cnVj
dG9yOiBDb2RlTWlycm9yLAotICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0
aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LAorICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRv
dy5mb2N1cygpOyB0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKX0sCiAKICAgICBzZXRPcHRpb246
IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKLSAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRp
b25zLCBvbGQgPSBvcHRpb25zW29wdGlvbl07Ci0gICAgICBpZiAob3B0aW9uc1tvcHRpb25dID09
IHZhbHVlICYmIG9wdGlvbiAhPSAibW9kZSIpIHJldHVybjsKLSAgICAgIG9wdGlvbnNbb3B0aW9u
XSA9IHZhbHVlOworICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlv
bnNbb3B0aW9uXQorICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9PSB2YWx1ZSAmJiBvcHRpb24g
IT0gIm1vZGUiKSB7IHJldHVybiB9CisgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZQogICAg
ICAgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdGlvbikpCi0gICAgICAgIG9w
ZXJhdGlvbih0aGlzLCBvcHRpb25IYW5kbGVyc1tvcHRpb25dKSh0aGlzLCB2YWx1ZSwgb2xkKTsK
KyAgICAgICAgeyBvcGVyYXRpb24odGhpcywgb3B0aW9uSGFuZGxlcnNbb3B0aW9uXSkodGhpcywg
dmFsdWUsIG9sZCkgfQorICAgICAgc2lnbmFsKHRoaXMsICJvcHRpb25DaGFuZ2UiLCB0aGlzLCBv
cHRpb24pCiAgICAgfSwKIAotICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJu
IHRoaXMub3B0aW9uc1tvcHRpb25dO30sCi0gICAgZ2V0RG9jOiBmdW5jdGlvbigpIHtyZXR1cm4g
dGhpcy5kb2M7fSwKKyAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbikge3JldHVybiB0aGlz
Lm9wdGlvbnNbb3B0aW9uXX0sCisgICAgZ2V0RG9jOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5k
b2N9LAogCiAgICAgYWRkS2V5TWFwOiBmdW5jdGlvbihtYXAsIGJvdHRvbSkgewotICAgICAgdGhp
cy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNoIiA6ICJ1bnNoaWZ0Il0oZ2V0S2V5TWFwKG1h
cCkpOworICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNoIiA6ICJ1bnNoaWZ0
Il0oZ2V0S2V5TWFwKG1hcCkpCiAgICAgfSwKICAgICByZW1vdmVLZXlNYXA6IGZ1bmN0aW9uKG1h
cCkgewotICAgICAgdmFyIG1hcHMgPSB0aGlzLnN0YXRlLmtleU1hcHM7CisgICAgICB2YXIgbWFw
cyA9IHRoaXMuc3RhdGUua2V5TWFwcwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxl
bmd0aDsgKytpKQotICAgICAgICBpZiAobWFwc1tpXSA9PSBtYXAgfHwgbWFwc1tpXS5uYW1lID09
IG1hcCkgewotICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOwotICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9CisgICAgICAgIHsgaWYgKG1hcHNbaV0gPT0gbWFwIHx8IG1hcHNbaV0u
bmFtZSA9PSBtYXApIHsKKyAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKQorICAgICAgICAgIHJl
dHVybiB0cnVlCisgICAgICAgIH0gfQogICAgIH0sCiAKICAgICBhZGRPdmVybGF5OiBtZXRob2RP
cChmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7Ci0gICAgICB2YXIgbW9kZSA9IHNwZWMudG9rZW4g
PyBzcGVjIDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3BlYyk7Ci0gICAgICBp
ZiAobW9kZS5zdGFydFN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXlzIG1heSBub3QgYmUg
c3RhdGVmdWwuIik7Ci0gICAgICB0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6IG1vZGUs
IG1vZGVTcGVjOiBzcGVjLCBvcGFxdWU6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGFxdWV9KTsKLSAg
ICAgIHRoaXMuc3RhdGUubW9kZUdlbisrOwotICAgICAgcmVnQ2hhbmdlKHRoaXMpOworICAgICAg
dmFyIG1vZGUgPSBzcGVjLnRva2VuID8gc3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9w
dGlvbnMsIHNwZWMpCisgICAgICBpZiAobW9kZS5zdGFydFN0YXRlKSB7IHRocm93IG5ldyBFcnJv
cigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKSB9CisgICAgICBpbnNlcnRTb3J0ZWQo
dGhpcy5zdGF0ZS5vdmVybGF5cywKKyAgICAgICAgICAgICAgICAgICB7bW9kZTogbW9kZSwgbW9k
ZVNwZWM6IHNwZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRpb25zLm9wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgcHJpb3JpdHk6IChvcHRpb25zICYmIG9wdGlvbnMucHJpb3JpdHkpIHx8IDB9
LAorICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdmVybGF5KSB7IHJldHVybiBvdmVybGF5
LnByaW9yaXR5OyB9KQorICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKysKKyAgICAgIHJlZ0NoYW5n
ZSh0aGlzKQogICAgIH0pLAogICAgIHJlbW92ZU92ZXJsYXk6IG1ldGhvZE9wKGZ1bmN0aW9uKHNw
ZWMpIHsKLSAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7CisgICAgICB2
YXIgdGhpcyQxID0gdGhpczsKKworICAgICAgdmFyIG92ZXJsYXlzID0gdGhpcy5zdGF0ZS5vdmVy
bGF5cwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdmVybGF5cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7CisgICAgICAgIHZhciBjdXIg
PSBvdmVybGF5c1tpXS5tb2RlU3BlYwogICAgICAgICBpZiAoY3VyID09IHNwZWMgfHwgdHlwZW9m
IHNwZWMgPT0gInN0cmluZyIgJiYgY3VyLm5hbWUgPT0gc3BlYykgewotICAgICAgICAgIG92ZXJs
YXlzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKLSAgICAg
ICAgICByZWdDaGFuZ2UodGhpcyk7Ci0gICAgICAgICAgcmV0dXJuOworICAgICAgICAgIG92ZXJs
YXlzLnNwbGljZShpLCAxKQorICAgICAgICAgIHRoaXMkMS5zdGF0ZS5tb2RlR2VuKysKKyAgICAg
ICAgICByZWdDaGFuZ2UodGhpcyQxKQorICAgICAgICAgIHJldHVybgogICAgICAgICB9CiAgICAg
ICB9CiAgICAgfSksCiAKICAgICBpbmRlbnRMaW5lOiBtZXRob2RPcChmdW5jdGlvbihuLCBkaXIs
IGFnZ3Jlc3NpdmUpIHsKICAgICAgIGlmICh0eXBlb2YgZGlyICE9ICJzdHJpbmciICYmIHR5cGVv
ZiBkaXIgIT0gIm51bWJlciIpIHsKLSAgICAgICAgaWYgKGRpciA9PSBudWxsKSBkaXIgPSB0aGlz
Lm9wdGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYiOwotICAgICAgICBlbHNlIGRp
ciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKKyAgICAgICAgaWYgKGRpciA9PSBudWxsKSB7
IGRpciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiIgfQorICAg
ICAgICBlbHNlIHsgZGlyID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiIH0KICAgICAgIH0KLSAg
ICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwgYWdn
cmVzc2l2ZSk7CisgICAgICBpZiAoaXNMaW5lKHRoaXMuZG9jLCBuKSkgeyBpbmRlbnRMaW5lKHRo
aXMsIG4sIGRpciwgYWdncmVzc2l2ZSkgfQogICAgIH0pLAogICAgIGluZGVudFNlbGVjdGlvbjog
bWV0aG9kT3AoZnVuY3Rpb24oaG93KSB7Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5kb2Muc2Vs
LnJhbmdlcywgZW5kID0gLTE7CisgICAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgICAgdmFy
IHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xCiAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgcmFuZ2UgPSByYW5n
ZXNbaV07CisgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXQogICAgICAgICBpZiAoIXJhbmdl
LmVtcHR5KCkpIHsKLSAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5n
ZS50bygpOwotICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5saW5lKTsK
LSAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUgLSAodG8u
Y2ggPyAwIDogMSkpICsgMTsKKyAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8g
PSByYW5nZS50bygpCisgICAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5tYXgoZW5kLCBmcm9tLmxp
bmUpCisgICAgICAgICAgZW5kID0gTWF0aC5taW4odGhpcyQxLmxhc3RMaW5lKCksIHRvLmxpbmUg
LSAodG8uY2ggPyAwIDogMSkpICsgMQogICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8
IGVuZDsgKytqKQotICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOwotICAgICAg
ICAgIHZhciBuZXdSYW5nZXMgPSB0aGlzLmRvYy5zZWwucmFuZ2VzOworICAgICAgICAgICAgeyBp
bmRlbnRMaW5lKHRoaXMkMSwgaiwgaG93KSB9CisgICAgICAgICAgdmFyIG5ld1JhbmdlcyA9IHRo
aXMkMS5kb2Muc2VsLnJhbmdlcwogICAgICAgICAgIGlmIChmcm9tLmNoID09IDAgJiYgcmFuZ2Vz
Lmxlbmd0aCA9PSBuZXdSYW5nZXMubGVuZ3RoICYmIG5ld1Jhbmdlc1tpXS5mcm9tKCkuY2ggPiAw
KQotICAgICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbih0aGlzLmRvYywgaSwgbmV3IFJhbmdl
KGZyb20sIG5ld1Jhbmdlc1tpXS50bygpKSwgc2VsX2RvbnRTY3JvbGwpOworICAgICAgICAgICAg
eyByZXBsYWNlT25lU2VsZWN0aW9uKHRoaXMkMS5kb2MsIGksIG5ldyBSYW5nZShmcm9tLCBuZXdS
YW5nZXNbaV0udG8oKSksIHNlbF9kb250U2Nyb2xsKSB9CiAgICAgICAgIH0gZWxzZSBpZiAocmFu
Z2UuaGVhZC5saW5lID4gZW5kKSB7Ci0gICAgICAgICAgaW5kZW50TGluZSh0aGlzLCByYW5nZS5o
ZWFkLmxpbmUsIGhvdywgdHJ1ZSk7Ci0gICAgICAgICAgZW5kID0gcmFuZ2UuaGVhZC5saW5lOwot
ICAgICAgICAgIGlmIChpID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXgpIGVuc3VyZUN1cnNvclZp
c2libGUodGhpcyk7CisgICAgICAgICAgaW5kZW50TGluZSh0aGlzJDEsIHJhbmdlLmhlYWQubGlu
ZSwgaG93LCB0cnVlKQorICAgICAgICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZQorICAgICAgICAg
IGlmIChpID09IHRoaXMkMS5kb2Muc2VsLnByaW1JbmRleCkgeyBlbnN1cmVDdXJzb3JWaXNpYmxl
KHRoaXMkMSkgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfSksCkBAIC00OTE0LDE3OCArNzcx
NSwxNDQgQEAKICAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJh
Y3Rlci4gVXNlZnVsIGZvciBoYWNrcwogICAgIC8vIHRoYXQgd2FudCB0byBpbnNwZWN0IHRoZSBt
b2RlIHN0YXRlIChzYXksIGZvciBjb21wbGV0aW9uKS4KICAgICBnZXRUb2tlbkF0OiBmdW5jdGlv
bihwb3MsIHByZWNpc2UpIHsKLSAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVj
aXNlKTsKKyAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVjaXNlKQogICAgIH0s
CiAKICAgICBnZXRMaW5lVG9rZW5zOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7Ci0gICAgICBy
ZXR1cm4gdGFrZVRva2VuKHRoaXMsIFBvcyhsaW5lKSwgcHJlY2lzZSwgdHJ1ZSk7CisgICAgICBy
ZXR1cm4gdGFrZVRva2VuKHRoaXMsIFBvcyhsaW5lKSwgcHJlY2lzZSwgdHJ1ZSkKICAgICB9LAog
CiAgICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAgcG9zID0gY2xpcFBv
cyh0aGlzLmRvYywgcG9zKTsKLSAgICAgIHZhciBzdHlsZXMgPSBnZXRMaW5lU3R5bGVzKHRoaXMs
IGdldExpbmUodGhpcy5kb2MsIHBvcy5saW5lKSk7Ci0gICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0
ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7Ci0gICAgICB2YXIgdHlw
ZTsKLSAgICAgIGlmIChjaCA9PSAwKSB0eXBlID0gc3R5bGVzWzJdOwotICAgICAgZWxzZSBmb3Ig
KDs7KSB7Ci0gICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7Ci0gICAgICAg
IGlmICgobWlkID8gc3R5bGVzW21pZCAqIDIgLSAxXSA6IDApID49IGNoKSBhZnRlciA9IG1pZDsK
LSAgICAgICAgZWxzZSBpZiAoc3R5bGVzW21pZCAqIDIgKyAxXSA8IGNoKSBiZWZvcmUgPSBtaWQg
KyAxOwotICAgICAgICBlbHNlIHsgdHlwZSA9IHN0eWxlc1ttaWQgKiAyICsgMl07IGJyZWFrOyB9
Ci0gICAgICB9Ci0gICAgICB2YXIgY3V0ID0gdHlwZSA/IHR5cGUuaW5kZXhPZigiY20tb3Zlcmxh
eSAiKSA6IC0xOwotICAgICAgcmV0dXJuIGN1dCA8IDAgPyB0eXBlIDogY3V0ID09IDAgPyBudWxs
IDogdHlwZS5zbGljZSgwLCBjdXQgLSAxKTsKKyAgICAgIHBvcyA9IGNsaXBQb3ModGhpcy5kb2Ms
IHBvcykKKyAgICAgIHZhciBzdHlsZXMgPSBnZXRMaW5lU3R5bGVzKHRoaXMsIGdldExpbmUodGhp
cy5kb2MsIHBvcy5saW5lKSkKKyAgICAgIHZhciBiZWZvcmUgPSAwLCBhZnRlciA9IChzdHlsZXMu
bGVuZ3RoIC0gMSkgLyAyLCBjaCA9IHBvcy5jaAorICAgICAgdmFyIHR5cGUKKyAgICAgIGlmIChj
aCA9PSAwKSB7IHR5cGUgPSBzdHlsZXNbMl0gfQorICAgICAgZWxzZSB7IGZvciAoOzspIHsKKyAg
ICAgICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMQorICAgICAgICBpZiAoKG1pZCA/
IHN0eWxlc1ttaWQgKiAyIC0gMV0gOiAwKSA+PSBjaCkgeyBhZnRlciA9IG1pZCB9CisgICAgICAg
IGVsc2UgaWYgKHN0eWxlc1ttaWQgKiAyICsgMV0gPCBjaCkgeyBiZWZvcmUgPSBtaWQgKyAxIH0K
KyAgICAgICAgZWxzZSB7IHR5cGUgPSBzdHlsZXNbbWlkICogMiArIDJdOyBicmVhayB9CisgICAg
ICB9IH0KKyAgICAgIHZhciBjdXQgPSB0eXBlID8gdHlwZS5pbmRleE9mKCJvdmVybGF5ICIpIDog
LTEKKyAgICAgIHJldHVybiBjdXQgPCAwID8gdHlwZSA6IGN1dCA9PSAwID8gbnVsbCA6IHR5cGUu
c2xpY2UoMCwgY3V0IC0gMSkKICAgICB9LAogCiAgICAgZ2V0TW9kZUF0OiBmdW5jdGlvbihwb3Mp
IHsKLSAgICAgIHZhciBtb2RlID0gdGhpcy5kb2MubW9kZTsKLSAgICAgIGlmICghbW9kZS5pbm5l
ck1vZGUpIHJldHVybiBtb2RlOwotICAgICAgcmV0dXJuIENvZGVNaXJyb3IuaW5uZXJNb2RlKG1v
ZGUsIHRoaXMuZ2V0VG9rZW5BdChwb3MpLnN0YXRlKS5tb2RlOworICAgICAgdmFyIG1vZGUgPSB0
aGlzLmRvYy5tb2RlCisgICAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSB7IHJldHVybiBtb2RlIH0K
KyAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCB0aGlzLmdldFRva2VuQXQo
cG9zKS5zdGF0ZSkubW9kZQogICAgIH0sCiAKICAgICBnZXRIZWxwZXI6IGZ1bmN0aW9uKHBvcywg
dHlwZSkgewotICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBdOworICAg
ICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBdCiAgICAgfSwKIAogICAgIGdl
dEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlwZSkgewotICAgICAgdmFyIGZvdW5kID0gW107Ci0g
ICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBmb3VuZDsKLSAg
ICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwgbW9kZSA9IHRoaXMuZ2V0TW9kZUF0KHBvcyk7
CisgICAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgICAgdmFyIGZvdW5kID0gW10KKyAgICAg
IGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgeyByZXR1cm4gZm91bmQgfQorICAg
ICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKQog
ICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09ICJzdHJpbmciKSB7Ci0gICAgICAgIGlmICho
ZWxwW21vZGVbdHlwZV1dKSBmb3VuZC5wdXNoKGhlbHBbbW9kZVt0eXBlXV0pOworICAgICAgICBp
ZiAoaGVscFttb2RlW3R5cGVdXSkgeyBmb3VuZC5wdXNoKGhlbHBbbW9kZVt0eXBlXV0pIH0KICAg
ICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1vZGVbdHlwZV0ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgdmFsID0gaGVscFttb2Rl
W3R5cGVdW2ldXTsKLSAgICAgICAgICBpZiAodmFsKSBmb3VuZC5wdXNoKHZhbCk7CisgICAgICAg
ICAgdmFyIHZhbCA9IGhlbHBbbW9kZVt0eXBlXVtpXV0KKyAgICAgICAgICBpZiAodmFsKSB7IGZv
dW5kLnB1c2godmFsKSB9CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSBpZiAobW9kZS5oZWxwZXJU
eXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSkgewotICAgICAgICBmb3VuZC5wdXNoKGhlbHBb
bW9kZS5oZWxwZXJUeXBlXSk7CisgICAgICAgIGZvdW5kLnB1c2goaGVscFttb2RlLmhlbHBlclR5
cGVdKQogICAgICAgfSBlbHNlIGlmIChoZWxwW21vZGUubmFtZV0pIHsKLSAgICAgICAgZm91bmQu
cHVzaChoZWxwW21vZGUubmFtZV0pOworICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5uYW1l
XSkKICAgICAgIH0KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVscC5fZ2xvYmFsLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIHZhciBjdXIgPSBoZWxwLl9nbG9iYWxbaV07Ci0gICAgICAgIGlm
IChjdXIucHJlZChtb2RlLCB0aGlzKSAmJiBpbmRleE9mKGZvdW5kLCBjdXIudmFsKSA9PSAtMSkK
LSAgICAgICAgICBmb3VuZC5wdXNoKGN1ci52YWwpOworICAgICAgZm9yICh2YXIgaSQxID0gMDsg
aSQxIDwgaGVscC5fZ2xvYmFsLmxlbmd0aDsgaSQxKyspIHsKKyAgICAgICAgdmFyIGN1ciA9IGhl
bHAuX2dsb2JhbFtpJDFdCisgICAgICAgIGlmIChjdXIucHJlZChtb2RlLCB0aGlzJDEpICYmIGlu
ZGV4T2YoZm91bmQsIGN1ci52YWwpID09IC0xKQorICAgICAgICAgIHsgZm91bmQucHVzaChjdXIu
dmFsKSB9CiAgICAgICB9Ci0gICAgICByZXR1cm4gZm91bmQ7CisgICAgICByZXR1cm4gZm91bmQK
ICAgICB9LAogCiAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgewot
ICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwotICAgICAgbGluZSA9IGNsaXBMaW5lKGRvYywgbGlu
ZSA9PSBudWxsID8gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOiBsaW5lKTsKLSAgICAgIHJldHVy
biBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSk7CisgICAgICB2YXIgZG9j
ID0gdGhpcy5kb2MKKyAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRv
Yy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSkKKyAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9y
ZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSkKICAgICB9LAogCiAgICAgY3Vyc29yQ29vcmRzOiBm
dW5jdGlvbihzdGFydCwgbW9kZSkgewotICAgICAgdmFyIHBvcywgcmFuZ2UgPSB0aGlzLmRvYy5z
ZWwucHJpbWFyeSgpOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9IHJhbmdlLmhlYWQ7
Ci0gICAgICBlbHNlIGlmICh0eXBlb2Ygc3RhcnQgPT0gIm9iamVjdCIpIHBvcyA9IGNsaXBQb3Mo
dGhpcy5kb2MsIHN0YXJ0KTsKLSAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyByYW5nZS5mcm9tKCkg
OiByYW5nZS50bygpOwotICAgICAgcmV0dXJuIGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUg
fHwgInBhZ2UiKTsKKyAgICAgIHZhciBwb3MsIHJhbmdlID0gdGhpcy5kb2Muc2VsLnByaW1hcnko
KQorICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHsgcG9zID0gcmFuZ2UuaGVhZCB9CisgICAgICBl
bHNlIGlmICh0eXBlb2Ygc3RhcnQgPT0gIm9iamVjdCIpIHsgcG9zID0gY2xpcFBvcyh0aGlzLmRv
Yywgc3RhcnQpIH0KKyAgICAgIGVsc2UgeyBwb3MgPSBzdGFydCA/IHJhbmdlLmZyb20oKSA6IHJh
bmdlLnRvKCkgfQorICAgICAgcmV0dXJuIGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUgfHwg
InBhZ2UiKQogICAgIH0sCiAKICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHsK
LSAgICAgIHJldHVybiBjaGFyQ29vcmRzKHRoaXMsIGNsaXBQb3ModGhpcy5kb2MsIHBvcyksIG1v
ZGUgfHwgInBhZ2UiKTsKKyAgICAgIHJldHVybiBjaGFyQ29vcmRzKHRoaXMsIGNsaXBQb3ModGhp
cy5kb2MsIHBvcyksIG1vZGUgfHwgInBhZ2UiKQogICAgIH0sCiAKICAgICBjb29yZHNDaGFyOiBm
dW5jdGlvbihjb29yZHMsIG1vZGUpIHsKLSAgICAgIGNvb3JkcyA9IGZyb21Db29yZFN5c3RlbSh0
aGlzLCBjb29yZHMsIG1vZGUgfHwgInBhZ2UiKTsKLSAgICAgIHJldHVybiBjb29yZHNDaGFyKHRo
aXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTsKKyAgICAgIGNvb3JkcyA9IGZyb21Db29yZFN5
c3RlbSh0aGlzLCBjb29yZHMsIG1vZGUgfHwgInBhZ2UiKQorICAgICAgcmV0dXJuIGNvb3Jkc0No
YXIodGhpcywgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApCiAgICAgfSwKIAogICAgIGxpbmVBdEhl
aWdodDogZnVuY3Rpb24oaGVpZ2h0LCBtb2RlKSB7Ci0gICAgICBoZWlnaHQgPSBmcm9tQ29vcmRT
eXN0ZW0odGhpcywge3RvcDogaGVpZ2h0LCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRvcDsK
LSAgICAgIHJldHVybiBsaW5lQXRIZWlnaHQodGhpcy5kb2MsIGhlaWdodCArIHRoaXMuZGlzcGxh
eS52aWV3T2Zmc2V0KTsKKyAgICAgIGhlaWdodCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7dG9w
OiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wCisgICAgICByZXR1cm4gbGlu
ZUF0SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCkKICAg
ICB9LAotICAgIGhlaWdodEF0TGluZTogZnVuY3Rpb24obGluZSwgbW9kZSkgewotICAgICAgdmFy
IGVuZCA9IGZhbHNlLCBsaW5lT2JqOworICAgIGhlaWdodEF0TGluZTogZnVuY3Rpb24obGluZSwg
bW9kZSwgaW5jbHVkZVdpZGdldHMpIHsKKyAgICAgIHZhciBlbmQgPSBmYWxzZSwgbGluZU9iagog
ICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7Ci0gICAgICAgIHZhciBsYXN0ID0g
dGhpcy5kb2MuZmlyc3QgKyB0aGlzLmRvYy5zaXplIC0gMTsKLSAgICAgICAgaWYgKGxpbmUgPCB0
aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OwotICAgICAgICBlbHNlIGlmIChs
aW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQotICAgICAgICBsaW5lT2Jq
ID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7CisgICAgICAgIHZhciBsYXN0ID0gdGhpcy5kb2Mu
Zmlyc3QgKyB0aGlzLmRvYy5zaXplIC0gMQorICAgICAgICBpZiAobGluZSA8IHRoaXMuZG9jLmZp
cnN0KSB7IGxpbmUgPSB0aGlzLmRvYy5maXJzdCB9CisgICAgICAgIGVsc2UgaWYgKGxpbmUgPiBs
YXN0KSB7IGxpbmUgPSBsYXN0OyBlbmQgPSB0cnVlIH0KKyAgICAgICAgbGluZU9iaiA9IGdldExp
bmUodGhpcy5kb2MsIGxpbmUpCiAgICAgICB9IGVsc2UgewotICAgICAgICBsaW5lT2JqID0gbGlu
ZTsKKyAgICAgICAgbGluZU9iaiA9IGxpbmUKICAgICAgIH0KLSAgICAgIHJldHVybiBpbnRvQ29v
cmRTeXN0ZW0odGhpcywgbGluZU9iaiwge3RvcDogMCwgbGVmdDogMH0sIG1vZGUgfHwgInBhZ2Ui
KS50b3AgKwotICAgICAgICAoZW5kID8gdGhpcy5kb2MuaGVpZ2h0IC0gaGVpZ2h0QXRMaW5lKGxp
bmVPYmopIDogMCk7CisgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmos
IHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIiwgaW5jbHVkZVdpZGdldHMpLnRvcCAr
CisgICAgICAgIChlbmQgPyB0aGlzLmRvYy5oZWlnaHQgLSBoZWlnaHRBdExpbmUobGluZU9iaikg
OiAwKQogICAgIH0sCiAKLSAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVy
biB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSk7IH0sCi0gICAgZGVmYXVsdENoYXJXaWR0aDogZnVu
Y3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgodGhpcy5kaXNwbGF5KTsgfSwKKyAgICBkZWZhdWx0
VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSkg
fSwKKyAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0
aGlzLmRpc3BsYXkpIH0sCiAKLSAgICBzZXRHdXR0ZXJNYXJrZXI6IG1ldGhvZE9wKGZ1bmN0aW9u
KGxpbmUsIGd1dHRlcklELCB2YWx1ZSkgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcy5k
b2MsIGxpbmUsICJndXR0ZXIiLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBtYXJrZXJz
ID0gbGluZS5ndXR0ZXJNYXJrZXJzIHx8IChsaW5lLmd1dHRlck1hcmtlcnMgPSB7fSk7Ci0gICAg
ICAgIG1hcmtlcnNbZ3V0dGVySURdID0gdmFsdWU7Ci0gICAgICAgIGlmICghdmFsdWUgJiYgaXNF
bXB0eShtYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGNsZWFyR3V0dGVyOiBtZXRob2RPcChm
dW5jdGlvbihndXR0ZXJJRCkgewotICAgICAgdmFyIGNtID0gdGhpcywgZG9jID0gY20uZG9jLCBp
ID0gZG9jLmZpcnN0OwotICAgICAgZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAgICBp
ZiAobGluZS5ndXR0ZXJNYXJrZXJzICYmIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0pIHsK
LSAgICAgICAgICBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdID0gbnVsbDsKLSAgICAgICAg
ICByZWdMaW5lQ2hhbmdlKGNtLCBpLCAiZ3V0dGVyIik7Ci0gICAgICAgICAgaWYgKGlzRW1wdHko
bGluZS5ndXR0ZXJNYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKLSAgICAgICAg
fQotICAgICAgICArK2k7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGxpbmVJbmZvOiBmdW5j
dGlvbihsaW5lKSB7Ci0gICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKLSAgICAg
ICAgaWYgKCFpc0xpbmUodGhpcy5kb2MsIGxpbmUpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFy
IG4gPSBsaW5lOwotICAgICAgICBsaW5lID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAg
ICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIg
biA9IGxpbmVObyhsaW5lKTsKLSAgICAgICAgaWYgKG4gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50
ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1dHRlck1hcmtlcnMsCi0gICAgICAgICAgICAgIHRl
eHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJnQ2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNz
OiBsaW5lLndyYXBDbGFzcywKLSAgICAgICAgICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfTsK
LSAgICB9LAotCi0gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRo
aXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG99O30sCisgICAgZ2V0
Vmlld3BvcnQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJv
bSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG99fSwKIAogICAgIGFkZFdpZGdldDogZnVuY3Rpb24o
cG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7Ci0gICAgICB2YXIgZGlzcGxheSA9IHRo
aXMuZGlzcGxheTsKLSAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMu
ZG9jLCBwb3MpKTsKLSAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7
Ci0gICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKLSAgICAgIG5vZGUuc2V0
QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwgInRydWUiKTsKLSAgICAgIHRoaXMuZGlzcGxh
eS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpOwotICAgICAgZGlzcGxheS5zaXplci5hcHBlbmRD
aGlsZChub2RlKTsKKyAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5CisgICAgICBwb3Mg
PSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSkKKyAgICAgIHZhciB0
b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQKKyAgICAgIG5vZGUuc3R5bGUucG9zaXRp
b24gPSAiYWJzb2x1dGUiCisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50
cyIsICJ0cnVlIikKKyAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUp
CisgICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpCiAgICAgICBpZiAodmVydCA9
PSAib3ZlciIpIHsKLSAgICAgICAgdG9wID0gcG9zLnRvcDsKKyAgICAgICAgdG9wID0gcG9zLnRv
cAogICAgICAgfSBlbHNlIGlmICh2ZXJ0ID09ICJhYm92ZSIgfHwgdmVydCA9PSAibmVhciIpIHsK
ICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWln
aHQsIHRoaXMuZG9jLmhlaWdodCksCi0gICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXku
c2l6ZXIuY2xpZW50V2lkdGgsIGRpc3BsYXkubGluZVNwYWNlLmNsaWVudFdpZHRoKTsKKyAgICAg
ICAgaHNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5s
aW5lU3BhY2UuY2xpZW50V2lkdGgpCiAgICAgICAgIC8vIERlZmF1bHQgdG8gcG9zaXRpb25pbmcg
YWJvdmUgKGlmIHNwZWNpZmllZCBhbmQgcG9zc2libGUpOyBvdGhlcndpc2UgZGVmYXVsdCB0byBw
b3NpdGlvbmluZyBiZWxvdwogICAgICAgICBpZiAoKHZlcnQgPT0gJ2Fib3ZlJyB8fCBwb3MuYm90
dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UpICYmIHBvcy50b3AgPiBub2RlLm9mZnNl
dEhlaWdodCkKLSAgICAgICAgICB0b3AgPSBwb3MudG9wIC0gbm9kZS5vZmZzZXRIZWlnaHQ7Cisg
ICAgICAgICAgeyB0b3AgPSBwb3MudG9wIC0gbm9kZS5vZmZzZXRIZWlnaHQgfQogICAgICAgICBl
bHNlIGlmIChwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKQotICAgICAg
ICAgIHRvcCA9IHBvcy5ib3R0b207CisgICAgICAgICAgeyB0b3AgPSBwb3MuYm90dG9tIH0KICAg
ICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKQotICAgICAgICAgIGxl
ZnQgPSBoc3BhY2UgLSBub2RlLm9mZnNldFdpZHRoOworICAgICAgICAgIHsgbGVmdCA9IGhzcGFj
ZSAtIG5vZGUub2Zmc2V0V2lkdGggfQogICAgICAgfQotICAgICAgbm9kZS5zdHlsZS50b3AgPSB0
b3AgKyAicHgiOwotICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIi
OworICAgICAgbm9kZS5zdHlsZS50b3AgPSB0b3AgKyAicHgiCisgICAgICBub2RlLnN0eWxlLmxl
ZnQgPSBub2RlLnN0eWxlLnJpZ2h0ID0gIiIKICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7
Ci0gICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRX
aWR0aDsKLSAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOworICAgICAgICBsZWZ0ID0g
ZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgKKyAgICAgICAgbm9k
ZS5zdHlsZS5yaWdodCA9ICIwcHgiCiAgICAgICB9IGVsc2UgewotICAgICAgICBpZiAoaG9yaXog
PT0gImxlZnQiKSBsZWZ0ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gIm1pZGRsZSIp
IGxlZnQgPSAoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8g
MjsKLSAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CisgICAgICAgIGlmICho
b3JpeiA9PSAibGVmdCIpIHsgbGVmdCA9IDAgfQorICAgICAgICBlbHNlIGlmIChob3JpeiA9PSAi
bWlkZGxlIikgeyBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNl
dFdpZHRoKSAvIDIgfQorICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IgogICAg
ICAgfQogICAgICAgaWYgKHNjcm9sbCkKLSAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgbGVm
dCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQp
OworICAgICAgICB7IHNjcm9sbEludG9WaWV3KHRoaXMsIGxlZnQsIHRvcCwgbGVmdCArIG5vZGUu
b2Zmc2V0V2lkdGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0KSB9CiAgICAgfSwKIAogICAgIHRy
aWdnZXJPbktleURvd246IG1ldGhvZE9wKG9uS2V5RG93biksCkBAIC01MDk0LDM3MjUgKzc4NjEs
MTI1MSBAQAogCiAgICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkgewogICAgICAgaWYgKGNv
bW1hbmRzLmhhc093blByb3BlcnR5KGNtZCkpCi0gICAgICAgIHJldHVybiBjb21tYW5kc1tjbWRd
LmNhbGwobnVsbCwgdGhpcyk7CisgICAgICAgIHsgcmV0dXJuIGNvbW1hbmRzW2NtZF0uY2FsbChu
dWxsLCB0aGlzKSB9CiAgICAgfSwKIAotICAgIHRyaWdnZXJFbGVjdHJpYzogbWV0aG9kT3AoZnVu
Y3Rpb24odGV4dCkgeyB0cmlnZ2VyRWxlY3RyaWModGhpcywgdGV4dCk7IH0pLAorICAgIHRyaWdn
ZXJFbGVjdHJpYzogbWV0aG9kT3AoZnVuY3Rpb24odGV4dCkgeyB0cmlnZ2VyRWxlY3RyaWModGhp
cywgdGV4dCkgfSksCiAKICAgICBmaW5kUG9zSDogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0
LCB2aXN1YWxseSkgewotICAgICAgdmFyIGRpciA9IDE7Ci0gICAgICBpZiAoYW1vdW50IDwgMCkg
eyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfQotICAgICAgZm9yICh2YXIgaSA9IDAsIGN1
ciA9IGNsaXBQb3ModGhpcy5kb2MsIGZyb20pOyBpIDwgYW1vdW50OyArK2kpIHsKLSAgICAgICAg
Y3VyID0gZmluZFBvc0godGhpcy5kb2MsIGN1ciwgZGlyLCB1bml0LCB2aXN1YWxseSk7Ci0gICAg
ICAgIGlmIChjdXIuaGl0U2lkZSkgYnJlYWs7CisgICAgICB2YXIgdGhpcyQxID0gdGhpczsKKwor
ICAgICAgdmFyIGRpciA9IDEKKyAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91
bnQgPSAtYW1vdW50IH0KKyAgICAgIHZhciBjdXIgPSBjbGlwUG9zKHRoaXMuZG9jLCBmcm9tKQor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7ICsraSkgeworICAgICAgICBjdXIgPSBm
aW5kUG9zSCh0aGlzJDEuZG9jLCBjdXIsIGRpciwgdW5pdCwgdmlzdWFsbHkpCisgICAgICAgIGlm
IChjdXIuaGl0U2lkZSkgeyBicmVhayB9CiAgICAgICB9Ci0gICAgICByZXR1cm4gY3VyOworICAg
ICAgcmV0dXJuIGN1cgogICAgIH0sCiAKICAgICBtb3ZlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGly
LCB1bml0KSB7Ci0gICAgICB2YXIgY20gPSB0aGlzOwotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9u
c0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGNt
LmRvYy5leHRlbmQgfHwgcmFuZ2UuZW1wdHkoKSkKLSAgICAgICAgICByZXR1cm4gZmluZFBvc0go
Y20uZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIGNtLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5
KTsKKyAgICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgICB0aGlzLmV4dGVuZFNlbGVjdGlv
bnNCeShmdW5jdGlvbiAocmFuZ2UpIHsKKyAgICAgICAgaWYgKHRoaXMkMS5kaXNwbGF5LnNoaWZ0
IHx8IHRoaXMkMS5kb2MuZXh0ZW5kIHx8IHJhbmdlLmVtcHR5KCkpCisgICAgICAgICAgeyByZXR1
cm4gZmluZFBvc0godGhpcyQxLmRvYywgcmFuZ2UuaGVhZCwgZGlyLCB1bml0LCB0aGlzJDEub3B0
aW9ucy5ydGxNb3ZlVmlzdWFsbHkpIH0KICAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBk
aXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKTsKLSAgICAgIH0sIHNlbF9tb3ZlKTsK
KyAgICAgICAgICB7IHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKSB9
CisgICAgICB9LCBzZWxfbW92ZSkKICAgICB9KSwKIAogICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1
bmN0aW9uKGRpciwgdW5pdCkgewotICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbCwgZG9jID0g
dGhpcy5kb2M7CisgICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYwog
ICAgICAgaWYgKHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKQotICAgICAgICBkb2MucmVwbGFjZVNl
bGVjdGlvbigiIiwgbnVsbCwgIitkZWxldGUiKTsKKyAgICAgICAgeyBkb2MucmVwbGFjZVNlbGVj
dGlvbigiIiwgbnVsbCwgIitkZWxldGUiKSB9CiAgICAgICBlbHNlCi0gICAgICAgIGRlbGV0ZU5l
YXJTZWxlY3Rpb24odGhpcywgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgICB2YXIgb3RoZXIg
PSBmaW5kUG9zSChkb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpOwotICAgICAgICAg
IHJldHVybiBkaXIgPCAwID8ge2Zyb206IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTog
cmFuZ2UuaGVhZCwgdG86IG90aGVyfTsKLSAgICAgICAgfSk7CisgICAgICAgIHsgZGVsZXRlTmVh
clNlbGVjdGlvbih0aGlzLCBmdW5jdGlvbiAocmFuZ2UpIHsKKyAgICAgICAgICB2YXIgb3RoZXIg
PSBmaW5kUG9zSChkb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpCisgICAgICAgICAg
cmV0dXJuIGRpciA8IDAgPyB7ZnJvbTogb3RoZXIsIHRvOiByYW5nZS5oZWFkfSA6IHtmcm9tOiBy
YW5nZS5oZWFkLCB0bzogb3RoZXJ9CisgICAgICAgIH0pIH0KICAgICB9KSwKIAogICAgIGZpbmRQ
b3NWOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHsKLSAgICAgIHZh
ciBkaXIgPSAxLCB4ID0gZ29hbENvbHVtbjsKLSAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9
IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9Ci0gICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xp
cFBvcyh0aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91bnQ7ICsraSkgewotICAgICAgICB2YXIgY29v
cmRzID0gY3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgImRpdiIpOwotICAgICAgICBpZiAoeCA9PSBu
dWxsKSB4ID0gY29vcmRzLmxlZnQ7Ci0gICAgICAgIGVsc2UgY29vcmRzLmxlZnQgPSB4OwotICAg
ICAgICBjdXIgPSBmaW5kUG9zVih0aGlzLCBjb29yZHMsIGRpciwgdW5pdCk7Ci0gICAgICAgIGlm
IChjdXIuaGl0U2lkZSkgYnJlYWs7CisgICAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgICAg
dmFyIGRpciA9IDEsIHggPSBnb2FsQ29sdW1uCisgICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIg
PSAtMTsgYW1vdW50ID0gLWFtb3VudCB9CisgICAgICB2YXIgY3VyID0gY2xpcFBvcyh0aGlzLmRv
YywgZnJvbSkKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHsKKyAgICAg
ICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3Jkcyh0aGlzJDEsIGN1ciwgImRpdiIpCisgICAgICAg
IGlmICh4ID09IG51bGwpIHsgeCA9IGNvb3Jkcy5sZWZ0IH0KKyAgICAgICAgZWxzZSB7IGNvb3Jk
cy5sZWZ0ID0geCB9CisgICAgICAgIGN1ciA9IGZpbmRQb3NWKHRoaXMkMSwgY29vcmRzLCBkaXIs
IHVuaXQpCisgICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9CiAgICAgICB9Ci0gICAg
ICByZXR1cm4gY3VyOworICAgICAgcmV0dXJuIGN1cgogICAgIH0sCiAKICAgICBtb3ZlVjogbWV0
aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7Ci0gICAgICB2YXIgY20gPSB0aGlzLCBkb2MgPSB0
aGlzLmRvYywgZ29hbHMgPSBbXTsKLSAgICAgIHZhciBjb2xsYXBzZSA9ICFjbS5kaXNwbGF5LnNo
aWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTsKLSAgICAg
IGRvYy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgIHZhciB0aGlz
JDEgPSB0aGlzOworCisgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW10KKyAgICAg
IHZhciBjb2xsYXBzZSA9ICF0aGlzLmRpc3BsYXkuc2hpZnQgJiYgIWRvYy5leHRlbmQgJiYgZG9j
LnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpCisgICAgICBkb2MuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1
bmN0aW9uIChyYW5nZSkgewogICAgICAgICBpZiAoY29sbGFwc2UpCi0gICAgICAgICAgcmV0dXJu
IGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOwotICAgICAgICB2YXIgaGVhZFBv
cyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVhZCwgImRpdiIpOwotICAgICAgICBpZiAocmFu
Z2UuZ29hbENvbHVtbiAhPSBudWxsKSBoZWFkUG9zLmxlZnQgPSByYW5nZS5nb2FsQ29sdW1uOwot
ICAgICAgICBnb2Fscy5wdXNoKGhlYWRQb3MubGVmdCk7Ci0gICAgICAgIHZhciBwb3MgPSBmaW5k
UG9zVihjbSwgaGVhZFBvcywgZGlyLCB1bml0KTsKKyAgICAgICAgICB7IHJldHVybiBkaXIgPCAw
ID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKSB9CisgICAgICAgIHZhciBoZWFkUG9zID0gY3Vy
c29yQ29vcmRzKHRoaXMkMSwgcmFuZ2UuaGVhZCwgImRpdiIpCisgICAgICAgIGlmIChyYW5nZS5n
b2FsQ29sdW1uICE9IG51bGwpIHsgaGVhZFBvcy5sZWZ0ID0gcmFuZ2UuZ29hbENvbHVtbiB9Cisg
ICAgICAgIGdvYWxzLnB1c2goaGVhZFBvcy5sZWZ0KQorICAgICAgICB2YXIgcG9zID0gZmluZFBv
c1YodGhpcyQxLCBoZWFkUG9zLCBkaXIsIHVuaXQpCiAgICAgICAgIGlmICh1bml0ID09ICJwYWdl
IiAmJiByYW5nZSA9PSBkb2Muc2VsLnByaW1hcnkoKSkKLSAgICAgICAgICBhZGRUb1Njcm9sbFBv
cyhjbSwgbnVsbCwgY2hhckNvb3JkcyhjbSwgcG9zLCAiZGl2IikudG9wIC0gaGVhZFBvcy50b3Ap
OwotICAgICAgICByZXR1cm4gcG9zOwotICAgICAgfSwgc2VsX21vdmUpOwotICAgICAgaWYgKGdv
YWxzLmxlbmd0aCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkr
KykKLSAgICAgICAgZG9jLnNlbC5yYW5nZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldOworICAg
ICAgICAgIHsgYWRkVG9TY3JvbGxQb3ModGhpcyQxLCBudWxsLCBjaGFyQ29vcmRzKHRoaXMkMSwg
cG9zLCAiZGl2IikudG9wIC0gaGVhZFBvcy50b3ApIH0KKyAgICAgICAgcmV0dXJuIHBvcworICAg
ICAgfSwgc2VsX21vdmUpCisgICAgICBpZiAoZ29hbHMubGVuZ3RoKSB7IGZvciAodmFyIGkgPSAw
OyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsgZG9jLnNlbC5yYW5n
ZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldIH0gfQogICAgIH0pLAogCiAgICAgLy8gRmluZCB0
aGUgd29yZCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gKGFzIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIp
LgogICAgIGZpbmRXb3JkQXQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAgdmFyIGRvYyA9IHRoaXMu
ZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0OwotICAgICAgdmFyIHN0YXJ0
ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7CisgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGxpbmUg
PSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQKKyAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwg
ZW5kID0gcG9zLmNoCiAgICAgICBpZiAobGluZSkgewotICAgICAgICB2YXIgaGVscGVyID0gdGhp
cy5nZXRIZWxwZXIocG9zLCAid29yZENoYXJzIik7Ci0gICAgICAgIGlmICgocG9zLnhSZWwgPCAw
IHx8IGVuZCA9PSBsaW5lLmxlbmd0aCkgJiYgc3RhcnQpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7Ci0g
ICAgICAgIHZhciBzdGFydENoYXIgPSBsaW5lLmNoYXJBdChzdGFydCk7CisgICAgICAgIHZhciBo
ZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsICJ3b3JkQ2hhcnMiKQorICAgICAgICBpZiAoKHBv
cy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSB7IC0tc3RhcnQ7IH0g
ZWxzZSB7ICsrZW5kIH0KKyAgICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0
KQogICAgICAgICB2YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhciwgaGVscGVyKQotICAg
ICAgICAgID8gZnVuY3Rpb24oY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH0K
LSAgICAgICAgICA6IC9ccy8udGVzdChzdGFydENoYXIpID8gZnVuY3Rpb24oY2gpIHtyZXR1cm4g
L1xzLy50ZXN0KGNoKTt9Ci0gICAgICAgICAgOiBmdW5jdGlvbihjaCkge3JldHVybiAhL1xzLy50
ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCk7fTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAm
JiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFydDsKLSAgICAgICAgd2hpbGUg
KGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKKyAg
ICAgICAgICA/IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gaXNXb3JkQ2hhcihjaCwgaGVscGVyKTsg
fQorICAgICAgICAgIDogL1xzLy50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5jdGlvbiAoY2gpIHsgcmV0
dXJuIC9ccy8udGVzdChjaCk7IH0KKyAgICAgICAgICA6IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4g
KCEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKSk7IH0KKyAgICAgICAgd2hpbGUgKHN0
YXJ0ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgeyAtLXN0YXJ0IH0KKyAg
ICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVuZCkp
KSB7ICsrZW5kIH0KICAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5l
LCBzdGFydCksIFBvcyhwb3MubGluZSwgZW5kKSk7CisgICAgICByZXR1cm4gbmV3IFJhbmdlKFBv
cyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpCiAgICAgfSwKIAogICAgIHRv
Z2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxs
ICYmIHZhbHVlID09IHRoaXMuc3RhdGUub3ZlcndyaXRlKSByZXR1cm47CisgICAgICBpZiAodmFs
dWUgIT0gbnVsbCAmJiB2YWx1ZSA9PSB0aGlzLnN0YXRlLm92ZXJ3cml0ZSkgeyByZXR1cm4gfQog
ICAgICAgaWYgKHRoaXMuc3RhdGUub3ZlcndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQot
ICAgICAgICBhZGRDbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29kZU1pcnJvci1vdmVy
d3JpdGUiKTsKKyAgICAgICAgeyBhZGRDbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29k
ZU1pcnJvci1vdmVyd3JpdGUiKSB9CiAgICAgICBlbHNlCi0gICAgICAgIHJtQ2xhc3ModGhpcy5k
aXNwbGF5LmN1cnNvckRpdiwgIkNvZGVNaXJyb3Itb3ZlcndyaXRlIik7CisgICAgICAgIHsgcm1D
bGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29kZU1pcnJvci1vdmVyd3JpdGUiKSB9CiAK
LSAgICAgIHNpZ25hbCh0aGlzLCAib3ZlcndyaXRlVG9nZ2xlIiwgdGhpcywgdGhpcy5zdGF0ZS5v
dmVyd3JpdGUpOworICAgICAgc2lnbmFsKHRoaXMsICJvdmVyd3JpdGVUb2dnbGUiLCB0aGlzLCB0
aGlzLnN0YXRlLm92ZXJ3cml0ZSkKICAgICB9LAotICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsg
cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpID09IGFjdGl2ZUVsdCgpOyB9LAor
ICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRG
aWVsZCgpID09IGFjdGl2ZUVsdCgpIH0sCisgICAgaXNSZWFkT25seTogZnVuY3Rpb24oKSB7IHJl
dHVybiAhISh0aGlzLm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5kb2MuY2FudEVkaXQpIH0sCiAK
ICAgICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwgeSkgewotICAgICAgaWYgKHggIT0g
bnVsbCB8fCB5ICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1Bvcyh0aGlzKTsKLSAgICAgIGlmICh4
ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsTGVmdCA9IHg7Ci0gICAgICBpZiAoeSAhPSBudWxs
KSB0aGlzLmN1ck9wLnNjcm9sbFRvcCA9IHk7CisgICAgICBpZiAoeCAhPSBudWxsIHx8IHkgIT0g
bnVsbCkgeyByZXNvbHZlU2Nyb2xsVG9Qb3ModGhpcykgfQorICAgICAgaWYgKHggIT0gbnVsbCkg
eyB0aGlzLmN1ck9wLnNjcm9sbExlZnQgPSB4IH0KKyAgICAgIGlmICh5ICE9IG51bGwpIHsgdGhp
cy5jdXJPcC5zY3JvbGxUb3AgPSB5IH0KICAgICB9KSwKICAgICBnZXRTY3JvbGxJbmZvOiBmdW5j
dGlvbigpIHsKLSAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlcjsKKyAg
ICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlcgogICAgICAgcmV0dXJuIHts
ZWZ0OiBzY3JvbGxlci5zY3JvbGxMZWZ0LCB0b3A6IHNjcm9sbGVyLnNjcm9sbFRvcCwKICAgICAg
ICAgICAgICAgaGVpZ2h0OiBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBzY3JvbGxHYXAodGhpcykg
LSB0aGlzLmRpc3BsYXkuYmFySGVpZ2h0LAogICAgICAgICAgICAgICB3aWR0aDogc2Nyb2xsZXIu
c2Nyb2xsV2lkdGggLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFyV2lkdGgsCi0g
ICAgICAgICAgICAgIGNsaWVudEhlaWdodDogZGlzcGxheUhlaWdodCh0aGlzKSwgY2xpZW50V2lk
dGg6IGRpc3BsYXlXaWR0aCh0aGlzKX07CisgICAgICAgICAgICAgIGNsaWVudEhlaWdodDogZGlz
cGxheUhlaWdodCh0aGlzKSwgY2xpZW50V2lkdGg6IGRpc3BsYXlXaWR0aCh0aGlzKX0KICAgICB9
LAogCiAgICAgc2Nyb2xsSW50b1ZpZXc6IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4p
IHsKICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7Ci0gICAgICAgIHJhbmdlID0ge2Zyb206IHRo
aXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgdG86IG51bGx9OwotICAgICAgICBpZiAobWFyZ2lu
ID09IG51bGwpIG1hcmdpbiA9IHRoaXMub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW47CisgICAg
ICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgdG86IG51bGx9
CisgICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSB0aGlzLm9wdGlvbnMuY3Vy
c29yU2Nyb2xsTWFyZ2luIH0KICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhbmdlID09ICJudW1i
ZXIiKSB7Ci0gICAgICAgIHJhbmdlID0ge2Zyb206IFBvcyhyYW5nZSwgMCksIHRvOiBudWxsfTsK
KyAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAwKSwgdG86IG51bGx9CiAgICAgICB9
IGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkgewotICAgICAgICByYW5nZSA9IHtmcm9tOiBy
YW5nZSwgdG86IG51bGx9OworICAgICAgICByYW5nZSA9IHtmcm9tOiByYW5nZSwgdG86IG51bGx9
CiAgICAgICB9Ci0gICAgICBpZiAoIXJhbmdlLnRvKSByYW5nZS50byA9IHJhbmdlLmZyb207Ci0g
ICAgICByYW5nZS5tYXJnaW4gPSBtYXJnaW4gfHwgMDsKKyAgICAgIGlmICghcmFuZ2UudG8pIHsg
cmFuZ2UudG8gPSByYW5nZS5mcm9tIH0KKyAgICAgIHJhbmdlLm1hcmdpbiA9IG1hcmdpbiB8fCAw
CiAKICAgICAgIGlmIChyYW5nZS5mcm9tLmxpbmUgIT0gbnVsbCkgewotICAgICAgICByZXNvbHZl
U2Nyb2xsVG9Qb3ModGhpcyk7Ci0gICAgICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSByYW5n
ZTsKKyAgICAgICAgcmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpCisgICAgICAgIHRoaXMuY3VyT3Au
c2Nyb2xsVG9Qb3MgPSByYW5nZQogICAgICAgfSBlbHNlIHsKICAgICAgICAgdmFyIHNQb3MgPSBj
YWxjdWxhdGVTY3JvbGxQb3ModGhpcywgTWF0aC5taW4ocmFuZ2UuZnJvbS5sZWZ0LCByYW5nZS50
by5sZWZ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4o
cmFuZ2UuZnJvbS50b3AsIHJhbmdlLnRvLnRvcCkgLSByYW5nZS5tYXJnaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHJhbmdlLmZyb20ucmlnaHQsIHJh
bmdlLnRvLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0
aC5tYXgocmFuZ2UuZnJvbS5ib3R0b20sIHJhbmdlLnRvLmJvdHRvbSkgKyByYW5nZS5tYXJnaW4p
OwotICAgICAgICB0aGlzLnNjcm9sbFRvKHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3Ap
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChyYW5nZS5m
cm9tLmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbikKKyAgICAgICAgdGhp
cy5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKQogICAgICAgfQogICAg
IH0pLAogCiAgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewot
ICAgICAgdmFyIGNtID0gdGhpczsKLSAgICAgIGZ1bmN0aW9uIGludGVycHJldCh2YWwpIHsKLSAg
ICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gIm51bWJlciIgfHwgL15cZCskLy50ZXN0KFN0cmlu
Zyh2YWwpKSA/IHZhbCArICJweCIgOiB2YWw7Ci0gICAgICB9Ci0gICAgICBpZiAod2lkdGggIT0g
bnVsbCkgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsK
LSAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdo
dCA9IGludGVycHJldChoZWlnaHQpOwotICAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOwotICAgICAgdmFyIGxpbmVObyA9IGNt
LmRpc3BsYXkudmlld0Zyb207Ci0gICAgICBjbS5kb2MuaXRlcihsaW5lTm8sIGNtLmRpc3BsYXku
dmlld1RvLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIGlmIChs
aW5lLndpZGdldHNbaV0ubm9IU2Nyb2xsKSB7IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObywgIndp
ZGdldCIpOyBicmVhazsgfQotICAgICAgICArK2xpbmVObzsKLSAgICAgIH0pOwotICAgICAgY20u
Y3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwotICAgICAgc2lnbmFsKGNtLCAicmVmcmVzaCIsIHRo
aXMpOworICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgICAgIHZhciBpbnRlcnByZXQgPSBm
dW5jdGlvbiAodmFsKSB7IHJldHVybiB0eXBlb2YgdmFsID09ICJudW1iZXIiIHx8IC9eXGQrJC8u
dGVzdChTdHJpbmcodmFsKSkgPyB2YWwgKyAicHgiIDogdmFsOyB9CisgICAgICBpZiAod2lkdGgg
IT0gbnVsbCkgeyB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3
aWR0aCkgfQorICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7IHRoaXMuZGlzcGxheS53cmFwcGVy
LnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpIH0KKyAgICAgIGlmICh0aGlzLm9wdGlv
bnMubGluZVdyYXBwaW5nKSB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcykgfQorICAg
ICAgdmFyIGxpbmVObyA9IHRoaXMuZGlzcGxheS52aWV3RnJvbQorICAgICAgdGhpcy5kb2MuaXRl
cihsaW5lTm8sIHRoaXMuZGlzcGxheS52aWV3VG8sIGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICAg
IGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVu
Z3RoOyBpKyspCisgICAgICAgICAgeyBpZiAobGluZS53aWRnZXRzW2ldLm5vSFNjcm9sbCkgeyBy
ZWdMaW5lQ2hhbmdlKHRoaXMkMSwgbGluZU5vLCAid2lkZ2V0Iik7IGJyZWFrIH0gfSB9CisgICAg
ICAgICsrbGluZU5vCisgICAgICB9KQorICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRy
dWUKKyAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRoaXMpCiAgICAgfSksCiAKLSAgICBv
cGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCisgICAgb3Bl
cmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKX0sCiAKICAgICByZWZy
ZXNoOiBtZXRob2RPcChmdW5jdGlvbigpIHsKLSAgICAgIHZhciBvbGRIZWlnaHQgPSB0aGlzLmRp
c3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKLSAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICAgIHRo
aXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwotICAgICAgY2xlYXJDYWNoZXModGhpcyk7Ci0g
ICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZG9jLnNjcm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRv
cCk7Ci0gICAgICB1cGRhdGVHdXR0ZXJTcGFjZSh0aGlzKTsKKyAgICAgIHZhciBvbGRIZWlnaHQg
PSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodAorICAgICAgcmVnQ2hhbmdlKHRoaXMpCisg
ICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZQorICAgICAgY2xlYXJDYWNoZXModGhp
cykKKyAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Ny
b2xsVG9wKQorICAgICAgdXBkYXRlR3V0dGVyU3BhY2UodGhpcykKICAgICAgIGlmIChvbGRIZWln
aHQgPT0gbnVsbCB8fCBNYXRoLmFicyhvbGRIZWlnaHQgLSB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxh
eSkpID4gLjUpCi0gICAgICAgIGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7Ci0gICAgICBzaWdu
YWwodGhpcywgInJlZnJlc2giLCB0aGlzKTsKKyAgICAgICAgeyBlc3RpbWF0ZUxpbmVIZWlnaHRz
KHRoaXMpIH0KKyAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRoaXMpCiAgICAgfSksCiAK
ICAgICBzd2FwRG9jOiBtZXRob2RPcChmdW5jdGlvbihkb2MpIHsKLSAgICAgIHZhciBvbGQgPSB0
aGlzLmRvYzsKLSAgICAgIG9sZC5jbSA9IG51bGw7Ci0gICAgICBhdHRhY2hEb2ModGhpcywgZG9j
KTsKLSAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnJl
c2V0KCk7Ci0gICAgICB0aGlzLnNjcm9sbFRvKGRvYy5zY3JvbGxMZWZ0LCBkb2Muc2Nyb2xsVG9w
KTsKLSAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlOwotICAgICAgc2lnbmFsTGF0
ZXIodGhpcywgInN3YXBEb2MiLCB0aGlzLCBvbGQpOwotICAgICAgcmV0dXJuIG9sZDsKKyAgICAg
IHZhciBvbGQgPSB0aGlzLmRvYworICAgICAgb2xkLmNtID0gbnVsbAorICAgICAgYXR0YWNoRG9j
KHRoaXMsIGRvYykKKyAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpCisgICAgICB0aGlzLmRpc3BsYXku
aW5wdXQucmVzZXQoKQorICAgICAgdGhpcy5zY3JvbGxUbyhkb2Muc2Nyb2xsTGVmdCwgZG9jLnNj
cm9sbFRvcCkKKyAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlCisgICAgICBzaWdu
YWxMYXRlcih0aGlzLCAic3dhcERvYyIsIHRoaXMsIG9sZCkKKyAgICAgIHJldHVybiBvbGQKICAg
ICB9KSwKIAotICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxh
eS5pbnB1dC5nZXRGaWVsZCgpO30sCi0gICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyO30sCi0gICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBm
dW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7fSwKLSAgICBnZXRHdXR0ZXJF
bGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyczt9Ci0gIH07Ci0g
IGV2ZW50TWl4aW4oQ29kZU1pcnJvcik7Ci0KLSAgLy8gT1BUSU9OIERFRkFVTFRTCi0KLSAgLy8g
VGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLgotICB2YXIgZGVmYXVsdHMgPSBDb2Rl
TWlycm9yLmRlZmF1bHRzID0ge307Ci0gIC8vIEZ1bmN0aW9ucyB0byBydW4gd2hlbiBvcHRpb25z
IGFyZSBjaGFuZ2VkLgotICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhh
bmRsZXJzID0ge307Ci0KLSAgZnVuY3Rpb24gb3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5v
dE9uSW5pdCkgewotICAgIENvZGVNaXJyb3IuZGVmYXVsdHNbbmFtZV0gPSBkZWZsdDsKLSAgICBp
ZiAoaGFuZGxlKSBvcHRpb25IYW5kbGVyc1tuYW1lXSA9Ci0gICAgICBub3RPbkluaXQgPyBmdW5j
dGlvbihjbSwgdmFsLCBvbGQpIHtpZiAob2xkICE9IEluaXQpIGhhbmRsZShjbSwgdmFsLCBvbGQp
O30gOiBoYW5kbGU7CisgICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k
aXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LAorICAgIGdldFdyYXBwZXJFbGVtZW50OiBmdW5jdGlv
bigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sCisgICAgZ2V0U2Nyb2xsZXJFbGVtZW50
OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LAorICAgIGdldEd1dHRl
ckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfQogICB9Cisg
IGV2ZW50TWl4aW4oQ29kZU1pcnJvcikKIAotICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJz
IHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLgotICB2YXIgSW5pdCA9IENvZGVNaXJyb3IuSW5p
dCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuSW5pdCI7fX07Ci0K
LSAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9y
IGJlY2F1c2UgdGhleQotICAvLyBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZWRp
dG9yIGNhbiBzdGFydCBhdCBhbGwuCi0gIG9wdGlvbigidmFsdWUiLCAiIiwgZnVuY3Rpb24oY20s
IHZhbCkgewotICAgIGNtLnNldFZhbHVlKHZhbCk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oIm1v
ZGUiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgY20uZG9jLm1vZGVPcHRpb24gPSB2
YWw7Ci0gICAgbG9hZE1vZGUoY20pOwotICB9LCB0cnVlKTsKLQotICBvcHRpb24oImluZGVudFVu
aXQiLCAyLCBsb2FkTW9kZSwgdHJ1ZSk7Ci0gIG9wdGlvbigiaW5kZW50V2l0aFRhYnMiLCBmYWxz
ZSk7Ci0gIG9wdGlvbigic21hcnRJbmRlbnQiLCB0cnVlKTsKLSAgb3B0aW9uKCJ0YWJTaXplIiwg
NCwgZnVuY3Rpb24oY20pIHsKLSAgICByZXNldE1vZGVTdGF0ZShjbSk7Ci0gICAgY2xlYXJDYWNo
ZXMoY20pOwotICAgIHJlZ0NoYW5nZShjbSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oImxpbmVT
ZXBhcmF0b3IiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgY20uZG9jLmxpbmVTZXAg
PSB2YWw7Ci0gICAgaWYgKCF2YWwpIHJldHVybjsKLSAgICB2YXIgbmV3QnJlYWtzID0gW10sIGxp
bmVObyA9IGNtLmRvYy5maXJzdDsKLSAgICBjbS5kb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHsKLSAgICAgICAgdmFyIGZvdW5kID0gbGluZS50ZXh0
LmluZGV4T2YodmFsLCBwb3MpOwotICAgICAgICBpZiAoZm91bmQgPT0gLTEpIGJyZWFrOwotICAg
ICAgICBwb3MgPSBmb3VuZCArIHZhbC5sZW5ndGg7Ci0gICAgICAgIG5ld0JyZWFrcy5wdXNoKFBv
cyhsaW5lTm8sIGZvdW5kKSk7Ci0gICAgICB9Ci0gICAgICBsaW5lTm8rKzsKLSAgICB9KTsKLSAg
ICBmb3IgKHZhciBpID0gbmV3QnJlYWtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAg
cmVwbGFjZVJhbmdlKGNtLmRvYywgdmFsLCBuZXdCcmVha3NbaV0sIFBvcyhuZXdCcmVha3NbaV0u
bGluZSwgbmV3QnJlYWtzW2ldLmNoICsgdmFsLmxlbmd0aCkpCi0gIH0pOwotICBvcHRpb24oInNw
ZWNpYWxDaGFycyIsIC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiLVx1MjAwZlx1MjAyOFx1
MjAyOVx1ZmVmZl0vZywgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7Ci0gICAgY20uc3RhdGUuc3Bl
Y2lhbENoYXJzID0gbmV3IFJlZ0V4cCh2YWwuc291cmNlICsgKHZhbC50ZXN0KCJcdCIpID8gIiIg
OiAifFx0IiksICJnIik7Ci0gICAgaWYgKG9sZCAhPSBDb2RlTWlycm9yLkluaXQpIGNtLnJlZnJl
c2goKTsKLSAgfSk7Ci0gIG9wdGlvbigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsIGRlZmF1bHRT
cGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbihjbSkge2NtLnJlZnJlc2goKTt9LCB0cnVl
KTsKLSAgb3B0aW9uKCJlbGVjdHJpY0NoYXJzIiwgdHJ1ZSk7Ci0gIG9wdGlvbigiaW5wdXRTdHls
ZSIsIG1vYmlsZSA/ICJjb250ZW50ZWRpdGFibGUiIDogInRleHRhcmVhIiwgZnVuY3Rpb24oKSB7
Ci0gICAgdGhyb3cgbmV3IEVycm9yKCJpbnB1dFN0eWxlIGNhbiBub3QgKHlldCkgYmUgY2hhbmdl
ZCBpbiBhIHJ1bm5pbmcgZWRpdG9yIik7IC8vIEZJWE1FCi0gIH0sIHRydWUpOwotICBvcHRpb24o
InJ0bE1vdmVWaXN1YWxseSIsICF3aW5kb3dzKTsKLSAgb3B0aW9uKCJ3aG9sZUxpbmVVcGRhdGVC
ZWZvcmUiLCB0cnVlKTsKLQotICBvcHRpb24oInRoZW1lIiwgImRlZmF1bHQiLCBmdW5jdGlvbihj
bSkgewotICAgIHRoZW1lQ2hhbmdlZChjbSk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9
LCB0cnVlKTsKLSAgb3B0aW9uKCJrZXlNYXAiLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKGNtLCB2YWws
IG9sZCkgewotICAgIHZhciBuZXh0ID0gZ2V0S2V5TWFwKHZhbCk7Ci0gICAgdmFyIHByZXYgPSBv
bGQgIT0gQ29kZU1pcnJvci5Jbml0ICYmIGdldEtleU1hcChvbGQpOwotICAgIGlmIChwcmV2ICYm
IHByZXYuZGV0YWNoKSBwcmV2LmRldGFjaChjbSwgbmV4dCk7Ci0gICAgaWYgKG5leHQuYXR0YWNo
KSBuZXh0LmF0dGFjaChjbSwgcHJldiB8fCBudWxsKTsKLSAgfSk7Ci0gIG9wdGlvbigiZXh0cmFL
ZXlzIiwgbnVsbCk7Ci0KLSAgb3B0aW9uKCJsaW5lV3JhcHBpbmciLCBmYWxzZSwgd3JhcHBpbmdD
aGFuZ2VkLCB0cnVlKTsKLSAgb3B0aW9uKCJndXR0ZXJzIiwgW10sIGZ1bmN0aW9uKGNtKSB7Ci0g
ICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKGNtLm9wdGlvbnMpOwotICAgIGd1dHRlcnNDaGFu
Z2VkKGNtKTsKLSAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigiZml4ZWRHdXR0ZXIiLCB0cnVlLCBmdW5j
dGlvbihjbSwgdmFsKSB7Ci0gICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSB2YWwg
PyBjb21wZW5zYXRlRm9ySFNjcm9sbChjbS5kaXNwbGF5KSArICJweCIgOiAiMCI7Ci0gICAgY20u
cmVmcmVzaCgpOwotICB9LCB0cnVlKTsKLSAgb3B0aW9uKCJjb3Zlckd1dHRlck5leHRUb1Njcm9s
bGJhciIsIGZhbHNlLCBmdW5jdGlvbihjbSkge3VwZGF0ZVNjcm9sbGJhcnMoY20pO30sIHRydWUp
OwotICBvcHRpb24oInNjcm9sbGJhclN0eWxlIiwgIm5hdGl2ZSIsIGZ1bmN0aW9uKGNtKSB7Ci0g
ICAgaW5pdFNjcm9sbGJhcnMoY20pOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20pOwotICAgIGNt
LmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoY20uZG9jLnNjcm9sbFRvcCk7Ci0gICAg
Y20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQoY20uZG9jLnNjcm9sbExlZnQpOwot
ICB9LCB0cnVlKTsKLSAgb3B0aW9uKCJsaW5lTnVtYmVycyIsIGZhbHNlLCBmdW5jdGlvbihjbSkg
ewotICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKLSAgICBndXR0ZXJz
Q2hhbmdlZChjbSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oImZpcnN0TGluZU51bWJlciIsIDEs
IGd1dHRlcnNDaGFuZ2VkLCB0cnVlKTsKLSAgb3B0aW9uKCJsaW5lTnVtYmVyRm9ybWF0dGVyIiwg
ZnVuY3Rpb24oaW50ZWdlcikge3JldHVybiBpbnRlZ2VyO30sIGd1dHRlcnNDaGFuZ2VkLCB0cnVl
KTsKLSAgb3B0aW9uKCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsIGZhbHNlLCB1cGRhdGVTZWxl
Y3Rpb24sIHRydWUpOwotCi0gIG9wdGlvbigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51Iiwg
dHJ1ZSk7Ci0gIG9wdGlvbigibGluZVdpc2VDb3B5Q3V0IiwgdHJ1ZSk7Ci0KLSAgb3B0aW9uKCJy
ZWFkT25seSIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgaWYgKHZhbCA9PSAibm9j
dXJzb3IiKSB7Ci0gICAgICBvbkJsdXIoY20pOwotICAgICAgY20uZGlzcGxheS5pbnB1dC5ibHVy
KCk7Ci0gICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgaWYgKCF2YWwpIGNtLmRpc3Bs
YXkuaW5wdXQucmVzZXQoKTsKLSAgICB9Ci0gIH0pOwotICBvcHRpb24oImRpc2FibGVJbnB1dCIs
IGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIGNtLmRpc3BsYXkuaW5wdXQucmVz
ZXQoKTt9LCB0cnVlKTsKLSAgb3B0aW9uKCJkcmFnRHJvcCIsIHRydWUsIGRyYWdEcm9wQ2hhbmdl
ZCk7Ci0KLSAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwotICBvcHRpb24oImN1cnNv
clNjcm9sbE1hcmdpbiIsIDApOwotICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEsIHVwZGF0ZVNl
bGVjdGlvbiwgdHJ1ZSk7Ci0gIG9wdGlvbigic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsIHRy
dWUsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7Ci0gIG9wdGlvbigid29ya1RpbWUiLCAxMDApOwot
ICBvcHRpb24oIndvcmtEZWxheSIsIDEwMCk7Ci0gIG9wdGlvbigiZmxhdHRlblNwYW5zIiwgdHJ1
ZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwotICBvcHRpb24oImFkZE1vZGVDbGFzcyIsIGZhbHNl
LCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7Ci0gIG9wdGlvbigicG9sbEludGVydmFsIiwgMTAwKTsK
LSAgb3B0aW9uKCJ1bmRvRGVwdGgiLCAyMDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0
b3J5LnVuZG9EZXB0aCA9IHZhbDt9KTsKLSAgb3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDEy
NTApOwotICBvcHRpb24oInZpZXdwb3J0TWFyZ2luIiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZy
ZXNoKCk7fSwgdHJ1ZSk7Ci0gIG9wdGlvbigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwgMTAwMDAsIHJl
c2V0TW9kZVN0YXRlLCB0cnVlKTsKLSAgb3B0aW9uKCJtb3ZlSW5wdXRXaXRoQ3Vyc29yIiwgdHJ1
ZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGlmICghdmFsKSBjbS5kaXNwbGF5LmlucHV0LnJl
c2V0UG9zaXRpb24oKTsKLSAgfSk7Ci0KLSAgb3B0aW9uKCJ0YWJpbmRleCIsIG51bGwsIGZ1bmN0
aW9uKGNtLCB2YWwpIHsKLSAgICBjbS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXgg
PSB2YWwgfHwgIiI7Ci0gIH0pOwotICBvcHRpb24oImF1dG9mb2N1cyIsIG51bGwpOwotCi0gIC8v
IE1PREUgREVGSU5JVElPTiBBTkQgUVVFUllJTkcKLQotICAvLyBLbm93biBtb2RlcywgYnkgbmFt
ZSBhbmQgYnkgTUlNRQotICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1vZGVzID0ge30sIG1pbWVN
b2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307Ci0KLSAgLy8gRXh0cmEgYXJndW1lbnRz
IGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzCi0gIC8vIHVz
ZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2Fs
bHkKLSAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJl
L2RlZmluZSBjYWxscy4pCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUs
IG1vZGUpIHsKLSAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJu
dWxsIikgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsKLSAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDIpCi0gICAgICBtb2RlLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgbW9kZXNbbmFtZV0gPSBtb2RlOwotICB9Owot
Ci0gIENvZGVNaXJyb3IuZGVmaW5lTUlNRSA9IGZ1bmN0aW9uKG1pbWUsIHNwZWMpIHsKLSAgICBt
aW1lTW9kZXNbbWltZV0gPSBzcGVjOwotICB9OwotCi0gIC8vIEdpdmVuIGEgTUlNRSB0eXBlLCBh
IHtuYW1lLCAuLi5vcHRpb25zfSBjb25maWcgb2JqZWN0LCBvciBhIG5hbWUKLSAgLy8gc3RyaW5n
LCByZXR1cm4gYSBtb2RlIGNvbmZpZyBvYmplY3QuCi0gIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUg
PSBmdW5jdGlvbihzcGVjKSB7Ci0gICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1p
bWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkgewotICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tz
cGVjXTsKLSAgICB9IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSAic3RyaW5n
IiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkgewotICAgICAgdmFyIGZv
dW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV07Ci0gICAgICBpZiAodHlwZW9mIGZvdW5kID09ICJz
dHJpbmciKSBmb3VuZCA9IHtuYW1lOiBmb3VuZH07Ci0gICAgICBzcGVjID0gY3JlYXRlT2JqKGZv
dW5kLCBzcGVjKTsKLSAgICAgIHNwZWMubmFtZSA9IGZvdW5kLm5hbWU7Ci0gICAgfSBlbHNlIGlm
ICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRl
c3Qoc3BlYykpIHsKLSAgICAgIHJldHVybiBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNh
dGlvbi94bWwiKTsKLSAgICB9Ci0gICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKSByZXR1
cm4ge25hbWU6IHNwZWN9OwotICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07
Ci0gIH07Ci0KLSAgLy8gR2l2ZW4gYSBtb2RlIHNwZWMgKGFueXRoaW5nIHRoYXQgcmVzb2x2ZU1v
ZGUgYWNjZXB0cyksIGZpbmQgYW5kCi0gIC8vIGluaXRpYWxpemUgYW4gYWN0dWFsIG1vZGUgb2Jq
ZWN0LgotICBDb2RlTWlycm9yLmdldE1vZGUgPSBmdW5jdGlvbihvcHRpb25zLCBzcGVjKSB7Ci0g
ICAgdmFyIHNwZWMgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKHNwZWMpOwotICAgIHZhciBtZmFj
dG9yeSA9IG1vZGVzW3NwZWMubmFtZV07Ci0gICAgaWYgKCFtZmFjdG9yeSkgcmV0dXJuIENvZGVN
aXJyb3IuZ2V0TW9kZShvcHRpb25zLCAidGV4dC9wbGFpbiIpOwotICAgIHZhciBtb2RlT2JqID0g
bWZhY3Rvcnkob3B0aW9ucywgc3BlYyk7Ci0gICAgaWYgKG1vZGVFeHRlbnNpb25zLmhhc093blBy
b3BlcnR5KHNwZWMubmFtZSkpIHsKLSAgICAgIHZhciBleHRzID0gbW9kZUV4dGVuc2lvbnNbc3Bl
Yy5uYW1lXTsKLSAgICAgIGZvciAodmFyIHByb3AgaW4gZXh0cykgewotICAgICAgICBpZiAoIWV4
dHMuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlOwotICAgICAgICBpZiAobW9kZU9iai5o
YXNPd25Qcm9wZXJ0eShwcm9wKSkgbW9kZU9ialsiXyIgKyBwcm9wXSA9IG1vZGVPYmpbcHJvcF07
Ci0gICAgICAgIG1vZGVPYmpbcHJvcF0gPSBleHRzW3Byb3BdOwotICAgICAgfQotICAgIH0KLSAg
ICBtb2RlT2JqLm5hbWUgPSBzcGVjLm5hbWU7Ci0gICAgaWYgKHNwZWMuaGVscGVyVHlwZSkgbW9k
ZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOwotICAgIGlmIChzcGVjLm1vZGVQcm9w
cykgZm9yICh2YXIgcHJvcCBpbiBzcGVjLm1vZGVQcm9wcykKLSAgICAgIG1vZGVPYmpbcHJvcF0g
PSBzcGVjLm1vZGVQcm9wc1twcm9wXTsKLQotICAgIHJldHVybiBtb2RlT2JqOwotICB9OwotCi0g
IC8vIE1pbmltYWwgZGVmYXVsdCBtb2RlLgotICBDb2RlTWlycm9yLmRlZmluZU1vZGUoIm51bGwi
LCBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJl
YW0uc2tpcFRvRW5kKCk7fX07Ci0gIH0pOwotICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQv
cGxhaW4iLCAibnVsbCIpOwotCi0gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIHByb3Bl
cnRpZXMgdG8gbW9kZSBvYmplY3RzIGZyb20KLSAgLy8gb3V0c2lkZSB0aGUgYWN0dWFsIG1vZGUg
ZGVmaW5pdGlvbi4KLSAgdmFyIG1vZGVFeHRlbnNpb25zID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5z
aW9ucyA9IHt9OwotICBDb2RlTWlycm9yLmV4dGVuZE1vZGUgPSBmdW5jdGlvbihtb2RlLCBwcm9w
ZXJ0aWVzKSB7Ci0gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eSht
b2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30p
OwotICAgIGNvcHlPYmoocHJvcGVydGllcywgZXh0cyk7Ci0gIH07Ci0KLSAgLy8gRVhURU5TSU9O
UwotCi0gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSwgZnVuYykg
ewotICAgIENvZGVNaXJyb3IucHJvdG90eXBlW25hbWVdID0gZnVuYzsKLSAgfTsKLSAgQ29kZU1p
cnJvci5kZWZpbmVEb2NFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7Ci0gICAgRG9j
LnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7Ci0gIH07Ci0gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9u
ID0gb3B0aW9uOwotCi0gIHZhciBpbml0SG9va3MgPSBbXTsKLSAgQ29kZU1pcnJvci5kZWZpbmVJ
bml0SG9vayA9IGZ1bmN0aW9uKGYpIHtpbml0SG9va3MucHVzaChmKTt9OwotCi0gIHZhciBoZWxw
ZXJzID0gQ29kZU1pcnJvci5oZWxwZXJzID0ge307CiAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxw
ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCB2YWx1ZSkgewotICAgIGlmICghaGVscGVycy5oYXNP
d25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7X2ds
b2JhbDogW119OwotICAgIGhlbHBlcnNbdHlwZV1bbmFtZV0gPSB2YWx1ZTsKLSAgfTsKKyAgICBp
ZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHsgaGVscGVyc1t0eXBlXSA9IENvZGVN
aXJyb3JbdHlwZV0gPSB7X2dsb2JhbDogW119IH0KKyAgICBoZWxwZXJzW3R5cGVdW25hbWVdID0g
dmFsdWUKKyAgfQogICBDb2RlTWlycm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24o
dHlwZSwgbmFtZSwgcHJlZGljYXRlLCB2YWx1ZSkgewotICAgIENvZGVNaXJyb3IucmVnaXN0ZXJI
ZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpOwotICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNo
KHtwcmVkOiBwcmVkaWNhdGUsIHZhbDogdmFsdWV9KTsKLSAgfTsKLQotICAvLyBNT0RFIFNUQVRF
IEhBTkRMSU5HCi0KLSAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0
ZS4gRXhwb3J0ZWQgYmVjYXVzZSBuZXN0ZWQKLSAgLy8gbW9kZXMgbmVlZCB0byBkbyB0aGlzIGZv
ciB0aGVpciBpbm5lciBtb2Rlcy4KLQotICB2YXIgY29weVN0YXRlID0gQ29kZU1pcnJvci5jb3B5
U3RhdGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewotICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkg
cmV0dXJuIHN0YXRlOwotICAgIGlmIChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0
YXRlKHN0YXRlKTsKLSAgICB2YXIgbnN0YXRlID0ge307Ci0gICAgZm9yICh2YXIgbiBpbiBzdGF0
ZSkgewotICAgICAgdmFyIHZhbCA9IHN0YXRlW25dOwotICAgICAgaWYgKHZhbCBpbnN0YW5jZW9m
IEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtdKTsKLSAgICAgIG5zdGF0ZVtuXSA9IHZhbDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG5zdGF0ZTsKLSAgfTsKLQotICB2YXIgc3RhcnRTdGF0ZSA9IENvZGVN
aXJyb3Iuc3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKG1vZGUsIGExLCBhMikgewotICAgIHJldHVybiBt
b2RlLnN0YXJ0U3RhdGUgPyBtb2RlLnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7Ci0gIH07Ci0K
LSAgLy8gR2l2ZW4gYSBtb2RlIGFuZCBhIHN0YXRlIChmb3IgdGhhdCBtb2RlKSwgZmluZCB0aGUg
aW5uZXIgbW9kZSBhbmQKLSAgLy8gc3RhdGUgYXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHN0YXRl
IHJlZmVycyB0by4KLSAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0
ZSkgewotICAgIHdoaWxlIChtb2RlLmlubmVyTW9kZSkgewotICAgICAgdmFyIGluZm8gPSBtb2Rl
LmlubmVyTW9kZShzdGF0ZSk7Ci0gICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUp
IGJyZWFrOwotICAgICAgc3RhdGUgPSBpbmZvLnN0YXRlOwotICAgICAgbW9kZSA9IGluZm8ubW9k
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX07
Ci0gIH07Ci0KLSAgLy8gU1RBTkRBUkQgQ09NTUFORFMKLQotICAvLyBDb21tYW5kcyBhcmUgcGFy
YW1ldGVyLWxlc3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW4KLSAgLy8gZWRp
dG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuCi0gIHZhciBjb21tYW5kcyA9IENvZGVN
aXJyb3IuY29tbWFuZHMgPSB7Ci0gICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNl
bGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9k
b250U2Nyb2xsKTt9LAotICAgIHNpbmdsZVNlbGVjdGlvbjogZnVuY3Rpb24oY20pIHsKLSAgICAg
IGNtLnNldFNlbGVjdGlvbihjbS5nZXRDdXJzb3IoImFuY2hvciIpLCBjbS5nZXRDdXJzb3IoImhl
YWQiKSwgc2VsX2RvbnRTY3JvbGwpOwotICAgIH0sCi0gICAga2lsbExpbmU6IGZ1bmN0aW9uKGNt
KSB7Ci0gICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewotICAg
ICAgICBpZiAocmFuZ2UuZW1wdHkoKSkgewotICAgICAgICAgIHZhciBsZW4gPSBnZXRMaW5lKGNt
LmRvYywgcmFuZ2UuaGVhZC5saW5lKS50ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAocmFuZ2Uu
aGVhZC5jaCA9PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUg
KyAxLCAwKX07Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5n
ZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSwgbGVuKX07Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpfTsK
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfSwKLSAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihj
bSkgewotICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAg
ICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLAotICAgICAgICAg
ICAgICAgIHRvOiBjbGlwUG9zKGNtLmRvYywgUG9zKHJhbmdlLnRvKCkubGluZSArIDEsIDApKX07
Ci0gICAgICB9KTsKLSAgICB9LAotICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAg
ICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0
dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJvbSgpfTsK
LSAgICAgIH0pOwotICAgIH0sCi0gICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbihjbSkg
ewotICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAg
ICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7Ci0g
ICAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAi
ZGl2Iik7Ci0gICAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBvcywgdG86IHJhbmdlLmZyb20oKX07
Ci0gICAgICB9KTsKLSAgICB9LAotICAgIGRlbFdyYXBwZWRMaW5lUmlnaHQ6IGZ1bmN0aW9uKGNt
KSB7Ci0gICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewotICAg
ICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsK
LSAgICAgICAgdmFyIHJpZ2h0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5s
aW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sICJkaXYiKTsKLSAgICAgICAgcmV0
dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByaWdodFBvcyB9OwotICAgICAgfSk7Ci0gICAg
fSwKLSAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAotICAgIHJlZG86IGZ1bmN0
aW9uKGNtKSB7Y20ucmVkbygpO30sCi0gICAgdW5kb1NlbGVjdGlvbjogZnVuY3Rpb24oY20pIHtj
bS51bmRvU2VsZWN0aW9uKCk7fSwKLSAgICByZWRvU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkge2Nt
LnJlZG9TZWxlY3Rpb24oKTt9LAotICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0
ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpO30sCi0gICAgZ29Eb2NFbmQ6IGZ1
bmN0aW9uKGNtKSB7Y20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5sYXN0TGluZSgpKSk7fSwKLSAg
ICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNC
eShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0KGNtLCByYW5nZS5oZWFkLmxpbmUp
OyB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcmlnaW46ICIrbW92ZSIsIGJpYXM6
IDF9KTsKLSAgICB9LAotICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAg
ICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJu
IGxpbmVTdGFydFNtYXJ0KGNtLCByYW5nZS5oZWFkKTsKLSAgICAgIH0sIHtvcmlnaW46ICIrbW92
ZSIsIGJpYXM6IDF9KTsKLSAgICB9LAotICAgIGdvTGluZUVuZDogZnVuY3Rpb24oY20pIHsKLSAg
ICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZUVu
ZChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
b3JpZ2luOiAiK21vdmUiLCBiaWFzOiAtMX0pOwotICAgIH0sCi0gICAgZ29MaW5lUmlnaHQ6IGZ1
bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2Up
IHsKLSAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRv
cCArIDU7Ci0gICAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiBjbS5kaXNwbGF5Lmxp
bmVEaXYub2Zmc2V0V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgImRpdiIpOwotICAgICAgfSwgc2Vs
X21vdmUpOwotICAgIH0sCi0gICAgZ29MaW5lTGVmdDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNt
LmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewotICAgICAgICB2YXIgdG9wID0g
Y20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsKLSAgICAgICAgcmV0dXJu
IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpOwotICAgICAgfSwgc2Vs
X21vdmUpOwotICAgIH0sCi0gICAgZ29MaW5lTGVmdFNtYXJ0OiBmdW5jdGlvbihjbSkgewotICAg
ICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHZhciB0
b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OwotICAgICAgICB2
YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7Ci0gICAg
ICAgIGlmIChwb3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xTLykpIHJldHVy
biBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCk7Ci0gICAgICAgIHJldHVybiBwb3M7Ci0g
ICAgICB9LCBzZWxfbW92ZSk7Ci0gICAgfSwKLSAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtj
bS5tb3ZlVigtMSwgImxpbmUiKTt9LAotICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20u
bW92ZVYoMSwgImxpbmUiKTt9LAotICAgIGdvUGFnZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVW
KC0xLCAicGFnZSIpO30sCi0gICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigx
LCAicGFnZSIpO30sCi0gICAgZ29DaGFyTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwg
ImNoYXIiKTt9LAotICAgIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJj
aGFyIik7fSwKLSAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJj
b2x1bW4iKTt9LAotICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwg
ImNvbHVtbiIpO30sCi0gICAgZ29Xb3JkTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwg
IndvcmQiKTt9LAotICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAi
Z3JvdXAiKTt9LAotICAgIGdvR3JvdXBMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAi
Z3JvdXAiKTt9LAotICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3
b3JkIik7fSwKLSAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEs
ICJjaGFyIik7fSwKLSAgICBkZWxDaGFyQWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgx
LCAiY2hhciIpO30sCi0gICAgZGVsV29yZEJlZm9yZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVI
KC0xLCAid29yZCIpO30sCi0gICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0
ZUgoMSwgIndvcmQiKTt9LAotICAgIGRlbEdyb3VwQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRl
bGV0ZUgoLTEsICJncm91cCIpO30sCi0gICAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24oY20pIHtj
bS5kZWxldGVIKDEsICJncm91cCIpO30sCi0gICAgaW5kZW50QXV0bzogZnVuY3Rpb24oY20pIHtj
bS5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iik7fSwKLSAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihj
bSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKLSAgICBpbmRlbnRMZXNzOiBmdW5jdGlv
bihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LAotICAgIGluc2VydFRhYjog
ZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIpO30sCi0gICAgaW5zZXJ0U29m
dFRhYjogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBzcGFjZXMgPSBbXSwgcmFuZ2VzID0gY20u
bGlzdFNlbGVjdGlvbnMoKSwgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBwb3Mg
PSByYW5nZXNbaV0uZnJvbSgpOwotICAgICAgICB2YXIgY29sID0gY291bnRDb2x1bW4oY20uZ2V0
TGluZShwb3MubGluZSksIHBvcy5jaCwgdGFiU2l6ZSk7Ci0gICAgICAgIHNwYWNlcy5wdXNoKG5l
dyBBcnJheSh0YWJTaXplIC0gY29sICUgdGFiU2l6ZSArIDEpLmpvaW4oIiAiKSk7Ci0gICAgICB9
Ci0gICAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhzcGFjZXMpOwotICAgIH0sCi0gICAgZGVmYXVs
dFRhYjogZnVuY3Rpb24oY20pIHsKLSAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBj
bS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOwotICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiaW5z
ZXJ0VGFiIik7Ci0gICAgfSwKLSAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24oY20pIHsKLSAg
ICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlz
dFNlbGVjdGlvbnMoKSwgbmV3U2VsID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFk
LCBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lKS50ZXh0OwotICAgICAgICAgIGlmIChs
aW5lKSB7Ci0gICAgICAgICAgICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoKSBjdXIgPSBuZXcg
UG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKTsKLSAgICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7
Ci0gICAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpOwotICAg
ICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoIC0gMSkgKyBsaW5l
LmNoYXJBdChjdXIuY2ggLSAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhj
dXIubGluZSwgY3VyLmNoIC0gMiksIGN1ciwgIit0cmFuc3Bvc2UiKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHsKLSAgICAgICAgICAgICAgdmFyIHBy
ZXYgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50ZXh0OwotICAgICAgICAgICAgICBp
ZiAocHJldikKLSAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkg
KyBjbS5kb2MubGluZVNlcGFyYXRvcigpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUG9zKGN1ci5saW5lIC0gMSwgcHJldi5sZW5ndGggLSAxKSwgUG9zKGN1ci5saW5l
LCAxKSwgIit0cmFuc3Bvc2UiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
ICAgbmV3U2VsLnB1c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y20uc2V0U2VsZWN0aW9ucyhuZXdTZWwpOwotICAgICAgfSk7Ci0gICAgfSwKLSAgICBuZXdsaW5l
QW5kSW5kZW50OiBmdW5jdGlvbihjbSkgewotICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHZhciBsZW4gPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgIHZhciByYW5nZSA9IGNt
Lmxpc3RTZWxlY3Rpb25zKClbaV07Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGNtLmRvYy5s
aW5lU2VwYXJhdG9yKCksIHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgIitpbnB1dCIpOwotICAg
ICAgICAgIGNtLmluZGVudExpbmUocmFuZ2UuZnJvbSgpLmxpbmUgKyAxLCBudWxsLCB0cnVlKTsK
LSAgICAgICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKLSAgICAgICAgfQotICAgICAgfSk7
Ci0gICAgfSwKLSAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3Zl
cndyaXRlKCk7fQotICB9OwotCi0KLSAgLy8gU1RBTkRBUkQgS0VZTUFQUwotCi0gIHZhciBrZXlN
YXAgPSBDb2RlTWlycm9yLmtleU1hcCA9IHt9OwotCi0gIGtleU1hcC5iYXNpYyA9IHsKLSAgICAi
TGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGlu
ZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCi0gICAgIkVuZCI6ICJnb0xpbmVFbmQiLCAiSG9t
ZSI6ICJnb0xpbmVTdGFydFNtYXJ0IiwgIlBhZ2VVcCI6ICJnb1BhZ2VVcCIsICJQYWdlRG93biI6
ICJnb1BhZ2VEb3duIiwKLSAgICAiRGVsZXRlIjogImRlbENoYXJBZnRlciIsICJCYWNrc3BhY2Ui
OiAiZGVsQ2hhckJlZm9yZSIsICJTaGlmdC1CYWNrc3BhY2UiOiAiZGVsQ2hhckJlZm9yZSIsCi0g
ICAgIlRhYiI6ICJkZWZhdWx0VGFiIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRBdXRvIiwKLSAgICAi
RW50ZXIiOiAibmV3bGluZUFuZEluZGVudCIsICJJbnNlcnQiOiAidG9nZ2xlT3ZlcndyaXRlIiwK
LSAgICAiRXNjIjogInNpbmdsZVNlbGVjdGlvbiIKLSAgfTsKLSAgLy8gTm90ZSB0aGF0IHRoZSBz
YXZlIGFuZCBmaW5kLXJlbGF0ZWQgY29tbWFuZHMgYXJlbid0IGRlZmluZWQgYnkKLSAgLy8gZGVm
YXVsdC4gVXNlciBjb2RlIG9yIGFkZG9ucyBjYW4gZGVmaW5lIHRoZW0uIFVua25vd24gY29tbWFu
ZHMKLSAgLy8gYXJlIHNpbXBseSBpZ25vcmVkLgotICBrZXlNYXAucGNEZWZhdWx0ID0gewotICAg
ICJDdHJsLUEiOiAic2VsZWN0QWxsIiwgIkN0cmwtRCI6ICJkZWxldGVMaW5lIiwgIkN0cmwtWiI6
ICJ1bmRvIiwgIlNoaWZ0LUN0cmwtWiI6ICJyZWRvIiwgIkN0cmwtWSI6ICJyZWRvIiwKLSAgICAi
Q3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1V
cCI6ICJnb0xpbmVVcCIsICJDdHJsLURvd24iOiAiZ29MaW5lRG93biIsCi0gICAgIkN0cmwtTGVm
dCI6ICJnb0dyb3VwTGVmdCIsICJDdHJsLVJpZ2h0IjogImdvR3JvdXBSaWdodCIsICJBbHQtTGVm
dCI6ICJnb0xpbmVTdGFydCIsICJBbHQtUmlnaHQiOiAiZ29MaW5lRW5kIiwKLSAgICAiQ3RybC1C
YWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLCAiQ3RybC1EZWxldGUiOiAiZGVsR3JvdXBBZnRl
ciIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCi0gICAgIkN0cmwtRyI6ICJm
aW5kTmV4dCIsICJTaGlmdC1DdHJsLUciOiAiZmluZFByZXYiLCAiU2hpZnQtQ3RybC1GIjogInJl
cGxhY2UiLCAiU2hpZnQtQ3RybC1SIjogInJlcGxhY2VBbGwiLAotICAgICJDdHJsLVsiOiAiaW5k
ZW50TGVzcyIsICJDdHJsLV0iOiAiaW5kZW50TW9yZSIsCi0gICAgIkN0cmwtVSI6ICJ1bmRvU2Vs
ZWN0aW9uIiwgIlNoaWZ0LUN0cmwtVSI6ICJyZWRvU2VsZWN0aW9uIiwgIkFsdC1VIjogInJlZG9T
ZWxlY3Rpb24iLAotICAgIGZhbGx0aHJvdWdoOiAiYmFzaWMiCi0gIH07Ci0gIC8vIFZlcnkgYmFz
aWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBN
YWMuCi0gIGtleU1hcC5lbWFjc3kgPSB7Ci0gICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJD
dHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdv
TGluZURvd24iLAotICAgICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJnb1dvcmRM
ZWZ0IiwgIkN0cmwtQSI6ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5kIiwKLSAg
ICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdvUGFnZVVwIiwgIkN0
cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAotICAgICJB
bHQtRCI6ICJkZWxXb3JkQWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3JlIiwg
IkN0cmwtSyI6ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hhcnMiCi0gIH07Ci0g
IGtleU1hcC5tYWNEZWZhdWx0ID0gewotICAgICJDbWQtQSI6ICJzZWxlY3RBbGwiLCAiQ21kLUQi
OiAiZGVsZXRlTGluZSIsICJDbWQtWiI6ICJ1bmRvIiwgIlNoaWZ0LUNtZC1aIjogInJlZG8iLCAi
Q21kLVkiOiAicmVkbyIsCi0gICAgIkNtZC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQ21kLVVwIjog
ImdvRG9jU3RhcnQiLCAiQ21kLUVuZCI6ICJnb0RvY0VuZCIsICJDbWQtRG93biI6ICJnb0RvY0Vu
ZCIsICJBbHQtTGVmdCI6ICJnb0dyb3VwTGVmdCIsCi0gICAgIkFsdC1SaWdodCI6ICJnb0dyb3Vw
UmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lTGVmdCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lUmln
aHQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsCi0gICAgIkN0cmwtQWx0LUJh
Y2tzcGFjZSI6ICJkZWxHcm91cEFmdGVyIiwgIkFsdC1EZWxldGUiOiAiZGVsR3JvdXBBZnRlciIs
ICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAotICAgICJDbWQtRyI6ICJmaW5kTmV4
dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQtQWx0LUYiOiAicmVwbGFjZSIsICJT
aGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCi0gICAgIkNtZC1bIjogImluZGVudExlc3Mi
LCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3NwYWNlIjogImRlbFdyYXBwZWRMaW5l
TGVmdCIsICJDbWQtRGVsZXRlIjogImRlbFdyYXBwZWRMaW5lUmlnaHQiLAotICAgICJDbWQtVSI6
ICJ1bmRvU2VsZWN0aW9uIiwgIlNoaWZ0LUNtZC1VIjogInJlZG9TZWxlY3Rpb24iLCAiQ3RybC1V
cCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRG93biI6ICJnb0RvY0VuZCIsCi0gICAgZmFsbHRocm91
Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KLSAgfTsKLSAga2V5TWFwWyJkZWZhdWx0Il0gPSBtYWMg
PyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7Ci0KLSAgLy8gS0VZTUFQIERJ
U1BBVENICi0KLSAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7Ci0gICAgdmFyIHBh
cnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyksIG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAx
XTsKLSAgICB2YXIgYWx0LCBjdHJsLCBzaGlmdCwgY21kOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7Ci0gICAgICB2YXIgbW9kID0gcGFydHNbaV07Ci0g
ICAgICBpZiAoL14oY21kfG1ldGF8bSkkL2kudGVzdChtb2QpKSBjbWQgPSB0cnVlOwotICAgICAg
ZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSBhbHQgPSB0cnVlOwotICAgICAgZWxzZSBp
ZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgY3RybCA9IHRydWU7Ci0gICAgICBl
bHNlIGlmICgvXnMoaGlmdCkkL2kudGVzdChtb2QpKSBzaGlmdCA9IHRydWU7Ci0gICAgICBlbHNl
IHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIgKyBtb2QpOwot
ICAgIH0KLSAgICBpZiAoYWx0KSBuYW1lID0gIkFsdC0iICsgbmFtZTsKLSAgICBpZiAoY3RybCkg
bmFtZSA9ICJDdHJsLSIgKyBuYW1lOwotICAgIGlmIChjbWQpIG5hbWUgPSAiQ21kLSIgKyBuYW1l
OwotICAgIGlmIChzaGlmdCkgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKLSAgICByZXR1cm4gbmFt
ZTsKLSAgfQotCi0gIC8vIFRoaXMgaXMgYSBrbHVkZ2UgdG8ga2VlcCBrZXltYXBzIG1vc3RseSB3
b3JraW5nIGFzIHJhdyBvYmplY3RzCi0gIC8vIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkgd2hp
bGUgYXQgdGhlIHNhbWUgdGltZSBzdXBwb3J0IGZlYXR1cmVzCi0gIC8vIGxpa2Ugbm9ybWFsaXph
dGlvbiBhbmQgbXVsdGktc3Ryb2tlIGtleSBiaW5kaW5ncy4gSXQgY29tcGlsZXMgYQotICAvLyBu
ZXcgbm9ybWFsaXplZCBrZXltYXAsIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG9sZCBvYmplY3QgdG8g
cmVmbGVjdAotICAvLyB0aGlzLgotICBDb2RlTWlycm9yLm5vcm1hbGl6ZUtleU1hcCA9IGZ1bmN0
aW9uKGtleW1hcCkgewotICAgIHZhciBjb3B5ID0ge307Ci0gICAgZm9yICh2YXIga2V5bmFtZSBp
biBrZXltYXApIGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHsKLSAgICAgIHZh
ciB2YWx1ZSA9IGtleW1hcFtrZXluYW1lXTsKLSAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdo
fChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIGNvbnRpbnVlOwotICAgICAgaWYgKHZhbHVl
ID09ICIuLi4iKSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRpbnVlOyB9Ci0KLSAgICAg
IHZhciBrZXlzID0gbWFwKGtleW5hbWUuc3BsaXQoIiAiKSwgbm9ybWFsaXplS2V5TmFtZSk7Ci0g
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IHZhbCwgbmFtZTsKLSAgICAgICAgaWYgKGkgPT0ga2V5cy5sZW5ndGggLSAxKSB7Ci0gICAgICAg
ICAgbmFtZSA9IGtleXMuam9pbigiICIpOwotICAgICAgICAgIHZhbCA9IHZhbHVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCIg
Iik7Ci0gICAgICAgICAgdmFsID0gIi4uLiI7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHByZXYg
PSBjb3B5W25hbWVdOwotICAgICAgICBpZiAoIXByZXYpIGNvcHlbbmFtZV0gPSB2YWw7Ci0gICAg
ICAgIGVsc2UgaWYgKHByZXYgIT0gdmFsKSB0aHJvdyBuZXcgRXJyb3IoIkluY29uc2lzdGVudCBi
aW5kaW5ncyBmb3IgIiArIG5hbWUpOwotICAgICAgfQotICAgICAgZGVsZXRlIGtleW1hcFtrZXlu
YW1lXTsKLSAgICB9Ci0gICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSBrZXltYXBbcHJvcF0gPSBj
b3B5W3Byb3BdOwotICAgIHJldHVybiBrZXltYXA7Ci0gIH07Ci0KLSAgdmFyIGxvb2t1cEtleSA9
IENvZGVNaXJyb3IubG9va3VwS2V5ID0gZnVuY3Rpb24oa2V5LCBtYXAsIGhhbmRsZSwgY29udGV4
dCkgewotICAgIG1hcCA9IGdldEtleU1hcChtYXApOwotICAgIHZhciBmb3VuZCA9IG1hcC5jYWxs
ID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldOwotICAgIGlmIChmb3VuZCA9PT0g
ZmFsc2UpIHJldHVybiAibm90aGluZyI7Ci0gICAgaWYgKGZvdW5kID09PSAiLi4uIikgcmV0dXJu
ICJtdWx0aSI7Ci0gICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgcmV0dXJu
ICJoYW5kbGVkIjsKLQotICAgIGlmIChtYXAuZmFsbHRocm91Z2gpIHsKLSAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWFwLmZhbGx0aHJvdWdoKSAhPSAiW29iamVjdCBB
cnJheV0iKQotICAgICAgICByZXR1cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBo
YW5kbGUsIGNvbnRleHQpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAuZmFsbHRocm91
Z2gubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1h
cC5mYWxsdGhyb3VnaFtpXSwgaGFuZGxlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKHJlc3VsdCkg
cmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgLy8gTW9kaWZpZXIga2V5
IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGUKLSAgLy8g
cHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guCi0gIHZhciBpc01vZGlmaWVyS2V5ID0gQ29k
ZU1pcnJvci5pc01vZGlmaWVyS2V5ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICB2YXIgbmFtZSA9
IHR5cGVvZiB2YWx1ZSA9PSAic3RyaW5nIiA/IHZhbHVlIDoga2V5TmFtZXNbdmFsdWUua2V5Q29k
ZV07Ci0gICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5hbWUgPT0gIkFsdCIgfHwgbmFtZSA9
PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0gIH07Ci0KLSAgLy8gTG9vayB1cCB0aGUgbmFt
ZSBvZiBhIGtleSBhcyBpbmRpY2F0ZWQgYnkgYW4gZXZlbnQgb2JqZWN0LgotICB2YXIga2V5TmFt
ZSA9IENvZGVNaXJyb3Iua2V5TmFtZSA9IGZ1bmN0aW9uKGV2ZW50LCBub1NoaWZ0KSB7Ci0gICAg
aWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJjaGFyIl0pIHJldHVy
biBmYWxzZTsKLSAgICB2YXIgYmFzZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdLCBuYW1lID0g
YmFzZTsKLSAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBiYXNlICE9ICJBbHQiKSBuYW1lID0gIkFs
dC0iICsgbmFtZTsKLSAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50
LmN0cmxLZXkpICYmIGJhc2UgIT0gIkN0cmwiKSBuYW1lID0gIkN0cmwtIiArIG5hbWU7Ci0gICAg
aWYgKChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxLZXkgOiBldmVudC5tZXRhS2V5KSAmJiBiYXNl
ICE9ICJDbWQiKSBuYW1lID0gIkNtZC0iICsgbmFtZTsKLSAgICBpZiAoIW5vU2hpZnQgJiYgZXZl
bnQuc2hpZnRLZXkgJiYgYmFzZSAhPSAiU2hpZnQiKSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOwot
ICAgIHJldHVybiBuYW1lOwotICB9OwotCi0gIGZ1bmN0aW9uIGdldEtleU1hcCh2YWwpIHsKLSAg
ICByZXR1cm4gdHlwZW9mIHZhbCA9PSAic3RyaW5nIiA/IGtleU1hcFt2YWxdIDogdmFsOwotICB9
Ci0KLSAgLy8gRlJPTVRFWFRBUkVBCi0KLSAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmdW5j
dGlvbih0ZXh0YXJlYSwgb3B0aW9ucykgewotICAgIG9wdGlvbnMgPSBvcHRpb25zID8gY29weU9i
aihvcHRpb25zKSA6IHt9OwotICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKLSAg
ICBpZiAoIW9wdGlvbnMudGFiaW5kZXggJiYgdGV4dGFyZWEudGFiSW5kZXgpCi0gICAgICBvcHRp
b25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiSW5kZXg7Ci0gICAgaWYgKCFvcHRpb25zLnBsYWNl
aG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKQotICAgICAgb3B0aW9ucy5wbGFjZWhvbGRl
ciA9IHRleHRhcmVhLnBsYWNlaG9sZGVyOwotICAgIC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBp
ZiB0aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9yIGlmIGl0IGhhcwotICAgIC8vIGF1dG9mb2N1
cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLgotICAgIGlmIChvcHRpb25zLmF1dG9m
b2N1cyA9PSBudWxsKSB7Ci0gICAgICB2YXIgaGFzRm9jdXMgPSBhY3RpdmVFbHQoKTsKLSAgICAg
IG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwKLSAgICAgICAgdGV4
dGFyZWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRv
Y3VtZW50LmJvZHk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1
ZSA9IGNtLmdldFZhbHVlKCk7fQotICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICBvbih0
ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAvLyBEZXBsb3JhYmxlIGhhY2sg
dG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICBpZiAo
IW9wdGlvbnMubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkgewotICAgICAgICB2YXIgZm9ybSA9IHRl
eHRhcmVhLmZvcm0sIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICB2YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICBzYXZlKCk7Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7
Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICAgICAgZm9ybS5zdWJtaXQgPSB3
cmFwcGVkU3VibWl0OwotICAgICAgICAgIH07Ci0gICAgICAgIH0gY2F0Y2goZSkge30KLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBvcHRpb25zLmZpbmlzaEluaXQgPSBmdW5jdGlvbihjbSkgewotICAg
ICAgY20uc2F2ZSA9IHNhdmU7Ci0gICAgICBjbS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdGV4dGFyZWE7IH07Ci0gICAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGNtLnRvVGV4dEFyZWEgPSBpc05hTjsgLy8gUHJldmVudCB0aGlzIGZyb20gYmVpbmcg
cmFuIHR3aWNlCi0gICAgICAgIHNhdmUoKTsKLSAgICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKLSAgICAgICAgdGV4dGFyZWEuc3R5
bGUuZGlzcGxheSA9ICIiOwotICAgICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewotICAgICAgICAg
IG9mZih0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAgICAgaWYgKHR5cGVv
ZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgdGV4dGFy
ZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OwotICAgICAgICB9Ci0gICAgICB9OwotICAgIH07
Ci0KLSAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHZhciBjbSA9IENv
ZGVNaXJyb3IoZnVuY3Rpb24obm9kZSkgewotICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwotICAgIH0sIG9wdGlvbnMpOwot
ICAgIHJldHVybiBjbTsKLSAgfTsKLQotICAvLyBTVFJJTkcgU1RSRUFNCi0KLSAgLy8gRmVkIHRv
IHRoZSBtb2RlIHBhcnNlcnMsIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZQotICAv
LyBwYXJzZXJzIG1vcmUgc3VjY2luY3QuCi0KLSAgdmFyIFN0cmluZ1N0cmVhbSA9IENvZGVNaXJy
b3IuU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXplKSB7Ci0gICAgdGhpcy5w
b3MgPSB0aGlzLnN0YXJ0ID0gMDsKLSAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgICB0aGlz
LnRhYlNpemUgPSB0YWJTaXplIHx8IDg7Ci0gICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5s
YXN0Q29sdW1uVmFsdWUgPSAwOwotICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKLSAgfTsKLQotICBT
dHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewotICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRo
aXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAotICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0
dXJuIHRoaXMucG9zID09IHRoaXMubGluZVN0YXJ0O30sCi0gICAgcGVlazogZnVuY3Rpb24oKSB7
cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5kZWZpbmVkO30sCi0gICAg
bmV4dDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5n
dGgpCi0gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk7Ci0gICAg
fSwKLSAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7Ci0gICAgICB2YXIgY2ggPSB0aGlzLnN0cmlu
Zy5jaGFyQXQodGhpcy5wb3MpOwotICAgICAgaWYgKHR5cGVvZiBtYXRjaCA9PSAic3RyaW5nIikg
dmFyIG9rID0gY2ggPT0gbWF0Y2g7Ci0gICAgICBlbHNlIHZhciBvayA9IGNoICYmIChtYXRjaC50
ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOwotICAgICAgaWYgKG9rKSB7Kyt0aGlz
LnBvczsgcmV0dXJuIGNoO30KLSAgICB9LAotICAgIGVhdFdoaWxlOiBmdW5jdGlvbihtYXRjaCkg
ewotICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7Ci0gICAgICB3aGlsZSAodGhpcy5lYXQobWF0
Y2gpKXt9Ci0gICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKLSAgICB9LAotICAgIGVhdFNw
YWNlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwotICAgICAgd2hp
bGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpKSArK3Ro
aXMucG9zOwotICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7Ci0gICAgfSwKLSAgICBza2lw
VG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCi0gICAg
c2tpcFRvOiBmdW5jdGlvbihjaCkgewotICAgICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5k
ZXhPZihjaCwgdGhpcy5wb3MpOwotICAgICAgaWYgKGZvdW5kID4gLTEpIHt0aGlzLnBvcyA9IGZv
dW5kOyByZXR1cm4gdHJ1ZTt9Ci0gICAgfSwKLSAgICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlz
LnBvcyAtPSBuO30sCi0gICAgY29sdW1uOiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLmxh
c3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7Ci0gICAgICAgIHRoaXMubGFzdENvbHVtblZhbHVl
ID0gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQsIHRoaXMudGFiU2l6ZSwgdGhp
cy5sYXN0Q29sdW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5WYWx1ZSk7Ci0gICAgICAgIHRoaXMubGFz
dENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5sYXN0
Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0aGlzLnN0cmluZywg
dGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTsKLSAgICB9LAotICAgIGluZGVudGF0
aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywg
bnVsbCwgdGhpcy50YWJTaXplKSAtCi0gICAgICAgICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29s
dW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApOwotICAg
IH0sCi0gICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2
ZSkgewotICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09ICJzdHJpbmciKSB7Ci0gICAgICAgIHZh
ciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9M
b3dlckNhc2UoKSA6IHN0cjt9OwotICAgICAgICB2YXIgc3Vic3RyID0gdGhpcy5zdHJpbmcuc3Vi
c3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7Ci0gICAgICAgIGlmIChjYXNlZChzdWJzdHIp
ID09IGNhc2VkKHBhdHRlcm4pKSB7Ci0gICAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB0
aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xp
Y2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pOwotICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gu
aW5kZXggPiAwKSByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKG1hdGNoICYmIGNvbnN1bWUgIT09
IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5ndGg7Ci0gICAgICAgIHJldHVybiBtYXRj
aDsKLSAgICAgIH0KLSAgICB9LAotICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
c3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9LAotICAgIGhpZGVGaXJzdENoYXJz
OiBmdW5jdGlvbihuLCBpbm5lcikgewotICAgICAgdGhpcy5saW5lU3RhcnQgKz0gbjsKLSAgICAg
IHRyeSB7IHJldHVybiBpbm5lcigpOyB9Ci0gICAgICBmaW5hbGx5IHsgdGhpcy5saW5lU3RhcnQg
LT0gbjsgfQotICAgIH0KLSAgfTsKLQotICAvLyBURVhUTUFSS0VSUwotCi0gIC8vIENyZWF0ZWQg
d2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9kcy4gQSBUZXh0TWFya2VyIGlzIGEK
LSAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmluZCBhIG1hcmtlZCBw
b3NpdGlvbiBpbiB0aGUKLSAgLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBob2xkIGFycmF5cyAo
bWFya2VkU3BhbnMpIGNvbnRhaW5pbmcKLSAgLy8ge2Zyb20sIHRvLCBtYXJrZXJ9IG9iamVjdCBw
b2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmQKLSAgLy8gaW5kaWNhdGluZyB0aGF0
IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRpcGxlCi0gIC8vIGxp
bmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFucyBhY3Jvc3MgbGlu
ZXMuCi0gIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBmb3IgdGhlaXIgZnJvbS90byBwcm9w
ZXJ0aWVzIHdoZW4gdGhlCi0gIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRoZSBzdGFydC9l
bmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQotICAvLyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5l
cyB0aGV5IGN1cnJlbnRseSB0b3VjaC4KLQotICB2YXIgbmV4dE1hcmtlcklkID0gMDsKLQotICB2
YXIgVGV4dE1hcmtlciA9IENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlw
ZSkgewotICAgIHRoaXMubGluZXMgPSBbXTsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRo
aXMuZG9jID0gZG9jOwotICAgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDsKLSAgfTsKLSAgZXZl
bnRNaXhpbihUZXh0TWFya2VyKTsKLQotICAvLyBDbGVhciB0aGUgbWFya2VyLgotICBUZXh0TWFy
a2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLmV4cGxpY2l0
bHlDbGVhcmVkKSByZXR1cm47Ci0gICAgdmFyIGNtID0gdGhpcy5kb2MuY20sIHdpdGhPcCA9IGNt
ICYmICFjbS5jdXJPcDsKLSAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7Ci0gICAg
aWYgKGhhc0hhbmRsZXIodGhpcywgImNsZWFyIikpIHsKLSAgICAgIHZhciBmb3VuZCA9IHRoaXMu
ZmluZCgpOwotICAgICAgaWYgKGZvdW5kKSBzaWduYWxMYXRlcih0aGlzLCAiY2xlYXIiLCBmb3Vu
ZC5mcm9tLCBmb3VuZC50byk7Ci0gICAgfQotICAgIHZhciBtaW4gPSBudWxsLCBtYXggPSBudWxs
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewotICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwotICAgICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRT
cGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYgKGNtICYmICF0aGlzLmNv
bGxhcHNlZCkgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vKGxpbmUpLCAidGV4dCIpOwotICAgICAg
ZWxzZSBpZiAoY20pIHsKLSAgICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgbWF4ID0gbGluZU5v
KGxpbmUpOwotICAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIG1pbiA9IGxpbmVObyhsaW5l
KTsKLSAgICAgIH0KLSAgICAgIGxpbmUubWFya2VkU3BhbnMgPSByZW1vdmVNYXJrZWRTcGFuKGxp
bmUubWFya2VkU3BhbnMsIHNwYW4pOwotICAgICAgaWYgKHNwYW4uZnJvbSA9PSBudWxsICYmIHRo
aXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpICYmIGNtKQotICAg
ICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOwotICAg
IH0KLSAgICBpZiAoY20gJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBw
aW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
IHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRoaXMubGluZXNbaV0pLCBsZW4gPSBsaW5lTGVuZ3Ro
KHZpc3VhbCk7Ci0gICAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7Ci0g
ICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IHZpc3VhbDsKLSAgICAgICAgY20uZGlzcGxheS5t
YXhMaW5lTGVuZ3RoID0gbGVuOwotICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWluICE9IG51bGwgJiYgY20gJiYgdGhp
cy5jb2xsYXBzZWQpIHJlZ0NoYW5nZShjbSwgbWluLCBtYXggKyAxKTsKLSAgICB0aGlzLmxpbmVz
Lmxlbmd0aCA9IDA7Ci0gICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7Ci0gICAgaWYg
KHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7Ci0gICAgICB0aGlzLmRvYy5jYW50
RWRpdCA9IGZhbHNlOwotICAgICAgaWYgKGNtKSByZUNoZWNrU2VsZWN0aW9uKGNtLmRvYyk7Ci0g
ICAgfQotICAgIGlmIChjbSkgc2lnbmFsTGF0ZXIoY20sICJtYXJrZXJDbGVhcmVkIiwgY20sIHRo
aXMpOwotICAgIGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7Ci0gICAgaWYgKHRoaXMucGFy
ZW50KSB0aGlzLnBhcmVudC5jbGVhcigpOwotICB9OwotCi0gIC8vIEZpbmQgdGhlIHBvc2l0aW9u
IG9mIHRoZSBtYXJrZXIgaW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20sCi0gIC8vIHRv
fSBvYmplY3QgYnkgZGVmYXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBhIHNwZWNpZmlj
IHNpZGUKLSAgLy8gLS0gMCAoYm90aCksIC0xIChsZWZ0KSwgb3IgMSAocmlnaHQpLiBXaGVuIGxp
bmVPYmogaXMgdHJ1ZSwgdGhlCi0gIC8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNvbnRhaW4gYSBs
aW5lIG9iamVjdCwgcmF0aGVyIHRoYW4gYSBsaW5lCi0gIC8vIG51bWJlciAodXNlZCB0byBwcmV2
ZW50IGxvb2tpbmcgdXAgdGhlIHNhbWUgbGluZSB0d2ljZSkuCi0gIFRleHRNYXJrZXIucHJvdG90
eXBlLmZpbmQgPSBmdW5jdGlvbihzaWRlLCBsaW5lT2JqKSB7Ci0gICAgaWYgKHNpZGUgPT0gbnVs
bCAmJiB0aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgc2lkZSA9IDE7Ci0gICAgdmFyIGZyb20sIHRv
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewotICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwotICAgICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRT
cGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYgKHNwYW4uZnJvbSAhPSBu
dWxsKSB7Ci0gICAgICAgIGZyb20gPSBQb3MobGluZU9iaiA/IGxpbmUgOiBsaW5lTm8obGluZSks
IHNwYW4uZnJvbSk7Ci0gICAgICAgIGlmIChzaWRlID09IC0xKSByZXR1cm4gZnJvbTsKLSAgICAg
IH0KLSAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsKLSAgICAgICAgdG8gPSBQb3MobGluZU9i
aiA/IGxpbmUgOiBsaW5lTm8obGluZSksIHNwYW4udG8pOwotICAgICAgICBpZiAoc2lkZSA9PSAx
KSByZXR1cm4gdG87Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmcm9tICYmIHtmcm9tOiBm
cm9tLCB0bzogdG99OwotICB9OwotCi0gIC8vIFNpZ25hbHMgdGhhdCB0aGUgbWFya2VyJ3Mgd2lk
Z2V0IGNoYW5nZWQsIGFuZCBzdXJyb3VuZGluZyBsYXlvdXQKLSAgLy8gc2hvdWxkIGJlIHJlY29t
cHV0ZWQuCi0gIFRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgcG9zID0gdGhpcy5maW5kKC0xLCB0cnVlKSwgd2lkZ2V0ID0gdGhpcywgY20gPSB0aGlz
LmRvYy5jbTsKLSAgICBpZiAoIXBvcyB8fCAhY20pIHJldHVybjsKLSAgICBydW5Jbk9wKGNtLCBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBv
cy5saW5lKTsKLSAgICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7Ci0g
ICAgICBpZiAodmlldykgewotICAgICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKHZp
ZXcpOwotICAgICAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VV
cGRhdGUgPSB0cnVlOwotICAgICAgfQotICAgICAgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRy
dWU7Ci0gICAgICBpZiAoIWxpbmVJc0hpZGRlbih3aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRnZXQu
aGVpZ2h0ICE9IG51bGwpIHsKLSAgICAgICAgdmFyIG9sZEhlaWdodCA9IHdpZGdldC5oZWlnaHQ7
Ci0gICAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxsOwotICAgICAgICB2YXIgZEhlaWdodCA9IHdp
ZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0OwotICAgICAgICBpZiAoZEhlaWdodCkKLSAg
ICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZEhlaWdodCk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH07Ci0KLSAgVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNoTGlu
ZSA9IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMu
ZG9jLmNtKSB7Ci0gICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDsKLSAgICAgIGlmICgh
b3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IGluZGV4T2Yob3AubWF5YmVIaWRkZW5NYXJrZXJzLCB0
aGlzKSA9PSAtMSkKLSAgICAgICAgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzIHx8IChvcC5tYXli
ZVVuaGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTsKLSAgICB9Ci0gICAgdGhpcy5saW5l
cy5wdXNoKGxpbmUpOwotICB9OwotICBUZXh0TWFya2VyLnByb3RvdHlwZS5kZXRhY2hMaW5lID0g
ZnVuY3Rpb24obGluZSkgewotICAgIHRoaXMubGluZXMuc3BsaWNlKGluZGV4T2YodGhpcy5saW5l
cywgbGluZSksIDEpOwotICAgIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20p
IHsKLSAgICAgIHZhciBvcCA9IHRoaXMuZG9jLmNtLmN1ck9wOwotICAgICAgKG9wLm1heWJlSGlk
ZGVuTWFya2VycyB8fCAob3AubWF5YmVIaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOwot
ICAgIH0KLSAgfTsKLQotICAvLyBDb2xsYXBzZWQgbWFya2VycyBoYXZlIHVuaXF1ZSBpZHMsIGlu
IG9yZGVyIHRvIGJlIGFibGUgdG8gb3JkZXIKLSAgLy8gdGhlbSwgd2hpY2ggaXMgbmVlZGVkIGZv
ciB1bmlxdWVseSBkZXRlcm1pbmluZyBhbiBvdXRlciBtYXJrZXIKLSAgLy8gd2hlbiB0aGV5IG92
ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLgotICB2YXIg
bmV4dE1hcmtlcklkID0gMDsKLQotICAvLyBDcmVhdGUgYSBtYXJrZXIsIHdpcmUgaXQgdXAgdG8g
dGhlIHJpZ2h0IGxpbmVzLCBhbmQKLSAgZnVuY3Rpb24gbWFya1RleHQoZG9jLCBmcm9tLCB0bywg
b3B0aW9ucywgdHlwZSkgewotICAgIC8vIFNoYXJlZCBtYXJrZXJzIChhY3Jvc3MgbGlua2VkIGRv
Y3VtZW50cykgYXJlIGhhbmRsZWQgc2VwYXJhdGVseQotICAgIC8vIChtYXJrVGV4dFNoYXJlZCB3
aWxsIGNhbGwgb3V0IHRvIHRoaXMgYWdhaW4sIG9uY2UgcGVyCi0gICAgLy8gZG9jdW1lbnQpLgot
ICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkKSByZXR1cm4gbWFya1RleHRTaGFyZWQo
ZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSk7Ci0gICAgLy8gRW5zdXJlIHdlIGFyZSBpbiBh
biBvcGVyYXRpb24uCi0gICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKSByZXR1cm4gb3Bl
cmF0aW9uKGRvYy5jbSwgbWFya1RleHQpKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpOwot
Ci0gICAgdmFyIG1hcmtlciA9IG5ldyBUZXh0TWFya2VyKGRvYywgdHlwZSksIGRpZmYgPSBjbXAo
ZnJvbSwgdG8pOwotICAgIGlmIChvcHRpb25zKSBjb3B5T2JqKG9wdGlvbnMsIG1hcmtlciwgZmFs
c2UpOwotICAgIC8vIERvbid0IGNvbm5lY3QgZW1wdHkgbWFya2VycyB1bmxlc3MgY2xlYXJXaGVu
RW1wdHkgaXMgZmFsc2UKLSAgICBpZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5j
bGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpCi0gICAgICByZXR1cm4gbWFya2VyOwotICAgIGlmICht
YXJrZXIucmVwbGFjZWRXaXRoKSB7Ci0gICAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGlt
cGxpZXMgY29sbGFwc2VkICh3aWRnZXQgcmVwbGFjZXMgdGV4dCkKLSAgICAgIG1hcmtlci5jb2xs
YXBzZWQgPSB0cnVlOwotICAgICAgbWFya2VyLndpZGdldE5vZGUgPSBlbHQoInNwYW4iLCBbbWFy
a2VyLnJlcGxhY2VkV2l0aF0sICJDb2RlTWlycm9yLXdpZGdldCIpOwotICAgICAgaWYgKCFvcHRp
b25zLmhhbmRsZU1vdXNlRXZlbnRzKSBtYXJrZXIud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoImNt
LWlnbm9yZS1ldmVudHMiLCAidHJ1ZSIpOwotICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0TGVmdCkg
bWFya2VyLndpZGdldE5vZGUuaW5zZXJ0TGVmdCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChtYXJr
ZXIuY29sbGFwc2VkKSB7Ci0gICAgICBpZiAoY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2Ms
IGZyb20ubGluZSwgZnJvbSwgdG8sIG1hcmtlcikgfHwKLSAgICAgICAgICBmcm9tLmxpbmUgIT0g
dG8ubGluZSAmJiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgdG8ubGluZSwgZnJvbSwg
dG8sIG1hcmtlcikpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNl
ZCBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpOwotICAgICAg
c2F3Q29sbGFwc2VkU3BhbnMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXJrZXIuYWRkVG9I
aXN0b3J5KQotICAgICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0
bywgb3JpZ2luOiAibWFya1RleHQifSwgZG9jLnNlbCwgTmFOKTsKLQotICAgIHZhciBjdXJMaW5l
ID0gZnJvbS5saW5lLCBjbSA9IGRvYy5jbSwgdXBkYXRlTWF4TGluZTsKLSAgICBkb2MuaXRlcihj
dXJMaW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGNtICYmIG1h
cmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3VhbExpbmUo
bGluZSkgPT0gY20uZGlzcGxheS5tYXhMaW5lKQotICAgICAgICB1cGRhdGVNYXhMaW5lID0gdHJ1
ZTsKLSAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkICYmIGN1ckxpbmUgIT0gZnJvbS5saW5lKSB1
cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBuZXcg
TWFya2VkU3BhbihtYXJrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ckxpbmUgPT0gZnJvbS5saW5lID8gZnJvbS5jaCA6IG51bGwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxpbmUgPT0gdG8ubGluZSA/IHRvLmNoIDog
bnVsbCkpOwotICAgICAgKytjdXJMaW5lOwotICAgIH0pOwotICAgIC8vIGxpbmVJc0hpZGRlbiBk
ZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgc3BhbnMsIHNvIG5lZWRzIGEgc2Vjb25kIHBh
c3MKLSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5l
ICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmVJc0hpZGRlbihkb2MsIGxpbmUp
KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgIH0pOwotCi0gICAgaWYgKG1hcmtlci5j
bGVhck9uRW50ZXIpIG9uKG1hcmtlciwgImJlZm9yZUN1cnNvckVudGVyIiwgZnVuY3Rpb24oKSB7
IG1hcmtlci5jbGVhcigpOyB9KTsKLQotICAgIGlmIChtYXJrZXIucmVhZE9ubHkpIHsKLSAgICAg
IHNhd1JlYWRPbmx5U3BhbnMgPSB0cnVlOwotICAgICAgaWYgKGRvYy5oaXN0b3J5LmRvbmUubGVu
Z3RoIHx8IGRvYy5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpCi0gICAgICAgIGRvYy5jbGVhckhpc3Rv
cnkoKTsKLSAgICB9Ci0gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsKLSAgICAgIG1hcmtlci5p
ZCA9ICsrbmV4dE1hcmtlcklkOwotICAgICAgbWFya2VyLmF0b21pYyA9IHRydWU7Ci0gICAgfQot
ICAgIGlmIChjbSkgewotICAgICAgLy8gU3luYyBlZGl0b3Igc3RhdGUKLSAgICAgIGlmICh1cGRh
dGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKLSAgICAgIGlmIChtYXJr
ZXIuY29sbGFwc2VkKQotICAgICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSAr
IDEpOwotICAgICAgZWxzZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwg
bWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jc3MpCi0gICAg
ICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSByZWdMaW5lQ2hh
bmdlKGNtLCBpLCAidGV4dCIpOwotICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxl
Y3Rpb24oY20uZG9jKTsKLSAgICAgIHNpZ25hbExhdGVyKGNtLCAibWFya2VyQWRkZWQiLCBjbSwg
bWFya2VyKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlcjsKLSAgfQotCi0gIC8vIFNIQVJFRCBU
RVhUTUFSS0VSUwotCi0gIC8vIEEgc2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQg
ZG9jdW1lbnRzLiBJdCBpcwotICAvLyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVj
dCBjb250cm9sbGluZyBtdWx0aXBsZSBub3JtYWwKLSAgLy8gbWFya2Vycy4KLSAgdmFyIFNoYXJl
ZFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJr
ZXJzLCBwcmltYXJ5KSB7Ci0gICAgdGhpcy5tYXJrZXJzID0gbWFya2VyczsKLSAgICB0aGlzLnBy
aW1hcnkgPSBwcmltYXJ5OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7
ICsraSkKLSAgICAgIG1hcmtlcnNbaV0ucGFyZW50ID0gdGhpczsKLSAgfTsKLSAgZXZlbnRNaXhp
bihTaGFyZWRUZXh0TWFya2VyKTsKLQotICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVh
ciA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47
Ci0gICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK2kpCi0gICAgICB0aGlzLm1hcmtlcnNbaV0uY2xl
YXIoKTsKLSAgICBzaWduYWxMYXRlcih0aGlzLCAiY2xlYXIiKTsKLSAgfTsKLSAgU2hhcmVkVGV4
dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKLSAgICBy
ZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoc2lkZSwgbGluZU9iaik7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgewotICAgIG9w
dGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpOwotICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7Ci0g
ICAgdmFyIG1hcmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSld
LCBwcmltYXJ5ID0gbWFya2Vyc1swXTsKLSAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXRO
b2RlOwotICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHsKLSAgICAgIGlmICh3aWRn
ZXQpIG9wdGlvbnMud2lkZ2V0Tm9kZSA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICBt
YXJrZXJzLnB1c2gobWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9j
LCB0byksIG9wdGlvbnMsIHR5cGUpKTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxp
bmtlZC5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJl
dHVybjsKLSAgICAgIHByaW1hcnkgPSBsc3QobWFya2Vycyk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IG5ldyBTaGFyZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpOwotICB9Ci0KLSAgZnVuY3Rp
b24gZmluZFNoYXJlZE1hcmtlcnMoZG9jKSB7Ci0gICAgcmV0dXJuIGRvYy5maW5kTWFya3MoUG9z
KGRvYy5maXJzdCwgMCksIGRvYy5jbGlwUG9zKFBvcyhkb2MubGFzdExpbmUoKSkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKG0pIHsgcmV0dXJuIG0ucGFyZW50OyB9KTsKLSAg
fQotCi0gIGZ1bmN0aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2VycykgewotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIG1hcmtl
ciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1hcmtlci5maW5kKCk7Ci0gICAgICB2YXIgbUZyb20gPSBk
b2MuY2xpcFBvcyhwb3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7Ci0gICAgICBp
ZiAoY21wKG1Gcm9tLCBtVG8pKSB7Ci0gICAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9j
LCBtRnJvbSwgbVRvLCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7Ci0gICAg
ICAgIG1hcmtlci5tYXJrZXJzLnB1c2goc3ViTWFyayk7Ci0gICAgICAgIHN1Yk1hcmsucGFyZW50
ID0gbWFya2VyOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGRldGFjaFNoYXJl
ZE1hcmtlcnMobWFya2VycykgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5n
dGg7IGkrKykgewotICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIGxpbmtlZCA9IFttYXJr
ZXIucHJpbWFyeS5kb2NdOzsKLSAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBm
dW5jdGlvbihkKSB7IGxpbmtlZC5wdXNoKGQpOyB9KTsKLSAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgbWFya2VyLm1hcmtlcnMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgdmFyIHN1Yk1hcmtlciA9
IG1hcmtlci5tYXJrZXJzW2pdOwotICAgICAgICBpZiAoaW5kZXhPZihsaW5rZWQsIHN1Yk1hcmtl
ci5kb2MpID09IC0xKSB7Ci0gICAgICAgICAgc3ViTWFya2VyLnBhcmVudCA9IG51bGw7Ci0gICAg
ICAgICAgbWFya2VyLm1hcmtlcnMuc3BsaWNlKGotLSwgMSk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICAvLyBURVhUTUFSS0VSIFNQQU5TCi0KLSAgZnVuY3Rpb24gTWFya2Vk
U3BhbihtYXJrZXIsIGZyb20sIHRvKSB7Ci0gICAgdGhpcy5tYXJrZXIgPSBtYXJrZXI7Ci0gICAg
dGhpcy5mcm9tID0gZnJvbTsgdGhpcy50byA9IHRvOwotICB9Ci0KLSAgLy8gU2VhcmNoIGFuIGFy
cmF5IG9mIHNwYW5zIGZvciBhIHNwYW4gbWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci4KLSAgZnVu
Y3Rpb24gZ2V0TWFya2VkU3BhbkZvcihzcGFucywgbWFya2VyKSB7Ci0gICAgaWYgKHNwYW5zKSBm
b3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9
IHNwYW5zW2ldOwotICAgICAgaWYgKHNwYW4ubWFya2VyID09IG1hcmtlcikgcmV0dXJuIHNwYW47
Ci0gICAgfQotICB9Ci0gIC8vIFJlbW92ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5n
IHVuZGVmaW5lZCBpZiBubyBzcGFucyBhcmUKLSAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJy
YXlzIGZvciBsaW5lcyB3aXRob3V0IHNwYW5zKS4KLSAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3Bh
bihzcGFucywgc3BhbikgewotICAgIGZvciAodmFyIHIsIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3Ro
OyArK2kpCi0gICAgICBpZiAoc3BhbnNbaV0gIT0gc3BhbikgKHIgfHwgKHIgPSBbXSkpLnB1c2go
c3BhbnNbaV0pOwotICAgIHJldHVybiByOwotICB9Ci0gIC8vIEFkZCBhIHNwYW4gdG8gYSBsaW5l
LgotICBmdW5jdGlvbiBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHsKLSAgICBsaW5lLm1hcmtl
ZFNwYW5zID0gbGluZS5tYXJrZWRTcGFucyA/IGxpbmUubWFya2VkU3BhbnMuY29uY2F0KFtzcGFu
XSkgOiBbc3Bhbl07Ci0gICAgc3Bhbi5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgfQotCi0g
IC8vIFVzZWQgZm9yIHRoZSBhbGdvcml0aG0gdGhhdCBhZGp1c3RzIG1hcmtlcnMgZm9yIGEgY2hh
bmdlIGluIHRoZQotICAvLyBkb2N1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBv
ZiBzcGFucyBhdCBhIGdpdmVuCi0gIC8vIGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJuaW5nIGFu
IGFycmF5IG9mIHJlbWFpbmluZyBjaHVua3MgKG9yCi0gIC8vIHVuZGVmaW5lZCBpZiBub3RoaW5n
IHJlbWFpbnMpLgotICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlz
SW5zZXJ0KSB7Ci0gICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0
aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7
Ci0gICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5p
bmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENo
KTsKLSAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFy
a2VyLnR5cGUgPT0gImJvb2ttYXJrIiAmJiAoIWlzSW5zZXJ0IHx8ICFzcGFuLm1hcmtlci5pbnNl
cnRMZWZ0KSkgewotICAgICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8ICht
YXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IHN0YXJ0Q2ggOiBzcGFuLnRvID4gc3Rh
cnRDaCk7Ci0gICAgICAgIChudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4obWFy
a2VyLCBzcGFuLmZyb20sIGVuZHNBZnRlciA/IG51bGwgOiBzcGFuLnRvKSk7Ci0gICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudzsKLSAgfQotICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9s
ZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7Ci0gICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBp
IDwgb2xkLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0g
c3Bhbi5tYXJrZXI7Ci0gICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8ICht
YXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IGVuZENoIDogc3Bhbi50byA+IGVuZENo
KTsKLSAgICAgIGlmIChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50
eXBlID09ICJib29rbWFyayIgJiYgKCFpc0luc2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0
KSkgewotICAgICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1h
cmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5k
Q2gpOwotICAgICAgICAobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtl
ciwgc3RhcnRzQmVmb3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwg
OiBzcGFuLnRvIC0gZW5kQ2gpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG53OwotICB9
Ci0KLSAgLy8gR2l2ZW4gYSBjaGFuZ2Ugb2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1h
cmtlciBzcGFucyB0aGF0Ci0gIC8vIGNvdmVyIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBjaGFuZ2Ug
dG9vayBwbGFjZS4gUmVtb3ZlcyBzcGFucwotICAvLyBlbnRpcmVseSB3aXRoaW4gdGhlIGNoYW5n
ZSwgcmVjb25uZWN0cyBzcGFucyBiZWxvbmdpbmcgdG8gdGhlCi0gIC8vIHNhbWUgbWFya2VyIHRo
YXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmCi0gIC8v
IHNwYW5zIHBhcnRpYWxseSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBz
cGFuCi0gIC8vIGFycmF5cyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFmdGVy
KSB0aGUgY2hhbmdlLgotICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hh
bmdlKSB7Ci0gICAgaWYgKGNoYW5nZS5mdWxsKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgb2xkRmly
c3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdl
LmZyb20ubGluZSkubWFya2VkU3BhbnM7Ci0gICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBj
aGFuZ2UudG8ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFu
czsKLSAgICBpZiAoIW9sZEZpcnN0ICYmICFvbGRMYXN0KSByZXR1cm4gbnVsbDsKLQotICAgIHZh
ciBzdGFydENoID0gY2hhbmdlLmZyb20uY2gsIGVuZENoID0gY2hhbmdlLnRvLmNoLCBpc0luc2Vy
dCA9IGNtcChjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAwOwotICAgIC8vIEdldCB0aGUgc3Bh
bnMgdGhhdCAnc3RpY2sgb3V0JyBvbiBib3RoIHNpZGVzCi0gICAgdmFyIGZpcnN0ID0gbWFya2Vk
U3BhbnNCZWZvcmUob2xkRmlyc3QsIHN0YXJ0Q2gsIGlzSW5zZXJ0KTsKLSAgICB2YXIgbGFzdCA9
IG1hcmtlZFNwYW5zQWZ0ZXIob2xkTGFzdCwgZW5kQ2gsIGlzSW5zZXJ0KTsKLQotICAgIC8vIE5l
eHQsIG1lcmdlIHRob3NlIHR3byBlbmRzCi0gICAgdmFyIHNhbWVMaW5lID0gY2hhbmdlLnRleHQu
bGVuZ3RoID09IDEsIG9mZnNldCA9IGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKHNhbWVMaW5l
ID8gc3RhcnRDaCA6IDApOwotICAgIGlmIChmaXJzdCkgewotICAgICAgLy8gRml4IHVwIC50byBw
cm9wZXJ0aWVzIG9mIGZpcnN0Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIHZhciBzcGFuID0gZmlyc3RbaV07Ci0gICAgICAgIGlmIChzcGFu
LnRvID09IG51bGwpIHsKLSAgICAgICAgICB2YXIgZm91bmQgPSBnZXRNYXJrZWRTcGFuRm9yKGxh
c3QsIHNwYW4ubWFya2VyKTsKLSAgICAgICAgICBpZiAoIWZvdW5kKSBzcGFuLnRvID0gc3RhcnRD
aDsKLSAgICAgICAgICBlbHNlIGlmIChzYW1lTGluZSkgc3Bhbi50byA9IGZvdW5kLnRvID09IG51
bGwgPyBudWxsIDogZm91bmQudG8gKyBvZmZzZXQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKGxhc3QpIHsKLSAgICAgIC8vIEZpeCB1cCAuZnJvbSBpbiBsYXN0IChvciBtb3Zl
IHRoZW0gaW50byBmaXJzdCBpbiBjYXNlIG9mIHNhbWVMaW5lKQotICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsYXN0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBzcGFuID0gbGFzdFtpXTsK
LSAgICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgc3Bhbi50byArPSBvZmZzZXQ7Ci0gICAgICAg
IGlmIChzcGFuLmZyb20gPT0gbnVsbCkgewotICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtl
ZFNwYW5Gb3IoZmlyc3QsIHNwYW4ubWFya2VyKTsKLSAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0g
ICAgICAgICAgICBzcGFuLmZyb20gPSBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoc2FtZUxpbmUp
IChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3Bhbik7Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHNwYW4uZnJvbSArPSBvZmZzZXQ7Ci0gICAgICAgICAgaWYg
KHNhbWVMaW5lKSAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4pOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY3JlYXRlIGFueSB6
ZXJvLWxlbmd0aCBzcGFucwotICAgIGlmIChmaXJzdCkgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMo
Zmlyc3QpOwotICAgIGlmIChsYXN0ICYmIGxhc3QgIT0gZmlyc3QpIGxhc3QgPSBjbGVhckVtcHR5
U3BhbnMobGFzdCk7Ci0KLSAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07Ci0gICAgaWYgKCFz
YW1lTGluZSkgewotICAgICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zCi0gICAg
ICB2YXIgZ2FwID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMiwgZ2FwTWFya2VyczsKLSAgICAgIGlm
IChnYXAgPiAwICYmIGZpcnN0KQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxl
bmd0aDsgKytpKQotICAgICAgICAgIGlmIChmaXJzdFtpXS50byA9PSBudWxsKQotICAgICAgICAg
ICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4o
Zmlyc3RbaV0ubWFya2VyLCBudWxsLCBudWxsKSk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGdhcDsgKytpKQotICAgICAgICBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7Ci0gICAgICBu
ZXdNYXJrZXJzLnB1c2gobGFzdCk7Ci0gICAgfQotICAgIHJldHVybiBuZXdNYXJrZXJzOwotICB9
Ci0KLSAgLy8gUmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xl
YXJXaGVuRW1wdHkKLSAgLy8gb3B0aW9uIG9mIGZhbHNlLgotICBmdW5jdGlvbiBjbGVhckVtcHR5
U3BhbnMoc3BhbnMpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwotICAgICAgaWYgKHNwYW4uZnJvbSAhPSBu
dWxsICYmIHNwYW4uZnJvbSA9PSBzcGFuLnRvICYmIHNwYW4ubWFya2VyLmNsZWFyV2hlbkVtcHR5
ICE9PSBmYWxzZSkKLSAgICAgICAgc3BhbnMuc3BsaWNlKGktLSwgMSk7Ci0gICAgfQotICAgIGlm
ICghc3BhbnMubGVuZ3RoKSByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gc3BhbnM7Ci0gIH0KLQot
ICAvLyBVc2VkIGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJp
bmVzIHRoZQotICAvLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRo
IHRoZSBzZXQgb2Ygc3BhbnMgdGhhdAotICAvLyBleGlzdGVkIGluIHRoZSBoaXN0b3J5IChzbyB0
aGF0IGRlbGV0aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW4KLSAgLy8gdW5kb2luZyBicmluZ3Mg
YmFjayB0aGUgc3BhbikuCi0gIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsK
LSAgICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpOwotICAgIHZhciBzdHJldGNo
ZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKLSAgICBpZiAoIW9sZCkg
cmV0dXJuIHN0cmV0Y2hlZDsKLSAgICBpZiAoIXN0cmV0Y2hlZCkgcmV0dXJuIG9sZDsKLQotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgb2xkQ3Vy
ID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldOwotICAgICAgaWYgKG9sZEN1ciAm
JiBzdHJldGNoQ3VyKSB7Ci0gICAgICAgIHNwYW5zOiBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmV0
Y2hDdXIubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICB2YXIgc3BhbiA9IHN0cmV0Y2hDdXJbal07
Ci0gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDdXIubGVuZ3RoOyArK2spCi0gICAg
ICAgICAgICBpZiAob2xkQ3VyW2tdLm1hcmtlciA9PSBzcGFuLm1hcmtlcikgY29udGludWUgc3Bh
bnM7Ci0gICAgICAgICAgb2xkQ3VyLnB1c2goc3Bhbik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxz
ZSBpZiAoc3RyZXRjaEN1cikgewotICAgICAgICBvbGRbaV0gPSBzdHJldGNoQ3VyOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gb2xkOwotICB9Ci0KLSAgLy8gVXNlZCB0byAnY2xpcCcgb3V0
IHJlYWRPbmx5IHJhbmdlcyB3aGVuIG1ha2luZyBhIGNoYW5nZS4KLSAgZnVuY3Rpb24gcmVtb3Zl
UmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykgewotICAgIHZhciBtYXJrZXJzID0gbnVsbDsK
LSAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtl
ZFNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBtYXJrID0gbGluZS5tYXJrZWRTcGFu
c1tpXS5tYXJrZXI7Ci0gICAgICAgIGlmIChtYXJrLnJlYWRPbmx5ICYmICghbWFya2VycyB8fCBp
bmRleE9mKG1hcmtlcnMsIG1hcmspID09IC0xKSkKLSAgICAgICAgICAobWFya2VycyB8fCAobWFy
a2VycyA9IFtdKSkucHVzaChtYXJrKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIW1hcmtl
cnMpIHJldHVybiBudWxsOwotICAgIHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2
YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTsKLSAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgcGFydHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgdmFyIHAgPSBwYXJ0c1tqXTsKLSAg
ICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDAp
IGNvbnRpbnVlOwotICAgICAgICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAu
ZnJvbSwgbS5mcm9tKSwgZHRvID0gY21wKHAudG8sIG0udG8pOwotICAgICAgICBpZiAoZGZyb20g
PCAwIHx8ICFtay5pbmNsdXNpdmVMZWZ0ICYmICFkZnJvbSkKLSAgICAgICAgICBuZXdQYXJ0cy5w
dXNoKHtmcm9tOiBwLmZyb20sIHRvOiBtLmZyb219KTsKLSAgICAgICAgaWYgKGR0byA+IDAgfHwg
IW1rLmluY2x1c2l2ZVJpZ2h0ICYmICFkdG8pCi0gICAgICAgICAgbmV3UGFydHMucHVzaCh7ZnJv
bTogbS50bywgdG86IHAudG99KTsKLSAgICAgICAgcGFydHMuc3BsaWNlLmFwcGx5KHBhcnRzLCBu
ZXdQYXJ0cyk7Ci0gICAgICAgIGogKz0gbmV3UGFydHMubGVuZ3RoIC0gMTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHBhcnRzOwotICB9Ci0KLSAgLy8gQ29ubmVjdCBvciBkaXNjb25uZWN0
IHNwYW5zIGZyb20gYSBsaW5lLgotICBmdW5jdGlvbiBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKSB7
Ci0gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsKLSAgICBpZiAoIXNwYW5zKSByZXR1
cm47Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKLSAgICAgIHNw
YW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOwotICAgIGxpbmUubWFya2VkU3BhbnMgPSBu
dWxsOwotICB9Ci0gIGZ1bmN0aW9uIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIHNwYW5zKSB7Ci0g
ICAgaWYgKCFzcGFucykgcmV0dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVu
Z3RoOyArK2kpCi0gICAgICBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgICBs
aW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7Ci0gIH0KLQotICAvLyBIZWxwZXJzIHVzZWQgd2hlbiBj
b21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2VkIHNwYW4KLSAgLy8gY291bnRzIGFz
IHRoZSBsYXJnZXIgb25lLgotICBmdW5jdGlvbiBleHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBt
YXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMDsgfQotICBmdW5jdGlvbiBleHRyYVJpZ2h0KG1h
cmtlcikgeyByZXR1cm4gbWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gMSA6IDA7IH0KLQotICAvLyBS
ZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgd2hpY2ggb2YgdHdvIG92ZXJsYXBwaW5nIGNvbGxh
cHNlZAotICAvLyBzcGFucyBpcyBsYXJnZXIgKGFuZCB0aHVzIGluY2x1ZGVzIHRoZSBvdGhlciku
IEZhbGxzIGJhY2sgdG8KLSAgLy8gY29tcGFyaW5nIGlkcyB3aGVuIHRoZSBzcGFucyBjb3ZlciBl
eGFjdGx5IHRoZSBzYW1lIHJhbmdlLgotICBmdW5jdGlvbiBjb21wYXJlQ29sbGFwc2VkTWFya2Vy
cyhhLCBiKSB7Ci0gICAgdmFyIGxlbkRpZmYgPSBhLmxpbmVzLmxlbmd0aCAtIGIubGluZXMubGVu
Z3RoOwotICAgIGlmIChsZW5EaWZmICE9IDApIHJldHVybiBsZW5EaWZmOwotICAgIHZhciBhUG9z
ID0gYS5maW5kKCksIGJQb3MgPSBiLmZpbmQoKTsKLSAgICB2YXIgZnJvbUNtcCA9IGNtcChhUG9z
LmZyb20sIGJQb3MuZnJvbSkgfHwgZXh0cmFMZWZ0KGEpIC0gZXh0cmFMZWZ0KGIpOwotICAgIGlm
IChmcm9tQ21wKSByZXR1cm4gLWZyb21DbXA7Ci0gICAgdmFyIHRvQ21wID0gY21wKGFQb3MudG8s
IGJQb3MudG8pIHx8IGV4dHJhUmlnaHQoYSkgLSBleHRyYVJpZ2h0KGIpOwotICAgIGlmICh0b0Nt
cCkgcmV0dXJuIHRvQ21wOwotICAgIHJldHVybiBiLmlkIC0gYS5pZDsKLSAgfQotCi0gIC8vIEZp
bmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Igc3RhcnRzIGluIGEgY29sbGFwc2VkIHNwYW4u
IElmCi0gIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3IgdGhhdCBzcGFuLgotICBmdW5jdGlv
biBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7Ci0gICAgdmFyIHNwcyA9IHNhd0Nv
bGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZvdW5kOwotICAgIGlmIChzcHMpIGZv
ciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewotICAgICAgc3AgPSBzcHNb
aV07Ci0gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3RhcnQgPyBzcC5mcm9tIDog
c3AudG8pID09IG51bGwgJiYKLSAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRN
YXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpCi0gICAgICAgIGZvdW5kID0gc3AubWFya2Vy
OwotICAgIH0KLSAgICByZXR1cm4gZm91bmQ7Ci0gIH0KLSAgZnVuY3Rpb24gY29sbGFwc2VkU3Bh
bkF0U3RhcnQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCB0cnVlKTsg
fQotICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2Vk
U3BhbkF0U2lkZShsaW5lLCBmYWxzZSk7IH0KLQotICAvLyBUZXN0IHdoZXRoZXIgdGhlcmUgZXhp
c3RzIGEgY29sbGFwc2VkIHNwYW4gdGhhdCBwYXJ0aWFsbHkKLSAgLy8gb3ZlcmxhcHMgKGNvdmVy
cyB0aGUgc3RhcnQgb3IgZW5kLCBidXQgbm90IGJvdGgpIG9mIGEgbmV3IHNwYW4uCi0gIC8vIFN1
Y2ggb3ZlcmxhcCBpcyBub3QgYWxsb3dlZC4KLSAgZnVuY3Rpb24gY29uZmxpY3RpbmdDb2xsYXBz
ZWRSYW5nZShkb2MsIGxpbmVObywgZnJvbSwgdG8sIG1hcmtlcikgewotICAgIHZhciBsaW5lID0g
Z2V0TGluZShkb2MsIGxpbmVObyk7Ci0gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYm
IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgaWYgKHNwcykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBzcCA9IHNwc1tpXTsKLSAgICAgIGlmICghc3AubWFy
a2VyLmNvbGxhcHNlZCkgY29udGludWU7Ci0gICAgICB2YXIgZm91bmQgPSBzcC5tYXJrZXIuZmlu
ZCgwKTsKLSAgICAgIHZhciBmcm9tQ21wID0gY21wKGZvdW5kLmZyb20sIGZyb20pIHx8IGV4dHJh
TGVmdChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcik7Ci0gICAgICB2YXIgdG9DbXAgPSBj
bXAoZm91bmQudG8sIHRvKSB8fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1h
cmtlcik7Ci0gICAgICBpZiAoZnJvbUNtcCA+PSAwICYmIHRvQ21wIDw9IDAgfHwgZnJvbUNtcCA8
PSAwICYmIHRvQ21wID49IDApIGNvbnRpbnVlOwotICAgICAgaWYgKGZyb21DbXAgPD0gMCAmJiAo
Y21wKGZvdW5kLnRvLCBmcm9tKSA+IDAgfHwgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBt
YXJrZXIuaW5jbHVzaXZlTGVmdCkpIHx8Ci0gICAgICAgICAgZnJvbUNtcCA+PSAwICYmIChjbXAo
Zm91bmQuZnJvbSwgdG8pIDwgMCB8fCAoc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbWFya2Vy
LmluY2x1c2l2ZVJpZ2h0KSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0g
IC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRp
bmcsIGZvcgotICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBsaW5lcyB0
byBhcHBlYXIgb24gdGhlIHNhbWUKLSAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMgdGhlIHN0
YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZQotICAvLyBnaXZlbiBsaW5lIGlzIHBhcnQg
b2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLgotICBmdW5jdGlvbiB2aXN1YWxM
aW5lKGxpbmUpIHsKLSAgICB2YXIgbWVyZ2VkOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBz
ZWRTcGFuQXRTdGFydChsaW5lKSkKLSAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgtMSwgdHJ1ZSku
bGluZTsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIC8vIFJldHVybnMgYW4gYXJyYXkgb2Yg
bG9naWNhbCBsaW5lcyB0aGF0IGNvbnRpbnVlIHRoZSB2aXN1YWwgbGluZQotICAvLyBzdGFydGVk
IGJ5IHRoZSBhcmd1bWVudCwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBzdWNoIGxpbmVz
LgotICBmdW5jdGlvbiB2aXN1YWxMaW5lQ29udGludWVkKGxpbmUpIHsKLSAgICB2YXIgbWVyZ2Vk
LCBsaW5lczsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKSB7
Ci0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsKLSAgICAgIChsaW5lcyB8
fCAobGluZXMgPSBbXSkpLnB1c2gobGluZSk7Ci0gICAgfQotICAgIHJldHVybiBsaW5lczsKLSAg
fQotCi0gIC8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwg
bGluZSB0aGF0IHRoZQotICAvLyBnaXZlbiBsaW5lIG51bWJlciBpcyBwYXJ0IG9mLgotICBmdW5j
dGlvbiB2aXN1YWxMaW5lTm8oZG9jLCBsaW5lTikgewotICAgIHZhciBsaW5lID0gZ2V0TGluZShk
b2MsIGxpbmVOKSwgdmlzID0gdmlzdWFsTGluZShsaW5lKTsKLSAgICBpZiAobGluZSA9PSB2aXMp
IHJldHVybiBsaW5lTjsKLSAgICByZXR1cm4gbGluZU5vKHZpcyk7Ci0gIH0KLSAgLy8gR2V0IHRo
ZSBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgdmlzdWFsIGxpbmUgYWZ0ZXIK
LSAgLy8gdGhlIGdpdmVuIGxpbmUuCi0gIGZ1bmN0aW9uIHZpc3VhbExpbmVFbmRObyhkb2MsIGxp
bmVOKSB7Ci0gICAgaWYgKGxpbmVOID4gZG9jLmxhc3RMaW5lKCkpIHJldHVybiBsaW5lTjsKLSAg
ICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIG1lcmdlZDsKLSAgICBpZiAoIWxpbmVJ
c0hpZGRlbihkb2MsIGxpbmUpKSByZXR1cm4gbGluZU47Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNv
bGxhcHNlZFNwYW5BdEVuZChsaW5lKSkKLSAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVl
KS5saW5lOwotICAgIHJldHVybiBsaW5lTm8obGluZSkgKyAxOwotICB9Ci0KLSAgLy8gQ29tcHV0
ZSB3aGV0aGVyIGEgbGluZSBpcyBoaWRkZW4uIExpbmVzIGNvdW50IGFzIGhpZGRlbiB3aGVuIHRo
ZXkKLSAgLy8gYXJlIHBhcnQgb2YgYSB2aXN1YWwgbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGFub3Ro
ZXIgbGluZSwgb3Igd2hlbgotICAvLyB0aGV5IGFyZSBlbnRpcmVseSBjb3ZlcmVkIGJ5IGNvbGxh
cHNlZCwgbm9uLXdpZGdldCBzcGFuLgotICBmdW5jdGlvbiBsaW5lSXNIaWRkZW4oZG9jLCBsaW5l
KSB7Ci0gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnM7
Ci0gICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICBzcCA9IHNwc1tpXTsKLSAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgY29u
dGludWU7Ci0gICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlm
IChzcC5tYXJrZXIud2lkZ2V0Tm9kZSkgY29udGludWU7Ci0gICAgICBpZiAoc3AuZnJvbSA9PSAw
ICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGlu
ZSwgc3ApKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gbGlu
ZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcGFuKSB7Ci0gICAgaWYgKHNwYW4udG8gPT0gbnVs
bCkgewotICAgICAgdmFyIGVuZCA9IHNwYW4ubWFya2VyLmZpbmQoMSwgdHJ1ZSk7Ci0gICAgICBy
ZXR1cm4gbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBlbmQubGluZSwgZ2V0TWFya2VkU3BhbkZvcihl
bmQubGluZS5tYXJrZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKLSAgICB9Ci0gICAgaWYgKHNwYW4u
bWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2Vk
U3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAg
ICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBz
cC5mcm9tID09IHNwYW4udG8gJiYKLSAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCBzcC50byAh
PSBzcGFuLmZyb20pICYmCi0gICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNw
YW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgotICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVy
KGRvYywgbGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBMSU5FIFdJ
REdFVFMKLQotICAvLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBh
Ym92ZSBvciBiZWxvdyBhIGxpbmUuCi0KLSAgdmFyIExpbmVXaWRnZXQgPSBDb2RlTWlycm9yLkxp
bmVXaWRnZXQgPSBmdW5jdGlvbihkb2MsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICBpZiAob3B0aW9u
cykgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9w
dCkpCi0gICAgICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07Ci0gICAgdGhpcy5kb2MgPSBkb2M7
Ci0gICAgdGhpcy5ub2RlID0gbm9kZTsKLSAgfTsKLSAgZXZlbnRNaXhpbihMaW5lV2lkZ2V0KTsK
LQotICBmdW5jdGlvbiBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBkaWZm
KSB7Ci0gICAgaWYgKGhlaWdodEF0TGluZShsaW5lKSA8ICgoY20uY3VyT3AgJiYgY20uY3VyT3Au
c2Nyb2xsVG9wKSB8fCBjbS5kb2Muc2Nyb2xsVG9wKSkKLSAgICAgIGFkZFRvU2Nyb2xsUG9zKGNt
LCBudWxsLCBkaWZmKTsKLSAgfQotCi0gIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIGNtID0gdGhpcy5kb2MuY20sIHdzID0gdGhpcy5saW5lLndpZGdl
dHMsIGxpbmUgPSB0aGlzLmxpbmUsIG5vID0gbGluZU5vKGxpbmUpOwotICAgIGlmIChubyA9PSBu
dWxsIHx8ICF3cykgcmV0dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyAr
K2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKLSAgICBpZiAoIXdzLmxl
bmd0aCkgbGluZS53aWRnZXRzID0gbnVsbDsKLSAgICB2YXIgaGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0
KHRoaXMpOwotICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgTWF0aC5tYXgoMCwgbGluZS5oZWln
aHQgLSBoZWlnaHQpKTsKLSAgICBpZiAoY20pIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAg
ICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgLWhlaWdodCk7Ci0gICAg
ICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpOwotICAgIH0pOwotICB9OwotICBMaW5l
V2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9sZEggPSB0
aGlzLmhlaWdodCwgY20gPSB0aGlzLmRvYy5jbSwgbGluZSA9IHRoaXMubGluZTsKLSAgICB0aGlz
LmhlaWdodCA9IG51bGw7Ci0gICAgdmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRI
OwotICAgIGlmICghZGlmZikgcmV0dXJuOwotICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGlu
ZS5oZWlnaHQgKyBkaWZmKTsKLSAgICBpZiAoY20pIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewot
ICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwotICAgICAgYWRqdXN0U2Nyb2xsV2hl
bkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7Ci0gICAgfSk7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewotICAgIGlmICh3aWRnZXQuaGVpZ2h0ICE9IG51bGwp
IHJldHVybiB3aWRnZXQuaGVpZ2h0OwotICAgIHZhciBjbSA9IHdpZGdldC5kb2MuY207Ci0gICAg
aWYgKCFjbSkgcmV0dXJuIDA7Ci0gICAgaWYgKCFjb250YWlucyhkb2N1bWVudC5ib2R5LCB3aWRn
ZXQubm9kZSkpIHsKLSAgICAgIHZhciBwYXJlbnRTdHlsZSA9ICJwb3NpdGlvbjogcmVsYXRpdmU7
IjsKLSAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpCi0gICAgICAgIHBhcmVudFN0eWxlICs9
ICJtYXJnaW4tbGVmdDogLSIgKyBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHg7
IjsKLSAgICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKQotICAgICAgICBwYXJlbnRTdHlsZSArPSAi
d2lkdGg6ICIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyAicHg7IjsKLSAgICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubWVhc3VyZSwgZWx0KCJkaXYiLCBbd2lk
Z2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpOwotICAgIH0KLSAgICByZXR1cm4gd2lkZ2V0
LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFk
ZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICB2YXIgd2lkZ2V0
ID0gbmV3IExpbmVXaWRnZXQoZG9jLCBub2RlLCBvcHRpb25zKTsKLSAgICB2YXIgY20gPSBkb2Mu
Y207Ci0gICAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRn
ZXRzID0gdHJ1ZTsKLSAgICBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCAid2lkZ2V0IiwgZnVuY3Rp
b24obGluZSkgewotICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lk
Z2V0cyA9IFtdKTsKLSAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0cy5w
dXNoKHdpZGdldCk7Ci0gICAgICBlbHNlIHdpZGdldHMuc3BsaWNlKE1hdGgubWluKHdpZGdldHMu
bGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdpZGdldCk7Ci0g
ICAgICB3aWRnZXQubGluZSA9IGxpbmU7Ci0gICAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihk
b2MsIGxpbmUpKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGlu
ZSkgPCBkb2Muc2Nyb2xsVG9wOwotICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUu
aGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpOwotICAgICAgICBpZiAoYWJvdmVWaXNpYmxl
KSBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgd2lkZ2V0LmhlaWdodCk7Ci0gICAgICAgIGNtLmN1
ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0pOwotICAgIHJldHVybiB3aWRnZXQ7Ci0gIH0KLQotICAvLyBMSU5FIERBVEEgU1RSVUNUVVJF
Ci0KLSAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5l
LCBpbmNsdWRpbmcKLSAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLgot
ICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5z
LCBlc3RpbWF0ZUhlaWdodCkgewotICAgIHRoaXMudGV4dCA9IHRleHQ7Ci0gICAgYXR0YWNoTWFy
a2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpOwotICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVI
ZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7Ci0gIH07Ci0gIGV2ZW50TWl4aW4oTGlu
ZSk7Ci0gIExpbmUucHJvdG90eXBlLmxpbmVObyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZU5v
KHRoaXMpOyB9OwotCi0gIC8vIENoYW5nZSB0aGUgY29udGVudCAodGV4dCwgbWFya2Vycykgb2Yg
YSBsaW5lLiBBdXRvbWF0aWNhbGx5Ci0gIC8vIGludmFsaWRhdGVzIGNhY2hlZCBpbmZvcm1hdGlv
biBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhlCi0gIC8vIGxpbmUncyBoZWlnaHQuCi0gIGZ1
bmN0aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0
KSB7Ci0gICAgbGluZS50ZXh0ID0gdGV4dDsKLSAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5l
LnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgIGlmIChsaW5lLnN0eWxlcykgbGluZS5zdHlsZXMgPSBu
dWxsOwotICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIGxpbmUub3JkZXIgPSBudWxsOwotICAg
IGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpOwotICAgIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1h
cmtlZFNwYW5zKTsKLSAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0
ZUhlaWdodChsaW5lKSA6IDE7Ci0gICAgaWYgKGVzdEhlaWdodCAhPSBsaW5lLmhlaWdodCkgdXBk
YXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwotICB9Ci0KLSAgLy8gRGV0YWNoIGEgbGlu
ZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy4KLSAgZnVuY3Rpb24gY2xl
YW5VcExpbmUobGluZSkgewotICAgIGxpbmUucGFyZW50ID0gbnVsbDsKLSAgICBkZXRhY2hNYXJr
ZWRTcGFucyhsaW5lKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBl
LCBvdXRwdXQpIHsKLSAgICBpZiAodHlwZSkgZm9yICg7OykgewotICAgICAgdmFyIGxpbmVDbGFz
cyA9IHR5cGUubWF0Y2goLyg/Ol58XHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8pOwotICAg
ICAgaWYgKCFsaW5lQ2xhc3MpIGJyZWFrOwotICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGlu
ZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBd
Lmxlbmd0aCk7Ci0gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJiZ0NsYXNzIiA6ICJ0
ZXh0Q2xhc3MiOwotICAgICAgaWYgKG91dHB1dFtwcm9wXSA9PSBudWxsKQotICAgICAgICBvdXRw
dXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07Ci0gICAgICBlbHNlIGlmICghKG5ldyBSZWdFeHAoIig/
Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KG91dHB1dFtwcm9wXSkp
Ci0gICAgICAgIG91dHB1dFtwcm9wXSArPSAiICIgKyBsaW5lQ2xhc3NbMl07Ci0gICAgfQotICAg
IHJldHVybiB0eXBlOwotICB9Ci0KLSAgZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0
ZSkgewotICAgIGlmIChtb2RlLmJsYW5rTGluZSkgcmV0dXJuIG1vZGUuYmxhbmtMaW5lKHN0YXRl
KTsKLSAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSByZXR1cm47Ci0gICAgdmFyIGlubmVyID0gQ29k
ZU1pcnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpOwotICAgIGlmIChpbm5lci5tb2RlLmJsYW5r
TGluZSkgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikgewotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgaWYgKGlubmVyKSBpbm5lclswXSA9
IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOwotICAgICAgdmFyIHN0eWxl
ID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKLSAgICAgIGlmIChzdHJlYW0ucG9zID4gc3Ry
ZWFtLnN0YXJ0KSByZXR1cm4gc3R5bGU7Ci0gICAgfQotICAgIHRocm93IG5ldyBFcnJvcigiTW9k
ZSAiICsgbW9kZS5uYW1lICsgIiBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uIik7Ci0gIH0KLQot
ICAvLyBVdGlsaXR5IGZvciBnZXRUb2tlbkF0IGFuZCBnZXRMaW5lVG9rZW5zCi0gIGZ1bmN0aW9u
IHRha2VUb2tlbihjbSwgcG9zLCBwcmVjaXNlLCBhc0FycmF5KSB7Ci0gICAgZnVuY3Rpb24gZ2V0
T2JqKGNvcHkpIHsKLSAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwgZW5kOiBzdHJl
YW0ucG9zLAotICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCi0gICAgICAg
ICAgICAgIHR5cGU6IHN0eWxlIHx8IG51bGwsCi0gICAgICAgICAgICAgIHN0YXRlOiBjb3B5ID8g
Y29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBzdGF0ZX07Ci0gICAgfQotCi0gICAgdmFyIGRv
YyA9IGNtLmRvYywgbW9kZSA9IGRvYy5tb2RlLCBzdHlsZTsKLSAgICBwb3MgPSBjbGlwUG9zKGRv
YywgcG9zKTsKLSAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSksIHN0YXRlID0g
Z2V0U3RhdGVCZWZvcmUoY20sIHBvcy5saW5lLCBwcmVjaXNlKTsKLSAgICB2YXIgc3RyZWFtID0g
bmV3IFN0cmluZ1N0cmVhbShsaW5lLnRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSksIHRva2VuczsK
LSAgICBpZiAoYXNBcnJheSkgdG9rZW5zID0gW107Ci0gICAgd2hpbGUgKChhc0FycmF5IHx8IHN0
cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHsKLSAgICAgIHN0cmVhbS5zdGFy
dCA9IHN0cmVhbS5wb3M7Ci0gICAgICBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0
YXRlKTsKLSAgICAgIGlmIChhc0FycmF5KSB0b2tlbnMucHVzaChnZXRPYmoodHJ1ZSkpOwotICAg
IH0KLSAgICByZXR1cm4gYXNBcnJheSA/IHRva2VucyA6IGdldE9iaigpOwotICB9Ci0KLSAgLy8g
UnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVh
Y2ggdG9rZW4uCi0gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmLCBs
aW5lQ2xhc3NlcywgZm9yY2VUb0VuZCkgewotICAgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2RlLmZs
YXR0ZW5TcGFuczsKLSAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFucyA9
IGNtLm9wdGlvbnMuZmxhdHRlblNwYW5zOwotICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxl
ID0gbnVsbDsKLSAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRp
b25zLnRhYlNpemUpLCBzdHlsZTsKLSAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1vZGVD
bGFzcyAmJiBbbnVsbF07Ci0gICAgaWYgKHRleHQgPT0gIiIpIGV4dHJhY3RMaW5lQ2xhc3Nlcyhj
YWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSwgbGluZUNsYXNzZXMpOwotICAgIHdoaWxlICghc3Ry
ZWFtLmVvbCgpKSB7Ci0gICAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9wdGlvbnMubWF4SGlnaGxp
Z2h0TGVuZ3RoKSB7Ci0gICAgICAgIGZsYXR0ZW5TcGFucyA9IGZhbHNlOwotICAgICAgICBpZiAo
Zm9yY2VUb0VuZCkgcHJvY2Vzc0xpbmUoY20sIHRleHQsIHN0YXRlLCBzdHJlYW0ucG9zKTsKLSAg
ICAgICAgc3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwotICAgICAgICBzdHlsZSA9IG51bGw7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9r
ZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSwgaW5uZXIpLCBsaW5lQ2xhc3Nlcyk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoaW5uZXIpIHsKLSAgICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTsKLSAg
ICAgICAgaWYgKG1OYW1lKSBzdHlsZSA9ICJtLSIgKyAoc3R5bGUgPyBtTmFtZSArICIgIiArIHN0
eWxlIDogbU5hbWUpOwotICAgICAgfQotICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5
bGUgIT0gc3R5bGUpIHsKLSAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7
Ci0gICAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0ICsg
NTAwMDApOwotICAgICAgICAgIGYoY3VyU3RhcnQsIGN1clN0eWxlKTsKLSAgICAgICAgfQotICAg
ICAgICBjdXJTdHlsZSA9IHN0eWxlOwotICAgICAgfQotICAgICAgc3RyZWFtLnN0YXJ0ID0gc3Ry
ZWFtLnBvczsKLSAgICB9Ci0gICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnBvcykgewotICAg
ICAgLy8gV2Via2l0IHNlZW1zIHRvIHJlZnVzZSB0byByZW5kZXIgdGV4dCBub2RlcyBsb25nZXIg
dGhhbiA1NzQ0NCBjaGFyYWN0ZXJzCi0gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBv
cywgY3VyU3RhcnQgKyA1MDAwMCk7Ci0gICAgICBmKHBvcywgY3VyU3R5bGUpOwotICAgICAgY3Vy
U3RhcnQgPSBwb3M7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChh
biBhcnJheSBzdGFydGluZyB3aXRoIGEgbW9kZSBnZW5lcmF0aW9uCi0gIC8vIC0tIGZvciBpbnZh
bGlkYXRpb24gLS0gZm9sbG93ZWQgYnkgcGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKLSAgLy8g
c3R5bGUgc3RyaW5ncyksIHdoaWNoIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSB0b2tlbnMgb24g
dGhlCi0gIC8vIGxpbmUuCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRl
LCBmb3JjZVRvRW5kKSB7Ci0gICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRo
IGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZQotICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBp
cyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS4KLSAgICB2YXIgc3QgPSBbY20uc3Rh
dGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307Ci0gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBh
cnJheSBvZiBzdHlsZXMKLSAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBz
dGF0ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkgewotICAgICAgc3QucHVzaChlbmQsIHN0eWxlKTsK
LSAgICB9LCBsaW5lQ2xhc3NlcywgZm9yY2VUb0VuZCk7Ci0KLSAgICAvLyBSdW4gb3ZlcmxheXMs
IGFkanVzdCBzdHlsZSBhcnJheS4KLSAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92
ZXJsYXlzLmxlbmd0aDsgKytvKSB7Ci0gICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJs
YXlzW29dLCBpID0gMSwgYXQgPSAwOwotICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVy
bGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKLSAgICAgICAgdmFyIHN0YXJ0
ID0gaTsKLSAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1cnJl
bnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAgICAgIHdoaWxlIChhdCA8
IGVuZCkgewotICAgICAgICAgIHZhciBpX2VuZCA9IHN0W2ldOwotICAgICAgICAgIGlmIChpX2Vu
ZCA+IGVuZCkKLSAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0W2krMV0sIGlfZW5k
KTsKLSAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5k
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm47Ci0gICAgICAgIGlmIChv
dmVybGF5Lm9wYXF1ZSkgewotICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBl
bmQsICJjbS1vdmVybGF5ICIgKyBzdHlsZSk7Ci0gICAgICAgICAgaSA9IHN0YXJ0ICsgMjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7
Ci0gICAgICAgICAgICB2YXIgY3VyID0gc3Rbc3RhcnQrMV07Ci0gICAgICAgICAgICBzdFtzdGFy
dCsxXSA9IChjdXIgPyBjdXIgKyAiICIgOiAiIikgKyAiY20tb3ZlcmxheSAiICsgc3R5bGU7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LCBsaW5lQ2xhc3Nlcyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHtzdHlsZXM6IHN0LCBjbGFzc2VzOiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxp
bmVDbGFzc2VzLnRleHRDbGFzcyA/IGxpbmVDbGFzc2VzIDogbnVsbH07Ci0gIH0KLQotICBmdW5j
dGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCB1cGRhdGVGcm9udGllcikgewotICAgIGlmICgh
bGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikgewotICAg
ICAgdmFyIHJlc3VsdCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUuc3RhdGVBZnRlciA9
IGdldFN0YXRlQmVmb3JlKGNtLCBsaW5lTm8obGluZSkpKTsKLSAgICAgIGxpbmUuc3R5bGVzID0g
cmVzdWx0LnN0eWxlczsKLSAgICAgIGlmIChyZXN1bHQuY2xhc3NlcykgbGluZS5zdHlsZUNsYXNz
ZXMgPSByZXN1bHQuY2xhc3NlczsKLSAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBs
aW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7Ci0gICAgICBpZiAodXBkYXRlRnJvbnRpZXIgPT09IGNt
LmRvYy5mcm9udGllcikgY20uZG9jLmZyb250aWVyKys7Ci0gICAgfQotICAgIHJldHVybiBsaW5l
LnN0eWxlczsKLSAgfQotCi0gIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHBy
b2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kCi0gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNh
dmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMgdGhhdAotICAvLyBhcmVuJ3QgY3VycmVu
dGx5IHZpc2libGUuCi0gIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBzdGF0ZSwgc3Rh
cnRBdCkgewotICAgIHZhciBtb2RlID0gY20uZG9jLm1vZGU7Ci0gICAgdmFyIHN0cmVhbSA9IG5l
dyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKLSAgICBzdHJlYW0uc3Rh
cnQgPSBzdHJlYW0ucG9zID0gc3RhcnRBdCB8fCAwOwotICAgIGlmICh0ZXh0ID09ICIiKSBjYWxs
QmxhbmtMaW5lKG1vZGUsIHN0YXRlKTsKLSAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiBzdHJl
YW0ucG9zIDw9IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKSB7Ci0gICAgICByZWFkVG9r
ZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9z
OwotICAgIH0KLSAgfQotCi0gIC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1v
ZGUgKGVpdGhlciBudWxsLCBvciBhIHN0cmluZwotICAvLyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IHN0eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLAotICAvLyBhbmQgYWxzbyBs
b29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy4KLSAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30s
IHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTsKLSAgZnVuY3Rpb24gaW50ZXJwcmV0VG9r
ZW5TdHlsZShzdHlsZSwgb3B0aW9ucykgewotICAgIGlmICghc3R5bGUgfHwgL15ccyokLy50ZXN0
KHN0eWxlKSkgcmV0dXJuIG51bGw7Ci0gICAgdmFyIGNhY2hlID0gb3B0aW9ucy5hZGRNb2RlQ2xh
c3MgPyBzdHlsZVRvQ2xhc3NDYWNoZVdpdGhNb2RlIDogc3R5bGVUb0NsYXNzQ2FjaGU7Ci0gICAg
cmV0dXJuIGNhY2hlW3N0eWxlXSB8fAotICAgICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxh
Y2UoL1xTKy9nLCAiY20tJCYiKSk7Ci0gIH0KLQotICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNl
bnRhdGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzCi0gIC8vIHVwIGEgJ2xp
bmUgbWFwJywgd2hpY2ggcG9pbnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnQKLSAg
Ly8gc3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJp
bmcgY29kZS4KLSAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUs
IHRoaXMgbWFwLCBhbmQKLSAgLy8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0
aGF0IHdlcmUgc2V0IGJ5IHRoZSBtb2RlLgotICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNt
LCBsaW5lVmlldykgewotICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVu
dCB0byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoCi0gICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0
byBiZSBhYmxlIHRvIGdldCBsaW5lLWxldmVsIGJvdW5kaW5nCi0gICAgLy8gcmVjdGFuZ2xlcyBm
b3IgaXQgKGluIG1lYXN1cmVDaGFyKS4KLSAgICB2YXIgY29udGVudCA9IGVsdCgic3BhbiIsIG51
bGwsIG51bGwsIHdlYmtpdCA/ICJwYWRkaW5nLXJpZ2h0OiAuMXB4IiA6IG51bGwpOwotICAgIHZh
ciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiLCBbY29udGVudF0sICJDb2RlTWlycm9yLWxpbmUi
KSwgY29udGVudDogY29udGVudCwKLSAgICAgICAgICAgICAgICAgICBjb2w6IDAsIHBvczogMCwg
Y206IGNtLAotICAgICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiAoaWUgfHwgd2Via2l0KSAm
JiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpfTsKLSAgICBsaW5lVmlldy5tZWFzdXJlID0g
e307Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVw
IHRoaXMgdmlzdWFsIGxpbmUuCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJl
c3QgPyBsaW5lVmlldy5yZXN0Lmxlbmd0aCA6IDApOyBpKyspIHsKLSAgICAgIHZhciBsaW5lID0g
aSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXI7Ci0gICAgICBi
dWlsZGVyLnBvcyA9IDA7Ci0gICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbjsKLSAg
ICAgIC8vIE9wdGlvbmFsbHkgd2lyZSBpbiBzb21lIGhhY2tzIGludG8gdGhlIHRva2VuLXJlbmRl
cmluZwotICAgICAgLy8gYWxnb3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3MuCi0g
ICAgICBpZiAoaGFzQmFkQmlkaVJlY3RzKGNtLmRpc3BsYXkubWVhc3VyZSkgJiYgKG9yZGVyID0g
Z2V0T3JkZXIobGluZSkpKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbkJh
ZEJpZGkoYnVpbGRlci5hZGRUb2tlbiwgb3JkZXIpOwotICAgICAgYnVpbGRlci5tYXAgPSBbXTsK
LSAgICAgIHZhciBhbGxvd0Zyb250aWVyVXBkYXRlID0gbGluZVZpZXcgIT0gY20uZGlzcGxheS5l
eHRlcm5hbE1lYXN1cmVkICYmIGxpbmVObyhsaW5lKTsKLSAgICAgIGluc2VydExpbmVDb250ZW50
KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIGFsbG93RnJvbnRpZXJVcGRh
dGUpKTsKLSAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgewotICAgICAgICBpZiAobGluZS5z
dHlsZUNsYXNzZXMuYmdDbGFzcykKLSAgICAgICAgICBidWlsZGVyLmJnQ2xhc3MgPSBqb2luQ2xh
c3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLCBidWlsZGVyLmJnQ2xhc3MgfHwgIiIpOwot
ICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKQotICAgICAgICAgIGJ1aWxk
ZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzLCBi
dWlsZGVyLnRleHRDbGFzcyB8fCAiIik7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEVuc3VyZSBhdCBs
ZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQsIGZvciBtZWFzdXJpbmcuCi0gICAgICBpZiAo
YnVpbGRlci5tYXAubGVuZ3RoID09IDApCi0gICAgICAgIGJ1aWxkZXIubWFwLnB1c2goMCwgMCwg
YnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5t
ZWFzdXJlKSkpOwotCi0gICAgICAvLyBTdG9yZSB0aGUgbWFwIGFuZCBhIGNhY2hlIG9iamVjdCBm
b3IgdGhlIGN1cnJlbnQgbG9naWNhbCBsaW5lCi0gICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAg
IGxpbmVWaWV3Lm1lYXN1cmUubWFwID0gYnVpbGRlci5tYXA7Ci0gICAgICAgIGxpbmVWaWV3Lm1l
YXN1cmUuY2FjaGUgPSB7fTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIChsaW5lVmlldy5tZWFz
dXJlLm1hcHMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUubWFwcyA9IFtdKSkucHVzaChidWlsZGVyLm1h
cCk7Ci0gICAgICAgIChsaW5lVmlldy5tZWFzdXJlLmNhY2hlcyB8fCAobGluZVZpZXcubWVhc3Vy
ZS5jYWNoZXMgPSBbXSkpLnB1c2goe30pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFNlZSBp
c3N1ZSAjMjkwMQotICAgIGlmICh3ZWJraXQgJiYgL1xiY20tdGFiXGIvLnRlc3QoYnVpbGRlci5j
b250ZW50Lmxhc3RDaGlsZC5jbGFzc05hbWUpKQotICAgICAgYnVpbGRlci5jb250ZW50LmNsYXNz
TmFtZSA9ICJjbS10YWItd3JhcC1oYWNrIjsKLQotICAgIHNpZ25hbChjbSwgInJlbmRlckxpbmUi
LCBjbSwgbGluZVZpZXcubGluZSwgYnVpbGRlci5wcmUpOwotICAgIGlmIChidWlsZGVyLnByZS5j
bGFzc05hbWUpCi0gICAgICBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5DbGFzc2VzKGJ1aWxkZXIu
cHJlLmNsYXNzTmFtZSwgYnVpbGRlci50ZXh0Q2xhc3MgfHwgIiIpOwotCi0gICAgcmV0dXJuIGJ1
aWxkZXI7Ci0gIH0KLQotICBmdW5jdGlvbiBkZWZhdWx0U3BlY2lhbENoYXJQbGFjZWhvbGRlcihj
aCkgewotICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsICJcdTIwMjIiLCAiY20taW52YWxpZGNo
YXIiKTsKLSAgICB0b2tlbi50aXRsZSA9ICJcXHUiICsgY2guY2hhckNvZGVBdCgwKS50b1N0cmlu
ZygxNik7Ci0gICAgdG9rZW4uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdG9rZW4udGl0bGUp
OwotICAgIHJldHVybiB0b2tlbjsKLSAgfQotCi0gIC8vIEJ1aWxkIHVwIHRoZSBET00gcmVwcmVz
ZW50YXRpb24gZm9yIGEgc2luZ2xlIHRva2VuLCBhbmQgYWRkIGl0IHRvCi0gIC8vIHRoZSBsaW5l
IG1hcC4gVGFrZXMgY2FyZSB0byByZW5kZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIHNlcGFyYXRlbHku
Ci0gIGZ1bmN0aW9uIGJ1aWxkVG9rZW4oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUs
IGVuZFN0eWxlLCB0aXRsZSwgY3NzKSB7Ci0gICAgaWYgKCF0ZXh0KSByZXR1cm47Ci0gICAgdmFy
IGRpc3BsYXlUZXh0ID0gYnVpbGRlci5zcGxpdFNwYWNlcyA/IHRleHQucmVwbGFjZSgvIHszLH0v
Zywgc3BsaXRTcGFjZXMpIDogdGV4dDsKLSAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3Rh
dGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlOwotICAgIGlmICghc3BlY2lhbC50ZXN0
KHRleHQpKSB7Ci0gICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDsKLSAgICAgIHZhciBj
b250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQpOwotICAgICAgYnVp
bGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyB0ZXh0Lmxlbmd0aCwgY29u
dGVudCk7Ci0gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIG11c3RXcmFwID0gdHJ1ZTsK
LSAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVuZ3RoOworICAgIENvZGVNaXJyb3IucmVnaXN0
ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpCisgICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1
c2goe3ByZWQ6IHByZWRpY2F0ZSwgdmFsOiB2YWx1ZX0pCisgIH0KK30KKworLy8gVXNlZCBmb3Ig
aG9yaXpvbnRhbCByZWxhdGl2ZSBtb3Rpb24uIERpciBpcyAtMSBvciAxIChsZWZ0IG9yCisvLyBy
aWdodCksIHVuaXQgY2FuIGJlICJjaGFyIiwgImNvbHVtbiIgKGxpa2UgY2hhciwgYnV0IGRvZXNu
J3QKKy8vIGNyb3NzIGxpbmUgYm91bmRhcmllcyksICJ3b3JkIiAoYWNyb3NzIG5leHQgd29yZCks
IG9yICJncm91cCIgKHRvCisvLyB0aGUgc3RhcnQgb2YgbmV4dCBncm91cCBvZiB3b3JkIG9yIG5v
bi13b3JkLW5vbi13aGl0ZXNwYWNlCisvLyBjaGFycykuIFRoZSB2aXN1YWxseSBwYXJhbSBjb250
cm9scyB3aGV0aGVyLCBpbiByaWdodC10by1sZWZ0CisvLyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFu
cyB0byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlCisvLyBzdHJpbmcsIG9yIHRv
d2FyZHMgdGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnQKKy8vIHBvc2l0
aW9uLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZQorLy8g
cHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KK2Z1bmN0aW9u
IGZpbmRQb3NIKGRvYywgcG9zLCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7CisgIHZhciBsaW5lID0g
cG9zLmxpbmUsIGNoID0gcG9zLmNoLCBvcmlnRGlyID0gZGlyCisgIHZhciBsaW5lT2JqID0gZ2V0
TGluZShkb2MsIGxpbmUpCisgIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHsKKyAgICB2YXIgbCA9
IGxpbmUgKyBkaXIKKyAgICBpZiAobCA8IGRvYy5maXJzdCB8fCBsID49IGRvYy5maXJzdCArIGRv
Yy5zaXplKSB7IHJldHVybiBmYWxzZSB9CisgICAgbGluZSA9IGwKKyAgICByZXR1cm4gbGluZU9i
aiA9IGdldExpbmUoZG9jLCBsKQorICB9CisgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5l
KSB7CisgICAgdmFyIG5leHQgPSAodmlzdWFsbHkgPyBtb3ZlVmlzdWFsbHkgOiBtb3ZlTG9naWNh
bGx5KShsaW5lT2JqLCBjaCwgZGlyLCB0cnVlKQorICAgIGlmIChuZXh0ID09IG51bGwpIHsKKyAg
ICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpIHsKKyAgICAgICAgaWYgKHZp
c3VhbGx5KSB7IGNoID0gKGRpciA8IDAgPyBsaW5lUmlnaHQgOiBsaW5lTGVmdCkobGluZU9iaikg
fQorICAgICAgICBlbHNlIHsgY2ggPSBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDAg
fQorICAgICAgfSBlbHNlIHsgcmV0dXJuIGZhbHNlIH0KKyAgICB9IGVsc2UgeyBjaCA9IG5leHQg
fQorICAgIHJldHVybiB0cnVlCisgIH0KKworICBpZiAodW5pdCA9PSAiY2hhciIpIHsKKyAgICBt
b3ZlT25jZSgpCisgIH0gZWxzZSBpZiAodW5pdCA9PSAiY29sdW1uIikgeworICAgIG1vdmVPbmNl
KHRydWUpCisgIH0gZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwgdW5pdCA9PSAiZ3JvdXAiKSB7
CisgICAgdmFyIHNhd1R5cGUgPSBudWxsLCBncm91cCA9IHVuaXQgPT0gImdyb3VwIgorICAgIHZh
ciBoZWxwZXIgPSBkb2MuY20gJiYgZG9jLmNtLmdldEhlbHBlcihwb3MsICJ3b3JkQ2hhcnMiKQor
ICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKKyAgICAgIGlmIChk
aXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSB7IGJyZWFrIH0KKyAgICAgIHZhciBjdXIgPSBs
aW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4iCisgICAgICB2YXIgdHlwZSA9IGlzV29yZENo
YXIoY3VyLCBoZWxwZXIpID8gInciCisgICAgICAgIDogZ3JvdXAgJiYgY3VyID09ICJcbiIgPyAi
biIKKyAgICAgICAgOiAhZ3JvdXAgfHwgL1xzLy50ZXN0KGN1cikgPyBudWxsCisgICAgICAgIDog
InAiCisgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0ICYmICF0eXBlKSB7IHR5cGUgPSAicyIgfQor
ICAgICAgaWYgKHNhd1R5cGUgJiYgc2F3VHlwZSAhPSB0eXBlKSB7CisgICAgICAgIGlmIChkaXIg
PCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKX0KKyAgICAgICAgYnJlYWsKKyAgICAgIH0KKworICAg
ICAgaWYgKHR5cGUpIHsgc2F3VHlwZSA9IHR5cGUgfQorICAgICAgaWYgKGRpciA+IDAgJiYgIW1v
dmVPbmNlKCFmaXJzdCkpIHsgYnJlYWsgfQorICAgIH0KKyAgfQorICB2YXIgcmVzdWx0ID0gc2tp
cEF0b21pYyhkb2MsIFBvcyhsaW5lLCBjaCksIHBvcywgb3JpZ0RpciwgdHJ1ZSkKKyAgaWYgKCFj
bXAocG9zLCByZXN1bHQpKSB7IHJlc3VsdC5oaXRTaWRlID0gdHJ1ZSB9CisgIHJldHVybiByZXN1
bHQKK30KKworLy8gRm9yIHJlbGF0aXZlIHZlcnRpY2FsIG1vdmVtZW50LiBEaXIgbWF5IGJlIC0x
IG9yIDEuIFVuaXQgY2FuIGJlCisvLyAicGFnZSIgb3IgImxpbmUiLiBUaGUgcmVzdWx0aW5nIHBv
c2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZQorLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hl
ZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KK2Z1bmN0aW9uIGZpbmRQb3NWKGNtLCBwb3MsIGRp
ciwgdW5pdCkgeworICB2YXIgZG9jID0gY20uZG9jLCB4ID0gcG9zLmxlZnQsIHkKKyAgaWYgKHVu
aXQgPT0gInBhZ2UiKSB7CisgICAgdmFyIHBhZ2VTaXplID0gTWF0aC5taW4oY20uZGlzcGxheS53
cmFwcGVyLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCisgICAgdmFyIG1vdmVBbW91bnQgPSBNYXRoLm1heChw
YWdlU2l6ZSAtIC41ICogdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgMykKKyAgICB5ID0gKGRpciA+
IDAgPyBwb3MuYm90dG9tIDogcG9zLnRvcCkgKyBkaXIgKiBtb3ZlQW1vdW50CisKKyAgfSBlbHNl
IGlmICh1bml0ID09ICJsaW5lIikgeworICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMg
OiBwb3MudG9wIC0gMworICB9CisgIHZhciB0YXJnZXQKKyAgZm9yICg7OykgeworICAgIHRhcmdl
dCA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpCisgICAgaWYgKCF0YXJnZXQub3V0c2lkZSkgeyBicmVh
ayB9CisgICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0
LmhpdFNpZGUgPSB0cnVlOyBicmVhayB9CisgICAgeSArPSBkaXIgKiA1CisgIH0KKyAgcmV0dXJu
IHRhcmdldAorfQorCisvLyBDT05URU5URURJVEFCTEUgSU5QVVQgU1RZTEUKKwordmFyIENvbnRl
bnRFZGl0YWJsZUlucHV0ID0gZnVuY3Rpb24oY20pIHsKKyAgdGhpcy5jbSA9IGNtCisgIHRoaXMu
bGFzdEFuY2hvck5vZGUgPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSB0aGlzLmxhc3RGb2N1c05v
ZGUgPSB0aGlzLmxhc3RGb2N1c09mZnNldCA9IG51bGwKKyAgdGhpcy5wb2xsaW5nID0gbmV3IERl
bGF5ZWQoKQorICB0aGlzLmNvbXBvc2luZyA9IG51bGwKKyAgdGhpcy5ncmFjZVBlcmlvZCA9IGZh
bHNlCisgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsCit9OworCitDb250ZW50RWRpdGFibGVJ
bnB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChkaXNwbGF5KSB7CisgICAgdmFyIHRoaXMk
MSA9IHRoaXM7CisKKyAgdmFyIGlucHV0ID0gdGhpcywgY20gPSBpbnB1dC5jbQorICB2YXIgZGl2
ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2CisgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2
LCBjbS5vcHRpb25zLnNwZWxsY2hlY2spCisKKyAgb24oZGl2LCAicGFzdGUiLCBmdW5jdGlvbiAo
ZSkgeworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20p
KSB7IHJldHVybiB9CisgICAgLy8gSUUgZG9lc24ndCBmaXJlIGlucHV0IGV2ZW50cywgc28gd2Ug
c2NoZWR1bGUgYSByZWFkIGZvciB0aGUgcGFzdGVkIGNvbnRlbnQgaW4gdGhpcyB3YXkKKyAgICBp
ZiAoaWVfdmVyc2lvbiA8PSAxMSkgeyBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24g
KCkgeworICAgICAgaWYgKCFpbnB1dC5wb2xsQ29udGVudCgpKSB7IHJlZ0NoYW5nZShjbSkgfQor
ICAgIH0pLCAyMCkgfQorICB9KQorCisgIG9uKGRpdiwgImNvbXBvc2l0aW9uc3RhcnQiLCBmdW5j
dGlvbiAoZSkgeworICAgIHRoaXMkMS5jb21wb3NpbmcgPSB7ZGF0YTogZS5kYXRhLCBkb25lOiBm
YWxzZX0KKyAgfSkKKyAgb24oZGl2LCAiY29tcG9zaXRpb251cGRhdGUiLCBmdW5jdGlvbiAoZSkg
eworICAgIGlmICghdGhpcyQxLmNvbXBvc2luZykgeyB0aGlzJDEuY29tcG9zaW5nID0ge2RhdGE6
IGUuZGF0YSwgZG9uZTogZmFsc2V9IH0KKyAgfSkKKyAgb24oZGl2LCAiY29tcG9zaXRpb25lbmQi
LCBmdW5jdGlvbiAoZSkgeworICAgIGlmICh0aGlzJDEuY29tcG9zaW5nKSB7CisgICAgICBpZiAo
ZS5kYXRhICE9IHRoaXMkMS5jb21wb3NpbmcuZGF0YSkgeyB0aGlzJDEucmVhZEZyb21ET01Tb29u
KCkgfQorICAgICAgdGhpcyQxLmNvbXBvc2luZy5kb25lID0gdHJ1ZQorICAgIH0KKyAgfSkKKwor
ICBvbihkaXYsICJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5wdXQuZm9yY2VD
b21wb3NpdGlvbkVuZCgpOyB9KQorCisgIG9uKGRpdiwgImlucHV0IiwgZnVuY3Rpb24gKCkgewor
ICAgIGlmICghdGhpcyQxLmNvbXBvc2luZykgeyB0aGlzJDEucmVhZEZyb21ET01Tb29uKCkgfQor
ICB9KQorCisgIGZ1bmN0aW9uIG9uQ29weUN1dChlKSB7CisgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSkgeyByZXR1cm4gfQorICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7Cisg
ICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogZmFsc2UsIHRleHQ6IGNtLmdldFNlbGVjdGlv
bnMoKX0pCisgICAgICBpZiAoZS50eXBlID09ICJjdXQiKSB7IGNtLnJlcGxhY2VTZWxlY3Rpb24o
IiIsIG51bGwsICJjdXQiKSB9CisgICAgfSBlbHNlIGlmICghY20ub3B0aW9ucy5saW5lV2lzZUNv
cHlDdXQpIHsKKyAgICAgIHJldHVybgogICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgY29udGVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKLSAgICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgIHNwZWNpYWwubGFzdEluZGV4ID0gcG9zOwotICAgICAgICB2YXIg
bSA9IHNwZWNpYWwuZXhlYyh0ZXh0KTsKLSAgICAgICAgdmFyIHNraXBwZWQgPSBtID8gbS5pbmRl
eCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zOwotICAgICAgICBpZiAoc2tpcHBlZCkgewotICAg
ICAgICAgIHZhciB0eHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5VGV4dC5zbGlj
ZShwb3MsIHBvcyArIHNraXBwZWQpKTsKLSAgICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8
IDkpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKLSAgICAgICAgICBl
bHNlIGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKLSAgICAgICAgICBidWlsZGVyLm1hcC5wdXNo
KGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNraXBwZWQsIHR4dCk7Ci0gICAgICAgICAgYnVp
bGRlci5jb2wgKz0gc2tpcHBlZDsKLSAgICAgICAgICBidWlsZGVyLnBvcyArPSBza2lwcGVkOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghbSkgYnJlYWs7Ci0gICAgICAgIHBvcyArPSBza2lwcGVk
ICsgMTsKLSAgICAgICAgaWYgKG1bMF0gPT0gIlx0IikgewotICAgICAgICAgIHZhciB0YWJTaXpl
ID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxk
ZXIuY29sICUgdGFiU2l6ZTsKLSAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGls
ZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7Ci0gICAgICAgICAg
dHh0LnNldEF0dHJpYnV0ZSgicm9sZSIsICJwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICB0eHQu
c2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgIlx0Iik7Ci0gICAgICAgICAgYnVpbGRlci5jb2wgKz0g
dGFiV2lkdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSAiXHIiIHx8IG1bMF0gPT0gIlxu
IikgewotICAgICAgICAgIHZhciB0eHQgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIs
IG1bMF0gPT0gIlxyIiA/ICLikI0iIDogIuKQpCIsICJjbS1pbnZhbGlkY2hhciIpKTsKLSAgICAg
ICAgICB0eHQuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgbVswXSk7Ci0gICAgICAgICAgYnVpbGRl
ci5jb2wgKz0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgdHh0ID0gYnVpbGRl
ci5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7Ci0gICAgICAgICAgdHh0
LnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsIG1bMF0pOwotICAgICAgICAgIGlmIChpZSAmJiBpZV92
ZXJzaW9uIDwgOSkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0XSkpOwotICAg
ICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwotICAgICAgICAgIGJ1aWxkZXIu
Y29sICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBv
cywgYnVpbGRlci5wb3MgKyAxLCB0eHQpOwotICAgICAgICBidWlsZGVyLnBvcysrOwotICAgICAg
fQotICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0
V3JhcCB8fCBjc3MpIHsKLSAgICAgIHZhciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsKLSAgICAg
IGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKLSAgICAgIGlmIChlbmRT
dHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0eWxlOwotICAgICAgdmFyIHRva2VuID0gZWx0KCJzcGFu
IiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUsIGNzcyk7Ci0gICAgICBpZiAodGl0bGUpIHRva2VuLnRp
dGxlID0gdGl0bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHRv
a2VuKTsKLSAgICB9Ci0gICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gc3BsaXRTcGFjZXMob2xkKSB7Ci0gICAgdmFyIG91dCA9ICIgIjsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kpIG91dCArPSBpICUg
MiA/ICIgIiA6ICJcdTAwYTAiOwotICAgIG91dCArPSAiICI7Ci0gICAgcmV0dXJuIG91dDsKLSAg
fQotCi0gIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNlIGRpbWVuc2lvbnMgYmVpbmcgcmVwb3J0ZWQg
Zm9yIHN0cmV0Y2hlcyBvZgotICAvLyByaWdodC10by1sZWZ0IHRleHQuCi0gIGZ1bmN0aW9uIGJ1
aWxkVG9rZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgewotICAgIHJldHVybiBmdW5jdGlvbihidWls
ZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHsKLSAg
ICAgIHN0eWxlID0gc3R5bGUgPyBzdHlsZSArICIgY20tZm9yY2UtYm9yZGVyIiA6ICJjbS1mb3Jj
ZS1ib3JkZXIiOwotICAgICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsg
dGV4dC5sZW5ndGg7Ci0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIHBhcnQg
dGhhdCBvdmVybGFwcyB3aXRoIHRoZSBzdGFydCBvZiB0aGlzIHRleHQKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7IGkrKykgewotICAgICAgICAgIHZhciBwYXJ0ID0g
b3JkZXJbaV07Ci0gICAgICAgICAgaWYgKHBhcnQudG8gPiBzdGFydCAmJiBwYXJ0LmZyb20gPD0g
c3RhcnQpIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXJ0LnRvID49IGVuZCkgcmV0
dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0
bGUsIGNzcyk7Ci0gICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAt
IHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIHRpdGxlLCBjc3MpOwotICAgICAgICBz
dGFydFN0eWxlID0gbnVsbDsKLSAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UocGFydC50byAtIHN0
YXJ0KTsKLSAgICAgICAgc3RhcnQgPSBwYXJ0LnRvOworICAgICAgdmFyIHJhbmdlcyA9IGNvcHlh
YmxlUmFuZ2VzKGNtKQorICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IHRydWUsIHRleHQ6
IHJhbmdlcy50ZXh0fSkKKyAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsKKyAgICAgICAgY20u
b3BlcmF0aW9uKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdl
cy5yYW5nZXMsIDAsIHNlbF9kb250U2Nyb2xsKQorICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rp
b24oIiIsIG51bGwsICJjdXQiKQorICAgICAgICB9KQorICAgICAgfQorICAgIH0KKyAgICBpZiAo
ZS5jbGlwYm9hcmREYXRhKSB7CisgICAgICBlLmNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCkKKyAg
ICAgIHZhciBjb250ZW50ID0gbGFzdENvcGllZC50ZXh0LmpvaW4oIlxuIikKKyAgICAgIC8vIGlP
UyBleHBvc2VzIHRoZSBjbGlwYm9hcmQgQVBJLCBidXQgc2VlbXMgdG8gZGlzY2FyZCBjb250ZW50
IGluc2VydGVkIGludG8gaXQKKyAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0Iiwg
Y29udGVudCkKKyAgICAgIGlmIChlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpID09IGNv
bnRlbnQpIHsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgICAgICAgIHJldHVybgorICAg
ICAgfQorICAgIH0KKyAgICAvLyBPbGQtZmFzaGlvbmVkIGJyaWVmbHktZm9jdXMtYS10ZXh0YXJl
YSBoYWNrCisgICAgdmFyIGtsdWRnZSA9IGhpZGRlblRleHRhcmVhKCksIHRlID0ga2x1ZGdlLmZp
cnN0Q2hpbGQKKyAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBj
bS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKQorICAgIHRlLnZhbHVlID0gbGFzdENvcGll
ZC50ZXh0LmpvaW4oIlxuIikKKyAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50CisgICAgc2VsZWN0SW5wdXQodGUpCisgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Cisg
ICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChrbHVkZ2UpCisgICAgICBoYWRG
b2N1cy5mb2N1cygpCisgICAgICBpZiAoaGFkRm9jdXMgPT0gZGl2KSB7IGlucHV0LnNob3dQcmlt
YXJ5U2VsZWN0aW9uKCkgfQorICAgIH0sIDUwKQorICB9CisgIG9uKGRpdiwgImNvcHkiLCBvbkNv
cHlDdXQpCisgIG9uKGRpdiwgImN1dCIsIG9uQ29weUN1dCkKK307CisKK0NvbnRlbnRFZGl0YWJs
ZUlucHV0LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkgeworICB2YXIg
cmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbih0aGlzLmNtLCBmYWxzZSkKKyAgcmVzdWx0LmZvY3Vz
ID0gdGhpcy5jbS5zdGF0ZS5mb2N1c2VkCisgIHJldHVybiByZXN1bHQKK307CisKK0NvbnRlbnRF
ZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24gKGluZm8sIHRh
a2VGb2N1cykgeworICBpZiAoIWluZm8gfHwgIXRoaXMuY20uZGlzcGxheS52aWV3Lmxlbmd0aCkg
eyByZXR1cm4gfQorICBpZiAoaW5mby5mb2N1cyB8fCB0YWtlRm9jdXMpIHsgdGhpcy5zaG93UHJp
bWFyeVNlbGVjdGlvbigpIH0KKyAgdGhpcy5zaG93TXVsdGlwbGVTZWxlY3Rpb25zKGluZm8pCit9
OworCitDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd1ByaW1hcnlTZWxlY3Rpb24g
PSBmdW5jdGlvbiAoKSB7CisgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIHByaW0g
PSB0aGlzLmNtLmRvYy5zZWwucHJpbWFyeSgpCisgIHZhciBjdXJBbmNob3IgPSBkb21Ub1Bvcyh0
aGlzLmNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCkKKyAgdmFyIGN1ckZvY3Vz
ID0gZG9tVG9Qb3ModGhpcy5jbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KQorICBp
ZiAoY3VyQW5jaG9yICYmICFjdXJBbmNob3IuYmFkICYmIGN1ckZvY3VzICYmICFjdXJGb2N1cy5i
YWQgJiYKKyAgICAgIGNtcChtaW5Qb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIHByaW0uZnJvbSgp
KSA9PSAwICYmCisgICAgICBjbXAobWF4UG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCBwcmltLnRv
KCkpID09IDApCisgICAgeyByZXR1cm4gfQorCisgIHZhciBzdGFydCA9IHBvc1RvRE9NKHRoaXMu
Y20sIHByaW0uZnJvbSgpKQorICB2YXIgZW5kID0gcG9zVG9ET00odGhpcy5jbSwgcHJpbS50bygp
KQorICBpZiAoIXN0YXJ0ICYmICFlbmQpIHsgcmV0dXJuIH0KKworICB2YXIgdmlldyA9IHRoaXMu
Y20uZGlzcGxheS52aWV3CisgIHZhciBvbGQgPSBzZWwucmFuZ2VDb3VudCAmJiBzZWwuZ2V0UmFu
Z2VBdCgwKQorICBpZiAoIXN0YXJ0KSB7CisgICAgc3RhcnQgPSB7bm9kZTogdmlld1swXS5tZWFz
dXJlLm1hcFsyXSwgb2Zmc2V0OiAwfQorICB9IGVsc2UgaWYgKCFlbmQpIHsgLy8gRklYTUUgZGFu
Z2Vyb3VzbHkgaGFja3kKKyAgICB2YXIgbWVhc3VyZSA9IHZpZXdbdmlldy5sZW5ndGggLSAxXS5t
ZWFzdXJlCisgICAgdmFyIG1hcCA9IG1lYXN1cmUubWFwcyA/IG1lYXN1cmUubWFwc1ttZWFzdXJl
Lm1hcHMubGVuZ3RoIC0gMV0gOiBtZWFzdXJlLm1hcAorICAgIGVuZCA9IHtub2RlOiBtYXBbbWFw
Lmxlbmd0aCAtIDFdLCBvZmZzZXQ6IG1hcFttYXAubGVuZ3RoIC0gMl0gLSBtYXBbbWFwLmxlbmd0
aCAtIDNdfQorICB9CisKKyAgdmFyIHJuZworICB0cnkgeyBybmcgPSByYW5nZShzdGFydC5ub2Rl
LCBzdGFydC5vZmZzZXQsIGVuZC5vZmZzZXQsIGVuZC5ub2RlKSB9CisgIGNhdGNoKGUpIHt9IC8v
IE91ciBtb2RlbCBvZiB0aGUgRE9NIG1pZ2h0IGJlIG91dGRhdGVkLCBpbiB3aGljaCBjYXNlIHRo
ZSByYW5nZSB3ZSB0cnkgdG8gc2V0IGNhbiBiZSBpbXBvc3NpYmxlCisgIGlmIChybmcpIHsKKyAg
ICBpZiAoIWdlY2tvICYmIHRoaXMuY20uc3RhdGUuZm9jdXNlZCkgeworICAgICAgc2VsLmNvbGxh
cHNlKHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCkKKyAgICAgIGlmICghcm5nLmNvbGxhcHNlZCkg
eworICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCkKKyAgICAgICAgc2VsLmFkZFJhbmdlKHJu
ZykKICAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFu
KGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7Ci0gICAgdmFyIHdpZGdldCA9
ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7Ci0gICAgaWYgKHdpZGdldCkgYnVp
bGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQpOwot
ICAgIGlmICghaWdub3JlV2lkZ2V0ICYmIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5uZWVkc0Nv
bnRlbnRBdHRyaWJ1dGUpIHsKLSAgICAgIGlmICghd2lkZ2V0KQotICAgICAgICB3aWRnZXQgPSBi
dWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
KTsKLSAgICAgIHdpZGdldC5zZXRBdHRyaWJ1dGUoImNtLW1hcmtlciIsIG1hcmtlci5pZCk7Ci0g
ICAgfQotICAgIGlmICh3aWRnZXQpIHsKLSAgICAgIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5z
ZXRVbmVkaXRhYmxlKHdpZGdldCk7Ci0gICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQo
d2lkZ2V0KTsKLSAgICB9Ci0gICAgYnVpbGRlci5wb3MgKz0gc2l6ZTsKLSAgfQotCi0gIC8vIE91
dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGln
aHRpbmcKLSAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC4KLSAgZnVuY3Rpb24gaW5z
ZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgc3R5bGVzKSB7Ci0gICAgdmFyIHNwYW5zID0g
bGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwOwotICAgIGlmICgh
c3BhbnMpIHsKLSAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9MikK
LSAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9
IHN0eWxlc1tpXSksIGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krMV0sIGJ1aWxkZXIuY20u
b3B0aW9ucykpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBsZW4gPSBhbGxUZXh0
Lmxlbmd0aCwgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwgc3R5bGUsIGNzczsKLSAgICB2YXIg
bmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwg
dGl0bGUsIGNvbGxhcHNlZDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICBpZiAobmV4dENoYW5nZSA9
PSBwb3MpIHsgLy8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldAotICAgICAgICBzcGFuU3R5bGUg
PSBzcGFuRW5kU3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9IHRpdGxlID0gY3NzID0gIiI7Ci0gICAg
ICAgIGNvbGxhcHNlZCA9IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eTsKLSAgICAgICAgdmFy
IGZvdW5kQm9va21hcmtzID0gW107Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMu
bGVuZ3RoOyArK2opIHsKLSAgICAgICAgICB2YXIgc3AgPSBzcGFuc1tqXSwgbSA9IHNwLm1hcmtl
cjsKLSAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3Mg
JiYgbS53aWRnZXROb2RlKSB7Ci0gICAgICAgICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOwot
ICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwg
c3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0g
cG9zKSkgewotICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYm
IG5leHRDaGFuZ2UgPiBzcC50bykgewotICAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87
Ci0gICAgICAgICAgICAgIHNwYW5FbmRTdHlsZSA9ICIiOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG0uY2xhc3NOYW1lKSBzcGFuU3R5bGUgKz0gIiAiICsgbS5jbGFzc05hbWU7Ci0g
ICAgICAgICAgICBpZiAobS5jc3MpIGNzcyA9IG0uY3NzOwotICAgICAgICAgICAgaWYgKG0uc3Rh
cnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFy
dFN0eWxlOwotICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5n
ZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7Ci0gICAgICAgICAgICBpZiAobS50
aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsKLSAgICAgICAgICAgIGlmIChtLmNvbGxh
cHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhjb2xsYXBzZWQu
bWFya2VyLCBtKSA8IDApKQotICAgICAgICAgICAgICBjb2xsYXBzZWQgPSBzcDsKLSAgICAgICAg
ICB9IGVsc2UgaWYgKHNwLmZyb20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHsKLSAg
ICAgICAgICAgIG5leHRDaGFuZ2UgPSBzcC5mcm9tOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHsK
LSAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBu
dWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpOwotICAg
ICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAgIGlmIChj
b2xsYXBzZWQudG8gPT0gcG9zKSBjb2xsYXBzZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvbGxhcHNlZCAmJiBmb3VuZEJvb2ttYXJrcy5sZW5ndGgpIGZvciAodmFyIGogPSAw
OyBqIDwgZm91bmRCb29rbWFya3MubGVuZ3RoOyArK2opCi0gICAgICAgICAgYnVpbGRDb2xsYXBz
ZWRTcGFuKGJ1aWxkZXIsIDAsIGZvdW5kQm9va21hcmtzW2pdKTsKLSAgICAgIH0KLSAgICAgIGlm
IChwb3MgPj0gbGVuKSBicmVhazsKLQotICAgICAgdmFyIHVwdG8gPSBNYXRoLm1pbihsZW4sIG5l
eHRDaGFuZ2UpOwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKHRleHQpIHsKLSAg
ICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7Ci0gICAgICAgICAgaWYgKCFjb2xs
YXBzZWQpIHsKLSAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4dC5z
bGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7Ci0gICAgICAgICAgICBidWlsZGVyLmFkZFRva2Vu
KGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNwYW5TdHls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRv
a2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0aXRsZSwg
Y3NzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRl
eHQuc2xpY2UodXB0byAtIHBvcyk7IHBvcyA9IHVwdG87IGJyZWFrO30KLSAgICAgICAgICBwb3Mg
PSBlbmQ7Ci0gICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSAiIjsKLSAgICAgICAgfQotICAgICAg
ICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaSsrXSk7Ci0gICAgICAgIHN0
eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25z
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRQot
Ci0gIC8vIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhhdCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdp
bm5pbmcgb2YgYSBsaW5lCi0gIC8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8g
bWFrZSB0aGUgYXNzb2NpYXRpb24gb2YgbGluZQotICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxl
bWVudHMgd2l0aCB0aGUgdGV4dCBiZWhhdmUgbW9yZSBpbnR1aXRpdmUuCi0gIGZ1bmN0aW9uIGlz
V2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSB7Ci0gICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNo
ID09IDAgJiYgY2hhbmdlLnRvLmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSAiIiAmJgot
ICAgICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTsK
LSAgfQotCi0gIC8vIFBlcmZvcm0gYSBjaGFuZ2Ugb24gdGhlIGRvY3VtZW50IGRhdGEgc3RydWN0
dXJlLgotICBmdW5jdGlvbiB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBlc3Rp
bWF0ZUhlaWdodCkgewotICAgIGZ1bmN0aW9uIHNwYW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3Bh
bnMgPyBtYXJrZWRTcGFuc1tuXSA6IG51bGw7fQotICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0
ZXh0LCBzcGFucykgewotICAgICAgdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1h
dGVIZWlnaHQpOwotICAgICAgc2lnbmFsTGF0ZXIobGluZSwgImNoYW5nZSIsIGxpbmUsIGNoYW5n
ZSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxpbmVzRm9yKHN0YXJ0LCBlbmQpIHsKLSAgICAgIGZv
ciAodmFyIGkgPSBzdGFydCwgcmVzdWx0ID0gW107IGkgPCBlbmQ7ICsraSkKLSAgICAgICAgcmVz
dWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZhciBmcm9tID0gY2hhbmdlLmZy
b20sIHRvID0gY2hhbmdlLnRvLCB0ZXh0ID0gY2hhbmdlLnRleHQ7Ci0gICAgdmFyIGZpcnN0TGlu
ZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUoZG9jLCB0by5s
aW5lKTsKLSAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCksIGxhc3RTcGFucyA9IHNwYW5zRm9y
KHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmU7Ci0KLSAgICAv
LyBBZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlCi0gICAgaWYgKGNoYW5nZS5mdWxsKSB7Ci0gICAg
ICBkb2MuaW5zZXJ0KDAsIGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoKSk7Ci0gICAgICBkb2MucmVt
b3ZlKHRleHQubGVuZ3RoLCBkb2Muc2l6ZSAtIHRleHQubGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYg
KGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSkgewotICAgICAgLy8gVGhpcyBpcyBhIHdo
b2xlLWxpbmUgcmVwbGFjZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQotICAgICAgLy8gc3Vy
ZSBsaW5lIG9iamVjdHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgotICAgICAg
dmFyIGFkZGVkID0gbGluZXNGb3IoMCwgdGV4dC5sZW5ndGggLSAxKTsKLSAgICAgIHVwZGF0ZShs
YXN0TGluZSwgbGFzdExpbmUudGV4dCwgbGFzdFNwYW5zKTsKLSAgICAgIGlmIChubGluZXMpIGRv
Yy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMpOwotICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9j
Lmluc2VydChmcm9tLmxpbmUsIGFkZGVkKTsKLSAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBs
YXN0TGluZSkgewotICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHsKLSAgICAgICAgdXBkYXRl
KGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCAr
IGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7Ci0gICAg
ICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0
by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsKLSAgICAgICAgdXBkYXRlKGZpcnN0
TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0Zv
cigwKSk7Ci0gICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwotICAgICAg
fQotICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkgewotICAgICAgdXBkYXRlKGZpcnN0
TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdICsgbGFzdExp
bmUudGV4dC5zbGljZSh0by5jaCksIHNwYW5zRm9yKDApKTsKLSAgICAgIGRvYy5yZW1vdmUoZnJv
bS5saW5lICsgMSwgbmxpbmVzKTsKICAgICB9IGVsc2UgewotICAgICAgdXBkYXRlKGZpcnN0TGlu
ZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0Zvcigw
KSk7Ci0gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUudGV4dC5zbGlj
ZSh0by5jaCksIGxhc3RTcGFucyk7Ci0gICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigxLCB0ZXh0
Lmxlbmd0aCAtIDEpOwotICAgICAgaWYgKG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5l
ICsgMSwgbmxpbmVzIC0gMSk7Ci0gICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVk
KTsKLSAgICB9Ci0KLSAgICBzaWduYWxMYXRlcihkb2MsICJjaGFuZ2UiLCBkb2MsIGNoYW5nZSk7
Ci0gIH0KLQotICAvLyBUaGUgZG9jdW1lbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBCVHJlZSBjb25z
aXN0aW5nIG9mIGxlYXZlcywgd2l0aAotICAvLyBjaHVuayBvZiBsaW5lcyBpbiB0aGVtLCBhbmQg
YnJhbmNoZXMsIHdpdGggdXAgdG8gdGVuIGxlYXZlcyBvcgotICAvLyBvdGhlciBicmFuY2ggbm9k
ZXMgYmVsb3cgdGhlbS4gVGhlIHRvcCBub2RlIGlzIGFsd2F5cyBhIGJyYW5jaAotICAvLyBub2Rl
LCBhbmQgaXMgdGhlIGRvY3VtZW50IG9iamVjdCBpdHNlbGYgKG1lYW5pbmcgaXQgaGFzCi0gIC8v
IGFkZGl0aW9uYWwgbWV0aG9kcyBhbmQgcHJvcGVydGllcykuCi0gIC8vCi0gIC8vIEFsbCBub2Rl
cyBoYXZlIHBhcmVudCBsaW5rcy4gVGhlIHRyZWUgaXMgdXNlZCBib3RoIHRvIGdvIGZyb20KLSAg
Ly8gbGluZSBudW1iZXJzIHRvIGxpbmUgb2JqZWN0cywgYW5kIHRvIGdvIGZyb20gb2JqZWN0cyB0
byBudW1iZXJzLgotICAvLyBJdCBhbHNvIGluZGV4ZXMgYnkgaGVpZ2h0LCBhbmQgaXMgdXNlZCB0
byBjb252ZXJ0IGJldHdlZW4gaGVpZ2h0Ci0gIC8vIGFuZCBsaW5lIG9iamVjdCwgYW5kIHRvIGZp
bmQgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQuCi0gIC8vCi0gIC8vIFNlZSBhbHNv
IGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvYmxvZy9jb2RlbWlycm9yLWxpbmUtdHJlZS5odG1s
Ci0KLSAgZnVuY3Rpb24gTGVhZkNodW5rKGxpbmVzKSB7Ci0gICAgdGhpcy5saW5lcyA9IGxpbmVz
OwotICAgIHRoaXMucGFyZW50ID0gbnVsbDsKLSAgICBmb3IgKHZhciBpID0gMCwgaGVpZ2h0ID0g
MDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBsaW5lc1tpXS5wYXJlbnQgPSB0aGlz
OwotICAgICAgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKLSAgICB9Ci0gICAgdGhpcy5oZWln
aHQgPSBoZWlnaHQ7Ci0gIH0KLQotICBMZWFmQ2h1bmsucHJvdG90eXBlID0gewotICAgIGNodW5r
U2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aDsgfSwKLSAgICAvLyBS
ZW1vdmUgdGhlIG4gbGluZXMgYXQgb2Zmc2V0ICdhdCcuCi0gICAgcmVtb3ZlSW5uZXI6IGZ1bmN0
aW9uKGF0LCBuKSB7Ci0gICAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyAr
K2kpIHsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwotICAgICAgICB0aGlzLmhl
aWdodCAtPSBsaW5lLmhlaWdodDsKLSAgICAgICAgY2xlYW5VcExpbmUobGluZSk7Ci0gICAgICAg
IHNpZ25hbExhdGVyKGxpbmUsICJkZWxldGUiKTsKLSAgICAgIH0KLSAgICAgIHRoaXMubGluZXMu
c3BsaWNlKGF0LCBuKTsKLSAgICB9LAotICAgIC8vIEhlbHBlciB1c2VkIHRvIGNvbGxhcHNlIGEg
c21hbGwgYnJhbmNoIGludG8gYSBzaW5nbGUgbGVhZi4KLSAgICBjb2xsYXBzZTogZnVuY3Rpb24o
bGluZXMpIHsKLSAgICAgIGxpbmVzLnB1c2guYXBwbHkobGluZXMsIHRoaXMubGluZXMpOwotICAg
IH0sCi0gICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBhcnJheSBvZiBsaW5lcyBhdCBvZmZzZXQgJ2F0
JywgY291bnQgdGhlbSBhcwotICAgIC8vIGhhdmluZyB0aGUgZ2l2ZW4gaGVpZ2h0LgotICAgIGlu
c2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewotICAgICAgdGhpcy5oZWln
aHQgKz0gaGVpZ2h0OwotICAgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQp
LmNvbmNhdChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKTsKLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7
Ci0gICAgfSwKLSAgICAvLyBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhIHBhcnQgb2YgdGhlIHRyZWUu
Ci0gICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewotICAgICAgZm9yICh2YXIgZSA9IGF0
ICsgbjsgYXQgPCBlOyArK2F0KQotICAgICAgICBpZiAob3AodGhpcy5saW5lc1thdF0pKSByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4p
IHsKLSAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47Ci0gICAgdmFyIHNpemUgPSAwLCBoZWln
aHQgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsK
LSAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldOwotICAgICAgc2l6ZSArPSBjaC5jaHVua1NpemUo
KTsgaGVpZ2h0ICs9IGNoLmhlaWdodDsKLSAgICAgIGNoLnBhcmVudCA9IHRoaXM7Ci0gICAgfQot
ICAgIHRoaXMuc2l6ZSA9IHNpemU7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhp
cy5wYXJlbnQgPSBudWxsOwotICB9Ci0KLSAgQnJhbmNoQ2h1bmsucHJvdG90eXBlID0gewotICAg
IGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemU7IH0sCi0gICAgcmVtb3Zl
SW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7Ci0gICAgICB0aGlzLnNpemUgLT0gbjsKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICB2
YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwotICAg
ICAgICBpZiAoYXQgPCBzeikgewotICAgICAgICAgIHZhciBybSA9IE1hdGgubWluKG4sIHN6IC0g
YXQpLCBvbGRIZWlnaHQgPSBjaGlsZC5oZWlnaHQ7Ci0gICAgICAgICAgY2hpbGQucmVtb3ZlSW5u
ZXIoYXQsIHJtKTsKLSAgICAgICAgICB0aGlzLmhlaWdodCAtPSBvbGRIZWlnaHQgLSBjaGlsZC5o
ZWlnaHQ7Ci0gICAgICAgICAgaWYgKHN6ID09IHJtKSB7IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGkt
LSwgMSk7IGNoaWxkLnBhcmVudCA9IG51bGw7IH0KLSAgICAgICAgICBpZiAoKG4gLT0gcm0pID09
IDApIGJyZWFrOwotICAgICAgICAgIGF0ID0gMDsKLSAgICAgICAgfSBlbHNlIGF0IC09IHN6Owot
ICAgICAgfQotICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMs
IGVuc3VyZSB0aGF0IGl0IGlzIGEKLSAgICAgIC8vIHNpbmdsZSBsZWFmIG5vZGUuCi0gICAgICBp
ZiAodGhpcy5zaXplIC0gbiA8IDI1ICYmCi0gICAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3Ro
ID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkgewotICAg
ICAgICB2YXIgbGluZXMgPSBbXTsKLSAgICAgICAgdGhpcy5jb2xsYXBzZShsaW5lcyk7Ci0gICAg
ICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldOwotICAgICAgICB0aGlz
LmNoaWxkcmVuWzBdLnBhcmVudCA9IHRoaXM7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBjb2xsYXBz
ZTogZnVuY3Rpb24obGluZXMpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGls
ZHJlbi5sZW5ndGg7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7Ci0gICAg
fSwKLSAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKLSAgICAg
IHRoaXMuc2l6ZSArPSBsaW5lcy5sZW5ndGg7Ci0gICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7
Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1Np
emUoKTsKLSAgICAgICAgaWYgKGF0IDw9IHN6KSB7Ci0gICAgICAgICAgY2hpbGQuaW5zZXJ0SW5u
ZXIoYXQsIGxpbmVzLCBoZWlnaHQpOwotICAgICAgICAgIGlmIChjaGlsZC5saW5lcyAmJiBjaGls
ZC5saW5lcy5sZW5ndGggPiA1MCkgewotICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmxpbmVzLmxl
bmd0aCA+IDUwKSB7Ci0gICAgICAgICAgICAgIHZhciBzcGlsbGVkID0gY2hpbGQubGluZXMuc3Bs
aWNlKGNoaWxkLmxpbmVzLmxlbmd0aCAtIDI1LCAyNSk7Ci0gICAgICAgICAgICAgIHZhciBuZXds
ZWFmID0gbmV3IExlYWZDaHVuayhzcGlsbGVkKTsKLSAgICAgICAgICAgICAgY2hpbGQuaGVpZ2h0
IC09IG5ld2xlYWYuaGVpZ2h0OwotICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShp
ICsgMSwgMCwgbmV3bGVhZik7Ci0gICAgICAgICAgICAgIG5ld2xlYWYucGFyZW50ID0gdGhpczsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubWF5YmVTcGlsbCgpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhdCAtPSBzejsKLSAgICAg
IH0KLSAgICB9LAotICAgIC8vIFdoZW4gYSBub2RlIGhhcyBncm93biwgY2hlY2sgd2hldGhlciBp
dCBzaG91bGQgYmUgc3BsaXQuCi0gICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7Ci0gICAgICBp
ZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsKLSAgICAgIHZhciBtZSA9IHRo
aXM7Ci0gICAgICBkbyB7Ci0gICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNl
KG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpOwotICAgICAgICB2YXIgc2libGluZyA9IG5ldyBC
cmFuY2hDaHVuayhzcGlsbGVkKTsKLSAgICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21l
IHRoZSBwYXJlbnQgbm9kZQotICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1l
LmNoaWxkcmVuKTsKLSAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lOwotICAgICAgICAgIG1lLmNo
aWxkcmVuID0gW2NvcHksIHNpYmxpbmddOwotICAgICAgICAgIG1lID0gY29weTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBtZS5zaXplIC09IHNpYmxpbmcuc2l6ZTsKLSAgICAgICAgICBt
ZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7Ci0gICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRl
eE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpOwotICAgICAgICAgIG1lLnBhcmVudC5jaGlsZHJl
bi5zcGxpY2UobXlJbmRleCArIDEsIDAsIHNpYmxpbmcpOworICAgICAgc2VsLnJlbW92ZUFsbFJh
bmdlcygpCisgICAgICBzZWwuYWRkUmFuZ2Uocm5nKQorICAgIH0KKyAgICBpZiAob2xkICYmIHNl
bC5hbmNob3JOb2RlID09IG51bGwpIHsgc2VsLmFkZFJhbmdlKG9sZCkgfQorICAgIGVsc2UgaWYg
KGdlY2tvKSB7IHRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpIH0KKyAgfQorICB0aGlzLnJlbWVtYmVy
U2VsZWN0aW9uKCkKK307CisKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zdGFydEdy
YWNlUGVyaW9kID0gZnVuY3Rpb24gKCkgeworICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgIGNs
ZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKQorICB0aGlzLmdyYWNlUGVyaW9kID0gc2V0VGlt
ZW91dChmdW5jdGlvbiAoKSB7CisgICAgdGhpcyQxLmdyYWNlUGVyaW9kID0gZmFsc2UKKyAgICBp
ZiAodGhpcyQxLnNlbGVjdGlvbkNoYW5nZWQoKSkKKyAgICAgIHsgdGhpcyQxLmNtLm9wZXJhdGlv
bihmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9
IHRydWU7IH0pIH0KKyAgfSwgMjApCit9OworCitDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5
cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uIChpbmZvKSB7CisgIHJlbW92ZUNo
aWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsIGluZm8uY3Vyc29ycykKKyAg
cmVtb3ZlQ2hpbGRyZW5BbmRBZGQodGhpcy5jbS5kaXNwbGF5LnNlbGVjdGlvbkRpdiwgaW5mby5z
ZWxlY3Rpb24pCit9OworCitDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVtZW1iZXJT
ZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7CisgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkKKyAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlOyB0aGlzLmxhc3RBbmNo
b3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0CisgIHRoaXMubGFzdEZvY3VzTm9kZSA9IHNlbC5m
b2N1c05vZGU7IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0Cit9OworCitD
b250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3IgPSBmdW5jdGlv
biAoKSB7CisgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkKKyAgaWYgKCFzZWwucmFu
Z2VDb3VudCkgeyByZXR1cm4gZmFsc2UgfQorICB2YXIgbm9kZSA9IHNlbC5nZXRSYW5nZUF0KDAp
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyCisgIHJldHVybiBjb250YWlucyh0aGlzLmRpdiwgbm9k
ZSkKK307CisKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9u
ICgpIHsKKyAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiKSB7Cisg
ICAgaWYgKCF0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpCisgICAgICB7IHRoaXMuc2hvd1NlbGVj
dGlvbih0aGlzLnByZXBhcmVTZWxlY3Rpb24oKSwgdHJ1ZSkgfQorICAgIHRoaXMuZGl2LmZvY3Vz
KCkKKyAgfQorfTsKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rp
b24gKCkgeyB0aGlzLmRpdi5ibHVyKCkgfTsKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlw
ZS5nZXRGaWVsZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZGl2IH07CisKK0NvbnRlbnRF
ZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gdHJ1ZSB9OworCitDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1
cyA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlucHV0ID0gdGhpcworICBpZiAodGhpcy5zZWxlY3Rp
b25JbkVkaXRvcigpKQorICAgIHsgdGhpcy5wb2xsU2VsZWN0aW9uKCkgfQorICBlbHNlCisgICAg
eyBydW5Jbk9wKHRoaXMuY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0LmNtLmN1ck9wLnNl
bGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KSB9CisKKyAgZnVuY3Rpb24gcG9sbCgpIHsKKyAgICBp
ZiAoaW5wdXQuY20uc3RhdGUuZm9jdXNlZCkgeworICAgICAgaW5wdXQucG9sbFNlbGVjdGlvbigp
CisgICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwg
cG9sbCkKKyAgICB9CisgIH0KKyAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9s
bEludGVydmFsLCBwb2xsKQorfTsKKworQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNl
bGVjdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7CisgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkKKyAgcmV0dXJuIHNlbC5hbmNob3JOb2RlICE9IHRoaXMubGFzdEFuY2hvck5vZGUg
fHwgc2VsLmFuY2hvck9mZnNldCAhPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgfHwKKyAgICBzZWwu
Zm9jdXNOb2RlICE9IHRoaXMubGFzdEZvY3VzTm9kZSB8fCBzZWwuZm9jdXNPZmZzZXQgIT0gdGhp
cy5sYXN0Rm9jdXNPZmZzZXQKK307CisKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5w
b2xsU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkgeworICBpZiAoIXRoaXMuY29tcG9zaW5nICYmIHRo
aXMucmVhZERPTVRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5ncmFjZVBlcmlvZCAmJiB0aGlzLnNl
bGVjdGlvbkNoYW5nZWQoKSkgeworICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCks
IGNtID0gdGhpcy5jbQorICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKQorICAgIHZhciBhbmNo
b3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpCisgICAg
dmFyIGhlYWQgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KQor
ICAgIGlmIChhbmNob3IgJiYgaGVhZCkgeyBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7CisgICAg
ICBzZXRTZWxlY3Rpb24oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgc2Vs
X2RvbnRTY3JvbGwpCisgICAgICBpZiAoYW5jaG9yLmJhZCB8fCBoZWFkLmJhZCkgeyBjbS5jdXJP
cC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZSB9CisgICAgfSkgfQorICB9Cit9OworCitDb250ZW50
RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CisgIGlm
ICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwpIHsKKyAgICBjbGVhclRpbWVvdXQodGhpcy5y
ZWFkRE9NVGltZW91dCkKKyAgICB0aGlzLnJlYWRET01UaW1lb3V0ID0gbnVsbAorICB9CisKKyAg
dmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNlbCA9IGNtLmRvYy5zZWwu
cHJpbWFyeSgpCisgIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKQorICBpZiAo
ZnJvbS5jaCA9PSAwICYmIGZyb20ubGluZSA+IGNtLmZpcnN0TGluZSgpKQorICAgIHsgZnJvbSA9
IFBvcyhmcm9tLmxpbmUgLSAxLCBnZXRMaW5lKGNtLmRvYywgZnJvbS5saW5lIC0gMSkubGVuZ3Ro
KSB9CisgIGlmICh0by5jaCA9PSBnZXRMaW5lKGNtLmRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgg
JiYgdG8ubGluZSA8IGNtLmxhc3RMaW5lKCkpCisgICAgeyB0byA9IFBvcyh0by5saW5lICsgMSwg
MCkgfQorICBpZiAoZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCB0by5saW5lID4gZGlz
cGxheS52aWV3VG8gLSAxKSB7IHJldHVybiBmYWxzZSB9CisKKyAgdmFyIGZyb21JbmRleCwgZnJv
bUxpbmUsIGZyb21Ob2RlCisgIGlmIChmcm9tLmxpbmUgPT0gZGlzcGxheS52aWV3RnJvbSB8fCAo
ZnJvbUluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgZnJvbS5saW5lKSkgPT0gMCkgeworICAgIGZy
b21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1swXS5saW5lKQorICAgIGZyb21Ob2RlID0gZGlz
cGxheS52aWV3WzBdLm5vZGUKKyAgfSBlbHNlIHsKKyAgICBmcm9tTGluZSA9IGxpbmVObyhkaXNw
bGF5LnZpZXdbZnJvbUluZGV4XS5saW5lKQorICAgIGZyb21Ob2RlID0gZGlzcGxheS52aWV3W2Zy
b21JbmRleCAtIDFdLm5vZGUubmV4dFNpYmxpbmcKKyAgfQorICB2YXIgdG9JbmRleCA9IGZpbmRW
aWV3SW5kZXgoY20sIHRvLmxpbmUpCisgIHZhciB0b0xpbmUsIHRvTm9kZQorICBpZiAodG9JbmRl
eCA9PSBkaXNwbGF5LnZpZXcubGVuZ3RoIC0gMSkgeworICAgIHRvTGluZSA9IGRpc3BsYXkudmll
d1RvIC0gMQorICAgIHRvTm9kZSA9IGRpc3BsYXkubGluZURpdi5sYXN0Q2hpbGQKKyAgfSBlbHNl
IHsKKyAgICB0b0xpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5lKSAt
IDEKKyAgICB0b05vZGUgPSBkaXNwbGF5LnZpZXdbdG9JbmRleCArIDFdLm5vZGUucHJldmlvdXNT
aWJsaW5nCisgIH0KKworICBpZiAoIWZyb21Ob2RlKSB7IHJldHVybiBmYWxzZSB9CisgIHZhciBu
ZXdUZXh0ID0gY20uZG9jLnNwbGl0TGluZXMoZG9tVGV4dEJldHdlZW4oY20sIGZyb21Ob2RlLCB0
b05vZGUsIGZyb21MaW5lLCB0b0xpbmUpKQorICB2YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20u
ZG9jLCBQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5l
KS50ZXh0Lmxlbmd0aCkpCisgIHdoaWxlIChuZXdUZXh0Lmxlbmd0aCA+IDEgJiYgb2xkVGV4dC5s
ZW5ndGggPiAxKSB7CisgICAgaWYgKGxzdChuZXdUZXh0KSA9PSBsc3Qob2xkVGV4dCkpIHsgbmV3
VGV4dC5wb3AoKTsgb2xkVGV4dC5wb3AoKTsgdG9MaW5lLS0gfQorICAgIGVsc2UgaWYgKG5ld1Rl
eHRbMF0gPT0gb2xkVGV4dFswXSkgeyBuZXdUZXh0LnNoaWZ0KCk7IG9sZFRleHQuc2hpZnQoKTsg
ZnJvbUxpbmUrKyB9CisgICAgZWxzZSB7IGJyZWFrIH0KKyAgfQorCisgIHZhciBjdXRGcm9udCA9
IDAsIGN1dEVuZCA9IDAKKyAgdmFyIG5ld1RvcCA9IG5ld1RleHRbMF0sIG9sZFRvcCA9IG9sZFRl
eHRbMF0sIG1heEN1dEZyb250ID0gTWF0aC5taW4obmV3VG9wLmxlbmd0aCwgb2xkVG9wLmxlbmd0
aCkKKyAgd2hpbGUgKGN1dEZyb250IDwgbWF4Q3V0RnJvbnQgJiYgbmV3VG9wLmNoYXJDb2RlQXQo
Y3V0RnJvbnQpID09IG9sZFRvcC5jaGFyQ29kZUF0KGN1dEZyb250KSkKKyAgICB7ICsrY3V0RnJv
bnQgfQorICB2YXIgbmV3Qm90ID0gbHN0KG5ld1RleHQpLCBvbGRCb3QgPSBsc3Qob2xkVGV4dCkK
KyAgdmFyIG1heEN1dEVuZCA9IE1hdGgubWluKG5ld0JvdC5sZW5ndGggLSAobmV3VGV4dC5sZW5n
dGggPT0gMSA/IGN1dEZyb250IDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRC
b3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApKQorICB3aGls
ZSAoY3V0RW5kIDwgbWF4Q3V0RW5kICYmCisgICAgICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdC
b3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkgPT0gb2xkQm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0
aCAtIGN1dEVuZCAtIDEpKQorICAgIHsgKytjdXRFbmQgfQorCisgIG5ld1RleHRbbmV3VGV4dC5s
ZW5ndGggLSAxXSA9IG5ld0JvdC5zbGljZSgwLCBuZXdCb3QubGVuZ3RoIC0gY3V0RW5kKS5yZXBs
YWNlKC9eXHUyMDBiKy8sICIiKQorICBuZXdUZXh0WzBdID0gbmV3VGV4dFswXS5zbGljZShjdXRG
cm9udCkucmVwbGFjZSgvXHUyMDBiKyQvLCAiIikKKworICB2YXIgY2hGcm9tID0gUG9zKGZyb21M
aW5lLCBjdXRGcm9udCkKKyAgdmFyIGNoVG8gPSBQb3ModG9MaW5lLCBvbGRUZXh0Lmxlbmd0aCA/
IGxzdChvbGRUZXh0KS5sZW5ndGggLSBjdXRFbmQgOiAwKQorICBpZiAobmV3VGV4dC5sZW5ndGgg
PiAxIHx8IG5ld1RleHRbMF0gfHwgY21wKGNoRnJvbSwgY2hUbykpIHsKKyAgICByZXBsYWNlUmFu
Z2UoY20uZG9jLCBuZXdUZXh0LCBjaEZyb20sIGNoVG8sICIraW5wdXQiKQorICAgIHJldHVybiB0
cnVlCisgIH0KK307CisKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5lbnN1cmVQb2xs
ZWQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpCit9OworQ29u
dGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICB0aGlz
LmZvcmNlQ29tcG9zaXRpb25FbmQoKQorfTsKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlw
ZS5mb3JjZUNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gKCkgeworICBpZiAoIXRoaXMuY29tcG9z
aW5nKSB7IHJldHVybiB9CisgIGNsZWFyVGltZW91dCh0aGlzLnJlYWRET01UaW1lb3V0KQorICB0
aGlzLmNvbXBvc2luZyA9IG51bGwKKyAgaWYgKCF0aGlzLnBvbGxDb250ZW50KCkpIHsgcmVnQ2hh
bmdlKHRoaXMuY20pIH0KKyAgdGhpcy5kaXYuYmx1cigpCisgIHRoaXMuZGl2LmZvY3VzKCkKK307
CitDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVhZEZyb21ET01Tb29uID0gZnVuY3Rp
b24gKCkgeworICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgIGlmICh0aGlzLnJlYWRET01UaW1l
b3V0ICE9IG51bGwpIHsgcmV0dXJuIH0KKyAgdGhpcy5yZWFkRE9NVGltZW91dCA9IHNldFRpbWVv
dXQoZnVuY3Rpb24gKCkgeworICAgIHRoaXMkMS5yZWFkRE9NVGltZW91dCA9IG51bGwKKyAgICBp
ZiAodGhpcyQxLmNvbXBvc2luZykgeworICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcuZG9uZSkg
eyB0aGlzJDEuY29tcG9zaW5nID0gbnVsbCB9CisgICAgICBlbHNlIHsgcmV0dXJuIH0KKyAgICB9
CisgICAgaWYgKHRoaXMkMS5jbS5pc1JlYWRPbmx5KCkgfHwgIXRoaXMkMS5wb2xsQ29udGVudCgp
KQorICAgICAgeyBydW5Jbk9wKHRoaXMkMS5jbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVnQ2hh
bmdlKHRoaXMkMS5jbSk7IH0pIH0KKyAgfSwgODApCit9OworCitDb250ZW50RWRpdGFibGVJbnB1
dC5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgIG5vZGUuY29u
dGVudEVkaXRhYmxlID0gImZhbHNlIgorfTsKKworQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90
eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoZSkgeworICBlLnByZXZlbnREZWZhdWx0KCkKKyAg
aWYgKCF0aGlzLmNtLmlzUmVhZE9ubHkoKSkKKyAgICB7IG9wZXJhdGlvbih0aGlzLmNtLCBhcHBs
eVRleHRJbnB1dCkodGhpcy5jbSwgU3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlID09IG51
bGwgPyBlLmtleUNvZGUgOiBlLmNoYXJDb2RlKSwgMCkgfQorfTsKKworQ29udGVudEVkaXRhYmxl
SW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHsKKyAgdGhp
cy5kaXYuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKHZhbCAhPSAibm9jdXJzb3IiKQorfTsKKwor
Q29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAo
KSB7fTsKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVu
Y3Rpb24gKCkge307CisKK0NvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5uZWVkc0NvbnRl
bnRBdHRyaWJ1dGUgPSB0cnVlCisKK2Z1bmN0aW9uIHBvc1RvRE9NKGNtLCBwb3MpIHsKKyAgdmFy
IHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIHBvcy5saW5lKQorICBpZiAoIXZpZXcgfHwgdmll
dy5oaWRkZW4pIHsgcmV0dXJuIG51bGwgfQorICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBw
b3MubGluZSkKKyAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9zLmxp
bmUpCisKKyAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSksIHNpZGUgPSAibGVmdCIKKyAgaWYg
KG9yZGVyKSB7CisgICAgdmFyIHBhcnRQb3MgPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBwb3MuY2gp
CisgICAgc2lkZSA9IHBhcnRQb3MgJSAyID8gInJpZ2h0IiA6ICJsZWZ0IgorICB9CisgIHZhciBy
ZXN1bHQgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKGluZm8ubWFwLCBwb3MuY2gsIHNpZGUpCisg
IHJlc3VsdC5vZmZzZXQgPSByZXN1bHQuY29sbGFwc2UgPT0gInJpZ2h0IiA/IHJlc3VsdC5lbmQg
OiByZXN1bHQuc3RhcnQKKyAgcmV0dXJuIHJlc3VsdAorfQorCitmdW5jdGlvbiBiYWRQb3MocG9z
LCBiYWQpIHsgaWYgKGJhZCkgeyBwb3MuYmFkID0gdHJ1ZTsgfSByZXR1cm4gcG9zIH0KKworZnVu
Y3Rpb24gZG9tVGV4dEJldHdlZW4oY20sIGZyb20sIHRvLCBmcm9tTGluZSwgdG9MaW5lKSB7Cisg
IHZhciB0ZXh0ID0gIiIsIGNsb3NpbmcgPSBmYWxzZSwgbGluZVNlcCA9IGNtLmRvYy5saW5lU2Vw
YXJhdG9yKCkKKyAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlv
biAobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaWQgPT0gaWQ7IH0gfQorICBmdW5jdGlvbiB3YWxr
KG5vZGUpIHsKKyAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB7CisgICAgICB2YXIgY21UZXh0
ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNtLXRleHQiKQorICAgICAgaWYgKGNtVGV4dCAhPSBudWxs
KSB7CisgICAgICAgIGlmIChjbVRleHQgPT0gIiIpIHsgdGV4dCArPSBub2RlLnRleHRDb250ZW50
LnJlcGxhY2UoL1x1MjAwYi9nLCAiIikgfQorICAgICAgICBlbHNlIHsgdGV4dCArPSBjbVRleHQg
fQorICAgICAgICByZXR1cm4KKyAgICAgIH0KKyAgICAgIHZhciBtYXJrZXJJRCA9IG5vZGUuZ2V0
QXR0cmlidXRlKCJjbS1tYXJrZXIiKSwgcmFuZ2UKKyAgICAgIGlmIChtYXJrZXJJRCkgeworICAg
ICAgICB2YXIgZm91bmQgPSBjbS5maW5kTWFya3MoUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGlu
ZSArIDEsIDApLCByZWNvZ25pemVNYXJrZXIoK21hcmtlcklEKSkKKyAgICAgICAgaWYgKGZvdW5k
Lmxlbmd0aCAmJiAocmFuZ2UgPSBmb3VuZFswXS5maW5kKCkpKQorICAgICAgICAgIHsgdGV4dCAr
PSBnZXRCZXR3ZWVuKGNtLmRvYywgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pLmpvaW4obGluZVNlcCkg
fQorICAgICAgICByZXR1cm4KKyAgICAgIH0KKyAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgi
Y29udGVudGVkaXRhYmxlIikgPT0gImZhbHNlIikgeyByZXR1cm4gfQorICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsgd2Fsayhu
b2RlLmNoaWxkTm9kZXNbaV0pIH0KKyAgICAgIGlmICgvXihwcmV8ZGl2fHApJC9pLnRlc3Qobm9k
ZS5ub2RlTmFtZSkpCisgICAgICAgIHsgY2xvc2luZyA9IHRydWUgfQorICAgIH0gZWxzZSBpZiAo
bm9kZS5ub2RlVHlwZSA9PSAzKSB7CisgICAgICB2YXIgdmFsID0gbm9kZS5ub2RlVmFsdWUKKyAg
ICAgIGlmICghdmFsKSB7IHJldHVybiB9CisgICAgICBpZiAoY2xvc2luZykgeworICAgICAgICB0
ZXh0ICs9IGxpbmVTZXAKKyAgICAgICAgY2xvc2luZyA9IGZhbHNlCisgICAgICB9CisgICAgICB0
ZXh0ICs9IHZhbAorICAgIH0KKyAgfQorICBmb3IgKDs7KSB7CisgICAgd2Fsayhmcm9tKQorICAg
IGlmIChmcm9tID09IHRvKSB7IGJyZWFrIH0KKyAgICBmcm9tID0gZnJvbS5uZXh0U2libGluZwor
ICB9CisgIHJldHVybiB0ZXh0Cit9CisKK2Z1bmN0aW9uIGRvbVRvUG9zKGNtLCBub2RlLCBvZmZz
ZXQpIHsKKyAgdmFyIGxpbmVOb2RlCisgIGlmIChub2RlID09IGNtLmRpc3BsYXkubGluZURpdikg
eworICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XQor
ICAgIGlmICghbGluZU5vZGUpIHsgcmV0dXJuIGJhZFBvcyhjbS5jbGlwUG9zKFBvcyhjbS5kaXNw
bGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSkgfQorICAgIG5vZGUgPSBudWxsOyBvZmZzZXQgPSAwCisg
IH0gZWxzZSB7CisgICAgZm9yIChsaW5lTm9kZSA9IG5vZGU7OyBsaW5lTm9kZSA9IGxpbmVOb2Rl
LnBhcmVudE5vZGUpIHsKKyAgICAgIGlmICghbGluZU5vZGUgfHwgbGluZU5vZGUgPT0gY20uZGlz
cGxheS5saW5lRGl2KSB7IHJldHVybiBudWxsIH0KKyAgICAgIGlmIChsaW5lTm9kZS5wYXJlbnRO
b2RlICYmIGxpbmVOb2RlLnBhcmVudE5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7IGJyZWFr
IH0KKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgbGluZVZpZXcgPSBjbS5kaXNwbGF5LnZpZXdbaV0KKyAgICBp
ZiAobGluZVZpZXcubm9kZSA9PSBsaW5lTm9kZSkKKyAgICAgIHsgcmV0dXJuIGxvY2F0ZU5vZGVJ
bkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIH0KKyAgfQorfQorCitmdW5jdGlvbiBs
b2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7CisgIHZhciB3cmFw
cGVyID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLCBiYWQgPSBmYWxzZQorICBpZiAoIW5vZGUg
fHwgIWNvbnRhaW5zKHdyYXBwZXIsIG5vZGUpKSB7IHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhs
aW5lVmlldy5saW5lKSwgMCksIHRydWUpIH0KKyAgaWYgKG5vZGUgPT0gd3JhcHBlcikgeworICAg
IGJhZCA9IHRydWUKKyAgICBub2RlID0gd3JhcHBlci5jaGlsZE5vZGVzW29mZnNldF0KKyAgICBv
ZmZzZXQgPSAwCisgICAgaWYgKCFub2RlKSB7CisgICAgICB2YXIgbGluZSA9IGxpbmVWaWV3LnJl
c3QgPyBsc3QobGluZVZpZXcucmVzdCkgOiBsaW5lVmlldy5saW5lCisgICAgICByZXR1cm4gYmFk
UG9zKFBvcyhsaW5lTm8obGluZSksIGxpbmUudGV4dC5sZW5ndGgpLCBiYWQpCisgICAgfQorICB9
CisKKyAgdmFyIHRleHROb2RlID0gbm9kZS5ub2RlVHlwZSA9PSAzID8gbm9kZSA6IG51bGwsIHRv
cE5vZGUgPSBub2RlCisgIGlmICghdGV4dE5vZGUgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9
PSAxICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7CisgICAgdGV4dE5vZGUgPSBu
b2RlLmZpcnN0Q2hpbGQKKyAgICBpZiAob2Zmc2V0KSB7IG9mZnNldCA9IHRleHROb2RlLm5vZGVW
YWx1ZS5sZW5ndGggfQorICB9CisgIHdoaWxlICh0b3BOb2RlLnBhcmVudE5vZGUgIT0gd3JhcHBl
cikgeyB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnROb2RlIH0KKyAgdmFyIG1lYXN1cmUgPSBsaW5l
Vmlldy5tZWFzdXJlLCBtYXBzID0gbWVhc3VyZS5tYXBzCisKKyAgZnVuY3Rpb24gZmluZCh0ZXh0
Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KSB7CisgICAgZm9yICh2YXIgaSA9IC0xOyBpIDwgKG1hcHMg
PyBtYXBzLmxlbmd0aCA6IDApOyBpKyspIHsKKyAgICAgIHZhciBtYXAgPSBpIDwgMCA/IG1lYXN1
cmUubWFwIDogbWFwc1tpXQorICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBq
ICs9IDMpIHsKKyAgICAgICAgdmFyIGN1ck5vZGUgPSBtYXBbaiArIDJdCisgICAgICAgIGlmIChj
dXJOb2RlID09IHRleHROb2RlIHx8IGN1ck5vZGUgPT0gdG9wTm9kZSkgeworICAgICAgICAgIHZh
ciBsaW5lID0gbGluZU5vKGkgPCAwID8gbGluZVZpZXcubGluZSA6IGxpbmVWaWV3LnJlc3RbaV0p
CisgICAgICAgICAgdmFyIGNoID0gbWFwW2pdICsgb2Zmc2V0CisgICAgICAgICAgaWYgKG9mZnNl
dCA8IDAgfHwgY3VyTm9kZSAhPSB0ZXh0Tm9kZSkgeyBjaCA9IG1hcFtqICsgKG9mZnNldCA/IDEg
OiAwKV0gfQorICAgICAgICAgIHJldHVybiBQb3MobGluZSwgY2gpCiAgICAgICAgIH0KLSAgICAg
ICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7Ci0gICAgICB9IHdoaWxlIChtZS5jaGlsZHJl
bi5sZW5ndGggPiAxMCk7Ci0gICAgICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpOwotICAgIH0sCi0g
ICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMu
Y2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChhdCA8IHN6
KSB7Ci0gICAgICAgICAgdmFyIHVzZWQgPSBNYXRoLm1pbihuLCBzeiAtIGF0KTsKLSAgICAgICAg
ICBpZiAoY2hpbGQuaXRlck4oYXQsIHVzZWQsIG9wKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
aWYgKChuIC09IHVzZWQpID09IDApIGJyZWFrOwotICAgICAgICAgIGF0ID0gMDsKLSAgICAgICAg
fSBlbHNlIGF0IC09IHN6OwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICB2YXIgbmV4dERvY0lk
ID0gMDsKLSAgdmFyIERvYyA9IENvZGVNaXJyb3IuRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwg
Zmlyc3RMaW5lLCBsaW5lU2VwKSB7Ci0gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvYykpIHJl
dHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSwgbGluZVNlcCk7Ci0gICAgaWYgKGZp
cnN0TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAwOwotCi0gICAgQnJhbmNoQ2h1bmsuY2FsbCh0
aGlzLCBbbmV3IExlYWZDaHVuayhbbmV3IExpbmUoIiIsIG51bGwpXSldKTsKLSAgICB0aGlzLmZp
cnN0ID0gZmlyc3RMaW5lOwotICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxMZWZ0ID0g
MDsKLSAgICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgdGhpcy5jbGVhbkdlbmVyYXRpb24g
PSAxOwotICAgIHRoaXMuZnJvbnRpZXIgPSBmaXJzdExpbmU7Ci0gICAgdmFyIHN0YXJ0ID0gUG9z
KGZpcnN0TGluZSwgMCk7Ci0gICAgdGhpcy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpOwot
ICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpOwotICAgIHRoaXMuaWQgPSArK25l
eHREb2NJZDsKLSAgICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlOwotICAgIHRoaXMubGluZVNlcCA9
IGxpbmVTZXA7Ci0KLSAgICBpZiAodHlwZW9mIHRleHQgPT0gInN0cmluZyIpIHRleHQgPSB0aGlz
LnNwbGl0TGluZXModGV4dCk7Ci0gICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9tOiBzdGFydCwgdG86
IHN0YXJ0LCB0ZXh0OiB0ZXh0fSk7Ci0gICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVj
dGlvbihzdGFydCksIHNlbF9kb250U2Nyb2xsKTsKLSAgfTsKLQotICBEb2MucHJvdG90eXBlID0g
Y3JlYXRlT2JqKEJyYW5jaENodW5rLnByb3RvdHlwZSwgewotICAgIGNvbnN0cnVjdG9yOiBEb2Ms
Ci0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBkb2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0t
IHdpdGggb25seSBvbmUKLSAgICAvLyBhcmd1bWVudCwgaXQgY2FsbHMgdGhhdCBmb3IgZWFjaCBs
aW5lIGluIHRoZSBkb2N1bWVudC4gV2l0aAotICAgIC8vIHRocmVlLCBpdCBpdGVyYXRlcyBvdmVy
IHRoZSByYW5nZSBnaXZlbiBieSB0aGUgZmlyc3QgdHdvICh3aXRoCi0gICAgLy8gdGhlIHNlY29u
ZCBiZWluZyBub24taW5jbHVzaXZlKS4KLSAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3Ap
IHsKLSAgICAgIGlmIChvcCkgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9t
LCBvcCk7Ci0gICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRo
aXMuc2l6ZSwgZnJvbSk7Ci0gICAgfSwKLQotICAgIC8vIE5vbi1wdWJsaWMgaW50ZXJmYWNlIGZv
ciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzLgotICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxp
bmVzKSB7Ci0gICAgICB2YXIgaGVpZ2h0ID0gMDsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGluZXMubGVuZ3RoOyArK2kpIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7Ci0gICAgICB0aGlz
Lmluc2VydElubmVyKGF0IC0gdGhpcy5maXJzdCwgbGluZXMsIGhlaWdodCk7Ci0gICAgfSwKLSAg
ICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuKSB7IHRoaXMucmVtb3ZlSW5uZXIoYXQgLSB0aGlzLmZp
cnN0LCBuKTsgfSwKLQotICAgIC8vIEZyb20gaGVyZSwgdGhlIG1ldGhvZHMgYXJlIHBhcnQgb2Yg
dGhlIHB1YmxpYyBpbnRlcmZhY2UuIE1vc3QKLSAgICAvLyBhcmUgYWxzbyBhdmFpbGFibGUgZnJv
bSBDb2RlTWlycm9yIChlZGl0b3IpIGluc3RhbmNlcy4KLQotICAgIGdldFZhbHVlOiBmdW5jdGlv
bihsaW5lU2VwKSB7Ci0gICAgICB2YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0
LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKTsKLSAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkg
cmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxp
bmVTZXBhcmF0b3IoKSk7Ci0gICAgfSwKLSAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oY29kZSkgewotICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRo
aXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwotICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTog
dG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46
ICJzZXRWYWx1ZSIsIGZ1bGw6IHRydWV9LCB0cnVlKTsKLSAgICAgIHNldFNlbGVjdGlvbih0aGlz
LCBzaW1wbGVTZWxlY3Rpb24odG9wKSk7Ci0gICAgfSksCi0gICAgcmVwbGFjZVJhbmdlOiBmdW5j
dGlvbihjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7Ci0gICAgICBmcm9tID0gY2xpcFBvcyh0aGlz
LCBmcm9tKTsKLSAgICAgIHRvID0gdG8gPyBjbGlwUG9zKHRoaXMsIHRvKSA6IGZyb207Ci0gICAg
ICByZXBsYWNlUmFuZ2UodGhpcywgY29kZSwgZnJvbSwgdG8sIG9yaWdpbik7Ci0gICAgfSwKLSAg
ICBnZXRSYW5nZTogZnVuY3Rpb24oZnJvbSwgdG8sIGxpbmVTZXApIHsKLSAgICAgIHZhciBsaW5l
cyA9IGdldEJldHdlZW4odGhpcywgY2xpcFBvcyh0aGlzLCBmcm9tKSwgY2xpcFBvcyh0aGlzLCB0
bykpOwotICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAgICBy
ZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsKLSAgICB9
LAotCi0gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFu
ZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKLQotICAgIGdldExpbmVIYW5kbGU6IGZ1
bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKSByZXR1cm4gZ2V0TGluZSh0aGlz
LCBsaW5lKTt9LAotICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGlu
ZU5vKGxpbmUpO30sCi0KLSAgICBnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxp
bmUpIHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUo
dGhpcywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlzdWFsTGluZShsaW5lKTsKLSAgICB9LAotCi0g
ICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30sCi0gICAgZmlyc3RM
aW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdDt9LAotICAgIGxhc3RMaW5lOiBmdW5j
dGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwKLQotICAgIGNsaXBQ
b3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7fSwKLQotICAgIGdl
dEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsLnBy
aW1hcnkoKSwgcG9zOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gImhlYWQi
KSBwb3MgPSByYW5nZS5oZWFkOwotICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImFuY2hvciIpIHBv
cyA9IHJhbmdlLmFuY2hvcjsKLSAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJlbmQiIHx8IHN0YXJ0
ID09ICJ0byIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3MgPSByYW5nZS50bygpOwotICAgICAgZWxz
ZSBwb3MgPSByYW5nZS5mcm9tKCk7Ci0gICAgICByZXR1cm4gcG9zOwotICAgIH0sCi0gICAgbGlz
dFNlbGVjdGlvbnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zZWwucmFuZ2VzOyB9LAotICAg
IHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5n
U2VsZWN0ZWQoKTt9LAotCi0gICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5l
LCBjaCwgb3B0aW9ucykgewotICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3Mo
dGhpcywgdHlwZW9mIGxpbmUgPT0gIm51bWJlciIgPyBQb3MobGluZSwgY2ggfHwgMCkgOiBsaW5l
KSwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgfSksCi0gICAgc2V0U2VsZWN0aW9uOiBkb2NNZXRob2RP
cChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKLSAgICAgIHNldFNpbXBsZVNlbGVj
dGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQb3ModGhpcywgaGVhZCB8fCBh
bmNob3IpLCBvcHRpb25zKTsKLSAgICB9KSwKLSAgICBleHRlbmRTZWxlY3Rpb246IGRvY01ldGhv
ZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7Ci0gICAgICBleHRlbmRTZWxlY3Rp
b24odGhpcywgY2xpcFBvcyh0aGlzLCBoZWFkKSwgb3RoZXIgJiYgY2xpcFBvcyh0aGlzLCBvdGhl
ciksIG9wdGlvbnMpOwotICAgIH0pLAotICAgIGV4dGVuZFNlbGVjdGlvbnM6IGRvY01ldGhvZE9w
KGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7Ci0gICAgICBleHRlbmRTZWxlY3Rpb25zKHRoaXMs
IGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcywgb3B0aW9ucykpOwotICAgIH0pLAotICAgIGV4dGVu
ZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9ucykgewotICAgICAg
ZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKSwgb3B0aW9ucyk7
Ci0gICAgfSksCi0gICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2Vz
LCBwcmltYXJ5LCBvcHRpb25zKSB7Ci0gICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHJldHVybjsK
LSAgICAgIGZvciAodmFyIGkgPSAwLCBvdXQgPSBbXTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykK
LSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmFuY2hv
ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5o
ZWFkKSk7Ci0gICAgICBpZiAocHJpbWFyeSA9PSBudWxsKSBwcmltYXJ5ID0gTWF0aC5taW4ocmFu
Z2VzLmxlbmd0aCAtIDEsIHRoaXMuc2VsLnByaW1JbmRleCk7Ci0gICAgICBzZXRTZWxlY3Rpb24o
dGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgcHJpbWFyeSksIG9wdGlvbnMpOwotICAgIH0p
LAotICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBv
cHRpb25zKSB7Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApOwot
ICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBv
cyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTsKLSAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3Jt
YWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9wdGlvbnMpOwotICAg
IH0pLAotCi0gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7Ci0gICAgICB2YXIg
cmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lczsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRo
aXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTsKLSAgICAgICAgbGluZXMgPSBs
aW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsOwotICAgICAgfQotICAgICAgaWYgKGxpbmVT
ZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAgICBlbHNlIHJldHVybiBsaW5lcy5qb2lu
KGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOwotICAgIH0sCi0gICAgZ2V0U2VsZWN0
aW9uczogZnVuY3Rpb24obGluZVNlcCkgewotICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9
IHRoaXMuc2VsLnJhbmdlczsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5m
cm9tKCksIHJhbmdlc1tpXS50bygpKTsKLSAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSBz
ZWwgPSBzZWwuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsKLSAgICAgICAg
cGFydHNbaV0gPSBzZWw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcGFydHM7Ci0gICAgfSwKLSAg
ICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7Ci0g
ICAgICB2YXIgZHVwID0gW107Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VsLnJh
bmdlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgZHVwW2ldID0gY29kZTsKLSAgICAgIHRoaXMucmVw
bGFjZVNlbGVjdGlvbnMoZHVwLCBjb2xsYXBzZSwgb3JpZ2luIHx8ICIraW5wdXQiKTsKLSAgICB9
LAotICAgIHJlcGxhY2VTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihjb2RlLCBjb2xs
YXBzZSwgb3JpZ2luKSB7Ci0gICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDsK
LSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewotICAg
ICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOwotICAgICAgICBjaGFuZ2VzW2ldID0ge2Zy
b206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhj
b2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59OwotICAgICAgfQotICAgICAgdmFyIG5ld1NlbCA9IGNv
bGxhcHNlICYmIGNvbGxhcHNlICE9ICJlbmQiICYmIGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBj
aGFuZ2VzLCBjb2xsYXBzZSk7Ci0gICAgICBmb3IgKHZhciBpID0gY2hhbmdlcy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSkKLSAgICAgICAgbWFrZUNoYW5nZSh0aGlzLCBjaGFuZ2VzW2ldKTsKLSAg
ICAgIGlmIChuZXdTZWwpIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KHRoaXMsIG5ld1NlbCk7
Ci0gICAgICBlbHNlIGlmICh0aGlzLmNtKSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOwot
ICAgIH0pLAotICAgIHVuZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9t
SGlzdG9yeSh0aGlzLCAidW5kbyIpO30pLAotICAgIHJlZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9u
KCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIpO30pLAotICAgIHVuZG9TZWxl
Y3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlz
LCAidW5kbyIsIHRydWUpO30pLAotICAgIHJlZG9TZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0
aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIsIHRydWUpO30pLAotCi0g
ICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLmV4dGVuZCA9IHZhbDt9LAotICAg
IGdldEV4dGVuZGluZzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZXh0ZW5kO30sCi0KLSAgICBo
aXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSwg
ZG9uZSA9IDAsIHVuZG9uZSA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QuZG9u
ZS5sZW5ndGg7IGkrKykgaWYgKCFoaXN0LmRvbmVbaV0ucmFuZ2VzKSArK2RvbmU7Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhpc3QudW5kb25lLmxlbmd0aDsgaSsrKSBpZiAoIWhpc3QudW5k
b25lW2ldLnJhbmdlcykgKyt1bmRvbmU7Ci0gICAgICByZXR1cm4ge3VuZG86IGRvbmUsIHJlZG86
IHVuZG9uZX07Ci0gICAgfSwKLSAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlz
dG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTt9LAotCi0gICAg
bWFya0NsZWFuOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhp
cy5jaGFuZ2VHZW5lcmF0aW9uKHRydWUpOwotICAgIH0sCi0gICAgY2hhbmdlR2VuZXJhdGlvbjog
ZnVuY3Rpb24oZm9yY2VTcGxpdCkgewotICAgICAgaWYgKGZvcmNlU3BsaXQpCi0gICAgICAgIHRo
aXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdFNlbE9wID0gdGhpcy5oaXN0b3J5
Lmxhc3RPcmlnaW4gPSBudWxsOwotICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9u
OwotICAgIH0sCi0gICAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikgewotICAgICAgcmV0dXJuIHRo
aXMuaGlzdG9yeS5nZW5lcmF0aW9uID09IChnZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pOwot
ICAgIH0sCi0KLSAgICBnZXRIaXN0b3J5OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB7ZG9u
ZTogY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSksCi0gICAgICAgICAgICAgIHVu
ZG9uZTogY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lKX07Ci0gICAgfSwKLSAg
ICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkgewotICAgICAgdmFyIGhpc3QgPSB0aGlz
Lmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7Ci0gICAg
ICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLmRvbmUuc2xpY2UoMCksIG51
bGwsIHRydWUpOwotICAgICAgaGlzdC51bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRh
LnVuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIGFkZExpbmVDbGFz
czogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1
cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIHdoZXJlID09ICJndXR0ZXIiID8gImd1dHRlciIg
OiAiY2xhc3MiLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0g
InRleHQiID8gInRleHRDbGFzcyIKLSAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSAiYmFja2dy
b3VuZCIgPyAiYmdDbGFzcyIKLSAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSAiZ3V0dGVyIiA/
ICJndXR0ZXJDbGFzcyIgOiAid3JhcENsYXNzIjsKLSAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBs
aW5lW3Byb3BdID0gY2xzOwotICAgICAgICBlbHNlIGlmIChjbGFzc1Rlc3QoY2xzKS50ZXN0KGxp
bmVbcHJvcF0pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgbGluZVtwcm9wXSArPSAiICIg
KyBjbHM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSk7Ci0gICAgfSksCi0gICAgcmVt
b3ZlTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsK
LSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gImd1dHRlciIg
PyAiZ3V0dGVyIiA6ICJjbGFzcyIsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHByb3Ag
PSB3aGVyZSA9PSAidGV4dCIgPyAidGV4dENsYXNzIgotICAgICAgICAgICAgICAgICA6IHdoZXJl
ID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIgotICAgICAgICAgICAgICAgICA6IHdoZXJlID09
ICJndXR0ZXIiID8gImd1dHRlckNsYXNzIiA6ICJ3cmFwQ2xhc3MiOwotICAgICAgICB2YXIgY3Vy
ID0gbGluZVtwcm9wXTsKLSAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ZWxzZSBpZiAoY2xzID09IG51bGwpIGxpbmVbcHJvcF0gPSBudWxsOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpOwotICAgICAg
ICAgIGlmICghZm91bmQpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB2YXIgZW5kID0gZm91bmQu
aW5kZXggKyBmb3VuZFswXS5sZW5ndGg7Ci0gICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGlj
ZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8g
IiIgOiAiICIpICsgY3VyLnNsaWNlKGVuZCkgfHwgbnVsbDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0pOwotICAgIH0pLAotCi0gICAgYWRkTGluZVdpZGdldDogZG9j
TWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7Ci0gICAgICByZXR1cm4g
YWRkTGluZVdpZGdldCh0aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpOwotICAgIH0pLAotICAg
IHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xlYXIoKTsgfSwK
LQotICAgIG1hcmtUZXh0OiBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9ucykgewotICAgICAgcmV0
dXJuIG1hcmtUZXh0KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8p
LCBvcHRpb25zLCAicmFuZ2UiKTsKLSAgICB9LAotICAgIHNldEJvb2ttYXJrOiBmdW5jdGlvbihw
b3MsIG9wdGlvbnMpIHsKLSAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlv
bnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9u
cyksCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAmJiBvcHRpb25z
Lmluc2VydExlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IGZhbHNl
LCBzaGFyZWQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50
c307Ci0gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7Ci0gICAgICByZXR1cm4gbWFya1Rl
eHQodGhpcywgcG9zLCBwb3MsIHJlYWxPcHRzLCAiYm9va21hcmsiKTsKLSAgICB9LAotICAgIGZp
bmRNYXJrc0F0OiBmdW5jdGlvbihwb3MpIHsKLSAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9z
KTsKLSAgICAgIHZhciBtYXJrZXJzID0gW10sIHNwYW5zID0gZ2V0TGluZSh0aGlzLCBwb3MubGlu
ZSkubWFya2VkU3BhbnM7Ci0gICAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3Bh
bnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKLSAgICAgICAg
aWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJgotICAgICAg
ICAgICAgKHNwYW4udG8gPT0gbnVsbCB8fCBzcGFuLnRvID49IHBvcy5jaCkpCi0gICAgICAgICAg
bWFya2Vycy5wdXNoKHNwYW4ubWFya2VyLnBhcmVudCB8fCBzcGFuLm1hcmtlcik7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gbWFya2VyczsKLSAgICB9LAotICAgIGZpbmRNYXJrczogZnVuY3Rpb24o
ZnJvbSwgdG8sIGZpbHRlcikgewotICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7IHRv
ID0gY2xpcFBvcyh0aGlzLCB0byk7Ci0gICAgICB2YXIgZm91bmQgPSBbXSwgbGluZU5vID0gZnJv
bS5saW5lOwotICAgICAgdGhpcy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9u
KGxpbmUpIHsKLSAgICAgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsKLSAgICAgICAg
aWYgKHNwYW5zKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKLSAgICAgICAgICBpZiAoIShsaW5lTm8gPT0gZnJv
bS5saW5lICYmIGZyb20uY2ggPiBzcGFuLnRvIHx8Ci0gICAgICAgICAgICAgICAgc3Bhbi5mcm9t
ID09IG51bGwgJiYgbGluZU5vICE9IGZyb20ubGluZXx8Ci0gICAgICAgICAgICAgICAgbGluZU5v
ID09IHRvLmxpbmUgJiYgc3Bhbi5mcm9tID4gdG8uY2gpICYmCi0gICAgICAgICAgICAgICghZmls
dGVyIHx8IGZpbHRlcihzcGFuLm1hcmtlcikpKQotICAgICAgICAgICAgZm91bmQucHVzaChzcGFu
Lm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOwotICAgICAgICB9Ci0gICAgICAgICsrbGlu
ZU5vOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfSwKLSAgICBnZXRBbGxN
YXJrczogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgbWFya2VycyA9IFtdOwotICAgICAgdGhpcy5p
dGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHNwcyA9IGxpbmUubWFya2VkU3BhbnM7
Ci0gICAgICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgIGlmIChzcHNbaV0uZnJvbSAhPSBudWxsKSBtYXJrZXJzLnB1c2goc3BzW2ldLm1h
cmtlcik7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBtYXJrZXJzOwotICAgIH0sCi0KLSAgICBw
b3NGcm9tSW5kZXg6IGZ1bmN0aW9uKG9mZikgewotICAgICAgdmFyIGNoLCBsaW5lTm8gPSB0aGlz
LmZpcnN0OwotICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHN6
ID0gbGluZS50ZXh0Lmxlbmd0aCArIDE7Ci0gICAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9m
ZjsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgb2ZmIC09IHN6OwotICAgICAgICArK2xpbmVObzsK
LSAgICAgIH0pOwotICAgICAgcmV0dXJuIGNsaXBQb3ModGhpcywgUG9zKGxpbmVObywgY2gpKTsK
LSAgICB9LAotICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgewotICAgICAgY29v
cmRzID0gY2xpcFBvcyh0aGlzLCBjb29yZHMpOwotICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNo
OwotICAgICAgaWYgKGNvb3Jkcy5saW5lIDwgdGhpcy5maXJzdCB8fCBjb29yZHMuY2ggPCAwKSBy
ZXR1cm4gMDsKLSAgICAgIHRoaXMuaXRlcih0aGlzLmZpcnN0LCBjb29yZHMubGluZSwgZnVuY3Rp
b24gKGxpbmUpIHsKLSAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7Ci0gICAg
ICB9KTsKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICB9LAotCi0gICAgY29weTogZnVuY3Rpb24o
Y29weUhpc3RvcnkpIHsKLSAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRo
aXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxpbmVTZXApOwotICAgICAgZG9j
LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xs
TGVmdDsKLSAgICAgIGRvYy5zZWwgPSB0aGlzLnNlbDsKLSAgICAgIGRvYy5leHRlbmQgPSBmYWxz
ZTsKLSAgICAgIGlmIChjb3B5SGlzdG9yeSkgewotICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVw
dGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoOwotICAgICAgICBkb2Muc2V0SGlzdG9yeSh0aGlz
LmdldEhpc3RvcnkoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZG9jOwotICAgIH0sCi0KLSAg
ICBsaW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgIGlmICghb3B0aW9ucykgb3B0
aW9ucyA9IHt9OwotICAgICAgdmFyIGZyb20gPSB0aGlzLmZpcnN0LCB0byA9IHRoaXMuZmlyc3Qg
KyB0aGlzLnNpemU7Ci0gICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5m
cm9tID4gZnJvbSkgZnJvbSA9IG9wdGlvbnMuZnJvbTsKLSAgICAgIGlmIChvcHRpb25zLnRvICE9
IG51bGwgJiYgb3B0aW9ucy50byA8IHRvKSB0byA9IG9wdGlvbnMudG87Ci0gICAgICB2YXIgY29w
eSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhp
cy5tb2RlT3B0aW9uLCBmcm9tLCB0aGlzLmxpbmVTZXApOwotICAgICAgaWYgKG9wdGlvbnMuc2hh
cmVkSGlzdCkgY29weS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5OwotICAgICAgKHRoaXMubGlua2Vk
IHx8ICh0aGlzLmxpbmtlZCA9IFtdKSkucHVzaCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRp
b25zLnNoYXJlZEhpc3R9KTsKLSAgICAgIGNvcHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFy
ZW50OiB0cnVlLCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9XTsKLSAgICAgIGNvcHlT
aGFyZWRNYXJrZXJzKGNvcHksIGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTsKLSAgICAgIHJldHVy
biBjb3B5OwotICAgIH0sCi0gICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikgewotICAgICAg
aWYgKG90aGVyIGluc3RhbmNlb2YgQ29kZU1pcnJvcikgb3RoZXIgPSBvdGhlci5kb2M7Ci0gICAg
ICBpZiAodGhpcy5saW5rZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5rZWQubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmxpbmtlZFtpXTsKLSAgICAgICAgaWYg
KGxpbmsuZG9jICE9IG90aGVyKSBjb250aW51ZTsKLSAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNl
KGksIDEpOwotICAgICAgICBvdGhlci51bmxpbmtEb2ModGhpcyk7Ci0gICAgICAgIGRldGFjaFNo
YXJlZE1hcmtlcnMoZmluZFNoYXJlZE1hcmtlcnModGhpcykpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICAgIC8vIElmIHRoZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0g
YWdhaW4KLSAgICAgIGlmIChvdGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgewotICAgICAg
ICB2YXIgc3BsaXRJZHMgPSBbb3RoZXIuaWRdOwotICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBm
dW5jdGlvbihkb2MpIHtzcGxpdElkcy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90
aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTsKLSAgICAgICAgb3RoZXIuaGlzdG9yeS5k
b25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3BsaXRJZHMpOwotICAg
ICAgICBvdGhlci5oaXN0b3J5LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5
LnVuZG9uZSwgc3BsaXRJZHMpOwotICAgICAgfQotICAgIH0sCi0gICAgaXRlckxpbmtlZERvY3M6
IGZ1bmN0aW9uKGYpIHtsaW5rZWREb2NzKHRoaXMsIGYpO30sCi0KLSAgICBnZXRNb2RlOiBmdW5j
dGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlO30sCi0gICAgZ2V0RWRpdG9yOiBmdW5jdGlvbigpIHty
ZXR1cm4gdGhpcy5jbTt9LAotCi0gICAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7Ci0gICAg
ICBpZiAodGhpcy5saW5lU2VwKSByZXR1cm4gc3RyLnNwbGl0KHRoaXMubGluZVNlcCk7Ci0gICAg
ICByZXR1cm4gc3BsaXRMaW5lc0F1dG8oc3RyKTsKLSAgICB9LAotICAgIGxpbmVTZXBhcmF0b3I6
IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lU2VwIHx8ICJcbiI7IH0KLSAgfSk7Ci0KLSAg
Ly8gUHVibGljIGFsaWFzLgotICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnByb3RvdHlw
ZS5pdGVyOwotCi0gIC8vIFNldCB1cCBtZXRob2RzIG9uIENvZGVNaXJyb3IncyBwcm90b3R5cGUg
dG8gcmVkaXJlY3QgdG8gdGhlIGVkaXRvcidzIGRvY3VtZW50LgotICB2YXIgZG9udERlbGVnYXRl
ID0gIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvciIuc3BsaXQo
IiAiKTsKLSAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSBpZiAoRG9jLnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9mKGRvbnREZWxlZ2F0ZSwgcHJvcCkgPCAw
KQotICAgIENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0aW9uKG1ldGhvZCkgewot
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiBtZXRob2QuYXBwbHkodGhpcy5kb2MsIGFy
Z3VtZW50cyk7fTsKLSAgICB9KShEb2MucHJvdG90eXBlW3Byb3BdKTsKLQotICBldmVudE1peGlu
KERvYyk7Ci0KLSAgLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy4KLSAgZnVuY3Rp
b24gbGlua2VkRG9jcyhkb2MsIGYsIHNoYXJlZEhpc3RPbmx5KSB7Ci0gICAgZnVuY3Rpb24gcHJv
cGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkgewotICAgICAgaWYgKGRvYy5saW5rZWQpIGZv
ciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIg
cmVsID0gZG9jLmxpbmtlZFtpXTsKLSAgICAgICAgaWYgKHJlbC5kb2MgPT0gc2tpcCkgY29udGlu
dWU7Ci0gICAgICAgIHZhciBzaGFyZWQgPSBzaGFyZWRIaXN0ICYmIHJlbC5zaGFyZWRIaXN0Owot
ICAgICAgICBpZiAoc2hhcmVkSGlzdE9ubHkgJiYgIXNoYXJlZCkgY29udGludWU7Ci0gICAgICAg
IGYocmVsLmRvYywgc2hhcmVkKTsKLSAgICAgICAgcHJvcGFnYXRlKHJlbC5kb2MsIGRvYywgc2hh
cmVkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGFnYXRlKGRvYywgbnVsbCwgdHJ1ZSk7Ci0g
IH0KLQotICAvLyBBdHRhY2ggYSBkb2N1bWVudCB0byBhbiBlZGl0b3IuCi0gIGZ1bmN0aW9uIGF0
dGFjaERvYyhjbSwgZG9jKSB7Ci0gICAgaWYgKGRvYy5jbSkgdGhyb3cgbmV3IEVycm9yKCJUaGlz
IGRvY3VtZW50IGlzIGFscmVhZHkgaW4gdXNlLiIpOwotICAgIGNtLmRvYyA9IGRvYzsKLSAgICBk
b2MuY20gPSBjbTsKLSAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsKLSAgICBsb2FkTW9kZShj
bSk7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgZmluZE1heExpbmUoY20pOwot
ICAgIGNtLm9wdGlvbnMubW9kZSA9IGRvYy5tb2RlT3B0aW9uOwotICAgIHJlZ0NoYW5nZShjbSk7
Ci0gIH0KLQotICAvLyBMSU5FIFVUSUxJVElFUwotCi0gIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgotICBmdW5jdGlvbiBnZXRM
aW5lKGRvYywgbikgewotICAgIG4gLT0gZG9jLmZpcnN0OwotICAgIGlmIChuIDwgMCB8fCBuID49
IGRvYy5zaXplKSB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIGxpbmUgIiArIChuICsgZG9j
LmZpcnN0KSArICIgaW4gdGhlIGRvY3VtZW50LiIpOwotICAgIGZvciAodmFyIGNodW5rID0gZG9j
OyAhY2h1bmsubGluZXM7KSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewotICAgICAg
ICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsK
LSAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBicmVhazsgfQotICAgICAgICBu
IC09IHN6OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2h1bmsubGluZXNbbl07Ci0gIH0K
LQotICAvLyBHZXQgdGhlIHBhcnQgb2YgYSBkb2N1bWVudCBiZXR3ZWVuIHR3byBwb3NpdGlvbnMs
IGFzIGFuIGFycmF5IG9mCi0gIC8vIHN0cmluZ3MuCi0gIGZ1bmN0aW9uIGdldEJldHdlZW4oZG9j
LCBzdGFydCwgZW5kKSB7Ci0gICAgdmFyIG91dCA9IFtdLCBuID0gc3RhcnQubGluZTsKLSAgICBk
b2MuaXRlcihzdGFydC5saW5lLCBlbmQubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
IHZhciB0ZXh0ID0gbGluZS50ZXh0OwotICAgICAgaWYgKG4gPT0gZW5kLmxpbmUpIHRleHQgPSB0
ZXh0LnNsaWNlKDAsIGVuZC5jaCk7Ci0gICAgICBpZiAobiA9PSBzdGFydC5saW5lKSB0ZXh0ID0g
dGV4dC5zbGljZShzdGFydC5jaCk7Ci0gICAgICBvdXQucHVzaCh0ZXh0KTsKLSAgICAgICsrbjsK
LSAgICB9KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0gIC8vIEdldCB0aGUgbGluZXMgYmV0d2Vl
biBmcm9tIGFuZCB0bywgYXMgYXJyYXkgb2Ygc3RyaW5ncy4KLSAgZnVuY3Rpb24gZ2V0TGluZXMo
ZG9jLCBmcm9tLCB0bykgewotICAgIHZhciBvdXQgPSBbXTsKLSAgICBkb2MuaXRlcihmcm9tLCB0
bywgZnVuY3Rpb24obGluZSkgeyBvdXQucHVzaChsaW5lLnRleHQpOyB9KTsKLSAgICByZXR1cm4g
b3V0OwotICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCBwcm9wYWdhdGlu
ZyB0aGUgaGVpZ2h0IGNoYW5nZQotICAvLyB1cHdhcmRzIHRvIHBhcmVudCBub2Rlcy4KLSAgZnVu
Y3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKLSAgICB2YXIgZGlmZiA9IGhl
aWdodCAtIGxpbmUuaGVpZ2h0OwotICAgIGlmIChkaWZmKSBmb3IgKHZhciBuID0gbGluZTsgbjsg
biA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOwotICB9Ci0KLSAgLy8gR2l2ZW4gYSBsaW5l
IG9iamVjdCwgZmluZCBpdHMgbGluZSBudW1iZXIgYnkgd2Fsa2luZyB1cCB0aHJvdWdoCi0gIC8v
IGl0cyBwYXJlbnQgbGlua3MuCi0gIGZ1bmN0aW9uIGxpbmVObyhsaW5lKSB7Ci0gICAgaWYgKGxp
bmUucGFyZW50ID09IG51bGwpIHJldHVybiBudWxsOwotICAgIHZhciBjdXIgPSBsaW5lLnBhcmVu
dCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7Ci0gICAgZm9yICh2YXIgY2h1bmsgPSBj
dXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1bmsucGFyZW50KSB7Ci0g
ICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewotICAgICAgICBpZiAoY2h1bmsuY2hpbGRyZW5b
aV0gPT0gY3VyKSBicmVhazsKLSAgICAgICAgbm8gKz0gY2h1bmsuY2hpbGRyZW5baV0uY2h1bmtT
aXplKCk7CiAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBubyArIGN1ci5maXJzdDsKICAgfQor
ICB2YXIgZm91bmQgPSBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpCisgIGlmIChmb3Vu
ZCkgeyByZXR1cm4gYmFkUG9zKGZvdW5kLCBiYWQpIH0KIAotICAvLyBGaW5kIHRoZSBsaW5lIGF0
IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodAotICAvLyBpbmZv
cm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS4KLSAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNo
dW5rLCBoKSB7Ci0gICAgdmFyIG4gPSBjaHVuay5maXJzdDsKLSAgICBvdXRlcjogZG8gewotICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAg
ICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgY2ggPSBjaGlsZC5oZWlnaHQ7Ci0g
ICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXI7IH0KLSAg
ICAgICAgaCAtPSBjaDsKLSAgICAgICAgbiArPSBjaGlsZC5jaHVua1NpemUoKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBuOwotICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcyk7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGxpbmUg
PSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDsKLSAgICAgIGlmIChoIDwgbGgpIGJy
ZWFrOwotICAgICAgaCAtPSBsaDsKLSAgICB9Ci0gICAgcmV0dXJuIG4gKyBpOwotICB9Ci0KLQot
ICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuCi0gIGZ1bmN0aW9uIGhl
aWdodEF0TGluZShsaW5lT2JqKSB7Ci0gICAgbGluZU9iaiA9IHZpc3VhbExpbmUobGluZU9iaik7
Ci0KLSAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGxpbmUgPSBj
aHVuay5saW5lc1tpXTsKLSAgICAgIGlmIChsaW5lID09IGxpbmVPYmopIGJyZWFrOwotICAgICAg
ZWxzZSBoICs9IGxpbmUuaGVpZ2h0OwotICAgIH0KLSAgICBmb3IgKHZhciBwID0gY2h1bmsucGFy
ZW50OyBwOyBjaHVuayA9IHAsIHAgPSBjaHVuay5wYXJlbnQpIHsKLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcC5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY3VyID0gcC5j
aGlsZHJlbltpXTsKLSAgICAgICAgaWYgKGN1ciA9PSBjaHVuaykgYnJlYWs7Ci0gICAgICAgIGVs
c2UgaCArPSBjdXIuaGVpZ2h0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaDsKLSAgfQot
Ci0gIC8vIEdldCB0aGUgYmlkaSBvcmRlcmluZyBmb3IgdGhlIGdpdmVuIGxpbmUgKGFuZCBjYWNo
ZSBpdCkuIFJldHVybnMKLSAgLy8gZmFsc2UgZm9yIGxpbmVzIHRoYXQgYXJlIGZ1bGx5IGxlZnQt
dG8tcmlnaHQsIGFuZCBhbiBhcnJheSBvZgotICAvLyBCaWRpU3BhbiBvYmplY3RzIG90aGVyd2lz
ZS4KLSAgZnVuY3Rpb24gZ2V0T3JkZXIobGluZSkgewotICAgIHZhciBvcmRlciA9IGxpbmUub3Jk
ZXI7Ci0gICAgaWYgKG9yZGVyID09IG51bGwpIG9yZGVyID0gbGluZS5vcmRlciA9IGJpZGlPcmRl
cmluZyhsaW5lLnRleHQpOwotICAgIHJldHVybiBvcmRlcjsKLSAgfQotCi0gIC8vIEhJU1RPUlkK
LQotICBmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7Ci0gICAgLy8gQXJyYXlzIG9mIGNoYW5n
ZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0aGluZyBhZGRzIGFuCi0gICAgLy8g
ZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20g
ZG9uZQotICAgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGluIHRoZSBvdGhlciBk
aXJlY3Rpb24uCi0gICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107Ci0gICAgdGhp
cy51bmRvRGVwdGggPSBJbmZpbml0eTsKLSAgICAvLyBVc2VkIHRvIHRyYWNrIHdoZW4gY2hhbmdl
cyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbwotICAgIC8vIGV2ZW50Ci0gICAgdGhp
cy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAwOwotICAgIHRoaXMubGFzdE9wID0g
dGhpcy5sYXN0U2VsT3AgPSBudWxsOwotICAgIHRoaXMubGFzdE9yaWdpbiA9IHRoaXMubGFzdFNl
bE9yaWdpbiA9IG51bGw7Ci0gICAgLy8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAotICAg
IHRoaXMuZ2VuZXJhdGlvbiA9IHRoaXMubWF4R2VuZXJhdGlvbiA9IHN0YXJ0R2VuIHx8IDE7Ci0g
IH0KLQotICAvLyBDcmVhdGUgYSBoaXN0b3J5IGNoYW5nZSBldmVudCBmcm9tIGFuIHVwZGF0ZURv
Yy1zdHlsZSBjaGFuZ2UKLSAgLy8gb2JqZWN0LgotICBmdW5jdGlvbiBoaXN0b3J5Q2hhbmdlRnJv
bUNoYW5nZShkb2MsIGNoYW5nZSkgewotICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNvcHlQ
b3MoY2hhbmdlLmZyb20pLCB0bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4o
ZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07Ci0gICAgYXR0YWNoTG9jYWxTcGFucyhkb2Ms
IGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7Ci0gICAg
bGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0
Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwot
ICAgIHJldHVybiBoaXN0Q2hhbmdlOwotICB9Ci0KLSAgLy8gUG9wIGFsbCBzZWxlY3Rpb24gZXZl
bnRzIG9mZiB0aGUgZW5kIG9mIGEgaGlzdG9yeSBhcnJheS4gU3RvcCBhdAotICAvLyBhIGNoYW5n
ZSBldmVudC4KLSAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25FdmVudHMoYXJyYXkpIHsKLSAgICB3
aGlsZSAoYXJyYXkubGVuZ3RoKSB7Ci0gICAgICB2YXIgbGFzdCA9IGxzdChhcnJheSk7Ci0gICAg
ICBpZiAobGFzdC5yYW5nZXMpIGFycmF5LnBvcCgpOwotICAgICAgZWxzZSBicmVhazsKLSAgICB9
Ci0gIH0KLQotICAvLyBGaW5kIHRoZSB0b3AgY2hhbmdlIGV2ZW50IGluIHRoZSBoaXN0b3J5LiBQ
b3Agb2ZmIHNlbGVjdGlvbgotICAvLyBldmVudHMgdGhhdCBhcmUgaW4gdGhlIHdheS4KLSAgZnVu
Y3Rpb24gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGZvcmNlKSB7Ci0gICAgaWYgKGZvcmNlKSB7Ci0g
ICAgICBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LmRvbmUpOwotICAgICAgcmV0dXJuIGxzdCho
aXN0LmRvbmUpOwotICAgIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCAmJiAhbHN0KGhpc3Qu
ZG9uZSkucmFuZ2VzKSB7Ci0gICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSk7Ci0gICAgfSBlbHNl
IGlmIChoaXN0LmRvbmUubGVuZ3RoID4gMSAmJiAhaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGgg
LSAyXS5yYW5nZXMpIHsKLSAgICAgIGhpc3QuZG9uZS5wb3AoKTsKLSAgICAgIHJldHVybiBsc3Qo
aGlzdC5kb25lKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWdpc3RlciBhIGNoYW5nZSBpbiB0aGUg
aGlzdG9yeS4gTWVyZ2VzIGNoYW5nZXMgdGhhdCBhcmUgd2l0aGluCi0gIC8vIGEgc2luZ2xlIG9w
ZXJhdGlvbiwgb3JlIGFyZSBjbG9zZSB0b2dldGhlciB3aXRoIGFuIG9yaWdpbiB0aGF0Ci0gIC8v
IGFsbG93cyBtZXJnaW5nIChzdGFydGluZyB3aXRoICIrIikgaW50byBhIHNpbmdsZSBldmVudC4K
LSAgZnVuY3Rpb24gYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgb3BJ
ZCkgewotICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7Ci0gICAgaGlzdC51bmRvbmUubGVuZ3Ro
ID0gMDsKLSAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyOwotCi0gICAgaWYgKChoaXN0Lmxh
c3RPcCA9PSBvcElkIHx8Ci0gICAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdp
biAmJiBjaGFuZ2Uub3JpZ2luICYmCi0gICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDAp
ID09ICIrIiAmJiBkb2MuY20gJiYgaGlzdC5sYXN0TW9kVGltZSA+IHRpbWUgLSBkb2MuY20ub3B0
aW9ucy5oaXN0b3J5RXZlbnREZWxheSkgfHwKLSAgICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJB
dCgwKSA9PSAiKiIpKSAmJgotICAgICAgICAoY3VyID0gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGhp
c3QubGFzdE9wID09IG9wSWQpKSkgewotICAgICAgLy8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0
aGUgbGFzdCBldmVudAotICAgICAgdmFyIGxhc3QgPSBsc3QoY3VyLmNoYW5nZXMpOwotICAgICAg
aWYgKGNtcChjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAwICYmIGNtcChjaGFuZ2UuZnJvbSwg
bGFzdC50bykgPT0gMCkgewotICAgICAgICAvLyBPcHRpbWl6ZWQgY2FzZSBmb3Igc2ltcGxlIGlu
c2VydGlvbiAtLSBkb24ndCB3YW50IHRvIGFkZAotICAgICAgICAvLyBuZXcgY2hhbmdlc2V0cyBm
b3IgZXZlcnkgY2hhcmFjdGVyIHR5cGVkCi0gICAgICAgIGxhc3QudG8gPSBjaGFuZ2VFbmQoY2hh
bmdlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFkZCBuZXcgc3ViLWV2ZW50Ci0gICAg
ICAgIGN1ci5jaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2Up
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gQ2FuIG5vdCBiZSBtZXJnZWQsIHN0
YXJ0IGEgbmV3IGV2ZW50LgotICAgICAgdmFyIGJlZm9yZSA9IGxzdChoaXN0LmRvbmUpOwotICAg
ICAgaWYgKCFiZWZvcmUgfHwgIWJlZm9yZS5yYW5nZXMpCi0gICAgICAgIHB1c2hTZWxlY3Rpb25U
b0hpc3RvcnkoZG9jLnNlbCwgaGlzdC5kb25lKTsKLSAgICAgIGN1ciA9IHtjaGFuZ2VzOiBbaGlz
dG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpXSwKLSAgICAgICAgICAgICBnZW5lcmF0
aW9uOiBoaXN0LmdlbmVyYXRpb259OwotICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTsKLSAgICAg
IHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpIHsKLSAgICAgICAgaGlz
dC5kb25lLnNoaWZ0KCk7Ci0gICAgICAgIGlmICghaGlzdC5kb25lWzBdLnJhbmdlcykgaGlzdC5k
b25lLnNoaWZ0KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGhpc3QuZG9uZS5wdXNoKHNlbEFmdGVy
KTsKLSAgICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjsKLSAgICBoaXN0
Lmxhc3RNb2RUaW1lID0gaGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7Ci0gICAgaGlzdC5sYXN0T3Ag
PSBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7Ci0gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0
U2VsT3JpZ2luID0gY2hhbmdlLm9yaWdpbjsKLQotICAgIGlmICghbGFzdCkgc2lnbmFsKGRvYywg
Imhpc3RvcnlBZGRlZCIpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5CZU1l
cmdlZChkb2MsIG9yaWdpbiwgcHJldiwgc2VsKSB7Ci0gICAgdmFyIGNoID0gb3JpZ2luLmNoYXJB
dCgwKTsKLSAgICByZXR1cm4gY2ggPT0gIioiIHx8Ci0gICAgICBjaCA9PSAiKyIgJiYKLSAgICAg
IHByZXYucmFuZ2VzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJgotICAgICAgcHJldi5z
b21ldGhpbmdTZWxlY3RlZCgpID09IHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpICYmCi0gICAgICBu
ZXcgRGF0ZSAtIGRvYy5oaXN0b3J5Lmxhc3RTZWxUaW1lIDw9IChkb2MuY20gPyBkb2MuY20ub3B0
aW9ucy5oaXN0b3J5RXZlbnREZWxheSA6IDUwMCk7Ci0gIH0KLQotICAvLyBDYWxsZWQgd2hlbmV2
ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzCi0gIC8v
IHRoZSBwZW5kaW5nIHNlbGVjdGlvbiBpbiB0aGUgaGlzdG9yeSwgYW5kIHB1c2hlcyB0aGUgb2xk
IHBlbmRpbmcKLSAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdh
cyBzaWduaWZpY2FudGx5Ci0gIC8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJh
bmdlcywgZW1wdGluZXNzLCBvciB0aW1lKS4KLSAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uVG9IaXN0
b3J5KGRvYywgc2VsLCBvcElkLCBvcHRpb25zKSB7Ci0gICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9y
eSwgb3JpZ2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjsKLQotICAgIC8vIEEgbmV3IGV2
ZW50IGlzIHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoCi0g
ICAgLy8gdGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBP
cmlnaW5zCi0gICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBz
dGFydGluZyB3aXRoICsgYXJlCi0gICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2Ug
dG9nZXRoZXIgaW4gdGltZS4KLSAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RTZWxPcCB8fAotICAg
ICAgICAob3JpZ2luICYmIGhpc3QubGFzdFNlbE9yaWdpbiA9PSBvcmlnaW4gJiYKLSAgICAgICAg
IChoaXN0Lmxhc3RNb2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2lu
ID09IG9yaWdpbiB8fAotICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBv
cmlnaW4sIGxzdChoaXN0LmRvbmUpLCBzZWwpKSkpCi0gICAgICBoaXN0LmRvbmVbaGlzdC5kb25l
Lmxlbmd0aCAtIDFdID0gc2VsOworICAvLyBGSVhNRSB0aGlzIGlzIGFsbCByZWFsbHkgc2hha3ku
IG1pZ2h0IGhhbmRsZSB0aGUgZmV3IGNhc2VzIGl0IG5lZWRzIHRvIGhhbmRsZSwgYnV0IGxpa2Vs
eSB0byBjYXVzZSBwcm9ibGVtcworICBmb3IgKHZhciBhZnRlciA9IHRvcE5vZGUubmV4dFNpYmxp
bmcsIGRpc3QgPSB0ZXh0Tm9kZSA/IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGggLSBvZmZzZXQg
OiAwOyBhZnRlcjsgYWZ0ZXIgPSBhZnRlci5uZXh0U2libGluZykgeworICAgIGZvdW5kID0gZmlu
ZChhZnRlciwgYWZ0ZXIuZmlyc3RDaGlsZCwgMCkKKyAgICBpZiAoZm91bmQpCisgICAgICB7IHJl
dHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCkgfQogICAg
IGVsc2UKLSAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBoaXN0LmRvbmUpOwotCi0g
ICAgaGlzdC5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZTsKLSAgICBoaXN0Lmxhc3RTZWxPcmlnaW4g
PSBvcmlnaW47Ci0gICAgaGlzdC5sYXN0U2VsT3AgPSBvcElkOwotICAgIGlmIChvcHRpb25zICYm
IG9wdGlvbnMuY2xlYXJSZWRvICE9PSBmYWxzZSkKLSAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRz
KGhpc3QudW5kb25lKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnko
c2VsLCBkZXN0KSB7Ci0gICAgdmFyIHRvcCA9IGxzdChkZXN0KTsKLSAgICBpZiAoISh0b3AgJiYg
dG9wLnJhbmdlcyAmJiB0b3AuZXF1YWxzKHNlbCkpKQotICAgICAgZGVzdC5wdXNoKHNlbCk7Ci0g
IH0KLQotICAvLyBVc2VkIHRvIHN0b3JlIG1hcmtlZCBzcGFuIGluZm9ybWF0aW9uIGluIHRoZSBo
aXN0b3J5LgotICBmdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgY2hhbmdlLCBmcm9tLCB0
bykgewotICAgIHZhciBleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0sIG4gPSAw
OwotICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5m
aXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChsaW5lLm1h
cmtlZFNwYW5zKQotICAgICAgICAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlWyJzcGFu
c18iICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOwotICAgICAgKytuOwot
ICAgIH0pOwotICB9Ci0KLSAgLy8gV2hlbiB1bi9yZS1kb2luZyByZXN0b3JlcyB0ZXh0IGNvbnRh
aW5pbmcgbWFya2VkIHNwYW5zLCB0aG9zZQotICAvLyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5
IGNsZWFyZWQgc2hvdWxkIG5vdCBiZSByZXN0b3JlZC4KLSAgZnVuY3Rpb24gcmVtb3ZlQ2xlYXJl
ZFNwYW5zKHNwYW5zKSB7Ci0gICAgaWYgKCFzcGFucykgcmV0dXJuIG51bGw7Ci0gICAgZm9yICh2
YXIgaSA9IDAsIG91dDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICBpZiAoc3BhbnNb
aV0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkKSB7IGlmICghb3V0KSBvdXQgPSBzcGFucy5zbGlj
ZSgwLCBpKTsgfQotICAgICAgZWxzZSBpZiAob3V0KSBvdXQucHVzaChzcGFuc1tpXSk7Ci0gICAg
fQotICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbDsKLSAg
fQotCi0gIC8vIFJldHJpZXZlIGFuZCBmaWx0ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVk
IGluIGEgY2hhbmdlIGV2ZW50LgotICBmdW5jdGlvbiBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSkg
ewotICAgIHZhciBmb3VuZCA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF07Ci0gICAgaWYgKCFm
b3VuZCkgcmV0dXJuIG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIG53ID0gW107IGkgPCBjaGFu
Z2UudGV4dC5sZW5ndGg7ICsraSkKLSAgICAgIG53LnB1c2gocmVtb3ZlQ2xlYXJlZFNwYW5zKGZv
dW5kW2ldKSk7Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgLy8gVXNlZCBib3RoIHRvIHByb3Zp
ZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBhbmQsIHdoZW4KLSAgLy8gZGV0
YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5IGluIHR3bwotICBmdW5jdGlv
biBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXAsIGluc3RhbnRpYXRlU2VsKSB7Ci0g
ICAgZm9yICh2YXIgaSA9IDAsIGNvcHkgPSBbXTsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkgewot
ICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldOwotICAgICAgaWYgKGV2ZW50LnJhbmdlcykgewot
ICAgICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRl
ZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0K
LSAgICAgIHZhciBjaGFuZ2VzID0gZXZlbnQuY2hhbmdlcywgbmV3Q2hhbmdlcyA9IFtdOwotICAg
ICAgY29weS5wdXNoKHtjaGFuZ2VzOiBuZXdDaGFuZ2VzfSk7Ci0gICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGNoYW5nZXMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5n
ZXNbal0sIG07Ci0gICAgICAgIG5ld0NoYW5nZXMucHVzaCh7ZnJvbTogY2hhbmdlLmZyb20sIHRv
OiBjaGFuZ2UudG8sIHRleHQ6IGNoYW5nZS50ZXh0fSk7Ci0gICAgICAgIGlmIChuZXdHcm91cCkg
Zm9yICh2YXIgcHJvcCBpbiBjaGFuZ2UpIGlmIChtID0gcHJvcC5tYXRjaCgvXnNwYW5zXyhcZCsp
JC8pKSB7Ci0gICAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAt
MSkgewotICAgICAgICAgICAgbHN0KG5ld0NoYW5nZXMpW3Byb3BdID0gY2hhbmdlW3Byb3BdOwot
ICAgICAgICAgICAgZGVsZXRlIGNoYW5nZVtwcm9wXTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvcHk7Ci0gIH0KLQotICAvLyBSZWJhc2luZy9y
ZXNldHRpbmcgaGlzdG9yeSB0byBkZWFsIHdpdGggZXh0ZXJuYWxseS1zb3VyY2VkIGNoYW5nZXMK
LQotICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xlKHBvcywgZnJvbSwgdG8sIGRpZmYpIHsK
LSAgICBpZiAodG8gPCBwb3MubGluZSkgewotICAgICAgcG9zLmxpbmUgKz0gZGlmZjsKLSAgICB9
IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkgewotICAgICAgcG9zLmxpbmUgPSBmcm9tOwotICAg
ICAgcG9zLmNoID0gMDsKLSAgICB9Ci0gIH0KLQotICAvLyBUcmllcyB0byByZWJhc2UgYW4gYXJy
YXkgb2YgaGlzdG9yeSBldmVudHMgZ2l2ZW4gYSBjaGFuZ2UgaW4gdGhlCi0gIC8vIGRvY3VtZW50
LiBJZiB0aGUgY2hhbmdlIHRvdWNoZXMgdGhlIHNhbWUgbGluZXMgYXMgdGhlIGV2ZW50LCB0aGUK
LSAgLy8gZXZlbnQsIGFuZCBldmVyeXRoaW5nICdiZWhpbmQnIGl0LCBpcyBkaXNjYXJkZWQuIElm
IHRoZSBjaGFuZ2UgaXMKLSAgLy8gYmVmb3JlIHRoZSBldmVudCwgdGhlIGV2ZW50J3MgcG9zaXRp
b25zIGFyZSB1cGRhdGVkLiBVc2VzIGEKLSAgLy8gY29weS1vbi13cml0ZSBzY2hlbWUgZm9yIHRo
ZSBwb3NpdGlvbnMsIHRvIGF2b2lkIGhhdmluZyB0bwotICAvLyByZWFsbG9jYXRlIHRoZW0gYWxs
IG9uIGV2ZXJ5IHJlYmFzZSwgYnV0IGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aAotICAvLyBzaGFy
ZWQgcG9zaXRpb24gb2JqZWN0cyBiZWluZyB1bnNhZmVseSB1cGRhdGVkLgotICBmdW5jdGlvbiBy
ZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHN1YiA9IGFycmF5W2ldLCBv
ayA9IHRydWU7Ci0gICAgICBpZiAoc3ViLnJhbmdlcykgewotICAgICAgICBpZiAoIXN1Yi5jb3Bp
ZWQpIHsgc3ViID0gYXJyYXlbaV0gPSBzdWIuZGVlcENvcHkoKTsgc3ViLmNvcGllZCA9IHRydWU7
IH0KLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisrKSB7
Ci0gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwgZnJv
bSwgdG8sIGRpZmYpOwotICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdlc1tq
XS5oZWFkLCBmcm9tLCB0bywgZGlmZik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0g
ICAgICB9Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsgKytq
KSB7Ci0gICAgICAgIHZhciBjdXIgPSBzdWIuY2hhbmdlc1tqXTsKLSAgICAgICAgaWYgKHRvIDwg
Y3VyLmZyb20ubGluZSkgewotICAgICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUg
KyBkaWZmLCBjdXIuZnJvbS5jaCk7Ci0gICAgICAgICAgY3VyLnRvID0gUG9zKGN1ci50by5saW5l
ICsgZGlmZiwgY3VyLnRvLmNoKTsKLSAgICAgICAgfSBlbHNlIGlmIChmcm9tIDw9IGN1ci50by5s
aW5lKSB7Ci0gICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgaWYgKCFvaykgewotICAgICAgICBhcnJheS5zcGxpY2UoMCwgaSAr
IDEpOwotICAgICAgICBpID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBy
ZWJhc2VIaXN0KGhpc3QsIGNoYW5nZSkgewotICAgIHZhciBmcm9tID0gY2hhbmdlLmZyb20ubGlu
ZSwgdG8gPSBjaGFuZ2UudG8ubGluZSwgZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0byAt
IGZyb20pIC0gMTsKLSAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC5kb25lLCBmcm9tLCB0bywgZGlm
Zik7Ci0gICAgcmViYXNlSGlzdEFycmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7Ci0g
IH0KLQotICAvLyBFVkVOVCBVVElMSVRJRVMKLQotICAvLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCB3
ZSBzdGlsbCBzdXBwb3J0IGp1cmFzc2ljIElFIHZlcnNpb25zLCBzb21lCi0gIC8vIGNvbXBhdGli
aWxpdHkgd3JhcHBlcnMgYXJlIG5lZWRlZC4KLQotICB2YXIgZV9wcmV2ZW50RGVmYXVsdCA9IENv
ZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKGUpIHsKLSAgICBpZiAoZS5wcmV2
ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9
IGZhbHNlOwotICB9OwotICB2YXIgZV9zdG9wUHJvcGFnYXRpb24gPSBDb2RlTWlycm9yLmVfc3Rv
cFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oZSkgewotICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikg
ZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKLSAg
fTsKLSAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKLSAgICByZXR1cm4gZS5kZWZh
dWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVl
ID09IGZhbHNlOwotICB9Ci0gIHZhciBlX3N0b3AgPSBDb2RlTWlycm9yLmVfc3RvcCA9IGZ1bmN0
aW9uKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9OwotCi0g
IGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O30K
LSAgZnVuY3Rpb24gZV9idXR0b24oZSkgewotICAgIHZhciBiID0gZS53aGljaDsKLSAgICBpZiAo
YiA9PSBudWxsKSB7Ci0gICAgICBpZiAoZS5idXR0b24gJiAxKSBiID0gMTsKLSAgICAgIGVsc2Ug
aWYgKGUuYnV0dG9uICYgMikgYiA9IDM7Ci0gICAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDQpIGIg
PSAyOwotICAgIH0KLSAgICBpZiAobWFjICYmIGUuY3RybEtleSAmJiBiID09IDEpIGIgPSAzOwot
ICAgIHJldHVybiBiOwotICB9Ci0KLSAgLy8gRVZFTlQgSEFORExJTkcKLQotICAvLyBMaWdodHdl
aWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLAotICAv
LyByZWdpc3RlcmluZyBuYXRpdmUgRE9NIGhhbmRsZXJzLgotCi0gIHZhciBvbiA9IENvZGVNaXJy
b3Iub24gPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlLCBmKSB7Ci0gICAgaWYgKGVtaXR0ZXIuYWRk
RXZlbnRMaXN0ZW5lcikKLSAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBm
YWxzZSk7Ci0gICAgZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkKLSAgICAgIGVtaXR0ZXIu
YXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOwotICAgIGVsc2UgewotICAgICAgdmFyIG1hcCA9
IGVtaXR0ZXIuX2hhbmRsZXJzIHx8IChlbWl0dGVyLl9oYW5kbGVycyA9IHt9KTsKLSAgICAgIHZh
ciBhcnIgPSBtYXBbdHlwZV0gfHwgKG1hcFt0eXBlXSA9IFtdKTsKLSAgICAgIGFyci5wdXNoKGYp
OwotICAgIH0KLSAgfTsKLQotICB2YXIgb2ZmID0gQ29kZU1pcnJvci5vZmYgPSBmdW5jdGlvbihl
bWl0dGVyLCB0eXBlLCBmKSB7Ci0gICAgaWYgKGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcikK
LSAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7Ci0gICAg
ZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVudCkKLSAgICAgIGVtaXR0ZXIuZGV0YWNoRXZlbnQo
Im9uIiArIHR5cGUsIGYpOwotICAgIGVsc2UgewotICAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hh
bmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJzW3R5cGVdOwotICAgICAgaWYgKCFhcnIpIHJldHVy
bjsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKQotICAgICAgICBp
ZiAoYXJyW2ldID09IGYpIHsgYXJyLnNwbGljZShpLCAxKTsgYnJlYWs7IH0KLSAgICB9Ci0gIH07
Ci0KLSAgdmFyIHNpZ25hbCA9IENvZGVNaXJyb3Iuc2lnbmFsID0gZnVuY3Rpb24oZW1pdHRlciwg
dHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKLSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMg
JiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgaWYgKCFhcnIpIHJldHVybjsKLSAgICB2
YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGFycltpXS5hcHBseShudWxsLCBh
cmdzKTsKLSAgfTsKLQotICB2YXIgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7Ci0KLSAg
Ly8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBhdCBhIHBvaW50IHdoZXJlIHdlIGFy
ZSBpbiB0aGUKLSAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhh
bmRsZXIgdG8gc3RhcnQgY2FsbGluZwotICAvLyBvdGhlciBtZXRob2RzIG9uIHRoZSBlZGl0b3Is
IHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudAotICAvLyBzdGF0ZSBvciBzaW1wbHkg
bm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBlbi4KLSAgLy8gc2lnbmFsTGF0ZXIg
bG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzCi0gIC8v
IHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3IsIGlm
IG5vCi0gIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLgotICBm
dW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewotICAg
IHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsK
LSAgICBpZiAoIWFycikgcmV0dXJuOwotICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoYXJndW1lbnRzLCAyKSwgbGlzdDsKLSAgICBpZiAob3BlcmF0aW9uR3JvdXApIHsK
LSAgICAgIGxpc3QgPSBvcGVyYXRpb25Hcm91cC5kZWxheWVkQ2FsbGJhY2tzOwotICAgIH0gZWxz
ZSBpZiAob3JwaGFuRGVsYXllZENhbGxiYWNrcykgewotICAgICAgbGlzdCA9IG9ycGhhbkRlbGF5
ZWRDYWxsYmFja3M7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2Fs
bGJhY2tzID0gW107Ci0gICAgICBzZXRUaW1lb3V0KGZpcmVPcnBoYW5EZWxheWVkLCAwKTsKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gYm5kKGYpIHtyZXR1cm4gZnVuY3Rpb24oKXtmLmFwcGx5KG51bGws
IGFyZ3MpO307fTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkKLSAg
ICAgIGxpc3QucHVzaChibmQoYXJyW2ldKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBmaXJlT3JwaGFu
RGVsYXllZCgpIHsKLSAgICB2YXIgZGVsYXllZCA9IG9ycGhhbkRlbGF5ZWRDYWxsYmFja3M7Ci0g
ICAgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7Ci0gIH0KLQotICAvLyBUaGUgRE9N
IGV2ZW50cyB0aGF0IENvZGVNaXJyb3IgaGFuZGxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieQotICAv
LyByZWdpc3RlcmluZyBhIChub24tRE9NKSBoYW5kbGVyIG9uIHRoZSBlZGl0b3IgZm9yIHRoZSBl
dmVudCBuYW1lLAotICAvLyBhbmQgcHJldmVudERlZmF1bHQtaW5nIHRoZSBldmVudCBpbiB0aGF0
IGhhbmRsZXIuCi0gIGZ1bmN0aW9uIHNpZ25hbERPTUV2ZW50KGNtLCBlLCBvdmVycmlkZSkgewot
ICAgIGlmICh0eXBlb2YgZSA9PSAic3RyaW5nIikKLSAgICAgIGUgPSB7dHlwZTogZSwgcHJldmVu
dERlZmF1bHQ6IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9fTsK
LSAgICBzaWduYWwoY20sIG92ZXJyaWRlIHx8IGUudHlwZSwgY20sIGUpOwotICAgIHJldHVybiBl
X2RlZmF1bHRQcmV2ZW50ZWQoZSkgfHwgZS5jb2RlbWlycm9ySWdub3JlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pIHsKLSAgICB2YXIgYXJyID0gY20uX2hhbmRs
ZXJzICYmIGNtLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTsKLSAgICBpZiAoIWFycikgcmV0dXJu
OwotICAgIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5j
dXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0gW10pOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyLmxlbmd0aDsgKytpKSBpZiAoaW5kZXhPZihzZXQsIGFycltpXSkgPT0gLTEpCi0gICAg
ICBzZXQucHVzaChhcnJbaV0pOworICAgICAgeyBkaXN0ICs9IGFmdGVyLnRleHRDb250ZW50Lmxl
bmd0aCB9CiAgIH0KLQotICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHsKLSAg
ICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07
Ci0gICAgcmV0dXJuIGFyciAmJiBhcnIubGVuZ3RoID4gMDsKLSAgfQotCi0gIC8vIEFkZCBvbiBh
bmQgb2ZmIG1ldGhvZHMgdG8gYSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSwgdG8gbWFrZQotICAv
LyByZWdpc3RlcmluZyBldmVudHMgb24gc3VjaCBvYmplY3RzIG1vcmUgY29udmVuaWVudC4KLSAg
ZnVuY3Rpb24gZXZlbnRNaXhpbihjdG9yKSB7Ci0gICAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5j
dGlvbih0eXBlLCBmKSB7b24odGhpcywgdHlwZSwgZik7fTsKLSAgICBjdG9yLnByb3RvdHlwZS5v
ZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5cGUsIGYpO307Ci0gIH0KLQotICAv
LyBNSVNDIFVUSUxJVElFUwotCi0gIC8vIE51bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xs
ZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xsYmFyCi0gIHZhciBzY3JvbGxlckdhcCA9IDMwOwot
Ci0gIC8vIFJldHVybmVkIG9yIHRocm93biBieSB2YXJpb3VzIHByb3RvY29scyB0byBzaWduYWwg
J0knbSBub3QKLSAgLy8gaGFuZGxpbmcgdGhpcycuCi0gIHZhciBQYXNzID0gQ29kZU1pcnJvci5Q
YXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiAiQ29kZU1pcnJvci5QYXNzIjt9fTsK
LQotICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHMK
LSAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Njcm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3Jp
Z2luOiAiKm1vdXNlIn0sIHNlbF9tb3ZlID0ge29yaWdpbjogIittb3ZlIn07Ci0KLSAgZnVuY3Rp
b24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9Ci0gIERlbGF5ZWQucHJvdG90eXBlLnNldCA9
IGZ1bmN0aW9uKG1zLCBmKSB7Ci0gICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpOwotICAgIHRoaXMu
aWQgPSBzZXRUaW1lb3V0KGYsIG1zKTsKLSAgfTsKLQotICAvLyBDb3VudHMgdGhlIGNvbHVtbiBv
ZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KLSAgLy8gVXNlZCBt
b3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KLSAgdmFyIGNvdW50Q29sdW1uID0gQ29kZU1pcnJv
ci5jb3VudENvbHVtbiA9IGZ1bmN0aW9uKHN0cmluZywgZW5kLCB0YWJTaXplLCBzdGFydEluZGV4
LCBzdGFydFZhbHVlKSB7Ci0gICAgaWYgKGVuZCA9PSBudWxsKSB7Ci0gICAgICBlbmQgPSBzdHJp
bmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pOwotICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3Ry
aW5nLmxlbmd0aDsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9
IHN0YXJ0VmFsdWUgfHwgMDs7KSB7Ci0gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9m
KCJcdCIsIGkpOwotICAgICAgaWYgKG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKQotICAg
ICAgICByZXR1cm4gbiArIChlbmQgLSBpKTsKLSAgICAgIG4gKz0gbmV4dFRhYiAtIGk7Ci0gICAg
ICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwotICAgICAgaSA9IG5leHRUYWIgKyAxOwot
ICAgIH0KLSAgfTsKLQotICAvLyBUaGUgaW52ZXJzZSBvZiBjb3VudENvbHVtbiAtLSBmaW5kIHRo
ZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0bwotICAvLyBhIHBhcnRpY3VsYXIgY29sdW1uLgot
ICBmdW5jdGlvbiBmaW5kQ29sdW1uKHN0cmluZywgZ29hbCwgdGFiU2l6ZSkgewotICAgIGZvciAo
dmFyIHBvcyA9IDAsIGNvbCA9IDA7OykgewotICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5k
ZXhPZigiXHQiLCBwb3MpOwotICAgICAgaWYgKG5leHRUYWIgPT0gLTEpIG5leHRUYWIgPSBzdHJp
bmcubGVuZ3RoOwotICAgICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zOwotICAgICAgaWYg
KG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpCi0gICAg
ICAgIHJldHVybiBwb3MgKyBNYXRoLm1pbihza2lwcGVkLCBnb2FsIC0gY29sKTsKLSAgICAgIGNv
bCArPSBuZXh0VGFiIC0gcG9zOwotICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6
ZSk7Ci0gICAgICBwb3MgPSBuZXh0VGFiICsgMTsKLSAgICAgIGlmIChjb2wgPj0gZ29hbCkgcmV0
dXJuIHBvczsKLSAgICB9Ci0gIH0KLQotICB2YXIgc3BhY2VTdHJzID0gWyIiXTsKLSAgZnVuY3Rp
b24gc3BhY2VTdHIobikgewotICAgIHdoaWxlIChzcGFjZVN0cnMubGVuZ3RoIDw9IG4pCi0gICAg
ICBzcGFjZVN0cnMucHVzaChsc3Qoc3BhY2VTdHJzKSArICIgIik7Ci0gICAgcmV0dXJuIHNwYWNl
U3Ryc1tuXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxzdChhcnIpIHsgcmV0dXJuIGFyclthcnIubGVu
Z3RoLTFdOyB9Ci0KLSAgdmFyIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNl
bGVjdCgpOyB9OwotICBpZiAoaW9zKSAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEg
YnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KLSAgICBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9u
KG5vZGUpIHsgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7IG5vZGUuc2VsZWN0aW9uRW5kID0gbm9k
ZS52YWx1ZS5sZW5ndGg7IH07Ci0gIGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3Vz
IElFMTAgZXJyb3JzCi0gICAgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IHRyeSB7IG5v
ZGUuc2VsZWN0KCk7IH0gY2F0Y2goX2UpIHt9IH07Ci0KLSAgZnVuY3Rpb24gaW5kZXhPZihhcnJh
eSwgZWx0KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkKLSAg
ICAgIGlmIChhcnJheVtpXSA9PSBlbHQpIHJldHVybiBpOwotICAgIHJldHVybiAtMTsKLSAgfQot
ICBmdW5jdGlvbiBtYXAoYXJyYXksIGYpIHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7
Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotCi0gIGZ1bmN0aW9uIG5vdGhpbmcoKSB7fQotCi0gIGZ1
bmN0aW9uIGNyZWF0ZU9iaihiYXNlLCBwcm9wcykgewotICAgIHZhciBpbnN0OwotICAgIGlmIChP
YmplY3QuY3JlYXRlKSB7Ci0gICAgICBpbnN0ID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKyAgZm9y
ICh2YXIgYmVmb3JlID0gdG9wTm9kZS5wcmV2aW91c1NpYmxpbmcsIGRpc3QkMSA9IG9mZnNldDsg
YmVmb3JlOyBiZWZvcmUgPSBiZWZvcmUucHJldmlvdXNTaWJsaW5nKSB7CisgICAgZm91bmQgPSBm
aW5kKGJlZm9yZSwgYmVmb3JlLmZpcnN0Q2hpbGQsIC0xKQorICAgIGlmIChmb3VuZCkKKyAgICAg
IHsgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggKyBkaXN0JDEpLCBiYWQp
IH0KKyAgICBlbHNlCisgICAgICB7IGRpc3QkMSArPSBiZWZvcmUudGV4dENvbnRlbnQubGVuZ3Ro
IH0KKyAgfQorfQorCisvLyBURVhUQVJFQSBJTlBVVCBTVFlMRQorCit2YXIgVGV4dGFyZWFJbnB1
dCA9IGZ1bmN0aW9uKGNtKSB7CisgIHRoaXMuY20gPSBjbQorICAvLyBTZWUgaW5wdXQucG9sbCBh
bmQgaW5wdXQucmVzZXQKKyAgdGhpcy5wcmV2SW5wdXQgPSAiIgorCisgIC8vIEZsYWcgdGhhdCBp
bmRpY2F0ZXMgd2hldGhlciB3ZSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyIHJlYWwgc29vbgorICAv
LyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBh
cmUKKyAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS4KKyAgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNl
CisgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xsZXIKKyAgdGhpcy5wb2xs
aW5nID0gbmV3IERlbGF5ZWQoKQorICAvLyBUcmFja3Mgd2hlbiBpbnB1dC5yZXNldCBoYXMgcHVu
dGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0CisgIC8vIHN0cmluZyBpbnRvIHRoZSB0ZXh0YXJl
YSBpbnN0ZWFkIG9mIHRoZSBmdWxsIHNlbGVjdGlvbi4KKyAgdGhpcy5pbmFjY3VyYXRlU2VsZWN0
aW9uID0gZmFsc2UKKyAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCBJRSBpc3N1ZSB3aXRoIHNlbGVj
dGlvbiBiZWluZyBmb3Jnb3R0ZW4gd2hlbiBmb2N1cyBtb3ZlcyBhd2F5IGZyb20gdGV4dGFyZWEK
KyAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZQorICB0aGlzLmNvbXBvc2luZyA9IG51bGwKK307
CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoZGlzcGxheSkgewor
ICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gdGhpcy5j
bQorCisgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQorICB2YXIgZGl2ID0gdGhp
cy53cmFwcGVyID0gaGlkZGVuVGV4dGFyZWEoKQorICAvLyBUaGUgc2VtaWhpZGRlbiB0ZXh0YXJl
YSB0aGF0IGlzIGZvY3VzZWQgd2hlbiB0aGUgZWRpdG9yIGlzCisgIC8vIGZvY3VzZWQsIGFuZCBy
ZWNlaXZlcyBpbnB1dC4KKyAgdmFyIHRlID0gdGhpcy50ZXh0YXJlYSA9IGRpdi5maXJzdENoaWxk
CisgIGRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUoZGl2LCBkaXNwbGF5LndyYXBwZXIuZmly
c3RDaGlsZCkKKworICAvLyBOZWVkZWQgdG8gaGlkZSBiaWcgYmx1ZSBibGlua2luZyBjdXJzb3Ig
b24gTW9iaWxlIFNhZmFyaSAoZG9lc24ndCBzZWVtIHRvIHdvcmsgaW4gaU9TIDggYW55bW9yZSkK
KyAgaWYgKGlvcykgeyB0ZS5zdHlsZS53aWR0aCA9ICIwcHgiIH0KKworICBvbih0ZSwgImlucHV0
IiwgZnVuY3Rpb24gKCkgeworICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgdGhpcyQx
Lmhhc1NlbGVjdGlvbikgeyB0aGlzJDEuaGFzU2VsZWN0aW9uID0gbnVsbCB9CisgICAgaW5wdXQu
cG9sbCgpCisgIH0pCisKKyAgb24odGUsICJwYXN0ZSIsIGZ1bmN0aW9uIChlKSB7CisgICAgaWYg
KHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBoYW5kbGVQYXN0ZShlLCBjbSkpIHsgcmV0dXJuIH0K
KworICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlCisgICAgaW5wdXQuZmFzdFBvbGwo
KQorICB9KQorCisgIGZ1bmN0aW9uIHByZXBhcmVDb3B5Q3V0KGUpIHsKKyAgICBpZiAoc2lnbmFs
RE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9CisgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVk
KCkpIHsKKyAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiBmYWxzZSwgdGV4dDogY20uZ2V0
U2VsZWN0aW9ucygpfSkKKyAgICAgIGlmIChpbnB1dC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7Cisg
ICAgICAgIGlucHV0LnByZXZJbnB1dCA9ICIiCisgICAgICAgIGlucHV0LmluYWNjdXJhdGVTZWxl
Y3Rpb24gPSBmYWxzZQorICAgICAgICB0ZS52YWx1ZSA9IGxhc3RDb3BpZWQudGV4dC5qb2luKCJc
biIpCisgICAgICAgIHNlbGVjdElucHV0KHRlKQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWNt
Lm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7CisgICAgICByZXR1cm4KICAgICB9IGVsc2Ugewot
ICAgICAgbm90aGluZy5wcm90b3R5cGUgPSBiYXNlOwotICAgICAgaW5zdCA9IG5ldyBub3RoaW5n
KCk7Ci0gICAgfQotICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7Ci0gICAgcmV0
dXJuIGluc3Q7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gY29weU9iaihvYmosIHRhcmdldCwgb3Zlcndy
aXRlKSB7Ci0gICAgaWYgKCF0YXJnZXQpIHRhcmdldCA9IHt9OwotICAgIGZvciAodmFyIHByb3Ag
aW4gb2JqKQotICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAob3ZlcndyaXRl
ICE9PSBmYWxzZSB8fCAhdGFyZ2V0Lmhhc093blByb3BlcnR5KHByb3ApKSkKLSAgICAgICAgdGFy
Z2V0W3Byb3BdID0gb2JqW3Byb3BdOwotICAgIHJldHVybiB0YXJnZXQ7Ci0gIH0KLQotICBmdW5j
dGlvbiBiaW5kKGYpIHsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cywgMSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkobnVs
bCwgYXJncyk7fTsKLSAgfQotCi0gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9b
XHUwMGRmXHUwNTg3XHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTMwNDAtXHUzMDlmXHUzMGEw
LVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vOwotICB2YXIg
aXNXb3JkQ2hhckJhc2ljID0gQ29kZU1pcnJvci5pc1dvcmRDaGFyID0gZnVuY3Rpb24oY2gpIHsK
LSAgICByZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+ICJceDgwIiAmJgotICAgICAgKGNoLnRv
VXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJSVNpbmdsZUNhc2VXb3Jk
Q2hhci50ZXN0KGNoKSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gsIGhlbHBlcikg
ewotICAgIGlmICghaGVscGVyKSByZXR1cm4gaXNXb3JkQ2hhckJhc2ljKGNoKTsKLSAgICBpZiAo
aGVscGVyLnNvdXJjZS5pbmRleE9mKCJcXHciKSA+IC0xICYmIGlzV29yZENoYXJCYXNpYyhjaCkp
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBoZWxwZXIudGVzdChjaCk7Ci0gIH0KLQotICBmdW5j
dGlvbiBpc0VtcHR5KG9iaikgewotICAgIGZvciAodmFyIG4gaW4gb2JqKSBpZiAob2JqLmhhc093
blByb3BlcnR5KG4pICYmIG9ialtuXSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwot
ICB9Ci0KLSAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4gQSBzZXJpZXMgb2YgYSBu
b24tZXh0ZW5kaW5nIGNoYXIgKwotICAvLyBhbnkgbnVtYmVyIG9mIGV4dGVuZGluZyBjaGFycyBp
cyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyCi0gIC8vIGFzIGVkaXRpbmcgYW5kIG1l
YXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsCi0gIC8vIHNp
bmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRyZWF0IG90aGVyIGNvbmZpZ3Vy
YXRpb25zCi0gIC8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAuCi0gIHZhciBleHRlbmRpbmdD
aGFycyA9IC9bXHUwMzAwLVx1MDM2Zlx1MDQ4My1cdTA0ODlcdTA1OTEtXHUwNWJkXHUwNWJmXHUw
NWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNjEwLVx1MDYxYVx1MDY0Yi1cdTA2NWVcdTA2
NzBcdTA2ZDYtXHUwNmRjXHUwNmRlLVx1MDZlNFx1MDZlN1x1MDZlOFx1MDZlYS1cdTA2ZWRcdTA3
MTFcdTA3MzAtXHUwNzRhXHUwN2E2LVx1MDdiMFx1MDdlYi1cdTA3ZjNcdTA4MTYtXHUwODE5XHUw
ODFiLVx1MDgyM1x1MDgyNS1cdTA4MjdcdTA4MjktXHUwODJkXHUwOTAwLVx1MDkwMlx1MDkzY1x1
MDk0MS1cdTA5NDhcdTA5NGRcdTA5NTEtXHUwOTU1XHUwOTYyXHUwOTYzXHUwOTgxXHUwOWJjXHUw
OWJlXHUwOWMxLVx1MDljNFx1MDljZFx1MDlkN1x1MDllMlx1MDllM1x1MGEwMVx1MGEwMlx1MGEz
Y1x1MGE0MVx1MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1cdTBhNGRcdTBhNTFcdTBhNzBcdTBhNzFc
dTBhNzVcdTBhODFcdTBhODJcdTBhYmNcdTBhYzEtXHUwYWM1XHUwYWM3XHUwYWM4XHUwYWNkXHUw
YWUyXHUwYWUzXHUwYjAxXHUwYjNjXHUwYjNlXHUwYjNmXHUwYjQxLVx1MGI0NFx1MGI0ZFx1MGI1
Nlx1MGI1N1x1MGI2Mlx1MGI2M1x1MGI4Mlx1MGJiZVx1MGJjMFx1MGJjZFx1MGJkN1x1MGMzZS1c
dTBjNDBcdTBjNDYtXHUwYzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM2Mlx1MGM2M1x1
MGNiY1x1MGNiZlx1MGNjMlx1MGNjNlx1MGNjY1x1MGNjZFx1MGNkNVx1MGNkNlx1MGNlMlx1MGNl
M1x1MGQzZVx1MGQ0MS1cdTBkNDRcdTBkNGRcdTBkNTdcdTBkNjJcdTBkNjNcdTBkY2FcdTBkY2Zc
dTBkZDItXHUwZGQ0XHUwZGQ2XHUwZGRmXHUwZTMxXHUwZTM0LVx1MGUzYVx1MGU0Ny1cdTBlNGVc
dTBlYjFcdTBlYjQtXHUwZWI5XHUwZWJiXHUwZWJjXHUwZWM4LVx1MGVjZFx1MGYxOFx1MGYxOVx1
MGYzNVx1MGYzN1x1MGYzOVx1MGY3MS1cdTBmN2VcdTBmODAtXHUwZjg0XHUwZjg2XHUwZjg3XHUw
ZjkwLVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMmQtXHUxMDMwXHUxMDMyLVx1MTAzN1x1
MTAzOVx1MTAzYVx1MTAzZFx1MTAzZVx1MTA1OFx1MTA1OVx1MTA1ZS1cdTEwNjBcdTEwNzEtXHUx
MDc0XHUxMDgyXHUxMDg1XHUxMDg2XHUxMDhkXHUxMDlkXHUxMzVmXHUxNzEyLVx1MTcxNFx1MTcz
Mi1cdTE3MzRcdTE3NTJcdTE3NTNcdTE3NzJcdTE3NzNcdTE3YjctXHUxN2JkXHUxN2M2XHUxN2M5
LVx1MTdkM1x1MTdkZFx1MTgwYi1cdTE4MGRcdTE4YTlcdTE5MjAtXHUxOTIyXHUxOTI3XHUxOTI4
XHUxOTMyXHUxOTM5LVx1MTkzYlx1MWExN1x1MWExOFx1MWE1Nlx1MWE1OC1cdTFhNWVcdTFhNjBc
dTFhNjJcdTFhNjUtXHUxYTZjXHUxYTczLVx1MWE3Y1x1MWE3Zlx1MWIwMC1cdTFiMDNcdTFiMzRc
dTFiMzYtXHUxYjNhXHUxYjNjXHUxYjQyXHUxYjZiLVx1MWI3M1x1MWI4MFx1MWI4MVx1MWJhMi1c
dTFiYTVcdTFiYThcdTFiYTlcdTFjMmMtXHUxYzMzXHUxYzM2XHUxYzM3XHUxY2QwLVx1MWNkMlx1
MWNkNC1cdTFjZTBcdTFjZTItXHUxY2U4XHUxY2VkXHUxZGMwLVx1MWRlNlx1MWRmZC1cdTFkZmZc
dTIwMGNcdTIwMGRcdTIwZDAtXHUyMGYwXHUyY2VmLVx1MmNmMVx1MmRlMC1cdTJkZmZcdTMwMmEt
XHUzMDJmXHUzMDk5XHUzMDlhXHVhNjZmLVx1YTY3Mlx1YTY3Y1x1YTY3ZFx1YTZmMFx1YTZmMVx1
YTgwMlx1YTgwNlx1YTgwYlx1YTgyNVx1YTgyNlx1YThjNFx1YThlMC1cdWE4ZjFcdWE5MjYtXHVh
OTJkXHVhOTQ3LVx1YTk1MVx1YTk4MC1cdWE5ODJcdWE5YjNcdWE5YjYtXHVhOWI5XHVhOWJjXHVh
YTI5LVx1YWEyZVx1YWEzMVx1YWEzMlx1YWEzNVx1YWEzNlx1YWE0M1x1YWE0Y1x1YWFiMFx1YWFi
Mi1cdWFhYjRcdWFhYjdcdWFhYjhcdWFhYmVcdWFhYmZcdWFhYzFcdWFiZTVcdWFiZThcdWFiZWRc
dWRjMDAtXHVkZmZmXHVmYjFlXHVmZTAwLVx1ZmUwZlx1ZmUyMC1cdWZlMjZcdWZmOWVcdWZmOWZd
LzsKLSAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJldHVybiBjaC5jaGFyQ29kZUF0
KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKTsgfQotCi0gIC8vIERPTSBVVElM
SVRJRVMKLQotICBmdW5jdGlvbiBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7
Ci0gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7Ci0gICAgaWYgKGNsYXNz
TmFtZSkgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgaWYgKHN0eWxlKSBlLnN0eWxlLmNz
c1RleHQgPSBzdHlsZTsKLSAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT0gInN0cmluZyIpIGUuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOwotICAgIGVsc2UgaWYg
KGNvbnRlbnQpIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7ICsraSkgZS5hcHBl
bmRDaGlsZChjb250ZW50W2ldKTsKLSAgICByZXR1cm4gZTsKLSAgfQotCi0gIHZhciByYW5nZTsK
LSAgaWYgKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0
LCBlbmQsIGVuZE5vZGUpIHsKLSAgICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgci5zZXRFbmQoZW5kTm9kZSB8fCBub2RlLCBlbmQpOwotICAgIHIuc2V0U3RhcnQobm9kZSwg
c3RhcnQpOwotICAgIHJldHVybiByOwotICB9OwotICBlbHNlIHJhbmdlID0gZnVuY3Rpb24obm9k
ZSwgc3RhcnQsIGVuZCkgewotICAgIHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFu
Z2UoKTsKLSAgICB0cnkgeyByLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUucGFyZW50Tm9kZSk7IH0K
LSAgICBjYXRjaChlKSB7IHJldHVybiByOyB9Ci0gICAgci5jb2xsYXBzZSh0cnVlKTsKLSAgICBy
Lm1vdmVFbmQoImNoYXJhY3RlciIsIGVuZCk7Ci0gICAgci5tb3ZlU3RhcnQoImNoYXJhY3RlciIs
IHN0YXJ0KTsKLSAgICByZXR1cm4gcjsKLSAgfTsKLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJl
bihlKSB7Ci0gICAgZm9yICh2YXIgY291bnQgPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBjb3VudCA+
IDA7IC0tY291bnQpCi0gICAgICBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Ci0gICAgcmV0
dXJuIGU7Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUp
IHsKLSAgICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKLSAg
fQotCi0gIHZhciBjb250YWlucyA9IENvZGVNaXJyb3IuY29udGFpbnMgPSBmdW5jdGlvbihwYXJl
bnQsIGNoaWxkKSB7Ci0gICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpIC8vIEFuZHJvaWQgYnJv
d3NlciBhbHdheXMgcmV0dXJucyBmYWxzZSB3aGVuIGNoaWxkIGlzIGEgdGV4dG5vZGUKLSAgICAg
IGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZTsKLSAgICBpZiAocGFyZW50LmNvbnRhaW5zKQotICAg
ICAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7Ci0gICAgZG8gewotICAgICAgaWYgKGNo
aWxkLm5vZGVUeXBlID09IDExKSBjaGlsZCA9IGNoaWxkLmhvc3Q7Ci0gICAgICBpZiAoY2hpbGQg
PT0gcGFyZW50KSByZXR1cm4gdHJ1ZTsKLSAgICB9IHdoaWxlIChjaGlsZCA9IGNoaWxkLnBhcmVu
dE5vZGUpOwotICB9OwotCi0gIGZ1bmN0aW9uIGFjdGl2ZUVsdCgpIHsKLSAgICB2YXIgYWN0aXZl
RWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Ci0gICAgd2hpbGUgKGFjdGl2ZUVsZW1l
bnQgJiYgYWN0aXZlRWxlbWVudC5yb290ICYmIGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVt
ZW50KQotICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVt
ZW50OwotICAgIHJldHVybiBhY3RpdmVFbGVtZW50OwotICB9Ci0gIC8vIE9sZGVyIHZlcnNpb25z
IG9mIElFIHRocm93cyB1bnNwZWNpZmllZCBlcnJvciB3aGVuIHRvdWNoaW5nCi0gIC8vIGRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQgaW4gc29tZSBjYXNlcyAoZHVyaW5nIGxvYWRpbmcsIGluIGlmcmFt
ZSkKLSAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgYWN0aXZlRWx0ID0gZnVuY3Rpb24oKSB7
Ci0gICAgdHJ5IHsgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0KLSAgICBjYXRjaChl
KSB7IHJldHVybiBkb2N1bWVudC5ib2R5OyB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gY2xhc3NUZXN0
KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpXFxz
KiIpOyB9Ci0gIHZhciBybUNsYXNzID0gQ29kZU1pcnJvci5ybUNsYXNzID0gZnVuY3Rpb24obm9k
ZSwgY2xzKSB7Ci0gICAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTsKLSAgICB2YXIgbWF0
Y2ggPSBjbGFzc1Rlc3QoY2xzKS5leGVjKGN1cnJlbnQpOwotICAgIGlmIChtYXRjaCkgewotICAg
ICAgdmFyIGFmdGVyID0gY3VycmVudC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0
aCk7Ci0gICAgICBub2RlLmNsYXNzTmFtZSA9IGN1cnJlbnQuc2xpY2UoMCwgbWF0Y2guaW5kZXgp
ICsgKGFmdGVyID8gbWF0Y2hbMV0gKyBhZnRlciA6ICIiKTsKLSAgICB9Ci0gIH07Ci0gIHZhciBh
ZGRDbGFzcyA9IENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHsKLSAg
ICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lOwotICAgIGlmICghY2xhc3NUZXN0KGNscyku
dGVzdChjdXJyZW50KSkgbm9kZS5jbGFzc05hbWUgKz0gKGN1cnJlbnQgPyAiICIgOiAiIikgKyBj
bHM7Ci0gIH07Ci0gIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGEsIGIpIHsKLSAgICB2YXIgYXMgPSBh
LnNwbGl0KCIgIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykKLSAg
ICAgIGlmIChhc1tpXSAmJiAhY2xhc3NUZXN0KGFzW2ldKS50ZXN0KGIpKSBiICs9ICIgIiArIGFz
W2ldOwotICAgIHJldHVybiBiOwotICB9Ci0KLSAgLy8gV0lORE9XLVdJREUgRVZFTlRTCi0KLSAg
Ly8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIGNhcmVmdWxseSwgYmVjYXVzZSBuYWl2ZWx5IHJlZ2lz
dGVyaW5nIGEKLSAgLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2lsbCBjYXVzZSB0aGUgZWRp
dG9ycyB0byBuZXZlciBiZQotICAvLyBnYXJiYWdlIGNvbGxlY3RlZC4KLQotICBmdW5jdGlvbiBm
b3JFYWNoQ29kZU1pcnJvcihmKSB7Ci0gICAgaWYgKCFkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUpIHJldHVybjsKLSAgICB2YXIgYnlDbGFzcyA9IGRvY3VtZW50LmJvZHkuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgiQ29kZU1pcnJvciIpOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYnlDbGFzcy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIGNtID0gYnlDbGFzc1tpXS5Db2Rl
TWlycm9yOwotICAgICAgaWYgKGNtKSBmKGNtKTsKLSAgICB9Ci0gIH0KLQotICB2YXIgZ2xvYmFs
c1JlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgZnVuY3Rpb24gZW5zdXJlR2xvYmFsSGFuZGxlcnMoKSB7
Ci0gICAgaWYgKGdsb2JhbHNSZWdpc3RlcmVkKSByZXR1cm47Ci0gICAgcmVnaXN0ZXJHbG9iYWxI
YW5kbGVycygpOwotICAgIGdsb2JhbHNSZWdpc3RlcmVkID0gdHJ1ZTsKLSAgfQotICBmdW5jdGlv
biByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCkgewotICAgIC8vIFdoZW4gdGhlIHdpbmRvdyByZXNp
emVzLCB3ZSBuZWVkIHRvIHJlZnJlc2ggYWN0aXZlIGVkaXRvcnMuCi0gICAgdmFyIHJlc2l6ZVRp
bWVyOwotICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHJl
c2l6ZVRpbWVyID09IG51bGwpIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsK
LSAgICAgICAgcmVzaXplVGltZXIgPSBudWxsOwotICAgICAgICBmb3JFYWNoQ29kZU1pcnJvcihv
blJlc2l6ZSk7Ci0gICAgICB9LCAxMDApOwotICAgIH0pOwotICAgIC8vIFdoZW4gdGhlIHdpbmRv
dyBsb3NlcyBmb2N1cywgd2Ugd2FudCB0byBzaG93IHRoZSBlZGl0b3IgYXMgYmx1cnJlZAotICAg
IG9uKHdpbmRvdywgImJsdXIiLCBmdW5jdGlvbigpIHsKLSAgICAgIGZvckVhY2hDb2RlTWlycm9y
KG9uQmx1cik7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBGRUFUVVJFIERFVEVDVElPTgotCi0gIC8v
IERldGVjdCBkcmFnLWFuZC1kcm9wCi0gIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewot
ICAgIC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJ
RTYtOCwgYnV0IEkKLSAgICAvLyBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuCi0gICAgaWYg
KGllICYmIGllX3ZlcnNpb24gPCA5KSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIGRpdiA9IGVsdCgn
ZGl2Jyk7Ci0gICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRp
djsKLSAgfSgpOwotCi0gIHZhciB6d3NwU3VwcG9ydGVkOwotICBmdW5jdGlvbiB6ZXJvV2lkdGhF
bGVtZW50KG1lYXN1cmUpIHsKLSAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7Ci0gICAg
ICB2YXIgdGVzdCA9IGVsdCgic3BhbiIsICJcdTIwMGIiKTsKLSAgICAgIHJlbW92ZUNoaWxkcmVu
QW5kQWRkKG1lYXN1cmUsIGVsdCgic3BhbiIsIFt0ZXN0LCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgieCIpXSkpOwotICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0g
MCkKLSAgICAgICAgendzcFN1cHBvcnRlZCA9IHRlc3Qub2Zmc2V0V2lkdGggPD0gMSAmJiB0ZXN0
Lm9mZnNldEhlaWdodCA+IDIgJiYgIShpZSAmJiBpZV92ZXJzaW9uIDwgOCk7Ci0gICAgfQotICAg
IHZhciBub2RlID0gendzcFN1cHBvcnRlZCA/IGVsdCgic3BhbiIsICJcdTIwMGIiKSA6Ci0gICAg
ICBlbHQoInNwYW4iLCAiXHUwMGEwIiwgbnVsbCwgImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lk
dGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4Iik7Ci0gICAgbm9kZS5zZXRBdHRyaWJ1dGUoImNt
LXRleHQiLCAiIik7Ci0gICAgcmV0dXJuIG5vZGU7Ci0gIH0KLQotICAvLyBGZWF0dXJlLWRldGVj
dCBJRSdzIGNydW1teSBjbGllbnQgcmVjdCByZXBvcnRpbmcgZm9yIGJpZGkgdGV4dAotICB2YXIg
YmFkQmlkaVJlY3RzOwotICBmdW5jdGlvbiBoYXNCYWRCaWRpUmVjdHMobWVhc3VyZSkgewotICAg
IGlmIChiYWRCaWRpUmVjdHMgIT0gbnVsbCkgcmV0dXJuIGJhZEJpZGlSZWN0czsKLSAgICB2YXIg
dHh0ID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIkFcdTA2MmVBIikpOwotICAgIHZhciByMCA9IHJhbmdlKHR4dCwgMCwgMSkuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7Ci0gICAgaWYgKCFyMCB8fCByMC5sZWZ0ID09IHIwLnJpZ2h0KSByZXR1
cm4gZmFsc2U7IC8vIFNhZmFyaSByZXR1cm5zIG51bGwgaW4gc29tZSBjYXNlcyAoIzI3ODApCi0g
ICAgdmFyIHIxID0gcmFuZ2UodHh0LCAxLCAyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAg
ICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0IC0gcjAucmlnaHQgPCAzKTsKLSAgfQot
Ci0gIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBw
cm92aWRlIGFuCi0gIC8vIGFsdGVybmF0aXZlIHdheSB0byBzcGxpdCBsaW5lcy4KLSAgdmFyIHNw
bGl0TGluZXNBdXRvID0gQ29kZU1pcnJvci5zcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4v
KS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewotICAgIHZhciBwb3MgPSAwLCByZXN1
bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7Ci0gICAgd2hpbGUgKHBvcyA8PSBsKSB7Ci0gICAg
ICB2YXIgbmwgPSBzdHJpbmcuaW5kZXhPZigiXG4iLCBwb3MpOwotICAgICAgaWYgKG5sID09IC0x
KSBubCA9IHN0cmluZy5sZW5ndGg7Ci0gICAgICB2YXIgbGluZSA9IHN0cmluZy5zbGljZShwb3Ms
IHN0cmluZy5jaGFyQXQobmwgLSAxKSA9PSAiXHIiID8gbmwgLSAxIDogbmwpOwotICAgICAgdmFy
IHJ0ID0gbGluZS5pbmRleE9mKCJcciIpOwotICAgICAgaWYgKHJ0ICE9IC0xKSB7Ci0gICAgICAg
IHJlc3VsdC5wdXNoKGxpbmUuc2xpY2UoMCwgcnQpKTsKLSAgICAgICAgcG9zICs9IHJ0ICsgMTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUpOwotICAgICAgICBwb3Mg
PSBubCArIDE7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gOiBmdW5j
dGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcuc3BsaXQoL1xyXG4/fFxuLyk7fTsKLQotICB2YXIg
aGFzU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGZ1bmN0aW9uKHRlKSB7Ci0gICAg
dHJ5IHsgcmV0dXJuIHRlLnNlbGVjdGlvblN0YXJ0ICE9IHRlLnNlbGVjdGlvbkVuZDsgfQotICAg
IGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gIH0gOiBmdW5jdGlvbih0ZSkgewotICAgIHRy
eSB7dmFyIHJhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9
Ci0gICAgY2F0Y2goZSkge30KLSAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQo
KSAhPSB0ZSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRz
KCJTdGFydFRvRW5kIiwgcmFuZ2UpICE9IDA7Ci0gIH07Ci0KLSAgdmFyIGhhc0NvcHlFdmVudCA9
IChmdW5jdGlvbigpIHsKLSAgICB2YXIgZSA9IGVsdCgiZGl2Iik7Ci0gICAgaWYgKCJvbmNvcHki
IGluIGUpIHJldHVybiB0cnVlOwotICAgIGUuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCAicmV0dXJu
OyIpOwotICAgIHJldHVybiB0eXBlb2YgZS5vbmNvcHkgPT0gImZ1bmN0aW9uIjsKLSAgfSkoKTsK
LQotICB2YXIgYmFkWm9vbWVkUmVjdHMgPSBudWxsOwotICBmdW5jdGlvbiBoYXNCYWRab29tZWRS
ZWN0cyhtZWFzdXJlKSB7Ci0gICAgaWYgKGJhZFpvb21lZFJlY3RzICE9IG51bGwpIHJldHVybiBi
YWRab29tZWRSZWN0czsKLSAgICB2YXIgbm9kZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1
cmUsIGVsdCgic3BhbiIsICJ4IikpOwotICAgIHZhciBub3JtYWwgPSBub2RlLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgIHZhciBmcm9tUmFuZ2UgPSByYW5nZShub2RlLCAwLCAxKS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICByZXR1cm4gYmFkWm9vbWVkUmVjdHMgPSBNYXRoLmFi
cyhub3JtYWwubGVmdCAtIGZyb21SYW5nZS5sZWZ0KSA+IDE7Ci0gIH0KLQotICAvLyBLRVkgTkFN
RVMKLQotICB2YXIga2V5TmFtZXMgPSB7MzogIkVudGVyIiwgODogIkJhY2tzcGFjZSIsIDk6ICJU
YWIiLCAxMzogIkVudGVyIiwgMTY6ICJTaGlmdCIsIDE3OiAiQ3RybCIsIDE4OiAiQWx0IiwKLSAg
ICAgICAgICAgICAgICAgIDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAz
MjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAzNDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLAotICAg
ICAgICAgICAgICAgICAgMzY6ICJIb21lIiwgMzc6ICJMZWZ0IiwgMzg6ICJVcCIsIDM5OiAiUmln
aHQiLCA0MDogIkRvd24iLCA0NDogIlByaW50U2NybiIsIDQ1OiAiSW5zZXJ0IiwKLSAgICAgICAg
ICAgICAgICAgIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgNjE6ICI9IiwgOTE6ICJNb2QiLCA5Mjog
Ik1vZCIsIDkzOiAiTW9kIiwgMTA3OiAiPSIsIDEwOTogIi0iLCAxMjc6ICJEZWxldGUiLAotICAg
ICAgICAgICAgICAgICAgMTczOiAiLSIsIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4OiAiLCIsIDE4
OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwgMjIwOiAiXFwi
LAotICAgICAgICAgICAgICAgICAgMjIxOiAiXSIsIDIyMjogIiciLCA2MzIzMjogIlVwIiwgNjMy
MzM6ICJEb3duIiwgNjMyMzQ6ICJMZWZ0IiwgNjMyMzU6ICJSaWdodCIsIDYzMjcyOiAiRGVsZXRl
IiwKLSAgICAgICAgICAgICAgICAgIDYzMjczOiAiSG9tZSIsIDYzMjc1OiAiRW5kIiwgNjMyNzY6
ICJQYWdlVXAiLCA2MzI3NzogIlBhZ2VEb3duIiwgNjMzMDI6ICJJbnNlcnQifTsKLSAgQ29kZU1p
cnJvci5rZXlOYW1lcyA9IGtleU5hbWVzOwotICAoZnVuY3Rpb24oKSB7Ci0gICAgLy8gTnVtYmVy
IGtleXMKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0g
PSBrZXlOYW1lc1tpICsgOTZdID0gU3RyaW5nKGkpOwotICAgIC8vIEFscGhhYmV0aWMga2V5cwot
ICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5m
cm9tQ2hhckNvZGUoaSk7Ci0gICAgLy8gRnVuY3Rpb24ga2V5cwotICAgIGZvciAodmFyIGkgPSAx
OyBpIDw9IDEyOyBpKyspIGtleU5hbWVzW2kgKyAxMTFdID0ga2V5TmFtZXNbaSArIDYzMjM1XSA9
ICJGIiArIGk7Ci0gIH0pKCk7Ci0KLSAgLy8gQklESSBIRUxQRVJTCi0KLSAgZnVuY3Rpb24gaXRl
cmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbSwgdG8sIGYpIHsKLSAgICBpZiAoIW9yZGVyKSBy
ZXR1cm4gZihmcm9tLCB0bywgImx0ciIpOwotICAgIHZhciBmb3VuZCA9IGZhbHNlOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBwYXJ0ID0g
b3JkZXJbaV07Ci0gICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwg
ZnJvbSA9PSB0byAmJiBwYXJ0LnRvID09IGZyb20pIHsKLSAgICAgICAgZihNYXRoLm1heChwYXJ0
LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byksIHBhcnQubGV2ZWwgPT0gMSA/ICJy
dGwiIDogImx0ciIpOwotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAg
IGlmICghZm91bmQpIGYoZnJvbSwgdG8sICJsdHIiKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGJpZGlM
ZWZ0KHBhcnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8gcGFydC50byA6IHBhcnQuZnJvbTsg
fQotICBmdW5jdGlvbiBiaWRpUmlnaHQocGFydCkgeyByZXR1cm4gcGFydC5sZXZlbCAlIDIgPyBw
YXJ0LmZyb20gOiBwYXJ0LnRvOyB9Ci0KLSAgZnVuY3Rpb24gbGluZUxlZnQobGluZSkgeyB2YXIg
b3JkZXIgPSBnZXRPcmRlcihsaW5lKTsgcmV0dXJuIG9yZGVyID8gYmlkaUxlZnQob3JkZXJbMF0p
IDogMDsgfQotICBmdW5jdGlvbiBsaW5lUmlnaHQobGluZSkgewotICAgIHZhciBvcmRlciA9IGdl
dE9yZGVyKGxpbmUpOwotICAgIGlmICghb3JkZXIpIHJldHVybiBsaW5lLnRleHQubGVuZ3RoOwot
ICAgIHJldHVybiBiaWRpUmlnaHQobHN0KG9yZGVyKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBsaW5l
U3RhcnQoY20sIGxpbmVOKSB7Ci0gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4p
OwotICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGxpbmUpOwotICAgIGlmICh2aXN1YWwgIT0g
bGluZSkgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsKLSAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcih2
aXN1YWwpOwotICAgIHZhciBjaCA9ICFvcmRlciA/IDAgOiBvcmRlclswXS5sZXZlbCAlIDIgPyBs
aW5lUmlnaHQodmlzdWFsKSA6IGxpbmVMZWZ0KHZpc3VhbCk7Ci0gICAgcmV0dXJuIFBvcyhsaW5l
TiwgY2gpOwotICB9Ci0gIGZ1bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVOKSB7Ci0gICAgdmFyIG1l
cmdlZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7Ci0gICAgd2hpbGUgKG1lcmdlZCA9
IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgewotICAgICAgbGluZSA9IG1lcmdlZC5maW5kKDEs
IHRydWUpLmxpbmU7Ci0gICAgICBsaW5lTiA9IG51bGw7Ci0gICAgfQotICAgIHZhciBvcmRlciA9
IGdldE9yZGVyKGxpbmUpOwotICAgIHZhciBjaCA9ICFvcmRlciA/IGxpbmUudGV4dC5sZW5ndGgg
OiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lTGVmdChsaW5lKSA6IGxpbmVSaWdodChsaW5lKTsK
LSAgICByZXR1cm4gUG9zKGxpbmVOID09IG51bGwgPyBsaW5lTm8obGluZSkgOiBsaW5lTiwgY2gp
OwotICB9Ci0gIGZ1bmN0aW9uIGxpbmVTdGFydFNtYXJ0KGNtLCBwb3MpIHsKLSAgICB2YXIgc3Rh
cnQgPSBsaW5lU3RhcnQoY20sIHBvcy5saW5lKTsKLSAgICB2YXIgbGluZSA9IGdldExpbmUoY20u
ZG9jLCBzdGFydC5saW5lKTsKLSAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKLSAgICBp
ZiAoIW9yZGVyIHx8IG9yZGVyWzBdLmxldmVsID09IDApIHsKLSAgICAgIHZhciBmaXJzdE5vbldT
ID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICB2YXIgaW5XUyA9
IHBvcy5saW5lID09IHN0YXJ0LmxpbmUgJiYgcG9zLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcG9zLmNo
OwotICAgICAgcmV0dXJuIFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MpOwot
ICAgIH0KLSAgICByZXR1cm4gc3RhcnQ7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlQmlkaUxl
dmVsKG9yZGVyLCBhLCBiKSB7Ci0gICAgdmFyIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsKLSAg
ICBpZiAoYSA9PSBsaW5lZGlyKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYiA9PSBsaW5lZGlyKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEgPCBiOwotICB9Ci0gIHZhciBiaWRpT3RoZXI7Ci0g
IGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgewotICAgIGJpZGlPdGhlciA9IG51
bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGZvdW5kOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsK
LSAgICAgIHZhciBjdXIgPSBvcmRlcltpXTsKLSAgICAgIGlmIChjdXIuZnJvbSA8IHBvcyAmJiBj
dXIudG8gPiBwb3MpIHJldHVybiBpOwotICAgICAgaWYgKChjdXIuZnJvbSA9PSBwb3MgfHwgY3Vy
LnRvID09IHBvcykpIHsKLSAgICAgICAgaWYgKGZvdW5kID09IG51bGwpIHsKLSAgICAgICAgICBm
b3VuZCA9IGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZlbChvcmRlciwgY3Vy
LmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7Ci0gICAgICAgICAgaWYgKGN1ci5mcm9tICE9
IGN1ci50bykgYmlkaU90aGVyID0gZm91bmQ7Ci0gICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50bykgYmlkaU90aGVyID0g
aTsKLSAgICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGZvdW5kOwotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUluTGluZShsaW5lLCBwb3Ms
IGRpciwgYnlVbml0KSB7Ci0gICAgaWYgKCFieVVuaXQpIHJldHVybiBwb3MgKyBkaXI7Ci0gICAg
ZG8gcG9zICs9IGRpcjsKLSAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGlu
ZS50ZXh0LmNoYXJBdChwb3MpKSk7Ci0gICAgcmV0dXJuIHBvczsKLSAgfQotCi0gIC8vIFRoaXMg
aXMgbmVlZGVkIGluIG9yZGVyIHRvIG1vdmUgJ3Zpc3VhbGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlv
bmFsCi0gIC8vIHRleHQgLS0gaS5lLiwgcHJlc3NpbmcgbGVmdCBzaG91bGQgbWFrZSB0aGUgY3Vy
c29yIGdvIGxlZnQsIGV2ZW4KLSAgLy8gd2hlbiBpbiBSVEwgdGV4dC4gVGhlIHRyaWNreSBwYXJ0
IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kCi0gIC8vIExUUiB0ZXh0IHRvdWNoIGVhY2gg
b3RoZXIuIFRoaXMgb2Z0ZW4gcmVxdWlyZXMgdGhlIGN1cnNvciBvZmZzZXQKLSAgLy8gdG8gbW92
ZSBtb3JlIHRoYW4gb25lIHVuaXQsIGluIG9yZGVyIHRvIHZpc3VhbGx5IG1vdmUgb25lIHVuaXQu
Ci0gIGZ1bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKLSAg
ICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmUpOwotICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVM
b2dpY2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKLSAgICB2YXIgcG9zID0gZ2V0Qmlk
aVBhcnRBdChiaWRpLCBzdGFydCksIHBhcnQgPSBiaWRpW3Bvc107Ci0gICAgdmFyIHRhcmdldCA9
IG1vdmVJbkxpbmUobGluZSwgc3RhcnQsIHBhcnQubGV2ZWwgJSAyID8gLWRpciA6IGRpciwgYnlV
bml0KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgIGlmICh0YXJnZXQgPiBwYXJ0LmZyb20gJiYg
dGFyZ2V0IDwgcGFydC50bykgcmV0dXJuIHRhcmdldDsKLSAgICAgIGlmICh0YXJnZXQgPT0gcGFy
dC5mcm9tIHx8IHRhcmdldCA9PSBwYXJ0LnRvKSB7Ci0gICAgICAgIGlmIChnZXRCaWRpUGFydEF0
KGJpZGksIHRhcmdldCkgPT0gcG9zKSByZXR1cm4gdGFyZ2V0OwotICAgICAgICBwYXJ0ID0gYmlk
aVtwb3MgKz0gZGlyXTsKLSAgICAgICAgcmV0dXJuIChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUg
MiA/IHBhcnQudG8gOiBwYXJ0LmZyb207CisgICAgICB2YXIgcmFuZ2VzID0gY29weWFibGVSYW5n
ZXMoY20pCisgICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogdHJ1ZSwgdGV4dDogcmFuZ2Vz
LnRleHR9KQorICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgeworICAgICAgICBjbS5zZXRTZWxl
Y3Rpb25zKHJhbmdlcy5yYW5nZXMsIG51bGwsIHNlbF9kb250U2Nyb2xsKQogICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcGFydCA9IGJpZGlbcG9zICs9IGRpcl07Ci0gICAgICAgIGlmICghcGFydCkg
cmV0dXJuIG51bGw7Ci0gICAgICAgIGlmICgoZGlyID4gMCkgPT0gcGFydC5sZXZlbCAlIDIpCi0g
ICAgICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBwYXJ0LnRvLCAtMSwgYnlVbml0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgIHRhcmdldCA9IG1vdmVJbkxpbmUobGluZSwgcGFydC5m
cm9tLCAxLCBieVVuaXQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG1vdmVM
b2dpY2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7Ci0gICAgdmFyIHRhcmdldCA9IHN0
YXJ0ICsgZGlyOwotICAgIGlmIChieVVuaXQpIHdoaWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5k
aW5nQ2hhcihsaW5lLnRleHQuY2hhckF0KHRhcmdldCkpKSB0YXJnZXQgKz0gZGlyOwotICAgIHJl
dHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFy
Z2V0OwotICB9Ci0KLSAgLy8gQmlkaXJlY3Rpb25hbCBvcmRlcmluZyBhbGdvcml0aG0KLSAgLy8g
U2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFs
Z29yaXRobQotICAvLyB0aGF0IHRoaXMgKHBhcnRpYWxseSkgaW1wbGVtZW50cy4KLQotICAvLyBP
bmUtY2hhciBjb2RlcyB1c2VkIGZvciBjaGFyYWN0ZXIgdHlwZXM6Ci0gIC8vIEwgKEwpOiAgIExl
ZnQtdG8tUmlnaHQKLSAgLy8gUiAoUik6ICAgUmlnaHQtdG8tTGVmdAotICAvLyByIChBTCk6ICBS
aWdodC10by1MZWZ0IEFyYWJpYwotICAvLyAxIChFTik6ICBFdXJvcGVhbiBOdW1iZXIKLSAgLy8g
KyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvcgotICAvLyAlIChFVCk6ICBFdXJvcGVh
biBOdW1iZXIgVGVybWluYXRvcgotICAvLyBuIChBTik6ICBBcmFiaWMgTnVtYmVyCi0gIC8vICwg
KENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yCi0gIC8vIG0gKE5TTSk6IE5vbi1TcGFjaW5n
IE1hcmsKLSAgLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbAotICAvLyBzIChCKTogICBQYXJh
Z3JhcGggU2VwYXJhdG9yCi0gIC8vIHQgKFMpOiAgIFNlZ21lbnQgU2VwYXJhdG9yCi0gIC8vIHcg
KFdTKTogIFdoaXRlc3BhY2UKLSAgLy8gTiAoT04pOiAgT3RoZXIgTmV1dHJhbHMKLQotICAvLyBS
ZXR1cm5zIG51bGwgaWYgY2hhcmFjdGVycyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFwcGVhcgotICAv
LyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxl
dmVsfQotICAvLyBvYmplY3RzKSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1
YWxseS4KLSAgdmFyIGJpZGlPcmRlcmluZyA9IChmdW5jdGlvbigpIHsKLSAgICAvLyBDaGFyYWN0
ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmCi0gICAgdmFyIGxvd1R5cGVzID0gImJi
YmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFO
Tk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExM
TExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5O
Tk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExM
TExMTExMTExMTExMTExMTExOIjsKLSAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2lu
dHMgMHg2MDAgdG8gMHg2ZmYKLSAgICB2YXIgYXJhYmljVHlwZXMgPSAicnJycnJycnJycnJyLHJO
Tm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbSI7Ci0g
ICAgZnVuY3Rpb24gY2hhclR5cGUoY29kZSkgewotICAgICAgaWYgKGNvZGUgPD0gMHhmNykgcmV0
dXJuIGxvd1R5cGVzLmNoYXJBdChjb2RlKTsKLSAgICAgIGVsc2UgaWYgKDB4NTkwIDw9IGNvZGUg
JiYgY29kZSA8PSAweDVmNCkgcmV0dXJuICJSIjsKLSAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNv
ZGUgJiYgY29kZSA8PSAweDZlZCkgcmV0dXJuIGFyYWJpY1R5cGVzLmNoYXJBdChjb2RlIC0gMHg2
MDApOwotICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSByZXR1
cm4gInIiOwotICAgICAgZWxzZSBpZiAoMHgyMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDIwMGIp
IHJldHVybiAidyI7Ci0gICAgICBlbHNlIGlmIChjb2RlID09IDB4MjAwYykgcmV0dXJuICJiIjsK
LSAgICAgIGVsc2UgcmV0dXJuICJMIjsKLSAgICB9Ci0KLSAgICB2YXIgYmlkaVJFID0gL1tcdTA1
OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLzsKLSAgICB2YXIgaXNOZXV0cmFs
ID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tMUnJdLywgY291bnRzQXNMZWZ0ID0gL1tMYjFuXS8s
IGNvdW50c0FzTnVtID0gL1sxbl0vOwotICAgIC8vIEJyb3dzZXJzIHNlZW0gdG8gYWx3YXlzIHRy
ZWF0IHRoZSBib3VuZGFyaWVzIG9mIGJsb2NrIGVsZW1lbnRzIGFzIGJlaW5nIEwuCi0gICAgdmFy
IG91dGVyVHlwZSA9ICJMIjsKLQotICAgIGZ1bmN0aW9uIEJpZGlTcGFuKGxldmVsLCBmcm9tLCB0
bykgewotICAgICAgdGhpcy5sZXZlbCA9IGxldmVsOwotICAgICAgdGhpcy5mcm9tID0gZnJvbTsg
dGhpcy50byA9IHRvOwotICAgIH0KLQotICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHsKLSAgICAg
IGlmICghYmlkaVJFLnRlc3Qoc3RyKSkgcmV0dXJuIGZhbHNlOwotICAgICAgdmFyIGxlbiA9IHN0
ci5sZW5ndGgsIHR5cGVzID0gW107Ci0gICAgICBmb3IgKHZhciBpID0gMCwgdHlwZTsgaSA8IGxl
bjsgKytpKQotICAgICAgICB0eXBlcy5wdXNoKHR5cGUgPSBjaGFyVHlwZShzdHIuY2hhckNvZGVB
dChpKSkpOwotCi0gICAgICAvLyBXMS4gRXhhbWluZSBlYWNoIG5vbi1zcGFjaW5nIG1hcmsgKE5T
TSkgaW4gdGhlIGxldmVsIHJ1biwgYW5kCi0gICAgICAvLyBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhl
IE5TTSB0byB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXMKLSAgICAgIC8vIGNoYXJhY3Rlci4gSWYg
dGhlIE5TTSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxldmVsIHJ1biwgaXQgd2lsbAotICAgICAg
Ly8gZ2V0IHRoZSB0eXBlIG9mIHNvci4KLSAgICAgIGZvciAodmFyIGkgPSAwLCBwcmV2ID0gb3V0
ZXJUeXBlOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAg
ICAgICAgaWYgKHR5cGUgPT0gIm0iKSB0eXBlc1tpXSA9IHByZXY7Ci0gICAgICAgIGVsc2UgcHJl
diA9IHR5cGU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20g
ZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlcgotICAgICAgLy8gdW50aWwgdGhlIGZp
cnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW4KLSAgICAg
IC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0
byBBcmFiaWMKLSAgICAgIC8vIG51bWJlci4KLSAgICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0
byBSLgotICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytp
KSB7Ci0gICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlID09ICIx
IiAmJiBjdXIgPT0gInIiKSB0eXBlc1tpXSA9ICJuIjsKLSAgICAgICAgZWxzZSBpZiAoaXNTdHJv
bmcudGVzdCh0eXBlKSkgeyBjdXIgPSB0eXBlOyBpZiAodHlwZSA9PSAiciIpIHR5cGVzW2ldID0g
IlIiOyB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFc0LiBBIHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0
b3IgYmV0d2VlbiB0d28gRXVyb3BlYW4gbnVtYmVycwotICAgICAgLy8gY2hhbmdlcyB0byBhIEV1
cm9wZWFuIG51bWJlci4gQSBzaW5nbGUgY29tbW9uIHNlcGFyYXRvciBiZXR3ZWVuCi0gICAgICAv
LyB0d28gbnVtYmVycyBvZiB0aGUgc2FtZSB0eXBlIGNoYW5nZXMgdG8gdGhhdCB0eXBlLgotICAg
ICAgZm9yICh2YXIgaSA9IDEsIHByZXYgPSB0eXBlc1swXTsgaSA8IGxlbiAtIDE7ICsraSkgewot
ICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBpZiAodHlwZSA9PSAiKyIgJiYg
cHJldiA9PSAiMSIgJiYgdHlwZXNbaSsxXSA9PSAiMSIpIHR5cGVzW2ldID0gIjEiOwotICAgICAg
ICBlbHNlIGlmICh0eXBlID09ICIsIiAmJiBwcmV2ID09IHR5cGVzW2krMV0gJiYKLSAgICAgICAg
ICAgICAgICAgKHByZXYgPT0gIjEiIHx8IHByZXYgPT0gIm4iKSkgdHlwZXNbaV0gPSBwcmV2Owot
ICAgICAgICBwcmV2ID0gdHlwZTsKLSAgICAgIH0KLQotICAgICAgLy8gVzUuIEEgc2VxdWVuY2Ug
b2YgRXVyb3BlYW4gdGVybWluYXRvcnMgYWRqYWNlbnQgdG8gRXVyb3BlYW4KLSAgICAgIC8vIG51
bWJlcnMgY2hhbmdlcyB0byBhbGwgRXVyb3BlYW4gbnVtYmVycy4KLSAgICAgIC8vIFc2LiBPdGhl
cndpc2UsIHNlcGFyYXRvcnMgYW5kIHRlcm1pbmF0b3JzIGNoYW5nZSB0byBPdGhlcgotICAgICAg
Ly8gTmV1dHJhbC4KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAg
ICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAgICAgICAgaWYgKHR5cGUgPT0gIiwiKSB0eXBlc1tp
XSA9ICJOIjsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiJSIpIHsKLSAgICAgICAgICBmb3Ig
KHZhciBlbmQgPSBpICsgMTsgZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gIiUiOyArK2VuZCkg
e30KLSAgICAgICAgICB2YXIgcmVwbGFjZSA9IChpICYmIHR5cGVzW2ktMV0gPT0gIiEiKSB8fCAo
ZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gIjEiKSA/ICIxIiA6ICJOIjsKLSAgICAgICAgICBm
b3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxhY2U7Ci0gICAgICAg
ICAgaSA9IGVuZCAtIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gVzcuIFNlYXJj
aCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyCi0gICAg
ICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQu
IElmIGFuIEwgaXMKLSAgICAgIC8vIGZvdW5kLCB0aGVuIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUg
RXVyb3BlYW4gbnVtYmVyIHRvIEwuCi0gICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gb3V0ZXJU
eXBlOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAgICAg
ICAgaWYgKGN1ciA9PSAiTCIgJiYgdHlwZSA9PSAiMSIpIHR5cGVzW2ldID0gIkwiOwotICAgICAg
ICBlbHNlIGlmIChpc1N0cm9uZy50ZXN0KHR5cGUpKSBjdXIgPSB0eXBlOwotICAgICAgfQotCi0g
ICAgICAvLyBOMS4gQSBzZXF1ZW5jZSBvZiBuZXV0cmFscyB0YWtlcyB0aGUgZGlyZWN0aW9uIG9m
IHRoZQotICAgICAgLy8gc3Vycm91bmRpbmcgc3Ryb25nIHRleHQgaWYgdGhlIHRleHQgb24gYm90
aCBzaWRlcyBoYXMgdGhlIHNhbWUKLSAgICAgIC8vIGRpcmVjdGlvbi4gRXVyb3BlYW4gYW5kIEFy
YWJpYyBudW1iZXJzIGFjdCBhcyBpZiB0aGV5IHdlcmUgUiBpbgotICAgICAgLy8gdGVybXMgb2Yg
dGhlaXIgaW5mbHVlbmNlIG9uIG5ldXRyYWxzLiBTdGFydC1vZi1sZXZlbC1ydW4gKHNvcikKLSAg
ICAgIC8vIGFuZCBlbmQtb2YtbGV2ZWwtcnVuIChlb3IpIGFyZSB1c2VkIGF0IGxldmVsIHJ1biBi
b3VuZGFyaWVzLgotICAgICAgLy8gTjIuIEFueSByZW1haW5pbmcgbmV1dHJhbHMgdGFrZSB0aGUg
ZW1iZWRkaW5nIGRpcmVjdGlvbi4KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKLSAgICAgICAgaWYgKGlzTmV1dHJhbC50ZXN0KHR5cGVzW2ldKSkgewotICAgICAgICAgIGZv
ciAodmFyIGVuZCA9IGkgKyAxOyBlbmQgPCBsZW4gJiYgaXNOZXV0cmFsLnRlc3QodHlwZXNbZW5k
XSk7ICsrZW5kKSB7fQotICAgICAgICAgIHZhciBiZWZvcmUgPSAoaSA/IHR5cGVzW2ktMV0gOiBv
dXRlclR5cGUpID09ICJMIjsKLSAgICAgICAgICB2YXIgYWZ0ZXIgPSAoZW5kIDwgbGVuID8gdHlw
ZXNbZW5kXSA6IG91dGVyVHlwZSkgPT0gIkwiOwotICAgICAgICAgIHZhciByZXBsYWNlID0gYmVm
b3JlIHx8IGFmdGVyID8gIkwiIDogIlIiOwotICAgICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwg
ZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKLSAgICAgICAgICBpID0gZW5kIC0gMTsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBIZXJlIHdlIGRlcGFydCBmcm9tIHRoZSBkb2N1
bWVudGVkIGFsZ29yaXRobSwgaW4gb3JkZXIgdG8gYXZvaWQKLSAgICAgIC8vIGJ1aWxkaW5nIHVw
IGFuIGFjdHVhbCBsZXZlbHMgYXJyYXkuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlCi0gICAg
ICAvLyBsZXZlbHMgKDAsIDEsIDIpIGluIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCB0
YWtlCi0gICAgICAvLyBleHBsaWNpdCBlbWJlZGRpbmcgaW50byBhY2NvdW50LCB3ZSBjYW4gYnVp
bGQgdXAgdGhlIG9yZGVyIG9uCi0gICAgICAvLyB0aGUgZmx5LCB3aXRob3V0IGZvbGxvd2luZyB0
aGUgbGV2ZWwtYmFzZWQgYWxnb3JpdGhtLgotICAgICAgdmFyIG9yZGVyID0gW10sIG07Ci0gICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHsKLSAgICAgICAgaWYgKGNvdW50c0FzTGVmdC50
ZXN0KHR5cGVzW2ldKSkgewotICAgICAgICAgIHZhciBzdGFydCA9IGk7Ci0gICAgICAgICAgZm9y
ICgrK2k7IGkgPCBsZW4gJiYgY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0pOyArK2kpIHt9Ci0g
ICAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgc3RhcnQsIGkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB2YXIgcG9zID0gaSwgYXQgPSBvcmRlci5sZW5ndGg7Ci0gICAg
ICAgICAgZm9yICgrK2k7IGkgPCBsZW4gJiYgdHlwZXNbaV0gIT0gIkwiOyArK2kpIHt9Ci0gICAg
ICAgICAgZm9yICh2YXIgaiA9IHBvczsgaiA8IGk7KSB7Ci0gICAgICAgICAgICBpZiAoY291bnRz
QXNOdW0udGVzdCh0eXBlc1tqXSkpIHsKLSAgICAgICAgICAgICAgaWYgKHBvcyA8IGopIG9yZGVy
LnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaikpOwotICAgICAgICAgICAgICB2
YXIgbnN0YXJ0ID0gajsKLSAgICAgICAgICAgICAgZm9yICgrK2o7IGogPCBpICYmIGNvdW50c0Fz
TnVtLnRlc3QodHlwZXNbal0pOyArK2opIHt9Ci0gICAgICAgICAgICAgIG9yZGVyLnNwbGljZShh
dCwgMCwgbmV3IEJpZGlTcGFuKDIsIG5zdGFydCwgaikpOwotICAgICAgICAgICAgICBwb3MgPSBq
OwotICAgICAgICAgICAgfSBlbHNlICsrajsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHBv
cyA8IGkpIG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaSkpOworICAg
ICAgICBpbnB1dC5wcmV2SW5wdXQgPSAiIgorICAgICAgICB0ZS52YWx1ZSA9IHJhbmdlcy50ZXh0
LmpvaW4oIlxuIikKKyAgICAgICAgc2VsZWN0SW5wdXQodGUpCisgICAgICB9CisgICAgfQorICAg
IGlmIChlLnR5cGUgPT0gImN1dCIpIHsgY20uc3RhdGUuY3V0SW5jb21pbmcgPSB0cnVlIH0KKyAg
fQorICBvbih0ZSwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KQorICBvbih0ZSwgImNvcHkiLCBwcmVw
YXJlQ29weUN1dCkKKworICBvbihkaXNwbGF5LnNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbiAo
ZSkgeworICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHx8IHNpZ25hbERPTUV2ZW50
KGNtLCBlKSkgeyByZXR1cm4gfQorICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlCisg
ICAgaW5wdXQuZm9jdXMoKQorICB9KQorCisgIC8vIFByZXZlbnQgbm9ybWFsIHNlbGVjdGlvbiBp
biB0aGUgZWRpdG9yICh3ZSBoYW5kbGUgb3VyIG93bikKKyAgb24oZGlzcGxheS5saW5lU3BhY2Us
ICJzZWxlY3RzdGFydCIsIGZ1bmN0aW9uIChlKSB7CisgICAgaWYgKCFldmVudEluV2lkZ2V0KGRp
c3BsYXksIGUpKSB7IGVfcHJldmVudERlZmF1bHQoZSkgfQorICB9KQorCisgIG9uKHRlLCAiY29t
cG9zaXRpb25zdGFydCIsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc3RhcnQgPSBjbS5nZXRDdXJz
b3IoImZyb20iKQorICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHsgaW5wdXQuY29tcG9zaW5nLnJh
bmdlLmNsZWFyKCkgfQorICAgIGlucHV0LmNvbXBvc2luZyA9IHsKKyAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgIHJhbmdlOiBjbS5tYXJrVGV4dChzdGFydCwgY20uZ2V0Q3Vyc29yKCJ0byIpLCB7
Y2xhc3NOYW1lOiAiQ29kZU1pcnJvci1jb21wb3NpbmcifSkKKyAgICB9CisgIH0pCisgIG9uKHRl
LCAiY29tcG9zaXRpb25lbmQiLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKGlucHV0LmNvbXBvc2lu
ZykgeworICAgICAgaW5wdXQucG9sbCgpCisgICAgICBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xl
YXIoKQorICAgICAgaW5wdXQuY29tcG9zaW5nID0gbnVsbAorICAgIH0KKyAgfSkKK307CisKK1Rl
eHRhcmVhSW5wdXQucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7Cisg
IC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IKKyAgdmFyIGNtID0gdGhpcy5j
bSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYworICB2YXIgcmVzdWx0ID0gcHJl
cGFyZVNlbGVjdGlvbihjbSkKKworICAvLyBNb3ZlIHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0
aGUgY3Vyc29yIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGFydGlmYWN0cworICBpZiAoY20ub3B0aW9u
cy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKSB7CisgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMo
Y20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKQorICAgIHZhciB3cmFwT2ZmID0gZGlz
cGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5s
aW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisgICAgcmVzdWx0LnRlVG9wID0gTWF0aC5t
YXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50
b3AgLSB3cmFwT2ZmLnRvcCkpCisgICAgcmVzdWx0LnRlTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgu
bWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCAtIDEwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2ZmLmxlZnQgLSB3cmFw
T2ZmLmxlZnQpKQorICB9CisKKyAgcmV0dXJuIHJlc3VsdAorfTsKKworVGV4dGFyZWFJbnB1dC5w
cm90b3R5cGUuc2hvd1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChkcmF3bikgeworICB2YXIgY20gPSB0
aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheQorICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNw
bGF5LmN1cnNvckRpdiwgZHJhd24uY3Vyc29ycykKKyAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlz
cGxheS5zZWxlY3Rpb25EaXYsIGRyYXduLnNlbGVjdGlvbikKKyAgaWYgKGRyYXduLnRlVG9wICE9
IG51bGwpIHsKKyAgICB0aGlzLndyYXBwZXIuc3R5bGUudG9wID0gZHJhd24udGVUb3AgKyAicHgi
CisgICAgdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQgPSBkcmF3bi50ZUxlZnQgKyAicHgiCisgIH0K
K307CisKKy8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24g
KG9yIHRvIGJlIGVtcHR5LAorLy8gd2hlbiBub3QgdHlwaW5nIGFuZCBub3RoaW5nIGlzIHNlbGVj
dGVkKQorVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAodHlwaW5nKSB7
CisgIGlmICh0aGlzLmNvbnRleHRNZW51UGVuZGluZykgeyByZXR1cm4gfQorICB2YXIgbWluaW1h
bCwgc2VsZWN0ZWQsIGNtID0gdGhpcy5jbSwgZG9jID0gY20uZG9jCisgIGlmIChjbS5zb21ldGhp
bmdTZWxlY3RlZCgpKSB7CisgICAgdGhpcy5wcmV2SW5wdXQgPSAiIgorICAgIHZhciByYW5nZSA9
IGRvYy5zZWwucHJpbWFyeSgpCisgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAmJgorICAgICAg
KHJhbmdlLnRvKCkubGluZSAtIHJhbmdlLmZyb20oKS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9
IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKQorICAgIHZhciBjb250ZW50ID0gbWlu
aW1hbCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpCisgICAgdGhpcy50ZXh0
YXJlYS52YWx1ZSA9IGNvbnRlbnQKKyAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZWxlY3RJ
bnB1dCh0aGlzLnRleHRhcmVhKSB9CisgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgeyB0
aGlzLmhhc1NlbGVjdGlvbiA9IGNvbnRlbnQgfQorICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKKyAg
ICB0aGlzLnByZXZJbnB1dCA9IHRoaXMudGV4dGFyZWEudmFsdWUgPSAiIgorICAgIGlmIChpZSAm
JiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsIH0KKyAgfQorICB0
aGlzLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsCit9OworCitUZXh0YXJlYUlucHV0LnBy
b3RvdHlwZS5nZXRGaWVsZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudGV4dGFyZWEgfTsK
KworVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc3VwcG9ydHNUb3VjaCA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIGZhbHNlIH07CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rp
b24gKCkgeworICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYg
KCFtb2JpbGUgfHwgYWN0aXZlRWx0KCkgIT0gdGhpcy50ZXh0YXJlYSkpIHsKKyAgICB0cnkgeyB0
aGlzLnRleHRhcmVhLmZvY3VzKCkgfQorICAgIGNhdGNoIChlKSB7fSAvLyBJRTggd2lsbCB0aHJv
dyBpZiB0aGUgdGV4dGFyZWEgaXMgZGlzcGxheTogbm9uZSBvciBub3QgaW4gRE9NCisgIH0KK307
CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbiAoKSB7IHRoaXMudGV4
dGFyZWEuYmx1cigpIH07CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0UG9zaXRpb24g
PSBmdW5jdGlvbiAoKSB7CisgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIu
c3R5bGUubGVmdCA9IDAKK307CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlY2VpdmVkRm9j
dXMgPSBmdW5jdGlvbiAoKSB7IHRoaXMuc2xvd1BvbGwoKSB9OworCisvLyBQb2xsIGZvciBpbnB1
dCBjaGFuZ2VzLCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcworLy8gcnVu
cyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KK1RleHRhcmVhSW5wdXQucHJvdG90
eXBlLnNsb3dQb2xsID0gZnVuY3Rpb24gKCkgeworICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisg
IGlmICh0aGlzLnBvbGxpbmdGYXN0KSB7IHJldHVybiB9CisgIHRoaXMucG9sbGluZy5zZXQodGhp
cy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24gKCkgeworICAgIHRoaXMkMS5wb2xs
KCkKKyAgICBpZiAodGhpcyQxLmNtLnN0YXRlLmZvY3VzZWQpIHsgdGhpcyQxLnNsb3dQb2xsKCkg
fQorICB9KQorfTsKKworLy8gV2hlbiBhbiBldmVudCBoYXMganVzdCBjb21lIGluIHRoYXQgaXMg
bGlrZWx5IHRvIGFkZCBvciBjaGFuZ2UKKy8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dGFy
ZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAorLy8gdGhlIGNoYW5nZSBhcHBlYXJz
IG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLmZhc3RQb2xs
ID0gZnVuY3Rpb24gKCkgeworICB2YXIgbWlzc2VkID0gZmFsc2UsIGlucHV0ID0gdGhpcworICBp
bnB1dC5wb2xsaW5nRmFzdCA9IHRydWUKKyAgZnVuY3Rpb24gcCgpIHsKKyAgICB2YXIgY2hhbmdl
ZCA9IGlucHV0LnBvbGwoKQorICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0g
dHJ1ZTsgaW5wdXQucG9sbGluZy5zZXQoNjAsIHApfQorICAgIGVsc2Uge2lucHV0LnBvbGxpbmdG
YXN0ID0gZmFsc2U7IGlucHV0LnNsb3dQb2xsKCl9CisgIH0KKyAgaW5wdXQucG9sbGluZy5zZXQo
MjAsIHApCit9OworCisvLyBSZWFkIGlucHV0IGZyb20gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRl
IHRoZSBkb2N1bWVudCB0byBtYXRjaC4KKy8vIFdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLCBp
dCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5kCisvLyBzZWxlY3RlZCAodW5sZXNzIGl0
IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBwbGFjZWhvbGRlciBpcworLy8gdXNlZCkuIFdoZW4g
bm90aGluZyBpcyBzZWxlY3RlZCwgdGhlIGN1cnNvciBzaXRzIGFmdGVyIHByZXZpb3VzbHkKKy8v
IHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwgd2hpY2ggaXMgc3RvcmVkIGluIHByZXZJbnB1dCAo
d2UgbXVzdAorLy8gbm90IHJlc2V0IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywgYmVjYXVzZSB0
aGF0IGJyZWFrcyBJTUUpLgorVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucG9sbCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICB2YXIgY20gPSB0aGlzLmNtLCBpbnB1
dCA9IHRoaXMudGV4dGFyZWEsIHByZXZJbnB1dCA9IHRoaXMucHJldklucHV0CisgIC8vIFNpbmNl
IHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzCisg
IC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xlYXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNT
ZWxlY3Rpb24KKyAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRl
eHQgaW4gdGhlIHRleHRhcmVhLAorICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVl
IHdvdWxkIGJlIGV4cGVuc2l2ZS4KKyAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8ICFj
bS5zdGF0ZS5mb2N1c2VkIHx8CisgICAgICAoaGFzU2VsZWN0aW9uKGlucHV0KSAmJiAhcHJldklu
cHV0ICYmICF0aGlzLmNvbXBvc2luZykgfHwKKyAgICAgIGNtLmlzUmVhZE9ubHkoKSB8fCBjbS5v
cHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpCisgICAgeyByZXR1cm4gZmFs
c2UgfQorCisgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWUKKyAgLy8gSWYgbm90aGluZyBjaGFuZ2Vk
LCBiYWlsLgorICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNvbWV0aGluZ1NlbGVjdGVk
KCkpIHsgcmV0dXJuIGZhbHNlIH0KKyAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0
aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAsIGFuZAorICAvLyBpbmV4cGxpY2FibGUgYXBwZWFyYW5j
ZSBvZiBwcml2YXRlIGFyZWEgdW5pY29kZSBjaGFyYWN0ZXJzIG9uCisgIC8vIHNvbWUga2V5IGNv
bWJvcyBpbiBNYWMgKCMyNjg5KS4KKyAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlz
Lmhhc1NlbGVjdGlvbiA9PT0gdGV4dCB8fAorICAgICAgbWFjICYmIC9bXHVmNzAwLVx1ZjdmZl0v
LnRlc3QodGV4dCkpIHsKKyAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCkKKyAgICByZXR1cm4g
ZmFsc2UKKyAgfQorCisgIGlmIChjbS5kb2Muc2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4
dE1lbnUpIHsKKyAgICB2YXIgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQoMCkKKyAgICBpZiAoZmly
c3QgPT0gMHgyMDBiICYmICFwcmV2SW5wdXQpIHsgcHJldklucHV0ID0gIlx1MjAwYiIgfQorICAg
IGlmIChmaXJzdCA9PSAweDIxZGEpIHsgdGhpcy5yZXNldCgpOyByZXR1cm4gdGhpcy5jbS5leGVj
Q29tbWFuZCgidW5kbyIpIH0KKyAgfQorICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0
aGF0IGlzIGFjdHVhbGx5IG5ldworICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5w
dXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCkKKyAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dC5j
aGFyQ29kZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkgeyArK3NhbWUgfQorCisg
IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHsKKyAgICBhcHBseVRleHRJbnB1dChjbSwgdGV4dC5z
bGljZShzYW1lKSwgcHJldklucHV0Lmxlbmd0aCAtIHNhbWUsCisgICAgICAgICAgICAgICAgICAg
bnVsbCwgdGhpcyQxLmNvbXBvc2luZyA/ICIqY29tcG9zZSIgOiBudWxsKQorCisgICAgLy8gRG9u
J3QgbGVhdmUgbG9uZyB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMgZnVydGhl
ciBwb2xsaW5nIHNsb3cKKyAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhP
ZigiXG4iKSA+IC0xKSB7IGlucHV0LnZhbHVlID0gdGhpcyQxLnByZXZJbnB1dCA9ICIiIH0KKyAg
ICBlbHNlIHsgdGhpcyQxLnByZXZJbnB1dCA9IHRleHQgfQorCisgICAgaWYgKHRoaXMkMS5jb21w
b3NpbmcpIHsKKyAgICAgIHRoaXMkMS5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKQorICAgICAgdGhp
cyQxLmNvbXBvc2luZy5yYW5nZSA9IGNtLm1hcmtUZXh0KHRoaXMkMS5jb21wb3Npbmcuc3RhcnQs
IGNtLmdldEN1cnNvcigidG8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge2NsYXNzTmFtZTogIkNvZGVNaXJyb3ItY29tcG9zaW5nIn0pCisgICAgfQorICB9KQor
ICByZXR1cm4gdHJ1ZQorfTsKKworVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuZW5zdXJlUG9sbGVk
ID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkg
eyB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2UgfQorfTsKKworVGV4dGFyZWFJbnB1dC5wcm90b3R5
cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uICgpIHsKKyAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0g
OSkgeyB0aGlzLmhhc1NlbGVjdGlvbiA9IG51bGwgfQorICB0aGlzLmZhc3RQb2xsKCkKK307CisK
K1RleHRhcmVhSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoZSkgewor
ICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwg
dGUgPSBpbnB1dC50ZXh0YXJlYQorICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Ny
b2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AKKyAgaWYgKCFwb3MgfHwgcHJlc3Rv
KSB7IHJldHVybiB9IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KKworICAvLyBSZXNldCB0aGUgY3Vy
cmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUgb2Yg
dGhlIHNlbGVjdGlvbgorICAvLyBhbmQgJ3Jlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudScgb3B0
aW9uIGlzIHRydWUuCisgIHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNv
bnRleHRNZW51CisgIGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEp
CisgICAgeyBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rp
b24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpIH0KKworICB2YXIgb2xkQ1NTID0gdGUuc3R5bGUuY3Nz
VGV4dCwgb2xkV3JhcHBlckNTUyA9IGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dAorICBpbnB1
dC53cmFwcGVyLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlIgorICB2YXIgd3Jh
cHBlckJveCA9IGlucHV0LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkKKyAgdGUuc3R5
bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMw
cHg7XG4gICAgICB0b3A6ICIgKyAoZS5jbGllbnRZIC0gd3JhcHBlckJveC50b3AgLSA1KSArICJw
eDsgbGVmdDogIiArIChlLmNsaWVudFggLSB3cmFwcGVyQm94LmxlZnQgLSA1KSArICJweDtcbiAg
ICAgIHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIgKyAoaWUgPyAicmdiYSgyNTUsIDI1NSwg
MjU1LCAuMDUpIiA6ICJ0cmFuc3BhcmVudCIpICsgIjtcbiAgICAgIG91dGxpbmU6IG5vbmU7IGJv
cmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTog
LjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IgorICB2YXIgb2xkU2Nyb2xsWQorICBpZiAo
d2Via2l0KSB7IG9sZFNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWSB9IC8vIFdvcmsgYXJvdW5kIENo
cm9tZSBpc3N1ZSAoIzI3MTIpCisgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKQorICBpZiAod2Via2l0
KSB7IHdpbmRvdy5zY3JvbGxUbyhudWxsLCBvbGRTY3JvbGxZKSB9CisgIGRpc3BsYXkuaW5wdXQu
cmVzZXQoKQorICAvLyBBZGRzICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKKyAg
aWYgKCFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IHRlLnZhbHVlID0gaW5wdXQucHJldklucHV0
ID0gIiAiIH0KKyAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gdHJ1ZQorICBkaXNwbGF5LnNl
bEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbAorICBjbGVhclRpbWVvdXQoZGlzcGxheS5kZXRl
Y3RpbmdTZWxlY3RBbGwpCisKKyAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYg
dGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KKyAgLy8gdGhpcyBhZGRzIGEgemVyby13aWR0
aCBzcGFjZSBzbyB0aGF0IHdlIGNhbiBsYXRlciBjaGVjayB3aGV0aGVyCisgIC8vIGl0IGdvdCBz
ZWxlY3RlZC4KKyAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7CisgICAgaWYgKHRl
LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKKyAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0
aGluZ1NlbGVjdGVkKCkKKyAgICAgIHZhciBleHR2YWwgPSAiXHUyMDBiIiArIChzZWxlY3RlZCA/
IHRlLnZhbHVlIDogIiIpCisgICAgICB0ZS52YWx1ZSA9ICJcdTIxZGEiIC8vIFVzZWQgdG8gY2F0
Y2ggY29udGV4dC1tZW51IHVuZG8KKyAgICAgIHRlLnZhbHVlID0gZXh0dmFsCisgICAgICBpbnB1
dC5wcmV2SW5wdXQgPSBzZWxlY3RlZCA/ICIiIDogIlx1MjAwYiIKKyAgICAgIHRlLnNlbGVjdGlv
blN0YXJ0ID0gMTsgdGUuc2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aAorICAgICAgLy8gUmUt
c2V0IHRoaXMsIGluIGNhc2Ugc29tZSBvdGhlciBoYW5kbGVyIHRvdWNoZWQgdGhlCisgICAgICAv
LyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLgorICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0
TWVudSA9IGNtLmRvYy5zZWwKKyAgICB9CisgIH0KKyAgZnVuY3Rpb24gcmVoaWRlKCkgeworICAg
IGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IGZhbHNlCisgICAgaW5wdXQud3JhcHBlci5zdHls
ZS5jc3NUZXh0ID0gb2xkV3JhcHBlckNTUworICAgIHRlLnN0eWxlLmNzc1RleHQgPSBvbGRDU1MK
KyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgZGlzcGxheS5zY3JvbGxiYXJzLnNldFNj
cm9sbFRvcChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvcykgfQorCisgICAg
Ly8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsCisgICAgaWYgKHRl
LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKKyAgICAgIGlmICghaWUgfHwgKGllICYmIGllX3Zl
cnNpb24gPCA5KSkgeyBwcmVwYXJlU2VsZWN0QWxsSGFjaygpIH0KKyAgICAgIHZhciBpID0gMCwg
cG9sbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1l
bnUgPT0gY20uZG9jLnNlbCAmJiB0ZS5zZWxlY3Rpb25TdGFydCA9PSAwICYmCisgICAgICAgICAg
ICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSAiXHUyMDBiIikKKyAg
ICAgICAgICB7IG9wZXJhdGlvbihjbSwgc2VsZWN0QWxsKShjbSkgfQorICAgICAgICBlbHNlIGlm
IChpKysgPCAxMCkgeyBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9s
bCwgNTAwKSB9CisgICAgICAgIGVsc2UgeyBkaXNwbGF5LmlucHV0LnJlc2V0KCkgfQorICAgICAg
fQorICAgICAgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIw
MCkKKyAgICB9CisgIH0KKworICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHByZXBhcmVT
ZWxlY3RBbGxIYWNrKCkgfQorICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsKKyAgICBlX3N0b3Ao
ZSkKKyAgICB2YXIgbW91c2V1cCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIG9mZih3aW5kb3csICJt
b3VzZXVwIiwgbW91c2V1cCkKKyAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCkKKyAgICB9Cisg
ICAgb24od2luZG93LCAibW91c2V1cCIsIG1vdXNldXApCisgIH0gZWxzZSB7CisgICAgc2V0VGlt
ZW91dChyZWhpZGUsIDUwKQorICB9Cit9OworCitUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZWFk
T25seUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsKSB7CisgIGlmICghdmFsKSB7IHRoaXMucmVzZXQo
KSB9Cit9OworCitUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rp
b24gKCkge307CisKK1RleHRhcmVhSW5wdXQucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0
ZSA9IGZhbHNlCisKK2Z1bmN0aW9uIGZyb21UZXh0QXJlYSh0ZXh0YXJlYSwgb3B0aW9ucykgewor
ICBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fQorICBvcHRpb25zLnZh
bHVlID0gdGV4dGFyZWEudmFsdWUKKyAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVh
LnRhYkluZGV4KQorICAgIHsgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYkluZGV4IH0K
KyAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKQorICAg
IHsgb3B0aW9ucy5wbGFjZWhvbGRlciA9IHRleHRhcmVhLnBsYWNlaG9sZGVyIH0KKyAgLy8gU2V0
IGF1dG9mb2N1cyB0byB0cnVlIGlmIHRoaXMgdGV4dGFyZWEgaXMgZm9jdXNlZCwgb3IgaWYgaXQg
aGFzCisgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLgorICBp
ZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkgeworICAgIHZhciBoYXNGb2N1cyA9IGFjdGl2
ZUVsdCgpCisgICAgb3B0aW9ucy5hdXRvZm9jdXMgPSBoYXNGb2N1cyA9PSB0ZXh0YXJlYSB8fAor
ICAgICAgdGV4dGFyZWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhhc0Zv
Y3VzID09IGRvY3VtZW50LmJvZHkKKyAgfQorCisgIGZ1bmN0aW9uIHNhdmUoKSB7dGV4dGFyZWEu
dmFsdWUgPSBjbS5nZXRWYWx1ZSgpfQorCisgIHZhciByZWFsU3VibWl0CisgIGlmICh0ZXh0YXJl
YS5mb3JtKSB7CisgICAgb24odGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpCisgICAgLy8g
RGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRo
aW5nLgorICAgIGlmICghb3B0aW9ucy5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSB7CisgICAgICB2
YXIgZm9ybSA9IHRleHRhcmVhLmZvcm0KKyAgICAgIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdAor
ICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHdyYXBwZWRTdWJtaXQgPSBmb3JtLnN1Ym1pdCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICBzYXZlKCkKKyAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJl
YWxTdWJtaXQKKyAgICAgICAgICBmb3JtLnN1Ym1pdCgpCisgICAgICAgICAgZm9ybS5zdWJtaXQg
PSB3cmFwcGVkU3VibWl0CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChvcmRlclswXS5s
ZXZlbCA9PSAxICYmIChtID0gc3RyLm1hdGNoKC9eXHMrLykpKSB7Ci0gICAgICAgIG9yZGVyWzBd
LmZyb20gPSBtWzBdLmxlbmd0aDsKLSAgICAgICAgb3JkZXIudW5zaGlmdChuZXcgQmlkaVNwYW4o
MCwgMCwgbVswXS5sZW5ndGgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChsc3Qob3JkZXIpLmxldmVs
ID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xzKyQvKSkpIHsKLSAgICAgICAgbHN0KG9yZGVyKS50
byAtPSBtWzBdLmxlbmd0aDsKLSAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgbGVu
IC0gbVswXS5sZW5ndGgsIGxlbikpOwotICAgICAgfQotICAgICAgaWYgKG9yZGVyWzBdLmxldmVs
ID09IDIpCi0gICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDEsIG9yZGVyWzBdLnRv
LCBvcmRlclswXS50bykpOwotICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRlciku
bGV2ZWwpCi0gICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKG9yZGVyWzBdLmxldmVsLCBs
ZW4sIGxlbikpOwotCi0gICAgICByZXR1cm4gb3JkZXI7Ci0gICAgfTsKLSAgfSkoKTsKLQotICAv
LyBUSEUgRU5ECi0KLSAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjUuNS4xIjsKLQotICByZXR1cm4g
Q29kZU1pcnJvcjsKLX0pOworICAgICAgfSBjYXRjaChlKSB7fQorICAgIH0KKyAgfQorCisgIG9w
dGlvbnMuZmluaXNoSW5pdCA9IGZ1bmN0aW9uIChjbSkgeworICAgIGNtLnNhdmUgPSBzYXZlCisg
ICAgY20uZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXh0YXJlYTsgfQorICAg
IGNtLnRvVGV4dEFyZWEgPSBmdW5jdGlvbiAoKSB7CisgICAgICBjbS50b1RleHRBcmVhID0gaXNO
YU4gLy8gUHJldmVudCB0aGlzIGZyb20gYmVpbmcgcmFuIHR3aWNlCisgICAgICBzYXZlKCkKKyAg
ICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQo
KSkKKyAgICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAiIgorICAgICAgaWYgKHRleHRhcmVh
LmZvcm0pIHsKKyAgICAgICAgb2ZmKHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBzYXZlKQorICAg
ICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCisgICAg
ICAgICAgeyB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQgfQorICAgICAgfQorICAg
IH0KKyAgfQorCisgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSIKKyAgdmFyIGNtID0g
Q29kZU1pcnJvcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gdGV4dGFyZWEucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOyB9LAorICAgIG9wdGlvbnMp
CisgIHJldHVybiBjbQorfQorCitmdW5jdGlvbiBhZGRMZWdhY3lQcm9wcyhDb2RlTWlycm9yKSB7
CisgIENvZGVNaXJyb3Iub2ZmID0gb2ZmCisgIENvZGVNaXJyb3Iub24gPSBvbgorICBDb2RlTWly
cm9yLndoZWVsRXZlbnRQaXhlbHMgPSB3aGVlbEV2ZW50UGl4ZWxzCisgIENvZGVNaXJyb3IuRG9j
ID0gRG9jCisgIENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9IHNwbGl0TGluZXNBdXRvCisgIENvZGVN
aXJyb3IuY291bnRDb2x1bW4gPSBjb3VudENvbHVtbgorICBDb2RlTWlycm9yLmZpbmRDb2x1bW4g
PSBmaW5kQ29sdW1uCisgIENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9IGlzV29yZENoYXJCYXNpYwor
ICBDb2RlTWlycm9yLlBhc3MgPSBQYXNzCisgIENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsCisg
IENvZGVNaXJyb3IuTGluZSA9IExpbmUKKyAgQ29kZU1pcnJvci5jaGFuZ2VFbmQgPSBjaGFuZ2VF
bmQKKyAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHNjcm9sbGJhck1vZGVsCisgIENvZGVN
aXJyb3IuUG9zID0gUG9zCisgIENvZGVNaXJyb3IuY21wUG9zID0gY21wCisgIENvZGVNaXJyb3Iu
bW9kZXMgPSBtb2RlcworICBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IG1pbWVNb2RlcworICBDb2Rl
TWlycm9yLnJlc29sdmVNb2RlID0gcmVzb2x2ZU1vZGUKKyAgQ29kZU1pcnJvci5nZXRNb2RlID0g
Z2V0TW9kZQorICBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zID0gbW9kZUV4dGVuc2lvbnMKKyAg
Q29kZU1pcnJvci5leHRlbmRNb2RlID0gZXh0ZW5kTW9kZQorICBDb2RlTWlycm9yLmNvcHlTdGF0
ZSA9IGNvcHlTdGF0ZQorICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlCisgIENv
ZGVNaXJyb3IuaW5uZXJNb2RlID0gaW5uZXJNb2RlCisgIENvZGVNaXJyb3IuY29tbWFuZHMgPSBj
b21tYW5kcworICBDb2RlTWlycm9yLmtleU1hcCA9IGtleU1hcAorICBDb2RlTWlycm9yLmtleU5h
bWUgPSBrZXlOYW1lCisgIENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGlzTW9kaWZpZXJLZXkK
KyAgQ29kZU1pcnJvci5sb29rdXBLZXkgPSBsb29rdXBLZXkKKyAgQ29kZU1pcnJvci5ub3JtYWxp
emVLZXlNYXAgPSBub3JtYWxpemVLZXlNYXAKKyAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBT
dHJpbmdTdHJlYW0KKyAgQ29kZU1pcnJvci5TaGFyZWRUZXh0TWFya2VyID0gU2hhcmVkVGV4dE1h
cmtlcgorICBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBUZXh0TWFya2VyCisgIENvZGVNaXJyb3Iu
TGluZVdpZGdldCA9IExpbmVXaWRnZXQKKyAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0g
ZV9wcmV2ZW50RGVmYXVsdAorICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZV9zdG9w
UHJvcGFnYXRpb24KKyAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3AKKyAgQ29kZU1pcnJvci5h
ZGRDbGFzcyA9IGFkZENsYXNzCisgIENvZGVNaXJyb3IuY29udGFpbnMgPSBjb250YWlucworICBD
b2RlTWlycm9yLnJtQ2xhc3MgPSBybUNsYXNzCisgIENvZGVNaXJyb3Iua2V5TmFtZXMgPSBrZXlO
YW1lcworfQorCisvLyBFRElUT1IgQ09OU1RSVUNUT1IKKworZGVmaW5lT3B0aW9ucyhDb2RlTWly
cm9yKQorCithZGRFZGl0b3JNZXRob2RzKENvZGVNaXJyb3IpCisKKy8vIFNldCB1cCBtZXRob2Rz
IG9uIENvZGVNaXJyb3IncyBwcm90b3R5cGUgdG8gcmVkaXJlY3QgdG8gdGhlIGVkaXRvcidzIGRv
Y3VtZW50LgordmFyIGRvbnREZWxlZ2F0ZSA9ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRF
ZGl0b3IgY29uc3RydWN0b3IiLnNwbGl0KCIgIikKK2ZvciAodmFyIHByb3AgaW4gRG9jLnByb3Rv
dHlwZSkgeyBpZiAoRG9jLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9m
KGRvbnREZWxlZ2F0ZSwgcHJvcCkgPCAwKQorICB7IENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3Bd
ID0gKGZ1bmN0aW9uKG1ldGhvZCkgeworICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0
aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpfQorICB9KShEb2MucHJvdG90eXBlW3Byb3Bd
KSB9IH0KKworZXZlbnRNaXhpbihEb2MpCisKKy8vIElOUFVUIEhBTkRMSU5HCisKK0NvZGVNaXJy
b3IuaW5wdXRTdHlsZXMgPSB7InRleHRhcmVhIjogVGV4dGFyZWFJbnB1dCwgImNvbnRlbnRlZGl0
YWJsZSI6IENvbnRlbnRFZGl0YWJsZUlucHV0fQorCisvLyBNT0RFIERFRklOSVRJT04gQU5EIFFV
RVJZSU5HCisKKy8vIEV4dHJhIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGFzIHRoZSBtb2RlJ3MgZGVw
ZW5kZW5jaWVzLCB3aGljaCBpcworLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2Ug
bG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseQorLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQg
bWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pCitDb2RlTWlycm9yLmRlZmlu
ZU1vZGUgPSBmdW5jdGlvbihuYW1lLyosIG1vZGUsIOKApiovKSB7CisgIGlmICghQ29kZU1pcnJv
ci5kZWZhdWx0cy5tb2RlICYmIG5hbWUgIT0gIm51bGwiKSB7IENvZGVNaXJyb3IuZGVmYXVsdHMu
bW9kZSA9IG5hbWUgfQorICBkZWZpbmVNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKK30KKwor
Q29kZU1pcnJvci5kZWZpbmVNSU1FID0gZGVmaW5lTUlNRQorCisvLyBNaW5pbWFsIGRlZmF1bHQg
bW9kZS4KK0NvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJu
ICh7dG9rZW46IGZ1bmN0aW9uIChzdHJlYW0pIHsgcmV0dXJuIHN0cmVhbS5za2lwVG9FbmQoKTsg
fX0pOyB9KQorQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKQorCisv
LyBFWFRFTlNJT05TCisKK0NvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5h
bWUsIGZ1bmMpIHsKKyAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jCit9CitDb2Rl
TWlycm9yLmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7CisgIERv
Yy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jCit9CisKK0NvZGVNaXJyb3IuZnJvbVRleHRBcmVhID0g
ZnJvbVRleHRBcmVhCisKK2FkZExlZ2FjeVByb3BzKENvZGVNaXJyb3IpCisKK0NvZGVNaXJyb3Iu
dmVyc2lvbiA9ICI1LjIxLjEiCisKK3JldHVybiBDb2RlTWlycm9yOworCit9KSkpOwpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVz
Y3JpcHQuanMKaW5kZXggZGEwZWIyZC4uYWRmMjE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMKQEAgLTI1LDcgKzI1LDcgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgIHZh
ciBvcGVyYXRvcnMgPSAvXig/Oi0+fD0+fFwrWys9XT98LVtcLT1dP3xcKltcKj1dP3xcL1tcLz1d
P3xbPSFdPXw8Wz48XT89P3w+Pj89P3wlPT98Jj0/fFx8PT98XF49P3xcfnwhfFw/fChvcnxhbmR8
XHxcfHwmJnxcPyk9KS87CiAgIHZhciBkZWxpbWl0ZXJzID0gL14oPzpbKClcW1xde30sOmA9O118
XC5cLj9cLj8pLzsKICAgdmFyIGlkZW50aWZpZXJzID0gL15bX0EtWmEteiRdW19BLVphLXokMC05
XSovOwotICB2YXIgcHJvcGVydGllcyA9IC9eKEB8dGhpc1wuKVtfQS1aYS16JF1bX0EtWmEteiQw
LTldKi87CisgIHZhciBhdFByb3AgPSAvXkBbX0EtWmEteiRdW19BLVphLXokMC05XSovOwogCiAg
IHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbImFuZCIsICJvciIsICJub3QiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyIsICJpc250IiwgImluIiwKQEAgLTE0
NSw2ICsxNDUsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0
aW9uKGNvbmYsIHBhcnNlckNvbmYpIHsKICAgICAgIH0KICAgICB9CiAKKworCiAgICAgLy8gSGFu
ZGxlIG9wZXJhdG9ycyBhbmQgZGVsaW1pdGVycwogICAgIGlmIChzdHJlYW0ubWF0Y2gob3BlcmF0
b3JzKSB8fCBzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHsKICAgICAgIHJldHVybiAib3Bl
cmF0b3IiOwpAQCAtMTU3LDYgKzE1OSwxMCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZl
ZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNlckNvbmYpIHsKICAgICAgIHJldHVybiAiYXRv
bSI7CiAgICAgfQogCisgICAgaWYgKHN0cmVhbS5tYXRjaChhdFByb3ApIHx8IHN0YXRlLnByb3Ag
JiYgc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgeworICAgICAgcmV0dXJuICJwcm9wZXJ0eSI7
CisgICAgfQorCiAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsKICAgICAgIHJldHVy
biAia2V5d29yZCI7CiAgICAgfQpAQCAtMTY1LDEwICsxNzEsNiBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNlckNvbmYpIHsKICAgICAg
IHJldHVybiAidmFyaWFibGUiOwogICAgIH0KIAotICAgIGlmIChzdHJlYW0ubWF0Y2gocHJvcGVy
dGllcykpIHsKLSAgICAgIHJldHVybiAicHJvcGVydHkiOwotICAgIH0KLQogICAgIC8vIEhhbmRs
ZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICBzdHJlYW0ubmV4dCgpOwogICAgIHJldHVybiBFUlJP
UkNMQVNTOwpAQCAtMjY1LDI0ICsyNjcsMTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2Zm
ZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICAgdmFyIHN0eWxlID0g
c3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0u
Y3VycmVudCgpOwogCi0gICAgLy8gSGFuZGxlICIuIiBjb25uZWN0ZWQgaWRlbnRpZmllcnMKLSAg
ICBpZiAoY3VycmVudCA9PT0gIi4iKSB7Ci0gICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0
cmVhbSwgc3RhdGUpOwotICAgICAgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7Ci0gICAgICBp
ZiAoL15cLltcdyRdKyQvLnRlc3QoY3VycmVudCkpIHsKLSAgICAgICAgcmV0dXJuICJ2YXJpYWJs
ZSI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKLSAgICAgIH0K
LSAgICB9Ci0KICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy4KICAgICBpZiAoY3VycmVudCA9
PT0gInJldHVybiIpIHsKICAgICAgIHN0YXRlLmRlZGVudCA9IHRydWU7CiAgICAgfQotICAgIGlm
ICgoKGN1cnJlbnQgPT09ICItPiIgfHwgY3VycmVudCA9PT0gIj0+IikgJiYKLSAgICAgICAgICFz
dGF0ZS5sYW1iZGEgJiYKLSAgICAgICAgICFzdHJlYW0ucGVlaygpKQorICAgIGlmICgoKGN1cnJl
bnQgPT09ICItPiIgfHwgY3VycmVudCA9PT0gIj0+IikgJiYgc3RyZWFtLmVvbCgpKQogICAgICAg
ICB8fCBzdHlsZSA9PT0gImluZGVudCIpIHsKICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsK
ICAgICB9CkBAIC0zMjQsOCArMzEzLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVz
Y3JpcHQiLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICAgICByZXR1cm4gewogICAg
ICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICBzY29wZToge29mZnNldDpiYXNlY29s
dW1uIHx8IDAsIHR5cGU6ImNvZmZlZSIsIHByZXY6IG51bGwsIGFsaWduOiBmYWxzZX0sCi0gICAg
ICAgIGxhc3RUb2tlbjogbnVsbCwKLSAgICAgICAgbGFtYmRhOiBmYWxzZSwKKyAgICAgICAgcHJv
cDogZmFsc2UsCiAgICAgICAgIGRlZGVudDogMAogICAgICAgfTsKICAgICB9LApAQCAtMzM1LDEy
ICszMjMsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmYsIHBhcnNlckNvbmYpIHsKICAgICAgIGlmIChmaWxsQWxpZ24gJiYgc3RyZWFtLnNvbCgp
KSBmaWxsQWxpZ24uYWxpZ24gPSBmYWxzZTsKIAogICAgICAgdmFyIHN0eWxlID0gdG9rZW5MZXhl
cihzdHJlYW0sIHN0YXRlKTsKLSAgICAgIGlmIChmaWxsQWxpZ24gJiYgc3R5bGUgJiYgc3R5bGUg
IT0gImNvbW1lbnQiKSBmaWxsQWxpZ24uYWxpZ24gPSB0cnVlOwotCi0gICAgICBzdGF0ZS5sYXN0
VG9rZW4gPSB7c3R5bGU6c3R5bGUsIGNvbnRlbnQ6IHN0cmVhbS5jdXJyZW50KCl9OwotCi0gICAg
ICBpZiAoc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5sYW1iZGEpIHsKLSAgICAgICAgc3RhdGUubGFt
YmRhID0gZmFsc2U7CisgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUgIT0gImNvbW1lbnQiKSB7Cisg
ICAgICAgIGlmIChmaWxsQWxpZ24pIGZpbGxBbGlnbi5hbGlnbiA9IHRydWU7CisgICAgICAgIHN0
YXRlLnByb3AgPSBzdHlsZSA9PSAicHVuY3R1YXRpb24iICYmIHN0cmVhbS5jdXJyZW50KCkgPT0g
Ii4iCiAgICAgICB9CiAKICAgICAgIHJldHVybiBzdHlsZTsKQEAgLTM2NSw1ICszNTAsNiBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNl
ckNvbmYpIHsKIH0pOwogCiBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jb2ZmZWVzY3Jp
cHQiLCAiY29mZmVlc2NyaXB0Iik7CitDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvY29mZmVl
c2NyaXB0IiwgImNvZmZlZXNjcmlwdCIpOwogCiB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
Y29tbWVudC5qcwppbmRleCAyZGQxMTRkLi5kNzFjZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jb21tZW50LmpzCkBAIC0yMSwyNiArMjEsNDAgQEAKICAgfQogCiAgIENvZGVNaXJyb3Iu
Y29tbWFuZHMudG9nZ2xlQ29tbWVudCA9IGZ1bmN0aW9uKGNtKSB7Ci0gICAgdmFyIG1pbkxpbmUg
PSBJbmZpbml0eSwgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgbW9kZSA9IG51bGw7Cisg
ICAgY20udG9nZ2xlQ29tbWVudCgpOworICB9OworCisgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5z
aW9uKCJ0b2dnbGVDb21tZW50IiwgZnVuY3Rpb24ob3B0aW9ucykgeworICAgIGlmICghb3B0aW9u
cykgb3B0aW9ucyA9IG5vT3B0aW9uczsKKyAgICB2YXIgY20gPSB0aGlzOworICAgIHZhciBtaW5M
aW5lID0gSW5maW5pdHksIHJhbmdlcyA9IHRoaXMubGlzdFNlbGVjdGlvbnMoKSwgbW9kZSA9IG51
bGw7CiAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewog
ICAgICAgdmFyIGZyb20gPSByYW5nZXNbaV0uZnJvbSgpLCB0byA9IHJhbmdlc1tpXS50bygpOwog
ICAgICAgaWYgKGZyb20ubGluZSA+PSBtaW5MaW5lKSBjb250aW51ZTsKICAgICAgIGlmICh0by5s
aW5lID49IG1pbkxpbmUpIHRvID0gUG9zKG1pbkxpbmUsIDApOwogICAgICAgbWluTGluZSA9IGZy
b20ubGluZTsKICAgICAgIGlmIChtb2RlID09IG51bGwpIHsKLSAgICAgICAgaWYgKGNtLnVuY29t
bWVudChmcm9tLCB0bykpIG1vZGUgPSAidW4iOwotICAgICAgICBlbHNlIHsgY20ubGluZUNvbW1l
bnQoZnJvbSwgdG8pOyBtb2RlID0gImxpbmUiOyB9CisgICAgICAgIGlmIChjbS51bmNvbW1lbnQo
ZnJvbSwgdG8sIG9wdGlvbnMpKSBtb2RlID0gInVuIjsKKyAgICAgICAgZWxzZSB7IGNtLmxpbmVD
b21tZW50KGZyb20sIHRvLCBvcHRpb25zKTsgbW9kZSA9ICJsaW5lIjsgfQogICAgICAgfSBlbHNl
IGlmIChtb2RlID09ICJ1biIpIHsKLSAgICAgICAgY20udW5jb21tZW50KGZyb20sIHRvKTsKKyAg
ICAgICAgY20udW5jb21tZW50KGZyb20sIHRvLCBvcHRpb25zKTsKICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGNtLmxpbmVDb21tZW50KGZyb20sIHRvKTsKKyAgICAgICAgY20ubGluZUNvbW1lbnQo
ZnJvbSwgdG8sIG9wdGlvbnMpOwogICAgICAgfQogICAgIH0KLSAgfTsKKyAgfSk7CisKKyAgLy8g
Um91Z2ggaGV1cmlzdGljIHRvIHRyeSBhbmQgZGV0ZWN0IGxpbmVzIHRoYXQgYXJlIHBhcnQgb2Yg
bXVsdGktbGluZSBzdHJpbmcKKyAgZnVuY3Rpb24gcHJvYmFibHlJbnNpZGVTdHJpbmcoY20sIHBv
cywgbGluZSkgeworICAgIHJldHVybiAvXGJzdHJpbmdcYi8udGVzdChjbS5nZXRUb2tlblR5cGVB
dChQb3MocG9zLmxpbmUsIDApKSkgJiYgIS9eW1wnXCJgXS8udGVzdChsaW5lKQorICB9CiAKICAg
Q29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImxpbmVDb21tZW50IiwgZnVuY3Rpb24oZnJvbSwg
dG8sIG9wdGlvbnMpIHsKICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSBub09wdGlvbnM7CiAg
ICAgdmFyIHNlbGYgPSB0aGlzLCBtb2RlID0gc2VsZi5nZXRNb2RlQXQoZnJvbSk7CisgICAgdmFy
IGZpcnN0TGluZSA9IHNlbGYuZ2V0TGluZShmcm9tLmxpbmUpOworICAgIGlmIChmaXJzdExpbmUg
PT0gbnVsbCB8fCBwcm9iYWJseUluc2lkZVN0cmluZyhzZWxmLCBmcm9tLCBmaXJzdExpbmUpKSBy
ZXR1cm47CisKICAgICB2YXIgY29tbWVudFN0cmluZyA9IG9wdGlvbnMubGluZUNvbW1lbnQgfHwg
bW9kZS5saW5lQ29tbWVudDsKICAgICBpZiAoIWNvbW1lbnRTdHJpbmcpIHsKICAgICAgIGlmIChv
cHRpb25zLmJsb2NrQ29tbWVudFN0YXJ0IHx8IG1vZGUuYmxvY2tDb21tZW50U3RhcnQpIHsKQEAg
LTQ5LDE1ICs2MywyMSBAQAogICAgICAgfQogICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB2YXIg
Zmlyc3RMaW5lID0gc2VsZi5nZXRMaW5lKGZyb20ubGluZSk7Ci0gICAgaWYgKGZpcnN0TGluZSA9
PSBudWxsKSByZXR1cm47CisKICAgICB2YXIgZW5kID0gTWF0aC5taW4odG8uY2ggIT0gMCB8fCB0
by5saW5lID09IGZyb20ubGluZSA/IHRvLmxpbmUgKyAxIDogdG8ubGluZSwgc2VsZi5sYXN0TGlu
ZSgpICsgMSk7CiAgICAgdmFyIHBhZCA9IG9wdGlvbnMucGFkZGluZyA9PSBudWxsID8gIiAiIDog
b3B0aW9ucy5wYWRkaW5nOwogICAgIHZhciBibGFua0xpbmVzID0gb3B0aW9ucy5jb21tZW50Qmxh
bmtMaW5lcyB8fCBmcm9tLmxpbmUgPT0gdG8ubGluZTsKIAogICAgIHNlbGYub3BlcmF0aW9uKGZ1
bmN0aW9uKCkgewogICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7Ci0gICAgICAgIHZhciBiYXNl
U3RyaW5nID0gZmlyc3RMaW5lLnNsaWNlKDAsIGZpcnN0Tm9uV1MoZmlyc3RMaW5lKSk7CisgICAg
ICAgIHZhciBiYXNlU3RyaW5nID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGlu
ZTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgdmFyIGxpbmUgPSBzZWxmLmdldExpbmUoaSk7
CisgICAgICAgICAgdmFyIHdoaXRlc3BhY2UgPSBsaW5lLnNsaWNlKDAsIGZpcnN0Tm9uV1MobGlu
ZSkpOworICAgICAgICAgIGlmIChiYXNlU3RyaW5nID09IG51bGwgfHwgYmFzZVN0cmluZy5sZW5n
dGggPiB3aGl0ZXNwYWNlLmxlbmd0aCkgeworICAgICAgICAgICAgYmFzZVN0cmluZyA9IHdoaXRl
c3BhY2U7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9t
LmxpbmU7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgIHZhciBsaW5lID0gc2VsZi5nZXRMaW5l
KGkpLCBjdXQgPSBiYXNlU3RyaW5nLmxlbmd0aDsKICAgICAgICAgICBpZiAoIWJsYW5rTGluZXMg
JiYgIW5vbldTLnRlc3QobGluZSkpIGNvbnRpbnVlOwpAQCAtODMsNiArMTAzLDcgQEAKICAgICAg
ICAgc2VsZi5saW5lQ29tbWVudChmcm9tLCB0bywgb3B0aW9ucyk7CiAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmICgvXGJjb21tZW50XGIvLnRlc3Qoc2VsZi5nZXRUb2tlblR5cGVBdChQb3Mo
ZnJvbS5saW5lLCAwKSkpKSByZXR1cm4KIAogICAgIHZhciBlbmQgPSBNYXRoLm1pbih0by5saW5l
LCBzZWxmLmxhc3RMaW5lKCkpOwogICAgIGlmIChlbmQgIT0gZnJvbS5saW5lICYmIHRvLmNoID09
IDAgJiYgbm9uV1MudGVzdChzZWxmLmdldExpbmUoZW5kKSkpIC0tZW5kOwpAQCAtMTIwLDcgKzE0
MSw3IEBACiAgICAgICAgIHZhciBsaW5lID0gc2VsZi5nZXRMaW5lKGkpOwogICAgICAgICB2YXIg
Zm91bmQgPSBsaW5lLmluZGV4T2YobGluZVN0cmluZyk7CiAgICAgICAgIGlmIChmb3VuZCA+IC0x
ICYmICEvY29tbWVudC8udGVzdChzZWxmLmdldFRva2VuVHlwZUF0KFBvcyhpLCBmb3VuZCArIDEp
KSkpIGZvdW5kID0gLTE7Ci0gICAgICAgIGlmIChmb3VuZCA9PSAtMSAmJiAoaSAhPSBlbmQgfHwg
aSA9PSBzdGFydCkgJiYgbm9uV1MudGVzdChsaW5lKSkgYnJlYWsgbGluZUNvbW1lbnQ7CisgICAg
ICAgIGlmIChmb3VuZCA9PSAtMSAmJiBub25XUy50ZXN0KGxpbmUpKSBicmVhayBsaW5lQ29tbWVu
dDsKICAgICAgICAgaWYgKGZvdW5kID4gLTEgJiYgbm9uV1MudGVzdChsaW5lLnNsaWNlKDAsIGZv
dW5kKSkpIGJyZWFrIGxpbmVDb21tZW50OwogICAgICAgICBsaW5lcy5wdXNoKGxpbmUpOwogICAg
ICAgfQpAQCAtMTQyLDEzICsxNjMsMTUgQEAKICAgICB2YXIgZW5kU3RyaW5nID0gb3B0aW9ucy5i
bG9ja0NvbW1lbnRFbmQgfHwgbW9kZS5ibG9ja0NvbW1lbnRFbmQ7CiAgICAgaWYgKCFzdGFydFN0
cmluZyB8fCAhZW5kU3RyaW5nKSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIGxlYWQgPSBvcHRpb25z
LmJsb2NrQ29tbWVudExlYWQgfHwgbW9kZS5ibG9ja0NvbW1lbnRMZWFkOwotICAgIHZhciBzdGFy
dExpbmUgPSBzZWxmLmdldExpbmUoc3RhcnQpLCBlbmRMaW5lID0gZW5kID09IHN0YXJ0ID8gc3Rh
cnRMaW5lIDogc2VsZi5nZXRMaW5lKGVuZCk7Ci0gICAgdmFyIG9wZW4gPSBzdGFydExpbmUuaW5k
ZXhPZihzdGFydFN0cmluZyksIGNsb3NlID0gZW5kTGluZS5sYXN0SW5kZXhPZihlbmRTdHJpbmcp
OworICAgIHZhciBzdGFydExpbmUgPSBzZWxmLmdldExpbmUoc3RhcnQpLCBvcGVuID0gc3RhcnRM
aW5lLmluZGV4T2Yoc3RhcnRTdHJpbmcpCisgICAgaWYgKG9wZW4gPT0gLTEpIHJldHVybiBmYWxz
ZQorICAgIHZhciBlbmRMaW5lID0gZW5kID09IHN0YXJ0ID8gc3RhcnRMaW5lIDogc2VsZi5nZXRM
aW5lKGVuZCkKKyAgICB2YXIgY2xvc2UgPSBlbmRMaW5lLmluZGV4T2YoZW5kU3RyaW5nLCBlbmQg
PT0gc3RhcnQgPyBvcGVuICsgc3RhcnRTdHJpbmcubGVuZ3RoIDogMCk7CiAgICAgaWYgKGNsb3Nl
ID09IC0xICYmIHN0YXJ0ICE9IGVuZCkgewogICAgICAgZW5kTGluZSA9IHNlbGYuZ2V0TGluZSgt
LWVuZCk7Ci0gICAgICBjbG9zZSA9IGVuZExpbmUubGFzdEluZGV4T2YoZW5kU3RyaW5nKTsKKyAg
ICAgIGNsb3NlID0gZW5kTGluZS5pbmRleE9mKGVuZFN0cmluZyk7CiAgICAgfQotICAgIGlmIChv
cGVuID09IC0xIHx8IGNsb3NlID09IC0xIHx8CisgICAgaWYgKGNsb3NlID09IC0xIHx8CiAgICAg
ICAgICEvY29tbWVudC8udGVzdChzZWxmLmdldFRva2VuVHlwZUF0KFBvcyhzdGFydCwgb3BlbiAr
IDEpKSkgfHwKICAgICAgICAgIS9jb21tZW50Ly50ZXN0KHNlbGYuZ2V0VG9rZW5UeXBlQXQoUG9z
KGVuZCwgY2xvc2UgKyAxKSkpKQogICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3Mu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL2Nzcy5qcwppbmRleCBmNjdjZDIxLi5hMWQ1YTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2Nzcy5qcwpAQCAtMTIsOSArMTIsOCBAQAogInVzZSBzdHJpY3QiOwogCiBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7Ci0gIHZhciBw
cm92aWRlZCA9IHBhcnNlckNvbmZpZzsKKyAgdmFyIGlubGluZSA9IHBhcnNlckNvbmZpZy5pbmxp
bmUKICAgaWYgKCFwYXJzZXJDb25maWcucHJvcGVydHlLZXl3b3JkcykgcGFyc2VyQ29uZmlnID0g
Q29kZU1pcnJvci5yZXNvbHZlTW9kZSgidGV4dC9jc3MiKTsKLSAgcGFyc2VyQ29uZmlnLmlubGlu
ZSA9IHByb3ZpZGVkLmlubGluZTsKIAogICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRV
bml0LAogICAgICAgdG9rZW5Ib29rcyA9IHBhcnNlckNvbmZpZy50b2tlbkhvb2tzLApAQCAtMjgs
NyArMjcsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgICAgICBjb3VudGVyRGVzY3JpcHRvcnMgPSBwYXJzZXJDb25maWcu
Y291bnRlckRlc2NyaXB0b3JzIHx8IHt9LAogICAgICAgY29sb3JLZXl3b3JkcyA9IHBhcnNlckNv
bmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAgICAgdmFsdWVLZXl3b3JkcyA9IHBhcnNlckNv
bmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgYWxsb3dOZXN0ZWQgPSBwYXJzZXJDb25m
aWcuYWxsb3dOZXN0ZWQ7CisgICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05l
c3RlZCwKKyAgICAgIHN1cHBvcnRzQXRDb21wb25lbnQgPSBwYXJzZXJDb25maWcuc3VwcG9ydHNB
dENvbXBvbmVudCA9PT0gdHJ1ZTsKIAogICB2YXIgdHlwZSwgb3ZlcnJpZGU7CiAgIGZ1bmN0aW9u
IHJldChzdHlsZSwgdHApIHsgdHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7IH0KQEAgLTEyMiwxMyAr
MTIyLDE0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICB0aGlzLnByZXYgPSBwcmV2OwogICB9CiAKLSAgZnVuY3Rpb24g
cHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSkgewotICAgIHN0YXRlLmNvbnRleHQgPSBu
ZXcgQ29udGV4dCh0eXBlLCBzdHJlYW0uaW5kZW50YXRpb24oKSArIGluZGVudFVuaXQsIHN0YXRl
LmNvbnRleHQpOworICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCB0eXBlLCBp
bmRlbnQpIHsKKyAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQodHlwZSwgc3RyZWFtLmlu
ZGVudGF0aW9uKCkgKyAoaW5kZW50ID09PSBmYWxzZSA/IDAgOiBpbmRlbnRVbml0KSwgc3RhdGUu
Y29udGV4dCk7CiAgICAgcmV0dXJuIHR5cGU7CiAgIH0KIAogICBmdW5jdGlvbiBwb3BDb250ZXh0
KHN0YXRlKSB7Ci0gICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKKyAgICBp
ZiAoc3RhdGUuY29udGV4dC5wcmV2KQorICAgICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRl
eHQucHJldjsKICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOwogICB9CiAKQEAgLTE2MCw5
ICsxNjEsMTMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0s
ICJibG9jayIpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAifSIgJiYgc3RhdGUuY29udGV4dC5w
cmV2KSB7CiAgICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Ci0gICAgfSBlbHNlIGlmICgv
QChtZWRpYXxzdXBwb3J0c3woLW1vei0pP2RvY3VtZW50KS8udGVzdCh0eXBlKSkgeworICAgIH0g
ZWxzZSBpZiAoc3VwcG9ydHNBdENvbXBvbmVudCAmJiAvQGNvbXBvbmVudC8udGVzdCh0eXBlKSkg
eworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJhdENvbXBvbmVudEJs
b2NrIik7CisgICAgfSBlbHNlIGlmICgvXkAoLW1vei0pP2RvY3VtZW50JC8udGVzdCh0eXBlKSkg
eworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJkb2N1bWVudFR5cGVz
Iik7CisgICAgfSBlbHNlIGlmICgvXkAobWVkaWF8c3VwcG9ydHN8KC1tb3otKT9kb2N1bWVudHxp
bXBvcnQpJC8udGVzdCh0eXBlKSkgewogICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBz
dHJlYW0sICJhdEJsb2NrIik7Ci0gICAgfSBlbHNlIGlmICgvQChmb250LWZhY2V8Y291bnRlci1z
dHlsZSkvLnRlc3QodHlwZSkpIHsKKyAgICB9IGVsc2UgaWYgKC9eQChmb250LWZhY2V8Y291bnRl
ci1zdHlsZSkvLnRlc3QodHlwZSkpIHsKICAgICAgIHN0YXRlLnN0YXRlQXJnID0gdHlwZTsKICAg
ICAgIHJldHVybiAicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSI7CiAgICAgfSBlbHNlIGlmICgv
XkAoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzJC8udGVzdCh0eXBlKSkgewpAQCAtMjIy
LDcgKzIyNyw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAifSIgfHwgdHlwZSA9PSAieyIpIHJl
dHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICAgIGlmICh0eXBlID09ICIo
IikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJwYXJlbnMiKTsKIAotICAgIGlm
ICh0eXBlID09ICJoYXNoIiAmJiAhL14jKFswLTlhLWZBLWZdezN9fFswLTlhLWZBLWZdezZ9KSQv
LnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKKyAgICBpZiAodHlwZSA9PSAiaGFzaCIgJiYgIS9e
IyhbMC05YS1mQS1mXXszLDR9fFswLTlhLWZBLWZdezZ9fFswLTlhLWZBLWZdezh9KSQvLnRlc3Qo
c3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgIG92ZXJyaWRlICs9ICIgZXJyb3IiOwogICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHsKICAgICAgIHdvcmRBc1ZhbHVlKHN0cmVhbSk7CkBA
IC0yNTUsMTcgKzI2MCwyNiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBz
dGF0ZSk7CiAgIH07CiAKKyAgc3RhdGVzLmRvY3VtZW50VHlwZXMgPSBmdW5jdGlvbih0eXBlLCBz
dHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIGRvY3VtZW50VHlwZXMu
aGFzT3duUHJvcGVydHkoc3RyZWFtLmN1cnJlbnQoKSkpIHsKKyAgICAgIG92ZXJyaWRlID0gInRh
ZyI7CisgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICAgIH0gZWxzZSB7CisgICAg
ICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICB9
OworCiAgIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewog
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJh
dEJsb2NrX3BhcmVucyIpOwotICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3Mo
dHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIn0iIHx8IHR5cGUgPT0gIjsi
KSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAgICBpZiAodHlwZSA9
PSAieyIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKSAmJiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCBhbGxvd05lc3RlZCA/ICJibG9jayIgOiAidG9wIik7CiAKKyAgICBpZiAodHlwZSA9PSAi
aW50ZXJwb2xhdGlvbiIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiaW50ZXJw
b2xhdGlvbiIpOworCiAgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CiAgICAgICB2YXIgd29yZCA9
IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKICAgICAgIGlmICh3b3JkID09ICJvbmx5
IiB8fCB3b3JkID09ICJub3QiIHx8IHdvcmQgPT0gImFuZCIgfHwgd29yZCA9PSAib3IiKQogICAg
ICAgICBvdmVycmlkZSA9ICJrZXl3b3JkIjsKLSAgICAgIGVsc2UgaWYgKGRvY3VtZW50VHlwZXMu
aGFzT3duUHJvcGVydHkod29yZCkpCi0gICAgICAgIG92ZXJyaWRlID0gInRhZyI7CiAgICAgICBl
bHNlIGlmIChtZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKQogICAgICAgICBvdmVycmlk
ZSA9ICJhdHRyaWJ1dGUiOwogICAgICAgZWxzZSBpZiAobWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9w
ZXJ0eSh3b3JkKSkKQEAgLTI4Niw2ICszMDAsMTYgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBzdGF0ZS5j
b250ZXh0LnR5cGU7CiAgIH07CiAKKyAgc3RhdGVzLmF0Q29tcG9uZW50QmxvY2sgPSBmdW5jdGlv
bih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKQorICAgICAgcmV0
dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsi
KQorICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBz
dHJlYW0sIGFsbG93TmVzdGVkID8gImJsb2NrIiA6ICJ0b3AiLCBmYWxzZSk7CisgICAgaWYgKHR5
cGUgPT0gIndvcmQiKQorICAgICAgb3ZlcnJpZGUgPSAiZXJyb3IiOworICAgIHJldHVybiBzdGF0
ZS5jb250ZXh0LnR5cGU7CisgIH07CisKICAgc3RhdGVzLmF0QmxvY2tfcGFyZW5zID0gZnVuY3Rp
b24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewogICAgIGlmICh0eXBlID09ICIpIikgcmV0dXJuIHBv
cENvbnRleHQoc3RhdGUpOwogICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICJ9IikgcmV0
dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSwgMik7CkBAIC0zNDMsOSArMzY3LDkg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAg
ICAgIHJldHVybiB7dG9rZW5pemU6IG51bGwsCi0gICAgICAgICAgICAgIHN0YXRlOiBwYXJzZXJD
b25maWcuaW5saW5lID8gImJsb2NrIiA6ICJ0b3AiLAorICAgICAgICAgICAgICBzdGF0ZTogaW5s
aW5lID8gImJsb2NrIiA6ICJ0b3AiLAogICAgICAgICAgICAgICBzdGF0ZUFyZzogbnVsbCwKLSAg
ICAgICAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQocGFyc2VyQ29uZmlnLmlubGluZSA/ICJi
bG9jayIgOiAidG9wIiwgYmFzZSB8fCAwLCBudWxsKX07CisgICAgICAgICAgICAgIGNvbnRleHQ6
IG5ldyBDb250ZXh0KGlubGluZSA/ICJibG9jayIgOiAidG9wIiwgYmFzZSB8fCAwLCBudWxsKX07
CiAgICAgfSwKIAogICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CkBAIC0zNjQs
MTIgKzM4OCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRl
eHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwogICAgICAgdmFyIGluZGVudCA9IGN4Lmlu
ZGVudDsKICAgICAgIGlmIChjeC50eXBlID09ICJwcm9wIiAmJiAoY2ggPT0gIn0iIHx8IGNoID09
ICIpIikpIGN4ID0gY3gucHJldjsKLSAgICAgIGlmIChjeC5wcmV2ICYmCi0gICAgICAgICAgKGNo
ID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8IGN4LnR5cGUgPT0gInRvcCIgfHwgY3gu
dHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlwZSA9PSAicmVzdHJpY3RlZF9hdEJsb2Nr
IikgfHwKLSAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09ICJwYXJlbnMiIHx8IGN4
LnR5cGUgPT0gImF0QmxvY2tfcGFyZW5zIikgfHwKLSAgICAgICAgICAgY2ggPT0gInsiICYmIChj
eC50eXBlID09ICJhdCIgfHwgY3gudHlwZSA9PSAiYXRCbG9jayIpKSkgewotICAgICAgICBpbmRl
bnQgPSBjeC5pbmRlbnQgLSBpbmRlbnRVbml0OwotICAgICAgICBjeCA9IGN4LnByZXY7CisgICAg
ICBpZiAoY3gucHJldikgeworICAgICAgICBpZiAoY2ggPT0gIn0iICYmIChjeC50eXBlID09ICJi
bG9jayIgfHwgY3gudHlwZSA9PSAidG9wIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
eC50eXBlID09ICJpbnRlcnBvbGF0aW9uIiB8fCBjeC50eXBlID09ICJyZXN0cmljdGVkX2F0Qmxv
Y2siKSkgeworICAgICAgICAgIC8vIFJlc3VtZSBpbmRlbnRhdGlvbiBmcm9tIHBhcmVudCBjb250
ZXh0LgorICAgICAgICAgIGN4ID0gY3gucHJldjsKKyAgICAgICAgICBpbmRlbnQgPSBjeC5pbmRl
bnQ7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIikiICYmIChjeC50eXBlID09ICJwYXJlbnMi
IHx8IGN4LnR5cGUgPT0gImF0QmxvY2tfcGFyZW5zIikgfHwKKyAgICAgICAgICAgIGNoID09ICJ7
IiAmJiAoY3gudHlwZSA9PSAiYXQiIHx8IGN4LnR5cGUgPT0gImF0QmxvY2siKSkgeworICAgICAg
ICAgIC8vIERlZGVudCByZWxhdGl2ZSB0byBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAgaW5k
ZW50ID0gTWF0aC5tYXgoMCwgY3guaW5kZW50IC0gaW5kZW50VW5pdCk7CisgICAgICAgICAgY3gg
PSBjeC5wcmV2OworICAgICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm4gaW5kZW50OwogICAg
IH0sCkBAIC0zODQsNyArNDE0LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBmdW5jdGlvbiBrZXlTZXQoYXJyYXkpIHsK
ICAgICB2YXIga2V5cyA9IHt9OwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3Ro
OyArK2kpIHsKLSAgICAgIGtleXNbYXJyYXlbaV1dID0gdHJ1ZTsKKyAgICAgIGtleXNbYXJyYXlb
aV0udG9Mb3dlckNhc2UoKV0gPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4ga2V5czsKICAgfQpA
QCAtNDIyLDggKzQ1Miw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAiYW5pbWF0aW9uLWRpcmVjdGlvbiIsICJhbmlt
YXRpb24tZHVyYXRpb24iLCAiYW5pbWF0aW9uLWZpbGwtbW9kZSIsCiAgICAgImFuaW1hdGlvbi1p
dGVyYXRpb24tY291bnQiLCAiYW5pbWF0aW9uLW5hbWUiLCAiYW5pbWF0aW9uLXBsYXktc3RhdGUi
LAogICAgICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwgImFwcGVhcmFuY2UiLCAiYXppbXV0
aCIsICJiYWNrZmFjZS12aXNpYmlsaXR5IiwKLSAgICAiYmFja2dyb3VuZCIsICJiYWNrZ3JvdW5k
LWF0dGFjaG1lbnQiLCAiYmFja2dyb3VuZC1jbGlwIiwgImJhY2tncm91bmQtY29sb3IiLAotICAg
ICJiYWNrZ3JvdW5kLWltYWdlIiwgImJhY2tncm91bmQtb3JpZ2luIiwgImJhY2tncm91bmQtcG9z
aXRpb24iLAorICAgICJiYWNrZ3JvdW5kIiwgImJhY2tncm91bmQtYXR0YWNobWVudCIsICJiYWNr
Z3JvdW5kLWJsZW5kLW1vZGUiLCAiYmFja2dyb3VuZC1jbGlwIiwKKyAgICAiYmFja2dyb3VuZC1j
b2xvciIsICJiYWNrZ3JvdW5kLWltYWdlIiwgImJhY2tncm91bmQtb3JpZ2luIiwgImJhY2tncm91
bmQtcG9zaXRpb24iLAogICAgICJiYWNrZ3JvdW5kLXJlcGVhdCIsICJiYWNrZ3JvdW5kLXNpemUi
LCAiYmFzZWxpbmUtc2hpZnQiLCAiYmluZGluZyIsCiAgICAgImJsZWVkIiwgImJvb2ttYXJrLWxh
YmVsIiwgImJvb2ttYXJrLWxldmVsIiwgImJvb2ttYXJrLXN0YXRlIiwKICAgICAiYm9va21hcmst
dGFyZ2V0IiwgImJvcmRlciIsICJib3JkZXItYm90dG9tIiwgImJvcmRlci1ib3R0b20tY29sb3Ii
LApAQCAtNDU0LDkgKzQ4NCw5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rp
b24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAiZm9udC12YXJpYW50LWFsdGVybmF0ZXMi
LCAiZm9udC12YXJpYW50LWNhcHMiLCAiZm9udC12YXJpYW50LWVhc3QtYXNpYW4iLAogICAgICJm
b250LXZhcmlhbnQtbGlnYXR1cmVzIiwgImZvbnQtdmFyaWFudC1udW1lcmljIiwgImZvbnQtdmFy
aWFudC1wb3NpdGlvbiIsCiAgICAgImZvbnQtd2VpZ2h0IiwgImdyaWQiLCAiZ3JpZC1hcmVhIiwg
ImdyaWQtYXV0by1jb2x1bW5zIiwgImdyaWQtYXV0by1mbG93IiwKLSAgICAiZ3JpZC1hdXRvLXBv
c2l0aW9uIiwgImdyaWQtYXV0by1yb3dzIiwgImdyaWQtY29sdW1uIiwgImdyaWQtY29sdW1uLWVu
ZCIsCi0gICAgImdyaWQtY29sdW1uLXN0YXJ0IiwgImdyaWQtcm93IiwgImdyaWQtcm93LWVuZCIs
ICJncmlkLXJvdy1zdGFydCIsCi0gICAgImdyaWQtdGVtcGxhdGUiLCAiZ3JpZC10ZW1wbGF0ZS1h
cmVhcyIsICJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLAorICAgICJncmlkLWF1dG8tcm93cyIsICJn
cmlkLWNvbHVtbiIsICJncmlkLWNvbHVtbi1lbmQiLCAiZ3JpZC1jb2x1bW4tZ2FwIiwKKyAgICAi
Z3JpZC1jb2x1bW4tc3RhcnQiLCAiZ3JpZC1nYXAiLCAiZ3JpZC1yb3ciLCAiZ3JpZC1yb3ctZW5k
IiwgImdyaWQtcm93LWdhcCIsCisgICAgImdyaWQtcm93LXN0YXJ0IiwgImdyaWQtdGVtcGxhdGUi
LCAiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsICJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLAogICAgICJn
cmlkLXRlbXBsYXRlLXJvd3MiLCAiaGFuZ2luZy1wdW5jdHVhdGlvbiIsICJoZWlnaHQiLCAiaHlw
aGVucyIsCiAgICAgImljb24iLCAiaW1hZ2Utb3JpZW50YXRpb24iLCAiaW1hZ2UtcmVuZGVyaW5n
IiwgImltYWdlLXJlc29sdXRpb24iLAogICAgICJpbmxpbmUtYm94LWFsaWduIiwgImp1c3RpZnkt
Y29udGVudCIsICJsZWZ0IiwgImxldHRlci1zcGFjaW5nIiwKQEAgLTQ2NCw3ICs0OTQsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgImxpbmUtc3RhY2tpbmctc2hpZnQiLCAibGluZS1zdGFja2luZy1zdHJhdGVneSIs
ICJsaXN0LXN0eWxlIiwKICAgICAibGlzdC1zdHlsZS1pbWFnZSIsICJsaXN0LXN0eWxlLXBvc2l0
aW9uIiwgImxpc3Qtc3R5bGUtdHlwZSIsICJtYXJnaW4iLAogICAgICJtYXJnaW4tYm90dG9tIiwg
Im1hcmdpbi1sZWZ0IiwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW4tdG9wIiwKLSAgICAibWFya2Vy
LW9mZnNldCIsICJtYXJrcyIsICJtYXJxdWVlLWRpcmVjdGlvbiIsICJtYXJxdWVlLWxvb3AiLAor
ICAgICJtYXJrcyIsICJtYXJxdWVlLWRpcmVjdGlvbiIsICJtYXJxdWVlLWxvb3AiLAogICAgICJt
YXJxdWVlLXBsYXktY291bnQiLCAibWFycXVlZS1zcGVlZCIsICJtYXJxdWVlLXN0eWxlIiwgIm1h
eC1oZWlnaHQiLAogICAgICJtYXgtd2lkdGgiLCAibWluLWhlaWdodCIsICJtaW4td2lkdGgiLCAi
bW92ZS10byIsICJuYXYtZG93biIsICJuYXYtaW5kZXgiLAogICAgICJuYXYtbGVmdCIsICJuYXYt
cmlnaHQiLCAibmF2LXVwIiwgIm9iamVjdC1maXQiLCAib2JqZWN0LXBvc2l0aW9uIiwKQEAgLTQ5
Miw5ICs1MjIsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgInRleHQtd3JhcCIsICJ0b3AiLCAidHJhbnNmb3JtIiwg
InRyYW5zZm9ybS1vcmlnaW4iLCAidHJhbnNmb3JtLXN0eWxlIiwKICAgICAidHJhbnNpdGlvbiIs
ICJ0cmFuc2l0aW9uLWRlbGF5IiwgInRyYW5zaXRpb24tZHVyYXRpb24iLAogICAgICJ0cmFuc2l0
aW9uLXByb3BlcnR5IiwgInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwgInVuaWNvZGUtYmlk
aSIsCi0gICAgInZlcnRpY2FsLWFsaWduIiwgInZpc2liaWxpdHkiLCAidm9pY2UtYmFsYW5jZSIs
ICJ2b2ljZS1kdXJhdGlvbiIsCisgICAgInVzZXItc2VsZWN0IiwgInZlcnRpY2FsLWFsaWduIiwg
InZpc2liaWxpdHkiLCAidm9pY2UtYmFsYW5jZSIsICJ2b2ljZS1kdXJhdGlvbiIsCiAgICAgInZv
aWNlLWZhbWlseSIsICJ2b2ljZS1waXRjaCIsICJ2b2ljZS1yYW5nZSIsICJ2b2ljZS1yYXRlIiwg
InZvaWNlLXN0cmVzcyIsCi0gICAgInZvaWNlLXZvbHVtZSIsICJ2b2x1bWUiLCAid2hpdGUtc3Bh
Y2UiLCAid2lkb3dzIiwgIndpZHRoIiwgIndvcmQtYnJlYWsiLAorICAgICJ2b2ljZS12b2x1bWUi
LCAidm9sdW1lIiwgIndoaXRlLXNwYWNlIiwgIndpZG93cyIsICJ3aWR0aCIsICJ3aWxsLWNoYW5n
ZSIsICJ3b3JkLWJyZWFrIiwKICAgICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWlu
ZGV4IiwKICAgICAvLyBTVkctc3BlY2lmaWMKICAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIs
ICJtYXNrIiwgImVuYWJsZS1iYWNrZ3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCkBA
IC01NjcsMTEgKzU5NywxMiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgImNhcGl0YWxpemUiLCAiY2Fwcy1sb2NrLWlu
ZGljYXRvciIsICJjYXB0aW9uIiwgImNhcHRpb250ZXh0IiwgImNhcmV0IiwKICAgICAiY2VsbCIs
ICJjZW50ZXIiLCAiY2hlY2tib3giLCAiY2lyY2xlIiwgImNqay1kZWNpbWFsIiwgImNqay1lYXJ0
aGx5LWJyYW5jaCIsCiAgICAgImNqay1oZWF2ZW5seS1zdGVtIiwgImNqay1pZGVvZ3JhcGhpYyIs
ICJjbGVhciIsICJjbGlwIiwgImNsb3NlLXF1b3RlIiwKLSAgICAiY29sLXJlc2l6ZSIsICJjb2xs
YXBzZSIsICJjb2x1bW4iLCAiY29sdW1uLXJldmVyc2UiLCAiY29tcGFjdCIsICJjb25kZW5zZWQi
LCAiY29udGFpbiIsICJjb250ZW50IiwKKyAgICAiY29sLXJlc2l6ZSIsICJjb2xsYXBzZSIsICJj
b2xvciIsICJjb2xvci1idXJuIiwgImNvbG9yLWRvZGdlIiwgImNvbHVtbiIsICJjb2x1bW4tcmV2
ZXJzZSIsCisgICAgImNvbXBhY3QiLCAiY29uZGVuc2VkIiwgImNvbnRhaW4iLCAiY29udGVudCIs
ICJjb250ZW50cyIsCiAgICAgImNvbnRlbnQtYm94IiwgImNvbnRleHQtbWVudSIsICJjb250aW51
b3VzIiwgImNvcHkiLCAiY291bnRlciIsICJjb3VudGVycyIsICJjb3ZlciIsICJjcm9wIiwKLSAg
ICAiY3Jvc3MiLCAiY3Jvc3NoYWlyIiwgImN1cnJlbnRjb2xvciIsICJjdXJzaXZlIiwgImN5Y2xp
YyIsICJkYXNoZWQiLCAiZGVjaW1hbCIsCi0gICAgImRlY2ltYWwtbGVhZGluZy16ZXJvIiwgImRl
ZmF1bHQiLCAiZGVmYXVsdC1idXR0b24iLCAiZGVzdGluYXRpb24tYXRvcCIsCi0gICAgImRlc3Rp
bmF0aW9uLWluIiwgImRlc3RpbmF0aW9uLW91dCIsICJkZXN0aW5hdGlvbi1vdmVyIiwgImRldmFu
YWdhcmkiLAorICAgICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9yIiwgImN1cnNp
dmUiLCAiY3ljbGljIiwgImRhcmtlbiIsICJkYXNoZWQiLCAiZGVjaW1hbCIsCisgICAgImRlY2lt
YWwtbGVhZGluZy16ZXJvIiwgImRlZmF1bHQiLCAiZGVmYXVsdC1idXR0b24iLCAiZGVuc2UiLCAi
ZGVzdGluYXRpb24tYXRvcCIsCisgICAgImRlc3RpbmF0aW9uLWluIiwgImRlc3RpbmF0aW9uLW91
dCIsICJkZXN0aW5hdGlvbi1vdmVyIiwgImRldmFuYWdhcmkiLCAiZGlmZmVyZW5jZSIsCiAgICAg
ImRpc2MiLCAiZGlzY2FyZCIsICJkaXNjbG9zdXJlLWNsb3NlZCIsICJkaXNjbG9zdXJlLW9wZW4i
LCAiZG9jdW1lbnQiLAogICAgICJkb3QtZGFzaCIsICJkb3QtZG90LWRhc2giLAogICAgICJkb3R0
ZWQiLCAiZG91YmxlIiwgImRvd24iLCAiZS1yZXNpemUiLCAiZWFzZSIsICJlYXNlLWluIiwgImVh
c2UtaW4tb3V0IiwgImVhc2Utb3V0IiwKQEAgLTU4MiwyMyArNjEzLDIzIEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAi
ZXRoaW9waWMtaGFsZWhhbWUtZ2V6IiwgImV0aGlvcGljLWhhbGVoYW1lLW9tLWV0IiwKICAgICAi
ZXRoaW9waWMtaGFsZWhhbWUtc2lkLWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLXNvLWV0IiwKICAg
ICAiZXRoaW9waWMtaGFsZWhhbWUtdGktZXIiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGktZXQiLCAi
ZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwKLSAgICAiZXRoaW9waWMtbnVtZXJpYyIsICJldy1yZXNp
emUiLCAiZXhwYW5kZWQiLCAiZXh0ZW5kcyIsICJleHRyYS1jb25kZW5zZWQiLAotICAgICJleHRy
YS1leHBhbmRlZCIsICJmYW50YXN5IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIsICJmbGF0Iiwg
ImZsZXgiLCAiZm9vdG5vdGVzIiwKLSAgICAiZm9yd2FyZHMiLCAiZnJvbSIsICJnZW9tZXRyaWNQ
cmVjaXNpb24iLCAiZ2VvcmdpYW4iLCAiZ3JheXRleHQiLCAiZ3Jvb3ZlIiwKLSAgICAiZ3VqYXJh
dGkiLCAiZ3VybXVraGkiLCAiaGFuZCIsICJoYW5ndWwiLCAiaGFuZ3VsLWNvbnNvbmFudCIsICJo
ZWJyZXciLAorICAgICJldGhpb3BpYy1udW1lcmljIiwgImV3LXJlc2l6ZSIsICJleGNsdXNpb24i
LCAiZXhwYW5kZWQiLCAiZXh0ZW5kcyIsICJleHRyYS1jb25kZW5zZWQiLAorICAgICJleHRyYS1l
eHBhbmRlZCIsICJmYW50YXN5IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIsICJmbGF0IiwgImZs
ZXgiLCAiZmxleC1lbmQiLCAiZmxleC1zdGFydCIsICJmb290bm90ZXMiLAorICAgICJmb3J3YXJk
cyIsICJmcm9tIiwgImdlb21ldHJpY1ByZWNpc2lvbiIsICJnZW9yZ2lhbiIsICJncmF5dGV4dCIs
ICJncmlkIiwgImdyb292ZSIsCisgICAgImd1amFyYXRpIiwgImd1cm11a2hpIiwgImhhbmQiLCAi
aGFuZ3VsIiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGFyZC1saWdodCIsICJoZWJyZXciLAogICAg
ICJoZWxwIiwgImhpZGRlbiIsICJoaWRlIiwgImhpZ2hlciIsICJoaWdobGlnaHQiLCAiaGlnaGxp
Z2h0dGV4dCIsCi0gICAgImhpcmFnYW5hIiwgImhpcmFnYW5hLWlyb2hhIiwgImhvcml6b250YWwi
LCAiaHNsIiwgImhzbGEiLCAiaWNvbiIsICJpZ25vcmUiLAorICAgICJoaXJhZ2FuYSIsICJoaXJh
Z2FuYS1pcm9oYSIsICJob3Jpem9udGFsIiwgImhzbCIsICJoc2xhIiwgImh1ZSIsICJpY29uIiwg
Imlnbm9yZSIsCiAgICAgImluYWN0aXZlYm9yZGVyIiwgImluYWN0aXZlY2FwdGlvbiIsICJpbmFj
dGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwKICAgICAiaW5mb2JhY2tncm91bmQiLCAiaW5m
b3RleHQiLCAiaW5oZXJpdCIsICJpbml0aWFsIiwgImlubGluZSIsICJpbmxpbmUtYXhpcyIsCi0g
ICAgImlubGluZS1ibG9jayIsICJpbmxpbmUtZmxleCIsICJpbmxpbmUtdGFibGUiLCAiaW5zZXQi
LCAiaW5zaWRlIiwgImludHJpbnNpYyIsICJpbnZlcnQiLAorICAgICJpbmxpbmUtYmxvY2siLCAi
aW5saW5lLWZsZXgiLCAiaW5saW5lLWdyaWQiLCAiaW5saW5lLXRhYmxlIiwgImluc2V0IiwgImlu
c2lkZSIsICJpbnRyaW5zaWMiLCAiaW52ZXJ0IiwKICAgICAiaXRhbGljIiwgImphcGFuZXNlLWZv
cm1hbCIsICJqYXBhbmVzZS1pbmZvcm1hbCIsICJqdXN0aWZ5IiwgImthbm5hZGEiLAogICAgICJr
YXRha2FuYSIsICJrYXRha2FuYS1pcm9oYSIsICJrZWVwLWFsbCIsICJraG1lciIsCiAgICAgImtv
cmVhbi1oYW5ndWwtZm9ybWFsIiwgImtvcmVhbi1oYW5qYS1mb3JtYWwiLCAia29yZWFuLWhhbmph
LWluZm9ybWFsIiwKLSAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAi
bGVmdCIsICJsZXZlbCIsICJsaWdodGVyIiwKKyAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJn
ZSIsICJsYXJnZXIiLCAibGVmdCIsICJsZXZlbCIsICJsaWdodGVyIiwgImxpZ2h0ZW4iLAogICAg
ICJsaW5lLXRocm91Z2giLCAibGluZWFyIiwgImxpbmVhci1ncmFkaWVudCIsICJsaW5lcyIsICJs
aXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCiAgICAgImxvY2FsIiwgImxvZ2ljYWwi
LCAibG91ZCIsICJsb3dlciIsICJsb3dlci1hbHBoYSIsICJsb3dlci1hcm1lbmlhbiIsCiAgICAg
Imxvd2VyLWdyZWVrIiwgImxvd2VyLWhleGFkZWNpbWFsIiwgImxvd2VyLWxhdGluIiwgImxvd2Vy
LW5vcndlZ2lhbiIsCi0gICAgImxvd2VyLXJvbWFuIiwgImxvd2VyY2FzZSIsICJsdHIiLCAibWFs
YXlhbGFtIiwgIm1hdGNoIiwgIm1hdHJpeCIsICJtYXRyaXgzZCIsCisgICAgImxvd2VyLXJvbWFu
IiwgImxvd2VyY2FzZSIsICJsdHIiLCAibHVtaW5vc2l0eSIsICJtYWxheWFsYW0iLCAibWF0Y2gi
LCAibWF0cml4IiwgIm1hdHJpeDNkIiwKICAgICAibWVkaWEtY29udHJvbHMtYmFja2dyb3VuZCIs
ICJtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheSIsCiAgICAgIm1lZGlhLWZ1bGxzY3JlZW4tYnV0
dG9uIiwgIm1lZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwKICAgICAibWVk
aWEtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiIsICJtZWRpYS1yZXdpbmQtYnV0dG9uIiwKQEAg
LTYwNywxMCArNjM4LDEwIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAibWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWlu
ZXIiLCAibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iIiwgIm1lZGl1bSIsCiAgICAgIm1lbnUiLCAi
bWVudWxpc3QiLCAibWVudWxpc3QtYnV0dG9uIiwgIm1lbnVsaXN0LXRleHQiLAogICAgICJtZW51
bGlzdC10ZXh0ZmllbGQiLCAibWVudXRleHQiLCAibWVzc2FnZS1ib3giLCAibWlkZGxlIiwgIm1p
bi1pbnRyaW5zaWMiLAotICAgICJtaXgiLCAibW9uZ29saWFuIiwgIm1vbm9zcGFjZSIsICJtb3Zl
IiwgIm11bHRpcGxlIiwgIm15YW5tYXIiLCAibi1yZXNpemUiLAorICAgICJtaXgiLCAibW9uZ29s
aWFuIiwgIm1vbm9zcGFjZSIsICJtb3ZlIiwgIm11bHRpcGxlIiwgIm11bHRpcGx5IiwgIm15YW5t
YXIiLCAibi1yZXNpemUiLAogICAgICJuYXJyb3dlciIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNp
emUiLCAibm8tY2xvc2UtcXVvdGUiLCAibm8tZHJvcCIsCiAgICAgIm5vLW9wZW4tcXVvdGUiLCAi
bm8tcmVwZWF0IiwgIm5vbmUiLCAibm9ybWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsCi0g
ICAgIm5zLXJlc2l6ZSIsICJudW1iZXJzIiwgIm51bWVyaWMiLCAibnctcmVzaXplIiwgIm53c2Ut
cmVzaXplIiwgIm9ibGlxdWUiLCAib2N0YWwiLCAib3Blbi1xdW90ZSIsCisgICAgIm5zLXJlc2l6
ZSIsICJudW1iZXJzIiwgIm51bWVyaWMiLCAibnctcmVzaXplIiwgIm53c2UtcmVzaXplIiwgIm9i
bGlxdWUiLCAib2N0YWwiLCAib3BhY2l0eSIsICJvcGVuLXF1b3RlIiwKICAgICAib3B0aW1pemVM
ZWdpYmlsaXR5IiwgIm9wdGltaXplU3BlZWQiLCAib3JpeWEiLCAib3JvbW8iLCAib3V0c2V0IiwK
ICAgICAib3V0c2lkZSIsICJvdXRzaWRlLXNoYXBlIiwgIm92ZXJsYXkiLCAib3ZlcmxpbmUiLCAi
cGFkZGluZyIsICJwYWRkaW5nLWJveCIsCiAgICAgInBhaW50ZWQiLCAicGFnZSIsICJwYXVzZWQi
LCAicGVyc2lhbiIsICJwZXJzcGVjdGl2ZSIsICJwbHVzLWRhcmtlciIsICJwbHVzLWxpZ2h0ZXIi
LApAQCAtNjIxLDE2ICs2NTIsMTYgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJyZXBlYXRpbmctcmFkaWFsLWdyYWRp
ZW50IiwgInJlcGVhdC14IiwgInJlcGVhdC15IiwgInJlc2V0IiwgInJldmVyc2UiLAogICAgICJy
Z2IiLCAicmdiYSIsICJyaWRnZSIsICJyaWdodCIsICJyb3RhdGUiLCAicm90YXRlM2QiLCAicm90
YXRlWCIsICJyb3RhdGVZIiwKICAgICAicm90YXRlWiIsICJyb3VuZCIsICJyb3ciLCAicm93LXJl
c2l6ZSIsICJyb3ctcmV2ZXJzZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLAotICAgICJz
LXJlc2l6ZSIsICJzYW5zLXNlcmlmIiwgInNjYWxlIiwgInNjYWxlM2QiLCAic2NhbGVYIiwgInNj
YWxlWSIsICJzY2FsZVoiLAotICAgICJzY3JvbGwiLCAic2Nyb2xsYmFyIiwgInNlLXJlc2l6ZSIs
ICJzZWFyY2hmaWVsZCIsCisgICAgInMtcmVzaXplIiwgInNhbnMtc2VyaWYiLCAic2F0dXJhdGlv
biIsICJzY2FsZSIsICJzY2FsZTNkIiwgInNjYWxlWCIsICJzY2FsZVkiLCAic2NhbGVaIiwgInNj
cmVlbiIsCisgICAgInNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2Nyb2xsLXBvc2l0aW9uIiwgInNl
LXJlc2l6ZSIsICJzZWFyY2hmaWVsZCIsCiAgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24i
LCAic2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsCiAgICAgInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0
dG9uIiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbiIsCiAgICAgInNlbWktY29uZGVu
c2VkIiwgInNlbWktZXhwYW5kZWQiLCAic2VwYXJhdGUiLCAic2VyaWYiLCAic2hvdyIsICJzaWRh
bWEiLAogICAgICJzaW1wLWNoaW5lc2UtZm9ybWFsIiwgInNpbXAtY2hpbmVzZS1pbmZvcm1hbCIs
ICJzaW5nbGUiLAogICAgICJza2V3IiwgInNrZXdYIiwgInNrZXdZIiwgInNraXAtd2hpdGUtc3Bh
Y2UiLCAic2xpZGUiLCAic2xpZGVyLWhvcml6b250YWwiLAogICAgICJzbGlkZXItdmVydGljYWwi
LCAic2xpZGVydGh1bWItaG9yaXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0aWNhbCIsICJzbG93
IiwKLSAgICAic21hbGwiLCAic21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9uIiwgInNtYWxsZXIi
LCAic29saWQiLCAic29tYWxpIiwKLSAgICAic291cmNlLWF0b3AiLCAic291cmNlLWluIiwgInNv
dXJjZS1vdXQiLCAic291cmNlLW92ZXIiLCAic3BhY2UiLCAic3BlbGwtb3V0IiwgInNxdWFyZSIs
CisgICAgInNtYWxsIiwgInNtYWxsLWNhcHMiLCAic21hbGwtY2FwdGlvbiIsICJzbWFsbGVyIiwg
InNvZnQtbGlnaHQiLCAic29saWQiLCAic29tYWxpIiwKKyAgICAic291cmNlLWF0b3AiLCAic291
cmNlLWluIiwgInNvdXJjZS1vdXQiLCAic291cmNlLW92ZXIiLCAic3BhY2UiLCAic3BhY2UtYXJv
dW5kIiwgInNwYWNlLWJldHdlZW4iLCAic3BlbGwtb3V0IiwgInNxdWFyZSIsCiAgICAgInNxdWFy
ZS1idXR0b24iLCAic3RhcnQiLCAic3RhdGljIiwgInN0YXR1cy1iYXIiLCAic3RyZXRjaCIsICJz
dHJva2UiLCAic3ViIiwKICAgICAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAic3VwZXIiLCAic3ct
cmVzaXplIiwgInN5bWJvbGljIiwgInN5bWJvbHMiLCAidGFibGUiLAogICAgICJ0YWJsZS1jYXB0
aW9uIiwgInRhYmxlLWNlbGwiLCAidGFibGUtY29sdW1uIiwgInRhYmxlLWNvbHVtbi1ncm91cCIs
CkBAIC02NDAsMTQgKzY3MSwxNCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0
aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgInRoaWNrIiwgInRoaW4iLCAidGhyZWVk
ZGFya3NoYWRvdyIsICJ0aHJlZWRmYWNlIiwgInRocmVlZGhpZ2hsaWdodCIsCiAgICAgInRocmVl
ZGxpZ2h0c2hhZG93IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3Jp
bnlhLWVyIiwKICAgICAidGlncmlueWEtZXItYWJlZ2VkZSIsICJ0aWdyaW55YS1ldCIsICJ0aWdy
aW55YS1ldC1hYmVnZWRlIiwgInRvIiwgInRvcCIsCi0gICAgInRyYWQtY2hpbmVzZS1mb3JtYWwi
LCAidHJhZC1jaGluZXNlLWluZm9ybWFsIiwKKyAgICAidHJhZC1jaGluZXNlLWZvcm1hbCIsICJ0
cmFkLWNoaW5lc2UtaW5mb3JtYWwiLCAidHJhbnNmb3JtIiwKICAgICAidHJhbnNsYXRlIiwgInRy
YW5zbGF0ZTNkIiwgInRyYW5zbGF0ZVgiLCAidHJhbnNsYXRlWSIsICJ0cmFuc2xhdGVaIiwKLSAg
ICAidHJhbnNwYXJlbnQiLCAidWx0cmEtY29uZGVuc2VkIiwgInVsdHJhLWV4cGFuZGVkIiwgInVu
ZGVybGluZSIsICJ1cCIsCisgICAgInRyYW5zcGFyZW50IiwgInVsdHJhLWNvbmRlbnNlZCIsICJ1
bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidW5zZXQiLCAidXAiLAogICAgICJ1cHBlci1h
bHBoYSIsICJ1cHBlci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVjaW1h
bCIsCiAgICAgInVwcGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1cHBlci1yb21hbiIs
ICJ1cHBlcmNhc2UiLCAidXJkdSIsICJ1cmwiLAogICAgICJ2YXIiLCAidmVydGljYWwiLCAidmVy
dGljYWwtdGV4dCIsICJ2aXNpYmxlIiwgInZpc2libGVGaWxsIiwgInZpc2libGVQYWludGVkIiwK
ICAgICAidmlzaWJsZVN0cm9rZSIsICJ2aXN1YWwiLCAidy1yZXNpemUiLCAid2FpdCIsICJ3YXZl
IiwgIndpZGVyIiwKLSAgICAid2luZG93IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAi
d29yZHMiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwgInhvciIsCisgICAgIndpbmRvdyIsICJ3aW5k
b3dmcmFtZSIsICJ3aW5kb3d0ZXh0IiwgIndvcmRzIiwgIndyYXAiLCAid3JhcC1yZXZlcnNlIiwg
IngtbGFyZ2UiLCAieC1zbWFsbCIsICJ4b3IiLAogICAgICJ4eC1sYXJnZSIsICJ4eC1zbWFsbCIK
ICAgXSwgdmFsdWVLZXl3b3JkcyA9IGtleVNldCh2YWx1ZUtleXdvcmRzXyk7CiAKQEAgLTc2OSw0
ICs4MDAsMjYgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICAgIGhlbHBlclR5cGU6ICJsZXNzIgogICB9KTsKIAorICBDb2Rl
TWlycm9yLmRlZmluZU1JTUUoInRleHQveC1nc3MiLCB7CisgICAgZG9jdW1lbnRUeXBlczogZG9j
dW1lbnRUeXBlcywKKyAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAorICAgIG1lZGlhRmVhdHVy
ZXM6IG1lZGlhRmVhdHVyZXMsCisgICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3Jk
cywKKyAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlL
ZXl3b3JkcywKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCisgICAgY291bnRl
ckRlc2NyaXB0b3JzOiBjb3VudGVyRGVzY3JpcHRvcnMsCisgICAgY29sb3JLZXl3b3JkczogY29s
b3JLZXl3b3JkcywKKyAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLAorICAgIHN1cHBv
cnRzQXRDb21wb25lbnQ6IHRydWUsCisgICAgdG9rZW5Ib29rczogeworICAgICAgIi8iOiBmdW5j
dGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgiKiIpKSByZXR1
cm4gZmFsc2U7CisgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKKyAgICAg
ICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CisgICAgICB9CisgICAgfSwK
KyAgICBuYW1lOiAiY3NzIiwKKyAgICBoZWxwZXJUeXBlOiAiZ3NzIgorICB9KTsKKwogfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2h0bWxtaXhlZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCmluZGV4IDI0NTUyZTIuLmViMjFm
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCkBAIC05LDExMyAr
OSwxNDQgQEAKICAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgogICAgIG1vZChDb2RlTWlycm9y
KTsKIH0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKLSJ1c2Ugc3RyaWN0IjsKKyAgInVzZSBzdHJp
Y3QiOwogCi1Db2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7Ci0gIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShj
b25maWcsIHtuYW1lOiAieG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGh0bWxNb2RlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOiBwYXJzZXJDb25maWcubXVs
dGlsaW5lVGFnSW5kZW50RmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogcGFyc2VyQ29uZmlnLm11bHRp
bGluZVRhZ0luZGVudFBhc3RUYWd9KTsKLSAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1v
ZGUoY29uZmlnLCAiY3NzIik7CisgIHZhciBkZWZhdWx0VGFncyA9IHsKKyAgICBzY3JpcHQ6IFsK
KyAgICAgIFsibGFuZyIsIC8oamF2YXNjcmlwdHxiYWJlbCkvaSwgImphdmFzY3JpcHQiXSwKKyAg
ICAgIFsidHlwZSIsIC9eKD86dGV4dHxhcHBsaWNhdGlvbilcLyg/OngtKT8oPzpqYXZhfGVjbWEp
c2NyaXB0JHxeJC9pLCAiamF2YXNjcmlwdCJdLAorICAgICAgWyJ0eXBlIiwgLy4vLCAidGV4dC9w
bGFpbiJdLAorICAgICAgW251bGwsIG51bGwsICJqYXZhc2NyaXB0Il0KKyAgICBdLAorICAgIHN0
eWxlOiAgWworICAgICAgWyJsYW5nIiwgL15jc3MkL2ksICJjc3MiXSwKKyAgICAgIFsidHlwZSIs
IC9eKHRleHRcLyk/KHgtKT8oc3R5bGVzaGVldHxjc3MpJC9pLCAiY3NzIl0sCisgICAgICBbInR5
cGUiLCAvLi8sICJ0ZXh0L3BsYWluIl0sCisgICAgICBbbnVsbCwgbnVsbCwgImNzcyJdCisgICAg
XQorICB9OwogCi0gIHZhciBzY3JpcHRUeXBlcyA9IFtdLCBzY3JpcHRUeXBlc0NvbmYgPSBwYXJz
ZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLnNjcmlwdFR5cGVzOwotICBzY3JpcHRUeXBlcy5wdXNo
KHttYXRjaGVzOiAvXig/OnRleHR8YXBwbGljYXRpb24pXC8oPzp4LSk/KD86amF2YXxlY21hKXNj
cmlwdCR8XiQvaSwKLSAgICAgICAgICAgICAgICAgICAgbW9kZTogQ29kZU1pcnJvci5nZXRNb2Rl
KGNvbmZpZywgImphdmFzY3JpcHQiKX0pOwotICBpZiAoc2NyaXB0VHlwZXNDb25mKSBmb3IgKHZh
ciBpID0gMDsgaSA8IHNjcmlwdFR5cGVzQ29uZi5sZW5ndGg7ICsraSkgewotICAgIHZhciBjb25m
ID0gc2NyaXB0VHlwZXNDb25mW2ldOwotICAgIHNjcmlwdFR5cGVzLnB1c2goe21hdGNoZXM6IGNv
bmYubWF0Y2hlcywgbW9kZTogY29uZi5tb2RlICYmIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcs
IGNvbmYubW9kZSl9KTsKLSAgfQotICBzY3JpcHRUeXBlcy5wdXNoKHttYXRjaGVzOiAvLi8sCi0g
ICAgICAgICAgICAgICAgICAgIG1vZGU6IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJ0ZXh0
L3BsYWluIil9KTsKLQotICBmdW5jdGlvbiBodG1sKHN0cmVhbSwgc3RhdGUpIHsKLSAgICB2YXIg
dGFnTmFtZSA9IHN0YXRlLmh0bWxTdGF0ZS50YWdOYW1lOwotICAgIGlmICh0YWdOYW1lKSB0YWdO
YW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRv
a2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTsKLSAgICBpZiAodGFnTmFtZSA9PSAic2NyaXB0
IiAmJiAvXGJ0YWdcYi8udGVzdChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIpIHsK
LSAgICAgIC8vIFNjcmlwdCBibG9jazogbW9kZSB0byBjaGFuZ2UgdG8gZGVwZW5kcyBvbiB0eXBl
IGF0dHJpYnV0ZQotICAgICAgdmFyIHNjcmlwdFR5cGUgPSBzdHJlYW0uc3RyaW5nLnNsaWNlKE1h
dGgubWF4KDAsIHN0cmVhbS5wb3MgLSAxMDApLCBzdHJlYW0ucG9zKS5tYXRjaCgvXGJ0eXBlXHMq
PVxzKigiW14iXSsifCdbXiddKyd8XFMrKVtePF0qJC9pKTsKLSAgICAgIHNjcmlwdFR5cGUgPSBz
Y3JpcHRUeXBlID8gc2NyaXB0VHlwZVsxXSA6ICIiOwotICAgICAgaWYgKHNjcmlwdFR5cGUgJiYg
L1tcIlwnXS8udGVzdChzY3JpcHRUeXBlLmNoYXJBdCgwKSkpIHNjcmlwdFR5cGUgPSBzY3JpcHRU
eXBlLnNsaWNlKDEsIHNjcmlwdFR5cGUubGVuZ3RoIC0gMSk7Ci0gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNjcmlwdFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciB0cCA9IHNjcmlw
dFR5cGVzW2ldOwotICAgICAgICBpZiAodHlwZW9mIHRwLm1hdGNoZXMgPT0gInN0cmluZyIgPyBz
Y3JpcHRUeXBlID09IHRwLm1hdGNoZXMgOiB0cC5tYXRjaGVzLnRlc3Qoc2NyaXB0VHlwZSkpIHsK
LSAgICAgICAgICBpZiAodHAubW9kZSkgewotICAgICAgICAgICAgc3RhdGUudG9rZW4gPSBzY3Jp
cHQ7Ci0gICAgICAgICAgICBzdGF0ZS5sb2NhbE1vZGUgPSB0cC5tb2RlOwotICAgICAgICAgICAg
c3RhdGUubG9jYWxTdGF0ZSA9IHRwLm1vZGUuc3RhcnRTdGF0ZSAmJiB0cC5tb2RlLnN0YXJ0U3Rh
dGUoaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhZ05h
bWUgPT0gInN0eWxlIiAmJiAvXGJ0YWdcYi8udGVzdChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQo
KSA9PSAiPiIpIHsKLSAgICAgIHN0YXRlLnRva2VuID0gY3NzOwotICAgICAgc3RhdGUubG9jYWxN
b2RlID0gY3NzTW9kZTsKLSAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBjc3NNb2RlLnN0YXJ0U3Rh
dGUoaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHN0eWxlOwotICB9CiAgIGZ1bmN0aW9uIG1heWJlQmFja3VwKHN0cmVhbSwgcGF0LCBzdHls
ZSkgewotICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwotICAgIHZhciBjbG9zZSA9IGN1
ci5zZWFyY2gocGF0KTsKLSAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVu
Z3RoIC0gY2xvc2UpOwotICAgIGVsc2UgaWYgKGN1ci5tYXRjaCgvPFwvPyQvKSkgeworICAgIHZh
ciBjdXIgPSBzdHJlYW0uY3VycmVudCgpLCBjbG9zZSA9IGN1ci5zZWFyY2gocGF0KTsKKyAgICBp
ZiAoY2xvc2UgPiAtMSkgeworICAgICAgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2Up
OworICAgIH0gZWxzZSBpZiAoY3VyLm1hdGNoKC88XC8/JC8pKSB7CiAgICAgICBzdHJlYW0uYmFj
a1VwKGN1ci5sZW5ndGgpOwogICAgICAgaWYgKCFzdHJlYW0ubWF0Y2gocGF0LCBmYWxzZSkpIHN0
cmVhbS5tYXRjaChjdXIpOwogICAgIH0KICAgICByZXR1cm4gc3R5bGU7CiAgIH0KLSAgZnVuY3Rp
b24gc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMq
c2NyaXB0XHMqPi9pLCBmYWxzZSkpIHsKLSAgICAgIHN0YXRlLnRva2VuID0gaHRtbDsKLSAgICAg
IHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2NhbE1vZGUgPSBudWxsOwotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3Jp
cHRccyo+LywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubG9jYWxNb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOworCisgIHZhciBhdHRyUmVnZXhwQ2FjaGUgPSB7fTsK
KyAgZnVuY3Rpb24gZ2V0QXR0clJlZ2V4cChhdHRyKSB7CisgICAgdmFyIHJlZ2V4cCA9IGF0dHJS
ZWdleHBDYWNoZVthdHRyXTsKKyAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwOworICAgIHJl
dHVybiBhdHRyUmVnZXhwQ2FjaGVbYXR0cl0gPSBuZXcgUmVnRXhwKCJcXHMrIiArIGF0dHIgKyAi
XFxzKj1cXHMqKCd8XCIpPyhbXidcIl0rKSgnfFwiKT9cXHMqIik7CisgIH0KKworICBmdW5jdGlv
biBnZXRBdHRyVmFsdWUodGV4dCwgYXR0cikgeworICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2go
Z2V0QXR0clJlZ2V4cChhdHRyKSkKKyAgICByZXR1cm4gbWF0Y2ggPyAvXlxzKiguKj8pXHMqJC8u
ZXhlYyhtYXRjaFsyXSlbMV0gOiAiIgogICB9Ci0gIGZ1bmN0aW9uIGNzcyhzdHJlYW0sIHN0YXRl
KSB7Ci0gICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsK
LSAgICAgIHN0YXRlLnRva2VuID0gaHRtbDsKLSAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0
ZS5sb2NhbE1vZGUgPSBudWxsOwotICAgICAgcmV0dXJuIG51bGw7CisKKyAgZnVuY3Rpb24gZ2V0
VGFnUmVnZXhwKHRhZ05hbWUsIGFuY2hvcmVkKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoKGFu
Y2hvcmVkID8gIl4iIDogIiIpICsgIjxcL1xzKiIgKyB0YWdOYW1lICsgIlxzKj4iLCAiaSIpOwor
ICB9CisKKyAgZnVuY3Rpb24gYWRkVGFncyhmcm9tLCB0bykgeworICAgIGZvciAodmFyIHRhZyBp
biBmcm9tKSB7CisgICAgICB2YXIgZGVzdCA9IHRvW3RhZ10gfHwgKHRvW3RhZ10gPSBbXSk7Cisg
ICAgICB2YXIgc291cmNlID0gZnJvbVt0YWddOworICAgICAgZm9yICh2YXIgaSA9IHNvdXJjZS5s
ZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICAgICAgZGVzdC51bnNoaWZ0KHNvdXJjZVtpXSkK
ICAgICB9Ci0gICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnN0eWxlXHMqPi8s
Ci0gICAgICAgICAgICAgICAgICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2Nh
bFN0YXRlKSk7CiAgIH0KIAotICByZXR1cm4gewotICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkg
ewotICAgICAgdmFyIHN0YXRlID0gaHRtbE1vZGUuc3RhcnRTdGF0ZSgpOwotICAgICAgcmV0dXJu
IHt0b2tlbjogaHRtbCwgbG9jYWxNb2RlOiBudWxsLCBsb2NhbFN0YXRlOiBudWxsLCBodG1sU3Rh
dGU6IHN0YXRlfTsKLSAgICB9LAotCi0gICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewot
ICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUpCi0gICAgICAgIHZhciBsb2NhbCA9IENvZGVNaXJy
b3IuY29weVN0YXRlKHN0YXRlLmxvY2FsTW9kZSwgc3RhdGUubG9jYWxTdGF0ZSk7Ci0gICAgICBy
ZXR1cm4ge3Rva2VuOiBzdGF0ZS50b2tlbiwgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsIGxv
Y2FsU3RhdGU6IGxvY2FsLAotICAgICAgICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29w
eVN0YXRlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpfTsKLSAgICB9LAotCi0gICAgdG9rZW46
IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgIHJldHVybiBzdGF0ZS50b2tlbihzdHJl
YW0sIHN0YXRlKTsKLSAgICB9LAotCi0gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFm
dGVyKSB7Ci0gICAgICBpZiAoIXN0YXRlLmxvY2FsTW9kZSB8fCAvXlxzKjxcLy8udGVzdCh0ZXh0
QWZ0ZXIpKQotICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwg
dGV4dEFmdGVyKTsKLSAgICAgIGVsc2UgaWYgKHN0YXRlLmxvY2FsTW9kZS5pbmRlbnQpCi0gICAg
ICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRB
ZnRlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAg
fSwKLQotICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsKLSAgICAgIHJldHVybiB7c3Rh
dGU6IHN0YXRlLmxvY2FsU3RhdGUgfHwgc3RhdGUuaHRtbFN0YXRlLCBtb2RlOiBzdGF0ZS5sb2Nh
bE1vZGUgfHwgaHRtbE1vZGV9OworICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdNb2RlKHRhZ0luZm8s
IHRhZ1RleHQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ0luZm8ubGVuZ3RoOyBpKysp
IHsKKyAgICAgIHZhciBzcGVjID0gdGFnSW5mb1tpXTsKKyAgICAgIGlmICghc3BlY1swXSB8fCBz
cGVjWzFdLnRlc3QoZ2V0QXR0clZhbHVlKHRhZ1RleHQsIHNwZWNbMF0pKSkgcmV0dXJuIHNwZWNb
Ml07CiAgICAgfQotICB9OwotfSwgInhtbCIsICJqYXZhc2NyaXB0IiwgImNzcyIpOworICB9CisK
KyAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbiAoY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKKyAgICB2YXIgaHRtbE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29u
ZmlnLCB7CisgICAgICBuYW1lOiAieG1sIiwKKyAgICAgIGh0bWxNb2RlOiB0cnVlLAorICAgICAg
bXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOiBwYXJzZXJDb25maWcubXVsdGlsaW5lVGFnSW5kZW50
RmFjdG9yLAorICAgICAgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogcGFyc2VyQ29uZmlnLm11
bHRpbGluZVRhZ0luZGVudFBhc3RUYWcKKyAgICB9KTsKKworICAgIHZhciB0YWdzID0ge307Cisg
ICAgdmFyIGNvbmZpZ1RhZ3MgPSBwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLnRhZ3MsIGNv
bmZpZ1NjcmlwdCA9IHBhcnNlckNvbmZpZyAmJiBwYXJzZXJDb25maWcuc2NyaXB0VHlwZXM7Cisg
ICAgYWRkVGFncyhkZWZhdWx0VGFncywgdGFncyk7CisgICAgaWYgKGNvbmZpZ1RhZ3MpIGFkZFRh
Z3MoY29uZmlnVGFncywgdGFncyk7CisgICAgaWYgKGNvbmZpZ1NjcmlwdCkgZm9yICh2YXIgaSA9
IGNvbmZpZ1NjcmlwdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICAgIHRhZ3Muc2NyaXB0
LnVuc2hpZnQoWyJ0eXBlIiwgY29uZmlnU2NyaXB0W2ldLm1hdGNoZXMsIGNvbmZpZ1NjcmlwdFtp
XS5tb2RlXSkKKworICAgIGZ1bmN0aW9uIGh0bWwoc3RyZWFtLCBzdGF0ZSkgeworICAgICAgdmFy
IHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpLCB0YWcgPSAv
XGJ0YWdcYi8udGVzdChzdHlsZSksIHRhZ05hbWUKKyAgICAgIGlmICh0YWcgJiYgIS9bPD5cc1wv
XS8udGVzdChzdHJlYW0uY3VycmVudCgpKSAmJgorICAgICAgICAgICh0YWdOYW1lID0gc3RhdGUu
aHRtbFN0YXRlLnRhZ05hbWUgJiYgc3RhdGUuaHRtbFN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2Uo
KSkgJiYKKyAgICAgICAgICB0YWdzLmhhc093blByb3BlcnR5KHRhZ05hbWUpKSB7CisgICAgICAg
IHN0YXRlLmluVGFnID0gdGFnTmFtZSArICIgIgorICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pblRh
ZyAmJiB0YWcgJiYgLz4kLy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7CisgICAgICAgIHZhciBp
blRhZyA9IC9eKFtcU10rKSAoLiopLy5leGVjKHN0YXRlLmluVGFnKQorICAgICAgICBzdGF0ZS5p
blRhZyA9IG51bGwKKyAgICAgICAgdmFyIG1vZGVTcGVjID0gc3RyZWFtLmN1cnJlbnQoKSA9PSAi
PiIgJiYgZmluZE1hdGNoaW5nTW9kZSh0YWdzW2luVGFnWzFdXSwgaW5UYWdbMl0pCisgICAgICAg
IHZhciBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgbW9kZVNwZWMpCisgICAgICAg
IHZhciBlbmRUYWdBID0gZ2V0VGFnUmVnZXhwKGluVGFnWzFdLCB0cnVlKSwgZW5kVGFnID0gZ2V0
VGFnUmVnZXhwKGluVGFnWzFdLCBmYWxzZSk7CisgICAgICAgIHN0YXRlLnRva2VuID0gZnVuY3Rp
b24gKHN0cmVhbSwgc3RhdGUpIHsKKyAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGVuZFRhZ0Es
IGZhbHNlKSkgeworICAgICAgICAgICAgc3RhdGUudG9rZW4gPSBodG1sOworICAgICAgICAgICAg
c3RhdGUubG9jYWxTdGF0ZSA9IHN0YXRlLmxvY2FsTW9kZSA9IG51bGw7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIG1heWJlQmFja3VwKHN0
cmVhbSwgZW5kVGFnLCBzdGF0ZS5sb2NhbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0
YXRlKSk7CisgICAgICAgIH07CisgICAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IG1vZGU7CisgICAg
ICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZSwgaHRtbE1v
ZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKKyAgICAgIH0gZWxzZSBpZiAoc3RhdGUu
aW5UYWcpIHsKKyAgICAgICAgc3RhdGUuaW5UYWcgKz0gc3RyZWFtLmN1cnJlbnQoKQorICAgICAg
ICBpZiAoc3RyZWFtLmVvbCgpKSBzdGF0ZS5pblRhZyArPSAiICIKKyAgICAgIH0KKyAgICAgIHJl
dHVybiBzdHlsZTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAgICAgIHN0YXJ0U3RhdGU6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGh0
bWxNb2RlKTsKKyAgICAgICAgcmV0dXJuIHt0b2tlbjogaHRtbCwgaW5UYWc6IG51bGwsIGxvY2Fs
TW9kZTogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbCwgaHRtbFN0YXRlOiBzdGF0ZX07CisgICAgICB9
LAorCisgICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgbG9j
YWw7CisgICAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSB7CisgICAgICAgICAgbG9jYWwgPSBD
b2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS5sb2NhbE1vZGUsIHN0YXRlLmxvY2FsU3RhdGUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBpblRhZzogc3Rh
dGUuaW5UYWcsCisgICAgICAgICAgICAgICAgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsIGxv
Y2FsU3RhdGU6IGxvY2FsLAorICAgICAgICAgICAgICAgIGh0bWxTdGF0ZTogQ29kZU1pcnJvci5j
b3B5U3RhdGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSl9OworICAgICAgfSwKKworICAgICAg
dG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CisgICAgICAgIHJldHVybiBzdGF0ZS50
b2tlbihzdHJlYW0sIHN0YXRlKTsKKyAgICAgIH0sCisKKyAgICAgIGluZGVudDogZnVuY3Rpb24g
KHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS5sb2NhbE1vZGUgfHwgL15c
cyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKKyAgICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50
KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUubG9j
YWxNb2RlLmluZGVudCkKKyAgICAgICAgICByZXR1cm4gc3RhdGUubG9jYWxNb2RlLmluZGVudChz
dGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0
dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgIH0sCiAKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
dGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOworICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbiAoc3Rh
dGUpIHsKKyAgICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUubG9jYWxTdGF0ZSB8fCBzdGF0ZS5o
dG1sU3RhdGUsIG1vZGU6IHN0YXRlLmxvY2FsTW9kZSB8fCBodG1sTW9kZX07CisgICAgICB9Cisg
ICAgfTsKKyAgfSwgInhtbCIsICJqYXZhc2NyaXB0IiwgImNzcyIpOwogCisgIENvZGVNaXJyb3Iu
ZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOwogfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2ph
dmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKaW5kZXggYzg2ZjQ5ZS4uMTA0MTliZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9qYXZhc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMSw4ICsxLDYgQEAKIC8v
IENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJz
CiAvLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cDovL2NvZGVtaXJyb3Iu
bmV0L0xJQ0VOU0UKIAotLy8gVE9ETyBhY3R1YWxseSByZWNvZ25pemUgc3ludGF4IG9mIFR5cGVT
Y3JpcHQgY29uc3RydWN0cwotCiAoZnVuY3Rpb24obW9kKSB7CiAgIGlmICh0eXBlb2YgZXhwb3J0
cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUwog
ICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKQEAgLTEzLDYgKzExLDEx
IEBACiB9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CiAidXNlIHN0cmljdCI7CiAKK2Z1bmN0aW9u
IGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIGJhY2tVcCkgeworICByZXR1cm4gL14o
PzpvcGVyYXRvcnxzb2Z8a2V5d29yZCBjfGNhc2V8bmV3fFtcW3t9XCgsOzpdfD0+KSQvLnRlc3Qo
c3RhdGUubGFzdFR5cGUpIHx8CisgICAgKHN0YXRlLmxhc3RUeXBlID09ICJxdWFzaSIgJiYgL1x7
XHMqJC8udGVzdChzdHJlYW0uc3RyaW5nLnNsaWNlKDAsIHN0cmVhbS5wb3MgLSAoYmFja1VwIHx8
IDApKSkpCit9CisKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVu
dFVuaXQ7CiAgIHZhciBzdGF0ZW1lbnRJbmRlbnQgPSBwYXJzZXJDb25maWcuc3RhdGVtZW50SW5k
ZW50OwpAQCAtMzAsMTQgKzMzLDE1IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgICB2YXIganNLZXl3b3Jk
cyA9IHsKICAgICAgICJpZiI6IGt3KCJpZiIpLCAid2hpbGUiOiBBLCAid2l0aCI6IEEsICJlbHNl
IjogQiwgImRvIjogQiwgInRyeSI6IEIsICJmaW5hbGx5IjogQiwKLSAgICAgICJyZXR1cm4iOiBD
LCAiYnJlYWsiOiBDLCAiY29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJv
dyI6IEMsICJkZWJ1Z2dlciI6IEMsCisgICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNv
bnRpbnVlIjogQywgIm5ldyI6IGt3KCJuZXciKSwgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMsICJk
ZWJ1Z2dlciI6IEMsCiAgICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiks
ICJsZXQiOiBrdygidmFyIiksCiAgICAgICAiZnVuY3Rpb24iOiBrdygiZnVuY3Rpb24iKSwgImNh
dGNoIjoga3coImNhdGNoIiksCiAgICAgICAiZm9yIjoga3coImZvciIpLCAic3dpdGNoIjoga3co
InN3aXRjaCIpLCAiY2FzZSI6IGt3KCJjYXNlIiksICJkZWZhdWx0Ijoga3coImRlZmF1bHQiKSwK
ICAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3BlcmF0b3IsICJpbnN0YW5jZW9mIjog
b3BlcmF0b3IsCiAgICAgICAidHJ1ZSI6IGF0b20sICJmYWxzZSI6IGF0b20sICJudWxsIjogYXRv
bSwgInVuZGVmaW5lZCI6IGF0b20sICJOYU4iOiBhdG9tLCAiSW5maW5pdHkiOiBhdG9tLAotICAg
ICAgInRoaXMiOiBrdygidGhpcyIpLCAibW9kdWxlIjoga3coIm1vZHVsZSIpLCAiY2xhc3MiOiBr
dygiY2xhc3MiKSwgInN1cGVyIjoga3coImF0b20iKSwKLSAgICAgICJ5aWVsZCI6IEMsICJleHBv
cnQiOiBrdygiZXhwb3J0IiksICJpbXBvcnQiOiBrdygiaW1wb3J0IiksICJleHRlbmRzIjogQwor
ICAgICAgInRoaXMiOiBrdygidGhpcyIpLCAiY2xhc3MiOiBrdygiY2xhc3MiKSwgInN1cGVyIjog
a3coImF0b20iKSwKKyAgICAgICJ5aWVsZCI6IEMsICJleHBvcnQiOiBrdygiZXhwb3J0IiksICJp
bXBvcnQiOiBrdygiaW1wb3J0IiksICJleHRlbmRzIjogQywKKyAgICAgICJhd2FpdCI6IEMsICJh
c3luYyI6IGt3KCJhc3luYyIpCiAgICAgfTsKIAogICAgIC8vIEV4dGVuZCB0aGUgJ25vcm1hbCcg
a2V5d29yZHMgd2l0aCB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBleHRlbnNpb25zCkBAIC00NSwx
OCArNDksMjQgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIHZhciB0eXBlID0ge3R5cGU6ICJ2YXJpYWJs
ZSIsIHN0eWxlOiAidmFyaWFibGUtMyJ9OwogICAgICAgdmFyIHRzS2V5d29yZHMgPSB7CiAgICAg
ICAgIC8vIG9iamVjdC1saWtlIHRoaW5ncwotICAgICAgICAiaW50ZXJmYWNlIjoga3coImludGVy
ZmFjZSIpLAotICAgICAgICAiZXh0ZW5kcyI6IGt3KCJleHRlbmRzIiksCi0gICAgICAgICJjb25z
dHJ1Y3RvciI6IGt3KCJjb25zdHJ1Y3RvciIpLAorICAgICAgICAiaW50ZXJmYWNlIjoga3coImNs
YXNzIiksCisgICAgICAgICJpbXBsZW1lbnRzIjogQywKKyAgICAgICAgIm5hbWVzcGFjZSI6IEMs
CisgICAgICAgICJtb2R1bGUiOiBrdygibW9kdWxlIiksCisgICAgICAgICJlbnVtIjoga3coIm1v
ZHVsZSIpLAorICAgICAgICAidHlwZSI6IGt3KCJ0eXBlIiksCiAKICAgICAgICAgLy8gc2NvcGUg
bW9kaWZpZXJzCi0gICAgICAgICJwdWJsaWMiOiBrdygicHVibGljIiksCi0gICAgICAgICJwcml2
YXRlIjoga3coInByaXZhdGUiKSwKLSAgICAgICAgInByb3RlY3RlZCI6IGt3KCJwcm90ZWN0ZWQi
KSwKLSAgICAgICAgInN0YXRpYyI6IGt3KCJzdGF0aWMiKSwKKyAgICAgICAgInB1YmxpYyI6IGt3
KCJtb2RpZmllciIpLAorICAgICAgICAicHJpdmF0ZSI6IGt3KCJtb2RpZmllciIpLAorICAgICAg
ICAicHJvdGVjdGVkIjoga3coIm1vZGlmaWVyIiksCisgICAgICAgICJhYnN0cmFjdCI6IGt3KCJt
b2RpZmllciIpLAorCisgICAgICAgIC8vIG9wZXJhdG9ycworICAgICAgICAiYXMiOiBvcGVyYXRv
ciwKIAogICAgICAgICAvLyB0eXBlcwotICAgICAgICAic3RyaW5nIjogdHlwZSwgIm51bWJlciI6
IHR5cGUsICJib29sIjogdHlwZSwgImFueSI6IHR5cGUKKyAgICAgICAgInN0cmluZyI6IHR5cGUs
ICJudW1iZXIiOiB0eXBlLCAiYm9vbGVhbiI6IHR5cGUsICJhbnkiOiB0eXBlCiAgICAgICB9Owog
CiAgICAgICBmb3IgKHZhciBhdHRyIGluIHRzS2V5d29yZHMpIHsKQEAgLTEwNSw2ICsxMTUsMTIg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICB9IGVsc2UgaWYgKGNoID09ICIwIiAmJiBzdHJlYW0uZWF0KC94
L2kpKSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7CiAgICAgICByZXR1cm4g
cmV0KCJudW1iZXIiLCAibnVtYmVyIik7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3Ry
ZWFtLmVhdCgvby9pKSkgeworICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bMC03XS9pKTsKKyAgICAg
IHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIw
IiAmJiBzdHJlYW0uZWF0KC9iL2kpKSB7CisgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swMV0vaSk7
CisgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICAgfSBlbHNlIGlmICgv
XGQvLnRlc3QoY2gpKSB7CiAgICAgICBzdHJlYW0ubWF0Y2goL15cZCooPzpcLlxkKik/KD86W2VF
XVsrXC1dP1xkKyk/Lyk7CiAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CkBA
IC0xMTUsOCArMTMxLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVh
dCgiLyIpKSB7CiAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgcmV0dXJuIHJl
dCgiY29tbWVudCIsICJjb21tZW50Iik7Ci0gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RUeXBl
ID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtleXdvcmQgYyIgfHwKLSAgICAg
ICAgICAgICAgIHN0YXRlLmxhc3RUeXBlID09ICJzb2YiIHx8IC9eW1xbe31cKCw7Ol0kLy50ZXN0
KHN0YXRlLmxhc3RUeXBlKSkgeworICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uQWxsb3dlZChz
dHJlYW0sIHN0YXRlLCAxKSkgewogICAgICAgICByZWFkUmVnZXhwKHN0cmVhbSk7CiAgICAgICAg
IHN0cmVhbS5tYXRjaCgvXlxiKChbZ2lteXVdKSg/IVtnaW15dV0qXDIpKStcYi8pOwogICAgICAg
ICByZXR1cm4gcmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKQEAgLTEzMSw3ICsxNDYsOCBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgcmV0dXJuIHJldCgi
ZXJyb3IiLCAiZXJyb3IiKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gp
KSB7Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOworICAgICAgaWYgKGNo
ICE9ICI+IiB8fCAhc3RhdGUubGV4aWNhbCB8fCBzdGF0ZS5sZXhpY2FsLnR5cGUgIT0gIj4iKQor
ICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgcmV0dXJuIHJl
dCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0uY3VycmVudCgpKTsKICAgICB9IGVsc2Ug
aWYgKHdvcmRSRS50ZXN0KGNoKSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKHdvcmRSRSk7CkBA
IC0xOTQsMTMgKzIxMCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHZhciBhcnJvdyA9IHN0cmVhbS5z
dHJpbmcuaW5kZXhPZigiPT4iLCBzdHJlYW0uc3RhcnQpOwogICAgIGlmIChhcnJvdyA8IDApIHJl
dHVybjsKIAorICAgIGlmIChpc1RTKSB7IC8vIFRyeSB0byBza2lwIFR5cGVTY3JpcHQgcmV0dXJu
IHR5cGUgZGVjbGFyYXRpb25zIGFmdGVyIHRoZSBhcmd1bWVudHMKKyAgICAgIHZhciBtID0gLzpc
cyooPzpcdysoPzo8W14+XSo+fFxbXF0pP3xce1tefV0qXH0pXHMqJC8uZXhlYyhzdHJlYW0uc3Ry
aW5nLnNsaWNlKHN0cmVhbS5zdGFydCwgYXJyb3cpKQorICAgICAgaWYgKG0pIGFycm93ID0gbS5p
bmRleAorICAgIH0KKwogICAgIHZhciBkZXB0aCA9IDAsIHNhd1NvbWV0aGluZyA9IGZhbHNlOwog
ICAgIGZvciAodmFyIHBvcyA9IGFycm93IC0gMTsgcG9zID49IDA7IC0tcG9zKSB7CiAgICAgICB2
YXIgY2ggPSBzdHJlYW0uc3RyaW5nLmNoYXJBdChwb3MpOwogICAgICAgdmFyIGJyYWNrZXQgPSBi
cmFja2V0cy5pbmRleE9mKGNoKTsKICAgICAgIGlmIChicmFja2V0ID49IDAgJiYgYnJhY2tldCA8
IDMpIHsKICAgICAgICAgaWYgKCFkZXB0aCkgeyArK3BvczsgYnJlYWs7IH0KLSAgICAgICAgaWYg
KC0tZGVwdGggPT0gMCkgYnJlYWs7CisgICAgICAgIGlmICgtLWRlcHRoID09IDApIHsgaWYgKGNo
ID09ICIoIikgc2F3U29tZXRoaW5nID0gdHJ1ZTsgYnJlYWs7IH0KICAgICAgIH0gZWxzZSBpZiAo
YnJhY2tldCA+PSAzICYmIGJyYWNrZXQgPCA2KSB7CiAgICAgICAgICsrZGVwdGg7CiAgICAgICB9
IGVsc2UgaWYgKHdvcmRSRS50ZXN0KGNoKSkgewpAQCAtMjc1LDggKzI5Niw4IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRl
OworICAgIGN4Lm1hcmtlZCA9ICJkZWYiOwogICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7Ci0gICAg
ICBjeC5tYXJrZWQgPSAiZGVmIjsKICAgICAgIGlmIChpbkxpc3Qoc3RhdGUubG9jYWxWYXJzKSkg
cmV0dXJuOwogICAgICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0
YXRlLmxvY2FsVmFyc307CiAgICAgfSBlbHNlIHsKQEAgLTMyOSwyOCArMzUwLDMwIEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAKICAgZnVuY3Rpb24gc3RhdGVtZW50KHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5
cGUgPT0gInZhciIpIHJldHVybiBjb250KHB1c2hsZXgoInZhcmRlZiIsIHZhbHVlLmxlbmd0aCks
IHZhcmRlZiwgZXhwZWN0KCI7IiksIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQg
YSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBw
b3BsZXgpOworICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGEiKSByZXR1cm4gY29udChwdXNobGV4
KCJmb3JtIiksIHBhcmVuRXhwciwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09
ICJrZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9w
bGV4KTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxv
Y2ssIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgIGlm
ICh0eXBlID09ICJpZiIpIHsKICAgICAgIGlmIChjeC5zdGF0ZS5sZXhpY2FsLmluZm8gPT0gImVs
c2UiICYmIGN4LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleCkKICAg
ICAgICAgY3guc3RhdGUuY2MucG9wKCkoKTsKLSAgICAgIHJldHVybiBjb250KHB1c2hsZXgoImZv
cm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7CisgICAgICBy
ZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHBhcmVuRXhwciwgc3RhdGVtZW50LCBwb3BsZXgs
IG1heWJlZWxzZSk7CiAgICAgfQogICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBj
b250KGZ1bmN0aW9uZGVmKTsKICAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVz
aGxleCgiZm9ybSIpLCBmb3JzcGVjLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUg
PT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsK
LSAgICBpZiAodHlwZSA9PSAic3dpdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBl
eHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3aXRjaCIpLCBleHBlY3QoInsiKSwKKyAgICBpZiAo
dHlwZSA9PSAic3dpdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwYXJlbkV4cHIs
IHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwogICAgIGlmICh0eXBl
ID09ICJjYXNlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IikpOwogICAgIGlm
ICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IikpOwogICAgIGlmICh0
eXBlID09ICJjYXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQs
IGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTsKLSAgICBpZiAo
dHlwZSA9PSAibW9kdWxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29udGV4
dCwgYWZ0ZXJNb2R1bGUsIHBvcGNvbnRleHQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gImNs
YXNzIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBjbGFzc05hbWUsIHBvcGxleCk7Ci0g
ICAgaWYgKHR5cGUgPT0gImV4cG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0
ZXJFeHBvcnQsIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gImltcG9ydCIpIHJldHVybiBjb250
KHB1c2hsZXgoImZvcm0iKSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0g
ImV4cG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgYWZ0ZXJFeHBvcnQsIHBvcGxl
eCk7CisgICAgaWYgKHR5cGUgPT0gImltcG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQi
KSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0gIm1vZHVsZSIpIHJldHVy
biBjb250KHB1c2hsZXgoImZvcm0iKSwgcGF0dGVybiwgcHVzaGxleCgifSIpLCBleHBlY3QoInsi
KSwgYmxvY2ssIHBvcGxleCwgcG9wbGV4KQorICAgIGlmICh0eXBlID09ICJ0eXBlIikgcmV0dXJu
IGNvbnQodHlwZWV4cHIsIGV4cGVjdCgib3BlcmF0b3IiKSwgdHlwZWV4cHIsIGV4cGVjdCgiOyIp
KTsKKyAgICBpZiAodHlwZSA9PSAiYXN5bmMiKSByZXR1cm4gY29udChzdGF0ZW1lbnQpCiAgICAg
cmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9w
bGV4KTsKICAgfQogICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHsKQEAgLTM1OSw2ICszODIs
MTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSkgewog
ICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdHJ1ZSk7CiAgIH0KKyAgZnVuY3Rpb24g
cGFyZW5FeHByKHR5cGUpIHsKKyAgICBpZiAodHlwZSAhPSAiKCIpIHJldHVybiBwYXNzKCkKKyAg
ICByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3Bs
ZXgpCisgIH0KICAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG5vQ29tbWEpIHsKICAg
ICBpZiAoY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQpIHsKICAgICAgIHZh
ciBib2R5ID0gbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0JvZHk7CkBAIC0zNjks
MTIgKzM5NiwxNCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHZhciBtYXliZW9wID0gbm9Db21tYSA/IG1h
eWJlb3BlcmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hOwogICAgIGlmIChhdG9taWNU
eXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcCk7CiAgICAgaWYg
KHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIG1heWJlb3ApOwot
ICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGMiKSByZXR1cm4gY29udChub0NvbW1hID8gbWF5YmVl
eHByZXNzaW9uTm9Db21tYSA6IG1heWJlZXhwcmVzc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIigi
KSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIG1heWJlZXhwcmVzc2lvbiwgY29tcHJlaGVuc2lv
biwgZXhwZWN0KCIpIiksIHBvcGxleCwgbWF5YmVvcCk7CisgICAgaWYgKHR5cGUgPT0gImNsYXNz
IikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBjbGFzc0V4cHJlc3Npb24sIHBvcGxleCk7
CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIgfHwgdHlwZSA9PSAiYXN5bmMiKSByZXR1cm4g
Y29udChub0NvbW1hID8gbWF5YmVleHByZXNzaW9uTm9Db21tYSA6IG1heWJlZXhwcmVzc2lvbik7
CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIG1heWJlZXhw
cmVzc2lvbiwgZXhwZWN0KCIpIiksIHBvcGxleCwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0g
Im9wZXJhdG9yIiB8fCB0eXBlID09ICJzcHJlYWQiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhw
cmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTsKICAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVy
biBjb250KHB1c2hsZXgoIl0iKSwgYXJyYXlMaXRlcmFsLCBwb3BsZXgsIG1heWJlb3ApOwogICAg
IGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpwcm9wLCAifSIsIG51bGws
IG1heWJlb3ApOwotICAgIGlmICh0eXBlID09ICJxdWFzaSIpIHsgcmV0dXJuIHBhc3MocXVhc2ks
IG1heWJlb3ApOyB9CisgICAgaWYgKHR5cGUgPT0gInF1YXNpIikgcmV0dXJuIHBhc3MocXVhc2ks
IG1heWJlb3ApOworICAgIGlmICh0eXBlID09ICJuZXciKSByZXR1cm4gY29udChtYXliZVRhcmdl
dChub0NvbW1hKSk7CiAgICAgcmV0dXJuIGNvbnQoKTsKICAgfQogICBmdW5jdGlvbiBtYXliZWV4
cHJlc3Npb24odHlwZSkgewpAQCAtNDI1LDYgKzQ1NCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGZp
bmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTsKICAgICByZXR1cm4gcGFzcyh0eXBlID09
ICJ7IiA/IHN0YXRlbWVudCA6IGV4cHJlc3Npb25Ob0NvbW1hKTsKICAgfQorICBmdW5jdGlvbiBt
YXliZVRhcmdldChub0NvbW1hKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAg
IGlmICh0eXBlID09ICIuIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IHRhcmdldE5vQ29tbWEgOiB0
YXJnZXQpOworICAgICAgZWxzZSByZXR1cm4gcGFzcyhub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29t
bWEgOiBleHByZXNzaW9uKTsKKyAgICB9OworICB9CisgIGZ1bmN0aW9uIHRhcmdldChfLCB2YWx1
ZSkgeworICAgIGlmICh2YWx1ZSA9PSAidGFyZ2V0IikgeyBjeC5tYXJrZWQgPSAia2V5d29yZCI7
IHJldHVybiBjb250KG1heWJlb3BlcmF0b3JDb21tYSk7IH0KKyAgfQorICBmdW5jdGlvbiB0YXJn
ZXROb0NvbW1hKF8sIHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09ICJ0YXJnZXQiKSB7IGN4Lm1h
cmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvck5vQ29tbWEpOyB9Cisg
IH0KICAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gIjoiKSBy
ZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVudCk7CiAgICAgcmV0dXJuIHBhc3MobWF5YmVvcGVy
YXRvckNvbW1hLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKQEAgLTQzMyw3ICs0NzQsMTAgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJD
b25maWcpIHsKICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInByb3Bl
cnR5IjsgcmV0dXJuIGNvbnQoKTt9CiAgIH0KICAgZnVuY3Rpb24gb2JqcHJvcCh0eXBlLCB2YWx1
ZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgfHwgY3guc3R5bGUgPT0gImtleXdvcmQi
KSB7CisgICAgaWYgKHR5cGUgPT0gImFzeW5jIikgeworICAgICAgY3gubWFya2VkID0gInByb3Bl
cnR5IjsKKyAgICAgIHJldHVybiBjb250KG9ianByb3ApOworICAgIH0gZWxzZSBpZiAodHlwZSA9
PSAidmFyaWFibGUiIHx8IGN4LnN0eWxlID09ICJrZXl3b3JkIikgewogICAgICAgY3gubWFya2Vk
ID0gInByb3BlcnR5IjsKICAgICAgIGlmICh2YWx1ZSA9PSAiZ2V0IiB8fCB2YWx1ZSA9PSAic2V0
IikgcmV0dXJuIGNvbnQoZ2V0dGVyU2V0dGVyKTsKICAgICAgIHJldHVybiBjb250KGFmdGVycHJv
cCk7CkBAIC00NDIsOCArNDg2LDE0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gY29udChh
ZnRlcnByb3ApOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAianNvbmxkLWtleXdvcmQiKSB7CiAg
ICAgICByZXR1cm4gY29udChhZnRlcnByb3ApOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibW9k
aWZpZXIiKSB7CisgICAgICByZXR1cm4gY29udChvYmpwcm9wKQogICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSAiWyIpIHsKICAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBh
ZnRlcnByb3ApOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic3ByZWFkIikgeworICAgICAgcmV0
dXJuIGNvbnQoZXhwcmVzc2lvbik7CisgICAgfSBlbHNlIGlmICh0eXBlID09ICI6IikgeworICAg
ICAgcmV0dXJuIHBhc3MoYWZ0ZXJwcm9wKQogICAgIH0KICAgfQogICBmdW5jdGlvbiBnZXR0ZXJT
ZXR0ZXIodHlwZSkgewpAQCAtNDU2LDE3ICs1MDYsMjAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAo
dHlwZSA9PSAiKCIpIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVmKTsKICAgfQogICBmdW5jdGlvbiBj
b21tYXNlcCh3aGF0LCBlbmQpIHsKLSAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUpIHsKKyAgICBm
dW5jdGlvbiBwcm9jZWVkKHR5cGUsIHZhbHVlKSB7CiAgICAgICBpZiAodHlwZSA9PSAiLCIpIHsK
ICAgICAgICAgdmFyIGxleCA9IGN4LnN0YXRlLmxleGljYWw7CiAgICAgICAgIGlmIChsZXguaW5m
byA9PSAiY2FsbCIpIGxleC5wb3MgPSAobGV4LnBvcyB8fCAwKSArIDE7Ci0gICAgICAgIHJldHVy
biBjb250KHdoYXQsIHByb2NlZWQpOworICAgICAgICByZXR1cm4gY29udChmdW5jdGlvbih0eXBl
LCB2YWx1ZSkgeworICAgICAgICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJl
dHVybiBwYXNzKCkKKyAgICAgICAgICByZXR1cm4gcGFzcyh3aGF0KQorICAgICAgICB9LCBwcm9j
ZWVkKTsKICAgICAgIH0KLSAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKKyAg
ICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAg
ICByZXR1cm4gY29udChleHBlY3QoZW5kKSk7CiAgICAgfQotICAgIHJldHVybiBmdW5jdGlvbih0
eXBlKSB7Ci0gICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKHR5cGUsIHZhbHVlKSB7CisgICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUg
PT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICAgcmV0dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7
CiAgICAgfTsKICAgfQpAQCAtNDc5LDIwICs1MzIsNDUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAo
dHlwZSA9PSAifSIpIHJldHVybiBjb250KCk7CiAgICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBi
bG9jayk7CiAgIH0KLSAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUpIHsKLSAgICBpZiAoaXNUUyAm
JiB0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWRlZik7CisgIGZ1bmN0aW9uIG1heWJldHlw
ZSh0eXBlLCB2YWx1ZSkgeworICAgIGlmIChpc1RTKSB7CisgICAgICBpZiAodHlwZSA9PSAiOiIp
IHJldHVybiBjb250KHR5cGVleHByKTsKKyAgICAgIGlmICh2YWx1ZSA9PSAiPyIpIHJldHVybiBj
b250KG1heWJldHlwZSk7CisgICAgfQogICB9Ci0gIGZ1bmN0aW9uIG1heWJlZGVmYXVsdChfLCB2
YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0Nv
bW1hKTsKKyAgZnVuY3Rpb24gdHlwZWV4cHIodHlwZSkgeworICAgIGlmICh0eXBlID09ICJ2YXJp
YWJsZSIpIHtjeC5tYXJrZWQgPSAidmFyaWFibGUtMyI7IHJldHVybiBjb250KGFmdGVyVHlwZSk7
fQorICAgIGlmICh0eXBlID09ICJzdHJpbmciIHx8IHR5cGUgPT0gIm51bWJlciIgfHwgdHlwZSA9
PSAiYXRvbSIpIHJldHVybiBjb250KGFmdGVyVHlwZSk7CisgICAgaWYgKHR5cGUgPT0gInsiKSBy
ZXR1cm4gY29udChjb21tYXNlcCh0eXBlcHJvcCwgIn0iKSkKKyAgICBpZiAodHlwZSA9PSAiKCIp
IHJldHVybiBjb250KGNvbW1hc2VwKHR5cGVhcmcsICIpIiksIG1heWJlUmV0dXJuVHlwZSkKICAg
fQotICBmdW5jdGlvbiB0eXBlZGVmKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUi
KSB7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udCgpO30KKyAgZnVuY3Rpb24g
bWF5YmVSZXR1cm5UeXBlKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAiPT4iKSByZXR1cm4gY29u
dCh0eXBlZXhwcikKKyAgfQorICBmdW5jdGlvbiB0eXBlcHJvcCh0eXBlKSB7CisgICAgaWYgKHR5
cGUgPT0gInZhcmlhYmxlIiB8fCBjeC5zdHlsZSA9PSAia2V5d29yZCIpIHsKKyAgICAgIGN4Lm1h
cmtlZCA9ICJwcm9wZXJ0eSIKKyAgICAgIHJldHVybiBjb250KHR5cGVwcm9wKQorICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAiOiIpIHsKKyAgICAgIHJldHVybiBjb250KHR5cGVleHByKQorICAgIH0K
KyAgfQorICBmdW5jdGlvbiB0eXBlYXJnKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAidmFyaWFi
bGUiKSByZXR1cm4gY29udCh0eXBlYXJnKQorICAgIGVsc2UgaWYgKHR5cGUgPT0gIjoiKSByZXR1
cm4gY29udCh0eXBlZXhwcikKKyAgfQorICBmdW5jdGlvbiBhZnRlclR5cGUodHlwZSwgdmFsdWUp
IHsKKyAgICBpZiAodmFsdWUgPT0gIjwiKSByZXR1cm4gY29udChwdXNobGV4KCI+IiksIGNvbW1h
c2VwKHR5cGVleHByLCAiPiIpLCBwb3BsZXgsIGFmdGVyVHlwZSkKKyAgICBpZiAodmFsdWUgPT0g
InwiIHx8IHR5cGUgPT0gIi4iKSByZXR1cm4gY29udCh0eXBlZXhwcikKKyAgICBpZiAodHlwZSA9
PSAiWyIpIHJldHVybiBjb250KGV4cGVjdCgiXSIpLCBhZnRlclR5cGUpCiAgIH0KICAgZnVuY3Rp
b24gdmFyZGVmKCkgewogICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVB
c3NpZ24sIHZhcmRlZkNvbnQpOwogICB9CiAgIGZ1bmN0aW9uIHBhdHRlcm4odHlwZSwgdmFsdWUp
IHsKKyAgICBpZiAodHlwZSA9PSAibW9kaWZpZXIiKSByZXR1cm4gY29udChwYXR0ZXJuKQogICAg
IGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHsgcmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgp
OyB9CisgICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJldHVybiBjb250KHBhdHRlcm4pOwogICAg
IGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnRDb21tYXNlcChwYXR0ZXJuLCAiXSIpOwogICAg
IGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChwcm9wcGF0dGVybiwgIn0iKTsK
ICAgfQpAQCAtNTAyLDYgKzU4MCw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gY29udCht
YXliZUFzc2lnbik7CiAgICAgfQogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIGN4Lm1hcmtl
ZCA9ICJwcm9wZXJ0eSI7CisgICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJldHVybiBjb250KHBh
dHRlcm4pOworICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBhc3MoKTsKICAgICByZXR1cm4g
Y29udChleHBlY3QoIjoiKSwgcGF0dGVybiwgbWF5YmVBc3NpZ24pOwogICB9CiAgIGZ1bmN0aW9u
IG1heWJlQXNzaWduKF90eXBlLCB2YWx1ZSkgewpAQCAtNTM3LDI4ICs2MTcsMzQgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgZnVuY3Rpb24gZnVuY3Rpb25kZWYodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodmFs
dWUgPT0gIioiKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChmdW5jdGlvbmRl
Zik7fQogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVy
biBjb250KGZ1bmN0aW9uZGVmKTt9Ci0gICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChw
dXNoY29udGV4dCwgcHVzaGxleCgiKSIpLCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwg
c3RhdGVtZW50LCBwb3Bjb250ZXh0KTsKKyAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250
KHB1c2hjb250ZXh0LCBwdXNobGV4KCIpIiksIGNvbW1hc2VwKGZ1bmFyZywgIikiKSwgcG9wbGV4
LCBtYXliZXR5cGUsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgIH0KICAgZnVuY3Rpb24gZnVu
YXJnKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQoZnVuYXJn
KTsKLSAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlZGVmYXVsdCk7Cisg
ICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbik7CisgIH0KKyAg
ZnVuY3Rpb24gY2xhc3NFeHByZXNzaW9uKHR5cGUsIHZhbHVlKSB7CisgICAgLy8gQ2xhc3MgZXhw
cmVzc2lvbnMgbWF5IGhhdmUgYW4gb3B0aW9uYWwgbmFtZS4KKyAgICBpZiAodHlwZSA9PSAidmFy
aWFibGUiKSByZXR1cm4gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKTsKKyAgICByZXR1cm4gY2xhc3NO
YW1lQWZ0ZXIodHlwZSwgdmFsdWUpOwogICB9CiAgIGZ1bmN0aW9uIGNsYXNzTmFtZSh0eXBlLCB2
YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJl
dHVybiBjb250KGNsYXNzTmFtZUFmdGVyKTt9CiAgIH0KICAgZnVuY3Rpb24gY2xhc3NOYW1lQWZ0
ZXIodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gImV4dGVuZHMiKSByZXR1cm4gY29u
dChleHByZXNzaW9uLCBjbGFzc05hbWVBZnRlcik7CisgICAgaWYgKHZhbHVlID09ICJleHRlbmRz
IiB8fCB2YWx1ZSA9PSAiaW1wbGVtZW50cyIpIHJldHVybiBjb250KGlzVFMgPyB0eXBlZXhwciA6
IGV4cHJlc3Npb24sIGNsYXNzTmFtZUFmdGVyKTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVy
biBjb250KHB1c2hsZXgoIn0iKSwgY2xhc3NCb2R5LCBwb3BsZXgpOwogICB9CiAgIGZ1bmN0aW9u
IGNsYXNzQm9keSh0eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgfHwg
Y3guc3R5bGUgPT0gImtleXdvcmQiKSB7Ci0gICAgICBpZiAodmFsdWUgPT0gInN0YXRpYyIpIHsK
KyAgICAgIGlmICgodmFsdWUgPT0gInN0YXRpYyIgfHwgdmFsdWUgPT0gImdldCIgfHwgdmFsdWUg
PT0gInNldCIgfHwKKyAgICAgICAgICAgKGlzVFMgJiYgKHZhbHVlID09ICJwdWJsaWMiIHx8IHZh
bHVlID09ICJwcml2YXRlIiB8fCB2YWx1ZSA9PSAicHJvdGVjdGVkIiB8fCB2YWx1ZSA9PSAicmVh
ZG9ubHkiIHx8IHZhbHVlID09ICJhYnN0cmFjdCIpKSkgJiYKKyAgICAgICAgICBjeC5zdHJlYW0u
bWF0Y2goL15ccytbXHckXHhhMS1cdWZmZmZdLywgZmFsc2UpKSB7CiAgICAgICAgIGN4Lm1hcmtl
ZCA9ICJrZXl3b3JkIjsKICAgICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTsKICAgICAgIH0K
ICAgICAgIGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7Ci0gICAgICBpZiAodmFsdWUgPT0gImdldCIg
fHwgdmFsdWUgPT0gInNldCIpIHJldHVybiBjb250KGNsYXNzR2V0dGVyU2V0dGVyLCBmdW5jdGlv
bmRlZiwgY2xhc3NCb2R5KTsKLSAgICAgIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBjbGFzc0Jv
ZHkpOworICAgICAgcmV0dXJuIGNvbnQoaXNUUyA/IGNsYXNzZmllbGQgOiBmdW5jdGlvbmRlZiwg
Y2xhc3NCb2R5KTsKICAgICB9CiAgICAgaWYgKHZhbHVlID09ICIqIikgewogICAgICAgY3gubWFy
a2VkID0gImtleXdvcmQiOwpAQCAtNTY3LDE0ICs2NTMsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBp
ZiAodHlwZSA9PSAiOyIpIHJldHVybiBjb250KGNsYXNzQm9keSk7CiAgICAgaWYgKHR5cGUgPT0g
In0iKSByZXR1cm4gY29udCgpOwogICB9Ci0gIGZ1bmN0aW9uIGNsYXNzR2V0dGVyU2V0dGVyKHR5
cGUpIHsKLSAgICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSByZXR1cm4gcGFzcygpOwotICAgIGN4
Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7Ci0gICAgcmV0dXJuIGNvbnQoKTsKLSAgfQotICBmdW5jdGlv
biBhZnRlck1vZHVsZSh0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJzdHJpbmciKSBy
ZXR1cm4gY29udChzdGF0ZW1lbnQpOwotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHsgcmVn
aXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChtYXliZUZyb20pOyB9CisgIGZ1bmN0aW9uIGNsYXNz
ZmllbGQodHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gIj8iKSByZXR1cm4gY29udChj
bGFzc2ZpZWxkKQorICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIG1h
eWJlQXNzaWduKQorICAgIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVmKQogICB9CiAgIGZ1bmN0aW9u
IGFmdGVyRXhwb3J0KF90eXBlLCB2YWx1ZSkgewogICAgIGlmICh2YWx1ZSA9PSAiKiIpIHsgY3gu
bWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChtYXliZUZyb20sIGV4cGVjdCgiOyIpKTsg
fQpAQCAtNTk5LDE3ICs2ODEsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1bmN0aW9uIGFycmF5
TGl0ZXJhbCh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gIl0iKSByZXR1cm4gY29udCgpOwotICAg
IHJldHVybiBwYXNzKGV4cHJlc3Npb25Ob0NvbW1hLCBtYXliZUFycmF5Q29tcHJlaGVuc2lvbik7
Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVBcnJheUNvbXByZWhlbnNpb24odHlwZSkgewotICAgIGlm
ICh0eXBlID09ICJmb3IiKSByZXR1cm4gcGFzcyhjb21wcmVoZW5zaW9uLCBleHBlY3QoIl0iKSk7
Ci0gICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChjb21tYXNlcChtYXliZWV4cHJlc3Np
b25Ob0NvbW1hLCAiXSIpKTsKICAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9D
b21tYSwgIl0iKSk7CiAgIH0KLSAgZnVuY3Rpb24gY29tcHJlaGVuc2lvbih0eXBlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KGZvcnNwZWMsIGNvbXByZWhlbnNpb24pOwot
ICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNvbXByZWhlbnNp
b24pOwotICB9CiAKICAgZnVuY3Rpb24gaXNDb250aW51ZWRTdGF0ZW1lbnQoc3RhdGUsIHRleHRB
ZnRlcikgewogICAgIHJldHVybiBzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRl
Lmxhc3RUeXBlID09ICIsIiB8fApAQCAtNjI4LDcgKzcwMSw3IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
ICAgIGxleGljYWw6IG5ldyBKU0xleGljYWwoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0
LCAwLCAiYmxvY2siLCBmYWxzZSksCiAgICAgICAgIGxvY2FsVmFyczogcGFyc2VyQ29uZmlnLmxv
Y2FsVmFycywKICAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiB7dmFy
czogcGFyc2VyQ29uZmlnLmxvY2FsVmFyc30sCi0gICAgICAgIGluZGVudGVkOiAwCisgICAgICAg
IGluZGVudGVkOiBiYXNlY29sdW1uIHx8IDAKICAgICAgIH07CiAgICAgICBpZiAocGFyc2VyQ29u
ZmlnLmdsb2JhbFZhcnMgJiYgdHlwZW9mIHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzID09ICJvYmpl
Y3QiKQogICAgICAgICBzdGF0ZS5nbG9iYWxWYXJzID0gcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnM7
CkBAIC02NTIsMTQgKzcyNSwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGluZGVudDogZnVuY3Rpb24o
c3RhdGUsIHRleHRBZnRlcikgewogICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IHRva2VuQ29t
bWVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAh
PSB0b2tlbkJhc2UpIHJldHVybiAwOwotICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAm
JiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbDsKKyAgICAgIHZh
ciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9
IHN0YXRlLmxleGljYWwsIHRvcAogICAgICAgLy8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNl
JyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2NvcGUgcG9wcwogICAgICAgaWYgKCEvXlxzKmVsc2Vc
Yi8udGVzdCh0ZXh0QWZ0ZXIpKSBmb3IgKHZhciBpID0gc3RhdGUuY2MubGVuZ3RoIC0gMTsgaSA+
PSAwOyAtLWkpIHsKICAgICAgICAgdmFyIGMgPSBzdGF0ZS5jY1tpXTsKICAgICAgICAgaWYgKGMg
PT0gcG9wbGV4KSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwogICAgICAgICBlbHNlIGlmIChjICE9
IG1heWJlZWxzZSkgYnJlYWs7CiAgICAgICB9Ci0gICAgICBpZiAobGV4aWNhbC50eXBlID09ICJz
dGF0IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OworICAgICAg
d2hpbGUgKChsZXhpY2FsLnR5cGUgPT0gInN0YXQiIHx8IGxleGljYWwudHlwZSA9PSAiZm9ybSIp
ICYmCisgICAgICAgICAgICAgKGZpcnN0Q2hhciA9PSAifSIgfHwgKCh0b3AgPSBzdGF0ZS5jY1tz
dGF0ZS5jYy5sZW5ndGggLSAxXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHRvcCA9PSBtYXliZW9wZXJhdG9yQ29tbWEgfHwgdG9wID09IG1heWJlb3BlcmF0b3JOb0Nv
bW1hKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhL15bLFwuPStcLSo6
P1tcKF0vLnRlc3QodGV4dEFmdGVyKSkpKQorICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2
OwogICAgICAgaWYgKHN0YXRlbWVudEluZGVudCAmJiBsZXhpY2FsLnR5cGUgPT0gIikiICYmIGxl
eGljYWwucHJldi50eXBlID09ICJzdGF0IikKICAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJl
djsKICAgICAgIHZhciB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09
IHR5cGU7CkBAIC02ODQsNyArNzYxLDEzIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNj
cmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgICBoZWxwZXJUeXBl
OiBqc29uTW9kZSA/ICJqc29uIiA6ICJqYXZhc2NyaXB0IiwKICAgICBqc29ubGRNb2RlOiBqc29u
bGRNb2RlLAotICAgIGpzb25Nb2RlOiBqc29uTW9kZQorICAgIGpzb25Nb2RlOiBqc29uTW9kZSwK
KworICAgIGV4cHJlc3Npb25BbGxvd2VkOiBleHByZXNzaW9uQWxsb3dlZCwKKyAgICBza2lwRXhw
cmVzc2lvbjogZnVuY3Rpb24oc3RhdGUpIHsKKyAgICAgIHZhciB0b3AgPSBzdGF0ZS5jY1tzdGF0
ZS5jYy5sZW5ndGggLSAxXQorICAgICAgaWYgKHRvcCA9PSBleHByZXNzaW9uIHx8IHRvcCA9PSBl
eHByZXNzaW9uTm9Db21tYSkgc3RhdGUuY2MucG9wKCkKKyAgICB9CiAgIH07CiB9KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9saXZlc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzCmluZGV4IDRiMjZlMDQuLjFlMzYz
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlwdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3JpcHQuanMKQEAgLTUwLDcg
KzUwLDcgQEAKICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCl7CiAgICAgICAgIHJldHVybiB7
CiAgICAgICAgICAgbmV4dDogJ3N0YXJ0JywKLSAgICAgICAgICBsYXN0VG9rZW46IG51bGwKKyAg
ICAgICAgICBsYXN0VG9rZW46IHtzdHlsZTogbnVsbCwgaW5kZW50OiAwLCBjb250ZW50OiAiIn0K
ICAgICAgICAgfTsKICAgICAgIH0sCiAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0
ZSl7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMKaW5kZXgg
NzBlMWFlMS4uNzY3NTRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hi
cmFja2V0cy5qcwpAQCAtMTAyLDggKzEwMiwxMCBAQAogICB9CiAKICAgQ29kZU1pcnJvci5kZWZp
bmVPcHRpb24oIm1hdGNoQnJhY2tldHMiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7
Ci0gICAgaWYgKG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0KQorICAgIGlmIChvbGQgJiYg
b2xkICE9IENvZGVNaXJyb3IuSW5pdCkgewogICAgICAgY20ub2ZmKCJjdXJzb3JBY3Rpdml0eSIs
IGRvTWF0Y2hCcmFja2V0cyk7CisgICAgICBpZiAoY3VycmVudGx5SGlnaGxpZ2h0ZWQpIHtjdXJy
ZW50bHlIaWdobGlnaHRlZCgpOyBjdXJyZW50bHlIaWdobGlnaHRlZCA9IG51bGw7fQorICAgIH0K
ICAgICBpZiAodmFsKSB7CiAgICAgICBjbS5zdGF0ZS5tYXRjaEJyYWNrZXRzID0gdHlwZW9mIHZh
bCA9PSAib2JqZWN0IiA/IHZhbCA6IHt9OwogICAgICAgY20ub24oImN1cnNvckFjdGl2aXR5Iiwg
ZG9NYXRjaEJyYWNrZXRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivb3ZlcmxheS5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivb3ZlcmxheS5qcwppbmRl
eCBlMWI5ZWQzLi40YTlmOTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5Lmpz
CkBAIC03Niw4ICs3NiwxMyBAQCBDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0gZnVuY3Rpb24oYmFz
ZSwgb3ZlcmxheSwgY29tYmluZSkgewogICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsg
cmV0dXJuIHtzdGF0ZTogc3RhdGUuYmFzZSwgbW9kZTogYmFzZX07IH0sCiAKICAgICBibGFua0xp
bmU6IGZ1bmN0aW9uKHN0YXRlKSB7Ci0gICAgICBpZiAoYmFzZS5ibGFua0xpbmUpIGJhc2UuYmxh
bmtMaW5lKHN0YXRlLmJhc2UpOwotICAgICAgaWYgKG92ZXJsYXkuYmxhbmtMaW5lKSBvdmVybGF5
LmJsYW5rTGluZShzdGF0ZS5vdmVybGF5KTsKKyAgICAgIHZhciBiYXNlVG9rZW4sIG92ZXJsYXlU
b2tlbjsKKyAgICAgIGlmIChiYXNlLmJsYW5rTGluZSkgYmFzZVRva2VuID0gYmFzZS5ibGFua0xp
bmUoc3RhdGUuYmFzZSk7CisgICAgICBpZiAob3ZlcmxheS5ibGFua0xpbmUpIG92ZXJsYXlUb2tl
biA9IG92ZXJsYXkuYmxhbmtMaW5lKHN0YXRlLm92ZXJsYXkpOworCisgICAgICByZXR1cm4gb3Zl
cmxheVRva2VuID09IG51bGwgPworICAgICAgICBiYXNlVG9rZW4gOgorICAgICAgICAoY29tYmlu
ZSAmJiBiYXNlVG9rZW4gIT0gbnVsbCA/IGJhc2VUb2tlbiArICIgIiArIG92ZXJsYXlUb2tlbiA6
IG92ZXJsYXlUb2tlbik7CiAgICAgfQogICB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcGxhY2Vob2xkZXIu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL3BsYWNlaG9sZGVyLmpzCmluZGV4IGJiMGMzOTMuLjJmOGIxZjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcGxh
Y2Vob2xkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9wbGFjZWhvbGRlci5qcwpAQCAtMTQsMTAgKzE0LDEyIEBACiAgICAg
aWYgKHZhbCAmJiAhcHJldikgewogICAgICAgY20ub24oImJsdXIiLCBvbkJsdXIpOwogICAgICAg
Y20ub24oImNoYW5nZSIsIG9uQ2hhbmdlKTsKKyAgICAgIGNtLm9uKCJzd2FwRG9jIiwgb25DaGFu
Z2UpOwogICAgICAgb25DaGFuZ2UoY20pOwogICAgIH0gZWxzZSBpZiAoIXZhbCAmJiBwcmV2KSB7
CiAgICAgICBjbS5vZmYoImJsdXIiLCBvbkJsdXIpOwogICAgICAgY20ub2ZmKCJjaGFuZ2UiLCBv
bkNoYW5nZSk7CisgICAgICBjbS5vZmYoInN3YXBEb2MiLCBvbkNoYW5nZSk7CiAgICAgICBjbGVh
clBsYWNlaG9sZGVyKGNtKTsKICAgICAgIHZhciB3cmFwcGVyID0gY20uZ2V0V3JhcHBlckVsZW1l
bnQoKTsKICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gd3JhcHBlci5jbGFzc05hbWUucmVwbGFj
ZSgiIENvZGVNaXJyb3ItZW1wdHkiLCAiIik7CkBAIC0zNyw3ICszOSw5IEBACiAgICAgdmFyIGVs
dCA9IGNtLnN0YXRlLnBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7
CiAgICAgZWx0LnN0eWxlLmNzc1RleHQgPSAiaGVpZ2h0OiAwOyBvdmVyZmxvdzogdmlzaWJsZSI7
CiAgICAgZWx0LmNsYXNzTmFtZSA9ICJDb2RlTWlycm9yLXBsYWNlaG9sZGVyIjsKLSAgICBlbHQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY20uZ2V0T3B0aW9uKCJwbGFjZWhv
bGRlciIpKSk7CisgICAgdmFyIHBsYWNlSG9sZGVyID0gY20uZ2V0T3B0aW9uKCJwbGFjZWhvbGRl
ciIpCisgICAgaWYgKHR5cGVvZiBwbGFjZUhvbGRlciA9PSAic3RyaW5nIikgcGxhY2VIb2xkZXIg
PSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwbGFjZUhvbGRlcikKKyAgICBlbHQuYXBwZW5kQ2hp
bGQocGxhY2VIb2xkZXIpCiAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGVs
dCwgY20uZGlzcGxheS5saW5lU3BhY2UuZmlyc3RDaGlsZCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9y
dW5tb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9ydW5tb2RlLmpzCmluZGV4IDA3ZDIyNzkuLmE1MWM2ZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
cnVubW9kZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMKQEAgLTE2LDcgKzE2LDcgQEAgQ29kZU1pcnJvci5y
dW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2ssIG9wdGlvbnMpIHsK
ICAgdmFyIGllID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBp
ZV9sdDkgPSBpZSAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlIDwgOSk7CiAKLSAgaWYgKGNhbGxiYWNrLm5vZGVUeXBlID09IDEpIHsKKyAg
aWYgKGNhbGxiYWNrLmFwcGVuZENoaWxkKSB7CiAgICAgdmFyIHRhYlNpemUgPSAob3B0aW9ucyAm
JiBvcHRpb25zLnRhYlNpemUpIHx8IENvZGVNaXJyb3IuZGVmYXVsdHMudGFiU2l6ZTsKICAgICB2
YXIgbm9kZSA9IGNhbGxiYWNrLCBjb2wgPSAwOwogICAgIG5vZGUuaW5uZXJIVE1MID0gIiI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL3NxbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzCmluZGV4IGE5MDgyNzcuLjMyY2VkM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3Ivc3FsLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3Ivc3FsLmpzCkBAIC0zMiwxMyArMzIsMTMgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgaWYg
KHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHN1cHBv
cnQuaGV4TnVtYmVyID09IHRydWUgJiYKKyAgICBpZiAoc3VwcG9ydC5oZXhOdW1iZXIgJiYKICAg
ICAgICgoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsvKSkKICAg
ICAgIHx8IChjaCA9PSAieCIgfHwgY2ggPT0gIlgiKSAmJiBzdHJlYW0ubWF0Y2goL14nWzAtOWEt
ZkEtRl0rJy8pKSkgewogICAgICAgLy8gaGV4CiAgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlz
cWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2hleGFkZWNpbWFsLWxpdGVyYWxzLmh0bWwKICAgICAg
IHJldHVybiAibnVtYmVyIjsKLSAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmluYXJ5TnVtYmVyID09
IHRydWUgJiYKKyAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmluYXJ5TnVtYmVyICYmCiAgICAgICAo
KChjaCA9PSAiYiIgfHwgY2ggPT0gIkIiKSAmJiBzdHJlYW0ubWF0Y2goL14nWzAxXSsnLykpCiAg
ICAgICB8fCAoY2ggPT0gIjAiICYmIHN0cmVhbS5tYXRjaCgvXmJbMDFdKy8pKSkpIHsKICAgICAg
IC8vIGJpdHN0cmluZwpAQCAtNDgsNyArNDgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNx
bCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAvLyBudW1iZXJzCiAg
ICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL251bWJl
ci1saXRlcmFscy5odG1sCiAgICAgICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtOV0qXC4/WzAtOV0r
KFtlRV1bLStdP1swLTldKyk/Lyk7Ci0gICAgICBzdXBwb3J0LmRlY2ltYWxsZXNzRmxvYXQgPT0g
dHJ1ZSAmJiBzdHJlYW0uZWF0KCcuJyk7CisgICAgICBzdXBwb3J0LmRlY2ltYWxsZXNzRmxvYXQg
JiYgc3RyZWFtLmVhdCgnLicpOwogICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgIH0gZWxzZSBp
ZiAoY2ggPT0gIj8iICYmIChzdHJlYW0uZWF0U3BhY2UoKSB8fCBzdHJlYW0uZW9sKCkgfHwgc3Ry
ZWFtLmVhdCgiOyIpKSkgewogICAgICAgLy8gcGxhY2Vob2xkZXJzCkBAIC01OCwxNCArNTgsMTQg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUu
NS9lbi9zdHJpbmctbGl0ZXJhbHMuaHRtbAogICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxp
dGVyYWwoY2gpOwogICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwot
ICAgIH0gZWxzZSBpZiAoKCgoc3VwcG9ydC5uQ2hhckNhc3QgPT0gdHJ1ZSAmJiAoY2ggPT0gIm4i
IHx8IGNoID09ICJOIikpCi0gICAgICAgIHx8IChzdXBwb3J0LmNoYXJzZXRDYXN0ID09IHRydWUg
JiYgY2ggPT0gIl8iICYmIHN0cmVhbS5tYXRjaCgvW2Etel1bYS16MC05XSovaSkpKQorICAgIH0g
ZWxzZSBpZiAoKCgoc3VwcG9ydC5uQ2hhckNhc3QgJiYgKGNoID09ICJuIiB8fCBjaCA9PSAiTiIp
KQorICAgICAgICB8fCAoc3VwcG9ydC5jaGFyc2V0Q2FzdCAmJiBjaCA9PSAiXyIgJiYgc3RyZWFt
Lm1hdGNoKC9bYS16XVthLXowLTldKi9pKSkpCiAgICAgICAgICYmIChzdHJlYW0ucGVlaygpID09
ICInIiB8fCBzdHJlYW0ucGVlaygpID09ICciJykpKSB7CiAgICAgICAvLyBjaGFyc2V0IGNhc3Rp
bmc6IF91dGY4J3N0cicsIE4nc3RyJywgbidzdHInCiAgICAgICAvLyByZWY6IGh0dHA6Ly9kZXYu
bXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sCiAgICAgICBy
ZXR1cm4gImtleXdvcmQiOwogICAgIH0gZWxzZSBpZiAoL15bXChcKSxcO1xbXF1dLy50ZXN0KGNo
KSkgewotICAgICAgLy8gbm8gaGlnaGxpZ2h0bmluZworICAgICAgLy8gbm8gaGlnaGxpZ2h0aW5n
CiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuY29tbWVudFNsYXNo
U2xhc2ggJiYgY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIi8iKSkgewogICAgICAgLy8gMS1saW5l
IGNvbW1lbnQKQEAgLTg0LDEyICs4NCwxMiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gc3RhdGUudG9r
ZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAiLiIpIHsKICAgICAg
IC8vIC4xIGZvciAwLjEKLSAgICAgIGlmIChzdXBwb3J0Lnplcm9sZXNzRmxvYXQgPT0gdHJ1ZSAm
JiBzdHJlYW0ubWF0Y2goL14oPzpcZCsoPzplWystXT9cZCspPykvaSkpIHsKKyAgICAgIGlmIChz
dXBwb3J0Lnplcm9sZXNzRmxvYXQgJiYgc3RyZWFtLm1hdGNoKC9eKD86XGQrKD86ZVsrLV0/XGQr
KT8pL2kpKSB7CiAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgIH0KICAgICAgIC8vIC50
YWJsZV9uYW1lIChPREJDKQogICAgICAgLy8gLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9k
b2MvcmVmbWFuLzUuNi9lbi9pZGVudGlmaWVyLXF1YWxpZmllcnMuaHRtbAotICAgICAgaWYgKHN1
cHBvcnQuT0RCQ2RvdFRhYmxlID09IHRydWUgJiYgc3RyZWFtLm1hdGNoKC9eW2EtekEtWl9dKy8p
KSB7CisgICAgICBpZiAoc3VwcG9ydC5PREJDZG90VGFibGUgJiYgc3RyZWFtLm1hdGNoKC9eW2Et
ekEtWl9dKy8pKSB7CiAgICAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICAgICB9CiAgICAg
fSBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CkBAIC0yNTcsNyArMjU3LDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICB9CiAKICAgLy8gdGhlc2Uga2V5d29yZHMgYXJlIHVzZWQgYnkgYWxsIFNRTCBkaWFs
ZWN0cyAoaG93ZXZlciwgYSBtb2RlIGNhbiBzdGlsbCBvdmVyd3JpdGUgaXQpCi0gIHZhciBzcWxL
ZXl3b3JkcyA9ICJhbHRlciBhbmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRlbGV0
ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBncm91cCBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMg
am9pbiBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2
YWx1ZXMgd2hlcmUgIjsKKyAgdmFyIHNxbEtleXdvcmRzID0gImFsdGVyIGFuZCBhcyBhc2MgYmV0
d2VlbiBieSBjb3VudCBjcmVhdGUgZGVsZXRlIGRlc2MgZGlzdGluY3QgZHJvcCBmcm9tIGdyb3Vw
IGhhdmluZyBpbiBpbnNlcnQgaW50byBpcyBqb2luIGxpa2Ugbm90IG9uIG9yIG9yZGVyIHNlbGVj
dCBzZXQgdGFibGUgdW5pb24gdXBkYXRlIHZhbHVlcyB3aGVyZSBsaW1pdCAiOwogCiAgIC8vIHR1
cm4gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBpbnRvIGFuIGFycmF5CiAgIGZ1bmN0aW9uIHNldChz
dHIpIHsKQEAgLTI4MCw3ICsyODAsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgi
dGV4dC94LW1zc3FsIiwgewogICAgIG5hbWU6ICJzcWwiLAogICAgIGNsaWVudDogc2V0KCJjaGFy
c2V0IGNsZWFyIGNvbm5lY3QgZWRpdCBlZ28gZXhpdCBnbyBoZWxwIG5vcGFnZXIgbm90ZWUgbm93
YXJuaW5nIHBhZ2VyIHByaW50IHByb21wdCBxdWl0IHJlaGFzaCBzb3VyY2Ugc3RhdHVzIHN5c3Rl
bSB0ZWUiKSwKLSAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImJlZ2luIHRyaWdnZXIg
cHJvYyB2aWV3IGluZGV4IGZvciBhZGQgY29uc3RyYWludCBrZXkgcHJpbWFyeSBmb3JlaWduIGNv
bGxhdGUgY2x1c3RlcmVkIG5vbmNsdXN0ZXJlZCBkZWNsYXJlIiksCisgICAga2V5d29yZHM6IHNl
dChzcWxLZXl3b3JkcyArICJiZWdpbiB0cmlnZ2VyIHByb2MgdmlldyBpbmRleCBmb3IgYWRkIGNv
bnN0cmFpbnQga2V5IHByaW1hcnkgZm9yZWlnbiBjb2xsYXRlIGNsdXN0ZXJlZCBub25jbHVzdGVy
ZWQgZGVjbGFyZSBleGVjIiksCiAgICAgYnVpbHRpbjogc2V0KCJiaWdpbnQgbnVtZXJpYyBiaXQg
c21hbGxpbnQgZGVjaW1hbCBzbWFsbG1vbmV5IGludCB0aW55aW50IG1vbmV5IGZsb2F0IHJlYWwg
Y2hhciB2YXJjaGFyIHRleHQgbmNoYXIgbnZhcmNoYXIgbnRleHQgYmluYXJ5IHZhcmJpbmFyeSBp
bWFnZSBjdXJzb3IgdGltZXN0YW1wIGhpZXJhcmNoeWlkIHVuaXF1ZWlkZW50aWZpZXIgc3FsX3Zh
cmlhbnQgeG1sIHRhYmxlICIpLAogICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgbnVsbCB1bmtu
b3duIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9XS8sCkBAIC0zNDEsNyArMzQx
LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIG5hbWU6ICAgICAgICJzcWwiLAogICAgIGNsaWVudDogICAgIHNldCgi
YXBwaW5mbyBhcnJheXNpemUgYXV0b2NvbW1pdCBhdXRvcHJpbnQgYXV0b3JlY292ZXJ5IGF1dG90
cmFjZSBibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlIGNtZHNlcCBjb2xzZXAgY29tcGF0aWJp
bGl0eSBjb21wdXRlIGNvbmNhdCBjb3B5Y29tbWl0IGNvcHl0eXBlY2hlY2sgZGVmaW5lIGRlc2Ny
aWJlIGVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSBmZWVkYmFjayBm
bGFnZ2VyIGZsdXNoIGhlYWRpbmcgaGVhZHNlcCBpbnN0YW5jZSBsaW5lc2l6ZSBsbm8gbG9ib2Zm
c2V0IGxvZ3NvdXJjZSBsb25nIGxvbmdjaHVua3NpemUgbWFya3VwIG5hdGl2ZSBuZXdwYWdlIG51
bWZvcm1hdCBudW13aWR0aCBwYWdlc2l6ZSBwYXVzZSBwbm8gcmVjc2VwIHJlY3NlcGNoYXIgcmVs
ZWFzZSByZXBmb290ZXIgcmVwaGVhZGVyIHNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hv
d21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51
ZSBzcWxudW1iZXIgc3FscGx1c2NvbXBhdGliaWxpdHkgc3FscHJlZml4IHNxbHByb21wdCBzcWx0
ZXJtaW5hdG9yIHN1ZmZpeCB0YWIgdGVybSB0ZXJtb3V0IHRpbWUgdGltaW5nIHRyaW1vdXQgdHJp
bXNwb29sIHR0aXRsZSB1bmRlcmxpbmUgdmVyaWZ5IHZlcnNpb24gd3JhcCIpLAogICAgIGtleXdv
cmRzOiAgIHNldCgiYWJvcnQgYWNjZXB0IGFjY2VzcyBhZGQgYWxsIGFsdGVyIGFuZCBhbnkgYXJy
YXkgYXJyYXlsZW4gYXMgYXNjIGFzc2VydCBhc3NpZ24gYXQgYXR0cmlidXRlcyBhdWRpdCBhdXRo
b3JpemF0aW9uIGF2ZyBiYXNlX3RhYmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9k
eSBib29sZWFuIGJ5IGNhc2UgY2FzdCBjaGFyIGNoYXJfYmFzZSBjaGVjayBjbG9zZSBjbHVzdGVy
IGNsdXN0ZXJzIGNvbGF1dGggY29sdW1uIGNvbW1lbnQgY29tbWl0IGNvbXByZXNzIGNvbm5lY3Qg
Y29ubmVjdGVkIGNvbnN0YW50IGNvbnN0cmFpbnQgY3Jhc2ggY3JlYXRlIGN1cnJlbnQgY3VycnZh
bCBjdXJzb3IgZGF0YV9iYXNlIGRhdGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYg
ZGVidWdvbiBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSBk
ZXNjIGRpZ2l0cyBkaXNwb3NlIGRpc3RpbmN0IGRvIGRyb3AgZWxzZSBlbHNlaWYgZWxzaWYgZW5h
YmxlIGVuZCBlbnRyeSBlc2NhcGUgZXhjZXB0aW9uIGV4Y2VwdGlvbl9pbml0IGV4Y2hhbmdlIGV4
Y2x1c2l2ZSBleGlzdHMgZXhpdCBleHRlcm5hbCBmYXN0IGZldGNoIGZpbGUgZm9yIGZvcmNlIGZv
cm0gZnJvbSBmdW5jdGlvbiBnZW5lcmljIGdvdG8gZ3JhbnQgZ3JvdXAgaGF2aW5nIGlkZW50aWZp
ZWQgaWYgaW1tZWRpYXRlIGluIGluY3JlbWVudCBpbmRleCBpbmRleGVzIGluZGljYXRvciBpbml0
aWFsIGluaXRyYW5zIGluc2VydCBpbnRlcmZhY2UgaW50ZXJzZWN0IGludG8gaXMga2V5IGxldmVs
IGxpYnJhcnkgbGlrZSBsaW1pdGVkIGxvY2FsIGxvY2sgbG9nIGxvZ2dpbmcgbG9uZyBsb29wIG1h
c3RlciBtYXhleHRlbnRzIG1heHRyYW5zIG1lbWJlciBtaW5leHRlbnRzIG1pbnVzIG1pc2xhYmVs
IG1vZGUgbW9kaWZ5IG11bHRpc2V0IG5ldyBuZXh0IG5vIG5vYXVkaXQgbm9jb21wcmVzcyBub2xv
Z2dpbmcgbm9wYXJhbGxlbCBub3Qgbm93YWl0IG51bWJlcl9iYXNlIG9iamVjdCBvZiBvZmYgb2Zm
bGluZSBvbiBvbmxpbmUgb25seSBvcGVuIG9wdGlvbiBvciBvcmRlciBvdXQgcGFja2FnZSBwYXJh
bGxlbCBwYXJ0aXRpb24gcGN0ZnJlZSBwY3RpbmNyZWFzZSBwY3R1c2VkIHBsc19pbnRlZ2VyIHBv
c2l0aXZlIHBvc2l0aXZlbiBwcmFnbWEgcHJpbWFyeSBwcmlvciBwcml2YXRlIHByaXZpbGVnZXMg
cHJvY2VkdXJlIHB1YmxpYyByYWlzZSByYW5nZSByYXcgcmVhZCByZWJ1aWxkIHJlY29yZCByZWYg
cmVmZXJlbmNlcyByZWZyZXNoIHJlbGVhc2UgcmVuYW1lIHJlcGxhY2UgcmVzb3VyY2UgcmVzdHJp
Y3QgcmV0dXJuIHJldHVybmluZyByZXR1cm5zIHJldmVyc2UgcmV2b2tlIHJvbGxiYWNrIHJvdyBy
b3dpZCByb3dsYWJlbCByb3dudW0gcm93cyBydW4gc2F2ZXBvaW50IHNjaGVtYSBzZWdtZW50IHNl
bGVjdCBzZXBhcmF0ZSBzZXNzaW9uIHNldCBzaGFyZSBzbmFwc2hvdCBzb21lIHNwYWNlIHNwbGl0
IHNxbCBzdGFydCBzdGF0ZW1lbnQgc3RvcmFnZSBzdWJ0eXBlIHN1Y2Nlc3NmdWwgc3lub255bSB0
YWJhdXRoIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhc2sgdGVybWluYXRlIHRoZW4gdG8gdHJp
Z2dlciB0cnVuY2F0ZSB0eXBlIHVuaW9uIHVuaXF1ZSB1bmxpbWl0ZWQgdW5yZWNvdmVyYWJsZSB1
bnVzYWJsZSB1cGRhdGUgdXNlIHVzaW5nIHZhbGlkYXRlIHZhbHVlIHZhbHVlcyB2YXJpYWJsZSB2
aWV3IHZpZXdzIHdoZW4gd2hlbmV2ZXIgd2hlcmUgd2hpbGUgd2l0aCB3b3JrIiksCi0gICAgYnVp
bHRpbjogICAgc2V0KCJhYnMgYWNvcyBhZGRfbW9udGhzIGFzY2lpIGFzaW4gYXRhbiBhdGFuMiBh
dmVyYWdlIGJmaWxlIGJmaWxlbmFtZSBiaWdzZXJpYWwgYml0IGJsb2IgY2VpbCBjaGFyYWN0ZXIg
Y2hhcnRvcm93aWQgY2hyIGNsb2IgY29uY2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgZGVjIGRl
Y29kZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCBlbXB0eSBlcnJvciBleHAgZmFs
c2UgZmxvYXQgZmxvb3IgZm91bmQgZ2xiIGdyZWF0ZXN0IGhleHRvcmF3IGluaXRjYXAgaW5zdHIg
aW5zdHJiIGludCBpbnRlZ2VyIGlzb3BlbiBsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBs
biBsb3dlciBscGFkIGx0cmltIGx1YiBtYWtlX3JlZiBtYXggbWluIG1sc2xhYmVsIG1vZCBtb250
aHNfYmV0d2VlbiBuYXR1cmFsIG5hdHVyYWxuIG5jaGFyIG5jbG9iIG5ld190aW1lIG5leHRfZGF5
IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9sZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRf
bmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIgbmxzX3NvcnQgbmxzX3VwcGVyIG5sc3NvcnQgbm9f
ZGF0YV9mb3VuZCBub3Rmb3VuZCBudWxsIG51bWJlciBudW1lcmljIG52YXJjaGFyMiBudmwgb3Ro
ZXJzIHBvd2VyIHJhd3RvaGV4IHJlYWwgcmVmdG9oZXggcm91bmQgcm93Y291bnQgcm93aWR0b2No
YXIgcm93dHlwZSBycGFkIHJ0cmltIHNlcmlhbCBzaWduIHNpZ250eXBlIHNpbiBzaW5oIHNtYWxs
aW50IHNvdW5kZXggc3FsY29kZSBzcWxlcnJtIHNxcnQgc3RkZGV2IHN0cmluZyBzdWJzdHIgc3Vi
c3RyYiBzdW0gc3lzZGF0ZSB0YW4gdGFuaCB0b19jaGFyIHRleHQgdG9fZGF0ZSB0b19sYWJlbCB0
b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xhdGUgdHJ1ZSB0cnVu
YyB1aWQgdW5sb2dnZWQgdXBwZXIgdXNlciB1c2VyZW52IHZhcmNoYXIgdmFyY2hhcjIgdmFyaWFu
Y2UgdmFyeWluZyB2c2l6ZSB4bWwiKSwKKyAgICBidWlsdGluOiAgICBzZXQoImFicyBhY29zIGFk
ZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgYmZpbGUgYmZpbGVuYW1lIGJp
Z3NlcmlhbCBiaXQgYmxvYiBjZWlsIGNoYXJhY3RlciBjaGFydG9yb3dpZCBjaHIgY2xvYiBjb25j
YXQgY29udmVydCBjb3MgY29zaCBjb3VudCBkZWMgZGVjb2RlIGRlcmVmIGR1YWwgZHVtcCBkdXBf
dmFsX29uX2luZGV4IGVtcHR5IGVycm9yIGV4cCBmYWxzZSBmbG9hdCBmbG9vciBmb3VuZCBnbGIg
Z3JlYXRlc3QgaGV4dG9yYXcgaW5pdGNhcCBpbnN0ciBpbnN0cmIgaW50IGludGVnZXIgaXNvcGVu
IGxhc3RfZGF5IGxlYXN0IGxlbmd0aCBsZW5ndGhiIGxuIGxvd2VyIGxwYWQgbHRyaW0gbHViIG1h
a2VfcmVmIG1heCBtaW4gbWxzbGFiZWwgbW9kIG1vbnRoc19iZXR3ZWVuIG5hdHVyYWwgbmF0dXJh
bG4gbmNoYXIgbmNsb2IgbmV3X3RpbWUgbmV4dF9kYXkgbmV4dHZhbCBubHNfY2hhcnNldF9kZWNs
X2xlbiBubHNfY2hhcnNldF9pZCBubHNfY2hhcnNldF9uYW1lIG5sc19pbml0Y2FwIG5sc19sb3dl
ciBubHNfc29ydCBubHNfdXBwZXIgbmxzc29ydCBub19kYXRhX2ZvdW5kIG5vdGZvdW5kIG51bGwg
bnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyIG52bCBvdGhlcnMgcG93ZXIgcmF3dG9oZXggcmVhbCBy
ZWZ0b2hleCByb3VuZCByb3djb3VudCByb3dpZHRvY2hhciByb3d0eXBlIHJwYWQgcnRyaW0gc2Vy
aWFsIHNpZ24gc2lnbnR5cGUgc2luIHNpbmggc21hbGxpbnQgc291bmRleCBzcWxjb2RlIHNxbGVy
cm0gc3FydCBzdGRkZXYgc3RyaW5nIHN1YnN0ciBzdWJzdHJiIHN1bSBzeXNkYXRlIHRhbiB0YW5o
IHRvX2NoYXIgdGV4dCB0b19kYXRlIHRvX2xhYmVsIHRvX211bHRpX2J5dGUgdG9fbnVtYmVyIHRv
X3NpbmdsZV9ieXRlIHRyYW5zbGF0ZSB0cnVlIHRydW5jIHVpZCB1bmxvZ2dlZCB1cHBlciB1c2Vy
IHVzZXJlbnYgdmFyY2hhciB2YXJjaGFyMiB2YXJpYW5jZSB2YXJ5aW5nIHZzaXplIHhtbCIpLAog
ICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyorXC0lPD4hPX5dLywKICAgICBkYXRlU1FMOiAgICBzZXQo
ImRhdGUgdGltZSB0aW1lc3RhbXAiKSwKICAgICBzdXBwb3J0OiAgICBzZXQoImRvdWJsZVF1b3Rl
IG5DaGFyQ2FzdCB6ZXJvbGVzc0Zsb2F0IGJpbmFyeU51bWJlciBoZXhOdW1iZXIiKQpAQCAtMzU3
LDYgKzM1NywyOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgZGF0ZVNRTDogc2V0KCJkYXRlIHRpbWVzdGFtcCIpLAog
ICAgIHN1cHBvcnQ6IHNldCgiT0RCQ2RvdFRhYmxlIGRvdWJsZVF1b3RlIGJpbmFyeU51bWJlciBo
ZXhOdW1iZXIiKQogICB9KTsKKworICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1wZ3Nx
bCIsIHsKKyAgICBuYW1lOiAic3FsIiwKKyAgICBjbGllbnQ6IHNldCgic291cmNlIiksCisgICAg
Ly8gaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzkuNS9zdGF0aWMvc3FsLWtleXdvcmRz
LWFwcGVuZGl4Lmh0bWwKKyAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImEgYWJvcnQg
YWJzIGFic2VudCBhYnNvbHV0ZSBhY2Nlc3MgYWNjb3JkaW5nIGFjdGlvbiBhZGEgYWRkIGFkbWlu
IGFmdGVyIGFnZ3JlZ2F0ZSBhbGwgYWxsb2NhdGUgYWxzbyBhbHdheXMgYW5hbHlzZSBhbmFseXpl
IGFueSBhcmUgYXJyYXkgYXJyYXlfYWdnIGFycmF5X21heF9jYXJkaW5hbGl0eSBhc2Vuc2l0aXZl
IGFzc2VydGlvbiBhc3NpZ25tZW50IGFzeW1tZXRyaWMgYXQgYXRvbWljIGF0dHJpYnV0ZSBhdHRy
aWJ1dGVzIGF1dGhvcml6YXRpb24gYXZnIGJhY2t3YXJkIGJhc2U2NCBiZWZvcmUgYmVnaW4gYmVn
aW5fZnJhbWUgYmVnaW5fcGFydGl0aW9uIGJlcm5vdWxsaSBiaW5hcnkgYml0X2xlbmd0aCBibG9i
IGJsb2NrZWQgYm9tIGJvdGggYnJlYWR0aCBjIGNhY2hlIGNhbGwgY2FsbGVkIGNhcmRpbmFsaXR5
IGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXN0IGNhdGFsb2cgY2F0YWxvZ19uYW1lIGNlaWwgY2Vp
bGluZyBjaGFpbiBjaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVycyBjaGFyYWN0ZXJfbGVuZ3RoIGNo
YXJhY3Rlcl9zZXRfY2F0YWxvZyBjaGFyYWN0ZXJfc2V0X25hbWUgY2hhcmFjdGVyX3NldF9zY2hl
bWEgY2hhcl9sZW5ndGggY2hlY2sgY2hlY2twb2ludCBjbGFzcyBjbGFzc19vcmlnaW4gY2xvYiBj
bG9zZSBjbHVzdGVyIGNvYWxlc2NlIGNvYm9sIGNvbGxhdGUgY29sbGF0aW9uIGNvbGxhdGlvbl9j
YXRhbG9nIGNvbGxhdGlvbl9uYW1lIGNvbGxhdGlvbl9zY2hlbWEgY29sbGVjdCBjb2x1bW4gY29s
dW1ucyBjb2x1bW5fbmFtZSBjb21tYW5kX2Z1bmN0aW9uIGNvbW1hbmRfZnVuY3Rpb25fY29kZSBj
b21tZW50IGNvbW1lbnRzIGNvbW1pdCBjb21taXR0ZWQgY29uY3VycmVudGx5IGNvbmRpdGlvbiBj
b25kaXRpb25fbnVtYmVyIGNvbmZpZ3VyYXRpb24gY29uZmxpY3QgY29ubmVjdCBjb25uZWN0aW9u
IGNvbm5lY3Rpb25fbmFtZSBjb25zdHJhaW50IGNvbnN0cmFpbnRzIGNvbnN0cmFpbnRfY2F0YWxv
ZyBjb25zdHJhaW50X25hbWUgY29uc3RyYWludF9zY2hlbWEgY29uc3RydWN0b3IgY29udGFpbnMg
Y29udGVudCBjb250aW51ZSBjb250cm9sIGNvbnZlcnNpb24gY29udmVydCBjb3B5IGNvcnIgY29y
cmVzcG9uZGluZyBjb3N0IGNvdmFyX3BvcCBjb3Zhcl9zYW1wIGNyb3NzIGNzdiBjdWJlIGN1bWVf
ZGlzdCBjdXJyZW50IGN1cnJlbnRfY2F0YWxvZyBjdXJyZW50X2RhdGUgY3VycmVudF9kZWZhdWx0
X3RyYW5zZm9ybV9ncm91cCBjdXJyZW50X3BhdGggY3VycmVudF9yb2xlIGN1cnJlbnRfcm93IGN1
cnJlbnRfc2NoZW1hIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3RyYW5z
Zm9ybV9ncm91cF9mb3JfdHlwZSBjdXJyZW50X3VzZXIgY3Vyc29yIGN1cnNvcl9uYW1lIGN5Y2xl
IGRhdGEgZGF0YWJhc2UgZGF0YWxpbmsgZGF0ZXRpbWVfaW50ZXJ2YWxfY29kZSBkYXRldGltZV9p
bnRlcnZhbF9wcmVjaXNpb24gZGF5IGRiIGRlYWxsb2NhdGUgZGVjIGRlY2xhcmUgZGVmYXVsdCBk
ZWZhdWx0cyBkZWZlcnJhYmxlIGRlZmVycmVkIGRlZmluZWQgZGVmaW5lciBkZWdyZWUgZGVsaW1p
dGVyIGRlbGltaXRlcnMgZGVuc2VfcmFuayBkZXB0aCBkZXJlZiBkZXJpdmVkIGRlc2NyaWJlIGRl
c2NyaXB0b3IgZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljcyBkaWN0aW9uYXJ5IGRpc2FibGUgZGlz
Y2FyZCBkaXNjb25uZWN0IGRpc3BhdGNoIGRsbmV3Y29weSBkbHByZXZpb3VzY29weSBkbHVybGNv
bXBsZXRlIGRsdXJsY29tcGxldGVvbmx5IGRsdXJsY29tcGxldGV3cml0ZSBkbHVybHBhdGggZGx1
cmxwYXRob25seSBkbHVybHBhdGh3cml0ZSBkbHVybHNjaGVtZSBkbHVybHNlcnZlciBkbHZhbHVl
IGRvIGRvY3VtZW50IGRvbWFpbiBkeW5hbWljIGR5bmFtaWNfZnVuY3Rpb24gZHluYW1pY19mdW5j
dGlvbl9jb2RlIGVhY2ggZWxlbWVudCBlbHNlIGVtcHR5IGVuYWJsZSBlbmNvZGluZyBlbmNyeXB0
ZWQgZW5kIGVuZC1leGVjIGVuZF9mcmFtZSBlbmRfcGFydGl0aW9uIGVuZm9yY2VkIGVudW0gZXF1
YWxzIGVzY2FwZSBldmVudCBldmVyeSBleGNlcHQgZXhjZXB0aW9uIGV4Y2x1ZGUgZXhjbHVkaW5n
IGV4Y2x1c2l2ZSBleGVjIGV4ZWN1dGUgZXhpc3RzIGV4cCBleHBsYWluIGV4cHJlc3Npb24gZXh0
ZW5zaW9uIGV4dGVybmFsIGV4dHJhY3QgZmFsc2UgZmFtaWx5IGZldGNoIGZpbGUgZmlsdGVyIGZp
bmFsIGZpcnN0IGZpcnN0X3ZhbHVlIGZsYWcgZmxvYXQgZmxvb3IgZm9sbG93aW5nIGZvciBmb3Jj
ZSBmb3JlaWduIGZvcnRyYW4gZm9yd2FyZCBmb3VuZCBmcmFtZV9yb3cgZnJlZSBmcmVlemUgZnMg
ZnVsbCBmdW5jdGlvbiBmdW5jdGlvbnMgZnVzaW9uIGcgZ2VuZXJhbCBnZW5lcmF0ZWQgZ2V0IGds
b2JhbCBnbyBnb3RvIGdyYW50IGdyYW50ZWQgZ3JlYXRlc3QgZ3JvdXBpbmcgZ3JvdXBzIGhhbmRs
ZXIgaGVhZGVyIGhleCBoaWVyYXJjaHkgaG9sZCBob3VyIGlkIGlkZW50aXR5IGlmIGlnbm9yZSBp
bGlrZSBpbW1lZGlhdGUgaW1tZWRpYXRlbHkgaW1tdXRhYmxlIGltcGxlbWVudGF0aW9uIGltcGxp
Y2l0IGltcG9ydCBpbmNsdWRpbmcgaW5jcmVtZW50IGluZGVudCBpbmRleCBpbmRleGVzIGluZGlj
YXRvciBpbmhlcml0IGluaGVyaXRzIGluaXRpYWxseSBpbmxpbmUgaW5uZXIgaW5vdXQgaW5wdXQg
aW5zZW5zaXRpdmUgaW5zdGFuY2UgaW5zdGFudGlhYmxlIGluc3RlYWQgaW50ZWdyaXR5IGludGVy
c2VjdCBpbnRlcnNlY3Rpb24gaW52b2tlciBpc251bGwgaXNvbGF0aW9uIGsga2V5IGtleV9tZW1i
ZXIga2V5X3R5cGUgbGFiZWwgbGFnIGxhbmd1YWdlIGxhcmdlIGxhc3QgbGFzdF92YWx1ZSBsYXRl
cmFsIGxlYWQgbGVhZGluZyBsZWFrcHJvb2YgbGVhc3QgbGVmdCBsZW5ndGggbGV2ZWwgbGlicmFy
eSBsaWtlX3JlZ2V4IGxpbmsgbGlzdGVuIGxuIGxvYWQgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGlt
ZXN0YW1wIGxvY2F0aW9uIGxvY2F0b3IgbG9jayBsb2NrZWQgbG9nZ2VkIGxvd2VyIG0gbWFwIG1h
cHBpbmcgbWF0Y2ggbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWF4IG1heHZhbHVlIG1heF9jYXJkaW5h
bGl0eSBtZW1iZXIgbWVyZ2UgbWVzc2FnZV9sZW5ndGggbWVzc2FnZV9vY3RldF9sZW5ndGggbWVz
c2FnZV90ZXh0IG1ldGhvZCBtaW4gbWludXRlIG1pbnZhbHVlIG1vZCBtb2RlIG1vZGlmaWVzIG1v
ZHVsZSBtb250aCBtb3JlIG1vdmUgbXVsdGlzZXQgbXVtcHMgbmFtZSBuYW1lcyBuYW1lc3BhY2Ug
bmF0aW9uYWwgbmF0dXJhbCBuY2hhciBuY2xvYiBuZXN0aW5nIG5ldyBuZXh0IG5mYyBuZmQgbmZr
YyBuZmtkIG5pbCBubyBub25lIG5vcm1hbGl6ZSBub3JtYWxpemVkIG5vdGhpbmcgbm90aWZ5IG5v
dG51bGwgbm93YWl0IG50aF92YWx1ZSBudGlsZSBudWxsIG51bGxhYmxlIG51bGxpZiBudWxscyBu
dW1iZXIgb2JqZWN0IG9jY3VycmVuY2VzX3JlZ2V4IG9jdGV0cyBvY3RldF9sZW5ndGggb2Ygb2Zm
IG9mZnNldCBvaWRzIG9sZCBvbmx5IG9wZW4gb3BlcmF0b3Igb3B0aW9uIG9wdGlvbnMgb3JkZXJp
bmcgb3JkaW5hbGl0eSBvdGhlcnMgb3V0IG91dGVyIG91dHB1dCBvdmVyIG92ZXJsYXBzIG92ZXJs
YXkgb3ZlcnJpZGluZyBvd25lZCBvd25lciBwIHBhZCBwYXJhbWV0ZXIgcGFyYW1ldGVyX21vZGUg
cGFyYW1ldGVyX25hbWUgcGFyYW1ldGVyX29yZGluYWxfcG9zaXRpb24gcGFyYW1ldGVyX3NwZWNp
ZmljX2NhdGFsb2cgcGFyYW1ldGVyX3NwZWNpZmljX25hbWUgcGFyYW1ldGVyX3NwZWNpZmljX3Nj
aGVtYSBwYXJzZXIgcGFydGlhbCBwYXJ0aXRpb24gcGFzY2FsIHBhc3NpbmcgcGFzc3Rocm91Z2gg
cGFzc3dvcmQgcGVyY2VudCBwZXJjZW50aWxlX2NvbnQgcGVyY2VudGlsZV9kaXNjIHBlcmNlbnRf
cmFuayBwZXJpb2QgcGVybWlzc2lvbiBwbGFjaW5nIHBsYW5zIHBsaSBwb2xpY3kgcG9ydGlvbiBw
b3NpdGlvbiBwb3NpdGlvbl9yZWdleCBwb3dlciBwcmVjZWRlcyBwcmVjZWRpbmcgcHJlcGFyZSBw
cmVwYXJlZCBwcmVzZXJ2ZSBwcmltYXJ5IHByaW9yIHByaXZpbGVnZXMgcHJvY2VkdXJhbCBwcm9j
ZWR1cmUgcHJvZ3JhbSBwdWJsaWMgcXVvdGUgcmFuZ2UgcmFuayByZWFkIHJlYWRzIHJlYXNzaWdu
IHJlY2hlY2sgcmVjb3ZlcnkgcmVjdXJzaXZlIHJlZiByZWZlcmVuY2VzIHJlZmVyZW5jaW5nIHJl
ZnJlc2ggcmVncl9hdmd4IHJlZ3JfYXZneSByZWdyX2NvdW50IHJlZ3JfaW50ZXJjZXB0IHJlZ3Jf
cjIgcmVncl9zbG9wZSByZWdyX3N4eCByZWdyX3N4eSByZWdyX3N5eSByZWluZGV4IHJlbGF0aXZl
IHJlbGVhc2UgcmVuYW1lIHJlcGVhdGFibGUgcmVwbGFjZSByZXBsaWNhIHJlcXVpcmluZyByZXNl
dCByZXNwZWN0IHJlc3RhcnQgcmVzdG9yZSByZXN0cmljdCByZXN1bHQgcmV0dXJuIHJldHVybmVk
X2NhcmRpbmFsaXR5IHJldHVybmVkX2xlbmd0aCByZXR1cm5lZF9vY3RldF9sZW5ndGggcmV0dXJu
ZWRfc3Fsc3RhdGUgcmV0dXJuaW5nIHJldHVybnMgcmV2b2tlIHJpZ2h0IHJvbGUgcm9sbGJhY2sg
cm9sbHVwIHJvdXRpbmUgcm91dGluZV9jYXRhbG9nIHJvdXRpbmVfbmFtZSByb3V0aW5lX3NjaGVt
YSByb3cgcm93cyByb3dfY291bnQgcm93X251bWJlciBydWxlIHNhdmVwb2ludCBzY2FsZSBzY2hl
bWEgc2NoZW1hX25hbWUgc2NvcGUgc2NvcGVfY2F0YWxvZyBzY29wZV9uYW1lIHNjb3BlX3NjaGVt
YSBzY3JvbGwgc2VhcmNoIHNlY29uZCBzZWN0aW9uIHNlY3VyaXR5IHNlbGVjdGl2ZSBzZWxmIHNl
bnNpdGl2ZSBzZXF1ZW5jZSBzZXF1ZW5jZXMgc2VyaWFsaXphYmxlIHNlcnZlciBzZXJ2ZXJfbmFt
ZSBzZXNzaW9uIHNlc3Npb25fdXNlciBzZXRvZiBzZXRzIHNoYXJlIHNob3cgc2ltaWxhciBzaW1w
bGUgc2l6ZSBza2lwIHNuYXBzaG90IHNvbWUgc291cmNlIHNwYWNlIHNwZWNpZmljIHNwZWNpZmlj
dHlwZSBzcGVjaWZpY19uYW1lIHNxbCBzcWxjb2RlIHNxbGVycm9yIHNxbGV4Y2VwdGlvbiBzcWxz
dGF0ZSBzcWx3YXJuaW5nIHNxcnQgc3RhYmxlIHN0YW5kYWxvbmUgc3RhcnQgc3RhdGUgc3RhdGVt
ZW50IHN0YXRpYyBzdGF0aXN0aWNzIHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkaW4gc3Rkb3V0
IHN0b3JhZ2Ugc3RyaWN0IHN0cmlwIHN0cnVjdHVyZSBzdHlsZSBzdWJjbGFzc19vcmlnaW4gc3Vi
bXVsdGlzZXQgc3Vic3RyaW5nIHN1YnN0cmluZ19yZWdleCBzdWNjZWVkcyBzdW0gc3ltbWV0cmlj
IHN5c2lkIHN5c3RlbSBzeXN0ZW1fdGltZSBzeXN0ZW1fdXNlciB0IHRhYmxlcyB0YWJsZXNhbXBs
ZSB0YWJsZXNwYWNlIHRhYmxlX25hbWUgdGVtcCB0ZW1wbGF0ZSB0ZW1wb3JhcnkgdGhlbiB0aWVz
IHRpbWV6b25lX2hvdXIgdGltZXpvbmVfbWludXRlIHRvIHRva2VuIHRvcF9sZXZlbF9jb3VudCB0
cmFpbGluZyB0cmFuc2FjdGlvbiB0cmFuc2FjdGlvbnNfY29tbWl0dGVkIHRyYW5zYWN0aW9uc19y
b2xsZWRfYmFjayB0cmFuc2FjdGlvbl9hY3RpdmUgdHJhbnNmb3JtIHRyYW5zZm9ybXMgdHJhbnNs
YXRlIHRyYW5zbGF0ZV9yZWdleCB0cmFuc2xhdGlvbiB0cmVhdCB0cmlnZ2VyIHRyaWdnZXJfY2F0
YWxvZyB0cmlnZ2VyX25hbWUgdHJpZ2dlcl9zY2hlbWEgdHJpbSB0cmltX2FycmF5IHRydWUgdHJ1
bmNhdGUgdHJ1c3RlZCB0eXBlIHR5cGVzIHVlc2NhcGUgdW5ib3VuZGVkIHVuY29tbWl0dGVkIHVu
ZGVyIHVuZW5jcnlwdGVkIHVuaXF1ZSB1bmtub3duIHVubGluayB1bmxpc3RlbiB1bmxvZ2dlZCB1
bm5hbWVkIHVubmVzdCB1bnRpbCB1bnR5cGVkIHVwcGVyIHVyaSB1c2FnZSB1c2VyIHVzZXJfZGVm
aW5lZF90eXBlX2NhdGFsb2cgdXNlcl9kZWZpbmVkX3R5cGVfY29kZSB1c2VyX2RlZmluZWRfdHlw
ZV9uYW1lIHVzZXJfZGVmaW5lZF90eXBlX3NjaGVtYSB1c2luZyB2YWN1dW0gdmFsaWQgdmFsaWRh
dGUgdmFsaWRhdG9yIHZhbHVlIHZhbHVlX29mIHZhcmJpbmFyeSB2YXJpYWRpYyB2YXJfcG9wIHZh
cl9zYW1wIHZlcmJvc2UgdmVyc2lvbiB2ZXJzaW9uaW5nIHZpZXcgdmlld3Mgdm9sYXRpbGUgd2hl
biB3aGVuZXZlciB3aGl0ZXNwYWNlIHdpZHRoX2J1Y2tldCB3aW5kb3cgd2l0aGluIHdvcmsgd3Jh
cHBlciB3cml0ZSB4bWxhZ2cgeG1sYXR0cmlidXRlcyB4bWxiaW5hcnkgeG1sY2FzdCB4bWxjb21t
ZW50IHhtbGNvbmNhdCB4bWxkZWNsYXJhdGlvbiB4bWxkb2N1bWVudCB4bWxlbGVtZW50IHhtbGV4
aXN0cyB4bWxmb3Jlc3QgeG1saXRlcmF0ZSB4bWxuYW1lc3BhY2VzIHhtbHBhcnNlIHhtbHBpIHht
bHF1ZXJ5IHhtbHJvb3QgeG1sc2NoZW1hIHhtbHNlcmlhbGl6ZSB4bWx0YWJsZSB4bWx0ZXh0IHht
bHZhbGlkYXRlIHllYXIgeWVzIGxvb3AgcmVwZWF0IiksCisgICAgLy8gaHR0cDovL3d3dy5wb3N0
Z3Jlc3FsLm9yZy9kb2NzLzkuNS9zdGF0aWMvZGF0YXR5cGUuaHRtbAorICAgIGJ1aWx0aW46IHNl
dCgiYmlnaW50IGludDggYmlnc2VyaWFsIHNlcmlhbDggYml0IHZhcnlpbmcgdmFyYml0IGJvb2xl
YW4gYm9vbCBib3ggYnl0ZWEgY2hhcmFjdGVyIGNoYXIgdmFyY2hhciBjaWRyIGNpcmNsZSBkYXRl
IGRvdWJsZSBwcmVjaXNpb24gZmxvYXQ4IGluZXQgaW50ZWdlciBpbnQgaW50NCBpbnRlcnZhbCBq
c29uIGpzb25iIGxpbmUgbHNlZyBtYWNhZGRyIG1vbmV5IG51bWVyaWMgZGVjaW1hbCBwYXRoIHBn
X2xzbiBwb2ludCBwb2x5Z29uIHJlYWwgZmxvYXQ0IHNtYWxsaW50IGludDIgc21hbGxzZXJpYWwg
c2VyaWFsMiBzZXJpYWwgc2VyaWFsNCB0ZXh0IHRpbWUgd2l0aG91dCB6b25lIHdpdGggdGltZXR6
IHRpbWVzdGFtcCB0aW1lc3RhbXB0eiB0c3F1ZXJ5IHRzdmVjdG9yIHR4aWRfc25hcHNob3QgdXVp
ZCB4bWwiKSwKKyAgICBhdG9tczogc2V0KCJmYWxzZSB0cnVlIG51bGwgdW5rbm93biIpLAorICAg
IG9wZXJhdG9yQ2hhcnM6IC9eWyorXC0lPD4hPSZ8XlwvI0A/fl0vLAorICAgIGRhdGVTUUw6IHNl
dCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpLAorICAgIHN1cHBvcnQ6IHNldCgiT0RCQ2RvdFRhYmxl
IGRlY2ltYWxsZXNzRmxvYXQgemVyb2xlc3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyIG5D
aGFyQ2FzdCBjaGFyc2V0Q2FzdCIpCisgIH0pOworCisgIC8vIEdvb2dsZSdzIFNRTC1saWtlIHF1
ZXJ5IGxhbmd1YWdlLCBHUUwKKyAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ3FsIiwg
eworICAgIG5hbWU6ICJzcWwiLAorICAgIGtleXdvcmRzOiBzZXQoImFuY2VzdG9yIGFuZCBhc2Mg
YnkgY29udGFpbnMgZGVzYyBkZXNjZW5kYW50IGRpc3RpbmN0IGZyb20gZ3JvdXAgaGFzIGluIGlz
IGxpbWl0IG9mZnNldCBvbiBvcmRlciBzZWxlY3Qgc3VwZXJzZXQgd2hlcmUiKSwKKyAgICBhdG9t
czogc2V0KCJmYWxzZSB0cnVlIiksCisgICAgYnVpbHRpbjogc2V0KCJibG9iIGRhdGV0aW1lIGZp
cnN0IGtleSBfX2tleV9fIHN0cmluZyBpbnRlZ2VyIGRvdWJsZSBib29sZWFuIG51bGwiKSwKKyAg
ICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT1dLworICB9KTsKIH0oKSk7CiAKIH0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9zdWJsaW1lLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9zdWJsaW1lLmpzCmluZGV4IGRlMWRkNzIuLmM1ZDI5MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3Ivc3VibGltZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3N1YmxpbWUuanMKQEAgLTE2NiwxNyArMTY2LDIzIEBA
CiAKICAgdmFyIG1pcnJvciA9ICIoKXt9W10iOwogICBmdW5jdGlvbiBzZWxlY3RCZXR3ZWVuQnJh
Y2tldHMoY20pIHsKLSAgICB2YXIgcG9zID0gY20uZ2V0Q3Vyc29yKCksIG9wZW5pbmcgPSBjbS5z
Y2FuRm9yQnJhY2tldChwb3MsIC0xKTsKLSAgICBpZiAoIW9wZW5pbmcpIHJldHVybjsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICB2YXIgY2xvc2luZyA9IGNtLnNjYW5Gb3JCcmFja2V0KHBvcywgMSk7
Ci0gICAgICBpZiAoIWNsb3NpbmcpIHJldHVybjsKLSAgICAgIGlmIChjbG9zaW5nLmNoID09IG1p
cnJvci5jaGFyQXQobWlycm9yLmluZGV4T2Yob3BlbmluZy5jaCkgKyAxKSkgewotICAgICAgICBj
bS5zZXRTZWxlY3Rpb24oUG9zKG9wZW5pbmcucG9zLmxpbmUsIG9wZW5pbmcucG9zLmNoICsgMSks
IGNsb3NpbmcucG9zLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIHZhciByYW5n
ZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCBuZXdSYW5nZXMgPSBbXQorICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNb
aV0sIHBvcyA9IHJhbmdlLmhlYWQsIG9wZW5pbmcgPSBjbS5zY2FuRm9yQnJhY2tldChwb3MsIC0x
KTsKKyAgICAgIGlmICghb3BlbmluZykgcmV0dXJuIGZhbHNlOworICAgICAgZm9yICg7Oykgewor
ICAgICAgICB2YXIgY2xvc2luZyA9IGNtLnNjYW5Gb3JCcmFja2V0KHBvcywgMSk7CisgICAgICAg
IGlmICghY2xvc2luZykgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY2xvc2luZy5jaCA9PSBt
aXJyb3IuY2hhckF0KG1pcnJvci5pbmRleE9mKG9wZW5pbmcuY2gpICsgMSkpIHsKKyAgICAgICAg
ICBuZXdSYW5nZXMucHVzaCh7YW5jaG9yOiBQb3Mob3BlbmluZy5wb3MubGluZSwgb3BlbmluZy5w
b3MuY2ggKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZDogY2xvc2luZy5wb3N9
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwb3MgPSBQb3MoY2xvc2lu
Zy5wb3MubGluZSwgY2xvc2luZy5wb3MuY2ggKyAxKTsKICAgICAgIH0KLSAgICAgIHBvcyA9IFBv
cyhjbG9zaW5nLnBvcy5saW5lLCBjbG9zaW5nLnBvcy5jaCArIDEpOwogICAgIH0KKyAgICBjbS5z
ZXRTZWxlY3Rpb25zKG5ld1Jhbmdlcyk7CisgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICBjbWRz
W21hcFsiU2hpZnQtIiArIGN0cmwgKyAiU3BhY2UiXSA9ICJzZWxlY3RTY29wZSJdID0gZnVuY3Rp
b24oY20pIHsKQEAgLTI5NCw3ICszMDAsNyBAQAogICAgIH0pOwogICB9OwogCi0gIG1hcFtjdHJs
ICsgIlQiXSA9ICJ0cmFuc3Bvc2VDaGFycyI7CisgIGlmICghbWFjKSBtYXBbY3RybCArICJUIl0g
PSAidHJhbnNwb3NlQ2hhcnMiOwogCiAgIGZ1bmN0aW9uIHNvcnRMaW5lcyhjbSwgY2FzZVNlbnNp
dGl2ZSkgewogICAgIGlmIChjbS5pc1JlYWRPbmx5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3MK
QEAgLTU3MCw3ICs1NzYsNyBAQAogCiAgIG1hcFsiU2hpZnQtIiArIGN0cmwgKyAiWyJdID0gImZv
bGQiOwogICBtYXBbIlNoaWZ0LSIgKyBjdHJsICsgIl0iXSA9ICJ1bmZvbGQiOwotICBtYXBbY0sg
KyBjdHJsICsgIjAiXSA9IG1hcFtjSyArIGN0cmwgKyAiaiJdID0gInVuZm9sZEFsbCI7CisgIG1h
cFtjSyArIGN0cmwgKyAiMCJdID0gbWFwW2NLICsgY3RybCArICJKIl0gPSAidW5mb2xkQWxsIjsK
IAogICBtYXBbY3RybCArICJJIl0gPSAiZmluZEluY3JlbWVudGFsIjsKICAgbWFwWyJTaGlmdC0i
ICsgY3RybCArICJJIl0gPSAiZmluZEluY3JlbWVudGFsUmV2ZXJzZSI7CkBAIC01NzksNCArNTg1
LDQgQEAKICAgbWFwWyJTaGlmdC1GMyJdID0gImZpbmRQcmV2IjsKIAogICBDb2RlTWlycm9yLm5v
cm1hbGl6ZUtleU1hcChtYXApOwotfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL3htbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCmluZGV4IDVhZDIxNzIuLmY5ODdhM2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IveG1sLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCkBAIC0xMSw1NCArMTEsNTYgQEAKIH0pKGZ1bmN0aW9u
KENvZGVNaXJyb3IpIHsKICJ1c2Ugc3RyaWN0IjsKIAotQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4
bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewotICB2YXIgaW5kZW50VW5pdCA9
IGNvbmZpZy5pbmRlbnRVbml0OwotICB2YXIgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yID0gcGFy
c2VyQ29uZmlnLm11bHRpbGluZVRhZ0luZGVudEZhY3RvciB8fCAxOwotICB2YXIgbXVsdGlsaW5l
VGFnSW5kZW50UGFzdFRhZyA9IHBhcnNlckNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFn
OwotICBpZiAobXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZyA9PSBudWxsKSBtdWx0aWxpbmVUYWdJ
bmRlbnRQYXN0VGFnID0gdHJ1ZTsKK3ZhciBodG1sQ29uZmlnID0geworICBhdXRvU2VsZkNsb3Nl
cnM6IHsnYXJlYSc6IHRydWUsICdiYXNlJzogdHJ1ZSwgJ2JyJzogdHJ1ZSwgJ2NvbCc6IHRydWUs
ICdjb21tYW5kJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VtYmVkJzogdHJ1ZSwgJ2Zy
YW1lJzogdHJ1ZSwgJ2hyJzogdHJ1ZSwgJ2ltZyc6IHRydWUsICdpbnB1dCc6IHRydWUsCisgICAg
ICAgICAgICAgICAgICAgICdrZXlnZW4nOiB0cnVlLCAnbGluayc6IHRydWUsICdtZXRhJzogdHJ1
ZSwgJ3BhcmFtJzogdHJ1ZSwgJ3NvdXJjZSc6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICd0
cmFjayc6IHRydWUsICd3YnInOiB0cnVlLCAnbWVudWl0ZW0nOiB0cnVlfSwKKyAgaW1wbGljaXRs
eUNsb3NlZDogeydkZCc6IHRydWUsICdsaSc6IHRydWUsICdvcHRncm91cCc6IHRydWUsICdvcHRp
b24nOiB0cnVlLCAncCc6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAncnAnOiB0cnVlLCAn
cnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAndGQnOiB0cnVlLCAndGZvb3QnOiB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgJ3RoJzogdHJ1ZSwgJ3RyJzogdHJ1ZX0sCisgIGNvbnRleHRHcmFi
YmVyczogeworICAgICdkZCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSwKKyAgICAnZHQnOiB7
J2RkJzogdHJ1ZSwgJ2R0JzogdHJ1ZX0sCisgICAgJ2xpJzogeydsaSc6IHRydWV9LAorICAgICdv
cHRpb24nOiB7J29wdGlvbic6IHRydWUsICdvcHRncm91cCc6IHRydWV9LAorICAgICdvcHRncm91
cCc6IHsnb3B0Z3JvdXAnOiB0cnVlfSwKKyAgICAncCc6IHsnYWRkcmVzcyc6IHRydWUsICdhcnRp
Y2xlJzogdHJ1ZSwgJ2FzaWRlJzogdHJ1ZSwgJ2Jsb2NrcXVvdGUnOiB0cnVlLCAnZGlyJzogdHJ1
ZSwKKyAgICAgICAgICAnZGl2JzogdHJ1ZSwgJ2RsJzogdHJ1ZSwgJ2ZpZWxkc2V0JzogdHJ1ZSwg
J2Zvb3Rlcic6IHRydWUsICdmb3JtJzogdHJ1ZSwKKyAgICAgICAgICAnaDEnOiB0cnVlLCAnaDIn
OiB0cnVlLCAnaDMnOiB0cnVlLCAnaDQnOiB0cnVlLCAnaDUnOiB0cnVlLCAnaDYnOiB0cnVlLAor
ICAgICAgICAgICdoZWFkZXInOiB0cnVlLCAnaGdyb3VwJzogdHJ1ZSwgJ2hyJzogdHJ1ZSwgJ21l
bnUnOiB0cnVlLCAnbmF2JzogdHJ1ZSwgJ29sJzogdHJ1ZSwKKyAgICAgICAgICAncCc6IHRydWUs
ICdwcmUnOiB0cnVlLCAnc2VjdGlvbic6IHRydWUsICd0YWJsZSc6IHRydWUsICd1bCc6IHRydWV9
LAorICAgICdycCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSwKKyAgICAncnQnOiB7J3JwJzog
dHJ1ZSwgJ3J0JzogdHJ1ZX0sCisgICAgJ3Rib2R5Jzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6
IHRydWV9LAorICAgICd0ZCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSwKKyAgICAndGZvb3Qn
OiB7J3Rib2R5JzogdHJ1ZX0sCisgICAgJ3RoJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LAor
ICAgICd0aGVhZCc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSwKKyAgICAndHInOiB7
J3RyJzogdHJ1ZX0KKyAgfSwKKyAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCisgIGFsbG93
VW5xdW90ZWQ6IHRydWUsCisgIGFsbG93TWlzc2luZzogdHJ1ZSwKKyAgY2FzZUZvbGQ6IHRydWUK
K30KIAotICB2YXIgS2x1ZGdlcyA9IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/IHsKLSAgICBhdXRv
U2VsZkNsb3NlcnM6IHsnYXJlYSc6IHRydWUsICdiYXNlJzogdHJ1ZSwgJ2JyJzogdHJ1ZSwgJ2Nv
bCc6IHRydWUsICdjb21tYW5kJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAnZW1iZWQn
OiB0cnVlLCAnZnJhbWUnOiB0cnVlLCAnaHInOiB0cnVlLCAnaW1nJzogdHJ1ZSwgJ2lucHV0Jzog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAna2V5Z2VuJzogdHJ1ZSwgJ2xpbmsnOiB0cnVl
LCAnbWV0YSc6IHRydWUsICdwYXJhbSc6IHRydWUsICdzb3VyY2UnOiB0cnVlLAotICAgICAgICAg
ICAgICAgICAgICAgICd0cmFjayc6IHRydWUsICd3YnInOiB0cnVlLCAnbWVudWl0ZW0nOiB0cnVl
fSwKLSAgICBpbXBsaWNpdGx5Q2xvc2VkOiB7J2RkJzogdHJ1ZSwgJ2xpJzogdHJ1ZSwgJ29wdGdy
b3VwJzogdHJ1ZSwgJ29wdGlvbic6IHRydWUsICdwJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgJ3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZSwgJ3Rib2R5JzogdHJ1ZSwgJ3RkJzogdHJ1ZSwg
J3Rmb290JzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ3RoJzogdHJ1ZSwgJ3RyJzog
dHJ1ZX0sCi0gICAgY29udGV4dEdyYWJiZXJzOiB7Ci0gICAgICAnZGQnOiB7J2RkJzogdHJ1ZSwg
J2R0JzogdHJ1ZX0sCi0gICAgICAnZHQnOiB7J2RkJzogdHJ1ZSwgJ2R0JzogdHJ1ZX0sCi0gICAg
ICAnbGknOiB7J2xpJzogdHJ1ZX0sCi0gICAgICAnb3B0aW9uJzogeydvcHRpb24nOiB0cnVlLCAn
b3B0Z3JvdXAnOiB0cnVlfSwKLSAgICAgICdvcHRncm91cCc6IHsnb3B0Z3JvdXAnOiB0cnVlfSwK
LSAgICAgICdwJzogeydhZGRyZXNzJzogdHJ1ZSwgJ2FydGljbGUnOiB0cnVlLCAnYXNpZGUnOiB0
cnVlLCAnYmxvY2txdW90ZSc6IHRydWUsICdkaXInOiB0cnVlLAotICAgICAgICAgICAgJ2Rpdic6
IHRydWUsICdkbCc6IHRydWUsICdmaWVsZHNldCc6IHRydWUsICdmb290ZXInOiB0cnVlLCAnZm9y
bSc6IHRydWUsCi0gICAgICAgICAgICAnaDEnOiB0cnVlLCAnaDInOiB0cnVlLCAnaDMnOiB0cnVl
LCAnaDQnOiB0cnVlLCAnaDUnOiB0cnVlLCAnaDYnOiB0cnVlLAotICAgICAgICAgICAgJ2hlYWRl
cic6IHRydWUsICdoZ3JvdXAnOiB0cnVlLCAnaHInOiB0cnVlLCAnbWVudSc6IHRydWUsICduYXYn
OiB0cnVlLCAnb2wnOiB0cnVlLAotICAgICAgICAgICAgJ3AnOiB0cnVlLCAncHJlJzogdHJ1ZSwg
J3NlY3Rpb24nOiB0cnVlLCAndGFibGUnOiB0cnVlLCAndWwnOiB0cnVlfSwKLSAgICAgICdycCc6
IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSwKLSAgICAgICdydCc6IHsncnAnOiB0cnVlLCAncnQn
OiB0cnVlfSwKLSAgICAgICd0Ym9keSc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSwK
LSAgICAgICd0ZCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSwKLSAgICAgICd0Zm9vdCc6IHsn
dGJvZHknOiB0cnVlfSwKLSAgICAgICd0aCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSwKLSAg
ICAgICd0aGVhZCc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSwKLSAgICAgICd0cic6
IHsndHInOiB0cnVlfQotICAgIH0sCi0gICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCi0g
ICAgYWxsb3dVbnF1b3RlZDogdHJ1ZSwKLSAgICBhbGxvd01pc3Npbmc6IHRydWUsCi0gICAgY2Fz
ZUZvbGQ6IHRydWUKLSAgfSA6IHsKLSAgICBhdXRvU2VsZkNsb3NlcnM6IHt9LAotICAgIGltcGxp
Y2l0bHlDbG9zZWQ6IHt9LAotICAgIGNvbnRleHRHcmFiYmVyczoge30sCi0gICAgZG9Ob3RJbmRl
bnQ6IHt9LAotICAgIGFsbG93VW5xdW90ZWQ6IGZhbHNlLAotICAgIGFsbG93TWlzc2luZzogZmFs
c2UsCi0gICAgY2FzZUZvbGQ6IGZhbHNlCi0gIH07Ci0gIHZhciBhbGlnbkNEQVRBID0gcGFyc2Vy
Q29uZmlnLmFsaWduQ0RBVEE7Cit2YXIgeG1sQ29uZmlnID0geworICBhdXRvU2VsZkNsb3NlcnM6
IHt9LAorICBpbXBsaWNpdGx5Q2xvc2VkOiB7fSwKKyAgY29udGV4dEdyYWJiZXJzOiB7fSwKKyAg
ZG9Ob3RJbmRlbnQ6IHt9LAorICBhbGxvd1VucXVvdGVkOiBmYWxzZSwKKyAgYWxsb3dNaXNzaW5n
OiBmYWxzZSwKKyAgY2FzZUZvbGQ6IGZhbHNlCit9CisKK0NvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
eG1sIiwgZnVuY3Rpb24oZWRpdG9yQ29uZiwgY29uZmlnXykgeworICB2YXIgaW5kZW50VW5pdCA9
IGVkaXRvckNvbmYuaW5kZW50VW5pdAorICB2YXIgY29uZmlnID0ge30KKyAgdmFyIGRlZmF1bHRz
ID0gY29uZmlnXy5odG1sTW9kZSA/IGh0bWxDb25maWcgOiB4bWxDb25maWcKKyAgZm9yICh2YXIg
cHJvcCBpbiBkZWZhdWx0cykgY29uZmlnW3Byb3BdID0gZGVmYXVsdHNbcHJvcF0KKyAgZm9yICh2
YXIgcHJvcCBpbiBjb25maWdfKSBjb25maWdbcHJvcF0gPSBjb25maWdfW3Byb3BdCiAKICAgLy8g
UmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVycwogICB2YXIgdHlwZSwgc2V0U3R5bGU7CkBA
IC0xODgsNyArMTkwLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihj
b25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7CiAgICAg
dGhpcy5pbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDsKICAgICB0aGlzLnN0YXJ0T2ZMaW5lID0gc3Rh
cnRPZkxpbmU7Ci0gICAgaWYgKEtsdWRnZXMuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFn
TmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5ub0luZGVudCkpCisgICAg
aWYgKGNvbmZpZy5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSB8fCAoc3RhdGUu
Y29udGV4dCAmJiBzdGF0ZS5jb250ZXh0Lm5vSW5kZW50KSkKICAgICAgIHRoaXMubm9JbmRlbnQg
PSB0cnVlOwogICB9CiAgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKQEAgLTIwMSw4ICsy
MDMsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHBhcmVudFRhZ05h
bWUgPSBzdGF0ZS5jb250ZXh0LnRhZ05hbWU7Ci0gICAgICBpZiAoIUtsdWRnZXMuY29udGV4dEdy
YWJiZXJzLmhhc093blByb3BlcnR5KHBhcmVudFRhZ05hbWUpIHx8Ci0gICAgICAgICAgIUtsdWRn
ZXMuY29udGV4dEdyYWJiZXJzW3BhcmVudFRhZ05hbWVdLmhhc093blByb3BlcnR5KG5leHRUYWdO
YW1lKSkgeworICAgICAgaWYgKCFjb25maWcuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5
KHBhcmVudFRhZ05hbWUpIHx8CisgICAgICAgICAgIWNvbmZpZy5jb250ZXh0R3JhYmJlcnNbcGFy
ZW50VGFnTmFtZV0uaGFzT3duUHJvcGVydHkobmV4dFRhZ05hbWUpKSB7CiAgICAgICAgIHJldHVy
bjsKICAgICAgIH0KICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwpAQCAtMjMzLDkgKzIzNSw5IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICBpZiAodHlwZSA9PSAid29yZCIpIHsKICAgICAgIHZhciB0YWdOYW1lID0gc3Ry
ZWFtLmN1cnJlbnQoKTsKICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQu
dGFnTmFtZSAhPSB0YWdOYW1lICYmCi0gICAgICAgICAgS2x1ZGdlcy5pbXBsaWNpdGx5Q2xvc2Vk
Lmhhc093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpCisgICAgICAgICAgY29uZmln
LmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoc3RhdGUuY29udGV4dC50YWdOYW1lKSkK
ICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7Ci0gICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBz
dGF0ZS5jb250ZXh0LnRhZ05hbWUgPT0gdGFnTmFtZSkgeworICAgICAgaWYgKChzdGF0ZS5jb250
ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB8fCBjb25maWcubWF0Y2hD
bG9zaW5nID09PSBmYWxzZSkgewogICAgICAgICBzZXRTdHlsZSA9ICJ0YWciOwogICAgICAgICBy
ZXR1cm4gY2xvc2VTdGF0ZTsKICAgICAgIH0gZWxzZSB7CkBAIC0yNjksNyArMjcxLDcgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgICAgdmFyIHRhZ05hbWUgPSBzdGF0ZS50YWdOYW1lLCB0YWdTdGFydCA9IHN0YXRlLnRh
Z1N0YXJ0OwogICAgICAgc3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDsKICAg
ICAgIGlmICh0eXBlID09ICJzZWxmY2xvc2VUYWciIHx8Ci0gICAgICAgICAgS2x1ZGdlcy5hdXRv
U2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHsKKyAgICAgICAgICBjb25maWcu
YXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KHRhZ05hbWUpKSB7CiAgICAgICAgIG1heWJl
UG9wQ29udGV4dChzdGF0ZSwgdGFnTmFtZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBtYXli
ZVBvcENvbnRleHQoc3RhdGUsIHRhZ05hbWUpOwpAQCAtMjgyLDEyICsyODQsMTIgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICB9CiAgIGZ1bmN0aW9uIGF0dHJFcVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKICAgICBp
ZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0dXJuIGF0dHJWYWx1ZVN0YXRlOwotICAgIGlmICghS2x1
ZGdlcy5hbGxvd01pc3NpbmcpIHNldFN0eWxlID0gImVycm9yIjsKKyAgICBpZiAoIWNvbmZpZy5h
bGxvd01pc3NpbmcpIHNldFN0eWxlID0gImVycm9yIjsKICAgICByZXR1cm4gYXR0clN0YXRlKHR5
cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9CiAgIGZ1bmN0aW9uIGF0dHJWYWx1ZVN0YXRlKHR5cGUs
IHN0cmVhbSwgc3RhdGUpIHsKICAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGF0dHJD
b250aW51ZWRTdGF0ZTsKLSAgICBpZiAodHlwZSA9PSAid29yZCIgJiYgS2x1ZGdlcy5hbGxvd1Vu
cXVvdGVkKSB7c2V0U3R5bGUgPSAic3RyaW5nIjsgcmV0dXJuIGF0dHJTdGF0ZTt9CisgICAgaWYg
KHR5cGUgPT0gIndvcmQiICYmIGNvbmZpZy5hbGxvd1VucXVvdGVkKSB7c2V0U3R5bGUgPSAic3Ry
aW5nIjsgcmV0dXJuIGF0dHJTdGF0ZTt9CiAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgIHJl
dHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgIH0KQEAgLTI5NywxMiArMjk5
LDE0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgfQogCiAgIHJldHVybiB7Ci0gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24o
KSB7Ci0gICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsCi0gICAgICAgICAgICAgIHN0YXRl
OiBiYXNlU3RhdGUsCi0gICAgICAgICAgICAgIGluZGVudGVkOiAwLAotICAgICAgICAgICAgICB0
YWdOYW1lOiBudWxsLCB0YWdTdGFydDogbnVsbCwKLSAgICAgICAgICAgICAgY29udGV4dDogbnVs
bH07CisgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZUluZGVudCkgeworICAgICAgdmFyIHN0
YXRlID0ge3Rva2VuaXplOiBpblRleHQsCisgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2VT
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICBpbmRlbnRlZDogYmFzZUluZGVudCB8fCAwLAorICAg
ICAgICAgICAgICAgICAgIHRhZ05hbWU6IG51bGwsIHRhZ1N0YXJ0OiBudWxsLAorICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQ6IG51bGx9CisgICAgICBpZiAoYmFzZUluZGVudCAhPSBudWxsKSBz
dGF0ZS5iYXNlSW5kZW50ID0gYmFzZUluZGVudAorICAgICAgcmV0dXJuIHN0YXRlCiAgICAgfSwK
IAogICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CkBAIC0zMzUsMTkgKzMzOSwx
OSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxz
KikvKVswXS5sZW5ndGggOiAwOwogICAgICAgLy8gSW5kZW50IHRoZSBzdGFydHMgb2YgYXR0cmli
dXRlIG5hbWVzLgogICAgICAgaWYgKHN0YXRlLnRhZ05hbWUpIHsKLSAgICAgICAgaWYgKG11bHRp
bGluZVRhZ0luZGVudFBhc3RUYWcpCisgICAgICAgIGlmIChjb25maWcubXVsdGlsaW5lVGFnSW5k
ZW50UGFzdFRhZyAhPT0gZmFsc2UpCiAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsg
c3RhdGUudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJu
IHN0YXRlLnRhZ1N0YXJ0ICsgaW5kZW50VW5pdCAqIG11bHRpbGluZVRhZ0luZGVudEZhY3RvcjsK
KyAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogKGNvbmZpZy5t
dWx0aWxpbmVUYWdJbmRlbnRGYWN0b3IgfHwgMSk7CiAgICAgICB9Ci0gICAgICBpZiAoYWxpZ25D
REFUQSAmJiAvPCFcW0NEQVRBXFsvLnRlc3QodGV4dEFmdGVyKSkgcmV0dXJuIDA7CisgICAgICBp
ZiAoY29uZmlnLmFsaWduQ0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJl
dHVybiAwOwogICAgICAgdmFyIHRhZ0FmdGVyID0gdGV4dEFmdGVyICYmIC9ePChcLyk/KFtcd186
XC4tXSopLy5leGVjKHRleHRBZnRlcik7CiAgICAgICBpZiAodGFnQWZ0ZXIgJiYgdGFnQWZ0ZXJb
MV0pIHsgLy8gQ2xvc2luZyB0YWcgc3BvdHRlZAogICAgICAgICB3aGlsZSAoY29udGV4dCkgewog
ICAgICAgICAgIGlmIChjb250ZXh0LnRhZ05hbWUgPT0gdGFnQWZ0ZXJbMl0pIHsKICAgICAgICAg
ICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9IGVsc2UgaWYgKEtsdWRnZXMuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShjb250
ZXh0LnRhZ05hbWUpKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuaW1wbGljaXRseUNs
b3NlZC5oYXNPd25Qcm9wZXJ0eShjb250ZXh0LnRhZ05hbWUpKSB7CiAgICAgICAgICAgICBjb250
ZXh0ID0gY29udGV4dC5wcmV2OwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTM1NSwyNSArMzU5LDMwIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgfQogICAgICAgfSBlbHNlIGlm
ICh0YWdBZnRlcikgeyAvLyBPcGVuaW5nIHRhZyBzcG90dGVkCiAgICAgICAgIHdoaWxlIChjb250
ZXh0KSB7Ci0gICAgICAgICAgdmFyIGdyYWJiZXJzID0gS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnNb
Y29udGV4dC50YWdOYW1lXTsKKyAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBjb25maWcuY29udGV4
dEdyYWJiZXJzW2NvbnRleHQudGFnTmFtZV07CiAgICAgICAgICAgaWYgKGdyYWJiZXJzICYmIGdy
YWJiZXJzLmhhc093blByb3BlcnR5KHRhZ0FmdGVyWzJdKSkKICAgICAgICAgICAgIGNvbnRleHQg
PSBjb250ZXh0LnByZXY7CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgIH0KLSAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZM
aW5lKQorICAgICAgd2hpbGUgKGNvbnRleHQgJiYgY29udGV4dC5wcmV2ICYmICFjb250ZXh0LnN0
YXJ0T2ZMaW5lKQogICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2OwogICAgICAgaWYgKGNv
bnRleHQpIHJldHVybiBjb250ZXh0LmluZGVudCArIGluZGVudFVuaXQ7Ci0gICAgICBlbHNlIHJl
dHVybiAwOworICAgICAgZWxzZSByZXR1cm4gc3RhdGUuYmFzZUluZGVudCB8fCAwOwogICAgIH0s
CiAKICAgICBlbGVjdHJpY0lucHV0OiAvPFwvW1xzXHc6XSs+JC8sCiAgICAgYmxvY2tDb21tZW50
U3RhcnQ6ICI8IS0tIiwKICAgICBibG9ja0NvbW1lbnRFbmQ6ICItLT4iLAogCi0gICAgY29uZmln
dXJhdGlvbjogcGFyc2VyQ29uZmlnLmh0bWxNb2RlID8gImh0bWwiIDogInhtbCIsCi0gICAgaGVs
cGVyVHlwZTogcGFyc2VyQ29uZmlnLmh0bWxNb2RlID8gImh0bWwiIDogInhtbCIKKyAgICBjb25m
aWd1cmF0aW9uOiBjb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIiwKKyAgICBoZWxwZXJU
eXBlOiBjb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIiwKKworICAgIHNraXBBdHRyaWJ1
dGU6IGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgICBpZiAoc3RhdGUuc3RhdGUgPT0gYXR0clZhbHVl
U3RhdGUpCisgICAgICAgIHN0YXRlLnN0YXRlID0gYXR0clN0YXRlCisgICAgfQogICB9OwogfSk7
CiAK
</data>
<flag name="review"
          id="319791"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>