<?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>44835</bug_id>
          
          <creation_ts>2010-08-29 00:55:16 -0700</creation_ts>
          <short_desc>Awesomify pretty-diff based review tool</short_desc>
          <delta_ts>2010-08-29 11:30:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271133</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 00:55:16 -0700</bug_when>
    <thetext>The current pretty-diff review tool is ok.  We can make it much more awesome with a little work.  On the agenda:

1) Fix the &quot;giant comment&quot; bug.
2) View line-by-line comments in context.
3) Threaded line-by-line comments in patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271134</commentid>
    <comment_count>1</comment_count>
      <attachid>65848</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 00:55:43 -0700</bug_when>
    <thetext>Created attachment 65848
work-in-progress script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271135</commentid>
    <comment_count>2</comment_count>
      <attachid>65849</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 01:25:25 -0700</bug_when>
    <thetext>Created attachment 65849
more work-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271139</commentid>
    <comment_count>3</comment_count>
      <attachid>65850</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 02:09:40 -0700</bug_when>
    <thetext>Created attachment 65850
front-end mostly done (needs bugzilla integration)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271158</commentid>
    <comment_count>4</comment_count>
      <attachid>65854</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 09:43:19 -0700</bug_when>
    <thetext>Created attachment 65854
potentially ready</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271159</commentid>
    <comment_count>5</comment_count>
      <attachid>65855</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 09:52:30 -0700</bug_when>
    <thetext>Created attachment 65855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271160</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 09:53:16 -0700</bug_when>
    <thetext>This version don&apos;t have support for parsing back the threaded discussion, but I&apos;ll add that in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271161</commentid>
    <comment_count>7</comment_count>
      <attachid>65855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-29 10:58:24 -0700</bug_when>
    <thetext>Comment on attachment 65855
Patch

I&apos;m not sure I can really review much here.  Lets just try it, and change/rollout if it&apos;s wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271162</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 11:00:09 -0700</bug_when>
    <thetext>Committed r66332: &lt;http://trac.webkit.org/changeset/66332&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271163</commentid>
    <comment_count>9</comment_count>
      <attachid>65855</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 11:06:22 -0700</bug_when>
    <thetext>Comment on attachment 65855
Patch

&gt; BugsSite/ChangeLog:5
&gt; +        Awesomify pretty-diff based review tool
This is a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271166</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-29 11:30:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66332 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65848</attachid>
            <date>2010-08-29 00:55:43 -0700</date>
            <delta_ts>2010-08-29 02:01:56 -0700</delta_ts>
            <desc>work-in-progress script</desc>
            <filename>code-review.js</filename>
            <type>text/plain</type>
            <size>5637</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">KGZ1bmN0aW9uKCkgewogIHZhciBwcmV2aW91c19jb21tZW50cyA9IFsKICB7CiAgICAnbGluZTIz
JzogJ0hpIDx0aGVyZT4gZnJpZW5kJywKICAgICdsaW5lMyc6ICdCeSA8dGhlcmU+IHRvZCcsCiAg
fSwKICB7CiAgICAnbGluZTMnOiAnT2ggbm9lcyEnLAogIH1dOwogIHZhciBjdXJyZW50X2NvbW1l
bnQgPSB7fQogIHZhciBuZXh0X2xpbmVfaWQgPSAwOwoKICBmdW5jdGlvbiBpZEZvckxpbmUobnVt
YmVyKSB7CiAgICByZXR1cm4gJ2xpbmUnICsgbnVtYmVyOwogIH0KCiAgZnVuY3Rpb24gbmV4dExp
bmVJZCgpIHsKICAgIHJldHVybiBpZEZvckxpbmUobmV4dF9saW5lX2lkKyspOwogIH0KCiAgZnVu
Y3Rpb24gaWRpZnkoaWRGYWN0b3J5KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHRo
aXMuaWQgPSBpZEZhY3RvcnkoKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBob3ZlcmlmeSgpIHsK
ICAgICQodGhpcykuaG92ZXIoZnVuY3Rpb24oKSB7CiAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2hv
dCcpOwogICAgfSwKICAgIGZ1bmN0aW9uICgpIHsKICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygn
aG90Jyk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZpbmRDb21tZW50UG9zaXRpb25Gb3IobGlu
ZSkgewogICAgdmFyIHBvc2l0aW9uID0gbGluZTsKICAgIHdoaWxlIChwb3NpdGlvbi5uZXh0KCkg
JiYgcG9zaXRpb24ubmV4dCgpLmhhc0NsYXNzKCdwcmV2aW91c19jb21tZW50JykpCiAgICAgIHBv
c2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgZnVu
Y3Rpb24gaW5zZXJ0Q29tbWVudEZvcihsaW5lLCBibG9jaykgewogICAgZmluZENvbW1lbnRQb3Np
dGlvbkZvcihsaW5lKS5hZnRlcihibG9jayk7CiAgfQoKICBmdW5jdGlvbiBmb2N1c0NvbW1lbnRG
b3IobGluZSkgewogICAgdmFyIGNvbW1lbnRfYmxvY2sgPSBmaW5kQ29tbWVudFBvc2l0aW9uRm9y
KGxpbmUpLm5leHQoKTsKICAgIGlmICghY29tbWVudF9ibG9jay5oYXNDbGFzcygnY29tbWVudCcp
KQogICAgICByZXR1cm47CiAgICBjb21tZW50X2Jsb2NrLmNoaWxkcmVuKCd0ZXh0YXJlYScpLmZv
Y3VzKCk7CiAgfQoKICBmdW5jdGlvbiBhZGRDb21tZW50RmllbGQoKSB7CiAgICB2YXIgaWQgPSAk
KHRoaXMpLmF0dHIoJ2RhdGEtY29tbWVudC1mb3InKTsKICAgIGlmICghaWQpCiAgICAgIGlkID0g
dGhpcy5pZDsKICAgIHZhciBsaW5lID0gJCgnIycgKyBpZCk7CiAgICBpZiAobGluZS5hdHRyKCdk
YXRhLWhhcy1jb21tZW50JykpIHsKICAgICAgZm9jdXNDb21tZW50Rm9yKGxpbmUpOwogICAgICBy
ZXR1cm47CiAgICB9CiAgICBsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnLCAndHJ1ZScpOwog
ICAgdmFyIGNvbW1lbnRfYmxvY2sgPSAkKCc8ZGl2IGNsYXNzPSJjb21tZW50Ij48dGV4dGFyZWEg
ZGF0YS1jb21tZW50LWZvcj0iJyArIGlkICsgJyI+PC90ZXh0YXJlYT48L2Rpdj4nKTsKICAgIGlu
c2VydENvbW1lbnRGb3IobGluZSwgY29tbWVudF9ibG9jayk7CiAgICBjb21tZW50X2Jsb2NrLmNo
aWxkcmVuKCd0ZXh0YXJlYScpLmZvY3VzKCk7CiAgfQoKICBmdW5jdGlvbiBkaXNwbGF5UHJldmlv
dXNDb21tZW50cygpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dF9saW5lX2lkOyArK2kp
IHsKICAgICAgdmFyIGxpbmVfaWQgPSBpZEZvckxpbmUoaSk7CiAgICAgIHZhciBjb21tZW50ID0g
dGhpc1tsaW5lX2lkXTsKICAgICAgaWYgKGNvbW1lbnQpIHsKICAgICAgICB2YXIgY29tbWVudF9i
bG9jayA9ICQoJzxkaXYgZGF0YS1jb21tZW50LWZvcj0iJyArIGxpbmVfaWQgKyAnIiBjbGFzcz0i
cHJldmlvdXNfY29tbWVudCIgdGl0bGU9IkNsaWNrIHRvIHJlcGx5Ij48L2Rpdj4nKTsKICAgICAg
ICBjb21tZW50X2Jsb2NrLnRleHQoY29tbWVudCkucHJlcGVuZCgnPGRpdiBjbGFzcz0icmVwbHki
PkNsaWNrIHRvIHJlcGx5PC9kaXY+Jyk7CiAgICAgICAgY29tbWVudF9ibG9jay5lYWNoKGhvdmVy
aWZ5KS5jbGljayhhZGRDb21tZW50RmllbGQpOwogICAgICAgIGluc2VydENvbW1lbnRGb3IoJCgn
IycgKyBsaW5lX2lkKSwgY29tbWVudF9ibG9jayk7CiAgICAgIH0KICAgIH0KICB9CgogICQoZG9j
dW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgJCgnLkxpbmUnKS5lYWNoKGlkaWZ5KG5leHRM
aW5lSWQpKS5lYWNoKGhvdmVyaWZ5KS5jbGljayhhZGRDb21tZW50RmllbGQpOwogICAgJChwcmV2
aW91c19jb21tZW50cykuZWFjaChkaXNwbGF5UHJldmlvdXNDb21tZW50cyk7CiAgICAkKGRvY3Vt
ZW50LmJvZHkpLnByZXBlbmQoJzxkaXYgaWQ9InRvb2xiYXIiPjxidXR0b24gaWQ9InBvc3RfY29t
bWVudHMiPlBvc3QgY29tbWVudHM8L2J1dHRvbj48L2Rpdj4nKTsKICB9KTsKCiAgJCgnLmNvbW1l
bnQgdGV4dGFyZWEnKS5saXZlKCdrZXlkb3duJywgZnVuY3Rpb24oKSB7CiAgICB2YXIgbGluZV9p
ZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1lbnQtZm9yJyk7CiAgICB2YXIgY29tbWVu
dCA9IHRoaXMudmFsdWU7CiAgICBjdXJyZW50X2NvbW1lbnRbbGluZV9pZF0gPSBjb21tZW50Owog
IH0pOwoKICAkKCcjcG9zdF9jb21tZW50cycpLmxpdmUoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewog
ICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY3VycmVudF9jb21tZW50KSk7CiAgfSk7Cn0p
KCk7CgovKgoKLy8gQ29kZSB0byBzdXBwb3J0IGlubGluZSBjb21tZW50cyBpbiBidWdzLndlYmtp
dC5vcmcuCgpmdW5jdGlvbiBnZXRTdWJtaXRUZXh0QXJlYSgpIHsKICAvLyBOb3RlIHRoYXQgdGhp
cyBvbmx5IHdvcmtzIHdoZW4gcnVubmluZyBvbiBzYW1lIGRvbWFpbi4KICBpZiAocGFyZW50LmZy
YW1lcy5sZW5ndGggPT0gMikgewogICAgLy8gV2UncmUgcHJvYmFibHkgaW4gdGhlIGFjdGlvbj1y
ZXZpZXcgcGFnZS4KICAgIHJldHVybiBwYXJlbnQuZnJhbWVzWzFdLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb21tZW50Iik7CiAgfQogIC8vIFdlJ3JlIHByb2JhYmx5IGluIHRoZSBhY3Rpb249
ZWRpdCBwYWdlLgogIHJldHVybiBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNtYWxs
Q29tbWVudEZyYW1lIik7Cn0KIApmdW5jdGlvbiBvbkxpbmVDbGlja2VkKGUpIHsKICAvLyBGaW5k
IHRoZSByaWdodCBsaW5lIGRpdi4KICAvLyBGSVhNRTogd2h5IGRvZXMgYSBjbGljayBldmVudCBv
biBteSBkaXYgZ2V0IGludGVyY2VwdGVkCiAgLy8gYnkgYSBzcGFuIG9yIGV2ZW4gZG9jdW1lbnQg
ZWxlbWVudCA6KAogIHZhciBsaW5lID0gZS50YXJnZXQ7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlm
IChsaW5lID09IGRvY3VtZW50KQogICAgICByZXR1cm47CiAgICBpZiAobGluZS5nZXRBdHRyaWJ1
dGUoImNsYXNzIikuc3Vic3RyKDAsIDQpID09ICJMaW5lIikKICAgICAgYnJlYWs7CiAgICBsaW5l
ID0gbGluZS51cCgpOwogIH0KIAogIGlmIChsaW5lLmhhc0NvbW1lbnQpCiAgICByZXR1cm47CiAg
bGluZS5oYXNDb21tZW50ID0gdHJ1ZTsKIAogIHZhciBsaW5lRnJvbSA9IGxpbmUuc2VsZWN0KCJb
Y2xhc3M9J2Zyb20gbGluZU51bWJlciddIilbMF0uaW5uZXJIVE1MOwogIHZhciBsaW5lVG8gPSBs
aW5lLnNlbGVjdCgiW2NsYXNzPSd0byBsaW5lTnVtYmVyJ10iKVswXS5pbm5lckhUTUw7CiAgdmFy
IGxpbmVUZXh0ID0gbGluZS5zZWxlY3QoIltjbGFzcz0ndGV4dCddIilbMF0uaW5uZXJIVE1MOwog
CiAgbGluZS5pbnNlcnQoe2FmdGVyOgogICAgICAiPGRpdiBjbGFzcz0nY29tbWVudCc+IiArCiAg
ICAgICI8dGV4dGFyZWE+PC90ZXh0YXJlYT4iICsKICAgICAgIjxidXR0b24gb25jbGljaz0nb25D
b21tZW50U3VibWl0KHRoaXMudXAoKSknPkFkZDwvYnV0dG9uPiIgKwogICAgICAiPGJ1dHRvbiBv
bmNsaWNrPSdvbkNvbW1lbnRDYW5jZWwodGhpcy51cCgpKSc+Q2FuY2VsPC9idXR0b24+IiArCiAg
ICAgICI8L2Rpdj4ifSk7CiAKICB2YXIgY29tbWVudCA9IGxpbmUubmV4dCgpOwogIHZhciB0ZXh0
YXJlYSA9IGNvbW1lbnQuc2VsZWN0KCJ0ZXh0YXJlYSIpWzBdOwogIHRleHRhcmVhLmZvY3VzKCk7
Cn0KIApmdW5jdGlvbiBvbkNvbW1lbnRTdWJtaXQoY29tbWVudCkgewogIHZhciB0ZXh0YXJlYSA9
IGNvbW1lbnQuc2VsZWN0KCJ0ZXh0YXJlYSIpWzBdOwogIHZhciBidXR0b25zID0gY29tbWVudC5z
ZWxlY3QoImJ1dHRvbiIpOwogIHZhciBjb21tZW50VGV4dCA9IHRleHRhcmVhLnZhbHVlOwogCiAg
dmFyIGxpbmUgPSBjb21tZW50LnByZXZpb3VzKCk7CiAgbGluZS5oYXNDb21tZW50ID0gZmFsc2UK
ICB2YXIgbGluZUZyb20gPSBsaW5lLnNlbGVjdCgiW2NsYXNzPSdmcm9tIGxpbmVOdW1iZXInXSIp
WzBdLnRleHRDb250ZW50OwogIHZhciBsaW5lVG8gPSBsaW5lLnNlbGVjdCgiW2NsYXNzPSd0byBs
aW5lTnVtYmVyJ10iKVswXS50ZXh0Q29udGVudDsKICB2YXIgbGluZVRleHQgPSBsaW5lLnNlbGVj
dCgiW2NsYXNzPSd0ZXh0J10iKVswXS50ZXh0Q29udGVudDsKICB2YXIgZmlsZW5hbWUgPSBjb21t
ZW50LnVwKCkudXAoKS5zZWxlY3QoImgxIilbMF0uZG93bigpLnRleHRDb250ZW50OwogCiAgdmFy
IHNuaXBwZXQgPSBmaWxlbmFtZSArICI6IiArIGxpbmVUbyArICJcbiArICAiICsgbGluZVRleHQg
KyAiXG4iICsgY29tbWVudFRleHQgKyAiXG5cbiI7CiAKICAvLyBSZW1vdmUgYWxsIHRoZSBjcmFw
LgogIHRleHRhcmVhLnJlbW92ZSgpOwogIGJ1dHRvbnNbMF0ucmVtb3ZlKCk7CiAgYnV0dG9uc1sx
XS5yZW1vdmUoKTsKIAogIC8vIEluc2VydCBhIG5vbi1lZGl0YWJsZSBmb3JtIG9mIG91ciBjb21t
ZW50LgogIGNvbW1lbnQuaW5zZXJ0KCI8cHJlPiIgKyBjb21tZW50VGV4dCArICI8L3ByZT4iKTsK
ICBjb21tZW50LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiY29tbWVudCBzdWJtaXR0ZWQiKTsKIAog
IC8vIFVwZGF0ZSB0aGUgc3VibWlzc2lvbiB0ZXh0IGFyZWEuCiAgdmFyIHN1Ym1pc3Npb24gPSBn
ZXRTdWJtaXRUZXh0QXJlYSgpOwogIHN1Ym1pc3Npb24udmFsdWUgPSBzdWJtaXNzaW9uLnZhbHVl
ICsgc25pcHBldDsKfQogCmZ1bmN0aW9uIG9uQ29tbWVudENhbmNlbChjb21tZW50KSB7CiAgdmFy
IGxpbmUgPSBjb21tZW50LnByZXZpb3VzKCk7CiAgbGluZS5oYXNDb21tZW50ID0gZmFsc2UKICBj
b21tZW50LnJlbW92ZSgpOwp9CiAKZnVuY3Rpb24gb25DbGVhclN1Ym1pdEFyZWEoKSB7CiAgdmFy
IHN1Ym1pc3Npb24gPSBnZXRTdWJtaXRUZXh0QXJlYSgpOwogIHN1Ym1pc3Npb24udmFsdWUgPSAi
IjsKfQogCmlmICh0b3AgIT09IHdpbmRvdykgewogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkIiwgZnVuY3Rpb24gKCkgewogICAgdmFyIGxpbmVzID0gJCQoImRpdltjbGFzc349J0xpbmUn
XSIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewogICAgICBs
aW5lc1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIG9uTGluZUNsaWNrZWQsIGZhbHNlKTsK
ICAgIH0KIAogICAgJCQoImgxIilbMF0uaW5zZXJ0KCI8YnV0dG9uIHN0eWxlPSdmbG9hdDpyaWdo
dDsnICIrCiAgICAgICJvbmNsaWNrPSdvbkNsZWFyU3VibWl0QXJlYSgpJz4iICsKICAgICAgIkNs
ZWFyIE1haW4gQ29tbWVudCBCb3g8L2J1dHRvbj4iKTsKICB9LCBmYWxzZSk7Cn0KKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65849</attachid>
            <date>2010-08-29 01:25:25 -0700</date>
            <delta_ts>2010-08-29 02:09:40 -0700</delta_ts>
            <desc>more work-in-progress</desc>
            <filename>code-review.js</filename>
            <type>text/plain</type>
            <size>3701</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">KGZ1bmN0aW9uKCkgewogIHZhciBwcmV2aW91c19jb21tZW50cyA9IFsKICB7CiAgICAnbGluZTIz
JzogJ0hpIDx0aGVyZT4gZnJpZW5kJywKICAgICdsaW5lMyc6ICdCeSA8dGhlcmU+IHRvZCcsCiAg
fSwKICB7CiAgICAnbGluZTMnOiAnT2ggbm9lcyEnLAogIH1dOwogIHZhciBjdXJyZW50X2NvbW1l
bnQgPSB7fQogIHZhciBuZXh0X2xpbmVfaWQgPSAwOwoKICBmdW5jdGlvbiBpZEZvckxpbmUobnVt
YmVyKSB7CiAgICByZXR1cm4gJ2xpbmUnICsgbnVtYmVyOwogIH0KCiAgZnVuY3Rpb24gbmV4dExp
bmVJZCgpIHsKICAgIHJldHVybiBpZEZvckxpbmUobmV4dF9saW5lX2lkKyspOwogIH0KCiAgZnVu
Y3Rpb24gZm9yRWFjaExpbmUoY2FsbGJhY2spIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4
dF9saW5lX2lkOyArK2kpIHsKICAgICAgY2FsbGJhY2soJCgnIycgKyBpZEZvckxpbmUoaSkpKTsK
ICAgIH0KICB9CgogIGZ1bmN0aW9uIGlkaWZ5KGlkRmFjdG9yeSkgewogICAgcmV0dXJuIGZ1bmN0
aW9uKCkgewogICAgICB0aGlzLmlkID0gaWRGYWN0b3J5KCk7CiAgICB9OwogIH0KCiAgZnVuY3Rp
b24gaG92ZXJpZnkoKSB7CiAgICAkKHRoaXMpLmhvdmVyKGZ1bmN0aW9uKCkgewogICAgICAkKHRo
aXMpLmFkZENsYXNzKCdob3QnKTsKICAgIH0sCiAgICBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhp
cykucmVtb3ZlQ2xhc3MoJ2hvdCcpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBmaW5kQ29tbWVu
dFBvc2l0aW9uRm9yKGxpbmUpIHsKICAgIHZhciBwb3NpdGlvbiA9IGxpbmU7CiAgICB3aGlsZSAo
cG9zaXRpb24ubmV4dCgpICYmIHBvc2l0aW9uLm5leHQoKS5oYXNDbGFzcygncHJldmlvdXNfY29t
bWVudCcpKQogICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLm5leHQoKTsKICAgIHJldHVybiBwb3Np
dGlvbjsKICB9CgogIGZ1bmN0aW9uIGZpbmRDb21tZW50QmxvY2tGb3IobGluZSkgewogICAgdmFy
IGNvbW1lbnRfYmxvY2sgPSBmaW5kQ29tbWVudFBvc2l0aW9uRm9yKGxpbmUpLm5leHQoKTsKICAg
IGlmICghY29tbWVudF9ibG9jay5oYXNDbGFzcygnY29tbWVudCcpKQogICAgICByZXR1cm47CiAg
ICByZXR1cm4gY29tbWVudF9ibG9jazsKICB9CgogIGZ1bmN0aW9uIGluc2VydENvbW1lbnRGb3Io
bGluZSwgYmxvY2spIHsKICAgIGZpbmRDb21tZW50UG9zaXRpb25Gb3IobGluZSkuYWZ0ZXIoYmxv
Y2spOwogIH0KCiAgZnVuY3Rpb24gZm9jdXNDb21tZW50Rm9yKGxpbmUpIHsKICAgIGZpbmRDb21t
ZW50QmxvY2tGb3IobGluZSkuY2hpbGRyZW4oJ3RleHRhcmVhJykuZm9jdXMoKTsKICB9CgogIGZ1
bmN0aW9uIGFkZENvbW1lbnRGaWVsZCgpIHsKICAgIHZhciBpZCA9ICQodGhpcykuYXR0cignZGF0
YS1jb21tZW50LWZvcicpOwogICAgaWYgKCFpZCkKICAgICAgaWQgPSB0aGlzLmlkOwogICAgdmFy
IGxpbmUgPSAkKCcjJyArIGlkKTsKICAgIGlmIChsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQn
KSkgewogICAgICBmb2N1c0NvbW1lbnRGb3IobGluZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAg
IGxpbmUuYXR0cignZGF0YS1oYXMtY29tbWVudCcsICd0cnVlJyk7CiAgICB2YXIgY29tbWVudF9i
bG9jayA9ICQoJzxkaXYgY2xhc3M9ImNvbW1lbnQiPjx0ZXh0YXJlYSBkYXRhLWNvbW1lbnQtZm9y
PSInICsgaWQgKyAnIj48L3RleHRhcmVhPjwvZGl2PicpOwogICAgaW5zZXJ0Q29tbWVudEZvcihs
aW5lLCBjb21tZW50X2Jsb2NrKTsKICAgIGNvbW1lbnRfYmxvY2suY2hpbGRyZW4oJ3RleHRhcmVh
JykuZm9jdXMoKTsKICB9CgogIGZ1bmN0aW9uIGRpc3BsYXlQcmV2aW91c0NvbW1lbnRzKCkgewog
ICAgY29tbWVudF9jb2xsZWN0aW9uID0gdGhpczsKICAgIGZvckVhY2hMaW5lKGZ1bmN0aW9uKGxp
bmUpIHsKICAgICAgdmFyIGxpbmVfaWQgPSBsaW5lLmF0dHIoJ2lkJyk7CiAgICAgIHZhciBjb21t
ZW50ID0gY29tbWVudF9jb2xsZWN0aW9uW2xpbmVfaWRdOwogICAgICBpZiAoY29tbWVudCkgewog
ICAgICAgIHZhciBjb21tZW50X2Jsb2NrID0gJCgnPGRpdiBkYXRhLWNvbW1lbnQtZm9yPSInICsg
bGluZV9pZCArICciIGNsYXNzPSJwcmV2aW91c19jb21tZW50Ij48L2Rpdj4nKTsKICAgICAgICBj
b21tZW50X2Jsb2NrLnRleHQoY29tbWVudCkucHJlcGVuZCgnPGRpdiBjbGFzcz0icmVwbHkiPkNs
aWNrIHRvIHJlcGx5PC9kaXY+Jyk7CiAgICAgICAgY29tbWVudF9ibG9jay5lYWNoKGhvdmVyaWZ5
KS5jbGljayhhZGRDb21tZW50RmllbGQpOwogICAgICAgIGluc2VydENvbW1lbnRGb3IobGluZSwg
Y29tbWVudF9ibG9jayk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgJChkb2N1bWVudCkucmVhZHko
ZnVuY3Rpb24oKSB7CiAgICAkKCcuTGluZScpLmVhY2goaWRpZnkobmV4dExpbmVJZCkpLmVhY2go
aG92ZXJpZnkpLmNsaWNrKGFkZENvbW1lbnRGaWVsZCk7CiAgICAkKHByZXZpb3VzX2NvbW1lbnRz
KS5lYWNoKGRpc3BsYXlQcmV2aW91c0NvbW1lbnRzKTsKICAgICQoZG9jdW1lbnQuYm9keSkucHJl
cGVuZCgnPGRpdiBpZD0idG9vbGJhciI+PGJ1dHRvbiBpZD0icG9zdF9jb21tZW50cyI+UG9zdCBj
b21tZW50czwvYnV0dG9uPjwvZGl2PicpOwogIH0pOwoKICAkKCcuY29tbWVudCB0ZXh0YXJlYScp
LmxpdmUoJ2tleWRvd24nLCBmdW5jdGlvbigpIHsKICAgIHZhciBsaW5lX2lkID0gdGhpcy5nZXRB
dHRyaWJ1dGUoJ2RhdGEtY29tbWVudC1mb3InKTsKICAgIHZhciBjb21tZW50ID0gdGhpcy52YWx1
ZTsKICAgIGN1cnJlbnRfY29tbWVudFtsaW5lX2lkXSA9IGNvbW1lbnQ7CiAgfSk7CgogIGZ1bmN0
aW9uIGNvbnRleHRTbmlwcGV0Rm9yKGxpbmUpIHsKICAgIHZhciBmaWxlX25hbWUgPSBsaW5lLnBh
cmVudCgpLnByZXYoKS50ZXh0KCk7CiAgICB2YXIgbGluZV9udW1iZXIgPSBsaW5lLmhhc0NsYXNz
KCdyZW1vdmUnKSA/IGxpbmUuY2hpbGRyZW4oJy5mcm9tJykudGV4dCgpIDogbGluZS5jaGlsZHJl
bignLnRvJykudGV4dCgpOwoKICAgIHZhciBhY3Rpb24gPSAnICc7CiAgICBpZiAobGluZS5oYXND
bGFzcygnYWRkJykpCiAgICAgIGFjdGlvbiA9ICcrJzsKICAgIGVsc2UgaWYgKGxpbmUuaGFzQ2xh
c3MoJ3JlbW92ZScpKQogICAgICBhY3Rpb24gPSAnLSc7CgogICAgdmFyIHRleHQgPSBsaW5lLmNo
aWxkcmVuKCcudGV4dCcpLnRleHQoKTsKICAgIHJldHVybiBmaWxlX25hbWUgKyAnXG4nICsgbGlu
ZV9udW1iZXIgKyAnOicgKyBhY3Rpb24gKyB0ZXh0OwogIH0KCiAgJCgnI3Bvc3RfY29tbWVudHMn
KS5saXZlKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgIHZhciBjb21tZW50c19pbl9jb250ZXh0
ID0gW10KICAgIGZvckVhY2hMaW5lKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgaWYgKGxpbmUuYXR0
cignZGF0YS1oYXMtY29tbWVudCcpICE9ICd0cnVlJykKICAgICAgICByZXR1cm47CiAgICAgIHZh
ciBzbmlwcGV0ID0gY29udGV4dFNuaXBwZXRGb3IobGluZSk7CiAgICAgIHZhciBjb21tZW50ID0g
ZmluZENvbW1lbnRCbG9ja0ZvcihsaW5lKS5jaGlsZHJlbigndGV4dGFyZWEnKS52YWwoKTsKICAg
ICAgaWYgKGNvbW1lbnQgPT0gJycpCiAgICAgICAgcmV0dXJuOwogICAgICBjb21tZW50c19pbl9j
b250ZXh0LnB1c2goc25pcHBldCArICdcbicgKyBjb21tZW50KTsKICAgIH0pOwogICAgY29uc29s
ZS5sb2coY29tbWVudHNfaW5fY29udGV4dC5qb2luKCdcblxuJykpOwogIH0pOwp9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65850</attachid>
            <date>2010-08-29 02:09:40 -0700</date>
            <delta_ts>2010-08-29 09:43:19 -0700</delta_ts>
            <desc>front-end mostly done (needs bugzilla integration)</desc>
            <filename>code-review.js</filename>
            <type>text/plain</type>
            <size>4888</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">KGZ1bmN0aW9uKCkgewogIHZhciBERUxFVEVfSU1BR0UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0
LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQUEzTkNTVlFJ
Q0FqYjRVL2dBQUFBbjFCTVZFWC8vLy80WW1UL2RubnlURS8vZG5uOWJuSDZhbTM0WW1UM1hXRDJX
VnYyVlZqc09qM29NRExsSnlyaklDTDJWVmp6VVZUd1IwcnVQVC9pSEI3MldWdndSMHJ6VVZUL2g0
ci9nb2IvZm9IL2VYdi9kbm4vY25UOWJuSC9iRzc2YW0zL1ptYjZaR2Y0WW1UM1hXRC9XRnYyV1Z2
L1ZGZjJWVmowVFZEeVRFLzJTa3p3UjBydlJFZnVRVVB1UFQvc09qM3JORGJvTURMbkxURGxKeXJq
SUNJaENwd25BQUFBTlhSU1RsTUFFU0lpTXpNek16TXpNek16TXpORVJFUkVSSGQzcXYvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8wbWdYcHdBQUFBSmNFaFpjd0FBSG5nQUFC
NTRBY3VyQXg4QUFBQVlkRVZZZEZOdlpuUjNZWEpsQUVGa2IySmxJRVpwY21WM2IzSnJjMCt6SDA0
QUFBQ1ZTVVJCVkJpVmJjelhGb0l3REFiZ3VIR2k0bXFiV3VnUVpJbmovWjlOU3VYQWhibEp2dVRr
QitqVjROZUhZOWU5ZysvTTJLU3hGS2RSWTBKd1dsdHhvbzcyZ3ZSTXhjeFRncXJNL1FwMlFXbWR0
K2tSSjVTeXpnQ0dhbzA5enczVE44eVduU05FZm8zTFZXZFRQSkl3cWRiV0N5TjVYQUJVZVppK052
VmlHMHRyZ0hlUlBnTTc3TzZsKy8wNEEremI5QUQrMUJmNmxnM2pRUUpKVGdBQUFBQkpSVTVFcmtK
Z2dnPT0nOwoKICB2YXIgcHJldmlvdXNfY29tbWVudHMgPSBbCiAgewogICAgJ2xpbmUyMyc6ICdI
aSA8dGhlcmU+IGZyaWVuZCcsCiAgICAnbGluZTMnOiAnQnkgPHRoZXJlPiB0b2QnLAogIH0sCiAg
ewogICAgJ2xpbmUzJzogJ09oIG5vZXMhJywKICB9XTsKICB2YXIgY3VycmVudF9jb21tZW50ID0g
e30KICB2YXIgbmV4dF9saW5lX2lkID0gMDsKCiAgZnVuY3Rpb24gaWRGb3JMaW5lKG51bWJlcikg
ewogICAgcmV0dXJuICdsaW5lJyArIG51bWJlcjsKICB9CgogIGZ1bmN0aW9uIG5leHRMaW5lSWQo
KSB7CiAgICByZXR1cm4gaWRGb3JMaW5lKG5leHRfbGluZV9pZCsrKTsKICB9CgogIGZ1bmN0aW9u
IGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRfbGlu
ZV9pZDsgKytpKSB7CiAgICAgIGNhbGxiYWNrKCQoJyMnICsgaWRGb3JMaW5lKGkpKSk7CiAgICB9
CiAgfQoKICBmdW5jdGlvbiBpZGlmeShpZEZhY3RvcnkpIHsKICAgIHJldHVybiBmdW5jdGlvbigp
IHsKICAgICAgdGhpcy5pZCA9IGlkRmFjdG9yeSgpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGhv
dmVyaWZ5KCkgewogICAgJCh0aGlzKS5ob3ZlcihmdW5jdGlvbigpIHsKICAgICAgJCh0aGlzKS5h
ZGRDbGFzcygnaG90Jyk7CiAgICB9LAogICAgZnVuY3Rpb24gKCkgewogICAgICAkKHRoaXMpLnJl
bW92ZUNsYXNzKCdob3QnKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZmluZENvbW1lbnRQb3Np
dGlvbkZvcihsaW5lKSB7CiAgICB2YXIgcG9zaXRpb24gPSBsaW5lOwogICAgd2hpbGUgKHBvc2l0
aW9uLm5leHQoKSAmJiBwb3NpdGlvbi5uZXh0KCkuaGFzQ2xhc3MoJ3ByZXZpb3VzX2NvbW1lbnQn
KSkKICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7CiAgICByZXR1cm4gcG9zaXRpb247
CiAgfQoKICBmdW5jdGlvbiBmaW5kQ29tbWVudEJsb2NrRm9yKGxpbmUpIHsKICAgIHZhciBjb21t
ZW50X2Jsb2NrID0gZmluZENvbW1lbnRQb3NpdGlvbkZvcihsaW5lKS5uZXh0KCk7CiAgICBpZiAo
IWNvbW1lbnRfYmxvY2suaGFzQ2xhc3MoJ2NvbW1lbnQnKSkKICAgICAgcmV0dXJuOwogICAgcmV0
dXJuIGNvbW1lbnRfYmxvY2s7CiAgfQoKICBmdW5jdGlvbiBpbnNlcnRDb21tZW50Rm9yKGxpbmUs
IGJsb2NrKSB7CiAgICBmaW5kQ29tbWVudFBvc2l0aW9uRm9yKGxpbmUpLmFmdGVyKGJsb2NrKTsK
ICB9CgogIGZ1bmN0aW9uIGZvY3VzQ29tbWVudEZvcihsaW5lKSB7CiAgICBmaW5kQ29tbWVudEJs
b2NrRm9yKGxpbmUpLmNoaWxkcmVuKCd0ZXh0YXJlYScpLmZvY3VzKCk7CiAgfQoKICBmdW5jdGlv
biBhZGRDb21tZW50RmllbGQoKSB7CiAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY29t
bWVudC1mb3InKTsKICAgIGlmICghaWQpCiAgICAgIGlkID0gdGhpcy5pZDsKICAgIHZhciBsaW5l
ID0gJCgnIycgKyBpZCk7CiAgICBpZiAobGluZS5hdHRyKCdkYXRhLWhhcy1jb21tZW50JykpIHsK
ICAgICAgZm9jdXNDb21tZW50Rm9yKGxpbmUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBsaW5l
LmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnLCAndHJ1ZScpOwogICAgdmFyIGNvbW1lbnRfYmxvY2sg
PSAkKCc8ZGl2IGNsYXNzPSJjb21tZW50Ij48ZGl2IGNsYXNzPSJhY3Rpb25zIj48aW1nIGNsYXNz
PSJkZWxldGUiIHNyYz0iJyArIERFTEVURV9JTUFHRSArICciPjwvZGl2Pjx0ZXh0YXJlYSBkYXRh
LWNvbW1lbnQtZm9yPSInICsgaWQgKyAnIj48L3RleHRhcmVhPjwvZGl2PicpOwogICAgaW5zZXJ0
Q29tbWVudEZvcihsaW5lLCBjb21tZW50X2Jsb2NrKTsKICAgIGNvbW1lbnRfYmxvY2suZWFjaCho
b3ZlcmlmeSk7CiAgICBjb21tZW50X2Jsb2NrLmNoaWxkcmVuKCd0ZXh0YXJlYScpLmZvY3VzKCk7
CiAgfQoKICBmdW5jdGlvbiBkaXNwbGF5UHJldmlvdXNDb21tZW50cygpIHsKICAgIGNvbW1lbnRf
Y29sbGVjdGlvbiA9IHRoaXM7CiAgICBmb3JFYWNoTGluZShmdW5jdGlvbihsaW5lKSB7CiAgICAg
IHZhciBsaW5lX2lkID0gbGluZS5hdHRyKCdpZCcpOwogICAgICB2YXIgY29tbWVudCA9IGNvbW1l
bnRfY29sbGVjdGlvbltsaW5lX2lkXTsKICAgICAgaWYgKGNvbW1lbnQpIHsKICAgICAgICB2YXIg
Y29tbWVudF9ibG9jayA9ICQoJzxkaXYgZGF0YS1jb21tZW50LWZvcj0iJyArIGxpbmVfaWQgKyAn
IiBjbGFzcz0icHJldmlvdXNfY29tbWVudCI+PC9kaXY+Jyk7CiAgICAgICAgY29tbWVudF9ibG9j
ay50ZXh0KGNvbW1lbnQpLnByZXBlbmQoJzxkaXYgY2xhc3M9InJlcGx5Ij5DbGljayB0byByZXBs
eTwvZGl2PicpOwogICAgICAgIGNvbW1lbnRfYmxvY2suZWFjaChob3ZlcmlmeSkuY2xpY2soYWRk
Q29tbWVudEZpZWxkKTsKICAgICAgICBpbnNlcnRDb21tZW50Rm9yKGxpbmUsIGNvbW1lbnRfYmxv
Y2spOwogICAgICB9CiAgICB9KTsKICB9CgogICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkg
ewogICAgJCgnLkxpbmUnKS5lYWNoKGlkaWZ5KG5leHRMaW5lSWQpKS5lYWNoKGhvdmVyaWZ5KS5j
bGljayhhZGRDb21tZW50RmllbGQpOwogICAgJChwcmV2aW91c19jb21tZW50cykuZWFjaChkaXNw
bGF5UHJldmlvdXNDb21tZW50cyk7CiAgICAkKGRvY3VtZW50LmJvZHkpLnByZXBlbmQoJzxkaXYg
aWQ9InRvb2xiYXIiPlJldmlldzogPHNlbGVjdD48b3B0aW9uPj88L29wdGlvbj48b3B0aW9uPis8
L29wdGlvbj48b3B0aW9uPi08L29wdGlvbj48L3NlbGVjdD4gPGJ1dHRvbiBpZD0icG9zdF9jb21t
ZW50cyI+UG9zdCBjb21tZW50czwvYnV0dG9uPjwvZGl2PicpOwogIH0pOwoKICAkKCcuY29tbWVu
dCB0ZXh0YXJlYScpLmxpdmUoJ2tleWRvd24nLCBmdW5jdGlvbigpIHsKICAgIHZhciBsaW5lX2lk
ID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNvbW1lbnQtZm9yJyk7CiAgICBjdXJyZW50X2NvbW1lbnRb
bGluZV9pZF0gPSAkKHRoaXMpLnZhbCgpOwogIH0pOwoKICAkKCcuY29tbWVudCAuZGVsZXRlJyku
bGl2ZSgnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgIHZhciBsaW5lX2lkID0gJCh0aGlzKS5wYXJl
bnRzVW50aWwoJy5jb21tZW50JykubmV4dCgpLmF0dHIoJ2RhdGEtY29tbWVudC1mb3InKTsKICAg
IGRlbGV0ZSBjdXJyZW50X2NvbW1lbnRbbGluZV9pZF07CiAgICB2YXIgbGluZSA9ICQoJyMnICsg
bGluZV9pZCkKICAgIGZpbmRDb21tZW50QmxvY2tGb3IobGluZSkucmVtb3ZlKCk7CiAgICBsaW5l
LnJlbW92ZUF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnKTsKICB9KTsKCiAgZnVuY3Rpb24gY29udGV4
dFNuaXBwZXRGb3IobGluZSkgewogICAgdmFyIGZpbGVfbmFtZSA9IGxpbmUucGFyZW50KCkucHJl
digpLnRleHQoKTsKICAgIHZhciBsaW5lX251bWJlciA9IGxpbmUuaGFzQ2xhc3MoJ3JlbW92ZScp
ID8gbGluZS5jaGlsZHJlbignLmZyb20nKS50ZXh0KCkgOiBsaW5lLmNoaWxkcmVuKCcudG8nKS50
ZXh0KCk7CgogICAgdmFyIGFjdGlvbiA9ICcgJzsKICAgIGlmIChsaW5lLmhhc0NsYXNzKCdhZGQn
KSkKICAgICAgYWN0aW9uID0gJysnOwogICAgZWxzZSBpZiAobGluZS5oYXNDbGFzcygncmVtb3Zl
JykpCiAgICAgIGFjdGlvbiA9ICctJzsKCiAgICB2YXIgdGV4dCA9IGxpbmUuY2hpbGRyZW4oJy50
ZXh0JykudGV4dCgpOwogICAgcmV0dXJuIGZpbGVfbmFtZSArICdcbicgKyBsaW5lX251bWJlciAr
ICc6JyArIGFjdGlvbiArIHRleHQ7CiAgfQoKICAkKCcjcG9zdF9jb21tZW50cycpLmxpdmUoJ2Ns
aWNrJywgZnVuY3Rpb24gKCkgewogICAgdmFyIGNvbW1lbnRzX2luX2NvbnRleHQgPSBbXQogICAg
Zm9yRWFjaExpbmUoZnVuY3Rpb24obGluZSkgewogICAgICBpZiAobGluZS5hdHRyKCdkYXRhLWhh
cy1jb21tZW50JykgIT0gJ3RydWUnKQogICAgICAgIHJldHVybjsKICAgICAgdmFyIHNuaXBwZXQg
PSBjb250ZXh0U25pcHBldEZvcihsaW5lKTsKICAgICAgdmFyIGNvbW1lbnQgPSBmaW5kQ29tbWVu
dEJsb2NrRm9yKGxpbmUpLmNoaWxkcmVuKCd0ZXh0YXJlYScpLnZhbCgpOwogICAgICBpZiAoY29t
bWVudCA9PSAnJykKICAgICAgICByZXR1cm47CiAgICAgIGNvbW1lbnRzX2luX2NvbnRleHQucHVz
aChzbmlwcGV0ICsgJ1xuJyArIGNvbW1lbnQpOwogICAgfSk7CiAgICBjb25zb2xlLmxvZyhjb21t
ZW50c19pbl9jb250ZXh0LmpvaW4oJ1xuXG4nKSk7CiAgfSk7Cn0pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65854</attachid>
            <date>2010-08-29 09:43:19 -0700</date>
            <delta_ts>2010-08-29 09:43:19 -0700</delta_ts>
            <desc>potentially ready</desc>
            <filename>code-review.js</filename>
            <type>application/x-javascript</type>
            <size>5496</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">KGZ1bmN0aW9uKCkgewogIHZhciBrRGVsZXRlSW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0
LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQUEzTkNTVlFJ
Q0FqYjRVL2dBQUFBbjFCTVZFWC8vLy80WW1UL2RubnlURS8vZG5uOWJuSDZhbTM0WW1UM1hXRDJX
VnYyVlZqc09qM29NRExsSnlyaklDTDJWVmp6VVZUd1IwcnVQVC9pSEI3MldWdndSMHJ6VVZUL2g0
ci9nb2IvZm9IL2VYdi9kbm4vY25UOWJuSC9iRzc2YW0zL1ptYjZaR2Y0WW1UM1hXRC9XRnYyV1Z2
L1ZGZjJWVmowVFZEeVRFLzJTa3p3UjBydlJFZnVRVVB1UFQvc09qM3JORGJvTURMbkxURGxKeXJq
SUNJaENwd25BQUFBTlhSU1RsTUFFU0lpTXpNek16TXpNek16TXpORVJFUkVSSGQzcXYvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8wbWdYcHdBQUFBSmNFaFpjd0FBSG5nQUFC
NTRBY3VyQXg4QUFBQVlkRVZZZEZOdlpuUjNZWEpsQUVGa2IySmxJRVpwY21WM2IzSnJjMCt6SDA0
QUFBQ1ZTVVJCVkJpVmJjelhGb0l3REFiZ3VIR2k0bXFiV3VnUVpJbmovWjlOU3VYQWhibEp2dVRr
QitqVjROZUhZOWU5ZysvTTJLU3hGS2RSWTBKd1dsdHhvbzcyZ3ZSTXhjeFRncXJNL1FwMlFXbWR0
K2tSSjVTeXpnQ0dhbzA5enczVE44eVduU05FZm8zTFZXZFRQSkl3cWRiV0N5TjVYQUJVZVppK052
VmlHMHRyZ0hlUlBnTTc3TzZsKy8wNEEremI5QUQrMUJmNmxnM2pRUUpKVGdBQUFBQkpSVTVFcmtK
Z2dnPT0nOwoKICBmdW5jdGlvbiBkZXRlcm1pbmVBdHRhY2htZW50SUQoKSB7CiAgICB0cnkgewog
ICAgICByZXR1cm4gL2lkPShcZCspLy5leGVjKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpWzFdCiAg
ICB9IGNhdGNoIChleCkgewogICAgICByZXR1cm47CiAgICB9CiAgfQoKICAvLyBBdHRlbXB0IHRv
IGFjdGl2YXRlIG9ubHkgaW4gdGhlICJGb3JtYXR0ZWQgRGlmZiIgY29udGV4dC4KICBpZiAod2lu
ZG93LnRvcCAhPSB3aW5kb3cpCiAgICByZXR1cm47CiAgdmFyIGF0dGFjaG1lbnRfaWQgPSBkZXRl
cm1pbmVBdHRhY2htZW50SUQoKTsKICBpZiAoIWF0dGFjaG1lbnRfaWQpCiAgICByZXR1cm47Cgog
IHZhciBwcmV2aW91c19jb21tZW50cyA9IFtdOwogIHZhciBjdXJyZW50X2NvbW1lbnQgPSB7fQog
IHZhciBuZXh0X2xpbmVfaWQgPSAwOwoKICBmdW5jdGlvbiBpZEZvckxpbmUobnVtYmVyKSB7CiAg
ICByZXR1cm4gJ2xpbmUnICsgbnVtYmVyOwogIH0KCiAgZnVuY3Rpb24gbmV4dExpbmVJRCgpIHsK
ICAgIHJldHVybiBpZEZvckxpbmUobmV4dF9saW5lX2lkKyspOwogIH0KCiAgZnVuY3Rpb24gZm9y
RWFjaExpbmUoY2FsbGJhY2spIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dF9saW5lX2lk
OyArK2kpIHsKICAgICAgY2FsbGJhY2soJCgnIycgKyBpZEZvckxpbmUoaSkpKTsKICAgIH0KICB9
CgogIGZ1bmN0aW9uIGlkaWZ5KCkgewogICAgdGhpcy5pZCA9IG5leHRMaW5lSUQoKTsKICB9Cgog
IGZ1bmN0aW9uIGhvdmVyaWZ5KCkgewogICAgJCh0aGlzKS5ob3ZlcihmdW5jdGlvbigpIHsKICAg
ICAgJCh0aGlzKS5hZGRDbGFzcygnaG90Jyk7CiAgICB9LAogICAgZnVuY3Rpb24gKCkgewogICAg
ICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdob3QnKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZmlu
ZENvbW1lbnRQb3NpdGlvbkZvcihsaW5lKSB7CiAgICB2YXIgcG9zaXRpb24gPSBsaW5lOwogICAg
d2hpbGUgKHBvc2l0aW9uLm5leHQoKSAmJiBwb3NpdGlvbi5uZXh0KCkuaGFzQ2xhc3MoJ3ByZXZp
b3VzX2NvbW1lbnQnKSkKICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7CiAgICByZXR1
cm4gcG9zaXRpb247CiAgfQoKICBmdW5jdGlvbiBmaW5kQ29tbWVudEJsb2NrRm9yKGxpbmUpIHsK
ICAgIHZhciBjb21tZW50X2Jsb2NrID0gZmluZENvbW1lbnRQb3NpdGlvbkZvcihsaW5lKS5uZXh0
KCk7CiAgICBpZiAoIWNvbW1lbnRfYmxvY2suaGFzQ2xhc3MoJ2NvbW1lbnQnKSkKICAgICAgcmV0
dXJuOwogICAgcmV0dXJuIGNvbW1lbnRfYmxvY2s7CiAgfQoKICBmdW5jdGlvbiBpbnNlcnRDb21t
ZW50Rm9yKGxpbmUsIGJsb2NrKSB7CiAgICBmaW5kQ29tbWVudFBvc2l0aW9uRm9yKGxpbmUpLmFm
dGVyKGJsb2NrKTsKICB9CgogIGZ1bmN0aW9uIGZvY3VzQ29tbWVudEZvcihsaW5lKSB7CiAgICBm
aW5kQ29tbWVudEJsb2NrRm9yKGxpbmUpLmNoaWxkcmVuKCd0ZXh0YXJlYScpLmZvY3VzKCk7CiAg
fQoKICBmdW5jdGlvbiBhZGRDb21tZW50RmllbGQoKSB7CiAgICB2YXIgaWQgPSAkKHRoaXMpLmF0
dHIoJ2RhdGEtY29tbWVudC1mb3InKTsKICAgIGlmICghaWQpCiAgICAgIGlkID0gdGhpcy5pZDsK
ICAgIHZhciBsaW5lID0gJCgnIycgKyBpZCk7CiAgICBpZiAobGluZS5hdHRyKCdkYXRhLWhhcy1j
b21tZW50JykpIHsKICAgICAgZm9jdXNDb21tZW50Rm9yKGxpbmUpOwogICAgICByZXR1cm47CiAg
ICB9CiAgICBsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnLCAndHJ1ZScpOwogICAgdmFyIGNv
bW1lbnRfYmxvY2sgPSAkKCc8ZGl2IGNsYXNzPSJjb21tZW50Ij48ZGl2IGNsYXNzPSJhY3Rpb25z
Ij48aW1nIGNsYXNzPSJkZWxldGUiIHNyYz0iJyArIGtEZWxldGVJbWFnZSArICciPjwvZGl2Pjx0
ZXh0YXJlYSBkYXRhLWNvbW1lbnQtZm9yPSInICsgaWQgKyAnIj48L3RleHRhcmVhPjwvZGl2Picp
OwogICAgaW5zZXJ0Q29tbWVudEZvcihsaW5lLCBjb21tZW50X2Jsb2NrKTsKICAgIGNvbW1lbnRf
YmxvY2suZWFjaChob3ZlcmlmeSk7CiAgICBjb21tZW50X2Jsb2NrLmNoaWxkcmVuKCd0ZXh0YXJl
YScpLmZvY3VzKCk7CiAgfQoKICBmdW5jdGlvbiBkaXNwbGF5UHJldmlvdXNDb21tZW50cygpIHsK
ICAgIGNvbW1lbnRfY29sbGVjdGlvbiA9IHRoaXM7CiAgICBmb3JFYWNoTGluZShmdW5jdGlvbihs
aW5lKSB7CiAgICAgIHZhciBsaW5lX2lkID0gbGluZS5hdHRyKCdpZCcpOwogICAgICB2YXIgY29t
bWVudCA9IGNvbW1lbnRfY29sbGVjdGlvbltsaW5lX2lkXTsKICAgICAgaWYgKGNvbW1lbnQpIHsK
ICAgICAgICB2YXIgY29tbWVudF9ibG9jayA9ICQoJzxkaXYgZGF0YS1jb21tZW50LWZvcj0iJyAr
IGxpbmVfaWQgKyAnIiBjbGFzcz0icHJldmlvdXNfY29tbWVudCI+PC9kaXY+Jyk7CiAgICAgICAg
Y29tbWVudF9ibG9jay50ZXh0KGNvbW1lbnQpLnByZXBlbmQoJzxkaXYgY2xhc3M9InJlcGx5Ij5D
bGljayB0byByZXBseTwvZGl2PicpOwogICAgICAgIGNvbW1lbnRfYmxvY2suZWFjaChob3Zlcmlm
eSkuY2xpY2soYWRkQ29tbWVudEZpZWxkKTsKICAgICAgICBpbnNlcnRDb21tZW50Rm9yKGxpbmUs
IGNvbW1lbnRfYmxvY2spOwogICAgICB9CiAgICB9KTsKICB9CgogICQoZG9jdW1lbnQpLnJlYWR5
KGZ1bmN0aW9uKCkgewogICAgJCgnLkxpbmUnKS5lYWNoKGlkaWZ5KS5lYWNoKGhvdmVyaWZ5KS5j
bGljayhhZGRDb21tZW50RmllbGQpOwogICAgJChwcmV2aW91c19jb21tZW50cykuZWFjaChkaXNw
bGF5UHJldmlvdXNDb21tZW50cyk7CiAgICAkKGRvY3VtZW50LmJvZHkpLnByZXBlbmQoJzxkaXYg
aWQ9InRvb2xiYXIiPjxidXR0b24gaWQ9InBvc3RfY29tbWVudHMiPlByZXBhcmUgY29tbWVudHM8
L2J1dHRvbj48L2Rpdj4nKTsKICAgICQoZG9jdW1lbnQuYm9keSkucHJlcGVuZCgnPGRpdiBpZD0i
Y29tbWVudF9mb3JtIiBjbGFzcz0iaW5hY3RpdmUiPjxkaXYgY2xhc3M9IndpbnRlciI+PC9kaXY+
PGRpdiBjbGFzcz0ibGlnaHRib3giPjxpZnJhbWUgc3JjPSJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9hdHRhY2htZW50LmNnaT9pZD0nICsgYXR0YWNobWVudF9pZCArICcmYWN0aW9uPXJldmlld2Zv
cm0iPjwvaWZyYW1lPjwvZGl2PjwvZGl2PicpOwogIH0pOwoKICAkKCcuY29tbWVudCB0ZXh0YXJl
YScpLmxpdmUoJ2tleWRvd24nLCBmdW5jdGlvbigpIHsKICAgIHZhciBsaW5lX2lkID0gJCh0aGlz
KS5hdHRyKCdkYXRhLWNvbW1lbnQtZm9yJyk7CiAgICBjdXJyZW50X2NvbW1lbnRbbGluZV9pZF0g
PSAkKHRoaXMpLnZhbCgpOwogIH0pOwoKICAkKCcuY29tbWVudCAuZGVsZXRlJykubGl2ZSgnY2xp
Y2snLCBmdW5jdGlvbigpIHsKICAgIHZhciBsaW5lX2lkID0gJCh0aGlzKS5wYXJlbnRzVW50aWwo
Jy5jb21tZW50JykubmV4dCgpLmF0dHIoJ2RhdGEtY29tbWVudC1mb3InKTsKICAgIGRlbGV0ZSBj
dXJyZW50X2NvbW1lbnRbbGluZV9pZF07CiAgICB2YXIgbGluZSA9ICQoJyMnICsgbGluZV9pZCkK
ICAgIGZpbmRDb21tZW50QmxvY2tGb3IobGluZSkucmVtb3ZlKCk7CiAgICBsaW5lLnJlbW92ZUF0
dHIoJ2RhdGEtaGFzLWNvbW1lbnQnKTsKICB9KTsKCiAgZnVuY3Rpb24gY29udGV4dFNuaXBwZXRG
b3IobGluZSkgewogICAgdmFyIGZpbGVfbmFtZSA9IGxpbmUucGFyZW50KCkucHJldigpLnRleHQo
KTsKICAgIHZhciBsaW5lX251bWJlciA9IGxpbmUuaGFzQ2xhc3MoJ3JlbW92ZScpID8gbGluZS5j
aGlsZHJlbignLmZyb20nKS50ZXh0KCkgOiBsaW5lLmNoaWxkcmVuKCcudG8nKS50ZXh0KCk7Cgog
ICAgdmFyIGFjdGlvbiA9ICcgJzsKICAgIGlmIChsaW5lLmhhc0NsYXNzKCdhZGQnKSkKICAgICAg
YWN0aW9uID0gJysnOwogICAgZWxzZSBpZiAobGluZS5oYXNDbGFzcygncmVtb3ZlJykpCiAgICAg
IGFjdGlvbiA9ICctJzsKCiAgICB2YXIgdGV4dCA9IGxpbmUuY2hpbGRyZW4oJy50ZXh0JykudGV4
dCgpOwogICAgcmV0dXJuICc+ICcgKyBmaWxlX25hbWUgKyAnOicgKyBsaW5lX251bWJlciArICdc
bj4gJyArIGFjdGlvbiArIHRleHQ7CiAgfQoKICAkKCcjY29tbWVudF9mb3JtIC53aW50ZXInKS5s
aXZlKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgJCgnI2NvbW1lbnRfZm9ybScpLmFkZENsYXNz
KCdpbmFjdGl2ZScpOwogIH0pOwoKICAkKCcjcG9zdF9jb21tZW50cycpLmxpdmUoJ2NsaWNrJywg
ZnVuY3Rpb24oKSB7CiAgICB2YXIgY29tbWVudHNfaW5fY29udGV4dCA9IFtdCiAgICBmb3JFYWNo
TGluZShmdW5jdGlvbihsaW5lKSB7CiAgICAgIGlmIChsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1l
bnQnKSAhPSAndHJ1ZScpCiAgICAgICAgcmV0dXJuOwogICAgICB2YXIgc25pcHBldCA9IGNvbnRl
eHRTbmlwcGV0Rm9yKGxpbmUpOwogICAgICB2YXIgY29tbWVudCA9IGZpbmRDb21tZW50QmxvY2tG
b3IobGluZSkuY2hpbGRyZW4oJ3RleHRhcmVhJykudmFsKCk7CiAgICAgIGlmIChjb21tZW50ID09
ICcnKQogICAgICAgIHJldHVybjsKICAgICAgY29tbWVudHNfaW5fY29udGV4dC5wdXNoKHNuaXBw
ZXQgKyAnXG4nICsgY29tbWVudCk7CiAgICB9KTsKICAgICQoJyNjb21tZW50X2Zvcm0nKS5yZW1v
dmVDbGFzcygnaW5hY3RpdmUnKTsKICAgIHZhciBjb21tZW50ID0gY29tbWVudHNfaW5fY29udGV4
dC5qb2luKCdcblxuJyk7CiAgICBjb25zb2xlLmxvZyhjb21tZW50KTsKICAgICQoJyNjb21tZW50
X2Zvcm0nKS5jaGlsZHJlbignaWZyYW1lJykuY29udGVudHMoKS5maW5kKCcjY29tbWVudCcpLnZh
bChjb21tZW50KTsKICB9KTsKfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65855</attachid>
            <date>2010-08-29 09:52:30 -0700</date>
            <delta_ts>2010-08-29 11:06:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44835-20100829095229.patch</filename>
            <type>text/plain</type>
            <size>156426</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IEJ1Z3NTaXRlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCdWdzU2l0ZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MzMxKQorKysgQnVnc1NpdGUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
d2Vzb21pZnkgcHJldHR5LWRpZmYgYmFzZWQgcmV2aWV3IHRvb2wKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0ODM1CisKKyAgICAgICAgVGhpcyBwYXRj
aCByZXBsYWNlcyB0aGUgZXhpc3RpbmcgaW5saW5lIGNvbW1lbnQgZmVhdHVyZSB3aXRoIGEgbmV3
CisgICAgICAgIGltcGxlbWVudGF0aW9uLiAgSG9wZWZ1bGx5IHRoZSBuZXcgaW1wbGVtZW50YXRp
b24gaXMgbW9yZSBhd2Vzb21lLgorICAgICAgICBJdCdzIG5vdCAxMDAlIGRvbmUgeWV0LCBidXQg
SSdkIGxpa2UgdG8gZ2V0IHRoaXMgdmVyc2lvbiBvdXQgdGhlcmUgdG8KKyAgICAgICAgc2VlIGhv
dyBpdCB3b3Jrcy4KKworICAgICAgICBVbmxpa2UgdGhlIHByZXZpb3VzIHZlcnNpb24gdGhpcyB2
ZXJzaW9uIHdvcmtzIHdpdGggdGhlICJGb3JtYXR0ZWQKKyAgICAgICAgRGlmZiIgbGluayBpbnN0
ZWFkIG9mIHRoZSAiUmV2aWV3IFBhdGNoIiBsaW5rLiAgSG9wZWZ1bGx5IHRoYXQgd2lsbAorICAg
ICAgICBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGZvbGtzIHdobyBsaWtlIHRoZSBvbGQgc3R5bGUg
cmV2aWV3LgorCisgICAgICAgICogUHJldHR5UGF0Y2gvUHJldHR5UGF0Y2gucmI6CisgICAgICAg
ICogY29kZS1yZXZpZXcuanM6IEFkZGVkLgorICAgICAgICAqIHByb3RvdHlwZS5qczogUmVtb3Zl
ZC4KKwogMjAxMC0wOC0xOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBCdWdzU2l0ZS9jb2RlLXJldmlldy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBCdWdzU2l0ZS9jb2RlLXJldmlldy5qcwkocmV2aXNpb24gMCkKKysr
IEJ1Z3NTaXRlL2NvZGUtcmV2aWV3LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MCBAQAor
KGZ1bmN0aW9uKCkgeworICB2YXIga0RlbGV0ZUltYWdlID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2
NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFBM05DU1ZR
SUNBamI0VS9nQUFBQW4xQk1WRVgvLy8vNFltVC9kbm55VEUvL2Rubjlibkg2YW0zNFltVDNYV0Qy
V1Z2MlZWanNPajNvTURMbEp5cmpJQ0wyVlZqelVWVHdSMHJ1UFQvaUhCNzJXVnZ3UjByelVWVC9o
NHIvZ29iL2ZvSC9lWHYvZG5uL2NuVDlibkgvYkc3NmFtMy9abWI2WkdmNFltVDNYV0QvV0Z2MldW
di9WRmYyVlZqMFRWRHlURS8yU2t6d1IwcnZSRWZ1UVVQdVBUL3NPajNyTkRib01ETG5MVERsSnly
aklDSWhDcHduQUFBQU5YUlNUbE1BRVNJaU16TXpNek16TXpNek16TkVSRVJFUkhkM3F2Ly8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMG1nWHB3QUFBQUpjRWhaY3dBQUhuZ0FB
QjU0QWN1ckF4OEFBQUFZZEVWWWRGTnZablIzWVhKbEFFRmtiMkpsSUVacGNtVjNiM0pyYzArekgw
NEFBQUNWU1VSQlZCaVZiY3pYRm9Jd0RBYmd1SEdpNG1xYld1Z1FaSW5qL1o5TlN1WEFoYmxKdnVU
a0IralY0TmVIWTllOWcrL00yS1N4RktkUlkwSndXbHR4b283Mmd2Uk14Y3hUZ3FyTS9RcDJRV21k
dCtrUko1U3l6Z0NHYW8wOXp3M1ROOHlXblNORWZvM0xWV2RUUEpJd3FkYldDeU41WEFCVWVaaStO
dlZpRzB0cmdIZVJQZ003N082bCsvMDRBK3piOUFEKzFCZjZsZzNqUVFKSlRnQUFBQUJKUlU1RXJr
SmdnZz09JzsKKworICBmdW5jdGlvbiBkZXRlcm1pbmVBdHRhY2htZW50SUQoKSB7CisgICAgdHJ5
IHsKKyAgICAgIHJldHVybiAvaWQ9KFxkKykvLmV4ZWMod2luZG93LmxvY2F0aW9uLnNlYXJjaClb
MV0KKyAgICB9IGNhdGNoIChleCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIC8v
IEF0dGVtcHQgdG8gYWN0aXZhdGUgb25seSBpbiB0aGUgIkZvcm1hdHRlZCBEaWZmIiBjb250ZXh0
LgorICBpZiAod2luZG93LnRvcCAhPSB3aW5kb3cpCisgICAgcmV0dXJuOworICB2YXIgYXR0YWNo
bWVudF9pZCA9IGRldGVybWluZUF0dGFjaG1lbnRJRCgpOworICBpZiAoIWF0dGFjaG1lbnRfaWQp
CisgICAgcmV0dXJuOworCisgIHZhciBwcmV2aW91c19jb21tZW50cyA9IFtdOworICB2YXIgY3Vy
cmVudF9jb21tZW50ID0ge30KKyAgdmFyIG5leHRfbGluZV9pZCA9IDA7CisKKyAgZnVuY3Rpb24g
aWRGb3JMaW5lKG51bWJlcikgeworICAgIHJldHVybiAnbGluZScgKyBudW1iZXI7CisgIH0KKwor
ICBmdW5jdGlvbiBuZXh0TGluZUlEKCkgeworICAgIHJldHVybiBpZEZvckxpbmUobmV4dF9saW5l
X2lkKyspOworICB9CisKKyAgZnVuY3Rpb24gZm9yRWFjaExpbmUoY2FsbGJhY2spIHsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG5leHRfbGluZV9pZDsgKytpKSB7CisgICAgICBjYWxsYmFjaygk
KCcjJyArIGlkRm9yTGluZShpKSkpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGlkaWZ5KCkg
eworICAgIHRoaXMuaWQgPSBuZXh0TGluZUlEKCk7CisgIH0KKworICBmdW5jdGlvbiBob3Zlcmlm
eSgpIHsKKyAgICAkKHRoaXMpLmhvdmVyKGZ1bmN0aW9uKCkgeworICAgICAgJCh0aGlzKS5hZGRD
bGFzcygnaG90Jyk7CisgICAgfSwKKyAgICBmdW5jdGlvbiAoKSB7CisgICAgICAkKHRoaXMpLnJl
bW92ZUNsYXNzKCdob3QnKTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbmRDb21tZW50
UG9zaXRpb25Gb3IobGluZSkgeworICAgIHZhciBwb3NpdGlvbiA9IGxpbmU7CisgICAgd2hpbGUg
KHBvc2l0aW9uLm5leHQoKSAmJiBwb3NpdGlvbi5uZXh0KCkuaGFzQ2xhc3MoJ3ByZXZpb3VzX2Nv
bW1lbnQnKSkKKyAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOworICAgIHJldHVybiBw
b3NpdGlvbjsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbmRDb21tZW50QmxvY2tGb3IobGluZSkgewor
ICAgIHZhciBjb21tZW50X2Jsb2NrID0gZmluZENvbW1lbnRQb3NpdGlvbkZvcihsaW5lKS5uZXh0
KCk7CisgICAgaWYgKCFjb21tZW50X2Jsb2NrLmhhc0NsYXNzKCdjb21tZW50JykpCisgICAgICBy
ZXR1cm47CisgICAgcmV0dXJuIGNvbW1lbnRfYmxvY2s7CisgIH0KKworICBmdW5jdGlvbiBpbnNl
cnRDb21tZW50Rm9yKGxpbmUsIGJsb2NrKSB7CisgICAgZmluZENvbW1lbnRQb3NpdGlvbkZvcihs
aW5lKS5hZnRlcihibG9jayk7CisgIH0KKworICBmdW5jdGlvbiBhZGRDb21tZW50RmllbGQoKSB7
CisgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNvbW1lbnQtZm9yJyk7CisgICAgaWYg
KCFpZCkKKyAgICAgIGlkID0gdGhpcy5pZDsKKyAgICB2YXIgbGluZSA9ICQoJyMnICsgaWQpOwor
ICAgIGlmIChsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnKSkKKyAgICAgIHJldHVybjsKKyAg
ICBsaW5lLmF0dHIoJ2RhdGEtaGFzLWNvbW1lbnQnLCAndHJ1ZScpOworICAgIHZhciBjb21tZW50
X2Jsb2NrID0gJCgnPGRpdiBjbGFzcz0iY29tbWVudCI+PGRpdiBjbGFzcz0iYWN0aW9ucyI+PGlt
ZyBjbGFzcz0iZGVsZXRlIiBzcmM9IicgKyBrRGVsZXRlSW1hZ2UgKyAnIj48L2Rpdj48dGV4dGFy
ZWEgZGF0YS1jb21tZW50LWZvcj0iJyArIGlkICsgJyI+PC90ZXh0YXJlYT48L2Rpdj4nKTsKKyAg
ICBpbnNlcnRDb21tZW50Rm9yKGxpbmUsIGNvbW1lbnRfYmxvY2spOworICAgIGNvbW1lbnRfYmxv
Y2suZWFjaChob3ZlcmlmeSk7CisgICAgY29tbWVudF9ibG9jay5jaGlsZHJlbigndGV4dGFyZWEn
KS5mb2N1cygpOworICB9CisKKyAgZnVuY3Rpb24gZGlzcGxheVByZXZpb3VzQ29tbWVudHMoKSB7
CisgICAgY29tbWVudF9jb2xsZWN0aW9uID0gdGhpczsKKyAgICBmb3JFYWNoTGluZShmdW5jdGlv
bihsaW5lKSB7CisgICAgICB2YXIgbGluZV9pZCA9IGxpbmUuYXR0cignaWQnKTsKKyAgICAgIHZh
ciBjb21tZW50ID0gY29tbWVudF9jb2xsZWN0aW9uW2xpbmVfaWRdOworICAgICAgaWYgKGNvbW1l
bnQpIHsKKyAgICAgICAgdmFyIGNvbW1lbnRfYmxvY2sgPSAkKCc8ZGl2IGRhdGEtY29tbWVudC1m
b3I9IicgKyBsaW5lX2lkICsgJyIgY2xhc3M9InByZXZpb3VzX2NvbW1lbnQiPjwvZGl2PicpOwor
ICAgICAgICBjb21tZW50X2Jsb2NrLnRleHQoY29tbWVudCkucHJlcGVuZCgnPGRpdiBjbGFzcz0i
cmVwbHkiPkNsaWNrIHRvIHJlcGx5PC9kaXY+Jyk7CisgICAgICAgIGNvbW1lbnRfYmxvY2suZWFj
aChob3ZlcmlmeSkuY2xpY2soYWRkQ29tbWVudEZpZWxkKTsKKyAgICAgICAgaW5zZXJ0Q29tbWVu
dEZvcihsaW5lLCBjb21tZW50X2Jsb2NrKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgICQo
ZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICQoJy5MaW5lJykuZWFjaChpZGlmeSku
ZWFjaChob3ZlcmlmeSkuY2xpY2soYWRkQ29tbWVudEZpZWxkKTsKKyAgICAkKHByZXZpb3VzX2Nv
bW1lbnRzKS5lYWNoKGRpc3BsYXlQcmV2aW91c0NvbW1lbnRzKTsKKyAgICAkKGRvY3VtZW50LmJv
ZHkpLnByZXBlbmQoJzxkaXYgaWQ9InRvb2xiYXIiPjxidXR0b24gaWQ9InBvc3RfY29tbWVudHMi
PlByZXBhcmUgY29tbWVudHM8L2J1dHRvbj48L2Rpdj4nKTsKKyAgICAkKGRvY3VtZW50LmJvZHkp
LnByZXBlbmQoJzxkaXYgaWQ9ImNvbW1lbnRfZm9ybSIgY2xhc3M9ImluYWN0aXZlIj48ZGl2IGNs
YXNzPSJ3aW50ZXIiPjwvZGl2PjxkaXYgY2xhc3M9ImxpZ2h0Ym94Ij48aWZyYW1lIHNyYz0iYXR0
YWNobWVudC5jZ2k/aWQ9JyArIGF0dGFjaG1lbnRfaWQgKyAnJmFjdGlvbj1yZXZpZXdmb3JtIj48
L2lmcmFtZT48L2Rpdj48L2Rpdj4nKTsKKyAgfSk7CisKKyAgJCgnLmNvbW1lbnQgdGV4dGFyZWEn
KS5saXZlKCdrZXlkb3duJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIGxpbmVfaWQgPSAkKHRoaXMp
LmF0dHIoJ2RhdGEtY29tbWVudC1mb3InKTsKKyAgICBjdXJyZW50X2NvbW1lbnRbbGluZV9pZF0g
PSAkKHRoaXMpLnZhbCgpOworICB9KTsKKworICAkKCcuY29tbWVudCAuZGVsZXRlJykubGl2ZSgn
Y2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGluZV9pZCA9ICQodGhpcykucGFyZW50c1Vu
dGlsKCcuY29tbWVudCcpLm5leHQoKS5hdHRyKCdkYXRhLWNvbW1lbnQtZm9yJyk7CisgICAgZGVs
ZXRlIGN1cnJlbnRfY29tbWVudFtsaW5lX2lkXTsKKyAgICB2YXIgbGluZSA9ICQoJyMnICsgbGlu
ZV9pZCkKKyAgICBmaW5kQ29tbWVudEJsb2NrRm9yKGxpbmUpLnJlbW92ZSgpOworICAgIGxpbmUu
cmVtb3ZlQXR0cignZGF0YS1oYXMtY29tbWVudCcpOworICB9KTsKKworICBmdW5jdGlvbiBjb250
ZXh0U25pcHBldEZvcihsaW5lKSB7CisgICAgdmFyIGZpbGVfbmFtZSA9IGxpbmUucGFyZW50KCku
cHJldigpLnRleHQoKTsKKyAgICB2YXIgbGluZV9udW1iZXIgPSBsaW5lLmhhc0NsYXNzKCdyZW1v
dmUnKSA/IGxpbmUuY2hpbGRyZW4oJy5mcm9tJykudGV4dCgpIDogbGluZS5jaGlsZHJlbignLnRv
JykudGV4dCgpOworCisgICAgdmFyIGFjdGlvbiA9ICcgJzsKKyAgICBpZiAobGluZS5oYXNDbGFz
cygnYWRkJykpCisgICAgICBhY3Rpb24gPSAnKyc7CisgICAgZWxzZSBpZiAobGluZS5oYXNDbGFz
cygncmVtb3ZlJykpCisgICAgICBhY3Rpb24gPSAnLSc7CisKKyAgICB2YXIgdGV4dCA9IGxpbmUu
Y2hpbGRyZW4oJy50ZXh0JykudGV4dCgpOworICAgIHJldHVybiAnPiAnICsgZmlsZV9uYW1lICsg
JzonICsgbGluZV9udW1iZXIgKyAnXG4+ICcgKyBhY3Rpb24gKyB0ZXh0OworICB9CisKKyAgJCgn
I2NvbW1lbnRfZm9ybSAud2ludGVyJykubGl2ZSgnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAk
KCcjY29tbWVudF9mb3JtJykuYWRkQ2xhc3MoJ2luYWN0aXZlJyk7CisgIH0pOworCisgICQoJyNw
b3N0X2NvbW1lbnRzJykubGl2ZSgnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29tbWVu
dHNfaW5fY29udGV4dCA9IFtdCisgICAgZm9yRWFjaExpbmUoZnVuY3Rpb24obGluZSkgeworICAg
ICAgaWYgKGxpbmUuYXR0cignZGF0YS1oYXMtY29tbWVudCcpICE9ICd0cnVlJykKKyAgICAgICAg
cmV0dXJuOworICAgICAgdmFyIHNuaXBwZXQgPSBjb250ZXh0U25pcHBldEZvcihsaW5lKTsKKyAg
ICAgIHZhciBjb21tZW50ID0gZmluZENvbW1lbnRCbG9ja0ZvcihsaW5lKS5jaGlsZHJlbigndGV4
dGFyZWEnKS52YWwoKTsKKyAgICAgIGlmIChjb21tZW50ID09ICcnKQorICAgICAgICByZXR1cm47
CisgICAgICBjb21tZW50c19pbl9jb250ZXh0LnB1c2goc25pcHBldCArICdcbicgKyBjb21tZW50
KTsKKyAgICB9KTsKKyAgICAkKCcjY29tbWVudF9mb3JtJykucmVtb3ZlQ2xhc3MoJ2luYWN0aXZl
Jyk7CisgICAgdmFyIGNvbW1lbnQgPSBjb21tZW50c19pbl9jb250ZXh0LmpvaW4oJ1xuXG4nKTsK
KyAgICBjb25zb2xlLmxvZyhjb21tZW50KTsKKyAgICAkKCcjY29tbWVudF9mb3JtJykuY2hpbGRy
ZW4oJ2lmcmFtZScpLmNvbnRlbnRzKCkuZmluZCgnI2NvbW1lbnQnKS52YWwoY29tbWVudCk7Cisg
IH0pOworfSkoKTsKSW5kZXg6IEJ1Z3NTaXRlL3Byb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBC
dWdzU2l0ZS9wcm90b3R5cGUuanMJKHJldmlzaW9uIDY2MzMxKQorKysgQnVnc1NpdGUvcHJvdG90
eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4NzQgKzAsMCBAQAotLyogIFByb3RvdHlwZSBK
YXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjYuMQotICogIChjKSAyMDA1LTIwMDkgU2Ft
IFN0ZXBoZW5zb24KLSAqCi0gKiAgUHJvdG90eXBlIGlzIGZyZWVseSBkaXN0cmlidXRhYmxlIHVu
ZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUgbGljZW5zZS4KLSAqICBGb3IgZGV0YWlscywg
c2VlIHRoZSBQcm90b3R5cGUgd2ViIHNpdGU6IGh0dHA6Ly93d3cucHJvdG90eXBlanMub3JnLwot
ICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12YXIgUHJvdG90eXBlID0gewotICBWZXJzaW9u
OiAnMS42LjEnLAotCi0gIEJyb3dzZXI6IChmdW5jdGlvbigpewotICAgIHZhciB1YSA9IG5hdmln
YXRvci51c2VyQWdlbnQ7Ci0gICAgdmFyIGlzT3BlcmEgPSBPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmNhbGwod2luZG93Lm9wZXJhKSA9PSAnW29iamVjdCBPcGVyYV0nOwotICAgIHJldHVybiB7
Ci0gICAgICBJRTogICAgICAgICAgICAgISF3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIWlzT3BlcmEs
Ci0gICAgICBPcGVyYTogICAgICAgICAgaXNPcGVyYSwKLSAgICAgIFdlYktpdDogICAgICAgICB1
YS5pbmRleE9mKCdBcHBsZVdlYktpdC8nKSA+IC0xLAotICAgICAgR2Vja286ICAgICAgICAgIHVh
LmluZGV4T2YoJ0dlY2tvJykgPiAtMSAmJiB1YS5pbmRleE9mKCdLSFRNTCcpID09PSAtMSwKLSAg
ICAgIE1vYmlsZVNhZmFyaTogICAvQXBwbGUuKk1vYmlsZS4qU2FmYXJpLy50ZXN0KHVhKQotICAg
IH0KLSAgfSkoKSwKLQotICBCcm93c2VyRmVhdHVyZXM6IHsKLSAgICBYUGF0aDogISFkb2N1bWVu
dC5ldmFsdWF0ZSwKLSAgICBTZWxlY3RvcnNBUEk6ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvciwK
LSAgICBFbGVtZW50RXh0ZW5zaW9uczogKGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGNvbnN0cnVj
dG9yID0gd2luZG93LkVsZW1lbnQgfHwgd2luZG93LkhUTUxFbGVtZW50OwotICAgICAgcmV0dXJu
ICEhKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7Ci0gICAgfSkoKSwKLSAg
ICBTcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zOiAoZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodHlw
ZW9mIHdpbmRvdy5IVE1MRGl2RWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
Ci0gICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKLSAgICAg
IHZhciBpc1N1cHBvcnRlZCA9IGZhbHNlOwotCi0gICAgICBpZiAoZGl2WydfX3Byb3RvX18nXSAm
JiAoZGl2WydfX3Byb3RvX18nXSAhPT0gZm9ybVsnX19wcm90b19fJ10pKSB7Ci0gICAgICAgIGlz
U3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZGl2ID0gZm9ybSA9IG51bGw7Ci0K
LSAgICAgIHJldHVybiBpc1N1cHBvcnRlZDsKLSAgICB9KSgpCi0gIH0sCi0KLSAgU2NyaXB0RnJh
Z21lbnQ6ICc8c2NyaXB0W14+XSo+KFtcXFNcXHNdKj8pPFwvc2NyaXB0PicsCi0gIEpTT05GaWx0
ZXI6IC9eXC9cKi1zZWN1cmUtKFtcc1xTXSopXCpcL1xzKiQvLAotCi0gIGVtcHR5RnVuY3Rpb246
IGZ1bmN0aW9uKCkgeyB9LAotICBLOiBmdW5jdGlvbih4KSB7IHJldHVybiB4IH0KLX07Ci0KLWlm
IChQcm90b3R5cGUuQnJvd3Nlci5Nb2JpbGVTYWZhcmkpCi0gIFByb3RvdHlwZS5Ccm93c2VyRmVh
dHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZhbHNlOwotCi0KLXZhciBBYnN0cmFj
dCA9IHsgfTsKLQotCi12YXIgVHJ5ID0gewotICB0aGVzZTogZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IHJldHVyblZhbHVlOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tp
XTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHJldHVyblZhbHVlID0gbGFtYmRhKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfSBjYXRjaCAoZSkgeyB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVy
blZhbHVlOwotICB9Ci19OwotCi0vKiBCYXNlZCBvbiBBbGV4IEFybmVsbCdzIGluaGVyaXRhbmNl
IGltcGxlbWVudGF0aW9uLiAqLwotCi12YXIgQ2xhc3MgPSAoZnVuY3Rpb24oKSB7Ci0gIGZ1bmN0
aW9uIHN1YmNsYXNzKCkge307Ci0gIGZ1bmN0aW9uIGNyZWF0ZSgpIHsKLSAgICB2YXIgcGFyZW50
ID0gbnVsbCwgcHJvcGVydGllcyA9ICRBKGFyZ3VtZW50cyk7Ci0gICAgaWYgKE9iamVjdC5pc0Z1
bmN0aW9uKHByb3BlcnRpZXNbMF0pKQotICAgICAgcGFyZW50ID0gcHJvcGVydGllcy5zaGlmdCgp
OwotCi0gICAgZnVuY3Rpb24ga2xhc3MoKSB7Ci0gICAgICB0aGlzLmluaXRpYWxpemUuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKLSAgICB9Ci0KLSAgICBPYmplY3QuZXh0ZW5kKGtsYXNzLCBDbGFz
cy5NZXRob2RzKTsKLSAgICBrbGFzcy5zdXBlcmNsYXNzID0gcGFyZW50OwotICAgIGtsYXNzLnN1
YmNsYXNzZXMgPSBbXTsKLQotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgIHN1YmNsYXNzLnByb3Rv
dHlwZSA9IHBhcmVudC5wcm90b3R5cGU7Ci0gICAgICBrbGFzcy5wcm90b3R5cGUgPSBuZXcgc3Vi
Y2xhc3M7Ci0gICAgICBwYXJlbnQuc3ViY2xhc3Nlcy5wdXNoKGtsYXNzKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspCi0gICAgICBrbGFz
cy5hZGRNZXRob2RzKHByb3BlcnRpZXNbaV0pOwotCi0gICAgaWYgKCFrbGFzcy5wcm90b3R5cGUu
aW5pdGlhbGl6ZSkKLSAgICAgIGtsYXNzLnByb3RvdHlwZS5pbml0aWFsaXplID0gUHJvdG90eXBl
LmVtcHR5RnVuY3Rpb247Ci0KLSAgICBrbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBrbGFz
czsKLSAgICByZXR1cm4ga2xhc3M7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRNZXRob2RzKHNvdXJj
ZSkgewotICAgIHZhciBhbmNlc3RvciAgID0gdGhpcy5zdXBlcmNsYXNzICYmIHRoaXMuc3VwZXJj
bGFzcy5wcm90b3R5cGU7Ci0gICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzb3VyY2Up
OwotCi0gICAgaWYgKCFPYmplY3Qua2V5cyh7IHRvU3RyaW5nOiB0cnVlIH0pLmxlbmd0aCkgewot
ICAgICAgaWYgKHNvdXJjZS50b1N0cmluZyAhPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKQot
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goInRvU3RyaW5nIik7Ci0gICAgICBpZiAoc291cmNlLnZh
bHVlT2YgIT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKQotICAgICAgICBwcm9wZXJ0aWVzLnB1
c2goInZhbHVlT2YiKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJv
cGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgdmFyIHByb3BlcnR5ID0g
cHJvcGVydGllc1tpXSwgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldOwotICAgICAgaWYgKGFuY2Vz
dG9yICYmIE9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSAmJgotICAgICAgICAgIHZhbHVlLmFyZ3Vt
ZW50TmFtZXMoKS5maXJzdCgpID09ICIkc3VwZXIiKSB7Ci0gICAgICAgIHZhciBtZXRob2QgPSB2
YWx1ZTsKLSAgICAgICAgdmFsdWUgPSAoZnVuY3Rpb24obSkgewotICAgICAgICAgIHJldHVybiBm
dW5jdGlvbigpIHsgcmV0dXJuIGFuY2VzdG9yW21dLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07
Ci0gICAgICAgIH0pKHByb3BlcnR5KS53cmFwKG1ldGhvZCk7Ci0KLSAgICAgICAgdmFsdWUudmFs
dWVPZiA9IG1ldGhvZC52YWx1ZU9mLmJpbmQobWV0aG9kKTsKLSAgICAgICAgdmFsdWUudG9TdHJp
bmcgPSBtZXRob2QudG9TdHJpbmcuYmluZChtZXRob2QpOwotICAgICAgfQotICAgICAgdGhpcy5w
cm90b3R5cGVbcHJvcGVydHldID0gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0KLQotICByZXR1cm4gewotICAgIGNyZWF0ZTogY3JlYXRlLAotICAgIE1ldGhvZHM6IHsKLSAg
ICAgIGFkZE1ldGhvZHM6IGFkZE1ldGhvZHMKLSAgICB9Ci0gIH07Ci19KSgpOwotKGZ1bmN0aW9u
KCkgewotCi0gIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwotCi0g
IGZ1bmN0aW9uIGV4dGVuZChkZXN0aW5hdGlvbiwgc291cmNlKSB7Ci0gICAgZm9yICh2YXIgcHJv
cGVydHkgaW4gc291cmNlKQotICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlW3By
b3BlcnR5XTsKLSAgICByZXR1cm4gZGVzdGluYXRpb247Ci0gIH0KLQotICBmdW5jdGlvbiBpbnNw
ZWN0KG9iamVjdCkgewotICAgIHRyeSB7Ci0gICAgICBpZiAoaXNVbmRlZmluZWQob2JqZWN0KSkg
cmV0dXJuICd1bmRlZmluZWQnOwotICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgcmV0dXJuICdu
dWxsJzsKLSAgICAgIHJldHVybiBvYmplY3QuaW5zcGVjdCA/IG9iamVjdC5pbnNwZWN0KCkgOiBT
dHJpbmcob2JqZWN0KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9m
IFJhbmdlRXJyb3IpIHJldHVybiAnLi4uJzsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gdG9KU09OKG9iamVjdCkgewotICAgIHZhciB0eXBlID0gdHlwZW9mIG9iamVj
dDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6Ci0gICAgICBj
YXNlICdmdW5jdGlvbic6Ci0gICAgICBjYXNlICd1bmtub3duJzogcmV0dXJuOwotICAgICAgY2Fz
ZSAnYm9vbGVhbic6IHJldHVybiBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAo
b2JqZWN0ID09PSBudWxsKSByZXR1cm4gJ251bGwnOwotICAgIGlmIChvYmplY3QudG9KU09OKSBy
ZXR1cm4gb2JqZWN0LnRvSlNPTigpOwotICAgIGlmIChpc0VsZW1lbnQob2JqZWN0KSkgcmV0dXJu
OwotCi0gICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmpl
Y3QpIHsKLSAgICAgIHZhciB2YWx1ZSA9IHRvSlNPTihvYmplY3RbcHJvcGVydHldKTsKLSAgICAg
IGlmICghaXNVbmRlZmluZWQodmFsdWUpKQotICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHku
dG9KU09OKCkgKyAnOiAnICsgdmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiAneycgKyByZXN1
bHRzLmpvaW4oJywgJykgKyAnfSc7Ci0gIH0KLQotICBmdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9i
amVjdCkgewotICAgIHJldHVybiAkSChvYmplY3QpLnRvUXVlcnlTdHJpbmcoKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIHRvSFRNTChvYmplY3QpIHsKLSAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC50
b0hUTUwgPyBvYmplY3QudG9IVE1MKCkgOiBTdHJpbmcuaW50ZXJwcmV0KG9iamVjdCk7Ci0gIH0K
LQotICBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAg
Zm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQotICAgICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5
KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3Qp
IHsKLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9iamVj
dCkKLSAgICAgIHJlc3VsdHMucHVzaChvYmplY3RbcHJvcGVydHldKTsKLSAgICByZXR1cm4gcmVz
dWx0czsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkgewotICAgIHJldHVybiBleHRl
bmQoeyB9LCBvYmplY3QpOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkgewot
ICAgIHJldHVybiAhIShvYmplY3QgJiYgb2JqZWN0Lm5vZGVUeXBlID09IDEpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gaXNBcnJheShvYmplY3QpIHsKLSAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2Jq
ZWN0KSA9PSAiW29iamVjdCBBcnJheV0iOwotICB9Ci0KLQotICBmdW5jdGlvbiBpc0hhc2gob2Jq
ZWN0KSB7Ci0gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEhhc2g7Ci0gIH0KLQotICBmdW5j
dGlvbiBpc0Z1bmN0aW9uKG9iamVjdCkgewotICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAi
ZnVuY3Rpb24iOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNTdHJpbmcob2JqZWN0KSB7Ci0gICAgcmV0
dXJuIF90b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gIltvYmplY3QgU3RyaW5nXSI7Ci0gIH0KLQot
ICBmdW5jdGlvbiBpc051bWJlcihvYmplY3QpIHsKLSAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwo
b2JqZWN0KSA9PSAiW29iamVjdCBOdW1iZXJdIjsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzVW5kZWZp
bmVkKG9iamVjdCkgewotICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIjsK
LSAgfQotCi0gIGV4dGVuZChPYmplY3QsIHsKLSAgICBleHRlbmQ6ICAgICAgICBleHRlbmQsCi0g
ICAgaW5zcGVjdDogICAgICAgaW5zcGVjdCwKLSAgICB0b0pTT046ICAgICAgICB0b0pTT04sCi0g
ICAgdG9RdWVyeVN0cmluZzogdG9RdWVyeVN0cmluZywKLSAgICB0b0hUTUw6ICAgICAgICB0b0hU
TUwsCi0gICAga2V5czogICAgICAgICAga2V5cywKLSAgICB2YWx1ZXM6ICAgICAgICB2YWx1ZXMs
Ci0gICAgY2xvbmU6ICAgICAgICAgY2xvbmUsCi0gICAgaXNFbGVtZW50OiAgICAgaXNFbGVtZW50
LAotICAgIGlzQXJyYXk6ICAgICAgIGlzQXJyYXksCi0gICAgaXNIYXNoOiAgICAgICAgaXNIYXNo
LAotICAgIGlzRnVuY3Rpb246ICAgIGlzRnVuY3Rpb24sCi0gICAgaXNTdHJpbmc6ICAgICAgaXNT
dHJpbmcsCi0gICAgaXNOdW1iZXI6ICAgICAgaXNOdW1iZXIsCi0gICAgaXNVbmRlZmluZWQ6ICAg
aXNVbmRlZmluZWQKLSAgfSk7Ci19KSgpOwotT2JqZWN0LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5
cGUsIChmdW5jdGlvbigpIHsKLSAgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOwot
Ci0gIGZ1bmN0aW9uIHVwZGF0ZShhcnJheSwgYXJncykgewotICAgIHZhciBhcnJheUxlbmd0aCA9
IGFycmF5Lmxlbmd0aCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7Ci0gICAgd2hpbGUgKGxlbmd0aC0t
KSBhcnJheVthcnJheUxlbmd0aCArIGxlbmd0aF0gPSBhcmdzW2xlbmd0aF07Ci0gICAgcmV0dXJu
IGFycmF5OwotICB9Ci0KLSAgZnVuY3Rpb24gbWVyZ2UoYXJyYXksIGFyZ3MpIHsKLSAgICBhcnJh
eSA9IHNsaWNlLmNhbGwoYXJyYXksIDApOwotICAgIHJldHVybiB1cGRhdGUoYXJyYXksIGFyZ3Mp
OwotICB9Ci0KLSAgZnVuY3Rpb24gYXJndW1lbnROYW1lcygpIHsKLSAgICB2YXIgbmFtZXMgPSB0
aGlzLnRvU3RyaW5nKCkubWF0Y2goL15bXHNcKF0qZnVuY3Rpb25bXihdKlwoKFteKV0qKVwpLylb
MV0KLSAgICAgIC5yZXBsYWNlKC9cL1wvLio/W1xyXG5dfFwvXCooPzoufFtcclxuXSkqP1wqXC8v
ZywgJycpCi0gICAgICAucmVwbGFjZSgvXHMrL2csICcnKS5zcGxpdCgnLCcpOwotICAgIHJldHVy
biBuYW1lcy5sZW5ndGggPT0gMSAmJiAhbmFtZXNbMF0gPyBbXSA6IG5hbWVzOwotICB9Ci0KLSAg
ZnVuY3Rpb24gYmluZChjb250ZXh0KSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyICYm
IE9iamVjdC5pc1VuZGVmaW5lZChhcmd1bWVudHNbMF0pKSByZXR1cm4gdGhpczsKLSAgICB2YXIg
X19tZXRob2QgPSB0aGlzLCBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBhID0gbWVyZ2UoYXJncywgYXJndW1lbnRzKTsK
LSAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShjb250ZXh0LCBhKTsKLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiBiaW5kQXNFdmVudExpc3RlbmVyKGNvbnRleHQpIHsKLSAgICB2YXIgX19tZXRo
b2QgPSB0aGlzLCBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJldHVybiBm
dW5jdGlvbihldmVudCkgewotICAgICAgdmFyIGEgPSB1cGRhdGUoW2V2ZW50IHx8IHdpbmRvdy5l
dmVudF0sIGFyZ3MpOwotICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KGNvbnRleHQsIGEpOwot
ICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGN1cnJ5KCkgewotICAgIGlmICghYXJndW1lbnRzLmxl
bmd0aCkgcmV0dXJuIHRoaXM7Ci0gICAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9IHNsaWNl
LmNhbGwoYXJndW1lbnRzLCAwKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIg
YSA9IG1lcmdlKGFyZ3MsIGFyZ3VtZW50cyk7Ci0gICAgICByZXR1cm4gX19tZXRob2QuYXBwbHko
dGhpcywgYSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZGVsYXkodGltZW91dCkgewotICAg
IHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0g
ICAgdGltZW91dCA9IHRpbWVvdXQgKiAxMDAwCi0gICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KF9fbWV0aG9kLCBhcmdz
KTsKLSAgICB9LCB0aW1lb3V0KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlZmVyKCkgewotICAgIHZh
ciBhcmdzID0gdXBkYXRlKFswLjAxXSwgYXJndW1lbnRzKTsKLSAgICByZXR1cm4gdGhpcy5kZWxh
eS5hcHBseSh0aGlzLCBhcmdzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHdyYXAod3JhcHBlcikgewot
ICAgIHZhciBfX21ldGhvZCA9IHRoaXM7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAg
dmFyIGEgPSB1cGRhdGUoW19fbWV0aG9kLmJpbmQodGhpcyldLCBhcmd1bWVudHMpOwotICAgICAg
cmV0dXJuIHdyYXBwZXIuYXBwbHkodGhpcywgYSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
bWV0aG9kaXplKCkgewotICAgIGlmICh0aGlzLl9tZXRob2RpemVkKSByZXR1cm4gdGhpcy5fbWV0
aG9kaXplZDsKLSAgICB2YXIgX19tZXRob2QgPSB0aGlzOwotICAgIHJldHVybiB0aGlzLl9tZXRo
b2RpemVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgYSA9IHVwZGF0ZShbdGhpc10sIGFyZ3Vt
ZW50cyk7Ci0gICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkobnVsbCwgYSk7Ci0gICAgfTsKLSAg
fQotCi0gIHJldHVybiB7Ci0gICAgYXJndW1lbnROYW1lczogICAgICAgYXJndW1lbnROYW1lcywK
LSAgICBiaW5kOiAgICAgICAgICAgICAgICBiaW5kLAotICAgIGJpbmRBc0V2ZW50TGlzdGVuZXI6
IGJpbmRBc0V2ZW50TGlzdGVuZXIsCi0gICAgY3Vycnk6ICAgICAgICAgICAgICAgY3VycnksCi0g
ICAgZGVsYXk6ICAgICAgICAgICAgICAgZGVsYXksCi0gICAgZGVmZXI6ICAgICAgICAgICAgICAg
ZGVmZXIsCi0gICAgd3JhcDogICAgICAgICAgICAgICAgd3JhcCwKLSAgICBtZXRob2RpemU6ICAg
ICAgICAgICBtZXRob2RpemUKLSAgfQotfSkoKSk7Ci0KLQotRGF0ZS5wcm90b3R5cGUudG9KU09O
ID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiAnIicgKyB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgKyAn
LScgKwotICAgICh0aGlzLmdldFVUQ01vbnRoKCkgKyAxKS50b1BhZGRlZFN0cmluZygyKSArICct
JyArCi0gICAgdGhpcy5nZXRVVENEYXRlKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnVCcgKwotICAg
IHRoaXMuZ2V0VVRDSG91cnMoKS50b1BhZGRlZFN0cmluZygyKSArICc6JyArCi0gICAgdGhpcy5n
ZXRVVENNaW51dGVzKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnOicgKwotICAgIHRoaXMuZ2V0VVRD
U2Vjb25kcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1oiJzsKLX07Ci0KLQotUmVnRXhwLnByb3Rv
dHlwZS5tYXRjaCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDsKLQotUmVnRXhwLmVzY2FwZSA9IGZ1
bmN0aW9uKHN0cikgewotICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvKFsuKis/Xj0hOiR7
fSgpfFtcXVwvXFxdKS9nLCAnXFwkMScpOwotfTsKLXZhciBQZXJpb2RpY2FsRXhlY3V0ZXIgPSBD
bGFzcy5jcmVhdGUoewotICBpbml0aWFsaXplOiBmdW5jdGlvbihjYWxsYmFjaywgZnJlcXVlbmN5
KSB7Ci0gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHRoaXMuZnJlcXVlbmN5ID0g
ZnJlcXVlbmN5OwotICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7Ci0KLSAgICB0
aGlzLnJlZ2lzdGVyQ2FsbGJhY2soKTsKLSAgfSwKLQotICByZWdpc3RlckNhbGxiYWNrOiBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5vblRpbWVyRXZlbnQu
YmluZCh0aGlzKSwgdGhpcy5mcmVxdWVuY3kgKiAxMDAwKTsKLSAgfSwKLQotICBleGVjdXRlOiBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmNhbGxiYWNrKHRoaXMpOwotICB9LAotCi0gIHN0b3A6IGZ1
bmN0aW9uKCkgewotICAgIGlmICghdGhpcy50aW1lcikgcmV0dXJuOwotICAgIGNsZWFySW50ZXJ2
YWwodGhpcy50aW1lcik7Ci0gICAgdGhpcy50aW1lciA9IG51bGw7Ci0gIH0sCi0KLSAgb25UaW1l
ckV2ZW50OiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMuY3VycmVudGx5RXhlY3V0aW5nKSB7
Ci0gICAgICB0cnkgewotICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IHRydWU7Ci0g
ICAgICAgIHRoaXMuZXhlY3V0ZSgpOwotICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9
IGZhbHNlOwotICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0
aW5nID0gZmFsc2U7Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19KTsK
LU9iamVjdC5leHRlbmQoU3RyaW5nLCB7Ci0gIGludGVycHJldDogZnVuY3Rpb24odmFsdWUpIHsK
LSAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKLSAgfSwKLSAg
c3BlY2lhbENoYXI6IHsKLSAgICAnXGInOiAnXFxiJywKLSAgICAnXHQnOiAnXFx0JywKLSAgICAn
XG4nOiAnXFxuJywKLSAgICAnXGYnOiAnXFxmJywKLSAgICAnXHInOiAnXFxyJywKLSAgICAnXFwn
OiAnXFxcXCcKLSAgfQotfSk7Ci0KLU9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgKGZ1
bmN0aW9uKCkgewotCi0gIGZ1bmN0aW9uIHByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCkg
ewotICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihyZXBsYWNlbWVudCkpIHJldHVybiByZXBsYWNl
bWVudDsKLSAgICB2YXIgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUocmVwbGFjZW1lbnQpOwotICAg
IHJldHVybiBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gdGVtcGxhdGUuZXZhbHVhdGUobWF0Y2gp
IH07Ci0gIH0KLQotICBmdW5jdGlvbiBnc3ViKHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7Ci0gICAg
dmFyIHJlc3VsdCA9ICcnLCBzb3VyY2UgPSB0aGlzLCBtYXRjaDsKLSAgICByZXBsYWNlbWVudCA9
IHByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7Ci0KLSAgICBpZiAoT2JqZWN0LmlzU3Ry
aW5nKHBhdHRlcm4pKQotICAgICAgcGF0dGVybiA9IFJlZ0V4cC5lc2NhcGUocGF0dGVybik7Ci0K
LSAgICBpZiAoIShwYXR0ZXJuLmxlbmd0aCB8fCBwYXR0ZXJuLnNvdXJjZSkpIHsKLSAgICAgIHJl
cGxhY2VtZW50ID0gcmVwbGFjZW1lbnQoJycpOwotICAgICAgcmV0dXJuIHJlcGxhY2VtZW50ICsg
c291cmNlLnNwbGl0KCcnKS5qb2luKHJlcGxhY2VtZW50KSArIHJlcGxhY2VtZW50OwotICAgIH0K
LQotICAgIHdoaWxlIChzb3VyY2UubGVuZ3RoID4gMCkgewotICAgICAgaWYgKG1hdGNoID0gc291
cmNlLm1hdGNoKHBhdHRlcm4pKSB7Ci0gICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc2xpY2UoMCwg
bWF0Y2guaW5kZXgpOwotICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmludGVycHJldChyZXBsYWNl
bWVudChtYXRjaCkpOwotICAgICAgICBzb3VyY2UgID0gc291cmNlLnNsaWNlKG1hdGNoLmluZGV4
ICsgbWF0Y2hbMF0ubGVuZ3RoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCArPSBz
b3VyY2UsIHNvdXJjZSA9ICcnOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9Ci0KLSAgZnVuY3Rpb24gc3ViKHBhdHRlcm4sIHJlcGxhY2VtZW50LCBjb3VudCkgewotICAg
IHJlcGxhY2VtZW50ID0gcHJlcGFyZVJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKLSAgICBjb3Vu
dCA9IE9iamVjdC5pc1VuZGVmaW5lZChjb3VudCkgPyAxIDogY291bnQ7Ci0KLSAgICByZXR1cm4g
dGhpcy5nc3ViKHBhdHRlcm4sIGZ1bmN0aW9uKG1hdGNoKSB7Ci0gICAgICBpZiAoLS1jb3VudCA8
IDApIHJldHVybiBtYXRjaFswXTsKLSAgICAgIHJldHVybiByZXBsYWNlbWVudChtYXRjaCk7Ci0g
ICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzY2FuKHBhdHRlcm4sIGl0ZXJhdG9yKSB7Ci0gICAg
dGhpcy5nc3ViKHBhdHRlcm4sIGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gU3RyaW5nKHRoaXMpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gdHJ1bmNhdGUobGVuZ3RoLCB0cnVuY2F0aW9uKSB7Ci0gICAgbGVu
Z3RoID0gbGVuZ3RoIHx8IDMwOwotICAgIHRydW5jYXRpb24gPSBPYmplY3QuaXNVbmRlZmluZWQo
dHJ1bmNhdGlvbikgPyAnLi4uJyA6IHRydW5jYXRpb247Ci0gICAgcmV0dXJuIHRoaXMubGVuZ3Ro
ID4gbGVuZ3RoID8KLSAgICAgIHRoaXMuc2xpY2UoMCwgbGVuZ3RoIC0gdHJ1bmNhdGlvbi5sZW5n
dGgpICsgdHJ1bmNhdGlvbiA6IFN0cmluZyh0aGlzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHN0cmlw
KCkgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8s
ICcnKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHN0cmlwVGFncygpIHsKLSAgICByZXR1cm4gdGhpcy5y
ZXBsYWNlKC88XHcrKFxzKygiW14iXSoifCdbXiddKid8W14+XSkrKT8+fDxcL1x3Kz4vZ2ksICcn
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHN0cmlwU2NyaXB0cygpIHsKLSAgICByZXR1cm4gdGhpcy5y
ZXBsYWNlKG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksICcnKTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGV4dHJhY3RTY3JpcHRzKCkgewotICAgIHZhciBtYXRjaEFsbCA9
IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyk7Ci0gICAgdmFyIG1h
dGNoT25lID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbScpOwotICAg
IHJldHVybiAodGhpcy5tYXRjaChtYXRjaEFsbCkgfHwgW10pLm1hcChmdW5jdGlvbihzY3JpcHRU
YWcpIHsKLSAgICAgIHJldHVybiAoc2NyaXB0VGFnLm1hdGNoKG1hdGNoT25lKSB8fCBbJycsICcn
XSlbMV07Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBldmFsU2NyaXB0cygpIHsKLSAgICBy
ZXR1cm4gdGhpcy5leHRyYWN0U2NyaXB0cygpLm1hcChmdW5jdGlvbihzY3JpcHQpIHsgcmV0dXJu
IGV2YWwoc2NyaXB0KSB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVzY2FwZUhUTUwoKSB7Ci0gICAg
cmV0dXJuIHRoaXMucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJl
cGxhY2UoLz4vZywnJmd0OycpOwotICB9Ci0KLSAgZnVuY3Rpb24gdW5lc2NhcGVIVE1MKCkgewot
ICAgIHJldHVybiB0aGlzLnN0cmlwVGFncygpLnJlcGxhY2UoLyZsdDsvZywnPCcpLnJlcGxhY2Uo
LyZndDsvZywnPicpLnJlcGxhY2UoLyZhbXA7L2csJyYnKTsKLSAgfQotCi0KLSAgZnVuY3Rpb24g
dG9RdWVyeVBhcmFtcyhzZXBhcmF0b3IpIHsKLSAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCku
bWF0Y2goLyhbXj8jXSopKCMuKik/JC8pOwotICAgIGlmICghbWF0Y2gpIHJldHVybiB7IH07Ci0K
LSAgICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHsgfSwg
ZnVuY3Rpb24oaGFzaCwgcGFpcikgewotICAgICAgaWYgKChwYWlyID0gcGFpci5zcGxpdCgnPScp
KVswXSkgewotICAgICAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXIuc2hpZnQo
KSk7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbignPScp
IDogcGFpclswXTsKLSAgICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkgdmFsdWUgPSBkZWNv
ZGVVUklDb21wb25lbnQodmFsdWUpOwotCi0gICAgICAgIGlmIChrZXkgaW4gaGFzaCkgewotICAg
ICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkoaGFzaFtrZXldKSkgaGFzaFtrZXldID0gW2hhc2hb
a2V5XV07Ci0gICAgICAgICAgaGFzaFtrZXldLnB1c2godmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaGFzaFtrZXldID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaGFzaDsK
LSAgICB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvQXJyYXkoKSB7Ci0gICAgcmV0dXJuIHRoaXMu
c3BsaXQoJycpOwotICB9Ci0KLSAgZnVuY3Rpb24gc3VjYygpIHsKLSAgICByZXR1cm4gdGhpcy5z
bGljZSgwLCB0aGlzLmxlbmd0aCAtIDEpICsKLSAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUodGhp
cy5jaGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0gMSkgKyAxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRp
bWVzKGNvdW50KSB7Ci0gICAgcmV0dXJuIGNvdW50IDwgMSA/ICcnIDogbmV3IEFycmF5KGNvdW50
ICsgMSkuam9pbih0aGlzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNhbWVsaXplKCkgewotICAgIHZh
ciBwYXJ0cyA9IHRoaXMuc3BsaXQoJy0nKSwgbGVuID0gcGFydHMubGVuZ3RoOwotICAgIGlmIChs
ZW4gPT0gMSkgcmV0dXJuIHBhcnRzWzBdOwotCi0gICAgdmFyIGNhbWVsaXplZCA9IHRoaXMuY2hh
ckF0KDApID09ICctJwotICAgICAgPyBwYXJ0c1swXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAr
IHBhcnRzWzBdLnN1YnN0cmluZygxKQotICAgICAgOiBwYXJ0c1swXTsKLQotICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgbGVuOyBpKyspCi0gICAgICBjYW1lbGl6ZWQgKz0gcGFydHNbaV0uY2hhckF0
KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0c1tpXS5zdWJzdHJpbmcoMSk7Ci0KLSAgICByZXR1cm4g
Y2FtZWxpemVkOwotICB9Ci0KLSAgZnVuY3Rpb24gY2FwaXRhbGl6ZSgpIHsKLSAgICByZXR1cm4g
dGhpcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuc3Vic3RyaW5nKDEpLnRvTG93ZXJD
YXNlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiB1bmRlcnNjb3JlKCkgewotICAgIHJldHVybiB0aGlz
LnJlcGxhY2UoLzo6L2csICcvJykKLSAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oW0EtWl0rKShb
QS1aXVthLXpdKS9nLCAnJDFfJDInKQotICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhbYS16XGRd
KShbQS1aXSkvZywgJyQxXyQyJykKLSAgICAgICAgICAgICAgIC5yZXBsYWNlKC8tL2csICdfJykK
LSAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpOwotICB9Ci0KLSAgZnVuY3Rpb24gZGFzaGVy
aXplKCkgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL18vZywgJy0nKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGluc3BlY3QodXNlRG91YmxlUXVvdGVzKSB7Ci0gICAgdmFyIGVzY2FwZWRTdHJpbmcg
PSB0aGlzLnJlcGxhY2UoL1tceDAwLVx4MWZcXF0vZywgZnVuY3Rpb24oY2hhcmFjdGVyKSB7Ci0g
ICAgICBpZiAoY2hhcmFjdGVyIGluIFN0cmluZy5zcGVjaWFsQ2hhcikgewotICAgICAgICByZXR1
cm4gU3RyaW5nLnNwZWNpYWxDaGFyW2NoYXJhY3Rlcl07Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
J1xcdTAwJyArIGNoYXJhY3Rlci5jaGFyQ29kZUF0KCkudG9QYWRkZWRTdHJpbmcoMiwgMTYpOwot
ICAgIH0pOwotICAgIGlmICh1c2VEb3VibGVRdW90ZXMpIHJldHVybiAnIicgKyBlc2NhcGVkU3Ry
aW5nLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwotICAgIHJldHVybiAiJyIgKyBlc2NhcGVk
U3RyaW5nLnJlcGxhY2UoLycvZywgJ1xcXCcnKSArICInIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHRv
SlNPTigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnNwZWN0KHRydWUpOwotICB9Ci0KLSAgZnVuY3Rp
b24gdW5maWx0ZXJKU09OKGZpbHRlcikgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2UoZmlsdGVy
IHx8IFByb3RvdHlwZS5KU09ORmlsdGVyLCAnJDEnKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzSlNP
TigpIHsKLSAgICB2YXIgc3RyID0gdGhpczsKLSAgICBpZiAoc3RyLmJsYW5rKCkpIHJldHVybiBm
YWxzZTsKLSAgICBzdHIgPSB0aGlzLnJlcGxhY2UoL1xcLi9nLCAnQCcpLnJlcGxhY2UoLyJbXiJc
XFxuXHJdKiIvZywgJycpOwotICAgIHJldHVybiAoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11
IFxuXHJcdF0qJC8pLnRlc3Qoc3RyKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGV2YWxKU09OKHNhbml0
aXplKSB7Ci0gICAgdmFyIGpzb24gPSB0aGlzLnVuZmlsdGVySlNPTigpOwotICAgIHRyeSB7Ci0g
ICAgICBpZiAoIXNhbml0aXplIHx8IGpzb24uaXNKU09OKCkpIHJldHVybiBldmFsKCcoJyArIGpz
b24gKyAnKScpOwotICAgIH0gY2F0Y2ggKGUpIHsgfQotICAgIHRocm93IG5ldyBTeW50YXhFcnJv
cignQmFkbHkgZm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhpcy5pbnNwZWN0KCkpOwotICB9Ci0K
LSAgZnVuY3Rpb24gaW5jbHVkZShwYXR0ZXJuKSB7Ci0gICAgcmV0dXJuIHRoaXMuaW5kZXhPZihw
YXR0ZXJuKSA+IC0xOwotICB9Ci0KLSAgZnVuY3Rpb24gc3RhcnRzV2l0aChwYXR0ZXJuKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuaW5kZXhPZihwYXR0ZXJuKSA9PT0gMDsKLSAgfQotCi0gIGZ1bmN0aW9u
IGVuZHNXaXRoKHBhdHRlcm4pIHsKLSAgICB2YXIgZCA9IHRoaXMubGVuZ3RoIC0gcGF0dGVybi5s
ZW5ndGg7Ci0gICAgcmV0dXJuIGQgPj0gMCAmJiB0aGlzLmxhc3RJbmRleE9mKHBhdHRlcm4pID09
PSBkOwotICB9Ci0KLSAgZnVuY3Rpb24gZW1wdHkoKSB7Ci0gICAgcmV0dXJuIHRoaXMgPT0gJyc7
Ci0gIH0KLQotICBmdW5jdGlvbiBibGFuaygpIHsKLSAgICByZXR1cm4gL15ccyokLy50ZXN0KHRo
aXMpOwotICB9Ci0KLSAgZnVuY3Rpb24gaW50ZXJwb2xhdGUob2JqZWN0LCBwYXR0ZXJuKSB7Ci0g
ICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSh0aGlzLCBwYXR0ZXJuKS5ldmFsdWF0ZShvYmplY3QpOwot
ICB9Ci0KLSAgcmV0dXJuIHsKLSAgICBnc3ViOiAgICAgICAgICAgZ3N1YiwKLSAgICBzdWI6ICAg
ICAgICAgICAgc3ViLAotICAgIHNjYW46ICAgICAgICAgICBzY2FuLAotICAgIHRydW5jYXRlOiAg
ICAgICB0cnVuY2F0ZSwKLSAgICBzdHJpcDogICAgICAgICAgU3RyaW5nLnByb3RvdHlwZS50cmlt
ID8gU3RyaW5nLnByb3RvdHlwZS50cmltIDogc3RyaXAsCi0gICAgc3RyaXBUYWdzOiAgICAgIHN0
cmlwVGFncywKLSAgICBzdHJpcFNjcmlwdHM6ICAgc3RyaXBTY3JpcHRzLAotICAgIGV4dHJhY3RT
Y3JpcHRzOiBleHRyYWN0U2NyaXB0cywKLSAgICBldmFsU2NyaXB0czogICAgZXZhbFNjcmlwdHMs
Ci0gICAgZXNjYXBlSFRNTDogICAgIGVzY2FwZUhUTUwsCi0gICAgdW5lc2NhcGVIVE1MOiAgIHVu
ZXNjYXBlSFRNTCwKLSAgICB0b1F1ZXJ5UGFyYW1zOiAgdG9RdWVyeVBhcmFtcywKLSAgICBwYXJz
ZVF1ZXJ5OiAgICAgdG9RdWVyeVBhcmFtcywKLSAgICB0b0FycmF5OiAgICAgICAgdG9BcnJheSwK
LSAgICBzdWNjOiAgICAgICAgICAgc3VjYywKLSAgICB0aW1lczogICAgICAgICAgdGltZXMsCi0g
ICAgY2FtZWxpemU6ICAgICAgIGNhbWVsaXplLAotICAgIGNhcGl0YWxpemU6ICAgICBjYXBpdGFs
aXplLAotICAgIHVuZGVyc2NvcmU6ICAgICB1bmRlcnNjb3JlLAotICAgIGRhc2hlcml6ZTogICAg
ICBkYXNoZXJpemUsCi0gICAgaW5zcGVjdDogICAgICAgIGluc3BlY3QsCi0gICAgdG9KU09OOiAg
ICAgICAgIHRvSlNPTiwKLSAgICB1bmZpbHRlckpTT046ICAgdW5maWx0ZXJKU09OLAotICAgIGlz
SlNPTjogICAgICAgICBpc0pTT04sCi0gICAgZXZhbEpTT046ICAgICAgIGV2YWxKU09OLAotICAg
IGluY2x1ZGU6ICAgICAgICBpbmNsdWRlLAotICAgIHN0YXJ0c1dpdGg6ICAgICBzdGFydHNXaXRo
LAotICAgIGVuZHNXaXRoOiAgICAgICBlbmRzV2l0aCwKLSAgICBlbXB0eTogICAgICAgICAgZW1w
dHksCi0gICAgYmxhbms6ICAgICAgICAgIGJsYW5rLAotICAgIGludGVycG9sYXRlOiAgICBpbnRl
cnBvbGF0ZQotICB9OwotfSkoKSk7Ci0KLXZhciBUZW1wbGF0ZSA9IENsYXNzLmNyZWF0ZSh7Ci0g
IGluaXRpYWxpemU6IGZ1bmN0aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7Ci0gICAgdGhpcy50ZW1w
bGF0ZSA9IHRlbXBsYXRlLnRvU3RyaW5nKCk7Ci0gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybiB8
fCBUZW1wbGF0ZS5QYXR0ZXJuOwotICB9LAotCi0gIGV2YWx1YXRlOiBmdW5jdGlvbihvYmplY3Qp
IHsKLSAgICBpZiAob2JqZWN0ICYmIE9iamVjdC5pc0Z1bmN0aW9uKG9iamVjdC50b1RlbXBsYXRl
UmVwbGFjZW1lbnRzKSkKLSAgICAgIG9iamVjdCA9IG9iamVjdC50b1RlbXBsYXRlUmVwbGFjZW1l
bnRzKCk7Ci0KLSAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5nc3ViKHRoaXMucGF0dGVybiwgZnVu
Y3Rpb24obWF0Y2gpIHsKLSAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIChtYXRjaFsx
XSArICcnKTsKLQotICAgICAgdmFyIGJlZm9yZSA9IG1hdGNoWzFdIHx8ICcnOwotICAgICAgaWYg
KGJlZm9yZSA9PSAnXFwnKSByZXR1cm4gbWF0Y2hbMl07Ci0KLSAgICAgIHZhciBjdHggPSBvYmpl
Y3QsIGV4cHIgPSBtYXRjaFszXTsKLSAgICAgIHZhciBwYXR0ZXJuID0gL14oW14uW10rfFxbKCg/
Oi4qP1teXFxdKT8pXF0pKFwufFxbfCQpLzsKLSAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKGV4
cHIpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBiZWZvcmU7Ci0KLSAgICAgIHdo
aWxlIChtYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgIHZhciBjb21wID0gbWF0Y2hbMV0uc3RhcnRz
V2l0aCgnWycpID8gbWF0Y2hbMl0ucmVwbGFjZSgvXFxcXF0vZywgJ10nKSA6IG1hdGNoWzFdOwot
ICAgICAgICBjdHggPSBjdHhbY29tcF07Ci0gICAgICAgIGlmIChudWxsID09IGN0eCB8fCAnJyA9
PSBtYXRjaFszXSkgYnJlYWs7Ci0gICAgICAgIGV4cHIgPSBleHByLnN1YnN0cmluZygnWycgPT0g
bWF0Y2hbM10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwotICAgICAgICBt
YXRjaCA9IHBhdHRlcm4uZXhlYyhleHByKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGJlZm9y
ZSArIFN0cmluZy5pbnRlcnByZXQoY3R4KTsKLSAgICB9KTsKLSAgfQotfSk7Ci1UZW1wbGF0ZS5Q
YXR0ZXJuID0gLyhefC58XHJ8XG4pKCNceyguKj8pXH0pLzsKLQotdmFyICRicmVhayA9IHsgfTsK
LQotdmFyIEVudW1lcmFibGUgPSAoZnVuY3Rpb24oKSB7Ci0gIGZ1bmN0aW9uIGVhY2goaXRlcmF0
b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgaW5kZXggPSAwOwotICAgIHRyeSB7Ci0gICAgICB0aGlz
Ll9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwg
dmFsdWUsIGluZGV4KyspOwotICAgICAgfSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgaWYg
KGUgIT0gJGJyZWFrKSB0aHJvdyBlOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0g
IGZ1bmN0aW9uIGVhY2hTbGljZShudW1iZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgdmFy
IGluZGV4ID0gLW51bWJlciwgc2xpY2VzID0gW10sIGFycmF5ID0gdGhpcy50b0FycmF5KCk7Ci0g
ICAgaWYgKG51bWJlciA8IDEpIHJldHVybiBhcnJheTsKLSAgICB3aGlsZSAoKGluZGV4ICs9IG51
bWJlcikgPCBhcnJheS5sZW5ndGgpCi0gICAgICBzbGljZXMucHVzaChhcnJheS5zbGljZShpbmRl
eCwgaW5kZXgrbnVtYmVyKSk7Ci0gICAgcmV0dXJuIHNsaWNlcy5jb2xsZWN0KGl0ZXJhdG9yLCBj
b250ZXh0KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFsbChpdGVyYXRvciwgY29udGV4dCkgewotICAg
IGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdCA9IHRy
dWU7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgcmVzdWx0
ID0gcmVzdWx0ICYmICEhaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpOwotICAg
ICAgaWYgKCFyZXN1bHQpIHRocm93ICRicmVhazsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotICB9Ci0KLSAgZnVuY3Rpb24gYW55KGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0
b3IgPSBpdGVyYXRvciB8fCBQcm90b3R5cGUuSzsKLSAgICB2YXIgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgaWYgKHJlc3VsdCA9
ICEhaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpKQotICAgICAgICB0aHJvdyAk
YnJlYWs7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGNv
bGxlY3QoaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFBy
b3RvdHlwZS5LOwotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9u
KHZhbHVlLCBpbmRleCkgewotICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yLmNhbGwoY29udGV4
dCwgdmFsdWUsIGluZGV4KSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH0KLQot
ICBmdW5jdGlvbiBkZXRlY3QoaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgcmVzdWx0Owot
ICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChpdGVyYXRv
ci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdmFsdWU7
Ci0gICAgICAgIHRocm93ICRicmVhazsKLSAgICAgIH0KLSAgICB9KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotICB9Ci0KLSAgZnVuY3Rpb24gZmluZEFsbChpdGVyYXRvciwgY29udGV4dCkgewotICAg
IHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkg
ewotICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSkKLSAgICAg
ICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAg
fQotCi0gIGZ1bmN0aW9uIGdyZXAoZmlsdGVyLCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0
ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdHMgPSBbXTsK
LQotICAgIGlmIChPYmplY3QuaXNTdHJpbmcoZmlsdGVyKSkKLSAgICAgIGZpbHRlciA9IG5ldyBS
ZWdFeHAoUmVnRXhwLmVzY2FwZShmaWx0ZXIpKTsKLQotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2
YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChmaWx0ZXIubWF0Y2godmFsdWUpKQotICAgICAgICBy
ZXN1bHRzLnB1c2goaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpKTsKLSAgICB9
KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfQotCi0gIGZ1bmN0aW9uIGluY2x1ZGUob2JqZWN0
KSB7Ci0gICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHRoaXMuaW5kZXhPZikpCi0gICAgICBpZiAo
dGhpcy5pbmRleE9mKG9iamVjdCkgIT0gLTEpIHJldHVybiB0cnVlOwotCi0gICAgdmFyIGZvdW5k
ID0gZmFsc2U7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAodmFs
dWUgPT0gb2JqZWN0KSB7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgdGhyb3cgJGJy
ZWFrOwotICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiBmb3VuZDsKLSAgfQotCi0gIGZ1bmN0
aW9uIGluR3JvdXBzT2YobnVtYmVyLCBmaWxsV2l0aCkgewotICAgIGZpbGxXaXRoID0gT2JqZWN0
LmlzVW5kZWZpbmVkKGZpbGxXaXRoKSA/IG51bGwgOiBmaWxsV2l0aDsKLSAgICByZXR1cm4gdGhp
cy5lYWNoU2xpY2UobnVtYmVyLCBmdW5jdGlvbihzbGljZSkgewotICAgICAgd2hpbGUoc2xpY2Uu
bGVuZ3RoIDwgbnVtYmVyKSBzbGljZS5wdXNoKGZpbGxXaXRoKTsKLSAgICAgIHJldHVybiBzbGlj
ZTsKLSAgICB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGluamVjdChtZW1vLCBpdGVyYXRvciwgY29u
dGV4dCkgewotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIG1l
bW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1lbW8sIHZhbHVlLCBpbmRleCk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIG1lbW87Ci0gIH0KLQotICBmdW5jdGlvbiBpbnZva2UobWV0aG9kKSB7Ci0g
ICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpLnNsaWNlKDEpOwotICAgIHJldHVybiB0aGlzLm1h
cChmdW5jdGlvbih2YWx1ZSkgewotICAgICAgcmV0dXJuIHZhbHVlW21ldGhvZF0uYXBwbHkodmFs
dWUsIGFyZ3MpOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gbWF4KGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQcm90b3R5cGUuSzsKLSAgICB2YXIg
cmVzdWx0OwotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIHZh
bHVlID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpOwotICAgICAgaWYgKHJl
c3VsdCA9PSBudWxsIHx8IHZhbHVlID49IHJlc3VsdCkKLSAgICAgICAgcmVzdWx0ID0gdmFsdWU7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9uIG1pbihpdGVy
YXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7
Ci0gICAgdmFyIHJlc3VsdDsKLSAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7
Ci0gICAgICB2YWx1ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KTsKLSAg
ICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCB2YWx1ZSA8IHJlc3VsdCkKLSAgICAgICAgcmVzdWx0
ID0gdmFsdWU7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9u
IHBhcnRpdGlvbihpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3Ig
fHwgUHJvdG90eXBlLks7Ci0gICAgdmFyIHRydWVzID0gW10sIGZhbHNlcyA9IFtdOwotICAgIHRo
aXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIChpdGVyYXRvci5jYWxsKGNv
bnRleHQsIHZhbHVlLCBpbmRleCkgPwotICAgICAgICB0cnVlcyA6IGZhbHNlcykucHVzaCh2YWx1
ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIFt0cnVlcywgZmFsc2VzXTsKLSAgfQotCi0gIGZ1bmN0
aW9uIHBsdWNrKHByb3BlcnR5KSB7Ci0gICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICB0aGlzLmVh
Y2goZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZVtwcm9wZXJ0eV0p
OwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHRzOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVqZWN0
KGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICB0aGlzLmVh
Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7Ci0gICAgICBpZiAoIWl0ZXJhdG9yLmNhbGwoY29u
dGV4dCwgdmFsdWUsIGluZGV4KSkKLSAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKLSAgICB9
KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfQotCi0gIGZ1bmN0aW9uIHNvcnRCeShpdGVyYXRv
ciwgY29udGV4dCkgewotICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgp
IHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAgY3JpdGVy
aWE6IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KQotICAgICAgfTsKLSAgICB9
KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVy
aWEsIGIgPSByaWdodC5jcml0ZXJpYTsKLSAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIg
PyAxIDogMDsKLSAgICB9KS5wbHVjaygndmFsdWUnKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvQXJy
YXkoKSB7Ci0gICAgcmV0dXJuIHRoaXMubWFwKCk7Ci0gIH0KLQotICBmdW5jdGlvbiB6aXAoKSB7
Ci0gICAgdmFyIGl0ZXJhdG9yID0gUHJvdG90eXBlLkssIGFyZ3MgPSAkQShhcmd1bWVudHMpOwot
ICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihhcmdzLmxhc3QoKSkpCi0gICAgICBpdGVyYXRvciA9
IGFyZ3MucG9wKCk7Ci0KLSAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10uY29uY2F0KGFyZ3Mp
Lm1hcCgkQSk7Ci0gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewot
ICAgICAgcmV0dXJuIGl0ZXJhdG9yKGNvbGxlY3Rpb25zLnBsdWNrKGluZGV4KSk7Ci0gICAgfSk7
Ci0gIH0KLQotICBmdW5jdGlvbiBzaXplKCkgewotICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5s
ZW5ndGg7Ci0gIH0KLQotICBmdW5jdGlvbiBpbnNwZWN0KCkgewotICAgIHJldHVybiAnIzxFbnVt
ZXJhYmxlOicgKyB0aGlzLnRvQXJyYXkoKS5pbnNwZWN0KCkgKyAnPic7Ci0gIH0KLQotCi0KLQot
Ci0KLQotCi0KLSAgcmV0dXJuIHsKLSAgICBlYWNoOiAgICAgICBlYWNoLAotICAgIGVhY2hTbGlj
ZTogIGVhY2hTbGljZSwKLSAgICBhbGw6ICAgICAgICBhbGwsCi0gICAgZXZlcnk6ICAgICAgYWxs
LAotICAgIGFueTogICAgICAgIGFueSwKLSAgICBzb21lOiAgICAgICBhbnksCi0gICAgY29sbGVj
dDogICAgY29sbGVjdCwKLSAgICBtYXA6ICAgICAgICBjb2xsZWN0LAotICAgIGRldGVjdDogICAg
IGRldGVjdCwKLSAgICBmaW5kQWxsOiAgICBmaW5kQWxsLAotICAgIHNlbGVjdDogICAgIGZpbmRB
bGwsCi0gICAgZmlsdGVyOiAgICAgZmluZEFsbCwKLSAgICBncmVwOiAgICAgICBncmVwLAotICAg
IGluY2x1ZGU6ICAgIGluY2x1ZGUsCi0gICAgbWVtYmVyOiAgICAgaW5jbHVkZSwKLSAgICBpbkdy
b3Vwc09mOiBpbkdyb3Vwc09mLAotICAgIGluamVjdDogICAgIGluamVjdCwKLSAgICBpbnZva2U6
ICAgICBpbnZva2UsCi0gICAgbWF4OiAgICAgICAgbWF4LAotICAgIG1pbjogICAgICAgIG1pbiwK
LSAgICBwYXJ0aXRpb246ICBwYXJ0aXRpb24sCi0gICAgcGx1Y2s6ICAgICAgcGx1Y2ssCi0gICAg
cmVqZWN0OiAgICAgcmVqZWN0LAotICAgIHNvcnRCeTogICAgIHNvcnRCeSwKLSAgICB0b0FycmF5
OiAgICB0b0FycmF5LAotICAgIGVudHJpZXM6ICAgIHRvQXJyYXksCi0gICAgemlwOiAgICAgICAg
emlwLAotICAgIHNpemU6ICAgICAgIHNpemUsCi0gICAgaW5zcGVjdDogICAgaW5zcGVjdCwKLSAg
ICBmaW5kOiAgICAgICBkZXRlY3QKLSAgfTsKLX0pKCk7Ci1mdW5jdGlvbiAkQShpdGVyYWJsZSkg
ewotICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107Ci0gIGlmICgndG9BcnJheScgaW4gT2JqZWN0
KGl0ZXJhYmxlKSkgcmV0dXJuIGl0ZXJhYmxlLnRvQXJyYXkoKTsKLSAgdmFyIGxlbmd0aCA9IGl0
ZXJhYmxlLmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0gIHdoaWxl
IChsZW5ndGgtLSkgcmVzdWx0c1tsZW5ndGhdID0gaXRlcmFibGVbbGVuZ3RoXTsKLSAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLWZ1bmN0aW9uICR3KHN0cmluZykgewotICBpZiAoIU9iamVjdC5pc1N0
cmluZyhzdHJpbmcpKSByZXR1cm4gW107Ci0gIHN0cmluZyA9IHN0cmluZy5zdHJpcCgpOwotICBy
ZXR1cm4gc3RyaW5nID8gc3RyaW5nLnNwbGl0KC9ccysvKSA6IFtdOwotfQotCi1BcnJheS5mcm9t
ID0gJEE7Ci0KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3Rv
dHlwZSwKLSAgICAgIHNsaWNlID0gYXJyYXlQcm90by5zbGljZSwKLSAgICAgIF9lYWNoID0gYXJy
YXlQcm90by5mb3JFYWNoOyAvLyB1c2UgbmF0aXZlIGJyb3dzZXIgSlMgMS42IGltcGxlbWVudGF0
aW9uIGlmIGF2YWlsYWJsZQotCi0gIGZ1bmN0aW9uIGVhY2goaXRlcmF0b3IpIHsKLSAgICBmb3Ig
KHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAg
IGl0ZXJhdG9yKHRoaXNbaV0pOwotICB9Ci0gIGlmICghX2VhY2gpIF9lYWNoID0gZWFjaDsKLQot
ICBmdW5jdGlvbiBjbGVhcigpIHsKLSAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgcmV0dXJuIHRo
aXM7Ci0gIH0KLQotICBmdW5jdGlvbiBmaXJzdCgpIHsKLSAgICByZXR1cm4gdGhpc1swXTsKLSAg
fQotCi0gIGZ1bmN0aW9uIGxhc3QoKSB7Ci0gICAgcmV0dXJuIHRoaXNbdGhpcy5sZW5ndGggLSAx
XTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXBhY3QoKSB7Ci0gICAgcmV0dXJuIHRoaXMuc2VsZWN0
KGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKLSAgICB9KTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGZsYXR0ZW4oKSB7Ci0gICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtd
LCBmdW5jdGlvbihhcnJheSwgdmFsdWUpIHsKLSAgICAgIGlmIChPYmplY3QuaXNBcnJheSh2YWx1
ZSkpCi0gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUuZmxhdHRlbigpKTsKLSAgICAg
IGFycmF5LnB1c2godmFsdWUpOwotICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0pOwotICB9Ci0K
LSAgZnVuY3Rpb24gd2l0aG91dCgpIHsKLSAgICB2YXIgdmFsdWVzID0gc2xpY2UuY2FsbChhcmd1
bWVudHMsIDApOwotICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewotICAg
ICAgcmV0dXJuICF2YWx1ZXMuaW5jbHVkZSh2YWx1ZSk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5j
dGlvbiByZXZlcnNlKGlubGluZSkgewotICAgIHJldHVybiAoaW5saW5lICE9PSBmYWxzZSA/IHRo
aXMgOiB0aGlzLnRvQXJyYXkoKSkuX3JldmVyc2UoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVuaXEo
c29ydGVkKSB7Ci0gICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJheSwgdmFs
dWUsIGluZGV4KSB7Ci0gICAgICBpZiAoMCA9PSBpbmRleCB8fCAoc29ydGVkID8gYXJyYXkubGFz
dCgpICE9IHZhbHVlIDogIWFycmF5LmluY2x1ZGUodmFsdWUpKSkKLSAgICAgICAgYXJyYXkucHVz
aCh2YWx1ZSk7Ci0gICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlv
biBpbnRlcnNlY3QoYXJyYXkpIHsKLSAgICByZXR1cm4gdGhpcy51bmlxKCkuZmluZEFsbChmdW5j
dGlvbihpdGVtKSB7Ci0gICAgICByZXR1cm4gYXJyYXkuZGV0ZWN0KGZ1bmN0aW9uKHZhbHVlKSB7
IHJldHVybiBpdGVtID09PSB2YWx1ZSB9KTsKLSAgICB9KTsKLSAgfQotCi0KLSAgZnVuY3Rpb24g
Y2xvbmUoKSB7Ci0gICAgcmV0dXJuIHNsaWNlLmNhbGwodGhpcywgMCk7Ci0gIH0KLQotICBmdW5j
dGlvbiBzaXplKCkgewotICAgIHJldHVybiB0aGlzLmxlbmd0aDsKLSAgfQotCi0gIGZ1bmN0aW9u
IGluc3BlY3QoKSB7Ci0gICAgcmV0dXJuICdbJyArIHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5q
b2luKCcsICcpICsgJ10nOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9KU09OKCkgewotICAgIHZhciBy
ZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVjdCkgewotICAgICAgdmFy
IHZhbHVlID0gT2JqZWN0LnRvSlNPTihvYmplY3QpOwotICAgICAgaWYgKCFPYmplY3QuaXNVbmRl
ZmluZWQodmFsdWUpKSByZXN1bHRzLnB1c2godmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiAn
WycgKyByZXN1bHRzLmpvaW4oJywgJykgKyAnXSc7Ci0gIH0KLQotICBmdW5jdGlvbiBpbmRleE9m
KGl0ZW0sIGkpIHsKLSAgICBpIHx8IChpID0gMCk7Ci0gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVu
Z3RoOwotICAgIGlmIChpIDwgMCkgaSA9IGxlbmd0aCArIGk7Ci0gICAgZm9yICg7IGkgPCBsZW5n
dGg7IGkrKykKLSAgICAgIGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTsKLSAgICByZXR1
cm4gLTE7Ci0gIH0KLQotICBmdW5jdGlvbiBsYXN0SW5kZXhPZihpdGVtLCBpKSB7Ci0gICAgaSA9
IGlzTmFOKGkpID8gdGhpcy5sZW5ndGggOiAoaSA8IDAgPyB0aGlzLmxlbmd0aCArIGkgOiBpKSAr
IDE7Ci0gICAgdmFyIG4gPSB0aGlzLnNsaWNlKDAsIGkpLnJldmVyc2UoKS5pbmRleE9mKGl0ZW0p
OwotICAgIHJldHVybiAobiA8IDApID8gbiA6IGkgLSBuIC0gMTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGNvbmNhdCgpIHsKLSAgICB2YXIgYXJyYXkgPSBzbGljZS5jYWxsKHRoaXMsIDApLCBpdGVtOwot
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgIGl0ZW0gPSBhcmd1bWVudHNbaV07Ci0gICAgICBpZiAoT2JqZWN0Lmlz
QXJyYXkoaXRlbSkgJiYgISgnY2FsbGVlJyBpbiBpdGVtKSkgewotICAgICAgICBmb3IgKHZhciBq
ID0gMCwgYXJyYXlMZW5ndGggPSBpdGVtLmxlbmd0aDsgaiA8IGFycmF5TGVuZ3RoOyBqKyspCi0g
ICAgICAgICAgYXJyYXkucHVzaChpdGVtW2pdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFy
cmF5LnB1c2goaXRlbSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLSAgfQot
Ci0gIE9iamVjdC5leHRlbmQoYXJyYXlQcm90bywgRW51bWVyYWJsZSk7Ci0KLSAgaWYgKCFhcnJh
eVByb3RvLl9yZXZlcnNlKQotICAgIGFycmF5UHJvdG8uX3JldmVyc2UgPSBhcnJheVByb3RvLnJl
dmVyc2U7Ci0KLSAgT2JqZWN0LmV4dGVuZChhcnJheVByb3RvLCB7Ci0gICAgX2VhY2g6ICAgICBf
ZWFjaCwKLSAgICBjbGVhcjogICAgIGNsZWFyLAotICAgIGZpcnN0OiAgICAgZmlyc3QsCi0gICAg
bGFzdDogICAgICBsYXN0LAotICAgIGNvbXBhY3Q6ICAgY29tcGFjdCwKLSAgICBmbGF0dGVuOiAg
IGZsYXR0ZW4sCi0gICAgd2l0aG91dDogICB3aXRob3V0LAotICAgIHJldmVyc2U6ICAgcmV2ZXJz
ZSwKLSAgICB1bmlxOiAgICAgIHVuaXEsCi0gICAgaW50ZXJzZWN0OiBpbnRlcnNlY3QsCi0gICAg
Y2xvbmU6ICAgICBjbG9uZSwKLSAgICB0b0FycmF5OiAgIGNsb25lLAotICAgIHNpemU6ICAgICAg
c2l6ZSwKLSAgICBpbnNwZWN0OiAgIGluc3BlY3QsCi0gICAgdG9KU09OOiAgICB0b0pTT04KLSAg
fSk7Ci0KLSAgdmFyIENPTkNBVF9BUkdVTUVOVFNfQlVHR1kgPSAoZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIFtdLmNvbmNhdChhcmd1bWVudHMpWzBdWzBdICE9PSAxOwotICB9KSgxLDIpCi0KLSAg
aWYgKENPTkNBVF9BUkdVTUVOVFNfQlVHR1kpIGFycmF5UHJvdG8uY29uY2F0ID0gY29uY2F0Owot
Ci0gIGlmICghYXJyYXlQcm90by5pbmRleE9mKSBhcnJheVByb3RvLmluZGV4T2YgPSBpbmRleE9m
OwotICBpZiAoIWFycmF5UHJvdG8ubGFzdEluZGV4T2YpIGFycmF5UHJvdG8ubGFzdEluZGV4T2Yg
PSBsYXN0SW5kZXhPZjsKLX0pKCk7Ci1mdW5jdGlvbiAkSChvYmplY3QpIHsKLSAgcmV0dXJuIG5l
dyBIYXNoKG9iamVjdCk7Ci19OwotCi12YXIgSGFzaCA9IENsYXNzLmNyZWF0ZShFbnVtZXJhYmxl
LCAoZnVuY3Rpb24oKSB7Ci0gIGZ1bmN0aW9uIGluaXRpYWxpemUob2JqZWN0KSB7Ci0gICAgdGhp
cy5fb2JqZWN0ID0gT2JqZWN0LmlzSGFzaChvYmplY3QpID8gb2JqZWN0LnRvT2JqZWN0KCkgOiBP
YmplY3QuY2xvbmUob2JqZWN0KTsKLSAgfQotCi0gIGZ1bmN0aW9uIF9lYWNoKGl0ZXJhdG9yKSB7
Ci0gICAgZm9yICh2YXIga2V5IGluIHRoaXMuX29iamVjdCkgewotICAgICAgdmFyIHZhbHVlID0g
dGhpcy5fb2JqZWN0W2tleV0sIHBhaXIgPSBba2V5LCB2YWx1ZV07Ci0gICAgICBwYWlyLmtleSA9
IGtleTsKLSAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKLSAgICAgIGl0ZXJhdG9yKHBhaXIpOwot
ICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7Ci0gICAgcmV0dXJuIHRo
aXMuX29iamVjdFtrZXldID0gdmFsdWU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXQoa2V5KSB7Ci0g
ICAgaWYgKHRoaXMuX29iamVjdFtrZXldICE9PSBPYmplY3QucHJvdG90eXBlW2tleV0pCi0gICAg
ICByZXR1cm4gdGhpcy5fb2JqZWN0W2tleV07Ci0gIH0KLQotICBmdW5jdGlvbiB1bnNldChrZXkp
IHsKLSAgICB2YXIgdmFsdWUgPSB0aGlzLl9vYmplY3Rba2V5XTsKLSAgICBkZWxldGUgdGhpcy5f
b2JqZWN0W2tleV07Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9PYmpl
Y3QoKSB7Ci0gICAgcmV0dXJuIE9iamVjdC5jbG9uZSh0aGlzLl9vYmplY3QpOwotICB9Ci0KLSAg
ZnVuY3Rpb24ga2V5cygpIHsKLSAgICByZXR1cm4gdGhpcy5wbHVjaygna2V5Jyk7Ci0gIH0KLQot
ICBmdW5jdGlvbiB2YWx1ZXMoKSB7Ci0gICAgcmV0dXJuIHRoaXMucGx1Y2soJ3ZhbHVlJyk7Ci0g
IH0KLQotICBmdW5jdGlvbiBpbmRleCh2YWx1ZSkgewotICAgIHZhciBtYXRjaCA9IHRoaXMuZGV0
ZWN0KGZ1bmN0aW9uKHBhaXIpIHsKLSAgICAgIHJldHVybiBwYWlyLnZhbHVlID09PSB2YWx1ZTsK
LSAgICB9KTsKLSAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2gua2V5OwotICB9Ci0KLSAgZnVuY3Rp
b24gbWVyZ2Uob2JqZWN0KSB7Ci0gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS51cGRhdGUob2JqZWN0
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QpIHsKLSAgICByZXR1cm4gbmV3IEhh
c2gob2JqZWN0KS5pbmplY3QodGhpcywgZnVuY3Rpb24ocmVzdWx0LCBwYWlyKSB7Ci0gICAgICBy
ZXN1bHQuc2V0KHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSB7Ci0gICAg
aWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybiBrZXk7Ci0gICAgcmV0dXJuIGtl
eSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcuaW50ZXJwcmV0KHZhbHVlKSk7Ci0g
IH0KLQotICBmdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKCkgewotICAgIHJldHVybiB0aGlzLmluamVj
dChbXSwgZnVuY3Rpb24ocmVzdWx0cywgcGFpcikgewotICAgICAgdmFyIGtleSA9IGVuY29kZVVS
SUNvbXBvbmVudChwYWlyLmtleSksIHZhbHVlcyA9IHBhaXIudmFsdWU7Ci0KLSAgICAgIGlmICh2
YWx1ZXMgJiYgdHlwZW9mIHZhbHVlcyA9PSAnb2JqZWN0JykgewotICAgICAgICBpZiAoT2JqZWN0
LmlzQXJyYXkodmFsdWVzKSkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0cy5jb25jYXQodmFsdWVz
Lm1hcCh0b1F1ZXJ5UGFpci5jdXJyeShrZXkpKSk7Ci0gICAgICB9IGVsc2UgcmVzdWx0cy5wdXNo
KHRvUXVlcnlQYWlyKGtleSwgdmFsdWVzKSk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9
KS5qb2luKCcmJyk7Ci0gIH0KLQotICBmdW5jdGlvbiBpbnNwZWN0KCkgewotICAgIHJldHVybiAn
IzxIYXNoOnsnICsgdGhpcy5tYXAoZnVuY3Rpb24ocGFpcikgewotICAgICAgcmV0dXJuIHBhaXIu
bWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCc6ICcpOwotICAgIH0pLmpvaW4oJywgJykgKyAnfT4n
OwotICB9Ci0KLSAgZnVuY3Rpb24gdG9KU09OKCkgewotICAgIHJldHVybiBPYmplY3QudG9KU09O
KHRoaXMudG9PYmplY3QoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBjbG9uZSgpIHsKLSAgICByZXR1
cm4gbmV3IEhhc2godGhpcyk7Ci0gIH0KLQotICByZXR1cm4gewotICAgIGluaXRpYWxpemU6ICAg
ICAgICAgICAgIGluaXRpYWxpemUsCi0gICAgX2VhY2g6ICAgICAgICAgICAgICAgICAgX2VhY2gs
Ci0gICAgc2V0OiAgICAgICAgICAgICAgICAgICAgc2V0LAotICAgIGdldDogICAgICAgICAgICAg
ICAgICAgIGdldCwKLSAgICB1bnNldDogICAgICAgICAgICAgICAgICB1bnNldCwKLSAgICB0b09i
amVjdDogICAgICAgICAgICAgICB0b09iamVjdCwKLSAgICB0b1RlbXBsYXRlUmVwbGFjZW1lbnRz
OiB0b09iamVjdCwKLSAgICBrZXlzOiAgICAgICAgICAgICAgICAgICBrZXlzLAotICAgIHZhbHVl
czogICAgICAgICAgICAgICAgIHZhbHVlcywKLSAgICBpbmRleDogICAgICAgICAgICAgICAgICBp
bmRleCwKLSAgICBtZXJnZTogICAgICAgICAgICAgICAgICBtZXJnZSwKLSAgICB1cGRhdGU6ICAg
ICAgICAgICAgICAgICB1cGRhdGUsCi0gICAgdG9RdWVyeVN0cmluZzogICAgICAgICAgdG9RdWVy
eVN0cmluZywKLSAgICBpbnNwZWN0OiAgICAgICAgICAgICAgICBpbnNwZWN0LAotICAgIHRvSlNP
TjogICAgICAgICAgICAgICAgIHRvSlNPTiwKLSAgICBjbG9uZTogICAgICAgICAgICAgICAgICBj
bG9uZQotICB9OwotfSkoKSk7Ci0KLUhhc2guZnJvbSA9ICRIOwotT2JqZWN0LmV4dGVuZChOdW1i
ZXIucHJvdG90eXBlLCAoZnVuY3Rpb24oKSB7Ci0gIGZ1bmN0aW9uIHRvQ29sb3JQYXJ0KCkgewot
ICAgIHJldHVybiB0aGlzLnRvUGFkZGVkU3RyaW5nKDIsIDE2KTsKLSAgfQotCi0gIGZ1bmN0aW9u
IHN1Y2MoKSB7Ci0gICAgcmV0dXJuIHRoaXMgKyAxOwotICB9Ci0KLSAgZnVuY3Rpb24gdGltZXMo
aXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICAkUigwLCB0aGlzLCB0cnVlKS5lYWNoKGl0ZXJhdG9y
LCBjb250ZXh0KTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvUGFkZGVk
U3RyaW5nKGxlbmd0aCwgcmFkaXgpIHsKLSAgICB2YXIgc3RyaW5nID0gdGhpcy50b1N0cmluZyhy
YWRpeCB8fCAxMCk7Ci0gICAgcmV0dXJuICcwJy50aW1lcyhsZW5ndGggLSBzdHJpbmcubGVuZ3Ro
KSArIHN0cmluZzsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvSlNPTigpIHsKLSAgICByZXR1cm4gaXNG
aW5pdGUodGhpcykgPyB0aGlzLnRvU3RyaW5nKCkgOiAnbnVsbCc7Ci0gIH0KLQotICBmdW5jdGlv
biBhYnMoKSB7Ci0gICAgcmV0dXJuIE1hdGguYWJzKHRoaXMpOwotICB9Ci0KLSAgZnVuY3Rpb24g
cm91bmQoKSB7Ci0gICAgcmV0dXJuIE1hdGgucm91bmQodGhpcyk7Ci0gIH0KLQotICBmdW5jdGlv
biBjZWlsKCkgewotICAgIHJldHVybiBNYXRoLmNlaWwodGhpcyk7Ci0gIH0KLQotICBmdW5jdGlv
biBmbG9vcigpIHsKLSAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzKTsKLSAgfQotCi0gIHJldHVy
biB7Ci0gICAgdG9Db2xvclBhcnQ6ICAgIHRvQ29sb3JQYXJ0LAotICAgIHN1Y2M6ICAgICAgICAg
ICBzdWNjLAotICAgIHRpbWVzOiAgICAgICAgICB0aW1lcywKLSAgICB0b1BhZGRlZFN0cmluZzog
dG9QYWRkZWRTdHJpbmcsCi0gICAgdG9KU09OOiAgICAgICAgIHRvSlNPTiwKLSAgICBhYnM6ICAg
ICAgICAgICAgYWJzLAotICAgIHJvdW5kOiAgICAgICAgICByb3VuZCwKLSAgICBjZWlsOiAgICAg
ICAgICAgY2VpbCwKLSAgICBmbG9vcjogICAgICAgICAgZmxvb3IKLSAgfTsKLX0pKCkpOwotCi1m
dW5jdGlvbiAkUihzdGFydCwgZW5kLCBleGNsdXNpdmUpIHsKLSAgcmV0dXJuIG5ldyBPYmplY3RS
YW5nZShzdGFydCwgZW5kLCBleGNsdXNpdmUpOwotfQotCi12YXIgT2JqZWN0UmFuZ2UgPSBDbGFz
cy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkgewotICBmdW5jdGlvbiBpbml0aWFsaXpl
KHN0YXJ0LCBlbmQsIGV4Y2x1c2l2ZSkgewotICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKLSAgICB0
aGlzLmVuZCA9IGVuZDsKLSAgICB0aGlzLmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKLSAgfQotCi0g
IGZ1bmN0aW9uIF9lYWNoKGl0ZXJhdG9yKSB7Ci0gICAgdmFyIHZhbHVlID0gdGhpcy5zdGFydDsK
LSAgICB3aGlsZSAodGhpcy5pbmNsdWRlKHZhbHVlKSkgewotICAgICAgaXRlcmF0b3IodmFsdWUp
OwotICAgICAgdmFsdWUgPSB2YWx1ZS5zdWNjKCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
aW5jbHVkZSh2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA8IHRoaXMuc3RhcnQpCi0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXMuZXhjbHVzaXZlKQotICAgICAgcmV0dXJuIHZhbHVlIDwg
dGhpcy5lbmQ7Ci0gICAgcmV0dXJuIHZhbHVlIDw9IHRoaXMuZW5kOwotICB9Ci0KLSAgcmV0dXJu
IHsKLSAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLAotICAgIF9lYWNoOiAgICAgIF9lYWNoLAot
ICAgIGluY2x1ZGU6ICAgIGluY2x1ZGUKLSAgfTsKLX0pKCkpOwotCi0KLQotdmFyIEFqYXggPSB7
Ci0gIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFRyeS50aGVzZSgKLSAg
ICAgIGZ1bmN0aW9uKCkge3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKX0sCi0gICAgICBmdW5j
dGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyl9LAotICAg
ICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRU
UCcpfQotICAgICkgfHwgZmFsc2U7Ci0gIH0sCi0KLSAgYWN0aXZlUmVxdWVzdENvdW50OiAwCi19
OwotCi1BamF4LlJlc3BvbmRlcnMgPSB7Ci0gIHJlc3BvbmRlcnM6IFtdLAotCi0gIF9lYWNoOiBm
dW5jdGlvbihpdGVyYXRvcikgewotICAgIHRoaXMucmVzcG9uZGVycy5fZWFjaChpdGVyYXRvcik7
Ci0gIH0sCi0KLSAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlcikgewotICAgIGlmICghdGhp
cy5pbmNsdWRlKHJlc3BvbmRlcikpCi0gICAgICB0aGlzLnJlc3BvbmRlcnMucHVzaChyZXNwb25k
ZXIpOwotICB9LAotCi0gIHVucmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlcikgewotICAgIHRo
aXMucmVzcG9uZGVycyA9IHRoaXMucmVzcG9uZGVycy53aXRob3V0KHJlc3BvbmRlcik7Ci0gIH0s
Ci0KLSAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpz
b24pIHsKLSAgICB0aGlzLmVhY2goZnVuY3Rpb24ocmVzcG9uZGVyKSB7Ci0gICAgICBpZiAoT2Jq
ZWN0LmlzRnVuY3Rpb24ocmVzcG9uZGVyW2NhbGxiYWNrXSkpIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICByZXNwb25kZXJbY2FsbGJhY2tdLmFwcGx5KHJlc3BvbmRlciwgW3JlcXVlc3QsIHRy
YW5zcG9ydCwganNvbl0pOwotICAgICAgICB9IGNhdGNoIChlKSB7IH0KLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotfTsKLQotT2JqZWN0LmV4dGVuZChBamF4LlJlc3BvbmRlcnMsIEVudW1lcmFibGUp
OwotCi1BamF4LlJlc3BvbmRlcnMucmVnaXN0ZXIoewotICBvbkNyZWF0ZTogICBmdW5jdGlvbigp
IHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQrKyB9LAotICBvbkNvbXBsZXRlOiBmdW5jdGlvbigp
IHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQtLSB9Ci19KTsKLUFqYXguQmFzZSA9IENsYXNzLmNy
ZWF0ZSh7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICB0aGlzLm9wdGlv
bnMgPSB7Ci0gICAgICBtZXRob2Q6ICAgICAgICdwb3N0JywKLSAgICAgIGFzeW5jaHJvbm91czog
dHJ1ZSwKLSAgICAgIGNvbnRlbnRUeXBlOiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5j
b2RlZCcsCi0gICAgICBlbmNvZGluZzogICAgICdVVEYtOCcsCi0gICAgICBwYXJhbWV0ZXJzOiAg
ICcnLAotICAgICAgZXZhbEpTT046ICAgICB0cnVlLAotICAgICAgZXZhbEpTOiAgICAgICB0cnVl
Ci0gICAgfTsKLSAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7IH0p
OwotCi0gICAgdGhpcy5vcHRpb25zLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QudG9Mb3dl
ckNhc2UoKTsKLQotICAgIGlmIChPYmplY3QuaXNTdHJpbmcodGhpcy5vcHRpb25zLnBhcmFtZXRl
cnMpKQotICAgICAgdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMgPSB0aGlzLm9wdGlvbnMucGFyYW1l
dGVycy50b1F1ZXJ5UGFyYW1zKCk7Ci0gICAgZWxzZSBpZiAoT2JqZWN0LmlzSGFzaCh0aGlzLm9w
dGlvbnMucGFyYW1ldGVycykpCi0gICAgICB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyA9IHRoaXMu
b3B0aW9ucy5wYXJhbWV0ZXJzLnRvT2JqZWN0KCk7Ci0gIH0KLX0pOwotQWpheC5SZXF1ZXN0ID0g
Q2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewotICBfY29tcGxldGU6IGZhbHNlLAotCi0gIGluaXRp
YWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgdXJsLCBvcHRpb25zKSB7Ci0gICAgJHN1cGVyKG9wdGlv
bnMpOwotICAgIHRoaXMudHJhbnNwb3J0ID0gQWpheC5nZXRUcmFuc3BvcnQoKTsKLSAgICB0aGlz
LnJlcXVlc3QodXJsKTsKLSAgfSwKLQotICByZXF1ZXN0OiBmdW5jdGlvbih1cmwpIHsKLSAgICB0
aGlzLnVybCA9IHVybDsKLSAgICB0aGlzLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2Q7Ci0g
ICAgdmFyIHBhcmFtcyA9IE9iamVjdC5jbG9uZSh0aGlzLm9wdGlvbnMucGFyYW1ldGVycyk7Ci0K
LSAgICBpZiAoIVsnZ2V0JywgJ3Bvc3QnXS5pbmNsdWRlKHRoaXMubWV0aG9kKSkgewotICAgICAg
cGFyYW1zWydfbWV0aG9kJ10gPSB0aGlzLm1ldGhvZDsKLSAgICAgIHRoaXMubWV0aG9kID0gJ3Bv
c3QnOwotICAgIH0KLQotICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtczsKLQotICAgIGlmIChw
YXJhbXMgPSBPYmplY3QudG9RdWVyeVN0cmluZyhwYXJhbXMpKSB7Ci0gICAgICBpZiAodGhpcy5t
ZXRob2QgPT0gJ2dldCcpCi0gICAgICAgIHRoaXMudXJsICs9ICh0aGlzLnVybC5pbmNsdWRlKCc/
JykgPyAnJicgOiAnPycpICsgcGFyYW1zOwotICAgICAgZWxzZSBpZiAoL0tvbnF1ZXJvcnxTYWZh
cml8S0hUTUwvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCi0gICAgICAgIHBhcmFtcyArPSAn
Jl89JzsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IEFqYXgu
UmVzcG9uc2UodGhpcyk7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zLm9uQ3JlYXRlKSB0aGlzLm9w
dGlvbnMub25DcmVhdGUocmVzcG9uc2UpOwotICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNo
KCdvbkNyZWF0ZScsIHRoaXMsIHJlc3BvbnNlKTsKLQotICAgICAgdGhpcy50cmFuc3BvcnQub3Bl
bih0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCB0aGlzLnVybCwKLSAgICAgICAgdGhpcy5vcHRp
b25zLmFzeW5jaHJvbm91cyk7Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3Vz
KSB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUuYmluZCh0aGlzKS5kZWZlcigxKTsKLQotICAgICAg
dGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJp
bmQodGhpcyk7Ci0gICAgICB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7Ci0KLSAgICAgIHRoaXMu
Ym9keSA9IHRoaXMubWV0aG9kID09ICdwb3N0JyA/ICh0aGlzLm9wdGlvbnMucG9zdEJvZHkgfHwg
cGFyYW1zKSA6IG51bGw7Ci0gICAgICB0aGlzLnRyYW5zcG9ydC5zZW5kKHRoaXMuYm9keSk7Ci0K
LSAgICAgIC8qIEZvcmNlIEZpcmVmb3ggdG8gaGFuZGxlIHJlYWR5IHN0YXRlIDQgZm9yIHN5bmNo
cm9ub3VzIHJlcXVlc3RzICovCi0gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMg
JiYgdGhpcy50cmFuc3BvcnQub3ZlcnJpZGVNaW1lVHlwZSkKLSAgICAgICAgdGhpcy5vblN0YXRl
Q2hhbmdlKCk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKGUpIHsKLSAgICAgIHRoaXMuZGlzcGF0Y2hF
eGNlcHRpb24oZSk7Ci0gICAgfQotICB9LAotCi0gIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCkg
ewotICAgIHZhciByZWFkeVN0YXRlID0gdGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZTsKLSAgICBp
ZiAocmVhZHlTdGF0ZSA+IDEgJiYgISgocmVhZHlTdGF0ZSA9PSA0KSAmJiB0aGlzLl9jb21wbGV0
ZSkpCi0gICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUodGhpcy50cmFuc3BvcnQucmVhZHlT
dGF0ZSk7Ci0gIH0sCi0KLSAgc2V0UmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBoZWFkZXJzID0gewotICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3Qn
LAotICAgICAgJ1gtUHJvdG90eXBlLVZlcnNpb24nOiBQcm90b3R5cGUuVmVyc2lvbiwKLSAgICAg
ICdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwg
dGV4dC94bWwsICovKicKLSAgICB9OwotCi0gICAgaWYgKHRoaXMubWV0aG9kID09ICdwb3N0Jykg
ewotICAgICAgaGVhZGVyc1snQ29udGVudC10eXBlJ10gPSB0aGlzLm9wdGlvbnMuY29udGVudFR5
cGUgKwotICAgICAgICAodGhpcy5vcHRpb25zLmVuY29kaW5nID8gJzsgY2hhcnNldD0nICsgdGhp
cy5vcHRpb25zLmVuY29kaW5nIDogJycpOwotCi0gICAgICAvKiBGb3JjZSAiQ29ubmVjdGlvbjog
Y2xvc2UiIGZvciBvbGRlciBNb3ppbGxhIGJyb3dzZXJzIHRvIHdvcmsKLSAgICAgICAqIGFyb3Vu
ZCBhIGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVzdCBzZW5kcyBhbiBpbmNvcnJlY3QKLSAgICAgICAq
IENvbnRlbnQtbGVuZ3RoIGhlYWRlci4gU2VlIE1vemlsbGEgQnVnemlsbGEgIzI0NjY1MS4KLSAg
ICAgICAqLwotICAgICAgaWYgKHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRlTWltZVR5cGUgJiYKLSAg
ICAgICAgICAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvR2Vja29cLyhcZHs0fSkvKSB8fCBb
MCwyMDA1XSlbMV0gPCAyMDA1KQotICAgICAgICAgICAgaGVhZGVyc1snQ29ubmVjdGlvbiddID0g
J2Nsb3NlJzsKLSAgICB9Ci0KLSAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVh
ZGVycyA9PSAnb2JqZWN0JykgewotICAgICAgdmFyIGV4dHJhcyA9IHRoaXMub3B0aW9ucy5yZXF1
ZXN0SGVhZGVyczsKLQotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKGV4dHJhcy5wdXNoKSkK
LSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGV4dHJhcy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkgKz0gMikKLSAgICAgICAgICBoZWFkZXJzW2V4dHJhc1tpXV0gPSBleHRyYXNbaSsxXTsK
LSAgICAgIGVsc2UKLSAgICAgICAgJEgoZXh0cmFzKS5lYWNoKGZ1bmN0aW9uKHBhaXIpIHsgaGVh
ZGVyc1twYWlyLmtleV0gPSBwYWlyLnZhbHVlIH0pOwotICAgIH0KLQotICAgIGZvciAodmFyIG5h
bWUgaW4gaGVhZGVycykKLSAgICAgIHRoaXMudHJhbnNwb3J0LnNldFJlcXVlc3RIZWFkZXIobmFt
ZSwgaGVhZGVyc1tuYW1lXSk7Ci0gIH0sCi0KLSAgc3VjY2VzczogZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKCk7Ci0gICAgcmV0dXJuICFzdGF0dXMgfHwgKHN0
YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTsKLSAgfSwKLQotICBnZXRTdGF0dXM6IGZ1bmN0
aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3RhdHVzIHx8
IDA7Ci0gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gMCB9Ci0gIH0sCi0KLSAgcmVzcG9uZFRvUmVh
ZHlTdGF0ZTogZnVuY3Rpb24ocmVhZHlTdGF0ZSkgewotICAgIHZhciBzdGF0ZSA9IEFqYXguUmVx
dWVzdC5FdmVudHNbcmVhZHlTdGF0ZV0sIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhp
cyk7Ci0KLSAgICBpZiAoc3RhdGUgPT0gJ0NvbXBsZXRlJykgewotICAgICAgdHJ5IHsKLSAgICAg
ICAgdGhpcy5fY29tcGxldGUgPSB0cnVlOwotICAgICAgICAodGhpcy5vcHRpb25zWydvbicgKyBy
ZXNwb25zZS5zdGF0dXNdCi0gICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0aGlzLnN1
Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyldCi0gICAgICAgICB8fCBQcm90b3R5cGUu
ZW1wdHlGdW5jdGlvbikocmVzcG9uc2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOwotICAgICAgfSBj
YXRjaCAoZSkgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAgICAgfQot
Ci0gICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlw
ZScpOwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5ldmFsSlMgPT0gJ2ZvcmNlJwotICAgICAgICAg
IHx8ICh0aGlzLm9wdGlvbnMuZXZhbEpTICYmIHRoaXMuaXNTYW1lT3JpZ2luKCkgJiYgY29udGVu
dFR5cGUKLSAgICAgICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFwcGxpY2F0
aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkpKQotICAgICAgICB0aGlz
LmV2YWxSZXNwb25zZSgpOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAodGhpcy5vcHRpb25z
WydvbicgKyBzdGF0ZV0gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHJlc3BvbnNlLCByZXNw
b25zZS5oZWFkZXJKU09OKTsKLSAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb24nICsg
c3RhdGUsIHRoaXMsIHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7Ci0gICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKLSAgICB9Ci0gIH0sCi0KLSAgaXNT
YW1lT3JpZ2luOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgbSA9IHRoaXMudXJsLm1hdGNoKC9eXHMq
aHR0cHM/OlwvXC9bXlwvXSovKTsKLSAgICByZXR1cm4gIW0gfHwgKG1bMF0gPT0gJyN7cHJvdG9j
b2x9Ly8je2RvbWFpbn0je3BvcnR9Jy5pbnRlcnBvbGF0ZSh7Ci0gICAgICBwcm90b2NvbDogbG9j
YXRpb24ucHJvdG9jb2wsCi0gICAgICBkb21haW46IGRvY3VtZW50LmRvbWFpbiwKLSAgICAgIHBv
cnQ6IGxvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJycKLSAgICB9KSk7Ci0g
IH0sCi0KLSAgZ2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJl
dHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKSB8fCBudWxsOwotICAg
IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KLSAgfSwKLQotICBldmFsUmVzcG9uc2U6IGZ1
bmN0aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gZXZhbCgodGhpcy50cmFuc3BvcnQu
cmVzcG9uc2VUZXh0IHx8ICcnKS51bmZpbHRlckpTT04oKSk7Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0sCi0KLSAgZGlzcGF0
Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikgewotICAgICh0aGlzLm9wdGlvbnMub25F
eGNlcHRpb24gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMsIGV4Y2VwdGlvbik7Ci0g
ICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2VwdGlv
bik7Ci0gIH0KLX0pOwotCi1BamF4LlJlcXVlc3QuRXZlbnRzID0KLSAgWydVbmluaXRpYWxpemVk
JywgJ0xvYWRpbmcnLCAnTG9hZGVkJywgJ0ludGVyYWN0aXZlJywgJ0NvbXBsZXRlJ107Ci0KLQot
Ci0KLQotCi0KLQotQWpheC5SZXNwb25zZSA9IENsYXNzLmNyZWF0ZSh7Ci0gIGluaXRpYWxpemU6
IGZ1bmN0aW9uKHJlcXVlc3QpewotICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgdmFy
IHRyYW5zcG9ydCAgPSB0aGlzLnRyYW5zcG9ydCAgPSByZXF1ZXN0LnRyYW5zcG9ydCwKLSAgICAg
ICAgcmVhZHlTdGF0ZSA9IHRoaXMucmVhZHlTdGF0ZSA9IHRyYW5zcG9ydC5yZWFkeVN0YXRlOwot
Ci0gICAgaWYoKHJlYWR5U3RhdGUgPiAyICYmICFQcm90b3R5cGUuQnJvd3Nlci5JRSkgfHwgcmVh
ZHlTdGF0ZSA9PSA0KSB7Ci0gICAgICB0aGlzLnN0YXR1cyAgICAgICA9IHRoaXMuZ2V0U3RhdHVz
KCk7Ci0gICAgICB0aGlzLnN0YXR1c1RleHQgICA9IHRoaXMuZ2V0U3RhdHVzVGV4dCgpOwotICAg
ICAgdGhpcy5yZXNwb25zZVRleHQgPSBTdHJpbmcuaW50ZXJwcmV0KHRyYW5zcG9ydC5yZXNwb25z
ZVRleHQpOwotICAgICAgdGhpcy5oZWFkZXJKU09OICAgPSB0aGlzLl9nZXRIZWFkZXJKU09OKCk7
Ci0gICAgfQotCi0gICAgaWYocmVhZHlTdGF0ZSA9PSA0KSB7Ci0gICAgICB2YXIgeG1sID0gdHJh
bnNwb3J0LnJlc3BvbnNlWE1MOwotICAgICAgdGhpcy5yZXNwb25zZVhNTCAgPSBPYmplY3QuaXNV
bmRlZmluZWQoeG1sKSA/IG51bGwgOiB4bWw7Ci0gICAgICB0aGlzLnJlc3BvbnNlSlNPTiA9IHRo
aXMuX2dldFJlc3BvbnNlSlNPTigpOwotICAgIH0KLSAgfSwKLQotICBzdGF0dXM6ICAgICAgMCwK
LQotICBzdGF0dXNUZXh0OiAnJywKLQotICBnZXRTdGF0dXM6IEFqYXguUmVxdWVzdC5wcm90b3R5
cGUuZ2V0U3RhdHVzLAotCi0gIGdldFN0YXR1c1RleHQ6IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7
Ci0gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3RhdHVzVGV4dCB8fCAnJzsKLSAgICB9IGNh
dGNoIChlKSB7IHJldHVybiAnJyB9Ci0gIH0sCi0KLSAgZ2V0SGVhZGVyOiBBamF4LlJlcXVlc3Qu
cHJvdG90eXBlLmdldEhlYWRlciwKLQotICBnZXRBbGxIZWFkZXJzOiBmdW5jdGlvbigpIHsKLSAg
ICB0cnkgewotICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0gICAg
fSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9Ci0gIH0sCi0KLSAgZ2V0UmVzcG9uc2VIZWFkZXI6
IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VI
ZWFkZXIobmFtZSk7Ci0gIH0sCi0KLSAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0g
IH0sCi0KLSAgX2dldEhlYWRlckpTT046IGZ1bmN0aW9uKCkgewotICAgIHZhciBqc29uID0gdGhp
cy5nZXRIZWFkZXIoJ1gtSlNPTicpOwotICAgIGlmICghanNvbikgcmV0dXJuIG51bGw7Ci0gICAg
anNvbiA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoanNvbikpOwotICAgIHRyeSB7Ci0gICAg
ICByZXR1cm4ganNvbi5ldmFsSlNPTih0aGlzLnJlcXVlc3Qub3B0aW9ucy5zYW5pdGl6ZUpTT04g
fHwKLSAgICAgICAgIXRoaXMucmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7Ci0gICAgfSBjYXRjaCAo
ZSkgewotICAgICAgdGhpcy5yZXF1ZXN0LmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAgIH0KLSAg
fSwKLQotICBfZ2V0UmVzcG9uc2VKU09OOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgb3B0aW9ucyA9
IHRoaXMucmVxdWVzdC5vcHRpb25zOwotICAgIGlmICghb3B0aW9ucy5ldmFsSlNPTiB8fCAob3B0
aW9ucy5ldmFsSlNPTiAhPSAnZm9yY2UnICYmCi0gICAgICAhKHRoaXMuZ2V0SGVhZGVyKCdDb250
ZW50LXR5cGUnKSB8fCAnJykuaW5jbHVkZSgnYXBwbGljYXRpb24vanNvbicpKSB8fAotICAgICAg
ICB0aGlzLnJlc3BvbnNlVGV4dC5ibGFuaygpKQotICAgICAgICAgIHJldHVybiBudWxsOwotICAg
IHRyeSB7Ci0gICAgICByZXR1cm4gdGhpcy5yZXNwb25zZVRleHQuZXZhbEpTT04ob3B0aW9ucy5z
YW5pdGl6ZUpTT04gfHwKLSAgICAgICAgIXRoaXMucmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7Ci0g
ICAgfSBjYXRjaCAoZSkgewotICAgICAgdGhpcy5yZXF1ZXN0LmRpc3BhdGNoRXhjZXB0aW9uKGUp
OwotICAgIH0KLSAgfQotfSk7Ci0KLUFqYXguVXBkYXRlciA9IENsYXNzLmNyZWF0ZShBamF4LlJl
cXVlc3QsIHsKLSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCBjb250YWluZXIsIHVybCwg
b3B0aW9ucykgewotICAgIHRoaXMuY29udGFpbmVyID0gewotICAgICAgc3VjY2VzczogKGNvbnRh
aW5lci5zdWNjZXNzIHx8IGNvbnRhaW5lciksCi0gICAgICBmYWlsdXJlOiAoY29udGFpbmVyLmZh
aWx1cmUgfHwgKGNvbnRhaW5lci5zdWNjZXNzID8gbnVsbCA6IGNvbnRhaW5lcikpCi0gICAgfTsK
LQotICAgIG9wdGlvbnMgPSBPYmplY3QuY2xvbmUob3B0aW9ucyk7Ci0gICAgdmFyIG9uQ29tcGxl
dGUgPSBvcHRpb25zLm9uQ29tcGxldGU7Ci0gICAgb3B0aW9ucy5vbkNvbXBsZXRlID0gKGZ1bmN0
aW9uKHJlc3BvbnNlLCBqc29uKSB7Ci0gICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQocmVzcG9uc2Uu
cmVzcG9uc2VUZXh0KTsKLSAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihvbkNvbXBsZXRlKSkg
b25Db21wbGV0ZShyZXNwb25zZSwganNvbik7Ci0gICAgfSkuYmluZCh0aGlzKTsKLQotICAgICRz
dXBlcih1cmwsIG9wdGlvbnMpOwotICB9LAotCi0gIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCkgewotICAgIHZhciByZWNlaXZlciA9IHRoaXMuY29udGFpbmVyW3RoaXMuc3Vj
Y2VzcygpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWx1cmUnXSwKLSAgICAgICAgb3B0aW9ucyA9IHRoaXMu
b3B0aW9uczsKLQotICAgIGlmICghb3B0aW9ucy5ldmFsU2NyaXB0cykgcmVzcG9uc2VUZXh0ID0g
cmVzcG9uc2VUZXh0LnN0cmlwU2NyaXB0cygpOwotCi0gICAgaWYgKHJlY2VpdmVyID0gJChyZWNl
aXZlcikpIHsKLSAgICAgIGlmIChvcHRpb25zLmluc2VydGlvbikgewotICAgICAgICBpZiAoT2Jq
ZWN0LmlzU3RyaW5nKG9wdGlvbnMuaW5zZXJ0aW9uKSkgewotICAgICAgICAgIHZhciBpbnNlcnRp
b24gPSB7IH07IGluc2VydGlvbltvcHRpb25zLmluc2VydGlvbl0gPSByZXNwb25zZVRleHQ7Ci0g
ICAgICAgICAgcmVjZWl2ZXIuaW5zZXJ0KGluc2VydGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBvcHRpb25zLmluc2VydGlvbihyZWNlaXZlciwgcmVzcG9uc2VUZXh0KTsKLSAgICAgIH0K
LSAgICAgIGVsc2UgcmVjZWl2ZXIudXBkYXRlKHJlc3BvbnNlVGV4dCk7Ci0gICAgfQotICB9Ci19
KTsKLQotQWpheC5QZXJpb2RpY2FsVXBkYXRlciA9IENsYXNzLmNyZWF0ZShBamF4LkJhc2UsIHsK
LSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCBjb250YWluZXIsIHVybCwgb3B0aW9ucykg
ewotICAgICRzdXBlcihvcHRpb25zKTsKLSAgICB0aGlzLm9uQ29tcGxldGUgPSB0aGlzLm9wdGlv
bnMub25Db21wbGV0ZTsKLQotICAgIHRoaXMuZnJlcXVlbmN5ID0gKHRoaXMub3B0aW9ucy5mcmVx
dWVuY3kgfHwgMik7Ci0gICAgdGhpcy5kZWNheSA9ICh0aGlzLm9wdGlvbnMuZGVjYXkgfHwgMSk7
Ci0KLSAgICB0aGlzLnVwZGF0ZXIgPSB7IH07Ci0gICAgdGhpcy5jb250YWluZXIgPSBjb250YWlu
ZXI7Ci0gICAgdGhpcy51cmwgPSB1cmw7Ci0KLSAgICB0aGlzLnN0YXJ0KCk7Ci0gIH0sCi0KLSAg
c3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgIHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlID0gdGhpcy51
cGRhdGVDb21wbGV0ZS5iaW5kKHRoaXMpOwotICAgIHRoaXMub25UaW1lckV2ZW50KCk7Ci0gIH0s
Ci0KLSAgc3RvcDogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy51cGRhdGVyLm9wdGlvbnMub25Db21w
bGV0ZSA9IHVuZGVmaW5lZDsKLSAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7Ci0gICAgKHRo
aXMub25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgfSwKLQotICB1cGRhdGVDb21wbGV0ZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsK
LSAgICBpZiAodGhpcy5vcHRpb25zLmRlY2F5KSB7Ci0gICAgICB0aGlzLmRlY2F5ID0gKHJlc3Bv
bnNlLnJlc3BvbnNlVGV4dCA9PSB0aGlzLmxhc3RUZXh0ID8KLSAgICAgICAgdGhpcy5kZWNheSAq
IHRoaXMub3B0aW9ucy5kZWNheSA6IDEpOwotCi0gICAgICB0aGlzLmxhc3RUZXh0ID0gcmVzcG9u
c2UucmVzcG9uc2VUZXh0OwotICAgIH0KLSAgICB0aGlzLnRpbWVyID0gdGhpcy5vblRpbWVyRXZl
bnQuYmluZCh0aGlzKS5kZWxheSh0aGlzLmRlY2F5ICogdGhpcy5mcmVxdWVuY3kpOwotICB9LAot
Ci0gIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy51cGRhdGVyID0gbmV3IEFq
YXguVXBkYXRlcih0aGlzLmNvbnRhaW5lciwgdGhpcy51cmwsIHRoaXMub3B0aW9ucyk7Ci0gIH0K
LX0pOwotCi0KLQotZnVuY3Rpb24gJChlbGVtZW50KSB7Ci0gIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID4gMSkgewotICAgIGZvciAodmFyIGkgPSAwLCBlbGVtZW50cyA9IFtdLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICBlbGVtZW50cy5wdXNoKCQoYXJn
dW1lbnRzW2ldKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnRzOwotICB9Ci0gIGlmIChPYmplY3QuaXNT
dHJpbmcoZWxlbWVudCkpCi0gICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVs
ZW1lbnQpOwotICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7Ci19Ci0KLWlmIChQcm90
b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoKSB7Ci0gIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5
WFBhdGggPSBmdW5jdGlvbihleHByZXNzaW9uLCBwYXJlbnRFbGVtZW50KSB7Ci0gICAgdmFyIHJl
c3VsdHMgPSBbXTsKLSAgICB2YXIgcXVlcnkgPSBkb2N1bWVudC5ldmFsdWF0ZShleHByZXNzaW9u
LCAkKHBhcmVudEVsZW1lbnQpIHx8IGRvY3VtZW50LAotICAgICAgbnVsbCwgWFBhdGhSZXN1bHQu
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwotICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBxdWVyeS5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgcmVz
dWx0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKHF1ZXJ5LnNuYXBzaG90SXRlbShpKSkpOwotICAgIHJl
dHVybiByZXN1bHRzOwotICB9OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotaWYgKCF3
aW5kb3cuTm9kZSkgdmFyIE5vZGUgPSB7IH07Ci0KLWlmICghTm9kZS5FTEVNRU5UX05PREUpIHsK
LSAgT2JqZWN0LmV4dGVuZChOb2RlLCB7Ci0gICAgRUxFTUVOVF9OT0RFOiAxLAotICAgIEFUVFJJ
QlVURV9OT0RFOiAyLAotICAgIFRFWFRfTk9ERTogMywKLSAgICBDREFUQV9TRUNUSU9OX05PREU6
IDQsCi0gICAgRU5USVRZX1JFRkVSRU5DRV9OT0RFOiA1LAotICAgIEVOVElUWV9OT0RFOiA2LAot
ICAgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogNywKLSAgICBDT01NRU5UX05PREU6IDgs
Ci0gICAgRE9DVU1FTlRfTk9ERTogOSwKLSAgICBET0NVTUVOVF9UWVBFX05PREU6IDEwLAotICAg
IERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IDExLAotICAgIE5PVEFUSU9OX05PREU6IDEyCi0gIH0p
OwotfQotCi0KLShmdW5jdGlvbihnbG9iYWwpIHsKLQotICB2YXIgU0VUQVRUUklCVVRFX0lHTk9S
RVNfTkFNRSA9IChmdW5jdGlvbigpewotICAgIHZhciBlbEZvcm0gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJmb3JtIik7Ci0gICAgdmFyIGVsSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJpbnB1dCIpOwotICAgIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICAg
IGVsSW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgInRlc3QiKTsKLSAgICBlbEZvcm0uYXBwZW5k
Q2hpbGQoZWxJbnB1dCk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChlbEZvcm0pOwotICAgIHZhciBp
c0J1Z2d5ID0gZWxGb3JtLmVsZW1lbnRzCi0gICAgICA/ICh0eXBlb2YgZWxGb3JtLmVsZW1lbnRz
LnRlc3QgPT0gInVuZGVmaW5lZCIpCi0gICAgICA6IG51bGw7Ci0gICAgcm9vdC5yZW1vdmVDaGls
ZChlbEZvcm0pOwotICAgIGVsRm9ybSA9IGVsSW5wdXQgPSBudWxsOwotICAgIHJldHVybiBpc0J1
Z2d5OwotICB9KSgpOwotCi0gIHZhciBlbGVtZW50ID0gZ2xvYmFsLkVsZW1lbnQ7Ci0gIGdsb2Jh
bC5FbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwgYXR0cmlidXRlcykgewotICAgIGF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzIHx8IHsgfTsKLSAgICB0YWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpOwotICAgIHZhciBjYWNoZSA9IEVsZW1lbnQuY2FjaGU7Ci0gICAgaWYgKFNFVEFUVFJJQlVU
RV9JR05PUkVTX05BTUUgJiYgYXR0cmlidXRlcy5uYW1lKSB7Ci0gICAgICB0YWdOYW1lID0gJzwn
ICsgdGFnTmFtZSArICcgbmFtZT0iJyArIGF0dHJpYnV0ZXMubmFtZSArICciPic7Ci0gICAgICBk
ZWxldGUgYXR0cmlidXRlcy5uYW1lOwotICAgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1
dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwgYXR0cmlidXRlcyk7Ci0gICAgfQot
ICAgIGlmICghY2FjaGVbdGFnTmFtZV0pIGNhY2hlW3RhZ05hbWVdID0gRWxlbWVudC5leHRlbmQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSk7Ci0gICAgcmV0dXJuIEVsZW1lbnQud3Jp
dGVBdHRyaWJ1dGUoY2FjaGVbdGFnTmFtZV0uY2xvbmVOb2RlKGZhbHNlKSwgYXR0cmlidXRlcyk7
Ci0gIH07Ci0gIE9iamVjdC5leHRlbmQoZ2xvYmFsLkVsZW1lbnQsIGVsZW1lbnQgfHwgeyB9KTsK
LSAgaWYgKGVsZW1lbnQpIGdsb2JhbC5FbGVtZW50LnByb3RvdHlwZSA9IGVsZW1lbnQucHJvdG90
eXBlOwotfSkodGhpcyk7Ci0KLUVsZW1lbnQuY2FjaGUgPSB7IH07Ci1FbGVtZW50LmlkQ291bnRl
ciA9IDE7Ci0KLUVsZW1lbnQuTWV0aG9kcyA9IHsKLSAgdmlzaWJsZTogZnVuY3Rpb24oZWxlbWVu
dCkgewotICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwotICB9
LAotCi0gIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOwotICAgIEVsZW1lbnRbRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpID8gJ2hpZGUnIDogJ3No
b3cnXShlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotCi0gIGhpZGU6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBlbGVtZW50
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAg
c2hvdzogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAg
IGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAot
Ci0gIHJlbW92ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OwotICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsKLSAgICByZXR1
cm4gZWxlbWVudDsKLSAgfSwKLQotICB1cGRhdGU6IChmdW5jdGlvbigpewotCi0gICAgdmFyIFNF
TEVDVF9FTEVNRU5UX0lOTkVSSFRNTF9CVUdHWSA9IChmdW5jdGlvbigpewotICAgICAgdmFyIGVs
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksCi0gICAgICAgICAgaXNCdWdneSA9
IHRydWU7Ci0gICAgICBlbC5pbm5lckhUTUwgPSAiPG9wdGlvbiB2YWx1ZT1cInRlc3RcIj50ZXN0
PC9vcHRpb24+IjsKLSAgICAgIGlmIChlbC5vcHRpb25zICYmIGVsLm9wdGlvbnNbMF0pIHsKLSAg
ICAgICAgaXNCdWdneSA9IGVsLm9wdGlvbnNbMF0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSAhPT0g
Ik9QVElPTiI7Ci0gICAgICB9Ci0gICAgICBlbCA9IG51bGw7Ci0gICAgICByZXR1cm4gaXNCdWdn
eTsKLSAgICB9KSgpOwotCi0gICAgdmFyIFRBQkxFX0VMRU1FTlRfSU5ORVJIVE1MX0JVR0dZID0g
KGZ1bmN0aW9uKCl7Ci0gICAgICB0cnkgewotICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJ0YWJsZSIpOwotICAgICAgICBpZiAoZWwgJiYgZWwudEJvZGllcykgewotICAg
ICAgICAgIGVsLmlubmVySFRNTCA9ICI8dGJvZHk+PHRyPjx0ZD50ZXN0PC90ZD48L3RyPjwvdGJv
ZHk+IjsKLSAgICAgICAgICB2YXIgaXNCdWdneSA9IHR5cGVvZiBlbC50Qm9kaWVzWzBdID09ICJ1
bmRlZmluZWQiOwotICAgICAgICAgIGVsID0gbnVsbDsKLSAgICAgICAgICByZXR1cm4gaXNCdWdn
eTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICB9KSgpOwotCi0gICAgdmFyIFNDUklQVF9FTEVNRU5UX1JFSkVDVFNfVEVY
VE5PREVfQVBQRU5ESU5HID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2NyaXB0IiksCi0gICAgICAgICAgaXNCdWdneSA9IGZhbHNlOwotICAg
ICAgdHJ5IHsKLSAgICAgICAgcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
IikpOwotICAgICAgICBpc0J1Z2d5ID0gIXMuZmlyc3RDaGlsZCB8fAotICAgICAgICAgIHMuZmly
c3RDaGlsZCAmJiBzLmZpcnN0Q2hpbGQubm9kZVR5cGUgIT09IDM7Ci0gICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgIGlzQnVnZ3kgPSB0cnVlOwotICAgICAgfQotICAgICAgcyA9IG51bGw7Ci0g
ICAgICByZXR1cm4gaXNCdWdneTsKLSAgICB9KSgpOwotCi0gICAgZnVuY3Rpb24gdXBkYXRlKGVs
ZW1lbnQsIGNvbnRlbnQpIHsKLSAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotCi0gICAgICBp
ZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkKLSAgICAgICAgY29udGVudCA9IGNvbnRl
bnQudG9FbGVtZW50KCk7Ci0KLSAgICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKQot
ICAgICAgICByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNlcnQoY29udGVudCk7Ci0KLSAgICAg
IGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOwotCi0gICAgICB2YXIgdGFnTmFtZSA9
IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgICBpZiAodGFnTmFtZSA9PT0g
J1NDUklQVCcgJiYgU0NSSVBUX0VMRU1FTlRfUkVKRUNUU19URVhUTk9ERV9BUFBFTkRJTkcpIHsK
LSAgICAgICAgZWxlbWVudC50ZXh0ID0gY29udGVudDsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChTRUxFQ1RfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kgfHwg
VEFCTEVfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kpIHsKLSAgICAgICAgaWYgKHRhZ05hbWUgaW4g
RWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3MpIHsKLSAgICAgICAgICB3aGlsZSAo
ZWxlbWVudC5maXJzdENoaWxkKSB7Ci0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVs
ZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIEVsZW1lbnQuX2dldENv
bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygp
KQotICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgICBlbGVt
ZW50LmFwcGVuZENoaWxkKG5vZGUpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQuc3RyaXBTY3Jp
cHRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBlbGVtZW50
LmlubmVySFRNTCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNv
bnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwotICAgICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVwZGF0ZTsKLSAgfSkoKSwKLQotICByZXBsYWNl
OiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7
Ci0gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50
LnRvRWxlbWVudCgpOwotICAgIGVsc2UgaWYgKCFPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7
Ci0gICAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKLSAgICAgIHZhciByYW5n
ZSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgcmFuZ2Uuc2Vs
ZWN0Tm9kZShlbGVtZW50KTsKLSAgICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50
KS5kZWZlcigpOwotICAgICAgY29udGVudCA9IHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChjb250ZW50LnN0cmlwU2NyaXB0cygpKTsKLSAgICB9Ci0gICAgZWxlbWVudC5wYXJlbnROb2Rl
LnJlcGxhY2VDaGlsZChjb250ZW50LCBlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAg
fSwKLQotICBpbnNlcnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2VydGlvbnMpIHsKLSAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKLQotICAgIGlmIChPYmplY3QuaXNTdHJpbmcoaW5zZXJ0aW9ucykg
fHwgT2JqZWN0LmlzTnVtYmVyKGluc2VydGlvbnMpIHx8Ci0gICAgICAgIE9iamVjdC5pc0VsZW1l
bnQoaW5zZXJ0aW9ucykgfHwgKGluc2VydGlvbnMgJiYgKGluc2VydGlvbnMudG9FbGVtZW50IHx8
IGluc2VydGlvbnMudG9IVE1MKSkpCi0gICAgICAgICAgaW5zZXJ0aW9ucyA9IHtib3R0b206aW5z
ZXJ0aW9uc307Ci0KLSAgICB2YXIgY29udGVudCwgaW5zZXJ0LCB0YWdOYW1lLCBjaGlsZE5vZGVz
OwotCi0gICAgZm9yICh2YXIgcG9zaXRpb24gaW4gaW5zZXJ0aW9ucykgewotICAgICAgY29udGVu
dCAgPSBpbnNlcnRpb25zW3Bvc2l0aW9uXTsKLSAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24udG9M
b3dlckNhc2UoKTsKLSAgICAgIGluc2VydCA9IEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9u
c1twb3NpdGlvbl07Ci0KLSAgICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBj
b250ZW50ID0gY29udGVudC50b0VsZW1lbnQoKTsKLSAgICAgIGlmIChPYmplY3QuaXNFbGVtZW50
KGNvbnRlbnQpKSB7Ci0gICAgICAgIGluc2VydChlbGVtZW50LCBjb250ZW50KTsKLSAgICAgICAg
Y29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRl
bnQpOwotCi0gICAgICB0YWdOYW1lID0gKChwb3NpdGlvbiA9PSAnYmVmb3JlJyB8fCBwb3NpdGlv
biA9PSAnYWZ0ZXInKQotICAgICAgICA/IGVsZW1lbnQucGFyZW50Tm9kZSA6IGVsZW1lbnQpLnRh
Z05hbWUudG9VcHBlckNhc2UoKTsKLQotICAgICAgY2hpbGROb2RlcyA9IEVsZW1lbnQuX2dldENv
bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygp
KTsKLQotICAgICAgaWYgKHBvc2l0aW9uID09ICd0b3AnIHx8IHBvc2l0aW9uID09ICdhZnRlcicp
IGNoaWxkTm9kZXMucmV2ZXJzZSgpOwotICAgICAgY2hpbGROb2Rlcy5lYWNoKGluc2VydC5jdXJy
eShlbGVtZW50KSk7Ci0KLSAgICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5k
ZWZlcigpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIHdyYXA6IGZ1
bmN0aW9uKGVsZW1lbnQsIHdyYXBwZXIsIGF0dHJpYnV0ZXMpIHsKLSAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKLSAgICBpZiAoT2JqZWN0LmlzRWxlbWVudCh3cmFwcGVyKSkKLSAgICAgICQod3Jh
cHBlcikud3JpdGVBdHRyaWJ1dGUoYXR0cmlidXRlcyB8fCB7IH0pOwotICAgIGVsc2UgaWYgKE9i
amVjdC5pc1N0cmluZyh3cmFwcGVyKSkgd3JhcHBlciA9IG5ldyBFbGVtZW50KHdyYXBwZXIsIGF0
dHJpYnV0ZXMpOwotICAgIGVsc2Ugd3JhcHBlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB3cmFwcGVy
KTsKLSAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgZWxlbWVudC5wYXJlbnROb2Rl
LnJlcGxhY2VDaGlsZCh3cmFwcGVyLCBlbGVtZW50KTsKLSAgICB3cmFwcGVyLmFwcGVuZENoaWxk
KGVsZW1lbnQpOwotICAgIHJldHVybiB3cmFwcGVyOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgcmVzdWx0
ID0gJzwnICsgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgJEgoeydpZCc6ICdp
ZCcsICdjbGFzc05hbWUnOiAnY2xhc3MnfSkuZWFjaChmdW5jdGlvbihwYWlyKSB7Ci0gICAgICB2
YXIgcHJvcGVydHkgPSBwYWlyLmZpcnN0KCksIGF0dHJpYnV0ZSA9IHBhaXIubGFzdCgpOwotICAg
ICAgdmFyIHZhbHVlID0gKGVsZW1lbnRbcHJvcGVydHldIHx8ICcnKS50b1N0cmluZygpOwotICAg
ICAgaWYgKHZhbHVlKSByZXN1bHQgKz0gJyAnICsgYXR0cmlidXRlICsgJz0nICsgdmFsdWUuaW5z
cGVjdCh0cnVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0ICsgJz4nOwotICB9LAotCi0g
IHJlY3Vyc2l2ZWx5Q29sbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHkpIHsKLSAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgZWxlbWVudHMgPSBbXTsKLSAgICB3aGlsZSAo
ZWxlbWVudCA9IGVsZW1lbnRbcHJvcGVydHldKQotICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUg
PT0gMSkKLSAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnRzOwotICB9LAotCi0gIGFuY2VzdG9yczogZnVuY3Rpb24oZWxlbWVu
dCkgewotICAgIHJldHVybiBFbGVtZW50LnJlY3Vyc2l2ZWx5Q29sbGVjdChlbGVtZW50LCAncGFy
ZW50Tm9kZScpOwotICB9LAotCi0gIGRlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0g
ICAgcmV0dXJuIEVsZW1lbnQuc2VsZWN0KGVsZW1lbnQsICIqIik7Ci0gIH0sCi0KLSAgZmlyc3RE
ZXNjZW5kYW50OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCku
Zmlyc3RDaGlsZDsKLSAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9IDEp
IGVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJsaW5nOwotICAgIHJldHVybiAkKGVsZW1lbnQpOwot
ICB9LAotCi0gIGltbWVkaWF0ZURlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAg
aWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkuZmlyc3RDaGlsZCkpIHJldHVybiBbXTsKLSAgICB3
aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9IDEpIGVsZW1lbnQgPSBlbGVtZW50
Lm5leHRTaWJsaW5nOwotICAgIGlmIChlbGVtZW50KSByZXR1cm4gW2VsZW1lbnRdLmNvbmNhdCgk
KGVsZW1lbnQpLm5leHRTaWJsaW5ncygpKTsKLSAgICByZXR1cm4gW107Ci0gIH0sCi0KLSAgcHJl
dmlvdXNTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiBFbGVtZW50LnJl
Y3Vyc2l2ZWx5Q29sbGVjdChlbGVtZW50LCAncHJldmlvdXNTaWJsaW5nJyk7Ci0gIH0sCi0KLSAg
bmV4dFNpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuIEVsZW1lbnQucmVj
dXJzaXZlbHlDb2xsZWN0KGVsZW1lbnQsICduZXh0U2libGluZycpOwotICB9LAotCi0gIHNpYmxp
bmdzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAg
cmV0dXJuIEVsZW1lbnQucHJldmlvdXNTaWJsaW5ncyhlbGVtZW50KS5yZXZlcnNlKCkKLSAgICAg
IC5jb25jYXQoRWxlbWVudC5uZXh0U2libGluZ3MoZWxlbWVudCkpOwotICB9LAotCi0gIG1hdGNo
OiBmdW5jdGlvbihlbGVtZW50LCBzZWxlY3RvcikgewotICAgIGlmIChPYmplY3QuaXNTdHJpbmco
c2VsZWN0b3IpKQotICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpOwotICAg
IHJldHVybiBzZWxlY3Rvci5tYXRjaCgkKGVsZW1lbnQpKTsKLSAgfSwKLQotICB1cDogZnVuY3Rp
b24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChlbGVtZW50LnBhcmVu
dE5vZGUpOwotICAgIHZhciBhbmNlc3RvcnMgPSBFbGVtZW50LmFuY2VzdG9ycyhlbGVtZW50KTsK
LSAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gYW5jZXN0b3JzW2V4cHJl
c3Npb25dIDoKLSAgICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KGFuY2VzdG9ycywgZXhwcmVzc2lv
biwgaW5kZXgpOwotICB9LAotCi0gIGRvd246IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24s
IGluZGV4KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPT0gMSkgcmV0dXJuIEVsZW1lbnQuZmlyc3REZXNjZW5kYW50KGVsZW1lbnQpOwotICAg
IHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikgPyBFbGVtZW50LmRlc2NlbmRhbnRz
KGVsZW1lbnQpW2V4cHJlc3Npb25dIDoKLSAgICAgIEVsZW1lbnQuc2VsZWN0KGVsZW1lbnQsIGV4
cHJlc3Npb24pW2luZGV4IHx8IDBdOwotICB9LAotCi0gIHByZXZpb3VzOiBmdW5jdGlvbihlbGVt
ZW50LCBleHByZXNzaW9uLCBpbmRleCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiAkKFNlbGVjdG9yLmhhbmRsZXJzLnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoZWxlbWVudCkpOwotICAgIHZhciBwcmV2aW91c1NpYmxpbmdz
ID0gRWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKGVsZW1lbnQpOwotICAgIHJldHVybiBPYmplY3Qu
aXNOdW1iZXIoZXhwcmVzc2lvbikgPyBwcmV2aW91c1NpYmxpbmdzW2V4cHJlc3Npb25dIDoKLSAg
ICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KHByZXZpb3VzU2libGluZ3MsIGV4cHJlc3Npb24sIGlu
ZGV4KTsKLSAgfSwKLQotICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRl
eCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09IDEpIHJldHVybiAkKFNlbGVjdG9yLmhhbmRsZXJzLm5leHRFbGVtZW50U2libGluZyhlbGVt
ZW50KSk7Ci0gICAgdmFyIG5leHRTaWJsaW5ncyA9IEVsZW1lbnQubmV4dFNpYmxpbmdzKGVsZW1l
bnQpOwotICAgIHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikgPyBuZXh0U2libGlu
Z3NbZXhwcmVzc2lvbl0gOgotICAgICAgU2VsZWN0b3IuZmluZEVsZW1lbnQobmV4dFNpYmxpbmdz
LCBleHByZXNzaW9uLCBpbmRleCk7Ci0gIH0sCi0KLQotICBzZWxlY3Q6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50
cywgMSk7Ci0gICAgcmV0dXJuIFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRzKGVsZW1lbnQsIGFy
Z3MpOwotICB9LAotCi0gIGFkamFjZW50OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJldHVy
biBTZWxlY3Rvci5maW5kQ2hpbGRFbGVtZW50cyhlbGVtZW50LnBhcmVudE5vZGUsIGFyZ3MpLndp
dGhvdXQoZWxlbWVudCk7Ci0gIH0sCi0KLSAgaWRlbnRpZnk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgaWQgPSBFbGVtZW50LnJlYWRBdHRy
aWJ1dGUoZWxlbWVudCwgJ2lkJyk7Ci0gICAgaWYgKGlkKSByZXR1cm4gaWQ7Ci0gICAgZG8geyBp
ZCA9ICdhbm9ueW1vdXNfZWxlbWVudF8nICsgRWxlbWVudC5pZENvdW50ZXIrKyB9IHdoaWxlICgk
KGlkKSk7Ci0gICAgRWxlbWVudC53cml0ZUF0dHJpYnV0ZShlbGVtZW50LCAnaWQnLCBpZCk7Ci0g
ICAgcmV0dXJuIGlkOwotICB9LAotCi0gIHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQs
IG5hbWUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoUHJvdG90eXBlLkJy
b3dzZXIuSUUpIHsKLSAgICAgIHZhciB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25z
LnJlYWQ7Ci0gICAgICBpZiAodC52YWx1ZXNbbmFtZV0pIHJldHVybiB0LnZhbHVlc1tuYW1lXShl
bGVtZW50LCBuYW1lKTsKLSAgICAgIGlmICh0Lm5hbWVzW25hbWVdKSBuYW1lID0gdC5uYW1lc1tu
YW1lXTsKLSAgICAgIGlmIChuYW1lLmluY2x1ZGUoJzonKSkgewotICAgICAgICByZXR1cm4gKCFl
bGVtZW50LmF0dHJpYnV0ZXMgfHwgIWVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXSkgPyBudWxsIDoK
LSAgICAgICAgIGVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXS52YWx1ZTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOwotICB9LAotCi0gIHdyaXRl
QXR0cmlidXRlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkgewotICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOwotICAgIHZhciBhdHRyaWJ1dGVzID0geyB9LCB0ID0gRWxlbWVudC5fYXR0
cmlidXRlVHJhbnNsYXRpb25zLndyaXRlOwotCi0gICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmpl
Y3QnKSBhdHRyaWJ1dGVzID0gbmFtZTsKLSAgICBlbHNlIGF0dHJpYnV0ZXNbbmFtZV0gPSBPYmpl
Y3QuaXNVbmRlZmluZWQodmFsdWUpID8gdHJ1ZSA6IHZhbHVlOwotCi0gICAgZm9yICh2YXIgYXR0
ciBpbiBhdHRyaWJ1dGVzKSB7Ci0gICAgICBuYW1lID0gdC5uYW1lc1thdHRyXSB8fCBhdHRyOwot
ICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJdOwotICAgICAgaWYgKHQudmFsdWVzW2F0dHJd
KSBuYW1lID0gdC52YWx1ZXNbYXR0cl0oZWxlbWVudCwgdmFsdWUpOwotICAgICAgaWYgKHZhbHVl
ID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkKLSAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRy
aWJ1dGUobmFtZSk7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKLSAgICAgICAgZWxl
bWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgbmFtZSk7Ci0gICAgICBlbHNlIGVsZW1lbnQuc2V0QXR0
cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0K
LSAgZ2V0SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuIEVsZW1lbnQuZ2V0
RGltZW5zaW9ucyhlbGVtZW50KS5oZWlnaHQ7Ci0gIH0sCi0KLSAgZ2V0V2lkdGg6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKLSAgICByZXR1cm4gRWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpLndp
ZHRoOwotICB9LAotCi0gIGNsYXNzTmFtZXM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1
cm4gbmV3IEVsZW1lbnQuQ2xhc3NOYW1lcyhlbGVtZW50KTsKLSAgfSwKLQotICBoYXNDbGFzc05h
bWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAk
KGVsZW1lbnQpKSkgcmV0dXJuOwotICAgIHZhciBlbGVtZW50Q2xhc3NOYW1lID0gZWxlbWVudC5j
bGFzc05hbWU7Ci0gICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVs
ZW1lbnRDbGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8Ci0gICAgICBuZXcgUmVnRXhwKCIoXnxcXHMp
IiArIGNsYXNzTmFtZSArICIoXFxzfCQpIikudGVzdChlbGVtZW50Q2xhc3NOYW1lKSkpOwotICB9
LAotCi0gIGFkZENsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7Ci0gICAg
aWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47Ci0gICAgaWYgKCFFbGVtZW50Lmhh
c0NsYXNzTmFtZShlbGVtZW50LCBjbGFzc05hbWUpKQotICAgICAgZWxlbWVudC5jbGFzc05hbWUg
Kz0gKGVsZW1lbnQuY2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lOwotICAgIHJldHVy
biBlbGVtZW50OwotICB9LAotCi0gIHJlbW92ZUNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwg
Y2xhc3NOYW1lKSB7Ci0gICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47Ci0g
ICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKAotICAgICAg
bmV3IFJlZ0V4cCgiKF58XFxzKykiICsgY2xhc3NOYW1lICsgIihcXHMrfCQpIiksICcgJykuc3Ry
aXAoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICB0b2dnbGVDbGFzc05hbWU6IGZ1
bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1l
bnQpKSkgcmV0dXJuOwotICAgIHJldHVybiBFbGVtZW50W0VsZW1lbnQuaGFzQ2xhc3NOYW1lKGVs
ZW1lbnQsIGNsYXNzTmFtZSkgPwotICAgICAgJ3JlbW92ZUNsYXNzTmFtZScgOiAnYWRkQ2xhc3NO
YW1lJ10oZWxlbWVudCwgY2xhc3NOYW1lKTsKLSAgfSwKLQotICBjbGVhbldoaXRlc3BhY2U6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgbm9k
ZSA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgdmFyIG5l
eHROb2RlID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMg
JiYgIS9cUy8udGVzdChub2RlLm5vZGVWYWx1ZSkpCi0gICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hp
bGQobm9kZSk7Ci0gICAgICBub2RlID0gbmV4dE5vZGU7Ci0gICAgfQotICAgIHJldHVybiBlbGVt
ZW50OwotICB9LAotCi0gIGVtcHR5OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQo
ZWxlbWVudCkuaW5uZXJIVE1MLmJsYW5rKCk7Ci0gIH0sCi0KLSAgZGVzY2VuZGFudE9mOiBmdW5j
dGlvbihlbGVtZW50LCBhbmNlc3RvcikgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpLCBhbmNl
c3RvciA9ICQoYW5jZXN0b3IpOwotCi0gICAgaWYgKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9z
aXRpb24pCi0gICAgICByZXR1cm4gKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYW5j
ZXN0b3IpICYgOCkgPT09IDg7Ci0KLSAgICBpZiAoYW5jZXN0b3IuY29udGFpbnMpCi0gICAgICBy
ZXR1cm4gYW5jZXN0b3IuY29udGFpbnMoZWxlbWVudCkgJiYgYW5jZXN0b3IgIT09IGVsZW1lbnQ7
Ci0KLSAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkKLSAgICAgIGlmIChl
bGVtZW50ID09IGFuY2VzdG9yKSByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLSAg
fSwKLQotICBzY3JvbGxUbzogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOwotICAgIHZhciBwb3MgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7
Ci0gICAgd2luZG93LnNjcm9sbFRvKHBvc1swXSwgcG9zWzFdKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLSAgfSwKLQotICBnZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKLSAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBzdHlsZSA9IHN0eWxlID09ICdmbG9hdCcgPyAnY3Nz
RmxvYXQnIDogc3R5bGUuY2FtZWxpemUoKTsKLSAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxl
W3N0eWxlXTsKLSAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09ICdhdXRvJykgewotICAgICAgdmFy
IGNzcyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVs
bCk7Ci0gICAgICB2YWx1ZSA9IGNzcyA/IGNzc1tzdHlsZV0gOiBudWxsOwotICAgIH0KLSAgICBp
ZiAoc3R5bGUgPT0gJ29wYWNpdHknKSByZXR1cm4gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6
IDEuMDsKLSAgICByZXR1cm4gdmFsdWUgPT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlOwotICB9LAot
Ci0gIGdldE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChlbGVtZW50
KS5nZXRTdHlsZSgnb3BhY2l0eScpOwotICB9LAotCi0gIHNldFN0eWxlOiBmdW5jdGlvbihlbGVt
ZW50LCBzdHlsZXMpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgZWxlbWVu
dFN0eWxlID0gZWxlbWVudC5zdHlsZSwgbWF0Y2g7Ci0gICAgaWYgKE9iamVjdC5pc1N0cmluZyhz
dHlsZXMpKSB7Ci0gICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgKz0gJzsnICsgc3R5bGVzOwot
ICAgICAgcmV0dXJuIHN0eWxlcy5pbmNsdWRlKCdvcGFjaXR5JykgPwotICAgICAgICBlbGVtZW50
LnNldE9wYWNpdHkoc3R5bGVzLm1hdGNoKC9vcGFjaXR5OlxzKihcZD9cLj9cZCopLylbMV0pIDog
ZWxlbWVudDsKLSAgICB9Ci0gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKQotICAgICAg
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5JykgZWxlbWVudC5zZXRPcGFjaXR5KHN0eWxlc1twcm9w
ZXJ0eV0pOwotICAgICAgZWxzZQotICAgICAgICBlbGVtZW50U3R5bGVbKHByb3BlcnR5ID09ICdm
bG9hdCcgfHwgcHJvcGVydHkgPT0gJ2Nzc0Zsb2F0JykgPwotICAgICAgICAgIChPYmplY3QuaXNV
bmRlZmluZWQoZWxlbWVudFN0eWxlLnN0eWxlRmxvYXQpID8gJ2Nzc0Zsb2F0JyA6ICdzdHlsZUZs
b2F0JykgOgotICAgICAgICAgICAgcHJvcGVydHldID0gc3R5bGVzW3Byb3BlcnR5XTsKLQotICAg
IHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIHNldE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQs
IHZhbHVlKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgZWxlbWVudC5zdHlsZS5v
cGFjaXR5ID0gKHZhbHVlID09IDEgfHwgdmFsdWUgPT09ICcnKSA/ICcnIDoKLSAgICAgICh2YWx1
ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVlOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0g
IGdldERpbWVuc2lvbnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKLSAgICB2YXIgZGlzcGxheSA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3Bs
YXknKTsKLSAgICBpZiAoZGlzcGxheSAhPSAnbm9uZScgJiYgZGlzcGxheSAhPSBudWxsKSAvLyBT
YWZhcmkgYnVnCi0gICAgICByZXR1cm4ge3dpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWln
aHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0fTsKLQotICAgIHZhciBlbHMgPSBlbGVtZW50LnN0eWxl
OwotICAgIHZhciBvcmlnaW5hbFZpc2liaWxpdHkgPSBlbHMudmlzaWJpbGl0eTsKLSAgICB2YXIg
b3JpZ2luYWxQb3NpdGlvbiA9IGVscy5wb3NpdGlvbjsKLSAgICB2YXIgb3JpZ2luYWxEaXNwbGF5
ID0gZWxzLmRpc3BsYXk7Ci0gICAgZWxzLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKLSAgICBpZiAo
b3JpZ2luYWxQb3NpdGlvbiAhPSAnZml4ZWQnKSAvLyBTd2l0Y2hpbmcgZml4ZWQgdG8gYWJzb2x1
dGUgY2F1c2VzIGlzc3VlcyBpbiBTYWZhcmkKLSAgICAgIGVscy5wb3NpdGlvbiA9ICdhYnNvbHV0
ZSc7Ci0gICAgZWxzLmRpc3BsYXkgPSAnYmxvY2snOwotICAgIHZhciBvcmlnaW5hbFdpZHRoID0g
ZWxlbWVudC5jbGllbnRXaWR0aDsKLSAgICB2YXIgb3JpZ2luYWxIZWlnaHQgPSBlbGVtZW50LmNs
aWVudEhlaWdodDsKLSAgICBlbHMuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTsKLSAgICBlbHMu
cG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOwotICAgIGVscy52aXNpYmlsaXR5ID0gb3JpZ2lu
YWxWaXNpYmlsaXR5OwotICAgIHJldHVybiB7d2lkdGg6IG9yaWdpbmFsV2lkdGgsIGhlaWdodDog
b3JpZ2luYWxIZWlnaHR9OwotICB9LAotCi0gIG1ha2VQb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVt
ZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgdmFyIHBvcyA9IEVsZW1lbnQu
Z2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7Ci0gICAgaWYgKHBvcyA9PSAnc3RhdGljJyB8
fCAhcG9zKSB7Ci0gICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHRydWU7Ci0gICAgICBl
bGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKLSAgICAgIGlmIChQcm90b3R5cGUu
QnJvd3Nlci5PcGVyYSkgewotICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IDA7Ci0gICAgICAg
IGVsZW1lbnQuc3R5bGUubGVmdCA9IDA7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbGVt
ZW50OwotICB9LAotCi0gIHVuZG9Qb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkKSB7
Ci0gICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHVuZGVmaW5lZDsKLSAgICAgIGVsZW1l
bnQuc3R5bGUucG9zaXRpb24gPQotICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9Ci0gICAgICAg
IGVsZW1lbnQuc3R5bGUubGVmdCA9Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUuYm90dG9tID0KLSAg
ICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICcnOwotICAgIH0KLSAgICByZXR1cm4gZWxlbWVu
dDsKLSAgfSwKLQotICBtYWtlQ2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVt
ZW50OwotICAgIGVsZW1lbnQuX292ZXJmbG93ID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAn
b3ZlcmZsb3cnKSB8fCAnYXV0byc7Ci0gICAgaWYgKGVsZW1lbnQuX292ZXJmbG93ICE9PSAnaGlk
ZGVuJykKLSAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsKLSAgICByZXR1
cm4gZWxlbWVudDsKLSAgfSwKLQotICB1bmRvQ2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnQuX292ZXJmbG93KSBy
ZXR1cm4gZWxlbWVudDsKLSAgICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gZWxlbWVudC5fb3Zl
cmZsb3cgPT0gJ2F1dG8nID8gJycgOiBlbGVtZW50Ll9vdmVyZmxvdzsKLSAgICBlbGVtZW50Ll9v
dmVyZmxvdyA9IG51bGw7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgY3VtdWxhdGl2
ZU9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwg
PSAwOwotICAgIGRvIHsKLSAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsK
LSAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKLSAgICAgIGVsZW1lbnQg
PSBlbGVtZW50Lm9mZnNldFBhcmVudDsKLSAgICB9IHdoaWxlIChlbGVtZW50KTsKLSAgICByZXR1
cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKLSAgfSwKLQotICBwb3Np
dGlvbmVkT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIHZhbHVlVCA9IDAsIHZh
bHVlTCA9IDA7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8
fCAwOwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwotICAgICAgZWxl
bWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwotICAgICAgaWYgKGVsZW1lbnQpIHsKLSAgICAg
ICAgaWYgKGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09ICdCT0RZJykgYnJlYWs7Ci0g
ICAgICAgIHZhciBwID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsKLSAg
ICAgICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChl
bGVtZW50KTsKLSAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVU
KTsKLSAgfSwKLQotICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0
aW9uJykgPT0gJ2Fic29sdXRlJykgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICB2YXIgb2Zmc2V0cyA9
IEVsZW1lbnQucG9zaXRpb25lZE9mZnNldChlbGVtZW50KTsKLSAgICB2YXIgdG9wICAgICA9IG9m
ZnNldHNbMV07Ci0gICAgdmFyIGxlZnQgICAgPSBvZmZzZXRzWzBdOwotICAgIHZhciB3aWR0aCAg
ID0gZWxlbWVudC5jbGllbnRXaWR0aDsKLSAgICB2YXIgaGVpZ2h0ICA9IGVsZW1lbnQuY2xpZW50
SGVpZ2h0OwotCi0gICAgZWxlbWVudC5fb3JpZ2luYWxMZWZ0ICAgPSBsZWZ0IC0gcGFyc2VGbG9h
dChlbGVtZW50LnN0eWxlLmxlZnQgIHx8IDApOwotICAgIGVsZW1lbnQuX29yaWdpbmFsVG9wICAg
ID0gdG9wICAtIHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgfHwgMCk7Ci0gICAgZWxlbWVu
dC5fb3JpZ2luYWxXaWR0aCAgPSBlbGVtZW50LnN0eWxlLndpZHRoOwotICAgIGVsZW1lbnQuX29y
aWdpbmFsSGVpZ2h0ID0gZWxlbWVudC5zdHlsZS5oZWlnaHQ7Ci0KLSAgICBlbGVtZW50LnN0eWxl
LnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICBlbGVtZW50LnN0eWxlLnRvcCAgICA9IHRvcCAr
ICdweCc7Ci0gICAgZWxlbWVudC5zdHlsZS5sZWZ0ICAgPSBsZWZ0ICsgJ3B4JzsKLSAgICBlbGVt
ZW50LnN0eWxlLndpZHRoICA9IHdpZHRoICsgJ3B4JzsKLSAgICBlbGVtZW50LnN0eWxlLmhlaWdo
dCA9IGhlaWdodCArICdweCc7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgcmVsYXRp
dml6ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAg
IGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdyZWxhdGl2ZScp
IHJldHVybiBlbGVtZW50OwotCi0gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2
ZSc7Ci0gICAgdmFyIHRvcCAgPSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wICB8fCAwKSAt
IChlbGVtZW50Ll9vcmlnaW5hbFRvcCB8fCAwKTsKLSAgICB2YXIgbGVmdCA9IHBhcnNlRmxvYXQo
ZWxlbWVudC5zdHlsZS5sZWZ0IHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsTGVmdCB8fCAwKTsK
LQotICAgIGVsZW1lbnQuc3R5bGUudG9wICAgID0gdG9wICsgJ3B4JzsKLSAgICBlbGVtZW50LnN0
eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwotICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxl
bWVudC5fb3JpZ2luYWxIZWlnaHQ7Ci0gICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSBlbGVtZW50
Ll9vcmlnaW5hbFdpZHRoOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIGN1bXVsYXRp
dmVTY3JvbGxPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB2YXIgdmFsdWVUID0gMCwg
dmFsdWVMID0gMDsKLSAgICBkbyB7Ci0gICAgICB2YWx1ZVQgKz0gZWxlbWVudC5zY3JvbGxUb3Ag
IHx8IDA7Ci0gICAgICB2YWx1ZUwgKz0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7Ci0gICAgICBl
bGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAgIH0gd2hpbGUgKGVsZW1lbnQpOwotICAg
IHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwotICB9LAotCi0g
IGdldE9mZnNldFBhcmVudDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGlmIChlbGVtZW50Lm9m
ZnNldFBhcmVudCkgcmV0dXJuICQoZWxlbWVudC5vZmZzZXRQYXJlbnQpOwotICAgIGlmIChlbGVt
ZW50ID09IGRvY3VtZW50LmJvZHkpIHJldHVybiAkKGVsZW1lbnQpOwotCi0gICAgd2hpbGUgKChl
bGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVtZW50ICE9IGRvY3VtZW50LmJvZHkp
Ci0gICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSAhPSAnc3Rh
dGljJykKLSAgICAgICAgcmV0dXJuICQoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gJChkb2N1bWVu
dC5ib2R5KTsKLSAgfSwKLQotICB2aWV3cG9ydE9mZnNldDogZnVuY3Rpb24oZm9yRWxlbWVudCkg
ewotICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwotCi0gICAgdmFyIGVsZW1lbnQgPSBm
b3JFbGVtZW50OwotICAgIGRvIHsKLSAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAg
fHwgMDsKLSAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKLQotICAgICAg
aWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJvZHkgJiYKLSAgICAgICAgRWxl
bWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsK
LQotICAgIH0gd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCk7Ci0KLSAgICBl
bGVtZW50ID0gZm9yRWxlbWVudDsKLSAgICBkbyB7Ci0gICAgICBpZiAoIVByb3RvdHlwZS5Ccm93
c2VyLk9wZXJhIHx8IChlbGVtZW50LnRhZ05hbWUgJiYgKGVsZW1lbnQudGFnTmFtZS50b1VwcGVy
Q2FzZSgpID09ICdCT0RZJykpKSB7Ci0gICAgICAgIHZhbHVlVCAtPSBlbGVtZW50LnNjcm9sbFRv
cCAgfHwgMDsKLSAgICAgICAgdmFsdWVMIC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwOwotICAg
ICAgfQotICAgIH0gd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpOwotCi0gICAg
cmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7Ci0gIH0sCi0KLSAg
Y2xvbmVQb3NpdGlvbjogZnVuY3Rpb24oZWxlbWVudCwgc291cmNlKSB7Ci0gICAgdmFyIG9wdGlv
bnMgPSBPYmplY3QuZXh0ZW5kKHsKLSAgICAgIHNldExlZnQ6ICAgIHRydWUsCi0gICAgICBzZXRU
b3A6ICAgICB0cnVlLAotICAgICAgc2V0V2lkdGg6ICAgdHJ1ZSwKLSAgICAgIHNldEhlaWdodDog
IHRydWUsCi0gICAgICBvZmZzZXRUb3A6ICAwLAotICAgICAgb2Zmc2V0TGVmdDogMAotICAgIH0s
IGFyZ3VtZW50c1syXSB8fCB7IH0pOwotCi0gICAgc291cmNlID0gJChzb3VyY2UpOwotICAgIHZh
ciBwID0gRWxlbWVudC52aWV3cG9ydE9mZnNldChzb3VyY2UpOwotCi0gICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7Ci0gICAgdmFyIGRlbHRhID0gWzAsIDBdOwotICAgIHZhciBwYXJlbnQgPSBudWxs
OwotICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNv
bHV0ZScpIHsKLSAgICAgIHBhcmVudCA9IEVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQp
OwotICAgICAgZGVsdGEgPSBFbGVtZW50LnZpZXdwb3J0T2Zmc2V0KHBhcmVudCk7Ci0gICAgfQot
Ci0gICAgaWYgKHBhcmVudCA9PSBkb2N1bWVudC5ib2R5KSB7Ci0gICAgICBkZWx0YVswXSAtPSBk
b2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7Ci0gICAgICBkZWx0YVsxXSAtPSBkb2N1bWVudC5ib2R5
Lm9mZnNldFRvcDsKLSAgICB9Ci0KLSAgICBpZiAob3B0aW9ucy5zZXRMZWZ0KSAgIGVsZW1lbnQu
c3R5bGUubGVmdCAgPSAocFswXSAtIGRlbHRhWzBdICsgb3B0aW9ucy5vZmZzZXRMZWZ0KSArICdw
eCc7Ci0gICAgaWYgKG9wdGlvbnMuc2V0VG9wKSAgICBlbGVtZW50LnN0eWxlLnRvcCAgID0gKHBb
MV0gLSBkZWx0YVsxXSArIG9wdGlvbnMub2Zmc2V0VG9wKSArICdweCc7Ci0gICAgaWYgKG9wdGlv
bnMuc2V0V2lkdGgpICBlbGVtZW50LnN0eWxlLndpZHRoID0gc291cmNlLm9mZnNldFdpZHRoICsg
J3B4JzsKLSAgICBpZiAob3B0aW9ucy5zZXRIZWlnaHQpIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0g
c291cmNlLm9mZnNldEhlaWdodCArICdweCc7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLX07
Ci0KLU9iamVjdC5leHRlbmQoRWxlbWVudC5NZXRob2RzLCB7Ci0gIGdldEVsZW1lbnRzQnlTZWxl
Y3RvcjogRWxlbWVudC5NZXRob2RzLnNlbGVjdCwKLQotICBjaGlsZEVsZW1lbnRzOiBFbGVtZW50
Lk1ldGhvZHMuaW1tZWRpYXRlRGVzY2VuZGFudHMKLX0pOwotCi1FbGVtZW50Ll9hdHRyaWJ1dGVU
cmFuc2xhdGlvbnMgPSB7Ci0gIHdyaXRlOiB7Ci0gICAgbmFtZXM6IHsKLSAgICAgIGNsYXNzTmFt
ZTogJ2NsYXNzJywKLSAgICAgIGh0bWxGb3I6ICAgJ2ZvcicKLSAgICB9LAotICAgIHZhbHVlczog
eyB9Ci0gIH0KLX07Ci0KLWlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSkgewotICBFbGVtZW50
Lk1ldGhvZHMuZ2V0U3R5bGUgPSBFbGVtZW50Lk1ldGhvZHMuZ2V0U3R5bGUud3JhcCgKLSAgICBm
dW5jdGlvbihwcm9jZWVkLCBlbGVtZW50LCBzdHlsZSkgewotICAgICAgc3dpdGNoIChzdHlsZSkg
ewotICAgICAgICBjYXNlICdsZWZ0JzogY2FzZSAndG9wJzogY2FzZSAncmlnaHQnOiBjYXNlICdi
b3R0b20nOgotICAgICAgICAgIGlmIChwcm9jZWVkKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAn
c3RhdGljJykgcmV0dXJuIG51bGw7Ci0gICAgICAgIGNhc2UgJ2hlaWdodCc6IGNhc2UgJ3dpZHRo
JzoKLSAgICAgICAgICBpZiAoIUVsZW1lbnQudmlzaWJsZShlbGVtZW50KSkgcmV0dXJuIG51bGw7
Ci0KLSAgICAgICAgICB2YXIgZGltID0gcGFyc2VJbnQocHJvY2VlZChlbGVtZW50LCBzdHlsZSks
IDEwKTsKLQotICAgICAgICAgIGlmIChkaW0gIT09IGVsZW1lbnRbJ29mZnNldCcgKyBzdHlsZS5j
YXBpdGFsaXplKCldKQotICAgICAgICAgICAgcmV0dXJuIGRpbSArICdweCc7Ci0KLSAgICAgICAg
ICB2YXIgcHJvcGVydGllczsKLSAgICAgICAgICBpZiAoc3R5bGUgPT09ICdoZWlnaHQnKSB7Ci0g
ICAgICAgICAgICBwcm9wZXJ0aWVzID0gWydib3JkZXItdG9wLXdpZHRoJywgJ3BhZGRpbmctdG9w
JywKLSAgICAgICAgICAgICAncGFkZGluZy1ib3R0b20nLCAnYm9yZGVyLWJvdHRvbS13aWR0aCdd
OwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByb3BlcnRpZXMg
PSBbJ2JvcmRlci1sZWZ0LXdpZHRoJywgJ3BhZGRpbmctbGVmdCcsCi0gICAgICAgICAgICAgJ3Bh
ZGRpbmctcmlnaHQnLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJ107Ci0gICAgICAgICAgfQotICAgICAg
ICAgIHJldHVybiBwcm9wZXJ0aWVzLmluamVjdChkaW0sIGZ1bmN0aW9uKG1lbW8sIHByb3BlcnR5
KSB7Ci0gICAgICAgICAgICB2YXIgdmFsID0gcHJvY2VlZChlbGVtZW50LCBwcm9wZXJ0eSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gbWVtbyA6IG1lbW8gLSBwYXJzZUludCh2
YWwsIDEwKTsKLSAgICAgICAgICB9KSArICdweCc7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBw
cm9jZWVkKGVsZW1lbnQsIHN0eWxlKTsKLSAgICAgIH0KLSAgICB9Ci0gICk7Ci0KLSAgRWxlbWVu
dC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUgPSBFbGVtZW50Lk1ldGhvZHMucmVhZEF0dHJpYnV0ZS53
cmFwKAotICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQsIGF0dHJpYnV0ZSkgewotICAgICAg
aWYgKGF0dHJpYnV0ZSA9PT0gJ3RpdGxlJykgcmV0dXJuIGVsZW1lbnQudGl0bGU7Ci0gICAgICBy
ZXR1cm4gcHJvY2VlZChlbGVtZW50LCBhdHRyaWJ1dGUpOwotICAgIH0KLSAgKTsKLX0KLQotZWxz
ZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKLSAgRWxlbWVudC5NZXRob2RzLmdldE9mZnNl
dFBhcmVudCA9IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQud3JhcCgKLSAgICBmdW5j
dGlvbihwcm9jZWVkLCBlbGVtZW50KSB7Ci0gICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAg
ICAgIHRyeSB7IGVsZW1lbnQub2Zmc2V0UGFyZW50IH0KLSAgICAgIGNhdGNoKGUpIHsgcmV0dXJu
ICQoZG9jdW1lbnQuYm9keSkgfQotICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRTdHls
ZSgncG9zaXRpb24nKTsKLSAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBw
cm9jZWVkKGVsZW1lbnQpOwotICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiAncmVs
YXRpdmUnIH0pOwotICAgICAgdmFyIHZhbHVlID0gcHJvY2VlZChlbGVtZW50KTsKLSAgICAgIGVs
ZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7Ci0gICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfQotICApOwotCi0gICR3KCdwb3NpdGlvbmVkT2Zmc2V0IHZpZXdwb3J0T2Zmc2V0
JykuZWFjaChmdW5jdGlvbihtZXRob2QpIHsKLSAgICBFbGVtZW50Lk1ldGhvZHNbbWV0aG9kXSA9
IEVsZW1lbnQuTWV0aG9kc1ttZXRob2RdLndyYXAoCi0gICAgICBmdW5jdGlvbihwcm9jZWVkLCBl
bGVtZW50KSB7Ci0gICAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgICAgICB0cnkgeyBl
bGVtZW50Lm9mZnNldFBhcmVudCB9Ci0gICAgICAgIGNhdGNoKGUpIHsgcmV0dXJuIEVsZW1lbnQu
X3JldHVybk9mZnNldCgwLDApIH0KLSAgICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRT
dHlsZSgncG9zaXRpb24nKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uICE9PSAnc3RhdGljJykgcmV0
dXJuIHByb2NlZWQoZWxlbWVudCk7Ci0gICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBlbGVtZW50
LmdldE9mZnNldFBhcmVudCgpOwotICAgICAgICBpZiAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBh
cmVudC5nZXRTdHlsZSgncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykKLSAgICAgICAgICBvZmZzZXRQ
YXJlbnQuc2V0U3R5bGUoeyB6b29tOiAxIH0pOwotICAgICAgICBlbGVtZW50LnNldFN0eWxlKHsg
cG9zaXRpb246ICdyZWxhdGl2ZScgfSk7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxl
bWVudCk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAgICApOwotICB9KTsKLQotICBFbGVt
ZW50Lk1ldGhvZHMuY3VtdWxhdGl2ZU9mZnNldCA9IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZl
T2Zmc2V0LndyYXAoCi0gICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVudCkgewotICAgICAgdHJ5
IHsgZWxlbWVudC5vZmZzZXRQYXJlbnQgfQotICAgICAgY2F0Y2goZSkgeyByZXR1cm4gRWxlbWVu
dC5fcmV0dXJuT2Zmc2V0KDAsMCkgfQotICAgICAgcmV0dXJuIHByb2NlZWQoZWxlbWVudCk7Ci0g
ICAgfQotICApOwotCi0gIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIHN0eWxlKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgc3R5bGUgPSAoc3R5
bGUgPT0gJ2Zsb2F0JyB8fCBzdHlsZSA9PSAnY3NzRmxvYXQnKSA/ICdzdHlsZUZsb2F0JyA6IHN0
eWxlLmNhbWVsaXplKCk7Ci0gICAgdmFyIHZhbHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZV07Ci0g
ICAgaWYgKCF2YWx1ZSAmJiBlbGVtZW50LmN1cnJlbnRTdHlsZSkgdmFsdWUgPSBlbGVtZW50LmN1
cnJlbnRTdHlsZVtzdHlsZV07Ci0KLSAgICBpZiAoc3R5bGUgPT0gJ29wYWNpdHknKSB7Ci0gICAg
ICBpZiAodmFsdWUgPSAoZWxlbWVudC5nZXRTdHlsZSgnZmlsdGVyJykgfHwgJycpLm1hdGNoKC9h
bHBoYVwob3BhY2l0eT0oLiopXCkvKSkKLSAgICAgICAgaWYgKHZhbHVlWzFdKSByZXR1cm4gcGFy
c2VGbG9hdCh2YWx1ZVsxXSkgLyAxMDA7Ci0gICAgICByZXR1cm4gMS4wOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZSA9PSAnYXV0bycpIHsKLSAgICAgIGlmICgoc3R5bGUgPT0gJ3dpZHRoJyB8fCBz
dHlsZSA9PSAnaGVpZ2h0JykgJiYgKGVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXknKSAhPSAnbm9u
ZScpKQotICAgICAgICByZXR1cm4gZWxlbWVudFsnb2Zmc2V0JyArIHN0eWxlLmNhcGl0YWxpemUo
KV0gKyAncHgnOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsK
LSAgfTsKLQotICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQs
IHZhbHVlKSB7Ci0gICAgZnVuY3Rpb24gc3RyaXBBbHBoYShmaWx0ZXIpewotICAgICAgcmV0dXJu
IGZpbHRlci5yZXBsYWNlKC9hbHBoYVwoW15cKV0qXCkvZ2ksJycpOwotICAgIH0KLSAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgY3VycmVudFN0eWxlID0gZWxlbWVudC5jdXJyZW50
U3R5bGU7Ci0gICAgaWYgKChjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5oYXNMYXlvdXQp
IHx8Ci0gICAgICAoIWN1cnJlbnRTdHlsZSAmJiBlbGVtZW50LnN0eWxlLnpvb20gPT0gJ25vcm1h
bCcpKQotICAgICAgICBlbGVtZW50LnN0eWxlLnpvb20gPSAxOwotCi0gICAgdmFyIGZpbHRlciA9
IGVsZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicpLCBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7Ci0gICAg
aWYgKHZhbHVlID09IDEgfHwgdmFsdWUgPT09ICcnKSB7Ci0gICAgICAoZmlsdGVyID0gc3RyaXBB
bHBoYShmaWx0ZXIpKSA/Ci0gICAgICAgIHN0eWxlLmZpbHRlciA9IGZpbHRlciA6IHN0eWxlLnJl
bW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7Ci0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9IGVs
c2UgaWYgKHZhbHVlIDwgMC4wMDAwMSkgdmFsdWUgPSAwOwotICAgIHN0eWxlLmZpbHRlciA9IHN0
cmlwQWxwaGEoZmlsdGVyKSArCi0gICAgICAnYWxwaGEob3BhY2l0eT0nICsgKHZhbHVlICogMTAw
KSArICcpJzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfTsKLQotICBFbGVtZW50Ll9hdHRyaWJ1
dGVUcmFuc2xhdGlvbnMgPSAoZnVuY3Rpb24oKXsKLQotICAgIHZhciBjbGFzc1Byb3AgPSAnY2xh
c3NOYW1lJzsKLSAgICB2YXIgZm9yUHJvcCA9ICdmb3InOwotCi0gICAgdmFyIGVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0KLSAgICBlbC5zZXRBdHRyaWJ1dGUoY2xhc3NQcm9w
LCAneCcpOwotCi0gICAgaWYgKGVsLmNsYXNzTmFtZSAhPT0gJ3gnKSB7Ci0gICAgICBlbC5zZXRB
dHRyaWJ1dGUoJ2NsYXNzJywgJ3gnKTsKLSAgICAgIGlmIChlbC5jbGFzc05hbWUgPT09ICd4Jykg
ewotICAgICAgICBjbGFzc1Byb3AgPSAnY2xhc3MnOwotICAgICAgfQotICAgIH0KLSAgICBlbCA9
IG51bGw7Ci0KLSAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7Ci0gICAg
ZWwuc2V0QXR0cmlidXRlKGZvclByb3AsICd4Jyk7Ci0gICAgaWYgKGVsLmh0bWxGb3IgIT09ICd4
JykgewotICAgICAgZWwuc2V0QXR0cmlidXRlKCdodG1sRm9yJywgJ3gnKTsKLSAgICAgIGlmIChl
bC5odG1sRm9yID09PSAneCcpIHsKLSAgICAgICAgZm9yUHJvcCA9ICdodG1sRm9yJzsKLSAgICAg
IH0KLSAgICB9Ci0gICAgZWwgPSBudWxsOwotCi0gICAgcmV0dXJuIHsKLSAgICAgIHJlYWQ6IHsK
LSAgICAgICAgbmFtZXM6IHsKLSAgICAgICAgICAnY2xhc3MnOiAgICAgIGNsYXNzUHJvcCwKLSAg
ICAgICAgICAnY2xhc3NOYW1lJzogIGNsYXNzUHJvcCwKLSAgICAgICAgICAnZm9yJzogICAgICAg
IGZvclByb3AsCi0gICAgICAgICAgJ2h0bWxGb3InOiAgICBmb3JQcm9wCi0gICAgICAgIH0sCi0g
ICAgICAgIHZhbHVlczogewotICAgICAgICAgIF9nZXRBdHRyOiBmdW5jdGlvbihlbGVtZW50LCBh
dHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRy
aWJ1dGUpOwotICAgICAgICAgIH0sCi0gICAgICAgICAgX2dldEF0dHIyOiBmdW5jdGlvbihlbGVt
ZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0
ZShhdHRyaWJ1dGUsIDIpOwotICAgICAgICAgIH0sCi0gICAgICAgICAgX2dldEF0dHJOb2RlOiBm
dW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gZWxl
bWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUudmFsdWUgOiAiIjsKLSAgICAgICAgICB9LAotICAgICAgICAgIF9nZXRFdjogKGZ1
bmN0aW9uKCl7Ci0KLSAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwotICAgICAgICAgICAgZWwub25jbGljayA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9u
OwotICAgICAgICAgICAgdmFyIHZhbHVlID0gZWwuZ2V0QXR0cmlidXRlKCdvbmNsaWNrJyk7Ci0g
ICAgICAgICAgICB2YXIgZjsKLQotICAgICAgICAgICAgaWYgKFN0cmluZyh2YWx1ZSkuaW5kZXhP
ZigneycpID4gLTEpIHsKLSAgICAgICAgICAgICAgZiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJp
YnV0ZSkgewotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRl
KGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUpIHJldHVybiBudWxs
OwotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS50b1N0cmluZygpOwotICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5zcGxpdCgneycpWzFdOwotICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5zcGxpdCgnfScpWzBdOwotICAgICAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUuc3RyaXAoKTsKLSAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnJykgewotICAgICAgICAg
ICAgICBmID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7Ci0gICAgICAgICAgICAgICAg
YXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWF0dHJpYnV0ZSkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZS5zdHJpcCgpOwotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWwgPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAgfSko
KSwKLSAgICAgICAgICBfZmxhZzogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gJChlbGVtZW50KS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSA/IGF0dHJp
YnV0ZSA6IG51bGw7Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxl
bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGUuY3NzVGV4dC50b0xvd2Vy
Q2FzZSgpOwotICAgICAgICAgIH0sCi0gICAgICAgICAgdGl0bGU6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnRpdGxlOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgfSkoKTsKLQotICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFu
c2xhdGlvbnMud3JpdGUgPSB7Ci0gICAgbmFtZXM6IE9iamVjdC5leHRlbmQoewotICAgICAgY2Vs
bHBhZGRpbmc6ICdjZWxsUGFkZGluZycsCi0gICAgICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5n
JwotICAgIH0sIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5yZWFkLm5hbWVzKSwKLSAg
ICB2YWx1ZXM6IHsKLSAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0g
ICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7Ci0gICAgICB9LAotCi0gICAgICBzdHls
ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICAgICAgZWxlbWVudC5zdHlsZS5jc3NU
ZXh0ID0gdmFsdWUgPyB2YWx1ZSA6ICcnOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBFbGVt
ZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzID0ge307Ci0KLSAgJHcoJ2NvbFNwYW4gcm93
U3BhbiB2QWxpZ24gZGF0ZVRpbWUgYWNjZXNzS2V5IHRhYkluZGV4ICcgKwotICAgICAgJ2VuY1R5
cGUgbWF4TGVuZ3RoIHJlYWRPbmx5IGxvbmdEZXNjIGZyYW1lQm9yZGVyJykuZWFjaChmdW5jdGlv
bihhdHRyKSB7Ci0gICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlLm5hbWVz
W2F0dHIudG9Mb3dlckNhc2UoKV0gPSBhdHRyOwotICAgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5z
bGF0aW9ucy5oYXNbYXR0ci50b0xvd2VyQ2FzZSgpXSA9IGF0dHI7Ci0gIH0pOwotCi0gIChmdW5j
dGlvbih2KSB7Ci0gICAgT2JqZWN0LmV4dGVuZCh2LCB7Ci0gICAgICBocmVmOiAgICAgICAgdi5f
Z2V0QXR0cjIsCi0gICAgICBzcmM6ICAgICAgICAgdi5fZ2V0QXR0cjIsCi0gICAgICB0eXBlOiAg
ICAgICAgdi5fZ2V0QXR0ciwKLSAgICAgIGFjdGlvbjogICAgICB2Ll9nZXRBdHRyTm9kZSwKLSAg
ICAgIGRpc2FibGVkOiAgICB2Ll9mbGFnLAotICAgICAgY2hlY2tlZDogICAgIHYuX2ZsYWcsCi0g
ICAgICByZWFkb25seTogICAgdi5fZmxhZywKLSAgICAgIG11bHRpcGxlOiAgICB2Ll9mbGFnLAot
ICAgICAgb25sb2FkOiAgICAgIHYuX2dldEV2LAotICAgICAgb251bmxvYWQ6ICAgIHYuX2dldEV2
LAotICAgICAgb25jbGljazogICAgIHYuX2dldEV2LAotICAgICAgb25kYmxjbGljazogIHYuX2dl
dEV2LAotICAgICAgb25tb3VzZWRvd246IHYuX2dldEV2LAotICAgICAgb25tb3VzZXVwOiAgIHYu
X2dldEV2LAotICAgICAgb25tb3VzZW92ZXI6IHYuX2dldEV2LAotICAgICAgb25tb3VzZW1vdmU6
IHYuX2dldEV2LAotICAgICAgb25tb3VzZW91dDogIHYuX2dldEV2LAotICAgICAgb25mb2N1czog
ICAgIHYuX2dldEV2LAotICAgICAgb25ibHVyOiAgICAgIHYuX2dldEV2LAotICAgICAgb25rZXlw
cmVzczogIHYuX2dldEV2LAotICAgICAgb25rZXlkb3duOiAgIHYuX2dldEV2LAotICAgICAgb25r
ZXl1cDogICAgIHYuX2dldEV2LAotICAgICAgb25zdWJtaXQ6ICAgIHYuX2dldEV2LAotICAgICAg
b25yZXNldDogICAgIHYuX2dldEV2LAotICAgICAgb25zZWxlY3Q6ICAgIHYuX2dldEV2LAotICAg
ICAgb25jaGFuZ2U6ICAgIHYuX2dldEV2Ci0gICAgfSk7Ci0gIH0pKEVsZW1lbnQuX2F0dHJpYnV0
ZVRyYW5zbGF0aW9ucy5yZWFkLnZhbHVlcyk7Ci0KLSAgaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVh
dHVyZXMuRWxlbWVudEV4dGVuc2lvbnMpIHsKLSAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICBmdW5j
dGlvbiBfZGVzY2VuZGFudHMoZWxlbWVudCkgewotICAgICAgICB2YXIgbm9kZXMgPSBlbGVtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyksIHJlc3VsdHMgPSBbXTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICAgIGlmIChub2Rl
LnRhZ05hbWUgIT09ICIhIikgLy8gRmlsdGVyIG91dCBjb21tZW50IG5vZGVzLgotICAgICAgICAg
ICAgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgIH0K
LQotICAgICAgRWxlbWVudC5NZXRob2RzLmRvd24gPSBmdW5jdGlvbihlbGVtZW50LCBleHByZXNz
aW9uLCBpbmRleCkgewotICAgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIGVsZW1lbnQuZmlyc3REZXNjZW5kYW50KCk7
Ci0gICAgICAgIHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikgPyBfZGVzY2VuZGFu
dHMoZWxlbWVudClbZXhwcmVzc2lvbl0gOgotICAgICAgICAgIEVsZW1lbnQuc2VsZWN0KGVsZW1l
bnQsIGV4cHJlc3Npb24pW2luZGV4IHx8IDBdOwotICAgICAgfQotICAgIH0pKCk7Ci0gIH0KLQot
fQotCi1lbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5HZWNrbyAmJiAvcnY6MVwuOFwuMC8udGVz
dChuYXZpZ2F0b3IudXNlckFnZW50KSkgewotICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9
IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0g
ICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09IDEpID8gMC45OTk5OTkgOgotICAg
ICAgKHZhbHVlID09PSAnJykgPyAnJyA6ICh2YWx1ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVlOwot
ICAgIHJldHVybiBlbGVtZW50OwotICB9OwotfQotCi1lbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nl
ci5XZWJLaXQpIHsKLSAgRWxlbWVudC5NZXRob2RzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVt
ZW50LCB2YWx1ZSkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuc3R5
bGUub3BhY2l0eSA9ICh2YWx1ZSA9PSAxIHx8IHZhbHVlID09PSAnJykgPyAnJyA6Ci0gICAgICAo
dmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1ZTsKLQotICAgIGlmICh2YWx1ZSA9PSAxKQotICAg
ICAgaWYoZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gJ0lNRycgJiYgZWxlbWVudC53
aWR0aCkgewotICAgICAgICBlbGVtZW50LndpZHRoKys7IGVsZW1lbnQud2lkdGgtLTsKLSAgICAg
IH0gZWxzZSB0cnkgewotICAgICAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcg
Jyk7Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobik7Ci0gICAgICAgIGVsZW1lbnQucmVt
b3ZlQ2hpbGQobik7Ci0gICAgICB9IGNhdGNoIChlKSB7IH0KLQotICAgIHJldHVybiBlbGVtZW50
OwotICB9OwotCi0gIEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zmc2V0ID0gZnVuY3Rpb24o
ZWxlbWVudCkgewotICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwotICAgIGRvIHsKLSAg
ICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKLSAgICAgIHZhbHVlTCArPSBl
bGVtZW50Lm9mZnNldExlZnQgfHwgMDsKLSAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9
PSBkb2N1bWVudC5ib2R5KQotICAgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAn
cG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKLQotICAgICAgZWxlbWVudCA9IGVsZW1l
bnQub2Zmc2V0UGFyZW50OwotICAgIH0gd2hpbGUgKGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIEVs
ZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7Ci0gIH07Ci19Ci0KLWlmICgnb3V0
ZXJIVE1MJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKLSAgRWxlbWVudC5NZXRob2Rz
LnJlcGxhY2UgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0gICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7Ci0KLSAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVu
dCA9IGNvbnRlbnQudG9FbGVtZW50KCk7Ci0gICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVu
dCkpIHsKLSAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGVudCwgZWxl
bWVudCk7Ci0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0KLSAgICBjb250ZW50ID0gT2Jq
ZWN0LnRvSFRNTChjb250ZW50KTsKLSAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
LCB0YWdOYW1lID0gcGFyZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKLQotICAgIGlmIChFbGVt
ZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXSkgewotICAgICAgdmFyIG5l
eHRTaWJsaW5nID0gZWxlbWVudC5uZXh0KCk7Ci0gICAgICB2YXIgZnJhZ21lbnRzID0gRWxlbWVu
dC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05hbWUsIGNvbnRlbnQuc3RyaXBT
Y3JpcHRzKCkpOwotICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwotICAgICAgaWYg
KG5leHRTaWJsaW5nKQotICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBh
cmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxpbmcpIH0pOwotICAgICAgZWxzZQotICAg
ICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5hcHBlbmRDaGlsZChu
b2RlKSB9KTsKLSAgICB9Ci0gICAgZWxzZSBlbGVtZW50Lm91dGVySFRNTCA9IGNvbnRlbnQuc3Ry
aXBTY3JpcHRzKCk7Ci0KLSAgICBjb250ZW50LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVm
ZXIoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfTsKLX0KLQotRWxlbWVudC5fcmV0dXJuT2Zm
c2V0ID0gZnVuY3Rpb24obCwgdCkgewotICB2YXIgcmVzdWx0ID0gW2wsIHRdOwotICByZXN1bHQu
bGVmdCA9IGw7Ci0gIHJlc3VsdC50b3AgPSB0OwotICByZXR1cm4gcmVzdWx0OwotfTsKLQotRWxl
bWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwg
aHRtbCkgewotICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpLCB0ID0gRWxlbWVudC5faW5z
ZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFtZV07Ci0gIGlmICh0KSB7Ci0gICAgZGl2Lmlu
bmVySFRNTCA9IHRbMF0gKyBodG1sICsgdFsxXTsKLSAgICB0WzJdLnRpbWVzKGZ1bmN0aW9uKCkg
eyBkaXYgPSBkaXYuZmlyc3RDaGlsZCB9KTsKLSAgfSBlbHNlIGRpdi5pbm5lckhUTUwgPSBodG1s
OwotICByZXR1cm4gJEEoZGl2LmNoaWxkTm9kZXMpOwotfTsKLQotRWxlbWVudC5faW5zZXJ0aW9u
VHJhbnNsYXRpb25zID0gewotICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAg
ICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQpOwotICB9LAot
ICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVtZW50Lmluc2VydEJlZm9y
ZShub2RlLCBlbGVtZW50LmZpcnN0Q2hpbGQpOwotICB9LAotICBib3R0b206IGZ1bmN0aW9uKGVs
ZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpOwotICB9LAotICBh
ZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgewotICAgIGVsZW1lbnQucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUobm9kZSwgZWxlbWVudC5uZXh0U2libGluZyk7Ci0gIH0sCi0gIHRhZ3M6IHsK
LSAgICBUQUJMRTogIFsnPHRhYmxlPicsICAgICAgICAgICAgICAgICc8L3RhYmxlPicsICAgICAg
ICAgICAgICAgICAgIDFdLAotICAgIFRCT0RZOiAgWyc8dGFibGU+PHRib2R5PicsICAgICAgICAg
JzwvdGJvZHk+PC90YWJsZT4nLCAgICAgICAgICAgMl0sCi0gICAgVFI6ICAgICBbJzx0YWJsZT48
dGJvZHk+PHRyPicsICAgICAnPC90cj48L3Rib2R5PjwvdGFibGU+JywgICAgICAzXSwKLSAgICBU
RDogICAgIFsnPHRhYmxlPjx0Ym9keT48dHI+PHRkPicsICc8L3RkPjwvdHI+PC90Ym9keT48L3Rh
YmxlPicsIDRdLAotICAgIFNFTEVDVDogWyc8c2VsZWN0PicsICAgICAgICAgICAgICAgJzwvc2Vs
ZWN0PicsICAgICAgICAgICAgICAgICAgMV0KLSAgfQotfTsKLQotKGZ1bmN0aW9uKCkgewotICB2
YXIgdGFncyA9IEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzOwotICBPYmplY3Qu
ZXh0ZW5kKHRhZ3MsIHsKLSAgICBUSEVBRDogdGFncy5UQk9EWSwKLSAgICBURk9PVDogdGFncy5U
Qk9EWSwKLSAgICBUSDogICAgdGFncy5URAotICB9KTsKLX0pKCk7Ci0KLUVsZW1lbnQuTWV0aG9k
cy5TaW11bGF0ZWQgPSB7Ci0gIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmli
dXRlKSB7Ci0gICAgYXR0cmlidXRlID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhh
c1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKLSAgICB2YXIgbm9kZSA9ICQoZWxlbWVudCkuZ2V0
QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOwotICAgIHJldHVybiAhIShub2RlICYmIG5vZGUuc3Bl
Y2lmaWVkKTsKLSAgfQotfTsKLQotRWxlbWVudC5NZXRob2RzLkJ5VGFnID0geyB9OwotCi1PYmpl
Y3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7Ci0KLShmdW5jdGlvbihkaXYpIHsK
LQotICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgJiYg
ZGl2WydfX3Byb3RvX18nXSkgewotICAgIHdpbmRvdy5IVE1MRWxlbWVudCA9IHsgfTsKLSAgICB3
aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlID0gZGl2WydfX3Byb3RvX18nXTsKLSAgICBQcm90
b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zID0gdHJ1ZTsKLSAgfQotCi0g
IGRpdiA9IG51bGw7Ci0KLX0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKQotCi1FbGVt
ZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKLQotICBmdW5jdGlvbiBjaGVja0RlZmljaWVuY3ko
dGFnTmFtZSkgewotICAgIGlmICh0eXBlb2Ygd2luZG93LkVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcp
IHsKLSAgICAgIHZhciBwcm90byA9IHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZTsKLSAgICAgIGlm
IChwcm90bykgewotICAgICAgICB2YXIgaWQgPSAnXycgKyAoTWF0aC5yYW5kb20oKSsnJykuc2xp
Y2UoMik7Ci0gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7
Ci0gICAgICAgIHByb3RvW2lkXSA9ICd4JzsKLSAgICAgICAgdmFyIGlzQnVnZ3kgPSAoZWxbaWRd
ICE9PSAneCcpOwotICAgICAgICBkZWxldGUgcHJvdG9baWRdOwotICAgICAgICBlbCA9IG51bGw7
Ci0gICAgICAgIHJldHVybiBpc0J1Z2d5OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBmdW5jdGlvbiBleHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBtZXRob2Rz
KSB7Ci0gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbWV0aG9kcykgewotICAgICAgdmFyIHZhbHVl
ID0gbWV0aG9kc1twcm9wZXJ0eV07Ci0gICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24odmFsdWUp
ICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCi0gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID0g
dmFsdWUubWV0aG9kaXplKCk7Ci0gICAgfQotICB9Ci0KLSAgdmFyIEhUTUxPQkpFQ1RFTEVNRU5U
X1BST1RPVFlQRV9CVUdHWSA9IGNoZWNrRGVmaWNpZW5jeSgnb2JqZWN0Jyk7Ci0KLSAgaWYgKFBy
b3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykgewotICAg
IGlmIChIVE1MT0JKRUNURUxFTUVOVF9QUk9UT1RZUEVfQlVHR1kpIHsKLSAgICAgIHJldHVybiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50
Ll9leHRlbmRlZEJ5UHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgdmFyIHQg
PSBlbGVtZW50LnRhZ05hbWU7Ci0gICAgICAgICAgaWYgKHQgJiYgKC9eKD86b2JqZWN0fGFwcGxl
dHxlbWJlZCkkL2kudGVzdCh0KSkpIHsKLSAgICAgICAgICAgIGV4dGVuZEVsZW1lbnRXaXRoKGVs
ZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7Ci0gICAgICAgICAgICBleHRlbmRFbGVtZW50V2l0aChl
bGVtZW50LCBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkKTsKLSAgICAgICAgICAgIGV4dGVuZEVs
ZW1lbnRXaXRoKGVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0LnRvVXBwZXJDYXNlKCld
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBQcm90b3R5cGUuSzsKLSAgfQotCi0gIHZhciBNZXRob2Rz
ID0geyB9LCBCeVRhZyA9IEVsZW1lbnQuTWV0aG9kcy5CeVRhZzsKLQotICB2YXIgZXh0ZW5kID0g
T2JqZWN0LmV4dGVuZChmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgaWYgKCFlbGVtZW50IHx8IHR5
cGVvZiBlbGVtZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlICE9ICd1bmRlZmluZWQnIHx8Ci0gICAg
ICAgIGVsZW1lbnQubm9kZVR5cGUgIT0gMSB8fCBlbGVtZW50ID09IHdpbmRvdykgcmV0dXJuIGVs
ZW1lbnQ7Ci0KLSAgICB2YXIgbWV0aG9kcyA9IE9iamVjdC5jbG9uZShNZXRob2RzKSwKLSAgICAg
ICAgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgaWYgKEJ5
VGFnW3RhZ05hbWVdKSBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIEJ5VGFnW3RhZ05hbWVdKTsKLQot
ICAgIGV4dGVuZEVsZW1lbnRXaXRoKGVsZW1lbnQsIG1ldGhvZHMpOwotCi0gICAgZWxlbWVudC5f
ZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgIHJldHVy
biBlbGVtZW50OwotCi0gIH0sIHsKLSAgICByZWZyZXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIGlm
ICghUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50RXh0ZW5zaW9ucykgewotICAgICAg
ICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcyk7Ci0gICAgICAgIE9iamVj
dC5leHRlbmQoTWV0aG9kcywgRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9KTsKLQotICBleHRlbmQucmVmcmVzaCgpOwotICByZXR1cm4gZXh0ZW5kOwotfSko
KTsKLQotRWxlbWVudC5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUp
IHsKLSAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKSByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1
dGUoYXR0cmlidXRlKTsKLSAgcmV0dXJuIEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQuaGFzQXR0
cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSk7Ci19OwotCi1FbGVtZW50LmFkZE1ldGhvZHMgPSBm
dW5jdGlvbihtZXRob2RzKSB7Ci0gIHZhciBGID0gUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcywg
VCA9IEVsZW1lbnQuTWV0aG9kcy5CeVRhZzsKLQotICBpZiAoIW1ldGhvZHMpIHsKLSAgICBPYmpl
Y3QuZXh0ZW5kKEZvcm0sIEZvcm0uTWV0aG9kcyk7Ci0gICAgT2JqZWN0LmV4dGVuZChGb3JtLkVs
ZW1lbnQsIEZvcm0uRWxlbWVudC5NZXRob2RzKTsKLSAgICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQu
TWV0aG9kcy5CeVRhZywgewotICAgICAgIkZPUk0iOiAgICAgT2JqZWN0LmNsb25lKEZvcm0uTWV0
aG9kcyksCi0gICAgICAiSU5QVVQiOiAgICBPYmplY3QuY2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhv
ZHMpLAotICAgICAgIlNFTEVDVCI6ICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2Rz
KSwKLSAgICAgICJURVhUQVJFQSI6IE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcykK
LSAgICB9KTsKLSAgfQotCi0gIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsKLSAgICB2YXIg
dGFnTmFtZSA9IG1ldGhvZHM7Ci0gICAgbWV0aG9kcyA9IGFyZ3VtZW50c1sxXTsKLSAgfQotCi0g
IGlmICghdGFnTmFtZSkgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMsIG1ldGhvZHMgfHwg
eyB9KTsKLSAgZWxzZSB7Ci0gICAgaWYgKE9iamVjdC5pc0FycmF5KHRhZ05hbWUpKSB0YWdOYW1l
LmVhY2goZXh0ZW5kKTsKLSAgICBlbHNlIGV4dGVuZCh0YWdOYW1lKTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGV4dGVuZCh0YWdOYW1lKSB7Ci0gICAgdGFnTmFtZSA9IHRhZ05hbWUudG9VcHBlckNhc2Uo
KTsKLSAgICBpZiAoIUVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSkKLSAgICAgIEVsZW1l
bnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSA9IHsgfTsKLSAgICBPYmplY3QuZXh0ZW5kKEVsZW1l
bnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSwgbWV0aG9kcyk7Ci0gIH0KLQotICBmdW5jdGlvbiBj
b3B5KG1ldGhvZHMsIGRlc3RpbmF0aW9uLCBvbmx5SWZBYnNlbnQpIHsKLSAgICBvbmx5SWZBYnNl
bnQgPSBvbmx5SWZBYnNlbnQgfHwgZmFsc2U7Ci0gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbWV0
aG9kcykgewotICAgICAgdmFyIHZhbHVlID0gbWV0aG9kc1twcm9wZXJ0eV07Ci0gICAgICBpZiAo
IU9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSkgY29udGludWU7Ci0gICAgICBpZiAoIW9ubHlJZkFi
c2VudCB8fCAhKHByb3BlcnR5IGluIGRlc3RpbmF0aW9uKSkKLSAgICAgICAgZGVzdGluYXRpb25b
cHJvcGVydHldID0gdmFsdWUubWV0aG9kaXplKCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
ZmluZERPTUNsYXNzKHRhZ05hbWUpIHsKLSAgICB2YXIga2xhc3M7Ci0gICAgdmFyIHRyYW5zID0g
ewotICAgICAgIk9QVEdST1VQIjogIk9wdEdyb3VwIiwgIlRFWFRBUkVBIjogIlRleHRBcmVhIiwg
IlAiOiAiUGFyYWdyYXBoIiwKLSAgICAgICJGSUVMRFNFVCI6ICJGaWVsZFNldCIsICJVTCI6ICJV
TGlzdCIsICJPTCI6ICJPTGlzdCIsICJETCI6ICJETGlzdCIsCi0gICAgICAiRElSIjogIkRpcmVj
dG9yeSIsICJIMSI6ICJIZWFkaW5nIiwgIkgyIjogIkhlYWRpbmciLCAiSDMiOiAiSGVhZGluZyIs
Ci0gICAgICAiSDQiOiAiSGVhZGluZyIsICJINSI6ICJIZWFkaW5nIiwgIkg2IjogIkhlYWRpbmci
LCAiUSI6ICJRdW90ZSIsCi0gICAgICAiSU5TIjogIk1vZCIsICJERUwiOiAiTW9kIiwgIkEiOiAi
QW5jaG9yIiwgIklNRyI6ICJJbWFnZSIsICJDQVBUSU9OIjoKLSAgICAgICJUYWJsZUNhcHRpb24i
LCAiQ09MIjogIlRhYmxlQ29sIiwgIkNPTEdST1VQIjogIlRhYmxlQ29sIiwgIlRIRUFEIjoKLSAg
ICAgICJUYWJsZVNlY3Rpb24iLCAiVEZPT1QiOiAiVGFibGVTZWN0aW9uIiwgIlRCT0RZIjogIlRh
YmxlU2VjdGlvbiIsICJUUiI6Ci0gICAgICAiVGFibGVSb3ciLCAiVEgiOiAiVGFibGVDZWxsIiwg
IlREIjogIlRhYmxlQ2VsbCIsICJGUkFNRVNFVCI6Ci0gICAgICAiRnJhbWVTZXQiLCAiSUZSQU1F
IjogIklGcmFtZSIKLSAgICB9OwotICAgIGlmICh0cmFuc1t0YWdOYW1lXSkga2xhc3MgPSAnSFRN
TCcgKyB0cmFuc1t0YWdOYW1lXSArICdFbGVtZW50JzsKLSAgICBpZiAod2luZG93W2tsYXNzXSkg
cmV0dXJuIHdpbmRvd1trbGFzc107Ci0gICAga2xhc3MgPSAnSFRNTCcgKyB0YWdOYW1lICsgJ0Vs
ZW1lbnQnOwotICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKLSAg
ICBrbGFzcyA9ICdIVE1MJyArIHRhZ05hbWUuY2FwaXRhbGl6ZSgpICsgJ0VsZW1lbnQnOwotICAg
IGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKLQotICAgIHZhciBlbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICB2YXIgcHJvdG8gPSBl
bGVtZW50WydfX3Byb3RvX18nXSB8fCBlbGVtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZTsKLSAg
ICBlbGVtZW50ID0gbnVsbDsKLSAgICByZXR1cm4gcHJvdG87Ci0gIH0KLQotICB2YXIgZWxlbWVu
dFByb3RvdHlwZSA9IHdpbmRvdy5IVE1MRWxlbWVudCA/IEhUTUxFbGVtZW50LnByb3RvdHlwZSA6
Ci0gICBFbGVtZW50LnByb3RvdHlwZTsKLQotICBpZiAoRi5FbGVtZW50RXh0ZW5zaW9ucykgewot
ICAgIGNvcHkoRWxlbWVudC5NZXRob2RzLCBlbGVtZW50UHJvdG90eXBlKTsKLSAgICBjb3B5KEVs
ZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQsIGVsZW1lbnRQcm90b3R5cGUsIHRydWUpOwotICB9Ci0K
LSAgaWYgKEYuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykgewotICAgIGZvciAodmFyIHRhZyBp
biBFbGVtZW50Lk1ldGhvZHMuQnlUYWcpIHsKLSAgICAgIHZhciBrbGFzcyA9IGZpbmRET01DbGFz
cyh0YWcpOwotICAgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChrbGFzcykpIGNvbnRpbnVlOwot
ICAgICAgY29weShUW3RhZ10sIGtsYXNzLnByb3RvdHlwZSk7Ci0gICAgfQotICB9Ci0KLSAgT2Jq
ZWN0LmV4dGVuZChFbGVtZW50LCBFbGVtZW50Lk1ldGhvZHMpOwotICBkZWxldGUgRWxlbWVudC5C
eVRhZzsKLQotICBpZiAoRWxlbWVudC5leHRlbmQucmVmcmVzaCkgRWxlbWVudC5leHRlbmQucmVm
cmVzaCgpOwotICBFbGVtZW50LmNhY2hlID0geyB9OwotfTsKLQotCi1kb2N1bWVudC52aWV3cG9y
dCA9IHsKLQotICBnZXREaW1lbnNpb25zOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4geyB3aWR0
aDogdGhpcy5nZXRXaWR0aCgpLCBoZWlnaHQ6IHRoaXMuZ2V0SGVpZ2h0KCkgfTsKLSAgfSwKLQot
ICBnZXRTY3JvbGxPZmZzZXRzOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gRWxlbWVudC5fcmV0
dXJuT2Zmc2V0KAotICAgICAgd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKLSAgICAgIHdp
bmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICB8
fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCk7Ci0gIH0KLX07Ci0KLShmdW5jdGlvbih2aWV3cG9y
dCkgewotICB2YXIgQiA9IFByb3RvdHlwZS5Ccm93c2VyLCBkb2MgPSBkb2N1bWVudCwgZWxlbWVu
dCwgcHJvcGVydHkgPSB7fTsKLQotICBmdW5jdGlvbiBnZXRSb290RWxlbWVudCgpIHsKLSAgICBp
ZiAoQi5XZWJLaXQgJiYgIWRvYy5ldmFsdWF0ZSkKLSAgICAgIHJldHVybiBkb2N1bWVudDsKLQot
ICAgIGlmIChCLk9wZXJhICYmIHdpbmRvdy5wYXJzZUZsb2F0KHdpbmRvdy5vcGVyYS52ZXJzaW9u
KCkpIDwgOS41KQotICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7Ci0KLSAgICByZXR1cm4gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICB9Ci0KLSAgZnVuY3Rpb24gZGVmaW5lKEQpIHsKLSAg
ICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBnZXRSb290RWxlbWVudCgpOwotCi0gICAgcHJvcGVy
dHlbRF0gPSAnY2xpZW50JyArIEQ7Ci0KLSAgICB2aWV3cG9ydFsnZ2V0JyArIERdID0gZnVuY3Rp
b24oKSB7IHJldHVybiBlbGVtZW50W3Byb3BlcnR5W0RdXSB9OwotICAgIHJldHVybiB2aWV3cG9y
dFsnZ2V0JyArIERdKCk7Ci0gIH0KLQotICB2aWV3cG9ydC5nZXRXaWR0aCAgPSBkZWZpbmUuY3Vy
cnkoJ1dpZHRoJyk7Ci0KLSAgdmlld3BvcnQuZ2V0SGVpZ2h0ID0gZGVmaW5lLmN1cnJ5KCdIZWln
aHQnKTsKLX0pKGRvY3VtZW50LnZpZXdwb3J0KTsKLQotCi1FbGVtZW50LlN0b3JhZ2UgPSB7Ci0g
IFVJRDogMQotfTsKLQotRWxlbWVudC5hZGRNZXRob2RzKHsKLSAgZ2V0U3RvcmFnZTogZnVuY3Rp
b24oZWxlbWVudCkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOwot
Ci0gICAgdmFyIHVpZDsKLSAgICBpZiAoZWxlbWVudCA9PT0gd2luZG93KSB7Ci0gICAgICB1aWQg
PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAodHlwZW9mIGVsZW1lbnQuX3Byb3RvdHlwZVVJ
RCA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIGVsZW1lbnQuX3Byb3RvdHlwZVVJRCA9IFtFbGVt
ZW50LlN0b3JhZ2UuVUlEKytdOwotICAgICAgdWlkID0gZWxlbWVudC5fcHJvdG90eXBlVUlEWzBd
OwotICAgIH0KLQotICAgIGlmICghRWxlbWVudC5TdG9yYWdlW3VpZF0pCi0gICAgICBFbGVtZW50
LlN0b3JhZ2VbdWlkXSA9ICRIKCk7Ci0KLSAgICByZXR1cm4gRWxlbWVudC5TdG9yYWdlW3VpZF07
Ci0gIH0sCi0KLSAgc3RvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGtleSwgdmFsdWUpIHsKLSAgICBp
ZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKLQotICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID09PSAyKSB7Ci0gICAgICBFbGVtZW50LmdldFN0b3JhZ2UoZWxlbWVudCkudXBkYXRl
KGtleSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVsZW1lbnQuZ2V0U3RvcmFnZShlbGVtZW50KS5z
ZXQoa2V5LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAg
cmV0cmlldmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGtleSwgZGVmYXVsdFZhbHVlKSB7Ci0gICAgaWYg
KCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47Ci0gICAgdmFyIGhhc2ggPSBFbGVtZW50
LmdldFN0b3JhZ2UoZWxlbWVudCksIHZhbHVlID0gaGFzaC5nZXQoa2V5KTsKLQotICAgIGlmIChP
YmplY3QuaXNVbmRlZmluZWQodmFsdWUpKSB7Ci0gICAgICBoYXNoLnNldChrZXksIGRlZmF1bHRW
YWx1ZSk7Ci0gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dmFsdWU7Ci0gIH0sCi0KLSAgY2xvbmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGRlZXApIHsKLSAgICBp
ZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKLSAgICB2YXIgY2xvbmUgPSBlbGVt
ZW50LmNsb25lTm9kZShkZWVwKTsKLSAgICBjbG9uZS5fcHJvdG90eXBlVUlEID0gdm9pZCAwOwot
ICAgIGlmIChkZWVwKSB7Ci0gICAgICB2YXIgZGVzY2VuZGFudHMgPSBFbGVtZW50LnNlbGVjdChj
bG9uZSwgJyonKSwKLSAgICAgICAgICBpID0gZGVzY2VuZGFudHMubGVuZ3RoOwotICAgICAgd2hp
bGUgKGktLSkgewotICAgICAgICBkZXNjZW5kYW50c1tpXS5fcHJvdG90eXBlVUlEID0gdm9pZCAw
OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gRWxlbWVudC5leHRlbmQoY2xvbmUpOwotICB9
Ci19KTsKLS8qIFBvcnRpb25zIG9mIHRoZSBTZWxlY3RvciBjbGFzcyBhcmUgZGVyaXZlZCBmcm9t
IEphY2sgU2xvY3VtJ3MgRG9tUXVlcnksCi0gKiBwYXJ0IG9mIFlVSS1FeHQgdmVyc2lvbiAwLjQw
LCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYW4gTUlULXN0eWxlCi0gKiBsaWNlbnNl
LiAgUGxlYXNlIHNlZSBodHRwOi8vd3d3Lnl1aS1leHQuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4gKi8KLQotdmFyIFNlbGVjdG9yID0gQ2xhc3MuY3JlYXRlKHsKLSAgaW5pdGlhbGl6ZTogZnVu
Y3Rpb24oZXhwcmVzc2lvbikgewotICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Ry
aXAoKTsKLQotICAgIGlmICh0aGlzLnNob3VsZFVzZVNlbGVjdG9yc0FQSSgpKSB7Ci0gICAgICB0
aGlzLm1vZGUgPSAnc2VsZWN0b3JzQVBJJzsKLSAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkVXNl
WFBhdGgoKSkgewotICAgICAgdGhpcy5tb2RlID0gJ3hwYXRoJzsKLSAgICAgIHRoaXMuY29tcGls
ZVhQYXRoTWF0Y2hlcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLm1vZGUgPSAibm9ybWFs
IjsKLSAgICAgIHRoaXMuY29tcGlsZU1hdGNoZXIoKTsKLSAgICB9Ci0KLSAgfSwKLQotICBzaG91
bGRVc2VYUGF0aDogKGZ1bmN0aW9uKCkgewotCi0gICAgdmFyIElTX0RFU0NFTkRBTlRfU0VMRUNU
T1JfQlVHR1kgPSAoZnVuY3Rpb24oKXsKLSAgICAgIHZhciBpc0J1Z2d5ID0gZmFsc2U7Ci0gICAg
ICBpZiAoZG9jdW1lbnQuZXZhbHVhdGUgJiYgd2luZG93LlhQYXRoUmVzdWx0KSB7Ci0gICAgICAg
IHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBlbC5pbm5l
ckhUTUwgPSAnPHVsPjxsaT48L2xpPjwvdWw+PGRpdj48dWw+PGxpPjwvbGk+PC91bD48L2Rpdj4n
OwotCi0gICAgICAgIHZhciB4cGF0aCA9ICIuLy8qW2xvY2FsLW5hbWUoKT0ndWwnIG9yIGxvY2Fs
LW5hbWUoKT0nVUwnXSIgKwotICAgICAgICAgICIvLypbbG9jYWwtbmFtZSgpPSdsaScgb3IgbG9j
YWwtbmFtZSgpPSdMSSddIjsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVh
dGUoeHBhdGgsIGVsLCBudWxsLAotICAgICAgICAgIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLCBudWxsKTsKLQotICAgICAgICBpc0J1Z2d5ID0gKHJlc3VsdC5zbmFwc2hv
dExlbmd0aCAhPT0gMik7Ci0gICAgICAgIGVsID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBpc0J1Z2d5OwotICAgIH0pKCk7Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBp
ZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgpIHJldHVybiBmYWxzZTsKLQotICAg
ICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb247Ci0KLSAgICAgIGlmIChQcm90b3R5cGUuQnJvd3Nl
ci5XZWJLaXQgJiYKLSAgICAgICAoZS5pbmNsdWRlKCItb2YtdHlwZSIpIHx8IGUuaW5jbHVkZSgi
OmVtcHR5IikpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmICgoLyhcW1tcdy1d
Kj86fDpjaGVja2VkKS8pLnRlc3QoZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
aWYgKElTX0RFU0NFTkRBTlRfU0VMRUNUT1JfQlVHR1kpIHJldHVybiBmYWxzZTsKLQotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gIH0pKCksCi0KLSAgc2hvdWxkVXNlU2VsZWN0b3JzQVBJ
OiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU2VsZWN0
b3JzQVBJKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoU2VsZWN0b3IuQ0FTRV9JTlNFTlNJVElW
RV9DTEFTU19OQU1FUykgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFTZWxlY3Rvci5fZGl2KSBT
ZWxlY3Rvci5fZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpOwotCi0gICAgdHJ5IHsKLSAgICAgIFNl
bGVjdG9yLl9kaXYucXVlcnlTZWxlY3Rvcih0aGlzLmV4cHJlc3Npb24pOwotICAgIH0gY2F0Y2go
ZSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9
LAotCi0gIGNvbXBpbGVNYXRjaGVyOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgZSA9IHRoaXMuZXhw
cmVzc2lvbiwgcHMgPSBTZWxlY3Rvci5wYXR0ZXJucywgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLAot
ICAgICAgICBjID0gU2VsZWN0b3IuY3JpdGVyaWEsIGxlLCBwLCBtLCBsZW4gPSBwcy5sZW5ndGgs
IG5hbWU7Ci0KLSAgICBpZiAoU2VsZWN0b3IuX2NhY2hlW2VdKSB7Ci0gICAgICB0aGlzLm1hdGNo
ZXIgPSBTZWxlY3Rvci5fY2FjaGVbZV07Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhp
cy5tYXRjaGVyID0gWyJ0aGlzLm1hdGNoZXIgPSBmdW5jdGlvbihyb290KSB7IiwKLSAgICAgICAg
ICAgICAgICAgICAgInZhciByID0gcm9vdCwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBjID0gZmFs
c2UsIG47Il07Ci0KLSAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUpKSB7
Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaTxsZW47IGkrKykgewotICAg
ICAgICBwID0gcHNbaV0ucmU7Ci0gICAgICAgIG5hbWUgPSBwc1tpXS5uYW1lOwotICAgICAgICBp
ZiAobSA9IGUubWF0Y2gocCkpIHsKLSAgICAgICAgICB0aGlzLm1hdGNoZXIucHVzaChPYmplY3Qu
aXNGdW5jdGlvbihjW25hbWVdKSA/IGNbbmFtZV0obSkgOgotICAgICAgICAgICAgbmV3IFRlbXBs
YXRlKGNbbmFtZV0pLmV2YWx1YXRlKG0pKTsKLSAgICAgICAgICBlID0gZS5yZXBsYWNlKG1bMF0s
ICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAg
IHRoaXMubWF0Y2hlci5wdXNoKCJyZXR1cm4gaC51bmlxdWUobik7XG59Iik7Ci0gICAgZXZhbCh0
aGlzLm1hdGNoZXIuam9pbignXG4nKSk7Ci0gICAgU2VsZWN0b3IuX2NhY2hlW3RoaXMuZXhwcmVz
c2lvbl0gPSB0aGlzLm1hdGNoZXI7Ci0gIH0sCi0KLSAgY29tcGlsZVhQYXRoTWF0Y2hlcjogZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb24sIHBzID0gU2VsZWN0b3IucGF0
dGVybnMsCi0gICAgICAgIHggPSBTZWxlY3Rvci54cGF0aCwgbGUsIG0sIGxlbiA9IHBzLmxlbmd0
aCwgbmFtZTsKLQotICAgIGlmIChTZWxlY3Rvci5fY2FjaGVbZV0pIHsKLSAgICAgIHRoaXMueHBh
dGggPSBTZWxlY3Rvci5fY2FjaGVbZV07IHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGlzLm1hdGNo
ZXIgPSBbJy4vLyonXTsKLSAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUp
KSB7Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaTxsZW47IGkrKykgewot
ICAgICAgICBuYW1lID0gcHNbaV0ubmFtZTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHBzW2ld
LnJlKSkgewotICAgICAgICAgIHRoaXMubWF0Y2hlci5wdXNoKE9iamVjdC5pc0Z1bmN0aW9uKHhb
bmFtZV0pID8geFtuYW1lXShtKSA6Ci0gICAgICAgICAgICBuZXcgVGVtcGxhdGUoeFtuYW1lXSku
ZXZhbHVhdGUobSkpOwotICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdGhpcy54cGF0aCA9
IHRoaXMubWF0Y2hlci5qb2luKCcnKTsKLSAgICBTZWxlY3Rvci5fY2FjaGVbdGhpcy5leHByZXNz
aW9uXSA9IHRoaXMueHBhdGg7Ci0gIH0sCi0KLSAgZmluZEVsZW1lbnRzOiBmdW5jdGlvbihyb290
KSB7Ci0gICAgcm9vdCA9IHJvb3QgfHwgZG9jdW1lbnQ7Ci0gICAgdmFyIGUgPSB0aGlzLmV4cHJl
c3Npb24sIHJlc3VsdHM7Ci0KLSAgICBzd2l0Y2ggKHRoaXMubW9kZSkgewotICAgICAgY2FzZSAn
c2VsZWN0b3JzQVBJJzoKLSAgICAgICAgaWYgKHJvb3QgIT09IGRvY3VtZW50KSB7Ci0gICAgICAg
ICAgdmFyIG9sZElkID0gcm9vdC5pZCwgaWQgPSAkKHJvb3QpLmlkZW50aWZ5KCk7Ci0gICAgICAg
ICAgaWQgPSBpZC5yZXBsYWNlKC8oW1wuOl0pL2csICJcXCQxIik7Ci0gICAgICAgICAgZSA9ICIj
IiArIGlkICsgIiAiICsgZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdHMgPSAkQShyb290
LnF1ZXJ5U2VsZWN0b3JBbGwoZSkpLm1hcChFbGVtZW50LmV4dGVuZCk7Ci0gICAgICAgIHJvb3Qu
aWQgPSBvbGRJZDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgIGNhc2UgJ3hwYXRo
JzoKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgodGhpcy54cGF0
aCwgcm9vdCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXIocm9v
dCk7Ci0gICAgfQotICB9LAotCi0gIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdGhp
cy50b2tlbnMgPSBbXTsKLQotICAgIHZhciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNlbGVj
dG9yLnBhdHRlcm5zLCBhcyA9IFNlbGVjdG9yLmFzc2VydGlvbnM7Ci0gICAgdmFyIGxlLCBwLCBt
LCBsZW4gPSBwcy5sZW5ndGgsIG5hbWU7Ci0KLSAgICB3aGlsZSAoZSAmJiBsZSAhPT0gZSAmJiAo
L1xTLykudGVzdChlKSkgewotICAgICAgbGUgPSBlOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGk8
bGVuOyBpKyspIHsKLSAgICAgICAgcCA9IHBzW2ldLnJlOwotICAgICAgICBuYW1lID0gcHNbaV0u
bmFtZTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7Ci0gICAgICAgICAgaWYgKGFzW25h
bWVdKSB7Ci0gICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKFtuYW1lLCBPYmplY3QuY2xvbmUo
bSldKTsKLSAgICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kRWxlbWVudHMoZG9jdW1lbnQpLmlu
Y2x1ZGUoZWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgdmFyIG1hdGNoID0gdHJ1ZSwgbmFtZSwgbWF0Y2hlczsKLSAgICBmb3IgKHZhciBpID0g
MCwgdG9rZW47IHRva2VuID0gdGhpcy50b2tlbnNbaV07IGkrKykgewotICAgICAgbmFtZSA9IHRv
a2VuWzBdLCBtYXRjaGVzID0gdG9rZW5bMV07Ci0gICAgICBpZiAoIVNlbGVjdG9yLmFzc2VydGlv
bnNbbmFtZV0oZWxlbWVudCwgbWF0Y2hlcykpIHsKLSAgICAgICAgbWF0Y2ggPSBmYWxzZTsgYnJl
YWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9LAotCi0gIHRvU3Ry
aW5nOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uOwotICB9LAotCi0g
IGluc3BlY3Q6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAiIzxTZWxlY3RvcjoiICsgdGhpcy5l
eHByZXNzaW9uLmluc3BlY3QoKSArICI+IjsKLSAgfQotfSk7Ci0KLWlmIChQcm90b3R5cGUuQnJv
d3NlckZlYXR1cmVzLlNlbGVjdG9yc0FQSSAmJgotIGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICdC
YWNrQ29tcGF0JykgewotICBTZWxlY3Rvci5DQVNFX0lOU0VOU0lUSVZFX0NMQVNTX05BTUVTID0g
KGZ1bmN0aW9uKCl7Ci0gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LAotICAgICBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotCi0gICAgZGl2
LmlkID0gInByb3RvdHlwZV90ZXN0X2lkIjsKLSAgICBzcGFuLmNsYXNzTmFtZSA9ICdUZXN0JzsK
LSAgICBkaXYuYXBwZW5kQ2hpbGQoc3Bhbik7Ci0gICAgdmFyIGlzSWdub3JlZCA9IChkaXYucXVl
cnlTZWxlY3RvcignI3Byb3RvdHlwZV90ZXN0X2lkIC50ZXN0JykgIT09IG51bGwpOwotICAgIGRp
diA9IHNwYW4gPSBudWxsOwotICAgIHJldHVybiBpc0lnbm9yZWQ7Ci0gIH0pKCk7Ci19Ci0KLU9i
amVjdC5leHRlbmQoU2VsZWN0b3IsIHsKLSAgX2NhY2hlOiB7IH0sCi0KLSAgeHBhdGg6IHsKLSAg
ICBkZXNjZW5kYW50OiAgICIvLyoiLAotICAgIGNoaWxkOiAgICAgICAgIi8qIiwKLSAgICBhZGph
Y2VudDogICAgICIvZm9sbG93aW5nLXNpYmxpbmc6OipbMV0iLAotICAgIGxhdGVyU2libGluZzog
Jy9mb2xsb3dpbmctc2libGluZzo6KicsCi0gICAgdGFnTmFtZTogICAgICBmdW5jdGlvbihtKSB7
Ci0gICAgICBpZiAobVsxXSA9PSAnKicpIHJldHVybiAnJzsKLSAgICAgIHJldHVybiAiW2xvY2Fs
LW5hbWUoKT0nIiArIG1bMV0udG9Mb3dlckNhc2UoKSArCi0gICAgICAgICAgICAgIicgb3IgbG9j
YWwtbmFtZSgpPSciICsgbVsxXS50b1VwcGVyQ2FzZSgpICsgIiddIjsKLSAgICB9LAotICAgIGNs
YXNzTmFtZTogICAgIltjb250YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcgJyksICcgI3sxfSAn
KV0iLAotICAgIGlkOiAgICAgICAgICAgIltAaWQ9JyN7MX0nXSIsCi0gICAgYXR0clByZXNlbmNl
OiBmdW5jdGlvbihtKSB7Ci0gICAgICBtWzFdID0gbVsxXS50b0xvd2VyQ2FzZSgpOwotICAgICAg
cmV0dXJuIG5ldyBUZW1wbGF0ZSgiW0AjezF9XSIpLmV2YWx1YXRlKG0pOwotICAgIH0sCi0gICAg
YXR0cjogZnVuY3Rpb24obSkgewotICAgICAgbVsxXSA9IG1bMV0udG9Mb3dlckNhc2UoKTsKLSAg
ICAgIG1bM10gPSBtWzVdIHx8IG1bNl07Ci0gICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKFNlbGVj
dG9yLnhwYXRoLm9wZXJhdG9yc1ttWzJdXSkuZXZhbHVhdGUobSk7Ci0gICAgfSwKLSAgICBwc2V1
ZG86IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IueHBhdGgucHNldWRvc1tt
WzFdXTsKLSAgICAgIGlmICghaCkgcmV0dXJuICcnOwotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0
aW9uKGgpKSByZXR1cm4gaChtKTsKLSAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUoU2VsZWN0b3Iu
eHBhdGgucHNldWRvc1ttWzFdXSkuZXZhbHVhdGUobSk7Ci0gICAgfSwKLSAgICBvcGVyYXRvcnM6
IHsKLSAgICAgICc9JzogICJbQCN7MX09JyN7M30nXSIsCi0gICAgICAnIT0nOiAiW0AjezF9IT0n
I3szfSddIiwKLSAgICAgICdePSc6ICJbc3RhcnRzLXdpdGgoQCN7MX0sICcjezN9JyldIiwKLSAg
ICAgICckPSc6ICJbc3Vic3RyaW5nKEAjezF9LCAoc3RyaW5nLWxlbmd0aChAI3sxfSkgLSBzdHJp
bmctbGVuZ3RoKCcjezN9JykgKyAxKSk9JyN7M30nXSIsCi0gICAgICAnKj0nOiAiW2NvbnRhaW5z
KEAjezF9LCAnI3szfScpXSIsCi0gICAgICAnfj0nOiAiW2NvbnRhaW5zKGNvbmNhdCgnICcsIEAj
ezF9LCAnICcpLCAnICN7M30gJyldIiwKLSAgICAgICd8PSc6ICJbY29udGFpbnMoY29uY2F0KCct
JywgQCN7MX0sICctJyksICctI3szfS0nKV0iCi0gICAgfSwKLSAgICBwc2V1ZG9zOiB7Ci0gICAg
ICAnZmlyc3QtY2hpbGQnOiAnW25vdChwcmVjZWRpbmctc2libGluZzo6KildJywKLSAgICAgICds
YXN0LWNoaWxkJzogICdbbm90KGZvbGxvd2luZy1zaWJsaW5nOjoqKV0nLAotICAgICAgJ29ubHkt
Y2hpbGQnOiAgJ1tub3QocHJlY2VkaW5nLXNpYmxpbmc6Oiogb3IgZm9sbG93aW5nLXNpYmxpbmc6
OiopXScsCi0gICAgICAnZW1wdHknOiAgICAgICAiW2NvdW50KCopID0gMCBhbmQgKGNvdW50KHRl
eHQoKSkgPSAwKV0iLAotICAgICAgJ2NoZWNrZWQnOiAgICAgIltAY2hlY2tlZF0iLAotICAgICAg
J2Rpc2FibGVkJzogICAgIlsoQGRpc2FibGVkKSBhbmQgKEB0eXBlIT0naGlkZGVuJyldIiwKLSAg
ICAgICdlbmFibGVkJzogICAgICJbbm90KEBkaXNhYmxlZCkgYW5kIChAdHlwZSE9J2hpZGRlbicp
XSIsCi0gICAgICAnbm90JzogZnVuY3Rpb24obSkgewotICAgICAgICB2YXIgZSA9IG1bNl0sIHAg
PSBTZWxlY3Rvci5wYXR0ZXJucywKLSAgICAgICAgICAgIHggPSBTZWxlY3Rvci54cGF0aCwgbGUs
IHYsIGxlbiA9IHAubGVuZ3RoLCBuYW1lOwotCi0gICAgICAgIHZhciBleGNsdXNpb24gPSBbXTsK
LSAgICAgICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewotICAgICAg
ICAgIGxlID0gZTsKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaTxsZW47IGkrKykgewotICAg
ICAgICAgICAgbmFtZSA9IHBbaV0ubmFtZQotICAgICAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHBb
aV0ucmUpKSB7Ci0gICAgICAgICAgICAgIHYgPSBPYmplY3QuaXNGdW5jdGlvbih4W25hbWVdKSA/
IHhbbmFtZV0obSkgOiBuZXcgVGVtcGxhdGUoeFtuYW1lXSkuZXZhbHVhdGUobSk7Ci0gICAgICAg
ICAgICAgIGV4Y2x1c2lvbi5wdXNoKCIoIiArIHYuc3Vic3RyaW5nKDEsIHYubGVuZ3RoIC0gMSkg
KyAiKSIpOwotICAgICAgICAgICAgICBlID0gZS5yZXBsYWNlKG1bMF0sICcnKTsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAiW25vdCgiICsgZXhjbHVzaW9uLmpvaW4oIiBhbmQgIikgKyAiKV0iOwotICAg
ICAgfSwKLSAgICAgICdudGgtY2hpbGQnOiAgICAgIGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgcmV0
dXJuIFNlbGVjdG9yLnhwYXRoLnBzZXVkb3MubnRoKCIoY291bnQoLi9wcmVjZWRpbmctc2libGlu
Zzo6KikgKyAxKSAiLCBtKTsKLSAgICAgIH0sCi0gICAgICAnbnRoLWxhc3QtY2hpbGQnOiBmdW5j
dGlvbihtKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zLm50aCgiKGNv
dW50KC4vZm9sbG93aW5nLXNpYmxpbmc6OiopICsgMSkgIiwgbSk7Ci0gICAgICB9LAotICAgICAg
J250aC1vZi10eXBlJzogICAgZnVuY3Rpb24obSkgewotICAgICAgICByZXR1cm4gU2VsZWN0b3Iu
eHBhdGgucHNldWRvcy5udGgoInBvc2l0aW9uKCkgIiwgbSk7Ci0gICAgICB9LAotICAgICAgJ250
aC1sYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihtKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3Rvci54
cGF0aC5wc2V1ZG9zLm50aCgiKGxhc3QoKSArIDEgLSBwb3NpdGlvbigpKSAiLCBtKTsKLSAgICAg
IH0sCi0gICAgICAnZmlyc3Qtb2YtdHlwZSc6ICBmdW5jdGlvbihtKSB7Ci0gICAgICAgIG1bNl0g
PSAiMSI7IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zWydudGgtb2YtdHlwZSddKG0pOwot
ICAgICAgfSwKLSAgICAgICdsYXN0LW9mLXR5cGUnOiAgIGZ1bmN0aW9uKG0pIHsKLSAgICAgICAg
bVs2XSA9ICIxIjsgcmV0dXJuIFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbJ250aC1sYXN0LW9mLXR5
cGUnXShtKTsKLSAgICAgIH0sCi0gICAgICAnb25seS1vZi10eXBlJzogICBmdW5jdGlvbihtKSB7
Ci0gICAgICAgIHZhciBwID0gU2VsZWN0b3IueHBhdGgucHNldWRvczsgcmV0dXJuIHBbJ2ZpcnN0
LW9mLXR5cGUnXShtKSArIHBbJ2xhc3Qtb2YtdHlwZSddKG0pOwotICAgICAgfSwKLSAgICAgIG50
aDogZnVuY3Rpb24oZnJhZ21lbnQsIG0pIHsKLSAgICAgICAgdmFyIG1tLCBmb3JtdWxhID0gbVs2
XSwgcHJlZGljYXRlOwotICAgICAgICBpZiAoZm9ybXVsYSA9PSAnZXZlbicpIGZvcm11bGEgPSAn
Mm4rMCc7Ci0gICAgICAgIGlmIChmb3JtdWxhID09ICdvZGQnKSAgZm9ybXVsYSA9ICcybisxJzsK
LSAgICAgICAgaWYgKG1tID0gZm9ybXVsYS5tYXRjaCgvXihcZCspJC8pKSAvLyBkaWdpdCBvbmx5
Ci0gICAgICAgICAgcmV0dXJuICdbJyArIGZyYWdtZW50ICsgIj0gIiArIG1tWzFdICsgJ10nOwot
ICAgICAgICBpZiAobW0gPSBmb3JtdWxhLm1hdGNoKC9eKC0/XGQqKT9uKChbKy1dKShcZCspKT8v
KSkgeyAvLyBhbitiCi0gICAgICAgICAgaWYgKG1tWzFdID09ICItIikgbW1bMV0gPSAtMTsKLSAg
ICAgICAgICB2YXIgYSA9IG1tWzFdID8gTnVtYmVyKG1tWzFdKSA6IDE7Ci0gICAgICAgICAgdmFy
IGIgPSBtbVsyXSA/IE51bWJlcihtbVsyXSkgOiAwOwotICAgICAgICAgIHByZWRpY2F0ZSA9ICJb
KCgje2ZyYWdtZW50fSAtICN7Yn0pIG1vZCAje2F9ID0gMCkgYW5kICIgKwotICAgICAgICAgICIo
KCN7ZnJhZ21lbnR9IC0gI3tifSkgZGl2ICN7YX0gPj0gMCldIjsKLSAgICAgICAgICByZXR1cm4g
bmV3IFRlbXBsYXRlKHByZWRpY2F0ZSkuZXZhbHVhdGUoewotICAgICAgICAgICAgZnJhZ21lbnQ6
IGZyYWdtZW50LCBhOiBhLCBiOiBiIH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9
LAotCi0gIGNyaXRlcmlhOiB7Ci0gICAgdGFnTmFtZTogICAgICAnbiA9IGgudGFnTmFtZShuLCBy
LCAiI3sxfSIsIGMpOyAgICAgIGMgPSBmYWxzZTsnLAotICAgIGNsYXNzTmFtZTogICAgJ24gPSBo
LmNsYXNzTmFtZShuLCByLCAiI3sxfSIsIGMpOyAgICBjID0gZmFsc2U7JywKLSAgICBpZDogICAg
ICAgICAgICduID0gaC5pZChuLCByLCAiI3sxfSIsIGMpOyAgICAgICAgICAgYyA9IGZhbHNlOycs
Ci0gICAgYXR0clByZXNlbmNlOiAnbiA9IGguYXR0clByZXNlbmNlKG4sIHIsICIjezF9IiwgYyk7
IGMgPSBmYWxzZTsnLAotICAgIGF0dHI6IGZ1bmN0aW9uKG0pIHsKLSAgICAgIG1bM10gPSAobVs1
XSB8fCBtWzZdKTsKLSAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUoJ24gPSBoLmF0dHIobiwgciwg
IiN7MX0iLCAiI3szfSIsICIjezJ9IiwgYyk7IGMgPSBmYWxzZTsnKS5ldmFsdWF0ZShtKTsKLSAg
ICB9LAotICAgIHBzZXVkbzogZnVuY3Rpb24obSkgewotICAgICAgaWYgKG1bNl0pIG1bNl0gPSBt
WzZdLnJlcGxhY2UoLyIvZywgJ1xcIicpOwotICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSgnbiA9
IGgucHNldWRvKG4sICIjezF9IiwgIiN7Nn0iLCByLCBjKTsgYyA9IGZhbHNlOycpLmV2YWx1YXRl
KG0pOwotICAgIH0sCi0gICAgZGVzY2VuZGFudDogICAnYyA9ICJkZXNjZW5kYW50IjsnLAotICAg
IGNoaWxkOiAgICAgICAgJ2MgPSAiY2hpbGQiOycsCi0gICAgYWRqYWNlbnQ6ICAgICAnYyA9ICJh
ZGphY2VudCI7JywKLSAgICBsYXRlclNpYmxpbmc6ICdjID0gImxhdGVyU2libGluZyI7JwotICB9
LAotCi0gIHBhdHRlcm5zOiBbCi0gICAgeyBuYW1lOiAnbGF0ZXJTaWJsaW5nJywgcmU6IC9eXHMq
flxzKi8gfSwKLSAgICB7IG5hbWU6ICdjaGlsZCcsICAgICAgICByZTogL15ccyo+XHMqLyB9LAot
ICAgIHsgbmFtZTogJ2FkamFjZW50JywgICAgIHJlOiAvXlxzKlwrXHMqLyB9LAotICAgIHsgbmFt
ZTogJ2Rlc2NlbmRhbnQnLCAgIHJlOiAvXlxzLyB9LAotCi0gICAgeyBuYW1lOiAndGFnTmFtZScs
ICAgICAgcmU6IC9eXHMqKFwqfFtcd1wtXSspKFxifCQpPy8gfSwKLSAgICB7IG5hbWU6ICdpZCcs
ICAgICAgICAgICByZTogL14jKFtcd1wtXCpdKykoXGJ8JCkvIH0sCi0gICAgeyBuYW1lOiAnY2xh
c3NOYW1lJywgICAgcmU6IC9eXC4oW1x3XC1cKl0rKShcYnwkKS8gfSwKLSAgICB7IG5hbWU6ICdw
c2V1ZG8nLCAgICAgICByZTogL146KChmaXJzdHxsYXN0fG50aHxudGgtbGFzdHxvbmx5KSgtY2hp
bGR8LW9mLXR5cGUpfGVtcHR5fGNoZWNrZWR8KGVufGRpcylhYmxlZHxub3QpKFwoKC4qPylcKSk/
KFxifCR8KD89XHN8Wzorfj5dKSkvIH0sCi0gICAgeyBuYW1lOiAnYXR0clByZXNlbmNlJywgcmU6
IC9eXFsoKD86W1x3LV0rOik/W1x3LV0rKVxdLyB9LAotICAgIHsgbmFtZTogJ2F0dHInLCAgICAg
ICAgIHJlOiAvXFsoKD86W1x3LV0qOik/W1x3LV0rKVxzKig/OihbIV4kKn58XT89KVxzKigoWyci
XSkoW15cNF0qPylcNHwoW14nIl1bXlxdXSo/KSkpP1xdLyB9Ci0gIF0sCi0KLSAgYXNzZXJ0aW9u
czogewotICAgIHRhZ05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG1hdGNoZXMpIHsKLSAgICAgIHJl
dHVybiBtYXRjaGVzWzFdLnRvVXBwZXJDYXNlKCkgPT0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJD
YXNlKCk7Ci0gICAgfSwKLQotICAgIGNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hl
cykgewotICAgICAgcmV0dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIG1hdGNoZXNb
MV0pOwotICAgIH0sCi0KLSAgICBpZDogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAg
ICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IG1hdGNoZXNbMV07Ci0gICAgfSwKLQotICAgIGF0dHJQ
cmVzZW5jZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAgICAgcmV0dXJuIEVsZW1l
bnQuaGFzQXR0cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAgIH0sCi0KLSAgICBhdHRy
OiBmdW5jdGlvbihlbGVtZW50LCBtYXRjaGVzKSB7Ci0gICAgICB2YXIgbm9kZVZhbHVlID0gRWxl
bWVudC5yZWFkQXR0cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAgICAgcmV0dXJuIG5v
ZGVWYWx1ZSAmJiBTZWxlY3Rvci5vcGVyYXRvcnNbbWF0Y2hlc1syXV0obm9kZVZhbHVlLCBtYXRj
aGVzWzVdIHx8IG1hdGNoZXNbNl0pOwotICAgIH0KLSAgfSwKLQotICBoYW5kbGVyczogewotICAg
IGNvbmNhdDogZnVuY3Rpb24oYSwgYikgewotICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5v
ZGUgPSBiW2ldOyBpKyspCi0gICAgICAgIGEucHVzaChub2RlKTsKLSAgICAgIHJldHVybiBhOwot
ICAgIH0sCi0KLSAgICBtYXJrOiBmdW5jdGlvbihub2RlcykgewotICAgICAgdmFyIF90cnVlID0g
UHJvdG90eXBlLmVtcHR5RnVuY3Rpb247Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9k
ZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgIG5vZGUuX2NvdW50ZWRCeVByb3RvdHlwZSA9IF90
cnVlOwotICAgICAgcmV0dXJuIG5vZGVzOwotICAgIH0sCi0KLSAgICB1bm1hcms6IChmdW5jdGlv
bigpewotCi0gICAgICB2YXIgUFJPUEVSVElFU19BVFRSSUJVVEVTX01BUCA9IChmdW5jdGlvbigp
ewotICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAg
ICAgICAgIGlzQnVnZ3kgPSBmYWxzZSwKLSAgICAgICAgICAgIHByb3BOYW1lID0gJ19jb3VudGVk
QnlQcm90b3R5cGUnLAotICAgICAgICAgICAgdmFsdWUgPSAneCcKLSAgICAgICAgZWxbcHJvcE5h
bWVdID0gdmFsdWU7Ci0gICAgICAgIGlzQnVnZ3kgPSAoZWwuZ2V0QXR0cmlidXRlKHByb3BOYW1l
KSA9PT0gdmFsdWUpOwotICAgICAgICBlbCA9IG51bGw7Ci0gICAgICAgIHJldHVybiBpc0J1Z2d5
OwotICAgICAgfSkoKTsKLQotICAgICAgcmV0dXJuIFBST1BFUlRJRVNfQVRUUklCVVRFU19NQVAg
PwotICAgICAgICBmdW5jdGlvbihub2RlcykgewotICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBu
b2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmli
dXRlKCdfY291bnRlZEJ5UHJvdG90eXBlJyk7Ci0gICAgICAgICAgcmV0dXJuIG5vZGVzOwotICAg
ICAgICB9IDoKLSAgICAgICAgZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgICAgICBub2RlLl9jb3Vu
dGVkQnlQcm90b3R5cGUgPSB2b2lkIDA7Ci0gICAgICAgICAgcmV0dXJuIG5vZGVzOwotICAgICAg
ICB9Ci0gICAgfSkoKSwKLQotICAgIGluZGV4OiBmdW5jdGlvbihwYXJlbnROb2RlLCByZXZlcnNl
LCBvZlR5cGUpIHsKLSAgICAgIHBhcmVudE5vZGUuX2NvdW50ZWRCeVByb3RvdHlwZSA9IFByb3Rv
dHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgICAgaWYgKHJldmVyc2UpIHsKLSAgICAgICAgZm9yICh2
YXIgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMsIGkgPSBub2Rlcy5sZW5ndGggLSAxLCBq
ID0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOwotICAg
ICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRl
ZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMSwgbm9kZXMgPSBwYXJlbnROb2Rl
LmNoaWxkTm9kZXM7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICAgIGlmIChub2RlLm5v
ZGVUeXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkgbm9k
ZS5ub2RlSW5kZXggPSBqKys7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHVuaXF1ZTogZnVuY3Rp
b24obm9kZXMpIHsKLSAgICAgIGlmIChub2Rlcy5sZW5ndGggPT0gMCkgcmV0dXJuIG5vZGVzOwot
ICAgICAgdmFyIHJlc3VsdHMgPSBbXSwgbjsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9k
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKQotICAgICAgICBpZiAodHlwZW9mIChuID0gbm9kZXNbaV0p
Ll9jb3VudGVkQnlQcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICBuLl9jb3Vu
dGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKLSAgICAgICAgICByZXN1
bHRzLnB1c2goRWxlbWVudC5leHRlbmQobikpOwotICAgICAgICB9Ci0gICAgICByZXR1cm4gU2Vs
ZWN0b3IuaGFuZGxlcnMudW5tYXJrKHJlc3VsdHMpOwotICAgIH0sCi0KLSAgICBkZXNjZW5kYW50
OiBmdW5jdGlvbihub2RlcykgewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKLSAg
ICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsg
aSsrKQotICAgICAgICBoLmNvbmNhdChyZXN1bHRzLCBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCcqJykpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLQotICAgIGNoaWxkOiBmdW5j
dGlvbihub2RlcykgewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKLSAgICAgIGZv
ciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7
Ci0gICAgICAgIGZvciAodmFyIGogPSAwLCBjaGlsZDsgY2hpbGQgPSBub2RlLmNoaWxkTm9kZXNb
al07IGorKykKLSAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMSAmJiBjaGlsZC50YWdO
YW1lICE9ICchJykgcmVzdWx0cy5wdXNoKGNoaWxkKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBy
ZXN1bHRzOwotICAgIH0sCi0KLSAgICBhZGphY2VudDogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAg
IGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsr
KSB7Ci0gICAgICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0RWxlbWVudFNpYmxpbmcobm9kZSk7Ci0g
ICAgICAgIGlmIChuZXh0KSByZXN1bHRzLnB1c2gobmV4dCk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgbGF0ZXJTaWJsaW5nOiBmdW5jdGlvbihub2Rlcykg
ewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKLSAgICAgIGZvciAodmFyIGkgPSAw
LCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBoLmNv
bmNhdChyZXN1bHRzLCBFbGVtZW50Lm5leHRTaWJsaW5ncyhub2RlKSk7Ci0gICAgICByZXR1cm4g
cmVzdWx0czsKLSAgICB9LAotCi0gICAgbmV4dEVsZW1lbnRTaWJsaW5nOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICB3aGlsZSAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpCi0gICAgICAgIGlmIChu
b2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fSwKLQotICAgIHByZXZpb3VzRWxlbWVudFNpYmxpbmc6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAg
IHdoaWxlIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpCi0gICAgICAgIGlmIChub2RlLm5v
ZGVUeXBlID09IDEpIHJldHVybiBub2RlOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQot
ICAgIHRhZ05hbWU6IGZ1bmN0aW9uKG5vZGVzLCByb290LCB0YWdOYW1lLCBjb21iaW5hdG9yKSB7
Ci0gICAgICB2YXIgdVRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAgICB2YXIg
cmVzdWx0cyA9IFtdLCBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBpZiAobm9kZXMpIHsK
LSAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKLSAgICAgICAgICBpZiAoY29tYmluYXRvciA9PSAi
ZGVzY2VuZGFudCIpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0g
bm9kZXNbaV07IGkrKykKLSAgICAgICAgICAgICAgaC5jb25jYXQocmVzdWx0cywgbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0czsK
LSAgICAgICAgICB9IGVsc2Ugbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKLSAgICAg
ICAgICBpZiAodGFnTmFtZSA9PSAiKiIpIHJldHVybiBub2RlczsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgICAg
aWYgKG5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB1VGFnTmFtZSkgcmVzdWx0cy5wdXNo
KG5vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgIH0gZWxzZSByZXR1cm4gcm9v
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKLSAgICB9LAotCi0gICAgaWQ6IGZ1bmN0
aW9uKG5vZGVzLCByb290LCBpZCwgY29tYmluYXRvcikgewotICAgICAgdmFyIHRhcmdldE5vZGUg
PSAkKGlkKSwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwotCi0gICAgICBpZiAocm9vdCA9PSBkb2N1
bWVudCkgewotICAgICAgICBpZiAoIXRhcmdldE5vZGUpIHJldHVybiBbXTsKLSAgICAgICAgaWYg
KCFub2RlcykgcmV0dXJuIFt0YXJnZXROb2RlXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghcm9vdC5zb3VyY2VJbmRleCB8fCByb290LnNvdXJjZUluZGV4IDwgMSkgewotICAgICAgICAg
IHZhciBub2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKLSAgICAgICAgICBm
b3IgKHZhciBqID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2pdOyBqKyspIHsKLSAgICAgICAgICAg
IGlmIChub2RlLmlkID09PSBpZCkgcmV0dXJuIFtub2RlXTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgaWYgKG5vZGVzKSB7Ci0gICAgICAgIGlmIChjb21iaW5hdG9y
KSB7Ci0gICAgICAgICAgaWYgKGNvbWJpbmF0b3IgPT0gJ2NoaWxkJykgewotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICAgICAg
ICBpZiAodGFyZ2V0Tm9kZS5wYXJlbnROb2RlID09IG5vZGUpIHJldHVybiBbdGFyZ2V0Tm9kZV07
Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb21iaW5hdG9yID09ICdkZXNjZW5kYW50JykgewotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAg
ICAgICAgICAgICBpZiAoRWxlbWVudC5kZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgbm9kZSkpIHJl
dHVybiBbdGFyZ2V0Tm9kZV07Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb21iaW5hdG9yID09ICdh
ZGphY2VudCcpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9k
ZXNbaV07IGkrKykKLSAgICAgICAgICAgICAgaWYgKFNlbGVjdG9yLmhhbmRsZXJzLnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcodGFyZ2V0Tm9kZSkgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gW3RhcmdldE5vZGVdOwotICAgICAgICAgIH0gZWxzZSBub2RlcyA9IGhbY29tYmluYXRvcl0o
bm9kZXMpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0g
bm9kZXNbaV07IGkrKykKLSAgICAgICAgICBpZiAobm9kZSA9PSB0YXJnZXROb2RlKSByZXR1cm4g
W3RhcmdldE5vZGVdOwotICAgICAgICByZXR1cm4gW107Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
KHRhcmdldE5vZGUgJiYgRWxlbWVudC5kZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgcm9vdCkpID8g
W3RhcmdldE5vZGVdIDogW107Ci0gICAgfSwKLQotICAgIGNsYXNzTmFtZTogZnVuY3Rpb24obm9k
ZXMsIHJvb3QsIGNsYXNzTmFtZSwgY29tYmluYXRvcikgewotICAgICAgaWYgKG5vZGVzICYmIGNv
bWJpbmF0b3IpIG5vZGVzID0gdGhpc1tjb21iaW5hdG9yXShub2Rlcyk7Ci0gICAgICByZXR1cm4g
U2VsZWN0b3IuaGFuZGxlcnMuYnlDbGFzc05hbWUobm9kZXMsIHJvb3QsIGNsYXNzTmFtZSk7Ci0g
ICAgfSwKLQotICAgIGJ5Q2xhc3NOYW1lOiBmdW5jdGlvbihub2Rlcywgcm9vdCwgY2xhc3NOYW1l
KSB7Ci0gICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IFNlbGVjdG9yLmhhbmRsZXJzLmRlc2NlbmRh
bnQoW3Jvb3RdKTsKLSAgICAgIHZhciBuZWVkbGUgPSAnICcgKyBjbGFzc05hbWUgKyAnICc7Ci0g
ICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlLCBub2RlQ2xhc3NOYW1lOyBu
b2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBub2RlQ2xhc3NOYW1lID0gbm9kZS5jbGFz
c05hbWU7Ci0gICAgICAgIGlmIChub2RlQ2xhc3NOYW1lLmxlbmd0aCA9PSAwKSBjb250aW51ZTsK
LSAgICAgICAgaWYgKG5vZGVDbGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8ICgnICcgKyBub2RlQ2xh
c3NOYW1lICsgJyAnKS5pbmNsdWRlKG5lZWRsZSkpCi0gICAgICAgICAgcmVzdWx0cy5wdXNoKG5v
ZGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLQotICAgIGF0dHJQ
cmVzZW5jZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGF0dHIsIGNvbWJpbmF0b3IpIHsKLSAgICAg
IGlmICghbm9kZXMpIG5vZGVzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotICAg
ICAgaWYgKG5vZGVzICYmIGNvbWJpbmF0b3IpIG5vZGVzID0gdGhpc1tjb21iaW5hdG9yXShub2Rl
cyk7Ci0gICAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7
IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAoRWxlbWVudC5oYXNBdHRyaWJ1dGUo
bm9kZSwgYXR0cikpIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgIHJldHVybiByZXN1bHRzOwot
ICAgIH0sCi0KLSAgICBhdHRyOiBmdW5jdGlvbihub2Rlcywgcm9vdCwgYXR0ciwgdmFsdWUsIG9w
ZXJhdG9yLCBjb21iaW5hdG9yKSB7Ci0gICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IHJvb3QuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBu
b2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAgdmFyIGhhbmRsZXIgPSBTZWxl
Y3Rvci5vcGVyYXRvcnNbb3BlcmF0b3JdLCByZXN1bHRzID0gW107Ci0gICAgICBmb3IgKHZhciBp
ID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKLSAgICAgICAgdmFyIG5vZGVWYWx1
ZSA9IEVsZW1lbnQucmVhZEF0dHJpYnV0ZShub2RlLCBhdHRyKTsKLSAgICAgICAgaWYgKG5vZGVW
YWx1ZSA9PT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgIGlmIChoYW5kbGVyKG5vZGVWYWx1ZSwg
dmFsdWUpKSByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICB9LAotCi0gICAgcHNldWRvOiBmdW5jdGlvbihub2RlcywgbmFtZSwgdmFsdWUsIHJv
b3QsIGNvbWJpbmF0b3IpIHsKLSAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBub2RlcyA9
IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSByb290
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRv
c1tuYW1lXShub2RlcywgdmFsdWUsIHJvb3QpOwotICAgIH0KLSAgfSwKLQotICBwc2V1ZG9zOiB7
Ci0gICAgJ2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7Ci0gICAg
ICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkr
KykgewotICAgICAgICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMucHJldmlvdXNFbGVtZW50U2libGlu
Zyhub2RlKSkgY29udGludWU7Ci0gICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAg
fQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLSAgICAnbGFzdC1jaGlsZCc6IGZ1bmN0
aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMg
PSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKLSAgICAgICAgaWYgKFNlbGVjdG9y
LmhhbmRsZXJzLm5leHRFbGVtZW50U2libGluZyhub2RlKSkgY29udGludWU7Ci0gICAgICAgICAg
cmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAg
fSwKLSAgICAnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewotICAg
ICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1
bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAoIWgucHJl
dmlvdXNFbGVtZW50U2libGluZyhub2RlKSAmJiAhaC5uZXh0RWxlbWVudFNpYmxpbmcobm9kZSkp
Ci0gICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgfSwKLSAgICAnbnRoLWNoaWxkJzogICAgICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCBy
b290KSB7Ci0gICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZvcm11bGEs
IHJvb3QpOwotICAgIH0sCi0gICAgJ250aC1sYXN0LWNoaWxkJzogICBmdW5jdGlvbihub2Rlcywg
Zm9ybXVsYSwgcm9vdCkgewotICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVz
LCBmb3JtdWxhLCByb290LCB0cnVlKTsKLSAgICB9LAotICAgICdudGgtb2YtdHlwZSc6ICAgICAg
ZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5w
c2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwgcm9vdCwgZmFsc2UsIHRydWUpOwotICAgIH0sCi0g
ICAgJ250aC1sYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewot
ICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCBmb3JtdWxhLCByb290LCB0
cnVlLCB0cnVlKTsKLSAgICB9LAotICAgICdmaXJzdC1vZi10eXBlJzogICAgZnVuY3Rpb24obm9k
ZXMsIGZvcm11bGEsIHJvb3QpIHsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChu
b2RlcywgIjEiLCByb290LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfSwKLSAgICAnbGFzdC1vZi10eXBl
JzogICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7Ci0gICAgICByZXR1cm4gU2Vs
ZWN0b3IucHNldWRvcy5udGgobm9kZXMsICIxIiwgcm9vdCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfSwK
LSAgICAnb25seS1vZi10eXBlJzogICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7
Ci0gICAgICB2YXIgcCA9IFNlbGVjdG9yLnBzZXVkb3M7Ci0gICAgICByZXR1cm4gcFsnbGFzdC1v
Zi10eXBlJ10ocFsnZmlyc3Qtb2YtdHlwZSddKG5vZGVzLCBmb3JtdWxhLCByb290KSwgZm9ybXVs
YSwgcm9vdCk7Ci0gICAgfSwKLQotICAgIGdldEluZGljZXM6IGZ1bmN0aW9uKGEsIGIsIHRvdGFs
KSB7Ci0gICAgICBpZiAoYSA9PSAwKSByZXR1cm4gYiA+IDAgPyBbYl0gOiBbXTsKLSAgICAgIHJl
dHVybiAkUigxLCB0b3RhbCkuaW5qZWN0KFtdLCBmdW5jdGlvbihtZW1vLCBpKSB7Ci0gICAgICAg
IGlmICgwID09IChpIC0gYikgJSBhICYmIChpIC0gYikgLyBhID49IDApIG1lbW8ucHVzaChpKTsK
LSAgICAgICAgcmV0dXJuIG1lbW87Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgbnRoOiBmdW5j
dGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCwgcmV2ZXJzZSwgb2ZUeXBlKSB7Ci0gICAgICBpZiAo
bm9kZXMubGVuZ3RoID09IDApIHJldHVybiBbXTsKLSAgICAgIGlmIChmb3JtdWxhID09ICdldmVu
JykgZm9ybXVsYSA9ICcybiswJzsKLSAgICAgIGlmIChmb3JtdWxhID09ICdvZGQnKSAgZm9ybXVs
YSA9ICcybisxJzsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIHJlc3VsdHMgPSBb
XSwgaW5kZXhlZCA9IFtdLCBtOwotICAgICAgaC5tYXJrKG5vZGVzKTsKLSAgICAgIGZvciAodmFy
IGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBpZiAoIW5vZGUu
cGFyZW50Tm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSB7Ci0gICAgICAgICAgaC5pbmRleChub2Rl
LnBhcmVudE5vZGUsIHJldmVyc2UsIG9mVHlwZSk7Ci0gICAgICAgICAgaW5kZXhlZC5wdXNoKG5v
ZGUucGFyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChmb3JtdWxhLm1h
dGNoKC9eXGQrJC8pKSB7IC8vIGp1c3QgYSBudW1iZXIKLSAgICAgICAgZm9ybXVsYSA9IE51bWJl
cihmb3JtdWxhKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tp
XTsgaSsrKQotICAgICAgICAgIGlmIChub2RlLm5vZGVJbmRleCA9PSBmb3JtdWxhKSByZXN1bHRz
LnB1c2gobm9kZSk7Ci0gICAgICB9IGVsc2UgaWYgKG0gPSBmb3JtdWxhLm1hdGNoKC9eKC0/XGQq
KT9uKChbKy1dKShcZCspKT8vKSkgeyAvLyBhbitiCi0gICAgICAgIGlmIChtWzFdID09ICItIikg
bVsxXSA9IC0xOwotICAgICAgICB2YXIgYSA9IG1bMV0gPyBOdW1iZXIobVsxXSkgOiAxOwotICAg
ICAgICB2YXIgYiA9IG1bMl0gPyBOdW1iZXIobVsyXSkgOiAwOwotICAgICAgICB2YXIgaW5kaWNl
cyA9IFNlbGVjdG9yLnBzZXVkb3MuZ2V0SW5kaWNlcyhhLCBiLCBub2Rlcy5sZW5ndGgpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbm9kZSwgbCA9IGluZGljZXMubGVuZ3RoOyBub2RlID0gbm9k
ZXNbaV07IGkrKykgewotICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDsgaisrKQotICAg
ICAgICAgICAgaWYgKG5vZGUubm9kZUluZGV4ID09IGluZGljZXNbal0pIHJlc3VsdHMucHVzaChu
b2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaC51bm1hcmsobm9kZXMpOwotICAgICAg
aC51bm1hcmsoaW5kZXhlZCk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAg
J2VtcHR5JzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAg
ICBpZiAobm9kZS50YWdOYW1lID09ICchJyB8fCBub2RlLmZpcnN0Q2hpbGQpIGNvbnRpbnVlOwot
ICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICB9LAotCi0gICAgJ25vdCc6IGZ1bmN0aW9uKG5vZGVzLCBzZWxlY3Rvciwgcm9vdCkg
ewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVycywgc2VsZWN0b3JUeXBlLCBtOwotICAg
ICAgdmFyIGV4Y2x1c2lvbnMgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpLmZpbmRFbGVtZW50cyhy
b290KTsKLSAgICAgIGgubWFyayhleGNsdXNpb25zKTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBy
ZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAoIW5v
ZGUuX2NvdW50ZWRCeVByb3RvdHlwZSkgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgaC51bm1h
cmsoZXhjbHVzaW9ucyk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ2Vu
YWJsZWQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkg
PSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBp
ZiAoIW5vZGUuZGlzYWJsZWQgJiYgKCFub2RlLnR5cGUgfHwgbm9kZS50eXBlICE9PSAnaGlkZGVu
JykpCi0gICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7
Ci0gICAgfSwKLQotICAgICdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkg
ewotICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVz
W2ldOyBpKyspCi0gICAgICAgIGlmIChub2RlLmRpc2FibGVkKSByZXN1bHRzLnB1c2gobm9kZSk7
Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ2NoZWNrZWQnOiBmdW5jdGlv
bihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0g
W10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAobm9kZS5jaGVja2Vk
KSByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0gIH0s
Ci0KLSAgb3BlcmF0b3JzOiB7Ci0gICAgJz0nOiAgZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuIG52
ID09IHY7IH0sCi0gICAgJyE9JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuIG52ICE9IHY7IH0s
Ci0gICAgJ149JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuIG52ID09IHYgfHwgbnYgJiYgbnYu
c3RhcnRzV2l0aCh2KTsgfSwKLSAgICAnJD0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYg
PT0gdiB8fCBudiAmJiBudi5lbmRzV2l0aCh2KTsgfSwKLSAgICAnKj0nOiBmdW5jdGlvbihudiwg
dikgeyByZXR1cm4gbnYgPT0gdiB8fCBudiAmJiBudi5pbmNsdWRlKHYpOyB9LAotICAgICd+PSc6
IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiAoJyAnICsgbnYgKyAnICcpLmluY2x1ZGUoJyAnICsg
diArICcgJyk7IH0sCi0gICAgJ3w9JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuICgnLScgKyAo
bnYgfHwgIiIpLnRvVXBwZXJDYXNlKCkgKwotICAgICAnLScpLmluY2x1ZGUoJy0nICsgKHYgfHwg
IiIpLnRvVXBwZXJDYXNlKCkgKyAnLScpOyB9Ci0gIH0sCi0KLSAgc3BsaXQ6IGZ1bmN0aW9uKGV4
cHJlc3Npb24pIHsKLSAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsKLSAgICBleHByZXNzaW9uLnNj
YW4oLygoW1x3Izoufj4rKClccy1dK3xcKnxcWy4qP1xdKSspXHMqKCx8JCkvLCBmdW5jdGlvbiht
KSB7Ci0gICAgICBleHByZXNzaW9ucy5wdXNoKG1bMV0uc3RyaXAoKSk7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIGV4cHJlc3Npb25zOwotICB9LAotCi0gIG1hdGNoRWxlbWVudHM6IGZ1bmN0aW9uKGVs
ZW1lbnRzLCBleHByZXNzaW9uKSB7Ci0gICAgdmFyIG1hdGNoZXMgPSAkJChleHByZXNzaW9uKSwg
aCA9IFNlbGVjdG9yLmhhbmRsZXJzOwotICAgIGgubWFyayhtYXRjaGVzKTsKLSAgICBmb3IgKHZh
ciBpID0gMCwgcmVzdWx0cyA9IFtdLCBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudHNbaV07IGkr
KykKLSAgICAgIGlmIChlbGVtZW50Ll9jb3VudGVkQnlQcm90b3R5cGUpIHJlc3VsdHMucHVzaChl
bGVtZW50KTsKLSAgICBoLnVubWFyayhtYXRjaGVzKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAg
fSwKLQotICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudHMsIGV4cHJlc3Npb24sIGluZGV4
KSB7Ci0gICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSkgewotICAgICAgaW5kZXgg
PSBleHByZXNzaW9uOyBleHByZXNzaW9uID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBTZWxl
Y3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1lbnRzLCBleHByZXNzaW9uIHx8ICcqJylbaW5kZXggfHwg
MF07Ci0gIH0sCi0KLSAgZmluZENoaWxkRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJl
c3Npb25zKSB7Ci0gICAgZXhwcmVzc2lvbnMgPSBTZWxlY3Rvci5zcGxpdChleHByZXNzaW9ucy5q
b2luKCcsJykpOwotICAgIHZhciByZXN1bHRzID0gW10sIGggPSBTZWxlY3Rvci5oYW5kbGVyczsK
LSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cHJlc3Npb25zLmxlbmd0aCwgc2VsZWN0b3I7IGkg
PCBsOyBpKyspIHsKLSAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKGV4cHJlc3Npb25zW2ld
LnN0cmlwKCkpOwotICAgICAgaC5jb25jYXQocmVzdWx0cywgc2VsZWN0b3IuZmluZEVsZW1lbnRz
KGVsZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChsID4gMSkgPyBoLnVuaXF1ZShyZXN1bHRz
KSA6IHJlc3VsdHM7Ci0gIH0KLX0pOwotCi1pZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKLSAg
T2JqZWN0LmV4dGVuZChTZWxlY3Rvci5oYW5kbGVycywgewotICAgIGNvbmNhdDogZnVuY3Rpb24o
YSwgYikgewotICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBiW2ldOyBpKyspCi0g
ICAgICAgIGlmIChub2RlLnRhZ05hbWUgIT09ICIhIikgYS5wdXNoKG5vZGUpOwotICAgICAgcmV0
dXJuIGE7Ci0gICAgfQotICB9KTsKLX0KLQotZnVuY3Rpb24gJCQoKSB7Ci0gIHJldHVybiBTZWxl
Y3Rvci5maW5kQ2hpbGRFbGVtZW50cyhkb2N1bWVudCwgJEEoYXJndW1lbnRzKSk7Ci19Ci0KLXZh
ciBGb3JtID0gewotICByZXNldDogZnVuY3Rpb24oZm9ybSkgewotICAgIGZvcm0gPSAkKGZvcm0p
OwotICAgIGZvcm0ucmVzZXQoKTsKLSAgICByZXR1cm4gZm9ybTsKLSAgfSwKLQotICBzZXJpYWxp
emVFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudHMsIG9wdGlvbnMpIHsKLSAgICBpZiAodHlwZW9m
IG9wdGlvbnMgIT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7IGhhc2g6ICEhb3B0aW9ucyB9OwotICAg
IGVsc2UgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChvcHRpb25zLmhhc2gpKSBvcHRpb25zLmhhc2gg
PSB0cnVlOwotICAgIHZhciBrZXksIHZhbHVlLCBzdWJtaXR0ZWQgPSBmYWxzZSwgc3VibWl0ID0g
b3B0aW9ucy5zdWJtaXQ7Ci0KLSAgICB2YXIgZGF0YSA9IGVsZW1lbnRzLmluamVjdCh7IH0sIGZ1
bmN0aW9uKHJlc3VsdCwgZWxlbWVudCkgewotICAgICAgaWYgKCFlbGVtZW50LmRpc2FibGVkICYm
IGVsZW1lbnQubmFtZSkgewotICAgICAgICBrZXkgPSBlbGVtZW50Lm5hbWU7IHZhbHVlID0gJChl
bGVtZW50KS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50
LnR5cGUgIT0gJ2ZpbGUnICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1pdCcgfHwgKCFzdWJtaXR0
ZWQgJiYKLSAgICAgICAgICAgIHN1Ym1pdCAhPT0gZmFsc2UgJiYgKCFzdWJtaXQgfHwga2V5ID09
IHN1Ym1pdCkgJiYgKHN1Ym1pdHRlZCA9IHRydWUpKSkpIHsKLSAgICAgICAgICBpZiAoa2V5IGlu
IHJlc3VsdCkgewotICAgICAgICAgICAgaWYgKCFPYmplY3QuaXNBcnJheShyZXN1bHRba2V5XSkp
IHJlc3VsdFtrZXldID0gW3Jlc3VsdFtrZXldXTsKLSAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1
c2godmFsdWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHJlc3VsdFtrZXldID0gdmFs
dWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gb3B0aW9ucy5oYXNoID8gZGF0YSA6IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRh
dGEpOwotICB9Ci19OwotCi1Gb3JtLk1ldGhvZHMgPSB7Ci0gIHNlcmlhbGl6ZTogZnVuY3Rpb24o
Zm9ybSwgb3B0aW9ucykgewotICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZUVsZW1lbnRzKEZvcm0u
Z2V0RWxlbWVudHMoZm9ybSksIG9wdGlvbnMpOwotICB9LAotCi0gIGdldEVsZW1lbnRzOiBmdW5j
dGlvbihmb3JtKSB7Ci0gICAgdmFyIGVsZW1lbnRzID0gJChmb3JtKS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpLAotICAgICAgICBlbGVtZW50LAotICAgICAgICBhcnIgPSBbIF0sCi0gICAgICAg
IHNlcmlhbGl6ZXJzID0gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzOwotICAgIGZvciAodmFyIGkg
PSAwOyBlbGVtZW50ID0gZWxlbWVudHNbaV07IGkrKykgewotICAgICAgYXJyLnB1c2goZWxlbWVu
dCk7Ci0gICAgfQotICAgIHJldHVybiBhcnIuaW5qZWN0KFtdLCBmdW5jdGlvbihlbGVtZW50cywg
Y2hpbGQpIHsKLSAgICAgIGlmIChzZXJpYWxpemVyc1tjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNl
KCldKQotICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7Ci0gICAg
ICByZXR1cm4gZWxlbWVudHM7Ci0gICAgfSkKLSAgfSwKLQotICBnZXRJbnB1dHM6IGZ1bmN0aW9u
KGZvcm0sIHR5cGVOYW1lLCBuYW1lKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0gICAgdmFyIGlu
cHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7Ci0KLSAgICBpZiAoIXR5
cGVOYW1lICYmICFuYW1lKSByZXR1cm4gJEEoaW5wdXRzKS5tYXAoRWxlbWVudC5leHRlbmQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoaW5nSW5wdXRzID0gW10sIGxlbmd0aCA9IGlucHV0
cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgdmFyIGlucHV0ID0gaW5wdXRzW2ld
OwotICAgICAgaWYgKCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFt
ZSAmJiBpbnB1dC5uYW1lICE9IG5hbWUpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIG1hdGNo
aW5nSW5wdXRzLnB1c2goRWxlbWVudC5leHRlbmQoaW5wdXQpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbWF0Y2hpbmdJbnB1dHM7Ci0gIH0sCi0KLSAgZGlzYWJsZTogZnVuY3Rpb24oZm9ybSkgewot
ICAgIGZvcm0gPSAkKGZvcm0pOwotICAgIEZvcm0uZ2V0RWxlbWVudHMoZm9ybSkuaW52b2tlKCdk
aXNhYmxlJyk7Ci0gICAgcmV0dXJuIGZvcm07Ci0gIH0sCi0KLSAgZW5hYmxlOiBmdW5jdGlvbihm
b3JtKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0gICAgRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5p
bnZva2UoJ2VuYWJsZScpOwotICAgIHJldHVybiBmb3JtOwotICB9LAotCi0gIGZpbmRGaXJzdEVs
ZW1lbnQ6IGZ1bmN0aW9uKGZvcm0pIHsKLSAgICB2YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdldEVs
ZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgICByZXR1cm4gJ2hpZGRl
bicgIT0gZWxlbWVudC50eXBlICYmICFlbGVtZW50LmRpc2FibGVkOwotICAgIH0pOwotICAgIHZh
ciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5kQWxsKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAg
ICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSAmJiBlbGVtZW50LnRh
YkluZGV4ID49IDA7Ci0gICAgfSkuc29ydEJ5KGZ1bmN0aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVs
ZW1lbnQudGFiSW5kZXggfSkuZmlyc3QoKTsKLQotICAgIHJldHVybiBmaXJzdEJ5SW5kZXggPyBm
aXJzdEJ5SW5kZXggOiBlbGVtZW50cy5maW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgIHJl
dHVybiAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVzdChlbGVtZW50LnRhZ05hbWUp
OwotICAgIH0pOwotICB9LAotCi0gIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7
Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0gICAgZm9ybS5maW5kRmlyc3RFbGVtZW50KCkuYWN0aXZh
dGUoKTsKLSAgICByZXR1cm4gZm9ybTsKLSAgfSwKLQotICByZXF1ZXN0OiBmdW5jdGlvbihmb3Jt
LCBvcHRpb25zKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSksIG9wdGlvbnMgPSBPYmplY3QuY2xvbmUo
b3B0aW9ucyB8fCB7IH0pOwotCi0gICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycywg
YWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRlKCdhY3Rpb24nKSB8fCAnJzsKLSAgICBpZiAoYWN0
aW9uLmJsYW5rKCkpIGFjdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgIG9wdGlvbnMu
cGFyYW1ldGVycyA9IGZvcm0uc2VyaWFsaXplKHRydWUpOwotCi0gICAgaWYgKHBhcmFtcykgewot
ICAgICAgaWYgKE9iamVjdC5pc1N0cmluZyhwYXJhbXMpKSBwYXJhbXMgPSBwYXJhbXMudG9RdWVy
eVBhcmFtcygpOwotICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFtZXRlcnMsIHBhcmFt
cyk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm0uaGFzQXR0cmlidXRlKCdtZXRob2QnKSAmJiAhb3B0
aW9ucy5tZXRob2QpCi0gICAgICBvcHRpb25zLm1ldGhvZCA9IGZvcm0ubWV0aG9kOwotCi0gICAg
cmV0dXJuIG5ldyBBamF4LlJlcXVlc3QoYWN0aW9uLCBvcHRpb25zKTsKLSAgfQotfTsKLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLQotRm9ybS5FbGVtZW50ID0gewotICBmb2N1czogZnVuY3Rp
b24oZWxlbWVudCkgewotICAgICQoZWxlbWVudCkuZm9jdXMoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLSAgfSwKLQotICBzZWxlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAkKGVsZW1lbnQp
LnNlbGVjdCgpOwotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci19OwotCi1Gb3JtLkVsZW1lbnQu
TWV0aG9kcyA9IHsKLQotICBzZXJpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnQuZGlzYWJsZWQgJiYgZWxlbWVudC5u
YW1lKSB7Ci0gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LmdldFZhbHVlKCk7Ci0gICAgICBpZiAo
dmFsdWUgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHZhciBwYWlyID0geyB9OwotICAgICAgICBw
YWlyW2VsZW1lbnQubmFtZV0gPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE9iamVjdC50b1F1ZXJ5
U3RyaW5nKHBhaXIpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gJyc7Ci0gIH0sCi0KLSAg
Z2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
LSAgICB2YXIgbWV0aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0
dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQpOwotICB9LAotCi0g
IHNldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewotICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOwotICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsK
LSAgICBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50LCB2YWx1ZSk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgY2xlYXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICAkKGVsZW1lbnQpLnZhbHVlID0gJyc7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0K
LSAgcHJlc2VudDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiAkKGVsZW1lbnQpLnZh
bHVlICE9ICcnOwotICB9LAotCi0gIGFjdGl2YXRlOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgdHJ5IHsKLSAgICAgIGVsZW1lbnQuZm9jdXMoKTsK
LSAgICAgIGlmIChlbGVtZW50LnNlbGVjdCAmJiAoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNl
KCkgIT0gJ2lucHV0JyB8fAotICAgICAgICAgICEoL14oPzpidXR0b258cmVzZXR8c3VibWl0KSQv
aS50ZXN0KGVsZW1lbnQudHlwZSkpKSkKLSAgICAgICAgZWxlbWVudC5zZWxlY3QoKTsKLSAgICB9
IGNhdGNoIChlKSB7IH0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBkaXNhYmxlOiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgZWxlbWVu
dC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZW5hYmxl
OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgZWxl
bWVudC5kaXNhYmxlZCA9IGZhbHNlOwotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci19OwotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdmFyIEZpZWxkID0gRm9ybS5FbGVtZW50OwotCi12YXIg
JEYgPSBGb3JtLkVsZW1lbnQuTWV0aG9kcy5nZXRWYWx1ZTsKLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0KLUZvcm0uRWxlbWVudC5TZXJpYWxpemVycyA9IHsKLSAgaW5wdXQ6IGZ1bmN0aW9uKGVs
ZW1lbnQsIHZhbHVlKSB7Ci0gICAgc3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkg
ewotICAgICAgY2FzZSAnY2hlY2tib3gnOgotICAgICAgY2FzZSAncmFkaW8nOgotICAgICAgICBy
ZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLmlucHV0U2VsZWN0b3IoZWxlbWVudCwgdmFs
dWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxp
emVycy50ZXh0YXJlYShlbGVtZW50LCB2YWx1ZSk7Ci0gICAgfQotICB9LAotCi0gIGlucHV0U2Vs
ZWN0b3I6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgaWYgKE9iamVjdC5pc1VuZGVm
aW5lZCh2YWx1ZSkpIHJldHVybiBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogbnVs
bDsKLSAgICBlbHNlIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7Ci0gIH0sCi0KLSAgdGV4dGFy
ZWE6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgaWYgKE9iamVjdC5pc1VuZGVmaW5l
ZCh2YWx1ZSkpIHJldHVybiBlbGVtZW50LnZhbHVlOwotICAgIGVsc2UgZWxlbWVudC52YWx1ZSA9
IHZhbHVlOwotICB9LAotCi0gIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAg
ICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkKLSAgICAgIHJldHVybiB0aGlzW2VsZW1l
bnQudHlwZSA9PSAnc2VsZWN0LW9uZScgPwotICAgICAgICAnc2VsZWN0T25lJyA6ICdzZWxlY3RN
YW55J10oZWxlbWVudCk7Ci0gICAgZWxzZSB7Ci0gICAgICB2YXIgb3B0LCBjdXJyZW50VmFsdWUs
IHNpbmdsZSA9ICFPYmplY3QuaXNBcnJheSh2YWx1ZSk7Ci0gICAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gZWxlbWVudC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBvcHQg
PSBlbGVtZW50Lm9wdGlvbnNbaV07Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IHRoaXMub3B0aW9u
VmFsdWUob3B0KTsKLSAgICAgICAgaWYgKHNpbmdsZSkgewotICAgICAgICAgIGlmIChjdXJyZW50
VmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugb3B0
LnNlbGVjdGVkID0gdmFsdWUuaW5jbHVkZShjdXJyZW50VmFsdWUpOwotICAgICAgfQotICAgIH0K
LSAgfSwKLQotICBzZWxlY3RPbmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB2YXIgaW5kZXgg
PSBlbGVtZW50LnNlbGVjdGVkSW5kZXg7Ci0gICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLm9w
dGlvblZhbHVlKGVsZW1lbnQub3B0aW9uc1tpbmRleF0pIDogbnVsbDsKLSAgfSwKLQotICBzZWxl
Y3RNYW55OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIHZhbHVlcywgbGVuZ3RoID0gZWxl
bWVudC5sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgpIHJldHVybiBudWxsOwotCi0gICAgZm9yICh2
YXIgaSA9IDAsIHZhbHVlcyA9IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBvcHQg
PSBlbGVtZW50Lm9wdGlvbnNbaV07Ci0gICAgICBpZiAob3B0LnNlbGVjdGVkKSB2YWx1ZXMucHVz
aCh0aGlzLm9wdGlvblZhbHVlKG9wdCkpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWVzOwotICB9
LAotCi0gIG9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHQpIHsKLSAgICByZXR1cm4gRWxlbWVudC5l
eHRlbmQob3B0KS5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyBvcHQudmFsdWUgOiBvcHQudGV4dDsK
LSAgfQotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotQWJzdHJhY3QuVGltZWRPYnNl
cnZlciA9IENsYXNzLmNyZWF0ZShQZXJpb2RpY2FsRXhlY3V0ZXIsIHsKLSAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24oJHN1cGVyLCBlbGVtZW50LCBmcmVxdWVuY3ksIGNhbGxiYWNrKSB7Ci0gICAgJHN1
cGVyKGNhbGxiYWNrLCBmcmVxdWVuY3kpOwotICAgIHRoaXMuZWxlbWVudCAgID0gJChlbGVtZW50
KTsKLSAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKLSAgfSwKLQotICBleGVj
dXRlOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gICAg
aWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLmxhc3RWYWx1ZSkgJiYgT2JqZWN0LmlzU3RyaW5nKHZh
bHVlKSA/Ci0gICAgICAgIHRoaXMubGFzdFZhbHVlICE9IHZhbHVlIDogU3RyaW5nKHRoaXMubGFz
dFZhbHVlKSAhPSBTdHJpbmcodmFsdWUpKSB7Ci0gICAgICB0aGlzLmNhbGxiYWNrKHRoaXMuZWxl
bWVudCwgdmFsdWUpOwotICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0gIH0K
LX0pOwotCi1Gb3JtLkVsZW1lbnQuT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGlt
ZWRPYnNlcnZlciwgewotICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIEZvcm0u
RWxlbWVudC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOwotICB9Ci19KTsKLQotRm9ybS5PYnNlcnZl
ciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5UaW1lZE9ic2VydmVyLCB7Ci0gIGdldFZhbHVlOiBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKLSAg
fQotfSk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1BYnN0cmFjdC5FdmVudE9ic2VydmVy
ID0gQ2xhc3MuY3JlYXRlKHsKLSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgY2FsbGJh
Y2spIHsKLSAgICB0aGlzLmVsZW1lbnQgID0gJChlbGVtZW50KTsKLSAgICB0aGlzLmNhbGxiYWNr
ID0gY2FsbGJhY2s7Ci0KLSAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKLSAg
ICBpZiAodGhpcy5lbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnZm9ybScpCi0gICAg
ICB0aGlzLnJlZ2lzdGVyRm9ybUNhbGxiYWNrcygpOwotICAgIGVsc2UKLSAgICAgIHRoaXMucmVn
aXN0ZXJDYWxsYmFjayh0aGlzLmVsZW1lbnQpOwotICB9LAotCi0gIG9uRWxlbWVudEV2ZW50OiBm
dW5jdGlvbigpIHsKLSAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gICAgaWYgKHRo
aXMubGFzdFZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICB0aGlzLmNhbGxiYWNrKHRoaXMuZWxlbWVu
dCwgdmFsdWUpOwotICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0gIH0sCi0K
LSAgcmVnaXN0ZXJGb3JtQ2FsbGJhY2tzOiBmdW5jdGlvbigpIHsKLSAgICBGb3JtLmdldEVsZW1l
bnRzKHRoaXMuZWxlbWVudCkuZWFjaCh0aGlzLnJlZ2lzdGVyQ2FsbGJhY2ssIHRoaXMpOwotICB9
LAotCi0gIHJlZ2lzdGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAoZWxl
bWVudC50eXBlKSB7Ci0gICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7
Ci0gICAgICAgIGNhc2UgJ2NoZWNrYm94JzoKLSAgICAgICAgY2FzZSAncmFkaW8nOgotICAgICAg
ICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NsaWNrJywgdGhpcy5vbkVsZW1lbnRFdmVudC5i
aW5kKHRoaXMpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICBFdmVudC5vYnNlcnZlKGVsZW1lbnQsICdjaGFuZ2UnLCB0aGlzLm9uRWxlbWVudEV2ZW50LmJp
bmQodGhpcykpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotfSk7Ci0K
LUZvcm0uRWxlbWVudC5FdmVudE9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LkV2ZW50
T2JzZXJ2ZXIsIHsKLSAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBGb3JtLkVs
ZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKLSAgfQotfSk7Ci0KLUZvcm0uRXZlbnRPYnNl
cnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9ic2VydmVyLCB7Ci0gIGdldFZhbHVl
OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsK
LSAgfQotfSk7Ci0oZnVuY3Rpb24oKSB7Ci0KLSAgdmFyIEV2ZW50ID0gewotICAgIEtFWV9CQUNL
U1BBQ0U6IDgsCi0gICAgS0VZX1RBQjogICAgICAgOSwKLSAgICBLRVlfUkVUVVJOOiAgIDEzLAot
ICAgIEtFWV9FU0M6ICAgICAgMjcsCi0gICAgS0VZX0xFRlQ6ICAgICAzNywKLSAgICBLRVlfVVA6
ICAgICAgIDM4LAotICAgIEtFWV9SSUdIVDogICAgMzksCi0gICAgS0VZX0RPV046ICAgICA0MCwK
LSAgICBLRVlfREVMRVRFOiAgIDQ2LAotICAgIEtFWV9IT01FOiAgICAgMzYsCi0gICAgS0VZX0VO
RDogICAgICAzNSwKLSAgICBLRVlfUEFHRVVQOiAgIDMzLAotICAgIEtFWV9QQUdFRE9XTjogMzQs
Ci0gICAgS0VZX0lOU0VSVDogICA0NSwKLQotICAgIGNhY2hlOiB7fQotICB9OwotCi0gIHZhciBk
b2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAgdmFyIE1PVVNFRU5URVJfTU9VU0VM
RUFWRV9FVkVOVFNfU1VQUE9SVEVEID0gJ29ubW91c2VlbnRlcicgaW4gZG9jRWwKLSAgICAmJiAn
b25tb3VzZWxlYXZlJyBpbiBkb2NFbDsKLQotICB2YXIgX2lzQnV0dG9uOwotICBpZiAoUHJvdG90
eXBlLkJyb3dzZXIuSUUpIHsKLSAgICB2YXIgYnV0dG9uTWFwID0geyAwOiAxLCAxOiA0LCAyOiAy
IH07Ci0gICAgX2lzQnV0dG9uID0gZnVuY3Rpb24oZXZlbnQsIGNvZGUpIHsKLSAgICAgIHJldHVy
biBldmVudC5idXR0b24gPT09IGJ1dHRvbk1hcFtjb2RlXTsKLSAgICB9OwotICB9IGVsc2UgaWYg
KFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCkgewotICAgIF9pc0J1dHRvbiA9IGZ1bmN0aW9uKGV2
ZW50LCBjb2RlKSB7Ci0gICAgICBzd2l0Y2ggKGNvZGUpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1
cm4gZXZlbnQud2hpY2ggPT0gMSAmJiAhZXZlbnQubWV0YUtleTsKLSAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gZXZlbnQud2hpY2ggPT0gMSAmJiBldmVudC5tZXRhS2V5OwotICAgICAgICBkZWZhdWx0
OiByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfTsKLSAgfSBlbHNlIHsKLSAgICBfaXNCdXR0
b24gPSBmdW5jdGlvbihldmVudCwgY29kZSkgewotICAgICAgcmV0dXJuIGV2ZW50LndoaWNoID8g
KGV2ZW50LndoaWNoID09PSBjb2RlICsgMSkgOiAoZXZlbnQuYnV0dG9uID09PSBjb2RlKTsKLSAg
ICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNMZWZ0Q2xpY2soZXZlbnQpICAgeyByZXR1cm4gX2lz
QnV0dG9uKGV2ZW50LCAwKSB9Ci0KLSAgZnVuY3Rpb24gaXNNaWRkbGVDbGljayhldmVudCkgeyBy
ZXR1cm4gX2lzQnV0dG9uKGV2ZW50LCAxKSB9Ci0KLSAgZnVuY3Rpb24gaXNSaWdodENsaWNrKGV2
ZW50KSAgeyByZXR1cm4gX2lzQnV0dG9uKGV2ZW50LCAyKSB9Ci0KLSAgZnVuY3Rpb24gZWxlbWVu
dChldmVudCkgewotICAgIGV2ZW50ID0gRXZlbnQuZXh0ZW5kKGV2ZW50KTsKLQotICAgIHZhciBu
b2RlID0gZXZlbnQudGFyZ2V0LCB0eXBlID0gZXZlbnQudHlwZSwKLSAgICAgY3VycmVudFRhcmdl
dCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7Ci0KLSAgICBpZiAoY3VycmVudFRhcmdldCAmJiBjdXJy
ZW50VGFyZ2V0LnRhZ05hbWUpIHsKLSAgICAgIGlmICh0eXBlID09PSAnbG9hZCcgfHwgdHlwZSA9
PT0gJ2Vycm9yJyB8fAotICAgICAgICAodHlwZSA9PT0gJ2NsaWNrJyAmJiBjdXJyZW50VGFyZ2V0
LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JwotICAgICAgICAgICYmIGN1cnJlbnRU
YXJnZXQudHlwZSA9PT0gJ3JhZGlvJykpCi0gICAgICAgICAgICBub2RlID0gY3VycmVudFRhcmdl
dDsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKLSAg
ICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0KLSAgICByZXR1cm4gRWxlbWVudC5leHRlbmQo
bm9kZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5kRWxlbWVudChldmVudCwgZXhwcmVzc2lvbikg
ewotICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVudCk7Ci0gICAgaWYgKCFleHBy
ZXNzaW9uKSByZXR1cm4gZWxlbWVudDsKLSAgICB2YXIgZWxlbWVudHMgPSBbZWxlbWVudF0uY29u
Y2F0KGVsZW1lbnQuYW5jZXN0b3JzKCkpOwotICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVu
dChlbGVtZW50cywgZXhwcmVzc2lvbiwgMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwb2ludGVyKGV2
ZW50KSB7Ci0gICAgcmV0dXJuIHsgeDogcG9pbnRlclgoZXZlbnQpLCB5OiBwb2ludGVyWShldmVu
dCkgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBvaW50ZXJYKGV2ZW50KSB7Ci0gICAgdmFyIGRvY0Vs
ZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCi0gICAgIGJvZHkgPSBkb2N1bWVudC5i
b2R5IHx8IHsgc2Nyb2xsTGVmdDogMCB9OwotCi0gICAgcmV0dXJuIGV2ZW50LnBhZ2VYIHx8IChl
dmVudC5jbGllbnRYICsKLSAgICAgIChkb2NFbGVtZW50LnNjcm9sbExlZnQgfHwgYm9keS5zY3Jv
bGxMZWZ0KSAtCi0gICAgICAoZG9jRWxlbWVudC5jbGllbnRMZWZ0IHx8IDApKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIHBvaW50ZXJZKGV2ZW50KSB7Ci0gICAgdmFyIGRvY0VsZW1lbnQgPSBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQsCi0gICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5IHx8IHsgc2Nyb2xs
VG9wOiAwIH07Ci0KLSAgICByZXR1cm4gIGV2ZW50LnBhZ2VZIHx8IChldmVudC5jbGllbnRZICsK
LSAgICAgICAoZG9jRWxlbWVudC5zY3JvbGxUb3AgfHwgYm9keS5zY3JvbGxUb3ApIC0KLSAgICAg
ICAoZG9jRWxlbWVudC5jbGllbnRUb3AgfHwgMCkpOwotICB9Ci0KLQotICBmdW5jdGlvbiBzdG9w
KGV2ZW50KSB7Ci0gICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKLSAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwotICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotCi0gICAgZXZlbnQuc3RvcHBl
ZCA9IHRydWU7Ci0gIH0KLQotICBFdmVudC5NZXRob2RzID0gewotICAgIGlzTGVmdENsaWNrOiBp
c0xlZnRDbGljaywKLSAgICBpc01pZGRsZUNsaWNrOiBpc01pZGRsZUNsaWNrLAotICAgIGlzUmln
aHRDbGljazogaXNSaWdodENsaWNrLAotCi0gICAgZWxlbWVudDogZWxlbWVudCwKLSAgICBmaW5k
RWxlbWVudDogZmluZEVsZW1lbnQsCi0KLSAgICBwb2ludGVyOiBwb2ludGVyLAotICAgIHBvaW50
ZXJYOiBwb2ludGVyWCwKLSAgICBwb2ludGVyWTogcG9pbnRlclksCi0KLSAgICBzdG9wOiBzdG9w
Ci0gIH07Ci0KLQotICB2YXIgbWV0aG9kcyA9IE9iamVjdC5rZXlzKEV2ZW50Lk1ldGhvZHMpLmlu
amVjdCh7IH0sIGZ1bmN0aW9uKG0sIG5hbWUpIHsKLSAgICBtW25hbWVdID0gRXZlbnQuTWV0aG9k
c1tuYW1lXS5tZXRob2RpemUoKTsKLSAgICByZXR1cm4gbTsKLSAgfSk7Ci0KLSAgaWYgKFByb3Rv
dHlwZS5Ccm93c2VyLklFKSB7Ci0gICAgZnVuY3Rpb24gX3JlbGF0ZWRUYXJnZXQoZXZlbnQpIHsK
LSAgICAgIHZhciBlbGVtZW50OwotICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7Ci0gICAgICAg
IGNhc2UgJ21vdXNlb3Zlcic6IGVsZW1lbnQgPSBldmVudC5mcm9tRWxlbWVudDsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ21vdXNlb3V0JzogIGVsZW1lbnQgPSBldmVudC50b0VsZW1lbnQ7ICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgcmV0dXJu
IEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQpOwotICAgIH0KLQotICAgIE9iamVjdC5leHRlbmQobWV0
aG9kcywgewotICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxC
dWJibGUgPSB0cnVlIH0sCi0gICAgICBwcmV2ZW50RGVmYXVsdDogIGZ1bmN0aW9uKCkgeyB0aGlz
LnJldHVyblZhbHVlID0gZmFsc2UgfSwKLSAgICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gJ1tvYmplY3QgRXZlbnRdJyB9Ci0gICAgfSk7Ci0KLSAgICBFdmVudC5leHRlbmQgPSBmdW5j
dGlvbihldmVudCwgZWxlbWVudCkgewotICAgICAgaWYgKCFldmVudCkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlKSByZXR1cm4gZXZlbnQ7Ci0KLSAg
ICAgIGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247
Ci0gICAgICB2YXIgcG9pbnRlciA9IEV2ZW50LnBvaW50ZXIoZXZlbnQpOwotCi0gICAgICBPYmpl
Y3QuZXh0ZW5kKGV2ZW50LCB7Ci0gICAgICAgIHRhcmdldDogZXZlbnQuc3JjRWxlbWVudCB8fCBl
bGVtZW50LAotICAgICAgICByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldChldmVudCksCi0g
ICAgICAgIHBhZ2VYOiAgcG9pbnRlci54LAotICAgICAgICBwYWdlWTogIHBvaW50ZXIueQotICAg
ICAgfSk7Ci0KLSAgICAgIHJldHVybiBPYmplY3QuZXh0ZW5kKGV2ZW50LCBtZXRob2RzKTsKLSAg
ICB9OwotICB9IGVsc2UgewotICAgIEV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90
b3R5cGUgfHwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKS5fX3Byb3RvX187Ci0g
ICAgT2JqZWN0LmV4dGVuZChFdmVudC5wcm90b3R5cGUsIG1ldGhvZHMpOwotICAgIEV2ZW50LmV4
dGVuZCA9IFByb3RvdHlwZS5LOwotICB9Ci0KLSAgZnVuY3Rpb24gX2NyZWF0ZVJlc3BvbmRlcihl
bGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKLSAgICB2YXIgcmVnaXN0cnkgPSBFbGVtZW50
LnJldHJpZXZlKGVsZW1lbnQsICdwcm90b3R5cGVfZXZlbnRfcmVnaXN0cnknKTsKLQotICAgIGlm
IChPYmplY3QuaXNVbmRlZmluZWQocmVnaXN0cnkpKSB7Ci0gICAgICBDQUNIRS5wdXNoKGVsZW1l
bnQpOwotICAgICAgcmVnaXN0cnkgPSBFbGVtZW50LnJldHJpZXZlKGVsZW1lbnQsICdwcm90b3R5
cGVfZXZlbnRfcmVnaXN0cnknLCAkSCgpKTsKLSAgICB9Ci0KLSAgICB2YXIgcmVzcG9uZGVyc0Zv
ckV2ZW50ID0gcmVnaXN0cnkuZ2V0KGV2ZW50TmFtZSk7Ci0gICAgaWYgKE9iamVjdC5pc1VuZGVm
aW5lZChyZXNwb25kZXJzRm9yRXZlbnQpKSB7Ci0gICAgICByZXNwb25kZXJzRm9yRXZlbnQgPSBb
XTsKLSAgICAgIHJlZ2lzdHJ5LnNldChldmVudE5hbWUsIHJlc3BvbmRlcnNGb3JFdmVudCk7Ci0g
ICAgfQotCi0gICAgaWYgKHJlc3BvbmRlcnNGb3JFdmVudC5wbHVjaygnaGFuZGxlcicpLmluY2x1
ZGUoaGFuZGxlcikpIHJldHVybiBmYWxzZTsKLQotICAgIHZhciByZXNwb25kZXI7Ci0gICAgaWYg
KGV2ZW50TmFtZS5pbmNsdWRlKCI6IikpIHsKLSAgICAgIHJlc3BvbmRlciA9IGZ1bmN0aW9uKGV2
ZW50KSB7Ci0gICAgICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoZXZlbnQuZXZlbnROYW1lKSkK
LSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGV2ZW50LmV2ZW50TmFtZSAh
PT0gZXZlbnROYW1lKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBFdmVudC5l
eHRlbmQoZXZlbnQsIGVsZW1lbnQpOwotICAgICAgICBoYW5kbGVyLmNhbGwoZWxlbWVudCwgZXZl
bnQpOwotICAgICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKCFNT1VTRUVOVEVSX01PVVNF
TEVBVkVfRVZFTlRTX1NVUFBPUlRFRCAmJgotICAgICAgIChldmVudE5hbWUgPT09ICJtb3VzZWVu
dGVyIiB8fCBldmVudE5hbWUgPT09ICJtb3VzZWxlYXZlIikpIHsKLSAgICAgICAgaWYgKGV2ZW50
TmFtZSA9PT0gIm1vdXNlZW50ZXIiIHx8IGV2ZW50TmFtZSA9PT0gIm1vdXNlbGVhdmUiKSB7Ci0g
ICAgICAgICAgcmVzcG9uZGVyID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgIEV2ZW50
LmV4dGVuZChldmVudCwgZWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSBldmVu
dC5yZWxhdGVkVGFyZ2V0OwotICAgICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09
IGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgdHJ5IHsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5v
ZGU7IH0KLSAgICAgICAgICAgICAgY2F0Y2goZSkgeyBwYXJlbnQgPSBlbGVtZW50OyB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IGVsZW1lbnQpIHJldHVybjsK
LQotICAgICAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKLSAgICAgICAgICB9
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNwb25kZXIgPSBmdW5jdGlv
bihldmVudCkgewotICAgICAgICAgIEV2ZW50LmV4dGVuZChldmVudCwgZWxlbWVudCk7Ci0gICAg
ICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKLSAgICAgICAgfTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXNwb25kZXIuaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgcmVzcG9uZGVy
c0ZvckV2ZW50LnB1c2gocmVzcG9uZGVyKTsKLSAgICByZXR1cm4gcmVzcG9uZGVyOwotICB9Ci0K
LSAgZnVuY3Rpb24gX2Rlc3Ryb3lDYWNoZSgpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gQ0FDSEUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIEV2ZW50LnN0b3BPYnNl
cnZpbmcoQ0FDSEVbaV0pOwotICAgICAgQ0FDSEVbaV0gPSBudWxsOwotICAgIH0KLSAgfQotCi0g
IHZhciBDQUNIRSA9IFtdOwotCi0gIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkKLSAgICB3aW5k
b3cuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgX2Rlc3Ryb3lDYWNoZSk7Ci0KLSAgaWYgKFByb3Rv
dHlwZS5Ccm93c2VyLldlYktpdCkKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2Fk
JywgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24sIGZhbHNlKTsKLQotCi0gIHZhciBfZ2V0RE9NRXZl
bnROYW1lID0gUHJvdG90eXBlLks7Ci0KLSAgaWYgKCFNT1VTRUVOVEVSX01PVVNFTEVBVkVfRVZF
TlRTX1NVUFBPUlRFRCkgewotICAgIF9nZXRET01FdmVudE5hbWUgPSBmdW5jdGlvbihldmVudE5h
bWUpIHsKLSAgICAgIHZhciB0cmFuc2xhdGlvbnMgPSB7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIi
LCBtb3VzZWxlYXZlOiAibW91c2VvdXQiIH07Ci0gICAgICByZXR1cm4gZXZlbnROYW1lIGluIHRy
YW5zbGF0aW9ucyA/IHRyYW5zbGF0aW9uc1tldmVudE5hbWVdIDogZXZlbnROYW1lOwotICAgIH07
Ci0gIH0KLQotICBmdW5jdGlvbiBvYnNlcnZlKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikg
ewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotCi0gICAgdmFyIHJlc3BvbmRlciA9IF9jcmVh
dGVSZXNwb25kZXIoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyKTsKLQotICAgIGlmICghcmVz
cG9uZGVyKSByZXR1cm4gZWxlbWVudDsKLQotICAgIGlmIChldmVudE5hbWUuaW5jbHVkZSgnOicp
KSB7Ci0gICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKQotICAgICAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImRhdGFhdmFpbGFibGUiLCByZXNwb25kZXIsIGZhbHNlKTsKLSAg
ICAgIGVsc2UgewotICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbmRhdGFhdmFpbGFibGUi
LCByZXNwb25kZXIpOwotICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbmZpbHRlcmNoYW5n
ZSIsIHJlc3BvbmRlcik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBhY3R1YWxF
dmVudE5hbWUgPSBfZ2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7Ci0KLSAgICAgIGlmIChlbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIpCi0gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihh
Y3R1YWxFdmVudE5hbWUsIHJlc3BvbmRlciwgZmFsc2UpOwotICAgICAgZWxzZQotICAgICAgICBl
bGVtZW50LmF0dGFjaEV2ZW50KCJvbiIgKyBhY3R1YWxFdmVudE5hbWUsIHJlc3BvbmRlcik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICBmdW5jdGlvbiBzdG9wT2JzZXJ2
aW5nKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewotICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOwotCi0gICAgdmFyIHJlZ2lzdHJ5ID0gRWxlbWVudC5yZXRyaWV2ZShlbGVtZW50LCAncHJv
dG90eXBlX2V2ZW50X3JlZ2lzdHJ5Jyk7Ci0KLSAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHJl
Z2lzdHJ5KSkgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICBpZiAoZXZlbnROYW1lICYmICFoYW5kbGVy
KSB7Ci0gICAgICB2YXIgcmVzcG9uZGVycyA9IHJlZ2lzdHJ5LmdldChldmVudE5hbWUpOwotCi0g
ICAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHJlc3BvbmRlcnMpKSByZXR1cm4gZWxlbWVudDsK
LQotICAgICAgcmVzcG9uZGVycy5lYWNoKCBmdW5jdGlvbihyKSB7Ci0gICAgICAgIEVsZW1lbnQu
c3RvcE9ic2VydmluZyhlbGVtZW50LCBldmVudE5hbWUsIHIuaGFuZGxlcik7Ci0gICAgICB9KTsK
LSAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0gZWxzZSBpZiAoIWV2ZW50TmFtZSkgewotICAg
ICAgcmVnaXN0cnkuZWFjaCggZnVuY3Rpb24ocGFpcikgewotICAgICAgICB2YXIgZXZlbnROYW1l
ID0gcGFpci5rZXksIHJlc3BvbmRlcnMgPSBwYWlyLnZhbHVlOwotCi0gICAgICAgIHJlc3BvbmRl
cnMuZWFjaCggZnVuY3Rpb24ocikgewotICAgICAgICAgIEVsZW1lbnQuc3RvcE9ic2VydmluZyhl
bGVtZW50LCBldmVudE5hbWUsIHIuaGFuZGxlcik7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0g
ICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0KLSAgICB2YXIgcmVzcG9uZGVycyA9IHJlZ2lz
dHJ5LmdldChldmVudE5hbWUpOwotCi0gICAgaWYgKCFyZXNwb25kZXJzKSByZXR1cm47Ci0KLSAg
ICB2YXIgcmVzcG9uZGVyID0gcmVzcG9uZGVycy5maW5kKCBmdW5jdGlvbihyKSB7IHJldHVybiBy
LmhhbmRsZXIgPT09IGhhbmRsZXI7IH0pOwotICAgIGlmICghcmVzcG9uZGVyKSByZXR1cm4gZWxl
bWVudDsKLQotICAgIHZhciBhY3R1YWxFdmVudE5hbWUgPSBfZ2V0RE9NRXZlbnROYW1lKGV2ZW50
TmFtZSk7Ci0KLSAgICBpZiAoZXZlbnROYW1lLmluY2x1ZGUoJzonKSkgewotICAgICAgaWYgKGVs
ZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikKLSAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCJkYXRhYXZhaWxhYmxlIiwgcmVzcG9uZGVyLCBmYWxzZSk7Ci0gICAgICBlbHNlIHsK
LSAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib25kYXRhYXZhaWxhYmxlIiwgcmVzcG9uZGVy
KTsKLSAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib25maWx0ZXJjaGFuZ2UiLCAgcmVzcG9u
ZGVyKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcikKLSAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFjdHVhbEV2
ZW50TmFtZSwgcmVzcG9uZGVyLCBmYWxzZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGVsZW1lbnQu
ZGV0YWNoRXZlbnQoJ29uJyArIGFjdHVhbEV2ZW50TmFtZSwgcmVzcG9uZGVyKTsKLSAgICB9Ci0K
LSAgICByZWdpc3RyeS5zZXQoZXZlbnROYW1lLCByZXNwb25kZXJzLndpdGhvdXQocmVzcG9uZGVy
KSk7Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpcmUoZWxlbWVu
dCwgZXZlbnROYW1lLCBtZW1vLCBidWJibGUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
LQotICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoYnViYmxlKSkKLSAgICAgIGJ1YmJsZSA9IHRy
dWU7Ci0KLSAgICBpZiAoZWxlbWVudCA9PSBkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVu
dCAmJiAhZWxlbWVudC5kaXNwYXRjaEV2ZW50KQotICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDsKLQotICAgIHZhciBldmVudDsKLSAgICBpZiAoZG9jdW1lbnQuY3JlYXRl
RXZlbnQpIHsKLSAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMn
KTsKLSAgICAgIGV2ZW50LmluaXRFdmVudCgnZGF0YWF2YWlsYWJsZScsIHRydWUsIHRydWUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7
Ci0gICAgICBldmVudC5ldmVudFR5cGUgPSBidWJibGUgPyAnb25kYXRhYXZhaWxhYmxlJyA6ICdv
bmZpbHRlcmNoYW5nZSc7Ci0gICAgfQotCi0gICAgZXZlbnQuZXZlbnROYW1lID0gZXZlbnROYW1l
OwotICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsgfTsKLQotICAgIGlmIChkb2N1bWVudC5jcmVh
dGVFdmVudCkKLSAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgZWxzZQot
ICAgICAgZWxlbWVudC5maXJlRXZlbnQoZXZlbnQuZXZlbnRUeXBlLCBldmVudCk7Ci0KLSAgICBy
ZXR1cm4gRXZlbnQuZXh0ZW5kKGV2ZW50KTsKLSAgfQotCi0KLSAgT2JqZWN0LmV4dGVuZChFdmVu
dCwgRXZlbnQuTWV0aG9kcyk7Ci0KLSAgT2JqZWN0LmV4dGVuZChFdmVudCwgewotICAgIGZpcmU6
ICAgICAgICAgIGZpcmUsCi0gICAgb2JzZXJ2ZTogICAgICAgb2JzZXJ2ZSwKLSAgICBzdG9wT2Jz
ZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nCi0gIH0pOwotCi0gIEVsZW1lbnQuYWRkTWV0aG9kcyh7Ci0g
ICAgZmlyZTogICAgICAgICAgZmlyZSwKLQotICAgIG9ic2VydmU6ICAgICAgIG9ic2VydmUsCi0K
LSAgICBzdG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nCi0gIH0pOwotCi0gIE9iamVjdC5leHRl
bmQoZG9jdW1lbnQsIHsKLSAgICBmaXJlOiAgICAgICAgICBmaXJlLm1ldGhvZGl6ZSgpLAotCi0g
ICAgb2JzZXJ2ZTogICAgICAgb2JzZXJ2ZS5tZXRob2RpemUoKSwKLQotICAgIHN0b3BPYnNlcnZp
bmc6IHN0b3BPYnNlcnZpbmcubWV0aG9kaXplKCksCi0KLSAgICBsb2FkZWQ6ICAgICAgICBmYWxz
ZQotICB9KTsKLQotICBpZiAod2luZG93LkV2ZW50KSBPYmplY3QuZXh0ZW5kKHdpbmRvdy5FdmVu
dCwgRXZlbnQpOwotICBlbHNlIHdpbmRvdy5FdmVudCA9IEV2ZW50OwotfSkoKTsKLQotKGZ1bmN0
aW9uKCkgewotICAvKiBTdXBwb3J0IGZvciB0aGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBi
YXNlZCBvbiB3b3JrIGJ5IERhbiBXZWJiLAotICAgICBNYXR0aGlhcyBNaWxsZXIsIERlYW4gRWR3
YXJkcywgSm9obiBSZXNpZywgYW5kIERpZWdvIFBlcmluaS4gKi8KLQotICB2YXIgdGltZXI7Ci0K
LSAgZnVuY3Rpb24gZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpIHsKLSAgICBpZiAoZG9jdW1lbnQu
bG9hZGVkKSByZXR1cm47Ci0gICAgaWYgKHRpbWVyKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVy
KTsKLSAgICBkb2N1bWVudC5sb2FkZWQgPSB0cnVlOwotICAgIGRvY3VtZW50LmZpcmUoJ2RvbTps
b2FkZWQnKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNoZWNrUmVhZHlTdGF0ZSgpIHsKLSAgICBpZiAo
ZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykgewotICAgICAgZG9jdW1lbnQuc3Rv
cE9ic2VydmluZygncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrUmVhZHlTdGF0ZSk7Ci0gICAgICBm
aXJlQ29udGVudExvYWRlZEV2ZW50KCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcG9sbERv
U2Nyb2xsKCkgewotICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgn
bGVmdCcpOyB9Ci0gICAgY2F0Y2goZSkgewotICAgICAgdGltZXIgPSBwb2xsRG9TY3JvbGwuZGVm
ZXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgp
OwotICB9Ci0KLSAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKLSAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZmlyZUNvbnRlbnRMb2FkZWRF
dmVudCwgZmFsc2UpOwotICB9IGVsc2UgewotICAgIGRvY3VtZW50Lm9ic2VydmUoJ3JlYWR5c3Rh
dGVjaGFuZ2UnLCBjaGVja1JlYWR5U3RhdGUpOwotICAgIGlmICh3aW5kb3cgPT0gdG9wKQotICAg
ICAgdGltZXIgPSBwb2xsRG9TY3JvbGwuZGVmZXIoKTsKLSAgfQotCi0gIEV2ZW50Lm9ic2VydmUo
d2luZG93LCAnbG9hZCcsIGZpcmVDb250ZW50TG9hZGVkRXZlbnQpOwotfSkoKTsKLQotRWxlbWVu
dC5hZGRNZXRob2RzKCk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBERVBS
RUNBVEVEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1IYXNoLnRvUXVlcnlT
dHJpbmcgPSBPYmplY3QudG9RdWVyeVN0cmluZzsKLQotdmFyIFRvZ2dsZSA9IHsgZGlzcGxheTog
RWxlbWVudC50b2dnbGUgfTsKLQotRWxlbWVudC5NZXRob2RzLmNoaWxkT2YgPSBFbGVtZW50Lk1l
dGhvZHMuZGVzY2VuZGFudE9mOwotCi12YXIgSW5zZXJ0aW9uID0gewotICBCZWZvcmU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKLSAgICByZXR1cm4gRWxlbWVudC5pbnNlcnQoZWxlbWVu
dCwge2JlZm9yZTpjb250ZW50fSk7Ci0gIH0sCi0KLSAgVG9wOiBmdW5jdGlvbihlbGVtZW50LCBj
b250ZW50KSB7Ci0gICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHt0b3A6Y29udGVu
dH0pOwotICB9LAotCi0gIEJvdHRvbTogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewotICAg
IHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7Ym90dG9tOmNvbnRlbnR9KTsKLSAgfSwK
LQotICBBZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewotICAgIHJldHVybiBFbGVt
ZW50Lmluc2VydChlbGVtZW50LCB7YWZ0ZXI6Y29udGVudH0pOwotICB9Ci19OwotCi12YXIgJGNv
bnRpbnVlID0gbmV3IEVycm9yKCcidGhyb3cgJGNvbnRpbnVlIiBpcyBkZXByZWNhdGVkLCB1c2Ug
InJldHVybiIgaW5zdGVhZCcpOwotCi12YXIgUG9zaXRpb24gPSB7Ci0gIGluY2x1ZGVTY3JvbGxP
ZmZzZXRzOiBmYWxzZSwKLQotICBwcmVwYXJlOiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRlbHRh
WCA9ICB3aW5kb3cucGFnZVhPZmZzZXQKLSAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuc2Nyb2xsTGVmdAotICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHku
c2Nyb2xsTGVmdAotICAgICAgICAgICAgICAgIHx8IDA7Ci0gICAgdGhpcy5kZWx0YVkgPSAgd2lu
ZG93LnBhZ2VZT2Zmc2V0Ci0gICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LnNjcm9sbFRvcAotICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9w
Ci0gICAgICAgICAgICAgICAgfHwgMDsKLSAgfSwKLQotICB3aXRoaW46IGZ1bmN0aW9uKGVsZW1l
bnQsIHgsIHkpIHsKLSAgICBpZiAodGhpcy5pbmNsdWRlU2Nyb2xsT2Zmc2V0cykKLSAgICAgIHJl
dHVybiB0aGlzLndpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwgeSk7Ci0g
ICAgdGhpcy54Y29tcCA9IHg7Ci0gICAgdGhpcy55Y29tcCA9IHk7Ci0gICAgdGhpcy5vZmZzZXQg
PSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gKHkgPj0g
dGhpcy5vZmZzZXRbMV0gJiYKLSAgICAgICAgICAgIHkgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAmJgotICAgICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFswXSAmJgot
ICAgICAgICAgICAgeCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpOwot
ICB9LAotCi0gIHdpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHM6IGZ1bmN0aW9uKGVsZW1lbnQs
IHgsIHkpIHsKLSAgICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVtZW50LmN1bXVsYXRpdmVTY3JvbGxP
ZmZzZXQoZWxlbWVudCk7Ci0KLSAgICB0aGlzLnhjb21wID0geCArIG9mZnNldGNhY2hlWzBdIC0g
dGhpcy5kZWx0YVg7Ci0gICAgdGhpcy55Y29tcCA9IHkgKyBvZmZzZXRjYWNoZVsxXSAtIHRoaXMu
ZGVsdGFZOwotICAgIHRoaXMub2Zmc2V0ID0gRWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KGVsZW1l
bnQpOwotCi0gICAgcmV0dXJuICh0aGlzLnljb21wID49IHRoaXMub2Zmc2V0WzFdICYmCi0gICAg
ICAgICAgICB0aGlzLnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWln
aHQgJiYKLSAgICAgICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZzZXRbMF0gJiYKLSAgICAg
ICAgICAgIHRoaXMueGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRo
KTsKLSAgfSwKLQotICBvdmVybGFwOiBmdW5jdGlvbihtb2RlLCBlbGVtZW50KSB7Ci0gICAgaWYg
KCFtb2RlKSByZXR1cm4gMDsKLSAgICBpZiAobW9kZSA9PSAndmVydGljYWwnKQotICAgICAgcmV0
dXJuICgodGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCkgLSB0aGlzLnljb21w
KSAvCi0gICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwotICAgIGlmIChtb2RlID09ICdob3Jp
em9udGFsJykKLSAgICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRX
aWR0aCkgLSB0aGlzLnhjb21wKSAvCi0gICAgICAgIGVsZW1lbnQub2Zmc2V0V2lkdGg7Ci0gIH0s
Ci0KLQotICBjdW11bGF0aXZlT2Zmc2V0OiBFbGVtZW50Lk1ldGhvZHMuY3VtdWxhdGl2ZU9mZnNl
dCwKLQotICBwb3NpdGlvbmVkT2Zmc2V0OiBFbGVtZW50Lk1ldGhvZHMucG9zaXRpb25lZE9mZnNl
dCwKLQotICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgUG9zaXRpb24ucHJl
cGFyZSgpOwotICAgIHJldHVybiBFbGVtZW50LmFic29sdXRpemUoZWxlbWVudCk7Ci0gIH0sCi0K
LSAgcmVsYXRpdml6ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIFBvc2l0aW9uLnByZXBhcmUo
KTsKLSAgICByZXR1cm4gRWxlbWVudC5yZWxhdGl2aXplKGVsZW1lbnQpOwotICB9LAotCi0gIHJl
YWxPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlU2Nyb2xsT2Zmc2V0LAotCi0gIG9m
ZnNldFBhcmVudDogRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBhcmVudCwKLQotICBwYWdlOiBF
bGVtZW50Lk1ldGhvZHMudmlld3BvcnRPZmZzZXQsCi0KLSAgY2xvbmU6IGZ1bmN0aW9uKHNvdXJj
ZSwgdGFyZ2V0LCBvcHRpb25zKSB7Ci0gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgeyB9OwotICAg
IHJldHVybiBFbGVtZW50LmNsb25lUG9zaXRpb24odGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpOwot
ICB9Ci19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotaWYgKCFkb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rp
b24oaW5zdGFuY2VNZXRob2RzKXsKLSAgZnVuY3Rpb24gaXRlcihuYW1lKSB7Ci0gICAgcmV0dXJu
IG5hbWUuYmxhbmsoKSA/IG51bGwgOiAiW2NvbnRhaW5zKGNvbmNhdCgnICcsIEBjbGFzcywgJyAn
KSwgJyAiICsgbmFtZSArICIgJyldIjsKLSAgfQotCi0gIGluc3RhbmNlTWV0aG9kcy5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lID0gUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5YUGF0aCA/Ci0gIGZ1
bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewotICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50
b1N0cmluZygpLnN0cmlwKCk7Ci0gICAgdmFyIGNvbmQgPSAvXHMvLnRlc3QoY2xhc3NOYW1lKSA/
ICR3KGNsYXNzTmFtZSkubWFwKGl0ZXIpLmpvaW4oJycpIDogaXRlcihjbGFzc05hbWUpOwotICAg
IHJldHVybiBjb25kID8gZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aCgnLi8vKicgKyBjb25k
LCBlbGVtZW50KSA6IFtdOwotICB9IDogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7Ci0g
ICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvU3RyaW5nKCkuc3RyaXAoKTsKLSAgICB2YXIgZWxl
bWVudHMgPSBbXSwgY2xhc3NOYW1lcyA9ICgvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICR3KGNsYXNz
TmFtZSkgOiBudWxsKTsKLSAgICBpZiAoIWNsYXNzTmFtZXMgJiYgIWNsYXNzTmFtZSkgcmV0dXJu
IGVsZW1lbnRzOwotCi0gICAgdmFyIG5vZGVzID0gJChlbGVtZW50KS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpOwotICAgIGNsYXNzTmFtZSA9ICcgJyArIGNsYXNzTmFtZSArICcgJzsKLQotICAg
IGZvciAodmFyIGkgPSAwLCBjaGlsZCwgY247IGNoaWxkID0gbm9kZXNbaV07IGkrKykgewotICAg
ICAgaWYgKGNoaWxkLmNsYXNzTmFtZSAmJiAoY24gPSAnICcgKyBjaGlsZC5jbGFzc05hbWUgKyAn
ICcpICYmIChjbi5pbmNsdWRlKGNsYXNzTmFtZSkgfHwKLSAgICAgICAgICAoY2xhc3NOYW1lcyAm
JiBjbGFzc05hbWVzLmFsbChmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gIW5h
bWUudG9TdHJpbmcoKS5ibGFuaygpICYmIGNuLmluY2x1ZGUoJyAnICsgbmFtZSArICcgJyk7Ci0g
ICAgICAgICAgfSkpKSkKLSAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChjaGls
ZCkpOwotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudHM7Ci0gIH07Ci0KLSAgcmV0dXJuIGZ1bmN0
aW9uKGNsYXNzTmFtZSwgcGFyZW50RWxlbWVudCkgewotICAgIHJldHVybiAkKHBhcmVudEVsZW1l
bnQgfHwgZG9jdW1lbnQuYm9keSkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpOwot
ICB9OwotfShFbGVtZW50Lk1ldGhvZHMpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotRWxl
bWVudC5DbGFzc05hbWVzID0gQ2xhc3MuY3JlYXRlKCk7Ci1FbGVtZW50LkNsYXNzTmFtZXMucHJv
dG90eXBlID0gewotICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdGhpcy5l
bGVtZW50ID0gJChlbGVtZW50KTsKLSAgfSwKLQotICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3Ip
IHsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9ccysvKS5zZWxlY3QoZnVuY3Rp
b24obmFtZSkgewotICAgICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gMDsKLSAgICB9KS5fZWFjaChp
dGVyYXRvcik7Ci0gIH0sCi0KLSAgc2V0OiBmdW5jdGlvbihjbGFzc05hbWUpIHsKLSAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICB9LAotCi0gIGFkZDogZnVuY3Rpb24o
Y2xhc3NOYW1lVG9BZGQpIHsKLSAgICBpZiAodGhpcy5pbmNsdWRlKGNsYXNzTmFtZVRvQWRkKSkg
cmV0dXJuOwotICAgIHRoaXMuc2V0KCRBKHRoaXMpLmNvbmNhdChjbGFzc05hbWVUb0FkZCkuam9p
bignICcpKTsKLSAgfSwKLQotICByZW1vdmU6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvUmVtb3ZlKSB7
Ci0gICAgaWYgKCF0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUpKSByZXR1cm47Ci0gICAg
dGhpcy5zZXQoJEEodGhpcykud2l0aG91dChjbGFzc05hbWVUb1JlbW92ZSkuam9pbignICcpKTsK
LSAgfSwKLQotICB0b1N0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICRBKHRoaXMpLmpv
aW4oJyAnKTsKLSAgfQotfTsKLQotT2JqZWN0LmV4dGVuZChFbGVtZW50LkNsYXNzTmFtZXMucHJv
dG90eXBlLCBFbnVtZXJhYmxlKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkluZGV4OiBCdWdz
U2l0ZS9QcmV0dHlQYXRjaC9QcmV0dHlQYXRjaC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCdWdzU2l0ZS9Q
cmV0dHlQYXRjaC9QcmV0dHlQYXRjaC5yYgkocmV2aXNpb24gNjYzMzEpCisrKyBCdWdzU2l0ZS9Q
cmV0dHlQYXRjaC9QcmV0dHlQYXRjaC5yYgkod29ya2luZyBjb3B5KQpAQCAtMTg3LDkgKzE4Nywx
NSBAQCBoMSA6aG92ZXIgewogfQogCiAvKiBTdXBwb3J0IGZvciBpbmxpbmUgY29tbWVudHMgKi8K
KworLnByZXZpb3VzX2NvbW1lbnQgeworICBib3JkZXI6IGluc2V0IDFweDsKKyAgcGFkZGluZzog
NXB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkOworfQorCiAuY29tbWVudCB7Ci0gIGJvcmRl
cjogMXB4IHdpZHRoIHNvbGlkIHJlZDsKLSAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgcG9z
aXRpb246IHJlbGF0aXZlOwogfQogCiAuY29tbWVudCB0ZXh0YXJlYSB7CkBAIC0xOTcsMTEwICsy
MDMsNzQgQEAgaDEgOmhvdmVyIHsKICAgaGVpZ2h0OiA2ZW07CiB9CiAKLS5zdWJtaXR0ZWQgewot
ICBmb250LXdlaWdodDogYm9sZDsKLSAgY29sb3I6IHJlZDsKKy5jb21tZW50IC5hY3Rpb25zIHsK
KyAgcG9zaXRpb246IGFic29sdXRlOworICByaWdodDogM3B4OworICB0b3A6IDNweDsKKyAgZGlz
cGxheTogbm9uZTsKIH0KLTwvc3R5bGU+Ci08c2NyaXB0IHNyYz0iaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4gCi08c2NyaXB0PgotLy8gQ29kZSB0byBzdXBw
b3J0IGlubGluZSBjb21tZW50cyBpbiBidWdzLndlYmtpdC5vcmcuCi0KLWZ1bmN0aW9uIGdldFN1
Ym1pdFRleHRBcmVhKCkgewotICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIHdoZW4gcnVu
bmluZyBvbiBzYW1lIGRvbWFpbi4KLSAgaWYgKHBhcmVudC5mcmFtZXMubGVuZ3RoID09IDIpIHsK
LSAgICAvLyBXZSdyZSBwcm9iYWJseSBpbiB0aGUgYWN0aW9uPXJldmlldyBwYWdlLgotICAgIHJl
dHVybiBwYXJlbnQuZnJhbWVzWzFdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tZW50Iik7
Ci0gIH0KLSAgLy8gV2UncmUgcHJvYmFibHkgaW4gdGhlIGFjdGlvbj1lZGl0IHBhZ2UuCi0gIHJl
dHVybiBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNtYWxsQ29tbWVudEZyYW1lIik7
Ci19Ci0KLWZ1bmN0aW9uIG9uTGluZUNsaWNrZWQoZSkgewotICAvLyBGaW5kIHRoZSByaWdodCBs
aW5lIGRpdi4KLSAgLy8gRklYTUU6IHdoeSBkb2VzIGEgY2xpY2sgZXZlbnQgb24gbXkgZGl2IGdl
dCBpbnRlcmNlcHRlZAotICAvLyBieSBhIHNwYW4gb3IgZXZlbiBkb2N1bWVudCBlbGVtZW50IDoo
Ci0gIHZhciBsaW5lID0gZS50YXJnZXQ7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgaWYgKGxpbmUg
PT0gZG9jdW1lbnQpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKGxpbmUuZ2V0QXR0cmlidXRlKCJj
bGFzcyIpLnN1YnN0cigwLCA0KSA9PSAiTGluZSIpCi0gICAgICBicmVhazsKLSAgICBsaW5lID0g
bGluZS51cCgpOwotICB9Ci0KLSAgaWYgKGxpbmUuaGFzQ29tbWVudCkKLSAgICByZXR1cm47Ci0g
IGxpbmUuaGFzQ29tbWVudCA9IHRydWU7Ci0KLSAgdmFyIGxpbmVGcm9tID0gbGluZS5zZWxlY3Qo
IltjbGFzcz0nZnJvbSBsaW5lTnVtYmVyJ10iKVswXS5pbm5lckhUTUw7Ci0gIHZhciBsaW5lVG8g
PSBsaW5lLnNlbGVjdCgiW2NsYXNzPSd0byBsaW5lTnVtYmVyJ10iKVswXS5pbm5lckhUTUw7Ci0g
IHZhciBsaW5lVGV4dCA9IGxpbmUuc2VsZWN0KCJbY2xhc3M9J3RleHQnXSIpWzBdLmlubmVySFRN
TDsKLQotICBsaW5lLmluc2VydCh7YWZ0ZXI6Ci0gICAgICAiPGRpdiBjbGFzcz0nY29tbWVudCc+
IiArCi0gICAgICAiPHRleHRhcmVhPjwvdGV4dGFyZWE+IiArCi0gICAgICAiPGJ1dHRvbiBvbmNs
aWNrPSdvbkNvbW1lbnRTdWJtaXQodGhpcy51cCgpKSc+QWRkPC9idXR0b24+IiArCi0gICAgICAi
PGJ1dHRvbiBvbmNsaWNrPSdvbkNvbW1lbnRDYW5jZWwodGhpcy51cCgpKSc+Q2FuY2VsPC9idXR0
b24+IiArCi0gICAgICAiPC9kaXY+In0pOwotCi0gIHZhciBjb21tZW50ID0gbGluZS5uZXh0KCk7
Ci0gIHZhciB0ZXh0YXJlYSA9IGNvbW1lbnQuc2VsZWN0KCJ0ZXh0YXJlYSIpWzBdOwotICB0ZXh0
YXJlYS5mb2N1cygpOwotfQotCi1mdW5jdGlvbiBvbkNvbW1lbnRTdWJtaXQoY29tbWVudCkgewot
ICB2YXIgdGV4dGFyZWEgPSBjb21tZW50LnNlbGVjdCgidGV4dGFyZWEiKVswXTsKLSAgdmFyIGJ1
dHRvbnMgPSBjb21tZW50LnNlbGVjdCgiYnV0dG9uIik7Ci0gIHZhciBjb21tZW50VGV4dCA9IHRl
eHRhcmVhLnZhbHVlOwotCi0gIHZhciBsaW5lID0gY29tbWVudC5wcmV2aW91cygpOwotICBsaW5l
Lmhhc0NvbW1lbnQgPSBmYWxzZQotICB2YXIgbGluZUZyb20gPSBsaW5lLnNlbGVjdCgiW2NsYXNz
PSdmcm9tIGxpbmVOdW1iZXInXSIpWzBdLnRleHRDb250ZW50OwotICB2YXIgbGluZVRvID0gbGlu
ZS5zZWxlY3QoIltjbGFzcz0ndG8gbGluZU51bWJlciddIilbMF0udGV4dENvbnRlbnQ7Ci0gIHZh
ciBsaW5lVGV4dCA9IGxpbmUuc2VsZWN0KCJbY2xhc3M9J3RleHQnXSIpWzBdLnRleHRDb250ZW50
OwotICB2YXIgZmlsZW5hbWUgPSBjb21tZW50LnVwKCkudXAoKS5zZWxlY3QoImgxIilbMF0uZG93
bigpLnRleHRDb250ZW50OwotCi0gIHZhciBzbmlwcGV0ID0gZmlsZW5hbWUgKyAiOiIgKyBsaW5l
VG8gKyAiXFxuICsgICIgKyBsaW5lVGV4dCArICJcXG4iICsgY29tbWVudFRleHQgKyAiXFxuXFxu
IjsKLQotICAvLyBSZW1vdmUgYWxsIHRoZSBjcmFwLgotICB0ZXh0YXJlYS5yZW1vdmUoKTsKLSAg
YnV0dG9uc1swXS5yZW1vdmUoKTsKLSAgYnV0dG9uc1sxXS5yZW1vdmUoKTsKLQotICAvLyBJbnNl
cnQgYSBub24tZWRpdGFibGUgZm9ybSBvZiBvdXIgY29tbWVudC4KLSAgY29tbWVudC5pbnNlcnQo
IjxwcmU+IiArIGNvbW1lbnRUZXh0ICsgIjwvcHJlPiIpOwotICBjb21tZW50LnNldEF0dHJpYnV0
ZSgiY2xhc3MiLCAiY29tbWVudCBzdWJtaXR0ZWQiKTsKLQotICAvLyBVcGRhdGUgdGhlIHN1Ym1p
c3Npb24gdGV4dCBhcmVhLgotICB2YXIgc3VibWlzc2lvbiA9IGdldFN1Ym1pdFRleHRBcmVhKCk7
Ci0gIHN1Ym1pc3Npb24udmFsdWUgPSBzdWJtaXNzaW9uLnZhbHVlICsgc25pcHBldDsKLX0KLQot
ZnVuY3Rpb24gb25Db21tZW50Q2FuY2VsKGNvbW1lbnQpIHsKLSAgdmFyIGxpbmUgPSBjb21tZW50
LnByZXZpb3VzKCk7Ci0gIGxpbmUuaGFzQ29tbWVudCA9IGZhbHNlCi0gIGNvbW1lbnQucmVtb3Zl
KCk7Ci19Ci0KLWZ1bmN0aW9uIG9uQ2xlYXJTdWJtaXRBcmVhKCkgewotICB2YXIgc3VibWlzc2lv
biA9IGdldFN1Ym1pdFRleHRBcmVhKCk7Ci0gIHN1Ym1pc3Npb24udmFsdWUgPSAiIjsKLX0KLQot
aWYgKHRvcCAhPT0gd2luZG93KSB7Ci0gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
ZnVuY3Rpb24gKCkgewotICAgIHZhciBsaW5lcyA9ICQkKCJkaXZbY2xhc3N+PSdMaW5lJ10iKTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBsaW5l
c1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIG9uTGluZUNsaWNrZWQsIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICAkJCgiaDEiKVswXS5pbnNlcnQoIjxidXR0b24gc3R5bGU9J2Zsb2F0OnJpZ2h0
OycgIisKLSAgICAgICJvbmNsaWNrPSdvbkNsZWFyU3VibWl0QXJlYSgpJz4iICsKLSAgICAgICJD
bGVhciBNYWluIENvbW1lbnQgQm94PC9idXR0b24+Iik7Ci0gIH0sIGZhbHNlKTsKKworLmhvdCAu
YWN0aW9ucyB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisucmVwbHkgeworICBmb250LWZhbWls
eTogc2Fucy1zZXJpZjsKKyAgZmxvYXQ6IHJpZ2h0OworICBjb2xvcjogIzk5OTsKKyAgZGlzcGxh
eTogbm9uZTsKK30KKworLmhvdCAucmVwbHkgeworICBkaXNwbGF5OiBibG9jazsKIH0KLTwvc2Ny
aXB0PgorCitib2R5IHsKKyAgbWFyZ2luLWJvdHRvbTogNDBweDsKK30KKworI3Rvb2xiYXIgewor
ICBwb3NpdGlvbjogZml4ZWQ7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICBwYWRkaW5nOiA1cHg7
CisgIGJvdHRvbTogMDsKKyAgbGVmdDogMDsKKyAgcmlnaHQ6IDA7CisgIGJvcmRlci10b3A6IDFw
eCBzb2xpZCAjZGRkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisud2ludGVyIHsK
KyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiA1OworICBsZWZ0OiAwOworICByaWdodDog
MDsKKyAgdG9wOiAwOworICBib3R0b206IDA7CisgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwor
ICBvcGFjaXR5OiAwLjg7Cit9CisKKy5pbmFjdGl2ZSB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisK
Ky5saWdodGJveCB7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgei1pbmRleDogNjsKKyAgbGVmdDog
MTAlOworICByaWdodDogMTAlOworICB0b3A6IDEwJTsKKyAgYm90dG9tOiAxMCU7Cit9CisKKy5s
aWdodGJveCBpZnJhbWUgeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworfQorPC9z
dHlsZT4KKzxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJz
L2pxdWVyeS8xLjQuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4gCis8c2NyaXB0IHNyYz0iY29k
ZS1yZXZpZXcuanMiPjwvc2NyaXB0PiAKIEVPRgogCiAgICAgZGVmIHNlbGYucmV2aXNpb25PckRl
c2NyaXB0aW9uKHN0cmluZykK
</data>
<flag name="review"
          id="54731"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>