<?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>111191</bug_id>
          
          <creation_ts>2013-03-01 09:49:05 -0800</creation_ts>
          <short_desc>Web Inspector: add Ace editor experiment</short_desc>
          <delta_ts>2013-03-15 05:52:14 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>fabian.jakobs</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>845249</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-01 09:49:05 -0800</bug_when>
    <thetext>Add ace editor experiment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845260</commentid>
    <comment_count>1</comment_count>
      <attachid>190981</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-01 10:00:32 -0800</bug_when>
    <thetext>Created attachment 190981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845264</commentid>
    <comment_count>2</comment_count>
      <attachid>190982</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-01 10:04:03 -0800</bug_when>
    <thetext>Created attachment 190982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845272</commentid>
    <comment_count>3</comment_count>
      <attachid>190982</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-03-01 10:12:26 -0800</bug_when>
    <thetext>Comment on attachment 190982
Patch

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

Could you share the stats on how much bigger the front-end footprint will be? In absolute numbers as well as percentage. Raw, minified and zipped (chromium resources are zipped).

&gt; Source/WebCore/inspector/front-end/AceTextEditor.js:48
&gt; +    this.element.style.height = &quot;100%&quot;;

Please use CSS for styling.

&gt; Source/WebCore/inspector/front-end/AceTextEditor.js:84
&gt; +            case &quot;text/html&quot;: this._aceEditor.getSession().setMode(&quot;ace/mode/html&quot;); break;

Do not indent case from switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845291</commentid>
    <comment_count>4</comment_count>
      <attachid>190985</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-01 10:39:10 -0800</bug_when>
    <thetext>Created attachment 190985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846221</commentid>
    <comment_count>5</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-04 01:25:43 -0800</bug_when>
    <thetext>Some stats on Ace disk usage:
1. Raw folder size of Ace files in this patch is 664Kb
2. If I were to put minified version of ace files, it would be 376Kb

I estimated gzip size of devtools_resources.pak file. 
Without this patch: 824Kb
With this patch: 956Kb
So it brings in 132Kb of overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846224</commentid>
    <comment_count>6</comment_count>
      <attachid>191174</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-04 01:29:56 -0800</bug_when>
    <thetext>Created attachment 191174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846229</commentid>
    <comment_count>7</comment_count>
      <attachid>191174</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-03-04 01:37:27 -0800</bug_when>
    <thetext>Comment on attachment 191174
Patch

Please make sure you include original BSD LICENSE file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846233</commentid>
    <comment_count>8</comment_count>
      <attachid>191176</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-04 01:48:54 -0800</bug_when>
    <thetext>Created attachment 191176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846314</commentid>
    <comment_count>9</comment_count>
      <attachid>191176</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 03:47:51 -0800</bug_when>
    <thetext>Comment on attachment 191176
Patch

Clearing flags on attachment: 191176

Committed r144615: &lt;http://trac.webkit.org/changeset/144615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846315</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 03:47:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855062</commentid>
    <comment_count>11</comment_count>
    <who name="Fabian Jakobs">fabian.jakobs</who>
    <bug_when>2013-03-14 01:59:29 -0700</bug_when>
    <thetext>Hi, I&apos;m the author of ace and very excited to see it landing in Chrome. I have noticed a few glitches with this patch:

- the breakpoint context menu does not work
- I don&apos;t get syntax highlighting for css files

If you prefer I can create separate issues for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855920</commentid>
    <comment_count>12</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-15 05:52:14 -0700</bug_when>
    <thetext>Hi Fabian,

First of all, thank you for your great project!

We are aware of the bugs you&apos;ve mentioned. We&apos;ve added Ace editor as an experiment and it&apos;s not fully embedded into the devtools (that&apos;s the reason for the glitches you&apos;ve mentioned). There&apos;s no decision yet if we would invest efforts in its adoption and use it as our primary code editor.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190981</attachid>
            <date>2013-03-01 10:00:32 -0800</date>
            <delta_ts>2013-03-01 10:03:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111191-20130301215641.patch</filename>
            <type>text/plain</type>
            <size>701095</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODg0MjQ4NjUzZmZjMmEw
ZGZjMTRhZTljNWZhOTM3ZDZjMDNmOTJhYy4uZDFlZjMwY2I3OTcxOWJhZjE1NDFkNzg3ZmU1YWQ5
N2Y0YmMyMTA3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc3IEBACiAyMDEzLTAzLTAxICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhZGQgQWNlIGVkaXRvciBleHBlcmltZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkIEFj
ZSB0ZXh0IGVkaXRvciBleHBlcmltZW50LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qczogQWRkZWQuCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QWNlVGV4dEVkaXRvci5wcm90b3R5cGUuX29uVGV4dENoYW5nZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuX2d1dHRlckNsaWNrKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgbWltZVR5cGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLnNldFJlYWRPbmx5KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3RvdHlwZS5yZWFkT25seSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuZm9jdXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmRlZmF1bHRGb2N1c2Vk
RWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUu
aGlnaGxpZ2h0UmVnZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJv
dG90eXBlLmhpZ2hsaWdodFJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRp
dG9yLnByb3RvdHlwZS5yZW1vdmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFj
ZVRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLnNldEV4ZWN1dGlvbkxpbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmNvcHlSYW5n
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuY2xlYXJF
eGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3Rv
dHlwZS5hZGREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9y
LnByb3RvdHlwZS5yZW1vdmVEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VU
ZXh0RWRpdG9yLnByb3RvdHlwZS5tYXJrQW5kUmV2ZWFsUmFuZ2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdodExpbmUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmNsZWFyTGluZUhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuZWxlbWVudHNU
b1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRl
eHRFZGl0b3IucHJvdG90eXBlLmluaGVyaXRTY3JvbGxQb3NpdGlvbnMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmJlZ2luVXBkYXRlcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuZW5kVXBkYXRlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUub25SZXNpemUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmVkaXRSYW5nZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUuc2Nyb2xsVG9MaW5l
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3RvdHlwZS5zZWxlY3Rp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmxhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBl
LnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90
b3R5cGUuc2V0VGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90
b3R5cGUudGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5
cGUucmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBl
LmxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlLmdl
dCBsaW5lc0NvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3Rv
dHlwZS5zZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3Iu
cHJvdG90eXBlLmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWNlVGV4dEVk
aXRvci5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5B
Y2VUZXh0RWRpdG9yLnByb3RvdHlwZS53YXNTaG93bik6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHBlcmltZW50c1Nl
dHRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL2FjZS9hY2UuanM6IEFkZGVkLgorICAgICAgICAoLik6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2dG9vbHMuY3NzOiBBZGRlZC4KKyAgICAgICAgKC5h
Y2VfZWRpdG9yICopOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfY3Nz
LmpzOiBBZGRlZC4KKyAgICAgICAgKC4pOgorICAgICAgICAoLkZvbGRNb2RlLmV4cG9ydHMuRm9s
ZE1vZGUpOgorICAgICAgICAoLnZhcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9h
Y2UvbW9kZV9odG1sLmpzOiBBZGRlZC4KKyAgICAgICAgKC4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNjcmlwdC5qczogQWRkZWQuCisgICAgICAgICguKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qczogQWRk
ZWQuCisKKzIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0u
b3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJt
aW5lIGlmIGluc3BlY3RvcidzIHNvdXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IGYxNDJhOGNhMzgxYzk1MTdkYjg3N2FiNWZjNGJhOTZjZTVk
OTMwZTkuLmQyNjBkNWJlNzU2MGNiMjJkZDkzZmUwYzdkZTU3NDk1ODc4YzM5ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMTMtMDMtMDEgIEFuZHJleSBM
dXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFkZCBBY2UgZWRpdG9yIGV4cGVyaW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0YXJnZXQgdG8gY29uY2F0ZW5hdGUganMgZmlsZXMg
Zm9yIEFjZSBUZXh0IEVkaXRvci4KKworICAgICAgICAqIFdlYktpdC5neXA6CisKKzIwMTMtMDMt
MDEgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIGluc3BlY3Rv
cidzIHNvdXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjVm
Zjk5MGY2YWM1M2Y1NTI1MmFiZWYwYjg4YmZkNDJiNzUxMzFmYS4uNDJiOGY4NWUwNDI3ODBjYzVj
OTM1MDhiMmI4ZDJlN2FhZGI5MTI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTM1Miw2ICs1MzUy
LDExIEBACiAgICAgICAgICAgICAnPEAod2ViaW5zcGVjdG9yX3N0YW5kYWxvbmVfZmlsZXMpJywK
ICAgICAgICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9zdGFuZGFsb25lX2ZpbGVzJzogWwor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcycsCisg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMnLAorICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcycsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hdWRpdHNQYW5lbC5jc3MnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL2J1aWxkU3lzdGVtT25seS5qcycsCkBAIC01NDg0LDYgKzU0ODks
MTEgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qcycsCiAgICAg
ICAgIF0sCiAKKyAgICAgICAgJ3dlYmluc3BlY3Rvcl9hY2VfZWRpdG9yX2pzX2ZpbGVzJzogWwor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcycsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzJywKKyAgICAgICAgXSwKKwog
ICAgICAgICAnd2ViaW5zcGVjdG9yX21vZHVsZXNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAn
PEAod2ViaW5zcGVjdG9yX2VsZW1lbnRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAod2Vi
aW5zcGVjdG9yX3Jlc291cmNlc19qc19maWxlcyknLApAQCAtNTQ5Myw2ICs1NTAzLDcgQEAKICAg
ICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3JfcHJvZmlsZXNfanNfZmlsZXMpJywKICAgICAgICAg
ICAgICc8QCh3ZWJpbnNwZWN0b3JfYXVkaXRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAo
d2ViaW5zcGVjdG9yX2NvZGVtaXJyb3JfanNfZmlsZXMpJywKKyAgICAgICAgICAgICc8QCh3ZWJp
bnNwZWN0b3JfYWNlX2VkaXRvcl9qc19maWxlcyknLAogICAgICAgICBdLAogICAgICAgICAnd2Vi
aW5zcGVjdG9yX3VnbGlmeWpzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvVWdsaWZ5SlMvcGFyc2UtanMuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNjY2MjIxMmM0
YzFjOWYzODE0MjY3ZWE2NDJiNzQ1Nzk0Y2FkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMKQEAgLTAsMCArMSwz
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworaW1wb3J0U2NyaXB0KCJhY2UvYWNlLmpzIik7CisKKworLyoqCisgKiBAY29uc3RydWN0b3IK
KyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvcn0KKyAqIEBwYXJhbSB7P3N0cmluZ30gdXJsCisgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yRGVsZWdhdGV9IGRlbGVnYXRlCisgKi8KKworV2ViSW5zcGVj
dG9yLkFjZVRleHRFZGl0b3IgPSBmdW5jdGlvbih1cmwsIGRlbGVnYXRlKQoreworICAgIFdlYklu
c3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
KyAgICB0aGlzLl91cmwgPSB1cmw7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICIx
MDAlIjsKKworICAgIHZhciBwcmVmaXggPSB3aW5kb3cuZmxhdHRlbkltcG9ydHMgPyAiIiA6ICJh
Y2UvIjsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgiYWNlL21vZGUvamF2YXNjcmlwdCIs
IHByZWZpeCArICJtb2RlX2phdmFzY3JpcHQuanMiKTsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVs
ZVVybCgiYWNlL21vZGUvamF2YXNjcmlwdCIsIHByZWZpeCArICJtb2RlX2Nzcy5qcyIpOworICAg
IGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4ICsg
Im1vZGVfaHRtbC5qcyIpOworICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvdGhlbWUv
dGV4dG1hdGUiLCBwcmVmaXggKyAidGhlbWVfdGV4dG1hdGUuanMiKTsKKyAgICB0aGlzLl9hY2VF
ZGl0b3IgPSB3aW5kb3cuYWNlLmVkaXQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuX2FjZUVk
aXRvci5zZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOworICAgIHRoaXMuX2FjZUVkaXRvci5vbigi
Z3V0dGVyY2xpY2siLCB0aGlzLl9ndXR0ZXJDbGljay5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9h
Y2VFZGl0b3Iub24oImNoYW5nZSIsIHRoaXMuX29uVGV4dENoYW5nZS5iaW5kKHRoaXMpKTsKKyAg
ICB0aGlzLl9hY2VFZGl0b3Iuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7CisgICAgdGhp
cy5fYWNlRWRpdG9yLnNlc3Npb24uc2V0VXNlV29ya2VyKGZhbHNlKTsKKyAgICB0aGlzLnJlZ2lz
dGVyUmVxdWlyZWRDU1MoImFjZS9hY2VkZXZ0b29scy5jc3MiKTsKK30KKworV2ViSW5zcGVjdG9y
LkFjZVRleHRFZGl0b3IucHJvdG90eXBlID0geworCisgICAgX29uVGV4dENoYW5nZTogZnVuY3Rp
b24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2VkKG51
bGwsIG51bGwpOworICAgIH0sCisKKyAgICBfZ3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChldmVudC5kb21FdmVudC50
YXJnZXQudGV4dENvbnRlbnQpIC0gMTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNrLCB7IGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsIGV2ZW50OiBldmVudC5kb21FdmVudCB9KTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCisgICAgICovCisgICAgc2V0
IG1pbWVUeXBlKG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoKG1pbWVUeXBlKSB7Cisg
ICAgICAgICAgICBjYXNlICJ0ZXh0L2h0bWwiOiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigp
LnNldE1vZGUoImFjZS9tb2RlL2h0bWwiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJ0ZXh0
L2NzcyI6IHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvY3Nz
Iik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAidGV4dC9qYXZhc2NyaXB0IjogdGhpcy5fYWNl
RWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCJhY2UvbW9kZS9qYXZhc2NyaXB0Iik7IGJyZWFr
OworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
cmVhZE9ubHkKKyAgICAgKi8KKyAgICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCisg
ICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHJl
YWRPbmx5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYWNlRWRpdG9y
LmdldFJlYWRPbmx5KCk7CisgICAgfSwKKworICAgIGZvY3VzOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZm9jdXMoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7RWxlbWVudH0KKyAgICAgKi8KKyAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZmlyc3RDaGls
ZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2V4CisgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0KKyAgICAgKi8KKyAgICBo
aWdobGlnaHRSZWdleDogZnVuY3Rpb24ocmVnZXgsIGNzc0NsYXNzKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRSZWdleCBub3QgaW1wbGVtZW50ZWQiKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
fSByYW5nZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcworICAgICAqLworICAgIGhp
Z2hsaWdodFJhbmdlOiBmdW5jdGlvbihyYW5nZSwgY3NzQ2xhc3MpCisgICAgeworICAgICAgICBj
b25zb2xlLmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodFJhbmdlIG5vdCBpbXBsZW1lbnRlZCIpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLkhpZ2hsaWdodERlc2NyaXB0b3J9IGhpZ2hsaWdodERlc2NyaXB0b3IKKyAgICAg
Ki8KKyAgICByZW1vdmVIaWdobGlnaHQ6IGZ1bmN0aW9uKGhpZ2hsaWdodERlc2NyaXB0b3IpCisg
ICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnJlbW92ZUhpZ2hsaWdodCBub3Qg
aW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
KSB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5zY3JvbGxUb0xpbmUobGluZU51bWJlciwgZmFs
c2UsIHRydWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGNvbmRpdGlvbmFsCisgICAgICovCisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rp
b24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQorICAgIHsKKyAgICAgICAgdGhp
cy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsICJ3ZWJr
aXQtYnJlYWtwb2ludCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgorICAgICAqLworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmNs
ZWFyQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzZXRFeGVjdXRpb25MaW5lOiBm
dW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRv
ci5zZXRFeGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICogQHJl
dHVybiB7c3RyaW5nfQorICAgICAqLworICAgIGNvcHlSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisg
ICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNvcHlSYW5nZSBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0sCisKKyAgICBjbGVhckV4ZWN1dGlv
bkxpbmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iu
Y2xlYXJFeGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7RWxlbWVu
dH0gZWxlbWVudAorICAgICAqLworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGVsZW1lbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmFkZERl
Y29yYXRpb24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50
CisgICAgICovCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxl
bWVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmVtb3ZlRGVjb3Jh
dGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqLworICAgIG1hcmtBbmRSZXZl
YWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNl
RWRpdG9yLm1hcmtBbmRSZXZlYWxSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBo
aWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRMaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0s
CisKKyAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLmNsZWFyTGluZUhpZ2hsaWdodCBub3QgaW1wbGVtZW50ZWQiKTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQorICAgICAq
LworICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gW107CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3J9IHRleHRFZGl0b3IKKyAgICAgKi8KKyAgICBpbmhl
cml0U2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5sb2coImFjZUVkaXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zIG5vdCBpbXBsZW1l
bnRlZCIpOworICAgIH0sCisKKyAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkgeyB9LAorCisg
ICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKSB7IH0sCisKKyAgICBvblJlc2l6ZTogZnVuY3Rpb24o
KSB7IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9
IHJhbmdlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlfQorICAgICAqLworICAgIGVkaXRSYW5nZTogZnVuY3Rpb24ocmFu
Z2UsIHRleHQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmVkaXRSYW5n
ZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzY3JvbGxUb0xpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2Nyb2xsVG9MaW5lKGxp
bmVOdW1iZXIsIGZhbHNlLCB0cnVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KKyAgICAgKi8KKyAgICBzZWxlY3Rpb246IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iuc2VsZWN0aW9uIG5v
dCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlP30KKyAgICAgKi8KKyAgICBsYXN0U2VsZWN0aW9uOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmxhc3RTZWxlY3Rpb24g
bm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlRleHRSYW5nZX0gdGV4dFJhbmdlCisgICAgICovCisgICAgc2V0U2VsZWN0aW9u
OiBmdW5jdGlvbih0ZXh0UmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLnNldFNlbGVjdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKi8KKyAgICBzZXRUZXh0OiBmdW5jdGlv
bih0ZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRW
YWx1ZSh0ZXh0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQor
ICAgICAqLworICAgIHRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAgICovCisgICAgcmFu
Z2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmFu
Z2Ugbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAg
IGxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
YWNlRWRpdG9yLmdldFNlc3Npb24oKS5nZXRMaW5lKGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgZ2V0IGxpbmVzQ291
bnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExl
bmd0aCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHBhcmFtIHtPYmplY3Q/fSB2YWx1
ZQorICAgICAqLworICAgIHNldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSwgdmFsdWUp
CisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnNldEF0dHJpYnV0ZSBub3Qg
aW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEByZXR1cm4ge09iamVj
dHxudWxsfSB2YWx1ZQorICAgICAqLworICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwg
bmFtZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuZ2V0QXR0cmlidXRl
IG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICovCisgICAgcmVt
b3ZlQXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5sb2coImFjZUVkaXRvci5yZW1vdmVBdHRyaWJ1dGUgbm90IGltcGxlbWVudGVkIik7CisgICAg
fSwKKworICAgIHdhc1Nob3duOiBmdW5jdGlvbigpIHsgfSwKKworICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBhZDY5ODVkYTMyNmViMTcwNTEyZTgxM2Q3NDY4
ZTA3NWNhNGJlNjRlLi5jNjk0Yjg5ODgyMzk3OGYwZTdlYWY4NjI3YzBhOGEyMjQ0ZmQ2ZGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAg
LTIxMCw2ICsyMTAsNyBAQCBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0aW5ncyA9IGZ1bmN0
aW9uKCkKICAgICB0aGlzLmNhbnZhc0luc3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50
KCJjYW52YXNJbnNwZWN0aW9uICIsICJDYW52YXMgaW5zcGVjdGlvbiIpOwogICAgIHRoaXMuc2Fz
cyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoInNhc3MiLCAiU3VwcG9ydCBmb3IgU2FzcyIpOwog
ICAgIHRoaXMuY29kZW1pcnJvciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNvZGVtaXJyb3Ii
LCAiVXNlIENvZGVNaXJyb3IgZWRpdG9yIik7CisgICAgdGhpcy5hY2VUZXh0RWRpdG9yID0gdGhp
cy5fY3JlYXRlRXhwZXJpbWVudCgiYWNlVGV4dEVkaXRvciIsICJVc2UgQWNlIGVkaXRvciIpOwog
ICAgIHRoaXMuY3NzUmVnaW9ucyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNzc1JlZ2lvbnMi
LCAiQ1NTIFJlZ2lvbnMgU3VwcG9ydCIpOwogICAgIHRoaXMuc2hvd092ZXJyaWRlc0luRHJhd2Vy
ID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgic2hvd092ZXJyaWRlc0luRHJhd2VyIiwgIlNob3cg
T3ZlcnJpZGVzIGluIGRyYXdlciIpOwogICAgIHRoaXMuZmlsZVN5c3RlbVByb2plY3QgPSB0aGlz
Ll9jcmVhdGVFeHBlcmltZW50KCJmaWxlU3lzdGVtUHJvamVjdCIsICJGaWxlIHN5c3RlbSBmb2xk
ZXJzIGluIFNvdXJjZXMgUGFuZWwiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IGRkMDI5MDIxNWQ2YzI0MjZhZWJjZDMyZDkx
NWJhOWJiNGMyZDc1M2IuLjdjYTY2ZDQ2OGYzYTQ1Mzc0NjAxZTdjNmVhYzQ3MjU3YjhmOThmYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJh
bWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFt
ZS5qcwpAQCAtNDYsNiArNDYsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlv
bihjb250ZW50UHJvdmlkZXIpCiAgICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRp
bmdzLmNvZGVtaXJyb3IuaXNFbmFibGVkKCkpIHsKICAgICAgICAgbG9hZFNjcmlwdCgiQ29kZU1p
cnJvclRleHRFZGl0b3IuanMiKTsKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdh
dGUpOworICAgIH0gZWxzZSBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MuYWNl
VGV4dEVkaXRvci5pc0VuYWJsZWQoKSkgeworICAgICAgICBsb2FkU2NyaXB0KCJBY2VUZXh0RWRp
dG9yLmpzIik7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkFj
ZVRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdhdGUpOwogICAgIH0gZWxzZQog
ICAgICAgICB0aGlzLl90ZXh0RWRpdG9yID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVk
aXRvcih0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWQxYjAwMzlmMzIx
M2RmNWViMTYwNjQ0YzBlNjRiOGE4NzBmMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzCkBAIC0wLDAgKzEsMTQ0NjggQEAK
Ky8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIu
Vi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCiso
ZnVuY3Rpb24oKSB7CisKK3ZhciBBQ0VfTkFNRVNQQUNFID0gImFjZSI7CisKK3ZhciBnbG9iYWwg
PSAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXM7Cit9KSgpOworCisKK2lmICghQUNFX05B
TUVTUEFDRSAmJiB0eXBlb2YgcmVxdWlyZWpzICE9PSAidW5kZWZpbmVkIikKKyAgICByZXR1cm47
CisKKwordmFyIF9kZWZpbmUgPSBmdW5jdGlvbihtb2R1bGUsIGRlcHMsIHBheWxvYWQpIHsKKyAg
ICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgaWYgKF9kZWZpbmUu
b3JpZ2luYWwpCisgICAgICAgICAgICBfZGVmaW5lLm9yaWdpbmFsLmFwcGx5KHdpbmRvdywgYXJn
dW1lbnRzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdkcm9w
cGluZyBtb2R1bGUgYmVjYXVzZSBkZWZpbmUgd2FzblwndCBhIHN0cmluZy4nKTsKKyAgICAgICAg
ICAgIGNvbnNvbGUudHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikKKyAgICAgICAgcGF5bG9hZCA9IGRlcHM7
CisKKyAgICBpZiAoIV9kZWZpbmUubW9kdWxlcykKKyAgICAgICAgX2RlZmluZS5tb2R1bGVzID0g
e307CisKKyAgICBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlXSA9IHBheWxvYWQ7Cit9OwordmFyIF9y
ZXF1aXJlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZSwgY2FsbGJhY2spIHsKKyAgICBpZiAo
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vZHVsZSkgPT09ICJbb2JqZWN0IEFycmF5
XSIpIHsKKyAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IG1vZHVsZS5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkZXAgPSBs
b29rdXAocGFyZW50SWQsIG1vZHVsZVtpXSk7CisgICAgICAgICAgICBpZiAoIWRlcCAmJiBfcmVx
dWlyZS5vcmlnaW5hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUub3JpZ2luYWwu
YXBwbHkod2luZG93LCBhcmd1bWVudHMpOworICAgICAgICAgICAgcGFyYW1zLnB1c2goZGVwKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
LmFwcGx5KG51bGwsIHBhcmFtcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlw
ZW9mIG1vZHVsZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIHBheWxvYWQgPSBsb29rdXAo
cGFyZW50SWQsIG1vZHVsZSk7CisgICAgICAgIGlmICghcGF5bG9hZCAmJiBfcmVxdWlyZS5vcmln
aW5hbCkKKyAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3cs
IGFyZ3VtZW50cyk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBheWxvYWQ7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICBpZiAoX3JlcXVpcmUub3JpZ2luYWwpCisgICAgICAgICAgICByZXR1
cm4gX3JlcXVpcmUub3JpZ2luYWwuYXBwbHkod2luZG93LCBhcmd1bWVudHMpOworICAgIH0KK307
CisKK3ZhciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkg
eworICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKKyAgICAgICAgdmFy
IGNodW5rcyA9IG1vZHVsZU5hbWUuc3BsaXQoIiEiKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzBdKSArICIhIiArIG5vcm1hbGl6ZU1vZHVsZShwYXJl
bnRJZCwgY2h1bmtzWzFdKTsKKyAgICB9CisgICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09
ICIuIikgeworICAgICAgICB2YXIgYmFzZSA9IHBhcmVudElkLnNwbGl0KCIvIikuc2xpY2UoMCwg
LTEpLmpvaW4oIi8iKTsKKyAgICAgICAgbW9kdWxlTmFtZSA9IGJhc2UgKyAiLyIgKyBtb2R1bGVO
YW1lOworCisgICAgICAgIHdoaWxlKG1vZHVsZU5hbWUuaW5kZXhPZigiLiIpICE9PSAtMSAmJiBw
cmV2aW91cyAhPSBtb2R1bGVOYW1lKSB7CisgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1
bGVOYW1lOworICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXC9c
LlwvLywgIi8iKS5yZXBsYWNlKC9bXlwvXStcL1wuXC5cLy8sICIiKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBtb2R1bGVOYW1lOworfTsKK3ZhciBsb29rdXAgPSBmdW5jdGlvbihw
YXJlbnRJZCwgbW9kdWxlTmFtZSkgeworCisgICAgbW9kdWxlTmFtZSA9IG5vcm1hbGl6ZU1vZHVs
ZShwYXJlbnRJZCwgbW9kdWxlTmFtZSk7CisKKyAgICB2YXIgbW9kdWxlID0gX2RlZmluZS5tb2R1
bGVzW21vZHVsZU5hbWVdOworICAgIGlmICghbW9kdWxlKSB7CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH0KKworICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgIHZhciBleHBvcnRzID0ge307CisgICAgICAgIHZhciBtb2QgPSB7CisgICAgICAgICAgICBp
ZDogbW9kdWxlTmFtZSwKKyAgICAgICAgICAgIHVyaTogJycsCisgICAgICAgICAgICBleHBvcnRz
OiBleHBvcnRzLAorICAgICAgICAgICAgcGFja2FnZWQ6IHRydWUKKyAgICAgICAgfTsKKworICAg
ICAgICB2YXIgcmVxID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykgeworICAgICAgICAgICAg
cmV0dXJuIF9yZXF1aXJlKG1vZHVsZU5hbWUsIG1vZHVsZSwgY2FsbGJhY2spOworICAgICAgICB9
OworCisgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG1vZHVsZShyZXEsIGV4cG9ydHMsIG1vZCk7
CisgICAgICAgIGV4cG9ydHMgPSByZXR1cm5WYWx1ZSB8fCBtb2QuZXhwb3J0czsKKyAgICAgICAg
X2RlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdID0gZXhwb3J0czsKKyAgICAgICAgcmV0dXJuIGV4
cG9ydHM7CisgICAgfQorCisgICAgcmV0dXJuIG1vZHVsZTsKK307CisKK2Z1bmN0aW9uIGV4cG9y
dEFjZShucykgeworICAgIHZhciByZXF1aXJlID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykg
eworICAgICAgICByZXR1cm4gX3JlcXVpcmUoIiIsIG1vZHVsZSwgY2FsbGJhY2spOworICAgIH07
ICAgIAorCisgICAgdmFyIHJvb3QgPSBnbG9iYWw7CisgICAgaWYgKG5zKSB7CisgICAgICAgIGlm
ICghZ2xvYmFsW25zXSkKKyAgICAgICAgICAgIGdsb2JhbFtuc10gPSB7fTsKKyAgICAgICAgcm9v
dCA9IGdsb2JhbFtuc107CisgICAgfQorCisgICAgaWYgKCFyb290LmRlZmluZSB8fCAhcm9vdC5k
ZWZpbmUucGFja2FnZWQpIHsKKyAgICAgICAgX2RlZmluZS5vcmlnaW5hbCA9IHJvb3QuZGVmaW5l
OworICAgICAgICByb290LmRlZmluZSA9IF9kZWZpbmU7CisgICAgICAgIHJvb3QuZGVmaW5lLnBh
Y2thZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJvb3QucmVxdWlyZSB8fCAhcm9vdC5y
ZXF1aXJlLnBhY2thZ2VkKSB7CisgICAgICAgIF9yZXF1aXJlLm9yaWdpbmFsID0gcm9vdC5yZXF1
aXJlOworICAgICAgICByb290LnJlcXVpcmUgPSByZXF1aXJlOworICAgICAgICByb290LnJlcXVp
cmUucGFja2FnZWQgPSB0cnVlOworICAgIH0KK30KKworZXhwb3J0QWNlKEFDRV9OQU1FU1BBQ0Up
OworCit9KSgpOworCithY2UuZGVmaW5lKCdhY2UvYWNlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL2ZpeG9sZGJyb3dzZXJzJywgJ2FjZS9saWIvZG9tJywgJ2Fj
ZS9saWIvZXZlbnQnLCAnYWNlL2VkaXRvcicsICdhY2UvZWRpdF9zZXNzaW9uJywgJ2FjZS91bmRv
bWFuYWdlcicsICdhY2UvdmlydHVhbF9yZW5kZXJlcicsICdhY2UvbXVsdGlfc2VsZWN0JywgJ2Fj
ZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJywgJ2Fj
ZS9wbGFjZWhvbGRlcicsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvY29uZmln
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3JlcXVpcmUoIi4v
bGliL2ZpeG9sZGJyb3dzZXJzIik7CisKK3ZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsK
K3ZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7CisKK3ZhciBFZGl0b3IgPSByZXF1
aXJlKCIuL2VkaXRvciIpLkVkaXRvcjsKK3ZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRp
dF9zZXNzaW9uIikuRWRpdFNlc3Npb247Cit2YXIgVW5kb01hbmFnZXIgPSByZXF1aXJlKCIuL3Vu
ZG9tYW5hZ2VyIikuVW5kb01hbmFnZXI7Cit2YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuL3ZpcnR1
YWxfcmVuZGVyZXIiKS5WaXJ0dWFsUmVuZGVyZXI7Cit2YXIgTXVsdGlTZWxlY3QgPSByZXF1aXJl
KCIuL211bHRpX3NlbGVjdCIpLk11bHRpU2VsZWN0OworcmVxdWlyZSgiLi93b3JrZXIvd29ya2Vy
X2NsaWVudCIpOworcmVxdWlyZSgiLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKTsKK3JlcXVpcmUo
Ii4vcGxhY2Vob2xkZXIiKTsKK3JlcXVpcmUoIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIpOwor
ZXhwb3J0cy5jb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOworZXhwb3J0cy5yZXF1aXJlID0g
cmVxdWlyZTsKK2V4cG9ydHMuZWRpdCA9IGZ1bmN0aW9uKGVsKSB7CisgICAgaWYgKHR5cGVvZihl
bCkgPT0gInN0cmluZyIpIHsKKyAgICAgICAgdmFyIF9pZCA9IGVsOworICAgICAgICB2YXIgZWwg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfaWQpOworICAgICAgICBpZiAoIWVsKQorICAgICAg
ICAgICAgdGhyb3cgImFjZS5lZGl0IGNhbid0IGZpbmQgZGl2ICMiICsgX2lkOworICAgIH0KKwor
ICAgIGlmIChlbC5lbnYgJiYgZWwuZW52LmVkaXRvciBpbnN0YW5jZW9mIEVkaXRvcikKKyAgICAg
ICAgcmV0dXJuIGVsLmVudi5lZGl0b3I7CisKKyAgICB2YXIgZG9jID0gZXhwb3J0cy5jcmVhdGVF
ZGl0U2Vzc2lvbihkb20uZ2V0SW5uZXJUZXh0KGVsKSk7CisgICAgZWwuaW5uZXJIVE1MID0gJyc7
CisKKyAgICB2YXIgZWRpdG9yID0gbmV3IEVkaXRvcihuZXcgUmVuZGVyZXIoZWwpKTsKKyAgICBu
ZXcgTXVsdGlTZWxlY3QoZWRpdG9yKTsKKyAgICBlZGl0b3Iuc2V0U2Vzc2lvbihkb2MpOworCisg
ICAgdmFyIGVudiA9IHsKKyAgICAgICAgZG9jdW1lbnQ6IGRvYywKKyAgICAgICAgZWRpdG9yOiBl
ZGl0b3IsCisgICAgICAgIG9uUmVzaXplOiBlZGl0b3IucmVzaXplLmJpbmQoZWRpdG9yKQorICAg
IH07CisgICAgZXZlbnQuYWRkTGlzdGVuZXIod2luZG93LCAicmVzaXplIiwgZW52Lm9uUmVzaXpl
KTsKKyAgICBlbC5lbnYgPSBlZGl0b3IuZW52ID0gZW52OworICAgIHJldHVybiBlZGl0b3I7Cit9
OworZXhwb3J0cy5jcmVhdGVFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKKyAg
ICB2YXIgZG9jID0gbmV3IEVkaXRTZXNzaW9uKHRleHQsIGRvYyk7CisgICAgZG9jLnNldFVuZG9N
YW5hZ2VyKG5ldyBVbmRvTWFuYWdlcigpKTsKKyAgICByZXR1cm4gZG9jOworfQorZXhwb3J0cy5F
ZGl0U2Vzc2lvbiA9IEVkaXRTZXNzaW9uOworZXhwb3J0cy5VbmRvTWFuYWdlciA9IFVuZG9NYW5h
Z2VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZml4b2xkYnJvd3NlcnMnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvcmVnZXhwJywgJ2FjZS9saWIvZXM1
LXNoaW0nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworcmVxdWly
ZSgiLi9yZWdleHAiKTsKK3JlcXVpcmUoIi4vZXM1LXNoaW0iKTsKKworfSk7CisgCithY2UuZGVm
aW5lKCdhY2UvbGliL3JlZ2V4cCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgICB2YXIgcmVhbCA9IHsK
KyAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywKKyAgICAgICAgICAgIHRl
c3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwKKyAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJv
dG90eXBlLm1hdGNoLAorICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBs
YWNlLAorICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQKKyAgICAgICAg
fSwKKyAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIi
KVsxXSA9PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGlj
aXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzCisgICAgICAgIGNvbXBsaWFudExhc3RJbmRleEluY3Jl
bWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB4ID0gL14vZzsKKyAgICAgICAg
ICAgIHJlYWwudGVzdC5jYWxsKHgsICIiKTsKKyAgICAgICAgICAgIHJldHVybiAheC5sYXN0SW5k
ZXg7CisgICAgICAgIH0oKTsKKworICAgIGlmIChjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQg
JiYgY29tcGxpYW50RXhlY05wY2cpCisgICAgICAgIHJldHVybjsKKyAgICBSZWdFeHAucHJvdG90
eXBlLmV4ZWMgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgIHZhciBtYXRjaCA9IHJlYWwuZXhl
Yy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLAorICAgICAgICAgICAgbmFtZSwgcjI7CisgICAgICAg
IGlmICggdHlwZW9mKHN0cikgPT0gJ3N0cmluZycgJiYgbWF0Y2gpIHsKKyAgICAgICAgICAgIGlm
ICghY29tcGxpYW50RXhlY05wY2cgJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBpbmRleE9mKG1hdGNo
LCAiIikgPiAtMSkgeworICAgICAgICAgICAgICAgIHIyID0gUmVnRXhwKHRoaXMuc291cmNlLCBy
ZWFsLnJlcGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgImciLCAiIikpOworICAgICAg
ICAgICAgICAgIHJlYWwucmVwbGFjZS5jYWxsKHN0ci5zbGljZShtYXRjaC5pbmRleCksIHIyLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJn
dW1lbnRzLmxlbmd0aCAtIDI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoW2ldID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5feHJlZ2V4cCAmJiB0
aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAxOyBpIDwgbWF0Y2gubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2kgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW25hbWVdID0gbWF0Y2hbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjb21w
bGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0
aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCisgICAgICAgICAgICAgICAgdGhp
cy5sYXN0SW5kZXgtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfTsK
KyAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCkgeworICAgICAgICBSZWdFeHAu
cHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2gg
PSByZWFsLmV4ZWMuY2FsbCh0aGlzLCBzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNoICYmIHRo
aXMuZ2xvYmFsICYmICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2gu
aW5kZXgpKQorICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CisgICAgICAgICAgICBy
ZXR1cm4gISFtYXRjaDsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXROYXRp
dmVGbGFncyAocmVnZXgpIHsKKyAgICAgICAgcmV0dXJuIChyZWdleC5nbG9iYWwgICAgID8gImci
IDogIiIpICsKKyAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsK
KyAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gIm0iIDogIiIpICsKKyAgICAgICAg
ICAgICAgIChyZWdleC5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVT
NDsgaW5jbHVkZWQgaW4gQVMzCisgICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5
IiA6ICIiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJv
bSkgeworICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIC8vIFVzZSB0aGUgbmF0
aXZlIGFycmF5IG1ldGhvZCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgIHJldHVybiBhcnJheS5p
bmRleE9mKGl0ZW0sIGZyb20pOworICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwg
YXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9lczUtc2hpbScsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKK2Z1bmN0aW9uIEVtcHR5KCkge30KKworaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUu
YmluZCkgeworICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0
KSB7IC8vIC5sZW5ndGggaXMgMQorICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAg
aWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJs
ZSAiICsgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCisgICAgICAgIHZhciBib3VuZCA9IGZ1
bmN0aW9uICgpIHsKKworICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewor
CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKE9i
amVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBs
eSgKKyAgICAgICAgICAgICAgICAgICAgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgYXJncy5j
b25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICk7CisKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7Cisg
ICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOworICAgICAgICAg
ICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7CisgICAgICAgICAgICBFbXB0eS5wcm90
b3R5cGUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBib3VuZDsKKyAgICB9Owor
fQordmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKK3ZhciBwcm90b3R5cGVPZkFy
cmF5ID0gQXJyYXkucHJvdG90eXBlOwordmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnBy
b3RvdHlwZTsKK3ZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7Cit2YXIgX3RvU3Ry
aW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKK3ZhciBvd25zID0g
Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKK3ZhciBkZWZpbmVH
ZXR0ZXI7Cit2YXIgZGVmaW5lU2V0dGVyOwordmFyIGxvb2t1cEdldHRlcjsKK3ZhciBsb29rdXBT
ZXR0ZXI7Cit2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CitpZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0g
b3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKKyAgICBkZWZp
bmVHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7
CisgICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5l
U2V0dGVyX18pOworICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVj
dC5fX2xvb2t1cEdldHRlcl9fKTsKKyAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXyk7Cit9CitpZiAoWzEsMl0uc3BsaWNlKDApLmxl
bmd0aCAhPSAyKSB7CisgICAgaWYoZnVuY3Rpb24oKSB7IC8vIHRlc3QgSUUgPCA5IHRvIHNwbGlj
ZSBidWcgLSBzZWUgaXNzdWUgIzEzOAorICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgewor
ICAgICAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKKyAgICAgICAgICAgIGFbMF0gPSBh
WzFdID0gMDsKKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisgICAgICAgIHZhciBh
cnJheSA9IFtdLCBsZW5ndGhCZWZvcmU7CisgICAgICAgIAorICAgICAgICBhcnJheS5zcGxpY2Uu
YXBwbHkoYXJyYXksIG1ha2VBcnJheSgyMCkpOworICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHko
YXJyYXksIG1ha2VBcnJheSgyNikpOworCisgICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxl
bmd0aDsgLy80NgorICAgICAgICBhcnJheS5zcGxpY2UoNSwgMCwgIlhYWCIpOyAvLyBhZGQgb25l
IGVsZW1lbnQKKworICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAorCisg
ICAgICAgIGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0
IGJ1Z3MKKyAgICAgICAgfQorICAgIH0oKSkgey8vSUUgNi83CisgICAgICAgIHZhciBhcnJheV9z
cGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOworICAgICAgICBBcnJheS5wcm90b3R5cGUu
c3BsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZUNvdW50KSB7CisgICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHko
dGhpcywgWworICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0
LAorICAgICAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9PT0gdm9pZCAwID8gKHRoaXMubGVu
Z3RoIC0gc3RhcnQpIDogZGVsZXRlQ291bnQKKyAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMikpKQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0g
ZWxzZSB7Ly9JRTgKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBv
cywgcmVtb3ZlQ291bnQpeworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwor
ICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVu
Z3RoKQorICAgICAgICAgICAgICAgICAgICBwb3MgPSBsZW5ndGg7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHBvcyA9PSB2b2lkIDApIHsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChwb3MgPCAwKSB7CisgICAgICAgICAgICAgICAgcG9zID0gTWF0aC5t
YXgobGVuZ3RoICsgcG9zLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCEo
cG9zK3JlbW92ZUNvdW50IDwgbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9
IGxlbmd0aCAtIHBvczsKKworICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBv
cywgcG9zK3JlbW92ZUNvdW50KTsKKyAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxs
KGFyZ3VtZW50cywgMik7CisgICAgICAgICAgICB2YXIgYWRkID0gaW5zZXJ0Lmxlbmd0aDsgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgeworICAgICAgICAgICAg
ICAgIGlmIChhZGQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMs
IGluc2VydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcmVtb3ZlID0gTWF0aC5taW4ocmVtb3ZlQ291bnQsIGxlbmd0aCAtIHBv
cyk7CisgICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CisgICAg
ICAgICAgICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOwor
ICAgICAgICAgICAgICAgIHZhciB0YWlsQ291bnQgPSBsZW5ndGggLSB0YWlsT2xkUG9zOworICAg
ICAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKKwor
ICAgICAgICAgICAgICAgIGlmICh0YWlsTmV3UG9zIDwgdGFpbE9sZFBvcykgeyAvLyBjYXNlIEEK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWls
T2xkUG9zK2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh0YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3Ro
aW5nIHRvIGRvKQorCisgICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFm
dGVyUmVtb3ZlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0
ZXJSZW1vdmU7IC8vIHRydW5jYXRlIGFycmF5CisgICAgICAgICAgICAgICAgICAgIHRoaXMucHVz
aC5hcHBseSh0aGlzLCBpbnNlcnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJl
c2VydmVzIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGQ7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICAgICAgfTsKKyAgICB9Cit9CitpZiAoIUFy
cmF5LmlzQXJyYXkpIHsKKyAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmop
IHsKKyAgICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7Cisg
ICAgfTsKK30KK3ZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAorICAgIHNwbGl0U3RyaW5n
ID0gYm94ZWRTdHJpbmdbMF0gIT0gImEiIHx8ICEoMCBpbiBib3hlZFN0cmluZyk7CisKK2lmICgh
QXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9
IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7CisgICAgICAgIHZhciBvYmplY3Qg
PSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9T
dHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMu
c3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICB0aGlzcCA9
IGFyZ3VtZW50c1sxXSwKKyAgICAgICAgICAgIGkgPSAtMSwKKyAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOworICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmpl
Y3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBU
T0RPIG1lc3NhZ2UKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICBmdW4uY2FsbCh0
aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKKyAgICBBcnJheS5wcm90b3R5cGUu
bWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgeworICAgICAgICB2YXIgb2JqZWN0
ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3Rv
U3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlz
LnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3Ro
ID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgp
LAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisgICAgICAgIGlmIChfdG9TdHJp
bmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChp
IGluIHNlbGYpCisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNl
bGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgICAgQXJyYXkucHJvdG90
eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CisgICAgICAg
IHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0
cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAg
ICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQg
PSBbXSwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNb
MV07CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rp
b24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IHNlbGZbaV07CisgICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwg
aSwgb2JqZWN0KSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CisgICAg
QXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykg
eworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxm
ID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8K
KyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0
LAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICB0
aGlzcCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2Jq
ZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsg
IiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVu
LmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLnNvbWUpIHsKKyAgICBBcnJheS5wcm90
b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2
YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJp
bmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAg
ICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAg
ICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3Vt
ZW50c1sxXTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9u
XSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBm
dW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwg
c2VsZltpXSwgaSwgb2JqZWN0KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQor
aWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CisgICAgQXJyYXkucHJvdG90eXBlLnJlZHVj
ZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIgb2Jq
ZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYg
X3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0
aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVu
Z3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAi
W29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1
biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxlbmd0
aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0gYXJn
dW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2Vs
ZltpKytdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlh
bCB2YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRydWUp
OworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxs
KHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQoraWYgKCFBcnJheS5w
cm90b3R5cGUucmVkdWNlUmlnaHQpIHsKKyAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQg
PSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIg
b2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcg
JiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAg
ICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAg
bGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAh
PSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxl
bmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1
ZSIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7Cisg
ICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGZbaS0tXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5p
dGlhbCB2YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRy
dWUpOworICAgICAgICB9CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGkgaW4gdGhp
cykgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBz
ZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChpLS0p
OworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90
eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgeworICAgIEFycmF5
LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRl
eCAqLyApIHsKKyAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhp
cykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIp
IDoKKyAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1
bWVudHNbMV0pOworICAgICAgICB9CisgICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgo
MCwgbGVuZ3RoICsgaSk7CisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291Z2h0KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAs
IDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUubGFz
dEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykg
eworICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAi
W29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAg
ICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5s
ZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CisgICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRv
SW50ZWdlcihhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgfQorICAgICAgICBpID0gaSA+PSAwID8g
aSA6IGxlbmd0aCAtIE1hdGguYWJzKGkpOworICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH07Cit9CitpZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgeworICAg
IE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkg
eworICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCisgICAgICAgICAgICBvYmpl
Y3QuY29uc3RydWN0b3IgPworICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlw
ZSA6CisgICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAorICAgICAgICApOworICAgIH07Cit9
CitpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKKyAgICB2YXIgRVJSX05P
Tl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKKyAgICBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJv
YmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxs
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVj
dCk7CisgICAgICAgIGlmICghb3ducyhvYmplY3QsIHByb3BlcnR5KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB2YXIgZGVzY3JpcHRvciwgZ2V0dGVyLCBzZXR0ZXI7CisgICAgICAg
IGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsK
KyAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICB2YXIgcHJvdG90
eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBw
cm90b3R5cGVPZk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRl
cihvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0
ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJv
dG90eXBlOworCisgICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgeworICAgICAgICAg
ICAgICAgIGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAg
ICAgIGlmIChzZXR0ZXIpIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOworICAgICAgICAgICAgICAg
IHJldHVybiBkZXNjcmlwdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRl
c2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOworICAgICAgICByZXR1cm4gZGVzY3Jp
cHRvcjsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgeworICAg
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgfTsK
K30KK2lmICghT2JqZWN0LmNyZWF0ZSkgeworICAgIHZhciBjcmVhdGVFbXB0eTsKKyAgICBpZiAo
T2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18gPT09IG51bGwpIHsKKyAgICAgICAgY3JlYXRlRW1w
dHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVs
bCB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307CisgICAgICAgICAgICBmb3Ig
KHZhciBpIGluIGVtcHR5KQorICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKKyAgICAg
ICAgICAgIGVtcHR5LmNvbnN0cnVjdG9yID0KKyAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3Bl
cnR5ID0KKyAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KKyAgICAgICAg
ICAgIGVtcHR5LmlzUHJvdG90eXBlT2YgPQorICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJp
bmcgPQorICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQorICAgICAgICAgICAgZW1wdHkudmFs
dWVPZiA9CisgICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOworICAgICAgICAgICAg
cmV0dXJuIGVtcHR5OworICAgICAgICB9CisgICAgfQorCisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1
bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG9iamVj
dDsKKyAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgb2JqZWN0
ID0gY3JlYXRlRW1wdHkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgcHJvdG90eXBlICE9ICJvYmplY3QiKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIisodHlwZW9mIHByb3RvdHlwZSkrIl0gIT0gJ29iamVj
dCciKTsKKyAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CisgICAgICAgICAg
ICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgICAgIG9iamVjdCA9IG5ldyBU
eXBlKCk7CisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAg
ICB9CisgICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApCisgICAgICAgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOworICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2Jq
ZWN0KSB7CisgICAgdHJ5IHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwg
InNlbnRpbmVsIiwge30pOworICAgICAgICByZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7Cisg
ICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgfQorfQoraWYgKE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSkgeworICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5l
UHJvcGVydHlXb3JrKHt9KTsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlw
ZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CisgICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0
eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgIGlmICghZGVmaW5lUHJv
cGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKKyAgICAg
ICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7Cisg
ICAgfQorfQorCitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZh
bGxiYWNrKSB7CisgICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkg
ZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CisgICAgdmFyIEVSUl9OT05fT0JKRUNU
X1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIK
KyAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJz
IGNhbiBub3QgYmUgZGVmaW5lZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOworCisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3Jp
cHRvcikgeworICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9m
IG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCisgICAgICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CisgICAg
ICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0
b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3Ip
OworICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgeworICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9i
amVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICB9IGNhdGNo
IChleGNlcHRpb24pIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob3du
cyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgeworCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nl
c3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3Qu
X19wcm90b19fOworICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVP
Zk9iamVjdDsKKyAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAg
ICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc3VwcG9y
dHNBY2Nlc3NvcnMpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUND
RVNTT1JTX05PVF9TVVBQT1JURUQpOworICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwg
ImdldCIpKQorICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBk
ZXNjcmlwdG9yLmdldCk7CisgICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0Iikp
CisgICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0
b3Iuc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30K
K2lmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7Cisg
ICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlm
IChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LnNl
YWwpIHsKKyAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CisgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9i
amVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgfTsKK30KK3RyeSB7CisgICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7
fSk7Cit9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9u
IGZyZWV6ZShmcmVlemVPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShv
YmplY3QpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cit9CitpZiAoIU9iamVjdC5wcmV2
ZW50RXh0ZW5zaW9ucykgeworICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9u
IHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH07Cit9CitpZiAoIU9iamVjdC5pc1NlYWxlZCkgeworICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1
bmN0aW9uIGlzU2VhbGVkKG9iamVjdCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
K30KK2lmICghT2JqZWN0LmlzRnJvemVuKSB7CisgICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rp
b24gaXNGcm96ZW4ob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQor
aWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7CisgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1
bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKKyAgICAgICAgaWYgKE9iamVjdChvYmplY3Qp
ID09PSBvYmplY3QpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9E
TyBtZXNzYWdlCisgICAgICAgIH0KKyAgICAgICAgdmFyIG5hbWUgPSAnJzsKKyAgICAgICAgd2hp
bGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgbmFtZSArPSAnPyc7CisgICAg
ICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJldHVyblZh
bHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwor
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmtleXMp
IHsKKyAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAorICAgICAgICBkb250RW51bXMgPSBb
CisgICAgICAgICAgICAidG9TdHJpbmciLAorICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwK
KyAgICAgICAgICAgICJ2YWx1ZU9mIiwKKyAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCisg
ICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCisgICAgICAgICAgICAicHJvcGVydHlJc0VudW1l
cmFibGUiLAorICAgICAgICAgICAgImNvbnN0cnVjdG9yIgorICAgICAgICBdLAorICAgICAgICBk
b250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOworCisgICAgZm9yICh2YXIga2V5IGlu
IHsidG9TdHJpbmciOiBudWxsfSkgeworICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOwor
ICAgIH0KKworICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKKworICAg
ICAgICBpZiAoCisgICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBl
b2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8CisgICAgICAgICAgICBvYmplY3QgPT09IG51bGwK
KyAgICAgICAgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5
cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CisgICAgICAgIH0KKworICAgICAgICB2YXIga2V5
cyA9IFtdOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgeworICAgICAgICAgICAg
aWYgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1l
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNEb250RW51bUJ1
ZykgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBp
IDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tp
XTsKKyAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgeworICAgICAg
ICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9OworCit9
CitpZiAoIURhdGUubm93KSB7CisgICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CisgICAg
ICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICB9OworfQoraWYoIjAiLnNwbGl0
KHZvaWQgMCwgMCkubGVuZ3RoKSB7CisgICAgdmFyIHN0cmluZ19zcGxpdCA9IFN0cmluZy5wcm90
b3R5cGUuc3BsaXQ7CisgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uKHNlcGFy
YXRvciwgbGltaXQpIHsKKyAgICAgICAgaWYoc2VwYXJhdG9yID09PSB2b2lkIDAgJiYgbGltaXQg
PT09IDApcmV0dXJuIFtdOworICAgICAgICByZXR1cm4gc3RyaW5nX3NwbGl0LmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisgICAgfQorfQoraWYoIiIuc3Vic3RyICYmICIwYiIuc3Vic3RyKC0xKSAh
PT0gImIiKSB7CisgICAgdmFyIHN0cmluZ19zdWJzdHIgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0
cjsKKyAgICBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgp
IHsKKyAgICAgICAgcmV0dXJuIHN0cmluZ19zdWJzdHIuY2FsbCgKKyAgICAgICAgICAgIHRoaXMs
CisgICAgICAgICAgICBzdGFydCA8IDAgPyAoc3RhcnQgPSB0aGlzLmxlbmd0aCArIHN0YXJ0KSA8
IDAgPyAwIDogc3RhcnQgOiBzdGFydCwKKyAgICAgICAgICAgIGxlbmd0aAorICAgICAgICApOwor
ICAgIH0KK30KK3ZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUx
ODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCisgICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1
MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKworICAgICJc
dTIwMjlcdUZFRkYiOworaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7
CisgICAgd3MgPSAiWyIgKyB3cyArICJdIjsKKyAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3
IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwKKyAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5l
dyBSZWdFeHAod3MgKyB3cyArICIqJCIpOworICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1
bmN0aW9uIHRyaW0oKSB7CisgICAgICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQgfHwgdGhpcyA9
PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVy
dCAiK3RoaXMrIiB0byBvYmplY3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5n
KHRoaXMpCisgICAgICAgICAgICAucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKQorICAgICAg
ICAgICAgLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOworICAgIH07Cit9CisKK2Z1bmN0aW9u
IHRvSW50ZWdlcihuKSB7CisgICAgbiA9ICtuOworICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFO
CisgICAgICAgIG4gPSAwOworICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAm
JiBuICE9PSAtKDEvMCkpIHsKKyAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29y
KE1hdGguYWJzKG4pKTsKKyAgICB9CisgICAgcmV0dXJuIG47Cit9CisKK2Z1bmN0aW9uIGlzUHJp
bWl0aXZlKGlucHV0KSB7CisgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CisgICAgcmV0dXJu
ICgKKyAgICAgICAgaW5wdXQgPT09IG51bGwgfHwKKyAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5l
ZCIgfHwKKyAgICAgICAgdHlwZSA9PT0gImJvb2xlYW4iIHx8CisgICAgICAgIHR5cGUgPT09ICJu
dW1iZXIiIHx8CisgICAgICAgIHR5cGUgPT09ICJzdHJpbmciCisgICAgKTsKK30KKworZnVuY3Rp
b24gdG9QcmltaXRpdmUoaW5wdXQpIHsKKyAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsK
KyAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CisgICAgICAgIHJldHVybiBpbnB1dDsKKyAg
ICB9CisgICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CisgICAgaWYgKHR5cGVvZiB2YWx1ZU9m
ID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7Cisg
ICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsOwor
ICAgICAgICB9CisgICAgfQorICAgIHRvU3RyaW5nID0gaW5wdXQudG9TdHJpbmc7CisgICAgaWYg
KHR5cGVvZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICB2YWwgPSB0b1N0cmlu
Zy5jYWxsKGlucHV0KTsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cigpOworfQordmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKKyAgICBpZiAobyA9PSBudWxs
KSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAorICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOworICAgIH0K
KyAgICByZXR1cm4gT2JqZWN0KG8pOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIv
ZG9tJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgWEhUTUxfTlMgPSAiaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCI7CisKK2V4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywg
bnMpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TID8KKyAgICAgICAgICAg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zIHx8IFhIVE1MX05TLCB0YWcpIDoKKyAgICAgICAg
ICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOworfTsKKworZXhwb3J0cy5zZXRUZXh0ID0g
ZnVuY3Rpb24oZWxlbSwgdGV4dCkgeworICAgIGlmIChlbGVtLmlubmVyVGV4dCAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgIGVsZW0uaW5uZXJUZXh0ID0gdGV4dDsKKyAgICB9CisgICAgaWYgKGVs
ZW0udGV4dENvbnRlbnQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBlbGVtLnRleHRDb250ZW50
ID0gdGV4dDsKKyAgICB9Cit9OworCitleHBvcnRzLmhhc0Nzc0NsYXNzID0gZnVuY3Rpb24oZWws
IG5hbWUpIHsKKyAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cpOwor
ICAgIHJldHVybiBjbGFzc2VzLmluZGV4T2YobmFtZSkgIT09IC0xOworfTsKK2V4cG9ydHMuYWRk
Q3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIGlmICghZXhwb3J0cy5oYXNDc3ND
bGFzcyhlbCwgbmFtZSkpIHsKKyAgICAgICAgZWwuY2xhc3NOYW1lICs9ICIgIiArIG5hbWU7Cisg
ICAgfQorfTsKK2V4cG9ydHMucmVtb3ZlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgewor
ICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5hbWUpOworICAg
ICAgICBpZiAoaW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICB9CisgICAgZWwuY2xhc3NOYW1l
ID0gY2xhc3Nlcy5qb2luKCIgIik7Cit9OworCitleHBvcnRzLnRvZ2dsZUNzc0NsYXNzID0gZnVu
Y3Rpb24oZWwsIG5hbWUpIHsKKyAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgv
XHMrL2cpLCBhZGQgPSB0cnVlOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHZhciBpbmRl
eCA9IGNsYXNzZXMuaW5kZXhPZihuYW1lKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhZGQgPSBmYWxzZTsKKyAgICAg
ICAgY2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0KKyAgICBpZihhZGQpCisgICAgICAg
IGNsYXNzZXMucHVzaChuYW1lKTsKKworICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbigi
ICIpOworICAgIHJldHVybiBhZGQ7Cit9OworZXhwb3J0cy5zZXRDc3NDbGFzcyA9IGZ1bmN0aW9u
KG5vZGUsIGNsYXNzTmFtZSwgaW5jbHVkZSkgeworICAgIGlmIChpbmNsdWRlKSB7CisgICAgICAg
IGV4cG9ydHMuYWRkQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBleHBvcnRzLnJlbW92ZUNzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7CisgICAgfQorfTsK
KworZXhwb3J0cy5oYXNDc3NTdHJpbmcgPSBmdW5jdGlvbihpZCwgZG9jKSB7CisgICAgdmFyIGlu
ZGV4ID0gMCwgc2hlZXRzOworICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKKworICAgIGlmIChk
b2MuY3JlYXRlU3R5bGVTaGVldCAmJiAoc2hlZXRzID0gZG9jLnN0eWxlU2hlZXRzKSkgeworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKQorICAgICAgICAgICAgaWYgKHNoZWV0
c1tpbmRleCsrXS5vd25pbmdFbGVtZW50LmlkID09PSBpZCkgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIGlmICgoc2hlZXRzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdHlsZSIpKSkgewor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKQorICAgICAgICAgICAgaWYgKHNo
ZWV0c1tpbmRleCsrXS5pZCA9PT0gaWQpIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK307CisKK2V4cG9ydHMuaW1wb3J0Q3NzU3RyaW5nID0gZnVuY3Rpb24gaW1wb3J0
Q3NzU3RyaW5nKGNzc1RleHQsIGlkLCBkb2MpIHsKKyAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7
CisgICAgaWYgKGlkICYmIGV4cG9ydHMuaGFzQ3NzU3RyaW5nKGlkLCBkb2MpKQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAKKyAgICB2YXIgc3R5bGU7CisgICAgCisgICAgaWYgKGRvYy5jcmVh
dGVTdHlsZVNoZWV0KSB7CisgICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZVN0eWxlU2hlZXQoKTsK
KyAgICAgICAgc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7CisgICAgICAgIGlmIChpZCkKKyAgICAg
ICAgICAgIHN0eWxlLm93bmluZ0VsZW1lbnQuaWQgPSBpZDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50TlMKKyAgICAgICAgICAgID8gZG9jLmNyZWF0ZUVs
ZW1lbnROUyhYSFRNTF9OUywgInN0eWxlIikKKyAgICAgICAgICAgIDogZG9jLmNyZWF0ZUVsZW1l
bnQoInN0eWxlIik7CisKKyAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHRO
b2RlKGNzc1RleHQpKTsKKyAgICAgICAgaWYgKGlkKQorICAgICAgICAgICAgc3R5bGUuaWQgPSBp
ZDsKKworICAgICAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIp
WzBdIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5
bGUpOworICAgIH0KK307CisKK2V4cG9ydHMuaW1wb3J0Q3NzU3R5bHNoZWV0ID0gZnVuY3Rpb24o
dXJpLCBkb2MpIHsKKyAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKKyAgICAgICAgZG9j
LmNyZWF0ZVN0eWxlU2hlZXQodXJpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgbGluayA9
IGV4cG9ydHMuY3JlYXRlRWxlbWVudCgnbGluaycpOworICAgICAgICBsaW5rLnJlbCA9ICdzdHls
ZXNoZWV0JzsKKyAgICAgICAgbGluay5ocmVmID0gdXJpOworCisgICAgICAgIHZhciBoZWFkID0g
ZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRvY3VtZW50RWxlbWVu
dDsKKyAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKKyAgICB9Cit9OworCitleHBvcnRz
LmdldElubmVyV2lkdGggPSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICgKKyAgICAg
ICAgcGFyc2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nTGVmdCIp
LCAxMCkgKworICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwg
InBhZGRpbmdSaWdodCIpLCAxMCkgKyAKKyAgICAgICAgZWxlbWVudC5jbGllbnRXaWR0aAorICAg
ICk7Cit9OworCitleHBvcnRzLmdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24oZWxlbWVudCkgewor
ICAgIHJldHVybiAoCisgICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVt
ZW50LCAicGFkZGluZ1RvcCIpLCAxMCkgKworICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1
dGVkU3R5bGUoZWxlbWVudCwgInBhZGRpbmdCb3R0b20iKSwgMTApICsKKyAgICAgICAgZWxlbWVu
dC5jbGllbnRIZWlnaHQKKyAgICApOworfTsKKworaWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0g
dW5kZWZpbmVkKSB7CisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQ7CisgICAgfTsKKworICAgIGV4cG9y
dHMuZ2V0UGFnZVNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHdpbmRv
dy5wYWdlWE9mZnNldDsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0cy5nZXRQYWdlU2Ny
b2xsVG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9s
bFRvcDsKKyAgICB9OworCisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OworICAgIH07Cit9
CisKK2lmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkKKyAgICBleHBvcnRzLmNvbXB1dGVkU3R5
bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgICAgICBpZiAoc3R5bGUpCisgICAg
ICAgICAgICByZXR1cm4gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKSB8fCB7
fSlbc3R5bGVdIHx8ICIiOworICAgICAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUo
ZWxlbWVudCwgIiIpIHx8IHt9OworICAgIH07CitlbHNlCisgICAgZXhwb3J0cy5jb21wdXRlZFN0
eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKKyAgICAgICAgaWYgKHN0eWxlKQorICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTsKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlOworICAgIH07CisKK2V4cG9ydHMuc2Nyb2xsYmFyV2lk
dGggPSBmdW5jdGlvbihkb2N1bWVudCkgeworICAgIHZhciBpbm5lciA9IGV4cG9ydHMuY3JlYXRl
RWxlbWVudCgiYWNlX2lubmVyIik7CisgICAgaW5uZXIuc3R5bGUud2lkdGggPSAiMTAwJSI7Cisg
ICAgaW5uZXIuc3R5bGUubWluV2lkdGggPSAiMHB4IjsKKyAgICBpbm5lci5zdHlsZS5oZWlnaHQg
PSAiMjAwcHgiOworICAgIGlubmVyLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworCisgICAgdmFy
IG91dGVyID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJhY2Vfb3V0ZXIiKTsKKyAgICB2YXIgc3R5
bGUgPSBvdXRlci5zdHlsZTsKKworICAgIHN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAg
ICBzdHlsZS5sZWZ0ID0gIi0xMDAwMHB4IjsKKyAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4i
OworICAgIHN0eWxlLndpZHRoID0gIjIwMHB4IjsKKyAgICBzdHlsZS5taW5XaWR0aCA9ICIwcHgi
OworICAgIHN0eWxlLmhlaWdodCA9ICIxNTBweCI7CisgICAgc3R5bGUuZGlzcGxheSA9ICJibG9j
ayI7CisKKyAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7CisKKyAgICB2YXIgYm9keSA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICBib2R5LmFwcGVuZENoaWxkKG91dGVyKTsKKwor
ICAgIHZhciBub1Njcm9sbGJhciA9IGlubmVyLm9mZnNldFdpZHRoOworCisgICAgc3R5bGUub3Zl
cmZsb3cgPSAic2Nyb2xsIjsKKyAgICB2YXIgd2l0aFNjcm9sbGJhciA9IGlubmVyLm9mZnNldFdp
ZHRoOworCisgICAgaWYgKG5vU2Nyb2xsYmFyID09IHdpdGhTY3JvbGxiYXIpIHsKKyAgICAgICAg
d2l0aFNjcm9sbGJhciA9IG91dGVyLmNsaWVudFdpZHRoOworICAgIH0KKworICAgIGJvZHkucmVt
b3ZlQ2hpbGQob3V0ZXIpOworCisgICAgcmV0dXJuIG5vU2Nyb2xsYmFyLXdpdGhTY3JvbGxiYXI7
Cit9OworZXhwb3J0cy5zZXRJbm5lckh0bWwgPSBmdW5jdGlvbihlbCwgaW5uZXJIdG1sKSB7Cisg
ICAgdmFyIGVsZW1lbnQgPSBlbC5jbG9uZU5vZGUoZmFsc2UpOy8vZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgZWxlbWVudC5pbm5lckhUTUwgPSBpbm5lckh0bWw7CisgICAgZWwu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWxlbWVudCwgZWwpOworICAgIHJldHVybiBlbGVtZW50
OworfTsKKworZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7
CisgICAgdmFyIGRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudDsKKyAgICBpZiAoZG9jdW1lbnQu
Ym9keSAmJiAidGV4dENvbnRlbnQiIGluIGRvY3VtZW50LmJvZHkpCisgICAgICAgIGVsLnRleHRD
b250ZW50ID0gaW5uZXJUZXh0OworICAgIGVsc2UKKyAgICAgICAgZWwuaW5uZXJUZXh0ID0gaW5u
ZXJUZXh0OworCit9OworCitleHBvcnRzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVsKSB7Cisg
ICAgdmFyIGRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudDsKKyAgICBpZiAoZG9jdW1lbnQuYm9k
eSAmJiAidGV4dENvbnRlbnQiIGluIGRvY3VtZW50LmJvZHkpCisgICAgICAgIHJldHVybiBlbC50
ZXh0Q29udGVudDsKKyAgICBlbHNlCisgICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0IHx8IGVs
LnRleHRDb250ZW50IHx8ICIiOworfTsKKworZXhwb3J0cy5nZXRQYXJlbnRXaW5kb3cgPSBmdW5j
dGlvbihkb2N1bWVudCkgeworICAgIHJldHVybiBkb2N1bWVudC5kZWZhdWx0VmlldyB8fCBkb2N1
bWVudC5wYXJlbnRXaW5kb3c7Cit9OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9ldmVu
dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9rZXlzJywgJ2Fj
ZS9saWIvdXNlcmFnZW50JywgJ2FjZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBrZXlzID0gcmVxdWlyZSgiLi9rZXlzIik7Cit2YXIgdXNl
cmFnZW50ID0gcmVxdWlyZSgiLi91c2VyYWdlbnQiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuL2Rv
bSIpOworCitleHBvcnRzLmFkZExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJh
Y2spIHsKKyAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBl
bGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9CisgICAg
aWYgKGVsZW0uYXR0YWNoRXZlbnQpIHsKKyAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHdpbmRvdy5ldmVudCk7CisgICAgICAgIH07CisgICAg
ICAgIGNhbGxiYWNrLl93cmFwcGVyID0gd3JhcHBlcjsKKyAgICAgICAgZWxlbS5hdHRhY2hFdmVu
dCgib24iICsgdHlwZSwgd3JhcHBlcik7CisgICAgfQorfTsKKworZXhwb3J0cy5yZW1vdmVMaXN0
ZW5lciA9IGZ1bmN0aW9uKGVsZW0sIHR5cGUsIGNhbGxiYWNrKSB7CisgICAgaWYgKGVsZW0ucmVt
b3ZlRXZlbnRMaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gZWxlbS5yZW1vdmVFdmVudExpc3Rl
bmVyKHR5cGUsIGNhbGxiYWNrLCBmYWxzZSk7CisgICAgfQorICAgIGlmIChlbGVtLmRldGFjaEV2
ZW50KSB7CisgICAgICAgIGVsZW0uZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGNhbGxiYWNrLl93
cmFwcGVyIHx8IGNhbGxiYWNrKTsKKyAgICB9Cit9OworZXhwb3J0cy5zdG9wRXZlbnQgPSBmdW5j
dGlvbihlKSB7CisgICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7CisgICAgZXhwb3J0cy5w
cmV2ZW50RGVmYXVsdChlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9OworCitleHBvcnRzLnN0b3BQ
cm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pCisg
ICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgZWxzZQorICAgICAgICBlLmNhbmNlbEJ1
YmJsZSA9IHRydWU7Cit9OworCitleHBvcnRzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkg
eworICAgIGlmIChlLnByZXZlbnREZWZhdWx0KQorICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7
CisgICAgZWxzZQorICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7Cit9OworZXhwb3J0cy5n
ZXRCdXR0b24gPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUudHlwZSA9PSAiZGJsY2xpY2siKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZS50eXBlID09ICJjb250ZXh0bWVudSIgfHwgKGUu
Y3RybEtleSAmJiB1c2VyYWdlbnQuaXNNYWMpKQorICAgICAgICByZXR1cm4gMjsKKyAgICBpZiAo
ZS5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICByZXR1cm4gZS5idXR0b247CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICByZXR1cm4gezE6MCwgMjoyLCA0OjF9W2UuYnV0dG9uXTsKKyAgICB9
Cit9OworCitpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldENhcHR1cmUpIHsKKyAgICBl
eHBvcnRzLmNhcHR1cmUgPSBmdW5jdGlvbihlbCwgZXZlbnRIYW5kbGVyLCByZWxlYXNlQ2FwdHVy
ZUhhbmRsZXIpIHsKKyAgICAgICAgdmFyIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBmdW5jdGlv
biBvblJlbGVhc2VDYXB0dXJlKGUpIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlcihlKTsKKwor
ICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHsKKyAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZXhwb3J0cy5yZW1vdmVMaXN0ZW5lcihlbCwgIm1vdXNlbW92ZSIs
IGV2ZW50SGFuZGxlcik7CisgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVsLCAi
bW91c2V1cCIsIG9uUmVsZWFzZUNhcHR1cmUpOworICAgICAgICAgICAgZXhwb3J0cy5yZW1vdmVM
aXN0ZW5lcihlbCwgImxvc2VjYXB0dXJlIiwgb25SZWxlYXNlQ2FwdHVyZSk7CisKKyAgICAgICAg
ICAgIGVsLnJlbGVhc2VDYXB0dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBleHBvcnRzLmFk
ZExpc3RlbmVyKGVsLCAibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgZXhwb3J0
cy5hZGRMaXN0ZW5lcihlbCwgIm1vdXNldXAiLCBvblJlbGVhc2VDYXB0dXJlKTsKKyAgICAgICAg
ZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgImxvc2VjYXB0dXJlIiwgb25SZWxlYXNlQ2FwdHVyZSk7
CisgICAgICAgIGVsLnNldENhcHR1cmUoKTsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0
cy5jYXB0dXJlID0gZnVuY3Rpb24oZWwsIGV2ZW50SGFuZGxlciwgcmVsZWFzZUNhcHR1cmVIYW5k
bGVyKSB7CisgICAgICAgIGZ1bmN0aW9uIG9uTW91c2VVcChlKSB7CisgICAgICAgICAgICBldmVu
dEhhbmRsZXIgJiYgZXZlbnRIYW5kbGVyKGUpOworICAgICAgICAgICAgcmVsZWFzZUNhcHR1cmVI
YW5kbGVyICYmIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTsKKworICAgICAgICAgICAgZG9jdW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyLCB0cnVlKTsK
KyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBvbk1v
dXNlVXAsIHRydWUpOworCisgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg
ICB9CisKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZXZl
bnRIYW5kbGVyLCB0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91
c2V1cCIsIG9uTW91c2VVcCwgdHJ1ZSk7CisgICAgfTsKK30KKworZXhwb3J0cy5hZGRNb3VzZVdo
ZWVsTGlzdGVuZXIgPSBmdW5jdGlvbihlbCwgY2FsbGJhY2spIHsKKyAgICB2YXIgZmFjdG9yID0g
ODsKKyAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlLndoZWVs
RGVsdGEgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVggIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGUud2hlZWxYID0gLWUud2hlZWxEZWx0YVgg
LyBmYWN0b3I7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRhWSAvIGZh
Y3RvcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFggPSAw
OworICAgICAgICAgICAgICAgIGUud2hlZWxZID0gLWUud2hlZWxEZWx0YSAvIGZhY3RvcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChl
LmF4aXMgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7CisgICAgICAgICAgICAgICAg
ZS53aGVlbFggPSAoZS5kZXRhaWwgfHwgMCkgKiA1OworICAgICAgICAgICAgICAgIGUud2hlZWxZ
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFggPSAw
OworICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGV0YWlsIHx8IDApICogNTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayhlKTsKKyAgICB9OworICAgIGV4
cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJET01Nb3VzZVNjcm9sbCIsIGxpc3RlbmVyKTsKKyAgICBl
eHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibW91c2V3aGVlbCIsIGxpc3RlbmVyKTsKK307CisKK2V4
cG9ydHMuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCB0aW1lb3V0cywg
ZXZlbnRIYW5kbGVyLCBjYWxsYmFja05hbWUpIHsKKyAgICB2YXIgY2xpY2tzID0gMDsKKyAgICB2
YXIgc3RhcnRYLCBzdGFydFksIHRpbWVyOworICAgIHZhciBldmVudE5hbWVzID0geworICAgICAg
ICAyOiAiZGJsY2xpY2siLAorICAgICAgICAzOiAidHJpcGxlY2xpY2siLAorICAgICAgICA0OiAi
cXVhZGNsaWNrIgorICAgIH07CisKKyAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibW91c2Vk
b3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZXhwb3J0cy5nZXRCdXR0b24oZSkgIT0g
MCkgeworICAgICAgICAgICAgY2xpY2tzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBpc05ld0NsaWNrID0gTWF0aC5hYnMoZS5jbGllbnRYIC0gc3RhcnRYKSA+IDUgfHwg
TWF0aC5hYnMoZS5jbGllbnRZIC0gc3RhcnRZKSA+IDU7CisKKyAgICAgICAgICAgIGlmICghdGlt
ZXIgfHwgaXNOZXdDbGljaykKKyAgICAgICAgICAgICAgICBjbGlja3MgPSAwOworCisgICAgICAg
ICAgICBjbGlja3MgKz0gMTsKKworICAgICAgICAgICAgaWYgKHRpbWVyKQorICAgICAgICAgICAg
ICAgIGNsZWFyVGltZW91dCh0aW1lcikKKyAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChm
dW5jdGlvbigpIHt0aW1lciA9IG51bGx9LCB0aW1lb3V0c1tjbGlja3MgLSAxXSB8fCA2MDApOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjbGlja3MgPT0gMSkgeworICAgICAgICAgICAgc3RhcnRY
ID0gZS5jbGllbnRYOworICAgICAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZOworICAgICAgICB9
CisKKyAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oIm1vdXNlZG93biIsIGUpOwor
CisgICAgICAgIGlmIChjbGlja3MgPiA0KQorICAgICAgICAgICAgY2xpY2tzID0gMDsKKyAgICAg
ICAgZWxzZSBpZiAoY2xpY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiBldmVudEhhbmRsZXJb
Y2FsbGJhY2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpOworICAgIH0pOworCisgICAgaWYg
KHVzZXJhZ2VudC5pc09sZElFKSB7CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJk
YmxjbGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsaWNrcyA9IDI7CisgICAgICAg
ICAgICBpZiAodGltZXIpCisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAg
ICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHt0aW1lciA9IG51bGx9LCB0
aW1lb3V0c1tjbGlja3MgLSAxXSB8fCA2MDApOworICAgICAgICAgICAgZXZlbnRIYW5kbGVyW2Nh
bGxiYWNrTmFtZV0oIm1vdXNlZG93biIsIGUpOworICAgICAgICAgICAgZXZlbnRIYW5kbGVyW2Nh
bGxiYWNrTmFtZV0oZXZlbnROYW1lc1tjbGlja3NdLCBlKTsKKyAgICAgICAgfSk7CisgICAgfQor
fTsKKworZnVuY3Rpb24gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGtleUNvZGUp
IHsKKyAgICB2YXIgaGFzaElkID0gMDsKKyAgICBpZiAoKHVzZXJhZ2VudC5pc09wZXJhICYmICEo
IktleWJvYXJkRXZlbnQiIGluIHdpbmRvdykpICYmIHVzZXJhZ2VudC5pc01hYykgeworICAgICAg
ICBoYXNoSWQgPSAwIHwgKGUubWV0YUtleSA/IDEgOiAwKSB8IChlLmFsdEtleSA/IDIgOiAwKQor
ICAgICAgICAgICAgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLmN0cmxLZXkgPyA4IDogMCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFzaElkID0gMCB8IChlLmN0cmxLZXkgPyAxIDogMCkg
fCAoZS5hbHRLZXkgPyAyIDogMCkKKyAgICAgICAgICAgIHwgKGUuc2hpZnRLZXkgPyA0IDogMCkg
fCAoZS5tZXRhS2V5ID8gOCA6IDApOworICAgIH0KKworICAgIGlmIChrZXlDb2RlIGluIGtleXMu
TU9ESUZJRVJfS0VZUykgeworICAgICAgICBzd2l0Y2ggKGtleXMuTU9ESUZJRVJfS0VZU1trZXlD
b2RlXSkgeworICAgICAgICAgICAgY2FzZSAiQWx0IjoKKyAgICAgICAgICAgICAgICBoYXNoSWQg
PSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiU2hpZnQiOgor
ICAgICAgICAgICAgICAgIGhhc2hJZCA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICJDdHJsIjoKKyAgICAgICAgICAgICAgICBoYXNoSWQgPSAxOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBo
YXNoSWQgPSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtl
eUNvZGUgPSAwOworICAgIH0KKworICAgIGlmIChoYXNoSWQgJiA4ICYmIChrZXlDb2RlID09IDkx
IHx8IGtleUNvZGUgPT0gOTMpKSB7CisgICAgICAgIGtleUNvZGUgPSAwOworICAgIH0KKyAgICBp
ZiAoIWhhc2hJZCAmJiAhKGtleUNvZGUgaW4ga2V5cy5GVU5DVElPTl9LRVlTKSAmJiAhKGtleUNv
ZGUgaW4ga2V5cy5QUklOVEFCTEVfS0VZUykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTsKK30KKworZXhwb3J0
cy5hZGRDb21tYW5kS2V5TGlzdGVuZXIgPSBmdW5jdGlvbihlbCwgY2FsbGJhY2spIHsKKyAgICB2
YXIgYWRkTGlzdGVuZXIgPSBleHBvcnRzLmFkZExpc3RlbmVyOworICAgIGlmICh1c2VyYWdlbnQu
aXNPbGRHZWNrbyB8fCAodXNlcmFnZW50LmlzT3BlcmEgJiYgISgiS2V5Ym9hcmRFdmVudCIgaW4g
d2luZG93KSkpIHsKKyAgICAgICAgdmFyIGxhc3RLZXlEb3duS2V5Q29kZSA9IG51bGw7CisgICAg
ICAgIGFkZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
IGxhc3RLZXlEb3duS2V5Q29kZSA9IGUua2V5Q29kZTsKKyAgICAgICAgfSk7CisgICAgICAgIGFk
ZExpc3RlbmVyKGVsLCAia2V5cHJlc3MiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGxhc3RLZXlEb3duS2V5Q29kZSk7
CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsYXN0RG93biA9IG51bGw7
CisKKyAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAg
ICAgICAgICAgbGFzdERvd24gPSBlLmtleUlkZW50aWZpZXIgfHwgZS5rZXlDb2RlOworICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNvbW1hbmRLZXlzKGNhbGxiYWNrLCBlLCBlLmtleUNvZGUp
OworICAgICAgICB9KTsKKyAgICB9Cit9OworCitpZiAod2luZG93LnBvc3RNZXNzYWdlICYmICF1
c2VyYWdlbnQuaXNPbGRJRSkgeworICAgIHZhciBwb3N0TWVzc2FnZUlkID0gMTsKKyAgICBleHBv
cnRzLm5leHRUaWNrID0gZnVuY3Rpb24oY2FsbGJhY2ssIHdpbikgeworICAgICAgICB3aW4gPSB3
aW4gfHwgd2luZG93OworICAgICAgICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1l
c3NhZ2UtIiArIHBvc3RNZXNzYWdlSWQ7CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIod2lu
LCAibWVzc2FnZSIsIGZ1bmN0aW9uIGxpc3RlbmVyKGUpIHsKKyAgICAgICAgICAgIGlmIChlLmRh
dGEgPT0gbWVzc2FnZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBleHBvcnRzLnN0b3BQcm9wYWdh
dGlvbihlKTsKKyAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKHdpbiwgIm1l
c3NhZ2UiLCBsaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHdpbi5wb3N0TWVzc2FnZShtZXNzYWdlTmFtZSwg
IioiKTsKKyAgICB9OworfQorCisKK2V4cG9ydHMubmV4dEZyYW1lID0gd2luZG93LnJlcXVlc3RB
bmltYXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8Cisg
ICAgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93Lm1velJlcXVl
c3RBbmltYXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJh
bWU7CisKK2lmIChleHBvcnRzLm5leHRGcmFtZSkKKyAgICBleHBvcnRzLm5leHRGcmFtZSA9IGV4
cG9ydHMubmV4dEZyYW1lLmJpbmQod2luZG93KTsKK2Vsc2UKKyAgICBleHBvcnRzLm5leHRGcmFt
ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDE3
KTsKKyAgICB9OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIva2V5cycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vb29wIik7Cit2YXIg
S2V5cyA9IChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmV0ID0geworICAgICAgICBNT0RJRklFUl9L
RVlTOiB7CisgICAgICAgICAgICAxNjogJ1NoaWZ0JywgMTc6ICdDdHJsJywgMTg6ICdBbHQnLCAy
MjQ6ICdNZXRhJworICAgICAgICB9LAorCisgICAgICAgIEtFWV9NT0RTOiB7CisgICAgICAgICAg
ICAiY3RybCI6IDEsICJhbHQiOiAyLCAib3B0aW9uIiA6IDIsCisgICAgICAgICAgICAic2hpZnQi
OiA0LCAibWV0YSI6IDgsICJjb21tYW5kIjogOAorICAgICAgICB9LAorCisgICAgICAgIEZVTkNU
SU9OX0tFWVMgOiB7CisgICAgICAgICAgICA4ICA6ICJCYWNrc3BhY2UiLAorICAgICAgICAgICAg
OSAgOiAiVGFiIiwKKyAgICAgICAgICAgIDEzIDogIlJldHVybiIsCisgICAgICAgICAgICAxOSA6
ICJQYXVzZSIsCisgICAgICAgICAgICAyNyA6ICJFc2MiLAorICAgICAgICAgICAgMzIgOiAiU3Bh
Y2UiLAorICAgICAgICAgICAgMzMgOiAiUGFnZVVwIiwKKyAgICAgICAgICAgIDM0IDogIlBhZ2VE
b3duIiwKKyAgICAgICAgICAgIDM1IDogIkVuZCIsCisgICAgICAgICAgICAzNiA6ICJIb21lIiwK
KyAgICAgICAgICAgIDM3IDogIkxlZnQiLAorICAgICAgICAgICAgMzggOiAiVXAiLAorICAgICAg
ICAgICAgMzkgOiAiUmlnaHQiLAorICAgICAgICAgICAgNDAgOiAiRG93biIsCisgICAgICAgICAg
ICA0NCA6ICJQcmludCIsCisgICAgICAgICAgICA0NSA6ICJJbnNlcnQiLAorICAgICAgICAgICAg
NDYgOiAiRGVsZXRlIiwKKyAgICAgICAgICAgIDk2IDogIk51bXBhZDAiLAorICAgICAgICAgICAg
OTcgOiAiTnVtcGFkMSIsCisgICAgICAgICAgICA5OCA6ICJOdW1wYWQyIiwKKyAgICAgICAgICAg
IDk5IDogIk51bXBhZDMiLAorICAgICAgICAgICAgMTAwOiAiTnVtcGFkNCIsCisgICAgICAgICAg
ICAxMDE6ICJOdW1wYWQ1IiwKKyAgICAgICAgICAgIDEwMjogIk51bXBhZDYiLAorICAgICAgICAg
ICAgMTAzOiAiTnVtcGFkNyIsCisgICAgICAgICAgICAxMDQ6ICJOdW1wYWQ4IiwKKyAgICAgICAg
ICAgIDEwNTogIk51bXBhZDkiLAorICAgICAgICAgICAgMTEyOiAiRjEiLAorICAgICAgICAgICAg
MTEzOiAiRjIiLAorICAgICAgICAgICAgMTE0OiAiRjMiLAorICAgICAgICAgICAgMTE1OiAiRjQi
LAorICAgICAgICAgICAgMTE2OiAiRjUiLAorICAgICAgICAgICAgMTE3OiAiRjYiLAorICAgICAg
ICAgICAgMTE4OiAiRjciLAorICAgICAgICAgICAgMTE5OiAiRjgiLAorICAgICAgICAgICAgMTIw
OiAiRjkiLAorICAgICAgICAgICAgMTIxOiAiRjEwIiwKKyAgICAgICAgICAgIDEyMjogIkYxMSIs
CisgICAgICAgICAgICAxMjM6ICJGMTIiLAorICAgICAgICAgICAgMTQ0OiAiTnVtbG9jayIsCisg
ICAgICAgICAgICAxNDU6ICJTY3JvbGxsb2NrIgorICAgICAgICB9LAorCisgICAgICAgIFBSSU5U
QUJMRV9LRVlTOiB7CisgICAgICAgICAgIDMyOiAnICcsICA0ODogJzAnLCAgNDk6ICcxJywgIDUw
OiAnMicsICA1MTogJzMnLCAgNTI6ICc0JywgNTM6ICAnNScsCisgICAgICAgICAgIDU0OiAnNics
ICA1NTogJzcnLCAgNTY6ICc4JywgIDU3OiAnOScsICA1OTogJzsnLCAgNjE6ICc9JywgNjU6ICAn
YScsCisgICAgICAgICAgIDY2OiAnYicsICA2NzogJ2MnLCAgNjg6ICdkJywgIDY5OiAnZScsICA3
MDogJ2YnLCAgNzE6ICdnJywgNzI6ICAnaCcsCisgICAgICAgICAgIDczOiAnaScsICA3NDogJ2on
LCAgNzU6ICdrJywgIDc2OiAnbCcsICA3NzogJ20nLCAgNzg6ICduJywgNzk6ICAnbycsCisgICAg
ICAgICAgIDgwOiAncCcsICA4MTogJ3EnLCAgODI6ICdyJywgIDgzOiAncycsICA4NDogJ3QnLCAg
ODU6ICd1JywgODY6ICAndicsCisgICAgICAgICAgIDg3OiAndycsICA4ODogJ3gnLCAgODk6ICd5
JywgIDkwOiAneicsIDEwNzogJysnLCAxMDk6ICctJywgMTEwOiAnLicsCisgICAgICAgICAgMTg4
OiAnLCcsIDE5MDogJy4nLCAxOTE6ICcvJywgMTkyOiAnYCcsIDIxOTogJ1snLCAyMjA6ICdcXCcs
CisgICAgICAgICAgMjIxOiAnXScsIDIyMjogJ1wnJworICAgICAgICB9CisgICAgfTsKKyAgICBm
b3IgKHZhciBpIGluIHJldC5GVU5DVElPTl9LRVlTKSB7CisgICAgICAgIHZhciBuYW1lID0gcmV0
LkZVTkNUSU9OX0tFWVNbaV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0W25hbWVdID0gcGFy
c2VJbnQoaSwgMTApOworICAgIH0KKyAgICBvb3AubWl4aW4ocmV0LCByZXQuTU9ESUZJRVJfS0VZ
Uyk7CisgICAgb29wLm1peGluKHJldCwgcmV0LlBSSU5UQUJMRV9LRVlTKTsKKyAgICBvb3AubWl4
aW4ocmV0LCByZXQuRlVOQ1RJT05fS0VZUyk7CisgICAgcmV0LmVudGVyID0gcmV0WyJyZXR1cm4i
XTsKKyAgICByZXQuZXNjYXBlID0gcmV0LmVzYzsKKyAgICByZXQuZGVsID0gcmV0WyJkZWxldGUi
XTsKKyAgICByZXRbMTczXSA9ICctJzsKKworICAgIHJldHVybiByZXQ7Cit9KSgpOworb29wLm1p
eGluKGV4cG9ydHMsIEtleXMpOworCitleHBvcnRzLmtleUNvZGVUb1N0cmluZyA9IGZ1bmN0aW9u
KGtleUNvZGUpIHsKKyAgICByZXR1cm4gKEtleXNba2V5Q29kZV0gfHwgU3RyaW5nLmZyb21DaGFy
Q29kZShrZXlDb2RlKSkudG9Mb3dlckNhc2UoKTsKK30KKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9saWIvb29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitleHBvcnRzLmluaGVyaXRzID0gKGZ1bmN0
aW9uKCkgeworICAgIHZhciB0ZW1wQ3RvciA9IGZ1bmN0aW9uKCkge307CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgeworICAgICAgICB0ZW1wQ3Rvci5wcm90b3R5cGUgPSBz
dXBlckN0b3IucHJvdG90eXBlOworICAgICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3Rvci5wcm90
b3R5cGU7CisgICAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IHRlbXBDdG9yKCk7CisgICAgICAg
IGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjsKKyAgICB9OworfSgpKTsKKworZXhw
b3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKKyAgICBmb3IgKHZhciBrZXkgaW4g
bWl4aW4pIHsKKyAgICAgICAgb2JqW2tleV0gPSBtaXhpbltrZXldOworICAgIH0KK307CisKK2V4
cG9ydHMuaW1wbGVtZW50ID0gZnVuY3Rpb24ocHJvdG8sIG1peGluKSB7CisgICAgZXhwb3J0cy5t
aXhpbihwcm90bywgbWl4aW4pOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvdXNl
cmFnZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK2V4cG9ydHMuT1MgPSB7CisgICAgTElOVVg6ICJMSU5V
WCIsCisgICAgTUFDOiAiTUFDIiwKKyAgICBXSU5ET1dTOiAiV0lORE9XUyIKK307CitleHBvcnRz
LmdldE9TID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKGV4cG9ydHMuaXNNYWMpIHsKKyAgICAgICAg
cmV0dXJuIGV4cG9ydHMuT1MuTUFDOworICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5pc0xpbnV4KSB7
CisgICAgICAgIHJldHVybiBleHBvcnRzLk9TLkxJTlVYOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiBleHBvcnRzLk9TLldJTkRPV1M7CisgICAgfQorfTsKK2lmICh0eXBlb2YgbmF2aWdh
dG9yICE9ICJvYmplY3QiKQorICAgIHJldHVybjsKKwordmFyIG9zID0gKG5hdmlnYXRvci5wbGF0
Zm9ybS5tYXRjaCgvbWFjfHdpbnxsaW51eC9pKSB8fCBbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNl
KCk7Cit2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworZXhwb3J0cy5pc1dpbiA9IChvcyA9
PSAid2luIik7CitleHBvcnRzLmlzTWFjID0gKG9zID09ICJtYWMiKTsKK2V4cG9ydHMuaXNMaW51
eCA9IChvcyA9PSAibGludXgiKTsKK2V4cG9ydHMuaXNJRSA9IAorICAgIChuYXZpZ2F0b3IuYXBw
TmFtZSA9PSAiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIiB8fCBuYXZpZ2F0b3IuYXBwTmFt
ZS5pbmRleE9mKCJNU0FwcEhvc3QiKSA+PSAwKQorICAgICYmIHBhcnNlRmxvYXQobmF2aWdhdG9y
LnVzZXJBZ2VudC5tYXRjaCgvTVNJRSAoWzAtOV0rW1wuMC05XSspLylbMV0pOworICAgIAorZXhw
b3J0cy5pc09sZElFID0gZXhwb3J0cy5pc0lFICYmIGV4cG9ydHMuaXNJRSA8IDk7CitleHBvcnRz
LmlzR2Vja28gPSBleHBvcnRzLmlzTW96aWxsYSA9IHdpbmRvdy5jb250cm9sbGVycyAmJiB3aW5k
b3cubmF2aWdhdG9yLnByb2R1Y3QgPT09ICJHZWNrbyI7CitleHBvcnRzLmlzT2xkR2Vja28gPSBl
eHBvcnRzLmlzR2Vja28gJiYgcGFyc2VJbnQoKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL3J2
XDooXGQrKS8pfHxbXSlbMV0sIDEwKSA8IDQ7CitleHBvcnRzLmlzT3BlcmEgPSB3aW5kb3cub3Bl
cmEgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSkgPT0gIltv
YmplY3QgT3BlcmFdIjsKK2V4cG9ydHMuaXNXZWJLaXQgPSBwYXJzZUZsb2F0KHVhLnNwbGl0KCJX
ZWJLaXQvIilbMV0pIHx8IHVuZGVmaW5lZDsKKworZXhwb3J0cy5pc0Nocm9tZSA9IHBhcnNlRmxv
YXQodWEuc3BsaXQoIiBDaHJvbWUvIilbMV0pIHx8IHVuZGVmaW5lZDsKKworZXhwb3J0cy5pc0FJ
UiA9IHVhLmluZGV4T2YoIkFkb2JlQUlSIikgPj0gMDsKKworZXhwb3J0cy5pc0lQYWQgPSB1YS5p
bmRleE9mKCJpUGFkIikgPj0gMDsKKworZXhwb3J0cy5pc1RvdWNoUGFkID0gdWEuaW5kZXhPZigi
VG91Y2hQYWQiKSA+PSAwOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRvcicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9maXhvbGRicm93c2VycycsICdh
Y2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2tl
eWJvYXJkL3RleHRpbnB1dCcsICdhY2UvbW91c2UvbW91c2VfaGFuZGxlcicsICdhY2UvbW91c2Uv
Zm9sZF9oYW5kbGVyJywgJ2FjZS9rZXlib2FyZC9rZXliaW5kaW5nJywgJ2FjZS9lZGl0X3Nlc3Np
b24nLCAnYWNlL3NlYXJjaCcsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywg
J2FjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXInLCAnYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29t
bWFuZHMnLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCityZXF1aXJlKCIuL2xpYi9maXhvbGRicm93c2VycyIpOworCit2YXIgb29wID0gcmVx
dWlyZSgiLi9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3Zh
ciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBUZXh0SW5wdXQg
PSByZXF1aXJlKCIuL2tleWJvYXJkL3RleHRpbnB1dCIpLlRleHRJbnB1dDsKK3ZhciBNb3VzZUhh
bmRsZXIgPSByZXF1aXJlKCIuL21vdXNlL21vdXNlX2hhbmRsZXIiKS5Nb3VzZUhhbmRsZXI7Cit2
YXIgRm9sZEhhbmRsZXIgPSByZXF1aXJlKCIuL21vdXNlL2ZvbGRfaGFuZGxlciIpLkZvbGRIYW5k
bGVyOwordmFyIEtleUJpbmRpbmcgPSByZXF1aXJlKCIuL2tleWJvYXJkL2tleWJpbmRpbmciKS5L
ZXlCaW5kaW5nOwordmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5F
ZGl0U2Vzc2lvbjsKK3ZhciBTZWFyY2ggPSByZXF1aXJlKCIuL3NlYXJjaCIpLlNlYXJjaDsKK3Zh
ciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBFdmVudEVtaXR0ZXIgPSBy
ZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIENvbW1hbmRN
YW5hZ2VyID0gcmVxdWlyZSgiLi9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiKS5Db21tYW5kTWFu
YWdlcjsKK3ZhciBkZWZhdWx0Q29tbWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2RlZmF1bHRf
Y29tbWFuZHMiKS5jb21tYW5kczsKK3ZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwor
dmFyIEVkaXRvciA9IGZ1bmN0aW9uKHJlbmRlcmVyLCBzZXNzaW9uKSB7CisgICAgdmFyIGNvbnRh
aW5lciA9IHJlbmRlcmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTsKKyAgICB0aGlzLmNvbnRhaW5l
ciA9IGNvbnRhaW5lcjsKKyAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7CisKKyAgICB0aGlz
LmNvbW1hbmRzID0gbmV3IENvbW1hbmRNYW5hZ2VyKHVzZXJhZ2VudC5pc01hYyA/ICJtYWMiIDog
IndpbiIsIGRlZmF1bHRDb21tYW5kcyk7CisgICAgdGhpcy50ZXh0SW5wdXQgID0gbmV3IFRleHRJ
bnB1dChyZW5kZXJlci5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLCB0aGlzKTsKKyAgICB0aGlzLnJl
bmRlcmVyLnRleHRhcmVhID0gdGhpcy50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOworICAgIHRoaXMu
a2V5QmluZGluZyA9IG5ldyBLZXlCaW5kaW5nKHRoaXMpOworICAgIHRoaXMuJG1vdXNlSGFuZGxl
ciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcyk7CisgICAgbmV3IEZvbGRIYW5kbGVyKHRoaXMpOwor
CisgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgPSAwOworICAgIHRoaXMuJHNlYXJjaCA9IG5ldyBT
ZWFyY2goKS5zZXQoeworICAgICAgICB3cmFwOiB0cnVlCisgICAgfSk7CisKKyAgICB0aGlzLnNl
dFNlc3Npb24oc2Vzc2lvbiB8fCBuZXcgRWRpdFNlc3Npb24oIiIpKTsKK307CisKKyhmdW5jdGlv
bigpeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMu
c2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2V5Ym9hcmRIYW5kbGVyKSB7CisgICAgICAg
IGlmICh0eXBlb2Yga2V5Ym9hcmRIYW5kbGVyID09ICJzdHJpbmciICYmIGtleWJvYXJkSGFuZGxl
cikgeworICAgICAgICAgICAgdGhpcy4ka2V5YmluZGluZ0lkID0ga2V5Ym9hcmRIYW5kbGVyOwor
ICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgICAgIGNvbmZpZy5sb2FkTW9k
dWxlKFsia2V5YmluZGluZyIsIGtleWJvYXJkSGFuZGxlcl0sIGZ1bmN0aW9uKG1vZHVsZSkgewor
ICAgICAgICAgICAgICAgIGlmIChfc2VsZi4ka2V5YmluZGluZ0lkID09IGtleWJvYXJkSGFuZGxl
cikKKyAgICAgICAgICAgICAgICAgICAgX3NlbGYua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRs
ZXIobW9kdWxlICYmIG1vZHVsZS5oYW5kbGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGtleWJpbmRpbmdJZDsKKyAgICAgICAg
ICAgIHRoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVyKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMua2V5QmluZGluZy5nZXRLZXlib2FyZEhhbmRsZXIo
KTsKKyAgICB9OworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAg
ICAgICAgaWYgKHRoaXMuc2Vzc2lvbiA9PSBzZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24pIHsKKyAgICAgICAgICAgIHZhciBvbGRTZXNzaW9u
ID0gdGhpcy5zZXNzaW9uOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlz
dGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UpOworICAgICAgICAgICAgdGhp
cy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZU1vZGUiLCB0aGlzLiRvbkNoYW5n
ZU1vZGUpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRv
a2VuaXplclVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKTsKKyAgICAgICAgICAgIHRo
aXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIiwgdGhpcy4kb25D
aGFuZ2VUYWJTaXplKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3Rl
bmVyKCJjaGFuZ2VXcmFwTGltaXQiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7CisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLCB0
aGlzLiRvbkNoYW5nZVdyYXBNb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVF
dmVudExpc3RlbmVyKCJvbkNoYW5nZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOworICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2Vy
IiwgdGhpcy4kb25DaGFuZ2VGcm9udE1hcmtlcik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24u
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsIHRoaXMuJG9uQ2hhbmdlQmFj
a01hcmtlcik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
Y2hhbmdlQnJlYWtwb2ludCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7CisgICAgICAgICAg
ICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQW5ub3RhdGlvbiIsIHRo
aXMuJG9uQ2hhbmdlQW5ub3RhdGlvbik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiY2hhbmdlT3ZlcndyaXRlIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOwor
ICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9s
bFRvcCIsIHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VMZWZ0VG9wIiwgdGhpcy4kb25TY3JvbGxMZWZ0
Q2hhbmdlKTsKKworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5nZXRT
ZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2VDdXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisgICAgICAgICAgICBzZWxlY3Rp
b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25TZWxlY3Rp
b25DaGFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsK
KworICAgICAgICB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlID0gdGhpcy5vbkRvY3VtZW50Q2hhbmdl
LmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwg
dGhpcy4kb25Eb2N1bWVudENoYW5nZSk7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2Vzc2lv
bihzZXNzaW9uKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hhbmdl
TW9kZS5iaW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5n
ZU1vZGUiLCB0aGlzLiRvbkNoYW5nZU1vZGUpOworCisgICAgICAgIHRoaXMuJG9uVG9rZW5pemVy
VXBkYXRlID0gdGhpcy5vblRva2VuaXplclVwZGF0ZS5iaW5kKHRoaXMpOworICAgICAgICBzZXNz
aW9uLmFkZEV2ZW50TGlzdGVuZXIoInRva2VuaXplclVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5pemVy
VXBkYXRlKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZVRhYlNpemUgPSB0aGlzLnJlbmRlcmVy
Lm9uQ2hhbmdlVGFiU2l6ZS5iaW5kKHRoaXMucmVuZGVyZXIpOworICAgICAgICBzZXNzaW9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNoYW5nZVRhYlNpemUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpOwor
CisgICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBMaW1p
dC5iaW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVdy
YXBMaW1pdCIsIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0KTsKKworICAgICAgICB0aGlzLiRvbkNo
YW5nZVdyYXBNb2RlID0gdGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyk7CisgICAgICAg
IHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLCB0aGlzLiRvbkNoYW5n
ZVdyYXBNb2RlKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZUZvbGQgPSB0aGlzLm9uQ2hhbmdl
Rm9sZC5iaW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5n
ZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlRnJv
bnRNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTsKKyAgICAgICAg
dGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIiwgdGhpcy4k
b25DaGFuZ2VGcm9udE1hcmtlcik7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2Vy
ID0gdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNz
aW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUJhY2tNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUJh
Y2tNYXJrZXIpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCA9IHRoaXMub25D
aGFuZ2VCcmVha3BvaW50LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVu
dExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50KTsK
KworICAgICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5ub3Rh
dGlvbi5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigi
Y2hhbmdlQW5ub3RhdGlvbiIsIHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbik7CisKKyAgICAgICAg
dGhpcy4kb25DdXJzb3JDaGFuZ2UgPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyk7Cisg
ICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUiLCB0
aGlzLiRvbkN1cnNvckNoYW5nZSk7CisKKyAgICAgICAgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2Ug
PSB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lv
bi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRvcENo
YW5nZSk7CisKKyAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNjcm9s
bExlZnRDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlz
dGVuZXIoImNoYW5nZVNjcm9sbExlZnQiLCB0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpOworCisg
ICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAg
dGhpcy5zZWxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25D
dXJzb3JDaGFuZ2UpOworCisgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5v
blNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRF
dmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7
CisKKyAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTsKKworICAgICAgICB0aGlzLiRibG9ja1Nj
cm9sbGluZyArPSAxOworICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7CisgICAgICAgIHRo
aXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgdGhpcy5vblNjcm9sbFRvcENoYW5n
ZSgpOworICAgICAgICB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpOworICAgICAgICB0aGlzLm9u
U2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpOwor
ICAgICAgICB0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpOworICAgICAgICB0aGlzLm9uQ2hhbmdl
QnJlYWtwb2ludCgpOworICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpOworICAgICAg
ICB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLnJlbmRlcmVyLmFkanVzdFdy
YXBMaW1pdCgpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKKworICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2VTZXNzaW9uIiwgeworICAgICAgICAgICAgc2Vzc2lvbjogc2Vz
c2lvbiwKKyAgICAgICAgICAgIG9sZFNlc3Npb246IG9sZFNlc3Npb24KKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2Vzc2lvbjsKKyAgICB9OworICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWws
IGN1cnNvclBvcykgeworICAgICAgICB0aGlzLnNlc3Npb24uZG9jLnNldFZhbHVlKHZhbCk7CisK
KyAgICAgICAgaWYgKCFjdXJzb3JQb3MpCisgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpOwor
ICAgICAgICBlbHNlIGlmIChjdXJzb3JQb3MgPT0gMSkKKyAgICAgICAgICAgIHRoaXMubmF2aWdh
dGVGaWxlRW5kKCk7CisgICAgICAgIGVsc2UgaWYgKGN1cnNvclBvcyA9PSAtMSkKKyAgICAgICAg
ICAgIHRoaXMubmF2aWdhdGVGaWxlU3RhcnQoKTsKKworICAgICAgICByZXR1cm4gdmFsOworICAg
IH07CisgICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5zZXNzaW9uLmdldFZhbHVlKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNlbGVjdGlvbiA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb247CisgICAgfTsKKyAgICB0
aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIub25S
ZXNpemUoZm9yY2UpOworICAgIH07CisgICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1l
KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0VGhlbWUodGhlbWUpOworICAgIH07CisgICAg
dGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJl
ci5nZXRUaGVtZSgpOworICAgIH07CisgICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxl
KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3R5bGUpOworICAgIH07CisgICAg
dGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJl
ci51bnNldFN0eWxlKHN0eWxlKTsKKyAgICB9OworICAgIHRoaXMuc2V0Rm9udFNpemUgPSBmdW5j
dGlvbihzaXplKSB7CisgICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PSAibnVtYmVyIikKKyAgICAg
ICAgICAgIHNpemUgPSBzaXplICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUu
Zm9udFNpemUgPSBzaXplOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZvbnRTaXplKCk7
CisgICAgfTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpIHsKKyAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0
KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCA9IG51bGw7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0UGVuZGluZykgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg
ICAgdGhpcy4kaGlnaGxpZ2h0UGVuZGluZyA9IHRydWU7CisgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBzZWxmLiRoaWdobGlnaHRQZW5kaW5nID0gZmFsc2U7CisK
KyAgICAgICAgICAgIHZhciBwb3MgPSBzZWxmLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldChz
ZWxmLmdldEN1cnNvclBvc2l0aW9uKCkpOworICAgICAgICAgICAgaWYgKHBvcykgeworICAgICAg
ICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mu
cm93LCBwb3MuY29sdW1uKzEpOworICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi4kYnJhY2tl
dEhpZ2hsaWdodCA9IHNlbGYuc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2VfYnJhY2tldCIs
ICJ0ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDUwKTsKKyAgICB9OworICAgIHRo
aXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIF9zZWxmLnRleHRJbnB1dC5m
b2N1cygpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICB9OworICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKTsKKyAgICB9OworICAgIHRoaXMuYmx1ciA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7CisgICAgfTsKKyAgICB0aGlz
Lm9uRm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuJGlzRm9jdXNlZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudmlz
dWFsaXplRm9jdXMoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiZm9jdXMiKTsKKyAgICB9OworICAg
IHRoaXMub25CbHVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy4kaXNGb2N1c2Vk
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRpc0ZvY3VzZWQgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIudmlzdWFsaXplQmx1cigpOworICAgICAgICB0aGlzLl9lbWl0KCJibHVyIik7CisgICAgfTsK
KworICAgIHRoaXMuJGN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgIH07CisgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdl
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZh
ciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgbGFzdFJvdzsKKworICAgICAgICBp
ZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgZGVsdGEuYWN0aW9uICE9ICJp
bnNlcnRMaW5lcyIgJiYgZGVsdGEuYWN0aW9uICE9ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAg
ICBsYXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGFz
dFJvdyA9IEluZmluaXR5OworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJhbmdl
LnN0YXJ0LnJvdywgbGFzdFJvdyk7CisKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgZSk7
CisgICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOworICAgIH07CisKKyAgICB0aGlzLm9uVG9r
ZW5pemVyVXBkYXRlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3Qp
OworICAgIH07CisKKworICAgIHRoaXMub25TY3JvbGxUb3BDaGFuZ2UgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRv
cCgpKTsKKyAgICB9OworICAgIAorICAgIHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9YKHRoaXMuc2Vzc2lvbi5nZXRT
Y3JvbGxMZWZ0KCkpOworICAgIH07CisgICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTsKKworICAgICAgICBpZiAoIXRoaXMu
JGJsb2NrU2Nyb2xsaW5nKSB7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNv
ckludG9WaWV3KCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRoaWdobGlnaHRCcmFja2V0
cygpOworICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgICAg
IHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgIH07CisKKyAgICB0aGlzLiR1cGRh
dGVIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9u
ID0gdGhpcy5nZXRTZXNzaW9uKCk7CisKKyAgICAgICAgdmFyIGhpZ2hsaWdodDsKKyAgICAgICAg
aWYgKHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUpIHsKKyAgICAgICAgICAgIGlmICgodGhpcy4k
c2VsZWN0aW9uU3R5bGUgIT0gImxpbmUiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgp
KSkKKyAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciAm
JiAhaGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9u
LiRoaWdobGlnaHRMaW5lTWFya2VyLmlkKTsKKyAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdo
dExpbmVNYXJrZXIgPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKCFzZXNzaW9uLiRoaWdobGln
aHRMaW5lTWFya2VyICYmIGhpZ2hsaWdodCkgeworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxp
Z2h0TGluZU1hcmtlciA9IHNlc3Npb24uaGlnaGxpZ2h0TGluZXMoaGlnaGxpZ2h0LnJvdywgaGln
aGxpZ2h0LnJvdywgImFjZV9hY3RpdmUtbGluZSIpOworICAgICAgICB9IGVsc2UgaWYgKGhpZ2hs
aWdodCkgeworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5y
b3cgPSBoaWdobGlnaHQucm93OworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1h
cmtlci5lbmQucm93ID0gaGlnaGxpZ2h0LnJvdzsKKyAgICAgICAgICAgIHNlc3Npb24uX2VtaXQo
ImNoYW5nZUJhY2tNYXJrZXIiKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLm9uU2Vs
ZWN0aW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMu
c2Vzc2lvbjsKKworICAgICAgICBpZiAoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKSB7CisgICAg
ICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIpOwor
ICAgICAgICB9CisgICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlciA9IG51bGw7CisKKyAg
ICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciBy
YW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc3R5bGUg
PSB0aGlzLmdldFNlbGVjdGlvblN0eWxlKCk7CisgICAgICAgICAgICBzZXNzaW9uLiRzZWxlY3Rp
b25NYXJrZXIgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHls
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRB
Y3RpdmVMaW5lKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGln
aHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCkKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLmhpZ2hsaWdodChyZSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0U2VsZWN0
aW9uSGlnaExpZ2h0UmVnZXhwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0g
dGhpcy5zZXNzaW9uOworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlv
blJhbmdlKCk7CisgICAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5p
c011bHRpTGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydE91
dGVyID0gc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiAtIDE7CisgICAgICAgIHZhciBlbmRPdXRlciA9
IHNlbGVjdGlvbi5lbmQuY29sdW1uICsgMTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdl
dExpbmUoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7CisgICAgICAgIHZhciBsaW5lQ29scyA9IGxpbmUu
bGVuZ3RoOworICAgICAgICB2YXIgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoTWF0aC5tYXgoc3Rh
cnRPdXRlciwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1p
bihlbmRPdXRlciwgbGluZUNvbHMpKTsKKyAgICAgICAgaWYgKChzdGFydE91dGVyID49IDAgJiYg
L15bXHdcZF0vLnRlc3QobmVlZGxlKSkgfHwKKyAgICAgICAgICAgIChlbmRPdXRlciA8PSBsaW5l
Q29scyAmJiAvW1x3XGRdJC8udGVzdChuZWVkbGUpKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBuZWVkbGUgPSBsaW5lLnN1YnN0cmluZyhzZWxlY3Rpb24uc3RhcnQuY29sdW1uLCBz
ZWxlY3Rpb24uZW5kLmNvbHVtbik7CisgICAgICAgIGlmICghL15bXHdcZF0rJC8udGVzdChuZWVk
bGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByZSA9IHRoaXMuJHNlYXJj
aC4kYXNzZW1ibGVSZWdFeHAoeworICAgICAgICAgICAgd2hvbGVXb3JkOiB0cnVlLAorICAgICAg
ICAgICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwKKyAgICAgICAgICAgIG5lZWRsZTogbmVlZGxlCisg
ICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZTsKKyAgICB9OworCisKKyAgICB0aGlzLm9u
Q2hhbmdlRnJvbnRNYXJrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51
cGRhdGVGcm9udE1hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJr
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2Vy
cygpOworICAgIH07CisKKworICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQnJlYWtwb2ludHMoKTsKKyAgICB9Owor
CisgICAgdGhpcy5vbkNoYW5nZUFubm90YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci5zZXRBbm5vdGF0aW9ucyh0aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSk7
CisgICAgfTsKKworCisgICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0KCk7CisgICAgfTsKKworCisgICAgdGhpcy5vbkNo
YW5nZVdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0
ZUZ1bGwoKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZVdyYXBNb2RlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIub25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworCisg
ICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdXBkYXRl
SGlnaGxpZ2h0QWN0aXZlTGluZSgpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwo
KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRDb3B5VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgdGV4dCA9ICIiOworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKSk7CisKKyAgICAgICAgdGhpcy5fZW1pdCgiY29weSIsIHRleHQpOworICAg
ICAgICByZXR1cm4gdGV4dDsKKyAgICB9OworICAgIHRoaXMub25Db3B5ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYygiY29weSIsIHRoaXMpOworICAgIH07CisgICAg
dGhpcy5vbkN1dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoImN1
dCIsIHRoaXMpOworICAgIH07CisgICAgdGhpcy5vblBhc3RlID0gZnVuY3Rpb24odGV4dCkgewor
ICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkpIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLl9lbWl0KCJwYXN0ZSIsIHRleHQpOworICAgICAgICB0aGlzLmluc2VydCh0ZXh0KTsK
KyAgICB9OworCisKKyAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgYXJn
cykgeworICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoY29tbWFuZCwgdGhpcywgYXJncyk7Cisg
ICAgfTsKKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIHNl
c3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBtb2RlID0gc2Vzc2lvbi5nZXRNb2Rl
KCk7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7CisKKyAg
ICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgdmFy
IHRyYW5zZm9ybSA9IG1vZGUudHJhbnNmb3JtQWN0aW9uKHNlc3Npb24uZ2V0U3RhdGUoY3Vyc29y
LnJvdyksICdpbnNlcnRpb24nLCB0aGlzLCBzZXNzaW9uLCB0ZXh0KTsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm0pCisgICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybS50ZXh0OworICAg
ICAgICB9CisKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHQiLCB0aGlzLnNlc3Npb24u
Z2V0VGFiU3RyaW5nKCkpOworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgY3Vyc29yID0gdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVj
dGlvblJhbmdlKCkpOworICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSkgeworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vyc29yLCBjdXJzb3Ip
OworICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArPSB0ZXh0Lmxlbmd0aDsKKyAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5jbGVhclNlbGVjdGlvbigpOworCisgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47
CisgICAgICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1cnNvci5yb3cpOwor
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
dmFyIHNob3VsZE91dGRlbnQgPSBtb2RlLmNoZWNrT3V0ZGVudChsaW5lU3RhdGUsIGxpbmUsIHRl
eHQpOworICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi5pbnNlcnQoY3Vyc29yLCB0ZXh0KTsKKwor
ICAgICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24pIHsKKyAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm0uc2VsZWN0aW9uLmxlbmd0aCA9PSAyKSB7IC8vIFRyYW5zZm9ybSBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjb2x1bW4KKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVj
dGlvbi5zZXRTZWxlY3Rpb25SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1
cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblsx
XSkpOworICAgICAgICAgICAgfSBlbHNlIHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IHJvdy4KKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25S
YW5nZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3cgKyB0cmFuc2Zv
cm0uc2VsZWN0aW9uWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3Jt
LnNlbGVjdGlvblsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3cg
KyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNmb3JtLnNlbGVjdGlvblszXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChzZXNzaW9uLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKHRleHQpKSB7CisgICAgICAg
ICAgICB2YXIgbGluZUluZGVudCA9IG1vZGUuZ2V0TmV4dExpbmVJbmRlbnQobGluZVN0YXRlLCBs
aW5lLnNsaWNlKDAsIGN1cnNvci5jb2x1bW4pLCBzZXNzaW9uLmdldFRhYlN0cmluZygpKTsKKwor
ICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oY3Vyc29yLnJvdysxLCAwKTsKKworICAgICAg
ICAgICAgdmFyIHNpemUgPSBzZXNzaW9uLmdldFRhYlNpemUoKTsKKyAgICAgICAgICAgIHZhciBt
aW5JbmRlbnQgPSBOdW1iZXIuTUFYX1ZBTFVFOworCisgICAgICAgICAgICBmb3IgKHZhciByb3cg
PSBjdXJzb3Iucm93ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7CisgICAgICAgICAgICAg
ICAgdmFyIGluZGVudCA9IDA7CisKKyAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRM
aW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoaSkgPT0gJ1x0JykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSBzaXplOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChsaW5lLmNoYXJBdChpKSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRlbnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKC9bXlxzXS8udGVzdChsaW5l
KSkKKyAgICAgICAgICAgICAgICAgICAgbWluSW5kZW50ID0gTWF0aC5taW4oaW5kZW50LCBtaW5J
bmRlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHZhciByb3cgPSBjdXJz
b3Iucm93ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7CisgICAgICAgICAgICAgICAgdmFy
IG91dGRlbnQgPSBtaW5JbmRlbnQ7CisKKyAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5n
ZXRMaW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxl
bmd0aCAmJiBvdXRkZW50ID4gMDsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5j
aGFyQXQoaSkgPT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRlbnQgLT0gc2l6
ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZS5jaGFyQXQoaSkgPT0gJyAnKQor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGVudCAtPSAxOworICAgICAgICAgICAgICAgIHNl
c3Npb24ucmVtb3ZlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgaSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2Vzc2lvbi5pbmRlbnRSb3dzKGN1cnNvci5yb3cgKyAxLCBlbmQucm93LCBs
aW5lSW5kZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxkT3V0ZGVudCkKKyAgICAg
ICAgICAgIG1vZGUuYXV0b091dGRlbnQobGluZVN0YXRlLCBzZXNzaW9uLCBjdXJzb3Iucm93KTsK
KyAgICB9OworCisgICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAg
ICAgdGhpcy5rZXlCaW5kaW5nLm9uVGV4dElucHV0KHRleHQpOworICAgIH07CisKKyAgICB0aGlz
Lm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkgeworICAgICAgICB0
aGlzLmtleUJpbmRpbmcub25Db21tYW5kS2V5KGUsIGhhc2hJZCwga2V5Q29kZSk7CisgICAgfTsK
KyAgICB0aGlzLnNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICB0
aGlzLnNlc3Npb24uc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7CisgICAgfTsKKyAgICB0aGlzLmdl
dE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdl
dE92ZXJ3cml0ZSgpOworICAgIH07CisgICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnRvZ2dsZU92ZXJ3cml0ZSgpOworICAgIH07Cisg
ICAgdGhpcy5zZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKHNwZWVkKSB7CisgICAgICAgIHRoaXMu
JG1vdXNlSGFuZGxlci5zZXRTY3JvbGxTcGVlZChzcGVlZCk7CisgICAgfTsKKyAgICB0aGlzLmdl
dFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRtb3VzZUhh
bmRsZXIuZ2V0U2Nyb2xsU3BlZWQoKTsKKyAgICB9OworICAgIHRoaXMuc2V0RHJhZ0RlbGF5ID0g
ZnVuY3Rpb24oZHJhZ0RlbGF5KSB7CisgICAgICAgIHRoaXMuJG1vdXNlSGFuZGxlci5zZXREcmFn
RGVsYXkoZHJhZ0RlbGF5KTsKKyAgICB9OworICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRtb3VzZUhhbmRsZXIuZ2V0RHJhZ0RlbGF5KCk7
CisgICAgfTsKKworICAgIHRoaXMuJHNlbGVjdGlvblN0eWxlID0gImxpbmUiOworICAgIHRoaXMu
c2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgeworICAgICAgICBpZiAodGhpcy4k
c2VsZWN0aW9uU3R5bGUgPT0gc3R5bGUpIHJldHVybjsKKworICAgICAgICB0aGlzLiRzZWxlY3Rp
b25TdHlsZSA9IHN0eWxlOworICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvblN0eWxlIiwge2RhdGE6IHN0eWxlfSk7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLiRzZWxlY3Rpb25TdHlsZTsKKyAgICB9OworCisgICAgdGhpcy4kaGlnaGxp
Z2h0QWN0aXZlTGluZSA9IHRydWU7CisgICAgdGhpcy5zZXRIaWdobGlnaHRBY3RpdmVMaW5lID0g
ZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRB
Y3RpdmVMaW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lID0gc2hvdWxkSGlnaGxpZ2h0OworICAgICAg
ICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgfTsKKyAgICB0aGlzLmdl
dEhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JGhpZ2hsaWdodEFjdGl2ZUxpbmU7CisgICAgfTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRl
ckxpbmUgPSB0cnVlOworICAgIHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9u
KHNob3VsZEhpZ2hsaWdodCkgeworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGlu
ZSA9PSBzaG91bGRIaWdobGlnaHQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5yZW5kZXJlci5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKHNob3VsZEhpZ2hsaWdodCk7CisgICAg
ICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBzaG91bGRIaWdobGlnaHQ7CisgICAgfTsK
KworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZTsKKyAgICB9OworCisgICAgdGhpcy4k
aGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gdHJ1ZTsKKyAgICB0aGlzLnNldEhpZ2hsaWdodFNlbGVj
dGVkV29yZCA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgeworICAgICAgICBpZiAodGhpcy4k
aGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBzaG91bGRIaWdo
bGlnaHQ7CisgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgfTsKKyAgICB0
aGlzLmdldEhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOworICAgIH07CisKKyAgICB0aGlzLnNldEFu
aW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7CisgICAgICAgIHRoaXMucmVu
ZGVyZXIuc2V0QW5pbWF0ZWRTY3JvbGwoc2hvdWxkQW5pbWF0ZSk7CisgICAgfTsKKworICAgIHRo
aXMuZ2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpeworICAgICAgICByZXR1cm4gdGhpcy5y
ZW5kZXJlci5nZXRBbmltYXRlZFNjcm9sbCgpOworICAgIH07CisgICAgdGhpcy5zZXRTaG93SW52
aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIuc2V0U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpOworICAgIH07CisgICAgdGhpcy5n
ZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5k
ZXJlci5nZXRTaG93SW52aXNpYmxlcygpOworICAgIH07CisKKyAgICB0aGlzLnNldERpc3BsYXlJ
bmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
c2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNwbGF5KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRE
aXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJl
bmRlcmVyLmdldERpc3BsYXlJbmRlbnRHdWlkZXMoKTsKKyAgICB9OworICAgIHRoaXMuc2V0U2hv
d1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7CisgICAgICAgIHRoaXMu
cmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKHNob3dQcmludE1hcmdpbik7CisgICAgfTsKKyAg
ICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5yZW5kZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuc2V0
UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihzaG93UHJpbnRNYXJnaW4pOworICAg
IH07CisgICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpOworICAgIH07CisK
KyAgICB0aGlzLiRyZWFkT25seSA9IGZhbHNlOworICAgIHRoaXMuc2V0UmVhZE9ubHkgPSBmdW5j
dGlvbihyZWFkT25seSkgeworICAgICAgICB0aGlzLiRyZWFkT25seSA9IHJlYWRPbmx5OworICAg
ICAgICB0aGlzLnRleHRJbnB1dC5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgICAgIHRoaXMu
cmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCFyZWFkT25seSk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFJlYWRPbmx5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRy
ZWFkT25seTsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZUJlaGF2aW91cnMgPSB0cnVlOworICAg
IHRoaXMuc2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAg
ICB0aGlzLiRtb2RlQmVoYXZpb3VycyA9IGVuYWJsZWQ7CisgICAgfTsKKyAgICB0aGlzLmdldEJl
aGF2aW91cnNFbmFibGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9k
ZUJlaGF2aW91cnM7CisgICAgfTsKKworICAgIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9IHRy
dWU7CisgICAgdGhpcy5zZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxl
ZCkgeworICAgICAgICB0aGlzLiRtb2RlV3JhcEJlaGF2aW91cnMgPSBlbmFibGVkOworICAgIH07
CisgICAgdGhpcy5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLiRtb2RlV3JhcEJlaGF2aW91cnM7CisgICAgfTsKKyAgICB0aGlzLnNl
dFNob3dGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgdmFyIGd1dHRlciA9
IHRoaXMucmVuZGVyZXIuJGd1dHRlckxheWVyOworICAgICAgICBpZiAoZ3V0dGVyLmdldFNob3dG
b2xkV2lkZ2V0cygpID09IHNob3cpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpOworICAgICAg
ICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OworICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUZ1bGwoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRTaG93
Rm9sZFdpZGdldHMoKTsKKyAgICB9OworCisgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBm
dW5jdGlvbihzaG93KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RmFkZUZvbGRXaWRnZXRz
KHNob3cpOworICAgIH07CisKKyAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRGYWRlRm9sZFdpZGdldHMoKTsK
KyAgICB9OworICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24oZGlyKSB7CisgICAgICAgIGlmICh0
aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpeworICAgICAgICAgICAgaWYgKGRpciA9PSAibGVmdCIp
CisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFJpZ2h0KCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7
CisgICAgICAgIGlmICh0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAg
IHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICAgICAgdmFyIHN0YXRlID0gc2Vz
c2lvbi5nZXRTdGF0ZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIG5ld19yYW5n
ZSA9IHNlc3Npb24uZ2V0TW9kZSgpLnRyYW5zZm9ybUFjdGlvbihzdGF0ZSwgJ2RlbGV0aW9uJywg
dGhpcywgc2Vzc2lvbiwgcmFuZ2UpOworICAgICAgICAgICAgaWYgKG5ld19yYW5nZSkKKyAgICAg
ICAgICAgICAgICByYW5nZSA9IG5ld19yYW5nZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
c2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgfTsKKyAgICB0aGlzLnJlbW92ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24u
c2VsZWN0V29yZFJpZ2h0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdl
dFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
fTsKKyAgICB0aGlzLnJlbW92ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0
aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxl
Y3RXb3JkTGVmdCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxl
Y3Rpb25SYW5nZSgpKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07Cisg
ICAgdGhpcy5yZW1vdmVUb0xpbmVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhp
cy5zZWxlY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0
TGluZVN0YXJ0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVj
dGlvblJhbmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAg
ICB0aGlzLnJlbW92ZVRvTGluZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5z
ZWxlY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGlu
ZUVuZCgpOworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsK
KyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSByYW5nZS5lbmQuY29sdW1uICYmIHJh
bmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAgICByYW5nZS5lbmQu
Y29sdW1uID0gMDsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3crKzsKKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhpcy5z
ZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICAgICAgdGhp
cy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1cnNvciA9IHRo
aXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdGhpcy5pbnNlcnQoIlxuIik7CisgICAg
ICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTsKKyAgICB9OworICAgIHRoaXMu
dHJhbnNwb3NlTGV0dGVycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0
aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGNv
bHVtbiA9IGN1cnNvci5jb2x1bW47CisgICAgICAgIGlmIChjb2x1bW4gPT09IDApCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShj
dXJzb3Iucm93KTsKKyAgICAgICAgdmFyIHN3YXAsIHJhbmdlOworICAgICAgICBpZiAoY29sdW1u
IDwgbGluZS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4p
ICsgbGluZS5jaGFyQXQoY29sdW1uLTEpOworICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2Uo
Y3Vyc29yLnJvdywgY29sdW1uLTEsIGN1cnNvci5yb3csIGNvbHVtbisxKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4tMSkg
KyBsaW5lLmNoYXJBdChjb2x1bW4tMik7CisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShj
dXJzb3Iucm93LCBjb2x1bW4tMiwgY3Vyc29yLnJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgc3dhcCk7CisgICAgfTsKKyAgICB0aGlz
LnRvTG93ZXJDYXNlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBvcmlnaW5hbFJhbmdlID0g
dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7Cisg
ICAgICAgIHZhciB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0LnRvTG93ZXJDYXNlKCkpOworICAg
ICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShvcmlnaW5hbFJhbmdlKTsKKyAg
ICB9OworICAgIHRoaXMudG9VcHBlckNhc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG9y
aWdpbmFsUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIGlmICh0aGlz
LnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVj
dFdvcmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UoKTsKKyAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdl
KHJhbmdlKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9VcHBl
ckNhc2UoKSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdp
bmFsUmFuZ2UpOworICAgIH07CisgICAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMu
Z2V0U2VsZWN0aW9uUmFuZ2UoKTsKKworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgcmFu
Z2UuZW5kLnJvdyB8fCByYW5nZS5zdGFydC5jb2x1bW4gPCByYW5nZS5lbmQuY29sdW1uKSB7Cisg
ICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICAg
ICAgc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgIlx0Iik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5kZW50U3RyaW5nOworCisgICAgICAgICAg
ICBpZiAodGhpcy5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgc2l6ZSAgICAgICAgPSBzZXNzaW9uLmdldFRhYlNpemUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgcG9zaXRpb24gICAgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCksCisgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbiAgICAgID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKHBvc2l0
aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICAgY291bnQgICAg
ICAgPSAoc2l6ZSAtIGNvbHVtbiAlIHNpemUpOworCisgICAgICAgICAgICAgICAgaW5kZW50U3Ry
aW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBjb3VudCk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBpbmRlbnRTdHJpbmcgPSAiXHQiOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaW5zZXJ0KGluZGVudFN0cmluZyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMu
YmxvY2tJbmRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRT
ZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJz
dCwgcm93cy5sYXN0LCAiXHQiKTsKKyAgICB9OworICAgIHRoaXMuYmxvY2tPdXRkZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlc3Npb24uZ2V0U2VsZWN0
aW9uKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5vdXRkZW50Um93cyhzZWxlY3Rpb24uZ2V0UmFu
Z2UoKSk7CisgICAgfTsKKyAgICB0aGlzLnNvcnRMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB2YXIgc2Vzc2lv
biA9IHRoaXMuc2Vzc2lvbjsKKworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgZm9y
IChpID0gcm93cy5maXJzdDsgaSA8PSByb3dzLmxhc3Q7IGkrKykKKyAgICAgICAgICAgIGxpbmVz
LnB1c2goc2Vzc2lvbi5nZXRMaW5lKGkpKTsKKworICAgICAgICBsaW5lcy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsKKyAgICAgICAgICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNl
KCkpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPiBiLnRvTG93
ZXJDYXNlKCkpIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOwor
CisgICAgICAgIHZhciBkZWxldGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IHJvd3MuZmlyc3Q7IGkgPD0gcm93cy5sYXN0OyBpKyspIHsKKyAgICAg
ICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGkpOworICAgICAgICAgICAgZGVsZXRl
UmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBp
OworICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoOworICAg
ICAgICAgICAgc2Vzc2lvbi5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBsaW5lc1tpLXJvd3MuZmlyc3Rd
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zZXNzaW9uLmdldFN0YXRlKHRoaXMu
Z2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cpOworICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNl
bGVjdGVkUm93cygpOworICAgICAgICB0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUNvbW1l
bnRMaW5lcyhzdGF0ZSwgdGhpcy5zZXNzaW9uLCByb3dzLmZpcnN0LCByb3dzLmxhc3QpOworICAg
IH07CisgICAgdGhpcy5nZXROdW1iZXJBdCA9IGZ1bmN0aW9uKCByb3csIGNvbHVtbiApIHsKKyAg
ICAgICAgdmFyIF9udW1iZXJSeCA9IC9bXC1dP1swLTldKyg/OlwuWzAtOV0rKT8vZworICAgICAg
ICBfbnVtYmVyUngubGFzdEluZGV4ID0gMAorCisgICAgICAgIHZhciBzID0gdGhpcy5zZXNzaW9u
LmdldExpbmUocm93KQorICAgICAgICB3aGlsZShfbnVtYmVyUngubGFzdEluZGV4IDwgY29sdW1u
IC0gMSApeworICAgICAgICAgICAgdmFyIG0gPSBfbnVtYmVyUnguZXhlYyhzKQorICAgICAgICAg
ICAgaWYobS5pbmRleCA8PSBjb2x1bW4gJiYgbS5pbmRleCttWzBdLmxlbmd0aCA+PSBjb2x1bW4p
eworICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSB7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlOiBtWzBdLAorICAgICAgICAgICAgICAgICAgICBzdGFydDogbS5pbmRleCwKKyAgICAgICAg
ICAgICAgICAgICAgZW5kOiBtLmluZGV4K21bMF0ubGVuZ3RoCisKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgdGhpcy5tb2RpZnlOdW1iZXIgPSBm
dW5jdGlvbihhbW91bnQpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMuc2VsZWN0aW9uLmdldEN1
cnNvcigpLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNv
cigpLmNvbHVtbjsKKyAgICAgICAgdmFyIGNoYXJSYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVt
bi0xLCByb3csIGNvbHVtbik7CisKKyAgICAgICAgdmFyIGMgPSB0aGlzLnNlc3Npb24uZ2V0VGV4
dFJhbmdlKGNoYXJSYW5nZSk7CisgICAgICAgIGlmICghaXNOYU4ocGFyc2VGbG9hdChjKSkgJiYg
aXNGaW5pdGUoYykpIHsKKyAgICAgICAgICAgIHZhciBuciA9IHRoaXMuZ2V0TnVtYmVyQXQocm93
LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKG5yKSB7CisgICAgICAgICAgICAgICAgdmFyIGZw
ID0gbnIudmFsdWUuaW5kZXhPZigiLiIpID49IDAgPyBuci5zdGFydCArIG5yLnZhbHVlLmluZGV4
T2YoIi4iKSArIDEgOiBuci5lbmQ7CisgICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxzID0gbnIu
c3RhcnQgKyBuci52YWx1ZS5sZW5ndGggLSBmcDsKKworICAgICAgICAgICAgICAgIHZhciB0ID0g
cGFyc2VGbG9hdChuci52YWx1ZSk7CisgICAgICAgICAgICAgICAgdCAqPSBNYXRoLnBvdygxMCwg
ZGVjaW1hbHMpOworICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgaWYoZnAgIT09
IG5yLmVuZCAmJiBjb2x1bW4gPCBmcCl7CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAqPSBN
YXRoLnBvdygxMCwgbnIuZW5kIC0gY29sdW1uIC0gMSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBj
b2x1bW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB0ICs9IGFtb3VudDsKKyAgICAgICAgICAgICAgICB0IC89IE1hdGgucG93KDEwLCBkZWNp
bWFscyk7CisgICAgICAgICAgICAgICAgdmFyIG5uciA9IHQudG9GaXhlZChkZWNpbWFscyk7Cisg
ICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VSYW5nZSA9IG5ldyBSYW5nZShyb3csIG5yLnN0YXJ0
LCByb3csIG5yLmVuZCk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmVw
bGFjZVJhbmdlLCBubnIpOworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywg
TWF0aC5tYXgobnIuc3RhcnQgKzEsIGNvbHVtbiArIG5uci5sZW5ndGggLSBuci52YWx1ZS5sZW5n
dGgpKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnJlbW92
ZUxpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0
ZWRSb3dzKCk7CisgICAgICAgIHZhciByYW5nZTsKKyAgICAgICAgaWYgKHJvd3MuZmlyc3QgPT09
IDAgfHwgcm93cy5sYXN0KzEgPCB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkpCisgICAgICAgICAg
ICByYW5nZSA9IG5ldyBSYW5nZShyb3dzLmZpcnN0LCAwLCByb3dzLmxhc3QrMSwgMCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKAorICAgICAgICAgICAgICAg
IHJvd3MuZmlyc3QtMSwgdGhpcy5zZXNzaW9uLmdldExpbmUocm93cy5maXJzdC0xKS5sZW5ndGgs
CisgICAgICAgICAgICAgICAgcm93cy5sYXN0LCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dzLmxh
c3QpLmxlbmd0aAorICAgICAgICAgICAgKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShy
YW5nZSk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworCisgICAgdGhp
cy5kdXBsaWNhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbCA9IHRo
aXMuc2VsZWN0aW9uOworICAgICAgICB2YXIgZG9jID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2
YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGRv
Yy5kdXBsaWNhdGVMaW5lcyhyb3csIHJvdyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgcmV2ZXJzZSA9IHNlbC5pc0JhY2t3YXJkcygpCisgICAgICAgICAgICB2YXIgcG9pbnQg
PSBzZWwuaXNCYWNrd2FyZHMoKSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworICAgICAgICAg
ICAgdmFyIGVuZFBvaW50ID0gZG9jLmluc2VydChwb2ludCwgZG9jLmdldFRleHRSYW5nZShyYW5n
ZSksIGZhbHNlKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0ID0gcG9pbnQ7CisgICAgICAgICAg
ICByYW5nZS5lbmQgPSBlbmRQb2ludDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VsLnNl
dFNlbGVjdGlvblJhbmdlKHJhbmdlLCByZXZlcnNlKQorICAgICAgICB9CisgICAgfTsKKyAgICB0
aGlzLm1vdmVMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUxpbmVz
KGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5z
ZXNzaW9uLm1vdmVMaW5lc0Rvd24oZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4k
bW92ZUxpbmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5zZXNzaW9uLm1vdmVMaW5lc1VwKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24ocmFuZ2UsIHRvUG9zaXRp
b24pIHsKKyAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlVGV4dChyYW5nZSwgdG9Qb3Np
dGlvbik7CisgICAgfTsKKyAgICB0aGlzLmNvcHlMaW5lc1VwID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuY29weUxp
bmVzRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24o
Zmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZHVw
bGljYXRlTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB9KTsKKyAgICB9OworICAg
IHRoaXMuJG1vdmVMaW5lcyA9IGZ1bmN0aW9uKG1vdmVyKSB7CisgICAgICAgIHZhciByb3dzID0g
dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNl
bGVjdGlvbjsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSkgeworICAgICAg
ICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIg
cmV2ZXJzZSA9IHNlbGVjdGlvbi5pc0JhY2t3YXJkcygpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGxpbmVzTW92ZWQgPSBtb3Zlci5jYWxsKHRoaXMsIHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7
CisKKyAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgKz0g
bGluZXNNb3ZlZDsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgKz0gbGluZXNNb3ZlZDsKKyAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmV2ZXJzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0
aW9uQW5jaG9yKHJvd3MubGFzdCtsaW5lc01vdmVkKzEsIDApOworICAgICAgICAgICAgc2VsZWN0
aW9uLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi5tb3ZlQ3Vyc29yVG8ocm93cy5maXJzdCtsaW5lc01vdmVkLCAwKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLiRnZXRTZWxlY3RlZFJvd3MgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLmNvbGxh
cHNlUm93cygpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmaXJzdDogcmFuZ2Uu
c3RhcnQucm93LAorICAgICAgICAgICAgbGFzdDogcmFuZ2UuZW5kLnJvdworICAgICAgICB9Owor
ICAgIH07CisKKyAgICB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uKHRleHQpIHsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q29tcG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3Np
dGlvbigpKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rp
b24odGV4dCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbXBvc2l0aW9uVGV4dCh0ZXh0
KTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUNvbXBvc2l0aW9uKCk7CisgICAgfTsKKyAgICB0aGlz
LmdldEZpcnN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5y
ZW5kZXJlci5nZXRGaXJzdFZpc2libGVSb3coKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFZp
c2libGVSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0
TGFzdFZpc2libGVSb3coKTsKKyAgICB9OworICAgIHRoaXMuaXNSb3dWaXNpYmxlID0gZnVuY3Rp
b24ocm93KSB7CisgICAgICAgIHJldHVybiAocm93ID49IHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93
KCkgJiYgcm93IDw9IHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKSk7CisgICAgfTsKKyAgICB0aGlz
LmlzUm93RnVsbHlWaXNpYmxlID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiAocm93
ID49IHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSAmJiByb3cgPD0gdGhp
cy5yZW5kZXJlci5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkpOworICAgIH07CisgICAgdGhpcy4k
Z2V0VmlzaWJsZVJvd0NvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJl
bmRlcmVyLmdldFNjcm9sbEJvdHRvbVJvdygpIC0gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxUb3BS
b3coKSArIDE7CisgICAgfTsKKworICAgIHRoaXMuJG1vdmVCeVBhZ2UgPSBmdW5jdGlvbihkaXIs
IHNlbGVjdCkgeworICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyOworICAgICAg
ICB2YXIgY29uZmlnID0gdGhpcy5yZW5kZXJlci5sYXllckNvbmZpZzsKKyAgICAgICAgdmFyIHJv
d3MgPSBkaXIgKiBNYXRoLmZsb29yKGNvbmZpZy5oZWlnaHQgLyBjb25maWcubGluZUhlaWdodCk7
CisKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcrKzsKKyAgICAgICAgaWYgKHNlbGVjdCA9
PSB0cnVlKSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KHJvd3MsIDApOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ID09IGZhbHNlKSB7CisgICAg
ICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkocm93cywgMCk7CisgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuJGJsb2NrU2Nyb2xsaW5nLS07CisKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHJlbmRlcmVy
LnNjcm9sbFRvcDsKKworICAgICAgICByZW5kZXJlci5zY3JvbGxCeSgwLCByb3dzICogY29uZmln
LmxpbmVIZWlnaHQpOworICAgICAgICBpZiAoc2VsZWN0ICE9IG51bGwpCisgICAgICAgICAgICBy
ZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUpOworCisgICAgICAgIHJlbmRl
cmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
UGFnZURvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCB0cnVl
KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0UGFnZVVwID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJG1vdmVCeVBhZ2UoLTEsIHRydWUpOworICAgIH07CisgICAgdGhpcy5nb3RvUGFnZURv
d24gPSBmdW5jdGlvbigpIHsKKyAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEsIGZhbHNlKTsKKyAg
ICB9OworICAgIHRoaXMuZ290b1BhZ2VVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRt
b3ZlQnlQYWdlKC0xLCBmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFBhZ2VEb3duID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSk7CisgICAgfTsKKyAgICB0
aGlzLnNjcm9sbFBhZ2VVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlQnlQYWdl
KC0xKTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsVG9Sb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAg
ICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1Jvdyhyb3cpOworICAgIH07CisgICAgdGhpcy5z
Y3JvbGxUb0xpbmUgPSBmdW5jdGlvbihsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKSB7
CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9MaW5lKGxpbmUsIGNlbnRlciwgYW5pbWF0
ZSwgY2FsbGJhY2spOworICAgIH07CisgICAgdGhpcy5jZW50ZXJTZWxlY3Rpb24gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAg
ICAgICB2YXIgcG9zID0geworICAgICAgICAgICAgcm93OiBNYXRoLmZsb29yKHJhbmdlLnN0YXJ0
LnJvdyArIChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93KSAvIDIpLAorICAgICAgICAg
ICAgY29sdW1uOiBNYXRoLmZsb29yKHJhbmdlLnN0YXJ0LmNvbHVtbiArIChyYW5nZS5lbmQuY29s
dW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSAvIDIpCisgICAgICAgIH0KKyAgICAgICAgdGhpcy5y
ZW5kZXJlci5hbGlnbkN1cnNvcihwb3MsIDAuNSk7CisgICAgfTsKKyAgICB0aGlzLmdldEN1cnNv
clBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5n
ZXRDdXJzb3IoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25TY3JlZW4gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVu
UG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKTsKKyAgICB9OworICAgIHRoaXMuZ2V0
U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0
aW9uLmdldFJhbmdlKCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOworICAgICAgICB0aGlzLnNlbGVj
dGlvbi5zZWxlY3RBbGwoKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKyAg
ICB9OworICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNv
clRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92
ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvUG9z
aXRpb24gPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNv
clRvUG9zaXRpb24ocG9zKTsKKyAgICB9OworICAgIHRoaXMuanVtcFRvTWF0Y2hpbmcgPSBmdW5j
dGlvbihzZWxlY3QpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRp
b24oKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdl
KGN1cnNvcik7CisgICAgICAgIGlmICghcmFuZ2UpIHsKKyAgICAgICAgICAgIHJhbmdlID0gdGhp
cy5maW5kKHsKKyAgICAgICAgICAgICAgICBuZWVkbGU6IC9be30oKVxbXF1dL2csCisgICAgICAg
ICAgICAgICAgcHJldmVudFNjcm9sbDp0cnVlLAorICAgICAgICAgICAgICAgIHN0YXJ0OiB7cm93
OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW4gLSAxfQorICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHZhciBwb3MgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgIGlmIChwb3Mucm93ID09
IGN1cnNvci5yb3cgJiYgTWF0aC5hYnMocG9zLmNvbHVtbiAtIGN1cnNvci5jb2x1bW4pIDwgMikK
KyAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRCcmFja2V0UmFuZ2UocG9z
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcG9zID0gcmFuZ2UgJiYgcmFuZ2UuY3Vy
c29yIHx8IHBvczsKKyAgICAgICAgaWYgKHBvcykgeworICAgICAgICAgICAgaWYgKHNlbGVjdCkg
eworICAgICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc0VxdWFsKHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24o
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0
aW9uLnNlbGVjdFRvKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ290b0xpbmUgPSBmdW5jdGlvbihsaW5lTnVtYmVy
LCBjb2x1bW4sIGFuaW1hdGUpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rp
b24oKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OiBsaW5lTnVtYmVyIC0gMSwg
Y29sdW1uOiBjb2x1bW4gfHwgMH0pOworCisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9
IDE7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxpbmVOdW1iZXIgLSAxLCBjb2x1bW4gfHwg
MCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgaWYgKCF0
aGlzLmlzUm93RnVsbHlWaXNpYmxlKGxpbmVOdW1iZXIgLSAxKSkKKyAgICAgICAgICAgIHRoaXMu
c2Nyb2xsVG9MaW5lKGxpbmVOdW1iZXIgLSAxLCB0cnVlLCBhbmltYXRlKTsKKyAgICB9OworICAg
IHRoaXMubmF2aWdhdGVUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHRoaXMu
Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4p
OworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVVwID0gZnVuY3Rpb24odGltZXMpIHsKKyAgICAg
ICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGltZXMgPSB0aW1l
cyB8fCAxOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLXRpbWVzLCAwKTsK
KyAgICB9OworICAgIHRoaXMubmF2aWdhdGVEb3duID0gZnVuY3Rpb24odGltZXMpIHsKKyAgICAg
ICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGltZXMgPSB0aW1l
cyB8fCAxOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkodGltZXMsIDApOwor
ICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZUxlZnQgPSBmdW5jdGlvbih0aW1lcykgeworICAgICAg
ICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdmFyIHNlbGVj
dGlvblN0YXJ0ID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLnN0YXJ0OworICAgICAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgICAg
ICB3aGlsZSAodGltZXMtLSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVD
dXJzb3JMZWZ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5jbGVh
clNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVJpZ2h0ID0gZnVuY3Rpb24o
dGltZXMpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuZW5kOwor
ICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzZWxlY3Rpb25FbmQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGltZXMgPSB0aW1lcyB8fCAxOwor
ICAgICAgICAgICAgd2hpbGUgKHRpbWVzLS0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVj
dGlvbi5tb3ZlQ3Vyc29yUmlnaHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGluZVN0
YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5l
U3RhcnQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhp
cy5uYXZpZ2F0ZUxpbmVFbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24u
bW92ZUN1cnNvckxpbmVFbmQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAg
IH07CisgICAgdGhpcy5uYXZpZ2F0ZUZpbGVFbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IHNjcm9sbFRvcCA9IHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9wOworICAgICAgICB0aGlzLnNlbGVj
dGlvbi5tb3ZlQ3Vyc29yRmlsZUVuZCgpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgIHRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOworICAg
IH07CisgICAgdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgc2Nyb2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMuc2Vs
ZWN0aW9uLm1vdmVDdXJzb3JGaWxlU3RhcnQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsK
KyAgICB9OworICAgIHRoaXMubmF2aWdhdGVXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRSaWdodCgpOworICAgICAgICB0aGlzLmNs
ZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlV29yZExlZnQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRMZWZ0KCk7Cisg
ICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZSA9
IGZ1bmN0aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zKQor
ICAgICAgICAgICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKKworICAgICAgICB2YXIgcmFu
Z2UgPSB0aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOworICAgICAgICB2YXIgcmVwbGFj
ZWQgPSAwOworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2Vk
OworCisgICAgICAgIGlmICh0aGlzLiR0cnlSZXBsYWNlKHJhbmdlLCByZXBsYWNlbWVudCkpIHsK
KyAgICAgICAgICAgIHJlcGxhY2VkID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmFuZ2Ug
IT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdl
KHJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1Zp
ZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cmVwbGFjZWQ7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihyZXBsYWNl
bWVudCwgb3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucykgeworICAgICAgICAgICAgdGhp
cy4kc2VhcmNoLnNldChvcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZXMg
PSB0aGlzLiRzZWFyY2guZmluZEFsbCh0aGlzLnNlc3Npb24pOworICAgICAgICB2YXIgcmVwbGFj
ZWQgPSAwOworICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4g
cmVwbGFjZWQ7CisKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKworICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB0aGlz
LmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbygw
LCAwKTsKKworICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgICAgICBpZih0aGlzLiR0cnlSZXBsYWNlKHJhbmdlc1tpXSwgcmVwbGFj
ZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZWQrKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHNlbGVj
dGlvbik7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgcmV0
dXJuIHJlcGxhY2VkOworICAgIH07CisKKyAgICB0aGlzLiR0cnlSZXBsYWNlID0gZnVuY3Rpb24o
cmFuZ2UsIHJlcGxhY2VtZW50KSB7CisgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuc2Vzc2lvbi5n
ZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICByZXBsYWNlbWVudCA9IHRoaXMuJHNlYXJjaC5y
ZXBsYWNlKGlucHV0LCByZXBsYWNlbWVudCk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0g
bnVsbCkgeworICAgICAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFu
Z2UsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICB0
aGlzLmdldExhc3RTZWFyY2hPcHRpb25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLiRzZWFyY2guZ2V0T3B0aW9ucygpOworICAgIH07CisgICAgdGhpcy5maW5kID0gZnVuY3Rp
b24obmVlZGxlLCBvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIGlmICghb3B0aW9ucykKKyAg
ICAgICAgICAgIG9wdGlvbnMgPSB7fTsKKworICAgICAgICBpZiAodHlwZW9mIG5lZWRsZSA9PSAi
c3RyaW5nIiB8fCBuZWVkbGUgaW5zdGFuY2VvZiBSZWdFeHApCisgICAgICAgICAgICBvcHRpb25z
Lm5lZWRsZSA9IG5lZWRsZTsKKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5lZWRsZSA9PSAib2Jq
ZWN0IikKKyAgICAgICAgICAgIG9vcC5taXhpbihvcHRpb25zLCBuZWVkbGUpOworCisgICAgICAg
IHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgIGlmIChvcHRp
b25zLm5lZWRsZSA9PSBudWxsKSB7CisgICAgICAgICAgICBuZWVkbGUgPSB0aGlzLnNlc3Npb24u
Z2V0VGV4dFJhbmdlKHJhbmdlKQorICAgICAgICAgICAgICAgIHx8IHRoaXMuJHNlYXJjaC4kb3B0
aW9ucy5uZWVkbGU7CisgICAgICAgICAgICBpZiAoIW5lZWRsZSkgeworICAgICAgICAgICAgICAg
IHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdl
LnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAgbmVlZGxlID0gdGhpcy5zZXNzaW9uLmdl
dFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRzZWFy
Y2guc2V0KHtuZWVkbGU6IG5lZWRsZX0pOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4kc2Vh
cmNoLnNldChvcHRpb25zKTsKKyAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KQorICAgICAgICAg
ICAgdGhpcy4kc2VhcmNoLnNldCh7c3RhcnQ6IHJhbmdlfSk7CisKKyAgICAgICAgdmFyIG5ld1Jh
bmdlID0gdGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTsKKyAgICAgICAgaWYgKG9wdGlv
bnMucHJldmVudFNjcm9sbCkKKyAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICAgICAg
aWYgKG5ld1JhbmdlKSB7CisgICAgICAgICAgICB0aGlzLnJldmVhbFJhbmdlKG5ld1JhbmdlLCBh
bmltYXRlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAob3B0aW9ucy5iYWNrd2FyZHMpCisgICAgICAgICAgICByYW5nZS5zdGFydCA9IHJhbmdl
LmVuZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQ7
CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKKyAgICB9OworICAgIHRo
aXMuZmluZE5leHQgPSBmdW5jdGlvbihvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMu
ZmluZCh7c2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2V9LCBvcHRpb25zLCBhbmlt
YXRlKTsKKyAgICB9OworICAgIHRoaXMuZmluZFByZXZpb3VzID0gZnVuY3Rpb24ob3B0aW9ucywg
YW5pbWF0ZSkgeworICAgICAgICB0aGlzLmZpbmQob3B0aW9ucywge3NraXBDdXJyZW50OiB0cnVl
LCBiYWNrd2FyZHM6IHRydWV9LCBhbmltYXRlKTsKKyAgICB9OworCisgICAgdGhpcy5yZXZlYWxS
YW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuJGJsb2NrU2Ny
b2xsaW5nICs9IDE7CisgICAgICAgIHRoaXMuc2Vzc2lvbi51bmZvbGQocmFuZ2UpOworICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSk7CisgICAgICAgIHRoaXMu
JGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMucmVu
ZGVyZXIuc2Nyb2xsVG9wOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbklu
dG9WaWV3KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIDAuNSk7CisgICAgICAgIGlmIChhbmltYXRl
ICE9IGZhbHNlKQorICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNj
cm9sbFRvcCk7CisgICAgfTsKKyAgICB0aGlzLnVuZG8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kYmxvY2tTY3JvbGxpbmcrKzsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5h
Z2VyKCkudW5kbygpOworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tOworICAgICAgICB0
aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7CisgICAgfTsKKyAg
ICB0aGlzLnJlZG8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcr
KzsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkucmVkbygpOworICAgICAg
ICB0aGlzLiRibG9ja1Njcm9sbGluZy0tOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1
cnNvckludG9WaWV3KG51bGwsIDAuNSk7CisgICAgfTsKKyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5kZXN0cm95KCk7CisgICAgfTsKKworfSku
Y2FsbChFZGl0b3IucHJvdG90eXBlKTsKKworCitleHBvcnRzLkVkaXRvciA9IEVkaXRvcjsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbGliL2xhbmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9y
dHMuc3RyaW5nUmV2ZXJzZSA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBzdHJpbmcu
c3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsKK307CisKK2V4cG9ydHMuc3RyaW5nUmVwZWF0
ID0gZnVuY3Rpb24gKHN0cmluZywgY291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gJyc7CisgICAg
d2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgICBpZiAoY291bnQgJiAxKQorICAgICAgICAgICAg
cmVzdWx0ICs9IHN0cmluZzsKKworICAgICAgICBpZiAoY291bnQgPj49IDEpCisgICAgICAgICAg
ICBzdHJpbmcgKz0gc3RyaW5nOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKKwordmFy
IHRyaW1CZWdpblJlZ2V4cCA9IC9eXHNccyovOwordmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyok
LzsKKworZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICBy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cit9OworCitleHBvcnRz
LnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4gc3RyaW5n
LnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgJycpOworfTsKKworZXhwb3J0cy5jb3B5T2JqZWN0ID0g
ZnVuY3Rpb24ob2JqKSB7CisgICAgdmFyIGNvcHkgPSB7fTsKKyAgICBmb3IgKHZhciBrZXkgaW4g
b2JqKSB7CisgICAgICAgIGNvcHlba2V5XSA9IG9ialtrZXldOworICAgIH0KKyAgICByZXR1cm4g
Y29weTsKK307CisKK2V4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpeworICAgIHZh
ciBjb3B5ID0gW107CisgICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKysp
IHsKKyAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikK
KyAgICAgICAgICAgIGNvcHlbaV0gPSB0aGlzLmNvcHlPYmplY3QoIGFycmF5W2ldICk7CisgICAg
ICAgIGVsc2UgCisgICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07CisgICAgfQorICAgIHJl
dHVybiBjb3B5OworfTsKKworZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIChvYmopIHsKKyAg
ICBpZiAodHlwZW9mIG9iaiAhPSAib2JqZWN0IikgeworICAgICAgICByZXR1cm4gb2JqOworICAg
IH0KKyAgICAKKyAgICB2YXIgY29weSA9IG9iai5jb25zdHJ1Y3RvcigpOworICAgIGZvciAodmFy
IGtleSBpbiBvYmopIHsKKyAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PSAib2JqZWN0Iikg
eworICAgICAgICAgICAgY29weVtrZXldID0gdGhpcy5kZWVwQ29weShvYmpba2V5XSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gY29weTsKK307CisKK2V4cG9ydHMuYXJyYXlUb01hcCA9IGZ1
bmN0aW9uKGFycikgeworICAgIHZhciBtYXAgPSB7fTsKKyAgICBmb3IgKHZhciBpPTA7IGk8YXJy
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG1hcFthcnJbaV1dID0gMTsKKyAgICB9CisgICAgcmV0
dXJuIG1hcDsKKworfTsKKworZXhwb3J0cy5jcmVhdGVNYXAgPSBmdW5jdGlvbihwcm9wcykgewor
ICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgIGZvciAodmFyIGkgaW4gcHJv
cHMpIHsKKyAgICAgICAgbWFwW2ldID0gcHJvcHNbaV07CisgICAgfQorICAgIHJldHVybiBtYXA7
Cit9OworZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgeworICBm
b3IgKHZhciBpID0gMDsgaSA8PSBhcnJheS5sZW5ndGg7IGkrKykgeworICAgIGlmICh2YWx1ZSA9
PT0gYXJyYXlbaV0pIHsKKyAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKKyAgICB9CisgIH0KK307
CisKK2V4cG9ydHMuZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cit9OworCitleHBv
cnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKKyAgICByZXR1cm4gc3RyLnJlcGxhY2Uo
LyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5
OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cit9OworCitleHBvcnRzLmdldE1hdGNoT2Zmc2V0
cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CisgICAgdmFyIG1hdGNoZXMgPSBbXTsKKwor
ICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CisgICAgICAgIG1hdGNo
ZXMucHVzaCh7CisgICAgICAgICAgICBvZmZzZXQ6IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3Ro
LTJdLAorICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCisgICAgICAgIH0pOworICAgIH0p
OworCisgICAgcmV0dXJuIG1hdGNoZXM7Cit9OworZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5j
dGlvbihmY24pIHsKKworICAgIHZhciB0aW1lciA9IG51bGw7CisgICAgdmFyIGNhbGxiYWNrID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRpbWVyID0gbnVsbDsKKyAgICAgICAgZmNuKCk7CisgICAg
fTsKKworICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKKyAgICAgICAgZGVm
ZXJyZWQuY2FuY2VsKCk7CisgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGlt
ZW91dCB8fCAwKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgIH07CisKKyAgICBkZWZl
cnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOworCisgICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLmNhbmNlbCgpOworICAgICAgICBmY24oKTsKKyAgICAgICAgcmV0
dXJuIGRlZmVycmVkOworICAgIH07CisKKyAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAgdGltZXIgPSBudWxsOwor
ICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfTsKKworICAgIHJldHVybiBkZWZlcnJlZDsK
K307CisKKworZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVv
dXQpIHsKKyAgICB2YXIgdGltZXIgPSBudWxsOworICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aW1lciA9IG51bGw7CisgICAgICAgIGZjbigpOworICAgIH07CisKKyAg
ICB2YXIgX3NlbGYgPSBmdW5jdGlvbih0aW1lb3V0KSB7CisgICAgICAgIHRpbWVyICYmIGNsZWFy
VGltZW91dCh0aW1lcik7CisgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGlt
ZW91dCB8fCBkZWZhdWx0VGltZW91dCk7CisgICAgfTsKKworICAgIF9zZWxmLmRlbGF5ID0gX3Nl
bGY7CisgICAgX3NlbGYuc2NoZWR1bGUgPSBmdW5jdGlvbih0aW1lb3V0KSB7CisgICAgICAgIGlm
ICh0aW1lciA9PSBudWxsKQorICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNr
LCB0aW1lb3V0IHx8IDApOworICAgIH07CisKKyAgICBfc2VsZi5jYWxsID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuY2FuY2VsKCk7CisgICAgICAgIGZjbigpOworICAgIH07CisKKyAgICBf
c2VsZi5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0
KHRpbWVyKTsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAgIH07CisKKyAgICBfc2VsZi5pc1Bl
bmRpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRpbWVyOworICAgIH07CisKKyAg
ICByZXR1cm4gX3NlbGY7Cit9OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9rZXlib2FyZC90ZXh0
aW5wdXQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQn
LCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9sYW5nJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBldmVudCA9IHJlcXVp
cmUoIi4uL2xpYi9ldmVudCIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2Vy
YWdlbnQiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cit2YXIgbGFuZyA9IHJl
cXVpcmUoIi4uL2xpYi9sYW5nIik7Cit2YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXND
aHJvbWUgPCAxODsKKwordmFyIFRleHRJbnB1dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGhvc3Qp
IHsKKyAgICB2YXIgdGV4dCA9IGRvbS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOworICAgIHRl
eHQuY2xhc3NOYW1lID0gImFjZV90ZXh0LWlucHV0IjsKKyAgICBpZiAodXNlcmFnZW50LmlzVG91
Y2hQYWQpCisgICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCJ4LXBhbG0tZGlzYWJsZS1hdXRvLWNh
cCIsIHRydWUpOworCisgICAgdGV4dC53cmFwID0gIm9mZiI7CisgICAgdGV4dC5hdXRvY29ycmVj
dCA9ICJvZmYiOworICAgIHRleHQuYXV0b2NhcGl0YWxpemUgPSAib2ZmIjsKKyAgICB0ZXh0LnNw
ZWxsY2hlY2sgPSBmYWxzZTsKKworICAgIHRleHQuc3R5bGUuYm90dG9tID0gIjIwMDBlbSI7Cisg
ICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgcGFyZW50Tm9kZS5maXJzdENoaWxkKTsK
KworICAgIHZhciBQTEFDRUhPTERFUiA9ICJceDAxXHgwMSI7CisKKyAgICB2YXIgY3V0ID0gZmFs
c2U7CisgICAgdmFyIGNvcGllZCA9IGZhbHNlOworICAgIHZhciBwYXN0ZWQgPSBmYWxzZTsKKyAg
ICB2YXIgaW5Db21wb3N0aW9uID0gZmFsc2U7CisgICAgdmFyIHRlbXBTdHlsZSA9ICcnOworICAg
IHZhciBpc1NlbGVjdGlvbkVtcHR5ID0gdHJ1ZTsKKyAgICB0cnkgeyB2YXIgaXNGb2N1c2VkID0g
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGV4dDsgfSBjYXRjaChlKSB7fQorICAgIAorICAg
IGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJibHVyIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGhv
c3Qub25CbHVyKCk7CisgICAgICAgIGlzRm9jdXNlZCA9IGZhbHNlOworICAgIH0pOworICAgIGV2
ZW50LmFkZExpc3RlbmVyKHRleHQsICJmb2N1cyIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpc0Zv
Y3VzZWQgPSB0cnVlOworICAgICAgICBob3N0Lm9uRm9jdXMoKTsKKyAgICAgICAgcmVzZXRTZWxl
Y3Rpb24oKTsKKyAgICB9KTsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7IHRleHQuZm9j
dXMoKTsgfTsKKyAgICB0aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsgdGV4dC5ibHVyKCk7IH07Cisg
ICAgdGhpcy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGlzRm9jdXNl
ZDsKKyAgICB9OworICAgIHZhciBzeW5jU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChmdW5j
dGlvbigpIHsKKyAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKGlzU2VsZWN0aW9u
RW1wdHkpOworICAgIH0pOworICAgIHZhciBzeW5jVmFsdWUgPSBsYW5nLmRlbGF5ZWRDYWxsKGZ1
bmN0aW9uKCkgeworICAgICAgICAgaWYgKCFpbkNvbXBvc3Rpb24pIHsKKyAgICAgICAgICAgIHRl
eHQudmFsdWUgPSBQTEFDRUhPTERFUjsKKyAgICAgICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNl
bGVjdGlvbigpOworICAgICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rpb24gcmVzZXRTZWxl
Y3Rpb24oaXNFbXB0eSkgeworICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0VtcHR5ID8gMiA6IDE7Cisg
ICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSAyOworICAgICAgICB0cnkgeworICAgICAgICAgICAg
dGV4dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAg
ICAgICAgfSBjYXRjaChlKXt9CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVzZXRWYWx1ZSgpIHsK
KyAgICAgICAgaWYgKGluQ29tcG9zdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dGV4dC52YWx1ZSA9IFBMQUNFSE9MREVSOworICAgICAgICBpZiAodXNlcmFnZW50LmlzV2ViS2l0
KQorICAgICAgICAgICAgc3luY1ZhbHVlLnNjaGVkdWxlKCk7CisgICAgfQorCisgICAgdXNlcmFn
ZW50LmlzV2ViS2l0IHx8IGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlU2VsZWN0aW9uJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkgIT0gaXNT
ZWxlY3Rpb25FbXB0eSkgeworICAgICAgICAgICAgaXNTZWxlY3Rpb25FbXB0eSA9ICFpc1NlbGVj
dGlvbkVtcHR5OworICAgICAgICAgICAgc3luY1NlbGVjdGlvbi5zY2hlZHVsZSgpOworICAgICAg
ICB9CisgICAgfSk7CisKKyAgICByZXNldFZhbHVlKCk7CisgICAgaWYgKGlzRm9jdXNlZCkKKyAg
ICAgICAgaG9zdC5vbkZvY3VzKCk7CisKKworICAgIHZhciBpc0FsbFNlbGVjdGVkID0gZnVuY3Rp
b24odGV4dCkgeworICAgICAgICByZXR1cm4gdGV4dC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiB0
ZXh0LnNlbGVjdGlvbkVuZCA9PT0gdGV4dC52YWx1ZS5sZW5ndGg7CisgICAgfTsKKyAgICBpZiAo
IXRleHQuc2V0U2VsZWN0aW9uUmFuZ2UgJiYgdGV4dC5jcmVhdGVUZXh0UmFuZ2UpIHsKKyAgICAg
ICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlVGV4dFJhbmdl
KCk7CisgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsKKyAgICAgICAgICAgIHJhbmdl
Lm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICAgICAgcmFu
Z2UubW92ZUVuZCgnY2hhcmFjdGVyJywgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgICAgIHJhbmdl
LnNlbGVjdCgpOworICAgICAgICB9OworICAgICAgICBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24o
dGV4dCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0
ZXh0Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgICB9
Y2F0Y2goZSkge30KKyAgICAgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVu
dCgpICE9IHRleHQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2Uu
dGV4dCA9PSB0ZXh0LnZhbHVlOworICAgICAgICB9CisgICAgfQorICAgIGlmICh1c2VyYWdlbnQu
aXNPbGRJRSkgeworICAgICAgICB2YXIgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOworICAgICAg
ICB2YXIgb25Qcm9wZXJ0eUNoYW5nZSA9IGZ1bmN0aW9uKGUpeworICAgICAgICAgICAgaWYgKGlu
UHJvcGVydHlDaGFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFy
IGRhdGEgPSB0ZXh0LnZhbHVlOworICAgICAgICAgICAgaWYgKGluQ29tcG9zdGlvbiB8fCAhZGF0
YSB8fCBkYXRhID09IFBMQUNFSE9MREVSKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmIChlICYmIGRhdGEgPT0gUExBQ0VIT0xERVJbMF0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIHN5bmNQcm9wZXJ0eS5zY2hlZHVsZSgpOworCisgICAgICAgICAgICBzZW5kVGV4dChk
YXRhKTsKKyAgICAgICAgICAgIGluUHJvcGVydHlDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAg
cmVzZXRWYWx1ZSgpOworICAgICAgICAgICAgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOworICAg
ICAgICB9OworICAgICAgICB2YXIgc3luY1Byb3BlcnR5ID0gbGFuZy5kZWxheWVkQ2FsbChvblBy
b3BlcnR5Q2hhbmdlKTsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInByb3BlcnR5
Y2hhbmdlIiwgb25Qcm9wZXJ0eUNoYW5nZSk7CisKKyAgICAgICAgdmFyIGtleXRhYmxlID0geyAx
MzoxLCAyNzoxIH07CisgICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJrZXl1cCIsIGZ1
bmN0aW9uIChlKSB7CisgICAgICAgICAgICBpZiAoaW5Db21wb3N0aW9uICYmICghdGV4dC52YWx1
ZSB8fCBrZXl0YWJsZVtlLmtleUNvZGVdKSkKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG9u
Q29tcG9zaXRpb25FbmQsIDApOworICAgICAgICAgICAgaWYgKCh0ZXh0LnZhbHVlLmNoYXJDb2Rl
QXQoMCl8fDApIDwgMTI5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaW5Db21wb3N0aW9uID8gb25Db21wb3NpdGlvblVwZGF0ZSgpIDogb25D
b21wb3NpdGlvblN0YXJ0KCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZhciBvblNlbGVj
dCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGN1dCkgeworICAgICAgICAgICAgY3V0ID0g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvcGll
ZCkgeworICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHsKKyAgICAgICAgICAg
IGhvc3Quc2VsZWN0QWxsKCk7CisgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAg
ICAgaWYgKHBhc3RlZCkgeworICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKKyAgICAgICAg
ICAgIGlmIChkYXRhKQorICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTsKKyAgICAg
ICAgICAgIHBhc3RlZCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gUExBQ0VI
T0xERVJbMF0pIHsKKyAgICAgICAgICAgIGhvc3QuZXhlY0NvbW1hbmQoImRlbCIsIHtzb3VyY2U6
ICJhY2UifSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZGF0YS5zdWJzdHJp
bmcoMCwgMikgPT0gUExBQ0VIT0xERVIpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vi
c3RyKDIpOworICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVswXSA9PSBQTEFDRUhPTERFUlswXSkK
KyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHIoMSk7CisgICAgICAgICAgICBlbHNl
IGlmIChkYXRhW2RhdGEubGVuZ3RoIC0gMV0gPT0gUExBQ0VIT0xERVJbMF0pCisgICAgICAgICAg
ICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpOworICAgICAgICAgICAgaWYgKGRhdGFbZGF0
YS5sZW5ndGggLSAxXSA9PSBQTEFDRUhPTERFUlswXSkKKyAgICAgICAgICAgICAgICBkYXRhID0g
ZGF0YS5zbGljZSgwLCAtMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkYXRhKQor
ICAgICAgICAgICAgICAgIGhvc3Qub25UZXh0SW5wdXQoZGF0YSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoaW5Db21wb3N0
aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgZGF0YSA9IHRleHQudmFsdWU7
CisgICAgICAgIHJlc2V0VmFsdWUoKTsKKworICAgICAgICBzZW5kVGV4dChkYXRhKTsKKyAgICB9
OworCisgICAgdmFyIG9uQ3V0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGF0YSA9IGhv
c3QuZ2V0Q29weVRleHQoKTsKKyAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlw
Ym9hcmREYXRhOworCisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFU
QSkgeworICAgICAgICAgICAgdmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgi
VGV4dCIsIGRhdGEpOworICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAgICAgICAg
ICAgIGhvc3Qub25DdXQoKTsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3VwcG9ydGVkKSB7
CisgICAgICAgICAgICBjdXQgPSB0cnVlOworICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGRhdGE7
CisgICAgICAgICAgICB0ZXh0LnNlbGVjdCgpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgIGN1dCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJl
c2V0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOworICAgICAgICAg
ICAgICAgIGhvc3Qub25DdXQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsK
KworICAgIHZhciBvbkNvcHkgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkYXRhID0gaG9z
dC5nZXRDb3B5VGV4dCgpOworICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBi
b2FyZERhdGE7CisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFUQSkg
eworICAgICAgICAgICAgdmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4
dCIsIGRhdGEpOworICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAg
IGhvc3Qub25Db3B5KCk7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdXBwb3J0ZWQpIHsKKyAg
ICAgICAgICAgIGNvcGllZCA9IHRydWU7CisgICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTsK
KyAgICAgICAgICAgIHRleHQuc2VsZWN0KCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCl7CisgICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
cmVzZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgaG9zdC5vbkNvcHkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fTsKKworICAgIHZhciBvblBhc3RlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgY2xpcGJv
YXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKKworICAg
ICAgICBpZiAoY2xpcGJvYXJkRGF0YSkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBjbGlwYm9h
cmREYXRhLmdldERhdGEoIlRleHQiKTsKKyAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAg
ICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTsKKyAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNJ
RSkKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc2V0U2VsZWN0aW9uKTsKKyAgICAgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdGV4dC52YWx1ZSA9ICIiOworICAgICAgICAgICAgcGFzdGVkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBldmVudC5hZGRDb21tYW5kS2V5TGlzdGVuZXIodGV4
dCwgaG9zdC5vbkNvbW1hbmRLZXkuYmluZChob3N0KSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5l
cih0ZXh0LCAic2VsZWN0Iiwgb25TZWxlY3QpOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4
dCwgImlucHV0Iiwgb25JbnB1dCk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY3V0
Iiwgb25DdXQpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb3B5Iiwgb25Db3B5KTsK
KyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAicGFzdGUiLCBvblBhc3RlKTsKKyAgICBpZiAo
ISgnb25jdXQnIGluIHRleHQpIHx8ICEoJ29uY29weScgaW4gdGV4dCkgfHwgISgnb25wYXN0ZScg
aW4gdGV4dCkpeworICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihwYXJlbnROb2RlLCAia2V5ZG93
biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGlmICgodXNlcmFnZW50LmlzTWFjICYmICFl
Lm1ldGFLZXkpIHx8ICFlLmN0cmxLZXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSA2NzoKKyAgICAg
ICAgICAgICAgICAgICAgb25Db3B5KGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDg2OgorICAgICAgICAgICAgICAgICAgICBvblBhc3RlKGUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDg4OgorICAg
ICAgICAgICAgICAgICAgICBvbkN1dChlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICB2YXIgb25Db21wb3NpdGlvblN0
YXJ0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpbkNvbXBvc3Rpb24gPSB0cnVlOworICAgICAg
ICBob3N0Lm9uQ29tcG9zaXRpb25TdGFydCgpOworICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9z
aXRpb25VcGRhdGUsIDApOworICAgIH07CisKKyAgICB2YXIgb25Db21wb3NpdGlvblVwZGF0ZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIWluQ29tcG9zdGlvbikgcmV0dXJuOworICAgICAg
ICBob3N0Lm9uQ29tcG9zaXRpb25VcGRhdGUodGV4dC52YWx1ZSk7CisgICAgfTsKKworICAgIHZh
ciBvbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpbkNvbXBvc3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uRW5kKCk7CisgICAgfTsKKworICAg
IHZhciBzeW5jQ29tcG9zaXRpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKG9uQ29tcG9zaXRpb25VcGRh
dGUsIDUwKTsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb21wb3NpdGlvbnN0YXJ0
Iiwgb25Db21wb3NpdGlvblN0YXJ0KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCB1c2Vy
YWdlbnQuaXNHZWNrbyA/ICJ0ZXh0IiA6ICJrZXl1cCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0
aW9uLnNjaGVkdWxlKCl9KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29tcG9zaXRp
b25lbmQiLCBvbkNvbXBvc2l0aW9uRW5kKTsKKworICAgIHRoaXMuZ2V0RWxlbWVudCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9OworCisgICAgdGhpcy5zZXRSZWFk
T25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAgICAgdGV4dC5yZWFkT25seSA9IHJlYWRP
bmx5OworICAgIH07CisKKyAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIGlmICghdGVtcFN0eWxlKQorICAgICAgICAgICAgdGVtcFN0eWxlID0gdGV4dC5zdHls
ZS5jc3NUZXh0OworCisgICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9ICJ6LWluZGV4OjEwMDAw
MDsiICsgKHVzZXJhZ2VudC5pc0lFID8gIm9wYWNpdHk6MC4xOyIgOiAiIik7CisKKyAgICAgICAg
cmVzZXRTZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTsKKyAgICAgICAgaG9zdC5f
ZW1pdCgibmF0aXZlY29udGV4dG1lbnUiLCB7dGFyZ2V0OiBob3N0fSk7CisgICAgICAgIHZhciBy
ZWN0ID0gaG9zdC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIHZh
ciBtb3ZlID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5j
bGllbnRYIC0gcmVjdC5sZWZ0IC0gMiArICJweCI7CisgICAgICAgICAgICB0ZXh0LnN0eWxlLnRv
cCA9IGUuY2xpZW50WSAtIHJlY3QudG9wIC0gMiArICJweCI7CisgICAgICAgIH07CisgICAgICAg
IG1vdmUoZSk7CisKKyAgICAgICAgaWYgKGUudHlwZSAhPSAibW91c2Vkb3duIikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAoaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRD
dXJzb3IpCisgICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9
IG51bGw7CisgICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pCisgICAgICAgICAgICBldmVudC5j
YXB0dXJlKGhvc3QuY29udGFpbmVyLCBtb3ZlLCBvbkNvbnRleHRNZW51Q2xvc2UpOworICAgIH07
CisKKyAgICB0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSA9IG9uQ29udGV4dE1lbnVDbG9zZTsKKyAg
ICBmdW5jdGlvbiBvbkNvbnRleHRNZW51Q2xvc2UoKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkgeworICAgICAgICAgICAgICAg
IHRleHQuc3R5bGUuY3NzVGV4dCA9IHRlbXBTdHlsZTsKKyAgICAgICAgICAgICAgICB0ZW1wU3R5
bGUgPSAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRr
ZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaG9zdC5yZW5k
ZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGhvc3Qu
cmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sIDApOworICAgIH0KKyAgICBpZiAoIXVzZXJhZ2VudC5pc0dlY2tvKSB7CisgICAgICAgIGV2
ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgICAgIGhvc3QudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZSk7CisgICAgICAgICAgICBvbkNv
bnRleHRNZW51Q2xvc2UoKTsKKyAgICAgICAgfSk7CisgICAgfQorfTsKKworZXhwb3J0cy5UZXh0
SW5wdXQgPSBUZXh0SW5wdXQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2hh
bmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQn
LCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCAnYWNl
L21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCAnYWNlL21vdXNlL21vdXNlX2V2ZW50Jywg
J2FjZS9tb3VzZS9kcmFnZHJvcCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKK3ZhciB1c2VyYWdl
bnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgRGVmYXVsdEhhbmRsZXJzID0g
cmVxdWlyZSgiLi9kZWZhdWx0X2hhbmRsZXJzIikuRGVmYXVsdEhhbmRsZXJzOwordmFyIERlZmF1
bHRHdXR0ZXJIYW5kbGVyID0gcmVxdWlyZSgiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIikuR3V0
dGVySGFuZGxlcjsKK3ZhciBNb3VzZUV2ZW50ID0gcmVxdWlyZSgiLi9tb3VzZV9ldmVudCIpLk1v
dXNlRXZlbnQ7Cit2YXIgRHJhZ2Ryb3BIYW5kbGVyID0gcmVxdWlyZSgiLi9kcmFnZHJvcCIpLkRy
YWdkcm9wSGFuZGxlcjsKKwordmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewor
ICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworCisgICAgbmV3IERlZmF1bHRIYW5kbGVycyh0aGlz
KTsKKyAgICBuZXcgRGVmYXVsdEd1dHRlckhhbmRsZXIodGhpcyk7CisgICAgbmV3IERyYWdkcm9w
SGFuZGxlcih0aGlzKTsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5jb250YWluZXIs
ICJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGVkaXRvci5mb2N1cygpOworICAg
ICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgfSk7CisKKyAgICB2YXIg
bW91c2VUYXJnZXQgPSBlZGl0b3IucmVuZGVyZXIuZ2V0TW91c2VFdmVudFRhcmdldCgpOworICAg
IGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiY2xpY2siLCB0aGlzLm9uTW91c2VFdmVu
dC5iaW5kKHRoaXMsICJjbGljayIpKTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdl
dCwgIm1vdXNlbW92ZSIsIHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzLCAibW91c2Vtb3ZlIikp
OworICAgIGV2ZW50LmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIobW91c2VUYXJnZXQsIFszMDAs
IDMwMCwgMjUwXSwgdGhpcywgIm9uTW91c2VFdmVudCIpOworICAgIGV2ZW50LmFkZE1vdXNlV2hl
ZWxMaXN0ZW5lcihlZGl0b3IuY29udGFpbmVyLCB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMs
ICJtb3VzZXdoZWVsIikpOworCisgICAgdmFyIGd1dHRlckVsID0gZWRpdG9yLnJlbmRlcmVyLiRn
dXR0ZXI7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJtb3VzZWRvd24iLCB0aGlz
Lm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJtb3VzZWRvd24iKSk7CisgICAgZXZlbnQu
YWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJjbGljayIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhp
cywgImd1dHRlcmNsaWNrIikpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAiZGJs
Y2xpY2siLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJkYmxjbGljayIpKTsK
KyAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgIm1vdXNlbW92ZSIsIHRoaXMub25Nb3Vz
ZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcm1vdXNlbW92ZSIpKTsKK307CisKKyhmdW5jdGlvbigp
IHsKKworICAgIHRoaXMuJHNjcm9sbFNwZWVkID0gMTsKKyAgICB0aGlzLnNldFNjcm9sbFNwZWVk
ID0gZnVuY3Rpb24oc3BlZWQpIHsKKyAgICAgICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSBzcGVlZDsK
KyAgICB9OworCisgICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kc2Nyb2xsU3BlZWQ7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZUV2
ZW50ID0gZnVuY3Rpb24obmFtZSwgZSkgeworICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1l
LCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikpOworICAgIH07CisKKyAgICB0aGlzLiRk
cmFnRGVsYXkgPSAyNTA7CisgICAgdGhpcy5zZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVs
YXkpIHsKKyAgICAgICAgdGhpcy4kZHJhZ0RlbGF5ID0gZHJhZ0RlbGF5OworICAgIH07CisKKyAg
ICB0aGlzLmdldERyYWdEZWxheSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
ZHJhZ0RlbGF5OworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24obmFt
ZSwgZSkgeworICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0
cnkgJiYgdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkubW91c2Vtb3ZlOworICAgICAgICBpZiAo
IWxpc3RlbmVycyB8fCAhbGlzdGVuZXJzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVk
aXRvcikpOworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKG5hbWUs
IGUpIHsKKyAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVk
aXRvcik7CisgICAgICAgIG1vdXNlRXZlbnQuc3BlZWQgPSB0aGlzLiRzY3JvbGxTcGVlZCAqIDI7
CisgICAgICAgIG1vdXNlRXZlbnQud2hlZWxYID0gZS53aGVlbFg7CisgICAgICAgIG1vdXNlRXZl
bnQud2hlZWxZID0gZS53aGVlbFk7CisKKyAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQobmFtZSwg
bW91c2VFdmVudCk7CisgICAgfTsKKworICAgIHRoaXMuc2V0U3RhdGUgPSBmdW5jdGlvbihzdGF0
ZSkgeworICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CisgICAgfTsKKworICAgIHRoaXMuY2Fw
dHVyZU1vdXNlID0gZnVuY3Rpb24oZXYsIHN0YXRlKSB7CisgICAgICAgIGlmIChzdGF0ZSkKKyAg
ICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpOworCisgICAgICAgIHRoaXMueCA9IGV2Lng7
CisgICAgICAgIHRoaXMueSA9IGV2Lnk7CisgICAgICAgIAorICAgICAgICB0aGlzLmlzTW91c2VQ
cmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVy
ZXI7CisgICAgICAgIGlmIChyZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IpCisgICAgICAg
ICAgICByZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSBudWxsOworCisgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIG9uTW91c2VNb3ZlID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICAgICAgc2VsZi54ID0gZS5jbGllbnRYOworICAgICAgICAgICAgc2VsZi55ID0gZS5j
bGllbnRZOworICAgICAgICB9OworCisgICAgICAgIHZhciBvbkNhcHR1cmVFbmQgPSBmdW5jdGlv
bihlKSB7CisgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOworICAgICAgICAgICAg
c2VsZltzZWxmLnN0YXRlICsgIkVuZCJdICYmIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXShlKTsK
KyAgICAgICAgICAgIHNlbGYuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIGlm
IChyZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgcmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzZWxmLmlzTW91c2VQcmVzc2VkID0gZmFsc2U7CisgICAgICAgIH07CisKKyAgICAg
ICAgdmFyIG9uQ2FwdHVyZUludGVydmFsID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxm
W3NlbGYuc3RhdGVdICYmIHNlbGZbc2VsZi5zdGF0ZV0oKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHVzZXJhZ2VudC5pc09sZElFICYmIGV2LmRvbUV2ZW50LnR5cGUgPT0gImRi
bGNsaWNrIikgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBvbkNhcHR1cmVJbnRlcnZhbCgpOworICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUVu
ZChldi5kb21FdmVudCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGV2ZW50LmNhcHR1cmUodGhpcy5lZGl0b3IuY29udGFpbmVyLCBv
bk1vdXNlTW92ZSwgb25DYXB0dXJlRW5kKTsKKyAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRl
cnZhbChvbkNhcHR1cmVJbnRlcnZhbCwgMjApOworICAgIH07Cit9KS5jYWxsKE1vdXNlSGFuZGxl
ci5wcm90b3R5cGUpOworCitleHBvcnRzLk1vdXNlSGFuZGxlciA9IE1vdXNlSGFuZGxlcjsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi91c2VyYWdlbnQn
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGRvbSA9IHJl
cXVpcmUoIi4uL2xpYi9kb20iKTsKK3ZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNl
cmFnZW50Iik7CisKK3ZhciBEUkFHX09GRlNFVCA9IDU7IC8vIHBpeGVscworCitmdW5jdGlvbiBE
ZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CisgICAgbW91c2VIYW5kbGVyLiRjbGlja1Nl
bGVjdGlvbiA9IG51bGw7CisKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVkaXRvcjsK
KyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNlZG93biIsIHRoaXMub25Nb3VzZURv
d24uYmluZChtb3VzZUhhbmRsZXIpKTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImRi
bGNsaWNrIiwgdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7CisgICAgZWRp
dG9yLnNldERlZmF1bHRIYW5kbGVyKCJ0cmlwbGVjbGljayIsIHRoaXMub25UcmlwbGVDbGljay5i
aW5kKG1vdXNlSGFuZGxlcikpOworICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigicXVhZGNs
aWNrIiwgdGhpcy5vblF1YWRDbGljay5iaW5kKG1vdXNlSGFuZGxlcikpOworICAgIGVkaXRvci5z
ZXREZWZhdWx0SGFuZGxlcigibW91c2V3aGVlbCIsIHRoaXMub25Nb3VzZVdoZWVsLmJpbmQobW91
c2VIYW5kbGVyKSk7CisKKyAgICB2YXIgZXhwb3J0cyA9IFsic2VsZWN0IiwgInN0YXJ0U2VsZWN0
IiwgImRyYWciLCAiZHJhZ0VuZCIsICJkcmFnV2FpdCIsCisgICAgICAgICJkcmFnV2FpdEVuZCIs
ICJzdGFydERyYWciLCAiZm9jdXNXYWl0Il07CisKKyAgICBleHBvcnRzLmZvckVhY2goZnVuY3Rp
b24oeCkgeworICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdOworICAgIH0sIHRoaXMp
OworCisgICAgbW91c2VIYW5kbGVyLnNlbGVjdEJ5TGluZXMgPSB0aGlzLmV4dGVuZFNlbGVjdGlv
bkJ5LmJpbmQobW91c2VIYW5kbGVyLCAiZ2V0TGluZVJhbmdlIik7CisgICAgbW91c2VIYW5kbGVy
LnNlbGVjdEJ5V29yZHMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQobW91c2VIYW5kbGVy
LCAiZ2V0V29yZFJhbmdlIik7CisKKyAgICBtb3VzZUhhbmRsZXIuJGZvY3VzV2FpdFRpbW91dCA9
IDI1MDsKK30KKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5vbk1vdXNlRG93biA9IGZ1bmN0
aW9uKGV2KSB7CisgICAgICAgIHZhciBpblNlbGVjdGlvbiA9IGV2LmluU2VsZWN0aW9uKCk7Cisg
ICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHRoaXMu
bW91c2Vkb3duRXZlbnQgPSBldjsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwor
CisgICAgICAgIHZhciBidXR0b24gPSBldi5nZXRCdXR0b24oKTsKKyAgICAgICAgaWYgKGJ1dHRv
biAhPT0gMCkgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNl
bGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rp
b25SYW5nZS5pc0VtcHR5KCk7CisKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25FbXB0eSkgewor
ICAgICAgICAgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAg
ICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShldi5kb21FdmVu
dCk7CisgICAgICAgICAgICByZXR1cm47IC8vIHN0b3BwaW5nIGV2ZW50IGhlcmUgYnJlYWtzIGNv
bnRleHRtZW51IG9uIGZmIG1hYworICAgICAgICB9CisgICAgICAgIGlmIChpblNlbGVjdGlvbiAm
JiAhZWRpdG9yLmlzRm9jdXNlZCgpKSB7CisgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1dhaXRUaW1vdXQgJiYgIXRoaXMuJGNsaWNrU2VsZWN0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgiZm9jdXNXYWl0Iik7CisgICAg
ICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpOworICAgICAgICAgICAgICAgIHJldHVy
biBldi5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFpblNlbGVjdGlvbiB8fCB0aGlzLiRjbGlja1NlbGVjdGlvbiB8fCBldi5nZXRTaGlm
dEtleSgpKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0KHBvcyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoaW5TZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQu
dGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgICAgICAgICB0aGlzLnNldFN0YXRl
KCJkcmFnV2FpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYp
OworICAgICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTsKKyAgICB9OworCisgICAgdGhp
cy5zdGFydFNlbGVjdCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICBwb3MgPSBwb3MgfHwgdGhp
cy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkp
OworICAgICAgICBpZiAodGhpcy5tb3VzZWRvd25FdmVudC5nZXRTaGlmdEtleSgpKSB7CisgICAg
ICAgICAgICB0aGlzLmVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihwb3MpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKCF0aGlzLiRjbGlja1NlbGVjdGlvbikgeworICAgICAg
ICAgICAgdGhpcy5lZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgICAg
IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuc2V0U3RhdGUoInNlbGVjdCIpOworICAgIH07CisKKyAgICB0aGlzLnNlbGVjdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYW5jaG9yLCBlZGl0b3IgPSB0aGlzLmVkaXRvcjsK
KyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGlu
YXRlcyh0aGlzLngsIHRoaXMueSk7CisKKyAgICAgICAgaWYgKHRoaXMuJGNsaWNrU2VsZWN0aW9u
KSB7CisgICAgICAgICAgICB2YXIgY21wID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uY29tcGFyZVBv
aW50KGN1cnNvcik7CisKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5lbmQ7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNtcCA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tT
ZWxlY3Rpb24uc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rp
b24sIGN1cnNvcik7CisgICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJz
b3I7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hv
cihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBlZGl0b3Iu
c2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKKworICAgICAgICBlZGl0b3IucmVu
ZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworCisgICAgdGhpcy5leHRlbmRT
ZWxlY3Rpb25CeSA9IGZ1bmN0aW9uKHVuaXROYW1lKSB7CisgICAgICAgIHZhciBhbmNob3IsIGVk
aXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVy
LnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKKyAgICAgICAgdmFyIHJh
bmdlID0gZWRpdG9yLnNlbGVjdGlvblt1bml0TmFtZV0oY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVt
bik7CisKKyAgICAgICAgaWYgKHRoaXMuJGNsaWNrU2VsZWN0aW9uKSB7CisgICAgICAgICAgICB2
YXIgY21wU3RhcnQgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQocmFuZ2Uuc3Rh
cnQpOworICAgICAgICAgICAgdmFyIGNtcEVuZCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBh
cmVQb2ludChyYW5nZS5lbmQpOworCisgICAgICAgICAgICBpZiAoY21wU3RhcnQgPT0gLTEgJiYg
Y21wRW5kIDw9IDApIHsKKyAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVj
dGlvbi5lbmQ7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgIT0gY3Vyc29yLnJv
dyB8fCByYW5nZS5lbmQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pCisgICAgICAgICAgICAgICAg
ICAgIGN1cnNvciA9IHJhbmdlLnN0YXJ0OworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXBFbmQg
PT0gMSAmJiBjbXBTdGFydCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4k
Y2xpY2tTZWxlY3Rpb24uc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJv
dyAhPSBjdXJzb3Iucm93IHx8IHJhbmdlLnN0YXJ0LmNvbHVtbiAhPSBjdXJzb3IuY29sdW1uKQor
ICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNtcFN0YXJ0ID09IC0xICYmIGNtcEVuZCA9PSAxKSB7CisgICAgICAgICAgICAgICAg
Y3Vyc29yID0gcmFuZ2UuZW5kOworICAgICAgICAgICAgICAgIGFuY2hvciA9IHJhbmdlLnN0YXJ0
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgb3JpZW50ZWRSYW5n
ZSA9IGNhbGNSYW5nZU9yaWVudGF0aW9uKHRoaXMuJGNsaWNrU2VsZWN0aW9uLCBjdXJzb3IpOwor
ICAgICAgICAgICAgICAgIGN1cnNvciA9IG9yaWVudGVkUmFuZ2UuY3Vyc29yOworICAgICAgICAg
ICAgICAgIGFuY2hvciA9IG9yaWVudGVkUmFuZ2UuYW5jaG9yOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywg
YW5jaG9yLmNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxl
Y3RUb1Bvc2l0aW9uKGN1cnNvcik7CisKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1
cnNvckludG9WaWV3KCk7CisgICAgfTsKKworICAgIHRoaXMuc3RhcnREcmFnID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdGhpcy5zZXRT
dGF0ZSgiZHJhZyIpOworICAgICAgICB0aGlzLmRyYWdSYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rp
b25SYW5nZSgpOworICAgICAgICB2YXIgc3R5bGUgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uU3R5bGUo
KTsKKyAgICAgICAgdGhpcy5kcmFnU2VsZWN0aW9uTWFya2VyID0gZWRpdG9yLnNlc3Npb24uYWRk
TWFya2VyKHRoaXMuZHJhZ1JhbmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAg
ZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIGRvbS5hZGRDc3NDbGFzcyhlZGl0b3Iu
Y29udGFpbmVyLCAiYWNlX2RyYWdnaW5nIik7CisgICAgICAgIGlmICghdGhpcy4kZHJhZ0tleWJp
bmRpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuJGRyYWdLZXliaW5kaW5nID0geworICAgICAgICAg
ICAgICAgIGhhbmRsZUtleWJvYXJkOiBmdW5jdGlvbihkYXRhLCBoYXNoSWQsIGtleVN0cmluZywg
a2V5Q29kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoa2V5U3RyaW5nID09ICJlc2MiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiB0aGlzLmNvbW1hbmR9Owor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgY29tbWFuZDogeworICAgICAgICAg
ICAgICAgICAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzZWxmID0gZWRpdG9yLiRtb3VzZUhhbmRsZXI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmRyYWdDdXJzb3IgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5kcmFnRW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0U2VsZWN0KCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBlZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRs
ZXIodGhpcy4kZHJhZ0tleWJpbmRpbmcpOworICAgIH07CisKKyAgICB0aGlzLmZvY3VzV2FpdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5t
b3VzZWRvd25FdmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTsK
KyAgICAgICAgdmFyIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgIGlm
IChkaXN0YW5jZSA+IERSQUdfT0ZGU0VUIHx8dGltZSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGlt
ZSA+IHRoaXMuJGZvY3VzV2FpdFRpbW91dCkKKyAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3Qo
KTsKKyAgICB9OworCisgICAgdGhpcy5kcmFnV2FpdCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
dmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5t
b3VzZWRvd25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7CisgICAgICAgIHZhciB0aW1lID0gKG5l
dyBEYXRlKCkpLmdldFRpbWUoKTsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwor
CisgICAgICAgIGlmIChkaXN0YW5jZSA+IERSQUdfT0ZGU0VUKSB7CisgICAgICAgICAgICB0aGlz
LnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0aW1lIC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gZWRp
dG9yLmdldERyYWdEZWxheSgpKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZHJhZ1dhaXRFbmQgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQuZG9tRXZlbnQgPSBlOworICAgICAgICB0aGlzLnN0
YXJ0U2VsZWN0KCk7CisgICAgfTsKKworICAgIHRoaXMuZHJhZyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHRoaXMuZHJhZ0N1cnNvciA9
IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLngsIHRoaXMueSk7
CisgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0aGlzLmRyYWdDdXJzb3IpOwor
ICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9Owor
CisgICAgdGhpcy5kcmFnRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZWRpdG9yID0g
dGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBkcmFnQ3Vyc29yID0gdGhpcy5kcmFnQ3Vyc29yOwor
ICAgICAgICB2YXIgZHJhZ1JhbmdlID0gdGhpcy5kcmFnUmFuZ2U7CisgICAgICAgIGRvbS5yZW1v
dmVDc3NDbGFzcyhlZGl0b3IuY29udGFpbmVyLCAiYWNlX2RyYWdnaW5nIik7CisgICAgICAgIGVk
aXRvci5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLmRyYWdTZWxlY3Rpb25NYXJrZXIpOworICAg
ICAgICBlZGl0b3Iua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kZHJhZ0tl
eWJpbmRpbmcpOworCisgICAgICAgIGlmICghZHJhZ0N1cnNvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKGUgJiYg
KGUuY3RybEtleSB8fCBlLmFsdEtleSkpIHsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRp
dG9yLnNlc3Npb247CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBkcmFnUmFuZ2U7CisgICAg
ICAgICAgICBuZXdSYW5nZS5lbmQgPSBzZXNzaW9uLmluc2VydChkcmFnQ3Vyc29yLCBzZXNzaW9u
LmdldFRleHRSYW5nZShkcmFnUmFuZ2UpKTsKKyAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0ID0g
ZHJhZ0N1cnNvcjsKKyAgICAgICAgfSBlbHNlIGlmIChkcmFnUmFuZ2UuY29udGFpbnMoZHJhZ0N1
cnNvci5yb3csIGRyYWdDdXJzb3IuY29sdW1uKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gZWRpdG9yLm1vdmVUZXh0
KGRyYWdSYW5nZSwgZHJhZ0N1cnNvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5ld1Jh
bmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0
U2VsZWN0aW9uUmFuZ2UobmV3UmFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLm9uRG91YmxlQ2xp
Y2sgPSBmdW5jdGlvbihldikgeworICAgICAgICB2YXIgcG9zID0gZXYuZ2V0RG9jdW1lbnRQb3Np
dGlvbigpOworICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBz
ZXNzaW9uID0gZWRpdG9yLnNlc3Npb247CisKKyAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5n
ZXRCcmFja2V0UmFuZ2UocG9zKTsKKyAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICBp
ZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1u
LS07CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSByYW5nZTsKKyAgICAgICAgICAgIHRo
aXMuc2V0U3RhdGUoInNlbGVjdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFdvcmRS
YW5nZShwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0
QnlXb3JkcyIpOworICAgIH07CisKKyAgICB0aGlzLm9uVHJpcGxlQ2xpY2sgPSBmdW5jdGlvbihl
dikgeworICAgICAgICB2YXIgcG9zID0gZXYuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOworICAgICAg
ICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2Vs
ZWN0QnlMaW5lcyIpOworICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxl
Y3Rpb24uZ2V0TGluZVJhbmdlKHBvcy5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uUXVhZENs
aWNrID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwor
CisgICAgICAgIGVkaXRvci5zZWxlY3RBbGwoKTsKKyAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rp
b24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgi
bnVsbCIpOworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKGV2KSB7
CisgICAgICAgIGlmIChldi5nZXRTaGlmdEtleSgpIHx8IGV2LmdldEFjY2VsS2V5KCkpeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVk
aXRvcjsKKyAgICAgICAgdmFyIGlzU2Nyb2xhYmxlID0gZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xs
YWJsZUJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7CisgICAg
ICAgIGlmIChpc1Njcm9sYWJsZSkgeworICAgICAgICAgICAgdGhpcy4kcGFzc1Njcm9sbEV2ZW50
ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy4kcGFzc1Nj
cm9sbEV2ZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKCF0
aGlzLiRzY3JvbGxTdG9wVGltZW91dCkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhp
czsKKyAgICAgICAgICAgICAgICB0aGlzLiRzY3JvbGxTdG9wVGltZW91dCA9IHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJHBhc3NTY3JvbGxFdmVudCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJHNjcm9sbFN0b3BUaW1lb3V0ID0gbnVs
bDsKKyAgICAgICAgICAgICAgICB9LCAyMDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBl
di53aGVlbFkgKiBldi5zcGVlZCk7CisgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgp
OworICAgIH07CisKK30pLmNhbGwoRGVmYXVsdEhhbmRsZXJzLnByb3RvdHlwZSk7CisKK2V4cG9y
dHMuRGVmYXVsdEhhbmRsZXJzID0gRGVmYXVsdEhhbmRsZXJzOworCitmdW5jdGlvbiBjYWxjRGlz
dGFuY2UoYXgsIGF5LCBieCwgYnkpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGJ4
IC0gYXgsIDIpICsgTWF0aC5wb3coYnkgLSBheSwgMikpOworfQorCitmdW5jdGlvbiBjYWxjUmFu
Z2VPcmllbnRhdGlvbihyYW5nZSwgY3Vyc29yKSB7CisgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9
PSByYW5nZS5lbmQucm93KQorICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5jb2x1bW4gLSBy
YW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uOworICAgIGVsc2UKKyAgICAgICAg
dmFyIGNtcCA9IDIgKiBjdXJzb3Iucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gcmFuZ2UuZW5kLnJv
dzsKKworICAgIGlmIChjbXAgPCAwKQorICAgICAgICByZXR1cm4ge2N1cnNvcjogcmFuZ2Uuc3Rh
cnQsIGFuY2hvcjogcmFuZ2UuZW5kfTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB7Y3Vyc29y
OiByYW5nZS5lbmQsIGFuY2hvcjogcmFuZ2Uuc3RhcnR9OworfQorCit9KTsKKworYWNlLmRlZmlu
ZSgnYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIv
ZG9tIik7Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKKworZnVuY3Rpb24g
R3V0dGVySGFuZGxlcihtb3VzZUhhbmRsZXIpIHsKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5k
bGVyLmVkaXRvcjsKKyAgICB2YXIgZ3V0dGVyID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXll
cjsKKworICAgIG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImd1dHRlcm1v
dXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBndXR0ZXIu
Z2V0UmVnaW9uKGUpOworCisgICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRz
IikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVu
dFBvc2l0aW9uKCkucm93OworICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLnNlc3Npb24u
c2VsZWN0aW9uOworCisgICAgICAgIGlmIChlLmdldFNoaWZ0S2V5KCkpCisgICAgICAgICAgICBz
ZWxlY3Rpb24uc2VsZWN0VG8ocm93LCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoZS5kb21FdmVudC5kZXRhaWwgPT0gMikgeworICAgICAgICAgICAgICAgIGVkaXRvci5zZWxl
Y3RBbGwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiA9IGVk
aXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgbW91
c2VIYW5kbGVyLmNhcHR1cmVNb3VzZShlLCAic2VsZWN0QnlMaW5lcyIpOworICAgICAgICByZXR1
cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworCisKKyAgICB2YXIgdG9vbHRpcFRpbWVv
dXQsIG1vdXNlRXZlbnQsIHRvb2x0aXAsIHRvb2x0aXBBbm5vdGF0aW9uOworICAgIGZ1bmN0aW9u
IGNyZWF0ZVRvb2x0aXAoKSB7CisgICAgICAgIHRvb2x0aXAgPSBkb20uY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gImFjZV9ndXR0ZXItdG9vbHRpcCI7
CisgICAgICAgIHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgZWRpdG9y
LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sdGlwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
aG93VG9vbHRpcCgpIHsKKyAgICAgICAgaWYgKCF0b29sdGlwKSB7CisgICAgICAgICAgICBjcmVh
dGVUb29sdGlwKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvdyA9IG1vdXNlRXZlbnQuZ2V0
RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgdmFyIGFubm90YXRpb24gPSBndXR0ZXIu
JGFubm90YXRpb25zW3Jvd107CisgICAgICAgIGlmICghYW5ub3RhdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBoaWRlVG9vbHRpcCgpOworCisgICAgICAgIHZhciBtYXhSb3cgPSBlZGl0b3Iuc2Vz
c2lvbi5nZXRMZW5ndGgoKTsKKyAgICAgICAgaWYgKHJvdyA9PSBtYXhSb3cpIHsKKyAgICAgICAg
ICAgIHZhciBzY3JlZW5Sb3cgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5h
dGVzKDAsIG1vdXNlRXZlbnQueSkucm93OworICAgICAgICAgICAgdmFyIHBvcyA9IG1vdXNlRXZl
bnQuJHBvczsKKyAgICAgICAgICAgIGlmIChzY3JlZW5Sb3cgPiBlZGl0b3Iuc2Vzc2lvbi5kb2N1
bWVudFRvU2NyZWVuUm93KHBvcy5yb3csIHBvcy5jb2x1bW4pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBoaWRlVG9vbHRpcCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRvb2x0aXBBbm5v
dGF0aW9uID09IGFubm90YXRpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRvb2x0
aXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbi50ZXh0LmpvaW4oIjxici8+Iik7CisKKyAgICAgICAg
dG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgdG9vbHRpcC5pbm5lckhU
TUwgPSB0b29sdGlwQW5ub3RhdGlvbjsKKyAgICAgICAgZWRpdG9yLm9uKCJtb3VzZXdoZWVsIiwg
aGlkZVRvb2x0aXApOworCisgICAgICAgIG1vdmVUb29sdGlwKG1vdXNlRXZlbnQpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGhpZGVUb29sdGlwKCkgeworICAgICAgICBpZiAodG9vbHRpcFRpbWVv
dXQpCisgICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IGNsZWFyVGltZW91dCh0b29sdGlwVGlt
ZW91dCk7CisgICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikgeworICAgICAgICAgICAgdG9v
bHRpcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgdG9vbHRpcEFubm90YXRp
b24gPSBudWxsOworICAgICAgICAgICAgZWRpdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
d2hlZWwiLCBoaWRlVG9vbHRpcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBt
b3ZlVG9vbHRpcChlKSB7CisgICAgICAgIHZhciByZWN0ID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0
ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIHRvb2x0aXAuc3R5bGUubGVmdCA9
IGUueCArIDE1ICsgInB4IjsKKyAgICAgICAgaWYgKGUueSArIDMgKiBlZGl0b3IucmVuZGVyZXIu
bGluZUhlaWdodCArIDE1IDwgcmVjdC5ib3R0b20pIHsKKyAgICAgICAgICAgIHRvb2x0aXAuc3R5
bGUuYm90dG9tID0gICIiOworICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS50b3AgPSAgZS55ICsg
MTUgKyAicHgiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS50
b3AgPSAgIiI7CisgICAgICAgICAgICB0b29sdGlwLnN0eWxlLmJvdHRvbSA9IHJlY3QuYm90dG9t
IC0gZS55ICsgNSArICJweCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb3VzZUhhbmRsZXIu
ZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZW1vdmUiLCBmdW5jdGlvbihlKSB7
CisgICAgICAgIHZhciB0YXJnZXQgPSBlLmRvbUV2ZW50LnRhcmdldCB8fCBlLmRvbUV2ZW50LnNy
Y0VsZW1lbnQ7CisgICAgICAgIGlmIChkb20uaGFzQ3NzQ2xhc3ModGFyZ2V0LCAiYWNlX2ZvbGQt
d2lkZ2V0IikpCisgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTsKKworICAgICAgICBp
ZiAodG9vbHRpcEFubm90YXRpb24pCisgICAgICAgICAgICBtb3ZlVG9vbHRpcChlKTsKKworICAg
ICAgICBtb3VzZUV2ZW50ID0gZTsKKyAgICAgICAgaWYgKHRvb2x0aXBUaW1lb3V0KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBp
ZiAobW91c2VFdmVudCAmJiAhbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKQorICAgICAgICAg
ICAgICAgIHNob3dUb29sdGlwKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aGlkZVRvb2x0aXAoKTsKKyAgICAgICAgfSwgNTApOworICAgIH0pOworCisgICAgZXZlbnQuYWRk
TGlzdGVuZXIoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIsICJtb3VzZW91dCIsIGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgbW91c2VFdmVudCA9IG51bGw7CisgICAgICAgIGlmICghdG9vbHRpcEFubm90
YXRpb24gfHwgdG9vbHRpcFRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dG9vbHRpcFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdG9v
bHRpcFRpbWVvdXQgPSBudWxsOworICAgICAgICAgICAgaGlkZVRvb2x0aXAoKTsKKyAgICAgICAg
fSwgNTApOworICAgIH0pOworCit9CisKK2V4cG9ydHMuR3V0dGVySGFuZGxlciA9IEd1dHRlckhh
bmRsZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvbW91c2VfZXZlbnQnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91
c2VyYWdlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVxdWly
ZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIE1vdXNlRXZlbnQgPSBleHBvcnRzLk1vdXNlRXZl
bnQgPSBmdW5jdGlvbihkb21FdmVudCwgZWRpdG9yKSB7CisgICAgdGhpcy5kb21FdmVudCA9IGRv
bUV2ZW50OworICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICAgIAorICAgIHRoaXMueCA9IHRo
aXMuY2xpZW50WCA9IGRvbUV2ZW50LmNsaWVudFg7CisgICAgdGhpcy55ID0gdGhpcy5jbGllbnRZ
ID0gZG9tRXZlbnQuY2xpZW50WTsKKworICAgIHRoaXMuJHBvcyA9IG51bGw7CisgICAgdGhpcy4k
aW5TZWxlY3Rpb24gPSBudWxsOworICAgIAorICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0g
ZmFsc2U7CisgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Cit9OworCisoZnVuY3Rp
b24oKSB7ICAKKyAgICAKKyAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24odGhpcy5kb21FdmVudCk7CisgICAgICAgIHRo
aXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsKKyAgICB9OworICAgIAorICAgIHRoaXMucHJl
dmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
dGhpcy5kb21FdmVudCk7CisgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7Cisg
ICAgfTsKKyAgICAKKyAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5z
dG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdCgpOworICAgIH07
CisgICAgdGhpcy5nZXREb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh0aGlzLiRwb3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kcG9zOworICAgICAgICAKKyAg
ICAgICAgdGhpcy4kcG9zID0gdGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRp
bmF0ZXModGhpcy5jbGllbnRYLCB0aGlzLmNsaWVudFkpOworICAgICAgICByZXR1cm4gdGhpcy4k
cG9zOworICAgIH07CisgICAgdGhpcy5pblNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAodGhpcy4kaW5TZWxlY3Rpb24gIT09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy4kaW5TZWxlY3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMu
ZWRpdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKSB7Cisg
ICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVj
dGlvblJhbmdlKCk7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXREb2N1bWVudFBvc2l0aW9u
KCk7CisgICAgICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb25SYW5nZS5j
b250YWlucyhwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247CisgICAgfTsKKyAgICB0aGlzLmdldEJ1
dHRvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZXZlbnQuZ2V0QnV0dG9uKHRoaXMu
ZG9tRXZlbnQpOworICAgIH07CisgICAgdGhpcy5nZXRTaGlmdEtleSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5kb21FdmVudC5zaGlmdEtleTsKKyAgICB9OworICAgIAorICAg
IHRoaXMuZ2V0QWNjZWxLZXkgPSB1c2VyYWdlbnQuaXNNYWMKKyAgICAgICAgPyBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQubWV0YUtleTsgfQorICAgICAgICA6IGZ1bmN0aW9uKCkg
eyByZXR1cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5OyB9OworICAgIAorfSkuY2FsbChNb3VzZUV2
ZW50LnByb3RvdHlwZSk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvZHJhZ2Ryb3An
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50ID0gcmVxdWly
ZSgiLi4vbGliL2V2ZW50Iik7CisKK3ZhciBEcmFnZHJvcEhhbmRsZXIgPSBmdW5jdGlvbihtb3Vz
ZUhhbmRsZXIpIHsKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVkaXRvcjsKKyAgICB2
YXIgZHJhZ1NlbGVjdGlvbk1hcmtlciwgeCwgeTsKKyAgICB2YXIgdGltZXJJZCwgcmFuZ2UsIGlz
QmFja3dhcmRzOworICAgIHZhciBkcmFnQ3Vyc29yLCBjb3VudGVyID0gMDsKKworICAgIHZhciBt
b3VzZVRhcmdldCA9IGVkaXRvci5jb250YWluZXI7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91
c2VUYXJnZXQsICJkcmFnZW50ZXIiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlZGl0b3Iu
Z2V0UmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY291bnRlcisrOwor
ICAgICAgICBpZiAoIWRyYWdTZWxlY3Rpb25NYXJrZXIpIHsKKyAgICAgICAgICAgIHJhbmdlID0g
ZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICBpc0JhY2t3YXJkcyA9IGVk
aXRvci5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKTsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IGVk
aXRvci5nZXRTZWxlY3Rpb25TdHlsZSgpOworICAgICAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtl
ciA9IGVkaXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHls
ZSk7CisgICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGNs
ZWFySW50ZXJ2YWwodGltZXJJZCk7CisgICAgICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwo
b25EcmFnSW50ZXJ2YWwsIDIwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXZlbnQucHJl
dmVudERlZmF1bHQoZSk7CisgICAgfSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRh
cmdldCwgImRyYWdvdmVyIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZWRpdG9yLmdldFJl
YWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHggPSBlLmNsaWVudFg7Cisg
ICAgICAgIHkgPSBlLmNsaWVudFk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVs
dChlKTsKKyAgICB9KTsKKyAgICAKKyAgICB2YXIgb25EcmFnSW50ZXJ2YWwgPSAgZnVuY3Rpb24o
KSB7CisgICAgICAgIGRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29v
cmRpbmF0ZXMoeCwgeSk7CisgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihkcmFn
Q3Vyc29yKTsKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7
CisgICAgfTsKKyAgICAKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWds
ZWF2ZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb3VudGVyLS07CisgICAgICAgIGlmIChjb3Vu
dGVyID4gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1l
cklkKTsKKyAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxlY3Rpb25N
YXJrZXIpOworICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDsKKyAgICAgICAgZWRp
dG9yLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgaXNCYWNrd2FyZHMpOworICAg
ICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgfSk7CisgICAgCisgICAg
ZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcm9wIiwgZnVuY3Rpb24oZSkgeworICAg
ICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNvdW50ZXIgPSAwOworICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOworICAgICAg
ICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIoZHJhZ1NlbGVjdGlvbk1hcmtlcik7CisgICAg
ICAgIGRyYWdTZWxlY3Rpb25NYXJrZXIgPSBudWxsOworCisgICAgICAgIHJhbmdlLmVuZCA9IGVk
aXRvci5zZXNzaW9uLmluc2VydChkcmFnQ3Vyc29yLCBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdU
ZXh0JykpOworICAgICAgICByYW5nZS5zdGFydCA9IGRyYWdDdXJzb3I7CisgICAgICAgIGVkaXRv
ci5mb2N1cygpOworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJh
bmdlKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgIH0pOwor
Cit9OworCitleHBvcnRzLkRyYWdkcm9wSGFuZGxlciA9IERyYWdkcm9wSGFuZGxlcjsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbW91c2UvZm9sZF9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
CitmdW5jdGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHsKKworICAgIGVkaXRvci5vbigiY2xpY2si
LCBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IGUuZ2V0RG9jdW1lbnRQb3Np
dGlvbigpOworICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworICAgICAgICB2
YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1u
LCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGlmIChlLmdldEFjY2VsS2V5
KCkpCisgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVGb2xkKGZvbGQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNlc3Npb24uZXhwYW5kRm9sZChmb2xkKTsKKworICAg
ICAgICAgICAgZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGVkaXRvci5vbigi
Z3V0dGVybW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIWVkaXRvci5pc0Zv
Y3VzZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9
IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOworCisgICAgICAgIGlm
IChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikgeworICAgICAgICAgICAgdmFyIHJvdyA9
IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0g
ZWRpdG9yLnNlc3Npb247CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBz
ZXNzaW9uLmZvbGRXaWRnZXRzW3Jvd10pCisgICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24u
b25Gb2xkV2lkZ2V0Q2xpY2socm93LCBlKTsKKyAgICAgICAgICAgIGUuc3RvcCgpOworICAgICAg
ICB9CisgICAgfSk7CisKKyAgICBlZGl0b3Iub24oImd1dHRlcmRibGNsaWNrIiwgZnVuY3Rpb24o
ZSkgeworICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJM
YXllci5nZXRSZWdpb24oZSk7CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSAiZm9sZFdp
ZGdldHMiKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCku
cm93OworICAgICAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAg
ICAgIHZhciBmdyA9IHNlc3Npb24uZm9sZFdpZGdldHM7CisgICAgICAgICAgICBpZiAoIWZ3IHx8
IGZ3W3Jvd10pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB2YXIgaSA9
IHJvdyAtIDEsIGZpcnN0UmFuZ2U7CisgICAgICAgICAgICB3aGlsZSAoaSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGMgPSBmd1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxs
KQorICAgICAgICAgICAgICAgICAgICBjID0gZndbaV0gPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQo
KTsKKworICAgICAgICAgICAgICAgIGlmIChjID09ICJzdGFydCIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0UmFuZ2UoaSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RSYW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZp
cnN0UmFuZ2UgPSByYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdl
LmVuZC5yb3cgPj0gcm93KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChpID09IC0xKQorICAgICAgICAgICAgICAgIHJhbmdlID0gZmlyc3RSYW5nZTsKKwor
ICAgICAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdl
LnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0
KHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoLCAxKTsKKworICAgICAgICAgICAgICAg
IGlmIChmb2xkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xk
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9u
LmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRl
cmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHtyb3c6IHJhbmdlLnN0YXJ0LnJvdywgY29sdW1uOiAw
fSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZS5zdG9w
KCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworZXhwb3J0cy5Gb2xkSGFuZGxlciA9IEZvbGRI
YW5kbGVyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2tleWJvYXJkL2tleWJpbmRpbmcnLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIva2V5cycsICdhY2UvbGli
L2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBr
ZXlVdGlsICA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIu
Li9saWIvZXZlbnQiKTsKKwordmFyIEtleUJpbmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAg
ICB0aGlzLiRlZGl0b3IgPSBlZGl0b3I7CisgICAgdGhpcy4kZGF0YSA9IHsgfTsKKyAgICB0aGlz
LiRoYW5kbGVycyA9IFtdOworICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZWRpdG9yLmNvbW1h
bmRzKTsKK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyID0g
ZnVuY3Rpb24oa2IpIHsKKyAgICAgICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4k
ZGVmYXVsdEhhbmRsZXIpOworICAgICAgICB0aGlzLiRkZWZhdWx0SGFuZGxlciA9IGtiOworICAg
ICAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihrYiwgMCk7CisgICAgICAgIHRoaXMuJGRhdGEg
PSB7ZWRpdG9yOiB0aGlzLiRlZGl0b3J9OworICAgIH07CisKKyAgICB0aGlzLnNldEtleWJvYXJk
SGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7CisgICAgICAgIGlmICh0aGlzLiRoYW5kbGVyc1t0aGlz
LiRoYW5kbGVycy5sZW5ndGggLSAxXSA9PSBrYikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB3aGlsZSAodGhpcy4kaGFuZGxlcnNbMV0pCisgICAgICAgICAgICB0aGlzLnJlbW92ZUtl
eWJvYXJkSGFuZGxlcih0aGlzLiRoYW5kbGVyc1sxXSk7CisKKyAgICAgICAgdGhpcy5hZGRLZXli
b2FyZEhhbmRsZXIoa2IsIDEpOworICAgIH07CisKKyAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxl
ciA9IGZ1bmN0aW9uKGtiLCBwb3MpIHsKKyAgICAgICAgaWYgKCFrYikKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKKyAgICAg
ICAgaWYgKGkgIT0gLTEpCisgICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UoaSwgMSk7
CisKKyAgICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICB0aGlzLiRoYW5k
bGVycy5wdXNoKGtiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMu
c3BsaWNlKHBvcywgMCwga2IpOworCisgICAgICAgIGlmIChpID09IC0xICYmIGtiLmF0dGFjaCkK
KyAgICAgICAgICAgIGtiLmF0dGFjaCh0aGlzLiRlZGl0b3IpOworICAgIH07CisKKyAgICB0aGlz
LnJlbW92ZUtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7CisgICAgICAgIHZhciBpID0g
dGhpcy4kaGFuZGxlcnMuaW5kZXhPZihrYik7CisgICAgICAgIGlmIChpID09IC0xKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UoaSwgMSk7
CisgICAgICAgIGtiLmRldGFjaCAmJiBrYi5kZXRhY2godGhpcy4kZWRpdG9yKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5s
ZW5ndGggLSAxXTsKKyAgICB9OworCisgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMgPSBm
dW5jdGlvbiAoaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUpIHsKKyAgICAgICAgdmFyIHRv
RXhlY3V0ZTsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgdmFyIGNvbW1h
bmRzID0gdGhpcy4kZWRpdG9yLmNvbW1hbmRzOworCisgICAgICAgIGZvciAodmFyIGkgPSB0aGlz
LiRoYW5kbGVycy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMu
JGhhbmRsZXJzW2ldLmhhbmRsZUtleWJvYXJkKAorICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEs
IGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlCisgICAgICAgICAgICApOworICAgICAgICAg
ICAgaWYgKCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5kKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHRvRXhlY3V0ZS5jb21tYW5kID09ICJudWxsIikg
eworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0b0V4ZWN1dGUucGFzc0V2ZW50ICE9IHRydWU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5k
cy5leGVjKHRvRXhlY3V0ZS5jb21tYW5kLCB0aGlzLiRlZGl0b3IsIHRvRXhlY3V0ZS5hcmdzLCBl
KTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3VjY2Vz
cyAmJiBlICYmIGhhc2hJZCAhPSAtMSkKKyAgICAgICAgICAgICAgICBldmVudC5zdG9wRXZlbnQo
ZSk7CisgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9OworCisgICAgdGhpcy5vbkNv
bW1hbmRLZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKKyAgICAgICAgdmFyIGtl
eVN0cmluZyA9IGtleVV0aWwua2V5Q29kZVRvU3RyaW5nKGtleUNvZGUpOworICAgICAgICB0aGlz
LiRjYWxsS2V5Ym9hcmRIYW5kbGVycyhoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSk7Cisg
ICAgfTsKKworICAgIHRoaXMub25UZXh0SW5wdXQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAg
IHZhciBzdWNjZXNzID0gdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoLTEsIHRleHQpOworICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICB0aGlzLiRlZGl0b3IuY29tbWFuZHMuZXhl
YygiaW5zZXJ0c3RyaW5nIiwgdGhpcy4kZWRpdG9yLCB0ZXh0KTsKKyAgICB9OworCit9KS5jYWxs
KEtleUJpbmRpbmcucHJvdG90eXBlKTsKKworZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGlu
ZzsKK30pOworCithY2UuZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvY29uZmlnJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIv
bGFuZycsICdhY2UvbGliL25ldCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3NlbGVj
dGlvbicsICdhY2UvbW9kZS90ZXh0JywgJ2FjZS9yYW5nZScsICdhY2UvZG9jdW1lbnQnLCAnYWNl
L2JhY2tncm91bmRfdG9rZW5pemVyJywgJ2FjZS9zZWFyY2hfaGlnaGxpZ2h0JywgJ2FjZS9lZGl0
X3Nlc3Npb24vZm9sZGluZycsICdhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2gnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGNvbmZpZyA9IHJlcXVp
cmUoIi4vY29uZmlnIik7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgbGFu
ZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQi
KTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZl
bnRFbWl0dGVyOwordmFyIFNlbGVjdGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0
aW9uOwordmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi9tb2RlL3RleHQiKS5Nb2RlOwordmFyIFJh
bmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIERvY3VtZW50ID0gcmVxdWlyZSgi
Li9kb2N1bWVudCIpLkRvY3VtZW50OwordmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSByZXF1aXJl
KCIuL2JhY2tncm91bmRfdG9rZW5pemVyIikuQmFja2dyb3VuZFRva2VuaXplcjsKK3ZhciBTZWFy
Y2hIaWdobGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGln
aHQ7CisKK3ZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKKyAgICB0aGlz
LiRicmVha3BvaW50cyA9IFtdOworICAgIHRoaXMuJGRlY29yYXRpb25zID0gW107CisgICAgdGhp
cy4kZnJvbnRNYXJrZXJzID0ge307CisgICAgdGhpcy4kYmFja01hcmtlcnMgPSB7fTsKKyAgICB0
aGlzLiRtYXJrZXJJZCA9IDE7CisgICAgdGhpcy4kdW5kb1NlbGVjdCA9IHRydWU7CisgICAgCisg
ICAgdGhpcy4kZm9sZERhdGEgPSBbXTsKKyAgICB0aGlzLiRmb2xkRGF0YS50b1N0cmluZyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RyID0gIiI7CisgICAgICAgIHRoaXMuZm9yRWFjaChm
dW5jdGlvbihmb2xkTGluZSkgeworICAgICAgICAgICAgc3RyICs9ICJcbiIgKyBmb2xkTGluZS50
b1N0cmluZygpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHN0cjsKKyAgICB9CisgICAg
dGhpcy5vbigiY2hhbmdlRm9sZCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpOworICAg
IHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOworICAgIAorICAgIGlm
ICh0eXBlb2YgdGV4dCAhPSAib2JqZWN0IiB8fCAhdGV4dC5nZXRMaW5lKQorICAgICAgICB0ZXh0
ID0gbmV3IERvY3VtZW50KHRleHQpOworCisgICAgdGhpcy5zZXREb2N1bWVudCh0ZXh0KTsKKwor
ICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbih0aGlzKTsKKyAgICB0aGlzLnNldE1v
ZGUobW9kZSk7Cit9OworCisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhp
cywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7
CisgICAgICAgIGlmICh0aGlzLmRvYykKKyAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92ZUxpc3Rl
bmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CisKKyAgICAgICAgdGhpcy5kb2MgPSBkb2M7
CisgICAgICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworCisgICAgICAgIGlm
ICh0aGlzLmJnVG9rZW5pemVyKQorICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1
bWVudCh0aGlzLmdldERvY3VtZW50KCkpOworCisgICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTsK
KyAgICB9OworICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZG9jOworICAgIH07CisgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSA9IGZ1bmN0aW9u
KGRvY1JvdykgeworICAgICAgICBpZiAoIWRvY1JvdykgeworICAgICAgICAgICAgdGhpcy4kZG9j
Um93Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlID0gW107Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IHRoaXMuJGdl
dFJvd0NhY2hlSW5kZXgodGhpcy4kZG9jUm93Q2FjaGUsIGRvY1JvdykgKyAxOworICAgICAgICB2
YXIgbCA9IHRoaXMuJGRvY1Jvd0NhY2hlLmxlbmd0aDsKKyAgICAgICAgdGhpcy4kZG9jUm93Q2Fj
aGUuc3BsaWNlKGksIGwpOworICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5zcGxpY2UoaSwg
bCk7CisKKyAgICB9OworCisgICAgdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCA9IGZ1bmN0aW9uKGNh
Y2hlQXJyYXksIHZhbCkgeworICAgICAgICB2YXIgbG93ID0gMDsKKyAgICAgICAgdmFyIGhpID0g
Y2FjaGVBcnJheS5sZW5ndGggLSAxOworCisgICAgICAgIHdoaWxlIChsb3cgPD0gaGkpIHsKKyAg
ICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGkpID4+IDE7CisgICAgICAgICAgICB2YXIgYyA9
IGNhY2hlQXJyYXlbbWlkXTsKKworICAgICAgICAgICAgaWYgKHZhbCA+IGMpCisgICAgICAgICAg
ICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA8IGMpCisgICAg
ICAgICAgICAgICAgaGkgPSBtaWQgLSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiBtaWQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbG93IC0xOworICAg
IH07CisKKyAgICB0aGlzLnJlc2V0Q2FjaGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
JG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAgICAg
dGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKKyAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgw
KTsKKyAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCisgICAgICAgICAgICB0aGlzLmJnVG9r
ZW5pemVyLnN0YXJ0KDApOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgdmFyIGZvbGQgPSBlLmRhdGE7CisgICAgICAgIHRoaXMuJHJlc2V0
Um93Q2FjaGUoZm9sZC5zdGFydC5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlID0g
ZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHRoaXMu
JG1vZGlmaWVkID0gdHJ1ZTsKKworICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGRlbHRhLnJh
bmdlLnN0YXJ0LnJvdyk7CisKKyAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0
ZUludGVybmFsRGF0YU9uQ2hhbmdlKGUpOworICAgICAgICBpZiAoIXRoaXMuJGZyb21VbmRvICYm
IHRoaXMuJHVuZG9NYW5hZ2VyICYmICFkZWx0YS5pZ25vcmUpIHsKKyAgICAgICAgICAgIHRoaXMu
JGRlbHRhc0RvYy5wdXNoKGRlbHRhKTsKKyAgICAgICAgICAgIGlmIChyZW1vdmVkRm9sZHMgJiYg
cmVtb3ZlZEZvbGRzLmxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZGVsdGFz
Rm9sZC5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlRm9sZHMiLAor
ICAgICAgICAgICAgICAgICAgICBmb2xkczogIHJlbW92ZWRGb2xkcworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdl
ci5zY2hlZHVsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci4kdXBk
YXRlT25DaGFuZ2UoZGVsdGEpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCBlKTsKKyAg
ICB9OworICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHRoaXMu
ZG9jLnNldFZhbHVlKHRleHQpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8o
MCwgMCk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAg
ICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAgICAgdGhpcy4kZGVsdGFzID0gW107Cisg
ICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0g
W107CisgICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgpOworICAgIH07CisgICAg
dGhpcy5nZXRWYWx1ZSA9CisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbjsKKyAgICB9
OworICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VG9rZW5z
ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFRv
a2Vucyhyb3cpOworICAgIH07CisgICAgdGhpcy5nZXRUb2tlbkF0ID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4pIHsKKyAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5z
KHJvdyk7CisgICAgICAgIHZhciB0b2tlbiwgYyA9IDA7CisgICAgICAgIGlmIChjb2x1bW4gPT0g
bnVsbCkgeworICAgICAgICAgICAgaSA9IHRva2Vucy5sZW5ndGggLSAxOworICAgICAgICAgICAg
YyA9IHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgYyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChj
ID49IGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgIGlmICghdG9rZW4p
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgdG9rZW4uaW5kZXggPSBpOworICAg
ICAgICB0b2tlbi5zdGFydCA9IGMgLSB0b2tlbi52YWx1ZS5sZW5ndGg7CisgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICB9OworICAgIHRoaXMuc2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbih1bmRv
TWFuYWdlcikgeworICAgICAgICB0aGlzLiR1bmRvTWFuYWdlciA9IHVuZG9NYW5hZ2VyOworICAg
ICAgICB0aGlzLiRkZWx0YXMgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107Cisg
ICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQgPSBbXTsKKworICAgICAgICBpZiAodGhpcy4kaW5mb3Jt
VW5kb01hbmFnZXIpCisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwo
KTsKKworICAgICAgICBpZiAodW5kb01hbmFnZXIpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0g
dGhpczsKKworICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgc2VsZi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRm9sZC5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JvdXA6ICJmb2xkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhczogc2VsZi4k
ZGVsdGFzRm9sZAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi4kZGVsdGFzRm9sZCA9IFtdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChzZWxmLiRkZWx0YXNEb2MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuJGRlbHRhcy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAiZG9jIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhczogc2VsZi4kZGVsdGFzRG9jCisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNEb2MgPSBb
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFz
Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW5kb01hbmFnZXIuZXhlY3V0ZSh7
CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICJhY2V1cGRhdGUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnczogW3NlbGYuJGRlbHRhcywgc2VsZl0KKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2VsZi4kZGVs
dGFzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFu
YWdlciA9CisgICAgICAgICAgICAgICAgbGFuZy5kZWZlcnJlZENhbGwodGhpcy4kc3luY0luZm9y
bVVuZG9NYW5hZ2VyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRkZWZhdWx0VW5k
b01hbmFnZXIgPSB7CisgICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sCisgICAgICAgIHJlZG86
IGZ1bmN0aW9uKCkge30sCisgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9CisgICAgfTsKKyAg
ICB0aGlzLmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlz
LiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7CisgICAgfTsKKyAgICB0
aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5nZXRVc2VT
b2Z0VGFicygpKSB7CisgICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0
aGlzLmdldFRhYlNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
Ilx0IjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiR1c2VTb2Z0VGFicyA9IHRydWU7
CisgICAgdGhpcy5zZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKHVzZVNvZnRUYWJzKSB7CisgICAg
ICAgIGlmICh0aGlzLiR1c2VTb2Z0VGFicyA9PT0gdXNlU29mdFRhYnMpIHJldHVybjsKKworICAg
ICAgICB0aGlzLiR1c2VTb2Z0VGFicyA9IHVzZVNvZnRUYWJzOworICAgIH07CisgICAgdGhpcy5n
ZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29m
dFRhYnM7CisgICAgfTsKKworICAgIHRoaXMuJHRhYlNpemUgPSA0OworICAgIHRoaXMuc2V0VGFi
U2l6ZSA9IGZ1bmN0aW9uKHRhYlNpemUpIHsKKyAgICAgICAgaWYgKGlzTmFOKHRhYlNpemUpIHx8
IHRoaXMuJHRhYlNpemUgPT09IHRhYlNpemUpIHJldHVybjsKKworICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7CisgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107CisgICAgICAg
IHRoaXMuJHRhYlNpemUgPSB0YWJTaXplOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VUYWJT
aXplIik7CisgICAgfTsKKyAgICB0aGlzLmdldFRhYlNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJHRhYlNpemU7CisgICAgfTsKKyAgICB0aGlzLmlzVGFiU3RvcCA9IGZ1
bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFicyAmJiAo
cG9zaXRpb24uY29sdW1uICUgdGhpcy4kdGFiU2l6ZSA9PSAwKTsKKyAgICB9OworCisgICAgdGhp
cy4kb3ZlcndyaXRlID0gZmFsc2U7CisgICAgdGhpcy5zZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihv
dmVyd3JpdGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJG92ZXJ3cml0ZSA9PSBvdmVyd3JpdGUpIHJl
dHVybjsKKworICAgICAgICB0aGlzLiRvdmVyd3JpdGUgPSBvdmVyd3JpdGU7CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZU92ZXJ3cml0ZSIpOworICAgIH07CisgICAgdGhpcy5nZXRPdmVyd3Jp
dGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTsKKyAgICB9
OworICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
c2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpOworICAgIH07CisgICAgdGhpcy5hZGRHdXR0
ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKKyAgICAgICAgaWYgKCF0
aGlzLiRkZWNvcmF0aW9uc1tyb3ddKQorICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93
XSA9ICIiOworICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddICs9ICIgIiArIGNsYXNzTmFt
ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9Owor
ICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1l
KSB7CisgICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gPSAodGhpcy4kZGVjb3JhdGlvbnNb
cm93XSB8fCAiIikucmVwbGFjZSgiICIgKyBjbGFzc05hbWUsICIiKTsKKyAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0QnJlYWtw
b2ludHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzOwor
ICAgIH07CisgICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAg
ICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPHJvd3Mu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0g
ImFjZV9icmVha3BvaW50IjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VC
cmVha3BvaW50Iiwge30pOworICAgIH07CisgICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFr
cG9pbnQgPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgeworICAgICAgICBpZiAoY2xhc3NOYW1l
ID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQi
OworICAgICAgICBpZiAoY2xhc3NOYW1lKQorICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNb
cm93XSA9IGNsYXNzTmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMu
JGJyZWFrcG9pbnRzW3Jvd107CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQi
LCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmNsZWFyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdykg
eworICAgICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuYWRkTWFya2Vy
ID0gZnVuY3Rpb24ocmFuZ2UsIGNsYXp6LCB0eXBlLCBpbkZyb250KSB7CisgICAgICAgIHZhciBp
ZCA9IHRoaXMuJG1hcmtlcklkKys7CisKKyAgICAgICAgdmFyIG1hcmtlciA9IHsKKyAgICAgICAg
ICAgIHJhbmdlIDogcmFuZ2UsCisgICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsCisg
ICAgICAgICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5cGUgOiBu
dWxsLAorICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKKyAgICAgICAgICAgIGluRnJvbnQ6ICEh
aW5Gcm9udCwKKyAgICAgICAgICAgIGlkOiBpZAorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlu
RnJvbnQpIHsKKyAgICAgICAgICAgIHRoaXMuJGZyb250TWFya2Vyc1tpZF0gPSBtYXJrZXI7Cisg
ICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VGcm9udE1hcmtlciIpCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIikKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBpZDsKKyAgICB9OworICAgIHRoaXMuYWRkRHluYW1pY01hcmtlciA9IGZ1bmN0aW9u
KG1hcmtlciwgaW5Gcm9udCkgeworICAgICAgICBpZiAoIW1hcmtlci51cGRhdGUpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7CisgICAgICAg
IG1hcmtlci5pZCA9IGlkOworICAgICAgICBtYXJrZXIuaW5Gcm9udCA9ICEhaW5Gcm9udDsKKwor
ICAgICAgICBpZiAoaW5Gcm9udCkgeworICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lk
XSA9IG1hcmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9IG1h
cmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1hcmtlcjsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlTWFy
a2VyID0gZnVuY3Rpb24obWFya2VySWQpIHsKKyAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuJGZy
b250TWFya2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRdOworICAg
ICAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWFy
a2VycyA9IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01h
cmtlcnM7CisgICAgICAgIGlmIChtYXJrZXIpIHsKKyAgICAgICAgICAgIGRlbGV0ZSAobWFya2Vy
c1ttYXJrZXJJZF0pOworICAgICAgICAgICAgdGhpcy5fZW1pdChtYXJrZXIuaW5Gcm9udCA/ICJj
aGFuZ2VGcm9udE1hcmtlciIgOiAiY2hhbmdlQmFja01hcmtlciIpOworICAgICAgICB9CisgICAg
fTsKKyAgICB0aGlzLmdldE1hcmtlcnMgPSBmdW5jdGlvbihpbkZyb250KSB7CisgICAgICAgIHJl
dHVybiBpbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7Cisg
ICAgfTsKKworICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHsKKyAgICAgICAgaWYg
KCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBu
ZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfc2VsZWN0ZWQtd29yZCIsICJ0ZXh0Iik7Cisg
ICAgICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQgPSB0aGlzLmFkZER5bmFtaWNNYXJrZXIo
aGlnaGxpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQuc2V0
UmVnZXhwKHJlKTsKKyAgICB9CisgICAgdGhpcy5oaWdobGlnaHRMaW5lcyA9IGZ1bmN0aW9uKHN0
YXJ0Um93LCBlbmRSb3csIGNsYXp6LCBpbkZyb250KSB7CisgICAgICAgIGlmICh0eXBlb2YgZW5k
Um93ICE9ICJudW1iZXIiKSB7CisgICAgICAgICAgICBjbGF6eiA9IGVuZFJvdzsKKyAgICAgICAg
ICAgIGVuZFJvdyA9IHN0YXJ0Um93OworICAgICAgICB9CisgICAgICAgIGlmICghY2xhenopCisg
ICAgICAgICAgICBjbGF6eiA9ICJhY2Vfc3RlcCI7CisgICAgICAgIAorICAgICAgICB2YXIgcmFu
Z2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOworICAgICAgICAK
KyAgICAgICAgdmFyIGlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAiZnVsbExpbmUi
LCBpbkZyb250KTsKKyAgICAgICAgcmFuZ2UuaWQgPSBpZDsKKyAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgIH07CisgICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25z
KSB7CisgICAgICAgIHRoaXMuJGFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmdldEFu
bm90YXRpb25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRhbm5vdGF0aW9u
cyB8fCBbXTsKKyAgICB9OworICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IHt9OworICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VBbm5vdGF0aW9uIiwge30pOworICAgIH07CisgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9
IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhc
cj9cbikvbSk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdGhpcy4kYXV0b05l
d0xpbmUgPSBtYXRjaFsxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGF1
dG9OZXdMaW5lID0gIlxuIjsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRXb3JkUmFu
Z2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0
TGluZShyb3cpOworCisgICAgICAgIHZhciBpblRva2VuID0gZmFsc2U7CisgICAgICAgIGlmIChj
b2x1bW4gPiAwKQorICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uIC0g
MSkubWF0Y2godGhpcy50b2tlblJlKTsKKworICAgICAgICBpZiAoIWluVG9rZW4pCisgICAgICAg
ICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4pLm1hdGNoKHRoaXMudG9rZW5SZSk7
CisgICAgICAgIAorICAgICAgICBpZiAoaW5Ub2tlbikKKyAgICAgICAgICAgIHZhciByZSA9IHRo
aXMudG9rZW5SZTsKKyAgICAgICAgZWxzZSBpZiAoL15ccyskLy50ZXN0KGxpbmUuc2xpY2UoY29s
dW1uLTEsIGNvbHVtbisxKSkpCisgICAgICAgICAgICB2YXIgcmUgPSAvXHMvOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB2YXIgcmUgPSB0aGlzLm5vblRva2VuUmU7CisKKyAgICAgICAgdmFy
IHN0YXJ0ID0gY29sdW1uOworICAgICAgICBpZiAoc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgc3RhcnQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHdoaWxlIChzdGFydCA+PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZSkpOworICAg
ICAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmQgPSBjb2x1bW47
CisgICAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBsaW5lLmNoYXJBdChlbmQpLm1h
dGNoKHJlKSkgeworICAgICAgICAgICAgZW5kKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbmV3IFJhbmdlKHJvdywgc3RhcnQsIHJvdywgZW5kKTsKKyAgICB9OworICAgIHRoaXMuZ2V0
QVdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciB3b3JkUmFu
Z2UgPSB0aGlzLmdldFdvcmRSYW5nZShyb3csIGNvbHVtbik7CisgICAgICAgIHZhciBsaW5lID0g
dGhpcy5nZXRMaW5lKHdvcmRSYW5nZS5lbmQucm93KTsKKworICAgICAgICB3aGlsZSAobGluZS5j
aGFyQXQod29yZFJhbmdlLmVuZC5jb2x1bW4pLm1hdGNoKC9bIFx0XS8pKSB7CisgICAgICAgICAg
ICB3b3JkUmFuZ2UuZW5kLmNvbHVtbiArPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB3
b3JkUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3
TGluZU1vZGUpIHsKKyAgICAgICAgdGhpcy5kb2Muc2V0TmV3TGluZU1vZGUobmV3TGluZU1vZGUp
OworICAgIH07CisgICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTsKKyAgICB9OworCisgICAgdGhpcy4k
dXNlV29ya2VyID0gdHJ1ZTsKKyAgICB0aGlzLnNldFVzZVdvcmtlciA9IGZ1bmN0aW9uKHVzZVdv
cmtlcikgeworICAgICAgICBpZiAodGhpcy4kdXNlV29ya2VyID09IHVzZVdvcmtlcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7CisK
KyAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOworICAgICAgICBpZiAodXNlV29ya2VyKQorICAg
ICAgICAgICAgdGhpcy4kc3RhcnRXb3JrZXIoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0VXNlV29y
a2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VXb3JrZXI7CisgICAg
fTsKKyAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2
YXIgcm93cyA9IGUuZGF0YTsKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydChyb3dzLmZp
cnN0KTsKKyAgICAgICAgdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRlIiwgZSk7CisgICAgfTsK
KworICAgIHRoaXMuJG1vZGVzID0ge307CisgICAgdGhpcy4kbW9kZSA9IG51bGw7CisgICAgdGhp
cy4kbW9kZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7Cisg
ICAgICAgIGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0IikgeworICAgICAgICAg
ICAgaWYgKG1vZGUuZ2V0VG9rZW5pemVyKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRv
bkNoYW5nZU1vZGUobW9kZSk7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IG1vZGU7CisgICAg
ICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHBhdGggPSBtb2RlIHx8ICJhY2UvbW9kZS90ZXh0IjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0pCisgICAgICAgICAgICB0aGlzLiRt
b2Rlc1siYWNlL21vZGUvdGV4dCJdID0gbmV3IFRleHRNb2RlKCk7CisKKyAgICAgICAgaWYgKHRo
aXMuJG1vZGVzW3BhdGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9u
Q2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7CisgICAgICAgIHRoaXMuJG1vZGVJZCA9IHBh
dGg7CisgICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBhdGhdLCBmdW5jdGlvbiht
KSB7CisgICAgICAgICAgICBpZiAodGhpcy4kbW9kZUlkICE9PSBwYXRoKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9u
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVz
W3BhdGhdKTsKKyAgICAgICAgICAgIGlmIChtICYmIG0uTW9kZSkgeworICAgICAgICAgICAgICAg
IG0gPSBuZXcgbS5Nb2RlKG9wdGlvbnMpOworICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucykg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1twYXRoXSA9IG07CisgICAgICAgICAg
ICAgICAgICAgIG0uJGlkID0gcGF0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdGhpcy4kb25DaGFuZ2VNb2RlKG0pCisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0
aGlzKSk7CisgICAgICAgIGlmICghdGhpcy4kbW9kZSkKKyAgICAgICAgICAgIHRoaXMuJG9uQ2hh
bmdlTW9kZSh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdLCB0cnVlKTsKKyAgICB9OworCisg
ICAgdGhpcy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlzUGxhY2Vob2xkZXIpIHsK
KyAgICAgICAgaWYgKHRoaXMuJG1vZGUgPT09IG1vZGUpIHJldHVybjsKKyAgICAgICAgdGhpcy4k
bW9kZSA9IG1vZGU7CisKKyAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOworCisgICAgICAgIGlm
ICh0aGlzLiR1c2VXb3JrZXIpCisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOworCisg
ICAgICAgIHZhciB0b2tlbml6ZXIgPSBtb2RlLmdldFRva2VuaXplcigpOworCisgICAgICAgIGlm
KHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IHZhciBvblJlbG9hZFRva2VuaXplciA9IHRoaXMub25SZWxvYWRUb2tlbml6ZXIuYmluZCh0aGlz
KTsKKyAgICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGUiLCBvblJl
bG9hZFRva2VuaXplcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMuYmdUb2tlbml6
ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIgPSBuZXcgQmFja2dyb3VuZFRva2Vu
aXplcih0b2tlbml6ZXIpOworICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAg
ICAgIHRoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIiwgZnVuY3Rpb24o
ZSkgeworICAgICAgICAgICAgICAgIF9zZWxmLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUiLCBlKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5iZ1Rv
a2VuaXplci5zZXRUb2tlbml6ZXIodG9rZW5pemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKTsKKworICAgICAg
ICB0aGlzLnRva2VuUmUgPSBtb2RlLnRva2VuUmU7CisgICAgICAgIHRoaXMubm9uVG9rZW5SZSA9
IG1vZGUubm9uVG9rZW5SZTsKKworCisgICAgICAgIGlmICghJGlzUGxhY2Vob2xkZXIpIHsKKyAg
ICAgICAgICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkOworICAgICAgICAgICAgdGhpcy4kc2V0
Rm9sZGluZyhtb2RlLmZvbGRpbmdSdWxlcyk7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VNb2RlIik7CisgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApOworICAgICAg
ICB9CisgICAgfTsKKworCisgICAgdGhpcy4kc3RvcFdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAodGhpcy4kd29ya2VyKQorICAgICAgICAgICAgdGhpcy4kd29ya2VyLnRlcm1pbmF0
ZSgpOworCisgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CisgICAgfTsKKworCisgICAgdGhp
cy4kc3RhcnRXb3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIg
IT09ICJ1bmRlZmluZWQiICYmICFyZXF1aXJlLm5vV29ya2VyKSB7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IHRoaXMuJG1vZGUuY3JlYXRlV29ya2Vy
KHRoaXMpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZyhlKTsKKyAgICAgICAgICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9
IG51bGw7CisgICAgfTsKKyAgICB0aGlzLmdldE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJG1vZGU7CisgICAgfTsKKworICAgIHRoaXMuJHNjcm9sbFRvcCA9IDA7Cisg
ICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKKyAgICAgICAgc2Ny
b2xsVG9wID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBzY3JvbGxUb3ApKTsKKyAgICAgICAgaWYg
KHRoaXMuJHNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHRoaXMuJHNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlU2Nyb2xsVG9wIiwgc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Nyb2xs
VG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxUb3A7CisgICAg
fTsKKworICAgIHRoaXMuJHNjcm9sbExlZnQgPSAwOworICAgIHRoaXMuc2V0U2Nyb2xsTGVmdCA9
IGZ1bmN0aW9uKHNjcm9sbExlZnQpIHsKKyAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQo
TWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCkpOworICAgICAgICBpZiAodGhpcy4kc2Nyb2xsTGVmdCA9
PT0gc2Nyb2xsTGVmdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLiRzY3Jv
bGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2Nyb2xsTGVm
dCIsIHNjcm9sbExlZnQpOworICAgIH07CisgICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxMZWZ0OworICAgIH07CisgICAgdGhp
cy5nZXRTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRjb21wdXRlV2lk
dGgoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7CisgICAgfTsKKworICAgIHRo
aXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLiRt
b2RpZmllZCB8fCBmb3JjZSkgeworICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTsK
KworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0OworCisgICAgICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOworICAgICAgICAgICAgdmFyIGNhY2hl
ID0gdGhpcy4kcm93TGVuZ3RoQ2FjaGU7CisgICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxp
bmUgPSAwOworICAgICAgICAgICAgdmFyIGZvbGRJbmRleCA9IDA7CisgICAgICAgICAgICB2YXIg
Zm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXhdOworICAgICAgICAgICAgdmFyIGZv
bGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAg
ICAgICAgICB2YXIgbGVuID0gbGluZXMubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5k
ZXgrK107CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExp
bmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlW2ldID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlW2ld
ID0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZXNbaV0pWzBdOworCisgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCisgICAgICAgICAgICAgICAg
ICAgIGxvbmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4g
dGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgIH07CisgICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5l
cyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7
CisgICAgfTsKKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRleHQpOworICAgIH07Cisg
ICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICByZXR1cm4gdGhpcy5k
b2MucmVtb3ZlKHJhbmdlKTsKKyAgICB9OworICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlv
bihkZWx0YXMsIGRvbnRTZWxlY3QpIHsKKyAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIGxhc3RVbmRvUmFuZ2UgPSBudWxsOworICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFz
Lmxlbmd0aCAtIDE7IGkgIT0gLTE7IGktLSkgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVs
dGFzW2ldOworICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5kb2MucmV2ZXJ0RGVsdGFzKGRlbHRhLmRlbHRhcyk7CisgICAgICAgICAg
ICAgICAgbGFzdFVuZG9SYW5nZSA9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9T
ZWxlY3Rpb24oZGVsdGEuZGVsdGFzLCB0cnVlLCBsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsdGEuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24o
Zm9sZERlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZERlbHRh
LmZvbGRzKTsKKyAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOworICAgICAgICBsYXN0VW5kb1Jh
bmdlICYmCisgICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCisgICAgICAgICAgICAhZG9u
dFNlbGVjdCAmJgorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uo
bGFzdFVuZG9SYW5nZSk7CisgICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgIH07Cisg
ICAgdGhpcy5yZWRvQ2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgeworICAg
ICAgICBpZiAoIWRlbHRhcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dGhpcy4kZnJvbVVuZG8gPSB0cnVlOworICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3Jv
dXAgPT0gImRvYyIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRvYy5hcHBseURlbHRhcyhkZWx0
YS5kZWx0YXMpOworICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAg
ICAgICAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgZmFsc2UsIGxhc3RV
bmRvUmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21V
bmRvID0gZmFsc2U7CisgICAgICAgIGxhc3RVbmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMu
JHVuZG9TZWxlY3QgJiYKKyAgICAgICAgICAgICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAg
cmV0dXJuIGxhc3RVbmRvUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldFVuZG9TZWxlY3QgPSBm
dW5jdGlvbihlbmFibGUpIHsKKyAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCA9IGVuYWJsZTsKKyAg
ICB9OworCisgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbiA9IGZ1bmN0aW9uKGRlbHRhcywgaXNV
bmRvLCBsYXN0VW5kb1JhbmdlKSB7CisgICAgICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7
CisgICAgICAgICAgICB2YXIgaW5zZXJ0ID0KKyAgICAgICAgICAgICAgICBkZWx0YS5hY3Rpb24g
PT0gImluc2VydFRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiOworICAgICAg
ICAgICAgcmV0dXJuIGlzVW5kbyA/ICFpbnNlcnQgOiBpbnNlcnQ7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbMF07CisgICAgICAgIHZhciByYW5nZSwgcG9pbnQ7Cisg
ICAgICAgIHZhciBsYXN0RGVsdGFJc0luc2VydCA9IGZhbHNlOworICAgICAgICBpZiAoaXNJbnNl
cnQoZGVsdGEpKSB7CisgICAgICAgICAgICByYW5nZSA9IGRlbHRhLnJhbmdlLmNsb25lKCk7Cisg
ICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRl
bHRhLnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRlbHRhcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAo
aXNJbnNlcnQoZGVsdGEpKSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5z
dGFydDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50
LmNvbHVtbikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZGVs
dGEucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2lu
dCA9IGRlbHRhLnJhbmdlLmVuZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShw
b2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zZXRFbmQoZGVsdGEucmFuZ2UuZW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAg
IGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICByYW5nZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZS5m
cm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5zdGFydCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVs
bCkgeworICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJh
bmdlKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAgIHJhbmdl
LnNldFN0YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChj
bXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5l
bmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJhbmdlOwor
ICAgIH07CisgICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpOworICAgIH07CisgICAgdGhp
cy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgeworICAgICAgICB2
YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7CisgICAgICAgIHRoaXMucmVt
b3ZlKGZyb21SYW5nZSk7CisKKyAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5yb3c7Cisg
ICAgICAgIHZhciB0b0NvbHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOworICAgICAgICBpZiAoIWZy
b21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYK
KyAgICAgICAgICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCisgICAgICAgICAg
ICB0b0NvbHVtbiAtPSB0ZXh0Lmxlbmd0aDsKKworICAgICAgICBpZiAoZnJvbVJhbmdlLmlzTXVs
dGlMaW5lKCkgJiYgZnJvbVJhbmdlLmVuZC5yb3cgPCB0b1JvdykgeworICAgICAgICAgICAgdmFy
IGxpbmVzID0gdGhpcy5kb2MuJHNwbGl0KHRleHQpOworICAgICAgICAgICAgdG9Sb3cgLT0gbGlu
ZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmRSb3cgPSB0b1JvdyAr
IGZyb21SYW5nZS5lbmQucm93IC0gZnJvbVJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGVu
ZENvbHVtbiA9IGZyb21SYW5nZS5pc011bHRpTGluZSgpID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvQ29s
dW1uICsgZnJvbVJhbmdlLmVuZC5jb2x1bW4gLSBmcm9tUmFuZ2Uuc3RhcnQuY29sdW1uOworCisg
ICAgICAgIHZhciB0b1JhbmdlID0gbmV3IFJhbmdlKHRvUm93LCB0b0NvbHVtbiwgZW5kUm93LCBl
bmRDb2x1bW4pOworCisgICAgICAgIHRoaXMuaW5zZXJ0KHRvUmFuZ2Uuc3RhcnQsIHRleHQpOwor
CisgICAgICAgIHJldHVybiB0b1JhbmdlOworICAgIH07CisgICAgdGhpcy5pbmRlbnRSb3dzID0g
ZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgaW5kZW50U3RyaW5nKSB7CisgICAgICAgIGluZGVu
dFN0cmluZyA9IGluZGVudFN0cmluZy5yZXBsYWNlKC9cdC9nLCB0aGlzLmdldFRhYlN0cmluZygp
KTsKKyAgICAgICAgZm9yICh2YXIgcm93PXN0YXJ0Um93OyByb3c8PWVuZFJvdzsgcm93KyspCisg
ICAgICAgICAgICB0aGlzLmluc2VydCh7cm93OiByb3csIGNvbHVtbjowfSwgaW5kZW50U3RyaW5n
KTsKKyAgICB9OworICAgIHRoaXMub3V0ZGVudFJvd3MgPSBmdW5jdGlvbiAocmFuZ2UpIHsKKyAg
ICAgICAgdmFyIHJvd1JhbmdlID0gcmFuZ2UuY29sbGFwc2VSb3dzKCk7CisgICAgICAgIHZhciBk
ZWxldGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdmFyIHNpemUgPSB0
aGlzLmdldFRhYlNpemUoKTsKKworICAgICAgICBmb3IgKHZhciBpID0gcm93UmFuZ2Uuc3RhcnQu
cm93OyBpIDw9IHJvd1JhbmdlLmVuZC5yb3c7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLmdldExpbmUoaSk7CisKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9
IGk7CisgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgKytqKQorICAgICAgICAgICAgICAgIGlmIChsaW5lLmNo
YXJBdChqKSAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKGogPCBzaXplICYmIGxpbmUuY2hhckF0KGopID09ICdcdCcpIHsKKyAgICAgICAgICAgICAg
ICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSBqOworICAgICAgICAgICAgICAgIGRlbGV0ZVJh
bmdlLmVuZC5jb2x1bW4gPSBqICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKKyAgICAgICAgICAgICAgICBkZWxl
dGVSYW5nZS5lbmQuY29sdW1uID0gajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
cmVtb3ZlKGRlbGV0ZVJhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5tb3ZlTGlu
ZXNVcCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmIChmaXJzdFJv
dyA8PSAwKSByZXR1cm4gMDsKKworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuZG9jLnJlbW92
ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TGluZXMo
Zmlyc3RSb3cgLSAxLCByZW1vdmVkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07CisgICAg
dGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAg
ICAgaWYgKGxhc3RSb3cgPj0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7CisKKyAg
ICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJvdywgbGFzdFJv
dyk7CisgICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93KzEsIHJlbW92ZWQpOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9OworICAgIHRoaXMuZHVwbGljYXRlTGluZXMgPSBmdW5j
dGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRj
bGlwUm93VG9Eb2N1bWVudChmaXJzdFJvdyk7CisgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4k
Y2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7CisKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5n
ZXRMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVz
KGZpcnN0Um93LCBsaW5lcyk7CisKKyAgICAgICAgdmFyIGFkZGVkUm93cyA9IGxhc3RSb3cgLSBm
aXJzdFJvdyArIDE7CisgICAgICAgIHJldHVybiBhZGRlZFJvd3M7CisgICAgfTsKKworCisgICAg
dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJu
IE1hdGgubWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkpOworICAg
IH07CisKKyAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
eworICAgICAgICBpZiAoY29sdW1uIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsK
KyAgICB9OworCisKKyAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKKyAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uKTsKKwor
ICAgICAgICBpZiAocm93IDwgMCkgeworICAgICAgICAgICAgcm93ID0gMDsKKyAgICAgICAgICAg
IGNvbHVtbiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbGVuID0gdGhp
cy5kb2MuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocm93ID49IGxlbikgeworICAgICAg
ICAgICAgICAgIHJvdyA9IGxlbiAtIDE7CisgICAgICAgICAgICAgICAgY29sdW1uID0gdGhpcy5k
b2MuZ2V0TGluZShsZW4tMSkubGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoLCBj
b2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHJvdzogcm93LAorICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4KKyAgICAgICAg
fTsKKyAgICB9OworCisgICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJh
bmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCAwKSB7CisgICAgICAgICAgICBy
YW5nZS5zdGFydC5yb3cgPSAwOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRoaXMu
JGNsaXBDb2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3csCisgICAg
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uCisgICAgICAgICAgICApOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKKyAgICAgICAg
aWYgKHJhbmdlLmVuZC5yb3cgPiBsZW4pIHsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBs
ZW47CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy5kb2MuZ2V0TGluZShsZW4p
Lmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4g
PSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coCisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdywK
KyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uCisgICAgICAgICAgICApOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICB9OworICAgIHRoaXMuJHdyYXBMaW1pdCA9
IDgwOworICAgIHRoaXMuJHVzZVdyYXBNb2RlID0gZmFsc2U7CisgICAgdGhpcy4kd3JhcExpbWl0
UmFuZ2UgPSB7CisgICAgICAgIG1pbiA6IG51bGwsCisgICAgICAgIG1heCA6IG51bGwKKyAgICB9
OworICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbih1c2VXcmFwTW9kZSkgeworICAg
ICAgICBpZiAodXNlV3JhcE1vZGUgIT0gdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAg
IHRoaXMuJHVzZVdyYXBNb2RlID0gdXNlV3JhcE1vZGU7CisgICAgICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOworICAgICAg
ICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMu
Z2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJHdyYXBEYXRhLnB1c2goW10pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCBsZW4gLSAxKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUiKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgdGhpcy5nZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU7CisgICAgfTsKKyAgICB0aGlzLnNldFdyYXBMaW1p
dFJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpIHsKKyAgICAgICAgaWYgKHRoaXMuJHdyYXBMaW1p
dFJhbmdlLm1pbiAhPT0gbWluIHx8IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCAhPT0gbWF4KSB7
CisgICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gPSBtaW47CisgICAgICAgICAg
ICB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggPSBtYXg7CisgICAgICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTW9kZSIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmFkanVzdFdyYXBMaW1pdCA9IGZ1bmN0aW9uKGRl
c2lyZWRMaW1pdCkgeworICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kY29uc3RyYWluV3Jh
cExpbWl0KGRlc2lyZWRMaW1pdCk7CisgICAgICAgIGlmICh3cmFwTGltaXQgIT0gdGhpcy4kd3Jh
cExpbWl0ICYmIHdyYXBMaW1pdCA+IDApIHsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdCA9
IHdyYXBMaW1pdDsKKyAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0
ZVdyYXBEYXRhKDAsIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgICAgICB0aGlz
LiRyZXNldFJvd0NhY2hlKDApOworICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVdy
YXBMaW1pdCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICB0aGlzLiRjb25zdHJh
aW5XcmFwTGltaXQgPSBmdW5jdGlvbih3cmFwTGltaXQpIHsKKyAgICAgICAgdmFyIG1pbiA9IHRo
aXMuJHdyYXBMaW1pdFJhbmdlLm1pbjsKKyAgICAgICAgaWYgKG1pbikKKyAgICAgICAgICAgIHdy
YXBMaW1pdCA9IE1hdGgubWF4KG1pbiwgd3JhcExpbWl0KTsKKworICAgICAgICB2YXIgbWF4ID0g
dGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4OworICAgICAgICBpZiAobWF4KQorICAgICAgICAgICAg
d3JhcExpbWl0ID0gTWF0aC5taW4obWF4LCB3cmFwTGltaXQpOworICAgICAgICByZXR1cm4gTWF0
aC5tYXgoMSwgd3JhcExpbWl0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7CisgICAgfTsKKyAgICB0
aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sCisgICAgICAgICAgICBt
YXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXgKKyAgICAgICAgfTsKKyAgICB9OworCisgICAg
dGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IHZhciB1c2VXcmFwTW9kZSA9IHRoaXMuJHVzZVdyYXBNb2RlOworICAgICAgICB2YXIgbGVuOwor
ICAgICAgICB2YXIgYWN0aW9uID0gZS5kYXRhLmFjdGlvbjsKKyAgICAgICAgdmFyIGZpcnN0Um93
ID0gZS5kYXRhLnJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBlLmRhdGEu
cmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgdmFyIHN0YXJ0ID0gZS5kYXRhLnJhbmdlLnN0YXJ0Owor
ICAgICAgICB2YXIgZW5kID0gZS5kYXRhLnJhbmdlLmVuZDsKKyAgICAgICAgdmFyIHJlbW92ZWRG
b2xkcyA9IG51bGw7CisKKyAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJMaW5lcyIpICE9IC0x
KSB7CisgICAgICAgICAgICBpZiAoYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpIHsKKyAgICAgICAg
ICAgICAgICBsYXN0Um93ID0gZmlyc3RSb3cgKyAoZS5kYXRhLmxpbmVzLmxlbmd0aCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IGUuZGF0YS5saW5lcyA/IGUuZGF0YS5saW5l
cy5sZW5ndGggOiBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBsZW4gPSBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bGVuICE9IDApIHsKKyAgICAgICAgICAgIGlmIChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikgIT0g
LTEpIHsKKyAgICAgICAgICAgICAgICB0aGlzW3VzZVdyYXBNb2RlID8gIiR3cmFwRGF0YSIgOiAi
JHJvd0xlbmd0aENhY2hlIl0uc3BsaWNlKGZpcnN0Um93LCBsZW4pOworCisgICAgICAgICAgICAg
ICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAgICAgICAgIHJlbW92
ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOworCisgICAgICAgICAgICAgICAg
dmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKKyAgICAgICAgICAgICAg
ICB2YXIgaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywgZW5kLmNvbHVtbiwg
c3RhcnQuY29sdW1uIC0gZW5kLmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5l
LnNoaWZ0Um93KC1sZW4pOworCisgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZUJlZm9y
ZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAgICAgICAgICAgICBpZiAo
Zm9sZExpbmVCZWZvcmUgJiYgZm9sZExpbmVCZWZvcmUgIT09IGZvbGRMaW5lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZUJlZm9yZS5tZXJnZShmb2xkTGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IGZvbGRMaW5lQmVmb3JlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZv
bGRMaW5lKSArIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChp
ZHg7IGlkeCA8IGZvbGRMaW5lcy5sZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBmb2xkTGluZSA9IGZvbGRMaW5lc1tpZHhdOworICAgICAgICAgICAgICAgICAgICBpZiAo
Zm9sZExpbmUuc3RhcnQucm93ID49IGVuZC5yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvbGRMaW5lLnNoaWZ0Um93KC1sZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJnczsKKyAgICAgICAgICAgICAg
ICBpZiAodXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtmaXJzdFJv
dywgMF07CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKysp
IGFyZ3MucHVzaChbXSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhLnNwbGlj
ZS5hcHBseSh0aGlzLiR3cmFwRGF0YSwgYXJncyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbik7CisgICAgICAgICAgICAgICAg
ICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
JHJvd0xlbmd0aENhY2hlLnNwbGljZS5hcHBseSh0aGlzLiRyb3dMZW5ndGhDYWNoZSwgYXJncyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlz
LiRmb2xkRGF0YTsKKyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRM
aW5lKGZpcnN0Um93KTsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRM
aW5lLnJhbmdlLmNvbXBhcmVJbnNpZGUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pCisgICAgICAg
ICAgICAgICAgICAgIGlmIChjbXAgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9s
ZExpbmUgPSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdFJvdywgMCwgZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywg
MCwgZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b2xkTGluZS5zaGlmdFJvdyhsZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpZHg7IGlkeCA8IGZvbGRMaW5lcy5s
ZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGRM
aW5lc1tpZHhdOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93ID49
IGZpcnN0Um93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhs
ZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuID0gTWF0aC5hYnMoZS5kYXRh
LnJhbmdlLnN0YXJ0LmNvbHVtbiAtIGUuZGF0YS5yYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAg
ICAgIGlmIChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikgIT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICByZW1vdmVkRm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShlLmRhdGEucmFuZ2UpOworICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZvbGRzKTsKKworICAgICAgICAg
ICAgICAgIGxlbiA9IC1sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZm9sZExp
bmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKKyAgICAgICAgICAgIGlmIChmb2xkTGlu
ZSkgeworICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGZpcnN0Um93LCBz
dGFydC5jb2x1bW4sIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodXNlV3JhcE1vZGUgJiYgdGhpcy4kd3JhcERhdGEubGVuZ3RoICE9IHRoaXMuZG9jLmdldExl
bmd0aCgpKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5k
ICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1c2VXcmFwTW9kZSkKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRh
KGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kdXBk
YXRlUm93TGVuZ3RoQ2FjaGUoZmlyc3RSb3csIGxhc3RSb3cpOworCisgICAgICAgIHJldHVybiBy
ZW1vdmVkRm9sZHM7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlID0g
ZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGIpIHsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3Ro
Q2FjaGVbZmlyc3RSb3ddID0gbnVsbDsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbbGFz
dFJvd10gPSBudWxsOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSA9IGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdl
dEFsbExpbmVzKCk7CisgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5nZXRUYWJTaXplKCk7Cisg
ICAgICAgIHZhciB3cmFwRGF0YSA9IHRoaXMuJHdyYXBEYXRhOworICAgICAgICB2YXIgd3JhcExp
bWl0ID0gdGhpcy4kd3JhcExpbWl0OworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICB2YXIg
Zm9sZExpbmU7CisKKyAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93OworICAgICAgICBsYXN0Um93
ID0gTWF0aC5taW4obGFzdFJvdywgbGluZXMubGVuZ3RoIC0gMSk7CisgICAgICAgIHdoaWxlIChy
b3cgPD0gbGFzdFJvdykgeworICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5l
KHJvdywgZm9sZExpbmUpOworICAgICAgICAgICAgaWYgKCFmb2xkTGluZSkgeworICAgICAgICAg
ICAgICAgIHRva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMobGFuZy5zdHJpbmdUcmltUmln
aHQobGluZXNbcm93XSkpOworICAgICAgICAgICAgICAgIHdyYXBEYXRhW3Jvd10gPSB0aGlzLiRj
b21wdXRlV3JhcFNwbGl0cyh0b2tlbnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSk7CisgICAgICAgICAg
ICAgICAgcm93ICsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b2tl
bnMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNlaG9s
ZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHdhbGtUb2tlbnM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIg
IT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnMgPSB0aGlz
LiRnZXREaXNwbGF5VG9rZW5zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbGFjZWhvbGRlciwgdG9rZW5zLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2Fsa1Rva2Vuc1swXSA9IFBMQUNFSE9MREVSX1NUQVJUOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgd2Fsa1Rva2Vucy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zW2ldID0gUExB
Q0VIT0xERVJfQk9EWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtU
b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lc1tyb3ddLnN1YnN0cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMubGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2Vucy5jb25j
YXQod2Fsa1Rva2Vucyk7CisgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwKKyAgICAg
ICAgICAgICAgICAgICAgZm9sZExpbmUuZW5kLnJvdywKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZXNbZm9sZExpbmUuZW5kLnJvd10ubGVuZ3RoICsgMQorICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGggIT0gMCAmJiB0b2tlbnNbdG9rZW5zLmxl
bmd0aCAtIDFdID49IFNQQUNFKQorICAgICAgICAgICAgICAgICAgICB0b2tlbnMucG9wKCk7CisK
KyAgICAgICAgICAgICAgICB3cmFwRGF0YVtmb2xkTGluZS5zdGFydC5yb3ddCisgICAgICAgICAg
ICAgICAgICAgID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRh
YlNpemUpOworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgQ0hBUiA9IDEsCisgICAgICAg
IENIQVJfRVhUID0gMiwKKyAgICAgICAgUExBQ0VIT0xERVJfU1RBUlQgPSAzLAorICAgICAgICBQ
TEFDRUhPTERFUl9CT0RZID0gIDQsCisgICAgICAgIFBVTkNUVUFUSU9OID0gOSwKKyAgICAgICAg
U1BBQ0UgPSAxMCwKKyAgICAgICAgVEFCID0gMTEsCisgICAgICAgIFRBQl9TUEFDRSA9IDEyOwor
CisKKyAgICB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyA9IGZ1bmN0aW9uKHRva2Vucywgd3JhcExp
bWl0KSB7CisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHJl
dHVybiBbXTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzcGxpdHMgPSBbXTsKKyAgICAgICAg
dmFyIGRpc3BsYXlMZW5ndGggPSB0b2tlbnMubGVuZ3RoOworICAgICAgICB2YXIgbGFzdFNwbGl0
ID0gMCwgbGFzdERvY1NwbGl0ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBhZGRTcGxpdChzY3Jl
ZW5Qb3MpIHsKKyAgICAgICAgICAgIHZhciBkaXNwbGF5ZWQgPSB0b2tlbnMuc2xpY2UobGFzdFNw
bGl0LCBzY3JlZW5Qb3MpOworICAgICAgICAgICAgdmFyIGxlbiA9IGRpc3BsYXllZC5sZW5ndGg7
CisgICAgICAgICAgICBkaXNwbGF5ZWQuam9pbigiIikuCisgICAgICAgICAgICAgICAgcmVwbGFj
ZSgvMTIvZywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOworICAg
ICAgICAgICAgICAgIH0pLgorICAgICAgICAgICAgICAgIHJlcGxhY2UoLzIvZywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOworICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuOworICAgICAgICAgICAgc3BsaXRzLnB1
c2gobGFzdERvY1NwbGl0KTsKKyAgICAgICAgICAgIGxhc3RTcGxpdCA9IHNjcmVlblBvczsKKyAg
ICAgICAgfQorCisgICAgICAgIHdoaWxlIChkaXNwbGF5TGVuZ3RoIC0gbGFzdFNwbGl0ID4gd3Jh
cExpbWl0KSB7CisgICAgICAgICAgICB2YXIgc3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7
CisgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSA+PSBTUEFDRSkgeworICAgICAgICAgICAg
ICAgIHdoaWxlICh0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7CisgICAgICAgICAgICAgICAgICAg
IHNwbGl0ICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTcGxpdChz
cGxpdCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVAorICAgICAgICAgICAg
ICAgIHx8IHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfQk9EWSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHNwbGl0OyBzcGxpdCAhPSBsYXN0U3BsaXQgLSAxOyBzcGxp
dC0tKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9M
REVSX1NUQVJUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3BsaXQg
PiBsYXN0U3BsaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7CisgICAgICAgICAgICAgICAgZm9y
IChzcGxpdDsgc3BsaXQgPCB0b2tlbnMubGVuZ3RoOyBzcGxpdCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbnNbc3BsaXRdICE9IFBMQUNFSE9MREVSX0JPRFkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcGxpdCA9
PSB0b2tlbnMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gQnJlYWtz
IHRoZSB3aGlsZS1sb29wLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRT
cGxpdChzcGxpdCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgbWluU3BsaXQgPSBNYXRoLm1heChzcGxpdCAtIDEwLCBsYXN0U3BsaXQg
LSAxKTsKKyAgICAgICAgICAgIHdoaWxlIChzcGxpdCA+IG1pblNwbGl0ICYmIHRva2Vuc1tzcGxp
dF0gPCBQTEFDRUhPTERFUl9TVEFSVCkgeworICAgICAgICAgICAgICAgIHNwbGl0IC0tOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5z
W3NwbGl0XSA9PSBQVU5DVFVBVElPTikgeworICAgICAgICAgICAgICAgIHNwbGl0IC0tOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNwbGl0ID4gbWluU3BsaXQpIHsKKyAgICAgICAg
ICAgICAgICBhZGRTcGxpdCgrK3NwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0Owor
ICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBz
cGxpdHM7CisgICAgfTsKKyAgICB0aGlzLiRnZXREaXNwbGF5VG9rZW5zID0gZnVuY3Rpb24oc3Ry
LCBvZmZzZXQpIHsKKyAgICAgICAgdmFyIGFyciA9IFtdOworICAgICAgICB2YXIgdGFiU2l6ZTsK
KyAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2Rl
QXQoaSk7CisgICAgICAgICAgICBpZiAoYyA9PSA5KSB7CisgICAgICAgICAgICAgICAgdGFiU2l6
ZSA9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShhcnIubGVuZ3RoICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBhcnIucHVzaChUQUIpOworICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAxOyBu
IDwgdGFiU2l6ZTsgbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQl9TUEFD
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoYyA9PSAzMikgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKFNQQUNFKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZigoYyA+IDM5ICYmIGMgPCA0OCkgfHwgKGMgPiA1NyAmJiBjIDwgNjQpKSB7
CisgICAgICAgICAgICAgICAgYXJyLnB1c2goUFVOQ1RVQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAg
ICAgICAgICAgICAgICBhcnIucHVzaChDSEFSLCBDSEFSX0VYVCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhcnI7CisgICAgfTsKKyAgICB0aGlzLiRnZXRTdHJpbmdT
Y3JlZW5XaWR0aCA9IGZ1bmN0aW9uKHN0ciwgbWF4U2NyZWVuQ29sdW1uLCBzY3JlZW5Db2x1bW4p
IHsKKyAgICAgICAgaWYgKG1heFNjcmVlbkNvbHVtbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
IFswLCAwXTsKKyAgICAgICAgaWYgKG1heFNjcmVlbkNvbHVtbiA9PSBudWxsKQorICAgICAgICAg
ICAgbWF4U2NyZWVuQ29sdW1uID0gSW5maW5pdHk7CisgICAgICAgIHNjcmVlbkNvbHVtbiA9IHNj
cmVlbkNvbHVtbiB8fCAwOworCisgICAgICAgIHZhciBjLCBjb2x1bW47CisgICAgICAgIGZvciAo
Y29sdW1uID0gMDsgY29sdW1uIDwgc3RyLmxlbmd0aDsgY29sdW1uKyspIHsKKyAgICAgICAgICAg
IGMgPSBzdHIuY2hhckNvZGVBdChjb2x1bW4pOworICAgICAgICAgICAgaWYgKGMgPT0gOSkgewor
ICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0aGlzLmdldFNjcmVlblRhYlNpemUoc2Ny
ZWVuQ29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgx
MTAwICYmIGlzRnVsbFdpZHRoKGMpKSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9
IDI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiAr
PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjcmVlbkNvbHVtbiA+IG1heFNj
cmVlbkNvbHVtbikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIFtzY3JlZW5Db2x1bW4sIGNvbHVtbl07CisgICAgfTsK
KyAgICB0aGlzLmdldFJvd0xlbmd0aCA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICBpZiAoIXRo
aXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiR3cmFw
RGF0YVtyb3ddLmxlbmd0aCArIDE7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0U2Ny
ZWVuTGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdykgeworICAgICAgICB2YXIgcG9z
ID0gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3Mucm93
LCBwb3MuY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1u
ID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9
IHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7CisgICAgICAgIHJl
dHVybiB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4oc2NyZWVuUm93KTsKKyAgICB9OworICAg
IHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3cs
IGRvY0NvbHVtbikgeworICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2Ny
ZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9E
b2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSAvIDEwKTsKKyAgICB9
OworICAgIHRoaXMuZ2V0Um93U3BsaXREYXRhID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGlm
ICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRTY3JlZW5UYWJTaXplID0gZnVuY3Rpb24o
c2NyZWVuQ29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gc2NyZWVuQ29s
dW1uICUgdGhpcy4kdGFiU2l6ZTsKKyAgICB9OworCisKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1l
bnRSb3cgPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1
cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4p
LnJvdzsKKyAgICB9OworCisKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5j
dGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5zY3Jl
ZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLmNvbHVtbjsKKyAg
ICB9OworICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVu
Um93LCBzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgaWYgKHNjcmVlblJvdyA8IDApCisgICAgICAg
ICAgICByZXR1cm4ge3JvdzogMCwgY29sdW1uOiAwfTsKKworICAgICAgICB2YXIgbGluZTsKKyAg
ICAgICAgdmFyIGRvY1JvdyA9IDA7CisgICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOworICAgICAg
ICB2YXIgY29sdW1uOworICAgICAgICB2YXIgcm93ID0gMDsKKyAgICAgICAgdmFyIHJvd0xlbmd0
aCA9IDA7CisKKyAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7Cisg
ICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93
KTsKKyAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkg
Pj0gMCkgeworICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAg
dmFyIGRvY1JvdyA9IHRoaXMuJGRvY1Jvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2Fj
aGUgPSBzY3JlZW5Sb3cgPiByb3dDYWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgZG9DYWNoZSA9ICFsOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG1heFJv
dyA9IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxOworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdl
dE5leHRGb2xkTGluZShkb2NSb3cpOworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUg
PyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKworICAgICAgICB3aGlsZSAocm93IDw9
IHNjcmVlblJvdykgeworICAgICAgICAgICAgcm93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGgo
ZG9jUm93KTsKKyAgICAgICAgICAgIGlmIChyb3cgKyByb3dMZW5ndGggLSAxID49IHNjcmVlblJv
dyB8fCBkb2NSb3cgPj0gbWF4Um93KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJvdyArPSByb3dMZW5ndGg7CisgICAgICAg
ICAgICAgICAgZG9jUm93Kys7CisgICAgICAgICAgICAgICAgaWYgKGRvY1JvdyA+IGZvbGRTdGFy
dCkgeworICAgICAgICAgICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5lbmQucm93KzE7Cisg
ICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93
LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8g
Zm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9DYWNoZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2goZG9jUm93KTsKKyAgICAgICAgICAgICAg
ICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHJvdyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZm9sZExpbmUgJiYgZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1Jv
dykgeworICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGZvbGRMaW5l
KTsKKyAgICAgICAgICAgIGRvY1JvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgfSBl
bHNlIGlmIChyb3cgKyByb3dMZW5ndGggPD0gc2NyZWVuUm93IHx8IGRvY1JvdyA+IG1heFJvdykg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICByb3c6IG1heFJvdywKKyAg
ICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuZ2V0TGluZShtYXhSb3cpLmxlbmd0aAorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0TGlu
ZShkb2NSb3cpOworICAgICAgICAgICAgZm9sZExpbmUgPSBudWxsOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICB2YXIgc3BsaXRzID0g
dGhpcy4kd3JhcERhdGFbZG9jUm93XTsKKyAgICAgICAgICAgIGlmIChzcGxpdHMpIHsKKyAgICAg
ICAgICAgICAgICBjb2x1bW4gPSBzcGxpdHNbc2NyZWVuUm93IC0gcm93XTsKKyAgICAgICAgICAg
ICAgICBpZihzY3JlZW5Sb3cgPiByb3cgJiYgc3BsaXRzLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICBkb2NDb2x1bW4gPSBzcGxpdHNbc2NyZWVuUm93IC0gcm93IC0gMV0gfHwgc3BsaXRz
W3NwbGl0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vi
c3RyaW5nKGRvY0NvbHVtbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZG9jQ29sdW1uICs9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRo
KGxpbmUsIHNjcmVlbkNvbHVtbilbMV07CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAm
JiBkb2NDb2x1bW4gPj0gY29sdW1uKQorICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1uIC0g
MTsKKworICAgICAgICBpZiAoZm9sZExpbmUpCisgICAgICAgICAgICByZXR1cm4gZm9sZExpbmUu
aWR4VG9Qb3NpdGlvbihkb2NDb2x1bW4pOworCisgICAgICAgIHJldHVybiB7cm93OiBkb2NSb3cs
IGNvbHVtbjogZG9jQ29sdW1ufTsKKyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBv
c2l0aW9uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiBkb2NDb2x1bW4gPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMu
JGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoZG9jUm93LnJvdywgZG9jUm93LmNvbHVtbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQo
ZG9jUm93LCBkb2NDb2x1bW4pOworCisgICAgICAgIGRvY1JvdyA9IHBvcy5yb3c7CisgICAgICAg
IGRvY0NvbHVtbiA9IHBvcy5jb2x1bW47CisKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IDA7Cisg
ICAgICAgIHZhciBmb2xkU3RhcnRSb3cgPSBudWxsOworICAgICAgICB2YXIgZm9sZCA9IG51bGw7
CisgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChkb2NSb3csIGRvY0NvbHVtbiwgMSk7Cisg
ICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICBkb2NSb3cgPSBmb2xkLnN0YXJ0LnJvdzsK
KyAgICAgICAgICAgIGRvY0NvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIHJvd0VuZCwgcm93ID0gMDsKKworCisgICAgICAgIHZhciByb3dDYWNoZSA9
IHRoaXMuJGRvY1Jvd0NhY2hlOworICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0NhY2hlSW5k
ZXgocm93Q2FjaGUsIGRvY1Jvdyk7CisgICAgICAgIHZhciBsID0gcm93Q2FjaGUubGVuZ3RoOwor
ICAgICAgICBpZiAobCAmJiBpID49IDApIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByb3dDYWNo
ZVtpXTsKKyAgICAgICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLiRzY3JlZW5Sb3dDYWNoZVtp
XTsKKyAgICAgICAgICAgIHZhciBkb0NhY2hlID0gZG9jUm93ID4gcm93Q2FjaGVbbCAtIDFdOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKHJvdyk7Cisg
ICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZp
bml0eTsKKworICAgICAgICB3aGlsZSAocm93IDwgZG9jUm93KSB7CisgICAgICAgICAgICBpZiAo
cm93ID49IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVu
ZC5yb3cgKyAxOworICAgICAgICAgICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXRO
ZXh0Rm9sZExpbmUocm93RW5kLCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0
ID0gZm9sZExpbmUgP2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cgKyAxOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzY3JlZW5Sb3cgKz0gdGhpcy5nZXRSb3dMZW5n
dGgocm93KTsKKyAgICAgICAgICAgIHJvdyA9IHJvd0VuZDsKKworICAgICAgICAgICAgaWYgKGRv
Q2FjaGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKHJvdyk7Cisg
ICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChzY3JlZW5Sb3cpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0TGluZSA9ICIiOworICAgICAg
ICBpZiAoZm9sZExpbmUgJiYgcm93ID49IGZvbGRTdGFydCkgeworICAgICAgICAgICAgdGV4dExp
bmUgPSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSwgZG9jUm93LCBkb2NDb2x1bW4p
OworICAgICAgICAgICAgZm9sZFN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGV4dExpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KS5z
dWJzdHJpbmcoMCwgZG9jQ29sdW1uKTsKKyAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGRvY1Jv
dzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAg
ICAgIHZhciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0Um93XTsKKyAgICAgICAg
ICAgIHZhciBzY3JlZW5Sb3dPZmZzZXQgPSAwOworICAgICAgICAgICAgd2hpbGUgKHRleHRMaW5l
Lmxlbmd0aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHsKKyAgICAgICAgICAgICAgICBz
Y3JlZW5Sb3cgKys7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93T2Zmc2V0Kys7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRleHRMaW5lLnN1YnN0cmluZygKKyAgICAg
ICAgICAgICAgICB3cmFwUm93W3NjcmVlblJvd09mZnNldCAtIDFdIHx8IDAsIHRleHRMaW5lLmxl
bmd0aAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICByb3c6IHNjcmVlblJvdywKKyAgICAgICAgICAgIGNvbHVtbjogdGhpcy4kZ2V0U3Ry
aW5nU2NyZWVuV2lkdGgodGV4dExpbmUpWzBdCisgICAgICAgIH07CisgICAgfTsKKyAgICB0aGlz
LmRvY3VtZW50VG9TY3JlZW5Db2x1bW4gPSBmdW5jdGlvbihyb3csIGRvY0NvbHVtbikgeworICAg
ICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBkb2NDb2x1bW4p
LmNvbHVtbjsKKyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyA9IGZ1bmN0aW9u
KGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3Jl
ZW5Qb3NpdGlvbihkb2NSb3csIGRvY0NvbHVtbikucm93OworICAgIH07CisgICAgdGhpcy5nZXRT
Y3JlZW5MZW5ndGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOwor
ICAgICAgICB2YXIgZm9sZCA9IG51bGw7CisgICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUp
IHsKKyAgICAgICAgICAgIHNjcmVlblJvd3MgPSB0aGlzLmdldExlbmd0aCgpOworICAgICAgICAg
ICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9
IGZvbGREYXRhW2ldOworICAgICAgICAgICAgICAgIHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93
IC0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJHdyYXBEYXRhLmxlbmd0aDsKKyAgICAgICAgICAg
IHZhciByb3cgPSAwLCBpID0gMDsKKyAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERh
dGFbaSsrXTsKKyAgICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5y
b3cgOkluZmluaXR5OworCisgICAgICAgICAgICB3aGlsZSAocm93IDwgbGFzdFJvdykgeworICAg
ICAgICAgICAgICAgIHNjcmVlblJvd3MgKz0gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAx
OworICAgICAgICAgICAgICAgIHJvdyArKzsKKyAgICAgICAgICAgICAgICBpZiAocm93ID4gZm9s
ZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IGZvbGQuZW5kLnJvdysxOworICAg
ICAgICAgICAgICAgICAgICBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZCA/Zm9sZC5zdGFydC5yb3cgOkluZmluaXR5OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBzY3JlZW5Sb3dzOworICAgIH07CisgICAgZnVuY3Rpb24gaXNGdWxsV2lkdGgoYykgeworICAg
ICAgICBpZiAoYyA8IDB4MTEwMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIGMgPj0gMHgxMTAwICYmIGMgPD0gMHgxMTVGIHx8CisgICAgICAgICAgICAgICBjID49
IDB4MTFBMyAmJiBjIDw9IDB4MTFBNyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDExRkEgJiYg
YyA8PSAweDExRkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyMzI5ICYmIGMgPD0gMHgyMzJB
IHx8CisgICAgICAgICAgICAgICBjID49IDB4MkU4MCAmJiBjIDw9IDB4MkU5OSB8fAorICAgICAg
ICAgICAgICAgYyA+PSAweDJFOUIgJiYgYyA8PSAweDJFRjMgfHwKKyAgICAgICAgICAgICAgIGMg
Pj0gMHgyRjAwICYmIGMgPD0gMHgyRkQ1IHx8CisgICAgICAgICAgICAgICBjID49IDB4MkZGMCAm
JiBjIDw9IDB4MkZGQiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMwMDAgJiYgYyA8PSAweDMw
M0UgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMDQxICYmIGMgPD0gMHgzMDk2IHx8CisgICAg
ICAgICAgICAgICBjID49IDB4MzA5OSAmJiBjIDw9IDB4MzBGRiB8fAorICAgICAgICAgICAgICAg
YyA+PSAweDMxMDUgJiYgYyA8PSAweDMxMkQgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMTMx
ICYmIGMgPD0gMHgzMThFIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzE5MCAmJiBjIDw9IDB4
MzFCQSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRTMgfHwKKyAg
ICAgICAgICAgICAgIGMgPj0gMHgzMUYwICYmIGMgPD0gMHgzMjFFIHx8CisgICAgICAgICAgICAg
ICBjID49IDB4MzIyMCAmJiBjIDw9IDB4MzI0NyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMy
NTAgJiYgYyA8PSAweDMyRkUgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMzAwICYmIGMgPD0g
MHg0REJGIHx8CisgICAgICAgICAgICAgICBjID49IDB4NEUwMCAmJiBjIDw9IDB4QTQ4QyB8fAor
ICAgICAgICAgICAgICAgYyA+PSAweEE0OTAgJiYgYyA8PSAweEE0QzYgfHwKKyAgICAgICAgICAg
ICAgIGMgPj0gMHhBOTYwICYmIGMgPD0gMHhBOTdDIHx8CisgICAgICAgICAgICAgICBjID49IDB4
QUMwMCAmJiBjIDw9IDB4RDdBMyB8fAorICAgICAgICAgICAgICAgYyA+PSAweEQ3QjAgJiYgYyA8
PSAweEQ3QzYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhEN0NCICYmIGMgPD0gMHhEN0ZCIHx8
CisgICAgICAgICAgICAgICBjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRiB8fAorICAgICAgICAg
ICAgICAgYyA+PSAweEZFMTAgJiYgYyA8PSAweEZFMTkgfHwKKyAgICAgICAgICAgICAgIGMgPj0g
MHhGRTMwICYmIGMgPD0gMHhGRTUyIHx8CisgICAgICAgICAgICAgICBjID49IDB4RkU1NCAmJiBj
IDw9IDB4RkU2NiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZFNjggJiYgYyA8PSAweEZFNkIg
fHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRjAxICYmIGMgPD0gMHhGRjYwIHx8CisgICAgICAg
ICAgICAgICBjID49IDB4RkZFMCAmJiBjIDw9IDB4RkZFNjsKKyAgICB9OworCit9KS5jYWxsKEVk
aXRTZXNzaW9uLnByb3RvdHlwZSk7CisKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2ZvbGRpbmci
KS5Gb2xkaW5nLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKK3JlcXVpcmUoIi4vZWRpdF9z
ZXNzaW9uL2JyYWNrZXRfbWF0Y2giKS5CcmFja2V0TWF0Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90
b3R5cGUpOworCitleHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247Cit9KTsKKworYWNl
LmRlZmluZSgnYWNlL2NvbmZpZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAn
YWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9saWIvZXZl
bnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKyJubyB1
c2Ugc3RyaWN0IjsKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgb29w
ID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgbmV0ID0gcmVxdWlyZSgiLi9saWIvbmV0Iik7
Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50
RW1pdHRlcjsKKwordmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpczsK
K30pKCk7CisKK3ZhciBvcHRpb25zID0geworICAgIHBhY2thZ2VkOiBmYWxzZSwKKyAgICB3b3Jr
ZXJQYXRoOiBudWxsLAorICAgIG1vZGVQYXRoOiBudWxsLAorICAgIHRoZW1lUGF0aDogbnVsbCwK
KyAgICBiYXNlUGF0aDogIiIsCisgICAgc3VmZml4OiAiLmpzIiwKKyAgICAkbW9kdWxlVXJsczog
e30KK307CisKK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgaWYgKCFvcHRpb25z
Lmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBj
b25maWcga2V5OiAiICsga2V5KTsKKworICAgIHJldHVybiBvcHRpb25zW2tleV07Cit9OworCitl
eHBvcnRzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICBpZiAoIW9wdGlvbnMuaGFz
T3duUHJvcGVydHkoa2V5KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbmZp
ZyBrZXk6ICIgKyBrZXkpOworCisgICAgb3B0aW9uc1trZXldID0gdmFsdWU7Cit9OworCitleHBv
cnRzLmFsbCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBsYW5nLmNvcHlPYmplY3Qob3B0aW9u
cyk7Cit9Oworb29wLmltcGxlbWVudChleHBvcnRzLCBFdmVudEVtaXR0ZXIpOworCitleHBvcnRz
Lm1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBvbmVudCkgeworICAgIGlmIChvcHRpb25z
LiRtb2R1bGVVcmxzW25hbWVdKQorICAgICAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tu
YW1lXTsKKworICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoIi8iKTsKKyAgICBjb21wb25lbnQg
PSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMl0gfHwgIiI7CisgICAgdmFyIGJh
c2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBsYWNlKGNvbXBvbmVudCwgIiIpLnJlcGxh
Y2UoLyheW1wtX10pfChbXC1fXSQpLywgIiIpOworCisgICAgaWYgKCFiYXNlICYmIHBhcnRzLmxl
bmd0aCA+IDEpCisgICAgICAgIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXTsKKyAgICB2
YXIgcGF0aCA9IG9wdGlvbnNbY29tcG9uZW50ICsgIlBhdGgiXTsKKyAgICBpZiAocGF0aCA9PSBu
dWxsKQorICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDsKKyAgICBpZiAocGF0aCAmJiBw
YXRoLnNsaWNlKC0xKSAhPSAiLyIpCisgICAgICAgIHBhdGggKz0gIi8iOworICAgIHJldHVybiBw
YXRoICsgY29tcG9uZW50ICsgIi0iICsgYmFzZSArIHRoaXMuZ2V0KCJzdWZmaXgiKTsKK307CisK
K2V4cG9ydHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgc3Vic3QpIHsKKyAgICByZXR1
cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSA9IHN1YnN0OworfTsKKworZXhwb3J0cy5sb2Fk
TW9kdWxlID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgb25Mb2FkKSB7CisgICAgdmFyIG1vZHVsZSwg
bW9kdWxlVHlwZTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGVOYW1lKSkgeworICAgICAg
ICBtb2R1bGVUeXBlID0gbW9kdWxlTmFtZVswXTsKKyAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVs
ZU5hbWVbMV07CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIG1vZHVsZSA9IHJlcXVpcmUobW9k
dWxlTmFtZSk7CisgICAgfSBjYXRjaCAoZSkge307CisgICAgaWYgKG1vZHVsZSkKKyAgICAgICAg
cmV0dXJuIG9uTG9hZChtb2R1bGUpOworCisgICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXF1aXJlKFttb2R1bGVOYW1lXSwgZnVuY3Rpb24obW9kdWxlKSB7CisgICAg
ICAgICAgICBleHBvcnRzLl9lbWl0KCJsb2FkLm1vZHVsZSIsIHtuYW1lOiBtb2R1bGVOYW1lLCBt
b2R1bGU6IG1vZHVsZX0pOworICAgICAgICAgICAgb25Mb2FkKG1vZHVsZSk7CisgICAgICAgIH0p
OworICAgIH07CisKKyAgICBpZiAoIWV4cG9ydHMuZ2V0KCJwYWNrYWdlZCIpKQorICAgICAgICBy
ZXR1cm4gYWZ0ZXJMb2FkKCk7CisgICAgbmV0LmxvYWRTY3JpcHQoZXhwb3J0cy5tb2R1bGVVcmwo
bW9kdWxlTmFtZSwgbW9kdWxlVHlwZSksIGFmdGVyTG9hZCk7Cit9OworZXhwb3J0cy5pbml0ID0g
ZnVuY3Rpb24oKSB7CisgICAgb3B0aW9ucy5wYWNrYWdlZCA9IHJlcXVpcmUucGFja2FnZWQgfHwg
bW9kdWxlLnBhY2thZ2VkIHx8IChnbG9iYWwuZGVmaW5lICYmIGRlZmluZS5wYWNrYWdlZCk7CisK
KyAgICBpZiAoIWdsb2JhbC5kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgdmFy
IHNjcmlwdE9wdGlvbnMgPSB7fTsKKyAgICB2YXIgc2NyaXB0VXJsID0gIiI7CisKKyAgICB2YXIg
c2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKKyAgICBm
b3IgKHZhciBpPTA7IGk8c2NyaXB0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgc2NyaXB0
ID0gc2NyaXB0c1tpXTsKKworICAgICAgICB2YXIgc3JjID0gc2NyaXB0LnNyYyB8fCBzY3JpcHQu
Z2V0QXR0cmlidXRlKCJzcmMiKTsKKyAgICAgICAgaWYgKCFzcmMpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzOworICAg
ICAgICBmb3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKyspIHsKKyAg
ICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tqXTsKKyAgICAgICAgICAgIGlmIChhdHRy
Lm5hbWUuaW5kZXhPZigiZGF0YS1hY2UtIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICBzY3Jp
cHRPcHRpb25zW2RlSHlwaGVuYXRlKGF0dHIubmFtZS5yZXBsYWNlKC9eZGF0YS1hY2UtLywgIiIp
KV0gPSBhdHRyLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFy
IG0gPSBzcmMubWF0Y2goL14oLiopXC9hY2UoXC1cdyspP1wuanMoXD98JCkvKTsKKyAgICAgICAg
aWYgKG0pCisgICAgICAgICAgICBzY3JpcHRVcmwgPSBtWzFdOworICAgIH0KKworICAgIGlmIChz
Y3JpcHRVcmwpIHsKKyAgICAgICAgc2NyaXB0T3B0aW9ucy5iYXNlID0gc2NyaXB0T3B0aW9ucy5i
YXNlIHx8IHNjcmlwdFVybDsKKyAgICAgICAgc2NyaXB0T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7
CisgICAgfQorCisgICAgc2NyaXB0T3B0aW9ucy5iYXNlUGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFz
ZTsKKyAgICBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggPSBzY3JpcHRPcHRpb25zLndvcmtlclBh
dGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMubW9kZVBhdGggPSBz
Y3JpcHRPcHRpb25zLm1vZGVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAgICBzY3JpcHRP
cHRpb25zLnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlv
bnMuYmFzZTsKKyAgICBkZWxldGUgc2NyaXB0T3B0aW9ucy5iYXNlOworCisgICAgZm9yICh2YXIg
a2V5IGluIHNjcmlwdE9wdGlvbnMpCisgICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1tr
ZXldICE9PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgc2NyaXB0
T3B0aW9uc1trZXldKTsKK307CisKK2Z1bmN0aW9uIGRlSHlwaGVuYXRlKHN0cikgeworICAgIHJl
dHVybiBzdHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9V
cHBlckNhc2UoKTsgfSk7Cit9CisKK30pOworYWNlLmRlZmluZSgnYWNlL2xpYi9uZXQnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciB1c2VyYWdlbnQgPSByZXF1
aXJlKCIuL3VzZXJhZ2VudCIpOworCitleHBvcnRzLmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxi
YWNrKSB7CisgICAgdmFyIHhociA9IGV4cG9ydHMuY3JlYXRlWGhyKCk7CisgICAgeGhyLm9wZW4o
J0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
IChldnQpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CisgICAgICAgICAg
ICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgeGhy
LnNlbmQobnVsbCk7Cit9OworCit2YXIgcHJvZ0lkcyA9IFsnTXN4bWwyLlhNTEhUVFAnLCAnTWlj
cm9zb2Z0LlhNTEhUVFAnLCAnTXN4bWwyLlhNTEhUVFAuNC4wJ107CisKK2V4cG9ydHMuY3JlYXRl
WGhyID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHhociwgaSwgcHJvZ0lkOworICAgIGlmICh0eXBl
b2YgWE1MSHR0cFJlcXVlc3QgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgIHJldHVybiBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
MzsgaSsrKSB7CisgICAgICAgICAgICBwcm9nSWQgPSBwcm9nSWRzW2ldOworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdChwcm9nSWQpOwor
ICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKworICAgICAgICAgICAgaWYgKHhocikgeworICAg
ICAgICAgICAgICAgIHByb2dJZHMgPSBbcHJvZ0lkXTsgIC8vIHNvIGZhc3RlciBuZXh0IHRpbWUK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICgheGhyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiY3JlYXRlWGhyKCk6
IFhNTEh0dHBSZXF1ZXN0IG5vdCBhdmFpbGFibGUiKTsKKyAgICB9CisKKyAgICByZXR1cm4geGhy
OworfTsKKworZXhwb3J0cy5sb2FkU2NyaXB0ID0gZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spIHsK
KyAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07
CisgICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKworICAgIHMu
c3JjID0gcGF0aDsKKyAgICBoZWFkLmFwcGVuZENoaWxkKHMpOworCisgICAgaWYgKHVzZXJhZ2Vu
dC5pc09sZElFKQorICAgICAgICBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9PSAnbG9hZGVkJyAmJiBjYWxsYmFjaygpOwor
ICAgICAgICB9OworICAgIGVsc2UKKyAgICAgICAgcy5vbmxvYWQgPSBjYWxsYmFjazsKK307CisK
K30pOworCithY2UuZGVmaW5lKCdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBFdmVudEVtaXR0ZXIgPSB7fTsKKworRXZlbnRFbWl0dGVyLl9lbWl0ID0KK0V2
ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgeworICAg
IHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OworICAgIHRo
aXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7fTsKKworICAg
IHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107Cisg
ICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07
CisgICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQorICAgICAgICBl
ID0ge307CisKKyAgICBpZiAoIWUudHlwZSkKKyAgICAgICAgZS50eXBlID0gZXZlbnROYW1lOwor
ICAgIAorICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pIHsKKyAgICAgICAgZS5zdG9wUHJvcGFn
YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVk
ID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgaWYgKCFlLnByZXZlbnREZWZh
dWx0KSB7CisgICAgICAgIGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7CisgICAgICAgIH07CisgICAgfQorCisg
ICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykgeworICAgICAgICBsaXN0
ZW5lcnNbaV0oZSk7CisgICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVm
YXVsdFByZXZlbnRlZCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUpOworfTsKKwor
RXZlbnRFbWl0dGVyLnNldERlZmF1bHRIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxs
YmFjaykgeworICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVy
cyB8fCB7fTsKKyAgICAKKyAgICBpZiAodGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV0p
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgJyIgKyBl
dmVudE5hbWUgKyAiJyBpcyBhbHJlYWR5IHNldCIpOworICAgICAgICAKKyAgICB0aGlzLl9kZWZh
dWx0SGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOworfTsKKworRXZlbnRFbWl0dGVyLm9u
ID0KK0V2ZW50RW1pdHRlci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBj
YWxsYmFjaykgeworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5
IHx8IHt9OworCisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnRO
YW1lXTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgbGlzdGVuZXJzID0gdGhpcy5fZXZl
bnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107CisKKyAgICBpZiAobGlzdGVuZXJzLmluZGV4T2Yo
Y2FsbGJhY2spID09IC0xKQorICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7Cit9Owor
CitFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQorRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50
TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZXZl
bnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CisKKyAgICB2YXIgbGlzdGVu
ZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJz
KQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihj
YWxsYmFjayk7CisgICAgaWYgKGluZGV4ICE9PSAtMSkKKyAgICAgICAgbGlzdGVuZXJzLnNwbGlj
ZShpbmRleCwgMSk7Cit9OworCitFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVu
Y3Rpb24oZXZlbnROYW1lKSB7CisgICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2
ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOworfTsKKworZXhwb3J0cy5FdmVudEVtaXR0ZXIg
PSBFdmVudEVtaXR0ZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uvc2VsZWN0aW9uJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xh
bmcnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29w
Iik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBFdmVudEVtaXR0ZXIg
PSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFJhbmdl
ID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNl
c3Npb24pIHsKKyAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuZG9jID0gc2Vz
c2lvbi5nZXREb2N1bWVudCgpOworCisgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIHRo
aXMubGVhZCA9IHRoaXMuc2VsZWN0aW9uTGVhZCA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAw
KTsKKyAgICB0aGlzLmFuY2hvciA9IHRoaXMuc2VsZWN0aW9uQW5jaG9yID0gdGhpcy5kb2MuY3Jl
YXRlQW5jaG9yKDAsIDApOworCisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMubGVhZC5v
bigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VDdXJz
b3IiKTsKKyAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5KQorICAgICAgICAgICAgc2VsZi5fZW1p
dCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgICAgIGlmICghc2VsZi4ka2VlcERlc2lyZWRDb2x1
bW5PbkNoYW5nZSAmJiBlLm9sZC5jb2x1bW4gIT0gZS52YWx1ZS5jb2x1bW4pCisgICAgICAgICAg
ICBzZWxmLiRkZXNpcmVkQ29sdW1uID0gbnVsbDsKKyAgICB9KTsKKworICAgIHRoaXMuc2VsZWN0
aW9uQW5jaG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFzZWxmLiRp
c0VtcHR5KQorICAgICAgICAgICAgc2VsZi5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAg
fSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50
RW1pdHRlcik7CisgICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biAodGhpcy4kaXNFbXB0eSB8fCAoCisgICAgICAgICAgICB0aGlzLmFuY2hvci5yb3cgPT0gdGhp
cy5sZWFkLnJvdyAmJgorICAgICAgICAgICAgdGhpcy5hbmNob3IuY29sdW1uID09IHRoaXMubGVh
ZC5jb2x1bW4KKyAgICAgICAgKSk7CisgICAgfTsKKyAgICB0aGlzLmlzTXVsdGlMaW5lID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2UoKS5p
c011bHRpTGluZSgpOworICAgIH07CisgICAgdGhpcy5nZXRDdXJzb3IgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubGVhZC5nZXRQb3NpdGlvbigpOworICAgIH07CisgICAgdGhp
cy5zZXRTZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0
aGlzLmFuY2hvci5zZXRQb3NpdGlvbihyb3csIGNvbHVtbik7CisKKyAgICAgICAgaWYgKHRoaXMu
JGlzRW1wdHkpIHsKKyAgICAgICAgICAgIHRoaXMuJGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0aGlzLmdldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhp
cy4kaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkxlYWQoKQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmNob3IuZ2V0UG9zaXRpb24o
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLnNo
aWZ0U2VsZWN0aW9uID0gZnVuY3Rpb24oY29sdW1ucykgeworICAgICAgICBpZiAodGhpcy4kaXNF
bXB0eSkgeworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8odGhpcy5sZWFkLnJvdywgdGhp
cy5sZWFkLmNvbHVtbiArIGNvbHVtbnMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
OworCisgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbkFuY2hvcigpOworICAg
ICAgICB2YXIgbGVhZCA9IHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpOworCisgICAgICAgIHZhciBp
c0JhY2t3YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTsKKworICAgICAgICBpZiAoIWlzQmFja3dh
cmRzIHx8IGFuY2hvci5jb2x1bW4gIT09IDApCisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlv
bkFuY2hvcihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uICsgY29sdW1ucyk7CisKKyAgICAgICAg
aWYgKGlzQmFja3dhcmRzIHx8IGxlYWQuY29sdW1uICE9PSAwKSB7CisgICAgICAgICAgICB0aGlz
LiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1
cnNvclRvKGxlYWQucm93LCBsZWFkLmNvbHVtbiArIGNvbHVtbnMpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuaXNCYWNrd2FyZHMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuYW5jaG9yOworICAgICAgICB2YXIgbGVhZCA9IHRo
aXMubGVhZDsKKyAgICAgICAgcmV0dXJuIChhbmNob3Iucm93ID4gbGVhZC5yb3cgfHwgKGFuY2hv
ci5yb3cgPT0gbGVhZC5yb3cgJiYgYW5jaG9yLmNvbHVtbiA+IGxlYWQuY29sdW1uKSk7CisgICAg
fTsKKyAgICB0aGlzLmdldFJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhbmNob3Ig
PSB0aGlzLmFuY2hvcjsKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisKKyAgICAgICAg
aWYgKHRoaXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMo
bGVhZCwgbGVhZCk7CisKKyAgICAgICAgaWYgKHRoaXMuaXNCYWNrd2FyZHMoKSkgeworICAgICAg
ICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMobGVhZCwgYW5jaG9yKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGFuY2hv
ciwgbGVhZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRpc0VtcHR5KSB7CisgICAgICAgICAgICB0
aGlzLiRpc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVj
dGlvbiIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKKyAg
ICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoMCwgMCk7CisgICAgICAgIHRoaXMubW92ZUN1
cnNvclRvKGxhc3RSb3csIHRoaXMuZG9jLmdldExpbmUobGFzdFJvdykubGVuZ3RoKTsKKyAgICB9
OworICAgIHRoaXMuc2V0UmFuZ2UgPQorICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5j
dGlvbihyYW5nZSwgcmV2ZXJzZSkgeworICAgICAgICBpZiAocmV2ZXJzZSkgeworICAgICAgICAg
ICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVt
bik7CisgICAgICAgICAgICB0aGlzLnNlbGVjdFRvKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3Rh
cnQuY29sdW1uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0
aW9uQW5jaG9yKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKKyAgICAgICAg
ICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7CisgICAgfTsKKworICAg
IHRoaXMuJG1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihtb3ZlcikgeworICAgICAgICB2YXIgbGVh
ZCA9IHRoaXMubGVhZDsKKyAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpCisgICAgICAgICAgICB0
aGlzLnNldFNlbGVjdGlvbkFuY2hvcihsZWFkLnJvdywgbGVhZC5jb2x1bW4pOworCisgICAgICAg
IG1vdmVyLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFRvID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAgICAgICAgfSk7
CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3MpIHsKKyAg
ICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMu
bW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICB0aGlz
LnNlbGVjdFVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhp
cy5tb3ZlQ3Vyc29yVXApOworICAgIH07CisgICAgdGhpcy5zZWxlY3REb3duID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRG93bik7Cisg
ICAgfTsKKyAgICB0aGlzLnNlbGVjdFJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
JG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yUmlnaHQpOworICAgIH07CisgICAgdGhpcy5z
ZWxlY3RMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhp
cy5tb3ZlQ3Vyc29yTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdExpbmVTdGFydCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxp
bmVTdGFydCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdExpbmVFbmQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMaW5lRW5kKTsKKyAg
ICB9OworICAgIHRoaXMuc2VsZWN0RmlsZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVFbmQpOworICAgIH07CisgICAgdGhp
cy5zZWxlY3RGaWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVj
dGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RX
b3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlz
Lm1vdmVDdXJzb3JXb3JkUmlnaHQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RXb3JkTGVmdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNv
cldvcmRMZWZ0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0V29yZFJhbmdlID0gZnVuY3Rpb24ocm93
LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpIHsK
KyAgICAgICAgICAgIHZhciBjdXJzb3IgPSByb3cgfHwgdGhpcy5sZWFkOworICAgICAgICAgICAg
cm93ID0gY3Vyc29yLnJvdzsKKyAgICAgICAgICAgIGNvbHVtbiA9IGN1cnNvci5jb2x1bW47Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2Uocm93LCBj
b2x1bW4pOworICAgIH07CisgICAgdGhpcy5zZWxlY3RXb3JkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRXb3JkUmFuZ2UoKSk7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdEFXb3JkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3Ig
PSB0aGlzLmdldEN1cnNvcigpOworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0
QVdvcmRSYW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgdGhpcy5zZXRT
ZWxlY3Rpb25SYW5nZShyYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0TGluZVJhbmdlID0g
ZnVuY3Rpb24ocm93LCBleGNsdWRlTGFzdENoYXIpIHsKKyAgICAgICAgdmFyIHJvd1N0YXJ0ID0g
dHlwZW9mIHJvdyA9PSAibnVtYmVyIiA/IHJvdyA6IHRoaXMubGVhZC5yb3c7CisgICAgICAgIHZh
ciByb3dFbmQ7CisKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRM
aW5lKHJvd1N0YXJ0KTsKKyAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICByb3dT
dGFydCA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5l
LmVuZC5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByb3dFbmQgPSByb3dTdGFy
dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhjbHVkZUxhc3RDaGFyKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kLCB0aGlzLnNlc3Npb24uZ2V0TGlu
ZShyb3dFbmQpLmxlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcg
UmFuZ2Uocm93U3RhcnQsIDAsIHJvd0VuZCArIDEsIDApOworICAgIH07CisgICAgdGhpcy5zZWxl
Y3RMaW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhp
cy5nZXRMaW5lUmFuZ2UoKSk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JVcCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgtMSwgMCk7CisgICAgfTsKKyAgICB0
aGlzLm1vdmVDdXJzb3JEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNv
ckJ5KDEsIDApOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksCisgICAgICAg
ICAgICBmb2xkOworCisgICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChj
dXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAtMSkpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1
cnNvclRvKGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CisgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyc29yLmNvbHVtbiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLnJvdyA+
IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhjdXJzb3Iucm93IC0gMSwg
dGhpcy5kb2MuZ2V0TGluZShjdXJzb3Iucm93IC0gMSkubGVuZ3RoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhp
cy5zZXNzaW9uLmdldFRhYlNpemUoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uaXNU
YWJTdG9wKGN1cnNvcikgJiYgdGhpcy5kb2MuZ2V0TGluZShjdXJzb3Iucm93KS5zbGljZShjdXJz
b3IuY29sdW1uLXRhYlNpemUsIGN1cnNvci5jb2x1bW4pLnNwbGl0KCIgIikubGVuZ3RoLTEgPT0g
dGFiU2l6ZSkKKyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCAtdGFiU2l6ZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwg
LTEpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksCisg
ICAgICAgICAgICBmb2xkOworICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xk
QXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiwgMSkpIHsKKyAgICAgICAgICAgIHRoaXMubW92
ZUN1cnNvclRvKGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0aGlzLmxlYWQuY29sdW1uID09IHRoaXMuZG9jLmdldExpbmUodGhpcy5s
ZWFkLnJvdykubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5sZWFkLnJvdyA8IHRoaXMu
ZG9jLmdldExlbmd0aCgpIC0gMSkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRv
KHRoaXMubGVhZC5yb3cgKyAxLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNp
emUoKTsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQ7CisgICAgICAgICAgICBp
ZiAodGhpcy5zZXNzaW9uLmlzVGFiU3RvcChjdXJzb3IpICYmIHRoaXMuZG9jLmdldExpbmUoY3Vy
c29yLnJvdykuc2xpY2UoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbit0YWJTaXplKS5zcGxp
dCgiICIpLmxlbmd0aC0xID09IHRhYlNpemUpCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vy
c29yQnkoMCwgdGFiU2l6ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhp
cy5tb3ZlQ3Vyc29yQnkoMCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUN1
cnNvckxpbmVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFk
LnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisgICAgICAgIHZh
ciBzY3JlZW5Sb3cgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhyb3csIGNvbHVt
bik7CisgICAgICAgIHZhciBmaXJzdENvbHVtblBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNjcmVl
blRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIDApOworICAgICAgICB2YXIgYmVmb3JlQ3Vy
c29yID0gdGhpcy5zZXNzaW9uLmdldERpc3BsYXlMaW5lKAorICAgICAgICAgICAgcm93LCBudWxs
LCBmaXJzdENvbHVtblBvc2l0aW9uLnJvdywKKyAgICAgICAgICAgIGZpcnN0Q29sdW1uUG9zaXRp
b24uY29sdW1uCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIGxlYWRpbmdTcGFjZSA9IGJlZm9y
ZUN1cnNvci5tYXRjaCgvXlxzKi8pOworICAgICAgICBpZiAobGVhZGluZ1NwYWNlWzBdLmxlbmd0
aCAhPSBjb2x1bW4gJiYgIXRoaXMuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCkKKyAg
ICAgICAgICAgIGZpcnN0Q29sdW1uUG9zaXRpb24uY29sdW1uICs9IGxlYWRpbmdTcGFjZVswXS5s
ZW5ndGg7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oZmlyc3RDb2x1bW5Qb3Np
dGlvbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JMaW5lRW5kID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICB2YXIgbGluZUVuZCA9IHRo
aXMuc2Vzc2lvbi5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbihsZWFkLnJvdywgbGVh
ZC5jb2x1bW4pOworICAgICAgICBpZiAodGhpcy5sZWFkLmNvbHVtbiA9PSBsaW5lRW5kLmNvbHVt
bikgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShsaW5lRW5k
LnJvdyk7CisgICAgICAgICAgICBpZiAobGluZUVuZC5jb2x1bW4gPT0gbGluZS5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgdGV4dEVuZCA9IGxpbmUuc2VhcmNoKC9ccyskLyk7CisgICAg
ICAgICAgICAgICAgaWYgKHRleHRFbmQgPiAwKQorICAgICAgICAgICAgICAgICAgICBsaW5lRW5k
LmNvbHVtbiA9IHRleHRFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLm1vdmVDdXJzb3JUbyhsaW5lRW5kLnJvdywgbGluZUVuZC5jb2x1bW4pOworICAgIH07Cisg
ICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93
ID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxOworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5k
b2MuZ2V0TGluZShyb3cpLmxlbmd0aDsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBj
b2x1bW4pOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKDAsIDApOworICAgIH07CisgICAgdGhpcy5t
b3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0g
dGhpcy5sZWFkLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47Cisg
ICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgcmln
aHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisKKyAgICAgICAgdmFyIG1hdGNo
OworICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAg
ICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICB2YXIgZm9sZCA9
IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9s
ZCkgeworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVu
ZC5jb2x1bW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICht
YXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKKyAg
ICAgICAgICAgIGNvbHVtbiArPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg7Cisg
ICAgICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAg
ICAgICAgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbHVtbiA+PSBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5t
b3ZlQ3Vyc29yVG8ocm93LCBsaW5lLmxlbmd0aCk7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJz
b3JSaWdodCgpOworICAgICAgICAgICAgaWYgKHJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0g
MSkKKyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24u
dG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7CisgICAgICAgICAgICBjb2x1bW4gKz0gdGhp
cy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRv
a2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMubW92ZUN1cnNv
clRvKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVm
dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsKKyAgICAg
ICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisgICAgICAgIHZhciBmb2xkOworICAg
ICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIC0xKSkg
eworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3Rh
cnQuY29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBzdHIgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KHJvdywgY29sdW1uLCAtMSk7Cisg
ICAgICAgIGlmIChzdHIgPT0gbnVsbCkgeworICAgICAgICAgICAgc3RyID0gdGhpcy5kb2MuZ2V0
TGluZShyb3cpLnN1YnN0cmluZygwLCBjb2x1bW4pCisgICAgICAgIH0KKworICAgICAgICB2YXIg
bGVmdE9mQ3Vyc29yID0gbGFuZy5zdHJpbmdSZXZlcnNlKHN0cik7CisgICAgICAgIHZhciBtYXRj
aDsKKyAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAg
ICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgaWYgKG1hdGNo
ID0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhsZWZ0T2ZDdXJzb3IpKSB7CisgICAgICAg
ICAgICBjb2x1bW4gLT0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4OworICAgICAg
ICAgICAgbGVmdE9mQ3Vyc29yID0gbGVmdE9mQ3Vyc29yLnNsaWNlKHRoaXMuc2Vzc2lvbi5ub25U
b2tlblJlLmxhc3RJbmRleCk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5s
YXN0SW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChjb2x1bW4gPD0gMCkgeworICAg
ICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCAwKTsKKyAgICAgICAgICAgIHRoaXMubW92
ZUN1cnNvckxlZnQoKTsKKyAgICAgICAgICAgIGlmIChyb3cgPiAwKQorICAgICAgICAgICAgICAg
IHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1hdGNoID0gdGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhsZWZ0T2ZD
dXJzb3IpKSB7CisgICAgICAgICAgICBjb2x1bW4gLT0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFz
dEluZGV4OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAg
ICB9OworCisgICAgdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXggPSBmdW5jdGlvbihyaWdodE9mQ3Vy
c29yKSB7CisgICAgICAgIHZhciBtYXRjaCwgaW5kZXggPSAwLCBjaDsKKyAgICAgICAgdmFyIHdo
aXRlc3BhY2VSZSA9IC9ccy87CisgICAgICAgIHZhciB0b2tlblJlID0gdGhpcy5zZXNzaW9uLnRv
a2VuUmU7CisKKyAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICBpZiAobWF0
Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7CisgICAgICAg
ICAgICBpbmRleCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYg
d2hpdGVzcGFjZVJlLnRlc3QoY2gpKQorICAgICAgICAgICAgICAgIGluZGV4ICsrOworCisgICAg
ICAgICAgICBpZiAoaW5kZXggPD0gMSkgeworICAgICAgICAgICAgICAgIHRva2VuUmUubGFzdElu
ZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5k
ZXhdKSAmJiAhdG9rZW5SZS50ZXN0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlblJl
Lmxhc3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICsrOworICAgICAgICAg
ICAgICAgICAgICBpZiAod2hpdGVzcGFjZVJlLnRlc3QoY2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPiAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXgtLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNo
ID0gcmlnaHRPZkN1cnNvcltpbmRleF0pICYmIHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKys7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4ID4gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tl
blJlLmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH07CisKKyAg
ICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5j
b2x1bW47CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAg
ICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisKKyAgICAgICAg
dmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTsKKyAgICAg
ICAgaWYgKGZvbGQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5l
bmQucm93LCBmb2xkLmVuZC5jb2x1bW4pOworCisgICAgICAgIGlmIChjb2x1bW4gPT0gbGluZS5s
ZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBsID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7CisgICAg
ICAgICAgICBkbyB7ICAgIAorICAgICAgICAgICAgICAgIHJvdysrOworICAgICAgICAgICAgICAg
IHJpZ2h0T2ZDdXJzb3IgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykKKyAgICAgICAgICAgIH0gd2hp
bGUgKHJvdyA8IGwgJiYgL15ccyokLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoIS9eXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKQorICAgICAgICAg
ICAgICAgIHJpZ2h0T2ZDdXJzb3IgPSAiIgorICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KHJpZ2h0
T2ZDdXJzb3IpOworCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uICsgaW5k
ZXgpOworICAgIH07CisKKyAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29s
dW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKKworICAgICAgICB2YXIgZm9sZDsKKyAgICAgICAgaWYg
KGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAtMSkpCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQu
Y29sdW1uKTsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdyku
c3Vic3RyaW5nKDAsIGNvbHVtbik7CisgICAgICAgIGlmIChjb2x1bW4gPT0gMCkgeworICAgICAg
ICAgICAgZG8geyAgICAKKyAgICAgICAgICAgICAgICByb3ctLTsKKyAgICAgICAgICAgICAgICBs
aW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICAgICAgfSB3aGlsZSAocm93ID4g
MCAmJiAvXlxzKiQvLnRlc3QobGluZSkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbHVt
biA9IGxpbmUubGVuZ3RoOworICAgICAgICAgICAgaWYgKCEvXHMrJC8udGVzdChsaW5lKSkKKyAg
ICAgICAgICAgICAgICBsaW5lID0gIiIKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZWZ0T2ZD
dXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2UobGluZSk7CisgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuJHNob3J0V29yZEVuZEluZGV4KGxlZnRPZkN1cnNvcik7CisKKyAgICAgICAgcmV0dXJuIHRo
aXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uIC0gaW5kZXgpOworICAgIH07CisKKyAgICB0aGlz
Lm1vdmVDdXJzb3JXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vz
c2lvbi4kc2VsZWN0TG9uZ1dvcmRzKQorICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dv
cmRSaWdodCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9y
dFdvcmRSaWdodCgpOworICAgIH07CisKKyAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpCisg
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdCgpOworICAgIH07CisgICAg
dGhpcy5tb3ZlQ3Vyc29yQnkgPSBmdW5jdGlvbihyb3dzLCBjaGFycykgeworICAgICAgICB2YXIg
c2NyZWVuUG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbigKKyAgICAg
ICAgICAgIHRoaXMubGVhZC5yb3csCisgICAgICAgICAgICB0aGlzLmxlYWQuY29sdW1uCisgICAg
ICAgICk7CisKKyAgICAgICAgaWYgKGNoYXJzID09PSAwKSB7CisgICAgICAgICAgICBpZiAodGhp
cy4kZGVzaXJlZENvbHVtbikKKyAgICAgICAgICAgICAgICBzY3JlZW5Qb3MuY29sdW1uID0gdGhp
cy4kZGVzaXJlZENvbHVtbjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlz
LiRkZXNpcmVkQ29sdW1uID0gc2NyZWVuUG9zLmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBkb2NQb3MgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVl
blBvcy5yb3cgKyByb3dzLCBzY3JlZW5Qb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vy
c29yVG8oZG9jUG9zLnJvdywgZG9jUG9zLmNvbHVtbiArIGNoYXJzLCBjaGFycyA9PT0gMCk7Cisg
ICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24p
IHsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1
bW4pOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVt
biwga2VlcERlc2lyZWRDb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24u
Z2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAg
ICAgIHJvdyA9IGZvbGQuc3RhcnQucm93OworICAgICAgICAgICAgY29sdW1uID0gZm9sZC5zdGFy
dC5jb2x1bW47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9u
Q2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5sZWFkLnNldFBvc2l0aW9uKHJvdywgY29sdW1u
KTsKKyAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IGZhbHNlOworCisg
ICAgICAgIGlmICgha2VlcERlc2lyZWRDb2x1bW4pCisgICAgICAgICAgICB0aGlzLiRkZXNpcmVk
Q29sdW1uID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvU2NyZWVuID0gZnVu
Y3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7CisgICAgICAgIHZhciBwb3Mg
PSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgY29sdW1uKTsKKyAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbiwga2VlcERlc2lyZWRD
b2x1bW4pOworICAgIH07CisgICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy5sZWFkLmRldGFjaCgpOworICAgICAgICB0aGlzLmFuY2hvci5kZXRhY2goKTsKKyAgICAg
ICAgdGhpcy5zZXNzaW9uID0gdGhpcy5kb2MgPSBudWxsOworICAgIH0KKworICAgIHRoaXMuZnJv
bU9yaWVudGVkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB0aGlzLnNldFNlbGVj
dGlvblJhbmdlKHJhbmdlLCByYW5nZS5jdXJzb3IgPT0gcmFuZ2Uuc3RhcnQpOworICAgICAgICB0
aGlzLiRkZXNpcmVkQ29sdW1uID0gcmFuZ2UuZGVzaXJlZENvbHVtbiB8fCB0aGlzLiRkZXNpcmVk
Q29sdW1uOworICAgIH0KKworICAgIHRoaXMudG9PcmllbnRlZFJhbmdlID0gZnVuY3Rpb24ocmFu
Z2UpIHsKKyAgICAgICAgdmFyIHIgPSB0aGlzLmdldFJhbmdlKCk7CisgICAgICAgIGlmIChyYW5n
ZSkgeworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gci5zdGFydC5jb2x1bW47Cisg
ICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSByLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJh
bmdlLmVuZC5jb2x1bW4gPSByLmVuZC5jb2x1bW47CisgICAgICAgICAgICByYW5nZS5lbmQucm93
ID0gci5lbmQucm93OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2UgPSByOwor
ICAgICAgICB9CisKKyAgICAgICAgcmFuZ2UuY3Vyc29yID0gdGhpcy5pc0JhY2t3YXJkcygpID8g
cmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7CisgICAgICAgIHJhbmdlLmRlc2lyZWRDb2x1bW4gPSB0
aGlzLiRkZXNpcmVkQ29sdW1uOworICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfQorCit9KS5j
YWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpOworCitleHBvcnRzLlNlbGVjdGlvbiA9IFNlbGVjdGlv
bjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvcmFuZ2UnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIFJh
bmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikg
eworICAgIHRoaXMuc3RhcnQgPSB7CisgICAgICAgIHJvdzogc3RhcnRSb3csCisgICAgICAgIGNv
bHVtbjogc3RhcnRDb2x1bW4KKyAgICB9OworCisgICAgdGhpcy5lbmQgPSB7CisgICAgICAgIHJv
dzogZW5kUm93LAorICAgICAgICBjb2x1bW46IGVuZENvbHVtbgorICAgIH07Cit9OworCisoZnVu
Y3Rpb24oKSB7IAorICAgIHRoaXMuaXNFcXVhbCA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cgJiYKKyAgICAgICAgICAg
IHRoaXMuZW5kLnJvdyA9PSByYW5nZS5lbmQucm93ICYmCisgICAgICAgICAgICB0aGlzLnN0YXJ0
LmNvbHVtbiA9PSByYW5nZS5zdGFydC5jb2x1bW4gJiYKKyAgICAgICAgICAgIHRoaXMuZW5kLmNv
bHVtbiA9PSByYW5nZS5lbmQuY29sdW1uCisgICAgfTsgCisgICAgdGhpcy50b1N0cmluZyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gKCJSYW5nZTogWyIgKyB0aGlzLnN0YXJ0LnJvdyAr
ICIvIiArIHRoaXMuc3RhcnQuY29sdW1uICsKKyAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5l
bmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKKyAgICB9OyAKKworICAgIHRo
aXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhp
cy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwOworICAgIH07IAorICAgIHRoaXMuY29tcGFyZVJh
bmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIGNtcCwKKyAgICAgICAgICAgIGVu
ZCA9IHJhbmdlLmVuZCwKKyAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CisKKyAgICAg
ICAgY21wID0gdGhpcy5jb21wYXJlKGVuZC5yb3csIGVuZC5jb2x1bW4pOworICAgICAgICBpZiAo
Y21wID09IDEpIHsKKyAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0
YXJ0LmNvbHVtbik7CisgICAgICAgICAgICBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY21wID09IC0xKSB7
CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj
bXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAg
aWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsgCisgICAgdGhpcy5jb21wYXJlUG9pbnQgPSBmdW5jdGlvbihw
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocC5yb3csIHAuY29sdW1uKTsKKyAgICB9
OyAKKyAgICB0aGlzLmNvbnRhaW5zUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJl
UG9pbnQocmFuZ2UuZW5kKSA9PSAwOworICAgIH07CisgICAgdGhpcy5pbnRlcnNlY3RzID0gZnVu
Y3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdl
KTsKKyAgICAgICAgcmV0dXJuIChjbXAgPT0gLTEgfHwgY21wID09IDAgfHwgY21wID09IDEpOwor
ICAgIH07CisgICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47
CisgICAgfTsgCisgICAgdGhpcy5pc1N0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9
PSBjb2x1bW47CisgICAgfTsgCisgICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7CisgICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CisgICAgICAgICAg
ICB0aGlzLnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47CisgICAgICAgICAgICB0aGlzLnN0YXJ0
LnJvdyA9IHJvdy5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0
LnJvdyA9IHJvdzsKKyAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gY29sdW1uOworICAg
ICAgICB9CisgICAgfTsgCisgICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
eworICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgeworICAgICAgICAgICAgdGhp
cy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjsKKyAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJv
dy5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7
CisgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CisgICAgICAgIH0KKyAgICB9
OyAKKyAgICB0aGlzLmluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlm
ICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKKyAgICAgICAgICAgIGlmICh0aGlz
LmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfTsgCisgICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJv
dywgY29sdW1uKSB7CisgICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDAp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07IAorICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Cisg
ICAgICAgIGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAgICBpZiAocm93ID09
PSB0aGlzLnN0YXJ0LnJvdykgeworICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlz
LnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAocm93IDwgdGhpcy5zdGFy
dC5yb3cpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKHJvdyA+IHRoaXMu
ZW5kLnJvdykKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGlmICh0aGlzLnN0YXJ0
LnJvdyA9PT0gcm93KQorICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNv
bHVtbiA/IDAgOiAtMTsKKworICAgICAgICBpZiAodGhpcy5lbmQucm93ID09PSByb3cpCisgICAg
ICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOworCisgICAg
ICAgIHJldHVybiAwOworICAgIH07CisgICAgdGhpcy5jb21wYXJlU3RhcnQgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMu
c3RhcnQuY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuY29tcGFyZUVuZCA9IGZ1bmN0aW9uKHJvdywg
Y29sdW1uKSB7CisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNv
bHVtbiA9PSBjb2x1bW4pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1u
KSB7CisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9
PSBjb2x1bW4pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgaWYgKHRo
aXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlz
LmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYgKHRo
aXMuZW5kLnJvdyA+IGxhc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSB7CisgICAgICAg
ICAgICAgICAgcm93OiBsYXN0Um93KzEsCisgICAgICAgICAgICAgICAgY29sdW1uOiAwCisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFz
dFJvdykgeworICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgIHJvdzog
bGFzdFJvdysxLAorICAgICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KSB7CisgICAg
ICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywKKyAg
ICAgICAgICAgICAgICBjb2x1bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBlbmQg
PSB7CisgICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywKKyAgICAgICAgICAgICAgICBjb2x1
bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJhbmdlLmZy
b21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsKKyAgICB9Owor
ICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIGNt
cCA9IHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisKKyAgICAgICAgaWYgKGNtcCA9PSAwKQor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMSkKKyAg
ICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07
CisKKyAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwg
ZW5kIHx8IHRoaXMuZW5kKTsKKyAgICB9OworCisgICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgPT0gdGhpcy5lbmQucm93ICYmIHRo
aXMuc3RhcnQuY29sdW1uID09IHRoaXMuZW5kLmNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLmlz
TXVsdGlMaW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cg
IT09IHRoaXMuZW5kLnJvdyk7CisgICAgfTsKKyAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsK
KyAgICB9OworICAgIHRoaXMuY29sbGFwc2VSb3dzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhp
cy5zdGFydC5yb3csIDAsIE1hdGgubWF4KHRoaXMuc3RhcnQucm93LCB0aGlzLmVuZC5yb3ctMSks
IDApCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFy
dC5yb3csIDAsIHRoaXMuZW5kLnJvdywgMCkKKyAgICB9OworICAgIHRoaXMudG9TY3JlZW5SYW5n
ZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHNjcmVlblBvc1N0YXJ0ID0KKyAg
ICAgICAgICAgIHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpOwor
ICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0KKyAgICAgICAgICAgIHNlc3Npb24uZG9jdW1lbnRU
b1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTsKKworICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAor
ICAgICAgICAgICAgc2NyZWVuUG9zU3RhcnQucm93LCBzY3JlZW5Qb3NTdGFydC5jb2x1bW4sCisg
ICAgICAgICAgICBzY3JlZW5Qb3NFbmQucm93LCBzY3JlZW5Qb3NFbmQuY29sdW1uCisgICAgICAg
ICk7CisgICAgfTsKKworfSkuY2FsbChSYW5nZS5wcm90b3R5cGUpOworUmFuZ2UuZnJvbVBvaW50
cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKKyAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJv
dywgc3RhcnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTsKK307CisKK2V4cG9ydHMuUmFu
Z2UgPSBSYW5nZTsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS90ZXh0JywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL3RleHRf
aGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdW5pY29kZSddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgVG9rZW5pemVyID0g
cmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIFRleHRIaWdobGlnaHRSdWxl
cyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7
Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIg
dW5pY29kZSA9IHJlcXVpcmUoIi4uL3VuaWNvZGUiKTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBUZXh0SGlnaGxpZ2h0
UnVsZXMoKS5nZXRSdWxlcygpKTsKKyAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQmVoYXZpb3Vy
KCk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLnRva2VuUmUgPSBuZXcgUmVnRXhw
KCJeWyIKKyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLkwKKyAgICAgICAgKyB1bmljb2RlLnBh
Y2thZ2VzLk1uICsgdW5pY29kZS5wYWNrYWdlcy5NYworICAgICAgICArIHVuaWNvZGUucGFja2Fn
ZXMuTmQKKyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLlBjICsgIlxcJF9dKyIsICJnIgorICAg
ICk7CisgICAgCisgICAgdGhpcy5ub25Ub2tlblJlID0gbmV3IFJlZ0V4cCgiXig/OlteIgorICAg
ICAgICArIHVuaWNvZGUucGFja2FnZXMuTAorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTW4g
KyB1bmljb2RlLnBhY2thZ2VzLk1jCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5OZAorICAg
ICAgICArIHVuaWNvZGUucGFja2FnZXMuUGMgKyAiXFwkX118XHNdKSsiLCAiZyIKKyAgICApOwor
CisgICAgdGhpcy5nZXRUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJHRva2VuaXplcjsKKyAgICB9OworCisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBm
dW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSB7CisgICAgfTsKKworICAgIHRo
aXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAg
ICAgIHJldHVybiAiIjsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlv
bihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisK
KyAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAg
fTsKKworICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFy
IG1hdGNoID0gbGluZS5tYXRjaCgvXihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIi
OworICAgIH07CisgICAgCisgICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9u
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZU1vZGVE
ZWxlZ2F0ZXMgPSBmdW5jdGlvbiAobWFwcGluZykgeworICAgICAgICBpZiAoIXRoaXMuJGVtYmVk
cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuJG1vZGVz
ID0ge307CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICBpZiAobWFwcGluZ1t0aGlzLiRlbWJlZHNbaV1dKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSA9IG5ldyBtYXBwaW5nW3Ro
aXMuJGVtYmVkc1tpXV0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdmFyIGRlbGVnYXRpb25zID0gWyd0b2dnbGVDb21tZW50TGluZXMnLCAnZ2V0TmV4dExp
bmVJbmRlbnQnLCAnY2hlY2tPdXRkZW50JywgJ2F1dG9PdXRkZW50JywgJ3RyYW5zZm9ybUFjdGlv
biddOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZWdhdGlvbnMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIChmdW5jdGlvbihzY29wZSkgeworICAgICAgICAgICAgICB2YXIg
ZnVuY3Rpb25OYW1lID0gZGVsZWdhdGlvbnNbaV07CisgICAgICAgICAgICAgIHZhciBkZWZhdWx0
SGFuZGxlciA9IHNjb3BlW2Z1bmN0aW9uTmFtZV07CisgICAgICAgICAgICAgIHNjb3BlW2RlbGVn
YXRpb25zW2ldXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
JGRlbGVnYXRvcihmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgZGVmYXVsdEhhbmRsZXIpOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9ICh0aGlzKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdGhpcy4kZGVsZWdhdG9yID0gZnVuY3Rpb24obWV0aG9kLCBhcmdzLCBkZWZhdWx0
SGFuZGxlcikgeworICAgICAgICB2YXIgc3RhdGUgPSBhcmdzWzBdOworICAgICAgICAKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRlbWJlZHMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSkgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IHN0YXRlLnNwbGl0KHRoaXMuJGVtYmVk
c1tpXSk7CisgICAgICAgICAgICBpZiAoIXNwbGl0WzBdICYmIHNwbGl0WzFdKSB7CisgICAgICAg
ICAgICAgICAgYXJnc1swXSA9IHNwbGl0WzFdOworICAgICAgICAgICAgICAgIHZhciBtb2RlID0g
dGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9k
ZVttZXRob2RdLmFwcGx5KG1vZGUsIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHZhciByZXQgPSBkZWZhdWx0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAg
ICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyID8gcmV0IDogdW5kZWZpbmVkOworICAgIH07CisgICAg
CisgICAgdGhpcy50cmFuc2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0
b3IsIHNlc3Npb24sIHBhcmFtKSB7CisgICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXIpIHsKKyAg
ICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gdGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMo
KTsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGJlaGF2aW91cnNba2V5XVthY3Rpb25dKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciByZXQgPSBiZWhhdmlvdXJzW2tleV1bYWN0aW9uXS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorfSkuY2FsbChNb2RlLnByb3Rv
dHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3Rv
a2VuaXplcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cit2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMs
IGZsYWcpIHsKKyAgICBmbGFnID0gZmxhZyA/ICJnIiArIGZsYWcgOiAiZyI7CisgICAgdGhpcy5z
dGF0ZXMgPSBydWxlczsKKworICAgIHRoaXMucmVnRXhwcyA9IHt9OworICAgIHRoaXMubWF0Y2hN
YXBwaW5ncyA9IHt9OworICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN0YXRlcykgeworICAgICAg
ICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1trZXldOworICAgICAgICB2YXIgcnVsZVJlZ0V4cHMg
PSBbXTsKKyAgICAgICAgdmFyIG1hdGNoVG90YWwgPSAwOworICAgICAgICB2YXIgbWFwcGluZyA9
IHRoaXMubWF0Y2hNYXBwaW5nc1trZXldID0ge2RlZmF1bHRUb2tlbjogInRleHQifTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgcnVsZSA9IHN0YXRlW2ldOworICAgICAgICAgICAgaWYgKHJ1bGUuZGVmYXVsdFRva2Vu
KSB7CisgICAgICAgICAgICAgICAgbWFwcGluZy5kZWZhdWx0VG9rZW4gPSBydWxlLmRlZmF1bHRU
b2tlbjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChydWxlLnJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKQorICAgICAgICAgICAgICAgIHJ1
bGUucmVnZXggPSBydWxlLnJlZ2V4LnRvU3RyaW5nKCkuc2xpY2UoMSwgLTEpOworICAgICAgICAg
ICAgdmFyIGFkanVzdGVkcmVnZXggPSBydWxlLnJlZ2V4OworICAgICAgICAgICAgdmFyIG1hdGNo
Y291bnQgPSBuZXcgUmVnRXhwKCIoPzooIiArIGFkanVzdGVkcmVnZXggKyAiKXwoLikpIikuZXhl
YygiYSIpLmxlbmd0aCAtIDI7CisgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlLnRv
a2VuKSkgeworICAgICAgICAgICAgICAgIGlmIChydWxlLnRva2VuLmxlbmd0aCA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW5BcnJheSA9IHJ1
bGUudG9rZW47CisgICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSB0aGlzLiRhcnJheVRv
a2VuczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtYXRjaGNvdW50ID4gMSkgeworICAgICAgICAgICAgICAgIGlmICgvXFxcZC8udGVzdChydWxl
LnJlZ2V4KSkgeworICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdl
eC5yZXBsYWNlKC9cXChbMC05XSspL2csIGZ1bmN0aW9uIChtYXRjaCwgZGlnaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiXFwiICsgKHBhcnNlSW50KGRpZ2l0LCAxMCkgKyBt
YXRjaFRvdGFsICsgMSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAxOworICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVs
ZS5yZWdleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcnVsZS5z
cGxpdFJlZ2V4KQorICAgICAgICAgICAgICAgICAgICBydWxlLnNwbGl0UmVnZXggPSB0aGlzLmNy
ZWF0ZVNwbGl0dGVyUmVnZXhwKHJ1bGUucmVnZXgsIGZsYWcpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBtYXBwaW5nW21hdGNoVG90YWxdID0gaTsKKyAgICAgICAgICAgIG1hdGNoVG90
YWwgKz0gbWF0Y2hjb3VudDsKKworICAgICAgICAgICAgcnVsZVJlZ0V4cHMucHVzaChhZGp1c3Rl
ZHJlZ2V4KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJl
Z0V4cCgiKCIgKyBydWxlUmVnRXhwcy5qb2luKCIpfCgiKSArICIpfCgkKSIsIGZsYWcpOworICAg
IH0KK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRhcnJheVRva2VucyA9IGZ1bmN0aW9u
KHN0cikgeworICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAg
ICAgdmFyIHZhbHVlcyA9IHN0ci5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpCisgICAgICAgIHZhciB0
b2tlbnMgPSBbXTsKKyAgICAgICAgdmFyIHR5cGVzID0gdGhpcy50b2tlbkFycmF5OworICAgICAg
ICBpZiAodHlwZXMubGVuZ3RoICE9IHZhbHVlcy5sZW5ndGggLSAyKSB7CisgICAgICAgICAgICBp
ZiAod2luZG93LmNvbnNvbGUpCisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih0eXBlcy5s
ZW5ndGggLCB2YWx1ZXMubGVuZ3RoIC0gMiwgc3RyLCB0aGlzLnNwbGl0UmVnZXgpOworICAgICAg
ICAgICAgcmV0dXJuIFt7dHlwZTogImVycm9yLmludmFsaWQiLCB2YWx1ZTogc3RyfV07CisgICAg
ICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgaWYgKHZhbHVlc1tpICsgMV0pIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNb
dG9rZW5zLmxlbmd0aF0gPSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLAor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2kgKyAxXQorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAg
ICB9OworICAgIAorICAgIHRoaXMucmVtb3ZlQ2FwdHVyaW5nR3JvdXBzID0gZnVuY3Rpb24oc3Jj
KSB7CisgICAgICAgIHZhciByID0gc3JjLnJlcGxhY2UoCisgICAgICAgICAgICAvXFsoPzpcXC58
W15cXV0pKj9cXXxcXC58XChcP1s6PSFdfChcKCkvZywKKyAgICAgICAgICAgIGZ1bmN0aW9uKHgs
IHkpIHtyZXR1cm4geSA/ICIoPzoiIDogeDt9CisgICAgICAgICk7CisgICAgICAgIHJldHVybiBy
OworICAgIH07CisgICAgCisgICAgdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9u
KHNyYywgZmxhZykgeworICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvXChcPz0oW14oKV18XFwu
KSo/XCkkLywgIiIpOworICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIGZsYWcpOworICAg
IH07CisgICAgdGhpcy5nZXRMaW5lVG9rZW5zID0gZnVuY3Rpb24obGluZSwgc3RhcnRTdGF0ZSkg
eworICAgICAgICBpZiAoc3RhcnRTdGF0ZSAmJiB0eXBlb2Ygc3RhcnRTdGF0ZSAhPSAic3RyaW5n
IikgeworICAgICAgICAgICAgdmFyIHN0YWNrID0gc3RhcnRTdGF0ZS5zbGljZSgwKTsKKyAgICAg
ICAgICAgIHN0YXJ0U3RhdGUgPSBzdGFja1swXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICB2YXIgc3RhY2sgPSBbXTsKKworICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhcnRTdGF0
ZSB8fCAic3RhcnQiOworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3Rh
dGVdOworICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1tjdXJyZW50U3Rh
dGVdOworICAgICAgICB2YXIgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRlXTsKKyAgICAg
ICAgcmUubGFzdEluZGV4ID0gMDsKKworICAgICAgICB2YXIgbWF0Y2gsIHRva2VucyA9IFtdOwor
ICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDsKKworICAgICAgICB2YXIgdG9rZW4gPSB7dHlwZTog
bnVsbCwgdmFsdWU6ICIifTsKKworICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGxpbmUp
KSB7CisgICAgICAgICAgICB2YXIgdHlwZSA9IG1hcHBpbmcuZGVmYXVsdFRva2VuOworICAgICAg
ICAgICAgdmFyIHJ1bGUgPSBudWxsOworICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hbMF07
CisgICAgICAgICAgICB2YXIgaW5kZXggPSByZS5sYXN0SW5kZXg7CisKKyAgICAgICAgICAgIGlm
IChpbmRleCAtIHZhbHVlLmxlbmd0aCA+IGxhc3RJbmRleCkgeworICAgICAgICAgICAgICAgIHZh
ciBza2lwcGVkID0gbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCAtIHZhbHVlLmxlbmd0
aCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gdHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICB0b2tlbi52YWx1ZSArPSBza2lwcGVkOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IHt0eXBlOiB0eXBlLCB2YWx1ZTogc2tpcHBlZH07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoLmxlbmd0aC0y
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hbaSArIDFdID09PSB1bmRlZmluZWQp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgcnVsZSA9
IHN0YXRlW21hcHBpbmdbaV1dOworICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgcnVsZS50
b2tlbiA9PSAiZnVuY3Rpb24iCisgICAgICAgICAgICAgICAgICAgID8gcnVsZS50b2tlbih2YWx1
ZSwgY3VycmVudFN0YXRlLCBzdGFjaykKKyAgICAgICAgICAgICAgICAgICAgOiBydWxlLnRva2Vu
OworCisgICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dCkgeworICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBydWxlLm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
dGhpcy5zdGF0ZXNbY3VycmVudFN0YXRlXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5l
cnJvciAmJiBjb25zb2xlLmVycm9yKGN1cnJlbnRTdGF0ZSwgImRvZXNuJ3QgZXhpc3QiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9ICJzdGFydCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IHRoaXMubWF0Y2hN
YXBwaW5nc1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBp
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRl
XTsKKyAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCghcnVsZSB8fCBydWxlLm1lcmdlICE9
PSBmYWxzZSkgJiYgdG9rZW4udHlwZSA9PT0gdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4udmFsdWUgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IHt0eXBlOiB0eXBlLCB2YWx1ZTogdmFsdWV9OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vu
LnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiAiIn07CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHR5cGVbaV0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA9PSBsaW5lLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbGFzdEluZGV4ID0g
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAg
IHRva2Vucy5wdXNoKHRva2VuKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9r
ZW5zIDogdG9rZW5zLAorICAgICAgICAgICAgc3RhdGUgOiBzdGFjay5sZW5ndGggPyBzdGFjayA6
IGN1cnJlbnRTdGF0ZQorICAgICAgICB9OworICAgIH07CisKK30pLmNhbGwoVG9rZW5pemVyLnBy
b3RvdHlwZSk7CisKK2V4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyOworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOworCit2
YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRydWxlcyA9
IHsKKyAgICAgICAgInN0YXJ0IiA6IFt7CisgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5l
IiwKKyAgICAgICAgICAgIHJlZ2V4IDogJ14kJworICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4rIgorICAgICAgICB9XQorICAg
IH07Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmFkZFJ1bGVzID0gZnVuY3Rpb24o
cnVsZXMsIHByZWZpeCkgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcnVsZXMpIHsKKyAgICAg
ICAgICAgIHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBz
dGF0ZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgIHJ1bGUubmV4dCA9IHByZWZpeCArIHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRydWxlc1twcmVmaXggKyBrZXldID0g
c3RhdGU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXRSdWxlcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcnVsZXM7CisgICAgfTsKKworICAgIHRoaXMuZW1i
ZWRSdWxlcyA9IGZ1bmN0aW9uIChIaWdobGlnaHRSdWxlcywgcHJlZml4LCBlc2NhcGVSdWxlcywg
c3RhdGVzLCBhcHBlbmQpIHsKKyAgICAgICAgdmFyIGVtYmVkUnVsZXMgPSBuZXcgSGlnaGxpZ2h0
UnVsZXMoKS5nZXRSdWxlcygpOworICAgICAgICBpZiAoc3RhdGVzKSB7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBz
dGF0ZXNbaV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzdGF0ZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJlZFJ1bGVz
KQorICAgICAgICAgICAgICAgIHN0YXRlcy5wdXNoKHByZWZpeCArIGtleSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHRoaXMuYWRkUnVsZXMoZW1iZWRSdWxlcywgcHJlZml4KTsKKwor
ICAgICAgICBpZiAoZXNjYXBlUnVsZXMpIHsKKyAgICAgICAgICAgIHZhciBhZGRSdWxlcyA9IEFy
cmF5LnByb3RvdHlwZVthcHBlbmQgPyAicHVzaCIgOiAidW5zaGlmdCJdOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAg
YWRkUnVsZXMuYXBwbHkodGhpcy4kcnVsZXNbc3RhdGVzW2ldXSwgbGFuZy5kZWVwQ29weShlc2Nh
cGVSdWxlcykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLiRlbWJlZHMpCisgICAg
ICAgICAgICB0aGlzLiRlbWJlZHMgPSBbXTsKKyAgICAgICAgdGhpcy4kZW1iZWRzLnB1c2gocHJl
Zml4KTsKKyAgICB9CisKKyAgICB0aGlzLmdldEVtYmVkcyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kZW1iZWRzOworICAgIH07CisgICAgCisgICAgdGhpcy5ub3JtYWxpemVS
dWxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWQgPSAwOworICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gdGhpcy4kcnVsZXMpIHsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuJHJ1
bGVzW2tleV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTsKKyAgICAgICAgICAg
ICAgICBpZiAocnVsZS5uZXh0ICYmIEFycmF5LmlzQXJyYXkocnVsZS5uZXh0KSkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgc3RhdGVOYW1lID0gcnVsZS5zdGF0ZU5hbWUgfHwgKCJzdGF0ZSIg
KyBpZCsrKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNbc3RhdGVOYW1lXSA9IHJ1
bGUubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gc3RhdGVOYW1lOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocnVsZS5ydWxlcykgeworICAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgciBpbiBydWxlLnJ1bGVzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy4kcnVsZXNbcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy4kcnVsZXNbcl0ucHVzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kcnVsZXNbcl0ucHVzaC5hcHBseSh0aGlzLiRydWxlc1tyXSwgcnVsZS5ydWxl
c1tyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3JdID0gcnVsZS5ydWxlc1tyXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAocnVsZS5pbmNsdWRlIHx8IHR5cGVvZiBydWxlID09ICJzdHJp
bmciKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2ksIDFdLmNvbmNhdCh0aGlz
LiRydWxlc1tydWxlLmluY2x1ZGUgfHwgcnVsZV0pOworICAgICAgICAgICAgICAgICAgICBpZiAo
cnVsZS5ub0VzY2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRl
cihmdW5jdGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7fSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnNwbGljZS5hcHBseShzdGF0ZSwgYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlS2V5d29yZE1hcHBl
ciA9IGZ1bmN0aW9uKG1hcCwgZGVmYXVsdFRva2VuLCBpZ25vcmVDYXNlLCBzcGxpdENoYXIpIHsK
KyAgICAgICAgdmFyIGtleXdvcmRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICAgICAgT2Jq
ZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworICAgICAgICAgICAg
dmFyIGEgPSBtYXBbY2xhc3NOYW1lXTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVDYXNlKQorICAg
ICAgICAgICAgICAgIGEgPSBhLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICB2YXIgbGlzdCA9
IGEuc3BsaXQoc3BsaXRDaGFyIHx8ICJ8Iik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gbGlz
dC5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAgICAgIGtleXdvcmRzW2xpc3RbaV1dID0gY2xh
c3NOYW1lOworICAgICAgICB9KTsKKyAgICAgICAgbWFwID0gbnVsbDsKKyAgICAgICAgcmV0dXJu
IGlnbm9yZUNhc2UKKyAgICAgICAgICAgID8gZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29y
ZHNbdmFsdWUudG9Mb3dlckNhc2UoKV0gfHwgZGVmYXVsdFRva2VuIH0KKyAgICAgICAgICAgIDog
ZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFsdWVdIHx8IGRlZmF1bHRUb2tlbiB9
OworICAgIH0KKworICAgIHRoaXMuZ2V0S2V5d29yZHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJGtleXdvcmRzOworICAgIH07CisKK30pLmNhbGwoVGV4dEhpZ2hsaWdodFJ1
bGVzLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuVGV4dEhpZ2hsaWdodFJ1bGVzID0gVGV4dEhpZ2hs
aWdodFJ1bGVzOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91cicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIEJlaGF2aW91ciA9IGZ1bmN0aW9uKCkgeworICAgdGhpcy4kYmVo
YXZpb3VycyA9IHt9OworfTsKKworKGZ1bmN0aW9uICgpIHsKKworICAgIHRoaXMuYWRkID0gZnVu
Y3Rpb24gKG5hbWUsIGFjdGlvbiwgY2FsbGJhY2spIHsKKyAgICAgICAgc3dpdGNoICh1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnM6CisgICAgICAgICAgICAgIHRo
aXMuJGJlaGF2aW91cnMgPSB7fTsKKyAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnNbbmFt
ZV06CisgICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV0gPSB7fTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2FjdGlvbl0gPSBjYWxsYmFjazsKKyAg
ICB9CisgICAgCisgICAgdGhpcy5hZGRCZWhhdmlvdXJzID0gZnVuY3Rpb24gKGJlaGF2aW91cnMp
IHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91cnMpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGFjdGlvbiBpbiBiZWhhdmlvdXJzW2tleV0pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmFkZChrZXksIGFjdGlvbiwgYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKG5h
bWUpIHsKKyAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnMgJiYgdGhpcy4kYmVoYXZpb3Vyc1tu
YW1lXSkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV07CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdGhpcy5pbmhlcml0ID0gZnVuY3Rpb24gKG1vZGUsIGZp
bHRlcikgeworICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIHZhciBiZWhhdmlvdXJzID0gbmV3IG1vZGUoKS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IG1vZGUuZ2V0
QmVoYXZpb3VycyhmaWx0ZXIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYWRkQmVoYXZpb3Vy
cyhiZWhhdmlvdXJzKTsKKyAgICB9CisgICAgCisgICAgdGhpcy5nZXRCZWhhdmlvdXJzID0gZnVu
Y3Rpb24gKGZpbHRlcikgeworICAgICAgICBpZiAoIWZpbHRlcikgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJGJlaGF2aW91cnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIg
cmV0ID0ge30KKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsdGVyLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnNbZmlsdGVyW2ldXSkg
eworICAgICAgICAgICAgICAgICAgICByZXRbZmlsdGVyW2ldXSA9IHRoaXMuJGJlaGF2aW91cnNb
ZmlsdGVyW2ldXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCit9KS5jYWxsKEJlaGF2aW91ci5wcm90
b3R5cGUpOworCitleHBvcnRzLkJlaGF2aW91ciA9IEJlaGF2aW91cjsKK30pOworYWNlLmRlZmlu
ZSgnYWNlL3VuaWNvZGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworZXhwb3J0cy5wYWNrYWdlcyA9IHt9Owor
CithZGRVbmljb2RlUGFja2FnZSh7CisgICAgTDogICIwMDQxLTAwNUEwMDYxLTAwN0EwMEFBMDBC
NTAwQkEwMEMwLTAwRDYwMEQ4LTAwRjYwMEY4LTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJF
RTAzNzAtMDM3NDAzNzYwMzc3MDM3QS0wMzdEMDM4NjAzODgtMDM4QTAzOEMwMzhFLTAzQTEwM0Ez
LTAzRjUwM0Y3LTA0ODEwNDhBLTA1MjUwNTMxLTA1NTYwNTU5MDU2MS0wNTg3MDVEMC0wNUVBMDVG
MC0wNUYyMDYyMS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFNTA2RTYwNkVFMDZFRjA2RkEt
MDZGQzA2RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA3RjQwN0Y1MDdGQTA4
MDAtMDgxNTA4MUEwODI0MDgyODA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYxMDk3MTA5NzIwOTc5
LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJE
MDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBB
MkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1
LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQw
MEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0w
QjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBC
OTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUt
MEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAw
QzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUw
Q0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBE
N0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAw
RTMyMEUzMzBFNDAtMEU0NjBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5
LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0w
RUM0MEVDNjBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEw
M0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBB
MC0xMEM1MTBEMC0xMEZBMTBGQzExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEy
NUQxMjYwLTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0x
MkM1MTJDOC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0
MTQwMS0xNjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcy
MC0xNzMxMTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdENzE3REMxODIwLTE4
NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0x
OUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUFBNzFCMDUtMUIzMzFCNDUtMUI0QjFCODMt
MUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzdEMUNFOS0xQ0VDMUNFRS0xQ0Yx
MUQwMC0xREJGMUUwMC0xRjE1MUYxOC0xRjFEMUYyMC0xRjQ1MUY0OC0xRjREMUY1MC0xRjU3MUY1
OTFGNUIxRjVEMUY1Ri0xRjdEMUY4MC0xRkI0MUZCNi0xRkJDMUZCRTFGQzItMUZDNDFGQzYtMUZD
QzFGRDAtMUZEMzFGRDYtMUZEQjFGRTAtMUZFQzFGRjItMUZGNDFGRjYtMUZGQzIwNzEyMDdGMjA5
MC0yMDk0MjEwMjIxMDcyMTBBLTIxMTMyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJE
MjEyRi0yMTM5MjEzQy0yMTNGMjE0NS0yMTQ5MjE0RTIxODMyMTg0MkMwMC0yQzJFMkMzMC0yQzVF
MkM2MC0yQ0U0MkNFQi0yQ0VFMkQwMC0yRDI1MkQzMC0yRDY1MkQ2RjJEODAtMkQ5NjJEQTAtMkRB
NjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJE
RDgtMkRERTJFMkYzMDA1MzAwNjMwMzEtMzAzNTMwM0IzMDNDMzA0MS0zMDk2MzA5RC0zMDlGMzBB
MS0zMEZBMzBGQy0zMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00
REI1NEUwMC05RkNCQTAwMC1BNDhDQTREMC1BNEZEQTUwMC1BNjBDQTYxMC1BNjFGQTYyQUE2MkJB
NjQwLUE2NUZBNjYyLUE2NkVBNjdGLUE2OTdBNkEwLUE2RTVBNzE3LUE3MUZBNzIyLUE3ODhBNzhC
QTc4Q0E3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThC
M0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBOUNGQUEw
MC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTc2QUE3QUFBODAtQUFBRkFBQjFBQUI1QUFC
NkFBQjktQUFCREFBQzBBQUMyQUFEQi1BQUREQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdD
Qi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIwMC1GQjA2RkIxMy1GQjE3RkIxREZC
MUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJE
My1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkYyMS1G
RjNBRkY0MS1GRjVBRkY2Ni1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRD
IiwKKyAgICBMbDogIjAwNjEtMDA3QTAwQUEwMEI1MDBCQTAwREYtMDBGNjAwRjgtMDBGRjAxMDEw
MTAzMDEwNTAxMDcwMTA5MDEwQjAxMEQwMTBGMDExMTAxMTMwMTE1MDExNzAxMTkwMTFCMDExRDAx
MUYwMTIxMDEyMzAxMjUwMTI3MDEyOTAxMkIwMTJEMDEyRjAxMzEwMTMzMDEzNTAxMzcwMTM4MDEz
QTAxM0MwMTNFMDE0MDAxNDIwMTQ0MDE0NjAxNDgwMTQ5MDE0QjAxNEQwMTRGMDE1MTAxNTMwMTU1
MDE1NzAxNTkwMTVCMDE1RDAxNUYwMTYxMDE2MzAxNjUwMTY3MDE2OTAxNkIwMTZEMDE2RjAxNzEw
MTczMDE3NTAxNzcwMTdBMDE3QzAxN0UtMDE4MDAxODMwMTg1MDE4ODAxOEMwMThEMDE5MjAxOTUw
MTk5LTAxOUIwMTlFMDFBMTAxQTMwMUE1MDFBODAxQUEwMUFCMDFBRDAxQjAwMUI0MDFCNjAxQjkw
MUJBMDFCRC0wMUJGMDFDNjAxQzkwMUNDMDFDRTAxRDAwMUQyMDFENDAxRDYwMUQ4MDFEQTAxREMw
MUREMDFERjAxRTEwMUUzMDFFNTAxRTcwMUU5MDFFQjAxRUQwMUVGMDFGMDAxRjMwMUY1MDFGOTAx
RkIwMUZEMDFGRjAyMDEwMjAzMDIwNTAyMDcwMjA5MDIwQjAyMEQwMjBGMDIxMTAyMTMwMjE1MDIx
NzAyMTkwMjFCMDIxRDAyMUYwMjIxMDIyMzAyMjUwMjI3MDIyOTAyMkIwMjJEMDIyRjAyMzEwMjMz
LTAyMzkwMjNDMDIzRjAyNDAwMjQyMDI0NzAyNDkwMjRCMDI0RDAyNEYtMDI5MzAyOTUtMDJBRjAz
NzEwMzczMDM3NzAzN0ItMDM3RDAzOTAwM0FDLTAzQ0UwM0QwMDNEMTAzRDUtMDNENzAzRDkwM0RC
MDNERDAzREYwM0UxMDNFMzAzRTUwM0U3MDNFOTAzRUIwM0VEMDNFRi0wM0YzMDNGNTAzRjgwM0ZC
MDNGQzA0MzAtMDQ1RjA0NjEwNDYzMDQ2NTA0NjcwNDY5MDQ2QjA0NkQwNDZGMDQ3MTA0NzMwNDc1
MDQ3NzA0NzkwNDdCMDQ3RDA0N0YwNDgxMDQ4QjA0OEQwNDhGMDQ5MTA0OTMwNDk1MDQ5NzA0OTkw
NDlCMDQ5RDA0OUYwNEExMDRBMzA0QTUwNEE3MDRBOTA0QUIwNEFEMDRBRjA0QjEwNEIzMDRCNTA0
QjcwNEI5MDRCQjA0QkQwNEJGMDRDMjA0QzQwNEM2MDRDODA0Q0EwNENDMDRDRTA0Q0YwNEQxMDRE
MzA0RDUwNEQ3MDREOTA0REIwNEREMDRERjA0RTEwNEUzMDRFNTA0RTcwNEU5MDRFQjA0RUQwNEVG
MDRGMTA0RjMwNEY1MDRGNzA0RjkwNEZCMDRGRDA0RkYwNTAxMDUwMzA1MDUwNTA3MDUwOTA1MEIw
NTBEMDUwRjA1MTEwNTEzMDUxNTA1MTcwNTE5MDUxQjA1MUQwNTFGMDUyMTA1MjMwNTI1MDU2MS0w
NTg3MUQwMC0xRDJCMUQ2Mi0xRDc3MUQ3OS0xRDlBMUUwMTFFMDMxRTA1MUUwNzFFMDkxRTBCMUUw
RDFFMEYxRTExMUUxMzFFMTUxRTE3MUUxOTFFMUIxRTFEMUUxRjFFMjExRTIzMUUyNTFFMjcxRTI5
MUUyQjFFMkQxRTJGMUUzMTFFMzMxRTM1MUUzNzFFMzkxRTNCMUUzRDFFM0YxRTQxMUU0MzFFNDUx
RTQ3MUU0OTFFNEIxRTREMUU0RjFFNTExRTUzMUU1NTFFNTcxRTU5MUU1QjFFNUQxRTVGMUU2MTFF
NjMxRTY1MUU2NzFFNjkxRTZCMUU2RDFFNkYxRTcxMUU3MzFFNzUxRTc3MUU3OTFFN0IxRTdEMUU3
RjFFODExRTgzMUU4NTFFODcxRTg5MUU4QjFFOEQxRThGMUU5MTFFOTMxRTk1LTFFOUQxRTlGMUVB
MTFFQTMxRUE1MUVBNzFFQTkxRUFCMUVBRDFFQUYxRUIxMUVCMzFFQjUxRUI3MUVCOTFFQkIxRUJE
MUVCRjFFQzExRUMzMUVDNTFFQzcxRUM5MUVDQjFFQ0QxRUNGMUVEMTFFRDMxRUQ1MUVENzFFRDkx
RURCMUVERDFFREYxRUUxMUVFMzFFRTUxRUU3MUVFOTFFRUIxRUVEMUVFRjFFRjExRUYzMUVGNTFF
RjcxRUY5MUVGQjFFRkQxRUZGLTFGMDcxRjEwLTFGMTUxRjIwLTFGMjcxRjMwLTFGMzcxRjQwLTFG
NDUxRjUwLTFGNTcxRjYwLTFGNjcxRjcwLTFGN0QxRjgwLTFGODcxRjkwLTFGOTcxRkEwLTFGQTcx
RkIwLTFGQjQxRkI2MUZCNzFGQkUxRkMyLTFGQzQxRkM2MUZDNzFGRDAtMUZEMzFGRDYxRkQ3MUZF
MC0xRkU3MUZGMi0xRkY0MUZGNjFGRjcyMTBBMjEwRTIxMEYyMTEzMjEyRjIxMzQyMTM5MjEzQzIx
M0QyMTQ2LTIxNDkyMTRFMjE4NDJDMzAtMkM1RTJDNjEyQzY1MkM2NjJDNjgyQzZBMkM2QzJDNzEy
QzczMkM3NDJDNzYtMkM3QzJDODEyQzgzMkM4NTJDODcyQzg5MkM4QjJDOEQyQzhGMkM5MTJDOTMy
Qzk1MkM5NzJDOTkyQzlCMkM5RDJDOUYyQ0ExMkNBMzJDQTUyQ0E3MkNBOTJDQUIyQ0FEMkNBRjJD
QjEyQ0IzMkNCNTJDQjcyQ0I5MkNCQjJDQkQyQ0JGMkNDMTJDQzMyQ0M1MkNDNzJDQzkyQ0NCMkND
RDJDQ0YyQ0QxMkNEMzJDRDUyQ0Q3MkNEOTJDREIyQ0REMkNERjJDRTEyQ0UzMkNFNDJDRUMyQ0VF
MkQwMC0yRDI1QTY0MUE2NDNBNjQ1QTY0N0E2NDlBNjRCQTY0REE2NEZBNjUxQTY1M0E2NTVBNjU3
QTY1OUE2NUJBNjVEQTY1RkE2NjNBNjY1QTY2N0E2NjlBNjZCQTY2REE2ODFBNjgzQTY4NUE2ODdB
Njg5QTY4QkE2OERBNjhGQTY5MUE2OTNBNjk1QTY5N0E3MjNBNzI1QTcyN0E3MjlBNzJCQTcyREE3
MkYtQTczMUE3MzNBNzM1QTczN0E3MzlBNzNCQTczREE3M0ZBNzQxQTc0M0E3NDVBNzQ3QTc0OUE3
NEJBNzREQTc0RkE3NTFBNzUzQTc1NUE3NTdBNzU5QTc1QkE3NURBNzVGQTc2MUE3NjNBNzY1QTc2
N0E3NjlBNzZCQTc2REE3NkZBNzcxLUE3NzhBNzdBQTc3Q0E3N0ZBNzgxQTc4M0E3ODVBNzg3QTc4
Q0ZCMDAtRkIwNkZCMTMtRkIxN0ZGNDEtRkY1QSIsCisgICAgTHU6ICIwMDQxLTAwNUEwMEMwLTAw
RDYwMEQ4LTAwREUwMTAwMDEwMjAxMDQwMTA2MDEwODAxMEEwMTBDMDEwRTAxMTAwMTEyMDExNDAx
MTYwMTE4MDExQTAxMUMwMTFFMDEyMDAxMjIwMTI0MDEyNjAxMjgwMTJBMDEyQzAxMkUwMTMwMDEz
MjAxMzQwMTM2MDEzOTAxM0IwMTNEMDEzRjAxNDEwMTQzMDE0NTAxNDcwMTRBMDE0QzAxNEUwMTUw
MDE1MjAxNTQwMTU2MDE1ODAxNUEwMTVDMDE1RTAxNjAwMTYyMDE2NDAxNjYwMTY4MDE2QTAxNkMw
MTZFMDE3MDAxNzIwMTc0MDE3NjAxNzgwMTc5MDE3QjAxN0QwMTgxMDE4MjAxODQwMTg2MDE4NzAx
ODktMDE4QjAxOEUtMDE5MTAxOTMwMTk0MDE5Ni0wMTk4MDE5QzAxOUQwMTlGMDFBMDAxQTIwMUE0
MDFBNjAxQTcwMUE5MDFBQzAxQUUwMUFGMDFCMS0wMUIzMDFCNTAxQjcwMUI4MDFCQzAxQzQwMUM3
MDFDQTAxQ0QwMUNGMDFEMTAxRDMwMUQ1MDFENzAxRDkwMURCMDFERTAxRTAwMUUyMDFFNDAxRTYw
MUU4MDFFQTAxRUMwMUVFMDFGMTAxRjQwMUY2LTAxRjgwMUZBMDFGQzAxRkUwMjAwMDIwMjAyMDQw
MjA2MDIwODAyMEEwMjBDMDIwRTAyMTAwMjEyMDIxNDAyMTYwMjE4MDIxQTAyMUMwMjFFMDIyMDAy
MjIwMjI0MDIyNjAyMjgwMjJBMDIyQzAyMkUwMjMwMDIzMjAyM0EwMjNCMDIzRDAyM0UwMjQxMDI0
My0wMjQ2MDI0ODAyNEEwMjRDMDI0RTAzNzAwMzcyMDM3NjAzODYwMzg4LTAzOEEwMzhDMDM4RTAz
OEYwMzkxLTAzQTEwM0EzLTAzQUIwM0NGMDNEMi0wM0Q0MDNEODAzREEwM0RDMDNERTAzRTAwM0Uy
MDNFNDAzRTYwM0U4MDNFQTAzRUMwM0VFMDNGNDAzRjcwM0Y5MDNGQTAzRkQtMDQyRjA0NjAwNDYy
MDQ2NDA0NjYwNDY4MDQ2QTA0NkMwNDZFMDQ3MDA0NzIwNDc0MDQ3NjA0NzgwNDdBMDQ3QzA0N0Uw
NDgwMDQ4QTA0OEMwNDhFMDQ5MDA0OTIwNDk0MDQ5NjA0OTgwNDlBMDQ5QzA0OUUwNEEwMDRBMjA0
QTQwNEE2MDRBODA0QUEwNEFDMDRBRTA0QjAwNEIyMDRCNDA0QjYwNEI4MDRCQTA0QkMwNEJFMDRD
MDA0QzEwNEMzMDRDNTA0QzcwNEM5MDRDQjA0Q0QwNEQwMDREMjA0RDQwNEQ2MDREODA0REEwNERD
MDRERTA0RTAwNEUyMDRFNDA0RTYwNEU4MDRFQTA0RUMwNEVFMDRGMDA0RjIwNEY0MDRGNjA0Rjgw
NEZBMDRGQzA0RkUwNTAwMDUwMjA1MDQwNTA2MDUwODA1MEEwNTBDMDUwRTA1MTAwNTEyMDUxNDA1
MTYwNTE4MDUxQTA1MUMwNTFFMDUyMDA1MjIwNTI0MDUzMS0wNTU2MTBBMC0xMEM1MUUwMDFFMDIx
RTA0MUUwNjFFMDgxRTBBMUUwQzFFMEUxRTEwMUUxMjFFMTQxRTE2MUUxODFFMUExRTFDMUUxRTFF
MjAxRTIyMUUyNDFFMjYxRTI4MUUyQTFFMkMxRTJFMUUzMDFFMzIxRTM0MUUzNjFFMzgxRTNBMUUz
QzFFM0UxRTQwMUU0MjFFNDQxRTQ2MUU0ODFFNEExRTRDMUU0RTFFNTAxRTUyMUU1NDFFNTYxRTU4
MUU1QTFFNUMxRTVFMUU2MDFFNjIxRTY0MUU2NjFFNjgxRTZBMUU2QzFFNkUxRTcwMUU3MjFFNzQx
RTc2MUU3ODFFN0ExRTdDMUU3RTFFODAxRTgyMUU4NDFFODYxRTg4MUU4QTFFOEMxRThFMUU5MDFF
OTIxRTk0MUU5RTFFQTAxRUEyMUVBNDFFQTYxRUE4MUVBQTFFQUMxRUFFMUVCMDFFQjIxRUI0MUVC
NjFFQjgxRUJBMUVCQzFFQkUxRUMwMUVDMjFFQzQxRUM2MUVDODFFQ0ExRUNDMUVDRTFFRDAxRUQy
MUVENDFFRDYxRUQ4MUVEQTFFREMxRURFMUVFMDFFRTIxRUU0MUVFNjFFRTgxRUVBMUVFQzFFRUUx
RUYwMUVGMjFFRjQxRUY2MUVGODFFRkExRUZDMUVGRTFGMDgtMUYwRjFGMTgtMUYxRDFGMjgtMUYy
RjFGMzgtMUYzRjFGNDgtMUY0RDFGNTkxRjVCMUY1RDFGNUYxRjY4LTFGNkYxRkI4LTFGQkIxRkM4
LTFGQ0IxRkQ4LTFGREIxRkU4LTFGRUMxRkY4LTFGRkIyMTAyMjEwNzIxMEItMjEwRDIxMTAtMjEx
MjIxMTUyMTE5LTIxMUQyMTI0MjEyNjIxMjgyMTJBLTIxMkQyMTMwLTIxMzMyMTNFMjEzRjIxNDUy
MTgzMkMwMC0yQzJFMkM2MDJDNjItMkM2NDJDNjcyQzY5MkM2QjJDNkQtMkM3MDJDNzIyQzc1MkM3
RS0yQzgwMkM4MjJDODQyQzg2MkM4ODJDOEEyQzhDMkM4RTJDOTAyQzkyMkM5NDJDOTYyQzk4MkM5
QTJDOUMyQzlFMkNBMDJDQTIyQ0E0MkNBNjJDQTgyQ0FBMkNBQzJDQUUyQ0IwMkNCMjJDQjQyQ0I2
MkNCODJDQkEyQ0JDMkNCRTJDQzAyQ0MyMkNDNDJDQzYyQ0M4MkNDQTJDQ0MyQ0NFMkNEMDJDRDIy
Q0Q0MkNENjJDRDgyQ0RBMkNEQzJDREUyQ0UwMkNFMjJDRUIyQ0VEQTY0MEE2NDJBNjQ0QTY0NkE2
NDhBNjRBQTY0Q0E2NEVBNjUwQTY1MkE2NTRBNjU2QTY1OEE2NUFBNjVDQTY1RUE2NjJBNjY0QTY2
NkE2NjhBNjZBQTY2Q0E2ODBBNjgyQTY4NEE2ODZBNjg4QTY4QUE2OENBNjhFQTY5MEE2OTJBNjk0
QTY5NkE3MjJBNzI0QTcyNkE3MjhBNzJBQTcyQ0E3MkVBNzMyQTczNEE3MzZBNzM4QTczQUE3M0NB
NzNFQTc0MEE3NDJBNzQ0QTc0NkE3NDhBNzRBQTc0Q0E3NEVBNzUwQTc1MkE3NTRBNzU2QTc1OEE3
NUFBNzVDQTc1RUE3NjBBNzYyQTc2NEE3NjZBNzY4QTc2QUE3NkNBNzZFQTc3OUE3N0JBNzdEQTc3
RUE3ODBBNzgyQTc4NEE3ODZBNzhCRkYyMS1GRjNBIiwKKyAgICBMdDogIjAxQzUwMUM4MDFDQjAx
RjIxRjg4LTFGOEYxRjk4LTFGOUYxRkE4LTFGQUYxRkJDMUZDQzFGRkMiLAorICAgIExtOiAiMDJC
MC0wMkMxMDJDNi0wMkQxMDJFMC0wMkU0MDJFQzAyRUUwMzc0MDM3QTA1NTkwNjQwMDZFNTA2RTYw
N0Y0MDdGNTA3RkEwODFBMDgyNDA4MjgwOTcxMEU0NjBFQzYxMEZDMTdENzE4NDMxQUE3MUM3OC0x
QzdEMUQyQy0xRDYxMUQ3ODFEOUItMURCRjIwNzEyMDdGMjA5MC0yMDk0MkM3RDJENkYyRTJGMzAw
NTMwMzEtMzAzNTMwM0IzMDlEMzA5RTMwRkMtMzBGRUEwMTVBNEY4LUE0RkRBNjBDQTY3RkE3MTct
QTcxRkE3NzBBNzg4QTlDRkFBNzBBQURERkY3MEZGOUVGRjlGIiwKKyAgICBMbzogIjAxQkIwMUMw
LTAxQzMwMjk0MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjNGMDY0MS0wNjRBMDY2RTA2NkYwNjcx
LTA2RDMwNkQ1MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3MTItMDcyRjA3NEQtMDdBNTA3QjEw
N0NBLTA3RUEwODAwLTA4MTUwOTA0LTA5MzkwOTNEMDk1MDA5NTgtMDk2MTA5NzIwOTc5LTA5N0Yw
OTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5
REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEz
MDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQw
QThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBB
RTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIz
RDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5
MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBD
MEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4
NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENF
MTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3
RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUz
MzBFNDAtMEU0NTBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYw
RUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVE
QzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0wRjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1
NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEwNzUtMTA4MTEwOEUxMEQwLTEwRkExMTAw
LTEyNDgxMjRBLTEyNEQxMjUwLTEyNTYxMjU4MTI1QS0xMjVEMTI2MC0xMjg4MTI4QS0xMjhEMTI5
MC0xMkIwMTJCMi0xMkI1MTJCOC0xMkJFMTJDMDEyQzItMTJDNTEyQzgtMTJENjEyRDgtMTMxMDEz
MTItMTMxNTEzMTgtMTM1QTEzODAtMTM4RjEzQTAtMTNGNDE0MDEtMTY2QzE2NkYtMTY3RjE2ODEt
MTY5QTE2QTAtMTZFQTE3MDAtMTcwQzE3MEUtMTcxMTE3MjAtMTczMTE3NDAtMTc1MTE3NjAtMTc2
QzE3NkUtMTc3MDE3ODAtMTdCMzE3REMxODIwLTE4NDIxODQ0LTE4NzcxODgwLTE4QTgxOEFBMThC
MC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0x
QTE2MUEyMC0xQTU0MUIwNS0xQjMzMUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMx
QzRELTFDNEYxQzVBLTFDNzcxQ0U5LTFDRUMxQ0VFLTFDRjEyMTM1LTIxMzgyRDMwLTJENjUyRDgw
LTJEOTYyREEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4LTJEQkUyREMwLTJEQzYyREM4LTJE
Q0UyREQwLTJERDYyREQ4LTJEREUzMDA2MzAzQzMwNDEtMzA5NjMwOUYzMEExLTMwRkEzMEZGMzEw
NS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1B
MDE0QTAxNi1BNDhDQTREMC1BNEY3QTUwMC1BNjBCQTYxMC1BNjFGQTYyQUE2MkJBNjZFQTZBMC1B
NkU1QTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIyQTg0MC1BODczQTg4Mi1BOEIz
QThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3Q0E5ODQtQTlCMkFBMDAtQUEy
OEFBNDAtQUE0MkFBNDQtQUE0QkFBNjAtQUE2RkFBNzEtQUE3NkFBN0FBQTgwLUFBQUZBQUIxQUFC
NUFBQjZBQUI5LUFBQkRBQUMwQUFDMkFBREJBQURDQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2
RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIxREZCMUYtRkIyOEZCMkEtRkIz
NkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhG
RkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkY2Ni1GRjZGRkY3MS1GRjlERkZB
MC1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDIiwKKyAgICBNOiAgIjAz
MDAtMDM2RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYx
QTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMw
LTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4
MkQwOTAwLTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2MjA5NjMwOTgxLTA5ODMwOUJDMDlC
RS0wOUM0MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMwQTAxLTBBMDMwQTNDMEEzRS0wQTQy
MEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4MS0wQTgzMEFCQzBBQkUtMEFDNTBB
QzctMEFDOTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIzQzBCM0UtMEI0NDBCNDcwQjQ4MEI0
Qi0wQjREMEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0QwQkQ3
MEMwMS0wQzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzREMEM1NTBDNTYwQzYyMEM2MzBDODIw
QzgzMENCQzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBDRDUwQ0Q2MENFMjBDRTMwRDAyMEQw
MzBEM0UtMEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYyMEQ2MzBEODIwRDgzMERDQTBEQ0Yt
MERENDBERDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVCNC0w
RUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGM0UwRjNGMEY3MS0wRjg0
MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0xMDNFMTA1Ni0xMDU5MTA1RS0xMDYw
MTA2Mi0xMDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhEMTA4RjEwOUEtMTA5RDEzNUYxNzEy
LTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0xN0QzMTdERDE4MEItMTgwRDE4QTkx
OTIwLTE5MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFBMTctMUExQjFBNTUtMUE1RTFBNjAt
MUE3QzFBN0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMxQjgwLTFCODIxQkExLTFCQUExQzI0
LTFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBG
MDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlBQTY2Ri1BNjcyQTY3Q0E2N0RBNkYw
QTZGMUE4MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThCNC1BOEM0QThFMC1BOEYxQTkyNi1B
OTJEQTk0Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1BQTM2QUE0M0FBNENBQTREQUE3QkFB
QjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMtQUJFQUFCRUNBQkVERkIxRUZFMDAt
RkUwRkZFMjAtRkUyNiIsCisgICAgTW46ICIwMzAwLTAzNkYwNDgzLTA0ODcwNTkxLTA1QkQwNUJG
MDVDMTA1QzIwNUM0MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2NUUwNjcwMDZENi0wNkRDMDZERi0w
NkU0MDZFNzA2RTgwNkVBLTA2RUQwNzExMDczMC0wNzRBMDdBNi0wN0IwMDdFQi0wN0YzMDgxNi0w
ODE5MDgxQi0wODIzMDgyNS0wODI3MDgyOS0wODJEMDkwMC0wOTAyMDkzQzA5NDEtMDk0ODA5NEQw
OTUxLTA5NTUwOTYyMDk2MzA5ODEwOUJDMDlDMS0wOUM0MDlDRDA5RTIwOUUzMEEwMTBBMDIwQTND
MEE0MTBBNDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3MTBBNzUwQTgxMEE4MjBBQkMwQUMx
LTBBQzUwQUM3MEFDODBBQ0QwQUUyMEFFMzBCMDEwQjNDMEIzRjBCNDEtMEI0NDBCNEQwQjU2MEI2
MjBCNjMwQjgyMEJDMDBCQ0QwQzNFLTBDNDAwQzQ2LTBDNDgwQzRBLTBDNEQwQzU1MEM1NjBDNjIw
QzYzMENCQzBDQkYwQ0M2MENDQzBDQ0QwQ0UyMENFMzBENDEtMEQ0NDBENEQwRDYyMEQ2MzBEQ0Ew
REQyLTBERDQwREQ2MEUzMTBFMzQtMEUzQTBFNDctMEU0RTBFQjEwRUI0LTBFQjkwRUJCMEVCQzBF
QzgtMEVDRDBGMTgwRjE5MEYzNTBGMzcwRjM5MEY3MS0wRjdFMEY4MC0wRjg0MEY4NjBGODcwRjkw
LTBGOTcwRjk5LTBGQkMwRkM2MTAyRC0xMDMwMTAzMi0xMDM3MTAzOTEwM0ExMDNEMTAzRTEwNTgx
MDU5MTA1RS0xMDYwMTA3MS0xMDc0MTA4MjEwODUxMDg2MTA4RDEwOUQxMzVGMTcxMi0xNzE0MTcz
Mi0xNzM0MTc1MjE3NTMxNzcyMTc3MzE3QjctMTdCRDE3QzYxN0M5LTE3RDMxN0REMTgwQi0xODBE
MThBOTE5MjAtMTkyMjE5MjcxOTI4MTkzMjE5MzktMTkzQjFBMTcxQTE4MUE1NjFBNTgtMUE1RTFB
NjAxQTYyMUE2NS0xQTZDMUE3My0xQTdDMUE3RjFCMDAtMUIwMzFCMzQxQjM2LTFCM0ExQjNDMUI0
MjFCNkItMUI3MzFCODAxQjgxMUJBMi0xQkE1MUJBODFCQTkxQzJDLTFDMzMxQzM2MUMzNzFDRDAt
MUNEMjFDRDQtMUNFMDFDRTItMUNFODFDRUQxREMwLTFERTYxREZELTFERkYyMEQwLTIwREMyMEUx
MjBFNS0yMEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJGMzA5OTMwOUFBNjZGQTY3Q0E2N0RB
NkYwQTZGMUE4MDJBODA2QTgwQkE4MjVBODI2QThDNEE4RTAtQThGMUE5MjYtQTkyREE5NDctQTk1
MUE5ODAtQTk4MkE5QjNBOUI2LUE5QjlBOUJDQUEyOS1BQTJFQUEzMUFBMzJBQTM1QUEzNkFBNDNB
QTRDQUFCMEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMxQUJFNUFCRThBQkVERkIxRUZFMDAt
RkUwRkZFMjAtRkUyNiIsCisgICAgTWM6ICIwOTAzMDkzRS0wOTQwMDk0OS0wOTRDMDk0RTA5ODIw
OTgzMDlCRS0wOUMwMDlDNzA5QzgwOUNCMDlDQzA5RDcwQTAzMEEzRS0wQTQwMEE4MzBBQkUtMEFD
MDBBQzkwQUNCMEFDQzBCMDIwQjAzMEIzRTBCNDAwQjQ3MEI0ODBCNEIwQjRDMEI1NzBCQkUwQkJG
MEJDMTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0MwQkQ3MEMwMS0wQzAzMEM0MS0wQzQ0MEM4MjBDODMw
Q0JFMENDMC0wQ0M0MENDNzBDQzgwQ0NBMENDQjBDRDUwQ0Q2MEQwMjBEMDMwRDNFLTBENDAwRDQ2
LTBENDgwRDRBLTBENEMwRDU3MEQ4MjBEODMwRENGLTBERDEwREQ4LTBEREYwREYyMERGMzBGM0Uw
RjNGMEY3RjEwMkIxMDJDMTAzMTEwMzgxMDNCMTAzQzEwNTYxMDU3MTA2Mi0xMDY0MTA2Ny0xMDZE
MTA4MzEwODQxMDg3LTEwOEMxMDhGMTA5QS0xMDlDMTdCNjE3QkUtMTdDNTE3QzcxN0M4MTkyMy0x
OTI2MTkyOS0xOTJCMTkzMDE5MzExOTMzLTE5MzgxOUIwLTE5QzAxOUM4MTlDOTFBMTktMUExQjFB
NTUxQTU3MUE2MTFBNjMxQTY0MUE2RC0xQTcyMUIwNDFCMzUxQjNCMUIzRC0xQjQxMUI0MzFCNDQx
QjgyMUJBMTFCQTYxQkE3MUJBQTFDMjQtMUMyQjFDMzQxQzM1MUNFMTFDRjJBODIzQTgyNEE4MjdB
ODgwQTg4MUE4QjQtQThDM0E5NTJBOTUzQTk4M0E5QjRBOUI1QTlCQUE5QkJBOUJELUE5QzBBQTJG
QUEzMEFBMzNBQTM0QUE0REFBN0JBQkUzQUJFNEFCRTZBQkU3QUJFOUFCRUFBQkVDIiwKKyAgICBN
ZTogIjA0ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2NzAtQTY3MiIsCisgICAgTjogICIw
MDMwLTAwMzkwMEIyMDBCMzAwQjkwMEJDLTAwQkUwNjYwLTA2NjkwNkYwLTA2RjkwN0MwLTA3Qzkw
OTY2LTA5NkYwOUU2LTA5RUYwOUY0LTA5RjkwQTY2LTBBNkYwQUU2LTBBRUYwQjY2LTBCNkYwQkU2
LTBCRjIwQzY2LTBDNkYwQzc4LTBDN0UwQ0U2LTBDRUYwRDY2LTBENzUwRTUwLTBFNTkwRUQwLTBF
RDkwRjIwLTBGMzMxMDQwLTEwNDkxMDkwLTEwOTkxMzY5LTEzN0MxNkVFLTE2RjAxN0UwLTE3RTkx
N0YwLTE3RjkxODEwLTE4MTkxOTQ2LTE5NEYxOUQwLTE5REExQTgwLTFBODkxQTkwLTFBOTkxQjUw
LTFCNTkxQkIwLTFCQjkxQzQwLTFDNDkxQzUwLTFDNTkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1
MC0yMTgyMjE4NS0yMTg5MjQ2MC0yNDlCMjRFQS0yNEZGMjc3Ni0yNzkzMkNGRDMwMDczMDIxLTMw
MjkzMDM4LTMwM0EzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYzMjgwLTMyODkzMkIxLTMyQkZB
NjIwLUE2MjlBNkU2LUE2RUZBODMwLUE4MzVBOEQwLUE4RDlBOTAwLUE5MDlBOUQwLUE5RDlBQTUw
LUFBNTlBQkYwLUFCRjlGRjEwLUZGMTkiLAorICAgIE5kOiAiMDAzMC0wMDM5MDY2MC0wNjY5MDZG
MC0wNkY5MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMEE2Ni0wQTZGMEFFNi0wQUVGMEI2Ni0w
QjZGMEJFNi0wQkVGMEM2Ni0wQzZGMENFNi0wQ0VGMEQ2Ni0wRDZGMEU1MC0wRTU5MEVEMC0wRUQ5
MEYyMC0wRjI5MTA0MC0xMDQ5MTA5MC0xMDk5MTdFMC0xN0U5MTgxMC0xODE5MTk0Ni0xOTRGMTlE
MC0xOURBMUE4MC0xQTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJCMC0xQkI5MUM0MC0xQzQ5MUM1MC0x
QzU5QTYyMC1BNjI5QThEMC1BOEQ5QTkwMC1BOTA5QTlEMC1BOUQ5QUE1MC1BQTU5QUJGMC1BQkY5
RkYxMC1GRjE5IiwKKyAgICBObDogIjE2RUUtMTZGMDIxNjAtMjE4MjIxODUtMjE4ODMwMDczMDIx
LTMwMjkzMDM4LTMwM0FBNkU2LUE2RUYiLAorICAgIE5vOiAiMDBCMjAwQjMwMEI5MDBCQy0wMEJF
MDlGNC0wOUY5MEJGMC0wQkYyMEM3OC0wQzdFMEQ3MC0wRDc1MEYyQS0wRjMzMTM2OS0xMzdDMTdG
MC0xN0Y5MjA3MDIwNzQtMjA3OTIwODAtMjA4OTIxNTAtMjE1RjIxODkyNDYwLTI0OUIyNEVBLTI0
RkYyNzc2LTI3OTMyQ0ZEMzE5Mi0zMTk1MzIyMC0zMjI5MzI1MS0zMjVGMzI4MC0zMjg5MzJCMS0z
MkJGQTgzMC1BODM1IiwKKyAgICBQOiAgIjAwMjEtMDAyMzAwMjUtMDAyQTAwMkMtMDAyRjAwM0Ew
MDNCMDAzRjAwNDAwMDVCLTAwNUQwMDVGMDA3QjAwN0QwMEExMDBBQjAwQjcwMEJCMDBCRjAzN0Uw
Mzg3MDU1QS0wNTVGMDU4OTA1OEEwNUJFMDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMw
NjBEMDYxQjA2MUUwNjFGMDY2QS0wNjZEMDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5
NjQwOTY1MDk3MDBERjQwRTRGMEU1QTBFNUIwRjA0LTBGMTIwRjNBLTBGM0QwRjg1MEZEMC0wRkQ0
MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE0MDAxNjZEMTY2RTE2OUIxNjlDMTZFQi0xNkVEMTczNTE3
MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MEExOTQ0MTk0NTE5REUxOURGMUExRTFBMUYxQUEw
LTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdFMUM3RjFDRDMyMDEwLTIwMjcyMDMw
LTIwNDMyMDQ1LTIwNTEyMDUzLTIwNUUyMDdEMjA3RTIwOEQyMDhFMjMyOTIzMkEyNzY4LTI3NzUy
N0M1MjdDNjI3RTYtMjdFRjI5ODMtMjk5ODI5RDgtMjlEQjI5RkMyOUZEMkNGOS0yQ0ZDMkNGRTJD
RkYyRTAwLTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMwMDgtMzAxMTMwMTQtMzAxRjMwMzAzMDNEMzBB
MDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZB
OEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJF
QkZEM0VGRDNGRkUxMC1GRTE5RkUzMC1GRTUyRkU1NC1GRTYxRkU2M0ZFNjhGRTZBRkU2QkZGMDEt
RkYwM0ZGMDUtRkYwQUZGMEMtRkYwRkZGMUFGRjFCRkYxRkZGMjBGRjNCLUZGM0RGRjNGRkY1QkZG
NURGRjVGLUZGNjUiLAorICAgIFBkOiAiMDAyRDA1OEEwNUJFMTQwMDE4MDYyMDEwLTIwMTUyRTE3
MkUxQTMwMUMzMDMwMzBBMEZFMzFGRTMyRkU1OEZFNjNGRjBEIiwKKyAgICBQczogIjAwMjgwMDVC
MDA3QjBGM0EwRjNDMTY5QjIwMUEyMDFFMjA0NTIwN0QyMDhEMjMyOTI3NjgyNzZBMjc2QzI3NkUy
NzcwMjc3MjI3NzQyN0M1MjdFNjI3RTgyN0VBMjdFQzI3RUUyOTgzMjk4NTI5ODcyOTg5Mjk4QjI5
OEQyOThGMjk5MTI5OTMyOTk1Mjk5NzI5RDgyOURBMjlGQzJFMjIyRTI0MkUyNjJFMjgzMDA4MzAw
QTMwMEMzMDBFMzAxMDMwMTQzMDE2MzAxODMwMUEzMDFERkQzRUZFMTdGRTM1RkUzN0ZFMzlGRTNC
RkUzREZFM0ZGRTQxRkU0M0ZFNDdGRTU5RkU1QkZFNURGRjA4RkYzQkZGNUJGRjVGRkY2MiIsCisg
ICAgUGU6ICIwMDI5MDA1RDAwN0QwRjNCMEYzRDE2OUMyMDQ2MjA3RTIwOEUyMzJBMjc2OTI3NkIy
NzZEMjc2RjI3NzEyNzczMjc3NTI3QzYyN0U3MjdFOTI3RUIyN0VEMjdFRjI5ODQyOTg2Mjk4ODI5
OEEyOThDMjk4RTI5OTAyOTkyMjk5NDI5OTYyOTk4MjlEOTI5REIyOUZEMkUyMzJFMjUyRTI3MkUy
OTMwMDkzMDBCMzAwRDMwMEYzMDExMzAxNTMwMTczMDE5MzAxQjMwMUUzMDFGRkQzRkZFMThGRTM2
RkUzOEZFM0FGRTNDRkUzRUZFNDBGRTQyRkU0NEZFNDhGRTVBRkU1Q0ZFNUVGRjA5RkYzREZGNURG
RjYwRkY2MyIsCisgICAgUGk6ICIwMEFCMjAxODIwMUIyMDFDMjAxRjIwMzkyRTAyMkUwNDJFMDky
RTBDMkUxQzJFMjAiLAorICAgIFBmOiAiMDBCQjIwMTkyMDFEMjAzQTJFMDMyRTA1MkUwQTJFMEQy
RTFEMkUyMSIsCisgICAgUGM6ICIwMDVGMjAzRjIwNDAyMDU0RkUzM0ZFMzRGRTRELUZFNEZGRjNG
IiwKKyAgICBQbzogIjAwMjEtMDAyMzAwMjUtMDAyNzAwMkEwMDJDMDAyRTAwMkYwMDNBMDAzQjAw
M0YwMDQwMDA1QzAwQTEwMEI3MDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1QzAwNUMzMDVDNjA1
RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQw
N0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEY4
NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNjZEMTY2RTE2RUItMTZFRDE3MzUxNzM2
MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODA1MTgwNy0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUx
QTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxNjIw
MTcyMDIwLTIwMjcyMDMwLTIwMzgyMDNCLTIwM0UyMDQxLTIwNDMyMDQ3LTIwNTEyMDUzMjA1NS0y
MDVFMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwMkUwMTJFMDYtMkUwODJFMEIyRTBFLTJFMTYyRTE4MkUx
OTJFMUIyRTFFMkUxRjJFMkEtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAzRDMwRkJBNEZFQTRGRkE2
MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTky
RkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZFMTAtRkUxNkZFMTlG
RTMwRkU0NUZFNDZGRTQ5LUZFNENGRTUwLUZFNTJGRTU0LUZFNTdGRTVGLUZFNjFGRTY4RkU2QUZF
NkJGRjAxLUZGMDNGRjA1LUZGMDdGRjBBRkYwQ0ZGMEVGRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0NG
RjYxRkY2NEZGNjUiLAorICAgIFM6ICAiMDAyNDAwMkIwMDNDLTAwM0UwMDVFMDA2MDAwN0MwMDdF
MDBBMi0wMEE5MDBBQzAwQUUtMDBCMTAwQjQwMEI2MDBCODAwRDcwMEY3MDJDMi0wMkM1MDJEMi0w
MkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4NTAzRjYwNDgyMDYwNi0wNjA4MDYw
QjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RjIwOUYzMDlGQTA5RkIwQUYxMEI3MDBCRjMtMEJG
QTBDN0YwQ0YxMENGMjBENzkwRTNGMEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYw
RjM4MEZCRS0wRkM1MEZDNy0wRkNDMEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEz
OTkxN0RCMTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3QzFGQkQxRkJGLTFGQzExRkNELTFG
Q0YxRkRELTFGREYxRkVELTFGRUYxRkZEMUZGRTIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjBB
MC0yMEI4MjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFFLTIxMjMyMTI1
MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTQwLTIxNDQyMTRBLTIxNEQyMTRGMjE5MC0yMzI4MjMyQi0y
M0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgt
MjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2
LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjdDMC0yN0M0MjdDNy0yN0NBMjdD
QzI3RDAtMjdFNTI3RjAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5RkUtMkI0QzJCNTAtMkI1OTJD
RTUtMkNFQTJFODAtMkU5OTJFOUItMkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEyMzAxMzMw
MjAzMDM2MzAzNzMwM0UzMDNGMzA5QjMwOUMzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAt
MzIxRTMyMkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERG
RkE0OTAtQTRDNkE3MDAtQTcxNkE3MjBBNzIxQTc4OUE3OEFBODI4LUE4MkJBODM2LUE4MzlBQTc3
LUFBNzlGQjI5RkRGQ0ZERkRGRTYyRkU2NC1GRTY2RkU2OUZGMDRGRjBCRkYxQy1GRjFFRkYzRUZG
NDBGRjVDRkY1RUZGRTAtRkZFNkZGRTgtRkZFRUZGRkNGRkZEIiwKKyAgICBTbTogIjAwMkIwMDND
LTAwM0UwMDdDMDA3RTAwQUMwMEIxMDBENzAwRjcwM0Y2MDYwNi0wNjA4MjA0NDIwNTIyMDdBLTIw
N0MyMDhBLTIwOEMyMTQwLTIxNDQyMTRCMjE5MC0yMTk0MjE5QTIxOUIyMUEwMjFBMzIxQTYyMUFF
MjFDRTIxQ0YyMUQyMjFENDIxRjQtMjJGRjIzMDgtMjMwQjIzMjAyMzIxMjM3QzIzOUItMjNCMzIz
REMtMjNFMTI1QjcyNUMxMjVGOC0yNUZGMjY2RjI3QzAtMjdDNDI3QzctMjdDQTI3Q0MyN0QwLTI3
RTUyN0YwLTI3RkYyOTAwLTI5ODIyOTk5LTI5RDcyOURDLTI5RkIyOUZFLTJBRkYyQjMwLTJCNDQy
QjQ3LTJCNENGQjI5RkU2MkZFNjQtRkU2NkZGMEJGRjFDLUZGMUVGRjVDRkY1RUZGRTJGRkU5LUZG
RUMiLAorICAgIFNjOiAiMDAyNDAwQTItMDBBNTA2MEIwOUYyMDlGMzA5RkIwQUYxMEJGOTBFM0Yx
N0RCMjBBMC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUxRkZFNUZGRTYiLAorICAgIFNrOiAi
MDA1RTAwNjAwMEE4MDBBRjAwQjQwMEI4MDJDMi0wMkM1MDJEMi0wMkRGMDJFNS0wMkVCMDJFRDAy
RUYtMDJGRjAzNzUwMzg0MDM4NTFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRELTFGREYxRkVELTFG
RUYxRkZEMUZGRTMwOUIzMDlDQTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUZGM0VGRjQwRkZFMyIs
CisgICAgU286ICIwMEE2MDBBNzAwQTkwMEFFMDBCMDAwQjYwNDgyMDYwRTA2MEYwNkU5MDZGRDA2
RkUwN0Y2MDlGQTBCNzAwQkYzLTBCRjgwQkZBMEM3RjBDRjEwQ0YyMEQ3OTBGMDEtMEYwMzBGMTMt
MEYxNzBGMUEtMEYxRjBGMzQwRjM2MEYzODBGQkUtMEZDNTBGQzctMEZDQzBGQ0UwRkNGMEZENS0w
RkQ4MTA5RTEwOUYxMzYwMTM5MC0xMzk5MTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3QzIx
MDAyMTAxMjEwMy0yMTA2MjEwODIxMDkyMTE0MjExNi0yMTE4MjExRS0yMTIzMjEyNTIxMjcyMTI5
MjEyRTIxM0EyMTNCMjE0QTIxNEMyMTREMjE0RjIxOTUtMjE5OTIxOUMtMjE5RjIxQTEyMUEyMjFB
NDIxQTUyMUE3LTIxQUQyMUFGLTIxQ0QyMUQwMjFEMTIxRDMyMUQ1LTIxRjMyMzAwLTIzMDcyMzBD
LTIzMUYyMzIyLTIzMjgyMzJCLTIzN0IyMzdELTIzOUEyM0I0LTIzREIyM0UyLTIzRTgyNDAwLTI0
MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI1QjYyNUI4LTI1QzAyNUMyLTI1RjcyNjAwLTI2NkUy
NjcwLTI2Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3
MjcyOS0yNzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0Ix
LTI3QkUyODAwLTI4RkYyQjAwLTJCMkYyQjQ1MkI0NjJCNTAtMkI1OTJDRTUtMkNFQTJFODAtMkU5
OTJFOUItMkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEyMzAxMzMwMjAzMDM2MzAzNzMwM0Uz
MDNGMzE5MDMxOTEzMTk2LTMxOUYzMUMwLTMxRTMzMjAwLTMyMUUzMjJBLTMyNTAzMjYwLTMyN0Yz
MjhBLTMyQjAzMkMwLTMyRkUzMzAwLTMzRkY0REMwLTRERkZBNDkwLUE0QzZBODI4LUE4MkJBODM2
QTgzN0E4MzlBQTc3LUFBNzlGREZERkZFNEZGRThGRkVERkZFRUZGRkNGRkZEIiwKKyAgICBaOiAg
IjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIwMkYyMDVGMzAwMCIsCisgICAgWnM6
ICIwMDIwMDBBMDE2ODAxODBFMjAwMC0yMDBBMjAyRjIwNUYzMDAwIiwKKyAgICBabDogIjIwMjgi
LAorICAgIFpwOiAiMjAyOSIsCisgICAgQzogICIwMDAwLTAwMUYwMDdGLTAwOUYwMEFEMDM3ODAz
NzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkw
MDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNjA1MDYxQzA2MUQwNjIwMDY1RjA2REQwNzBFMDcwRjA3
NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2
MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlC
QTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0w
QTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMt
MEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQw
QThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQw
QUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0Iw
QjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4
NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJB
RDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMw
MDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0w
QzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIw
Q0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQw
RDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYt
MEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBE
Q0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4
NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVC
RTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0w
RjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1
NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3
MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlG
MTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdG
MTdCNDE3QjUxN0RFMTdERjE3RUEtMTdFRjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0Yx
OEFCLTE4QUYxOEY2LTE4RkYxOTFELTE5MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZF
MTk2RjE5NzUtMTk3RjE5QUMtMTlBRjE5Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0Qx
QTdFMUE4QS0xQThGMUE5QS0xQTlGMUFBRS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFE
MUJCQS0xQkZGMUMzOC0xQzNBMUM0QS0xQzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYx
NjFGMTcxRjFFMUYxRjFGNDYxRjQ3MUY0RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1
MUZDNTFGRDQxRkQ1MUZEQzFGRjAxRkYxMUZGNTFGRkYyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIw
NkYyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIwRkYyMThBLTIxOEYyM0U5LTIz
RkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3MDAyNzA1MjcwQTI3MEIyNzI4
Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAyN0JGMjdDQjI3Q0QtMjdDRjJC
NEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0yRDJGMkQ2Ni0yRDZFMkQ3MC0y
RDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRENzJEREYyRTMyLTJFN0YyRTlB
MkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4MzEwMC0zMTA0MzEyRS0zMTMw
MzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJGOUZDQy05RkZGQTQ4RC1BNDhG
QTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4LUE2OUZBNkY4LUE2RkZBNzhE
LUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4Q0RBOERBLUE4REZBOEZDLUE4
RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1BOUZGQUEzNy1BQTNGQUE0RUFB
NEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFCRUVBQkVGQUJGQS1BQkZGRDdB
NC1EN0FGRDdDNy1EN0NBRDdGQy1GOEZGRkEyRUZBMkZGQTZFRkE2RkZBREEtRkFGRkZCMDctRkIx
MkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQyRkQ0MC1GRDRGRkQ5MEZEOTFG
REM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNGRTY3RkU2Qy1GRTZGRkU3NUZF
RkQtRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4RkZEOUZGREQtRkZERkZGRTdGRkVG
LUZGRkJGRkZFRkZGRiIsCisgICAgQ2M6ICIwMDAwLTAwMUYwMDdGLTAwOUYiLAorICAgIENmOiAi
MDBBRDA2MDAtMDYwMzA2REQwNzBGMTdCNDE3QjUyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNjQy
MDZBLTIwNkZGRUZGRkZGOS1GRkZCIiwKKyAgICBDbzogIkUwMDAtRjhGRiIsCisgICAgQ3M6ICJE
ODAwLURGRkYiLAorICAgIENuOiAiMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1
MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNUZGMDYw
NDA2MDUwNjFDMDYxRDA2MjAwNjVGMDcwRTA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4
MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUw
OTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2
MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBB
MzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4
MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFD
NjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBC
MTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0w
QjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5
RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJD
RjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzND
MEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBD
ODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYw
Q0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRF
LTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIw
REJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBF
M0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEw
MEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIw
RURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0x
MENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjEx
MkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdG
MTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTcz
RjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBG
MTgxQS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkz
Qy0xOTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5
REQxQTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0
RjFCN0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFD
RjMtMUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUEx
RjVDMUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjA2NS0y
MDY5MjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZGMjE4QS0yMThGMjNFOS0y
M0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAwMjcwNTI3MEEyNzBCMjcy
ODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdCRjI3Q0IyN0NELTI3Q0Yy
QjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQyRjJENjYtMkQ2RTJENzAt
MkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcyRERGMkUzMi0yRTdGMkU5
QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMxMDAtMzEwNDMxMkUtMzEz
MDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlGQ0MtOUZGRkE0OEQtQTQ4
RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1BNjlGQTZGOC1BNkZGQTc4
RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENEQThEQS1BOERGQThGQy1B
OEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlGRkFBMzctQUEzRkFBNEVB
QTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVFQUJFRkFCRkEtQUJGRkQ3
QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRDdGRkZBMkVGQTJGRkE2RUZBNkZGQURBLUZBRkZGQjA3LUZC
MTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZENDAtRkQ0RkZEOTBGRDkx
RkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2N0ZFNkMtRkU2RkZFNzVG
RUZERkVGRUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlGRkRELUZGREZGRkU3
RkZFRi1GRkY4RkZGRUZGRkYiCit9KTsKKworZnVuY3Rpb24gYWRkVW5pY29kZVBhY2thZ2UgKHBh
Y2spIHsKKyAgICB2YXIgY29kZVBvaW50ID0gL1x3ezR9L2c7CisgICAgZm9yICh2YXIgbmFtZSBp
biBwYWNrKQorICAgICAgICBleHBvcnRzLnBhY2thZ2VzW25hbWVdID0gcGFja1tuYW1lXS5yZXBs
YWNlKGNvZGVQb2ludCwgIlxcdSQmIik7Cit9OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2Rv
Y3VtZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcs
ICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3JhbmdlJywgJ2FjZS9hbmNob3InXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUo
Ii4vbGliL29vcCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2Vt
aXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFu
Z2U7Cit2YXIgQW5jaG9yID0gcmVxdWlyZSgiLi9hbmNob3IiKS5BbmNob3I7CisKK3ZhciBEb2N1
bWVudCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICB0aGlzLiRsaW5lcyA9IFtdOworICAgIGlmICh0
ZXh0Lmxlbmd0aCA9PSAwKSB7CisgICAgICAgIHRoaXMuJGxpbmVzID0gWyIiXTsKKyAgICB9IGVs
c2UgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHsKKyAgICAgICAgdGhpcy5pbnNlcnRMaW5lcygw
LCB0ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1
bW46MH0sIHRleHQpOworICAgIH0KK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBs
ZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24o
dGV4dCkgeworICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgdGhp
cy5yZW1vdmUobmV3IFJhbmdlKDAsIDAsIGxlbiwgdGhpcy5nZXRMaW5lKGxlbi0xKS5sZW5ndGgp
KTsKKyAgICAgICAgdGhpcy5pbnNlcnQoe3JvdzogMCwgY29sdW1uOjB9LCB0ZXh0KTsKKyAgICB9
OworICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
Z2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKKyAgICB9Owor
ICAgIHRoaXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOworICAgIH07CisgICAgaWYgKCJh
YWEiLnNwbGl0KC9hLykubGVuZ3RoID09IDApCisgICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rp
b24odGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXHJcbnxcci9nLCAi
XG4iKS5zcGxpdCgiXG4iKTsKKyAgICAgICAgfQorICAgIGVsc2UKKyAgICAgICAgdGhpcy4kc3Bs
aXQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJc
bnxccnxcbi8pOworICAgICAgICB9OworCisKKyAKKyAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0g
ZnVuY3Rpb24odGV4dCkgeworICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxy
XG58XHJ8XG4pL20pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHRoaXMuJGF1
dG9OZXdMaW5lID0gbWF0Y2hbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlz
LiRhdXRvTmV3TGluZSA9ICJcbiI7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0TmV3
TGluZUNoYXJhY3RlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xp
bmVNb2RlKSB7CisgICAgICAgICAgY2FzZSAid2luZG93cyI6CisgICAgICAgICAgICByZXR1cm4g
IlxyXG4iOworCisgICAgICAgICAgY2FzZSAidW5peCI6CisgICAgICAgICAgICByZXR1cm4gIlxu
IjsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kYXV0b05l
d0xpbmU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiXG4i
OworICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOworICAgIHRoaXMuc2V0TmV3TGluZU1v
ZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgeworICAgICAgICBpZiAodGhpcy4kbmV3TGluZU1v
ZGUgPT09IG5ld0xpbmVNb2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMu
JG5ld0xpbmVNb2RlID0gbmV3TGluZU1vZGU7CisgICAgfTsKKyAgICB0aGlzLmdldE5ld0xpbmVN
b2RlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRuZXdMaW5lTW9kZTsKKyAg
ICB9OworICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICByZXR1
cm4gKHRleHQgPT0gIlxyXG4iIHx8IHRleHQgPT0gIlxyIiB8fCB0ZXh0ID09ICJcbiIpOworICAg
IH07CisgICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiB0
aGlzLiRsaW5lc1tyb3ddIHx8ICIiOworICAgIH07CisgICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGlj
ZShmaXJzdFJvdywgbGFzdFJvdyArIDEpOworICAgIH07CisgICAgdGhpcy5nZXRBbGxMaW5lcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lcygwLCB0aGlzLmdldExl
bmd0aCgpKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7CisgICAgfTsKKyAgICB0aGlzLmdldFRleHRS
YW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0g
cmFuZ2UuZW5kLnJvdykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3JhbmdlLnN0
YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4p
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGxpbmVzID0gdGhp
cy5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3crMSwgcmFuZ2UuZW5kLnJvdy0xKTsKKyAgICAgICAg
ICAgIGxpbmVzLnVuc2hpZnQoKHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10gfHwgIiIpLnN1
YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pKTsKKyAgICAgICAgICAgIGxpbmVzLnB1c2goKHRo
aXMuJGxpbmVzW3JhbmdlLmVuZC5yb3ddIHx8ICIiKS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNv
bHVtbikpOworICAgICAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hh
cmFjdGVyKCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJGNsaXBQb3NpdGlvbiA9
IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0
aCgpOworICAgICAgICBpZiAocG9zaXRpb24ucm93ID49IGxlbmd0aCkgeworICAgICAgICAgICAg
cG9zaXRpb24ucm93ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gMSk7CisgICAgICAgICAgICBwb3Np
dGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoLTEpLmxlbmd0aDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfTsKKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0
aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICghdGV4dCB8fCB0ZXh0Lmxlbmd0aCA9
PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICBwb3NpdGlvbiA9
IHRoaXMuJGNsaXBQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGlmICh0aGlzLmdldExlbmd0
aCgpIDw9IDEpCisgICAgICAgICAgICB0aGlzLiRkZXRlY3ROZXdMaW5lKHRleHQpOworCisgICAg
ICAgIHZhciBsaW5lcyA9IHRoaXMuJHNwbGl0KHRleHQpOworICAgICAgICB2YXIgZmlyc3RMaW5l
ID0gbGluZXMuc3BsaWNlKDAsIDEpWzBdOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lcy5s
ZW5ndGggPT0gMCA/IG51bGwgOiBsaW5lcy5zcGxpY2UobGluZXMubGVuZ3RoIC0gMSwgMSlbMF07
CisKKyAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydEluTGluZShwb3NpdGlvbiwgZmlyc3RM
aW5lKTsKKyAgICAgICAgaWYgKGxhc3RMaW5lICE9PSBudWxsKSB7CisgICAgICAgICAgICBwb3Np
dGlvbiA9IHRoaXMuaW5zZXJ0TmV3TGluZShwb3NpdGlvbik7IC8vIHRlcm1pbmF0ZSBmaXJzdCBs
aW5lCisgICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0TGluZXMocG9zaXRpb24ucm93
LCBsaW5lcyk7CisgICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5lKHBvc2l0
aW9uLCBsYXN0TGluZSB8fCAiIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9u
OworICAgIH07CisgICAgdGhpcy5pbnNlcnRMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsK
KyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIHtyb3c6
IHJvdywgY29sdW1uOiAwfTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDB4RkZGRikgewor
ICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMuaW5zZXJ0TGluZXMocm93LCBsaW5lcy5zbGljZSgw
eEZGRkYpKTsKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgMHhGRkZGKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBhcmdzID0gW3JvdywgMF07CisgICAgICAgIGFyZ3MucHVz
aC5hcHBseShhcmdzLCBsaW5lcyk7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZS5hcHBseSh0
aGlzLiRsaW5lcywgYXJncyk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywg
MCwgcm93ICsgbGluZXMubGVuZ3RoLCAwKTsKKyAgICAgICAgdmFyIGRlbHRhID0geworICAgICAg
ICAgICAgYWN0aW9uOiAiaW5zZXJ0TGluZXMiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAor
ICAgICAgICAgICAgbGluZXM6IGxpbmVzCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiBlbmQgfHwgcmFuZ2Uu
ZW5kOworICAgIH07CisgICAgdGhpcy5pbnNlcnROZXdMaW5lID0gZnVuY3Rpb24ocG9zaXRpb24p
IHsKKyAgICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9zaXRpb24ocG9zaXRpb24pOworICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7CisKKyAgICAg
ICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9u
LmNvbHVtbik7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShwb3NpdGlvbi5yb3cgKyAxLCAw
LCBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4sIGxpbmUubGVuZ3RoKSk7CisKKyAgICAg
ICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdyArIDEsCisgICAg
ICAgICAgICBjb2x1bW4gOiAwCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGRlbHRhID0gewor
ICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsCisgICAgICAgICAgICByYW5nZTogUmFu
Z2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwKKyAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0
TmV3TGluZUNoYXJhY3RlcigpCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5n
ZSIsIHsgZGF0YTogZGVsdGEgfSk7CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAg
IHRoaXMuaW5zZXJ0SW5MaW5lID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHsKKyAgICAgICAg
aWYgKHRleHQubGVuZ3RoID09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAg
ICAgICAgdmFyIGxpbmUgPSB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddIHx8ICIiOworCisgICAg
ICAgIHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gPSBsaW5lLnN1YnN0cmluZygwLCBwb3NpdGlv
bi5jb2x1bW4pICsgdGV4dAorICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcocG9zaXRp
b24uY29sdW1uKTsKKworICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgcm93IDogcG9z
aXRpb24ucm93LAorICAgICAgICAgICAgY29sdW1uIDogcG9zaXRpb24uY29sdW1uICsgdGV4dC5s
ZW5ndGgKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBh
Y3Rpb246ICJpbnNlcnRUZXh0IiwKKyAgICAgICAgICAgIHJhbmdlOiBSYW5nZS5mcm9tUG9pbnRz
KHBvc2l0aW9uLCBlbmQpLAorICAgICAgICAgICAgdGV4dDogdGV4dAorICAgICAgICB9OworICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOworCisgICAgICAgIHJl
dHVybiBlbmQ7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Cisg
ICAgICAgIHJhbmdlLnN0YXJ0ID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKKyAg
ICAgICAgcmFuZ2UuZW5kID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLmVuZCk7CisKKyAgICAg
ICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsK
KworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBs
YXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsKKworICAgICAgICBpZiAocmFuZ2UuaXNNdWx0aUxpbmUo
KSkgeworICAgICAgICAgICAgdmFyIGZpcnN0RnVsbFJvdyA9IHJhbmdlLnN0YXJ0LmNvbHVtbiA9
PSAwID8gZmlyc3RSb3cgOiBmaXJzdFJvdyArIDE7CisgICAgICAgICAgICB2YXIgbGFzdEZ1bGxS
b3cgPSBsYXN0Um93IC0gMTsKKworICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5jb2x1bW4gPiAw
KQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGxhc3RSb3csIDAsIHJhbmdlLmVu
ZC5jb2x1bW4pOworCisgICAgICAgICAgICBpZiAobGFzdEZ1bGxSb3cgPj0gZmlyc3RGdWxsUm93
KQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMoZmlyc3RGdWxsUm93LCBsYXN0RnVs
bFJvdyk7CisKKyAgICAgICAgICAgIGlmIChmaXJzdEZ1bGxSb3cgIT0gZmlyc3RSb3cpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29s
dW1uLCB0aGlzLmdldExpbmUoZmlyc3RSb3cpLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgdGhp
cy5yZW1vdmVOZXdMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJv
dywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZUluTGluZSA9
IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgeworICAgICAgICBpZiAoc3Rh
cnRDb2x1bW4gPT0gZW5kQ29sdW1uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZh
ciByYW5nZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0Q29sdW1uLCByb3csIGVuZENvbHVtbik7Cisg
ICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciByZW1vdmVk
ID0gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CisgICAgICAgIHZhciBu
ZXdMaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgbGluZS5zdWJzdHJpbmco
ZW5kQ29sdW1uLCBsaW5lLmxlbmd0aCk7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShyb3cs
IDEsIG5ld0xpbmUpOworCisgICAgICAgIHZhciBkZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlv
bjogInJlbW92ZVRleHQiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAgICAgICAg
dGV4dDogcmVtb3ZlZAorICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7
IGRhdGE6IGRlbHRhIH0pOworICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgfTsKKyAg
ICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAg
ICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKGZpcnN0Um93LCAwLCBsYXN0Um93ICsgMSwgMCk7Cisg
ICAgICAgIHZhciByZW1vdmVkID0gdGhpcy4kbGluZXMuc3BsaWNlKGZpcnN0Um93LCBsYXN0Um93
IC0gZmlyc3RSb3cgKyAxKTsKKworICAgICAgICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBh
Y3Rpb246ICJyZW1vdmVMaW5lcyIsCisgICAgICAgICAgICByYW5nZTogcmFuZ2UsCisgICAgICAg
ICAgICBubDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCksCisgICAgICAgICAgICBsaW5lczog
cmVtb3ZlZAorICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6
IGRlbHRhIH0pOworICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICB9OworICAgIHRoaXMucmVt
b3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICB2YXIgZmlyc3RMaW5lID0gdGhp
cy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBzZWNvbmRMaW5lID0gdGhpcy5nZXRMaW5lKHJv
dysxKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBmaXJzdExpbmUubGVu
Z3RoLCByb3crMSwgMCk7CisgICAgICAgIHZhciBsaW5lID0gZmlyc3RMaW5lICsgc2Vjb25kTGlu
ZTsKKworICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93LCAyLCBsaW5lKTsKKworICAgICAg
ICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwKKyAgICAg
ICAgICAgIHJhbmdlOiByYW5nZSwKKyAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNo
YXJhY3RlcigpCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0
YTogZGVsdGEgfSk7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwg
dGV4dCkgeworICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCAmJiByYW5nZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgICAgIGlmICh0ZXh0ID09IHRo
aXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5lbmQ7CisK
KyAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOworICAgICAgICBpZiAodGV4dCkgeworICAgICAg
ICAgICAgdmFyIGVuZCA9IHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCB0ZXh0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZCA9IHJhbmdlLnN0YXJ0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAgIHRoaXMuYXBwbHlEZWx0YXMg
PSBmdW5jdGlvbihkZWx0YXMpIHsKKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRlbHRhcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOworICAgICAgICAg
ICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEu
cmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGlu
ZXMiKQorICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluZXMocmFuZ2Uuc3RhcnQucm93LCBk
ZWx0YS5saW5lcyk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2Vy
dFRleHQiKQorICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCBkZWx0YS50
ZXh0KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMi
KQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5n
ZS5lbmQucm93IC0gMSk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJl
bW92ZVRleHQiKQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgdGhpcy5yZXZlcnREZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsKKyAg
ICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgICAgICAg
ICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOworCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5n
ZS5mcm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOworCisgICAg
ICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpCisgICAgICAgICAgICAg
ICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIpCisgICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVs
dGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRM
aW5lcyhyYW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNl
cnQocmFuZ2Uuc3RhcnQsIGRlbHRhLnRleHQpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlz
LmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBzdGFydFJvdykgeworICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CisgICAgICAgIHZh
ciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOworICAg
ICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7
IGkrKykgeworICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxl
bmd0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IHtyb3c6IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3Ro
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGxpbmVzW2wt
MV0ubGVuZ3RofTsKKyAgICB9OworICAgIHRoaXMucG9zaXRpb25Ub0luZGV4ID0gZnVuY3Rpb24o
cG9zLCBzdGFydFJvdykgeworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlz
LmdldEFsbExpbmVzKCk7CisgICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdM
aW5lQ2hhcmFjdGVyKCkubGVuZ3RoOworICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICB2
YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSkKKyAgICAgICAgICAgIGluZGV4ICs9
IGxpbmVzW2ldLmxlbmd0aDsKKworICAgICAgICByZXR1cm4gaW5kZXggKyBuZXdsaW5lTGVuZ3Ro
ICogaSArIHBvcy5jb2x1bW47CisgICAgfTsKKworfSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUp
OworCitleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNl
L2FuY2hvcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3An
LCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBFdmVudEVt
aXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2
YXIgQW5jaG9yID0gZXhwb3J0cy5BbmNob3IgPSBmdW5jdGlvbihkb2MsIHJvdywgY29sdW1uKSB7
CisgICAgdGhpcy5kb2N1bWVudCA9IGRvYzsKKyAgICAKKyAgICBpZiAodHlwZW9mIGNvbHVtbiA9
PSAidW5kZWZpbmVkIikKKyAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29s
dW1uKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOwor
CisgICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgZG9j
Lm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAg
ICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlzLmdldFBvc2l0
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0Rv
Y3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7CisgICAgfTsKKyAgICAgICAgCisgICAgdGhp
cy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVu
dDsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
dmFyIGRlbHRhID0gZS5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAg
ICAgICAgICAgIAorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cg
JiYgcmFuZ2Uuc3RhcnQucm93ICE9IHRoaXMucm93KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPiB0aGlzLnJvdykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93
ID09IHRoaXMucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA+IHRoaXMuY29sdW1uKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIAorICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3c7CisgICAgICAg
IHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbjsKKyAgICAgICAgCisgICAgICAgIGlmIChkZWx0YS5h
Y3Rpb24gPT09ICJpbnNlcnRUZXh0IikgeworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJv
dyA9PT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSBjb2x1bW4pIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbiArPSByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1u
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29sdW1uIC09IHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgICAgICAg
ICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93
ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyA8IHJvdykgeworICAgICAgICAg
ICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydExpbmVzIikg
eworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8PSByb3cpIHsKKyAgICAgICAgICAg
ICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRl
eHQiKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJvdyAmJiByYW5nZS5z
dGFydC5jb2x1bW4gPCBjb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLmNv
bHVtbiA+PSBjb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHJhbmdlLnN0YXJ0
LmNvbHVtbjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbHVt
biA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIChyYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQu
Y29sdW1uKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdl
LnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgPCByb3cpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9PSByb3cpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbikg
KyByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJvdyAtPSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykgeworICAgICAgICAg
ICAgICAgIHJvdyAtPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAg
ICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW4pICsg
cmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGRl
bHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3Rh
cnQucm93IDw9IHJvdykgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IDw9IHJv
dykKKyAgICAgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFy
dC5yb3c7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9
IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNl
dFBvc2l0aW9uKHJvdywgY29sdW1uLCB0cnVlKTsKKyAgICB9OworCisgICAgdGhpcy5zZXRQb3Np
dGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHsKKyAgICAgICAgdmFyIHBvczsK
KyAgICAgICAgaWYgKG5vQ2xpcCkgeworICAgICAgICAgICAgcG9zID0geworICAgICAgICAgICAg
ICAgIHJvdzogcm93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9zID0gdGhpcy4k
Y2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYmIHRoaXMuY29sdW1uID09IHBvcy5j
b2x1bW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIG9s
ZCA9IHsKKyAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCisgICAgICAgICAgICBjb2x1bW46IHRo
aXMuY29sdW1uCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB0aGlzLnJvdyA9IHBvcy5y
b3c7CisgICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjsKKyAgICAgICAgdGhpcy5fZW1p
dCgiY2hhbmdlIiwgeworICAgICAgICAgICAgb2xkOiBvbGQsCisgICAgICAgICAgICB2YWx1ZTog
cG9zCisgICAgICAgIH0pOworICAgIH07CisKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRo
aXMuJG9uQ2hhbmdlKTsKKyAgICB9OworICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQg
PSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgcG9zID0ge307CisgICAgCisg
ICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkgeworICAgICAgICAg
ICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTsK
KyAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdyku
bGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHsKKyAgICAgICAg
ICAgIHBvcy5yb3cgPSAwOworICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3Mucm93ID0gcm93OworICAgICAgICAgICAg
cG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5n
dGgsIE1hdGgubWF4KDAsIGNvbHVtbikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoY29sdW1uIDwgMCkKKyAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOworICAgICAgICAgICAg
CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfTsKKyAgICAKK30pLmNhbGwoQW5jaG9yLnByb3Rv
dHlwZSk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIv
ZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVx
dWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBNQVhfTElORV9M
RU5HVEggPSA1MDAwOworCit2YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGZ1bmN0aW9uKHRva2Vu
aXplciwgZWRpdG9yKSB7CisgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CisgICAgdGhpcy5saW5l
cyA9IFtdOworICAgIHRoaXMuc3RhdGVzID0gW107CisgICAgdGhpcy5jdXJyZW50TGluZSA9IDA7
CisgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7CisKKyAgICB2YXIgc2VsZiA9IHRoaXM7
CisKKyAgICB0aGlzLiR3b3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFzZWxmLnJ1
bm5pbmcpIHsgcmV0dXJuOyB9CisKKyAgICAgICAgdmFyIHdvcmtlclN0YXJ0ID0gbmV3IERhdGUo
KTsKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHNlbGYuY3VycmVudExpbmU7CisgICAgICAgIHZh
ciBkb2MgPSBzZWxmLmRvYzsKKworICAgICAgICB2YXIgcHJvY2Vzc2VkTGluZXMgPSAwOworCisg
ICAgICAgIHZhciBsZW4gPSBkb2MuZ2V0TGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChzZWxmLmN1
cnJlbnRMaW5lIDwgbGVuKSB7CisgICAgICAgICAgICBzZWxmLiR0b2tlbml6ZVJvdyhzZWxmLmN1
cnJlbnRMaW5lKTsKKyAgICAgICAgICAgIHdoaWxlIChzZWxmLmxpbmVzW3NlbGYuY3VycmVudExp
bmVdKQorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudExpbmUrKzsKKyAgICAgICAgICAgIHBy
b2Nlc3NlZExpbmVzICsrOworICAgICAgICAgICAgaWYgKChwcm9jZXNzZWRMaW5lcyAlIDUgPT0g
MCkgJiYgKG5ldyBEYXRlKCkgLSB3b3JrZXJTdGFydCkgPiAyMCkgeworICAgICAgICAgICAgICAg
IHNlbGYuZmlyZVVwZGF0ZUV2ZW50KHN0YXJ0TGluZSwgc2VsZi5jdXJyZW50TGluZS0xKTsKKyAg
ICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHNlbGYuJHdvcmtlciwgMjAp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHNlbGYucnVubmluZyA9IGZhbHNlOworCisgICAgICAgIHNlbGYuZmlyZVVwZGF0ZUV2
ZW50KHN0YXJ0TGluZSwgbGVuIC0gMSk7CisgICAgfTsKK307CisKKyhmdW5jdGlvbigpeworCisg
ICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0VG9rZW5p
emVyID0gZnVuY3Rpb24odG9rZW5pemVyKSB7CisgICAgICAgIHRoaXMudG9rZW5pemVyID0gdG9r
ZW5pemVyOworICAgICAgICB0aGlzLmxpbmVzID0gW107CisgICAgICAgIHRoaXMuc3RhdGVzID0g
W107CisKKyAgICAgICAgdGhpcy5zdGFydCgwKTsKKyAgICB9OworICAgIHRoaXMuc2V0RG9jdW1l
bnQgPSBmdW5jdGlvbihkb2MpIHsKKyAgICAgICAgdGhpcy5kb2MgPSBkb2M7CisgICAgICAgIHRo
aXMubGluZXMgPSBbXTsKKyAgICAgICAgdGhpcy5zdGF0ZXMgPSBbXTsKKworICAgICAgICB0aGlz
LnN0b3AoKTsKKyAgICB9OworICAgIHRoaXMuZmlyZVVwZGF0ZUV2ZW50ID0gZnVuY3Rpb24oZmly
c3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICBmaXJz
dDogZmlyc3RSb3csCisgICAgICAgICAgICBsYXN0OiBsYXN0Um93CisgICAgICAgIH07CisgICAg
ICAgIHRoaXMuX2VtaXQoInVwZGF0ZSIsIHtkYXRhOiBkYXRhfSk7CisgICAgfTsKKyAgICB0aGlz
LnN0YXJ0ID0gZnVuY3Rpb24oc3RhcnRSb3cpIHsKKyAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9
IE1hdGgubWluKHN0YXJ0Um93IHx8IDAsIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExl
bmd0aCgpKTsKKyAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhp
cy5saW5lcy5sZW5ndGgpOworICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50
TGluZSwgdGhpcy5zdGF0ZXMubGVuZ3RoKTsKKworICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAg
ICAgdGhpcy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7CisgICAgfTsK
KworICAgIHRoaXMuJHVwZGF0ZU9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKKyAgICAgICAg
dmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0
YXJ0LnJvdzsKKyAgICAgICAgdmFyIGxlbiA9IHJhbmdlLmVuZC5yb3cgLSBzdGFydFJvdzsKKwor
ICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLmxpbmVzW3N0YXJ0Um93
XSA9IG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0
IiB8fCBkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikgeworICAgICAgICAgICAgdGhpcy5s
aW5lcy5zcGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpOworICAgICAgICAgICAgdGhpcy5z
dGF0ZXMuc3BsaWNlKHN0YXJ0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CisgICAgICAgICAgICBhcmdz
LnVuc2hpZnQoc3RhcnRSb3csIDEpOworICAgICAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UuYXBw
bHkodGhpcy5saW5lcywgYXJncyk7CisgICAgICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UuYXBw
bHkodGhpcy5zdGF0ZXMsIGFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jdXJyZW50
TGluZSA9IE1hdGgubWluKHN0YXJ0Um93LCB0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLmRvYy5nZXRM
ZW5ndGgoKSk7CisKKyAgICAgICAgdGhpcy5zdG9wKCk7CisgICAgICAgIHRoaXMucnVubmluZyA9
IHNldFRpbWVvdXQodGhpcy4kd29ya2VyLCA3MDApOworICAgIH07CisgICAgdGhpcy5zdG9wID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpCisgICAgICAgICAgICBjbGVh
clRpbWVvdXQodGhpcy5ydW5uaW5nKTsKKyAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFRva2VucyA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1
cm4gdGhpcy5saW5lc1tyb3ddIHx8IHRoaXMuJHRva2VuaXplUm93KHJvdyk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFN0YXRlID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGlmICh0aGlzLmN1cnJl
bnRMaW5lID09IHJvdykKKyAgICAgICAgICAgIHRoaXMuJHRva2VuaXplUm93KHJvdyk7CisgICAg
ICAgIHJldHVybiB0aGlzLnN0YXRlc1tyb3ddIHx8ICJzdGFydCI7CisgICAgfTsKKworICAgIHRo
aXMuJHRva2VuaXplUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHZhciBsaW5lID0gdGhp
cy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb3cg
LSAxXTsKKworICAgICAgICBpZiAobGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHsKKyAg
ICAgICAgICAgIHZhciBvdmVyZmxvdyA9IHt2YWx1ZTogbGluZS5zdWJzdHIoTUFYX0xJTkVfTEVO
R1RIKSwgdHlwZTogInRleHQifTsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDAsIE1B
WF9MSU5FX0xFTkdUSCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRva2Vu
aXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgaWYgKG92ZXJmbG93KSB7
CisgICAgICAgICAgICBkYXRhLnRva2Vucy5wdXNoKG92ZXJmbG93KTsKKyAgICAgICAgICAgIGRh
dGEuc3RhdGUgPSAic3RhcnQiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhdGVz
W3Jvd10gKyAiIiAhPT0gZGF0YS5zdGF0ZSArICIiKSB7CisgICAgICAgICAgICB0aGlzLnN0YXRl
c1tyb3ddID0gZGF0YS5zdGF0ZTsKKyAgICAgICAgICAgIHRoaXMubGluZXNbcm93ICsgMV0gPSBu
dWxsOworICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudExpbmUgPiByb3cgKyAxKQorICAgICAg
ICAgICAgICAgIHRoaXMuY3VycmVudExpbmUgPSByb3cgKyAxOworICAgICAgICB9IGVsc2UgaWYg
KHRoaXMuY3VycmVudExpbmUgPT0gcm93KSB7CisgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5l
ID0gcm93ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmxpbmVzW3Jvd10g
PSBkYXRhLnRva2VuczsKKyAgICB9OworCit9KS5jYWxsKEJhY2tncm91bmRUb2tlbml6ZXIucHJv
dG90eXBlKTsKKworZXhwb3J0cy5CYWNrZ3JvdW5kVG9rZW5pemVyID0gQmFja2dyb3VuZFRva2Vu
aXplcjsKK30pOworCithY2UuZGVmaW5lKCdhY2Uvc2VhcmNoX2hpZ2hsaWdodCcsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvb29wJywg
J2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xp
Yi9vb3AiKTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIFNl
YXJjaEhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlZ0V4cCwgY2xhenosIHR5cGUpIHsKKyAgICB0aGlz
LnNldFJlZ2V4cChyZWdFeHApOworICAgIHRoaXMuY2xhenogPSBjbGF6ejsKKyAgICB0aGlzLnR5
cGUgPSB0eXBlIHx8ICJ0ZXh0IjsKK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLk1BWF9S
QU5HRVMgPSA1MDA7CisgICAgCisgICAgdGhpcy5zZXRSZWdleHAgPSBmdW5jdGlvbihyZWdFeHAp
IHsKKyAgICAgICAgaWYgKHRoaXMucmVnRXhwKyIiID09IHJlZ0V4cCsiIikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdGhpcy5yZWdFeHAgPSByZWdFeHA7CisgICAgICAgIHRoaXMuY2Fj
aGUgPSBbXTsKKyAgICB9OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihodG1sLCBtYXJr
ZXJMYXllciwgc2Vzc2lvbiwgY29uZmlnKSB7CisgICAgICAgIGlmICghdGhpcy5yZWdFeHApCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBzdGFydCA9IGNvbmZpZy5maXJzdFJvdywg
ZW5kID0gY29uZmlnLmxhc3RSb3c7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9
IGVuZDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5jYWNoZVtpXTsKKyAg
ICAgICAgICAgIGlmIChyYW5nZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJhbmdlcyA9
IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKHNlc3Npb24uZ2V0TGluZShpKSwgdGhpcy5yZWdFeHApOwor
ICAgICAgICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID4gdGhpcy5NQVhfUkFOR0VTKQorICAg
ICAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMuc2xpY2UoMCwgdGhpcy5NQVhfUkFOR0VT
KTsKKyAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKG1hdGNoKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBp
LCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHRoaXMuY2FjaGVbaV0gPSByYW5nZXMubGVuZ3RoID8gcmFuZ2VzIDogIiI7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSByYW5nZXMubGVuZ3Ro
OyBqIC0tOyApIHsKKyAgICAgICAgICAgICAgICBtYXJrZXJMYXllci5kcmF3U2luZ2xlTGluZU1h
cmtlcigKKyAgICAgICAgICAgICAgICAgICAgaHRtbCwgcmFuZ2VzW2pdLnRvU2NyZWVuUmFuZ2Uo
c2Vzc2lvbiksIHRoaXMuY2xhenosIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwg
dGhpcy50eXBlCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK30pLmNhbGwoU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZSk7CisKK2V4cG9ydHMu
U2VhcmNoSGlnaGxpZ2h0ID0gU2VhcmNoSGlnaGxpZ2h0OworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9lZGl0X3Nlc3Npb24vZm9sZGluZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL3JhbmdlJywgJ2FjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lJywgJ2FjZS9lZGl0X3Nl
c3Npb24vZm9sZCcsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5n
ZTsKK3ZhciBGb2xkTGluZSA9IHJlcXVpcmUoIi4vZm9sZF9saW5lIikuRm9sZExpbmU7Cit2YXIg
Rm9sZCA9IHJlcXVpcmUoIi4vZm9sZCIpLkZvbGQ7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVp
cmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKKworZnVuY3Rpb24gRm9sZGlu
ZygpIHsKKyAgICB0aGlzLmdldEZvbGRBdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBzaWRlKSB7
CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUocm93KTsKKyAgICAgICAg
aWYgKCFmb2xkTGluZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBm
b2xkcyA9IGZvbGRMaW5lLmZvbGRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZCA9IGZvbGRzW2ldOworICAgICAg
ICAgICAgaWYgKGZvbGQucmFuZ2UuY29udGFpbnMocm93LCBjb2x1bW4pKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNpZGUgPT0gMSAmJiBmb2xkLnJhbmdlLmlzRW5kKHJvdywgY29sdW1uKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHNpZGUgPT0gLTEgJiYgZm9sZC5yYW5nZS5pc1N0YXJ0KHJvdywgY29sdW1uKSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZvbGQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHRo
aXMuZ2V0Rm9sZHNJblJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmFuZ2UgPSBy
YW5nZS5jbG9uZSgpOworICAgICAgICB2YXIgc3RhcnQgPSByYW5nZS5zdGFydDsKKyAgICAgICAg
dmFyIGVuZCA9IHJhbmdlLmVuZDsKKyAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGRE
YXRhOworICAgICAgICB2YXIgZm91bmRGb2xkcyA9IFtdOworCisgICAgICAgIHN0YXJ0LmNvbHVt
biArPSAxOworICAgICAgICBlbmQuY29sdW1uIC09IDE7CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBmb2xkTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjbXAgPSBm
b2xkTGluZXNbaV0ucmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmIChj
bXAgPT0gMikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoY21wID09IC0yKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lc1tpXS5mb2xk
czsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sZHMubGVuZ3RoOyBqKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IGZvbGRzW2pdOworICAgICAgICAgICAgICAgIGNt
cCA9IGZvbGQucmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y21wID09IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY21wID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSA0Mikgewor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZm91bmRGb2xkcy5wdXNoKGZvbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmb3VuZEZvbGRzOworICAgIH07CisgICAgdGhpcy5nZXRBbGxGb2xkcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZm9sZHMgPSBbXTsKKyAgICAgICAgdmFyIGZvbGRM
aW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gYWRkRm9s
ZChmb2xkKSB7CisgICAgICAgICAgICBmb2xkcy5wdXNoKGZvbGQpOworICAgICAgICAgICAgaWYg
KCFmb2xkLnN1YkZvbGRzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZC5zdWJGb2xkcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgICAgICAgICBhZGRGb2xkKGZvbGQuc3ViRm9sZHNbaV0pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5n
dGg7IGkrKykKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sZExpbmVzW2ldLmZv
bGRzLmxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGFkZEZvbGQoZm9sZExpbmVzW2ldLmZv
bGRzW2pdKTsKKworICAgICAgICByZXR1cm4gZm9sZHM7CisgICAgfTsKKyAgICB0aGlzLmdldEZv
bGRTdHJpbmdBdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCB0cmltLCBmb2xkTGluZSkgeworICAg
ICAgICBmb2xkTGluZSA9IGZvbGRMaW5lIHx8IHRoaXMuZ2V0Rm9sZExpbmUocm93KTsKKyAgICAg
ICAgaWYgKCFmb2xkTGluZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZh
ciBsYXN0Rm9sZCA9IHsKKyAgICAgICAgICAgIGVuZDogeyBjb2x1bW46IDAgfQorICAgICAgICB9
OworICAgICAgICB2YXIgc3RyLCBmb2xkOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZv
bGRMaW5lLmZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb2xkID0gZm9sZExpbmUu
Zm9sZHNbaV07CisgICAgICAgICAgICB2YXIgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5kKHJv
dywgY29sdW1uKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICBzdHIgPSB0aGlzCisgICAgICAgICAgICAgICAgICAgIC5nZXRMaW5lKGZvbGQuc3RhcnQucm93
KQorICAgICAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKGxhc3RGb2xkLmVuZC5jb2x1bW4sIGZv
bGQuc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGNtcCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdEZvbGQgPSBmb2xkOworICAg
ICAgICB9CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRMaW5l
KGZvbGQuc3RhcnQucm93KS5zdWJzdHJpbmcobGFzdEZvbGQuZW5kLmNvbHVtbik7CisKKyAgICAg
ICAgaWYgKHRyaW0gPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBj
b2x1bW4gLSBsYXN0Rm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgZWxzZSBpZiAodHJpbSA9PSAx
KQorICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoY29sdW1uIC0gbGFzdEZvbGQuZW5k
LmNvbHVtbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgfTsK
KworICAgIHRoaXMuZ2V0Rm9sZExpbmUgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUp
IHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIHZhciBp
ID0gMDsKKyAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUpCisgICAgICAgICAgICBpID0gZm9sZERh
dGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTsKKyAgICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAg
ICAgICBpID0gMDsKKyAgICAgICAgZm9yIChpOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRhW2ldOworICAgICAgICAgICAgaWYg
KGZvbGRMaW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cgJiYgZm9sZExpbmUuZW5kLnJvdyA+PSBkb2NS
b3cpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZExpbmU7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPiBkb2NSb3cpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworICAgIHRoaXMuZ2V0TmV4dEZvbGRMaW5lID0gZnVuY3Rpb24oZG9jUm93LCBzdGFy
dEZvbGRMaW5lKSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOworICAg
ICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChzdGFydEZvbGRMaW5lKQorICAgICAgICAgICAg
aSA9IGZvbGREYXRhLmluZGV4T2Yoc3RhcnRGb2xkTGluZSk7CisgICAgICAgIGlmIChpID09IC0x
KQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIGZvciAoaTsgaSA8IGZvbGREYXRhLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsKKyAgICAg
ICAgICAgIGlmIChmb2xkTGluZS5lbmQucm93ID49IGRvY1JvdykgeworICAgICAgICAgICAgICAg
IHJldHVybiBmb2xkTGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkZWRSb3dDb3VudCA9IGZ1bmN0aW9u
KGZpcnN0LCBsYXN0KSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhLCBy
b3dDb3VudCA9IGxhc3QtZmlyc3QrMTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xk
RGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFb
aV0sCisgICAgICAgICAgICAgICAgZW5kID0gZm9sZExpbmUuZW5kLnJvdywKKyAgICAgICAgICAg
ICAgICBzdGFydCA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGlmIChlbmQgPj0g
bGFzdCkgeworICAgICAgICAgICAgICAgIGlmKHN0YXJ0IDwgbGFzdCkgeworICAgICAgICAgICAg
ICAgICAgICBpZihzdGFydCA+PSBmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd0Nv
dW50IC09IGxhc3Qtc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJvd0NvdW50ID0gMDsvL2luIG9uZSBmb2xkCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmKGVuZCA+PSBm
aXJzdCl7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGZpcnN0KSAvL2ZvbGQgaW5zaWRl
IHJhbmdlCisgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09ICBlbmQtc3RhcnQ7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSAgZW5kLWZp
cnN0KzE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvd0NvdW50
OworICAgIH07CisKKyAgICB0aGlzLiRhZGRGb2xkTGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lKSB7
CisgICAgICAgIHRoaXMuJGZvbGREYXRhLnB1c2goZm9sZExpbmUpOworICAgICAgICB0aGlzLiRm
b2xkRGF0YS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnN0YXJ0
LnJvdyAtIGIuc3RhcnQucm93OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGZvbGRMaW5l
OworICAgIH07CisgICAgdGhpcy5hZGRGb2xkID0gZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJhbmdl
KSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICB2YXIg
YWRkZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGZvbGQ7CisgICAgICAgIAorICAgICAgICBpZiAo
cGxhY2Vob2xkZXIgaW5zdGFuY2VvZiBGb2xkKQorICAgICAgICAgICAgZm9sZCA9IHBsYWNlaG9s
ZGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb2xkID0gbmV3IEZvbGQocmFuZ2UsIHBs
YWNlaG9sZGVyKTsKKworICAgICAgICB0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50KGZvbGQucmFu
Z2UpOworCisgICAgICAgIHZhciBzdGFydFJvdyA9IGZvbGQuc3RhcnQucm93OworICAgICAgICB2
YXIgc3RhcnRDb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgdmFyIGVuZFJvdyA9
IGZvbGQuZW5kLnJvdzsKKyAgICAgICAgdmFyIGVuZENvbHVtbiA9IGZvbGQuZW5kLmNvbHVtbjsK
KyAgICAgICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdyAmJiBlbmRDb2x1bW4gLSBzdGFydENvbHVt
biA8IDIpCisgICAgICAgICAgICB0aHJvdyAiVGhlIHJhbmdlIGhhcyB0byBiZSBhdCBsZWFzdCAy
IGNoYXJhY3RlcnMgd2lkdGgiOworCisgICAgICAgIHZhciBzdGFydEZvbGQgPSB0aGlzLmdldEZv
bGRBdChzdGFydFJvdywgc3RhcnRDb2x1bW4sIDEpOworICAgICAgICB2YXIgZW5kRm9sZCA9IHRo
aXMuZ2V0Rm9sZEF0KGVuZFJvdywgZW5kQ29sdW1uLCAtMSk7CisgICAgICAgIGlmIChzdGFydEZv
bGQgJiYgZW5kRm9sZCA9PSBzdGFydEZvbGQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnRGb2xk
LmFkZFN1YkZvbGQoZm9sZCk7CisKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKHN0YXJ0Rm9s
ZCAmJiAhc3RhcnRGb2xkLnJhbmdlLmlzU3RhcnQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSkKKyAg
ICAgICAgICAgIHx8IChlbmRGb2xkICYmICFlbmRGb2xkLnJhbmdlLmlzRW5kKGVuZFJvdywgZW5k
Q29sdW1uKSkKKyAgICAgICAgKSB7CisgICAgICAgICAgICB0aHJvdyAiQSBmb2xkIGNhbid0IGlu
dGVyc2VjdCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9sZC5yYW5nZSArIHN0YXJ0Rm9sZC5y
YW5nZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5n
ZShmb2xkLnJhbmdlKTsKKyAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlRm9sZHMoZm9sZHMpOworICAgICAgICAgICAgZm9sZC5zdWJGb2xkcyA9
IGZvbGRzOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0
YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07
CisgICAgICAgICAgICBpZiAoZW5kUm93ID09IGZvbGRMaW5lLnN0YXJ0LnJvdykgeworICAgICAg
ICAgICAgICAgIGZvbGRMaW5lLmFkZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgYWRkZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoc3RhcnRSb3cgPT0gZm9sZExpbmUuZW5kLnJvdykgeworICAgICAgICAgICAg
ICAgIGZvbGRMaW5lLmFkZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGlmICghZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBmb2xkTGluZU5leHQgPSBmb2xkRGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChmb2xkTGluZU5leHQgJiYgZm9sZExpbmVOZXh0LnN0YXJ0LnJvdyA9PSBlbmRSb3cp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLm1lcmdlKGZvbGRMaW5lTmV4dCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGVuZFJvdyA8PSBmb2xkTGluZS5zdGFydC5yb3cpIHsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghYWRkZWQpCisgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuJGFkZEZvbGRMaW5lKG5l
dyBGb2xkTGluZSh0aGlzLiRmb2xkRGF0YSwgZm9sZCkpOworCisgICAgICAgIGlmICh0aGlzLiR1
c2VXcmFwTW9kZSkKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZvbGRMaW5lLnN0
YXJ0LnJvdywgZm9sZExpbmUuc3RhcnQucm93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5z
dGFydC5yb3cpOworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZUZvbGQiLCB7IGRhdGE6IGZvbGQgfSk7CisKKyAgICAgICAgcmV0dXJuIGZv
bGQ7CisgICAgfTsKKworICAgIHRoaXMuYWRkRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgeworICAg
ICAgICBmb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRk
Rm9sZChmb2xkKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3Zl
Rm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZC5mb2xk
TGluZTsKKyAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAg
ICB2YXIgZW5kUm93ID0gZm9sZExpbmUuZW5kLnJvdzsKKworICAgICAgICB2YXIgZm9sZExpbmVz
ID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzOwor
ICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIGZvbGRMaW5lcy5z
cGxpY2UoZm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUpLCAxKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc0VuZChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNv
bHVtbikpIHsKKyAgICAgICAgICAgIGZvbGRzLnBvcCgpOworICAgICAgICAgICAgZm9sZExpbmUu
ZW5kLnJvdyA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdLmVuZC5yb3c7CisgICAgICAgICAgICBm
b2xkTGluZS5lbmQuY29sdW1uID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLmNvbHVtbjsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc1N0YXJ0KGZvbGQu
c3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbikpIHsKKyAgICAgICAgICAgIGZvbGRzLnNoaWZ0
KCk7CisgICAgICAgICAgICBmb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7
CisgICAgICAgICAgICBmb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1
bW47CisgICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZm9sZC5zYW1lUm93KSB7CisgICAgICAg
ICAgICBmb2xkcy5zcGxpY2UoZm9sZHMuaW5kZXhPZihmb2xkKSwgMSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBmb2xkTGluZS5zcGxp
dChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgZm9sZHMg
PSBuZXdGb2xkTGluZS5mb2xkczsKKyAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7CisgICAgICAg
ICAgICBuZXdGb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7CisgICAgICAg
ICAgICBuZXdGb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCisgICAgICAgICAgICB0
aGlzLiR1cGRhdGVXcmFwRGF0YShzdGFydFJvdywgZW5kUm93KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoc3RhcnRSb3csIGVuZFJvdyk7Cisg
ICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
Rm9sZCIsIHsgZGF0YTogZm9sZCB9KTsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVGb2xkcyA9
IGZ1bmN0aW9uKGZvbGRzKSB7CisgICAgICAgIHZhciBjbG9uZUZvbGRzID0gW107CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNs
b25lRm9sZHMucHVzaChmb2xkc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBjbG9uZUZvbGRz
LmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZv
bGQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOwor
ICAgIH07CisKKyAgICB0aGlzLmV4cGFuZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CisgICAgICAg
IHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKKyAgICAgICAgZm9sZC5zdWJGb2xkcy5mb3JFYWNoKGZ1
bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkKTsKKyAgICAgICAg
fSwgdGhpcyk7CisgICAgICAgIGZvbGQuc3ViRm9sZHMgPSBbXTsKKyAgICB9OworCisgICAgdGhp
cy5leHBhbmRGb2xkcyA9IGZ1bmN0aW9uKGZvbGRzKSB7CisgICAgICAgIGZvbGRzLmZvckVhY2go
ZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOworICAg
ICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgICAgdGhpcy51bmZvbGQgPSBmdW5jdGlvbihsb2Nh
dGlvbiwgZXhwYW5kSW5uZXIpIHsKKyAgICAgICAgdmFyIHJhbmdlLCBmb2xkczsKKyAgICAgICAg
aWYgKGxvY2F0aW9uID09IG51bGwpCisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgwLCAw
LCB0aGlzLmdldExlbmd0aCgpLCAwKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0aW9u
ID09ICJudW1iZXIiKQorICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UobG9jYXRpb24sIDAs
IGxvY2F0aW9uLCB0aGlzLmdldExpbmUobG9jYXRpb24pLmxlbmd0aCk7CisgICAgICAgIGVsc2Ug
aWYgKCJyb3ciIGluIGxvY2F0aW9uKQorICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9p
bnRzKGxvY2F0aW9uLCBsb2NhdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdl
ID0gbG9jYXRpb247CisKKyAgICAgICAgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5n
ZSk7CisgICAgICAgIGlmIChleHBhbmRJbm5lcikgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVG
b2xkcyhmb2xkcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoZm9sZHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkcyhmb2xkcyk7CisgICAg
ICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuaXNSb3dGb2xkZWQgPSBmdW5jdGlv
bihkb2NSb3csIHN0YXJ0Rm9sZFJvdykgeworICAgICAgICByZXR1cm4gISF0aGlzLmdldEZvbGRM
aW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRSb3dGb2xk
RW5kID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKKyAgICAgICAgdmFyIGZvbGRM
aW5lID0gdGhpcy5nZXRGb2xkTGluZShkb2NSb3csIHN0YXJ0Rm9sZFJvdyk7CisgICAgICAgIHJl
dHVybiBmb2xkTGluZSA/IGZvbGRMaW5lLmVuZC5yb3cgOiBkb2NSb3c7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUsIGVuZFJvdywgZW5k
Q29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHsKKyAgICAgICAgaWYgKHN0YXJ0Um93ID09
IG51bGwpIHsKKyAgICAgICAgICAgIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAg
ICAgICAgICAgc3RhcnRDb2x1bW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuZFJv
dyA9PSBudWxsKSB7CisgICAgICAgICAgICBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93OworICAg
ICAgICAgICAgZW5kQ29sdW1uID0gdGhpcy5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOworICAgICAg
ICB9CisgICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKKyAgICAgICAgdmFyIHRleHRMaW5lID0g
IiI7CisKKyAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBj
b2x1bW4sIGxhc3RDb2x1bW4pIHsKKyAgICAgICAgICAgIGlmIChyb3cgPCBzdGFydFJvdykgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocm93ID09IHN0
YXJ0Um93KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbGFzdENvbHVtbiA9IE1hdGgubWF4KHN0YXJ0Q29sdW1uLCBsYXN0Q29sdW1uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgdGV4dExpbmUgKz0gcGxhY2Vob2xkZXI7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IGRvYy5nZXRMaW5lKHJvdykuc3Vic3RyaW5n
KGxhc3RDb2x1bW4sIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0aGlz
KSwgZW5kUm93LCBlbmRDb2x1bW4pOworICAgICAgICByZXR1cm4gdGV4dExpbmU7CisgICAgfTsK
KworICAgIHRoaXMuZ2V0RGlzcGxheUxpbmUgPSBmdW5jdGlvbihyb3csIGVuZENvbHVtbiwgc3Rh
cnRSb3csIHN0YXJ0Q29sdW1uKSB7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9s
ZExpbmUocm93KTsKKworICAgICAgICBpZiAoIWZvbGRMaW5lKSB7CisgICAgICAgICAgICB2YXIg
bGluZTsKKyAgICAgICAgICAgIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAg
ICAgICByZXR1cm4gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4gfHwgMCwgZW5kQ29sdW1uIHx8
IGxpbmUubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmdldEZvbGREaXNwbGF5TGluZSgKKyAgICAgICAgICAgICAgICBmb2xkTGluZSwgcm93LCBlbmRD
b2x1bW4sIHN0YXJ0Um93LCBzdGFydENvbHVtbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kY2xvbmVGb2xkRGF0YSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZmQgPSBbXTsK
KyAgICAgICAgZmQgPSB0aGlzLiRmb2xkRGF0YS5tYXAoZnVuY3Rpb24oZm9sZExpbmUpIHsKKyAg
ICAgICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzLm1hcChmdW5jdGlvbihmb2xkKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbGQuY2xvbmUoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkTGluZShmZCwgZm9sZHMpOworICAgICAgICB9KTsK
KworICAgICAgICByZXR1cm4gZmQ7CisgICAgfTsKKworICAgIHRoaXMudG9nZ2xlRm9sZCA9IGZ1
bmN0aW9uKHRyeVRvVW5mb2xkKSB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVj
dGlvbjsKKyAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAg
IHZhciBmb2xkOworICAgICAgICB2YXIgYnJhY2tldFBvczsKKworICAgICAgICBpZiAocmFuZ2Uu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CisgICAg
ICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7
CisKKyAgICAgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRG
b2xkKGZvbGQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGJyYWNrZXRQb3MgPSB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoY3Vy
c29yKSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlUG9pbnQoYnJhY2tldFBv
cykgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQgPSBicmFja2V0UG9zOwor
ICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvczsKKyAgICAgICAgICAgICAgICAgICAgcmFu
Z2Uuc3RhcnQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4t
LTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3cs
IGNvbHVtbjogY3Vyc29yLmNvbHVtbiArIDF9KSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5n
ZS5jb21wYXJlUG9pbnQoYnJhY2tldFBvcykgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmFu
Z2UuZW5kID0gYnJhY2tldFBvczsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvczsKKworICAgICAgICAgICAgICAgIHJhbmdl
LnN0YXJ0LmNvbHVtbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UoY3Vyc29yLnJvdywg
Y3Vyc29yLmNvbHVtbikgfHwgcmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7Cisg
ICAgICAgICAgICBpZiAodHJ5VG9VbmZvbGQgJiYgZm9sZHMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5leHBhbmRGb2xkcyhmb2xkcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgaWYgKGZvbGRzLmxlbmd0aCA9PSAxICkg
eworICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1swXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghZm9sZCkKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZv
bGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisKKyAgICAgICAgaWYg
KGZvbGQgJiYgZm9sZC5yYW5nZS50b1N0cmluZygpID09IHJhbmdlLnRvU3RyaW5nKCkpIHsKKyAg
ICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBwbGFjZWhvbGRlciA9ICIuLi4iOworICAgICAgICBpZiAo
IXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5n
ZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgaWYocGxhY2Vob2xkZXIubGVuZ3RoIDwg
NCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBwbGFjZWhvbGRlciA9IHBs
YWNlaG9sZGVyLnRyaW0oKS5zdWJzdHJpbmcoMCwgMikgKyAiLi4iOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5hZGRGb2xkKHBsYWNlaG9sZGVyLCByYW5nZSk7CisgICAgfTsKKworICAgIHRo
aXMuZ2V0Q29tbWVudEZvbGRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBkaXIpIHsKKyAg
ICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcm93LCBjb2x1bW4p
OworICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAg
ICAgaWYgKHRva2VuICYmIC9eY29tbWVudHxzdHJpbmcvLnRlc3QodG9rZW4udHlwZSkpIHsKKyAg
ICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZSgpOworICAgICAgICAgICAgdmFyIHJlID0g
bmV3IFJlZ0V4cCh0b2tlbi50eXBlLnJlcGxhY2UoL1wuLiovLCAiXFwuIikpOworICAgICAgICAg
ICAgaWYgKGRpciAhPSAxKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
ICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgICAgIH0g
d2hpbGUodG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7CisgICAgICAgICAgICAgICAgaXRl
cmF0b3Iuc3RlcEZvcndhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7Cisg
ICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5D
b2x1bW4oKSArIDI7CisKKyAgICAgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Io
dGhpcywgcm93LCBjb2x1bW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZGlyICE9
IC0xKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSh0b2tlbiAm
JiByZS50ZXN0KHRva2VuLnR5cGUpKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9y
LnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdG9r
ZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKworICAgICAgICAgICAgcmFuZ2UuZW5k
LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOworICAgICAgICAgICAgcmFuZ2Uu
ZW5kLmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFs
dWUubGVuZ3RoIC0gMjsKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0aGlzLmZvbGRBbGwgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93KSB7Cisg
ICAgICAgIHZhciBmb2xkV2lkZ2V0cyA9IHRoaXMuZm9sZFdpZGdldHM7CisgICAgICAgIGVuZFJv
dyA9IGVuZFJvdyB8fCB0aGlzLmdldExlbmd0aCgpOworICAgICAgICBmb3IgKHZhciByb3cgPSBz
dGFydFJvdyB8fCAwOyByb3cgPCBlbmRSb3c7IHJvdysrKSB7CisgICAgICAgICAgICBpZiAoZm9s
ZFdpZGdldHNbcm93XSA9PSBudWxsKQorICAgICAgICAgICAgICAgIGZvbGRXaWRnZXRzW3Jvd10g
PSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTsKKyAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1ty
b3ddICE9ICJzdGFydCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdyk7CisgICAgICAgICAgICBp
ZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA8PSBlbmRSb3cpIHRyeSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHt9
CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHRoaXMuJGZvbGRTdHlsZXMgPSB7CisgICAg
ICAgICJtYW51YWwiOiAxLAorICAgICAgICAibWFya2JlZ2luIjogMSwKKyAgICAgICAgIm1hcmti
ZWdpbmVuZCI6IDEKKyAgICB9OworICAgIHRoaXMuJGZvbGRTdHlsZSA9ICJtYXJrYmVnaW4iOwor
ICAgIHRoaXMuc2V0Rm9sZFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgaWYgKCF0
aGlzLiRmb2xkU3R5bGVzW3N0eWxlXSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52
YWxpZCBmb2xkIHN0eWxlOiAiICsgc3R5bGUgKyAiWyIgKyBPYmplY3Qua2V5cyh0aGlzLiRmb2xk
U3R5bGVzKS5qb2luKCIsICIpICsgIl0iKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLiRm
b2xkU3R5bGUgPT0gc3R5bGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4k
Zm9sZFN0eWxlID0gc3R5bGU7CisgICAgICAgIAorICAgICAgICBpZiAoc3R5bGUgPT0gIm1hbnVh
bCIpCisgICAgICAgICAgICB0aGlzLnVuZm9sZCgpOworICAgICAgICB2YXIgbW9kZSA9IHRoaXMu
JGZvbGRNb2RlOworICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG51bGwpOworICAgICAgICB0aGlz
LiRzZXRGb2xkaW5nKG1vZGUpOworICAgIH07CisgICAgdGhpcy4kc2V0Rm9sZGluZyA9IGZ1bmN0
aW9uKGZvbGRNb2RlKSB7CisgICAgICAgIGlmICh0aGlzLiRmb2xkTW9kZSA9PSBmb2xkTW9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICB0aGlzLiRmb2xkTW9k
ZSA9IGZvbGRNb2RlOworICAgICAgICAKKyAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY2hh
bmdlJywgdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VBbm5vdGF0aW9uIik7CisgICAgICAgIAorICAgICAgICBpZiAoIWZvbGRNb2RlIHx8IHRoaXMu
JGZvbGRTdHlsZSA9PSAibWFudWFsIikgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9
IG51bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHRoaXMuZm9sZFdpZGdldHMgPSBbXTsKKyAgICAgICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZm9s
ZE1vZGUuZ2V0Rm9sZFdpZGdldC5iaW5kKGZvbGRNb2RlLCB0aGlzLCB0aGlzLiRmb2xkU3R5bGUp
OworICAgICAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZvbGRNb2RlLmdldEZvbGRXaWRn
ZXRSYW5nZS5iaW5kKGZvbGRNb2RlLCB0aGlzLCB0aGlzLiRmb2xkU3R5bGUpOworICAgICAgICAK
KyAgICAgICAgdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMgPSB0aGlzLnVwZGF0ZUZvbGRXaWRnZXRz
LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMub24oJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRX
aWRnZXRzKTsKKyAgICAgICAgCisgICAgfTsKKworICAgIHRoaXMub25Gb2xkV2lkZ2V0Q2xpY2sg
PSBmdW5jdGlvbihyb3csIGUpIHsKKyAgICAgICAgZSA9IGUuZG9tRXZlbnQ7CisgICAgICAgIHZh
ciB0eXBlID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7CisgICAgICAgIHZhciBsaW5lID0gdGhp
cy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBvbmx5U3ViZm9sZHMgPSBlLnNoaWZ0S2V5Owor
ICAgICAgICB2YXIgYWRkU3ViZm9sZHMgPSBvbmx5U3ViZm9sZHMgfHwgZS5jdHJsS2V5IHx8IGUu
YWx0S2V5IHx8IGUubWV0YUtleTsKKyAgICAgICAgdmFyIGZvbGQ7CisKKyAgICAgICAgaWYgKHR5
cGUgPT0gImVuZCIpCisgICAgICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQocm93LCAwLCAt
MSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3cs
IGxpbmUubGVuZ3RoLCAxKTsKKworICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgaWYg
KGFkZFN1YmZvbGRzKQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
LmdldEZvbGRXaWRnZXRSYW5nZShyb3cpOworICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAg
ICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkgeworICAgICAgICAgICAgICAgIGZvbGQgPSB0
aGlzLmdldEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgMSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZvbGQgJiYgcmFuZ2UuaXNFcXVhbChmb2xkLnJhbmdlKSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghb25seVN1YmZvbGRzKQorICAgICAgICAgICAgICAgIHRo
aXMuYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOworCisgICAgICAgICAgICBpZiAoYWRkU3ViZm9sZHMp
CisgICAgICAgICAgICAgICAgdGhpcy5mb2xkQWxsKHJhbmdlLnN0YXJ0LnJvdyArIDEsIHJhbmdl
LmVuZC5yb3cpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFkZFN1YmZvbGRz
KQorICAgICAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyb3cgKyAxLCB0aGlzLmdldExlbmd0aCgp
KTsKKyAgICAgICAgICAgIChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpLmNsYXNzTmFtZSArPSAi
IGFjZV9pbnZhbGlkIgorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnVwZGF0ZUZv
bGRXaWRnZXRzID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7Cisg
ICAgICAgIHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgZmlyc3RSb3cgPSBy
YW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93IC0gZmlyc3RS
b3c7CisKKyAgICAgICAgaWYgKGxlbiA9PT0gMCkgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lk
Z2V0c1tmaXJzdFJvd10gPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9
PSAicmVtb3ZlVGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAgICAg
ICAgICAgIHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlKGZpcnN0Um93LCBsZW4gKyAxLCBudWxsKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7
CisgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpOworICAgICAgICAgICAgdGhp
cy5mb2xkV2lkZ2V0cy5zcGxpY2UuYXBwbHkodGhpcy5mb2xkV2lkZ2V0cywgYXJncyk7CisgICAg
ICAgIH0KKyAgICB9OworCit9CisKK2V4cG9ydHMuRm9sZGluZyA9IEZvbGRpbmc7CisKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGluZScsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7
CitmdW5jdGlvbiBGb2xkTGluZShmb2xkRGF0YSwgZm9sZHMpIHsKKyAgICB0aGlzLmZvbGREYXRh
ID0gZm9sZERhdGE7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9sZHMpKSB7CisgICAgICAgIHRo
aXMuZm9sZHMgPSBmb2xkczsKKyAgICB9IGVsc2UgeworICAgICAgICBmb2xkcyA9IHRoaXMuZm9s
ZHMgPSBbIGZvbGRzIF07CisgICAgfQorCisgICAgdmFyIGxhc3QgPSBmb2xkc1tmb2xkcy5sZW5n
dGggLSAxXQorICAgIHRoaXMucmFuZ2UgPSBuZXcgUmFuZ2UoZm9sZHNbMF0uc3RhcnQucm93LCBm
b2xkc1swXS5zdGFydC5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LmVu
ZC5yb3csIGxhc3QuZW5kLmNvbHVtbik7CisgICAgdGhpcy5zdGFydCA9IHRoaXMucmFuZ2Uuc3Rh
cnQ7CisgICAgdGhpcy5lbmQgICA9IHRoaXMucmFuZ2UuZW5kOworCisgICAgdGhpcy5mb2xkcy5m
b3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzKTsK
KyAgICB9LCB0aGlzKTsKK30KKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2hpZnRSb3cgPSBm
dW5jdGlvbihzaGlmdCkgeworICAgICAgICB0aGlzLnN0YXJ0LnJvdyArPSBzaGlmdDsKKyAgICAg
ICAgdGhpcy5lbmQucm93ICs9IHNoaWZ0OworICAgICAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVu
Y3Rpb24oZm9sZCkgeworICAgICAgICAgICAgZm9sZC5zdGFydC5yb3cgKz0gc2hpZnQ7CisgICAg
ICAgICAgICBmb2xkLmVuZC5yb3cgKz0gc2hpZnQ7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHRoaXMuYWRkRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgaWYgKGZvbGQuc2FtZVJv
dykgeworICAgICAgICAgICAgaWYgKGZvbGQuc3RhcnQucm93IDwgdGhpcy5zdGFydFJvdyB8fCBm
b2xkLmVuZFJvdyA+IHRoaXMuZW5kUm93KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgIkNhbid0
IGFkZCBhIGZvbGQgdG8gdGhpcyBGb2xkTGluZSBhcyBpdCBoYXMgbm8gY29ubmVjdGlvbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmZvbGRzLnB1c2goZm9sZCk7CisgICAgICAg
ICAgICB0aGlzLmZvbGRzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgIHJl
dHVybiAtYS5yYW5nZS5jb21wYXJlRW5kKGIuc3RhcnQucm93LCBiLnN0YXJ0LmNvbHVtbik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVFbmQoZm9s
ZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKSA+IDApIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmVuZC5yb3cgPSBmb2xkLmVuZC5yb3c7CisgICAgICAgICAgICAgICAgdGhpcy5lbmQuY29s
dW1uID0gIGZvbGQuZW5kLmNvbHVtbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5n
ZS5jb21wYXJlU3RhcnQoZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pIDwgMCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAg
ICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSB0aGlzLmVuZC5yb3cpIHsK
KyAgICAgICAgICAgIHRoaXMuZm9sZHMucHVzaChmb2xkKTsKKyAgICAgICAgICAgIHRoaXMuZW5k
LnJvdyA9IGZvbGQuZW5kLnJvdzsKKyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGZvbGQu
ZW5kLmNvbHVtbjsKKyAgICAgICAgfSBlbHNlIGlmIChmb2xkLmVuZC5yb3cgPT0gdGhpcy5zdGFy
dC5yb3cpIHsKKyAgICAgICAgICAgIHRoaXMuZm9sZHMudW5zaGlmdChmb2xkKTsKKyAgICAgICAg
ICAgIHRoaXMuc3RhcnQucm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICB0aGlzLnN0
YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGhyb3cgIlRyeWluZyB0byBhZGQgZm9sZCB0byBGb2xkUm93IHRoYXQgZG9lc24ndCBo
YXZlIGEgbWF0Y2hpbmcgcm93IjsKKyAgICAgICAgfQorICAgICAgICBmb2xkLmZvbGRMaW5lID0g
dGhpczsKKyAgICB9CisKKyAgICB0aGlzLmNvbnRhaW5zUm93ID0gZnVuY3Rpb24ocm93KSB7Cisg
ICAgICAgIHJldHVybiByb3cgPj0gdGhpcy5zdGFydC5yb3cgJiYgcm93IDw9IHRoaXMuZW5kLnJv
dzsKKyAgICB9CisKKyAgICB0aGlzLndhbGsgPSBmdW5jdGlvbihjYWxsYmFjaywgZW5kUm93LCBl
bmRDb2x1bW4pIHsKKyAgICAgICAgdmFyIGxhc3RFbmQgPSAwLAorICAgICAgICAgICAgZm9sZHMg
PSB0aGlzLmZvbGRzLAorICAgICAgICAgICAgZm9sZCwKKyAgICAgICAgICAgIGNvbXAsIHN0b3As
IGlzTmV3Um93ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZW5kUm93ID09IG51bGwpIHsKKyAgICAg
ICAgICAgIGVuZFJvdyA9IHRoaXMuZW5kLnJvdzsKKyAgICAgICAgICAgIGVuZENvbHVtbiA9IHRo
aXMuZW5kLmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Zm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvbGQgPSBmb2xkc1tpXTsKKworICAg
ICAgICAgICAgY29tcCA9IGZvbGQucmFuZ2UuY29tcGFyZVN0YXJ0KGVuZFJvdywgZW5kQ29sdW1u
KTsKKyAgICAgICAgICAgIGlmIChjb21wID09IC0xKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobnVsbCwgZW5kUm93LCBlbmRDb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0b3AgPSBjYWxs
YmFjayhudWxsLCBmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4sIGxhc3RFbmQsIGlz
TmV3Um93KTsKKyAgICAgICAgICAgIHN0b3AgPSAhc3RvcCAmJiBjYWxsYmFjayhmb2xkLnBsYWNl
aG9sZGVyLCBmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4sIGxhc3RFbmQpOworICAg
ICAgICAgICAgaWYgKHN0b3AgfHwgY29tcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNOZXdSb3cgPSAhZm9sZC5zYW1lUm93Owor
ICAgICAgICAgICAgbGFzdEVuZCA9IGZvbGQuZW5kLmNvbHVtbjsKKyAgICAgICAgfQorICAgICAg
ICBjYWxsYmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpOwor
ICAgIH0KKworICAgIHRoaXMuZ2V0TmV4dEZvbGRUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7
CisgICAgICAgIHZhciBmb2xkLCBjbXA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5mb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9sZCA9IHRoaXMuZm9sZHNbaV07
CisgICAgICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pOwor
ICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsCisgICAgICAgICAgICAgICAgICAgIGtpbmQ6
ICJhZnRlciIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAg
PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGZv
bGQ6IGZvbGQsCisgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJpbnNpZGUiCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0KKworICAgIHRoaXMuYWRkUmVtb3ZlQ2hhcnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwg
bGVuKSB7CisgICAgICAgIHZhciByZXQgPSB0aGlzLmdldE5leHRGb2xkVG8ocm93LCBjb2x1bW4p
LAorICAgICAgICAgICAgZm9sZCwgZm9sZHM7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAg
ICAgIGZvbGQgPSByZXQuZm9sZDsKKyAgICAgICAgICAgIGlmIChyZXQua2luZCA9PSAiaW5zaWRl
IgorICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQuY29sdW1uICE9IGNvbHVtbgorICAgICAg
ICAgICAgICAgICYmIGZvbGQuc3RhcnQucm93ICE9IHJvdykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cocm93LCBjb2x1
bW4sIGZvbGQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSByb3cp
IHsKKyAgICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHM7CisgICAgICAgICAgICAgICAg
dmFyIGkgPSBmb2xkcy5pbmRleE9mKGZvbGQpOworICAgICAgICAgICAgICAgIGlmIChpID09IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gKz0gbGVuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGk7IGkgPCBmb2xkcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07CisgICAgICAgICAgICAg
ICAgICAgIGZvbGQuc3RhcnQuY29sdW1uICs9IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFmb2xkLnNhbWVSb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb2xkLmVuZC5jb2x1bW4gKz0g
bGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4g
Kz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdGhpcy5zcGxp
dCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBmb2xkID0gdGhpcy5nZXRO
ZXh0Rm9sZFRvKHJvdywgY29sdW1uKS5mb2xkLAorICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZv
bGRzOworICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLmZvbGREYXRhOworCisgICAgICAgIGlm
ICghZm9sZCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGkgPSBmb2xkcy5pbmRleE9mKGZvbGQpOworICAgICAgICB2YXIgZm9sZEJlZm9yZSA9IGZv
bGRzW2kgLSAxXTsKKyAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZEJlZm9yZS5lbmQucm93Owor
ICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBmb2xkQmVmb3JlLmVuZC5jb2x1bW47CisgICAgICAg
IGZvbGRzID0gZm9sZHMuc3BsaWNlKGksIGZvbGRzLmxlbmd0aCAtIGkpOworCisgICAgICAgIHZh
ciBuZXdGb2xkTGluZSA9IG5ldyBGb2xkTGluZShmb2xkRGF0YSwgZm9sZHMpOworICAgICAgICBm
b2xkRGF0YS5zcGxpY2UoZm9sZERhdGEuaW5kZXhPZih0aGlzKSArIDEsIDAsIG5ld0ZvbGRMaW5l
KTsKKyAgICAgICAgcmV0dXJuIG5ld0ZvbGRMaW5lOworICAgIH0KKworICAgIHRoaXMubWVyZ2Ug
PSBmdW5jdGlvbihmb2xkTGluZU5leHQpIHsKKyAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVO
ZXh0LmZvbGRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICB0aGlzLmFkZEZvbGQoZm9sZHNbaV0pOworICAgICAgICB9CisgICAg
ICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuZm9sZERhdGE7CisgICAgICAgIGZvbGREYXRhLnNwbGlj
ZShmb2xkRGF0YS5pbmRleE9mKGZvbGRMaW5lTmV4dCksIDEpOworICAgIH0KKworICAgIHRoaXMu
dG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJldCA9IFt0aGlzLnJhbmdlLnRv
U3RyaW5nKCkgKyAiOiBbIiBdOworCisgICAgICAgIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlv
bihmb2xkKSB7CisgICAgICAgICAgICByZXQucHVzaCgiICAiICsgZm9sZC50b1N0cmluZygpKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldC5wdXNoKCJdIikKKyAgICAgICAgcmV0dXJuIHJldC5q
b2luKCJcbiIpOworICAgIH0KKworICAgIHRoaXMuaWR4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGlk
eCkgeworICAgICAgICB2YXIgbGFzdEZvbGRFbmRDb2x1bW4gPSAwOworICAgICAgICB2YXIgZm9s
ZDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9sZHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy5mb2xkc1tpXTsKKworICAgICAgICAgICAg
aWR4IC09IGZvbGQuc3RhcnQuY29sdW1uIC0gbGFzdEZvbGRFbmRDb2x1bW47CisgICAgICAgICAg
ICBpZiAoaWR4IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgIHJvdzogZm9sZC5zdGFydC5yb3csCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbjog
Zm9sZC5zdGFydC5jb2x1bW4gKyBpZHgKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZHggLT0gZm9sZC5wbGFjZWhvbGRlci5sZW5ndGg7CisgICAgICAg
ICAgICBpZiAoaWR4IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmb2xkLnN0YXJ0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsYXN0Rm9sZEVuZENvbHVtbiA9IGZvbGQuZW5k
LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICByb3c6
IHRoaXMuZW5kLnJvdywKKyAgICAgICAgICAgIGNvbHVtbjogdGhpcy5lbmQuY29sdW1uICsgaWR4
CisgICAgICAgIH07CisgICAgfQorfSkuY2FsbChGb2xkTGluZS5wcm90b3R5cGUpOworCitleHBv
cnRzLkZvbGRMaW5lID0gRm9sZExpbmU7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vz
c2lvbi9mb2xkJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBGb2xkID0gZXhwb3J0cy5Gb2xkID0gZnVu
Y3Rpb24ocmFuZ2UsIHBsYWNlaG9sZGVyKSB7CisgICAgdGhpcy5mb2xkTGluZSA9IG51bGw7Cisg
ICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyOworICAgIHRoaXMucmFuZ2UgPSByYW5n
ZTsKKyAgICB0aGlzLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CisgICAgdGhpcy5lbmQgPSByYW5nZS5l
bmQ7CisKKyAgICB0aGlzLnNhbWVSb3cgPSByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJv
dzsKKyAgICB0aGlzLnN1YkZvbGRzID0gW107Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0
aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAnIicgKyB0aGlzLnBs
YWNlaG9sZGVyICsgJyIgJyArIHRoaXMucmFuZ2UudG9TdHJpbmcoKTsKKyAgICB9OworCisgICAg
dGhpcy5zZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lKSB7CisgICAgICAgIHRoaXMuZm9s
ZExpbmUgPSBmb2xkTGluZTsKKyAgICAgICAgdGhpcy5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9u
KGZvbGQpIHsKKyAgICAgICAgICAgIGZvbGQuc2V0Rm9sZExpbmUoZm9sZExpbmUpOworICAgICAg
ICB9KTsKKyAgICB9OworCisgICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgcmFuZ2UgPSB0aGlzLnJhbmdlLmNsb25lKCk7CisgICAgICAgIHZhciBmb2xkID0gbmV3IEZv
bGQocmFuZ2UsIHRoaXMucGxhY2Vob2xkZXIpOworICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVh
Y2goZnVuY3Rpb24oc3ViRm9sZCkgeworICAgICAgICAgICAgZm9sZC5zdWJGb2xkcy5wdXNoKHN1
YkZvbGQuY2xvbmUoKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gZm9sZDsKKyAgICB9
OworCisgICAgdGhpcy5hZGRTdWJGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAgICBpZiAo
dGhpcy5yYW5nZS5pc0VxdWFsKGZvbGQpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAg
ICAgICAgaWYgKCF0aGlzLnJhbmdlLmNvbnRhaW5zUmFuZ2UoZm9sZCkpCisgICAgICAgICAgICB0
aHJvdyAiQSBmb2xkIGNhbid0IGludGVyc2VjdCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9s
ZC5yYW5nZSArIHRoaXMucmFuZ2U7CisKKyAgICAgICAgdmFyIHJvdyA9IGZvbGQucmFuZ2Uuc3Rh
cnQucm93LCBjb2x1bW4gPSBmb2xkLnJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGNtcCA9IC0xOyBpIDwgdGhpcy5zdWJGb2xkcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgY21wID0gdGhpcy5zdWJGb2xkc1tpXS5yYW5nZS5jb21wYXJlKHJvdywgY29sdW1u
KTsKKyAgICAgICAgICAgIGlmIChjbXAgIT0gMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgYWZ0ZXJTdGFydCA9IHRoaXMuc3ViRm9sZHNbaV07CisKKyAg
ICAgICAgaWYgKGNtcCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIGFmdGVyU3RhcnQuYWRkU3Vi
Rm9sZChmb2xkKTsKKyAgICAgICAgdmFyIHJvdyA9IGZvbGQucmFuZ2UuZW5kLnJvdywgY29sdW1u
ID0gZm9sZC5yYW5nZS5lbmQuY29sdW1uOworICAgICAgICBmb3IgKHZhciBqID0gaSwgY21wID0g
LTE7IGogPCB0aGlzLnN1YkZvbGRzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBjbXAgPSB0
aGlzLnN1YkZvbGRzW2pdLnJhbmdlLmNvbXBhcmUocm93LCBjb2x1bW4pOworICAgICAgICAgICAg
aWYgKGNtcCAhPSAxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHZhciBhZnRlckVuZCA9IHRoaXMuc3ViRm9sZHNbal07CisKKyAgICAgICAgaWYgKGNtcCA9PSAw
KQorICAgICAgICAgICAgdGhyb3cgIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlz
dGluZyBmb2xkIiArIGZvbGQucmFuZ2UgKyB0aGlzLnJhbmdlOworCisgICAgICAgIHZhciBjb25z
dW1lZEZvbGRzID0gdGhpcy5zdWJGb2xkcy5zcGxpY2UoaSwgaiAtIGksIGZvbGQpOworICAgICAg
ICBmb2xkLnNldEZvbGRMaW5lKHRoaXMuZm9sZExpbmUpOworCisgICAgICAgIHJldHVybiBmb2xk
OworICAgIH07CisKK30pLmNhbGwoRm9sZC5wcm90b3R5cGUpOworCit9KTsKKworYWNlLmRlZmlu
ZSgnYWNlL3Rva2VuX2l0ZXJhdG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBUb2tlbkl0ZXJhdG9y
ID0gZnVuY3Rpb24oc2Vzc2lvbiwgaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbikgeworICAgIHRo
aXMuJHNlc3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuJHJvdyA9IGluaXRpYWxSb3c7CisgICAg
dGhpcy4kcm93VG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoaW5pdGlhbFJvdyk7CisKKyAgICB2
YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbik7
CisgICAgdGhpcy4kdG9rZW5JbmRleCA9IHRva2VuID8gdG9rZW4uaW5kZXggOiAtMTsKK307CisK
KyhmdW5jdGlvbigpIHsgCisgICAgdGhpcy5zdGVwQmFja3dhcmQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhpcy4kdG9rZW5JbmRleCAtPSAxOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRo
aXMuJHRva2VuSW5kZXggPCAwKSB7CisgICAgICAgICAgICB0aGlzLiRyb3cgLT0gMTsKKyAgICAg
ICAgICAgIGlmICh0aGlzLiRyb3cgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kcm93ID0g
MDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0
VG9rZW5zKHRoaXMuJHJvdyk7CisgICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gdGhpcy4k
cm93VG9rZW5zLmxlbmd0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdOworICAgIH07ICAgCisgICAg
dGhpcy5zdGVwRm9yd2FyZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93Q291bnQgPSB0
aGlzLiRzZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICB0aGlzLiR0b2tlbkluZGV4ICs9IDE7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAodGhpcy4kdG9rZW5JbmRleCA+PSB0aGlzLiRyb3dU
b2tlbnMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLiRyb3cgKz0gMTsKKyAgICAgICAgICAg
IGlmICh0aGlzLiRyb3cgPj0gcm93Q291bnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRyb3cg
PSByb3dDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9r
ZW5zKHRoaXMuJHJvdyk7CisgICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4k
dG9rZW5JbmRleF07CisgICAgfTsgICAgICAKKyAgICB0aGlzLmdldEN1cnJlbnRUb2tlbiA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbklu
ZGV4XTsKKyAgICB9OyAgICAgIAorICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuUm93ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcm93OworICAgIH07ICAgICAKKyAgICB0aGlz
LmdldEN1cnJlbnRUb2tlbkNvbHVtbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93VG9r
ZW5zID0gdGhpcy4kcm93VG9rZW5zOworICAgICAgICB2YXIgdG9rZW5JbmRleCA9IHRoaXMuJHRv
a2VuSW5kZXg7CisgICAgICAgIHZhciBjb2x1bW4gPSByb3dUb2tlbnNbdG9rZW5JbmRleF0uc3Rh
cnQ7CisgICAgICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVy
biBjb2x1bW47CisgICAgICAgICAgICAKKyAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgd2hp
bGUgKHRva2VuSW5kZXggPiAwKSB7CisgICAgICAgICAgICB0b2tlbkluZGV4IC09IDE7CisgICAg
ICAgICAgICBjb2x1bW4gKz0gcm93VG9rZW5zW3Rva2VuSW5kZXhdLnZhbHVlLmxlbmd0aDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvbHVtbjsgIAorICAgIH07CisgICAg
ICAgICAgICAKK30pLmNhbGwoVG9rZW5JdGVyYXRvci5wcm90b3R5cGUpOworCitleHBvcnRzLlRv
a2VuSXRlcmF0b3IgPSBUb2tlbkl0ZXJhdG9yOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0
X3Nlc3Npb24vYnJhY2tldF9tYXRjaCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL3Rva2VuX2l0ZXJhdG9yJywgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rv
a2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3Jh
bmdlIikuUmFuZ2U7CisKKworZnVuY3Rpb24gQnJhY2tldE1hdGNoKCkgeworCisgICAgdGhpcy5m
aW5kTWF0Y2hpbmdCcmFja2V0ID0gZnVuY3Rpb24ocG9zaXRpb24sIGNoYXIpIHsKKyAgICAgICAg
aWYgKHBvc2l0aW9uLmNvbHVtbiA9PSAwKSByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgY2hh
ckJlZm9yZUN1cnNvciA9IGNoYXIgfHwgdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykuY2hhckF0
KHBvc2l0aW9uLmNvbHVtbi0xKTsKKyAgICAgICAgaWYgKGNoYXJCZWZvcmVDdXJzb3IgPT0gIiIp
IHJldHVybiBudWxsOworCisgICAgICAgIHZhciBtYXRjaCA9IGNoYXJCZWZvcmVDdXJzb3IubWF0
Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zaXRpb24pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1h
dGNoWzJdLCBwb3NpdGlvbik7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmdldEJyYWNrZXRSYW5n
ZSA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShwb3Mu
cm93KTsKKyAgICAgICAgdmFyIGJlZm9yZSA9IHRydWUsIHJhbmdlOworCisgICAgICAgIHZhciBj
aHIgPSBsaW5lLmNoYXJBdChwb3MuY29sdW1uLTEpOworICAgICAgICB2YXIgbWF0Y2ggPSBjaHIg
JiYgY2hyLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKTsKKyAgICAgICAgaWYgKCFtYXRj
aCkgeworICAgICAgICAgICAgY2hyID0gbGluZS5jaGFyQXQocG9zLmNvbHVtbik7CisgICAgICAg
ICAgICBwb3MgPSB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW4gKyAxfTsKKyAgICAg
ICAgICAgIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7
CisgICAgICAgICAgICBiZWZvcmUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1h
dGNoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKG1hdGNoWzFdKSB7
CisgICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldCht
YXRjaFsxXSwgcG9zKTsKKyAgICAgICAgICAgIGlmICghYnJhY2tldFBvcykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhw
b3MsIGJyYWNrZXRQb3MpOworICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHsKKyAgICAgICAgICAg
ICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29s
dW1uLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5l
bmQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMu
JGZpbmRPcGVuaW5nQnJhY2tldChtYXRjaFsyXSwgcG9zKTsKKyAgICAgICAgICAgIGlmICghYnJh
Y2tldFBvcykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2UuZnJvbVBvaW50cyhicmFja2V0UG9zLCBwb3MpOworICAgICAgICAgICAgaWYgKCFi
ZWZvcmUpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKzsKKyAgICAgICAg
ICAgICAgICByYW5nZS5lbmQuY29sdW1uLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
YW5nZS5jdXJzb3IgPSByYW5nZS5zdGFydDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHJhbmdlOworICAgIH07CisKKyAgICB0aGlzLiRicmFja2V0cyA9IHsKKyAgICAgICAg
IikiOiAiKCIsCisgICAgICAgICIoIjogIikiLAorICAgICAgICAiXSI6ICJbIiwKKyAgICAgICAg
IlsiOiAiXSIsCisgICAgICAgICJ7IjogIn0iLAorICAgICAgICAifSI6ICJ7IgorICAgIH07CisK
KyAgICB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0LCBwb3NpdGlv
biwgdHlwZVJlKSB7CisgICAgICAgIHZhciBvcGVuQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2Jy
YWNrZXRdOworICAgICAgICB2YXIgZGVwdGggPSAxOworCisgICAgICAgIHZhciBpdGVyYXRvciA9
IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsK
KyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAg
IGlmICghdG9rZW4pCisgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7
CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICAgaWYgKCF0eXBlUmUpeworICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cCgKKyAg
ICAgICAgICAgICAgICAiKFxcLj8iICsKKyAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxh
Y2UoIi4iLCAiXFwuIikucmVwbGFjZSgicnBhcmVuIiwgIi5wYXJlbiIpCisgICAgICAgICAgICAg
ICAgKyAiKSsiCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHZhciB2YWx1ZUlu
ZGV4ID0gcG9zaXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkg
LSAyOworICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgCisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHZhbHVlSW5kZXgg
Pj0gMCkgeworICAgICAgICAgICAgICAgIHZhciBjaHIgPSB2YWx1ZS5jaGFyQXQodmFsdWVJbmRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKGNociA9PSBvcGVuQnJhY2tldCkgeworICAgICAgICAg
ICAgICAgICAgICBkZXB0aCAtPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0g
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGl0ZXJhdG9yLmdldEN1
cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdmFs
dWVJbmRleCArIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChj
aHIgPT0gYnJhY2tldCkgeworICAgICAgICAgICAgICAgICAgICBkZXB0aCArPSAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZUluZGV4IC09IDE7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5z
dGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVz
dCh0b2tlbi50eXBlKSk7CisKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgPSB0
b2tlbi52YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlSW5kZXggPSB2YWx1ZS5sZW5ndGggLSAxOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAg
dGhpcy4kZmluZENsb3NpbmdCcmFja2V0ID0gZnVuY3Rpb24oYnJhY2tldCwgcG9zaXRpb24sIHR5
cGVSZSkgeworICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXQgPSB0aGlzLiRicmFja2V0c1ticmFj
a2V0XTsKKyAgICAgICAgdmFyIGRlcHRoID0gMTsKKworICAgICAgICB2YXIgaXRlcmF0b3IgPSBu
ZXcgVG9rZW5JdGVyYXRvcih0aGlzLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7Cisg
ICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICBp
ZiAoIXRva2VuKQorICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwor
ICAgICAgICBpZiAoIXRva2VuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICgh
dHlwZVJlKXsKKyAgICAgICAgICAgIHR5cGVSZSA9IG5ldyBSZWdFeHAoCisgICAgICAgICAgICAg
ICAgIihcXC4/IiArCisgICAgICAgICAgICAgICAgdG9rZW4udHlwZS5yZXBsYWNlKCIuIiwgIlxc
LiIpLnJlcGxhY2UoImxwYXJlbiIsICIucGFyZW4iKQorICAgICAgICAgICAgICAgICsgIikrIgor
ICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0
aW9uLmNvbHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOworCisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwor
ICAgICAgICAgICAgdmFyIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAg
d2hpbGUgKHZhbHVlSW5kZXggPCB2YWx1ZUxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciBj
aHIgPSB2YWx1ZS5jaGFyQXQodmFsdWVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGNociA9
PSBjbG9zaW5nQnJhY2tldCkgeworICAgICAgICAgICAgICAgICAgICBkZXB0aCAtPSAxOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHtyb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdmFsdWVJbmRleCArIGl0ZXJhdG9yLmdldEN1cnJl
bnRUb2tlbkNvbHVtbigpfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaHIgPT0gYnJhY2tldCkgeworICAgICAgICAg
ICAgICAgICAgICBkZXB0aCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2YWx1ZUluZGV4ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbyB7CisgICAg
ICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICAgICAg
fSB3aGlsZSAodG9rZW4gJiYgIXR5cGVSZS50ZXN0KHRva2VuLnR5cGUpKTsKKworICAgICAgICAg
ICAgaWYgKHRva2VuID09IG51bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIHZhbHVlSW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9OworfQorZXhwb3J0cy5CcmFja2V0TWF0Y2ggPSBCcmFja2V0TWF0Y2g7CisK
K30pOworCithY2UuZGVmaW5lKCdhY2Uvc2VhcmNoJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWly
ZSgiLi9saWIvbGFuZyIpOwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIFJh
bmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOworCit2YXIgU2VhcmNoID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy4kb3B0aW9ucyA9IHt9OworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuc2V0ID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICBvb3AubWl4aW4odGhpcy4kb3B0
aW9ucywgb3B0aW9ucyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgdGhpcy5n
ZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBsYW5nLmNvcHlPYmplY3Qo
dGhpcy4kb3B0aW9ucyk7CisgICAgfTsKKyAgICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihv
cHRpb25zKSB7CisgICAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zOworICAgIH07CisgICAg
dGhpcy5maW5kID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSB0
aGlzLiRtYXRjaEl0ZXJhdG9yKHNlc3Npb24sIHRoaXMuJG9wdGlvbnMpOworCisgICAgICAgIGlm
ICghaXRlcmF0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGZp
cnN0UmFuZ2UgPSBudWxsOworICAgICAgICBpdGVyYXRvci5mb3JFYWNoKGZ1bmN0aW9uKHJhbmdl
LCByb3csIG9mZnNldCkgeworICAgICAgICAgICAgaWYgKCFyYW5nZS5zdGFydCkgeworICAgICAg
ICAgICAgICAgIHZhciBjb2x1bW4gPSByYW5nZS5vZmZzZXQgKyAob2Zmc2V0IHx8IDApOworICAg
ICAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4sIHJvdywgY29s
dW1uK3JhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBm
aXJzdFJhbmdlID0gcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgcmV0dXJuIGZpcnN0UmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLmZpbmRBbGwg
PSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9u
czsKKyAgICAgICAgaWYgKCFvcHRpb25zLm5lZWRsZSkKKyAgICAgICAgICAgIHJldHVybiBbXTsK
KyAgICAgICAgdGhpcy4kYXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7CisKKyAgICAgICAgdmFyIHJh
bmdlID0gb3B0aW9ucy5yYW5nZTsKKyAgICAgICAgdmFyIGxpbmVzID0gcmFuZ2UKKyAgICAgICAg
ICAgID8gc2Vzc2lvbi5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cpCisg
ICAgICAgICAgICA6IHNlc3Npb24uZG9jLmdldEFsbExpbmVzKCk7CisKKyAgICAgICAgdmFyIHJh
bmdlcyA9IFtdOworICAgICAgICB2YXIgcmUgPSBvcHRpb25zLnJlOworICAgICAgICBpZiAob3B0
aW9ucy4kaXNNdWx0aUxpbmUpIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSByZS5sZW5ndGg7Cisg
ICAgICAgICAgICB2YXIgbWF4Um93ID0gbGluZXMubGVuZ3RoIC0gbGVuOworICAgICAgICAgICAg
Zm9yICh2YXIgcm93ID0gcmUub2Zmc2V0IHx8IDA7IHJvdyA8PSBtYXhSb3c7IHJvdysrKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpbmVzW3JvdyArIGpdLnNlYXJjaChyZVtqXSkgPT0gLTEpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICB2YXIgc3RhcnRMaW5lID0gbGluZXNbcm93XTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9
IGxpbmVzW3JvdyArIGxlbiAtIDFdOworICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0g
c3RhcnRMaW5lLm1hdGNoKHJlWzBdKVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmFyIGVu
ZEluZGV4ID0gbGluZS5tYXRjaChyZVtsZW4gLSAxXSlbMF0ubGVuZ3RoOworCisgICAgICAgICAg
ICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKAorICAgICAgICAgICAgICAgICAgICByb3csIHN0
YXJ0TGluZS5sZW5ndGggLSBzdGFydEluZGV4LAorICAgICAgICAgICAgICAgICAgICByb3cgKyBs
ZW4gLSAxLCBlbmRJbmRleAorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbGFuZy5nZXRNYXRjaE9m
ZnNldHMobGluZXNbaV0sIHJlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IG1hdGNoZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0g
bWF0Y2hlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGks
IG1hdGNoLm9mZnNldCwgaSwgbWF0Y2gub2Zmc2V0ICsgbWF0Y2gubGVuZ3RoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdl
KSB7CisgICAgICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47Cisg
ICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAg
ICAgdmFyIGkgPSAwLCBqID0gcmFuZ2VzLmxlbmd0aCAtIDE7CisgICAgICAgICAgICB3aGlsZSAo
aSA8IGogJiYgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbiA8IHN0YXJ0Q29sdW1uICYmIHJhbmdlc1tp
XS5zdGFydC5yb3cgPT0gcmFuZ2Uuc3RhcnQucm93KQorICAgICAgICAgICAgICAgIGkrKzsKKwor
ICAgICAgICAgICAgd2hpbGUgKGkgPCBqICYmIHJhbmdlc1tqXS5lbmQuY29sdW1uID4gZW5kQ29s
dW1uICYmIHJhbmdlc1tqXS5lbmQucm93ID09IHJhbmdlLmVuZC5yb3cpCisgICAgICAgICAgICAg
ICAgai0tOworICAgICAgICAgICAgcmV0dXJuIHJhbmdlcy5zbGljZShpLCBqICsgMSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmFuZ2VzOworICAgIH07CisgICAgdGhpcy5yZXBsYWNl
ID0gZnVuY3Rpb24oaW5wdXQsIHJlcGxhY2VtZW50KSB7CisgICAgICAgIHZhciBvcHRpb25zID0g
dGhpcy4kb3B0aW9uczsKKworICAgICAgICB2YXIgcmUgPSB0aGlzLiRhc3NlbWJsZVJlZ0V4cChv
cHRpb25zKTsKKyAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKQorICAgICAgICAgICAg
cmV0dXJuIHJlcGxhY2VtZW50OworCisgICAgICAgIGlmICghcmUpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdmFyIG1hdGNoID0gcmUuZXhlYyhpbnB1dCk7CisgICAgICAgIGlmICgh
bWF0Y2ggfHwgbWF0Y2hbMF0ubGVuZ3RoICE9IGlucHV0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICAKKyAgICAgICAgcmVwbGFjZW1lbnQgPSBpbnB1dC5yZXBsYWNl
KHJlLCByZXBsYWNlbWVudCk7CisgICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkgewor
ICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5zcGxpdCgiIik7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBpbnB1dC5sZW5ndGgpOyBp
LS07ICkgeworICAgICAgICAgICAgICAgIHZhciBjaCA9IGlucHV0W2ldOworICAgICAgICAgICAg
ICAgIGlmIChjaCAmJiBjaC50b0xvd2VyQ2FzZSgpICE9IGNoKQorICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlbWVudFtpXSA9IHJlcGxhY2VtZW50W2ldLnRvVXBwZXJDYXNlKCk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHJlcGxh
Y2VtZW50W2ldLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBs
YWNlbWVudCA9IHJlcGxhY2VtZW50LmpvaW4oIiIpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgfTsKKworICAgIHRoaXMuJG1hdGNoSXRlcmF0
b3IgPSBmdW5jdGlvbihzZXNzaW9uLCBvcHRpb25zKSB7CisgICAgICAgIHZhciByZSA9IHRoaXMu
JGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpOworICAgICAgICBpZiAoIXJlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHZhciBzZWxmID0gdGhpcywgY2FsbGJhY2ssIGJhY2t3
YXJkcyA9IG9wdGlvbnMuYmFja3dhcmRzOworCisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRp
TGluZSkgeworICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDsKKyAgICAgICAgICAgIHZh
ciBtYXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24obGluZSwgcm93LCBvZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGxpbmUuc2VhcmNoKHJlWzBdKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyBpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpbmUuc2VhcmNoKHJlW2ldKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIg
ZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7CisKKyAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBzdGFydEluZGV4LCByb3cgKyBsZW4g
LSAxLCBlbmRJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlLm9mZnNldCA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdy0tOworICAgICAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydC5jb2x1bW4gPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1
bW4gKz0gb2Zmc2V0OworCisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHJhbmdlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9
IGVsc2UgaWYgKGJhY2t3YXJkcykgeworICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBm
dW5jdGlvbihsaW5lLCByb3csIHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0
Y2hlcyA9IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKGxpbmUsIHJlKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gbWF0Y2hlcy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICAg
ICAgICAgIGlmIChjYWxsYmFjayhtYXRjaGVzW2ldLCByb3csIHN0YXJ0SW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlvbihsaW5lLCBy
b3csIHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxhbmcuZ2V0
TWF0Y2hPZmZzZXRzKGxpbmUsIHJlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFj
ayhtYXRjaGVzW2ldLCByb3csIHN0YXJ0SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKF9jYWxsYmFjaykgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gX2NhbGxiYWNrOworICAgICAgICAgICAgICAgIHNlbGYuJGxpbmVJ
dGVyYXRvcihzZXNzaW9uLCBvcHRpb25zKS5mb3JFYWNoKG1hdGNoSXRlcmF0b3IpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cCA9
IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMubmVlZGxlIGluc3RhbmNl
b2YgUmVnRXhwKQorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSBvcHRpb25zLm5lZWRs
ZTsKKworICAgICAgICB2YXIgbmVlZGxlID0gb3B0aW9ucy5uZWVkbGU7CisKKyAgICAgICAgaWYg
KCFvcHRpb25zLm5lZWRsZSkKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFvcHRpb25zLnJlZ0V4cCkKKyAgICAgICAgICAgIG5lZWRsZSA9IGxh
bmcuZXNjYXBlUmVnRXhwKG5lZWRsZSk7CisKKyAgICAgICAgaWYgKG9wdGlvbnMud2hvbGVXb3Jk
KQorICAgICAgICAgICAgbmVlZGxlID0gIlxcYiIgKyBuZWVkbGUgKyAiXFxiIjsKKworICAgICAg
ICB2YXIgbW9kaWZpZXIgPSBvcHRpb25zLmNhc2VTZW5zaXRpdmUgPyAiZyIgOiAiZ2kiOworCisg
ICAgICAgIG9wdGlvbnMuJGlzTXVsdGlMaW5lID0gL1tcblxyXS8udGVzdChuZWVkbGUpOworICAg
ICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpCisgICAgICAgICAgICByZXR1cm4gb3B0aW9u
cy5yZSA9IHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpOwor
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKG5lZWRsZSwg
bW9kaWZpZXIpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHJlID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSByZTsKKyAgICB9OworCisg
ICAgdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAgPSBmdW5jdGlvbihuZWVkbGUsIG1vZGlm
aWVyKSB7CisgICAgICAgIHZhciBwYXJ0cyA9IG5lZWRsZS5yZXBsYWNlKC9cclxufFxyfFxuL2cs
ICIkXG5eIikuc3BsaXQoIlxuIik7CisgICAgICAgIHZhciByZSA9IFtdOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB0cnkgeworICAgICAgICAgICAgcmUu
cHVzaChuZXcgUmVnRXhwKHBhcnRzW2ldLCBtb2RpZmllcikpOworICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFy
dHNbMF0gPT0gIiIpIHsKKyAgICAgICAgICAgIHJlLnNoaWZ0KCk7CisgICAgICAgICAgICByZS5v
ZmZzZXQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmUub2Zmc2V0ID0gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmU7CisgICAgfTsKKworICAgIHRoaXMuJGxpbmVJ
dGVyYXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGJhY2t3
YXJkcyA9IG9wdGlvbnMuYmFja3dhcmRzID09IHRydWU7CisgICAgICAgIHZhciBza2lwQ3VycmVu
dCA9IG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2U7CisKKyAgICAgICAgdmFyIHJhbmdlID0g
b3B0aW9ucy5yYW5nZTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gb3B0aW9ucy5zdGFydDsKKyAgICAg
ICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2UgPyByYW5nZVtiYWNrd2Fy
ZHMgPyAiZW5kIiA6ICJzdGFydCJdIDogc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAg
ICAgICAgIAorICAgICAgICBpZiAoc3RhcnQuc3RhcnQpCisgICAgICAgICAgICBzdGFydCA9IHN0
YXJ0W3NraXBDdXJyZW50ICE9IGJhY2t3YXJkcyA/ICJlbmQiIDogInN0YXJ0Il07CisKKyAgICAg
ICAgdmFyIGZpcnN0Um93ID0gcmFuZ2UgPyByYW5nZS5zdGFydC5yb3cgOiAwOworICAgICAgICB2
YXIgbGFzdFJvdyA9IHJhbmdlID8gcmFuZ2UuZW5kLnJvdyA6IHNlc3Npb24uZ2V0TGVuZ3RoKCkg
LSAxOworCisgICAgICAgIHZhciBmb3JFYWNoID0gYmFja3dhcmRzID8gZnVuY3Rpb24oY2FsbGJh
Y2spIHsKKyAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3RhcnQucm93OworCisgICAgICAgICAg
ICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgc3RhcnQu
Y29sdW1uKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGluZSwgcm93KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChyb3ctLTsgcm93
ID49IGZpcnN0Um93OyByb3ctLSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNl
c3Npb24uZ2V0TGluZShyb3cpLCByb3cpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud3JhcCA9PSBmYWxzZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChyb3cgPSBsYXN0Um93
LCBmaXJzdFJvdyA9IHN0YXJ0LnJvdzsgcm93ID49IGZpcnN0Um93OyByb3ctLSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNlc3Npb24uZ2V0TGluZShyb3cpLCByb3cpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKGNh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHN0YXJ0LnJvdzsKKworICAgICAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vic3RyKHN0YXJ0LmNv
bHVtbik7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGxpbmUsIHJvdywgc3RhcnQuY29s
dW1uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9y
IChyb3cgPSByb3crMTsgcm93IDw9IGxhc3RSb3c7IHJvdysrKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09
IGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBm
b3IgKHJvdyA9IGZpcnN0Um93LCBsYXN0Um93ID0gc3RhcnQucm93OyByb3cgPD0gbGFzdFJvdzsg
cm93KyspCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUo
cm93KSwgcm93KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICByZXR1cm4ge2ZvckVhY2g6IGZvckVhY2h9OworICAgIH07
CisKK30pLmNhbGwoU2VhcmNoLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuU2VhcmNoID0gU2VhcmNo
OworfSk7CithY2UuZGVmaW5lKCdhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyJywgWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uva2V5Ym9hcmQv
aGFzaF9oYW5kbGVyJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIp
OwordmFyIEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIiku
SGFzaEhhbmRsZXI7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2Vt
aXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisKK3ZhciBDb21tYW5kTWFuYWdlciA9IGZ1bmN0aW9uKHBs
YXRmb3JtLCBjb21tYW5kcykgeworICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKKyAgICB0
aGlzLmNvbW1hbmRzID0gdGhpcy5ieU5hbWUgPSB7fTsKKyAgICB0aGlzLmNvbW1tYW5kS2V5Qmlu
ZGluZyA9IHt9OworCisgICAgdGhpcy5hZGRDb21tYW5kcyhjb21tYW5kcyk7CisgICAgCisgICAg
dGhpcy5zZXREZWZhdWx0SGFuZGxlcigiZXhlYyIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0
dXJuIGUuY29tbWFuZC5leGVjKGUuZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAgIH0pOworfTsK
Kworb29wLmluaGVyaXRzKENvbW1hbmRNYW5hZ2VyLCBIYXNoSGFuZGxlcik7CisKKyhmdW5jdGlv
bigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKworICAgIHRo
aXMuZXhlYyA9IGZ1bmN0aW9uKGNvbW1hbmQsIGVkaXRvciwgYXJncykgeworICAgICAgICBpZiAo
dHlwZW9mIGNvbW1hbmQgPT09ICdzdHJpbmcnKQorICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMu
Y29tbWFuZHNbY29tbWFuZF07CisKKyAgICAgICAgaWYgKCFjb21tYW5kKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLiRyZWFkT25seSAm
JiAhY29tbWFuZC5yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICB2YXIgcmV0dmFsdWUgPSB0aGlzLl9lbWl0KCJleGVjIiwgeworICAgICAgICAgICAgZWRpdG9y
OiBlZGl0b3IsCisgICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLAorICAgICAgICAgICAgYXJn
czogYXJncworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmV0dmFsdWUgPT09IGZhbHNl
ID8gZmFsc2UgOiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLnRvZ2dsZVJlY29yZGluZyA9IGZ1
bmN0aW9uKGVkaXRvcikgeworICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZWRpdG9yICYmIGVkaXRvci5fZW1pdCgiY2hhbmdlU3RhdHVz
Iik7CisgICAgICAgIGlmICh0aGlzLnJlY29yZGluZykgeworICAgICAgICAgICAgdGhpcy5tYWNy
by5wb3AoKTsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXhlYyIsIHRo
aXMuJGFkZENvbW1hbmRUb01hY3JvKTsKKworICAgICAgICAgICAgaWYgKCF0aGlzLm1hY3JvLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICB0aGlzLm1hY3JvID0gdGhpcy5vbGRNYWNybzsKKworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCF0aGlzLiRhZGRDb21tYW5kVG9NYWNybykgeworICAgICAgICAgICAgdGhpcy4kYWRk
Q29tbWFuZFRvTWFjcm8gPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYWNy
by5wdXNoKFtlLmNvbW1hbmQsIGUuYXJnc10pOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5vbGRNYWNybyA9IHRoaXMubWFjcm87CisgICAgICAg
IHRoaXMubWFjcm8gPSBbXTsKKyAgICAgICAgdGhpcy5vbigiZXhlYyIsIHRoaXMuJGFkZENvbW1h
bmRUb01hY3JvKTsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gdHJ1ZTsKKyAgICB9
OworCisgICAgdGhpcy5yZXBsYXkgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgaWYgKHRo
aXMuJGluUmVwbGF5IHx8ICF0aGlzLm1hY3JvKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICh0aGlzLnJlY29yZGluZykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJl
Y29yZGluZyhlZGl0b3IpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLiRpblJl
cGxheSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLm1hY3JvLmZvckVhY2goZnVuY3Rpb24oeCkg
eworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PSAic3RyaW5nIikKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leGVjKHgsIGVkaXRvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMoeFswXSwgZWRpdG9yLCB4WzFdKTsKKyAgICAgICAg
ICAgIH0sIHRoaXMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdGhpcy4kaW5S
ZXBsYXkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnRyaW1NYWNybyA9
IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgcmV0dXJuIG0ubWFwKGZ1bmN0aW9uKHgpeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiB4WzBdICE9ICJzdHJpbmciKQorICAgICAgICAgICAgICAgIHhbMF0g
PSB4WzBdLm5hbWU7CisgICAgICAgICAgICBpZiAoIXhbMV0pCisgICAgICAgICAgICAgICAgeCA9
IHhbMF07CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfSk7CisgICAgfTsKKworfSku
Y2FsbChDb21tYW5kTWFuYWdlci5wcm90b3R5cGUpOworCitleHBvcnRzLkNvbW1hbmRNYW5hZ2Vy
ID0gQ29tbWFuZE1hbmFnZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uva2V5Ym9hcmQvaGFz
aF9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2tl
eXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGtleVV0
aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKKworZnVuY3Rpb24gSGFzaEhhbmRsZXIoY29u
ZmlnLCBwbGF0Zm9ybSkgeworICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKKyAgICB0aGlz
LmNvbW1hbmRzID0ge307CisgICAgdGhpcy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsKKworICAg
IHRoaXMuYWRkQ29tbWFuZHMoY29uZmlnKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRo
aXMuYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKKyAgICAgICAgaWYgKHRoaXMuY29t
bWFuZHNbY29tbWFuZC5uYW1lXSkKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWFuZChjb21t
YW5kKTsKKworICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmQubmFtZV0gPSBjb21tYW5kOwor
CisgICAgICAgIGlmIChjb21tYW5kLmJpbmRLZXkpCisgICAgICAgICAgICB0aGlzLl9idWlsZEtl
eUhhc2goY29tbWFuZCk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlQ29tbWFuZCA9IGZ1bmN0
aW9uKGNvbW1hbmQpIHsKKyAgICAgICAgdmFyIG5hbWUgPSAodHlwZW9mIGNvbW1hbmQgPT09ICdz
dHJpbmcnID8gY29tbWFuZCA6IGNvbW1hbmQubmFtZSk7CisgICAgICAgIGNvbW1hbmQgPSB0aGlz
LmNvbW1hbmRzW25hbWVdOworICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1lXTsKKyAg
ICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOworICAgICAgICBmb3IgKHZh
ciBoYXNoSWQgaW4gY2tiKSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY2tiW2hhc2hJ
ZF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY2tiW2hhc2hJZF1ba2V5XSA9PSBjb21tYW5kKQor
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2tiW2hhc2hJZF1ba2V5XTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmJpbmRLZXkgPSBmdW5jdGlvbihrZXks
IGNvbW1hbmQpIHsKKyAgICAgICAgaWYoIWtleSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKHR5cGVvZiBjb21tYW5kID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRoaXMu
YWRkQ29tbWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBrZXl9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBja2IgPSB0aGlzLmNv
bW1tYW5kS2V5QmluZGluZzsKKyAgICAgICAga2V5LnNwbGl0KCJ8IikuZm9yRWFjaChmdW5jdGlv
bihrZXlQYXJ0KSB7CisgICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VLZXlzKGtl
eVBhcnQsIGNvbW1hbmQpOworICAgICAgICAgICAgdmFyIGhhc2hJZCA9IGJpbmRpbmcuaGFzaElk
OworICAgICAgICAgICAgKGNrYltoYXNoSWRdIHx8IChja2JbaGFzaElkXSA9IHt9KSlbYmluZGlu
Zy5rZXldID0gY29tbWFuZDsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMu
YWRkQ29tbWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgeworICAgICAgICBjb21tYW5kcyAmJiBP
YmplY3Qua2V5cyhjb21tYW5kcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgICAg
ICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdOworICAgICAgICAgICAgaWYgKHR5cGVvZiBj
b21tYW5kID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5kS2V5
KGNvbW1hbmQsIG5hbWUpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJm
dW5jdGlvbiIpCisgICAgICAgICAgICAgICAgY29tbWFuZCA9IHsgZXhlYzogY29tbWFuZCB9Owor
CisgICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSkKKyAgICAgICAgICAgICAgICBjb21tYW5k
Lm5hbWUgPSBuYW1lOworCisgICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZCk7Cisg
ICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92ZUNvbW1hbmRzID0gZnVu
Y3Rpb24oY29tbWFuZHMpIHsKKyAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2go
ZnVuY3Rpb24obmFtZSkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmRz
W25hbWVdKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMuYmluZEtleXMg
PSBmdW5jdGlvbihrZXlMaXN0KSB7CisgICAgICAgIE9iamVjdC5rZXlzKGtleUxpc3QpLmZvckVh
Y2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBrZXlMaXN0
W2tleV0pOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgICAgdGhpcy5fYnVpbGRLZXlI
YXNoID0gZnVuY3Rpb24oY29tbWFuZCkgeworICAgICAgICB2YXIgYmluZGluZyA9IGNvbW1hbmQu
YmluZEtleTsKKyAgICAgICAgaWYgKCFiaW5kaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBrZXkgPSB0eXBlb2YgYmluZGluZyA9PSAic3RyaW5nIiA/IGJpbmRpbmc6IGJp
bmRpbmdbdGhpcy5wbGF0Zm9ybV07CisgICAgICAgIHRoaXMuYmluZEtleShrZXksIGNvbW1hbmQp
OworICAgIH07CisgICAgdGhpcy5wYXJzZUtleXMgPSBmdW5jdGlvbihrZXlzKSB7CisgICAgICAg
IHZhciBwYXJ0cyA9IGtleXMudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1wtXCtdKFtcLVwrXSk/Lyku
ZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4fSk7CisgICAgICAgIHZhciBrZXkgPSBwYXJ0cy5w
b3AoKTsKKworICAgICAgICB2YXIga2V5Q29kZSA9IGtleVV0aWxba2V5XTsKKyAgICAgICAgaWYg
KGtleVV0aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXSkKKyAgICAgICAgICAgIGtleSA9IGtleVV0
aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXS50b0xvd2VyQ2FzZSgpOworICAgICAgICBlbHNlIGlm
ICghcGFydHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiAt
MX07CisgICAgICAgIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAxICYmIHBhcnRzWzBdID09ICJz
aGlmdCIpCisgICAgICAgICAgICByZXR1cm4ge2tleToga2V5LnRvVXBwZXJDYXNlKCksIGhhc2hJ
ZDogLTF9OworCisgICAgICAgIHZhciBoYXNoSWQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0g
cGFydHMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICB2YXIgbW9kaWZpZXIgPSBrZXlVdGls
LktFWV9NT0RTW3BhcnRzW2ldXTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSBudWxsKQor
ICAgICAgICAgICAgICAgIHRocm93ICJpbnZhbGlkIG1vZGlmaWVyICIgKyBwYXJ0c1tpXSArICIg
aW4gIiArIGtleXM7CisgICAgICAgICAgICBoYXNoSWQgfD0gbW9kaWZpZXI7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiBoYXNoSWR9OworICAgIH07CisKKyAg
ICB0aGlzLmZpbmRLZXlDb21tYW5kID0gZnVuY3Rpb24gZmluZEtleUNvbW1hbmQoaGFzaElkLCBr
ZXlTdHJpbmcpIHsKKyAgICAgICAgdmFyIGNrYnIgPSB0aGlzLmNvbW1tYW5kS2V5QmluZGluZzsK
KyAgICAgICAgcmV0dXJuIGNrYnJbaGFzaElkXSAmJiBja2JyW2hhc2hJZF1ba2V5U3RyaW5nXTsK
KyAgICB9OworCisgICAgdGhpcy5oYW5kbGVLZXlib2FyZCA9IGZ1bmN0aW9uKGRhdGEsIGhhc2hJ
ZCwga2V5U3RyaW5nLCBrZXlDb2RlKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBj
b21tYW5kOiB0aGlzLmZpbmRLZXlDb21tYW5kKGhhc2hJZCwga2V5U3RyaW5nKQorICAgICAgICB9
OworICAgIH07CisKK30pLmNhbGwoSGFzaEhhbmRsZXIucHJvdG90eXBlKQorCitleHBvcnRzLkhh
c2hIYW5kbGVyID0gSGFzaEhhbmRsZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2NvbW1hbmRz
L2RlZmF1bHRfY29tbWFuZHMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvbGFuZycsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBjb25m
aWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKKworZnVuY3Rpb24gYmluZEtleSh3aW4sIG1hYykg
eworICAgIHJldHVybiB7CisgICAgICAgIHdpbjogd2luLAorICAgICAgICBtYWM6IG1hYworICAg
IH07Cit9CisKK2V4cG9ydHMuY29tbWFuZHMgPSBbeworICAgIG5hbWU6ICJzZWxlY3RhbGwiLAor
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQSIsICJDb21tYW5kLUEiKSwKKyAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdEFsbCgpOyB9LAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogImNlbnRlcnNlbGVjdGlvbiIsCisgICAgYmluZEtleTogYmlu
ZEtleShudWxsLCAiQ3RybC1MIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5jZW50ZXJTZWxlY3Rpb24oKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5h
bWU6ICJnb3RvbGluZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1MIiwgIkNvbW1hbmQt
TCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICB2YXIgbGluZSA9IHBh
cnNlSW50KHByb21wdCgiRW50ZXIgbGluZSBudW1iZXI6IiksIDEwKTsKKyAgICAgICAgaWYgKCFp
c05hTihsaW5lKSkgeworICAgICAgICAgICAgZWRpdG9yLmdvdG9MaW5lKGxpbmUpOworICAgICAg
ICB9CisgICAgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJmb2xkIiwK
KyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtTHxDdHJsLUYxIiwgIkNvbW1hbmQtQWx0LUx8Q29t
bWFuZC1GMSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi50
b2dnbGVGb2xkKGZhbHNlKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6
ICJ1bmZvbGQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1MfEN0cmwtU2hpZnQt
RjEiLCAiQ29tbWFuZC1BbHQtU2hpZnQtTHxDb21tYW5kLVNoaWZ0LUYxIiksCisgICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQodHJ1ZSk7IH0sCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZm9sZGFsbCIsCisgICAgYmluZEtl
eTogYmluZEtleSgiQWx0LTAiLCAiQ29tbWFuZC1PcHRpb24tMCIpLAorICAgIGV4ZWM6IGZ1bmN0
aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi5mb2xkQWxsKCk7IH0sCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAidW5mb2xkYWxsIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJBbHQtU2hpZnQtMCIsICJDb21tYW5kLU9wdGlvbi1TaGlmdC0wIiksCisgICAgZXhlYzogZnVu
Y3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnVuZm9sZCgpOyB9LAorICAgIHJlYWRPbmx5
OiB0cnVlCit9LCB7CisgICAgbmFtZTogImZpbmRuZXh0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLUsiLCAiQ29tbWFuZC1HIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5maW5kTmV4dCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTog
ImZpbmRwcmV2aW91cyIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1LIiwgIkNv
bW1hbmQtU2hpZnQtRyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmlu
ZFByZXZpb3VzKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZmlu
ZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1GIiwgIkNvbW1hbmQtRiIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4
dC9zZWFyY2hib3giLCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yKX0pOworICAgIH0sCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAib3ZlcndyaXRlIiwKKyAgICBiaW5k
S2V5OiAiSW5zZXJ0IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2ds
ZU92ZXJ3cml0ZSgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNl
bGVjdHRvc3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtSG9tZSIsICJD
b21tYW5kLVNoaWZ0LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RGaWxlU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9z
dGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1Ib21lIiwgIkNvbW1hbmQtSG9tZXxD
b21tYW5kLVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0
ZUZpbGVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAg
cmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dXAiLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIlNoaWZ0LVVwIiwgIlNoaWZ0LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RVcCgpOyB9LAorICAgIG11bHRpU2Vs
ZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1l
OiAiZ29saW5ldXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlVwIiwgIlVwfEN0cmwtUCIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVVcChhcmdz
LnRpbWVzKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRP
bmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHRvZW5kIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLVNoaWZ0LUVuZCIsICJDb21tYW5kLVNoaWZ0LURvd24iKSwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVFbmQo
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9lbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0
cmwtRW5kIiwgIkNvbW1hbmQtRW5kfENvbW1hbmQtRG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVGaWxlRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RB
Y3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJz
ZWxlY3Rkb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1Eb3duIiwgIlNoaWZ0LURv
d24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigp
LnNlbGVjdERvd24oKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAg
IHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvbGluZWRvd24iLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIkRvd24iLCAiRG93bnxDdHJsLU4iKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlRG93bihhcmdzLnRpbWVzKTsgfSwKKyAgICBt
dWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7Cisg
ICAgbmFtZTogInNlbGVjdHdvcmRsZWZ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNo
aWZ0LUxlZnQiLCAiT3B0aW9uLVNoaWZ0LUxlZnQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRMZWZ0KCk7IH0sCisgICAgbXVs
dGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJnb3Rvd29yZGxlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtTGVmdCIs
ICJPcHRpb24tTGVmdCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2
aWdhdGVXb3JkTGVmdCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9saW5lc3RhcnQiLAor
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1MZWZ0IiwgIkNvbW1hbmQtU2hpZnQtTGVm
dCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCku
c2VsZWN0TGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwK
KyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvbGluZXN0YXJ0IiwKKyAg
ICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtTGVmdHxIb21lIiwgIkNvbW1hbmQtTGVmdHxIb21lfEN0
cmwtQSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5l
U3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRP
bmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdGxlZnQiLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIlNoaWZ0LUxlZnQiLCAiU2hpZnQtTGVmdCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGVmdCgpOyB9LAorICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBu
YW1lOiAiZ290b2xlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkxlZnQiLCAiTGVmdHxDdHJs
LUIiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRl
TGVmdChhcmdzLnRpbWVzKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAor
ICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHdvcmRyaWdodCIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1SaWdodCIsICJPcHRpb24tU2hpZnQtUmln
aHQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigp
LnNlbGVjdFdvcmRSaWdodCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIs
CisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3dvcmRyaWdodCIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1SaWdodCIsICJPcHRpb24tUmlnaHQiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm5hdmlnYXRlV29yZFJpZ2h0KCk7IH0sCisg
ICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3R0b2xpbmVlbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFs
dC1TaGlmdC1SaWdodCIsICJDb21tYW5kLVNoaWZ0LVJpZ2h0IiksCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCisg
ICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJnb3RvbGluZWVuZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVJp
Z2h0fEVuZCIsICJDb21tYW5kLVJpZ2h0fEVuZHxDdHJsLUUiKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLm5hdmlnYXRlTGluZUVuZCgpOyB9LAorICAgIG11bHRpU2VsZWN0
QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
c2VsZWN0cmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LVJpZ2h0IiwgIlNoaWZ0
LVJpZ2h0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rp
b24oKS5zZWxlY3RSaWdodCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIs
CisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3JpZ2h0IiwKKyAgICBi
aW5kS2V5OiBiaW5kS2V5KCJSaWdodCIsICJSaWdodHxDdHJsLUYiKSwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlUmlnaHQoYXJncy50aW1lcyk7IH0s
CisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQor
fSwgeworICAgIG5hbWU6ICJzZWxlY3RwYWdlZG93biIsCisgICAgYmluZEtleTogIlNoaWZ0LVBh
Z2VEb3duIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBhZ2VE
b3duKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAicGFnZWRvd24i
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgIk9wdGlvbi1QYWdlRG93biIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZURvd24oKTsgfSwKKyAgICBy
ZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvcGFnZWRvd24iLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIlBhZ2VEb3duIiwgIlBhZ2VEb3dufEN0cmwtViIpLAorICAgIGV4ZWM6IGZ1
bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ290b1BhZ2VEb3duKCk7IH0sCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0cGFnZXVwIiwKKyAgICBiaW5kS2V5OiAiU2hp
ZnQtUGFnZVVwIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBh
Z2VVcCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInBhZ2V1cCIs
CisgICAgYmluZEtleTogYmluZEtleShudWxsLCAiT3B0aW9uLVBhZ2VVcCIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZVVwKCk7IH0sCisgICAgcmVhZE9u
bHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3BhZ2V1cCIsCisgICAgYmluZEtleTogIlBh
Z2VVcCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nb3RvUGFnZVVwKCk7
IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2Nyb2xsdXAiLAorICAg
IGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtVXAiLCBudWxsKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
KSB7IGUucmVuZGVyZXIuc2Nyb2xsQnkoMCwgLTIgKiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxp
bmVIZWlnaHQpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNjcm9s
bGRvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRG93biIsIG51bGwpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAyICogZS5yZW5kZXJlci5s
YXllckNvbmZpZy5saW5lSGVpZ2h0KTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJzZWxlY3RsaW5lc3RhcnQiLAorICAgIGJpbmRLZXk6ICJTaGlmdC1Ib21lIiwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExp
bmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0bGluZWVuZCIsCisgICAgYmluZEtl
eTogIlNoaWZ0LUVuZCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRT
ZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJ0b2dnbGVyZWNv
cmRpbmciLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQWx0LUUiLCAiQ29tbWFuZC1PcHRp
b24tRSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMudG9n
Z2xlUmVjb3JkaW5nKGVkaXRvcik7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBu
YW1lOiAicmVwbGF5bWFjcm8iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRSIs
ICJDb21tYW5kLVNoaWZ0LUUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9y
LmNvbW1hbmRzLnJlcGxheShlZGl0b3IpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7Cisg
ICAgbmFtZTogImp1bXB0b21hdGNoaW5nIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVAi
LCAiQ3RybC1TaGlmdC1QIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5q
dW1wVG9NYXRjaGluZygpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9tYXRjaGluZyIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1QIiwgbnVsbCksCisgICAgZXhlYzogZnVu
Y3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlKTsgfSwKKyAgICByZWFk
T25seTogdHJ1ZQorfSwgCit7CisgICAgbmFtZTogImN1dCIsCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7CisgICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgp
OworICAgICAgICBlZGl0b3IuX2VtaXQoImN1dCIsIHJhbmdlKTsKKworICAgICAgICBpZiAoIWVk
aXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5y
ZW1vdmUocmFuZ2UpOworICAgICAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIH0KKyAgICB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAg
ICBuYW1lOiAicmVtb3ZlbGluZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1EIiwgIkNv
bW1hbmQtRCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlTGlu
ZXMoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFt
ZTogImR1cGxpY2F0ZVNlbGVjdGlvbiIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlm
dC1EIiwgIkNvbW1hbmQtU2hpZnQtRCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3IuZHVwbGljYXRlU2VsZWN0aW9uKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJzb3J0bGluZXMiLAorICAgIGJpbmRLZXk6IGJpbmRL
ZXkoIkN0cmwtQWx0LVMiLCAiQ29tbWFuZC1BbHQtUyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3Iuc29ydExpbmVzKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJ0b2dnbGVjb21tZW50IiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLS8iLCAiQ29tbWFuZC0vIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci50b2dnbGVDb21tZW50TGluZXMoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogIm1vZGlmeU51bWJlclVwIiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVVwIiwgIkFsdC1TaGlmdC1VcCIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW9kaWZ5TnVtYmVyKDEpOyB9LAorICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAibW9kaWZ5TnVtYmVyRG93
biIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1Eb3duIiwgIkFsdC1TaGlmdC1E
b3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIo
LTEpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1l
OiAicmVwbGFjZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1IIiwgIkNvbW1hbmQtT3B0
aW9uLUYiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgY29uZmlnLmxv
YWRNb2R1bGUoImFjZS9leHQvc2VhcmNoYm94IiwgZnVuY3Rpb24oZSkge2UuU2VhcmNoKGVkaXRv
ciwgdHJ1ZSl9KTsKKyAgICB9Cit9LCB7CisgICAgbmFtZTogInVuZG8iLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkN0cmwtWiIsICJDb21tYW5kLVoiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLnVuZG8oKTsgfQorfSwgeworICAgIG5hbWU6ICJyZWRvIiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVp8Q3RybC1ZIiwgIkNvbW1hbmQtU2hpZnQtWnxDb21t
YW5kLVkiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlZG8oKTsgfQor
fSwgeworICAgIG5hbWU6ICJjb3B5bGluZXN1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0
LVNoaWZ0LVVwIiwgIkNvbW1hbmQtT3B0aW9uLVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5jb3B5TGluZXNVcCgpOyB9Cit9LCB7CisgICAgbmFtZTogIm1vdmVsaW5l
c3VwIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtVXAiLCAiT3B0aW9uLVVwIiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb3ZlTGluZXNVcCgpOyB9Cit9LCB7Cisg
ICAgbmFtZTogImNvcHlsaW5lc2Rvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlm
dC1Eb3duIiwgIkNvbW1hbmQtT3B0aW9uLURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmNvcHlMaW5lc0Rvd24oKTsgfQorfSwgeworICAgIG5hbWU6ICJtb3ZlbGlu
ZXNkb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtRG93biIsICJPcHRpb24tRG93biIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW92ZUxpbmVzRG93bigpOyB9
Cit9LCB7CisgICAgbmFtZTogImRlbCIsCisgICAgYmluZEtleTogYmluZEtleSgiRGVsZXRlIiwg
IkRlbGV0ZXxDdHJsLUQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJl
bW92ZSgicmlnaHQiKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7
CisgICAgbmFtZTogImJhY2tzcGFjZSIsCisgICAgYmluZEtleTogYmluZEtleSgKKyAgICAgICAg
IkNvbW1hbmQtQmFja3NwYWNlfE9wdGlvbi1CYWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tz
cGFjZSIsCisgICAgICAgICJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxTaGlmdC1C
YWNrc3BhY2V8QmFja3NwYWNlfEN0cmwtSCIKKyAgICApLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IucmVtb3ZlKCJsZWZ0Iik7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmV0b2xpbmVzdGFydCIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQWx0LUJhY2tzcGFjZSIsICJDb21tYW5kLUJhY2tzcGFjZSIpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlVG9MaW5lU3RhcnQoKTsgfSwK
KyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92
ZXRvbGluZWVuZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LURlbGV0ZSIsICJDdHJsLUsi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZUVuZCgp
OyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAi
cmVtb3Zld29yZGxlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQmFja3NwYWNlIiwg
IkFsdC1CYWNrc3BhY2V8Q3RybC1BbHQtQmFja3NwYWNlIiksCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVXb3JkTGVmdCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAicmVtb3Zld29yZHJpZ2h0IiwKKyAgICBi
aW5kS2V5OiBiaW5kS2V5KCJDdHJsLURlbGV0ZSIsICJBbHQtRGVsZXRlIiksCisgICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVXb3JkUmlnaHQoKTsgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogIm91dGRlbnQiLAorICAg
IGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LVRhYiIsICJTaGlmdC1UYWIiKSwKKyAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAorICAgIG11bHRpU2Vs
ZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiaW5kZW50IiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJUYWIiLCAiVGFiIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5pbmRlbnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9
LHsKKyAgICBuYW1lOiAiYmxvY2tvdXRkZW50IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LVsiLCAiQ3RybC1bIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9j
a091dGRlbnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LHsKKyAg
ICBuYW1lOiAiYmxvY2tpbmRlbnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtXSIsICJD
dHJsLV0iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrSW5kZW50
KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6
ICJpbnNlcnRzdHJpbmciLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgc3RyKSB7IGVkaXRv
ci5pbnNlcnQoc3RyKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7
CisgICAgbmFtZTogImluc2VydHRleHQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJn
cykgeworICAgICAgICBlZGl0b3IuaW5zZXJ0KGxhbmcuc3RyaW5nUmVwZWF0KGFyZ3MudGV4dCAg
fHwgIiIsIGFyZ3MudGltZXMgfHwgMSkpOworICAgIH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJzcGxpdGxpbmUiLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkobnVsbCwgIkN0cmwtTyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3Iuc3BsaXRMaW5lKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwg
eworICAgIG5hbWU6ICJ0cmFuc3Bvc2VsZXR0ZXJzIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLVQiLCAiQ3RybC1UIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50
cmFuc3Bvc2VMZXR0ZXJzKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246IGZ1bmN0aW9uKGVk
aXRvcikge2VkaXRvci50cmFuc3Bvc2VTZWxlY3Rpb25zKDEpOyB9Cit9LCB7CisgICAgbmFtZTog
InRvdXBwZXJjYXNlIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVUiLCAiQ3RybC1VIiks
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b1VwcGVyQ2FzZSgpOyB9LAor
ICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAidG9sb3dl
cmNhc2UiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVSIsICJDdHJsLVNoaWZ0
LVUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvTG93ZXJDYXNlKCk7
IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfV07CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvdW5kb21hbmFnZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIFVuZG9NYW5hZ2Vy
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXNldCgpOworfTsKKworKGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGRlbHRh
cyA9IG9wdGlvbnMuYXJnc1swXTsKKyAgICAgICAgdGhpcy4kZG9jICA9IG9wdGlvbnMuYXJnc1sx
XTsKKyAgICAgICAgdGhpcy4kdW5kb1N0YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgdGhpcy4k
cmVkb1N0YWNrID0gW107CisgICAgfTsKKyAgICB0aGlzLnVuZG8gPSBmdW5jdGlvbihkb250U2Vs
ZWN0KSB7CisgICAgICAgIHZhciBkZWx0YXMgPSB0aGlzLiR1bmRvU3RhY2sucG9wKCk7CisgICAg
ICAgIHZhciB1bmRvU2VsZWN0aW9uUmFuZ2UgPSBudWxsOworICAgICAgICBpZiAoZGVsdGFzKSB7
CisgICAgICAgICAgICB1bmRvU2VsZWN0aW9uUmFuZ2UgPQorICAgICAgICAgICAgICAgIHRoaXMu
JGRvYy51bmRvQ2hhbmdlcyhkZWx0YXMsIGRvbnRTZWxlY3QpOworICAgICAgICAgICAgdGhpcy4k
cmVkb1N0YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5kb1Nl
bGVjdGlvblJhbmdlOworICAgIH07CisgICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oZG9udFNlbGVj
dCkgeworICAgICAgICB2YXIgZGVsdGFzID0gdGhpcy4kcmVkb1N0YWNrLnBvcCgpOworICAgICAg
ICB2YXIgcmVkb1NlbGVjdGlvblJhbmdlID0gbnVsbDsKKyAgICAgICAgaWYgKGRlbHRhcykgewor
ICAgICAgICAgICAgcmVkb1NlbGVjdGlvblJhbmdlID0KKyAgICAgICAgICAgICAgICB0aGlzLiRk
b2MucmVkb0NoYW5nZXMoZGVsdGFzLCBkb250U2VsZWN0KTsKKyAgICAgICAgICAgIHRoaXMuJHVu
ZG9TdGFjay5wdXNoKGRlbHRhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlZG9TZWxl
Y3Rpb25SYW5nZTsKKyAgICB9OworICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy4kdW5kb1N0YWNrID0gW107CisgICAgICAgIHRoaXMuJHJlZG9TdGFjayA9IFtdOwor
ICAgIH07CisgICAgdGhpcy5oYXNVbmRvID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLiR1bmRvU3RhY2subGVuZ3RoID4gMDsKKyAgICB9OworICAgIHRoaXMuaGFzUmVkbyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcmVkb1N0YWNrLmxlbmd0aCA+IDA7Cisg
ICAgfTsKKworfSkuY2FsbChVbmRvTWFuYWdlci5wcm90b3R5cGUpOworCitleHBvcnRzLlVuZG9N
YW5hZ2VyID0gVW5kb01hbmFnZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3ZpcnR1YWxfcmVu
ZGVyZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywg
J2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNl
L2NvbmZpZycsICdhY2UvbGliL25ldCcsICdhY2UvbGF5ZXIvZ3V0dGVyJywgJ2FjZS9sYXllci9t
YXJrZXInLCAnYWNlL2xheWVyL3RleHQnLCAnYWNlL2xheWVyL2N1cnNvcicsICdhY2Uvc2Nyb2xs
YmFyJywgJ2FjZS9yZW5kZXJsb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi9s
aWIvb29wIik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7Cit2YXIgZXZlbnQgPSBy
ZXF1aXJlKCIuL2xpYi9ldmVudCIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3Vz
ZXJhZ2VudCIpOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Cit2YXIgbmV0ID0g
cmVxdWlyZSgiLi9saWIvbmV0Iik7Cit2YXIgR3V0dGVyTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVy
L2d1dHRlciIpLkd1dHRlcjsKK3ZhciBNYXJrZXJMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvbWFy
a2VyIikuTWFya2VyOwordmFyIFRleHRMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvdGV4dCIpLlRl
eHQ7Cit2YXIgQ3Vyc29yTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVyL2N1cnNvciIpLkN1cnNvcjsK
K3ZhciBTY3JvbGxCYXIgPSByZXF1aXJlKCIuL3Njcm9sbGJhciIpLlNjcm9sbEJhcjsKK3ZhciBS
ZW5kZXJMb29wID0gcmVxdWlyZSgiLi9yZW5kZXJsb29wIikuUmVuZGVyTG9vcDsKK3ZhciBFdmVu
dEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwor
dmFyIGVkaXRvckNzcyA9ICIuYWNlX2VkaXRvciB7XAorcG9zaXRpb246IHJlbGF0aXZlO1wKK292
ZXJmbG93OiBoaWRkZW47XAorZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCAnVWJ1bnR1
IE1vbm8nLCAnQ29uc29sYXMnLCAnc291cmNlLWNvZGUtcHJvJywgbW9ub3NwYWNlO1wKK2ZvbnQt
c2l6ZTogMTJweDtcCitsaW5lLWhlaWdodDogbm9ybWFsO1wKK31cCisuYWNlX3Njcm9sbGVyIHtc
Citwb3NpdGlvbjogYWJzb2x1dGU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCit0b3A6IDA7XAorYm90
dG9tOiAwO1wKK31cCisuYWNlX2NvbnRlbnQge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCistbW96
LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94
O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorY3Vyc29yOiB0ZXh0O1wKK31cCisuYWNlX2d1
dHRlciB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK292ZXJmbG93IDogaGlkZGVuO1wKK3dpZHRo
OiBhdXRvO1wKK3RvcDogMDtcCitib3R0b206IDA7XAorbGVmdDogMDtcCitjdXJzb3I6IGRlZmF1
bHQ7XAorei1pbmRleDogNDtcCit9XAorLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKK3Bvc2l0
aW9uOiBhYnNvbHV0ZTtcCitsZWZ0OiAwO1wKK3JpZ2h0OiAwO1wKK31cCisuYWNlX3Njcm9sbGVy
LmFjZV9zY3JvbGwtbGVmdCB7XAorYm94LXNoYWRvdzogMTdweCAwIDE2cHggLTE2cHggcmdiYSgw
LCAwLCAwLCAwLjQpIGluc2V0O1wKK31cCisuYWNlX2d1dHRlci1jZWxsIHtcCitwYWRkaW5nLWxl
ZnQ6IDE5cHg7XAorcGFkZGluZy1yaWdodDogNnB4O1wKK2JhY2tncm91bmQtcmVwZWF0OiBuby1y
ZXBlYXQ7XAorfVwKKy5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcCitiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5a
VkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VI
QmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNw
cll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhp
SUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNO
eXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VH
MXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkx
emVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUln
ZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRi
V3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5
SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5
elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVn
VUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJ
bmh0Y0M1cGFXUTZRVU0yT0VaRFFUUTRSVFUwTVRGRk1VRXpNMFZGUlRNMlJVWTFNMFJCTWpZaUlI
aHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlFVTTJPRVpEUVRVNFJUVTBNVEZGTVVF
ek0wVkZSVE0yUlVZMU0wUkJNallpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2
YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwQlF6WTRSa05CTWpoRk5UUXhNVVV4UVRNelJVVkZN
elpGUmpVelJFRXlOaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBCUXpZNFJr
TkJNemhGTlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSXZQaUE4TDNKa1pqcEVaWE5qY21s
d2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1
WkQwaWNpSS9Qa2dYeGJBQUFBSmJTVVJCVkhqYXBGTk5hQk5CRkg0enM1dmRaTFA1c1FtTnBUODJR
WTIwOWhlaDFpb1dpc2FEUmNTS0YwV0tKMEdRbnJ6cnhhc0hzUjZFbmxyd0QwVGFneEphYmFWRXBG
WXhMV2xMU1M4MjJ0cjg3bTY2Y2NmZDJHS3lWaEE2TU15YmdmZTk3L3ZtUFVRcGhkMHNaanRvOVhJ
bjlPT3N2bHUybmtxUnpWVSs2dnZselBmOFc2Yms4ZHhRME5QYnhBQUxnQ2dnMkprYVF1aHpRYXUv
RWwwemJtVUE3VTBFczh2MkNpWW1LUUpIR08xUUlDQ0xvcWlsTWhrbXVyREF5YXBLZ3FJdGV6aS9V
U1JkSnFFWVk0RDVqQ3kwM2h0MnlNa2t2TDkxalRUWDEwcXp5eXUyaHJ1UFJON2pnYkgrRU9zWGNN
TGdZaVRoRWdBTWhBQlc4NW9xeTFEWGRSSWR2UDFBSEoyYWNRWHZESXJWSGNkUU5yRUtOWVNWTVNa
R01qRXpJSUF3RFhJbys2Ry9GeGNHbnprQzNUMm9NaExqcmU0OXNCQitSUmNITHFkYWZLNnNZZEUv
R0dCd1UxVnBGTmowYU44cEpiZStCa1p5ZXZVcnZMbDZYbW0wVzlJdVRjMER4ckROQUpkNW9Fdkkv
S1JzTkMzYlF5TmpQTzl5UTFZSGNmajJRdmZRYy81VFVoSlRCYzJpTTBVN0FXRFF0YzFuSkh2RC9j
Zk8yczdqYUdraVRFZmEvRXA4Y29MdTd6bU5taDgrZGM1bFpEdVVlRkFHVU5BL09ZNkpWYXlwUTB2
anI3WFlqVXZKTTM3dnQrajF2dVRLNURnVmZWVW9UalZlK3kzL0x4TXhZMkdnVStDU0x5NGNwZnNZ
b3JSWHVYSU9pMFZ0NDBoNjd1WkZUZElvNm5MYVpjd1VKV0F6d05TMHRCbnFxS3pRRG5qZEcvaVB5
WnhvNDZIYUtVcGJ2WWtqOHFZUlRac0JoZ2UrSkhoWnloMHg5Yjk1SnFqVkprVDA4NGtaSVB3dS9t
UFdxUGdmUTVqWGgyKzkyQXk3SGVkZkFnd0E2S0RXYWZiNHczY0FBQUFBU1VWT1JLNUNZSUk9XCIp
O1wKK2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XAorYmFja2dyb3VuZC1wb3NpdGlvbjog
MnB4IGNlbnRlcjtcCit9XAorLmFjZV9ndXR0ZXItY2VsbC5hY2Vfd2FybmluZyB7XAorYmFja2dy
b3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpT
QkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFB
QUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZU
ZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZi
V1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExq
RXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpw
U1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5
TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZk
WFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExq
QXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0
d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3
THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlR
V1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJt
TmxTVVE5SW5odGNDNXBhV1E2UVVNMk9FWkRRVGc0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBS
Qk1qWWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRVU0yT0VaRFFUazRSVFUw
TVRGRk1VRXpNMFZGUlRNMlJVWTFNMFJCTWpZaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdj
M1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEJRelk0UmtOQk5qaEZOVFF4TVVVeFFU
TXpSVVZGTXpaRlJqVXpSRUV5TmlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRw
QlF6WTRSa05CTnpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlOaUl2UGlBOEwzSmtaanBF
WlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmph
MlYwSUdWdVpEMGljaUkvUGdkN1BmSUFBQUdtU1VSQlZIamFZdnIvL3o4REpaaUpnVUlBTm9DUmtS
RWI5Z0xpU1ZBYVF4NE9RTTdBQWt3ZDdYVTIvdisrL3JPdHRkWUdFQjlkQVNFdk9NeWRHS2ZIOEd2
L3A0WFRrdlJCZkx4ZVFBUCsxY1VoWG9weXZ6aFA3UC9Jb1NqN2c3TXcwOWNOS082SjFRUTBMNGdJ
Q1BJdi92ZWcvOFcrSmRGdlFOTEhWc1c5L25tbjl6azdCK2NDa0R3aEw3Z3Q2a25TWm54OS9MdUNF
T2N2a0lBTVArY3Z0bzluZnF5Wm1tVUFrc2ZuQlV0Yk02MGdYLzMva2d5djMveFNGT0w1RFpUK0w4
dlArWWZoNWN2ZlB2cC94VUh5UUhYR3lBWXdncHdCalpZRlQzWTFPRWwvT2ZDSDRmZnYzd3pjNGl3
TXZOSXNESitmL21INCt2SVBBeHNiNjMxV1cwWWxuNlpwUUxYZE1LL0RYR0RmbGgrc0l2MzdFaXZE
NXgvL0diNytZV1Q0eTg2c2w3QkNDa1NEK1orKy8xZGt2c0ZSbCtIbkQxUnZqZTRGOHdoak1YbUdq
NThZR2Y1enNETXdjbkF3ZlB2S2NtbDYyRHNRRGVhRHhOKy9ZMHF3bHBFSHFyZEI5NElSTklEVWdm
Z2ZLSkNoR0s0T2lrRVczZ1RpWFVCOTUwQVNMRkFGNTRBQzk0QTBHOVFBZk9ubUY5RENEekFCRnFT
MDhJSFlESVNjZGlqT2pRQUJCZ0MrLzlhd0JIOTZqd0FBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCiti
YWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKK31cCisuYWNlX2d1dHRlci1jZWxsLmFj
ZV9pbmZvIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQs
UjBsR09EbGhFQUFRQU1RQUFBQUFBRUZCUVZKU1VsNWVYbVJrWkd0cmEzOS9mNFdGaFltSmlaR1Jr
YWFtcHJ5OHZNUER3OHpNek5YVjFkemMzT1RrNU9ycTZ2RHc4UC8vL3dBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBa0FBQlFBTEFBQUFBQVFBQkFBQUFV
dUlDV09aR21lYUJtbDVYR3dGQ1FTQkd5WFJTQXd0cVFJaVJ1aXdJTTVCb1lWYkVGSXlHQ1FvZUpH
clZwdElRQTdcIik7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjtcCit9XAorLmFj
ZV9kYXJrIC5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVy
bChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFB
UUNBWUFBQUFmOC85aEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1
Y2NsbFBBQUFBeVJwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxk
Q0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lq
OCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcx
d2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNeTFqTURFeElEWTJMakUwTlRZMk1Td2dNakF4
TWk4d01pOHdOaTB4TkRvMU5qb3lOeUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZj
bVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlY
Z3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5N
NmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0
YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNi
bk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pT
OVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5
emFHOXdJRU5UTmlBb1RXRmphVzUwYjNOb0tTSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3
TG1scFpEcEdSVGs1TVRWR1JFSXhORGt4TVVVeE9UYzVRMEZGUkVReU1UTkdNakJGUXlJZ2VHMXdU
VTA2Ukc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR1JUazVNVFZHUlVJeE5Ea3hNVVV4T1RjNVEw
RkZSRVF5TVROR01qQkZReUkrSUR4NGJYQk5UVHBFWlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5O
MFlXNWpaVWxFUFNKNGJYQXVhV2xrT2taRk9Ua3hOVVpDUWpFME9URXhSVEU1TnpsRFFVVkVSREl4
TTBZeU1FVkRJaUJ6ZEZKbFpqcGtiMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPa1pGT1RreE5VWkRR
akUwT1RFeFJURTVOemxEUVVWRVJESXhNMFl5TUVWRElpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFX
OXVQaUE4TDNKa1pqcFNSRVkrSUR3dmVEcDRiWEJ0WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNK
eUlqOCtTSURrakFBQUFKMUpSRUZVZU5waS9QLy9Qd01sZ0ltQlFrQjdBNnFycS8rRE1DNTVGa0lH
S0NvcTRwVm5wRmtnVHAwNjlmLysvZnYvcjF1MzdyK3RyZTEva2cwQStwdG45dXpaWUxhUmtSSHBM
dmp3NGNOWFdWbFpodWZQbnpPY08zZU9kQU8wdGJWUEFqSERtemR2R0E0ZlBzeElzZ0dTa3BKbXYz
NzlZbmozN2gyRGpJeU1DTWtHM0xoeFEvVDI3ZHNNYW1wcURIWjJkcS9wSDQxRHh3Q0FBQU1BRmRj
NjhkVXNGWmdBQUFBQVNVVk9SSzVDWUlJPVwiKTtcCit9XAorLmFjZV9zY3JvbGxiYXIge1wKK3Bv
c2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdy14OiBoaWRkZW47XAorb3ZlcmZsb3cteTogc2Ny
b2xsO1wKK3JpZ2h0OiAwO1wKK3RvcDogMDtcCitib3R0b206IDA7XAorfVwKKy5hY2Vfc2Nyb2xs
YmFyLWlubmVyIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAord2lkdGg6IDFweDtcCitsZWZ0OiAw
O1wKK31cCisuYWNlX3ByaW50LW1hcmdpbiB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK2hlaWdo
dDogMTAwJTtcCit9XAorLmFjZV90ZXh0LWlucHV0IHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAor
ei1pbmRleDogMDtcCit3aWR0aDogMC41ZW07XAoraGVpZ2h0OiAxZW07XAorb3BhY2l0eTogMDtc
CitiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcCistbW96LWFwcGVhcmFuY2U6IG5vbmU7XAorYXBw
ZWFyYW5jZTogbm9uZTtcCitib3JkZXI6IG5vbmU7XAorcmVzaXplOiBub25lO1wKK291dGxpbmU6
IG5vbmU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCitmb250OiBpbmhlcml0O1wKK31cCisuYWNlX3Rl
eHQtaW5wdXQuYWNlX2NvbXBvc2l0aW9uIHtcCitiYWNrZ3JvdW5kOiAjZjhmOGY4O1wKK2NvbG9y
OiAjMTExO1wKK3otaW5kZXg6IDEwMDA7XAorb3BhY2l0eTogMTtcCitib3JkZXI6IHNvbGlkIGxp
Z2h0Z3JheSAxcHg7XAorbWFyZ2luOiAtMXB4O1wKK3BhZGRpbmc6IDAgMXB4O1wKK31cCisuYWNl
X2xheWVyIHtcCit6LWluZGV4OiAxO1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdzog
aGlkZGVuO1wKK3doaXRlLXNwYWNlOiBub3dyYXA7XAoraGVpZ2h0OiAxMDAlO1wKK3dpZHRoOiAx
MDAlO1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCisvKiBzZXR0aW5nIHBvaW50
ZXItZXZlbnRzOiBhdXRvOyBvbiBub2RlIHVuZGVyIHRoZSBtb3VzZSwgd2hpY2ggY2hhbmdlc1wK
K2R1cmluZyBzY3JvbGwsIHdpbGwgYnJlYWsgbW91c2Ugd2hlZWwgc2Nyb2xsaW5nIGluIFNhZmFy
aSAqL1wKK3BvaW50ZXItZXZlbnRzOiBub25lO1wKK31cCisuYWNlX2d1dHRlci1sYXllciB7XAor
cG9zaXRpb246IHJlbGF0aXZlO1wKK3dpZHRoOiBhdXRvO1wKK3RleHQtYWxpZ246IHJpZ2h0O1wK
K3BvaW50ZXItZXZlbnRzOiBhdXRvO1wKK31cCisuYWNlX3RleHQtbGF5ZXIge1wKK2NvbG9yOiBi
bGFjaztcCitmb250OiBpbmhlcml0ICFpbXBvcnRhbnQ7XAorfVwKKy5hY2VfY2prIHtcCitkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7XAordGV4dC1hbGlnbjogY2VudGVyO1wKK31cCisuYWNlX2N1cnNv
ci1sYXllciB7XAorei1pbmRleDogNDtcCit9XAorLmFjZV9jdXJzb3Ige1wKK3otaW5kZXg6IDQ7
XAorcG9zaXRpb246IGFic29sdXRlO1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCist
d2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtc
Cit9XAorLmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7XAorb3BhY2l0eTogMC4yO1wK
K31cCisuYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XAorLW1vei10cmFuc2l0aW9u
OiBvcGFjaXR5IDAuMThzO1wKKy13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCist
by10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzO1wKKy1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAu
MThzO1wKK3RyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorfVwKKy5hY2VfY3Vyc29yW3N0eWxl
Kj1cIm9wYWNpdHk6IDBcIl17XAorLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9y
bS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT0wKVwiO1wKK31cCisuYWNlX2VkaXRvci5hY2VfbXVs
dGlzZWxlY3QgLmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XAorfVwKKy5h
Y2VfbGluZSB7XAord2hpdGUtc3BhY2U6IG5vd3JhcDtcCit9XAorLmFjZV9tYXJrZXItbGF5ZXIg
LmFjZV9zdGVwIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRleDogMztcCit9XAorLmFj
ZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6
LWluZGV4OiA1O1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKK3Bvc2l0
aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4OiA2O1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNl
X2FjdGl2ZS1saW5lIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRleDogMjtcCit9XAor
LmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCitwb3NpdGlvbjogYWJzb2x1
dGU7XAorei1pbmRleDogNDtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtp
dC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorfVwK
Ky5hY2VfbGluZSAuYWNlX2ZvbGQge1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCist
d2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtc
CitkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XAoraGVpZ2h0OiAxMXB4O1wKK21hcmdpbi10b3A6IC0y
cHg7XAordmVydGljYWwtYWxpZ246IG1pZGRsZTtcCitiYWNrZ3JvdW5kLWltYWdlOlwKK3VybChc
ImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAl
MDAlMTElMDAlMDAlMDAlMDklMDglMDYlMDAlMDAlMDAlRDQlRTglQzclMEMlMDAlMDAlMDMlMUVp
Q0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUx
JThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0l
NUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDkl
ODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5
JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVD
MiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBG
JUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTEl
RjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUl
QzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMy
JTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIu
JThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlC
JUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUz
Rl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTgl
RURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVF
RCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVC
QSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVF
NXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMz
JUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUy
MkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUl
NUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVE
JUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIl
MEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0Yy
JTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQl
QzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJk
JUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQicl
MDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIl
MjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVC
JUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVC
MiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVF
RiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBD
SSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVD
MyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUl
REIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIl
MUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5
JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEz
JTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwJUI1SURBVCglMTUlQTUlOTElM0QlMEUlMDIhJTEwJTg1
YWMlRTElMDUlRDYlQ0UlRDYlQzYlQ0UlRDIlRTglRUQlQ0QlREUlQzAlQzYlRDZOLiVFMFYlRjgl
M0QlOUNhJTg5MVhIJUMyJUJFJUQ5eSUzRiU5MCElRTYlOUMlQzMlQkZrJUU1JTAxMSVDNi0lRjUl
QzhOJTA0JURGJUJEJUZGJTg5JURGdCU4M0ROJTYwJTNFJUYzJUFCJUEwJURFJTFBJTVEZyVCRSUx
MFElOTclMUIlNDAlOUMlQThvJTEwJThGJTVFJTgyOCVCNCUxQiU2MCU4NyVGNiUwMiUyNiU4NSUx
Q2glMUUlQzElMkIlNUJrJUZGJTg2JUVFJUI3aiUwOSU5QSVEQSU5QiVBQ2UlQTMlRjklRUMlREEh
OSVCNCVENSVBNiU4MSU4NiU4NiU5OCVDQyUzQyU1QiU0MCVGQSU4MSVCMyVFOSVDQiUyMyU5NCVD
MTZBem8lMDUlRDQlRTElQzElOTVhJTNCJThBJyVBMCVFOCVDQyUxNyUyMiU4NSUxRCVCQSUwMCVB
MiVGQSVEQyUwQSU5NCVEMSVEMSU4RCU4QiUzQSU4NCUxN0IlQzclNjAlMUElMjVaJUZDJThEJTAw
JTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIiksXAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5H
JTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUwMDclMDglMDYl
MDAlMDAlMDAlQzQlREQlODBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAx
JTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMl
OUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4
Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMl
ODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVF
JUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUl
MUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZs
dCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVkl
QTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4
MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAl
RjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMl
RjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdD
JThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+
QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJD
YlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVF
MyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNF
JUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0
JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVF
MCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkz
JTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1
JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3
RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNB
TyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYw
JTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUz
RSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAx
Q1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUw
NyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUz
JUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIx
eiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNq
SiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThG
JUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVC
NlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUx
NyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURC
YyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFB
JUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAw
JTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCUz
QUlEQVQ4JTExYyVGQyVGRiVGRiU3RiUxOCUwMyUxQSU2MCUwMSVGMiUzRiVBMCU4OTElODAlMDQl
RkYlMTEtJUY4JTE3JTlCSiVFMiUwNSVCMVpEJTgxdiUyNnQlRTclODAlRjglQTMlODJoJUExMiUx
QSUyMCVBMyUwMSUwMiUwRiUwMSVCQSUyNSUwNiUwMCUxOSVDMCUwRCVBRUYlRDUlM0VTJTAwJTAw
JTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCwg
cmVwZWF0LXg7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwgdG9wIGxlZnQ7
XAorY29sb3I6IHRyYW5zcGFyZW50O1wKK2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wKKy1tb3ot
Ym9yZGVyLXJhZGl1czogMnB4O1wKKy13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1wKK2JvcmRl
ci1yYWRpdXM6IDJweDtcCitjdXJzb3I6IHBvaW50ZXI7XAorcG9pbnRlci1ldmVudHM6IGF1dG87
XAorfVwKKy5hY2VfZGFyayAuYWNlX2ZvbGQge1wKK31cCisuYWNlX2ZvbGQ6aG92ZXJ7XAorYmFj
a2dyb3VuZC1pbWFnZTpcCit1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEEl
MDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0
JUU4JUM3JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmsl
RDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVC
QSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3
JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2
JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVol
RDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZD
aE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYl
QUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0
dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4
RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDgl
Q0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZz
JTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFG
OSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVB
RSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGkl
RTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUl
MDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3
RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNB
ViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENh
JTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFD
R3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJD
JTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEz
biVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1
NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4Kmwl
MEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMl
Q0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUl
MjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVD
QyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVC
N28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVE
QiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAw
JTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBP
JTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQl
RTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0
JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1h
JUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3
JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUw
MCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1
JUE1JTkxJTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNE
JURFJUMwJUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlD
JUMzJUJGayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVG
MyVBQiVBMCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQl
MUIlNjAlODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUEl
REElOUIlQUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAl
RkElODElQjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTgl
Q0MlMTclMjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdC
JUM3JTYwJTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFwKK3VybChc
ImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAl
MDAlMDUlMDAlMDAlMDA3JTA4JTA2JTAwJTAwJTAwJUM0JUREJTgwQyUwMCUwMCUwMyUxRWlDQ1BJ
Q0MlMjBQcm9maWxlJTAwJTAweCUwMSU4NVQlREZrJUQzUCUxNCVGRSVEQWUlOUQlQjAlRTElOEIl
M0FnJTExJTA5JTNFaCU5MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVBNiVCNyFIJTlCJUE2bSU1QyU5
QSVDNiUyNCVFRH4lQjAlMDclRDklOEJvJTNBJUM1dyVGMSUwNyUzRSVGOSUwNyUwQyVEOSU4M28l
N0IlOTIlMEQlQzYlMTRhJUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5RSU5QjRNJ1MlMDMlQjklRjcl
QkIlREYlRjklRUU5JyVFNyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJGJTBGJTE0VVNPJUM1JUMyJUZD
JUM0JUU0JTE0JURGJUYyJTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2JTE2SiUyNkclNDAlMEYlRDMl
QjJ5JUVGJUIzJUYzJTBFJTFFJUM2bHQlRUVvJURGJUFCJUZFYyVENSU5QSU5NSUwQyUxMSVGMCUx
QyUyMCVCRSU5NDUlQzQlMjIlRTFZJUEwaSU1QyVENHQlMTMlRTAlRDYlODklRUYlOUQxNSVDMiVD
RExzWCVBNyUwNCUwOSUxRmc4b2MlODElRTElOEMlOEQlMjMlOTZmNDUlNDAlOUElMDklQzIlMDcl
QzVCJTNBSyVCOCU0MDglOThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0JUU0JyUyNiVBOSU5Mi4lOEIl
M0MlQUJFUiUyRiVFNWRFJUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8lQjAlQTglOTQlRTklOUIlQUQl
RTclMTAlOERtJTlBJTE5TiVEMSU3QyU4QSVERSUxRjklN0RwJThDJUU2JTAwJUQ1JUMxJTNGXyUx
OCVCREElQjglOURwWDYlRTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYlQkQlRTclRUV0aSU5OCVFRGUl
OUElOTdZKSUxMiUyNSUxQyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAzJTg5JTlBJUU2JUQzJUVEJUY0
UCU5MiVCMCU5RjQlQkY0M1klRjMlRTMlRURQJTk1JTA0JUVCMSVDNSVGNSVGNktGJUY0JUJBJUJE
JUQ3JURCJTkxJTkzJTA3JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUlQkQlRjclRjVyJThBJUU1eSU5
MiVGMCVFQiVCNCUxRSU4RCVENSVGNCU1QiU5MiUzQVYlREIlREIlRTQlQ0QlQTYlMjMlQzMlQzR3
USUzRiUwM0hCJTgyJThFJTFDZCglRTAlOTFCJTBDYSU5QWMlQzQlQUElRjhMJTE2JTE5JTIySiVB
NCVEMml0VHklQjI4JUQ2JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUwRSVCOCU1RSUxNiVGNSU1QiVC
MiVCOCVGNiVFMCVGQiU5RSVERCUyNSVENyU4RSVCQyUxNSU4NSVDNSVCNyVBMyVEOFElRUQlQjUl
ODElRTklQkElQjIlMTMlOUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5JUU1JTlCJTFCbSVBQiUwQiUw
OFElRkUlOEElRTUlQjFIJTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBTJTk3JUZDdSUwQiVDRjIlOTQl
RUUlMjV2JTEyWCUwQyVCQSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUxNyVDMiU5NyVCRiVENCVDOCVD
RSVERSVBRCUxMSVDQiU4MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVDJTI1JUQyTCVEMiVFQmQlQjgl
QkYlOEElRjVCJUM2JTE4JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4QTklRjIlREFQJTBCJyUwNncl
ODIlRUIlRTYlRTIlNUMlMkYlRDclMDclOUUlQkIlQ0MlNUQlRTElRkElQjklMDglQUQuciUyMyU4
RSVDMiUxNyVGNUUlN0MhJUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVBNyVEQiVCRSVEM2QlRUIlQTMx
WiVFQiVCQiVEMyU5MSVCQSVBMiVCMXolOTQlOEYlREInJUY2JTNEJThFJUFBJTEzJTE5JUIyJUIx
JUJFJUIxflYlMDglMkIlQjQlQTJjakolQjN0TyUwMCUwMyUyNW1OJTk3JUYzJTA1JTkzJUVGJTEx
JTg0JTBCJTdDJTg4JUFFLSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8lOTklMEMlNUUlOTclMENJJUFG
SCVEOS4lQjAlM0IlOEYlRUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVGMypwJUU5JTFCJUZEJUMzJUVC
LjdVJTA2JTVFJTE5JUMwJUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3QyU1RSUyQyVFQiUxNSVEQiUx
RiUzQyU5RSVCNyU4MCU5MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUzRVYlQUIlREJ0LiU1QiUxRSUw
MSVCQiUwRiVBQiVENSU5RiVDRiVBQSVENSVERCVFNyVFNCU3RiUwQnglQTMlRkMlMDYlQTklMjMl
MEElRDYlQzIlQTFfMiUwMCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIlMTMlMDAlMDAlMEIlMTMlMDEl
MDAlOUElOUMlMTglMDAlMDAlMDAzSURBVDglMTFjJUZDJUZGJUZGJTdGJTNFJTAzJTFBJTYwJTAx
JUYyJTNGJUEzJTg5MSU4MCUwNCVGRlElMjYlRjh3JUMwJUI0MyVBMSVEQiUwQyVFMiU4RiUwQSVB
MiU4NSVDQWglODAlOEMlMDYlMDglM0MlMDQlRTglOTYlMTglMDAlQTNTJTBEJUNEJUNGJUQ4JUMx
JTlEJTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5v
LXJlcGVhdCwgcmVwZWF0LXg7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwg
dG9wIGxlZnQ7XAorfVwKKy5hY2VfZWRpdG9yLmFjZV9kcmFnZ2luZyAuYWNlX2NvbnRlbnQge1wK
K2N1cnNvcjogbW92ZTtcCit9XAorLmFjZV9ndXR0ZXItdG9vbHRpcCB7XAorYmFja2dyb3VuZC1j
b2xvcjogI0ZGRjtcCitiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0
byBib3R0b20sIHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAuMSkpO1wKK2JhY2tncm91bmQt
aW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50LCByZ2JhKDAsIDAs
IDAsIDAuMSkpO1wKK2JvcmRlcjogMXB4IHNvbGlkIGdyYXk7XAorYm9yZGVyLXJhZGl1czogMXB4
O1wKK2JveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XAorY29sb3I6IGJs
YWNrO1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCittYXgtd2lkdGg6IDUwMHB4O1wKK3BhZGRp
bmc6IDRweDtcCitwb3NpdGlvbjogZml4ZWQ7XAorei1pbmRleDogMzAwO1wKKy1tb3otYm94LXNp
emluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94
LXNpemluZzogYm9yZGVyLWJveDtcCitjdXJzb3I6IGRlZmF1bHQ7XAord2hpdGUtc3BhY2U6IHBy
ZS1saW5lO1wKK3dvcmQtd3JhcDogYnJlYWstd29yZDtcCitsaW5lLWhlaWdodDogbm9ybWFsO1wK
K2ZvbnQtc3R5bGU6IG5vcm1hbDtcCitmb250LXdlaWdodDogbm9ybWFsO1wKK2xldHRlci1zcGFj
aW5nOiBub3JtYWw7XAorfVwKKy5hY2VfZm9sZGluZy1lbmFibGVkID4gLmFjZV9ndXR0ZXItY2Vs
bCB7XAorcGFkZGluZy1yaWdodDogMTNweDtcCit9XAorLmFjZV9mb2xkLXdpZGdldCB7XAorLW1v
ei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJv
eDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK21hcmdpbjogMCAtMTJweCAwIDFweDtcCitk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7XAord2lkdGg6IDExcHg7XAordmVydGljYWwtYWxpZ246IHRv
cDtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEEl
MUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAw
JTAwJThEbyUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQWUlOEElQjElMEQlMDAwJTBDJUMyJUYyJTJD
SyU5NiVCQyVEMCU4RjklODElODhIJUU5JUQwJTBFJTk2JUMwJTEwJTkyJTNFJTAyJTgwJTVFJTgy
JUU0JUE5Ki0lRUVzdyVDOCVDQyUxMSVFRSU5NnclRDglREMlRTkqRWglMEMlMTUxKCUwMCUwMCUw
MCUwMElFTkQlQUVCJTYwJTgyXCIpO1wKK2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XAor
YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1wKK2JvcmRlci1yYWRpdXM6IDNweDtcCitib3Jk
ZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcCit9XAorLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5k
IHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEEl
MUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAw
JTAwJThEbyUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQW0lQzclQzElMDklMDAwJTA4QyVEMSU4QyVF
Q0UlQzhFKCU4RSVFQyUwMiklMUVaSiVGMSVDMSclMDQlMDdJJUUxJUU1JUVFJUNBTCVGNSVBMiU5
OSU5OSUyMiVFMiVENiUxRlUlQjUlRkUwJUQ5eCVBNyUyNld6NSUwRSVENSUwMCUwMCUwMCUwMElF
TkQlQUVCJTYwJTgyXCIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWQge1wKK2Jh
Y2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUw
MCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDMlMDAlMDAlMDAlMDYlMDglMDYlMDAlMDAlMDAlMDYl
RTUlMjQlMEMlMDAlMDAlMDA5SURBVHglREE1JUNBJUMxJTA5JTAwMCUwOCUwMyVDMCVBQyooJTNF
JTA0JUMxJTBEJUJBJUIxJTIzJUE0VWglRTAlMjAlODElQzAlQ0MlRjglODIlODElQUElQTIlQUFy
R2ZyJTg4JTA4JTExJTExJTFDJUREJTdEJUUwJUVFJTVCJUY2JUY2JUNCJUI4JTA1USUyRiVFOXRh
aSVEOSUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0
OmhvdmVyIHtcCitib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMyk7XAorYmFja2dy
b3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKKy1tb3otYm94LXNoYWRvdzog
MCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCistd2Via2l0LWJveC1zaGFkb3c6
IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XAorYm94LXNoYWRvdzogMCAxcHgg
MXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCit9XAorLmFjZV9mb2xkLXdpZGdldDphY3Rp
dmUge1wKK2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40KTtcCitiYWNrZ3JvdW5k
LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1wKKy1tb3otYm94LXNoYWRvdzogMCAxcHggMXB4
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcCistd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFw
eCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XAorYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC44KTtcCit9XAorLyoqXAorKiBEYXJrIHZlcnNpb24gZm9yIGZvbGQg
d2lkZ2V0c1wKKyovXAorLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQge1wKK2JhY2tncm91bmQt
aW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFIa2xFUVZRSVcyUDQvLzgvQXpvR0VRN29HQ2FMTEFo
V2lTd0IxNDZCQVFDU1RQWW9jcVQwQUFBQUFFbEZUa1N1UW1DQ1wiKTtcCit9XAorLmFjZV9kYXJr
IC5hY2VfZm9sZC13aWRnZXQuYWNlX2VuZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0
YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFB
Q05ieWJsQUFBQUgwbEVRVlFJVzJQNC8vOC9BeFE3d05qSUFqRE1nQzRBeGpDVktCaXJJQUFGMGt6
MnJsaHhwQUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCit9XAorLmFjZV9kYXJrIC5hY2VfZm9sZC13
aWRnZXQuYWNlX2Nsb3NlZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9w
bmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFGQ0FZQUFBQ0FjVmFpQUFB
QUhFbEVRVlFJVzJQNC8vKy9BeEF6Z0RBRGxPT0F6bkhBS2dQV0F3QVJqaThVSURUZlFRQUFBQUJK
UlU1RXJrSmdnZz09XCIpO1wKK31cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7
XAorYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCitiYWNr
Z3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XAorfVwKKy5hY2VfZGFyayAu
YWNlX2ZvbGQtd2lkZ2V0OmFjdGl2ZSB7XAorLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdi
YSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKKy13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJn
YmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCitib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9pbnZhbGlkIHtcCiti
YWNrZ3JvdW5kLWNvbG9yOiAjRkZCNEI0O1wKK2JvcmRlci1jb2xvcjogI0RFNTU1NTtcCit9XAor
LmFjZV9mYWRlLWZvbGQtd2lkZ2V0cyAuYWNlX2ZvbGQtd2lkZ2V0IHtcCistbW96LXRyYW5zaXRp
b246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKKy13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0
eSAwLjRzIGVhc2UgMC4wNXM7XAorLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4w
NXM7XAorLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKK3RyYW5zaXRp
b246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKK29wYWNpdHk6IDA7XAorfVwKKy5hY2VfZmFk
ZS1mb2xkLXdpZGdldHM6aG92ZXIgLmFjZV9mb2xkLXdpZGdldCB7XAorLW1vei10cmFuc2l0aW9u
OiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAorLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5
IDAuMDVzIGVhc2UgMC4wNXM7XAorLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAu
MDVzO1wKKy1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAordHJhbnNp
dGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wKK29wYWNpdHk6MTtcCit9XAorLmFjZV91
bmRlcmxpbmUge1wKK3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKK31cCisuYWNlX2JvbGQg
e1wKK2ZvbnQtd2VpZ2h0OiBib2xkO1wKK31cCisuYWNlX25vYm9sZCAuYWNlX2JvbGQge1wKK2Zv
bnQtd2VpZ2h0OiBub3JtYWw7XAorfVwKKy5hY2VfaXRhbGljIHtcCitmb250LXN0eWxlOiBpdGFs
aWM7XAorfVwKKyI7CisKK2RvbS5pbXBvcnRDc3NTdHJpbmcoZWRpdG9yQ3NzLCAiYWNlX2VkaXRv
ciIpOworCit2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkg
eworICAgIHZhciBfc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5l
ciB8fCBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRD
dXJzb3IgPSAhdXNlcmFnZW50LmlzSUU7CisKKyAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250
YWluZXIsICJhY2VfZWRpdG9yIik7CisKKyAgICB0aGlzLnNldFRoZW1lKHRoZW1lKTsKKworICAg
IHRoaXMuJGd1dHRlciA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLiRndXR0
ZXIuY2xhc3NOYW1lID0gImFjZV9ndXR0ZXIiOworICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENo
aWxkKHRoaXMuJGd1dHRlcik7CisKKyAgICB0aGlzLnNjcm9sbGVyID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxlciI7
CisgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxlcik7CisKKyAgICB0
aGlzLmNvbnRlbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5jb250ZW50
LmNsYXNzTmFtZSA9ICJhY2VfY29udGVudCI7CisgICAgdGhpcy5zY3JvbGxlci5hcHBlbmRDaGls
ZCh0aGlzLmNvbnRlbnQpOworCisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKHRydWUp
OworICAgIHRoaXMuJGd1dHRlckxheWVyID0gbmV3IEd1dHRlckxheWVyKHRoaXMuJGd1dHRlcik7
CisgICAgdGhpcy4kZ3V0dGVyTGF5ZXIub24oImNoYW5nZUd1dHRlcldpZHRoIiwgdGhpcy5vbkd1
dHRlclJlc2l6ZS5iaW5kKHRoaXMpKTsKKworICAgIHRoaXMuJG1hcmtlckJhY2sgPSBuZXcgTWFy
a2VyTGF5ZXIodGhpcy5jb250ZW50KTsKKworICAgIHZhciB0ZXh0TGF5ZXIgPSB0aGlzLiR0ZXh0
TGF5ZXIgPSBuZXcgVGV4dExheWVyKHRoaXMuY29udGVudCk7CisgICAgdGhpcy5jYW52YXMgPSB0
ZXh0TGF5ZXIuZWxlbWVudDsKKworICAgIHRoaXMuJG1hcmtlckZyb250ID0gbmV3IE1hcmtlckxh
eWVyKHRoaXMuY29udGVudCk7CisKKyAgICB0aGlzLiRjdXJzb3JMYXllciA9IG5ldyBDdXJzb3JM
YXllcih0aGlzLmNvbnRlbnQpOworICAgIHRoaXMuJGhvcml6U2Nyb2xsID0gZmFsc2U7CisgICAg
dGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICB0aGlzLiRhbmlt
YXRlZFNjcm9sbCA9IGZhbHNlOworCisgICAgdGhpcy5zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFy
KHRoaXMuY29udGFpbmVyKTsKKyAgICB0aGlzLnNjcm9sbEJhci5hZGRFdmVudExpc3RlbmVyKCJz
Y3JvbGwiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICghX3NlbGYuJGluU2Nyb2xsQW5pbWF0
aW9uKQorICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoZS5kYXRhKTsKKyAg
ICB9KTsKKworICAgIHRoaXMuc2Nyb2xsVG9wID0gMDsKKyAgICB0aGlzLnNjcm9sbExlZnQgPSAw
OworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5zY3JvbGxlciwgInNjcm9sbCIsIGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9zZWxmLnNjcm9sbGVyLnNjcm9sbExl
ZnQ7CisgICAgICAgIF9zZWxmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICBfc2Vs
Zi5zZXNzaW9uLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7CisgICAgfSk7CisKKyAgICB0aGlz
LmN1cnNvclBvcyA9IHsKKyAgICAgICAgcm93IDogMCwKKyAgICAgICAgY29sdW1uIDogMAorICAg
IH07CisKKyAgICB0aGlzLiR0ZXh0TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ2hhcmFj
dGVyU2l6ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICBfc2VsZi51cGRhdGVDaGFyYWN0ZXJTaXpl
KCk7CisgICAgICAgIF9zZWxmLm9uUmVzaXplKHRydWUpOworICAgIH0pOworCisgICAgdGhpcy4k
c2l6ZSA9IHsKKyAgICAgICAgd2lkdGg6IDAsCisgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAg
c2Nyb2xsZXJIZWlnaHQ6IDAsCisgICAgICAgIHNjcm9sbGVyV2lkdGg6IDAKKyAgICB9OworCisg
ICAgdGhpcy5sYXllckNvbmZpZyA9IHsKKyAgICAgICAgd2lkdGggOiAxLAorICAgICAgICBwYWRk
aW5nIDogMCwKKyAgICAgICAgZmlyc3RSb3cgOiAwLAorICAgICAgICBmaXJzdFJvd1NjcmVlbjog
MCwKKyAgICAgICAgbGFzdFJvdyA6IDAsCisgICAgICAgIGxpbmVIZWlnaHQgOiAxLAorICAgICAg
ICBjaGFyYWN0ZXJXaWR0aCA6IDEsCisgICAgICAgIG1pbkhlaWdodCA6IDEsCisgICAgICAgIG1h
eEhlaWdodCA6IDEsCisgICAgICAgIG9mZnNldCA6IDAsCisgICAgICAgIGhlaWdodCA6IDEKKyAg
ICB9OworCisgICAgdGhpcy4kbG9vcCA9IG5ldyBSZW5kZXJMb29wKAorICAgICAgICB0aGlzLiRy
ZW5kZXJDaGFuZ2VzLmJpbmQodGhpcyksCisgICAgICAgIHRoaXMuY29udGFpbmVyLm93bmVyRG9j
dW1lbnQuZGVmYXVsdFZpZXcKKyAgICApOworICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5D
SEFOR0VfRlVMTCk7CisKKyAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUoKTsKKyAgICB0aGlz
LnNldFBhZGRpbmcoNCk7Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zaG93R3V0dGVy
ID0gdHJ1ZTsKKworICAgIHRoaXMuQ0hBTkdFX0NVUlNPUiA9IDE7CisgICAgdGhpcy5DSEFOR0Vf
TUFSS0VSID0gMjsKKyAgICB0aGlzLkNIQU5HRV9HVVRURVIgPSA0OworICAgIHRoaXMuQ0hBTkdF
X1NDUk9MTCA9IDg7CisgICAgdGhpcy5DSEFOR0VfTElORVMgPSAxNjsKKyAgICB0aGlzLkNIQU5H
RV9URVhUID0gMzI7CisgICAgdGhpcy5DSEFOR0VfU0laRSA9IDY0OworICAgIHRoaXMuQ0hBTkdF
X01BUktFUl9CQUNLID0gMTI4OworICAgIHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCA9IDI1NjsK
KyAgICB0aGlzLkNIQU5HRV9GVUxMID0gNTEyOworICAgIHRoaXMuQ0hBTkdFX0hfU0NST0xMID0g
MTAyNDsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICAKKyAg
ICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRo
aXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250cyAhPSB0aGlzLiRhbGxvd0JvbGRGb250cykgewor
ICAgICAgICAgICAgdGhpcy4kYWxsb3dCb2xkRm9udHMgPSB0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dC
b2xkRm9udHM7CisgICAgICAgICAgICB0aGlzLnNldFN0eWxlKCJhY2Vfbm9ib2xkIiwgIXRoaXMu
JGFsbG93Qm9sZEZvbnRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5jaGFy
YWN0ZXJXaWR0aCA9IHRoaXMuJHRleHRMYXllci5nZXRDaGFyYWN0ZXJXaWR0aCgpOworICAgICAg
ICB0aGlzLmxpbmVIZWlnaHQgPSB0aGlzLiR0ZXh0TGF5ZXIuZ2V0TGluZUhlaWdodCgpOworICAg
ICAgICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07CisgICAgdGhpcy5zZXRTZXNz
aW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9u
OworICAgICAgICAKKyAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSAiYWNlX3Njcm9s
bGVyIjsKKyAgICAgICAgCisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vz
c2lvbik7CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAg
ICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhp
cy4kZ3V0dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kdGV4dExh
eWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhp
cy5DSEFOR0VfRlVMTCk7CisgICAgICAgIAorICAgIH07CisgICAgdGhpcy51cGRhdGVMaW5lcyA9
IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmIChsYXN0Um93ID09PSB1
bmRlZmluZWQpCisgICAgICAgICAgICBsYXN0Um93ID0gSW5maW5pdHk7CisKKyAgICAgICAgaWYg
KCF0aGlzLiRjaGFuZ2VkTGluZXMpIHsKKyAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcyA9
IHsKKyAgICAgICAgICAgICAgICBmaXJzdFJvdzogZmlyc3RSb3csCisgICAgICAgICAgICAgICAg
bGFzdFJvdzogbGFzdFJvdworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPiBmaXJzdFJv
dykKKyAgICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPSBmaXJzdFJv
dzsKKworICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93IDwgbGFzdFJv
dykKKyAgICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA9IGxhc3RSb3c7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmly
c3RSb3cgPiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJGNo
YW5nZWRMaW5lcy5sYXN0Um93IDwgdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9MSU5F
Uyk7CisgICAgfTsKKworICAgIHRoaXMub25DaGFuZ2VUYWJTaXplID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCB8IHRoaXMuQ0hBTkdF
X01BUktFUik7CisgICAgICAgIHRoaXMuJHRleHRMYXllci5vbkNoYW5nZVRhYlNpemUoKTsKKyAg
ICB9OworICAgIHRoaXMudXBkYXRlVGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRs
b29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAgIH07CisgICAgdGhpcy51cGRhdGVG
dWxsID0gZnVuY3Rpb24oZm9yY2UpIHsKKyAgICAgICAgaWYgKGZvcmNlKXsKKyAgICAgICAgICAg
IHRoaXMuJHJlbmRlckNoYW5nZXModGhpcy5DSEFOR0VfRlVMTCwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0ZVTEwpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUZvbnRTaXplID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJHRleHRMYXllci5jaGVja0ZvclNpemVDaGFuZ2Vz
KCk7CisgICAgfTsKKyAgICB0aGlzLm9uUmVzaXplID0gZnVuY3Rpb24oZm9yY2UsIGd1dHRlcldp
ZHRoLCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy5DSEFOR0Vf
U0laRTsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplOworCisgICAgICAgIGlmICh0aGlz
LnJlc2l6aW5nID4gMikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZSBpZiAodGhp
cy5yZXNpemluZyA+IDEpCisgICAgICAgICAgICB0aGlzLnJlc2l6aW5nKys7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRoaXMucmVzaXppbmcgPSBmb3JjZSA/IDEgOiAwOworICAgICAgICBp
ZiAoIWhlaWdodCkKKyAgICAgICAgICAgIGhlaWdodCA9IGRvbS5nZXRJbm5lckhlaWdodCh0aGlz
LmNvbnRhaW5lcik7CisKKyAgICAgICAgaWYgKGhlaWdodCAmJiAoZm9yY2UgfHwgc2l6ZS5oZWln
aHQgIT0gaGVpZ2h0KSkgeworICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7CisKKyAg
ICAgICAgICAgIHNpemUuc2Nyb2xsZXJIZWlnaHQgPSB0aGlzLnNjcm9sbGVyLmNsaWVudEhlaWdo
dDsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldEhlaWdodChzaXplLnNjcm9sbGVySGVp
Z2h0KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikgeworICAgICAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5nZXRTY3JvbGxUb3AoKSk7CisgICAgICAg
ICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXMgfCB0aGlzLkNIQU5HRV9GVUxMOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRo
ID0gZG9tLmdldElubmVyV2lkdGgodGhpcy5jb250YWluZXIpOworCisgICAgICAgIGlmICh3aWR0
aCAmJiAoZm9yY2UgfHwgdGhpcy5yZXNpemluZyA+IDEgfHwgc2l6ZS53aWR0aCAhPSB3aWR0aCkp
IHsKKyAgICAgICAgICAgIHNpemUud2lkdGggPSB3aWR0aDsKKworICAgICAgICAgICAgdmFyIGd1
dHRlcldpZHRoID0gdGhpcy5zaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoIDog
MDsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsg
InB4IjsKKyAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRo
IC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpKTsKKyAgICAgICAgICAg
IHRoaXMuc2Nyb2xsZXIuc3R5bGUucmlnaHQgPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpICsg
InB4IjsKKworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYm
IHRoaXMuYWRqdXN0V3JhcExpbWl0KCkgfHwgZm9yY2UpCisgICAgICAgICAgICAgICAgY2hhbmdl
cyA9IGNoYW5nZXMgfCB0aGlzLkNIQU5HRV9GVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGZvcmNlKQorICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzLCB0cnVlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZShjaGFuZ2VzKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChmb3JjZSkKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJl
c2l6aW5nOworICAgIH07CisKKyAgICB0aGlzLm9uR3V0dGVyUmVzaXplID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuJHNpemUud2lkdGg7CisgICAgICAgIHZhciBndXR0
ZXJXaWR0aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7
CisgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsK
KyAgICAgICAgdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggLSBn
dXR0ZXJXaWR0aCAtIHRoaXMuc2Nyb2xsQmFyLmdldFdpZHRoKCkpOworCisgICAgICAgIGlmICh0
aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLmFkanVzdFdyYXBMaW1pdCgpKQor
ICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICB9
OworICAgIHRoaXMuYWRqdXN0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBh
dmFpbGFibGVXaWR0aCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHRoaXMuJHBhZGRpbmcg
KiAyOworICAgICAgICB2YXIgbGltaXQgPSBNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoIC8gdGhp
cy5jaGFyYWN0ZXJXaWR0aCk7CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uYWRqdXN0V3Jh
cExpbWl0KGxpbWl0KTsKKyAgICB9OworICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5j
dGlvbihzaG91bGRBbmltYXRlKXsKKyAgICAgICAgdGhpcy4kYW5pbWF0ZWRTY3JvbGwgPSBzaG91
bGRBbmltYXRlOworICAgIH07CisgICAgdGhpcy5nZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4kYW5pbWF0ZWRTY3JvbGw7CisgICAgfTsKKyAgICB0
aGlzLnNldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oc2hvd0ludmlzaWJsZXMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcykp
CisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAg
IH07CisgICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzOworICAgIH07CisKKyAgICB0aGlz
LmdldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJHRleHRMYXllci5kaXNwbGF5SW5kZW50R3VpZGVzOworICAgIH07CisgICAgCisgICAgdGhp
cy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgeworICAgICAgICBp
ZiAodGhpcy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoZGlzcGxheSkpCisgICAg
ICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAgIH07Cisg
ICAgCisgICAgdGhpcy4kc2hvd1ByaW50TWFyZ2luID0gdHJ1ZTsKKyAgICB0aGlzLnNldFNob3dQ
cmludE1hcmdpbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikgeworICAgICAgICB0aGlzLiRz
aG93UHJpbnRNYXJnaW4gPSBzaG93UHJpbnRNYXJnaW47CisgICAgICAgIHRoaXMuJHVwZGF0ZVBy
aW50TWFyZ2luKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2luOworICAgIH07CisK
KyAgICB0aGlzLiRwcmludE1hcmdpbkNvbHVtbiA9IDgwOworICAgIHRoaXMuc2V0UHJpbnRNYXJn
aW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKKyAgICAgICAgdGhpcy4kcHJp
bnRNYXJnaW5Db2x1bW4gPSBzaG93UHJpbnRNYXJnaW47CisgICAgICAgIHRoaXMuJHVwZGF0ZVBy
aW50TWFyZ2luKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbjsKKyAgICB9
OworICAgIHRoaXMuZ2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiB0
aGlzLnNob3dHdXR0ZXI7CisgICAgfTsKKyAgICB0aGlzLnNldFNob3dHdXR0ZXIgPSBmdW5jdGlv
bihzaG93KXsKKyAgICAgICAgaWYodGhpcy5zaG93R3V0dGVyID09PSBzaG93KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aGlzLiRndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAi
YmxvY2siIDogIm5vbmUiOworICAgICAgICB0aGlzLnNob3dHdXR0ZXIgPSBzaG93OworICAgICAg
ICB0aGlzLm9uUmVzaXplKHRydWUpOworICAgIH07CisKKyAgICB0aGlzLmdldEZhZGVGb2xkV2lk
Z2V0cyA9IGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBkb20uaGFzQ3NzQ2xhc3ModGhpcy4k
Z3V0dGVyLCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7CisgICAgfTsKKworICAgIHRoaXMuc2V0
RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAgICAgICBpZiAoc2hvdykKKyAg
ICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsICJhY2VfZmFkZS1mb2xkLXdp
ZGdldHMiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRo
aXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOworICAgIH07CisKKyAgICB0aGlz
LiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gZmFsc2U7CisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0
ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRo
aWdobGlnaHRHdXR0ZXJMaW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IHNob3VsZEhpZ2hsaWdodDsK
KworICAgICAgICBpZiAoIXRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAg
IHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LmNsYXNzTmFtZSA9ICJhY2VfZ3V0
dGVyLWFjdGl2ZS1saW5lIjsKKyAgICAgICAgICAgIHRoaXMuJGd1dHRlci5hcHBlbmRDaGlsZCh0
aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUuZGlzcGxheSA9IHNo
b3VsZEhpZ2hsaWdodCA/ICIiIDogIm5vbmUiOworICAgICAgICBpZiAodGhpcy4kY3Vyc29yTGF5
ZXIuJHBpeGVsUG9zKQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdo
dCgpOworICAgIH07CisKKyAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU7CisgICAgfTsK
KworICAgIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS50b3AgPSB0aGlzLiRjdXJzb3JM
YXllci4kcGl4ZWxQb3MudG9wIC0gdGhpcy5sYXllckNvbmZpZy5vZmZzZXQgKyAicHgiOworICAg
ICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmhlaWdodCA9IHRoaXMubGF5ZXJD
b25maWcubGluZUhlaWdodCArICJweCI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLiR1cGRhdGVQ
cmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJHNob3dQcmludE1h
cmdpbiAmJiAhdGhpcy4kcHJpbnRNYXJnaW5FbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoIXRoaXMuJHByaW50TWFyZ2luRWwpIHsKKyAgICAgICAgICAgIHZhciBjb250YWlu
ZXJFbCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lckVs
LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX3ByaW50LW1hcmdpbi1sYXllciI7CisgICAgICAg
ICAgICB0aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
ICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5FbC5jbGFzc05hbWUgPSAiYWNlX3ByaW50LW1hcmdp
biI7CisgICAgICAgICAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZCh0aGlzLiRwcmludE1hcmdp
bkVsKTsKKyAgICAgICAgICAgIHRoaXMuY29udGVudC5pbnNlcnRCZWZvcmUoY29udGFpbmVyRWws
IHRoaXMuY29udGVudC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdHls
ZSA9IHRoaXMuJHByaW50TWFyZ2luRWwuc3R5bGU7CisgICAgICAgIHN0eWxlLmxlZnQgPSAoKHRo
aXMuY2hhcmFjdGVyV2lkdGggKiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbikgKyB0aGlzLiRwYWRk
aW5nKSArICJweCI7CisgICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLiRzaG93UHJpbnRN
YXJnaW4gPyAidmlzaWJsZSIgOiAiaGlkZGVuIjsKKyAgICB9OworICAgIHRoaXMuZ2V0Q29udGFp
bmVyRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7
CisgICAgfTsKKyAgICB0aGlzLmdldE1vdXNlRXZlbnRUYXJnZXQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuY29udGVudDsKKyAgICB9OworICAgIHRoaXMuZ2V0VGV4dEFyZWFD
b250YWluZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwor
ICAgIH07CisgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7CisgICAgICAgIHZhciBw
b3NUb3AgPSB0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MudG9wOworICAgICAgICB2YXIgcG9z
TGVmdCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy5sZWZ0OworICAgICAgICBwb3NUb3Ag
LT0gY29uZmlnLm9mZnNldDsKKworICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBj
b25maWcuaGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciB3ID0gdGhpcy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgaWYgKHRoaXMuJGNv
bXBvc2l0aW9uKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy50ZXh0YXJlYS52YWx1ZS5y
ZXBsYWNlKC9eXHgwMSsvLCAiIik7CisgICAgICAgICAgICB3ICo9IHRoaXMuc2Vzc2lvbi4kZ2V0
U3RyaW5nU2NyZWVuV2lkdGgodmFsKVswXTsKKyAgICAgICAgfQorICAgICAgICBwb3NMZWZ0IC09
IHRoaXMuc2Nyb2xsTGVmdDsKKyAgICAgICAgaWYgKHBvc0xlZnQgPiB0aGlzLiRzaXplLnNjcm9s
bGVyV2lkdGggLSB3KQorICAgICAgICAgICAgcG9zTGVmdCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJX
aWR0aCAtIHc7CisKKyAgICAgICAgcG9zTGVmdCAtPSB0aGlzLnNjcm9sbEJhci53aWR0aDsKKwor
ICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRoaXMubGluZUhlaWdodCArICJw
eCI7CisgICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUud2lkdGggPSB3ICsgInB4IjsKKyAgICAg
ICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5yaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAt
IHBvc0xlZnQgLSB3ICsgInB4IjsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5ib3R0b20g
PSB0aGlzLiRzaXplLmhlaWdodCAtIHBvc1RvcCAtIHRoaXMubGluZUhlaWdodCArICJweCI7Cisg
ICAgfTsKKyAgICB0aGlzLmdldEZpcnN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdzsKKyAgICB9OworICAgIHRoaXMuZ2V0
Rmlyc3RGdWxseVZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
bGF5ZXJDb25maWcuZmlyc3RSb3cgKyAodGhpcy5sYXllckNvbmZpZy5vZmZzZXQgPT09IDAgPyAw
IDogMSk7CisgICAgfTsKKyAgICB0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3cgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGZsaW50ID0gTWF0aC5mbG9vcigodGhpcy5sYXllckNvbmZpZy5o
ZWlnaHQgKyB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCkgLyB0aGlzLmxheWVyQ29uZmlnLmxpbmVI
ZWlnaHQpOworICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyAtIDEgKyBm
bGludDsKKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcubGFzdFJvdzsKKyAgICB9OworCisgICAg
dGhpcy4kcGFkZGluZyA9IG51bGw7CisgICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFk
ZGluZykgeworICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZzsKKyAgICAgICAgdGhpcy4k
dGV4dExheWVyLnNldFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJGN1cnNvckxheWVy
LnNldFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldFBhZGRp
bmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0UGFkZGluZyhwYWRkaW5n
KTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICAg
ICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0SFNjcm9s
bEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhv
cml6U2Nyb2xsQWx3YXlzVmlzaWJsZTsKKyAgICB9OworICAgIHRoaXMuc2V0SFNjcm9sbEJhckFs
d2F5c1Zpc2libGUgPSBmdW5jdGlvbihhbHdheXNWaXNpYmxlKSB7CisgICAgICAgIGlmICh0aGlz
LiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgIT0gYWx3YXlzVmlzaWJsZSkgeworICAgICAgICAg
ICAgdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlID0gYWx3YXlzVmlzaWJsZTsKKyAgICAg
ICAgICAgIGlmICghdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiRob3Jp
elNjcm9sbCkKKyAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdF
X1NDUk9MTCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldElubmVySGVpZ2h0KHRo
aXMubGF5ZXJDb25maWcubWF4SGVpZ2h0KTsKKyAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0U2Ny
b2xsVG9wKHRoaXMuc2Nyb2xsVG9wKTsKKyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyQ2hhbmdl
cyA9IGZ1bmN0aW9uKGNoYW5nZXMsIGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgKCFj
aGFuZ2VzIHx8ICF0aGlzLnNlc3Npb24gfHwgIXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9G
VUxMIHx8CisgICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0laRSB8fAorICAgICAg
ICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwKKyAgICAgICAgICAgIGNoYW5nZXMg
JiB0aGlzLkNIQU5HRV9MSU5FUyB8fAorICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdF
X1NDUk9MTAorICAgICAgICApCisgICAgICAgICAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWco
KTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTCkgeworICAgICAg
ICAgICAgdGhpcy5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OworICAgICAg
ICAgICAgdmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQ7CisgICAgICAg
ICAgICB0aGlzLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICAgICAgdGhpcy5zZXNz
aW9uLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7CisKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xs
ZXIuY2xhc3NOYW1lID0gdGhpcy5zY3JvbGxMZWZ0ID09IDAgPyAiYWNlX3Njcm9sbGVyIiA6ICJh
Y2Vfc2Nyb2xsZXIgYWNlX3Njcm9sbC1sZWZ0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hh
bmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwpIHsKKyAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci5j
aGVja0ZvclNpemVDaGFuZ2VzKCk7CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIo
KTsKKyAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7
CisgICAgICAgICAgICBpZiAodGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMu
JGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMu
JG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4k
bWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4k
Y3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4k
bW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRl
ckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NS
T0xMKSB7CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKKyAgICAgICAgICAg
IGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0Vf
TElORVMpCisgICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVy
Q29uZmlnKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5
ZXIuc2Nyb2xsTGluZXModGhpcy5sYXllckNvbmZpZyk7CisKKyAgICAgICAgICAgIGlmICh0aGlz
LnNob3dHdXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRo
aXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUodGhp
cy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhp
cy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhp
cy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigp
OworICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVH
dXR0ZXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQpIHsKKyAgICAgICAgICAgIHRo
aXMuJHRleHRMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICBpZiAo
dGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0
ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaGFuZ2Vz
ICYgdGhpcy5DSEFOR0VfTElORVMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiR1cGRhdGVMaW5l
cygpIHx8IChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSAmJiB0aGlzLnNob3dHdXR0ZXIp
CisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25m
aWcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9U
RVhUIHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRl
KHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0
aGlzLkNIQU5HRV9DVVJTT1IpIHsKKyAgICAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0
ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vy
c29yKCk7CisgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVw
ZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFu
Z2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCkpIHsK
KyAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8
IHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKSkgeworICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFj
ay51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hh
bmdlcyAmIHRoaXMuQ0hBTkdFX1NJWkUpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxC
YXIoKTsKKyAgICB9OworCisgICAgdGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIHZhciBv
ZmZzZXQgPSB0aGlzLnNjcm9sbFRvcCAlIHRoaXMubGluZUhlaWdodDsKKyAgICAgICAgdmFyIG1p
bkhlaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgKyB0aGlzLmxpbmVIZWlnaHQ7CisK
KyAgICAgICAgdmFyIGxvbmdlc3RMaW5lID0gdGhpcy4kZ2V0TG9uZ2VzdExpbmUoKTsKKworICAg
ICAgICB2YXIgaG9yaXpTY3JvbGwgPSB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgfHwg
dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gbG9uZ2VzdExpbmUgPCAwOworICAgICAgICB2YXIg
aG9yaXpTY3JvbGxDaGFuZ2VkID0gdGhpcy4kaG9yaXpTY3JvbGwgIT09IGhvcml6U2Nyb2xsOwor
ICAgICAgICB0aGlzLiRob3JpelNjcm9sbCA9IGhvcml6U2Nyb2xsOworICAgICAgICBpZiAoaG9y
aXpTY3JvbGxDaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLm92ZXJm
bG93WCA9IGhvcml6U2Nyb2xsID8gInNjcm9sbCIgOiAiaGlkZGVuIjsKKyAgICAgICAgICAgIGlm
ICghaG9yaXpTY3JvbGwpCisgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExl
ZnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1heEhlaWdodCA9IHRoaXMuc2Vzc2lvbi5n
ZXRTY3JlZW5MZW5ndGgoKSAqIHRoaXMubGluZUhlaWdodDsKKyAgICAgICAgdGhpcy5zZXNzaW9u
LnNldFNjcm9sbFRvcChNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLnNjcm9sbFRvcCwgbWF4SGVp
Z2h0IC0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkpKTsKKworICAgICAgICB2YXIgbGluZUNv
dW50ID0gTWF0aC5jZWlsKG1pbkhlaWdodCAvIHRoaXMubGluZUhlaWdodCkgLSAxOworICAgICAg
ICB2YXIgZmlyc3RSb3cgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLnNjcm9sbFRvcCAt
IG9mZnNldCkgLyB0aGlzLmxpbmVIZWlnaHQpKTsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBmaXJz
dFJvdyArIGxpbmVDb3VudDsKKyAgICAgICAgdmFyIGZpcnN0Um93U2NyZWVuLCBmaXJzdFJvd0hl
aWdodDsKKyAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7CisgICAgICAg
IGZpcnN0Um93ID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGZpcnN0Um93LCAwKTsKKyAg
ICAgICAgdmFyIGZvbGRMaW5lID0gc2Vzc2lvbi5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAg
ICAgIGlmIChmb2xkTGluZSkgeworICAgICAgICAgICAgZmlyc3RSb3cgPSBmb2xkTGluZS5zdGFy
dC5yb3c7CisgICAgICAgIH0KKworICAgICAgICBmaXJzdFJvd1NjcmVlbiA9IHNlc3Npb24uZG9j
dW1lbnRUb1NjcmVlblJvdyhmaXJzdFJvdywgMCk7CisgICAgICAgIGZpcnN0Um93SGVpZ2h0ID0g
c2Vzc2lvbi5nZXRSb3dMZW5ndGgoZmlyc3RSb3cpICogbGluZUhlaWdodDsKKworICAgICAgICBs
YXN0Um93ID0gTWF0aC5taW4oc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGxhc3RSb3csIDAp
LCBzZXNzaW9uLmdldExlbmd0aCgpIC0gMSk7CisgICAgICAgIG1pbkhlaWdodCA9IHRoaXMuJHNp
emUuc2Nyb2xsZXJIZWlnaHQgKyBzZXNzaW9uLmdldFJvd0xlbmd0aChsYXN0Um93KSAqIGxpbmVI
ZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSb3dIZWlnaHQ7CisKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgLSBmaXJz
dFJvd1NjcmVlbiAqIGxpbmVIZWlnaHQ7CisKKyAgICAgICAgdGhpcy5sYXllckNvbmZpZyA9IHsK
KyAgICAgICAgICAgIHdpZHRoIDogbG9uZ2VzdExpbmUsCisgICAgICAgICAgICBwYWRkaW5nIDog
dGhpcy4kcGFkZGluZywKKyAgICAgICAgICAgIGZpcnN0Um93IDogZmlyc3RSb3csCisgICAgICAg
ICAgICBmaXJzdFJvd1NjcmVlbjogZmlyc3RSb3dTY3JlZW4sCisgICAgICAgICAgICBsYXN0Um93
IDogbGFzdFJvdywKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgOiBsaW5lSGVpZ2h0LAorICAgICAg
ICAgICAgY2hhcmFjdGVyV2lkdGggOiB0aGlzLmNoYXJhY3RlcldpZHRoLAorICAgICAgICAgICAg
bWluSGVpZ2h0IDogbWluSGVpZ2h0LAorICAgICAgICAgICAgbWF4SGVpZ2h0IDogbWF4SGVpZ2h0
LAorICAgICAgICAgICAgb2Zmc2V0IDogb2Zmc2V0LAorICAgICAgICAgICAgaGVpZ2h0IDogdGhp
cy4kc2l6ZS5zY3JvbGxlckhlaWdodAorICAgICAgICB9OworCisgICAgICAgIHRoaXMuJGd1dHRl
ckxheWVyLmVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gKC1vZmZzZXQpICsgInB4IjsKKyAgICAg
ICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpblRvcCA9ICgtb2Zmc2V0KSArICJweCI7CisgICAg
ICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IGxvbmdlc3RMaW5lICsgMiAqIHRoaXMuJHBh
ZGRpbmcgKyAicHgiOworICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gbWluSGVp
Z2h0ICsgInB4IjsKKyAgICAgICAgaWYgKGhvcml6U2Nyb2xsQ2hhbmdlZCkKKyAgICAgICAgICAg
IHRoaXMub25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZUxpbmVzID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmaXJzdFJvdyA9IHRoaXMuJGNoYW5nZWRMaW5lcy5m
aXJzdFJvdzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJv
dzsKKyAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzID0gbnVsbDsKKworICAgICAgICB2YXIgbGF5
ZXJDb25maWcgPSB0aGlzLmxheWVyQ29uZmlnOworCisgICAgICAgIGlmIChmaXJzdFJvdyA+IGxh
eWVyQ29uZmlnLmxhc3RSb3cgKyAxKSB7IHJldHVybjsgfQorICAgICAgICBpZiAobGFzdFJvdyA8
IGxheWVyQ29uZmlnLmZpcnN0Um93KSB7IHJldHVybjsgfQorICAgICAgICBpZiAobGFzdFJvdyA9
PT0gSW5maW5pdHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAg
ICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTsKKyAgICAgICAg
ICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXll
ckNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworCisgICAgdGhpcy4kZ2V0TG9uZ2VzdExpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGNoYXJDb3VudCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpOworICAgICAgICBpZiAo
dGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzKQorICAgICAgICAgICAgY2hhckNvdW50ICs9
IDE7CisKKyAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAt
IDIgKiB0aGlzLiRwYWRkaW5nLCBNYXRoLnJvdW5kKGNoYXJDb3VudCAqIHRoaXMuY2hhcmFjdGVy
V2lkdGgpKTsKKyAgICB9OworICAgIHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdl
dE1hcmtlcnModHJ1ZSkpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdF
X01BUktFUl9GUk9OVCk7CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUJhY2tNYXJrZXJzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0TWFya2Vycyh0aGlzLnNlc3Np
b24uZ2V0TWFya2VycygpKTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5H
RV9NQVJLRVJfQkFDSyk7CisgICAgfTsKKyAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBm
dW5jdGlvbihyb3csIGNsYXNzTmFtZSl7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLmFkZEd1
dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisgICAgdGhpcy5yZW1vdmVH
dXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICB0aGlz
LiRndXR0ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKKyAg
ICB9OworICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludHMgPSBmdW5jdGlvbihyb3dzKSB7CisgICAg
ICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKKyAgICB9OworICAg
IHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykgeworICAgICAgICB0
aGlzLiRndXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CisgICAgICAgIHRo
aXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKKyAgICB9OworICAgIHRoaXMu
dXBkYXRlQ3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUo
dGhpcy5DSEFOR0VfQ1VSU09SKTsKKyAgICB9OworICAgIHRoaXMuaGlkZUN1cnNvciA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7CisgICAgfTsK
KyAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kY3Vyc29y
TGF5ZXIuc2hvd0N1cnNvcigpOworICAgIH07CisKKyAgICB0aGlzLnNjcm9sbFNlbGVjdGlvbklu
dG9WaWV3ID0gZnVuY3Rpb24oYW5jaG9yLCBsZWFkLCBvZmZzZXQpIHsKKyAgICAgICAgdGhpcy5z
Y3JvbGxDdXJzb3JJbnRvVmlldyhhbmNob3IsIG9mZnNldCk7CisgICAgICAgIHRoaXMuc2Nyb2xs
Q3Vyc29ySW50b1ZpZXcobGVhZCwgb2Zmc2V0KTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsQ3Vy
c29ySW50b1ZpZXcgPSBmdW5jdGlvbihjdXJzb3IsIG9mZnNldCkgeworICAgICAgICBpZiAodGhp
cy4kc2l6ZS5zY3JvbGxlckhlaWdodCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihjdXJzb3Ip
OworCisgICAgICAgIHZhciBsZWZ0ID0gcG9zLmxlZnQ7CisgICAgICAgIHZhciB0b3AgPSBwb3Mu
dG9wOworCisgICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCA+IHRvcCkgeworICAgICAgICAgICAg
aWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICB0b3AgLT0gb2Zmc2V0ICogdGhpcy4kc2l6ZS5z
Y3JvbGxlckhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9w
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xs
ZXJIZWlnaHQgPCB0b3AgKyB0aGlzLmxpbmVIZWlnaHQpIHsKKyAgICAgICAgICAgIGlmIChvZmZz
ZXQpCisgICAgICAgICAgICAgICAgdG9wICs9IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJI
ZWlnaHQ7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCArIHRoaXMu
bGluZUhlaWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7CisKKyAgICAgICAgaWYgKHNj
cm9sbExlZnQgPiBsZWZ0KSB7CisgICAgICAgICAgICBpZiAobGVmdCA8IHRoaXMuJHBhZGRpbmcg
KyAyICogdGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCkKKyAgICAgICAgICAgICAgICBs
ZWZ0ID0gMDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGxlZnQpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgg
PCBsZWZ0ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9u
LnNldFNjcm9sbExlZnQoTWF0aC5yb3VuZChsZWZ0ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCAtIHRo
aXMuJHNpemUuc2Nyb2xsZXJXaWR0aCkpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdl
dFNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdl
dFNjcm9sbFRvcCgpOworICAgIH07CisgICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpOworICAgIH07
CisgICAgdGhpcy5nZXRTY3JvbGxUb3BSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2Nyb2xsVG9wIC8gdGhpcy5saW5lSGVpZ2h0OworICAgIH07CisgICAgdGhpcy5nZXRT
Y3JvbGxCb3R0b21Sb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAs
IE1hdGguZmxvb3IoKHRoaXMuc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkg
LyB0aGlzLmxpbmVIZWlnaHQpIC0gMSk7CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvUm93ID0g
ZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocm93ICog
dGhpcy5saW5lSGVpZ2h0KTsKKyAgICB9OworCisgICAgdGhpcy5hbGlnbkN1cnNvciA9IGZ1bmN0
aW9uKGN1cnNvciwgYWxpZ25tZW50KSB7CisgICAgICAgIGlmICh0eXBlb2YgY3Vyc29yID09ICJu
dW1iZXIiKQorICAgICAgICAgICAgY3Vyc29yID0ge3JvdzogY3Vyc29yLCBjb2x1bW46IDB9Owor
CisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1
cnNvcik7CisgICAgICAgIHZhciBoID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMu
bGluZUhlaWdodDsKKyAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3AgLSBoICogKGFsaWdubWVu
dCB8fCAwKTsKKworICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgfTsKKworICAgIHRoaXMuU1RFUFMgPSA4OworICAg
IHRoaXMuJGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7CisgICAgICAg
IHZhciBpID0gMDsKKyAgICAgICAgdmFyIGwgPSB0aGlzLlNURVBTOworICAgICAgICB2YXIgc3Rl
cHMgPSBbXTsKKworICAgICAgICB2YXIgZnVuYyAgPSBmdW5jdGlvbih0LCB4X21pbiwgZHgpIHsK
KyAgICAgICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWlu
OworICAgICAgICB9OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpCisgICAgICAg
ICAgICBzdGVwcy5wdXNoKGZ1bmMoaSAvIHRoaXMuU1RFUFMsIGZyb21WYWx1ZSwgdG9WYWx1ZSAt
IGZyb21WYWx1ZSkpOworCisgICAgICAgIHJldHVybiBzdGVwczsKKyAgICB9OworICAgIHRoaXMu
c2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykg
eworICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7
cm93OiBsaW5lLCBjb2x1bW46IDB9KTsKKyAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3A7Cisg
ICAgICAgIGlmIChjZW50ZXIpCisgICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3Jv
bGxlckhlaWdodCAvIDI7CisKKyAgICAgICAgdmFyIGluaXRpYWxTY3JvbGwgPSB0aGlzLnNjcm9s
bFRvcDsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpOworICAgICAg
ICBpZiAoYW5pbWF0ZSAhPT0gZmFsc2UpCisgICAgICAgICAgICB0aGlzLmFuaW1hdGVTY3JvbGxp
bmcoaW5pdGlhbFNjcm9sbCwgY2FsbGJhY2spOworICAgIH07CisKKyAgICB0aGlzLmFuaW1hdGVT
Y3JvbGxpbmcgPSBmdW5jdGlvbihmcm9tVmFsdWUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciB0
b1ZhbHVlID0gdGhpcy5zY3JvbGxUb3A7CisgICAgICAgIGlmICh0aGlzLiRhbmltYXRlZFNjcm9s
bCAmJiBNYXRoLmFicyhmcm9tVmFsdWUgLSB0b1ZhbHVlKSA8IDEwMDAwMCkgeworICAgICAgICAg
ICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgICAgIHZhciBzdGVwcyA9IF9zZWxmLiRjYWxj
U3RlcHMoZnJvbVZhbHVlLCB0b1ZhbHVlKTsKKyAgICAgICAgICAgIHRoaXMuJGluU2Nyb2xsQW5p
bWF0aW9uID0gdHJ1ZTsKKworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiR0aW1lcik7
CisKKyAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkp
OworICAgICAgICAgICAgdGhpcy4kdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RlcHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIF9z
ZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOworICAgICAgICAgICAgICAg
ICAgICBfc2VsZi5zZXNzaW9uLiRzY3JvbGxUb3AgPSB0b1ZhbHVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodG9WYWx1ZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF9zZWxm
LnNlc3Npb24uJHNjcm9sbFRvcCA9IC0xOworICAgICAgICAgICAgICAgICAgICBfc2VsZi5zZXNz
aW9uLnNldFNjcm9sbFRvcCh0b1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9WYWx1ZSA9
IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX3Nl
bGYuJHRpbWVyID0gY2xlYXJJbnRlcnZhbChfc2VsZi4kdGltZXIpOworICAgICAgICAgICAgICAg
ICAgICBfc2VsZi4kaW5TY3JvbGxBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9LCAxMCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2Nyb2xsVG9ZID0gZnVuY3Rp
b24oc2Nyb2xsVG9wKSB7CisgICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCAhPT0gc2Nyb2xsVG9w
KSB7CisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7
CisgICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5zY3JvbGxUb1ggPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7CisgICAgICAg
IGlmIChzY3JvbGxMZWZ0IDwgMCkKKyAgICAgICAgICAgIHNjcm9sbExlZnQgPSAwOworCisgICAg
ICAgIGlmICh0aGlzLnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpCisgICAgICAgICAgICB0aGlz
LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRo
aXMuQ0hBTkdFX0hfU0NST0xMKTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlv
bihkZWx0YVgsIGRlbHRhWSkgeworICAgICAgICBkZWx0YVkgJiYgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbFRvcCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyBkZWx0YVkpOworICAgICAgICBk
ZWx0YVggJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9s
bExlZnQoKSArIGRlbHRhWCk7CisgICAgfTsKKyAgICB0aGlzLmlzU2Nyb2xsYWJsZUJ5ID0gZnVu
Y3Rpb24oZGVsdGFYLCBkZWx0YVkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8IDAgJiYgdGhpcy5z
ZXNzaW9uLmdldFNjcm9sbFRvcCgpID4gMCkKKyAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChkZWx0YVkgPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIHRoaXMu
JHNpemUuc2Nyb2xsZXJIZWlnaHQgPCB0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCkKKyAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMucGl4ZWxUb1NjcmVlbkNvb3Jk
aW5hdGVzID0gZnVuY3Rpb24oeCwgeSkgeworICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5z
Y3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB2YXIgb2Zmc2V0ID0g
KHggKyB0aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8g
dGhpcy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgdmFyIHJvdyA9IE1hdGguZmxvb3IoKHkgKyB0
aGlzLnNjcm9sbFRvcCAtIGNhbnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0KTsKKyAgICAg
ICAgdmFyIGNvbCA9IE1hdGgucm91bmQob2Zmc2V0KTsKKworICAgICAgICByZXR1cm4ge3Jvdzog
cm93LCBjb2x1bW46IGNvbCwgc2lkZTogb2Zmc2V0IC0gY29sID4gMCA/IDEgOiAtMX07CisgICAg
fTsKKworICAgIHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7
CisgICAgICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOworCisgICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKAorICAgICAgICAgICAgKHgg
KyB0aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8gdGhp
cy5jaGFyYWN0ZXJXaWR0aAorICAgICAgICApOworICAgICAgICB2YXIgcm93ID0gTWF0aC5mbG9v
cigKKyAgICAgICAgICAgICh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRo
aXMubGluZUhlaWdodAorICAgICAgICApOworCisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24u
c2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgTWF0aC5tYXgoY29sLCAwKSk7CisgICAgfTsK
KyAgICB0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKKyAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKHJvdywgY29sdW1uKTsKKworICAgICAgICB2YXIgeCA9IHRoaXMuJHBhZGRpbmcg
KyBNYXRoLnJvdW5kKHBvcy5jb2x1bW4gKiB0aGlzLmNoYXJhY3RlcldpZHRoKTsKKyAgICAgICAg
dmFyIHkgPSBwb3Mucm93ICogdGhpcy5saW5lSGVpZ2h0OworCisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBwYWdlWDogY2FudmFzUG9zLmxlZnQgKyB4IC0gdGhpcy5zY3JvbGxMZWZ0LAor
ICAgICAgICAgICAgcGFnZVk6IGNhbnZhc1Bvcy50b3AgKyB5IC0gdGhpcy5zY3JvbGxUb3AKKyAg
ICAgICAgfTsKKyAgICB9OworICAgIHRoaXMudmlzdWFsaXplRm9jdXMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7Cisg
ICAgfTsKKyAgICB0aGlzLnZpc3VhbGl6ZUJsdXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZG9t
LnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7CisgICAgfTsKKyAg
ICB0aGlzLnNob3dDb21wb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIGlm
ICghdGhpcy4kY29tcG9zaXRpb24pCisgICAgICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IHsK
KyAgICAgICAgICAgICAgICBrZWVwVGV4dEFyZWFBdEN1cnNvcjogdGhpcy4ka2VlcFRleHRBcmVh
QXRDdXJzb3IsCisgICAgICAgICAgICAgICAgY3NzVGV4dDogdGhpcy50ZXh0YXJlYS5zdHlsZS5j
c3NUZXh0CisgICAgICAgICAgICB9OworCisgICAgICAgIHRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vy
c29yID0gdHJ1ZTsKKyAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJhY2Vf
Y29tcG9zaXRpb24iKTsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0ID0gIiI7
CisgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlz
LnNldENvbXBvc2l0aW9uVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdGhpcy4kbW92
ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICB9OworICAgIHRoaXMuaGlkZUNvbXBvc2l0aW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy4kY29tcG9zaXRpb24pCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJh
Y2VfY29tcG9zaXRpb24iKTsKKyAgICAgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0
aGlzLiRjb21wb3NpdGlvbi5rZWVwVGV4dEFyZWFBdEN1cnNvcjsKKyAgICAgICAgdGhpcy50ZXh0
YXJlYS5zdHlsZS5jc3NUZXh0ID0gdGhpcy4kY29tcG9zaXRpb24uY3NzVGV4dDsKKyAgICAgICAg
dGhpcy4kY29tcG9zaXRpb24gPSBudWxsOworICAgIH07CisKKyAgICB0aGlzLl9sb2FkVGhlbWUg
PSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykgeworICAgICAgICAKKyAgICB9OworICAgIHRoaXMu
c2V0VGhlbWUgPSBmdW5jdGlvbih0aGVtZSkgeworICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwor
ICAgICAgICB0aGlzLiR0aGVtZVZhbHVlID0gdGhlbWU7CisgICAgICAgIF9zZWxmLl9kaXNwYXRj
aEV2ZW50KCd0aGVtZUNoYW5nZScse3RoZW1lOnRoZW1lfSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIXRoZW1lIHx8IHR5cGVvZiB0aGVtZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgdmFy
IG1vZHVsZU5hbWUgPSB0aGVtZSB8fCAiYWNlL3RoZW1lL3RleHRtYXRlIjsKKyAgICAgICAgICAg
IGNvbmZpZy5sb2FkTW9kdWxlKFsidGhlbWUiLCBtb2R1bGVOYW1lXSwgYWZ0ZXJMb2FkKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFmdGVyTG9hZCh0aGVtZSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBhZnRlckxvYWQodGhlbWUpIHsKKyAgICAgICAgICAgIGRvbS5p
bXBvcnRDc3NTdHJpbmcoCisgICAgICAgICAgICAgICAgdGhlbWUuY3NzVGV4dCwKKyAgICAgICAg
ICAgICAgICB0aGVtZS5jc3NDbGFzcywKKyAgICAgICAgICAgICAgICBfc2VsZi5jb250YWluZXIu
b3duZXJEb2N1bWVudAorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgaWYgKF9zZWxmLnRo
ZW1lKQorICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyhfc2VsZi5jb250YWluZXIs
IF9zZWxmLnRoZW1lLmNzc0NsYXNzKTsKKyAgICAgICAgICAgIF9zZWxmLiR0aGVtZSA9IHRoZW1l
LmNzc0NsYXNzOworCisgICAgICAgICAgICBfc2VsZi50aGVtZSA9IHRoZW1lOworICAgICAgICAg
ICAgZG9tLmFkZENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgdGhlbWUuY3NzQ2xhc3MpOworICAg
ICAgICAgICAgZG9tLnNldENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgImFjZV9kYXJrIiwgdGhl
bWUuaXNEYXJrKTsKKworICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGVtZS5wYWRkaW5nIHx8
IDQ7CisgICAgICAgICAgICBpZiAoX3NlbGYuJHBhZGRpbmcgJiYgcGFkZGluZyAhPSBfc2VsZi4k
cGFkZGluZykKKyAgICAgICAgICAgICAgICBfc2VsZi5zZXRQYWRkaW5nKHBhZGRpbmcpOworICAg
ICAgICAgICAgaWYgKF9zZWxmLiRzaXplKSB7CisgICAgICAgICAgICAgICAgX3NlbGYuJHNpemUu
d2lkdGggPSAwOworICAgICAgICAgICAgICAgIF9zZWxmLm9uUmVzaXplKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9zZWxmLl9kaXNwYXRjaEV2ZW50KCd0aGVt
ZUxvYWRlZCcse3RoZW1lOnRoZW1lfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0
VGhlbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRoZW1lVmFsdWU7Cisg
ICAgfTsKKyAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24gc2V0U3R5bGUoc3R5bGUsIGluY2x1
ZGUpIHsKKyAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSwgaW5j
bHVkZSAhPSBmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLnVuc2V0U3R5bGUgPSBmdW5jdGlvbiB1
bnNldFN0eWxlKHN0eWxlKSB7CisgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRh
aW5lciwgc3R5bGUpOworICAgIH07CisgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJHRleHRMYXllci5kZXN0cm95KCk7CisgICAgICAgIHRoaXMuJGN1cnNvckxh
eWVyLmRlc3Ryb3koKTsKKyAgICB9OworCit9KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5
cGUpOworCitleHBvcnRzLlZpcnR1YWxSZW5kZXJlciA9IFZpcnR1YWxSZW5kZXJlcjsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbGF5ZXIvZ3V0dGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworCisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cit2YXIgb29wID0gcmVx
dWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwor
dmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRF
bWl0dGVyOworCit2YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKKyAgICB0aGlzLmVs
ZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNz
TmFtZSA9ICJhY2VfbGF5ZXIgYWNlX2d1dHRlci1sYXllciI7CisgICAgcGFyZW50RWwuYXBwZW5k
Q2hpbGQodGhpcy5lbGVtZW50KTsKKyAgICB0aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRz
aG93Rm9sZFdpZGdldHMpOworICAgIAorICAgIHRoaXMuZ3V0dGVyV2lkdGggPSAwOworCisgICAg
dGhpcy4kYW5ub3RhdGlvbnMgPSBbXTsKKyAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IHRo
aXMuJHVwZGF0ZUFubm90YXRpb25zLmJpbmQodGhpcyk7Cit9OworCisoZnVuY3Rpb24oKSB7CisK
KyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlzLnNldFNl
c3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24pCisg
ICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhp
cy4kdXBkYXRlQW5ub3RhdGlvbnMpOworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwor
ICAgICAgICBzZXNzaW9uLm9uKCJjaGFuZ2UiLCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7Cisg
ICAgfTsKKworICAgIHRoaXMuYWRkR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xh
c3NOYW1lKXsKKyAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKQorICAgICAgICAgICAgY29uc29s
ZS53YXJuICYmIGNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJE
ZWNvcmF0aW9uIik7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJv
dywgY2xhc3NOYW1lKTsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9u
ID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICBpZiAod2luZG93LmNvbnNvbGUp
CisgICAgICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVz
ZSBzZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24iKTsKKyAgICAgICAgdGhpcy5zZXNzaW9u
LnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisKKyAgICB0
aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhp
cy4kYW5ub3RhdGlvbnMgPSBbXQorICAgICAgICB2YXIgcm93SW5mbywgcm93OworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFubm90YXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldOworICAgICAgICAgICAgdmFyIHJvdyA9
IGFubm90YXRpb24ucm93OworICAgICAgICAgICAgdmFyIHJvd0luZm8gPSB0aGlzLiRhbm5vdGF0
aW9uc1tyb3ddOworICAgICAgICAgICAgaWYgKCFyb3dJbmZvKQorICAgICAgICAgICAgICAgIHJv
d0luZm8gPSB0aGlzLiRhbm5vdGF0aW9uc1tyb3ddID0ge3RleHQ6IFtdfTsKKyAgICAgICAgICAg
CisgICAgICAgICAgICB2YXIgYW5ub1RleHQgPSBhbm5vdGF0aW9uLnRleHQ7CisgICAgICAgICAg
ICBhbm5vVGV4dCA9IGFubm9UZXh0ID8gbGFuZy5lc2NhcGVIVE1MKGFubm9UZXh0KSA6IGFubm90
YXRpb24uaHRtbCB8fCAiIjsKKworICAgICAgICAgICAgaWYgKHJvd0luZm8udGV4dC5pbmRleE9m
KGFubm9UZXh0KSA9PT0gLTEpCisgICAgICAgICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5u
b1RleHQpOworCisgICAgICAgICAgICB2YXIgdHlwZSA9IGFubm90YXRpb24udHlwZTsKKyAgICAg
ICAgICAgIGlmICh0eXBlID09ICJlcnJvciIpCisgICAgICAgICAgICAgICAgcm93SW5mby5jbGFz
c05hbWUgPSAiIGFjZV9lcnJvciI7CisgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09ICJ3YXJu
aW5nIiAmJiByb3dJbmZvLmNsYXNzTmFtZSAhPSAiIGFjZV9lcnJvciIpCisgICAgICAgICAgICAg
ICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFjZV93YXJuaW5nIjsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gImluZm8iICYmICghcm93SW5mby5jbGFzc05hbWUpKQorICAgICAgICAgICAg
ICAgIHJvd0luZm8uY2xhc3NOYW1lID0gIiBhY2VfaW5mbyI7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICBp
ZiAoIXRoaXMuJGFubm90YXRpb25zLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdmFyIGRlbHRhID0gZS5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsK
KyAgICAgICAgdmFyIGZpcnN0Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGVu
ID0gcmFuZ2UuZW5kLnJvdyAtIGZpcnN0Um93OworICAgICAgICBpZiAobGVuID09PSAwKSB7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IiB8fCBkZWx0YS5h
Y3Rpb24gPT0gInJlbW92ZUxpbmVzIikgeworICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMu
c3BsaWNlKGZpcnN0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CisgICAgICAgICAgICBhcmdzLnVuc2hp
ZnQoZmlyc3RSb3csIDEpOworICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlLmFw
cGx5KHRoaXMuJGFubm90YXRpb25zLCBhcmdzKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgZW1wdHlBbm5vID0g
e2NsYXNzTmFtZTogIiJ9OworICAgICAgICB2YXIgaHRtbCA9IFtdOworICAgICAgICB2YXIgaSA9
IGNvbmZpZy5maXJzdFJvdzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBjb25maWcubGFzdFJvdzsK
KyAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGkpOworICAg
ICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDogSW5maW5pdHk7Cisg
ICAgICAgIHZhciBmb2xkV2lkZ2V0cyA9IHRoaXMuJHNob3dGb2xkV2lkZ2V0cyAmJiB0aGlzLnNl
c3Npb24uZm9sZFdpZGdldHM7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuc2Vzc2lv
bi4kYnJlYWtwb2ludHM7CisgICAgICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuc2Vzc2lvbi4k
ZGVjb3JhdGlvbnM7CisgICAgICAgIHZhciBsYXN0TGluZU51bWJlciA9IDA7CisKKyAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmKGkgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAg
ICAgICAgICBpID0gZm9sZC5lbmQucm93ICsgMTsKKyAgICAgICAgICAgICAgICBmb2xkID0gdGhp
cy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShpLCBmb2xkKTsKKyAgICAgICAgICAgICAgICBmb2xk
U3RhcnQgPSBmb2xkID9mb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZihpID4gbGFzdFJvdykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgdmFyIGFubm90YXRpb24gPSB0aGlzLiRhbm5vdGF0aW9uc1tpXSB8fCBlbXB0eUFu
bm87CisgICAgICAgICAgICBodG1sLnB1c2goCisgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9
J2FjZV9ndXR0ZXItY2VsbCAiLAorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldIHx8ICIi
LCBkZWNvcmF0aW9uc1tpXSB8fCAiIiwgYW5ub3RhdGlvbi5jbGFzc05hbWUsCisgICAgICAgICAg
ICAgICAgIicgc3R5bGU9J2hlaWdodDoiLCB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKGkpICog
Y29uZmlnLmxpbmVIZWlnaHQsICJweDsnPiIsIAorICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVt
YmVyID0gaSArIDEKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0
cykgeworICAgICAgICAgICAgICAgIHZhciBjID0gZm9sZFdpZGdldHNbaV07CisgICAgICAgICAg
ICAgICAgaWYgKGMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgYyA9IGZvbGRXaWRnZXRz
W2ldID0gdGhpcy5zZXNzaW9uLmdldEZvbGRXaWRnZXQoaSk7CisgICAgICAgICAgICAgICAgaWYg
KGMpCisgICAgICAgICAgICAgICAgICAgIGh0bWwucHVzaCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICI8c3BhbiBjbGFzcz0nYWNlX2ZvbGQtd2lkZ2V0IGFjZV8iLCBjLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYyA9PSAic3RhcnQiICYmIGkgPT0gZm9sZFN0YXJ0ICYmIGkgPCBmb2xkLmVu
ZC5yb3cgPyAiIGFjZV9jbG9zZWQiIDogIiBhY2Vfb3BlbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAiJyBzdHlsZT0naGVpZ2h0OiIsIGNvbmZpZy5saW5lSGVpZ2h0LCAicHgiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIic+PC9zcGFuPiIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaHRtbC5wdXNoKCI8L2Rpdj4iKTsKKworICAgICAg
ICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9tLnNldElu
bmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOworICAgICAgICB0aGlzLmVsZW1l
bnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLm1pbkhlaWdodCArICJweCI7CisgICAgICAgIAorICAg
ICAgICBpZiAodGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSkKKyAgICAgICAgICAgIGxhc3RMaW5l
TnVtYmVyID0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgdmFy
IGd1dHRlcldpZHRoID0gKCIiICsgbGFzdExpbmVOdW1iZXIpLmxlbmd0aCAqIGNvbmZpZy5jaGFy
YWN0ZXJXaWR0aDsKKyAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLiRwYWRkaW5nIHx8IHRoaXMu
JGNvbXB1dGVQYWRkaW5nKCk7CisgICAgICAgIGd1dHRlcldpZHRoICs9IHBhZGRpbmcubGVmdCAr
IHBhZGRpbmcucmlnaHQ7CisgICAgICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gdGhpcy5ndXR0ZXJX
aWR0aCkgeworICAgICAgICAgICAgdGhpcy5ndXR0ZXJXaWR0aCA9IGd1dHRlcldpZHRoOworICAg
ICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gTWF0aC5jZWlsKHRoaXMuZ3V0dGVy
V2lkdGgpICsgInB4IjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUd1dHRlcldpZHRo
IiwgZ3V0dGVyV2lkdGgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHNob3dGb2xk
V2lkZ2V0cyA9IHRydWU7CisgICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihz
aG93KSB7CisgICAgICAgIGlmIChzaG93KQorICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRo
aXMuZWxlbWVudCwgImFjZV9mb2xkaW5nLWVuYWJsZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9mb2xkaW5nLWVuYWJs
ZWQiKTsKKworICAgICAgICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OworICAgICAgICB0
aGlzLiRwYWRkaW5nID0gbnVsbDsKKyAgICB9OworICAgIAorICAgIHRoaXMuZ2V0U2hvd0ZvbGRX
aWRnZXRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzaG93Rm9sZFdpZGdl
dHM7CisgICAgfTsKKworICAgIHRoaXMuJGNvbXB1dGVQYWRkaW5nID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICghdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4g
e2xlZnQ6IDAsIHJpZ2h0OiAwfTsKKyAgICAgICAgdmFyIHN0eWxlID0gZG9tLmNvbXB1dGVkU3R5
bGUodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpOworICAgICAgICB0aGlzLiRwYWRkaW5nID0ge30K
KyAgICAgICAgdGhpcy4kcGFkZGluZy5sZWZ0ID0gcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQp
ICsgMTsKKyAgICAgICAgdGhpcy4kcGFkZGluZy5yaWdodCA9IHBhcnNlSW50KHN0eWxlLnBhZGRp
bmdSaWdodCk7ICAKKyAgICAgICAgcmV0dXJuIHRoaXMuJHBhZGRpbmc7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0UmVnaW9uID0gZnVuY3Rpb24ocG9pbnQpIHsKKyAgICAgICAgdmFyIHBhZGRpbmcg
PSB0aGlzLiRwYWRkaW5nIHx8IHRoaXMuJGNvbXB1dGVQYWRkaW5nKCk7CisgICAgICAgIHZhciBy
ZWN0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICBpZiAo
cG9pbnQueCA8IHBhZGRpbmcubGVmdCArIHJlY3QubGVmdCkKKyAgICAgICAgICAgIHJldHVybiAi
bWFya2VycyI7CisgICAgICAgIGlmICh0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgcG9pbnQueCA+
IHJlY3QucmlnaHQgLSBwYWRkaW5nLnJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuICJmb2xkV2lk
Z2V0cyI7CisgICAgfTsKKworfSkuY2FsbChHdXR0ZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5H
dXR0ZXIgPSBHdXR0ZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGF5ZXIvbWFya2VyJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9k
b20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdl
ID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIv
ZG9tIik7CisKK3ZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgeworICAgIHRoaXMuZWxl
bWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NO
YW1lID0gImFjZV9sYXllciBhY2VfbWFya2VyLWxheWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRD
aGlsZCh0aGlzLmVsZW1lbnQpOworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcGFk
ZGluZyA9IDA7CisKKyAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7Cisg
ICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOworICAgIH07CisgICAgdGhpcy5zZXRTZXNz
aW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9u
OworICAgIH07CisgICAgCisgICAgdGhpcy5zZXRNYXJrZXJzID0gZnVuY3Rpb24obWFya2Vycykg
eworICAgICAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzOworICAgIH07CisKKyAgICB0aGlzLnVw
ZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgY29uZmlnID0gY29uZmlnIHx8
IHRoaXMuY29uZmlnOworICAgICAgICBpZiAoIWNvbmZpZykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKKworCisgICAgICAgIHZhciBodG1sID0g
W107CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm1hcmtlcnMpIHsKKyAgICAgICAgICAg
IHZhciBtYXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTsKKworICAgICAgICAgICAgaWYgKCFtYXJr
ZXIucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICBtYXJrZXIudXBkYXRlKGh0bWwsIHRoaXMsIHRo
aXMuc2Vzc2lvbiwgY29uZmlnKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIHJhbmdlID0gbWFya2VyLnJhbmdlLmNsaXBSb3dzKGNv
bmZpZy5maXJzdFJvdywgY29uZmlnLmxhc3RSb3cpOworICAgICAgICAgICAgaWYgKHJhbmdlLmlz
RW1wdHkoKSkgY29udGludWU7CisKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2UudG9TY3JlZW5S
YW5nZSh0aGlzLnNlc3Npb24pOworICAgICAgICAgICAgaWYgKG1hcmtlci5yZW5kZXJlcikgewor
ICAgICAgICAgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBj
b25maWcpOworICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy4kcGFkZGluZyArIHJhbmdl
LnN0YXJ0LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgICAgICAgICBt
YXJrZXIucmVuZGVyZXIoaHRtbCwgcmFuZ2UsIGxlZnQsIHRvcCwgY29uZmlnKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobWFya2VyLnR5cGUgPT0gImZ1bGxMaW5lIikgeworICAgICAgICAgICAg
ICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNv
bmZpZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gInRleHQiKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRyYXdUZXh0TWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZp
Zyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdN
dWx0aUxpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtl
cihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6ICsgIiBhY2Vfc3RhcnQiLCBjb25maWcpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5zZXRJbm5l
ckh0bWwodGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKKyAgICB9OworCisgICAgdGhpcy4k
Z2V0VG9wID0gZnVuY3Rpb24ocm93LCBsYXllckNvbmZpZykgeworICAgICAgICByZXR1cm4gKHJv
dyAtIGxheWVyQ29uZmlnLmZpcnN0Um93U2NyZWVuKSAqIGxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7
CisgICAgfTsKKyAgICB0aGlzLmRyYXdUZXh0TWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRl
ciwgcmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZykgeworICAgICAgICB2YXIgcm93ID0gcmFuZ2Uu
c3RhcnQucm93OworCisgICAgICAgIHZhciBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2UoCisgICAgICAg
ICAgICByb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgIHJvdywgdGhpcy5zZXNz
aW9uLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4ocm93KQorICAgICAgICApOworICAgICAgICB0aGlz
LmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenogKyAi
IGFjZV9zdGFydCIsIGxheWVyQ29uZmlnLCAxLCAidGV4dCIpOworICAgICAgICByb3cgPSByYW5n
ZS5lbmQucm93OworICAgICAgICBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCAwLCByb3csIHJh
bmdlLmVuZC5jb2x1bW4pOworICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmlu
Z0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenosIGxheWVyQ29uZmlnLCAwLCAidGV4dCIpOworCisg
ICAgICAgIGZvciAocm93ID0gcmFuZ2Uuc3RhcnQucm93ICsgMTsgcm93IDwgcmFuZ2UuZW5kLnJv
dzsgcm93KyspIHsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5zdGFydC5yb3cgPSByb3c7CisgICAg
ICAgICAgICBsaW5lUmFuZ2UuZW5kLnJvdyA9IHJvdzsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5l
bmQuY29sdW1uID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4ocm93KTsKKyAg
ICAgICAgICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGluZVJh
bmdlLCBjbGF6eiwgbGF5ZXJDb25maWcsIDEsICJ0ZXh0Iik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJh
bmdlLCBjbGF6eiwgY29uZmlnLCB0eXBlKSB7CisgICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4k
cGFkZGluZzsKKyAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAg
ICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAg
ICAgdmFyIGxlZnQgPSBwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJh
Y3RlcldpZHRoOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8
ZGl2IGNsYXNzPSciLCBjbGF6eiwgIiBhY2Vfc3RhcnQnIHN0eWxlPSciLAorICAgICAgICAgICAg
ImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAorICAgICAgICAgICAgInJpZ2h0OjA7IiwKKyAgICAg
ICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OiIsIGxlZnQsICJw
eDsnPjwvZGl2PiIKKyAgICAgICAgKTsKKyAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdl
LmVuZC5yb3csIGNvbmZpZyk7CisgICAgICAgIHZhciB3aWR0aCA9IHJhbmdlLmVuZC5jb2x1bW4g
KiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAor
ICAgICAgICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAg
ICAgICJoZWlnaHQ6IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJ3aWR0aDoiLCB3aWR0
aCwgInB4OyIsCisgICAgICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAi
bGVmdDoiLCBwYWRkaW5nLCAicHg7Jz48L2Rpdj4iCisgICAgICAgICk7CisgICAgICAgIGhlaWdo
dCA9IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gMSkgKiBjb25maWcubGluZUhl
aWdodDsKKyAgICAgICAgaWYgKGhlaWdodCA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3cgKyAxLCBjb25maWcpOworCisg
ICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBj
bGF6eiwgIicgc3R5bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIs
CisgICAgICAgICAgICAicmlnaHQ6MDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsi
LAorICAgICAgICAgICAgImxlZnQ6IiwgcGFkZGluZywgInB4Oyc+PC9kaXY+IgorICAgICAgICAp
OworICAgIH07CisgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmlu
Z0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYUxlbmd0aCkgeworICAgICAgICB2
YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7CisgICAgICAgIHZhciB3aWR0aCA9IChyYW5n
ZS5lbmQuY29sdW1uICsgKGV4dHJhTGVuZ3RoIHx8IDApIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSAq
IGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKworICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9w
KHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFyIGxlZnQgPSB0aGlzLiRwYWRk
aW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworCisgICAg
ICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6
eiwgIicgc3R5bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisg
ICAgICAgICAgICAid2lkdGg6Iiwgd2lkdGgsICJweDsiLAorICAgICAgICAgICAgInRvcDoiLCB0
b3AsICJweDsiLAorICAgICAgICAgICAgImxlZnQ6IiwgbGVmdCwicHg7Jz48L2Rpdj4iCisgICAg
ICAgICk7CisgICAgfTsKKworICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyID0gZnVuY3Rpb24o
c3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcpIHsKKyAgICAgICAgdmFyIHRvcCA9
IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CisgICAgICAgIHZhciBoZWln
aHQgPSBjb25maWcubGluZUhlaWdodDsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPSBy
YW5nZS5lbmQucm93KQorICAgICAgICAgICAgaGVpZ2h0ICs9IHRoaXMuJGdldFRvcChyYW5nZS5l
bmQucm93LCBjb25maWcpIC0gdG9wOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAg
ICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicgc3R5bGU9JyIsCisgICAgICAgICAg
ICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAgICAidG9wOiIsIHRvcCwgInB4
OyIsCisgICAgICAgICAgICAibGVmdDowO3JpZ2h0OjA7Jz48L2Rpdj4iCisgICAgICAgICk7Cisg
ICAgfQorCit9KS5jYWxsKE1hcmtlci5wcm90b3R5cGUpOworCitleHBvcnRzLk1hcmtlciA9IE1h
cmtlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9sYXllci90ZXh0JywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2RvbScsICdhY2Uv
bGliL2xhbmcnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1
aXJlKCIuLi9saWIvb29wIik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwordmFy
IGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUo
Ii4uL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIv
ZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKKwordmFyIFRleHQgPSBmdW5jdGlvbihwYXJl
bnRFbCkgeworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfdGV4dC1sYXllciI7Cisg
ICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuJGNoYXJh
Y3RlclNpemUgPSB7d2lkdGg6IDAsIGhlaWdodDogMH07CisgICAgdGhpcy5jaGVja0ZvclNpemVD
aGFuZ2VzKCk7CisgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7Cit9OworCisoZnVuY3Rpb24o
KSB7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlz
LkVPRl9DSEFSID0gIlx4QjYiOyAvLyImcGFyYTsiOworICAgIHRoaXMuRU9MX0NIQVIgPSAiXHhB
QyI7IC8vIiZub3Q7IjsKKyAgICB0aGlzLlRBQl9DSEFSID0gIlx1MjE5MiI7IC8vIiZyYXJyOyIg
Ilx1MjFFNSI7CisgICAgdGhpcy5TUEFDRV9DSEFSID0gIlx4QjciOyAvLyImbWlkZG90OyI7Cisg
ICAgdGhpcy4kcGFkZGluZyA9IDA7CisKKyAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihw
YWRkaW5nKSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOworICAgICAgICB0aGlz
LmVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICIwICIgKyBwYWRkaW5nICsgInB4IjsKKyAgICB9Owor
CisgICAgdGhpcy5nZXRMaW5lSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCB8fCAxOworICAgIH07CisKKyAgICB0aGlzLmdldENo
YXJhY3RlcldpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRjaGFyYWN0
ZXJTaXplLndpZHRoIHx8IDE7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdl
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygp
OworICAgICAgICBpZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6
ZS53aWR0aCB8fCB0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7
CisgICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gImJvbGQi
OworICAgICAgICAgICAgdmFyIGJvbGRTaXplID0gdGhpcy4kbWVhc3VyZVNpemVzKCk7CisgICAg
ICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gIiI7CisgICAgICAg
ICAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIHRoaXMuYWxsb3dC
b2xkRm9udHMgPSBib2xkU2l6ZSAmJiBib2xkU2l6ZS53aWR0aCA9PT0gc2l6ZS53aWR0aCAmJiBi
b2xkU2l6ZS5oZWlnaHQgPT09IHNpemUuaGVpZ2h0OworICAgICAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlQ2hhcmFjdGVyU2l6ZSIsIHtkYXRhOiBzaXplfSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBz
ZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSBzZXRJbnRl
cnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcygp
OworICAgICAgICB9LCA1MDApOworICAgIH07CisKKyAgICB0aGlzLiRmb250U3R5bGVzID0gewor
ICAgICAgICBmb250RmFtaWx5IDogMSwKKyAgICAgICAgZm9udFNpemUgOiAxLAorICAgICAgICBm
b250V2VpZ2h0IDogMSwKKyAgICAgICAgZm9udFN0eWxlIDogMSwKKyAgICAgICAgbGluZUhlaWdo
dCA6IDEKKyAgICB9OworCisgICAgdGhpcy4kbWVhc3VyZVNpemVzID0gdXNlcmFnZW50LmlzSUUg
fHwgdXNlcmFnZW50LmlzT2xkR2Vja28gPyBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG4gPSAx
MDAwOworICAgICAgICBpZiAoIXRoaXMuJG1lYXN1cmVOb2RlKSB7CisgICAgICAgICAgICB2YXIg
bWVhc3VyZU5vZGUgPSB0aGlzLiRtZWFzdXJlTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IG1lYXN1cmVOb2RlLnN0eWxlOworCisgICAgICAg
ICAgICBzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKKyAgICAgICAgICAgIHN0
eWxlLmxlZnQgPSBzdHlsZS50b3AgPSAoLW4gKiA0MCkgICsgInB4IjsKKworICAgICAgICAgICAg
c3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOworICAgICAgICAgICAgc3R5bGUucG9zaXRpb24g
PSAiZml4ZWQiOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAg
ICAgICAgICBzdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CisgICAgICAgICAgICBtZWFzdXJl
Tm9kZS5pbm5lckhUTUwgPSBsYW5nLnN0cmluZ1JlcGVhdCgiWHkiLCBuKTsKKworICAgICAgICAg
ICAgaWYgKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lYXN1cmVOb2Rl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9
IHRoaXMuZWxlbWVudC5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgIHdoaWxlICghZG9tLmhh
c0Nzc0NsYXNzKGNvbnRhaW5lciwgImFjZV9lZGl0b3IiKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgY29udGFp
bmVyLmFwcGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCkKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworCisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlOwor
ICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVu
dCk7CisgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy4kZm9udFN0eWxlcykKKyAgICAgICAg
ICAgIHN0eWxlW3Byb3BdID0gY29tcHV0ZWRTdHlsZVtwcm9wXTsKKworICAgICAgICB2YXIgc2l6
ZSA9IHsKKyAgICAgICAgICAgIGhlaWdodDogdGhpcy4kbWVhc3VyZU5vZGUub2Zmc2V0SGVpZ2h0
LAorICAgICAgICAgICAgd2lkdGg6IHRoaXMuJG1lYXN1cmVOb2RlLm9mZnNldFdpZHRoIC8gKG4g
KiAyKQorICAgICAgICB9OworICAgICAgICBpZiAoc2l6ZS53aWR0aCA9PSAwIHx8IHNpemUuaGVp
Z2h0ID09IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4gc2l6
ZTsKKyAgICB9CisgICAgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRtZWFzdXJl
Tm9kZSkgeworICAgICAgICAgICAgdmFyIG1lYXN1cmVOb2RlID0gdGhpcy4kbWVhc3VyZU5vZGUg
PSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB2YXIgc3R5bGUgPSBtZWFz
dXJlTm9kZS5zdHlsZTsKKworICAgICAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQg
PSAiYXV0byI7CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gLTEwMCArICJw
eCI7CisKKyAgICAgICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICAgICAg
ICAgIHN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93
ID0gInZpc2libGUiOworICAgICAgICAgICAgc3R5bGUud2hpdGVTcGFjZSA9ICJub3dyYXAiOwor
CisgICAgICAgICAgICBtZWFzdXJlTm9kZS5pbm5lckhUTUwgPSAiWCI7CisKKyAgICAgICAgICAg
IHZhciBjb250YWluZXIgPSB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIHdo
aWxlIChjb250YWluZXIgJiYgIWRvbS5oYXNDc3NDbGFzcyhjb250YWluZXIsICJhY2VfZWRpdG9y
IikpCisgICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisK
KyAgICAgICAgICAgIGlmICghY29udGFpbmVyKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LiRtZWFzdXJlTm9kZSA9IG51bGw7CisKKyAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZChtZWFzdXJlTm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1l
YXN1cmVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAgIHZhciBzaXplID0g
eworICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoOiBy
ZWN0LndpZHRoCisgICAgICAgIH07CisgICAgICAgIGlmIChzaXplLndpZHRoID09IDAgfHwgc2l6
ZS5oZWlnaHQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVy
biBzaXplOworICAgIH07CisKKyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9u
KSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgIHRoaXMuJGNvbXB1
dGVUYWJTdHJpbmcoKTsKKyAgICB9OworCisgICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNl
OworICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykg
eworICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyA9PSBzaG93SW52aXNpYmxlcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0g
c2hvd0ludmlzaWJsZXM7CisgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcyA9
IHRydWU7CisgICAgdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxh
eSkgeworICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3Vp
ZGVzID0gZGlzcGxheTsKKyAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy4kdGFiU3RyaW5ncyA9IFtdOworICAg
IHRoaXMub25DaGFuZ2VUYWJTaXplID0KKyAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUo
KTsKKyAgICAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZTsKKyAgICAgICAgdmFyIHRhYlN0ciA9
IHRoaXMuJHRhYlN0cmluZ3MgPSBbMF07CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFi
U2l6ZSArIDE7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsK
KyAgICAgICAgICAgICAgICB0YWJTdHIucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUn
PiIKKyAgICAgICAgICAgICAgICAgICAgKyB0aGlzLlRBQl9DSEFSCisgICAgICAgICAgICAgICAg
ICAgICsgbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCBpIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgKyAiPC9zcGFuPiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
YWJTdHIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKSB7CisgICAg
ICAgICAgICB0aGlzLiRpbmRlbnRHdWlkZVJlID0gIC9cc1xTfCBcdHxcdCB8XHMkLzsKKyAgICAg
ICAgICAgIHZhciBjbGFzc05hbWUgPSAiYWNlX2luZGVudC1ndWlkZSI7CisgICAgICAgICAgICBp
ZiAodGhpcy5zaG93SW52aXNpYmxlcykgeworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAi
IGFjZV9pbnZpc2libGUiOworICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5n
LnN0cmluZ1JlcGVhdCh0aGlzLlNQQUNFX0NIQVIsIHRoaXMudGFiU2l6ZSk7CisgICAgICAgICAg
ICAgICAgdmFyIHRhYkNvbnRlbnQgPSB0aGlzLlRBQl9DSEFSICsgbGFuZy5zdHJpbmdSZXBlYXQo
Ilx4YTAiLCB0aGlzLnRhYlNpemUgLSAxKTsKKyAgICAgICAgICAgIH0gZWxzZXsKKyAgICAgICAg
ICAgICAgICB2YXIgc3BhY2VDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCB0aGlz
LnRhYlNpemUpOworICAgICAgICAgICAgICAgIHZhciB0YWJDb250ZW50ID0gc3BhY2VDb250ZW50
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyIgIl0gPSAi
PHNwYW4gY2xhc3M9JyIgKyBjbGFzc05hbWUgKyAiJz4iICsgc3BhY2VDb250ZW50ICsgIjwvc3Bh
bj4iOworICAgICAgICAgICAgdGhpcy4kdGFiU3RyaW5nc1siXHQiXSA9ICI8c3BhbiBjbGFzcz0n
IiArIGNsYXNzTmFtZSArICInPiIgKyB0YWJDb250ZW50ICsgIjwvc3Bhbj4iOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0
Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXN0Um93ICE9IGNvbmZp
Zy5sYXN0Um93IHx8CisgICAgICAgICAgICB0aGlzLmNvbmZpZy5maXJzdFJvdyAhPSBjb25maWcu
Zmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGluZXMoY29uZmlnKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKKworICAgICAgICB2YXIgZmlyc3Qg
PSBNYXRoLm1heChmaXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTsKKyAgICAgICAgdmFyIGxhc3Qg
PSBNYXRoLm1pbihsYXN0Um93LCBjb25maWcubGFzdFJvdyk7CisKKyAgICAgICAgdmFyIGxpbmVF
bGVtZW50cyA9IHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzOworICAgICAgICB2YXIgbGluZUVsZW1l
bnRzSWR4ID0gMDsKKworICAgICAgICBmb3IgKHZhciByb3cgPSBjb25maWcuZmlyc3RSb3c7IHJv
dyA8IGZpcnN0OyByb3crKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNz
aW9uLmdldEZvbGRMaW5lKHJvdyk7CisgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZm9sZExpbmUuY29udGFpbnNSb3coZmlyc3QpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBy
b3cgPSBmb2xkTGluZS5lbmQucm93OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxpbmVFbGVtZW50c0lkeCArKzsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciByb3cgPSBmaXJzdDsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5l
eHRGb2xkTGluZShyb3cpOworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xk
TGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZv
bGRMaW5lLmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lv
bi5nZXROZXh0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0
YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3QpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmVFbGVtZW50c1tsaW5lRWxlbWVu
dHNJZHgrK107CisgICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaHRtbCA9IFtdOworICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoCisgICAg
ICAgICAgICAgICAgICAgIGh0bWwsIHJvdywgIXRoaXMuJHVzZUxpbmVHcm91cHMoKSwgcm93ID09
IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2UKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgIGRvbS5zZXRJbm5lckh0bWwobGluZUVsZW1lbnQsIGh0bWwuam9pbigiIikpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcm93Kys7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGhpcy5zY3JvbGxMaW5lcyA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgb2xk
Q29uZmlnID0gdGhpcy5jb25maWc7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisg
ICAgICAgIGlmICghb2xkQ29uZmlnIHx8IG9sZENvbmZpZy5sYXN0Um93IDwgY29uZmlnLmZpcnN0
Um93KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CisKKyAgICAgICAg
aWYgKGNvbmZpZy5sYXN0Um93IDwgb2xkQ29uZmlnLmZpcnN0Um93KQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CisKKyAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50
OworICAgICAgICBpZiAob2xkQ29uZmlnLmZpcnN0Um93IDwgY29uZmlnLmZpcnN0Um93KQorICAg
ICAgICAgICAgZm9yICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChvbGRD
b25maWcuZmlyc3RSb3csIGNvbmZpZy5maXJzdFJvdyAtIDEpOyByb3c+MDsgcm93LS0pCisgICAg
ICAgICAgICAgICAgZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgaWYg
KG9sZENvbmZpZy5sYXN0Um93ID4gY29uZmlnLmxhc3RSb3cpCisgICAgICAgICAgICBmb3IgKHZh
ciByb3c9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGNvbmZpZy5sYXN0Um93ICsgMSwg
b2xkQ29uZmlnLmxhc3RSb3cpOyByb3c+MDsgcm93LS0pCisgICAgICAgICAgICAgICAgZWwucmVt
b3ZlQ2hpbGQoZWwubGFzdENoaWxkKTsKKworICAgICAgICBpZiAoY29uZmlnLmZpcnN0Um93IDwg
b2xkQ29uZmlnLmZpcnN0Um93KSB7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRy
ZW5kZXJMaW5lc0ZyYWdtZW50KGNvbmZpZywgY29uZmlnLmZpcnN0Um93LCBvbGRDb25maWcuZmly
c3RSb3cgLSAxKTsKKyAgICAgICAgICAgIGlmIChlbC5maXJzdENoaWxkKQorICAgICAgICAgICAg
ICAgIGVsLmluc2VydEJlZm9yZShmcmFnbWVudCwgZWwuZmlyc3RDaGlsZCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5sYXN0Um93ID4gb2xkQ29uZmlnLmxhc3RSb3cpIHsK
KyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29u
ZmlnLCBvbGRDb25maWcubGFzdFJvdyArIDEsIGNvbmZpZy5sYXN0Um93KTsKKyAgICAgICAgICAg
IGVsLmFwcGVuZENoaWxkKGZyYWdtZW50KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlz
LiRyZW5kZXJMaW5lc0ZyYWdtZW50ID0gZnVuY3Rpb24oY29uZmlnLCBmaXJzdFJvdywgbGFzdFJv
dykgeworICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKKyAg
ICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpOwor
ICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJ
bmZpbml0eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHJvdyA+
IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTsK
KyAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUo
cm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBm
b2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChyb3cgPiBsYXN0Um93KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICB2YXIgY29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgICAg
ICB2YXIgaHRtbCA9IFtdOworICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1sLCByb3cs
IGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7CisgICAgICAgICAg
ICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKKyAgICAgICAgICAgIGlmICh0
aGlzLiR1c2VMaW5lR3JvdXBzKCkpIHsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NO
YW1lID0gJ2FjZV9saW5lX2dyb3VwJzsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRD
aGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgbGluZXMgPSBjb250YWluZXIuY2hpbGROb2RlcworICAgICAgICAgICAgICAgIHdoaWxlKGxp
bmVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobGlu
ZXNbMF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByb3crKzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfTsKKworICAgIHRoaXMudXBkYXRlID0gZnVu
Y3Rpb24oY29uZmlnKSB7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisgICAgICAg
IHZhciBodG1sID0gW107CisgICAgICAgIHZhciBmaXJzdFJvdyA9IGNvbmZpZy5maXJzdFJvdywg
bGFzdFJvdyA9IGNvbmZpZy5sYXN0Um93OworCisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsK
KyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cp
OworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cg
OiBJbmZpbml0eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHJv
dyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3cr
MTsKKyAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExp
bmUocm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUg
PyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHJvdyA+IGxhc3RSb3cpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGlmICh0aGlzLiR1c2VMaW5lR3JvdXBzKCkpCisgICAgICAgICAgICAgICAgaHRtbC5wdXNo
KCI8ZGl2IGNsYXNzPSdhY2VfbGluZV9ncm91cCc+IikKKworICAgICAgICAgICAgdGhpcy4kcmVu
ZGVyTGluZShodG1sLCByb3csIGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBm
YWxzZSk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLiR1c2VMaW5lR3JvdXBzKCkpCisgICAgICAg
ICAgICAgICAgaHRtbC5wdXNoKCI8L2Rpdj4iKTsgLy8gZW5kIHRoZSBsaW5lIGdyb3VwCisKKyAg
ICAgICAgICAgIHJvdysrOworICAgICAgICB9CisgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5z
ZXRJbm5lckh0bWwodGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKKyAgICB9OworCisgICAg
dGhpcy4kdGV4dFRva2VuID0geworICAgICAgICAidGV4dCI6IHRydWUsCisgICAgICAgICJycGFy
ZW4iOiB0cnVlLAorICAgICAgICAibHBhcmVuIjogdHJ1ZQorICAgIH07CisKKyAgICB0aGlzLiRy
ZW5kZXJUb2tlbiA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4s
IHZhbHVlKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHJlcGxhY2VS
ZWcgPSAvXHR8Jnw8fCggKyl8KFtceDAwLVx4MWZceDgwLVx4YTBcdTE2ODBcdTE4MEVcdTIwMDAt
XHUyMDBmXHUyMDI4XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGXSl8W1x1MTEwMC1cdTEx
NUZcdTExQTMtXHUxMUE3XHUxMUZBLVx1MTFGRlx1MjMyOS1cdTIzMkFcdTJFODAtXHUyRTk5XHUy
RTlCLVx1MkVGM1x1MkYwMC1cdTJGRDVcdTJGRjAtXHUyRkZCXHUzMDAwLVx1MzAzRVx1MzA0MS1c
dTMwOTZcdTMwOTktXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxOTAtXHUzMUJB
XHUzMUMwLVx1MzFFM1x1MzFGMC1cdTMyMUVcdTMyMjAtXHUzMjQ3XHUzMjUwLVx1MzJGRVx1MzMw
MC1cdTREQkZcdTRFMDAtXHVBNDhDXHVBNDkwLVx1QTRDNlx1QTk2MC1cdUE5N0NcdUFDMDAtXHVE
N0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQUZGXHVGRTEwLVx1RkUxOVx1
RkUzMC1cdUZFNTJcdUZFNTQtXHVGRTY2XHVGRTY4LVx1RkU2Qlx1RkYwMS1cdUZGNjBcdUZGRTAt
XHVGRkU2XS9nOworICAgICAgICB2YXIgcmVwbGFjZUZ1bmMgPSBmdW5jdGlvbihjLCBhLCBiLCB0
YWJJZHgsIGlkeDQpIHsKKyAgICAgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGYuc2hvd0ludmlzaWJsZXMgPworICAgICAgICAgICAgICAgICAgICAiPHNwYW4gY2xh
c3M9J2FjZV9pbnZpc2libGUnPiIgKyBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIs
IGMubGVuZ3RoKSArICI8L3NwYW4+IiA6CisgICAgICAgICAgICAgICAgICAgIGxhbmcuc3RyaW5n
UmVwZWF0KCJceGEwIiwgYy5sZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICIm
IikgeworICAgICAgICAgICAgICAgIHJldHVybiAiJiMzODsiOworICAgICAgICAgICAgfSBlbHNl
IGlmIChjID09ICI8IikgeworICAgICAgICAgICAgICAgIHJldHVybiAiJiM2MDsiOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjID09ICJcdCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFiU2l6
ZSA9IHNlbGYuc2Vzc2lvbi5nZXRTY3JlZW5UYWJTaXplKHNjcmVlbkNvbHVtbiArIHRhYklkeCk7
CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRhYlNpemUgLSAxOworICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLiR0YWJTdHJpbmdzW3RhYlNpemVdOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjID09ICJcdTMwMDAiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNsYXNzVG9Vc2Ug
PSBzZWxmLnNob3dJbnZpc2libGVzID8gImFjZV9jamsgYWNlX2ludmlzaWJsZSIgOiAiYWNlX2Nq
ayI7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IHNl
bGYuU1BBQ0VfQ0hBUiA6ICIiOworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOwor
ICAgICAgICAgICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9JyIgKyBjbGFzc1RvVXNlICsgIicg
c3R5bGU9J3dpZHRoOiIgKworICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuY2hhcmFj
dGVyV2lkdGggKiAyKSArCisgICAgICAgICAgICAgICAgICAgICJweCc+IiArIHNwYWNlICsgIjwv
c3Bhbj4iOworICAgICAgICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSBhY2VfaW52YWxpZCc+IiArIHNlbGYuU1BB
Q0VfQ0hBUiArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NyZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFz
cz0nYWNlX2Nqaycgc3R5bGU9J3dpZHRoOiIgKworICAgICAgICAgICAgICAgICAgICAoc2VsZi5j
b25maWcuY2hhcmFjdGVyV2lkdGggKiAyKSArCisgICAgICAgICAgICAgICAgICAgICJweCc+IiAr
IGMgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdmFy
IG91dHB1dCA9IHZhbHVlLnJlcGxhY2UocmVwbGFjZVJlZywgcmVwbGFjZUZ1bmMpOworCisgICAg
ICAgIGlmICghdGhpcy4kdGV4dFRva2VuW3Rva2VuLnR5cGVdKSB7CisgICAgICAgICAgICB2YXIg
Y2xhc3NlcyA9ICJhY2VfIiArIHRva2VuLnR5cGUucmVwbGFjZSgvXC4vZywgIiBhY2VfIik7Cisg
ICAgICAgICAgICB2YXIgc3R5bGUgPSAiIjsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09
ICJmb2xkIikKKyAgICAgICAgICAgICAgICBzdHlsZSA9ICIgc3R5bGU9J3dpZHRoOiIgKyAodG9r
ZW4udmFsdWUubGVuZ3RoICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpICsgInB4OycgIjsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgiPHNwYW4gY2xhc3M9JyIsIGNsYXNzZXMs
ICInIiwgc3R5bGUsICI+Iiwgb3V0cHV0LCAiPC9zcGFuPiIpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKG91dHB1dCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNjcmVlbkNvbHVtbiArIHZhbHVlLmxlbmd0aDsKKyAgICB9Owor
CisgICAgdGhpcy5yZW5kZXJJbmRlbnRHdWlkZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHZh
bHVlKSB7CisgICAgICAgIHZhciBjb2xzID0gdmFsdWUuc2VhcmNoKHRoaXMuJGluZGVudEd1aWRl
UmUpOworICAgICAgICBpZiAoY29scyA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICBpZiAodmFsdWVbMF0gPT0gIiAiKSB7CisgICAgICAgICAgICBjb2xzIC09IGNvbHMg
JSB0aGlzLnRhYlNpemU7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJp
bmdSZXBlYXQodGhpcy4kdGFiU3RyaW5nc1siICJdLCBjb2xzL3RoaXMudGFiU2l6ZSkpOworICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cihjb2xzKTsKKyAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZVswXSA9PSAiXHQiKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5z
dHJpbmdSZXBlYXQodGhpcy4kdGFiU3RyaW5nc1siXHQiXSwgY29scykpOworICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnN1YnN0cihjb2xzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfTsKKworICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5lID0gZnVuY3Rpb24oc3Ry
aW5nQnVpbGRlciwgdG9rZW5zLCBzcGxpdHMsIG9ubHlDb250ZW50cykgeworICAgICAgICB2YXIg
Y2hhcnMgPSAwOworICAgICAgICB2YXIgc3BsaXQgPSAwOworICAgICAgICB2YXIgc3BsaXRDaGFy
cyA9IHNwbGl0c1swXTsKKyAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVl
OworICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiB0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHsK
KyAgICAgICAgICAgICAgICBjaGFycyA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHRoaXMucmVuZGVySW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGNoYXJzIC09IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGNoYXJzICsgdmFsdWUubGVuZ3RoIDwgc3BsaXRDaGFycykgeworICAg
ICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHN0cmluZ0J1aWxk
ZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBjaGFycyAr
PSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdo
aWxlIChjaGFycyArIHZhbHVlLmxlbmd0aCA+PSBzcGxpdENoYXJzKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4sIHZhbHVlLnN1YnN0cmluZygwLCBzcGxpdENoYXJzIC0gY2hhcnMpCisgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vi
c3RyaW5nKHNwbGl0Q2hhcnMgLSBjaGFycyk7CisgICAgICAgICAgICAgICAgICAgIGNoYXJzID0g
c3BsaXRDaGFyczsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW9ubHlDb250ZW50cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCI8L2Rpdj4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hl
aWdodDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWln
aHQsICJweCc+IgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ICsrOworICAgICAgICAgICAgICAgICAg
ICBzY3JlZW5Db2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3Bs
aXRzW3NwbGl0XSB8fCBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2hhcnMgKz0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4g
PSB0aGlzLiRyZW5kZXJUb2tlbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMuJHJlbmRlclNpbXBsZUxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMp
IHsKKyAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CisgICAgICAgIHZhciB0b2tlbiA9IHRv
a2Vuc1swXTsKKyAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgIGlmICh0
aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpCisgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVuZGVy
SW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpOworICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVy
LCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsK
KyAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBzY3JlZW5Db2x1
bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2Vu
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuJHJlbmRlckxpbmUgPSBmdW5j
dGlvbihzdHJpbmdCdWlsZGVyLCByb3csIG9ubHlDb250ZW50cywgZm9sZExpbmUpIHsKKyAgICAg
ICAgaWYgKCFmb2xkTGluZSAmJiBmb2xkTGluZSAhPSBmYWxzZSkKKyAgICAgICAgICAgIGZvbGRM
aW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7CisKKyAgICAgICAgaWYgKGZvbGRM
aW5lKQorICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJv
dywgZm9sZExpbmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhp
cy5zZXNzaW9uLmdldFRva2Vucyhyb3cpOworCisKKyAgICAgICAgaWYgKCFvbmx5Q29udGVudHMp
IHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICAgICAiPGRp
diBjbGFzcz0nYWNlX2xpbmUnIHN0eWxlPSdoZWlnaHQ6IiwgdGhpcy5jb25maWcubGluZUhlaWdo
dCwgInB4Jz4iCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2Vu
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZ2V0Um93
U3BsaXREYXRhKHJvdyk7CisgICAgICAgICAgICBpZiAoc3BsaXRzICYmIHNwbGl0cy5sZW5ndGgp
CisgICAgICAgICAgICAgICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUoc3RyaW5nQnVpbGRlciwg
dG9rZW5zLCBzcGxpdHMsIG9ubHlDb250ZW50cyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgdGhpcy4kcmVuZGVyU2ltcGxlTGluZShzdHJpbmdCdWlsZGVyLCB0b2tlbnMpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKKyAgICAgICAg
ICAgIGlmIChmb2xkTGluZSkKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93
CisKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICAgICAiPHNw
YW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIsCisgICAgICAgICAgICAgICAgcm93ID09IHRoaXMu
c2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDEgPyB0aGlzLkVPRl9DSEFSIDogdGhpcy5FT0xfQ0hBUiwK
KyAgICAgICAgICAgICAgICAiPC9zcGFuPiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFvbmx5Q29udGVudHMpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2go
IjwvZGl2PiIpOworICAgIH07CisKKyAgICB0aGlzLiRnZXRGb2xkTGluZVRva2VucyA9IGZ1bmN0
aW9uKHJvdywgZm9sZExpbmUpIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247
CisgICAgICAgIHZhciByZW5kZXJUb2tlbnMgPSBbXTsKKworICAgICAgICBmdW5jdGlvbiBhZGRU
b2tlbnModG9rZW5zLCBmcm9tLCB0bykgeworICAgICAgICAgICAgdmFyIGlkeCA9IDAsIGNvbCA9
IDA7CisgICAgICAgICAgICB3aGlsZSAoKGNvbCArIHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aCkg
PCBmcm9tKSB7CisgICAgICAgICAgICAgICAgY29sICs9IHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICBpZHgrKzsKKworICAgICAgICAgICAgICAgIGlmIChpZHggPT0g
dG9rZW5zLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGNvbCAhPSBmcm9tKSB7CisgICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gdG9rZW5zW2lkeF0udmFsdWUuc3Vic3RyaW5nKGZyb20gLSBjb2wpOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAodG8gLSBmcm9tKSkKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdG8gLSBmcm9tKTsKKworICAgICAgICAgICAg
ICAgIHJlbmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9rZW5z
W2lkeF0udHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBjb2wgPSBmcm9tICsgdmFsdWUubGVuZ3RoOwor
ICAgICAgICAgICAgICAgIGlkeCArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3
aGlsZSAoY29sIDwgdG8gJiYgaWR4IDwgdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgICAg
IHZhciB2YWx1ZSA9IHRva2Vuc1tpZHhdLnZhbHVlOworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZS5sZW5ndGggKyBjb2wgPiB0bykgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMu
cHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGNv
bCkKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHRva2Vuc1tpZHhdKTsKKyAgICAgICAg
ICAgICAgICBjb2wgKz0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlkeCArPSAxOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24u
Z2V0VG9rZW5zKHJvdyk7CisgICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xk
ZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uLCBpc05ld1JvdykgeworICAgICAgICAgICAgaWYg
KHBsYWNlaG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVz
aCh7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJmb2xkIiwKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc05ld1JvdykKKyAgICAgICAgICAgICAgICAg
ICAgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbnMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBhZGRUb2tlbnModG9rZW5zLCBs
YXN0Q29sdW1uLCBjb2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICB9LCBmb2xkTGluZS5l
bmQucm93LCB0aGlzLnNlc3Npb24uZ2V0TGluZShmb2xkTGluZS5lbmQucm93KS5sZW5ndGgpOwor
CisgICAgICAgIHJldHVybiByZW5kZXJUb2tlbnM7CisgICAgfTsKKworICAgIHRoaXMuJHVzZUxp
bmVHcm91cHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRV
c2VXcmFwTW9kZSgpOworICAgIH07CisKKyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcik7CisgICAg
ICAgIGlmICh0aGlzLiRtZWFzdXJlTm9kZSkKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2Rl
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kbWVhc3VyZU5vZGUpOworICAgICAgICBkZWxl
dGUgdGhpcy4kbWVhc3VyZU5vZGU7CisgICAgfTsKKworfSkuY2FsbChUZXh0LnByb3RvdHlwZSk7
CisKK2V4cG9ydHMuVGV4dCA9IFRleHQ7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGF5ZXIv
Y3Vyc29yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbSdd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgZG9tID0gcmVx
dWlyZSgiLi4vbGliL2RvbSIpOworCit2YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50RWwpIHsK
KyAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5l
bGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX2N1cnNvci1sYXllciI7CisgICAgcGFy
ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuaXNWaXNpYmxlID0g
ZmFsc2U7CisgICAgdGhpcy5pc0JsaW5raW5nID0gdHJ1ZTsKKyAgICB0aGlzLmJsaW5rSW50ZXJ2
YWwgPSAxMDAwOworICAgIHRoaXMuc21vb3RoQmxpbmtpbmcgPSBmYWxzZTsKKworICAgIHRoaXMu
Y3Vyc29ycyA9IFtdOworICAgIHRoaXMuY3Vyc29yID0gdGhpcy5hZGRDdXJzb3IoKTsKKyAgICBk
b20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7Cit9Owor
CisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKyAgICB0aGlzLnNldFBh
ZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRk
aW5nOworICAgIH07CisKKyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7
CisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgfTsKKworICAgIHRoaXMuc2V0
QmxpbmtpbmcgPSBmdW5jdGlvbihibGlua2luZykgeworICAgICAgICBpZiAoYmxpbmtpbmcgIT0g
dGhpcy5pc0JsaW5raW5nKXsKKyAgICAgICAgICAgIHRoaXMuaXNCbGlua2luZyA9IGJsaW5raW5n
OworICAgICAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0aGlzLnNldEJsaW5rSW50ZXJ2YWwgPSBmdW5jdGlvbihibGlua0ludGVydmFsKSB7Cisg
ICAgICAgIGlmIChibGlua0ludGVydmFsICE9IHRoaXMuYmxpbmtJbnRlcnZhbCl7CisgICAgICAg
ICAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSBibGlua0ludGVydmFsOworICAgICAgICAgICAgdGhp
cy5yZXN0YXJ0VGltZXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnNldFNtb290
aEJsaW5raW5nID0gZnVuY3Rpb24oc21vb3RoQmxpbmtpbmcpIHsKKyAgICAgICAgaWYgKHNtb290
aEJsaW5raW5nICE9IHRoaXMuc21vb3RoQmxpbmtpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuc21v
b3RoQmxpbmtpbmcgPSBzbW9vdGhCbGlua2luZzsKKyAgICAgICAgICAgIGlmIChzbW9vdGhCbGlu
a2luZykKKyAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNl
X3Ntb290aC1ibGlua2luZyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRv
bS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7Cisg
ICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMuYWRkQ3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlbCA9IGRvbS5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgZWwuY2xhc3NOYW1lID0gImFjZV9jdXJzb3IiOwor
ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpOworICAgICAgICB0aGlzLmN1cnNv
cnMucHVzaChlbCk7CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworCisgICAgdGhpcy5yZW1v
dmVDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuY3Vyc29ycy5sZW5ndGgg
PiAxKSB7CisgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmN1cnNvcnMucG9wKCk7CisgICAgICAg
ICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKKyAgICAgICAgICAgIHJldHVybiBl
bDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmhpZGVDdXJzb3IgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgZG9tLmFkZENzc0Ns
YXNzKHRoaXMuZWxlbWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIpOworICAgICAgICB0aGlzLnJl
c3RhcnRUaW1lcigpOworICAgIH07CisKKyAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICBkb20ucmVtb3ZlQ3Nz
Q2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7CisgICAgICAgIHRoaXMu
cmVzdGFydFRpbWVyKCk7CisgICAgfTsKKworICAgIHRoaXMucmVzdGFydFRpbWVyID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTsKKyAgICAgICAg
Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTsKKyAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxp
bmtpbmcpCisgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNl
X3Ntb290aC1ibGlua2luZyIpOworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jdXJzb3JzLmxl
bmd0aDsgaS0tOyApCisgICAgICAgICAgICB0aGlzLmN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9
ICIiOworCisgICAgICAgIGlmICghdGhpcy5pc0JsaW5raW5nIHx8ICF0aGlzLmJsaW5rSW50ZXJ2
YWwgfHwgIXRoaXMuaXNWaXNpYmxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICh0aGlzLnNtb290aEJsaW5raW5nKQorICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21v
b3RoLWJsaW5raW5nIik7CisgICAgICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIHZh
ciBibGluayA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY3Vy
c29ycy5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tp
XS5zdHlsZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LmJp
bmQodGhpcyksIDAuNiAqIHRoaXMuYmxpbmtJbnRlcnZhbCk7CisgICAgICAgIH0uYmluZCh0aGlz
KTsKKworICAgICAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkgewor
ICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tpXS5zdHlsZS5vcGFjaXR5ID0gIiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBibGluaygpOworICAgICAgICB9LmJpbmQodGhpcyksIHRo
aXMuYmxpbmtJbnRlcnZhbCk7CisKKyAgICAgICAgYmxpbmsoKTsKKyAgICB9OworCisgICAgdGhp
cy5nZXRQaXhlbFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24sIG9uU2NyZWVuKSB7CisgICAg
ICAgIGlmICghdGhpcy5jb25maWcgfHwgIXRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHJldHVy
biB7bGVmdCA6IDAsIHRvcCA6IDB9OworCisgICAgICAgIGlmICghcG9zaXRpb24pCisgICAgICAg
ICAgICBwb3NpdGlvbiA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CisgICAg
ICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICAgICAgdmFyIGN1cnNvckxlZnQgPSB0aGlzLiRwYWRkaW5nICsgcG9zLmNvbHVt
biAqIHRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgY3Vyc29yVG9wID0g
KHBvcy5yb3cgLSAob25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAq
CisgICAgICAgICAgICB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0OworCisgICAgICAgIHJldHVybiB7
bGVmdCA6IGN1cnNvckxlZnQsIHRvcCA6IGN1cnNvclRvcH07CisgICAgfTsKKworICAgIHRoaXMu
dXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmln
OworCisgICAgICAgIHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJr
ZXJzOworICAgICAgICB2YXIgaSA9IDAsIGN1cnNvckluZGV4ID0gMDsKKworICAgICAgICBpZiAo
c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXsKKyAg
ICAgICAgICAgIHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAg
ICAgdmFyIHBpeGVsUG9zID0gdGhpcy5nZXRQaXhlbFBvc2l0aW9uKHNlbGVjdGlvbnNbaV0uY3Vy
c29yLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdo
dCArIGNvbmZpZy5vZmZzZXQgfHwKKyAgICAgICAgICAgICAgICAgcGl4ZWxQb3MudG9wIDwgLWNv
bmZpZy5vZmZzZXQpICYmIGkgPiAxKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBzdHlsZSA9ICh0aGlzLmN1cnNvcnNbY3Vyc29y
SW5kZXgrK10gfHwgdGhpcy5hZGRDdXJzb3IoKSkuc3R5bGU7CisKKyAgICAgICAgICAgIHN0eWxl
LmxlZnQgPSBwaXhlbFBvcy5sZWZ0ICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLnRvcCA9IHBp
eGVsUG9zLnRvcCArICJweCI7CisgICAgICAgICAgICBzdHlsZS53aWR0aCA9IGNvbmZpZy5jaGFy
YWN0ZXJXaWR0aCArICJweCI7CisgICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBjb25maWcubGlu
ZUhlaWdodCArICJweCI7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMuY3Vyc29ycy5s
ZW5ndGggPiBjdXJzb3JJbmRleCkKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQ3Vyc29yKCk7CisK
KyAgICAgICAgdmFyIG92ZXJ3cml0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKKyAg
ICAgICAgdGhpcy4kc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7CisgICAgICAgIHRoaXMuJHBpeGVs
UG9zID0gcGl4ZWxQb3M7CisgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgfTsKKwor
ICAgIHRoaXMuJHNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICBp
ZiAob3ZlcndyaXRlICE9IHRoaXMub3ZlcndyaXRlKSB7CisgICAgICAgICAgICB0aGlzLm92ZXJ3
cml0ZSA9IG92ZXJ3cml0ZTsKKyAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpCisgICAgICAgICAg
ICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9vdmVyd3JpdGUtY3Vyc29y
cyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFz
cyh0aGlzLmVsZW1lbnQsICJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgY2xlYXJJbnRl
cnZhbCh0aGlzLmludGVydmFsSWQpOworICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0
SWQpOworICAgIH07CisKK30pLmNhbGwoQ3Vyc29yLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuQ3Vy
c29yID0gQ3Vyc29yOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3Njcm9sbGJhcicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20n
LCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29v
cCIpOwordmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIpOwordmFyIGV2ZW50ID0gcmVxdWly
ZSgiLi9saWIvZXZlbnQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVu
dF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVu
dCkgeworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxiYXIiOworCisgICAgdGhpcy5pbm5l
ciA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmlubmVyLmNsYXNzTmFtZSA9
ICJhY2Vfc2Nyb2xsYmFyLWlubmVyIjsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5pbm5lcik7CisKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKyAgICB0
aGlzLndpZHRoID0gZG9tLnNjcm9sbGJhcldpZHRoKHBhcmVudC5vd25lckRvY3VtZW50KTsKKyAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSAodGhpcy53aWR0aCB8fCAxNSkgKyA1ICsgInB4
IjsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgInNjcm9sbCIsIHRoaXMu
b25TY3JvbGwuYmluZCh0aGlzKSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgb29wLmltcGxl
bWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMub25TY3JvbGwgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkgeworICAgICAgICAgICAgdGhpcy5zY3Jv
bGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICAgICAgdGhpcy5fZW1pdCgi
c2Nyb2xsIiwge2RhdGE6IHRoaXMuc2Nyb2xsVG9wfSk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5za2lwRXZlbnQgPSBmYWxzZTsKKyAgICB9OworICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7CisgICAgfTsKKyAgICB0aGlzLnNldEhl
aWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgeworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVp
Z2h0ID0gaGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIHRoaXMuc2V0SW5uZXJIZWlnaHQgPSBm
dW5jdGlvbihoZWlnaHQpIHsKKyAgICAgICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPSBoZWln
aHQgKyAicHgiOworICAgIH07CisgICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3Jv
bGxUb3ApIHsKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wICE9IHNjcm9sbFRvcCkgeworICAg
ICAgICAgICAgdGhpcy5za2lwRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5zY3JvbGxU
b3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAgICB9CisgICAg
fTsKKworfSkuY2FsbChTY3JvbGxCYXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5TY3JvbGxCYXIg
PSBTY3JvbGxCYXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3JlbmRlcmxvb3AnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIv
ZXZlbnQiKTsKKworCit2YXIgUmVuZGVyTG9vcCA9IGZ1bmN0aW9uKG9uUmVuZGVyLCB3aW4pIHsK
KyAgICB0aGlzLm9uUmVuZGVyID0gb25SZW5kZXI7CisgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7
CisgICAgdGhpcy5jaGFuZ2VzID0gMDsKKyAgICB0aGlzLndpbmRvdyA9IHdpbiB8fCB3aW5kb3c7
Cit9OworCisoZnVuY3Rpb24oKSB7CisKKworICAgIHRoaXMuc2NoZWR1bGUgPSBmdW5jdGlvbihj
aGFuZ2UpIHsKKyAgICAgICAgdGhpcy5jaGFuZ2VzID0gdGhpcy5jaGFuZ2VzIHwgY2hhbmdlOwor
ICAgICAgICBpZiAoIXRoaXMucGVuZGluZykgeworICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CisgICAgICAgICAgICBldmVudC5u
ZXh0RnJhbWUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgX3NlbGYucGVuZGluZyA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VzOworICAgICAgICAgICAgICAgIHdoaWxl
IChjaGFuZ2VzID0gX3NlbGYuY2hhbmdlcykgeworICAgICAgICAgICAgICAgICAgICBfc2VsZi5j
aGFuZ2VzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgX3NlbGYub25SZW5kZXIoY2hhbmdlcyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgdGhpcy53aW5kb3cpOworICAgICAg
ICB9CisgICAgfTsKKworfSkuY2FsbChSZW5kZXJMb29wLnByb3RvdHlwZSk7CisKK2V4cG9ydHMu
UmVuZGVyTG9vcCA9IFJlbmRlckxvb3A7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL211bHRpX3Nl
bGVjdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlX2xpc3Qn
LCAnYWNlL3JhbmdlJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNlL21vdXNlL211bHRpX3NlbGVjdF9o
YW5kbGVyJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb21tYW5kcy9t
dWx0aV9zZWxlY3RfY29tbWFuZHMnLCAnYWNlL3NlYXJjaCcsICdhY2UvZWRpdF9zZXNzaW9uJywg
J2FjZS9lZGl0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3Zh
ciBSYW5nZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7Cit2YXIgUmFu
Z2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgi
Li9zZWxlY3Rpb24iKS5TZWxlY3Rpb247Cit2YXIgb25Nb3VzZURvd24gPSByZXF1aXJlKCIuL21v
dXNlL211bHRpX3NlbGVjdF9oYW5kbGVyIikub25Nb3VzZURvd247Cit2YXIgZXZlbnQgPSByZXF1
aXJlKCIuL2xpYi9ldmVudCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2
YXIgY29tbWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcyIp
OworZXhwb3J0cy5jb21tYW5kcyA9IGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcy5jb25jYXQoY29t
bWFuZHMubXVsdGlTZWxlY3RDb21tYW5kcyk7Cit2YXIgU2VhcmNoID0gcmVxdWlyZSgiLi9zZWFy
Y2giKS5TZWFyY2g7Cit2YXIgc2VhcmNoID0gbmV3IFNlYXJjaCgpOworCitmdW5jdGlvbiBmaW5k
KHNlc3Npb24sIG5lZWRsZSwgZGlyKSB7CisgICAgc2VhcmNoLiRvcHRpb25zLndyYXAgPSB0cnVl
OworICAgIHNlYXJjaC4kb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGU7CisgICAgc2VhcmNoLiRvcHRp
b25zLmJhY2t3YXJkcyA9IGRpciA9PSAtMTsKKyAgICByZXR1cm4gc2VhcmNoLmZpbmQoc2Vzc2lv
bik7Cit9Cit2YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRT
ZXNzaW9uOworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ2V0U2VsZWN0aW9uTWFya2VycyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kc2VsZWN0aW9uTWFya2VyczsKKyAgICB9
OworfSkuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworKGZ1bmN0aW9uKCkgeworICAgIHRo
aXMucmFuZ2VzID0gbnVsbDsKKyAgICB0aGlzLnJhbmdlTGlzdCA9IG51bGw7CisgICAgdGhpcy5h
ZGRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCAkYmxvY2tDaGFuZ2VFdmVudHMpIHsKKyAgICAgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIXRoaXMuaW5N
dWx0aVNlbGVjdE1vZGUgJiYgdGhpcy5yYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgIHZh
ciBvbGRSYW5nZSA9IHRoaXMudG9PcmllbnRlZFJhbmdlKCk7CisgICAgICAgICAgICBpZiAocmFu
Z2UuaW50ZXJzZWN0cyhvbGRSYW5nZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICRibG9ja0No
YW5nZUV2ZW50cyB8fCB0aGlzLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKKworICAgICAgICAg
ICAgdGhpcy5yYW5nZUxpc3QuYWRkKG9sZFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuJG9uQWRk
UmFuZ2Uob2xkUmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyYW5nZS5jdXJzb3Ip
CisgICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7CisKKyAgICAgICAgdmFyIHJl
bW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5hZGQocmFuZ2UpOworCisgICAgICAgIHRoaXMuJG9uQWRk
UmFuZ2UocmFuZ2UpOworCisgICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKKyAgICAgICAgICAg
IHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisKKyAgICAgICAgaWYgKHRoaXMucmFuZ2VD
b3VudCA+IDEgJiYgIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X2VtaXQoIm11bHRpU2VsZWN0Iik7CisgICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2Rl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IGZhbHNlOwor
ICAgICAgICAgICAgdGhpcy5yYW5nZUxpc3QuYXR0YWNoKHRoaXMuc2Vzc2lvbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gJGJsb2NrQ2hhbmdlRXZlbnRzIHx8IHRoaXMuZnJvbU9yaWVu
dGVkUmFuZ2UocmFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLnRvU2luZ2xlUmFuZ2UgPSBmdW5j
dGlvbihyYW5nZSkgeworICAgICAgICByYW5nZSA9IHJhbmdlIHx8IHRoaXMucmFuZ2VzWzBdOwor
ICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpOworICAgICAg
ICBpZiAocmVtb3ZlZC5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJl
bW92ZWQpOworCisgICAgICAgIHJhbmdlICYmIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2Up
OworICAgIH07CisgICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgeworICAg
ICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnN1YnN0cmFjdFBvaW50KHBvcyk7Cisg
ICAgICAgIGlmIChyZW1vdmVkKSB7CisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJl
bW92ZWQpOworICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWRbMF07CisgICAgICAgIH0KKyAgICB9
OworICAgIHRoaXMubWVyZ2VPdmVybGFwcGluZ1JhbmdlcyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0Lm1lcmdlKCk7CisgICAgICAgIGlmIChyZW1v
dmVkLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7Cisg
ICAgICAgIGVsc2UgaWYodGhpcy5yYW5nZXNbMF0pCisgICAgICAgICAgICB0aGlzLmZyb21Pcmll
bnRlZFJhbmdlKHRoaXMucmFuZ2VzWzBdKTsKKyAgICB9OworCisgICAgdGhpcy4kb25BZGRSYW5n
ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMucmFu
Z2VMaXN0LnJhbmdlcy5sZW5ndGg7CisgICAgICAgIHRoaXMucmFuZ2VzLnVuc2hpZnQocmFuZ2Up
OworICAgICAgICB0aGlzLl9lbWl0KCJhZGRSYW5nZSIsIHtyYW5nZTogcmFuZ2V9KTsKKyAgICB9
OworCisgICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKHJlbW92ZWQpIHsKKyAgICAg
ICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKKyAgICAg
ICAgaWYgKHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsK
KyAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7
CisgICAgICAgICAgICByZW1vdmVkLnB1c2gobGFzdFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMu
cmFuZ2VDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gcmVtb3Zl
ZC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJhbmdlcy5p
bmRleE9mKHJlbW92ZWRbaV0pOworICAgICAgICAgICAgdGhpcy5yYW5nZXMuc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2VtaXQoInJlbW92ZVJhbmdlIiwge3Jh
bmdlczogcmVtb3ZlZH0pOworCisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPT0gMCAmJiB0
aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RN
b2RlID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJzaW5nbGVTZWxlY3QiKTsKKyAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IHRydWU7CisgICAgICAgICAgICB0
aGlzLnJhbmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTsKKyAgICAgICAgfQorCisgICAgICAg
IGxhc3RSYW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTsKKyAgICAgICAgaWYgKGxh
c3RSYW5nZSAmJiAhbGFzdFJhbmdlLmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSkKKyAgICAgICAg
ICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UobGFzdFJhbmdlKTsKKyAgICB9OworICAgIHRoaXMu
JGluaXRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMucmFuZ2VMaXN0ID0gbmV3IFJh
bmdlTGlzdCgpOworICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOworICAgICAgICB0aGlzLnJhbmdl
Q291bnQgPSAwOworICAgIH07CisgICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKTsKKyAgICB9Owor
CisgICAgdGhpcy5zcGxpdEludG9MaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRo
aXMucmFuZ2VDb3VudCA+IDEpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdl
TGlzdC5yYW5nZXM7CisgICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFu
Z2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgdGhpcy50b1Npbmds
ZVJhbmdlKCk7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0
UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgaXNC
YWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7CisgICAgICAgICAgICB2YXIgc3RhcnRSb3cg
PSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgICAgICB2YXIgZW5kUm93ID0gcmFuZ2UuZW5kLnJv
dzsKKyAgICAgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNCYWNrd2FyZHMpCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdl
LmVuZCwgZW5kID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RhcnQgPSByYW5nZS5zdGFydCwgZW5kID0gcmFuZ2UuZW5kOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJvbVBv
aW50cyhlbmQsIGVuZCkpOworICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJv
bVBvaW50cyhzdGFydCwgc3RhcnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciByZWN0U2VsID0gW107CisgICAgICAgICAgICB2YXIg
ciA9IHRoaXMuZ2V0TGluZVJhbmdlKHN0YXJ0Um93LCB0cnVlKTsKKyAgICAgICAgICAgIHIuc3Rh
cnQuY29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgcmVjdFNlbC5wdXNo
KHIpOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgKyAxOyBpIDwgZW5kUm93
OyBpKyspCisgICAgICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHRoaXMuZ2V0TGluZVJhbmdlKGks
IHRydWUpKTsKKworICAgICAgICAgICAgciA9IHRoaXMuZ2V0TGluZVJhbmdlKGVuZFJvdywgdHJ1
ZSk7CisgICAgICAgICAgICByLmVuZC5jb2x1bW4gPSByYW5nZS5lbmQuY29sdW1uOworICAgICAg
ICAgICAgcmVjdFNlbC5wdXNoKHIpOworCisgICAgICAgICAgICByZWN0U2VsLmZvckVhY2godGhp
cy5hZGRSYW5nZSwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMudG9nZ2xlQmxv
Y2tTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQg
PiAxKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzOwor
ICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV07Cisg
ICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHJhbmdlc1swXS5zdGFydCwg
bGFzdFJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZSgpOworICAg
ICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgbGFzdFJhbmdlLmN1cnNvciA9
PSBsYXN0UmFuZ2Uuc3RhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGN1
cnNvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rp
b25MZWFkKTsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRU
b1NjcmVlblBvc2l0aW9uKHRoaXMuc2VsZWN0aW9uQW5jaG9yKTsKKworICAgICAgICAgICAgdmFy
IHJlY3RTZWwgPSB0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhjdXJzb3IsIGFuY2hvcik7Cisg
ICAgICAgICAgICByZWN0U2VsLmZvckVhY2godGhpcy5hZGRSYW5nZSwgdGhpcyk7CisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrID0gZnVuY3Rpb24oc2Ny
ZWVuQ3Vyc29yLCBzY3JlZW5BbmNob3IsIGluY2x1ZGVFbXB0eUxpbmVzKSB7CisgICAgICAgIHZh
ciByZWN0U2VsID0gW107CisKKyAgICAgICAgdmFyIHhCYWNrd2FyZHMgPSBzY3JlZW5DdXJzb3Iu
Y29sdW1uIDwgc2NyZWVuQW5jaG9yLmNvbHVtbjsKKyAgICAgICAgaWYgKHhCYWNrd2FyZHMpIHsK
KyAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkN1cnNvci5jb2x1bW47CisgICAg
ICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQW5jaG9yLmNvbHVtbjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1bW47
CisgICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciB5QmFja3dhcmRzID0gc2NyZWVuQ3Vyc29yLnJvdyA8IHNjcmVl
bkFuY2hvci5yb3c7CisgICAgICAgIGlmICh5QmFja3dhcmRzKSB7CisgICAgICAgICAgICB2YXIg
c3RhcnRSb3cgPSBzY3JlZW5DdXJzb3Iucm93OworICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNj
cmVlbkFuY2hvci5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3RhcnRS
b3cgPSBzY3JlZW5BbmNob3Iucm93OworICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkN1
cnNvci5yb3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhcnRDb2x1bW4gPCAwKQorICAg
ICAgICAgICAgc3RhcnRDb2x1bW4gPSAwOworICAgICAgICBpZiAoc3RhcnRSb3cgPCAwKQorICAg
ICAgICAgICAgc3RhcnRSb3cgPSAwOworCisgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cp
CisgICAgICAgICAgICBpbmNsdWRlRW1wdHlMaW5lcyA9IHRydWU7CisKKyAgICAgICAgZm9yICh2
YXIgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7CisgICAgICAgICAgICB2
YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKAorICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBzdGFydENvbHVtbiksCisgICAgICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGVuZENvbHVt
bikKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGRvY0VuZCAmJiBpc1NhbWVQb2ludChyYW5nZS5lbmQsIGRvY0Vu
ZCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHZhciBkb2NF
bmQgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYW5nZS5jdXJzb3Ig
PSB4QmFja3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7CisgICAgICAgICAgICByZWN0
U2VsLnB1c2gocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHlCYWNrd2FyZHMpCisg
ICAgICAgICAgICByZWN0U2VsLnJldmVyc2UoKTsKKworICAgICAgICBpZiAoIWluY2x1ZGVFbXB0
eUxpbmVzKSB7CisgICAgICAgICAgICB2YXIgZW5kID0gcmVjdFNlbC5sZW5ndGggLSAxOworICAg
ICAgICAgICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMCkKKyAgICAg
ICAgICAgICAgICBlbmQtLTsKKyAgICAgICAgICAgIGlmIChlbmQgPiAwKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtzdGFy
dF0uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IGVuZDsgaSA+PSBzdGFydDsgaS0tKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY3RTZWxbaV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICByZWN0U2VsLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZWN0U2VsOworICAgIH07Cit9KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUp
OwordmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOworKGZ1bmN0aW9uKCkg
eworICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKyAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlciA9
IGZ1bmN0aW9uKG9yaWVudGVkUmFuZ2UpIHsKKyAgICAgICAgaWYgKCFvcmllbnRlZFJhbmdlLmN1
cnNvcikKKyAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5l
bmQ7CisKKyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpOworICAg
ICAgICBvcmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50
ZWRSYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9u
LiRzZWxlY3Rpb25NYXJrZXJzLnB1c2gob3JpZW50ZWRSYW5nZSk7CisgICAgICAgIHRoaXMuc2Vz
c2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vy
cy5sZW5ndGg7CisgICAgICAgIHJldHVybiBvcmllbnRlZFJhbmdlOworICAgIH07CisgICAgdGhp
cy5yZW1vdmVTZWxlY3Rpb25NYXJrZXIgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAo
IXJhbmdlLm1hcmtlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5zZXNzaW9u
LnJlbW92ZU1hcmtlcihyYW5nZS5tYXJrZXIpOworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNl
c3Npb24uJHNlbGVjdGlvbk1hcmtlcnMuaW5kZXhPZihyYW5nZSk7CisgICAgICAgIGlmIChpbmRl
eCAhPSAtMSkKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5zcGxp
Y2UoaW5kZXgsIDEpOworICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQg
PSB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RoOworICAgIH07CisKKyAgICB0
aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMgPSBmdW5jdGlvbihyYW5nZXMpIHsKKyAgICAgICAg
dmFyIG1hcmtlckxpc3QgPSB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnM7CisgICAgICAg
IGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIHJh
bmdlID0gcmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXJrZXIpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2Vy
KHJhbmdlLm1hcmtlcik7CisgICAgICAgICAgICB2YXIgaW5kZXggPSBtYXJrZXJMaXN0LmluZGV4
T2YocmFuZ2UpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICAgICAgICAg
IG1hcmtlckxpc3Quc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNl
c3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQgPSBtYXJrZXJMaXN0Lmxlbmd0aDsKKyAgICB9Owor
CisgICAgdGhpcy4kb25BZGRSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGhpcy5hZGRT
ZWxlY3Rpb25NYXJrZXIoZS5yYW5nZSk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vy
c29yKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9
OworCisgICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGhp
cy5yZW1vdmVTZWxlY3Rpb25NYXJrZXJzKGUucmFuZ2VzKTsKKyAgICAgICAgdGhpcy5yZW5kZXJl
ci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2Vy
cygpOworICAgIH07CisKKyAgICB0aGlzLiRvbk11bHRpU2VsZWN0ID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IHRydWU7CisKKyAgICAgICAgdGhpcy5z
ZXRTdHlsZSgiYWNlX211bHRpc2VsZWN0Iik7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5hZGRL
ZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKKyAgICAgICAgdGhpcy5j
b21tYW5kcy5vbigiZXhlYyIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTsKKworICAgICAgICB0
aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0
ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uU2luZ2xlU2VsZWN0ID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLm11bHRpU2VsZWN0LmluVmlydHVh
bE1vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1v
ZGUgPSBmYWxzZTsKKworICAgICAgICB0aGlzLnVuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIp
OworICAgICAgICB0aGlzLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRz
LmtleWJvYXJkSGFuZGxlcik7CisKKyAgICAgICAgdGhpcy5jb21tYW5kcy5yZW1vdmVFdmVudExp
c3RlbmVyKCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpOworICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tN
YXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjID0gZnVuY3Rp
b24oZSkgeworICAgICAgICB2YXIgY29tbWFuZCA9IGUuY29tbWFuZDsKKyAgICAgICAgdmFyIGVk
aXRvciA9IGUuZWRpdG9yOworICAgICAgICBpZiAoIWVkaXRvci5tdWx0aVNlbGVjdCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uKSB7
CisgICAgICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAgICAg
ICAgICAgZWRpdG9yLm11bHRpU2VsZWN0LmFkZFJhbmdlKGVkaXRvci5tdWx0aVNlbGVjdC50b09y
aWVudGVkUmFuZ2UoKSk7CisgICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QubWVyZ2VPdmVy
bGFwcGluZ1JhbmdlcygpOworICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RB
Y3Rpb24gPT0gImZvckVhY2giKSB7CisgICAgICAgICAgICBlZGl0b3IuZm9yRWFjaFNlbGVjdGlv
bihjb21tYW5kLCBlLmFyZ3MpOworICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxl
Y3RBY3Rpb24gPT0gInNpbmdsZSIpIHsKKyAgICAgICAgICAgIGVkaXRvci5leGl0TXVsdGlTZWxl
Y3RNb2RlKCk7CisgICAgICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlv
bihlZGl0b3IsIGUuYXJncyB8fCB7fSk7CisgICAgICAgIH0KKyAgICAgICAgZS5wcmV2ZW50RGVm
YXVsdCgpOworICAgIH07IAorICAgIHRoaXMuZm9yRWFjaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKGNt
ZCwgYXJncykgeworICAgICAgICBpZiAodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwor
ICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIHZhciByYW5n
ZUxpc3QgPSBzZWxlY3Rpb24ucmFuZ2VMaXN0OworCisgICAgICAgIHZhciByZWcgPSBzZWxlY3Rp
b24uX2V2ZW50UmVnaXN0cnk7CisgICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHt9
OworCisgICAgICAgIHZhciB0bXBTZWwgPSBuZXcgU2VsZWN0aW9uKHNlc3Npb24pOworICAgICAg
ICB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBp
ID0gcmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHRtcFNlbC5m
cm9tT3JpZW50ZWRSYW5nZShyYW5nZUxpc3QucmFuZ2VzW2ldKTsKKyAgICAgICAgICAgIHRoaXMu
c2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSB0bXBTZWw7CisgICAgICAgICAgICBjbWQu
ZXhlYyh0aGlzLCBhcmdzIHx8IHt9KTsKKyAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFu
Z2UocmFuZ2VMaXN0LnJhbmdlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgdG1wU2VsLmRldGFj
aCgpOworCisgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSBzZWxl
Y3Rpb247CisgICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IGZhbHNlOworICAg
ICAgICBzZWxlY3Rpb24uX2V2ZW50UmVnaXN0cnkgPSByZWc7CisgICAgICAgIHNlbGVjdGlvbi5t
ZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7CisKKyAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZSgp
OworICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgfTsKKyAgICB0aGlzLmV4
aXRNdWx0aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5WaXJ0
dWFsU2VsZWN0aW9uTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5tdWx0
aVNlbGVjdC50b1NpbmdsZVJhbmdlKCk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Q29weVRleHQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHRleHQgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMu
aW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLm11bHRp
U2VsZWN0LnJhbmdlTGlzdC5yYW5nZXM7CisgICAgICAgICAgICB0ZXh0ID0gW107CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIHRleHQucHVzaCh0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlc1tpXSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dCA9IHRleHQuam9pbih0aGlzLnNlc3Npb24u
Z2V0RG9jdW1lbnQoKS5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOworICAgICAgICB9IGVsc2UgaWYg
KCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRleHQgPSB0aGlzLnNl
c3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9OworICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0
aW9uKHRleHQpIHsKKyAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX2VtaXQoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIGlmICgh
dGhpcy5pbk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydCh0
ZXh0KTsKKworICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7Cisg
ICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzOworCisg
ICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiByYW5nZXMubGVuZ3RoIHx8IChsaW5lcy5sZW5ndGgg
PD0gMiB8fCAhbGluZXNbMV0pKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZXhl
YygiaW5zZXJ0c3RyaW5nIiwgdGhpcywgdGV4dCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHJh
bmdlcy5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07
CisgICAgICAgICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB0aGlz
LnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2Vy
dChyYW5nZS5zdGFydCwgbGluZXNbaV0pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmZp
bmRBbGwgPSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFkZGl0aXZlKSB7CisgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zIHx8IHt9OworICAgICAgICBvcHRpb25zLm5lZWRsZSA9IG5lZWRsZSB8
fCBvcHRpb25zLm5lZWRsZTsKKyAgICAgICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKKwor
ICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTsK
KyAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHRoaXMubXVsdGlTZWxlY3Q7CisKKyAgICAgICAgaWYgKCFhZGRpdGl2ZSkKKyAgICAgICAgICAg
IHNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKHJhbmdlc1swXSk7CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdl
KHJhbmdlc1tpXSwgdHJ1ZSk7CisKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsK
KworICAgICAgICByZXR1cm4gcmFuZ2VzLmxlbmd0aDsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
TW9yZUxpbmVzID0gZnVuY3Rpb24oZGlyLCBza2lwKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRo
aXMuc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpOworICAgICAgICB2YXIgaXNCYWNrd2FyZHMg
PSByYW5nZS5jdXJzb3IgPT0gcmFuZ2UuZW5kOworCisgICAgICAgIHZhciBzY3JlZW5MZWFkID0g
dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyYW5nZS5jdXJzb3IpOworICAg
ICAgICBpZiAodGhpcy5zZWxlY3Rpb24uJGRlc2lyZWRDb2x1bW4pCisgICAgICAgICAgICBzY3Jl
ZW5MZWFkLmNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uOworCisgICAgICAg
IHZhciBsZWFkID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5M
ZWFkLnJvdyArIGRpciwgc2NyZWVuTGVhZC5jb2x1bW4pOworCisgICAgICAgIGlmICghcmFuZ2Uu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgc2NyZWVuQW5jaG9yID0gdGhpcy5zZXNzaW9u
LmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihpc0JhY2t3YXJkcyA/IHJhbmdlLmVuZCA6IHJhbmdl
LnN0YXJ0KTsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9E
b2N1bWVudFBvc2l0aW9uKHNjcmVlbkFuY2hvci5yb3cgKyBkaXIsIHNjcmVlbkFuY2hvci5jb2x1
bW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFuY2hvciA9IGxlYWQ7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCYWNrd2FyZHMpIHsKKyAgICAgICAgICAgIHZhciBu
ZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMobGVhZCwgYW5jaG9yKTsKKyAgICAgICAgICAgIG5l
d1JhbmdlLmN1cnNvciA9IG5ld1JhbmdlLnN0YXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFyIG5ld1JhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpOworICAg
ICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gbmV3UmFuZ2UuZW5kOworICAgICAgICB9CisKKyAg
ICAgICAgbmV3UmFuZ2UuZGVzaXJlZENvbHVtbiA9IHNjcmVlbkxlYWQuY29sdW1uOworICAgICAg
ICBpZiAoIXRoaXMuc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoc2tpcCkKKyAgICAgICAgICAgICAgICB2YXIgdG9SZW1vdmUgPSByYW5nZS5jdXJz
b3I7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5n
ZSk7CisgICAgICAgIGlmICh0b1JlbW92ZSkKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnN1
YnN0cmFjdFBvaW50KHRvUmVtb3ZlKTsKKyAgICB9OworICAgIHRoaXMudHJhbnNwb3NlU2VsZWN0
aW9ucyA9IGZ1bmN0aW9uKGRpcikgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lv
bjsKKyAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisgICAgICAgIHZhciBh
bGwgPSBzZWwucmFuZ2VzOworCisgICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07
ICkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOworICAgICAgICAgICAgaWYgKHJh
bmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHZhciB0bXAgPSBzZXNzaW9uLmdldFdv
cmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAg
ICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gdG1wLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICBy
YW5nZS5zdGFydC5jb2x1bW4gPSB0bXAuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgICAgIHJh
bmdlLmVuZC5yb3cgPSB0bXAuZW5kLnJvdzsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29s
dW1uID0gdG1wLmVuZC5jb2x1bW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
c2VsLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKKworICAgICAgICB2YXIgd29yZHMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2
YXIgcmFuZ2UgPSBhbGxbaV07CisgICAgICAgICAgICB3b3Jkcy51bnNoaWZ0KHNlc3Npb24uZ2V0
VGV4dFJhbmdlKHJhbmdlKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyIDwgMCkKKyAg
ICAgICAgICAgIHdvcmRzLnVuc2hpZnQod29yZHMucG9wKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB3b3Jkcy5wdXNoKHdvcmRzLnNoaWZ0KCkpOworCisgICAgICAgIGZvciAodmFyIGkg
PSBhbGwubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOwor
ICAgICAgICAgICAgdmFyIHRtcCA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgICAgICBzZXNzaW9u
LnJlcGxhY2UocmFuZ2UsIHdvcmRzW2ldKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9
IHRtcC5zdGFydC5yb3c7CisgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0bXAuc3Rh
cnQuY29sdW1uOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdE1vcmUgPSBmdW5j
dGlvbihkaXIsIHNraXApIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Cisg
ICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0OworCisgICAgICAgIHZhciByYW5n
ZSA9IHNlbC50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3Rh
cnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0g
cmFuZ2UuZW5kOworICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShyYW5nZSk7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5lZWRsZSA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJh
bmdlKTsKKworICAgICAgICB2YXIgbmV3UmFuZ2UgPSBmaW5kKHNlc3Npb24sIG5lZWRsZSwgZGly
KTsKKyAgICAgICAgaWYgKG5ld1JhbmdlKSB7CisgICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3Ig
PSBkaXIgPT0gLTEgPyBuZXdSYW5nZS5zdGFydCA6IG5ld1JhbmdlLmVuZDsKKyAgICAgICAgICAg
IHRoaXMubXVsdGlTZWxlY3QuYWRkUmFuZ2UobmV3UmFuZ2UpOworICAgICAgICB9CisgICAgICAg
IGlmIChza2lwKQorICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5zdWJzdHJhY3RQb2ludChy
YW5nZS5jdXJzb3IpOworICAgIH07CisgICAgdGhpcy5hbGlnbkN1cnNvcnMgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBzZWwg
PSBzZXNzaW9uLm11bHRpU2VsZWN0OworICAgICAgICB2YXIgcmFuZ2VzID0gc2VsLnJhbmdlczsK
KworICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9
IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5z
dGFydC5yb3csIGxyID0gcmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRo
aXMuc2Vzc2lvbi5kb2MucmVtb3ZlTGluZXMoZnIsIGxyKTsKKyAgICAgICAgICAgIGxpbmVzID0g
dGhpcy4kcmVBbGlnblRleHQobGluZXMpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5p
bnNlcnRMaW5lcyhmciwgbGluZXMpOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0g
MDsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAx
XS5sZW5ndGg7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgcm93ID0gLTE7CisgICAgICAgICAgICB2
YXIgc2FtZVJvd1JhbmdlcyA9IHJhbmdlcy5maWx0ZXIoZnVuY3Rpb24ocikgeworICAgICAgICAg
ICAgICAgIGlmIChyLmN1cnNvci5yb3cgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByb3cgPSByLmN1cnNvci5yb3c7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHNlbC4kb25SZW1vdmVSYW5nZShzYW1lUm93UmFuZ2VzKTsKKwor
ICAgICAgICAgICAgdmFyIG1heENvbCA9IDA7CisgICAgICAgICAgICB2YXIgbWluU3BhY2UgPSBJ
bmZpbml0eTsKKyAgICAgICAgICAgIHZhciBzcGFjZU9mZnNldHMgPSByYW5nZXMubWFwKGZ1bmN0
aW9uKHIpIHsKKyAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHAucm93KTsKKyAgICAgICAgICAgICAgICB2
YXIgc3BhY2VPZmZzZXQgPSBsaW5lLnN1YnN0cihwLmNvbHVtbikuc2VhcmNoKC9cUy9nKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPT0gLTEpCisgICAgICAgICAgICAgICAgICAg
IHNwYWNlT2Zmc2V0ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChwLmNvbHVtbiA+IG1heENv
bCkKKyAgICAgICAgICAgICAgICAgICAgbWF4Q29sID0gcC5jb2x1bW47CisgICAgICAgICAgICAg
ICAgaWYgKHNwYWNlT2Zmc2V0IDwgbWluU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIG1pblNw
YWNlID0gc3BhY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlT2Zmc2V0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyLCBp
KSB7CisgICAgICAgICAgICAgICAgdmFyIHAgPSByLmN1cnNvcjsKKyAgICAgICAgICAgICAgICB2
YXIgbCA9IG1heENvbCAtIHAuY29sdW1uOworICAgICAgICAgICAgICAgIHZhciBkID0gc3BhY2VP
ZmZzZXRzW2ldIC0gbWluU3BhY2U7CisgICAgICAgICAgICAgICAgaWYgKGwgPiBkKQorICAgICAg
ICAgICAgICAgICAgICBzZXNzaW9uLmluc2VydChwLCBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIGwg
LSBkKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXNzaW9u
LnJlbW92ZShuZXcgUmFuZ2UocC5yb3csIHAuY29sdW1uLCBwLnJvdywgcC5jb2x1bW4gLSBsICsg
ZCkpOworCisgICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByLmVuZC5jb2x1bW4gPSBt
YXhDb2w7CisgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgPSByLmVuZC5yb3cgPSBwLnJvdzsK
KyAgICAgICAgICAgICAgICByLmN1cnNvciA9IHIuZW5kOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBzZWwuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2VzWzBdKTsKKyAgICAgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kcmVBbGln
blRleHQgPSBmdW5jdGlvbihsaW5lcykgeworICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRy
dWUsIGlzUmlnaHRBbGlnbmVkID0gdHJ1ZTsKKyAgICAgICAgdmFyIHN0YXJ0VywgdGV4dFcsIGVu
ZFc7CisKKyAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7CisgICAgICAg
ICAgICB2YXIgbSA9IGxpbmUubWF0Y2goLyhccyopKC4qPykoXHMqKShbPTpdLiopLyk7CisgICAg
ICAgICAgICBpZiAoIW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFtsaW5lXTsKKworICAgICAg
ICAgICAgaWYgKHN0YXJ0VyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3RhcnRXID0gbVsx
XS5sZW5ndGg7CisgICAgICAgICAgICAgICAgdGV4dFcgPSBtWzJdLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICBlbmRXID0gbVszXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGFydFcgKyB0ZXh0VyArIGVuZFcgIT0g
bVsxXS5sZW5ndGggKyBtWzJdLmxlbmd0aCArIG1bM10ubGVuZ3RoKQorICAgICAgICAgICAgICAg
IGlzUmlnaHRBbGlnbmVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoc3RhcnRXICE9IG1bMV0u
bGVuZ3RoKQorICAgICAgICAgICAgICAgIGlzTGVmdEFsaWduZWQgPSBmYWxzZTsKKworICAgICAg
ICAgICAgaWYgKHN0YXJ0VyA+IG1bMV0ubGVuZ3RoKQorICAgICAgICAgICAgICAgIHN0YXJ0VyA9
IG1bMV0ubGVuZ3RoOworICAgICAgICAgICAgaWYgKHRleHRXIDwgbVsyXS5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgdGV4dFcgPSBtWzJdLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChlbmRXID4g
bVszXS5sZW5ndGgpCisgICAgICAgICAgICAgICAgZW5kVyA9IG1bM10ubGVuZ3RoOworCisgICAg
ICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgfSkubWFwKGlzTGVmdEFsaWduZWQgPyBpc1JpZ2h0
QWxpZ25lZCA/IGFsaWduUmlnaHQgOiBhbGlnbkxlZnQgOiB1bkFsaWduKTsKKworICAgICAgICBm
dW5jdGlvbiBzcGFjZXMobikgeworICAgICAgICAgICAgcmV0dXJuIGxhbmcuc3RyaW5nUmVwZWF0
KCIgIiwgbik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhbGlnbkxlZnQobSkgewor
ICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXQor
ICAgICAgICAgICAgICAgICsgc3BhY2VzKHRleHRXIC0gbVsyXS5sZW5ndGggKyBlbmRXKQorICAg
ICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpCisgICAgICAg
IH0KKyAgICAgICAgZnVuY3Rpb24gYWxpZ25SaWdodChtKSB7CisgICAgICAgICAgICByZXR1cm4g
IW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsy
XQorICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcsICIgIikKKyAgICAgICAgICAgICAgICAr
IG1bNF0ucmVwbGFjZSgvXihbPTpdKVxzKy8sICIkMSAiKQorICAgICAgICB9CisgICAgICAgIGZ1
bmN0aW9uIHVuQWxpZ24obSkgeworICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNw
YWNlcyhzdGFydFcpICsgbVsyXQorICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcpCisgICAg
ICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCAiJDEgIikKKyAgICAgICAg
fQorICAgIH0KK30pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7CisKKworZnVuY3Rpb24gaXNTYW1l
UG9pbnQocDEsIHAyKSB7CisgICAgcmV0dXJuIHAxLnJvdyA9PSBwMi5yb3cgJiYgcDEuY29sdW1u
ID09IHAyLmNvbHVtbjsKK30KK2V4cG9ydHMub25TZXNzaW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkg
eworICAgIHZhciBzZXNzaW9uID0gZS5zZXNzaW9uOworICAgIGlmICghc2Vzc2lvbi5tdWx0aVNl
bGVjdCkgeworICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzID0gW107CisgICAgICAg
IHNlc3Npb24uc2VsZWN0aW9uLiRpbml0UmFuZ2VMaXN0KCk7CisgICAgICAgIHNlc3Npb24ubXVs
dGlTZWxlY3QgPSBzZXNzaW9uLnNlbGVjdGlvbjsKKyAgICB9CisgICAgdGhpcy5tdWx0aVNlbGVj
dCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisKKyAgICB2YXIgb2xkU2Vzc2lvbiA9IGUub2xkU2Vz
c2lvbjsKKyAgICBpZiAob2xkU2Vzc2lvbikgeworICAgICAgICBpZiAob2xkU2Vzc2lvbi5tdWx0
aVNlbGVjdCAmJiBvbGRTZXNzaW9uLm11bHRpU2VsZWN0LmVkaXRvciA9PSB0aGlzKQorICAgICAg
ICAgICAgb2xkU2Vzc2lvbi5tdWx0aVNlbGVjdC5lZGl0b3IgPSBudWxsOworCisgICAgICAgIHNl
c3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWRkUmFuZ2UiLCB0aGlzLiRv
bkFkZFJhbmdlKTsKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJyZW1vdmVSYW5nZSIsIHRoaXMuJG9uUmVtb3ZlUmFuZ2UpOworICAgICAgICBzZXNzaW9u
Lm11bHRpU2VsZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm11bHRpU2VsZWN0IiwgdGhpcy4kb25N
dWx0aVNlbGVjdCk7CisgICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0
ZW5lcigic2luZ2xlU2VsZWN0IiwgdGhpcy4kb25TaW5nbGVTZWxlY3QpOworICAgIH0KKworICAg
IHNlc3Npb24ubXVsdGlTZWxlY3Qub24oImFkZFJhbmdlIiwgdGhpcy4kb25BZGRSYW5nZSk7Cisg
ICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigicmVtb3ZlUmFuZ2UiLCB0aGlzLiRvblJlbW92ZVJh
bmdlKTsKKyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJtdWx0aVNlbGVjdCIsIHRoaXMuJG9u
TXVsdGlTZWxlY3QpOworICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oInNpbmdsZVNlbGVjdCIs
IHRoaXMuJG9uU2luZ2xlU2VsZWN0KTsKKworICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2Rl
ICE9IHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgIGlmIChz
ZXNzaW9uLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHRoaXMuJG9u
TXVsdGlTZWxlY3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kb25TaW5nbGVT
ZWxlY3QoKTsKKyAgICB9Cit9OworZnVuY3Rpb24gTXVsdGlTZWxlY3QoZWRpdG9yKSB7CisgICAg
ZWRpdG9yLiRvbkFkZFJhbmdlID0gZWRpdG9yLiRvbkFkZFJhbmdlLmJpbmQoZWRpdG9yKTsKKyAg
ICBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UgPSBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UuYmluZChlZGl0
b3IpOworICAgIGVkaXRvci4kb25NdWx0aVNlbGVjdCA9IGVkaXRvci4kb25NdWx0aVNlbGVjdC5i
aW5kKGVkaXRvcik7CisgICAgZWRpdG9yLiRvblNpbmdsZVNlbGVjdCA9IGVkaXRvci4kb25TaW5n
bGVTZWxlY3QuYmluZChlZGl0b3IpOworCisgICAgZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UuY2Fs
bChlZGl0b3IsIGVkaXRvcik7CisgICAgZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIiwgZXhwb3J0
cy5vblNlc3Npb25DaGFuZ2UuYmluZChlZGl0b3IpKTsKKworICAgIGVkaXRvci5vbigibW91c2Vk
b3duIiwgb25Nb3VzZURvd24pOworICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21t
YW5kcy5kZWZhdWx0Q29tbWFuZHMpOworCisgICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRv
cik7Cit9CisKK2Z1bmN0aW9uIGFkZEFsdEN1cnNvckxpc3RlbmVycyhlZGl0b3IpeworICAgIHZh
ciBlbCA9IGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOworICAgIHZhciBhbHRDdXJzb3Ig
PSBmYWxzZTsKKyAgICB2YXIgY29udGVudEVsID0gZWRpdG9yLnJlbmRlcmVyLmNvbnRlbnQ7Cisg
ICAgZXZlbnQuYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAg
ICBpZiAoZS5rZXlDb2RlID09IDE4ICYmICEoZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5t
ZXRhS2V5KSkgeworICAgICAgICAgICAgaWYgKCFhbHRDdXJzb3IpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZW50RWwuc3R5bGUuY3Vyc29yID0gImNyb3NzaGFpciI7CisgICAgICAgICAgICAgICAg
YWx0Q3Vyc29yID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhbHRD
dXJzb3IpIHsKKyAgICAgICAgICAgIGNvbnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiIjsKKyAgICAg
ICAgfQorICAgIH0pOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZWwsICJrZXl1cCIsIHJlc2V0
KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgImJsdXIiLCByZXNldCk7CisgICAgZnVuY3Rp
b24gcmVzZXQoKSB7CisgICAgICAgIGlmIChhbHRDdXJzb3IpIHsKKyAgICAgICAgICAgIGNvbnRl
bnRFbC5zdHlsZS5jdXJzb3IgPSAiIjsKKyAgICAgICAgICAgIGFsdEN1cnNvciA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorfQorCitleHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7
CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvcmFuZ2VfbGlzdCcsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KworCit2YXIgUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yYW5nZXMgPSBbXTsK
K307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihw
MSwgcDIpIHsKKyAgICAgICAgcmV0dXJuIHAxLnJvdyAtIHAyLnJvdyB8fCBwMS5jb2x1bW4gLSBw
Mi5jb2x1bW47CisgICAgfTsKKworICAgIHRoaXMucG9pbnRJbmRleCA9IGZ1bmN0aW9uKHBvcywg
c3RhcnRJbmRleCkgeworICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOworCisgICAgICAg
IGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaXN0W2ldOworICAgICAgICAgICAgdmFyIGNtcCA9IHRo
aXMuY29tcGFyZVBvaW50cyhwb3MsIHJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChjbXAg
PiAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNtcCA9PSAw
KQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgY21wID0gdGhpcy5jb21w
YXJlUG9pbnRzKHBvcywgcmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgaWYgKGNtcCA+PSAwKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgICAgICByZXR1cm4gLWktMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gLWkgLSAxOworICAgIH07CisKKyAgICB0aGlzLmFkZCA9
IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5wb2ludElu
ZGV4KHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgaWYgKHN0YXJ0SW5kZXggPCAwKQorICAgICAgICAg
ICAgc3RhcnRJbmRleCA9IC1zdGFydEluZGV4IC0gMTsKKworICAgICAgICB2YXIgZW5kSW5kZXgg
PSB0aGlzLnBvaW50SW5kZXgocmFuZ2UuZW5kLCBzdGFydEluZGV4KTsKKworICAgICAgICBpZiAo
ZW5kSW5kZXggPCAwKQorICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbmRJbmRleCsrOworCisgICAgICAgIHJldHVybiB0aGlz
LnJhbmdlcy5zcGxpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4LCByYW5nZSk7
CisgICAgfTsKKworICAgIHRoaXMuYWRkTGlzdCA9IGZ1bmN0aW9uKGxpc3QpIHsKKyAgICAgICAg
dmFyIHJlbW92ZWQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07
ICkgeworICAgICAgICAgICAgcmVtb3ZlZC5wdXNoLmNhbGwocmVtb3ZlZCwgdGhpcy5hZGQobGlz
dFtpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW1vdmVkOworICAgIH07CisKKyAg
ICB0aGlzLnN1YnN0cmFjdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHZhciBpID0g
dGhpcy5wb2ludEluZGV4KHBvcyk7CisKKyAgICAgICAgaWYgKGkgPj0gMCkKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2UoaSwgMSk7CisgICAgfTsKKyAgICB0aGlzLm1lcmdl
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gW107CisgICAgICAgIHZhciBs
aXN0ID0gdGhpcy5yYW5nZXM7CisgICAgICAgIHZhciBuZXh0ID0gbGlzdFswXSwgcmFuZ2U7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgcmFuZ2UgPSBuZXh0OworICAgICAgICAgICAgbmV4dCA9IGxpc3RbaV07CisgICAgICAgICAg
ICB2YXIgY21wID0gdGhpcy5jb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5zdGFydCk7Cisg
ICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKGNtcCA9PSAwICYmICEocmFuZ2UuaXNFbXB0eSgpIHx8IG5leHQuaXNFbXB0
eSgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHRoaXMu
Y29tcGFyZVBvaW50cyhyYW5nZS5lbmQsIG5leHQuZW5kKSA8IDApIHsKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmQucm93ID0gbmV4dC5lbmQucm93OworICAgICAgICAgICAgICAgIHJhbmdlLmVu
ZC5jb2x1bW4gPSBuZXh0LmVuZC5jb2x1bW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxpc3Quc3BsaWNlKGksIDEpOworICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKG5leHQpOworICAg
ICAgICAgICAgbmV4dCA9IHJhbmdlOworICAgICAgICAgICAgaS0tOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJlbW92ZWQ7CisgICAgfTsKKworICAgIHRoaXMuY29udGFpbnMgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5wb2ludEluZGV4KHtyb3c6
IHJvdywgY29sdW1uOiBjb2x1bW59KSA+PSAwOworICAgIH07CisKKyAgICB0aGlzLmNvbnRhaW5z
UG9pbnQgPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRJbmRleChw
b3MpID49IDA7CisgICAgfTsKKworICAgIHRoaXMucmFuZ2VBdFBvaW50ID0gZnVuY3Rpb24ocG9z
KSB7CisgICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7CisgICAgICAgIGlmIChp
ID49IDApCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbaV07CisgICAgfTsKKworCisg
ICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAg
dmFyIGxpc3QgPSB0aGlzLnJhbmdlczsKKyAgICAgICAgaWYgKGxpc3RbMF0uc3RhcnQucm93ID4g
ZW5kUm93IHx8IGxpc3RbbGlzdC5sZW5ndGggLSAxXS5zdGFydC5yb3cgPCBzdGFydFJvdykKKyAg
ICAgICAgICAgIHJldHVybiBbXTsKKworICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9p
bnRJbmRleCh7cm93OiBzdGFydFJvdywgY29sdW1uOiAwfSk7CisgICAgICAgIGlmIChzdGFydElu
ZGV4IDwgMCkKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7CisgICAg
ICAgIHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBlbmRSb3csIGNvbHVtbjog
MH0sIHN0YXJ0SW5kZXgpOworICAgICAgICBpZiAoZW5kSW5kZXggPCAwKQorICAgICAgICAgICAg
ZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxOworCisgICAgICAgIHZhciBjbGlwcGVkID0gW107Cisg
ICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykgeworICAg
ICAgICAgICAgY2xpcHBlZC5wdXNoKGxpc3RbaV0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBjbGlwcGVkOworICAgIH07CisKKyAgICB0aGlzLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKDAsIHRoaXMucmFuZ2VzLmxlbmd0aCk7
CisgICAgfTsKKworICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAg
ICBpZiAodGhpcy5zZXNzaW9uKQorICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKKworICAgICAg
ICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy4k
b25DaGFuZ2UuYmluZCh0aGlzKTsKKworICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScs
IHRoaXMub25DaGFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsK
KyAgICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy4kb25DaGFu
Z2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBjaGFuZ2VSYW5nZSA9IGUuZGF0YS5yYW5n
ZTsKKyAgICAgICAgaWYgKGUuZGF0YS5hY3Rpb25bMF0gPT0gImkiKXsKKyAgICAgICAgICAgIHZh
ciBzdGFydCA9IGNoYW5nZVJhbmdlLnN0YXJ0OworICAgICAgICAgICAgdmFyIGVuZCA9IGNoYW5n
ZVJhbmdlLmVuZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSBjaGFu
Z2VSYW5nZS5zdGFydDsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IGNoYW5nZVJhbmdlLmVuZDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc3RhcnRSb3cgPSBzdGFydC5yb3c7CisgICAgICAgIHZh
ciBlbmRSb3cgPSBlbmQucm93OworICAgICAgICB2YXIgbGluZURpZiA9IGVuZFJvdyAtIHN0YXJ0
Um93OworCisgICAgICAgIHZhciBjb2xEaWZmID0gLXN0YXJ0LmNvbHVtbiArIGVuZC5jb2x1bW47
CisgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlczsKKworICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHJhbmdlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBy
ID0gcmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKHIuZW5kLnJvdyA8IHN0YXJ0Um93KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID4gc3Rh
cnRSb3cpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChyLnN0YXJ0
LnJvdyA9PSBzdGFydFJvdyAmJiByLnN0YXJ0LmNvbHVtbiA+PSBzdGFydC5jb2x1bW4gKSB7Cisg
ICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gKz0gY29sRGlmZjsKKyAgICAgICAgICAgICAg
ICByLnN0YXJ0LnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHIuZW5kLnJvdyA9PSBzdGFydFJvdyAmJiByLmVuZC5jb2x1bW4gPj0gIHN0YXJ0LmNvbHVtbikg
eworICAgICAgICAgICAgICAgIHIuZW5kLmNvbHVtbiArPSBjb2xEaWZmOworICAgICAgICAgICAg
ICAgIHIuZW5kLnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxpbmVEaWYgIT0gMCAmJiBpIDwgbikgeworICAgICAgICAgICAgZm9yICg7IGkg
PCBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKKyAgICAgICAg
ICAgICAgICByLnN0YXJ0LnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgICAgIHIuZW5kLnJv
dyArPSBsaW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfSkuY2Fs
bChSYW5nZUxpc3QucHJvdG90eXBlKTsKKworZXhwb3J0cy5SYW5nZUxpc3QgPSBSYW5nZUxpc3Q7
Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2ZW50J10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9s
aWIvZXZlbnQiKTsKK2Z1bmN0aW9uIGlzU2FtZVBvaW50KHAxLCBwMikgeworICAgIHJldHVybiBw
MS5yb3cgPT0gcDIucm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47Cit9CisKK2Z1bmN0aW9u
IG9uTW91c2VEb3duKGUpIHsKKyAgICB2YXIgZXYgPSBlLmRvbUV2ZW50OworICAgIHZhciBhbHQg
PSBldi5hbHRLZXk7CisgICAgdmFyIHNoaWZ0ID0gZXYuc2hpZnRLZXk7CisgICAgdmFyIGN0cmwg
PSBlLmdldEFjY2VsS2V5KCk7CisgICAgdmFyIGJ1dHRvbiA9IGUuZ2V0QnV0dG9uKCk7CisKKyAg
ICBpZiAoZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUgJiYgYnV0dG9uID09IDIpIHsKKyAgICAg
ICAgZS5lZGl0b3IudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZS5kb21FdmVudCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjdHJsICYmICFhbHQpIHsKKyAgICAgICAg
aWYgKGJ1dHRvbiA9PSAwICYmIGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAgICAg
ICAgZS5lZGl0b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdmFyIGVkaXRvciA9IGUuZWRpdG9yOworICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0
b3Iuc2VsZWN0aW9uOworICAgIHZhciBpc011bHRpU2VsZWN0ID0gZWRpdG9yLmluTXVsdGlTZWxl
Y3RNb2RlOworICAgIHZhciBwb3MgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKTsKKyAgICB2YXIg
Y3Vyc29yID0gc2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgIHZhciBpblNlbGVjdGlvbiA9IGUu
aW5TZWxlY3Rpb24oKSB8fCAoc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChwb3Ms
IGN1cnNvcikpOworCisKKyAgICB2YXIgbW91c2VYID0gZS54LCBtb3VzZVkgPSBlLnk7CisgICAg
dmFyIG9uTW91c2VTZWxlY3Rpb24gPSBmdW5jdGlvbihlKSB7CisgICAgICAgIG1vdXNlWCA9IGUu
Y2xpZW50WDsKKyAgICAgICAgbW91c2VZID0gZS5jbGllbnRZOworICAgIH07CisKKyAgICB2YXIg
YmxvY2tTZWxlY3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG5ld0N1cnNvciA9IGVkaXRv
ci5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpOworICAg
ICAgICB2YXIgY3Vyc29yID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obmV3Q3Vy
c29yLnJvdywgbmV3Q3Vyc29yLmNvbHVtbik7CisKKyAgICAgICAgaWYgKGlzU2FtZVBvaW50KHNj
cmVlbkN1cnNvciwgbmV3Q3Vyc29yKQorICAgICAgICAgICAgJiYgaXNTYW1lUG9pbnQoY3Vyc29y
LCBzZWxlY3Rpb24uc2VsZWN0aW9uTGVhZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHNjcmVlbkN1cnNvciA9IG5ld0N1cnNvcjsKKworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1v
dmVDdXJzb3JUb1Bvc2l0aW9uKGN1cnNvcik7CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xl
YXJTZWxlY3Rpb24oKTsKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9W
aWV3KCk7CisKKyAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMocmVjdFNlbCk7
CisgICAgICAgIHJlY3RTZWwgPSBzZWxlY3Rpb24ucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHNjcmVl
bkN1cnNvciwgc2NyZWVuQW5jaG9yKTsKKyAgICAgICAgcmVjdFNlbC5mb3JFYWNoKGVkaXRvci5h
ZGRTZWxlY3Rpb25NYXJrZXIsIGVkaXRvcik7CisgICAgICAgIGVkaXRvci51cGRhdGVTZWxlY3Rp
b25NYXJrZXJzKCk7CisgICAgfTsKKyAgICAKKyAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNz
aW9uOworICAgIHZhciBzY3JlZW5BbmNob3IgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVl
bkNvb3JkaW5hdGVzKG1vdXNlWCwgbW91c2VZKTsKKyAgICB2YXIgc2NyZWVuQ3Vyc29yID0gc2Ny
ZWVuQW5jaG9yOworCisgICAgCisKKyAgICBpZiAoY3RybCAmJiAhc2hpZnQgJiYgIWFsdCAmJiBi
dXR0b24gPT0gMCkgeworICAgICAgICBpZiAoIWlzTXVsdGlTZWxlY3QgJiYgaW5TZWxlY3Rpb24p
CisgICAgICAgICAgICByZXR1cm47IC8vIGRyYWdnaW5nCisKKyAgICAgICAgaWYgKCFpc011bHRp
U2VsZWN0KSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJh
bmdlKCk7CisgICAgICAgICAgICBlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyKHJhbmdlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBvbGRSYW5nZSA9IHNlbGVjdGlvbi5yYW5nZUxpc3QucmFu
Z2VBdFBvaW50KHBvcyk7CisKKyAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVy
LCBmdW5jdGlvbigpe30sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRtcFNlbCA9IHNl
bGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTsKKworICAgICAgICAgICAgaWYgKG9sZFJhbmdlICYm
IHRtcFNlbC5pc0VtcHR5KCkgJiYgaXNTYW1lUG9pbnQob2xkUmFuZ2UuY3Vyc29yLCB0bXBTZWwu
Y3Vyc29yKSkKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG1wU2Vs
LmN1cnNvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihyYW5n
ZSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0bXBTZWwp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYm
IGFsdCAmJiBidXR0b24gPT0gMCkgeworICAgICAgICBlLnN0b3AoKTsKKworICAgICAgICBpZiAo
aXNNdWx0aVNlbGVjdCAmJiAhY3RybCkKKyAgICAgICAgICAgIHNlbGVjdGlvbi50b1NpbmdsZVJh
bmdlKCk7CisgICAgICAgIGVsc2UgaWYgKCFpc011bHRpU2VsZWN0ICYmIGN0cmwpCisgICAgICAg
ICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoKTsKKworICAgICAgICBzZWxlY3Rpb24ubW92ZUN1cnNv
clRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisK
KyAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTsKKworICAgICAgICB2YXIgb25Nb3VzZVNlbGVjdGlv
bkVuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7
CisgICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdFNlbC5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmVjdFNlbFtpXSk7CisgICAgICAgIH07CisK
KyAgICAgICAgdmFyIG9uU2VsZWN0aW9uSW50ZXJ2YWwgPSBibG9ja1NlbGVjdDsKKworICAgICAg
ICBldmVudC5jYXB0dXJlKGVkaXRvci5jb250YWluZXIsIG9uTW91c2VTZWxlY3Rpb24sIG9uTW91
c2VTZWxlY3Rpb25FbmQpOworICAgICAgICB2YXIgdGltZXJJZCA9IHNldEludGVydmFsKGZ1bmN0
aW9uKCkge29uU2VsZWN0aW9uSW50ZXJ2YWwoKTt9LCAyMCk7CisKKyAgICAgICAgcmV0dXJuIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9CisKKworZXhwb3J0cy5vbk1vdXNlRG93biA9IG9u
TW91c2VEb3duOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2NvbW1hbmRzL211bHRpX3NlbGVj
dF9jb21tYW5kcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2tleWJv
YXJkL2hhc2hfaGFuZGxlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
K2V4cG9ydHMuZGVmYXVsdENvbW1hbmRzID0gW3sKKyAgICBuYW1lOiAiYWRkQ3Vyc29yQWJvdmUi
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0x
KTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtVXAiLCBtYWM6ICJDdHJsLUFsdC1V
cCJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImFkZEN1cnNvckJlbG93
IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygx
KTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtRG93biIsIG1hYzogIkN0cmwtQWx0
LURvd24ifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJhZGRDdXJzb3JB
Ym92ZVNraXBDdXJyZW50IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNl
bGVjdE1vcmVMaW5lcygtMSwgdHJ1ZSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0
LVNoaWZ0LVVwIiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtVXAifSwKKyAgICByZWFkb25seTogdHJ1
ZQorfSwgeworICAgIG5hbWU6ICJhZGRDdXJzb3JCZWxvd1NraXBDdXJyZW50IiwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxLCB0cnVlKTsgfSwK
KyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtRG93biIsIG1hYzogIkN0cmwtQWx0
LVNoaWZ0LURvd24ifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxl
Y3RNb3JlQmVmb3JlIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVj
dE1vcmUoLTEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1MZWZ0IiwgbWFjOiAi
Q3RybC1BbHQtTGVmdCJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNl
bGVjdE1vcmVBZnRlciIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxl
Y3RNb3JlKDEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1SaWdodCIsIG1hYzog
IkN0cmwtQWx0LVJpZ2h0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
c2VsZWN0TmV4dEJlZm9yZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5z
ZWxlY3RNb3JlKC0xLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hp
ZnQtTGVmdCIsIG1hYzogIkN0cmwtQWx0LVNoaWZ0LUxlZnQifSwKKyAgICByZWFkb25seTogdHJ1
ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3ROZXh0QWZ0ZXIiLAorICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgxLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5OiB7
d2luOiAiQ3RybC1BbHQtU2hpZnQtUmlnaHQiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1SaWdodCJ9
LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNwbGl0SW50b0xpbmVzIiwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm11bHRpU2VsZWN0LnNwbGl0SW50
b0xpbmVzKCk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUwiLCBtYWM6ICJDdHJs
LUFsdC1MIn0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiYWxpZ25DdXJz
b3JzIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmFsaWduQ3Vyc29ycygp
OyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1BIiwgbWFjOiAiQ3RybC1BbHQtQSJ9
Cit9XTsKK2V4cG9ydHMubXVsdGlTZWxlY3RDb21tYW5kcyA9IFt7CisgICAgbmFtZTogInNpbmds
ZVNlbGVjdGlvbiIsCisgICAgYmluZEtleTogImVzYyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7IH0sCisgICAgcmVhZG9ubHk6IHRy
dWUsCisgICAgaXNBdmFpbGFibGU6IGZ1bmN0aW9uKGVkaXRvcikge3JldHVybiBlZGl0b3IgJiYg
ZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlfQorfV07CisKK3ZhciBIYXNoSGFuZGxlciA9IHJlcXVp
cmUoIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOworZXhwb3J0cy5rZXli
b2FyZEhhbmRsZXIgPSBuZXcgSGFzaEhhbmRsZXIoZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRz
KTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9ldmVu
dF9lbWl0dGVyJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBFdmVudEVt
aXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3Zh
ciBjb25maWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKKwordmFyIFdvcmtlckNsaWVudCA9IGZ1
bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKKyAgICB0aGlzLmNo
YW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOworICAgIHRoaXMu
b25NZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKTsKKyAgICB0aGlzLm9uRXJyb3Ig
PSB0aGlzLm9uRXJyb3IuYmluZCh0aGlzKTsKKworICAgIHZhciB3b3JrZXJVcmw7CisgICAgaWYg
KGNvbmZpZy5nZXQoInBhY2thZ2VkIikpIHsKKyAgICAgICAgd29ya2VyVXJsID0gY29uZmlnLm1v
ZHVsZVVybChtb2QsICJ3b3JrZXIiKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgbm9ybWFs
aXplUGF0aCA9IHRoaXMuJG5vcm1hbGl6ZVBhdGg7CisgICAgICAgIGlmICh0eXBlb2YgcmVxdWly
ZS5zdXBwb3J0cyAhPT0gInVuZGVmaW5lZCIgJiYgcmVxdWlyZS5zdXBwb3J0cy5pbmRleE9mKCJ1
Y2pzMi1waW5mLTAiKSA+PSAwKSB7CisgICAgICAgICAgICB3b3JrZXJVcmwgPSByZXF1aXJlLm5h
bWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXJfc291cmNlbWludCIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKHJlcXVpcmUubmFtZVRvVXJsICYmICFyZXF1aXJlLnRvVXJsKQor
ICAgICAgICAgICAgICAgIHJlcXVpcmUudG9VcmwgPSByZXF1aXJlLm5hbWVUb1VybDsKKyAgICAg
ICAgICAgIHdvcmtlclVybCA9IG5vcm1hbGl6ZVBhdGgocmVxdWlyZS50b1VybCgiYWNlL3dvcmtl
ci93b3JrZXIiLCBudWxsLCAiXyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0bG5zID0g
e307CisgICAgICAgIHRvcExldmVsTmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKG5zKSB7Cisg
ICAgICAgICAgICB0bG5zW25zXSA9IG5vcm1hbGl6ZVBhdGgocmVxdWlyZS50b1VybChucywgbnVs
bCwgIl8iKS5yZXBsYWNlKC8uanMoXD8uKik/JC8sICIiKSk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIHRoaXMuJHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKTsKKyAgICB0aGlzLiR3
b3JrZXIucG9zdE1lc3NhZ2UoeworICAgICAgICBpbml0IDogdHJ1ZSwKKyAgICAgICAgdGxuczog
dGxucywKKyAgICAgICAgbW9kdWxlOiBtb2QsCisgICAgICAgIGNsYXNzbmFtZTogY2xhc3NuYW1l
CisgICAgfSk7CisKKyAgICB0aGlzLmNhbGxiYWNrSWQgPSAxOworICAgIHRoaXMuY2FsbGJhY2tz
ID0ge307CisKKyAgICB0aGlzLiR3b3JrZXIub25lcnJvciA9IHRoaXMub25FcnJvcjsKKyAgICB0
aGlzLiR3b3JrZXIub25tZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2U7Cit9OworCisoZnVuY3Rpb24o
KXsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKworICAgIHRoaXMu
b25FcnJvciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29s
ZS5sb2cgJiYgY29uc29sZS5sb2coZSk7CisgICAgICAgIHRocm93IGU7CisgICAgfTsKKworICAg
IHRoaXMub25NZXNzYWdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgbXNnID0gZS5kYXRh
OworICAgICAgICBzd2l0Y2gobXNnLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxvZyI6Cisg
ICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cgJiYgY29uc29sZS5s
b2cuYXBwbHkoY29uc29sZSwgbXNnLmRhdGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlICJldmVudCI6CisgICAgICAgICAgICAgICAgdGhpcy5fZW1pdChtc2cu
bmFtZSwge2RhdGE6IG1zZy5kYXRhfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgImNhbGwiOgorICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMu
Y2FsbGJhY2tzW21zZy5pZF07CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1zZy5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW21zZy5pZF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJG5vcm1hbGl6
ZVBhdGggPSBmdW5jdGlvbihwYXRoKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgLy8g
bmVlZGVkIGZvciBmaWxlOi8vIHByb3RvY29sCisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg
ICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlthLXpdKzpcL1wvW15cL10rLywgIiIpOyAvLyBS
ZW1vdmUgZG9tYWluIG5hbWUgYW5kIHJlYnVpbGQgaXQKKyAgICAgICAgcGF0aCA9IGxvY2F0aW9u
LnByb3RvY29sICsgIi8vIiArIGxvY2F0aW9uLmhvc3QKKyAgICAgICAgICAgICsgKHBhdGguY2hh
ckF0KDApID09ICIvIiA/ICIiIDogbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSok
LywgIiIpKQorICAgICAgICAgICAgKyAiLyIgKyBwYXRoLnJlcGxhY2UoL15bXC9dKy8sICIiKTsK
KyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgfTsKKworICAgIHRoaXMudGVybWluYXRlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuX2VtaXQoInRlcm1pbmF0ZSIsIHt9KTsKKyAgICAgICAg
dGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpOworICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5jaGFu
Z2VMaXN0ZW5lcik7CisgICAgICAgIHRoaXMuJGRvYyA9IG51bGw7CisgICAgfTsKKworICAgIHRo
aXMuc2VuZCA9IGZ1bmN0aW9uKGNtZCwgYXJncykgeworICAgICAgICB0aGlzLiR3b3JrZXIucG9z
dE1lc3NhZ2Uoe2NvbW1hbmQ6IGNtZCwgYXJnczogYXJnc30pOworICAgIH07CisKKyAgICB0aGlz
LmNhbGwgPSBmdW5jdGlvbihjbWQsIGFyZ3MsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChjYWxs
YmFjaykgeworICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5jYWxsYmFja0lkKys7CisgICAgICAg
ICAgICB0aGlzLmNhbGxiYWNrc1tpZF0gPSBjYWxsYmFjazsKKyAgICAgICAgICAgIGFyZ3MucHVz
aChpZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZW5kKGNtZCwgYXJncyk7CisgICAgfTsK
KworICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKGV2ZW50LCBkYXRhKSB7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OiBldmVudCwgZGF0
YToge2RhdGE6IGRhdGEuZGF0YX19KTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChleCkge30K
KyAgICB9OworCisgICAgdGhpcy5hdHRhY2hUb0RvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7Cisg
ICAgICAgIGlmKHRoaXMuJGRvYykKKyAgICAgICAgICAgIHRoaXMudGVybWluYXRlKCk7CisKKyAg
ICAgICAgdGhpcy4kZG9jID0gZG9jOworICAgICAgICB0aGlzLmNhbGwoInNldFZhbHVlIiwgW2Rv
Yy5nZXRWYWx1ZSgpXSk7CisgICAgICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy5jaGFuZ2VMaXN0
ZW5lcik7CisgICAgfTsKKworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7
CisgICAgICAgIGUucmFuZ2UgPSB7CisgICAgICAgICAgICBzdGFydDogZS5kYXRhLnJhbmdlLnN0
YXJ0LAorICAgICAgICAgICAgZW5kOiBlLmRhdGEucmFuZ2UuZW5kCisgICAgICAgIH07CisgICAg
ICAgIHRoaXMuZW1pdCgiY2hhbmdlIiwgZSk7CisgICAgfTsKKworfSkuY2FsbChXb3JrZXJDbGll
bnQucHJvdG90eXBlKTsKKworCit2YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZl
bE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1lKSB7CisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5lciA9
IHRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTsKKyAgICB0aGlzLmNhbGxiYWNrSWQgPSAx
OworICAgIHRoaXMuY2FsbGJhY2tzID0ge307CisgICAgdGhpcy5tZXNzYWdlQnVmZmVyID0gW107
CisKKyAgICB2YXIgbWFpbiA9IG51bGw7CisgICAgdmFyIHNlbmRlciA9IE9iamVjdC5jcmVhdGUo
RXZlbnRFbWl0dGVyKTsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOworCisgICAgdGhpcy4kd29ya2Vy
ID0ge30KKyAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIF9zZWxmLm1lc3NhZ2VCdWZmZXIucHVzaChlKTsKKyAgICAgICAgbWFpbiAmJiBzZXRUaW1l
b3V0KHByb2Nlc3NOZXh0KTsKKyAgICB9OworCisgICAgdmFyIHByb2Nlc3NOZXh0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBtc2cgPSBfc2VsZi5tZXNzYWdlQnVmZmVyLnNoaWZ0KCk7Cisg
ICAgICAgIGlmIChtc2cuY29tbWFuZCkKKyAgICAgICAgICAgIG1haW5bbXNnLmNvbW1hbmRdLmFw
cGx5KG1haW4sIG1zZy5hcmdzKTsKKyAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50KQorICAgICAg
ICAgICAgc2VuZGVyLl9lbWl0KG1zZy5ldmVudCwgbXNnLmRhdGEpOworICAgIH07CisKKyAgICBz
ZW5kZXIucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgX3NlbGYub25NZXNz
YWdlKHtkYXRhOiBtc2d9KTsKKyAgICB9OworICAgIHNlbmRlci5jYWxsYmFjayA9IGZ1bmN0aW9u
KGRhdGEsIGNhbGxiYWNrSWQpIHsKKyAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTogImNh
bGwiLCBpZDogY2FsbGJhY2tJZCwgZGF0YTogZGF0YX0pOworICAgIH07CisgICAgc2VuZGVyLmVt
aXQgPSBmdW5jdGlvbihuYW1lLCBkYXRhKSB7CisgICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5
cGU6ICJldmVudCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTsKKyAgICB9OworCisgICAgcmVx
dWlyZShbbW9kXSwgZnVuY3Rpb24oTWFpbikgeworICAgICAgICBtYWluID0gbmV3IE1haW5bY2xh
c3NuYW1lXShzZW5kZXIpOworICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1ZmZlci5sZW5n
dGgpCisgICAgICAgICAgICBwcm9jZXNzTmV4dCgpOworICAgIH0pOworfTsKKworVUlXb3JrZXJD
bGllbnQucHJvdG90eXBlID0gV29ya2VyQ2xpZW50LnByb3RvdHlwZTsKKworZXhwb3J0cy5VSVdv
cmtlckNsaWVudCA9IFVJV29ya2VyQ2xpZW50OworZXhwb3J0cy5Xb3JrZXJDbGllbnQgPSBXb3Jr
ZXJDbGllbnQ7CisKK30pOworYWNlLmRlZmluZSgnYWNlL3BsYWNlaG9sZGVyJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9ldmVudF9lbWl0
dGVyJywgJ2FjZS9saWIvb29wJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBFdmVudEVt
aXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFy
IG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOworCit2YXIgUGxhY2VIb2xkZXIgPSBmdW5jdGlv
bihzZXNzaW9uLCBsZW5ndGgsIHBvcywgb3RoZXJzLCBtYWluQ2xhc3MsIG90aGVyc0NsYXNzKSB7
CisgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKKyAgICB0
aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuZG9jID0gc2Vzc2lvbi5nZXREb2N1bWVu
dCgpOworICAgIHRoaXMubWFpbkNsYXNzID0gbWFpbkNsYXNzOworICAgIHRoaXMub3RoZXJzQ2xh
c3MgPSBvdGhlcnNDbGFzczsKKyAgICB0aGlzLiRvblVwZGF0ZSA9IHRoaXMub25VcGRhdGUuYmlu
ZCh0aGlzKTsKKyAgICB0aGlzLmRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25VcGRhdGUpOworICAg
IHRoaXMuJG90aGVycyA9IG90aGVyczsKKyAgICAKKyAgICB0aGlzLiRvbkN1cnNvckNoYW5nZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgX3NlbGYub25DdXJzb3JDaGFuZ2UoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAKKyAg
ICB0aGlzLiRwb3MgPSBwb3M7CisgICAgdmFyIHVuZG9TdGFjayA9IHNlc3Npb24uZ2V0VW5kb01h
bmFnZXIoKS4kdW5kb1N0YWNrIHx8IHNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS4kdW5kb3N0YWNr
IHx8IHtsZW5ndGg6IC0xfTsKKyAgICB0aGlzLiR1bmRvU3RhY2tEZXB0aCA9ICB1bmRvU3RhY2su
bGVuZ3RoOworICAgIHRoaXMuc2V0dXAoKTsKKworICAgIHNlc3Npb24uc2VsZWN0aW9uLm9uKCJj
aGFuZ2VDdXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7Cit9OworCisoZnVuY3Rpb24oKSB7
CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5zZXR1
cCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICB2YXIg
ZG9jID0gdGhpcy5kb2M7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAg
ICAgICB2YXIgcG9zID0gdGhpcy4kcG9zOworCisgICAgICAgIHRoaXMucG9zID0gZG9jLmNyZWF0
ZUFuY2hvcihwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5tYXJrZXJJZCA9IHNl
c3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBw
b3MuY29sdW1uICsgdGhpcy5sZW5ndGgpLCB0aGlzLm1haW5DbGFzcywgbnVsbCwgZmFsc2UpOwor
ICAgICAgICB0aGlzLnBvcy5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
ICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKF9zZWxmLm1hcmtlcklkKTsKKyAgICAgICAgICAgIF9z
ZWxmLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKGV2ZW50LnZhbHVlLnJv
dywgZXZlbnQudmFsdWUuY29sdW1uLCBldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVt
bitfc2VsZi5sZW5ndGgpLCBfc2VsZi5tYWluQ2xhc3MsIG51bGwsIGZhbHNlKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMub3RoZXJzID0gW107CisgICAgICAgIHRoaXMuJG90aGVycy5mb3JF
YWNoKGZ1bmN0aW9uKG90aGVyKSB7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gZG9jLmNyZWF0
ZUFuY2hvcihvdGhlci5yb3csIG90aGVyLmNvbHVtbik7CisgICAgICAgICAgICBfc2VsZi5vdGhl
cnMucHVzaChhbmNob3IpOworICAgICAgICB9KTsKKyAgICAgICAgc2Vzc2lvbi5zZXRVbmRvU2Vs
ZWN0KGZhbHNlKTsKKyAgICB9OworICAgIHRoaXMuc2hvd090aGVyTWFya2VycyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZih0aGlzLm90aGVyc0FjdGl2ZSkgcmV0dXJuOworICAgICAgICB2YXIg
c2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAg
ICAgdGhpcy5vdGhlcnNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLm90aGVycy5mb3JFYWNo
KGZ1bmN0aW9uKGFuY2hvcikgeworICAgICAgICAgICAgYW5jaG9yLm1hcmtlcklkID0gc2Vzc2lv
bi5hZGRNYXJrZXIobmV3IFJhbmdlKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4sIGFuY2hvci5y
b3csIGFuY2hvci5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYub3RoZXJzQ2xhc3MsIG51bGws
IGZhbHNlKTsKKyAgICAgICAgICAgIGFuY2hvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihhbmNob3IubWFya2VySWQp
OworICAgICAgICAgICAgICAgIGFuY2hvci5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5l
dyBSYW5nZShldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbiwgZXZlbnQudmFsdWUu
cm93LCBldmVudC52YWx1ZS5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYub3RoZXJzQ2xhc3Ms
IG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9OworICAg
IHRoaXMuaGlkZU90aGVyTWFya2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZighdGhpcy5v
dGhlcnNBY3RpdmUpIHJldHVybjsKKyAgICAgICAgdGhpcy5vdGhlcnNBY3RpdmUgPSBmYWxzZTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm90aGVyc1tpXS5tYXJr
ZXJJZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICB2YXIgZGVsdGEgPSBldmVudC5kYXRhOworICAgICAgICB2YXIgcmFu
Z2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5l
bmQucm93KSByZXR1cm47CisgICAgICAgIGlmKHJhbmdlLnN0YXJ0LnJvdyAhPT0gdGhpcy5wb3Mu
cm93KSByZXR1cm47CisgICAgICAgIGlmICh0aGlzLiR1cGRhdGluZykgcmV0dXJuOworICAgICAg
ICB0aGlzLiR1cGRhdGluZyA9IHRydWU7CisgICAgICAgIHZhciBsZW5ndGhEaWZmID0gZGVsdGEu
YWN0aW9uID09PSAiaW5zZXJ0VGV4dCIgPyByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQu
Y29sdW1uIDogcmFuZ2Uuc3RhcnQuY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbjsKKyAgICAgICAg
CisgICAgICAgIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA+PSB0aGlzLnBvcy5jb2x1bW4gJiYgcmFu
Z2Uuc3RhcnQuY29sdW1uIDw9IHRoaXMucG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoICsgMSkgewor
ICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnJvbVN0YXJ0ID0gcmFuZ2Uuc3RhcnQuY29sdW1uIC0g
dGhpcy5wb3MuY29sdW1uOworICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gbGVuZ3RoRGlmZjsK
KyAgICAgICAgICAgIGlmKCF0aGlzLnNlc3Npb24uJGZyb21VbmRvKSB7CisgICAgICAgICAgICAg
ICAgaWYoZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3RoZXJQb3MgPSB0aGlzLm90aGVyc1tpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNv
bHVtbjogb3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYob3RoZXJQb3Mucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uu
c3RhcnQuY29sdW1uIDwgb3RoZXJQb3MuY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1Bvcy5jb2x1bW4gKz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZG9jLmluc2VydChuZXdQb3MsIGRlbHRhLnRleHQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGRlbHRhLmFjdGlvbiA9PT0gInJlbW92ZVRl
eHQiKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm90aGVycy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVy
UG9zID0gdGhpcy5vdGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9z
ID0ge3Jvdzogb3RoZXJQb3Mucm93LCBjb2x1bW46IG90aGVyUG9zLmNvbHVtbiArIGRpc3RhbmNl
RnJvbVN0YXJ0fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyUG9zLnJvdyA9PT0g
cmFuZ2Uuc3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyUG9zLmNvbHVtbikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0aERpZmY7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZW1vdmUobmV3IFJhbmdlKG5ld1Bv
cy5yb3csIG5ld1Bvcy5jb2x1bW4sIG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4gLSBsZW5ndGhE
aWZmKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID09PSB0aGlzLnBvcy5jb2x1bW4gJiYgZGVs
dGEuYWN0aW9uID09PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zLnNldFBv
c2l0aW9uKHRoaXMucG9zLnJvdywgdGhpcy5wb3MuY29sdW1uIC0gbGVuZ3RoRGlmZik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyID0gdGhpcy5v
dGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6
IG90aGVyLnJvdywgY29sdW1uOiBvdGhlci5jb2x1bW4gLSBsZW5ndGhEaWZmfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZihvdGhlci5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiBy
YW5nZS5zdGFydC5jb2x1bW4gPCBvdGhlci5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1Bvcy5jb2x1bW4gKz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdGhlci5zZXRQb3NpdGlvbihuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRo
aXMpLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihyYW5n
ZS5zdGFydC5jb2x1bW4gPT09IHRoaXMucG9zLmNvbHVtbiAmJiBkZWx0YS5hY3Rpb24gPT09ICJy
ZW1vdmVUZXh0IikgeworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVy
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlciA9
IHRoaXMub3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyLnJv
dyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyLmNvbHVt
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5zZXRQb3NpdGlvbihv
dGhlci5yb3csIG90aGVyLmNvbHVtbiAtIGxlbmd0aERpZmYpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfS5iaW5kKHRoaXMpLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLnBvcy5fZW1pdCgiY2hhbmdlIiwge3ZhbHVlOiB0aGlzLnBvc30pOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLl9lbWl0KCJjaGFuZ2UiLCB7dmFsdWU6
IHRoaXMub3RoZXJzW2ldfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy4kdXBkYXRpbmcgPSBmYWxzZTsKKyAgICB9OworCisgICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmICh0aGlzLiR1cGRhdGluZykgcmV0dXJuOwor
ICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKKyAg
ICAgICAgaWYocG9zLnJvdyA9PT0gdGhpcy5wb3Mucm93ICYmIHBvcy5jb2x1bW4gPj0gdGhpcy5w
b3MuY29sdW1uICYmIHBvcy5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhpcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIHRoaXMuc2hvd090aGVyTWFya2VycygpOworICAgICAgICAgICAgdGhp
cy5fZW1pdCgiY3Vyc29yRW50ZXIiLCBldmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImN1
cnNvckxlYXZlIiwgZXZlbnQpOworICAgICAgICB9CisgICAgfTsgICAgCisgICAgdGhpcy5kZXRh
Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlz
Lm1hcmtlcklkKTsKKyAgICAgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzKCk7CisgICAgICAgIHRo
aXMuZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uVXBkYXRlKTsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VD
dXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisgICAgICAgIHRoaXMucG9zLmRldGFjaCgp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB0aGlzLm90aGVyc1tpXS5kZXRhY2goKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLnNlc3Npb24uc2V0VW5kb1NlbGVjdCh0cnVlKTsKKyAgICB9OworICAgIHRoaXMuY2Fu
Y2VsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmKHRoaXMuJHVuZG9TdGFja0RlcHRoID09PSAt
MSkKKyAgICAgICAgICAgIHRocm93IEVycm9yKCJDYW5jZWxpbmcgcGxhY2Vob2xkZXJzIG9ubHkg
c3VwcG9ydGVkIHdpdGggdW5kbyBtYW5hZ2VyIGF0dGFjaGVkIHRvIHNlc3Npb24uIik7CisgICAg
ICAgIHZhciB1bmRvTWFuYWdlciA9IHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpOworICAg
ICAgICB2YXIgdW5kb3NSZXF1aXJlZCA9ICh1bmRvTWFuYWdlci4kdW5kb1N0YWNrIHx8IHVuZG9N
YW5hZ2VyLiR1bmRvc3RhY2spLmxlbmd0aCAtIHRoaXMuJHVuZG9TdGFja0RlcHRoOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHVuZG9zUmVxdWlyZWQ7IGkrKykgeworICAgICAgICAgICAg
dW5kb01hbmFnZXIudW5kbyh0cnVlKTsKKyAgICAgICAgfQorICAgIH07Cit9KS5jYWxsKFBsYWNl
SG9sZGVyLnByb3RvdHlwZSk7CisKKworZXhwb3J0cy5QbGFjZUhvbGRlciA9IFBsYWNlSG9sZGVy
OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlJywgWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFu
Z2UiKS5SYW5nZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9u
KCkge307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0g
bnVsbDsKKyAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbnVsbDsKKyAgICB0aGlzLmdldEZv
bGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2
YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOworICAgICAgICBpZiAodGhpcy5mb2xkaW5n
U3RhcnRNYXJrZXIudGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiAic3RhcnQiOworICAg
ICAgICBpZiAoZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiCisgICAgICAgICAgICAgICAgJiYg
dGhpcy5mb2xkaW5nU3RvcE1hcmtlcgorICAgICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0
b3BNYXJrZXIudGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICAgICAg
cmV0dXJuICIiOworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0
aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisKKyAgICB0aGlzLmluZGVudGF0aW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cs
IGNvbHVtbikgeworICAgICAgICB2YXIgcmUgPSAvXFMvOworICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNo
KHJlKTsKKyAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gY29sdW1uIHx8IGxpbmUubGVuZ3RoOworICAg
ICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKKyAgICAgICAgdmFyIHN0YXJ0
Um93ID0gcm93OworICAgICAgICB2YXIgZW5kUm93ID0gcm93OworCisgICAgICAgIHdoaWxlICgr
K3JvdyA8IG1heFJvdykgeworICAgICAgICAgICAgdmFyIGxldmVsID0gc2Vzc2lvbi5nZXRMaW5l
KHJvdykuc2VhcmNoKHJlKTsKKworICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGV2ZWwgPD0gc3RhcnRMZXZl
bCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZW5kUm93ID0gcm93Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CisgICAgICAgICAg
ICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5k
Q29sdW1uKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLm9wZW5pbmdCcmFja2V0Qmxv
Y2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7Cisg
ICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gKyAxfTsKKyAgICAg
ICAgdmFyIGVuZCA9IHNlc3Npb24uJGZpbmRDbG9zaW5nQnJhY2tldChicmFja2V0LCBzdGFydCwg
dHlwZVJlKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0c1tlbmQucm93XTsKKyAgICAgICAgaWYgKGZ3
ID09IG51bGwpCisgICAgICAgICAgICBmdyA9IHRoaXMuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBl
bmQucm93KTsKKworICAgICAgICBpZiAoZncgPT0gInN0YXJ0IiAmJiBlbmQucm93ID4gc3RhcnQu
cm93KSB7CisgICAgICAgICAgICBlbmQucm93IC0tOworICAgICAgICAgICAgZW5kLmNvbHVtbiA9
IHNlc3Npb24uZ2V0TGluZShlbmQucm93KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIGVuZCk7CisgICAgfTsKKworICAgIHRoaXMuY2xv
c2luZ0JyYWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29sdW1u
LCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59
OworICAgICAgICB2YXIgc3RhcnQgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoYnJhY2tl
dCwgZW5kKTsKKworICAgICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN0YXJ0LmNvbHVtbisrOworICAgICAgICBlbmQuY29sdW1uLS07CisKKyAgICAgICAg
cmV0dXJuICBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOworICAgIH07Cit9KS5jYWxsKEZv
bGRNb2RlLnByb3RvdHlwZSk7CisKK30pOworOworICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGFjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLCBmdW5jdGlvbihhKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGEgJiYgYS5jb25maWcuaW5pdCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXdpbmRvdy5hY2UpCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNl
ID0ge307CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhKSBpZiAoYS5oYXNP
d25Qcm9wZXJ0eShrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWNlW2tleV0gPSBhW2tl
eV07CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSgpOworICAgICAgICAKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJlNzZjYTlj
NDQ1ZjhkYjcwN2VmZjQ5ZWMzMjhiZjFiNDU5MTBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcwpAQCAtMCww
ICsxLDMgQEAKKy5hY2VfZWRpdG9yICogeworICAgIC13ZWJraXQtYm94LXNpemluZzogY29udGVu
dC1ib3g7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmFl
MTJlYjk3NDgyNzExZTMwMTY1OTk4MGEzYzgwMjZjYzE1ZDdkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMKQEAgLTAs
MCArMSw3NTEgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQor
ICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAq
KioqKiAqLworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3MnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3Rva2Vu
aXplcicsICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5n
X2JyYWNlX291dGRlbnQnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2FjZS9tb2RlL2Jl
aGF2aW91ci9jc3MnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3Ai
KTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2YXIgVG9rZW5pemVy
ID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIENzc0hpZ2hsaWdodFJ1
bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7
Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291
dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKK3ZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJl
KCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBDc3NCZWhhdmlv
dXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7Cit2YXIgQ1N0eWxl
Rm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBN
b2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihu
ZXcgQ3NzSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpLCAiaSIpOworICAgIHRoaXMuJG91dGRl
bnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKKyAgICB0aGlzLiRiZWhhdmlvdXIgPSBu
ZXcgQ3NzQmVoYXZpb3VyKCk7CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9s
ZE1vZGUoKTsKK307Citvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOworCisoZnVuY3Rpb24o
KSB7CisKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOworCisgICAgdGhpcy5nZXRO
ZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFy
IGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHRo
aXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CisgICAgICAg
IGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNv
bW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CisgICAgICAgIGlmIChtYXRj
aCkgeworICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24o
c3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNr
T3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091dGRlbnQgPSBm
dW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0
ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rp
b24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFj
ZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0
dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIu
b24oImNzc2xpbnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZXNzaW9uLnNldEFubm90
YXRpb25zKGUuZGF0YSk7CisgICAgICAgIH0pOworCisgICAgICAgIHdvcmtlci5vbigidGVybWlu
YXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMo
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9OworCit9KS5j
YWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKKworfSk7CisKK2Fj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbW9k
ZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSBy
ZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUo
Ii4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2YXIgc3VwcG9y
dFR5cGUgPSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFuaW1hdGlvbi1maWxsLW1vZGV8YWxpZ25t
ZW50LWFkanVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbi1k
aXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5p
bWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlv
bnxhbmltYXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxpdHl8YmFja2dy
b3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91
bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBv
c2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kfGJhc2Vs
aW5lLXNoaWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmstbGV2ZWx8Ym9v
a21hcmstc3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVyLWJvdHRvbS1j
b2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVz
fGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29sbGFwc2V8
Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRlci1pbWFn
ZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWlt
YWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxl
fGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yaWdo
dC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1zcGFj
aW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1s
ZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxlfGJvcmRl
ci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdufGJveC1kZWNv
cmF0aW9uLWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZsZXh8Ym94LWxp
bmVzfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNoYWRvd3xib3gt
c2l6aW5nfGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2FwdGlvbi1zaWRl
fGNsZWFyfGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8
Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHls
ZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250
ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0ZXJ8Y3VlLWJl
Zm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2VsaW5lfGRyb3At
aW5pdGlhbC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRyb3AtaW5pdGlh
bC1iZWZvcmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1pbml0aWFsLXNp
emV8ZHJvcC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8Zml0LXBvc2l0
aW9ufGZsb2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFk
anVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9u
dHxncmlkLWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0fGh5cGhl
bmF0ZS1hZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8aHlwaGVuYXRl
LWxpbmVzfGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3JpZW50YXRpb258
aW1hZ2UtcmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGlnbnxsZWZ0fGxl
dHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5lLXN0YWNraW5n
LXNoaWZ0fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0LXN0eWxlLWlt
YWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2lu
LWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJnaW58bWFyay1h
ZnRlcnxtYXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1hcnF1ZWUtcGxh
eS1jb3VudHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxtYXgtd2lkdGh8
bWluLWhlaWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8bmF2LWxlZnR8
bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9m
ZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvdy1zdHlsZXxv
dmVyZmxvdy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0
fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2Ut
YnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8cGF1c2UtYWZ0
ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwaG9u
ZW1lc3xwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVzZW50YXRpb24t
bGV2ZWx8cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxyZXNpemV8cmVz
dC1hZnRlcnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9uLXBvaW50fHJv
dGF0aW9ufHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1Ynktc3Bhbnxz
aXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWFrfHNw
ZWVjaC1yYXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQtbmFtZXx0YXJn
ZXQtbmV3fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRleHQtYWxpZ258
dGV4dC1kZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1pbmRlbnR8dGV4
dC1qdXN0aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0ZXh0LXdy
YXB8dG9wfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybXx0cmFuc2l0
aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0
aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGln
bnx2aXNpYmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2UtZmFtaWx5fHZv
aWNlLXBpdGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3RyZXNzfHZvaWNl
LXZvbHVtZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8d2lkb3dzfHdp
ZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKK3ZhciBzdXBw
b3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdiYXx1cmx8YXR0
cnxjb3VudGVyfGNvdW50ZXJzIjsKK3ZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBvcnRzLnN1cHBv
cnRDb25zdGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3JvbGx8YWxsfGFs
cGhhYmV0aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQtY29sdW1ufGF2
b2lkLXBhZ2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZvcmV8YmVsb3d8
YmlkaS1vdmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRlcnxib3JkZXIt
Ym94fGJvdGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNhcHMt
aGVpZ2h0fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGlj
fGNsb25lfGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNvbnNpZGVyLXNo
aWZ0c3xjb250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1iZXppZXJ8ZGFz
aGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRp
c3JlZ2FyZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlz
dHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWFzZS1pbnxl
YXNlLWluLW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1Ynl8ZmlsbHxm
aXhlZHxnZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFuZ2luZ3xoZWJy
ZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpY29ufGlk
ZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRl
b2dyYXBoLXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxpbmhlcml0fGlu
aXRpYWx8aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0fGlubGluZS10
YWJsZXxpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGludmVy
dHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxsYXN0fGxl
ZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxpc3QtaXRlbXxs
b2NhbHxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dlci1yb21h
bnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1heC1zaXplfG1l
ZGl1bXxtZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdz
cGFwZXJ8bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1xdW90ZXxuby1y
ZXBlYXR8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxvYmxpcXVlfG9w
ZW4tcXVvdGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFnZXxwb2ludGVy
fHByZS1saW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBl
YXQteHxyZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxyaWdodHxyb3Vu
ZHxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRlfHNsaWNl
fHNtYWxsLWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3RhcnR8c3RhdGlj
fHN0YXR1cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0cmljdHxzdWJ8
c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1jb2x1bW4tZ3Jv
dXB8dGFibGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3JvdXB8dGFi
bGUtcm93LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVkZ2V8dGV4dC1i
ZWZvcmUtZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0aGlja3x0aGlu
fHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21h
bnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0
fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyI7Cit2YXIgc3Vw
cG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9yID0gImFxdWF8
YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2ZXxvcmFu
Z2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciOwordmFyIHN1cHBvcnRDb25z
dGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlhbHxjZW50dXJ5
fGNvbWljfGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxz
eW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGlu
Z3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOworCit2YXIgbnVtUmUgPSBleHBvcnRzLm51
bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKK3ZhciBwc2V1
ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxiKGFmdGVyfGJl
Zm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVjdGlvbilcXGIi
OwordmFyIHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0gICIoOilcXGIo
YWN0aXZlfGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGlsZHxmaXJzdC1v
Zi10eXBlfGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNoaWxkfGxhc3Qt
b2YtdHlwZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxhc3Qtb2YtdHlw
ZXxudGgtb2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxyb290fHRhcmdl
dHx2YWxpZHx2aXNpdGVkKVxcYiI7CisKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9u
KCkgeworCisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIo
eworICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKKyAgICAgICAg
InN1cHBvcnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCisgICAgICAgICJzdXBwb3J0LnR5
cGUiOiBzdXBwb3J0VHlwZSwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiBzdXBw
b3J0Q29uc3RhbnRDb2xvciwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9udHMiOiBzdXBw
b3J0Q29uc3RhbnRGb250cworICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CisKKyAgICB2YXIgYmFzZV9y
dWxlc2V0ID0gWworICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8g
bXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAg
ICAgICAgbmV4dCA6ICJydWxlc2V0X2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
IHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAgICByZWdleCA6ICdb
Il0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJworICAgICAgICB9LCB7CisgICAgICAg
ICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgcmVnZXgg
OiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAorICAgICAg
ICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxmcnxnZHxncmFk
fEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2d3wlKSIKKyAg
ICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCisgICAg
ICAgICAgICByZWdleCA6IG51bVJlCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDog
ImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAi
I1thLWYwLTldezZ9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFu
dC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTld
ezN9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAi
ZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAorICAgICAg
ICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cworICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVk
by1jbGFzcy5jc3MiXSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3NlcworICAgICAg
ICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCisgICAgICAgICAgICBy
ZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKKyAgICAgICAgfQorICAgICAg
XTsKKworICAgIHZhciBydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9ydWxlc2V0KTsKKyAg
ICBydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAg
ICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJzdGFydCIKKyAgICB9KTsKKwor
ICAgIHZhciBtZWRpYV9ydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoIGJhc2VfcnVsZXNldCApOwor
ICAgIG1lZGlhX3J1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJl
biIsCisgICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgIm1lZGlhIgorICAg
IH0pOworCisgICAgdmFyIGJhc2VfY29tbWVudCA9IFt7CisgICAgICAgICAgdG9rZW4gOiAiY29t
bWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQorICAgICAgICAgIHJlZ2V4IDog
Ii4rIgorICAgIH1dOworCisgICAgdmFyIGNvbW1lbnQgPSBsYW5nLmNvcHlBcnJheShiYXNlX2Nv
bW1lbnQpOworICAgIGNvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4gOiAiY29tbWVu
dCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIsCisg
ICAgICAgICAgbmV4dCA6ICJzdGFydCIKKyAgICB9KTsKKworICAgIHZhciBtZWRpYV9jb21tZW50
ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKKyAgICBtZWRpYV9jb21tZW50LnVuc2hp
ZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAg
ICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAibWVkaWEiCisg
ICAgfSk7CisKKyAgICB2YXIgcnVsZXNldF9jb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9j
b21tZW50KTsKKyAgICBydWxlc2V0X2NvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xc
KlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJydWxlc2V0IgorICAgIH0pOworCisgICAgdGhpcy4k
cnVsZXMgPSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9rZW4gOiAiY29t
bWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwq
IiwKKyAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgfSwgeworICAgICAgICAg
ICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAorICAg
ICAgICAgICAgbmV4dDogICJydWxlc2V0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tl
bjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIkAuKj97IiwKKyAgICAgICAgICAgIG5l
eHQ6ICAibWVkaWEiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwK
KyAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAg
ICAgIHRva2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9d
KyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAg
ICByZWdleDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjog
ImNvbnN0YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCisgICAgICAgIH1d
LAorCisgICAgICAgICJtZWRpYSIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQi
LCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCisg
ICAgICAgICAgICBuZXh0IDogIm1lZGlhX2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKKyAg
ICAgICAgICAgIG5leHQ6ICAibWVkaWFfcnVsZXNldCIKKyAgICAgICAgfSx7CisgICAgICAgICAg
ICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIlxcfSIsCisgICAgICAgICAg
ICBuZXh0OiAgInN0YXJ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAia2V5d29y
ZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAg
ICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAt
OS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAg
ICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9r
ZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgorICAgICAg
ICB9XSwKKworICAgICAgICAiY29tbWVudCIgOiBjb21tZW50LAorCisgICAgICAgICJydWxlc2V0
IiA6IHJ1bGVzZXQsCisgICAgICAgICJydWxlc2V0X2NvbW1lbnQiIDogcnVsZXNldF9jb21tZW50
LAorCisgICAgICAgICJtZWRpYV9ydWxlc2V0IiA6IG1lZGlhX3J1bGVzZXQsCisgICAgICAgICJt
ZWRpYV9jb21tZW50IiA6IG1lZGlhX2NvbW1lbnQKKyAgICB9OworfTsKKworb29wLmluaGVyaXRz
KENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkNzc0hp
Z2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVmaW5lKCdh
Y2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIE1h
dGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisg
ICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAgICAgICBp
ZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1
dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBkb2Mu
Z2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8p
OworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBjb2x1bW4g
PSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1h
dGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAgICAgaWYg
KCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOworCisg
ICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNl
UG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNv
bHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rp
b24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAg
ICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGluZ0JyYWNl
T3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0
Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3Vy
L2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAn
YWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rv
a2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVx
dWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJl
cXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSBy
ZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisKK3ZhciBDc3NC
ZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZp
b3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3Rh
dGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09
PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRp
b24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Np
b24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgdmFyIHRva2VuID0g
aXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9r
ZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRv
ci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbiAm
JiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAgICAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgICAgICB2
YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVt
biArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywK
KyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmUuc3Vi
c3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCisgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKwor
ICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9u
LCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Np
b24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxp
bmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Np
b24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENo
YXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsg
MSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInNlbWljb2xv
biIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsKKyAgICAgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdo
dENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7
CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJl
aGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOworfSk7CisK
K2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdh
Y2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7
Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFy
IFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRl
cmF0b3I7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZF
X0lOU0VSVF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1
YXRpb24ub3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBb
InRleHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQi
XTsKKworCit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJv
dyA9IC0xOwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVk
QnJhY2tldHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2Vy
dGVkTGluZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFy
IENzdHlsZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlv
dXIuaXNTYW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAg
IHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0
ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNv
bHVtbik7CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3Vy
cmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAg
ICAgICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJv
dywgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2Vu
VHlwZShpdGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9J
Tl9UT0tFTlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0
Q3VycmVudFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1h
dGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9J
TlNFUlRfQkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIu
JG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVy
biB0eXBlcy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAK
KyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwg
c2Vzc2lvbiwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNv
clBvc2l0aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJz
b3Iucm93KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3Is
IGxpbmUsIGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVk
QnJhY2tldHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAg
ICAgICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5j
b2x1bW4pOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisg
ICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBz
ZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNv
ci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3Is
IGxpbmUpKQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAg
bWF5YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5l
U3RhcnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAg
IG1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAg
ICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVo
YXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJh
Y2tldCkgeworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAg
ICAgICAgICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJy
YWNrZXQgPT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vi
c3RyKGN1cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAg
CisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihj
dXJzb3IsIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAg
JiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAg
ICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVu
ZCAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJ
bnNlcnRlZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BB
dXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExp
bmVFbmQgPSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2Vy
dGVkQnJhY2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1h
eWJlSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRC
cmFja2V0cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisg
ICAgdGhpcy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlv
biwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3Iu
Z2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRM
aW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAg
IHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAg
IHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAg
ICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRv
ci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3Is
IHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1
cnNvci5jb2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVj
b3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhh
dmlvdXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAodGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1
YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBp
ZiAocmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNl
c3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAx
LCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51
bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUs
IHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5z
ZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJc
clxuIikgeworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChD
c3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7Cisg
ICAgICAgICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNl
cnRlZEJyYWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXli
ZUluc2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0
Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsK
KyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJh
Y2tldCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAg
ICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGlu
ZUluZGVudChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24u
Z2V0VGFiU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMu
JGdldEluZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9z
aW5nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAx
LCBpbmRlbnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5j
dGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2
YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBp
ZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAg
ICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAg
ICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCBy
YW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9Jykg
eworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJl
SW5zZXJ0ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0
aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7
CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7
CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdy
YXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lv
bikpIHsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChl
ZGl0b3IsIHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBb
MSwgMV0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHRleHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1
cnNvclBvc2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExp
bmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJp
bmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJp
Z2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9u
LiRmaW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93
OiBjdXJzb3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYm
IENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0
KSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVk
Q2xvc2luZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsx
LCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxl
dGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7
CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7
CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsK
KyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5y
b3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0
YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYg
KHJpZ2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rp
b24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAo
dGV4dCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdl
dFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAm
JiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywK
KyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24o
ZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNv
cmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vz
c2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAg
ICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRj
aGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5j
b2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hp
bmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJz
b3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5w
b3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgi
YnJhY2tldHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBz
ZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRU
ZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2Vs
ZWN0ZWQgPT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExp
bmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1
YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsK
KyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFu
Z2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVz
IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24s
IHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAg
ICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVk
aXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vz
c2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0
ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRv
ci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3Iu
Z2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0g
bGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9
IHNlc3Npb24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAg
IHZhciBjb2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsg
Ly8gVHJhY2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAg
ICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9z
ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2Vu
LnZhbHVlLmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2Vu
LnR5cGUgIT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxl
Y3Rpb24uc3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2Vu
LnZhbHVlLmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9u
KGVkaXRvciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBx
dW90ZSArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4g
JiYgdG9rZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJp
Z2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAx
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhp
cy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rp
b24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vz
c2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRp
TGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAg
ICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7Cisg
ICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29s
dW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRD
aGFyID09IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwor
ICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0pOworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIp
OworCitleHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRp
bmcvZm9sZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJl
KCIuLi8uLi9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9s
ZF9tb2RlIikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBm
dW5jdGlvbigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCiso
ZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15c
fVxdXSokfF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtc
e10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5n
ZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2go
dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
ICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1h
dGNoWzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50
Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJr
ZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5k
ZXggKyBtYXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNo
WzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9s
ZFJhbmdlKHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9k
ZS5wcm90b3R5cGUpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzgzYWFmYzA3ZWQ5YjI4MTg0
MTY2NjRkMDg1MzM5ZDA1NmVlOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCkBAIC0wLDAgKzEsMTg4NiBAQAor
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5W
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCisgKiAgICAgICBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKK2Fj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL21vZGUvamF2YXNjcmlwdCcs
ICdhY2UvbW9kZS9jc3MnLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9odG1sX2hpZ2hsaWdo
dF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsICdhY2UvbW9kZS9mb2xkaW5nL2h0
bWwnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9
IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIp
Lk1vZGU7Cit2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2Rl
OwordmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7Cit2YXIgVG9rZW5pemVyID0g
cmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIEh0bWxIaWdobGlnaHRSdWxl
cyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7
Cit2YXIgSHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2h0bWwiKS5IdG1sQmVo
YXZpb3VyOwordmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1sIikuRm9s
ZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGhpZ2hsaWdodGVyID0g
bmV3IEh0bWxIaWdobGlnaHRSdWxlcygpOworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tl
bml6ZXIoaGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3
IEh0bWxCZWhhdmlvdXIoKTsKKyAgICAKKyAgICB0aGlzLiRlbWJlZHMgPSBoaWdobGlnaHRlci5n
ZXRFbWJlZHMoKTsKKyAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeworICAgICAgICAianMt
IjogSmF2YVNjcmlwdE1vZGUsCisgICAgICAgICJjc3MtIjogQ3NzTW9kZQorICAgIH0pOworICAg
IAorICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOworfTsKK29vcC5p
bmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIAorICAgIHRo
aXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVu
ZFJvdykgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGlu
ZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJGdldEluZGVudChsaW5lKTsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBm
dW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3Rv
a2VuaXplcicsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9k
ZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScsICdhY2Uvd29ya2VyL3dvcmtl
cl9jbGllbnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvbW9kZS9mb2xkaW5n
L2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
b29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90
ZXh0IikuTW9kZTsKK3ZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tl
bml6ZXI7Cit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2Ny
aXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciBNYXRj
aGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1h
dGNoaW5nQnJhY2VPdXRkZW50OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5n
ZTsKK3ZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIp
LldvcmtlckNsaWVudDsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91
ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJl
KCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgSmF2YVNjcmlwdEhpZ2hs
aWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGlu
Z0JyYWNlT3V0ZGVudCgpOworICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlv
dXIoKTsKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOworfTsK
K29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworCisgICAg
dGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFydFJvdywg
ZW5kUm93KSB7CisgICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJlID0g
L14oXHMqKVwvXC8vOworCisgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBlbmRSb3c7
IGkrKykgeworICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5nZXRMaW5lKGkpKSkgeworICAg
ICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRkZW50KSB7CisgICAgICAg
ICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKKyAgICAgICAgICAgICAg
ICB2YXIgbSA9IGxpbmUubWF0Y2gocmUpOworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0
YXJ0LnJvdyA9IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IG1bMF0ubGVuZ3RoOworICAg
ICAgICAgICAgICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBtWzFdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvYy5pbmRlbnRSb3dz
KHN0YXJ0Um93LCBlbmRSb3csICIvLyIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMu
Z2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAgICAg
IHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisKKyAgICAgICAgdmFyIHRva2Vu
aXplZExpbmUgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7Cisg
ICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKKyAgICAgICAgdmFyIGVu
ZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKKworICAgICAgICBpZiAodG9rZW5zLmxlbmd0
aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgeworICAgICAg
ICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0
YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7CisgICAgICAgICAg
ICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMq
JC8pOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaW5kZW50ICs9
IHRhYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0
YXJ0IikgeworICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0g
InJlZ2V4X2FsbG93ZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsK
KyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkg
eworICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRk
ZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlz
LiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMu
YXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4k
b3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNy
ZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5l
dyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkph
dmFTY3JpcHRXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lv
bi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIub24oImpzbGludCIsIGZ1bmN0aW9u
KHJlc3VsdHMpIHsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5k
YXRhKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0
ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7
CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9Owor
Cit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZG9j
X2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVz
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSBy
ZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVx
dWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0
UnVsZXM7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdo
dF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIEphdmFTY3JpcHRIaWdobGlnaHRS
dWxlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVL
ZXl3b3JkTWFwcGVyKHsKKyAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKKyAgICAgICAgICAg
ICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdF
eHB8U3RyaW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCisgICAgICAgICAgICAiTmFtZXNw
YWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIC8vIEU0WAorICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJh
eXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKworICAg
ICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVk
QXJyYXl8IiAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJv
cnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwi
ICAgKyAvLyBFcnJvcnMKKyAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJy
b3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAg
ICAgICJkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21w
b25lbnR8ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9ucworICAg
ICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkpTT058TWF0aHwiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyAvLyBPdGhlcgorICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5k
b3d8ZG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAvLyBQc2V1ZG8K
KyAgICAgICAgImtleXdvcmQiOgorICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8
c2V0fCIgKworICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxk
ZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKKyAgICAgICAgICAgICJpZnxp
bnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3
aGlsZXx3aXRofGRlYnVnZ2VyfCIgKworICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9f
fGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKKyAgICAgICAgICAgICJjbGFzc3xl
bnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJm
YWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCisgICAgICAgICJzdG9yYWdlLnR5cGUiOgor
ICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAorICAgICAgICAiY29uc3RhbnQu
bGFuZ3VhZ2UiOgorICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCisg
ICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKKyAgICAgICAgICAgICJhbGVydCIsCisgICAgICAg
ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCisgICAgfSwgImlkZW50
aWZpZXIiKTsKKyAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxp
bnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOworICAgIHZhciBp
ZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUw
MGExLVx1ZmZmZl0qXFxiIjsKKworICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/OnhbMC05YS1m
QS1GXXsyfXwiICsgLy8gaGV4CisgICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNv
ZGUKKyAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CisgICAgICAgICIzWzAtNl1b
MC03XT98IiArIC8vIG9jdAorICAgICAgICAiMzdbMC03XT98IiArIC8vIG9jdAorICAgICAgICAi
WzQtN11bMC03XT98IiArIC8vb2N0CisgICAgICAgICIuKSI7CisKKyAgICB0aGlzLiRydWxlcyA9
IHsKKyAgICAgICAgInN0YXJ0IiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6ICJjb21tZW50IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wvLiokLworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFy
dFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAgICByZWdl
eCA6IC9cL1wqLywKKyAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAg
ICByZWdleCA6ICInKD89LikiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICciKD89LiknLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFx
c3RyaW5nIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0
YW50Lm51bWVyaWMiLCAvLyBoZXgKKyAgICAgICAgICAgICAgICByZWdleCA6IC8wW3hYXVswLTlh
LWZBLUZdK1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNv
bnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1srLV0/
XGQrKD86KD86XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8KKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2Uu
dHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0
aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgorICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKHByb3RvdHlw
ZSkoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCisgICAgICAgICAgICAgICAg
bmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5j
dHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAg
ICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUi
LCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJS
ZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5j
dGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUi
LAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIiko
XFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5l
eHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1
YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCisgICAgICAg
ICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAorICAgICAgICAgICAgICAg
ICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4
dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIiko
XFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAorICAgICAg
ICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5
cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJl
biIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlv
bikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5j
dGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICAg
ICAgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUg
KyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAg
ICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIsICJz
dG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCki
LAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCisgICAgICAgICAgICAg
ICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCisgICAgICAgICAgICAgICAg
bmV4dCA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIl0sCisg
ICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNz
RGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRv
KT98dCg/Om9wenp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRleHQpfG9ydHx1
KD86cHxiKD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpSZSg/OnNpemFi
bGV8cXVlc3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xI
byg/OnRLZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFsfFpPcHRpb25z
fERhdGV8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJz
fERhdGV8RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8YXZlUHJlZmVy
ZW5jZXN8bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFyKD86Q29kZUF0
fEF0KXxvKD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFyKD86VGltZW91
dHxJbnRlcnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNoZWV0fFBvcHVw
fEV2ZW50T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNlKXxVKD86VENT
dHJpbmd8cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEoPzpufGludCg/
OkVuYWJsZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8ZCg/OmlzYWJs
ZUV4dGVybmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0YWludHxlc2Nh
cGV8d2F0Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/Om8oPzpwfHcp
fHVzaHxsdWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/KXxyKD86aW50
fG9tcHR8ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8dmFsfGxlbWVu
dEZyb21Qb2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9mfFVUQ3xxdWVy
eUNvbW1hbmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/Om5kfGxlKD86
TW9kaWZpZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8byg/Om50KD86
c2l6ZXxjb2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzppbmt8byg/OmFk
fGcpfGFzdEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8b2J8YW4oPzoy
KT8pfHBwbHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8ZSg/OnNpemUo
PzpCeXxUbyl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNlKD86Q2FwdHVy
ZXxFdmVudHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/OmkoPzpudXRl
c3xsbGlzZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFllYXJ8VGltZSg/
OnpvbmVPZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8
b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVhcnxBKD86dHRl
bnRpb258bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVsb3cpfFRvKD86
QWJzb2x1dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4KSl8Yig/OnRv
YXxpZ3xvKD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLworICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJz
dXBwb3J0LmZ1bmN0aW9uLmRvbSJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/
OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0
ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMo
PzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258
YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2lu
Z0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYklu
ZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86
Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/Omxu
KT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0
YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFt
ZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5v
ZGUpPyl8Ymx1cilcYig/PVwoKS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5jb25zdGFudCJdLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9s
bGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0
fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86
UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxG
b2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/
OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/
Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8
bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0
aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQo
PzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxp
KD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86
c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86
c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzpp
KD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmll
cyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkp
fHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBk
YXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8
bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVm
dCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykp
fHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4
KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8
dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJ
fE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdo
dCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/
OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xs
TmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVk
fGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVy
c2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0
aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNv
bnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/Omlt
ZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwo
PzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0
V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJE
ZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5v
cGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0aW1lRW5kfGFz
c2VydClcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdv
cmRNYXBwZXIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKKyAg
ICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitcLX5dfD09PXw9PXw9fCE9fCE9
PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwlPXxcKz18XC09
fCY9fFxePS8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8XDt8XC4vLAorICAgICAgICAg
ICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgICAgICByZWdleCA6
IC9bXFsoe10vLAorICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKKyAg
ICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAvXC89Py8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLworICAgICAgICAgICAgfQorICAgICAgICBdLAorICAg
ICAgICAicmVnZXhfYWxsb3dlZCI6IFsKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRS
dWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAg
ICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVu
dF9yZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKKyAgICAg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAorICAg
ICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgi
LAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIiLAorICAgICAg
ICAgICAgICAgIG5leHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAg
ICAgInJlZ2V4IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAicmVn
ZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVb
XFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKKyAgICAgICAgICAgICAgICByZWdl
eDogIi9cXHcqIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiLAorICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAvXHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0v
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFu
Z3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXx7XGQr
LD8oPzpcZCspP318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKKyAg
ICAgICAgICAgICAgICByZWdleDogL1x8LworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICBy
ZWdleDogL1xbXF4/LywKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hhcmFjdGVyX2Ns
YXNzIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwK
KyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFy
dCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJp
bmcucmVnZXhwIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXhfY2hh
cmFjdGVyX2NsYXNzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAi
cmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/
OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiAiXSIsCisgICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IiwKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdl
LmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICItIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAi
JCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNz
IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRz
IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFy
YW1ldGVyIiwKKyAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisg
ICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIsCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAg
cmVnZXg6ICIkIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVt
cHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4dDog
InN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudF9yZWdl
eF9hbGxvd2VkIiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAi
XFwqXFwvIiwgbmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCisgICAgICAgICAgICB7ZGVmYXVsdFRv
a2VuIDogImNvbW1lbnQifQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudCIgOiBbCisgICAg
ICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQgOiAic3Rh
cnQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAgICAgIF0s
CisgICAgICAgICJxcXN0cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdl
eCA6IGVzY2FwZWRSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDog
InN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAgICAgICAg
ICAgIG5leHQgIDogInFxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCisgICAg
ICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwK
KyAgICAgICAgInFzdHJpbmciIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRv
a2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXgg
OiBlc2NhcGVkUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJz
dHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKKyAgICAgICAgICAgICAg
ICBuZXh0ICA6ICJxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCisgICAgICAg
ICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAg
IH07CisKKyAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9j
LSIsCisgICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0
IikgXSk7Cit9OworCitvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0
SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEph
dmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9kb2Nf
Y29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIu
Li9saWIvb29wIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hp
Z2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIERvY0NvbW1lbnRIaWdo
bGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAg
ICJzdGFydCIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisg
ICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJl
c3NlcworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWci
LAorICAgICAgICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgorICAgICAgICB9XQorICAgIH07Cit9
OworCitvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0
UnVsZXMpOworCitEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rp
b24oc3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIs
IC8vIGRvYyBjb21tZW50CisgICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAorICAgICAg
ICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKK0RvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5n
ZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdG9r
ZW4gOiAiY29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgcmVnZXggOiAi
XFwqXFwvIiwKKyAgICAgICAgbmV4dCAgOiBzdGFydAorICAgIH07Cit9OworCisKK2V4cG9ydHMu
RG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOworCit9
KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3Jhbmdl
IikuUmFuZ2U7CisKK3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CisK
KyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwg
aW5wdXQpIHsKKyAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKKyAg
ICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CisgICAg
ICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGlu
ZS5tYXRjaCgvXihccypcfSkvKTsKKworICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKKwor
ICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOworICAgICAgICB2YXIgb3BlbkJy
YWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVt
bn0pOworCisgICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0g
cm93KSByZXR1cm4gMDsKKworICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRv
Yy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKKyAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJh
bmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CisgICAgfTsKKworICAgIHRoaXMu
JGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5t
YXRjaCgvXihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgcmV0dXJu
IG1hdGNoWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisKK30p
LmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKKworZXhwb3J0cy5NYXRjaGlu
Z0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50OworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdG9rZW5faXRl
cmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZp
b3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0
b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIg
bGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZFX0lOU0VSVF9JTl9U
T0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3BlcmF0
b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBbInRleHQiLCAicGFy
ZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsKKworCit2YXIg
YXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJvdyA9IC0xOwordmFy
IGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkQnJhY2tldHMgPSAw
OwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2VydGVkTGluZVN0YXJ0
ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFyIENzdHlsZUJlaGF2
aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5z
ZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3
IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CisgICAg
ICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkg
fHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAgICAgICB2YXIgaXRl
cmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNv
bHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRv
cjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpdGVyYXRv
ci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2Vu
Um93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1hdGNoVG9rZW5UeXBl
KGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfQkVGT1JF
X1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5U
eXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVybiB0eXBlcy5pbmRl
eE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVC
ZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbiwgYnJh
Y2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7
CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAg
ICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIGF1dG9J
bnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMgPSAw
OworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAgICAgICBhdXRvSW5z
ZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOworICAg
ICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVo
YXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFj
a2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
KyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAg
ICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKQorICAg
ICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRl
ZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSBsaW5l
LnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAgIG1heWJlSW5zZXJ0
ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIG1heWJlSW5z
ZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0
b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkgeworICAg
ICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAgICAgICBjdXJz
b3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJyYWNrZXQgPT09IGF1
dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5j
b2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAgCisgICAgQ3N0eWxl
QmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUp
IHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAg
ICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGxpbmUu
c3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAmJgorICAgICAg
ICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNlcnRlZExpbmVT
dGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRD
bG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBhdXRv
SW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMt
LTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRD
bG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7
CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisgICAgdGhpcy5hZGQo
ImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBz
ZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rp
b24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rl
ZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYg
KHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5nZXRXcmFwQmVo
YXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7
CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNvci5jb2x1bW5d
KSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2Vy
dChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3Jk
TWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9
PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJz
b3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRP
cGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNv
ci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxl
QmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5n
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxuIikgeworICAg
ICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChDc3R5bGVCZWhhdmlv
dXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CisgICAgICAgICAgICAg
ICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRlZEJyYWNrZXRz
KTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xv
c2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUu
c3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAg
IGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiBj
dXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAgICAgICAgICAgICAg
IGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUluZGVudChzdGF0
ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5n
KCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdldEluZGVudChs
aW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLAorICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVu
Z3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUs
IGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQg
PSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlz
TXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9
IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciBy
aWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29s
dW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAg
ICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFj
a2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFk
ZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7CisgICAgICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAg
ICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAg
ICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJz
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChD
c3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAg
ICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Np
b24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0g
JyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9u
KCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJv
dyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNv
bHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAn
KScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3Blbmlu
Z0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93
fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2
aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgeworICAgICAg
ICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZh
ciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlm
ICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAg
ICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiAr
IDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9
PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBh
Y3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnWycp
IHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2Uo
KTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShz
ZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0
V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNz
aW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0
KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0
TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0
cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Np
b24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCBy
b3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwg
JiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRl
eHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0
ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
WzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAi
ZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5n
ZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFu
Z2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ1sn
KSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3Rh
cnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5n
ZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAg
IGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVt
bisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlv
biIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAg
ICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAgICAgICAgICB2YXIg
cXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxl
Y3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0
VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYm
IHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVo
YXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUo
Y3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGluZS5zdWJzdHJp
bmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0
VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAgIHZhciBjb2wgPSAw
LCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8gVHJhY2sgd2hl
dGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAgICAgICAgIGZvciAo
dmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9
PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0gLTE7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZhbHVlLmxlbmd0
aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBj
b2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5cGUgIT09ICJj
b21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rpb24uc3RhcnQu
Y29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZhbHVlLmxhc3RJ
bmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vz
c2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQorICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdG9rZW4udHlw
ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxp
bmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmlu
Z19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwg
c2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0
VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChz
ZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAgICAgICAgdmFyIGxp
bmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2
YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFu
Z2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVj
dGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAg
ICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCit9
OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOworCitleHBvcnRz
LkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCithY2UuZGVmaW5lKCdh
Y2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2Rl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSBy
ZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5n
ZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9s
ZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9
Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVuY3Rpb24oKSB7
CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxdXSokfF5ccyoo
XC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10qKFx9fFxdKXxe
W1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9u
KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5n
ZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5n
U3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0g
bWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3cs
IGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJv
dywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9s
ZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOworICAgICAg
ICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFsw
XS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkp
OworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywg
aSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUp
OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS90ZXh0JywgJ2FjZS90b2tl
bml6ZXInLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9tYXRjaGlu
Z19icmFjZV9vdXRkZW50JywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2UvbW9kZS9i
ZWhhdmlvdXIvY3NzJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29w
Iik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRva2VuaXpl
ciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBDc3NIaWdobGlnaHRS
dWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVz
OwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9v
dXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWly
ZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7Cit2YXIgQ3NzQmVoYXZp
b3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwordmFyIENTdHls
ZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOworCit2YXIg
TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIo
bmV3IENzc0hpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSwgImkiKTsKKyAgICB0aGlzLiRvdXRk
ZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0g
bmV3IENzc0JlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZv
bGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9u
KCkgeworCisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKKworICAgIHRoaXMuZ2V0
TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAgICAgIHZh
ciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSB0
aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOworICAgICAg
ICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJj
b21tZW50IikgeworICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOworICAgICAgICBpZiAobWF0
Y2gpIHsKKyAgICAgICAgICAgIGluZGVudCArPSB0YWI7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gaW5kZW50OworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9u
KHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVj
a091dGRlbnQobGluZSwgaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRkZW50ID0g
ZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091
dGRlbnQoZG9jLCByb3cpOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0
aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJh
Y2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CisgICAgICAgIHdvcmtlci5h
dHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAgICAgd29ya2Vy
Lm9uKCJjc3NsaW50IiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5v
dGF0aW9ucyhlLmRhdGEpOworICAgICAgICB9KTsKKworICAgICAgICB3b3JrZXIub24oInRlcm1p
bmF0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25z
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB3b3JrZXI7CisgICAgfTsKKworfSku
Y2FsbChNb2RlLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7CisKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL21v
ZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0g
cmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJl
KCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwordmFyIHN1cHBv
cnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbmltYXRpb24tZmlsbC1tb2RlfGFsaWdu
bWVudC1hZGp1c3R8YWxpZ25tZW50LWJhc2VsaW5lfGFuaW1hdGlvbi1kZWxheXxhbmltYXRpb24t
ZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFu
aW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rp
b258YW5pbWF0aW9ufGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZmFjZS12aXNpYmlsaXR5fGJhY2tn
cm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJyZWFrfGJhY2tncm91bmQtY2xpcHxiYWNrZ3Jv
dW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1w
b3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3VuZHxiYXNl
bGluZS1zaGlmdHxiaW5kaW5nfGJsZWVkfGJvb2ttYXJrLWxhYmVsfGJvb2ttYXJrLWxldmVsfGJv
b2ttYXJrLXN0YXRlfGJvb2ttYXJrLXRhcmdldHxib3JkZXItYm90dG9tfGJvcmRlci1ib3R0b20t
Y29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1
c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWNvbGxhcHNl
fGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1h
Z2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1p
bWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHls
ZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxib3JkZXItcmln
aHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItc3Bh
Y2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3At
bGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1zdHlsZXxib3Jk
ZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1hbGlnbnxib3gtZGVj
b3JhdGlvbi1icmVha3xib3gtZGlyZWN0aW9ufGJveC1mbGV4LWdyb3VwfGJveC1mbGV4fGJveC1s
aW5lc3xib3gtb3JkaW5hbC1ncm91cHxib3gtb3JpZW50fGJveC1wYWNrfGJveC1zaGFkb3d8Ym94
LXNpemluZ3xicmVhay1hZnRlcnxicmVhay1iZWZvcmV8YnJlYWstaW5zaWRlfGNhcHRpb24tc2lk
ZXxjbGVhcnxjbGlwfGNvbG9yLXByb2ZpbGV8Y29sb3J8Y29sdW1uLWNvdW50fGNvbHVtbi1maWxs
fGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGUtc3R5
bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNvbHVtbnN8Y29u
dGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGNyb3B8Y3VlLWFmdGVyfGN1ZS1i
ZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxkb21pbmFudC1iYXNlbGluZXxkcm9w
LWluaXRpYWwtYWZ0ZXItYWRqdXN0fGRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbnxkcm9wLWluaXRp
YWwtYmVmb3JlLWFkanVzdHxkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWdufGRyb3AtaW5pdGlhbC1z
aXplfGRyb3AtaW5pdGlhbC12YWx1ZXxlbGV2YXRpb258ZW1wdHktY2VsbHN8Zml0fGZpdC1wb3Np
dGlvbnxmbG9hdC1vZmZzZXR8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZvbnQtc2l6ZS1h
ZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZv
bnR8Z3JpZC1jb2x1bW5zfGdyaWQtcm93c3xoYW5naW5nLXB1bmN0dWF0aW9ufGhlaWdodHxoeXBo
ZW5hdGUtYWZ0ZXJ8aHlwaGVuYXRlLWJlZm9yZXxoeXBoZW5hdGUtY2hhcmFjdGVyfGh5cGhlbmF0
ZS1saW5lc3xoeXBoZW5hdGUtcmVzb3VyY2V8aHlwaGVuc3xpY29ufGltYWdlLW9yaWVudGF0aW9u
fGltYWdlLXJlbmRlcmluZ3xpbWFnZS1yZXNvbHV0aW9ufGlubGluZS1ib3gtYWxpZ258bGVmdHxs
ZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaW5lLXN0YWNraW5nLXJ1Ynl8bGluZS1zdGFja2lu
Zy1zaGlmdHxsaW5lLXN0YWNraW5nLXN0cmF0ZWd5fGxpbmUtc3RhY2tpbmd8bGlzdC1zdHlsZS1p
bWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdp
bi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFyZ2lufG1hcmst
YWZ0ZXJ8bWFyay1iZWZvcmV8bWFya3xtYXJrc3xtYXJxdWVlLWRpcmVjdGlvbnxtYXJxdWVlLXBs
YXktY291bnR8bWFycXVlZS1zcGVlZHxtYXJxdWVlLXN0eWxlfG1heC1oZWlnaHR8bWF4LXdpZHRo
fG1pbi1oZWlnaHR8bWluLXdpZHRofG1vdmUtdG98bmF2LWRvd258bmF2LWluZGV4fG5hdi1sZWZ0
fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8b3V0bGluZS1v
ZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZsb3ctc3R5bGV8
b3ZlcmZsb3cteHxvdmVyZmxvdy15fG92ZXJmbG93fHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVm
dHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1hZnRlcnxwYWdl
LWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLXBvbGljeXxwYWdlfHBhdXNlLWFm
dGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3RpdmV8cGhv
bmVtZXN8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9zaXRpb258cHJlc2VudGF0aW9u
LWxldmVsfHB1bmN0dWF0aW9uLXRyaW18cXVvdGVzfHJlbmRlcmluZy1pbnRlbnR8cmVzaXplfHJl
c3QtYWZ0ZXJ8cmVzdC1iZWZvcmV8cmVzdHxyaWNobmVzc3xyaWdodHxyb3RhdGlvbi1wb2ludHxy
b3RhdGlvbnxydWJ5LWFsaWdufHJ1Ynktb3Zlcmhhbmd8cnVieS1wb3NpdGlvbnxydWJ5LXNwYW58
c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlvbnxzcGVha3xz
cGVlY2gtcmF0ZXxzdHJlc3N8c3RyaW5nLXNldHx0YWJsZS1sYXlvdXR8dGFyZ2V0LW5hbWV8dGFy
Z2V0LW5ld3x0YXJnZXQtcG9zaXRpb258dGFyZ2V0fHRleHQtYWxpZ24tbGFzdHx0ZXh0LWFsaWdu
fHRleHQtZGVjb3JhdGlvbnx0ZXh0LWVtcGhhc2lzfHRleHQtaGVpZ2h0fHRleHQtaW5kZW50fHRl
eHQtanVzdGlmeXx0ZXh0LW91dGxpbmV8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dGV4dC13
cmFwfHRvcHx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm18dHJhbnNp
dGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNp
dGlvbi10aW1pbmctZnVuY3Rpb258dHJhbnNpdGlvbnx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxp
Z258dmlzaWJpbGl0eXx2b2ljZS1iYWxhbmNlfHZvaWNlLWR1cmF0aW9ufHZvaWNlLWZhbWlseXx2
b2ljZS1waXRjaC1yYW5nZXx2b2ljZS1waXRjaHx2b2ljZS1yYXRlfHZvaWNlLXN0cmVzc3x2b2lj
ZS12b2x1bWV8dm9sdW1lfHdoaXRlLXNwYWNlLWNvbGxhcHNlfHdoaXRlLXNwYWNlfHdpZG93c3x3
aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7Cit2YXIgc3Vw
cG9ydEZ1bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24gPSAicmdifHJnYmF8dXJsfGF0
dHJ8Y291bnRlcnxjb3VudGVycyI7Cit2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBw
b3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxh
bHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxh
dm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93
fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVy
LWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBz
LWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhp
Y3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1z
aGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRh
c2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xk
aXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRp
c3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58
ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8
Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVi
cmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxp
ZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlk
ZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxp
bml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUt
dGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZl
cnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxs
ZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18
bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9t
YW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxt
ZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3
c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8t
cmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxv
cGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRl
cnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVw
ZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91
bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGlj
ZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRp
Y3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3Vi
fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdy
b3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRh
YmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQt
YmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhp
bnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9t
YW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4
dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm8iOwordmFyIHN1
cHBvcnRDb25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRDb2xvciA9ICJhcXVh
fGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3Jh
bmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93IjsKK3ZhciBzdXBwb3J0Q29u
c3RhbnRGb250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9udHMgPSAiYXJpYWx8Y2VudHVy
eXxjb21pY3xjb3VyaWVyfGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFjdHxsdWNpZGF8
c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJkYW5hfHdlYmRp
bmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKKwordmFyIG51bVJlID0gZXhwb3J0cy5u
dW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7Cit2YXIgcHNl
dWRvRWxlbWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0gIihcXDorKVxcYihhZnRlcnxi
ZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxlY3Rpb24pXFxi
IjsKK3ZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxi
KGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qt
b2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0
LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5
cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJn
ZXR8dmFsaWR8dmlzaXRlZClcXGIiOworCit2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlv
bigpIHsKKworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVy
KHsKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb24sCisgICAgICAg
ICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAorICAgICAgICAic3VwcG9ydC50
eXBlIjogc3VwcG9ydFR5cGUsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjogc3Vw
cG9ydENvbnN0YW50Q29sb3IsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3Vw
cG9ydENvbnN0YW50Rm9udHMKKyAgICB9LCAidGV4dCIsIHRydWUpOworCisgICAgdmFyIGJhc2Vf
cnVsZXNldCA9IFsKKyAgICAgICAgeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8v
IG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKKyAgICAg
ICAgICAgIG5leHQgOiAicnVsZXNldF9jb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAg
ICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgcmVnZXggOiAn
WyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgIHJlZ2V4
IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwgImtleXdvcmQiXSwKKyAgICAg
ICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3Jh
ZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18dnd8JSkiCisg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAorICAg
ICAgICAgICAgcmVnZXggOiBudW1SZQorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDog
IiNbYS1mMC05XXs2fSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3Rh
bnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05
XXszfSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwg
ImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3MiXSwKKyAgICAg
ICAgICAgIHJlZ2V4IDogcHNldWRvRWxlbWVudHMKKyAgICAgICAgfSwgeworICAgICAgICAgICAg
dG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1
ZG8tY2xhc3MuY3NzIl0sCisgICAgICAgICAgICByZWdleCA6IHBzZXVkb0NsYXNzZXMKKyAgICAg
ICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAorICAgICAgICAgICAg
cmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCisgICAgICAgIH0KKyAgICAg
IF07CisKKyAgICB2YXIgcnVsZXNldCA9IGxhbmcuY29weUFycmF5KGJhc2VfcnVsZXNldCk7Cisg
ICAgcnVsZXNldC51bnNoaWZ0KHsKKyAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKKyAg
ICAgICAgcmVnZXggOiAiXFx9IiwKKyAgICAgICAgbmV4dDogICAic3RhcnQiCisgICAgfSk7CisK
KyAgICB2YXIgbWVkaWFfcnVsZXNldCA9IGxhbmcuY29weUFycmF5KCBiYXNlX3J1bGVzZXQgKTsK
KyAgICBtZWRpYV9ydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFy
ZW4iLAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJtZWRpYSIKKyAg
ICB9KTsKKworICAgIHZhciBiYXNlX2NvbW1lbnQgPSBbeworICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKKyAgICAgICAgICByZWdleCA6
ICIuKyIKKyAgICB9XTsKKworICAgIHZhciBjb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9j
b21tZW50KTsKKyAgICBjb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1l
bnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAor
ICAgICAgICAgIG5leHQgOiAic3RhcnQiCisgICAgfSk7CisKKyAgICB2YXIgbWVkaWFfY29tbWVu
dCA9IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7CisgICAgbWVkaWFfY29tbWVudC51bnNo
aWZ0KHsKKyAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50Cisg
ICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKKyAgICAgICAgICBuZXh0IDogIm1lZGlhIgor
ICAgIH0pOworCisgICAgdmFyIHJ1bGVzZXRfY29tbWVudCA9IGxhbmcuY29weUFycmF5KGJhc2Vf
Y29tbWVudCk7CisgICAgcnVsZXNldF9jb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9c
XCpcXC8iLAorICAgICAgICAgIG5leHQgOiAicnVsZXNldCIKKyAgICB9KTsKKworICAgIHRoaXMu
JHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xc
KiIsCisgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKKyAg
ICAgICAgICAgIG5leHQ6ICAicnVsZXNldCIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9r
ZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJALio/eyIsCisgICAgICAgICAgICBu
ZXh0OiAgIm1lZGlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIs
CisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAg
ICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1f
XSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAg
ICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46
ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgorICAgICAgICB9
XSwKKworICAgICAgICAibWVkaWEiIDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50
IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAor
ICAgICAgICAgICAgbmV4dCA6ICJtZWRpYV9jb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAg
ICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICByZWdleDogIlxceyIsCisg
ICAgICAgICAgICBuZXh0OiAgIm1lZGlhX3J1bGVzZXQiCisgICAgICAgIH0seworICAgICAgICAg
ICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAorICAgICAgICAg
ICAgbmV4dDogICJzdGFydCIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogImtleXdv
cmQiLAorICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAg
ICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCisgICAgICAgICAgICByZWdleDogIlxcLlthLXow
LTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRv
a2VuOiAiY29uc3RhbnQiLAorICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKKyAgICAg
ICAgfV0sCisKKyAgICAgICAgImNvbW1lbnQiIDogY29tbWVudCwKKworICAgICAgICAicnVsZXNl
dCIgOiBydWxlc2V0LAorICAgICAgICAicnVsZXNldF9jb21tZW50IiA6IHJ1bGVzZXRfY29tbWVu
dCwKKworICAgICAgICAibWVkaWFfcnVsZXNldCIgOiBtZWRpYV9ydWxlc2V0LAorICAgICAgICAi
bWVkaWFfY29tbWVudCIgOiBtZWRpYV9jb21tZW50CisgICAgfTsKK307CisKK29vcC5pbmhlcml0
cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKKworZXhwb3J0cy5Dc3NI
aWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOworCit9KTsKKworYWNlLmRlZmluZSgn
YWNlL21vZGUvYmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91
ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2
YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENz
dHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFy
IFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRl
cmF0b3I7CisKK3ZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmlu
aGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRp
b24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7Cisg
ICAgICAgIGlmICh0ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBU
b2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAg
ICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAg
ICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAg
ICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsK
KyAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNv
bHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIg
PT09ICc6JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwg
MV0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICc6OycsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZh
ciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlm
ICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAg
ICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAg
ICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCBy
YW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycp
IHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAg
IHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAg
dGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlv
biwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsK
KyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAg
ICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBj
dXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAor
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NC
ZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3Nz
QmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1
bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdh
Y2UvbGliL2xhbmcnLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9q
YXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS94bWxfdXRpbCcsICdhY2UvbW9k
ZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSBy
ZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgi
Li9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7Cit2YXIgSmF2YVNjcmlw
dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIp
LkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciB4bWxVdGlsID0gcmVxdWlyZSgiLi94bWxf
dXRpbCIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGln
aHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciB0YWdNYXAgPSBsYW5nLmNyZWF0
ZU1hcCh7CisgICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKKyAgICBidXR0b24gICAgICA6ICdm
b3JtJywKKyAgICBmb3JtICAgICAgICA6ICdmb3JtJywKKyAgICBpbWcgICAgICAgICA6ICdpbWFn
ZScsCisgICAgaW5wdXQgICAgICAgOiAnZm9ybScsCisgICAgbGFiZWwgICAgICAgOiAnZm9ybScs
CisgICAgc2NyaXB0ICAgICAgOiAnc2NyaXB0JywKKyAgICBzZWxlY3QgICAgICA6ICdmb3JtJywK
KyAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKKyAgICBzdHlsZSAgICAgICA6ICdzdHlsZScsCisg
ICAgdGFibGUgICAgICAgOiAndGFibGUnLAorICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKKyAg
ICB0ZCAgICAgICAgICA6ICd0YWJsZScsCisgICAgdGZvb3QgICAgICAgOiAndGFibGUnLAorICAg
IHRoICAgICAgICAgIDogJ3RhYmxlJywKKyAgICB0ciAgICAgICAgICA6ICd0YWJsZScKK30pOwor
Cit2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kcnVsZXMg
PSB7CisgICAgICAgIHN0YXJ0IDogW3sKKyAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAg
ICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwKKyAgICAgICAgICAgIG5leHQgOiAi
Y2RhdGEiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogInhtbC1wZSIsCisgICAg
ICAgICAgICByZWdleCA6ICI8XFw/Lio/XFw/PiIKKyAgICAgICAgfSwgeworICAgICAgICAgICAg
dG9rZW4gOiAiY29tbWVudCIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhLS0iLAorICAgICAg
ICAgICAgbmV4dCA6ICJjb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
ICJ4bWwtcGUiLAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIS4qPz4iCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4IDogIjwo
Pz1zY3JpcHRcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic2NyaXB0IgorICAgICAgICB9LCB7
CisgICAgICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsCisgICAgICAgICAgICByZWdleCA6ICI8
KD89c3R5bGVcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic3R5bGUiCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwgLy8gb3BlbmluZyB0YWcKKyAgICAgICAg
ICAgIHJlZ2V4IDogIjxcXC8/IiwKKyAgICAgICAgICAgIG5leHQgOiAidGFnIgorICAgICAgICB9
LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIlxc
cysiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rl
ci5lbnRpdHkiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05
YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCisgICAgICAgIH1dLAorICAgIAor
ICAgICAgICBjZGF0YSA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAg
ICAgICByZWdleCA6ICJcXF1cXF0+IiwKKyAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCisgICAg
ICAgIH0gXSwKKworICAgICAgICBjb21tZW50IDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJj
b21tZW50IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4qPy0tPiIsCisgICAgICAgICAgICBuZXh0
IDogInN0YXJ0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29t
bWVudCIKKyAgICAgICAgfSBdCisgICAgfTsKKyAgICAKKyAgICB4bWxVdGlsLnRhZyh0aGlzLiRy
dWxlcywgInRhZyIsICJzdGFydCIsIHRhZ01hcCk7CisgICAgeG1sVXRpbC50YWcodGhpcy4kcnVs
ZXMsICJzdHlsZSIsICJjc3Mtc3RhcnQiLCB0YWdNYXApOworICAgIHhtbFV0aWwudGFnKHRoaXMu
JHJ1bGVzLCAic2NyaXB0IiwgImpzLXN0YXJ0IiwgdGFnTWFwKTsKKyAgICAKKyAgICB0aGlzLmVt
YmVkUnVsZXMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCAianMtIiwgW3sKKyAgICAgICAgdG9r
ZW46ICJjb21tZW50IiwKKyAgICAgICAgcmVnZXg6ICJcXC9cXC8uKig/PTxcXC9zY3JpcHQ+KSIs
CisgICAgICAgIG5leHQ6ICJ0YWciCisgICAgfSwgeworICAgICAgICB0b2tlbjogIm1ldGEudGFn
IiwKKyAgICAgICAgcmVnZXg6ICI8XFwvKD89c2NyaXB0KSIsCisgICAgICAgIG5leHQ6ICJ0YWci
CisgICAgfV0pOworICAgIAorICAgIHRoaXMuZW1iZWRSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywg
ImNzcy0iLCBbeworICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwKKyAgICAgICAgcmVnZXg6ICI8
XFwvKD89c3R5bGUpIiwKKyAgICAgICAgbmV4dDogInRhZyIKKyAgICB9XSk7Cit9OworCitvb3Au
aW5oZXJpdHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBv
cnRzLkh0bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS94bWxfdXRpbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworZnVuY3Rpb24g
c3RyaW5nKHN0YXRlKSB7CisgICAgcmV0dXJuIFt7CisgICAgICAgIHRva2VuIDogInN0cmluZyIs
CisgICAgICAgIHJlZ2V4IDogJyInLAorICAgICAgICBuZXh0IDogc3RhdGUgKyAiX3Fxc3RyaW5n
IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgcmVnZXggOiAi
JyIsCisgICAgICAgIG5leHQgOiBzdGF0ZSArICJfcXN0cmluZyIKKyAgICB9XTsKK30KKworZnVu
Y3Rpb24gbXVsdGlMaW5lU3RyaW5nKHF1b3RlLCBzdGF0ZSkgeworICAgIHJldHVybiBbCisgICAg
ICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IHF1b3RlLCBuZXh0IDogc3RhdGV9LAorICAg
ICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAor
ICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwo
PzomW2EtekEtWjAtOV86XFwuLV0rOykiIAorICAgICAgICB9LAorICAgICAgICB7ZGVmYXVsdFRv
a2VuIDogInN0cmluZyJ9CisgICAgXTsKK30KKworZXhwb3J0cy50YWcgPSBmdW5jdGlvbihzdGF0
ZXMsIG5hbWUsIG5leHRTdGF0ZSwgdGFnTWFwKSB7CisgICAgc3RhdGVzW25hbWVdID0gW3sKKyAg
ICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgfSwgewor
ICAgICAgICAKKyAgICB0b2tlbiA6ICF0YWdNYXAgPyAibWV0YS50YWcudGFnLW5hbWUiIDogZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0YWdNYXBbdmFsdWVdKQorICAgICAgICAg
ICAgICAgIHJldHVybiAibWV0YS50YWcudGFnLW5hbWUuIiArIHRhZ01hcFt2YWx1ZV07CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRhLnRhZy50YWctbmFtZSI7
CisgICAgICAgIH0sCisgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyIsCisgICAgICAg
IG5leHQgOiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIgCisgICAgfSwgeworICAgICAg
ICB0b2tlbjogImVtcHR5IiwKKyAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICBuZXh0IDogbmFt
ZSArICJfZW1iZWRfYXR0cmlidXRlX2xpc3QiCisgICAgfV07CisKKyAgICBzdGF0ZXNbbmFtZSAr
ICJfcXN0cmluZyJdID0gbXVsdGlMaW5lU3RyaW5nKCInIiwgbmFtZSArICJfZW1iZWRfYXR0cmli
dXRlX2xpc3QiKTsKKyAgICBzdGF0ZXNbbmFtZSArICJfcXFzdHJpbmciXSA9IG11bHRpTGluZVN0
cmluZygiXCIiLCBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIpOworICAgIAorICAgIHN0
YXRlc1tuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCJdID0gW3sKKyAgICAgICAgdG9rZW4g
OiAibWV0YS50YWcuciIsCisgICAgICAgIHJlZ2V4IDogIi8/PiIsCisgICAgICAgIG5leHQgOiBu
ZXh0U3RhdGUKKyAgICB9LCB7CisgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAor
ICAgICAgICByZWdleCA6ICI9IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90
aGVyLmF0dHJpYnV0ZS1uYW1lIiwKKyAgICAgICAgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIgor
ICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0Cisg
ICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCsp
Pyk/XFxiIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4
IDogIlxccysiCisgICAgfV0uY29uY2F0KHN0cmluZyhuYW1lKSk7Cit9OworCit9KTsKKworYWNl
LmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCAnYWNl
L21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4u
L2xpYi9vb3AiKTsKK3ZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIveG1s
IikuWG1sQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxl
IikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90
b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgdm9pZEVsZW1lbnRzID0gWydhcmVh
JywgJ2Jhc2UnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1iZWQnLCAnaHInLCAnaW1nJywg
J2lucHV0JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nLCAnc291cmNlJywgJ3Ry
YWNrJywgJ3diciddOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7CisgICAgdmFy
IGhhc1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4n
KTsKKyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVkbGVMaXN0
LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2Yo
bmVlZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhhc1R5cGU7
Cit9CisKK3ZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworCisgICAgdGhpcy5pbmhl
cml0KFhtbEJlaGF2aW91cik7IC8vIEdldCB4bWwgYmVoYXZpb3VyCisgICAgCisgICAgdGhpcy5h
ZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CisgICAg
ICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9u
LnJvdywgcG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9y
LmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgdmFyIGF0Q3Vyc29yID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWcnKSAmJiAh
KGhhc1R5cGUodG9rZW4sICd0ZXh0JykgJiYgdG9rZW4udmFsdWUubWF0Y2goJy8nKSkpeworICAg
ICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5z
dGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAoaGFzVHlw
ZSh0b2tlbiwgJ3N0cmluZycpIHx8IGhhc1R5cGUodG9rZW4sICdrZXl3b3JkLm9wZXJhdG9yJykg
fHwgaGFzVHlwZSh0b2tlbiwgJ2VudGl0eS5hdHRyaWJ1dGUtbmFtZScpIHx8IGhhc1R5cGUodG9r
ZW4sICd0ZXh0JykpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXRD
dXJzb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAh
aGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnLW5hbWUnKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQo
KS52YWx1ZS5tYXRjaCgnLycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAg
aWYgKGF0Q3Vyc29yKXsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnQuc3Vi
c3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuLnN0YXJ0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh2b2lkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTEpewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICB0ZXh0OiAnPicgKyAnPC8nICsgZWxlbWVudCArICc+JywKKyAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9KTsKK30KK29vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3VyLCBYbWxCZWhhdmlvdXIpOwor
CitleHBvcnRzLkh0bWxCZWhhdmlvdXIgPSBIdG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvbW9kZS9iZWhh
dmlvdXIvY3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIp
OwordmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKK3Zh
ciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsK
K3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tl
bkl0ZXJhdG9yOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7CisgICAgdmFyIGhh
c1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4nKTsK
KyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVkbGVMaXN0LmZv
ckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2YobmVl
ZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhhc1R5cGU7Cit9
CisKK3ZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisgICAgCisgICAgdGhpcy5pbmhl
cml0KENzdHlsZUJlaGF2aW91ciwgWyJzdHJpbmdfZHF1b3RlcyJdKTsgLy8gR2V0IHN0cmluZyBi
ZWhhdmlvdXIKKyAgICAKKyAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwg
ZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAg
ICBpZiAodGV4dCA9PSAnPicpIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5n
ZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2Vu
SXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOworICAgICAg
ICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAg
ICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5
cGUodG9rZW4sICdtZXRhLnRhZycpICYmICEoaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSAmJiB0b2tl
bi52YWx1ZS5tYXRjaCgnLycpKSl7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgICAg
IH0gd2hpbGUgKHRva2VuICYmIChoYXNUeXBlKHRva2VuLCAnc3RyaW5nJykgfHwgaGFzVHlwZSh0
b2tlbiwgJ2tleXdvcmQub3BlcmF0b3InKSB8fCBoYXNUeXBlKHRva2VuLCAnZW50aXR5LmF0dHJp
YnV0ZS1uYW1lJykgfHwgaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWctbmFtZScp
IHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLnZhbHVlLm1hdGNoKCcvJykpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0YWcgPSB0b2tl
bi52YWx1ZTsKKyAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CisgICAgICAgICAgICAgICAgdmFy
IHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW4uc3RhcnQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgdGV4
dDogJz4nICsgJzwvJyArIHRhZyArICc+JywKKyAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEs
IDFdCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCdh
dXRvaW5kZW50JywgJ2luc2VydGlvbicsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgeworICAgICAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhcnMgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29s
dW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFycyA9PSAnPC8nKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChzZXNzaW9uLmRvYy5nZXRMaW5l
KGN1cnNvci5yb3cpKSArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
dmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZG9jLmdldExpbmUoY3Vy
c29yLnJvdykpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCwKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxlbmd0aF0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKyAg
ICAKK30KK29vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMu
WG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2Rl
L2ZvbGRpbmcvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsICdhY2UvbW9kZS9mb2xkaW5nL3htbCcs
ICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwordmFyIE1p
eGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7Cit2YXIgWG1sRm9sZE1v
ZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwordmFyIENTdHlsZUZvbGRNb2RlID0gcmVx
dWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xk
TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1s
Rm9sZE1vZGUoeworICAgICAgICAiYXJlYSI6IDEsCisgICAgICAgICJiYXNlIjogMSwKKyAgICAg
ICAgImJyIjogMSwKKyAgICAgICAgImNvbCI6IDEsCisgICAgICAgICJjb21tYW5kIjogMSwKKyAg
ICAgICAgImVtYmVkIjogMSwKKyAgICAgICAgImhyIjogMSwKKyAgICAgICAgImltZyI6IDEsCisg
ICAgICAgICJpbnB1dCI6IDEsCisgICAgICAgICJrZXlnZW4iOiAxLAorICAgICAgICAibGluayI6
IDEsCisgICAgICAgICJtZXRhIjogMSwKKyAgICAgICAgInBhcmFtIjogMSwKKyAgICAgICAgInNv
dXJjZSI6IDEsCisgICAgICAgICJ0cmFjayI6IDEsCisgICAgICAgICJ3YnIiOiAxLAorICAgICAg
ICAibGkiOiAxLAorICAgICAgICAiZHQiOiAxLAorICAgICAgICAiZGQiOiAxLAorICAgICAgICAi
cCI6IDEsCisgICAgICAgICJydCI6IDEsCisgICAgICAgICJycCI6IDEsCisgICAgICAgICJvcHRn
cm91cCI6IDEsCisgICAgICAgICJvcHRpb24iOiAxLAorICAgICAgICAiY29sZ3JvdXAiOiAxLAor
ICAgICAgICAidGQiOiAxLAorICAgICAgICAidGgiOiAxCisgICAgfSksIHsKKyAgICAgICAgImpz
LSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAorICAgICAgICAiY3NzLSI6IG5ldyBDU3R5bGVGb2xk
TW9kZSgpCisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1peGVkRm9sZE1v
ZGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZm9s
ZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCYXNlRm9sZE1vZGUg
PSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOworCit2YXIgRm9sZE1vZGUgPSBleHBv
cnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1Yk1vZGVzKSB7CisgICAgdGhp
cy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOworICAgIHRoaXMuc3ViTW9kZXMgPSBzdWJNb2Rl
czsKK307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5jdGlv
bigpIHsKKworCisgICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgICAg
IGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUu
aW5kZXhPZihrZXkpID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Yk1vZGVz
W2tleV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAg
ICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93
KSB7CisgICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzdGF0ZSk7CisgICAgICAgIHJl
dHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykg
OiAiIik7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICB0aGlz
LiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJv
dykgfHwKKyAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBz
ZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZGUu
Z2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKKyAgICAgICAgKTsKKyAgICB9
OworCisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xk
U3R5bGUsIHJvdykgeworICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5n
ZXRTdGF0ZShyb3ctMSkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdl
dEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQorICAgICAgICAgICAgbW9kZSA9
IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93
KSkKKyAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93
KTsKKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL3htbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9yYW5nZScsICdhY2Uv
bW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4u
L2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKK3ZhciBS
YW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRNb2RlID0g
cmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVx
dWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOworCit2YXIgRm9sZE1v
ZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzKSB7CisgICAgQmFz
ZUZvbGRNb2RlLmNhbGwodGhpcyk7CisgICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVu
dHMgfHwge307Cit9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCiso
ZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9u
LCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJ
bkxpbmUoc2Vzc2lvbiwgcm93KTsKKworICAgICAgICBpZiAodGFnLmNsb3NpbmcpCisgICAgICAg
ICAgICByZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiID8gImVuZCIgOiAiIjsKKwor
ICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRoaXMudm9pZEVsZW1lbnRzW3RhZy50YWdOYW1l
LnRvTG93ZXJDYXNlKCldKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgIGlmICh0
YWcuc2VsZkNsb3NpbmcpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgaWYgKHRh
Zy52YWx1ZS5pbmRleE9mKCIvIiArIHRhZy50YWdOYW1lKSAhPT0gLTEpCisgICAgICAgICAgICBy
ZXR1cm4gIiI7CisKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgeworICAgICAg
ICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFyIHZhbHVl
ID0gIiI7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAodG9r
ZW4udHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpID09PSAwKQorICAgICAgICAgICAgICAgIHZhbHVl
ICs9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVl
ICs9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgdG9rZW4udmFsdWUubGVuZ3RoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICB9
OworCisgICAgdGhpcy50YWdSZSA9IC9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVowLTk6IV0qKVxz
KihcLz8pPj8pLzsKKyAgICB0aGlzLl9wYXJzZVRhZyA9IGZ1bmN0aW9uKHRhZykgeworICAgICAg
ICAKKyAgICAgICAgdmFyIG1hdGNoID0gdGhpcy50YWdSZS5leGVjKHRhZyk7CisgICAgICAgIHZh
ciBjb2x1bW4gPSB0aGlzLnRhZ1JlLmxhc3RJbmRleCB8fCAwOworICAgICAgICB0aGlzLnRhZ1Jl
Lmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiB0
YWcsCisgICAgICAgICAgICBtYXRjaDogbWF0Y2ggPyBtYXRjaFsyXSA6ICIiLAorICAgICAgICAg
ICAgY2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzNdIDogZmFsc2UsCisgICAgICAgICAgICBzZWxm
Q2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzVdIHx8IG1hdGNoWzJdID09ICIvPiIgOiBmYWxzZSwK
KyAgICAgICAgICAgIHRhZ05hbWU6IG1hdGNoID8gbWF0Y2hbNF0gOiAiIiwKKyAgICAgICAgICAg
IGNvbHVtbjogbWF0Y2hbMV0gPyBjb2x1bW4gKyBtYXRjaFsxXS5sZW5ndGggOiBjb2x1bW4KKyAg
ICAgICAgfTsKKyAgICB9OworICAgIHRoaXMuX3JlYWRUYWdGb3J3YXJkID0gZnVuY3Rpb24oaXRl
cmF0b3IpIHsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7
CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
ICAgIAorICAgICAgICB2YXIgdmFsdWUgPSAiIjsKKyAgICAgICAgdmFyIHN0YXJ0OworICAgICAg
ICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZigibWV0
YS50YWciKSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBp
dGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW4u
dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIj4iKSAhPT0gLTEpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAg
IHRhZy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1
cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRv
ci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAorICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJk
KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgeworICAgICAgICB2YXIg
dG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgCisgICAgICAgIHZhciB2YWx1
ZSA9ICIiOworICAgICAgICB2YXIgZW5kOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlm
ICh0b2tlbi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWVuZCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSAr
IHRva2VuLnZhbHVlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlICsgdmFsdWU7CisgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGFnLmVuZCA9IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3co
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuQ29sdW1uKCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
aXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWc7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKHRva2Vu
ID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLl9wb3AgPSBmdW5jdGlvbihzdGFjaywgdGFnKSB7
CisgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKKyAgICAgICAgICAgIGlmICghdGFn
IHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YWNrLnBvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52
b2lkRWxlbWVudHNbdGFnLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52b2lkRWxlbWVudHNbdG9wLnRh
Z05hbWVdKSB7CisgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmdl
dEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7Cisg
ICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJv
dyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0VGFnLm1hdGNoKQorICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFn
LmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CisgICAgICAgIHZhciBzdGFjayA9IFtd
OworICAgICAgICB2YXIgdGFnOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0JhY2t3YXJkKSB7
CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBy
b3csIGZpcnN0VGFnLmNvbHVtbik7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAgICAg
ICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5jb2x1
bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQoaXRlcmF0b3IpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNv
bHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOworICAgICAgICAgICAgICAgICAgICAgICAg
dGFnLmVuZC5jb2x1bW4gLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5n
ZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVz
aCh0YWcpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Io
c2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRhZy5tYXRjaC5sZW5ndGgpOwor
ICAgICAgICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IHJvdywKKyAgICAg
ICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLmNvbHVtbgorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChp
dGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCF0YWcuY2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRh
Zyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGgg
KyAyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFn
LnN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRh
ZykKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNjcmlw
dC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNj
cmlwdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOTVlODRkNmQxOTljN2E0NjU3OGE5MTllYWNmNjY0Zjg0YTk4
YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzCkBAIC0wLDAgKzEsODk2IEBACisvKiAqKioqKiBCRUdJ
TiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vu
c2U6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAg
ICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworYWNlLmRlZmluZSgnYWNl
L21vZGUvamF2YXNjcmlwdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2ph
dmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRl
bnQnLCAnYWNlL3JhbmdlJywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2UvbW9kZS9i
ZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIv
b29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRva2Vu
aXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBKYXZhU2NyaXB0
SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiku
SmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVx
dWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2
YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIFdvcmtlckNsaWVudCA9
IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwordmFyIENz
dHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2
aW91cjsKK3ZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5G
b2xkTW9kZTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiR0b2tlbml6ZXIg
PSBuZXcgVG9rZW5pemVyKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygp
KTsKKyAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAg
dGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGlu
Z1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRl
eHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5l
cyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAgdmFy
IG91dGRlbnQgPSB0cnVlOworICAgICAgICB2YXIgcmUgPSAvXihccyopXC9cLy87CisKKyAgICAg
ICAgZm9yICh2YXIgaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoIXJlLnRlc3QoZG9jLmdldExpbmUoaSkpKSB7CisgICAgICAgICAgICAgICAgb3V0ZGVudCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKG91dGRlbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVSYW5nZSA9
IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7
IGk8PSBlbmRSb3c7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlu
ZSA9IGRvYy5nZXRMaW5lKGkpOworICAgICAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChy
ZSk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAg
ICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgICAgICBkZWxldGVS
YW5nZS5lbmQuY29sdW1uID0gbVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgZG9jLnJlcGxh
Y2UoZGVsZXRlUmFuZ2UsIG1bMV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgZG9jLmluZGVudFJvd3Moc3RhcnRSb3csIGVuZFJvdywgIi8v
Iik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1
bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdl
dEluZGVudChsaW5lKTsKKworICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuJHRva2Vu
aXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHRv
a2VuaXplZExpbmUudG9rZW5zOworICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5l
LnN0YXRlOworCisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVu
Z3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0
ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0
Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7CisgICAgICAgICAgICBpZiAo
bWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CisgICAgICAgICAgICBp
ZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
bWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOworICAgICAgICAgICAgaWYgKG1hdGNo
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZGVudCArPSAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGVu
dCArPSAiKiAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlu
ZGVudDsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwg
bGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50
KGxpbmUsIGlucHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9u
KHN0YXRlLCBkb2MsIHJvdykgeworICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRv
Yywgcm93KTsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24o
c2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJd
LCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOworICAg
ICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOworCisg
ICAgICAgIHdvcmtlci5vbigianNsaW50IiwgZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAg
ICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOworICAgICAgICB9KTsKKyAg
ICAgICAgCisgICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gd29ya2VyOworICAgIH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5
cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2Rl
L2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVs
ZXMnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsK
K3ZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hp
Z2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKK3ZhciBUZXh0SGlnaGxp
Z2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdo
dFJ1bGVzOworCit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoeworICAgICAg
ICAidmFyaWFibGUubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxG
dW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAv
LyBDb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgICJOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gRTRYCisg
ICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFy
cmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCisgICAgICAgICAgICAiVWludDE2QXJyYXl8
VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAg
ICAgICArCisgICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VF
cnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgICArIC8vIEVycm9ycworICAgICAg
ICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVV
UklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIg
KyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgICAgICAiaXNOYU58cGFyc2VG
bG9hdHxwYXJzZUludHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArCisgICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCisgICAgICAg
ICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbworICAgICAgICAia2V5d29yZCI6Cisg
ICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8IiArCisgICAgICAgICAgICAi
YnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8
Zm9yfGZ1bmN0aW9ufCIgKworICAgICAgICAgICAgImlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVy
bnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8IiAr
CisgICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8
X19wcm90b19ffCIgKworICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBv
cnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8
c3RhdGljIiwKKyAgICAgICAgInN0b3JhZ2UudHlwZSI6CisgICAgICAgICAgICAiY29uc3R8bGV0
fHZhcnxmdW5jdGlvbiIsCisgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CisgICAgICAgICAg
ICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rp
b24iOgorICAgICAgICAgICAgImFsZXJ0IiwKKyAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmJv
b2xlYW4iOiAidHJ1ZXxmYWxzZSIKKyAgICB9LCAiaWRlbnRpZmllciIpOworICAgIHZhciBrd0Jl
Zm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93
fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CisgICAgdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1a
XFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSpcXGIiOworCisg
ICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKKyAg
ICAgICAgInVbMC05YS1mQS1GXXs0fXwiICsgLy8gdW5pY29kZQorICAgICAgICAiWzAtMl1bMC03
XXswLDJ9fCIgKyAvLyBvY3QKKyAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8gb2N0CisgICAg
ICAgICIzN1swLTddP3wiICsgLy8gb2N0CisgICAgICAgICJbNC03XVswLTddP3wiICsgLy9vY3QK
KyAgICAgICAgIi4pIjsKKworICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDog
WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRp
IGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAorICAgICAgICAg
ICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIicoPz0uKSIsCisg
ICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIo
Pz0uKScsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAor
ICAgICAgICAgICAgICAgIHJlZ2V4IDogLzBbeFhdWzAtOWEtZkEtRl0rXGIvCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZs
b2F0CisgICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VF
XVsrLV0/XGQrKT8pP1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogWworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9w
ZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAicHVuY3R1
YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsImtleXdvcmQu
b3BlcmF0b3IiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIo
IiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVy
UmUgKyIpKFxccyopKD0pIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1l
bnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWworICAgICAg
ICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVu
dGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAgICAia2V5d29y
ZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJl
biIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRl
bnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShm
dW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2Fy
Z3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAg
ICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29y
ZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCisgICAgICAgICAgICAgICAgICAg
ICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
ICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlv
bikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50
cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAg
ICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRp
dHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgImtleXdvcmQu
b3BlcmF0b3IiLCAidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAi
dGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmll
clJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlv
bikoXFxzKykoXFx3KykoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0
aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5u
YW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICAgcmVnZXggOiAiKGZ1bmN0aW9uKShcXHMrKSgiICsgaWRlbnRpZmll
clJlICsgIikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2Fy
Z3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAg
ICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1
YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5
cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1
bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJn
dW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWworICAg
ICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0Iiwg
InBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4
IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4
dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6ICJrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dC
ZWZvcmVSZSArICIpXFxiIiwKKyAgICAgICAgICAgICAgICBuZXh0IDogInJlZ2V4X2FsbG93ZWQi
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9u
Lm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKKyAgICAgICAgICAgICAgICByZWdleCA6
IC8oXC4pKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHAp
KXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B6enp6fHJpa2UpfGko
PzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/
KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/Omko
PzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1
cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51
dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFll
YXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFu
ZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4
dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJl
RXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/
OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpj
YWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpO
YU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxl
dGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5k
cyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEo
PzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpz
Y2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86
U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0
ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVh
dGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9v
cnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNp
bnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9y
dCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1
ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/
Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNl
KD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0
ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERh
KD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVy
cykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdl
QXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhz
KXxsaW5rfGFjaykpXGIoPz1cKCkvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
dG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZG9tIl0s
CisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8
cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFz
KD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9k
ZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5v
ZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5
UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJl
Zm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQo
PzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGls
ZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENo
aWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/
Ok5hbWV8VGFnTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5v
cGVyYXRvciIsICJzdXBwb3J0LmNvbnN0YW50Il0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAv
KFwuKShzKD86eXN0ZW1MYW5ndWFnZXxjcig/OmlwdHN8b2xsYmFyc3xlZW4oPzpYfFl8VG9wfExl
ZnQpKXx0KD86eWxlKD86U2hlZXRzKT98YXR1cyg/OlRleHR8YmFyKT8pfGlibGluZyg/OkJlbG93
fEFib3ZlKXxvdXJjZXx1ZmZpeGVzfGUoPzpjdXJpdHkoPzpQb2xpY3kpP3xsKD86ZWN0aW9ufGYp
KSl8aCg/OmlzdG9yeXxvc3QoPzpuYW1lKT98YXMoPzpofEZvY3VzKSl8eXxYKD86TUxEb2N1bWVu
dHxTTERvY3VtZW50KXxuKD86ZXh0fGFtZSg/OnNwYWNlKD86c3xVUkkpfFByb3ApKXxNKD86SU5f
VkFMVUV8QVhfVkFMVUUpfGMoPzpoYXJhY3RlclNldHxvKD86big/OnN0cnVjdG9yfHRyb2xsZXJz
KXxva2llRW5hYmxlZHxsb3JEZXB0aHxtcCg/Om9uZW50c3xsZXRlKSl8dXJyZW50fHB1Q2xhc3N8
bCg/OmkoPzpwKD86Ym9hcmREYXRhKT98ZW50SW5mb3JtYXRpb24pfG9zZWR8YXNzZXMpfGFsbGUo
PzplfHIpfHJ5cHRvKXx0KD86byg/Om9sYmFyfHApfGV4dCg/OlRyYW5zZm9ybXxJbmRlbnR8RGVj
b3JhdGlvbnxBbGlnbil8YWdzKXxTUVJUKD86MV8yfDIpfGkoPzpuKD86bmVyKD86SGVpZ2h0fFdp
ZHRoKXxwdXQpfGRzfGdub3JlQ2FzZSl8ekluZGV4fG8oPzpzY3B1fG4oPzpyZWFkeXN0YXRlY2hh
bmdlfExpbmUpfHV0ZXIoPzpIZWlnaHR8V2lkdGgpfHAoPzpzUHJvZmlsZXxlbmVyKXxmZnNjcmVl
bkJ1ZmZlcmluZyl8TkVHQVRJVkVfSU5GSU5JVFl8ZCg/OmkoPzpzcGxheXxhbG9nKD86SGVpZ2h0
fFRvcHxXaWR0aHxMZWZ0fEFyZ3VtZW50cyl8cmVjdG9yaWVzKXxlKD86c2NyaXB0aW9ufGZhdWx0
KD86U3RhdHVzfENoKD86ZWNrZWR8YXJzZXQpfFZpZXcpKSl8dSg/OnNlcig/OlByb2ZpbGV8TGFu
Z3VhZ2V8QWdlbnQpfG4oPzppcXVlSUR8ZGVmaW5lZCl8cGRhdGVJbnRlcnZhbCl8X2NvbnRlbnR8
cCg/Oml4ZWxEZXB0aHxvcnR8ZXJzb25hbGJhcnxrY3MxMXxsKD86dWdpbnN8YXRmb3JtKXxhKD86
dGhuYW1lfGRkaW5nKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KXxyZW50KD86V2luZG93fExheWVy
KT98Z2UoPzpYKD86T2Zmc2V0KT98WSg/Ok9mZnNldCk/KSl8cig/Om8oPzp0byg/OmNvbHx0eXBl
KXxkdWN0KD86U3ViKT98bXB0ZXIpfGUoPzp2aW91c3xmaXgpKSl8ZSg/Om4oPzpjb2Rpbmd8YWJs
ZWRQbHVnaW4pfHgoPzp0ZXJuYWx8cGFuZG8pfG1iZWRzKXx2KD86aXNpYmlsaXR5fGVuZG9yKD86
U3ViKT98TGlua2NvbG9yKXxVUkxVbmVuY29kZWR8UCg/Okl8T1NJVElWRV9JTkZJTklUWSl8Zig/
OmlsZW5hbWV8byg/Om50KD86U2l6ZXxGYW1pbHl8V2VpZ2h0KXxybU5hbWUpfHJhbWUoPzpzfEVs
ZW1lbnQpfGdDb2xvcil8RXx3aGl0ZVNwYWNlfGwoPzppKD86c3RTdHlsZVR5cGV8big/OmVIZWln
aHR8a0NvbG9yKSl8byg/OmNhKD86dGlvbig/OmJhcik/fGxOYW1lKXx3c3JjKXxlKD86bmd0aHxm
dCg/OkNvbnRleHQpPyl8YSg/OnN0KD86TSg/Om9kaWZpZWR8YXRjaCl8SW5kZXh8UGFyZW4pfHll
cig/OnN8WCl8bmd1YWdlKSl8YSg/OnBwKD86TWlub3JWZXJzaW9ufE5hbWV8Q28oPzpkZU5hbWV8
cmUpfFZlcnNpb24pfHZhaWwoPzpIZWlnaHR8VG9wfFdpZHRofExlZnQpfGxsfHIoPzppdHl8Z3Vt
ZW50cyl8TGlua2NvbG9yfGJvdmUpfHIoPzppZ2h0KD86Q29udGV4dCk/fGUoPzpzcG9uc2UoPzpY
TUx8VGV4dCl8YWR5U3RhdGUpKXxnbG9iYWx8eHxtKD86aW1lVHlwZXN8dWx0aWxpbmV8ZW51YmFy
fGFyZ2luKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KSl8TCg/Ok4oPzoxMHwyKXxPRyg/OjEwRXwy
RSkpfGIoPzpvKD86dHRvbXxyZGVyKD86V2lkdGh8UmlnaHRXaWR0aHxCb3R0b21XaWR0aHxTdHls
ZXxDb2xvcnxUb3BXaWR0aHxMZWZ0V2lkdGgpKXx1ZmZlckRlcHRofGVsb3d8YWNrZ3JvdW5kKD86
Q29sb3J8SW1hZ2UpKSlcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVu
Y3Rpb24uZmlyZWJ1ZyJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhjb25zb2xlKShcLiko
d2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRpbWVFbmR8YXNzZXJ0KVxiLworICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKKyAgICAgICAgICAg
ICAgICByZWdleCA6IGlkZW50aWZpZXJSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
Ly0tfFwrXCt8WyEkJSYqK1wtfl18PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8
Pnw8fD58IXwmJnxcfFx8fFw/XDp8XCo9fCU9fFwrPXxcLT18Jj18XF49LywKKyAgICAgICAgICAg
ICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IC9cP3xcOnxcLHxcO3xcLi8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhf
YWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJl
bi5scGFyZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8sCisgICAgICAgICAg
ICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
L1tcXSl9XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3
b3JkLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cLz0/LywKKyAgICAgICAg
ICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEu
KiQvCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9hbGxvd2VkIjog
WworICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9j
LXN0YXJ0IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVu
dCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xc
KiIsCisgICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCisgICAgICAg
ICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJc
XC8iLAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIsCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAi
XFxzKyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwK
KyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0
IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXgiOiBbCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIs
CisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1m
QS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0
cmluZy5yZWdleHAiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1xcdyoiLAorICAgICAgICAg
ICAgICAgIG5leHQ6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
dG9rZW4gOiAiaW52YWxpZCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkKyw/KD86XGQr
KT99WysqXXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KKyAgICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfHtcZCssPyg/OlxkKyk/fXx7LFxkK318Wysq
XVw/fFsoKSReKyo/XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJjb25zdGFudC5sYW5ndWFnZS5kZWxpbWl0ZXIiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAv
XHwvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5s
YW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAorICAgICAg
ICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLAorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4
OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAiCisgICAgICAgICAg
ICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiOiBbCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRv
ciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxk
YS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjog
ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwK
KyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiLAorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAg
ICAgICByZWdleDogIi0iCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46
ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAgICAgICBu
ZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRv
a2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCisgICAgICAgICAgICB9CisgICAg
ICAgIF0sCisgICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDog
IlssIF0rIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0
dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAiIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9
CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiIDogWworICAgICAg
ICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInJlZ2V4
X2FsbG93ZWQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAg
ICAgIF0sCisgICAgICAgICJjb21tZW50IiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21t
ZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJzdGFydCJ9LAorICAgICAgICAgICAge2Rl
ZmF1bHRUb2tlbiA6ICJjb21tZW50In0KKyAgICAgICAgXSwKKyAgICAgICAgInFxc3RyaW5nIiA6
IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5n
dWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICAgICByZWdleCA6ICJcXFxcJCIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmci
LAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisg
ICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJz
dGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAi
c3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicXN0cmluZyIgOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3Vh
Z2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQorICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAg
ICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciLAor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFy
dCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3Ry
aW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIHRoaXMuZW1iZWRS
dWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKKyAgICAgICAgWyBEb2NDb21t
ZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKK307CisKK29vcC5pbmhl
cml0cyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK2V4
cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVz
OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxl
cycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0
SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhp
Z2hsaWdodFJ1bGVzOworCit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24o
KSB7CisKKyAgICB0aGlzLiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsgeworICAgICAg
ICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4IDogIkBb
XFx3XFxkX10rIiAvLyBUT0RPOiBmaXggZW1haWwgYWRkcmVzc2VzCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisgICAgICAgICAgICByZWdleCA6
ICJcXGJUT0RPXFxiIgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAi
Y29tbWVudC5kb2MiCisgICAgICAgIH1dCisgICAgfTsKK307CisKK29vcC5pbmhlcml0cyhEb2ND
b21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK0RvY0NvbW1lbnRI
aWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgeworICAgIHJldHVy
biB7CisgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gZG9jIGNvbW1lbnQKKyAgICAg
ICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCisgICAgICAgIG5leHQgIDogc3RhcnQKKyAgICB9
OworfTsKKworRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUgPSBmdW5jdGlvbiAo
c3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8v
IGNsb3NpbmcgY29tbWVudAorICAgICAgICByZWdleCA6ICJcXCpcXC8iLAorICAgICAgICBuZXh0
ICA6IHN0YXJ0CisgICAgfTsKK307CisKKworZXhwb3J0cy5Eb2NDb21tZW50SGlnaGxpZ2h0UnVs
ZXMgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uv
bW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIE1hdGNo
aW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAg
dGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAgICAgICBpZiAo
ISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9P
dXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0
TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwor
CisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBjb2x1bW4gPSBt
YXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNo
aW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAgICAgaWYgKCFv
cGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOworCisgICAg
ICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9z
LnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVt
bi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24o
bGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAg
ICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0
ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hp
bmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2Nz
dHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAn
YWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvbGliL2xhbmcn
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJl
cXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhh
dmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rv
a2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4v
bGliL2xhbmciKTsKKwordmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CisgICAgWyJ0ZXh0Iiwg
InBhcmVuLnJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwordmFyIFNBRkVfSU5TRVJU
X0JFRk9SRV9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRp
b24ub3BlcmF0b3IiLCAiY29tbWVudCJdOworCisKK3ZhciBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9
IDA7Cit2YXIgYXV0b0luc2VydGVkUm93ID0gLTE7Cit2YXIgYXV0b0luc2VydGVkTGluZUVuZCA9
ICIiOwordmFyIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgbWF5YmVJbnNlcnRlZFJv
dyA9IC0xOwordmFyIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKK3ZhciBtYXliZUluc2Vy
dGVkTGluZUVuZCA9ICIiOworCit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewor
ICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5jdGlvbihlZGl0
b3IsIHNlc3Npb24pIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3Np
dGlvbigpOworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9u
LCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRv
a2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJU
X0lOX1RPS0VOUykpIHsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVy
YXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAg
ICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9rZW4oKSB8
fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAg
ICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8
fAorICAgICAgICAgICAgdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKKyAgICB9OworICAg
IAorICAgIENzdHlsZUJlaGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0b2tlbiwg
dHlwZXMpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tl
bikgPiAtMTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5z
ZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBz
ZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNBdXRv
SW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVuZFswXSkpCisg
ICAgICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIGF1dG9JbnNlcnRl
ZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBicmFja2V0
ICsgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNr
ZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNl
cnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAgICAgdmFyIGN1
cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhpcy5pc01heWJl
SW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpCisgICAgICAgICAgICBtYXliZUluc2VydGVk
QnJhY2tldHMgPSAwOworICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKKyAg
ICAgICAgbWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1
bW4pICsgYnJhY2tldDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5lLnN1YnN0
cihjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7CisgICAg
fTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVu
Y3Rpb24oY3Vyc29yLCBsaW5lLCBicmFja2V0KSB7CisgICAgICAgIHJldHVybiBhdXRvSW5zZXJ0
ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1dG9JbnNlcnRl
ZFJvdyAmJgorICAgICAgICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGluZUVuZFswXSAm
JgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1dG9JbnNlcnRl
ZExpbmVFbmQ7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2Vy
dGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkgeworICAgICAgICByZXR1cm4gbWF5
YmVJbnNlcnRlZEJyYWNrZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gbWF5
YmVJbnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikg
PT09IG1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0cigwLCBj
dXJzb3IuY29sdW1uKSA9PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OworICAgIH07CisgICAgCisg
ICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgYXV0b0luc2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3Ry
KDEpOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgIH07CisgICAgCisgICAg
Q3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRl
ZFJvdyA9IC0xOworICAgIH07CisKKyAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIs
IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICh0ZXh0
ID09ICd7JykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rp
b25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4
dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNl
bGVjdGVkICE9PSAieyIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snICsg
c2VsZWN0ZWQgKyAnfScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIu
aXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAo
L1tcXVx9XCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7CisgICAgICAgICAgICAgICAg
ICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIn0i
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQ6ICd7fScsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChlZGl0b3IsIHNl
c3Npb24sICJ7Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAneycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgeworICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAg
ICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2Nv
bHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0
ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0
eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4
dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7CisgICAgICAgICAgICB2YXIgY2xvc2luZyA9
ICIiOworICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9z
aW5nKGN1cnNvciwgbGluZSkpIHsKKyAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJp
bmdSZXBlYXQoIn0iLCBtYXliZUluc2VydGVkQnJhY2tldHMpOworICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVt
biwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScg
fHwgY2xvc2luZyAhPT0gIiIpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0g
c2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vy
c29yLmNvbHVtbn0sICd9Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MpCisg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgICAgIHZhciBp
bmRlbnQgPSB0aGlzLmdldE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0cmluZygwLCBj
dXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAg
dmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdc
bicgKyBuZXh0X2luZGVudCArIGNsb3NpbmcsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImJy
YWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Np
b24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3Rl
ZCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShy
YW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAg
IGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVt
bisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5zZXJ0aW9u
IiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAg
ICAgICBpZiAodGV4dCA9PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0
b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Np
b24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVk
ICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcgKyBzZWxlY3Rl
ZCArICcpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJ
bnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAorICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKKyAgICAgICAgICAgIHZh
ciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciBy
aWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsg
MSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAg
IHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46
IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xv
c2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJl
aGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgicGFyZW5zIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVk
aXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgp
ICYmIHNlbGVjdGVkID09ICcoJykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRv
Yy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0g
bGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1u
ICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAg
ICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0
cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09ICdbJykgeworICAgICAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNl
bGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAg
ICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQo
KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6
ICdbJyArIHNlbGVjdGVkICsgJ10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZh
bHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVo
YXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAg
ICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiXSIp
OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdb
XScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykgewor
ICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAg
ICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAg
ICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1
cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0
KCddJywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNB
dXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChz
dGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxl
Y3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFu
Z2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJh
bmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnXScp
IHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBh
Y3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnIicg
fHwgdGV4dCA9PSAiJyIpIHsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CisgICAgICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsK
KyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBz
ZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUg
KyBzZWxlY3RlZCArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNl
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
ICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1
cnNvci5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9uLnN0YXJ0
LnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOworICAgICAgICAgICAg
ICAgIHZhciBxdW90ZXBvcyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBv
cGVuIHF1b3RlLgorCisgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbnMu
bGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbeF07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgcXVvdGVwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChxdW90ZXBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IHRv
a2VuLnZhbHVlLmluZGV4T2YocXVvdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNlbGVjdGlvbi5z
dGFydC5jb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNbeF0udmFsdWUu
bGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8
IChxdW90ZXBvcyA8IDAgJiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0b2tlbi50eXBl
ICE9PSAic3RyaW5nIiB8fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRva2VuLnZhbHVl
Lmxlbmd0aCtjb2wtMSkgJiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUpID09PSB0b2tl
bi52YWx1ZS5sZW5ndGgtMSkpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNzdHlsZUJl
aGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb246IFsxLDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNv
bHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRD
aGFyID09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAg
ICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxl
Y3RlZCA9PSAiJyIpKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExp
bmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1
YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsK
KyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK307CisKK29vcC5pbmhlcml0cyhDc3R5
bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0
eWxlQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxl
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
cmFuZ2UnLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3Ai
KTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZv
bGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2Rl
ID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Citvb3AuaW5oZXJpdHMoRm9sZE1v
ZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0
YXJ0TWFya2VyID0gLyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87CisgICAgdGhpcy5mb2xk
aW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLzsKKworICAg
IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCBy
b3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAg
dmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CisgICAgICAg
IGlmIChtYXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKKworICAgICAg
ICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdC
cmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJl
dHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3Ro
LCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJtYXJrYmVnaW5l
bmQiKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0
Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAg
ICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKworICAgICAgICAg
ICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFj
a2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVy
biBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CisgICAgICAgIH0KKyAg
ICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mZGY2N2ZhNDExNzBiMWU5M2IzNWM2MmQ1YWJiNDg0MTE2MjFhMWY5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2Uv
dGhlbWVfdGV4dG1hdGUuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VO
U0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAq
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAq
KioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdhY2UvdGhlbWUv
dGV4dG1hdGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9t
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9ydHMuaXNE
YXJrID0gZmFsc2U7CitleHBvcnRzLmNzc0NsYXNzID0gImFjZS10bSI7CitleHBvcnRzLmNzc1Rl
eHQgPSAiLmFjZS10bSAuYWNlX2d1dHRlciB7XAorYmFja2dyb3VuZDogI2YwZjBmMDtcCitjb2xv
cjogIzMzMztcCit9XAorLmFjZS10bSAuYWNlX3ByaW50LW1hcmdpbiB7XAord2lkdGg6IDFweDtc
CitiYWNrZ3JvdW5kOiAjZThlOGU4O1wKK31cCisuYWNlLXRtIC5hY2VfZm9sZCB7XAorYmFja2dy
b3VuZC1jb2xvcjogIzZCNzJFNjtcCit9XAorLmFjZS10bSAuYWNlX3Njcm9sbGVyIHtcCitiYWNr
Z3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKK31cCisuYWNlLXRtIC5hY2VfY3Vyc29yIHtcCitib3Jk
ZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2Vfb3ZlcndyaXRlLWN1
cnNvcnMgLmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0OiAwcHg7XAorYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtcCitjb2xvcjog
cmdiKDE5MSwgMTkxLCAxOTEpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RvcmFnZSxcCisuYWNlLXRt
IC5hY2Vfa2V5d29yZCB7XAorY29sb3I6IGJsdWU7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFu
dCB7XAorY29sb3I6IHJnYigxOTcsIDYsIDExKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50
LmFjZV9idWlsZGluIHtcCitjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCit9XAorLmFjZS10bSAu
YWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XAorY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7XAor
fVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XAorY29sb3I6IHJnYig2LCAx
NTAsIDE0KTtcCit9XAorLmFjZS10bSAuYWNlX2ludmFsaWQge1wKK2JhY2tncm91bmQtY29sb3I6
IHJnYmEoMjU1LCAwLCAwLCAwLjEpO1wKK2NvbG9yOiByZWQ7XAorfVwKKy5hY2UtdG0gLmFjZV9z
dXBwb3J0LmFjZV9mdW5jdGlvbiB7XAorY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAorfVwKKy5h
Y2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XAorY29sb3I6IHJnYig2LCAxNTAsIDE0
KTtcCit9XAorLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsXAorLmFjZS10bSAuYWNlX3N1
cHBvcnQuYWNlX2NsYXNzIHtcCitjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wKK31cCisuYWNl
LXRtIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKK2NvbG9yOiByZ2IoMTA0LCAxMTgsIDEz
NSk7XAorfVwKKy5hY2UtdG0gLmFjZV9zdHJpbmcge1wKK2NvbG9yOiByZ2IoMywgMTA2LCA3KTtc
Cit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQge1wKK2NvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtc
Cit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XAorY29sb3I6IHJnYigwLCAxMDIs
IDI1NSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XAorY29s
b3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9u
dW1lcmljIHtcCitjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAorfVwKKy5hY2UtdG0gLmFjZV92YXJp
YWJsZSB7XAorY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKK31cCisuYWNlLXRtIC5hY2VfeG1s
LXBlIHtcCitjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAorfVwKKy5hY2UtdG0gLmFjZV9lbnRp
dHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHtcCitjb2xvcjogIzAwMDBBMjtcCit9XAorLmFjZS10
bSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7XAorY29sb3I6IHJnYigxMiwgNywgMjU1KTtcCit9
XAorLmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7XAorY29sb3I6cmdiKDE4NSwgNiwgMTQ0
KTtcCit9XAorLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XAorY29sb3I6cmdiKDAsIDIyLCAx
NDIpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XAorY29sb3I6IHJnYigy
NTUsIDAsIDApXAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24g
e1wKK2JhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCit9XAorLmFjZS10bS5hY2VfbXVs
dGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCitib3gtc2hhZG93OiAwIDAgM3B4
IDBweCB3aGl0ZTtcCitib3JkZXItcmFkaXVzOiAycHg7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJr
ZXItbGF5ZXIgLmFjZV9zdGVwIHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO1wKK31c
CisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKK2JhY2tncm91bmQ6IHJn
YigxNjQsIDIyOSwgMTAxKTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2Jy
YWNrZXQge1wKK21hcmdpbjogLTFweCAwIDAgLTFweDtcCitib3JkZXI6IDFweCBzb2xpZCByZ2Io
MTkyLCAxOTIsIDE5Mik7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3Rp
dmUtbGluZSB7XAorYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCit9XAorLmFjZS10
bSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7
XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCiti
YWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XAorYm9yZGVyOiAxcHggc29saWQgcmdiKDIw
MCwgMjAwLCAyNTApO1wKK31cCisuYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtcCitiYWNrZ3Jv
dW5kOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndBbVZnZDEv
dzExL2dBQUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAorfVwKKyI7CisKK3Zh
ciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Citkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9y
dHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCA1ZmJkNDFlZjEwNzUzYWYyNGNlNjcxMTJmM2NhMGZlYzAzMThjOWFhLi5lY2Uz
YmFlNGI3YjdiZDY2M2I1OWUyNTEzZGRjZmJhMDY0YzcwMTA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC04NDUsNiArODQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0
c19qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRl
ZF9kZXZ0b29sc19jb2RlbWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93
b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRl
bmF0ZWRfc2NyaXB0X2Zvcm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05MzMsNiAr
OTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5h
dGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0c19qcycsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19jb2RlbWlycm9y
X2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVk
X2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93b3JrZXJfanMnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfc2NyaXB0X2Zvcm1hdHRl
cl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25j
YXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05NTAsNiArOTUyLDcgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9Qcm9m
aWxlc1BhbmVsLmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJ
UikvcmVzb3VyY2VzL2luc3BlY3Rvci9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvQ29kZU1pcnJv
clRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1Rf
RElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0FjZVRleHRFZGl0b3IuanMnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0hlYXBT
bmFwc2hvdFdvcmtlci5qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVD
VF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3Bl
Y3Rvci9kZXZUb29scy5jc3MnLApAQCAtMTE4Niw2ICsxMTg5LDIyIEBACiAgICAgICAgICAgICAg
ICAgICAgIH1dLAogICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9l
ZGl0b3JfanMnLAorICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICAg
ICAgICAgICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2NvbmNhdGVuYXRlX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ3NjcmlwdF9uYW1lJzogJ3NjcmlwdHMvaW5saW5lX2pzX2ltcG9ydHMu
cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0X2ZpbGUnOiAnLi4vLi4vV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAoX3Nj
cmlwdF9uYW1lKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rv
cl9hY2VfZWRpdG9yX2pzX2ZpbGVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9wYXRoJzogJy4uLy4uL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsnPChQ
Uk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BY2VUZXh0RWRpdG9yLmpzJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWydweXRob24nLCAnPEAoX3NjcmlwdF9uYW1l
KScsICc8QChfaW5wdXRfZmlsZSknLCAnPEAoX3NlYXJjaF9wYXRoKScsICc8QChfb3V0cHV0cykn
LCAndHJ1ZSddLAorICAgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2Nv
bmNhdGVuYXRlZF9oZWFwX3NuYXBzaG90X3dvcmtlcl9qcycsCiAgICAgICAgICAgICAgICAgICAg
ICd0eXBlJzogJ25vbmUnLAogICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190982</attachid>
            <date>2013-03-01 10:04:03 -0800</date>
            <delta_ts>2013-03-01 10:39:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111191-20130301220012.patch</filename>
            <type>text/plain</type>
            <size>698410</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODg0MjQ4NjUzZmZjMmEw
ZGZjMTRhZTljNWZhOTM3ZDZjMDNmOTJhYy4uZTQwYjk2MGZmYzljOTY1YmQ2NTIwYjU5OTNiMTEx
ODU5MjQxZDM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDEzLTAzLTAxICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhZGQgQWNlIGVkaXRvciBleHBlcmltZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkIEFj
ZSB0ZXh0IGVkaXRvciBleHBlcmltZW50LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qczogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeHBlcmltZW50c1NldHRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzczogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qczogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qczogQWRkZWQuCisK
KzIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlm
IGluc3BlY3RvcidzIHNvdXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGYxNDJhOGNhMzgxYzk1MTdkYjg3N2FiNWZjNGJhOTZjZTVkOTMwZTku
LmQyNjBkNWJlNzU2MGNiMjJkZDkzZmUwYzdkZTU3NDk1ODc4YzM5ODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlr
b3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFk
ZCBBY2UgZWRpdG9yIGV4cGVyaW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMTE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0YXJnZXQgdG8gY29uY2F0ZW5hdGUganMgZmlsZXMgZm9yIEFj
ZSBUZXh0IEVkaXRvci4KKworICAgICAgICAqIFdlYktpdC5neXA6CisKKzIwMTMtMDMtMDEgIEFu
ZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIGluc3BlY3RvcidzIHNv
dXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjVmZjk5MGY2
YWM1M2Y1NTI1MmFiZWYwYjg4YmZkNDJiNzUxMzFmYS4uNDJiOGY4NWUwNDI3ODBjYzVjOTM1MDhi
MmI4ZDJlN2FhZGI5MTI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTM1Miw2ICs1MzUyLDExIEBA
CiAgICAgICAgICAgICAnPEAod2ViaW5zcGVjdG9yX3N0YW5kYWxvbmVfZmlsZXMpJywKICAgICAg
ICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9zdGFuZGFsb25lX2ZpbGVzJzogWworICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcycsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9hdWRpdHNQYW5lbC5jc3MnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL2J1aWxkU3lzdGVtT25seS5qcycsCkBAIC01NDg0LDYgKzU0ODksMTEgQEAK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qcycsCiAgICAgICAgIF0s
CiAKKyAgICAgICAgJ3dlYmluc3BlY3Rvcl9hY2VfZWRpdG9yX2pzX2ZpbGVzJzogWworICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcycsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzJywKKyAgICAgICAgXSwKKwogICAgICAg
ICAnd2ViaW5zcGVjdG9yX21vZHVsZXNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnPEAod2Vi
aW5zcGVjdG9yX2VsZW1lbnRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAod2ViaW5zcGVj
dG9yX3Jlc291cmNlc19qc19maWxlcyknLApAQCAtNTQ5Myw2ICs1NTAzLDcgQEAKICAgICAgICAg
ICAgICc8QCh3ZWJpbnNwZWN0b3JfcHJvZmlsZXNfanNfZmlsZXMpJywKICAgICAgICAgICAgICc8
QCh3ZWJpbnNwZWN0b3JfYXVkaXRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAod2ViaW5z
cGVjdG9yX2NvZGVtaXJyb3JfanNfZmlsZXMpJywKKyAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0
b3JfYWNlX2VkaXRvcl9qc19maWxlcyknLAogICAgICAgICBdLAogICAgICAgICAnd2ViaW5zcGVj
dG9yX3VnbGlmeWpzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
VWdsaWZ5SlMvcGFyc2UtanMuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNjY2MjIxMmM0YzFjOWYz
ODE0MjY3ZWE2NDJiNzQ1Nzk0Y2FkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMKQEAgLTAsMCArMSwzNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1w
b3J0U2NyaXB0KCJhY2UvYWNlLmpzIik7CisKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvcn0KKyAqIEBwYXJhbSB7P3N0cmluZ30gdXJsCisgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yRGVsZWdhdGV9IGRlbGVnYXRlCisgKi8KKworV2ViSW5zcGVjdG9yLkFj
ZVRleHRFZGl0b3IgPSBmdW5jdGlvbih1cmwsIGRlbGVnYXRlKQoreworICAgIFdlYkluc3BlY3Rv
ci5WaWV3LmNhbGwodGhpcyk7CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICB0
aGlzLl91cmwgPSB1cmw7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsK
KworICAgIHZhciBwcmVmaXggPSB3aW5kb3cuZmxhdHRlbkltcG9ydHMgPyAiIiA6ICJhY2UvIjsK
KyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgiYWNlL21vZGUvamF2YXNjcmlwdCIsIHByZWZp
eCArICJtb2RlX2phdmFzY3JpcHQuanMiKTsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgi
YWNlL21vZGUvamF2YXNjcmlwdCIsIHByZWZpeCArICJtb2RlX2Nzcy5qcyIpOworICAgIGFjZS5j
b25maWcuc2V0TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4ICsgIm1vZGVf
aHRtbC5qcyIpOworICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvdGhlbWUvdGV4dG1h
dGUiLCBwcmVmaXggKyAidGhlbWVfdGV4dG1hdGUuanMiKTsKKyAgICB0aGlzLl9hY2VFZGl0b3Ig
PSB3aW5kb3cuYWNlLmVkaXQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuX2FjZUVkaXRvci5z
ZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOworICAgIHRoaXMuX2FjZUVkaXRvci5vbigiZ3V0dGVy
Y2xpY2siLCB0aGlzLl9ndXR0ZXJDbGljay5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9hY2VFZGl0
b3Iub24oImNoYW5nZSIsIHRoaXMuX29uVGV4dENoYW5nZS5iaW5kKHRoaXMpKTsKKyAgICB0aGlz
Ll9hY2VFZGl0b3Iuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7CisgICAgdGhpcy5fYWNl
RWRpdG9yLnNlc3Npb24uc2V0VXNlV29ya2VyKGZhbHNlKTsKKyAgICB0aGlzLnJlZ2lzdGVyUmVx
dWlyZWRDU1MoImFjZS9hY2VkZXZ0b29scy5jc3MiKTsKK30KKworV2ViSW5zcGVjdG9yLkFjZVRl
eHRFZGl0b3IucHJvdG90eXBlID0geworCisgICAgX29uVGV4dENoYW5nZTogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2VkKG51bGwsIG51
bGwpOworICAgIH0sCisKKyAgICBfZ3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChldmVudC5kb21FdmVudC50YXJnZXQu
dGV4dENvbnRlbnQpIC0gMTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNrLCB7IGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsIGV2ZW50OiBldmVudC5kb21FdmVudCB9KTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCisgICAgICovCisgICAgc2V0IG1pbWVU
eXBlKG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoKG1pbWVUeXBlKSB7CisgICAgICAg
ICAgICBjYXNlICJ0ZXh0L2h0bWwiOiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1v
ZGUoImFjZS9tb2RlL2h0bWwiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJ0ZXh0L2NzcyI6
IHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvY3NzIik7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAidGV4dC9qYXZhc2NyaXB0IjogdGhpcy5fYWNlRWRpdG9y
LmdldFNlc3Npb24oKS5zZXRNb2RlKCJhY2UvbW9kZS9qYXZhc2NyaXB0Iik7IGJyZWFrOworICAg
ICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZE9u
bHkKKyAgICAgKi8KKyAgICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCisgICAgewor
ICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHJlYWRPbmx5
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYWNlRWRpdG9yLmdldFJl
YWRPbmx5KCk7CisgICAgfSwKKworICAgIGZvY3VzOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9hY2VFZGl0b3IuZm9jdXMoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJl
dHVybiB7RWxlbWVudH0KKyAgICAgKi8KKyAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2V4CisgICAgICogQHBh
cmFtIHtzdHJpbmd9IGNzc0NsYXNzCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0KKyAgICAgKi8KKyAgICBoaWdobGln
aHRSZWdleDogZnVuY3Rpb24ocmVnZXgsIGNzc0NsYXNzKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRSZWdleCBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5n
ZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcworICAgICAqLworICAgIGhpZ2hsaWdo
dFJhbmdlOiBmdW5jdGlvbihyYW5nZSwgY3NzQ2xhc3MpCisgICAgeworICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodFJhbmdlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLkhpZ2hsaWdodERlc2NyaXB0b3J9IGhpZ2hsaWdodERlc2NyaXB0b3IKKyAgICAgKi8KKyAg
ICByZW1vdmVIaWdobGlnaHQ6IGZ1bmN0aW9uKGhpZ2hsaWdodERlc2NyaXB0b3IpCisgICAgewor
ICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnJlbW92ZUhpZ2hsaWdodCBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVO
dW1iZXIKKyAgICAgKi8KKyAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKSB7Cisg
ICAgICAgIHRoaXMuX2FjZUVkaXRvci5zY3JvbGxUb0xpbmUobGluZU51bWJlciwgZmFsc2UsIHRy
dWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJl
cgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGNvbmRpdGlvbmFsCisgICAgICovCisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNl
RWRpdG9yLmdldFNlc3Npb24oKS5zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJl
YWtwb2ludCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgorICAgICAqLworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmNsZWFyQnJl
YWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzZXRFeGVjdXRpb25MaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5zZXRF
eGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICogQHJldHVybiB7
c3RyaW5nfQorICAgICAqLworICAgIGNvcHlSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgewor
ICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNvcHlSYW5nZSBub3QgaW1wbGVtZW50ZWQi
KTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0sCisKKyAgICBjbGVhckV4ZWN1dGlvbkxpbmU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuY2xlYXJF
eGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxl
bWVudAorICAgICAqLworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVs
ZW1lbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmFkZERlY29yYXRp
b24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgICAg
ICovCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxlbWVudCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbiBu
b3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqLworICAgIG1hcmtBbmRSZXZlYWxSYW5n
ZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9y
Lm1hcmtBbmRSZXZlYWxSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBoaWdobGln
aHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2co
ImFjZUVkaXRvci5oaWdobGlnaHRMaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAg
ICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICBjb25zb2xlLmxvZygi
YWNlRWRpdG9yLmNsZWFyTGluZUhpZ2hsaWdodCBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQorICAgICAqLworICAg
IGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gW107CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3J9IHRleHRFZGl0b3IKKyAgICAgKi8KKyAgICBpbmhlcml0U2Ny
b2xsUG9zaXRpb25zOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5sb2coImFjZUVkaXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zIG5vdCBpbXBsZW1lbnRlZCIp
OworICAgIH0sCisKKyAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkgeyB9LAorCisgICAgZW5k
VXBkYXRlczogZnVuY3Rpb24oKSB7IH0sCisKKyAgICBvblJlc2l6ZTogZnVuY3Rpb24oKSB7IH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdl
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlfQorICAgICAqLworICAgIGVkaXRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIHRl
eHQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmVkaXRSYW5nZSBub3Qg
aW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzY3JvbGxUb0xpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2Nyb2xsVG9MaW5lKGxpbmVOdW1i
ZXIsIGZhbHNlLCB0cnVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlRleHRSYW5nZX0KKyAgICAgKi8KKyAgICBzZWxlY3Rpb246IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iuc2VsZWN0aW9uIG5vdCBpbXBs
ZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlP30KKyAgICAgKi8KKyAgICBsYXN0U2VsZWN0aW9uOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmxhc3RTZWxlY3Rpb24gbm90IGlt
cGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRSYW5nZX0gdGV4dFJhbmdlCisgICAgICovCisgICAgc2V0U2VsZWN0aW9uOiBmdW5j
dGlvbih0ZXh0UmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnNl
dFNlbGVjdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKi8KKyAgICBzZXRUZXh0OiBmdW5jdGlvbih0ZXh0
KQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRWYWx1ZSh0
ZXh0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAq
LworICAgIHRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY2VF
ZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAgICovCisgICAgcmFuZ2U6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmFuZ2Ugbm90
IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIGxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYWNlRWRp
dG9yLmdldFNlc3Npb24oKS5nZXRMaW5lKGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgZ2V0IGxpbmVzQ291bnQoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExlbmd0aCgp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQorICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHBhcmFtIHtPYmplY3Q/fSB2YWx1ZQorICAg
ICAqLworICAgIHNldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSwgdmFsdWUpCisgICAg
eworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnNldEF0dHJpYnV0ZSBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUK
KyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEByZXR1cm4ge09iamVjdHxudWxs
fSB2YWx1ZQorICAgICAqLworICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuZ2V0QXR0cmlidXRlIG5vdCBp
bXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0g
bGluZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICovCisgICAgcmVtb3ZlQXR0
cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2co
ImFjZUVkaXRvci5yZW1vdmVBdHRyaWJ1dGUgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKwor
ICAgIHdhc1Nob3duOiBmdW5jdGlvbigpIHsgfSwKKworICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLlZpZXcucHJvdG90eXBlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TZXR0aW5ncy5qcwppbmRleCBhZDY5ODVkYTMyNmViMTcwNTEyZTgxM2Q3NDY4ZTA3NWNh
NGJlNjRlLi5jNjk0Yjg5ODgyMzk3OGYwZTdlYWY4NjI3YzBhOGEyMjQ0ZmQ2ZGYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAgLTIxMCw2
ICsyMTAsNyBAQCBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0aW5ncyA9IGZ1bmN0aW9uKCkK
ICAgICB0aGlzLmNhbnZhc0luc3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJjYW52
YXNJbnNwZWN0aW9uICIsICJDYW52YXMgaW5zcGVjdGlvbiIpOwogICAgIHRoaXMuc2FzcyA9IHRo
aXMuX2NyZWF0ZUV4cGVyaW1lbnQoInNhc3MiLCAiU3VwcG9ydCBmb3IgU2FzcyIpOwogICAgIHRo
aXMuY29kZW1pcnJvciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNvZGVtaXJyb3IiLCAiVXNl
IENvZGVNaXJyb3IgZWRpdG9yIik7CisgICAgdGhpcy5hY2VUZXh0RWRpdG9yID0gdGhpcy5fY3Jl
YXRlRXhwZXJpbWVudCgiYWNlVGV4dEVkaXRvciIsICJVc2UgQWNlIGVkaXRvciIpOwogICAgIHRo
aXMuY3NzUmVnaW9ucyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNzc1JlZ2lvbnMiLCAiQ1NT
IFJlZ2lvbnMgU3VwcG9ydCIpOwogICAgIHRoaXMuc2hvd092ZXJyaWRlc0luRHJhd2VyID0gdGhp
cy5fY3JlYXRlRXhwZXJpbWVudCgic2hvd092ZXJyaWRlc0luRHJhd2VyIiwgIlNob3cgT3ZlcnJp
ZGVzIGluIGRyYXdlciIpOwogICAgIHRoaXMuZmlsZVN5c3RlbVByb2plY3QgPSB0aGlzLl9jcmVh
dGVFeHBlcmltZW50KCJmaWxlU3lzdGVtUHJvamVjdCIsICJGaWxlIHN5c3RlbSBmb2xkZXJzIGlu
IFNvdXJjZXMgUGFuZWwiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IGRkMDI5MDIxNWQ2YzI0MjZhZWJjZDMyZDkxNWJhOWJi
NGMyZDc1M2IuLjdjYTY2ZDQ2OGYzYTQ1Mzc0NjAxZTdjNmVhYzQ3MjU3YjhmOThmYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpA
QCAtNDYsNiArNDYsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihjb250
ZW50UHJvdmlkZXIpCiAgICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLmNv
ZGVtaXJyb3IuaXNFbmFibGVkKCkpIHsKICAgICAgICAgbG9hZFNjcmlwdCgiQ29kZU1pcnJvclRl
eHRFZGl0b3IuanMiKTsKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdhdGUpOwor
ICAgIH0gZWxzZSBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MuYWNlVGV4dEVk
aXRvci5pc0VuYWJsZWQoKSkgeworICAgICAgICBsb2FkU2NyaXB0KCJBY2VUZXh0RWRpdG9yLmpz
Iik7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkFjZVRleHRF
ZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdhdGUpOwogICAgIH0gZWxzZQogICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvcih0
aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWQxYjAwMzlmMzIxM2RmNWVi
MTYwNjQ0YzBlNjRiOGE4NzBmMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzCkBAIC0wLDAgKzEsMTQ0NjggQEAKKy8qICoq
KioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
U0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisoZnVuY3Rp
b24oKSB7CisKK3ZhciBBQ0VfTkFNRVNQQUNFID0gImFjZSI7CisKK3ZhciBnbG9iYWwgPSAoZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXM7Cit9KSgpOworCisKK2lmICghQUNFX05BTUVTUEFD
RSAmJiB0eXBlb2YgcmVxdWlyZWpzICE9PSAidW5kZWZpbmVkIikKKyAgICByZXR1cm47CisKKwor
dmFyIF9kZWZpbmUgPSBmdW5jdGlvbihtb2R1bGUsIGRlcHMsIHBheWxvYWQpIHsKKyAgICBpZiAo
dHlwZW9mIG1vZHVsZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgaWYgKF9kZWZpbmUub3JpZ2lu
YWwpCisgICAgICAgICAgICBfZGVmaW5lLm9yaWdpbmFsLmFwcGx5KHdpbmRvdywgYXJndW1lbnRz
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdkcm9wcGluZyBt
b2R1bGUgYmVjYXVzZSBkZWZpbmUgd2FzblwndCBhIHN0cmluZy4nKTsKKyAgICAgICAgICAgIGNv
bnNvbGUudHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikKKyAgICAgICAgcGF5bG9hZCA9IGRlcHM7CisKKyAg
ICBpZiAoIV9kZWZpbmUubW9kdWxlcykKKyAgICAgICAgX2RlZmluZS5tb2R1bGVzID0ge307CisK
KyAgICBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlXSA9IHBheWxvYWQ7Cit9OwordmFyIF9yZXF1aXJl
ID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZSwgY2FsbGJhY2spIHsKKyAgICBpZiAoT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vZHVsZSkgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsK
KyAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1v
ZHVsZS5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkZXAgPSBsb29rdXAo
cGFyZW50SWQsIG1vZHVsZVtpXSk7CisgICAgICAgICAgICBpZiAoIWRlcCAmJiBfcmVxdWlyZS5v
cmlnaW5hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUub3JpZ2luYWwuYXBwbHko
d2luZG93LCBhcmd1bWVudHMpOworICAgICAgICAgICAgcGFyYW1zLnB1c2goZGVwKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5
KG51bGwsIHBhcmFtcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZW9mIG1v
ZHVsZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIHBheWxvYWQgPSBsb29rdXAocGFyZW50
SWQsIG1vZHVsZSk7CisgICAgICAgIGlmICghcGF5bG9hZCAmJiBfcmVxdWlyZS5vcmlnaW5hbCkK
KyAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3Vt
ZW50cyk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxsYmFjaygp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBheWxvYWQ7CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICBpZiAoX3JlcXVpcmUub3JpZ2luYWwpCisgICAgICAgICAgICByZXR1cm4gX3Jl
cXVpcmUub3JpZ2luYWwuYXBwbHkod2luZG93LCBhcmd1bWVudHMpOworICAgIH0KK307CisKK3Zh
ciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgeworICAg
IGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKKyAgICAgICAgdmFyIGNodW5r
cyA9IG1vZHVsZU5hbWUuc3BsaXQoIiEiKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU1vZHVs
ZShwYXJlbnRJZCwgY2h1bmtzWzBdKSArICIhIiArIG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwg
Y2h1bmtzWzFdKTsKKyAgICB9CisgICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikg
eworICAgICAgICB2YXIgYmFzZSA9IHBhcmVudElkLnNwbGl0KCIvIikuc2xpY2UoMCwgLTEpLmpv
aW4oIi8iKTsKKyAgICAgICAgbW9kdWxlTmFtZSA9IGJhc2UgKyAiLyIgKyBtb2R1bGVOYW1lOwor
CisgICAgICAgIHdoaWxlKG1vZHVsZU5hbWUuaW5kZXhPZigiLiIpICE9PSAtMSAmJiBwcmV2aW91
cyAhPSBtb2R1bGVOYW1lKSB7CisgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1l
OworICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXC9cLlwvLywg
Ii8iKS5yZXBsYWNlKC9bXlwvXStcL1wuXC5cLy8sICIiKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBtb2R1bGVOYW1lOworfTsKK3ZhciBsb29rdXAgPSBmdW5jdGlvbihwYXJlbnRJ
ZCwgbW9kdWxlTmFtZSkgeworCisgICAgbW9kdWxlTmFtZSA9IG5vcm1hbGl6ZU1vZHVsZShwYXJl
bnRJZCwgbW9kdWxlTmFtZSk7CisKKyAgICB2YXIgbW9kdWxlID0gX2RlZmluZS5tb2R1bGVzW21v
ZHVsZU5hbWVdOworICAgIGlmICghbW9kdWxlKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHZh
ciBleHBvcnRzID0ge307CisgICAgICAgIHZhciBtb2QgPSB7CisgICAgICAgICAgICBpZDogbW9k
dWxlTmFtZSwKKyAgICAgICAgICAgIHVyaTogJycsCisgICAgICAgICAgICBleHBvcnRzOiBleHBv
cnRzLAorICAgICAgICAgICAgcGFja2FnZWQ6IHRydWUKKyAgICAgICAgfTsKKworICAgICAgICB2
YXIgcmVxID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykgeworICAgICAgICAgICAgcmV0dXJu
IF9yZXF1aXJlKG1vZHVsZU5hbWUsIG1vZHVsZSwgY2FsbGJhY2spOworICAgICAgICB9OworCisg
ICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG1vZHVsZShyZXEsIGV4cG9ydHMsIG1vZCk7CisgICAg
ICAgIGV4cG9ydHMgPSByZXR1cm5WYWx1ZSB8fCBtb2QuZXhwb3J0czsKKyAgICAgICAgX2RlZmlu
ZS5tb2R1bGVzW21vZHVsZU5hbWVdID0gZXhwb3J0czsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHM7
CisgICAgfQorCisgICAgcmV0dXJuIG1vZHVsZTsKK307CisKK2Z1bmN0aW9uIGV4cG9ydEFjZShu
cykgeworICAgIHZhciByZXF1aXJlID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykgeworICAg
ICAgICByZXR1cm4gX3JlcXVpcmUoIiIsIG1vZHVsZSwgY2FsbGJhY2spOworICAgIH07ICAgIAor
CisgICAgdmFyIHJvb3QgPSBnbG9iYWw7CisgICAgaWYgKG5zKSB7CisgICAgICAgIGlmICghZ2xv
YmFsW25zXSkKKyAgICAgICAgICAgIGdsb2JhbFtuc10gPSB7fTsKKyAgICAgICAgcm9vdCA9IGds
b2JhbFtuc107CisgICAgfQorCisgICAgaWYgKCFyb290LmRlZmluZSB8fCAhcm9vdC5kZWZpbmUu
cGFja2FnZWQpIHsKKyAgICAgICAgX2RlZmluZS5vcmlnaW5hbCA9IHJvb3QuZGVmaW5lOworICAg
ICAgICByb290LmRlZmluZSA9IF9kZWZpbmU7CisgICAgICAgIHJvb3QuZGVmaW5lLnBhY2thZ2Vk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJvb3QucmVxdWlyZSB8fCAhcm9vdC5yZXF1aXJl
LnBhY2thZ2VkKSB7CisgICAgICAgIF9yZXF1aXJlLm9yaWdpbmFsID0gcm9vdC5yZXF1aXJlOwor
ICAgICAgICByb290LnJlcXVpcmUgPSByZXF1aXJlOworICAgICAgICByb290LnJlcXVpcmUucGFj
a2FnZWQgPSB0cnVlOworICAgIH0KK30KKworZXhwb3J0QWNlKEFDRV9OQU1FU1BBQ0UpOworCit9
KSgpOworCithY2UuZGVmaW5lKCdhY2UvYWNlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL2ZpeG9sZGJyb3dzZXJzJywgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIv
ZXZlbnQnLCAnYWNlL2VkaXRvcicsICdhY2UvZWRpdF9zZXNzaW9uJywgJ2FjZS91bmRvbWFuYWdl
cicsICdhY2UvdmlydHVhbF9yZW5kZXJlcicsICdhY2UvbXVsdGlfc2VsZWN0JywgJ2FjZS93b3Jr
ZXIvd29ya2VyX2NsaWVudCcsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJywgJ2FjZS9wbGFj
ZWhvbGRlcicsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvY29uZmlnJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3JlcXVpcmUoIi4vbGliL2Zp
eG9sZGJyb3dzZXJzIik7CisKK3ZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKK3ZhciBl
dmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7CisKK3ZhciBFZGl0b3IgPSByZXF1aXJlKCIu
L2VkaXRvciIpLkVkaXRvcjsKK3ZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRpdF9zZXNz
aW9uIikuRWRpdFNlc3Npb247Cit2YXIgVW5kb01hbmFnZXIgPSByZXF1aXJlKCIuL3VuZG9tYW5h
Z2VyIikuVW5kb01hbmFnZXI7Cit2YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuL3ZpcnR1YWxfcmVu
ZGVyZXIiKS5WaXJ0dWFsUmVuZGVyZXI7Cit2YXIgTXVsdGlTZWxlY3QgPSByZXF1aXJlKCIuL211
bHRpX3NlbGVjdCIpLk11bHRpU2VsZWN0OworcmVxdWlyZSgiLi93b3JrZXIvd29ya2VyX2NsaWVu
dCIpOworcmVxdWlyZSgiLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKTsKK3JlcXVpcmUoIi4vcGxh
Y2Vob2xkZXIiKTsKK3JlcXVpcmUoIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIpOworZXhwb3J0
cy5jb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOworZXhwb3J0cy5yZXF1aXJlID0gcmVxdWly
ZTsKK2V4cG9ydHMuZWRpdCA9IGZ1bmN0aW9uKGVsKSB7CisgICAgaWYgKHR5cGVvZihlbCkgPT0g
InN0cmluZyIpIHsKKyAgICAgICAgdmFyIF9pZCA9IGVsOworICAgICAgICB2YXIgZWwgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChfaWQpOworICAgICAgICBpZiAoIWVsKQorICAgICAgICAgICAg
dGhyb3cgImFjZS5lZGl0IGNhbid0IGZpbmQgZGl2ICMiICsgX2lkOworICAgIH0KKworICAgIGlm
IChlbC5lbnYgJiYgZWwuZW52LmVkaXRvciBpbnN0YW5jZW9mIEVkaXRvcikKKyAgICAgICAgcmV0
dXJuIGVsLmVudi5lZGl0b3I7CisKKyAgICB2YXIgZG9jID0gZXhwb3J0cy5jcmVhdGVFZGl0U2Vz
c2lvbihkb20uZ2V0SW5uZXJUZXh0KGVsKSk7CisgICAgZWwuaW5uZXJIVE1MID0gJyc7CisKKyAg
ICB2YXIgZWRpdG9yID0gbmV3IEVkaXRvcihuZXcgUmVuZGVyZXIoZWwpKTsKKyAgICBuZXcgTXVs
dGlTZWxlY3QoZWRpdG9yKTsKKyAgICBlZGl0b3Iuc2V0U2Vzc2lvbihkb2MpOworCisgICAgdmFy
IGVudiA9IHsKKyAgICAgICAgZG9jdW1lbnQ6IGRvYywKKyAgICAgICAgZWRpdG9yOiBlZGl0b3Is
CisgICAgICAgIG9uUmVzaXplOiBlZGl0b3IucmVzaXplLmJpbmQoZWRpdG9yKQorICAgIH07Cisg
ICAgZXZlbnQuYWRkTGlzdGVuZXIod2luZG93LCAicmVzaXplIiwgZW52Lm9uUmVzaXplKTsKKyAg
ICBlbC5lbnYgPSBlZGl0b3IuZW52ID0gZW52OworICAgIHJldHVybiBlZGl0b3I7Cit9OworZXhw
b3J0cy5jcmVhdGVFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKKyAgICB2YXIg
ZG9jID0gbmV3IEVkaXRTZXNzaW9uKHRleHQsIGRvYyk7CisgICAgZG9jLnNldFVuZG9NYW5hZ2Vy
KG5ldyBVbmRvTWFuYWdlcigpKTsKKyAgICByZXR1cm4gZG9jOworfQorZXhwb3J0cy5FZGl0U2Vz
c2lvbiA9IEVkaXRTZXNzaW9uOworZXhwb3J0cy5VbmRvTWFuYWdlciA9IFVuZG9NYW5hZ2VyOwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZml4b2xkYnJvd3NlcnMnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvcmVnZXhwJywgJ2FjZS9saWIvZXM1LXNoaW0n
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworcmVxdWlyZSgiLi9y
ZWdleHAiKTsKK3JlcXVpcmUoIi4vZXM1LXNoaW0iKTsKKworfSk7CisgCithY2UuZGVmaW5lKCdh
Y2UvbGliL3JlZ2V4cCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgICB2YXIgcmVhbCA9IHsKKyAgICAg
ICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywKKyAgICAgICAgICAgIHRlc3Q6IFJl
Z0V4cC5wcm90b3R5cGUudGVzdCwKKyAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBl
Lm1hdGNoLAorICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLAor
ICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQKKyAgICAgICAgfSwKKyAg
ICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIiKVsxXSA9
PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGljaXBhdGlu
ZyBjYXB0dXJpbmcgZ3JvdXBzCisgICAgICAgIGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB4ID0gL14vZzsKKyAgICAgICAgICAgIHJl
YWwudGVzdC5jYWxsKHgsICIiKTsKKyAgICAgICAgICAgIHJldHVybiAheC5sYXN0SW5kZXg7Cisg
ICAgICAgIH0oKTsKKworICAgIGlmIChjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgY29t
cGxpYW50RXhlY05wY2cpCisgICAgICAgIHJldHVybjsKKyAgICBSZWdFeHAucHJvdG90eXBlLmV4
ZWMgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgIHZhciBtYXRjaCA9IHJlYWwuZXhlYy5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpLAorICAgICAgICAgICAgbmFtZSwgcjI7CisgICAgICAgIGlmICgg
dHlwZW9mKHN0cikgPT0gJ3N0cmluZycgJiYgbWF0Y2gpIHsKKyAgICAgICAgICAgIGlmICghY29t
cGxpYW50RXhlY05wY2cgJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBpbmRleE9mKG1hdGNoLCAiIikg
PiAtMSkgeworICAgICAgICAgICAgICAgIHIyID0gUmVnRXhwKHRoaXMuc291cmNlLCByZWFsLnJl
cGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgImciLCAiIikpOworICAgICAgICAgICAg
ICAgIHJlYWwucmVwbGFjZS5jYWxsKHN0ci5zbGljZShtYXRjaC5pbmRleCksIHIyLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRz
Lmxlbmd0aCAtIDI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1tpXSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ld
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5feHJlZ2V4cCAmJiB0aGlzLl94
cmVnZXhwLmNhcHR1cmVOYW1lcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgbWF0Y2gubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMu
X3hyZWdleHAuY2FwdHVyZU5hbWVzW2kgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5h
bWUpCisgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW25hbWVdID0gbWF0Y2hbaV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRM
YXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAo
dGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCisgICAgICAgICAgICAgICAgdGhpcy5sYXN0
SW5kZXgtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfTsKKyAgICBp
ZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCkgeworICAgICAgICBSZWdFeHAucHJvdG90
eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSByZWFs
LmV4ZWMuY2FsbCh0aGlzLCBzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNoICYmIHRoaXMuZ2xv
YmFsICYmICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2guaW5kZXgp
KQorICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CisgICAgICAgICAgICByZXR1cm4g
ISFtYXRjaDsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXROYXRpdmVGbGFn
cyAocmVnZXgpIHsKKyAgICAgICAgcmV0dXJuIChyZWdleC5nbG9iYWwgICAgID8gImciIDogIiIp
ICsKKyAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsKKyAgICAg
ICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gIm0iIDogIiIpICsKKyAgICAgICAgICAgICAg
IChyZWdleC5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVTNDsgaW5j
bHVkZWQgaW4gQVMzCisgICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIi
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkgewor
ICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIC8vIFVzZSB0aGUgbmF0aXZlIGFy
cmF5IG1ldGhvZCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleE9m
KGl0ZW0sIGZyb20pOworICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXku
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9lczUtc2hpbScsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CisKK2Z1bmN0aW9uIEVtcHR5KCkge30KKworaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkg
eworICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8v
IC5sZW5ndGggaXMgMQorICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAgaWYgKHR5
cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiICsg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCisgICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9u
ICgpIHsKKworICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgeworCisgICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1
bWVudHMpKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKE9iamVjdChy
ZXN1bHQpID09PSByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKKyAg
ICAgICAgICAgICAgICAgICAgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQo
c2xpY2UuY2FsbChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAg
IH0KKworICAgICAgICB9OworICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7CisgICAgICAg
ICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOworICAgICAgICAgICAgYm91
bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7CisgICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBib3VuZDsKKyAgICB9OworfQordmFy
IGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKK3ZhciBwcm90b3R5cGVPZkFycmF5ID0g
QXJyYXkucHJvdG90eXBlOwordmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlw
ZTsKK3ZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7Cit2YXIgX3RvU3RyaW5nID0g
Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKK3ZhciBvd25zID0gY2FsbC5i
aW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKK3ZhciBkZWZpbmVHZXR0ZXI7
Cit2YXIgZGVmaW5lU2V0dGVyOwordmFyIGxvb2t1cEdldHRlcjsKK3ZhciBsb29rdXBTZXR0ZXI7
Cit2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CitpZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhw
cm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKKyAgICBkZWZpbmVHZXR0
ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CisgICAg
ZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVy
X18pOworICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xv
b2t1cEdldHRlcl9fKTsKKyAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZP
YmplY3QuX19sb29rdXBTZXR0ZXJfXyk7Cit9CitpZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCAh
PSAyKSB7CisgICAgaWYoZnVuY3Rpb24oKSB7IC8vIHRlc3QgSUUgPCA5IHRvIHNwbGljZSBidWcg
LSBzZWUgaXNzdWUgIzEzOAorICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgeworICAgICAg
ICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKKyAgICAgICAgICAgIGFbMF0gPSBhWzFdID0g
MDsKKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisgICAgICAgIHZhciBhcnJheSA9
IFtdLCBsZW5ndGhCZWZvcmU7CisgICAgICAgIAorICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHko
YXJyYXksIG1ha2VBcnJheSgyMCkpOworICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXks
IG1ha2VBcnJheSgyNikpOworCisgICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsg
Ly80NgorICAgICAgICBhcnJheS5zcGxpY2UoNSwgMCwgIlhYWCIpOyAvLyBhZGQgb25lIGVsZW1l
bnQKKworICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAorCisgICAgICAg
IGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGJ1Z3MK
KyAgICAgICAgfQorICAgIH0oKSkgey8vSUUgNi83CisgICAgICAgIHZhciBhcnJheV9zcGxpY2Ug
PSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOworICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNl
ID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywg
WworICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9PT0gdm9pZCAwID8gKHRoaXMubGVuZ3RoIC0g
c3RhcnQpIDogZGVsZXRlQ291bnQKKyAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGljZS5jYWxs
KGFyZ3VtZW50cywgMikpKQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gZWxzZSB7
Ly9JRTgKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBvcywgcmVt
b3ZlQ291bnQpeworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOworICAgICAg
ICAgICAgaWYgKHBvcyA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVuZ3RoKQor
ICAgICAgICAgICAgICAgICAgICBwb3MgPSBsZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHBvcyA9PSB2b2lkIDApIHsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAg
fSBlbHNlIGlmIChwb3MgPCAwKSB7CisgICAgICAgICAgICAgICAgcG9zID0gTWF0aC5tYXgobGVu
Z3RoICsgcG9zLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCEocG9zK3Jl
bW92ZUNvdW50IDwgbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9IGxlbmd0
aCAtIHBvczsKKworICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBvcywgcG9z
K3JlbW92ZUNvdW50KTsKKyAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7CisgICAgICAgICAgICB2YXIgYWRkID0gaW5zZXJ0Lmxlbmd0aDsgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlm
IChhZGQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2Vy
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcmVtb3ZlID0gTWF0aC5taW4ocmVtb3ZlQ291bnQsIGxlbmd0aCAtIHBvcyk7Cisg
ICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CisgICAgICAgICAg
ICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOworICAgICAg
ICAgICAgICAgIHZhciB0YWlsQ291bnQgPSBsZW5ndGggLSB0YWlsT2xkUG9zOworICAgICAgICAg
ICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKKworICAgICAg
ICAgICAgICAgIGlmICh0YWlsTmV3UG9zIDwgdGFpbE9sZFBvcykgeyAvLyBjYXNlIEEKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9z
K2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
c1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3RoaW5nIHRv
IGRvKQorCisgICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFmdGVyUmVt
b3ZlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1v
dmU7IC8vIHRydW5jYXRlIGFycmF5CisgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBs
eSh0aGlzLCBpbnNlcnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJlc2VydmVz
IHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGQ7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICAgICAgfTsKKyAgICB9Cit9CitpZiAoIUFycmF5Lmlz
QXJyYXkpIHsKKyAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKKyAg
ICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CisgICAgfTsK
K30KK3ZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAorICAgIHNwbGl0U3RyaW5nID0gYm94
ZWRTdHJpbmdbMF0gIT0gImEiIHx8ICEoMCBpbiBib3hlZFN0cmluZyk7CisKK2lmICghQXJyYXku
cHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0
aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09i
amVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmco
dGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQo
IiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3Vt
ZW50c1sxXSwKKyAgICAgICAgICAgIGkgPSAtMSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYu
bGVuZ3RoID4+PiAwOworICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVu
Y3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1l
c3NhZ2UKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwg
c2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9
CitpZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKKyAgICBBcnJheS5wcm90b3R5cGUubWFwID0g
ZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9P
YmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5n
KHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0
KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3RoID0gc2Vs
Zi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAorICAg
ICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVu
KSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNl
bGYpCisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0s
IGksIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
fQoraWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgICAgQXJyYXkucHJvdG90eXBlLmZp
bHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CisgICAgICAgIHZhciBv
YmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAm
JiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAg
IHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAg
ICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQgPSBbXSwK
KyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07Cisg
ICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNl
bGZbaV07CisgICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2Jq
ZWN0KSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CisgICAgQXJyYXku
cHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgeworICAg
ICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3Bs
aXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAg
ICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICB0aGlzcCA9
IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1
bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBu
b3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwo
dGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLnNvbWUpIHsKKyAgICBBcnJheS5wcm90b3R5cGUu
c29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2YXIgb2Jq
ZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYg
X3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0
aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVu
Z3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sx
XTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlv
biIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltp
XSwgaSwgb2JqZWN0KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQoraWYgKCFB
cnJheS5wcm90b3R5cGUucmVkdWNlKSB7CisgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1
bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0g
dG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3Ry
aW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNw
bGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3RoID0g
c2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVj
dCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIg
aXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxlbmd0aCAmJiBh
cmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
InJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRz
WzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
IGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytd
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1
ZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
aWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQg
MCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5
cGUucmVkdWNlUmlnaHQpIHsKKyAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5j
dGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIgb2JqZWN0
ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3Rv
U3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlz
LnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3Ro
ID0gc2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biAr
ICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxlbmd0aCAm
JiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7CisgICAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3Vt
ZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZb
aS0tXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2
YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ld
LCBpLCBvYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChpLS0pOworCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmlu
ZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgeworICAgIEFycmF5LnByb3Rv
dHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyAp
IHsKKyAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0g
IltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAg
ICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYu
bGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNb
MV0pOworICAgICAgICB9CisgICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVu
Z3RoICsgaSk7CisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291Z2h0KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAsIDFdLmxh
c3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4
T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgeworICAg
ICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVj
dCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAg
ICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGgg
Pj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CisgICAgICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdl
cihhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgfQorICAgICAgICBpID0gaSA+PSAwID8gaSA6IGxl
bmd0aCAtIE1hdGguYWJzKGkpOworICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKyAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH07Cit9CitpZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgeworICAgIE9iamVj
dC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgeworICAg
ICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCisgICAgICAgICAgICBvYmplY3QuY29u
c3RydWN0b3IgPworICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6Cisg
ICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAorICAgICAgICApOworICAgIH07Cit9CitpZiAo
IU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKKyAgICB2YXIgRVJSX05PTl9PQkpF
Q1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAiICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKKyAgICBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9i
amVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3Qi
ICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7Cisg
ICAgICAgIGlmICghb3ducyhvYmplY3QsIHByb3BlcnR5KSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgZGVzY3JpcHRvciwgZ2V0dGVyLCBzZXR0ZXI7CisgICAgICAgIGRlc2Ny
aXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKKyAgICAg
ICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0g
b2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5
cGVPZk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmpl
Y3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2Jq
ZWN0LCBwcm9wZXJ0eSk7CisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBl
OworCisgICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgeworICAgICAgICAgICAgICAg
IGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAgICAgIGlm
IChzZXR0ZXIpIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOworICAgICAgICAgICAgICAgIHJldHVy
biBkZXNjcmlwdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlc2NyaXB0
b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsK
KyAgICB9OworfQoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgeworICAgIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgfTsKK30KK2lm
ICghT2JqZWN0LmNyZWF0ZSkgeworICAgIHZhciBjcmVhdGVFbXB0eTsKKyAgICBpZiAoT2JqZWN0
LnByb3RvdHlwZS5fX3Byb3RvX18gPT09IG51bGwpIHsKKyAgICAgICAgY3JlYXRlRW1wdHkgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9Owor
ICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBp
IGluIGVtcHR5KQorICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKKyAgICAgICAgICAg
IGVtcHR5LmNvbnN0cnVjdG9yID0KKyAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID0K
KyAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KKyAgICAgICAgICAgIGVt
cHR5LmlzUHJvdG90eXBlT2YgPQorICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPQor
ICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQorICAgICAgICAgICAgZW1wdHkudmFsdWVPZiA9
CisgICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOworICAgICAgICAgICAgcmV0dXJu
IGVtcHR5OworICAgICAgICB9CisgICAgfQorCisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9u
IGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG9iamVjdDsKKyAg
ICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgb2JqZWN0ID0gY3Jl
YXRlRW1wdHkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgcHJv
dG90eXBlICE9ICJvYmplY3QiKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
InR5cGVvZiBwcm90b3R5cGVbIisodHlwZW9mIHByb3RvdHlwZSkrIl0gIT0gJ29iamVjdCciKTsK
KyAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CisgICAgICAgICAgICBUeXBl
LnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7
CisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApCisgICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOworICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7
CisgICAgdHJ5IHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRp
bmVsIiwge30pOworICAgICAgICByZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7CisgICAgfSBj
YXRjaCAoZXhjZXB0aW9uKSB7CisgICAgfQorfQoraWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkg
eworICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVy
dHlXb3JrKHt9KTsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRv
Y3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CisgICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmso
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgIGlmICghZGVmaW5lUHJvcGVydHlX
b3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKKyAgICAgICAgdmFy
IGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CisgICAgfQor
fQorCitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNr
KSB7CisgICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3Jp
cHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CisgICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdF
VCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIKKyAgICB2
YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBu
b3QgYmUgZGVmaW5lZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Im9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOworCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikg
eworICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVj
dCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CisgICAgICAgIGlm
ICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0g
ImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOworICAg
ICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgeworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwg
b2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICB9IGNhdGNoIChleGNl
cHRpb24pIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob3ducyhkZXNj
cmlwdG9yLCAidmFsdWUiKSkgeworCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMg
JiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90
b19fOworICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVj
dDsKKyAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgICAg
ICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAgICAgICAgICAg
ICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nl
c3NvcnMpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JT
X05PVF9TVVBQT1JURUQpOworICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIp
KQorICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlw
dG9yLmdldCk7CisgICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpCisgICAg
ICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KK2lmICgh
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9
IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CisgICAgICAg
IGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChvd25z
KHByb3BlcnRpZXMsIHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LnNlYWwpIHsK
KyAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9iamVjdC5m
cmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgfTsKK30KK3RyeSB7CisgICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7Cit9
IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6
ZShmcmVlemVPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3Qp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cit9CitpZiAoIU9iamVjdC5wcmV2ZW50RXh0
ZW5zaW9ucykgeworICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZl
bnRFeHRlbnNpb25zKG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9
CitpZiAoIU9iamVjdC5pc1NlYWxlZCkgeworICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9u
IGlzU2VhbGVkKG9iamVjdCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KK2lm
ICghT2JqZWN0LmlzRnJvemVuKSB7CisgICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNG
cm96ZW4ob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQoraWYgKCFP
YmplY3QuaXNFeHRlbnNpYmxlKSB7CisgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9u
IGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKKyAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBv
YmplY3QpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNz
YWdlCisgICAgICAgIH0KKyAgICAgICAgdmFyIG5hbWUgPSAnJzsKKyAgICAgICAgd2hpbGUgKG93
bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgbmFtZSArPSAnPyc7CisgICAgICAgIH0K
KyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJldHVyblZhbHVlID0g
b3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmtleXMpIHsKKyAg
ICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAorICAgICAgICBkb250RW51bXMgPSBbCisgICAg
ICAgICAgICAidG9TdHJpbmciLAorICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKKyAgICAg
ICAgICAgICJ2YWx1ZU9mIiwKKyAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCisgICAgICAg
ICAgICAiaXNQcm90b3R5cGVPZiIsCisgICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUi
LAorICAgICAgICAgICAgImNvbnN0cnVjdG9yIgorICAgICAgICBdLAorICAgICAgICBkb250RW51
bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOworCisgICAgZm9yICh2YXIga2V5IGluIHsidG9T
dHJpbmciOiBudWxsfSkgeworICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOworICAgIH0K
KworICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKKworICAgICAgICBp
ZiAoCisgICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2Jq
ZWN0ICE9ICJmdW5jdGlvbiIpIHx8CisgICAgICAgICAgICBvYmplY3QgPT09IG51bGwKKyAgICAg
ICAgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxs
ZWQgb24gYSBub24tb2JqZWN0Iik7CisgICAgICAgIH0KKworICAgICAgICB2YXIga2V5cyA9IFtd
OworICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgeworICAgICAgICAgICAgaWYgKG93
bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykgewor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7
IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgeworICAgICAgICAgICAg
ICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9OworCit9CitpZiAo
IURhdGUubm93KSB7CisgICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CisgICAgICAgIHJl
dHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICB9OworfQoraWYoIjAiLnNwbGl0KHZvaWQg
MCwgMCkubGVuZ3RoKSB7CisgICAgdmFyIHN0cmluZ19zcGxpdCA9IFN0cmluZy5wcm90b3R5cGUu
c3BsaXQ7CisgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uKHNlcGFyYXRvciwg
bGltaXQpIHsKKyAgICAgICAgaWYoc2VwYXJhdG9yID09PSB2b2lkIDAgJiYgbGltaXQgPT09IDAp
cmV0dXJuIFtdOworICAgICAgICByZXR1cm4gc3RyaW5nX3NwbGl0LmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7CisgICAgfQorfQoraWYoIiIuc3Vic3RyICYmICIwYiIuc3Vic3RyKC0xKSAhPT0gImIi
KSB7CisgICAgdmFyIHN0cmluZ19zdWJzdHIgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0cjsKKyAg
ICBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpIHsKKyAg
ICAgICAgcmV0dXJuIHN0cmluZ19zdWJzdHIuY2FsbCgKKyAgICAgICAgICAgIHRoaXMsCisgICAg
ICAgICAgICBzdGFydCA8IDAgPyAoc3RhcnQgPSB0aGlzLmxlbmd0aCArIHN0YXJ0KSA8IDAgPyAw
IDogc3RhcnQgOiBzdGFydCwKKyAgICAgICAgICAgIGxlbmd0aAorICAgICAgICApOworICAgIH0K
K30KK3ZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUy
MDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCisgICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1
MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKworICAgICJcdTIwMjlc
dUZFRkYiOworaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7CisgICAg
d3MgPSAiWyIgKyB3cyArICJdIjsKKyAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4
cCgiXiIgKyB3cyArIHdzICsgIioiKSwKKyAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdF
eHAod3MgKyB3cyArICIqJCIpOworICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9u
IHRyaW0oKSB7CisgICAgICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQgfHwgdGhpcyA9PT0gbnVs
bCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3Ro
aXMrIiB0byBvYmplY3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMp
CisgICAgICAgICAgICAucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKQorICAgICAgICAgICAg
LnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIHRvSW50
ZWdlcihuKSB7CisgICAgbiA9ICtuOworICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCisgICAg
ICAgIG4gPSAwOworICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9
PSAtKDEvMCkpIHsKKyAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGgu
YWJzKG4pKTsKKyAgICB9CisgICAgcmV0dXJuIG47Cit9CisKK2Z1bmN0aW9uIGlzUHJpbWl0aXZl
KGlucHV0KSB7CisgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CisgICAgcmV0dXJuICgKKyAg
ICAgICAgaW5wdXQgPT09IG51bGwgfHwKKyAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwK
KyAgICAgICAgdHlwZSA9PT0gImJvb2xlYW4iIHx8CisgICAgICAgIHR5cGUgPT09ICJudW1iZXIi
IHx8CisgICAgICAgIHR5cGUgPT09ICJzdHJpbmciCisgICAgKTsKK30KKworZnVuY3Rpb24gdG9Q
cmltaXRpdmUoaW5wdXQpIHsKKyAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsKKyAgICBp
ZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CisgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICB9Cisg
ICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CisgICAgaWYgKHR5cGVvZiB2YWx1ZU9mID09PSAi
ZnVuY3Rpb24iKSB7CisgICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7CisgICAgICAg
IGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAg
ICB9CisgICAgfQorICAgIHRvU3RyaW5nID0gaW5wdXQudG9TdHJpbmc7CisgICAgaWYgKHR5cGVv
ZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICB2YWwgPSB0b1N0cmluZy5jYWxs
KGlucHV0KTsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwor
fQordmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKKyAgICBpZiAobyA9PSBudWxsKSB7IC8v
IHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAorICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOworICAgIH0KKyAgICBy
ZXR1cm4gT2JqZWN0KG8pOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZG9tJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgWEhUTUxfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCI7CisKK2V4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgbnMpIHsK
KyAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TID8KKyAgICAgICAgICAgZG9jdW1l
bnQuY3JlYXRlRWxlbWVudE5TKG5zIHx8IFhIVE1MX05TLCB0YWcpIDoKKyAgICAgICAgICAgZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOworfTsKKworZXhwb3J0cy5zZXRUZXh0ID0gZnVuY3Rp
b24oZWxlbSwgdGV4dCkgeworICAgIGlmIChlbGVtLmlubmVyVGV4dCAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgIGVsZW0uaW5uZXJUZXh0ID0gdGV4dDsKKyAgICB9CisgICAgaWYgKGVsZW0udGV4
dENvbnRlbnQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4
dDsKKyAgICB9Cit9OworCitleHBvcnRzLmhhc0Nzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUp
IHsKKyAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cpOworICAgIHJl
dHVybiBjbGFzc2VzLmluZGV4T2YobmFtZSkgIT09IC0xOworfTsKK2V4cG9ydHMuYWRkQ3NzQ2xh
c3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIGlmICghZXhwb3J0cy5oYXNDc3NDbGFzcyhl
bCwgbmFtZSkpIHsKKyAgICAgICAgZWwuY2xhc3NOYW1lICs9ICIgIiArIG5hbWU7CisgICAgfQor
fTsKK2V4cG9ydHMucmVtb3ZlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIHZh
ciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5hbWUpOworICAgICAgICBp
ZiAoaW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICB9CisgICAgZWwuY2xhc3NOYW1lID0gY2xh
c3Nlcy5qb2luKCIgIik7Cit9OworCitleHBvcnRzLnRvZ2dsZUNzc0NsYXNzID0gZnVuY3Rpb24o
ZWwsIG5hbWUpIHsKKyAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cp
LCBhZGQgPSB0cnVlOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHZhciBpbmRleCA9IGNs
YXNzZXMuaW5kZXhPZihuYW1lKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhZGQgPSBmYWxzZTsKKyAgICAgICAgY2xh
c3Nlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0KKyAgICBpZihhZGQpCisgICAgICAgIGNsYXNz
ZXMucHVzaChuYW1lKTsKKworICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbigiICIpOwor
ICAgIHJldHVybiBhZGQ7Cit9OworZXhwb3J0cy5zZXRDc3NDbGFzcyA9IGZ1bmN0aW9uKG5vZGUs
IGNsYXNzTmFtZSwgaW5jbHVkZSkgeworICAgIGlmIChpbmNsdWRlKSB7CisgICAgICAgIGV4cG9y
dHMuYWRkQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
eHBvcnRzLnJlbW92ZUNzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7CisgICAgfQorfTsKKworZXhw
b3J0cy5oYXNDc3NTdHJpbmcgPSBmdW5jdGlvbihpZCwgZG9jKSB7CisgICAgdmFyIGluZGV4ID0g
MCwgc2hlZXRzOworICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKKworICAgIGlmIChkb2MuY3Jl
YXRlU3R5bGVTaGVldCAmJiAoc2hlZXRzID0gZG9jLnN0eWxlU2hlZXRzKSkgeworICAgICAgICB3
aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKQorICAgICAgICAgICAgaWYgKHNoZWV0c1tpbmRl
eCsrXS5vd25pbmdFbGVtZW50LmlkID09PSBpZCkgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlm
ICgoc2hlZXRzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdHlsZSIpKSkgeworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKQorICAgICAgICAgICAgaWYgKHNoZWV0c1tp
bmRleCsrXS5pZCA9PT0gaWQpIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK307CisKK2V4cG9ydHMuaW1wb3J0Q3NzU3RyaW5nID0gZnVuY3Rpb24gaW1wb3J0Q3NzU3Ry
aW5nKGNzc1RleHQsIGlkLCBkb2MpIHsKKyAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7CisgICAg
aWYgKGlkICYmIGV4cG9ydHMuaGFzQ3NzU3RyaW5nKGlkLCBkb2MpKQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAKKyAgICB2YXIgc3R5bGU7CisgICAgCisgICAgaWYgKGRvYy5jcmVhdGVTdHls
ZVNoZWV0KSB7CisgICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZVN0eWxlU2hlZXQoKTsKKyAgICAg
ICAgc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7CisgICAgICAgIGlmIChpZCkKKyAgICAgICAgICAg
IHN0eWxlLm93bmluZ0VsZW1lbnQuaWQgPSBpZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHls
ZSA9IGRvYy5jcmVhdGVFbGVtZW50TlMKKyAgICAgICAgICAgID8gZG9jLmNyZWF0ZUVsZW1lbnRO
UyhYSFRNTF9OUywgInN0eWxlIikKKyAgICAgICAgICAgIDogZG9jLmNyZWF0ZUVsZW1lbnQoInN0
eWxlIik7CisKKyAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNz
c1RleHQpKTsKKyAgICAgICAgaWYgKGlkKQorICAgICAgICAgICAgc3R5bGUuaWQgPSBpZDsKKwor
ICAgICAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdIHx8
IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwor
ICAgIH0KK307CisKK2V4cG9ydHMuaW1wb3J0Q3NzU3R5bHNoZWV0ID0gZnVuY3Rpb24odXJpLCBk
b2MpIHsKKyAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKKyAgICAgICAgZG9jLmNyZWF0
ZVN0eWxlU2hlZXQodXJpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgbGluayA9IGV4cG9y
dHMuY3JlYXRlRWxlbWVudCgnbGluaycpOworICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0
JzsKKyAgICAgICAgbGluay5ocmVmID0gdXJpOworCisgICAgICAgIHZhciBoZWFkID0gZG9jLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKKyAg
ICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKKyAgICB9Cit9OworCitleHBvcnRzLmdldElu
bmVyV2lkdGggPSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICgKKyAgICAgICAgcGFy
c2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nTGVmdCIpLCAxMCkg
KworICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwgInBhZGRp
bmdSaWdodCIpLCAxMCkgKyAKKyAgICAgICAgZWxlbWVudC5jbGllbnRXaWR0aAorICAgICk7Cit9
OworCitleHBvcnRzLmdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJl
dHVybiAoCisgICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCAi
cGFkZGluZ1RvcCIpLCAxMCkgKworICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5
bGUoZWxlbWVudCwgInBhZGRpbmdCb3R0b20iKSwgMTApICsKKyAgICAgICAgZWxlbWVudC5jbGll
bnRIZWlnaHQKKyAgICApOworfTsKKworaWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0gdW5kZWZp
bmVkKSB7CisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQ7CisgICAgfTsKKworICAgIGV4cG9ydHMuZ2V0
UGFnZVNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdl
WE9mZnNldDsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9w
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsK
KyAgICB9OworCisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OworICAgIH07Cit9CisKK2lm
ICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkKKyAgICBleHBvcnRzLmNvbXB1dGVkU3R5bGUgPSBm
dW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAg
ICByZXR1cm4gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKSB8fCB7fSlbc3R5
bGVdIHx8ICIiOworICAgICAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVu
dCwgIiIpIHx8IHt9OworICAgIH07CitlbHNlCisgICAgZXhwb3J0cy5jb21wdXRlZFN0eWxlID0g
ZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQuY3VycmVudFN0eWxlOworICAgIH07CisKK2V4cG9ydHMuc2Nyb2xsYmFyV2lkdGggPSBm
dW5jdGlvbihkb2N1bWVudCkgeworICAgIHZhciBpbm5lciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVu
dCgiYWNlX2lubmVyIik7CisgICAgaW5uZXIuc3R5bGUud2lkdGggPSAiMTAwJSI7CisgICAgaW5u
ZXIuc3R5bGUubWluV2lkdGggPSAiMHB4IjsKKyAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSAiMjAw
cHgiOworICAgIGlubmVyLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworCisgICAgdmFyIG91dGVy
ID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJhY2Vfb3V0ZXIiKTsKKyAgICB2YXIgc3R5bGUgPSBv
dXRlci5zdHlsZTsKKworICAgIHN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICBzdHls
ZS5sZWZ0ID0gIi0xMDAwMHB4IjsKKyAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOworICAg
IHN0eWxlLndpZHRoID0gIjIwMHB4IjsKKyAgICBzdHlsZS5taW5XaWR0aCA9ICIwcHgiOworICAg
IHN0eWxlLmhlaWdodCA9ICIxNTBweCI7CisgICAgc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisK
KyAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7CisKKyAgICB2YXIgYm9keSA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudDsKKyAgICBib2R5LmFwcGVuZENoaWxkKG91dGVyKTsKKworICAgIHZh
ciBub1Njcm9sbGJhciA9IGlubmVyLm9mZnNldFdpZHRoOworCisgICAgc3R5bGUub3ZlcmZsb3cg
PSAic2Nyb2xsIjsKKyAgICB2YXIgd2l0aFNjcm9sbGJhciA9IGlubmVyLm9mZnNldFdpZHRoOwor
CisgICAgaWYgKG5vU2Nyb2xsYmFyID09IHdpdGhTY3JvbGxiYXIpIHsKKyAgICAgICAgd2l0aFNj
cm9sbGJhciA9IG91dGVyLmNsaWVudFdpZHRoOworICAgIH0KKworICAgIGJvZHkucmVtb3ZlQ2hp
bGQob3V0ZXIpOworCisgICAgcmV0dXJuIG5vU2Nyb2xsYmFyLXdpdGhTY3JvbGxiYXI7Cit9Owor
ZXhwb3J0cy5zZXRJbm5lckh0bWwgPSBmdW5jdGlvbihlbCwgaW5uZXJIdG1sKSB7CisgICAgdmFy
IGVsZW1lbnQgPSBlbC5jbG9uZU5vZGUoZmFsc2UpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgZWxlbWVudC5pbm5lckhUTUwgPSBpbm5lckh0bWw7CisgICAgZWwucGFyZW50
Tm9kZS5yZXBsYWNlQ2hpbGQoZWxlbWVudCwgZWwpOworICAgIHJldHVybiBlbGVtZW50OworfTsK
KworZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7CisgICAg
dmFyIGRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudDsKKyAgICBpZiAoZG9jdW1lbnQuYm9keSAm
JiAidGV4dENvbnRlbnQiIGluIGRvY3VtZW50LmJvZHkpCisgICAgICAgIGVsLnRleHRDb250ZW50
ID0gaW5uZXJUZXh0OworICAgIGVsc2UKKyAgICAgICAgZWwuaW5uZXJUZXh0ID0gaW5uZXJUZXh0
OworCit9OworCitleHBvcnRzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVsKSB7CisgICAgdmFy
IGRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudDsKKyAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiAi
dGV4dENvbnRlbnQiIGluIGRvY3VtZW50LmJvZHkpCisgICAgICAgIHJldHVybiBlbC50ZXh0Q29u
dGVudDsKKyAgICBlbHNlCisgICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0IHx8IGVsLnRleHRD
b250ZW50IHx8ICIiOworfTsKKworZXhwb3J0cy5nZXRQYXJlbnRXaW5kb3cgPSBmdW5jdGlvbihk
b2N1bWVudCkgeworICAgIHJldHVybiBkb2N1bWVudC5kZWZhdWx0VmlldyB8fCBkb2N1bWVudC5w
YXJlbnRXaW5kb3c7Cit9OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9ldmVudCcsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9rZXlzJywgJ2FjZS9saWIv
dXNlcmFnZW50JywgJ2FjZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBrZXlzID0gcmVxdWlyZSgiLi9rZXlzIik7Cit2YXIgdXNlcmFnZW50
ID0gcmVxdWlyZSgiLi91c2VyYWdlbnQiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuL2RvbSIpOwor
CitleHBvcnRzLmFkZExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHsK
KyAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBlbGVtLmFk
ZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKGVs
ZW0uYXR0YWNoRXZlbnQpIHsKKyAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKHdpbmRvdy5ldmVudCk7CisgICAgICAgIH07CisgICAgICAgIGNh
bGxiYWNrLl93cmFwcGVyID0gd3JhcHBlcjsKKyAgICAgICAgZWxlbS5hdHRhY2hFdmVudCgib24i
ICsgdHlwZSwgd3JhcHBlcik7CisgICAgfQorfTsKKworZXhwb3J0cy5yZW1vdmVMaXN0ZW5lciA9
IGZ1bmN0aW9uKGVsZW0sIHR5cGUsIGNhbGxiYWNrKSB7CisgICAgaWYgKGVsZW0ucmVtb3ZlRXZl
bnRMaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGUsIGNhbGxiYWNrLCBmYWxzZSk7CisgICAgfQorICAgIGlmIChlbGVtLmRldGFjaEV2ZW50KSB7
CisgICAgICAgIGVsZW0uZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGNhbGxiYWNrLl93cmFwcGVy
IHx8IGNhbGxiYWNrKTsKKyAgICB9Cit9OworZXhwb3J0cy5zdG9wRXZlbnQgPSBmdW5jdGlvbihl
KSB7CisgICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7CisgICAgZXhwb3J0cy5wcmV2ZW50
RGVmYXVsdChlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9OworCitleHBvcnRzLnN0b3BQcm9wYWdh
dGlvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pCisgICAgICAg
IGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgZWxzZQorICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9
IHRydWU7Cit9OworCitleHBvcnRzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgeworICAg
IGlmIChlLnByZXZlbnREZWZhdWx0KQorICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg
ZWxzZQorICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7Cit9OworZXhwb3J0cy5nZXRCdXR0
b24gPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUudHlwZSA9PSAiZGJsY2xpY2siKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoZS50eXBlID09ICJjb250ZXh0bWVudSIgfHwgKGUuY3RybEtl
eSAmJiB1c2VyYWdlbnQuaXNNYWMpKQorICAgICAgICByZXR1cm4gMjsKKyAgICBpZiAoZS5wcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICByZXR1cm4gZS5idXR0b247CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICByZXR1cm4gezE6MCwgMjoyLCA0OjF9W2UuYnV0dG9uXTsKKyAgICB9Cit9Owor
CitpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldENhcHR1cmUpIHsKKyAgICBleHBvcnRz
LmNhcHR1cmUgPSBmdW5jdGlvbihlbCwgZXZlbnRIYW5kbGVyLCByZWxlYXNlQ2FwdHVyZUhhbmRs
ZXIpIHsKKyAgICAgICAgdmFyIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBmdW5jdGlvbiBvblJl
bGVhc2VDYXB0dXJlKGUpIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlcihlKTsKKworICAgICAg
ICAgICAgaWYgKCFjYWxsZWQpIHsKKyAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZXhwb3J0cy5yZW1vdmVMaXN0ZW5lcihlbCwgIm1vdXNlbW92ZSIsIGV2ZW50
SGFuZGxlcik7CisgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVsLCAibW91c2V1
cCIsIG9uUmVsZWFzZUNhcHR1cmUpOworICAgICAgICAgICAgZXhwb3J0cy5yZW1vdmVMaXN0ZW5l
cihlbCwgImxvc2VjYXB0dXJlIiwgb25SZWxlYXNlQ2FwdHVyZSk7CisKKyAgICAgICAgICAgIGVs
LnJlbGVhc2VDYXB0dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBleHBvcnRzLmFkZExpc3Rl
bmVyKGVsLCAibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgZXhwb3J0cy5hZGRM
aXN0ZW5lcihlbCwgIm1vdXNldXAiLCBvblJlbGVhc2VDYXB0dXJlKTsKKyAgICAgICAgZXhwb3J0
cy5hZGRMaXN0ZW5lcihlbCwgImxvc2VjYXB0dXJlIiwgb25SZWxlYXNlQ2FwdHVyZSk7CisgICAg
ICAgIGVsLnNldENhcHR1cmUoKTsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0cy5jYXB0
dXJlID0gZnVuY3Rpb24oZWwsIGV2ZW50SGFuZGxlciwgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKSB7
CisgICAgICAgIGZ1bmN0aW9uIG9uTW91c2VVcChlKSB7CisgICAgICAgICAgICBldmVudEhhbmRs
ZXIgJiYgZXZlbnRIYW5kbGVyKGUpOworICAgICAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVy
ICYmIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTsKKworICAgICAgICAgICAgZG9jdW1lbnQucmVt
b3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyLCB0cnVlKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBvbk1vdXNlVXAs
IHRydWUpOworCisgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9CisK
KyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZXZlbnRIYW5k
bGVyLCB0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIs
IG9uTW91c2VVcCwgdHJ1ZSk7CisgICAgfTsKK30KKworZXhwb3J0cy5hZGRNb3VzZVdoZWVsTGlz
dGVuZXIgPSBmdW5jdGlvbihlbCwgY2FsbGJhY2spIHsKKyAgICB2YXIgZmFjdG9yID0gODsKKyAg
ICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlLndoZWVsRGVsdGEg
IT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVggIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgICAgIGUud2hlZWxYID0gLWUud2hlZWxEZWx0YVggLyBmYWN0
b3I7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRhWSAvIGZhY3RvcjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFggPSAwOworICAg
ICAgICAgICAgICAgIGUud2hlZWxZID0gLWUud2hlZWxEZWx0YSAvIGZhY3RvcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChlLmF4aXMg
JiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7CisgICAgICAgICAgICAgICAgZS53aGVl
bFggPSAoZS5kZXRhaWwgfHwgMCkgKiA1OworICAgICAgICAgICAgICAgIGUud2hlZWxZID0gMDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFggPSAwOworICAg
ICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGV0YWlsIHx8IDApICogNTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayhlKTsKKyAgICB9OworICAgIGV4cG9ydHMu
YWRkTGlzdGVuZXIoZWwsICJET01Nb3VzZVNjcm9sbCIsIGxpc3RlbmVyKTsKKyAgICBleHBvcnRz
LmFkZExpc3RlbmVyKGVsLCAibW91c2V3aGVlbCIsIGxpc3RlbmVyKTsKK307CisKK2V4cG9ydHMu
YWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCB0aW1lb3V0cywgZXZlbnRI
YW5kbGVyLCBjYWxsYmFja05hbWUpIHsKKyAgICB2YXIgY2xpY2tzID0gMDsKKyAgICB2YXIgc3Rh
cnRYLCBzdGFydFksIHRpbWVyOworICAgIHZhciBldmVudE5hbWVzID0geworICAgICAgICAyOiAi
ZGJsY2xpY2siLAorICAgICAgICAzOiAidHJpcGxlY2xpY2siLAorICAgICAgICA0OiAicXVhZGNs
aWNrIgorICAgIH07CisKKyAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibW91c2Vkb3duIiwg
ZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZXhwb3J0cy5nZXRCdXR0b24oZSkgIT0gMCkgewor
ICAgICAgICAgICAgY2xpY2tzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciBpc05ld0NsaWNrID0gTWF0aC5hYnMoZS5jbGllbnRYIC0gc3RhcnRYKSA+IDUgfHwgTWF0aC5h
YnMoZS5jbGllbnRZIC0gc3RhcnRZKSA+IDU7CisKKyAgICAgICAgICAgIGlmICghdGltZXIgfHwg
aXNOZXdDbGljaykKKyAgICAgICAgICAgICAgICBjbGlja3MgPSAwOworCisgICAgICAgICAgICBj
bGlja3MgKz0gMTsKKworICAgICAgICAgICAgaWYgKHRpbWVyKQorICAgICAgICAgICAgICAgIGNs
ZWFyVGltZW91dCh0aW1lcikKKyAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlv
bigpIHt0aW1lciA9IG51bGx9LCB0aW1lb3V0c1tjbGlja3MgLSAxXSB8fCA2MDApOworICAgICAg
ICB9CisgICAgICAgIGlmIChjbGlja3MgPT0gMSkgeworICAgICAgICAgICAgc3RhcnRYID0gZS5j
bGllbnRYOworICAgICAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZOworICAgICAgICB9CisKKyAg
ICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oIm1vdXNlZG93biIsIGUpOworCisgICAg
ICAgIGlmIChjbGlja3MgPiA0KQorICAgICAgICAgICAgY2xpY2tzID0gMDsKKyAgICAgICAgZWxz
ZSBpZiAoY2xpY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiBldmVudEhhbmRsZXJbY2FsbGJh
Y2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpOworICAgIH0pOworCisgICAgaWYgKHVzZXJh
Z2VudC5pc09sZElFKSB7CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJkYmxjbGlj
ayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsaWNrcyA9IDI7CisgICAgICAgICAgICBp
ZiAodGltZXIpCisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAg
ICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHt0aW1lciA9IG51bGx9LCB0aW1lb3V0
c1tjbGlja3MgLSAxXSB8fCA2MDApOworICAgICAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNr
TmFtZV0oIm1vdXNlZG93biIsIGUpOworICAgICAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNr
TmFtZV0oZXZlbnROYW1lc1tjbGlja3NdLCBlKTsKKyAgICAgICAgfSk7CisgICAgfQorfTsKKwor
ZnVuY3Rpb24gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGtleUNvZGUpIHsKKyAg
ICB2YXIgaGFzaElkID0gMDsKKyAgICBpZiAoKHVzZXJhZ2VudC5pc09wZXJhICYmICEoIktleWJv
YXJkRXZlbnQiIGluIHdpbmRvdykpICYmIHVzZXJhZ2VudC5pc01hYykgeworICAgICAgICBoYXNo
SWQgPSAwIHwgKGUubWV0YUtleSA/IDEgOiAwKSB8IChlLmFsdEtleSA/IDIgOiAwKQorICAgICAg
ICAgICAgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLmN0cmxLZXkgPyA4IDogMCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaGFzaElkID0gMCB8IChlLmN0cmxLZXkgPyAxIDogMCkgfCAoZS5h
bHRLZXkgPyAyIDogMCkKKyAgICAgICAgICAgIHwgKGUuc2hpZnRLZXkgPyA0IDogMCkgfCAoZS5t
ZXRhS2V5ID8gOCA6IDApOworICAgIH0KKworICAgIGlmIChrZXlDb2RlIGluIGtleXMuTU9ESUZJ
RVJfS0VZUykgeworICAgICAgICBzd2l0Y2ggKGtleXMuTU9ESUZJRVJfS0VZU1trZXlDb2RlXSkg
eworICAgICAgICAgICAgY2FzZSAiQWx0IjoKKyAgICAgICAgICAgICAgICBoYXNoSWQgPSAyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiU2hpZnQiOgorICAgICAg
ICAgICAgICAgIGhhc2hJZCA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJDdHJsIjoKKyAgICAgICAgICAgICAgICBoYXNoSWQgPSAxOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBoYXNoSWQg
PSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtleUNvZGUg
PSAwOworICAgIH0KKworICAgIGlmIChoYXNoSWQgJiA4ICYmIChrZXlDb2RlID09IDkxIHx8IGtl
eUNvZGUgPT0gOTMpKSB7CisgICAgICAgIGtleUNvZGUgPSAwOworICAgIH0KKyAgICBpZiAoIWhh
c2hJZCAmJiAhKGtleUNvZGUgaW4ga2V5cy5GVU5DVElPTl9LRVlTKSAmJiAhKGtleUNvZGUgaW4g
a2V5cy5QUklOVEFCTEVfS0VZUykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTsKK30KKworZXhwb3J0cy5hZGRD
b21tYW5kS2V5TGlzdGVuZXIgPSBmdW5jdGlvbihlbCwgY2FsbGJhY2spIHsKKyAgICB2YXIgYWRk
TGlzdGVuZXIgPSBleHBvcnRzLmFkZExpc3RlbmVyOworICAgIGlmICh1c2VyYWdlbnQuaXNPbGRH
ZWNrbyB8fCAodXNlcmFnZW50LmlzT3BlcmEgJiYgISgiS2V5Ym9hcmRFdmVudCIgaW4gd2luZG93
KSkpIHsKKyAgICAgICAgdmFyIGxhc3RLZXlEb3duS2V5Q29kZSA9IG51bGw7CisgICAgICAgIGFk
ZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGxhc3RL
ZXlEb3duS2V5Q29kZSA9IGUua2V5Q29kZTsKKyAgICAgICAgfSk7CisgICAgICAgIGFkZExpc3Rl
bmVyKGVsLCAia2V5cHJlc3MiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICByZXR1cm4gbm9y
bWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGxhc3RLZXlEb3duS2V5Q29kZSk7CisgICAg
ICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsYXN0RG93biA9IG51bGw7CisKKyAg
ICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAg
ICAgbGFzdERvd24gPSBlLmtleUlkZW50aWZpZXIgfHwgZS5rZXlDb2RlOworICAgICAgICAgICAg
cmV0dXJuIG5vcm1hbGl6ZUNvbW1hbmRLZXlzKGNhbGxiYWNrLCBlLCBlLmtleUNvZGUpOworICAg
ICAgICB9KTsKKyAgICB9Cit9OworCitpZiAod2luZG93LnBvc3RNZXNzYWdlICYmICF1c2VyYWdl
bnQuaXNPbGRJRSkgeworICAgIHZhciBwb3N0TWVzc2FnZUlkID0gMTsKKyAgICBleHBvcnRzLm5l
eHRUaWNrID0gZnVuY3Rpb24oY2FsbGJhY2ssIHdpbikgeworICAgICAgICB3aW4gPSB3aW4gfHwg
d2luZG93OworICAgICAgICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2Ut
IiArIHBvc3RNZXNzYWdlSWQ7CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIod2luLCAibWVz
c2FnZSIsIGZ1bmN0aW9uIGxpc3RlbmVyKGUpIHsKKyAgICAgICAgICAgIGlmIChlLmRhdGEgPT0g
bWVzc2FnZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihl
KTsKKyAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKHdpbiwgIm1lc3NhZ2Ui
LCBsaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgICAgIHdpbi5wb3N0TWVzc2FnZShtZXNzYWdlTmFtZSwgIioiKTsK
KyAgICB9OworfQorCisKK2V4cG9ydHMubmV4dEZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRp
b25GcmFtZSB8fAorICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2lu
ZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93Lm1velJlcXVlc3RBbmlt
YXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisK
K2lmIChleHBvcnRzLm5leHRGcmFtZSkKKyAgICBleHBvcnRzLm5leHRGcmFtZSA9IGV4cG9ydHMu
bmV4dEZyYW1lLmJpbmQod2luZG93KTsKK2Vsc2UKKyAgICBleHBvcnRzLm5leHRGcmFtZSA9IGZ1
bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDE3KTsKKyAg
ICB9OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIva2V5cycsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vb29wIik7Cit2YXIgS2V5cyA9
IChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmV0ID0geworICAgICAgICBNT0RJRklFUl9LRVlTOiB7
CisgICAgICAgICAgICAxNjogJ1NoaWZ0JywgMTc6ICdDdHJsJywgMTg6ICdBbHQnLCAyMjQ6ICdN
ZXRhJworICAgICAgICB9LAorCisgICAgICAgIEtFWV9NT0RTOiB7CisgICAgICAgICAgICAiY3Ry
bCI6IDEsICJhbHQiOiAyLCAib3B0aW9uIiA6IDIsCisgICAgICAgICAgICAic2hpZnQiOiA0LCAi
bWV0YSI6IDgsICJjb21tYW5kIjogOAorICAgICAgICB9LAorCisgICAgICAgIEZVTkNUSU9OX0tF
WVMgOiB7CisgICAgICAgICAgICA4ICA6ICJCYWNrc3BhY2UiLAorICAgICAgICAgICAgOSAgOiAi
VGFiIiwKKyAgICAgICAgICAgIDEzIDogIlJldHVybiIsCisgICAgICAgICAgICAxOSA6ICJQYXVz
ZSIsCisgICAgICAgICAgICAyNyA6ICJFc2MiLAorICAgICAgICAgICAgMzIgOiAiU3BhY2UiLAor
ICAgICAgICAgICAgMzMgOiAiUGFnZVVwIiwKKyAgICAgICAgICAgIDM0IDogIlBhZ2VEb3duIiwK
KyAgICAgICAgICAgIDM1IDogIkVuZCIsCisgICAgICAgICAgICAzNiA6ICJIb21lIiwKKyAgICAg
ICAgICAgIDM3IDogIkxlZnQiLAorICAgICAgICAgICAgMzggOiAiVXAiLAorICAgICAgICAgICAg
MzkgOiAiUmlnaHQiLAorICAgICAgICAgICAgNDAgOiAiRG93biIsCisgICAgICAgICAgICA0NCA6
ICJQcmludCIsCisgICAgICAgICAgICA0NSA6ICJJbnNlcnQiLAorICAgICAgICAgICAgNDYgOiAi
RGVsZXRlIiwKKyAgICAgICAgICAgIDk2IDogIk51bXBhZDAiLAorICAgICAgICAgICAgOTcgOiAi
TnVtcGFkMSIsCisgICAgICAgICAgICA5OCA6ICJOdW1wYWQyIiwKKyAgICAgICAgICAgIDk5IDog
Ik51bXBhZDMiLAorICAgICAgICAgICAgMTAwOiAiTnVtcGFkNCIsCisgICAgICAgICAgICAxMDE6
ICJOdW1wYWQ1IiwKKyAgICAgICAgICAgIDEwMjogIk51bXBhZDYiLAorICAgICAgICAgICAgMTAz
OiAiTnVtcGFkNyIsCisgICAgICAgICAgICAxMDQ6ICJOdW1wYWQ4IiwKKyAgICAgICAgICAgIDEw
NTogIk51bXBhZDkiLAorICAgICAgICAgICAgMTEyOiAiRjEiLAorICAgICAgICAgICAgMTEzOiAi
RjIiLAorICAgICAgICAgICAgMTE0OiAiRjMiLAorICAgICAgICAgICAgMTE1OiAiRjQiLAorICAg
ICAgICAgICAgMTE2OiAiRjUiLAorICAgICAgICAgICAgMTE3OiAiRjYiLAorICAgICAgICAgICAg
MTE4OiAiRjciLAorICAgICAgICAgICAgMTE5OiAiRjgiLAorICAgICAgICAgICAgMTIwOiAiRjki
LAorICAgICAgICAgICAgMTIxOiAiRjEwIiwKKyAgICAgICAgICAgIDEyMjogIkYxMSIsCisgICAg
ICAgICAgICAxMjM6ICJGMTIiLAorICAgICAgICAgICAgMTQ0OiAiTnVtbG9jayIsCisgICAgICAg
ICAgICAxNDU6ICJTY3JvbGxsb2NrIgorICAgICAgICB9LAorCisgICAgICAgIFBSSU5UQUJMRV9L
RVlTOiB7CisgICAgICAgICAgIDMyOiAnICcsICA0ODogJzAnLCAgNDk6ICcxJywgIDUwOiAnMics
ICA1MTogJzMnLCAgNTI6ICc0JywgNTM6ICAnNScsCisgICAgICAgICAgIDU0OiAnNicsICA1NTog
JzcnLCAgNTY6ICc4JywgIDU3OiAnOScsICA1OTogJzsnLCAgNjE6ICc9JywgNjU6ICAnYScsCisg
ICAgICAgICAgIDY2OiAnYicsICA2NzogJ2MnLCAgNjg6ICdkJywgIDY5OiAnZScsICA3MDogJ2Yn
LCAgNzE6ICdnJywgNzI6ICAnaCcsCisgICAgICAgICAgIDczOiAnaScsICA3NDogJ2onLCAgNzU6
ICdrJywgIDc2OiAnbCcsICA3NzogJ20nLCAgNzg6ICduJywgNzk6ICAnbycsCisgICAgICAgICAg
IDgwOiAncCcsICA4MTogJ3EnLCAgODI6ICdyJywgIDgzOiAncycsICA4NDogJ3QnLCAgODU6ICd1
JywgODY6ICAndicsCisgICAgICAgICAgIDg3OiAndycsICA4ODogJ3gnLCAgODk6ICd5JywgIDkw
OiAneicsIDEwNzogJysnLCAxMDk6ICctJywgMTEwOiAnLicsCisgICAgICAgICAgMTg4OiAnLCcs
IDE5MDogJy4nLCAxOTE6ICcvJywgMTkyOiAnYCcsIDIxOTogJ1snLCAyMjA6ICdcXCcsCisgICAg
ICAgICAgMjIxOiAnXScsIDIyMjogJ1wnJworICAgICAgICB9CisgICAgfTsKKyAgICBmb3IgKHZh
ciBpIGluIHJldC5GVU5DVElPTl9LRVlTKSB7CisgICAgICAgIHZhciBuYW1lID0gcmV0LkZVTkNU
SU9OX0tFWVNbaV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0W25hbWVdID0gcGFyc2VJbnQo
aSwgMTApOworICAgIH0KKyAgICBvb3AubWl4aW4ocmV0LCByZXQuTU9ESUZJRVJfS0VZUyk7Cisg
ICAgb29wLm1peGluKHJldCwgcmV0LlBSSU5UQUJMRV9LRVlTKTsKKyAgICBvb3AubWl4aW4ocmV0
LCByZXQuRlVOQ1RJT05fS0VZUyk7CisgICAgcmV0LmVudGVyID0gcmV0WyJyZXR1cm4iXTsKKyAg
ICByZXQuZXNjYXBlID0gcmV0LmVzYzsKKyAgICByZXQuZGVsID0gcmV0WyJkZWxldGUiXTsKKyAg
ICByZXRbMTczXSA9ICctJzsKKworICAgIHJldHVybiByZXQ7Cit9KSgpOworb29wLm1peGluKGV4
cG9ydHMsIEtleXMpOworCitleHBvcnRzLmtleUNvZGVUb1N0cmluZyA9IGZ1bmN0aW9uKGtleUNv
ZGUpIHsKKyAgICByZXR1cm4gKEtleXNba2V5Q29kZV0gfHwgU3RyaW5nLmZyb21DaGFyQ29kZShr
ZXlDb2RlKSkudG9Mb3dlckNhc2UoKTsKK30KKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIv
b29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitleHBvcnRzLmluaGVyaXRzID0gKGZ1bmN0aW9uKCkg
eworICAgIHZhciB0ZW1wQ3RvciA9IGZ1bmN0aW9uKCkge307CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGN0b3IsIHN1cGVyQ3RvcikgeworICAgICAgICB0ZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0
b3IucHJvdG90eXBlOworICAgICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7
CisgICAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IHRlbXBDdG9yKCk7CisgICAgICAgIGN0b3Iu
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjsKKyAgICB9OworfSgpKTsKKworZXhwb3J0cy5t
aXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKKyAgICBmb3IgKHZhciBrZXkgaW4gbWl4aW4p
IHsKKyAgICAgICAgb2JqW2tleV0gPSBtaXhpbltrZXldOworICAgIH0KK307CisKK2V4cG9ydHMu
aW1wbGVtZW50ID0gZnVuY3Rpb24ocHJvdG8sIG1peGluKSB7CisgICAgZXhwb3J0cy5taXhpbihw
cm90bywgbWl4aW4pOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvdXNlcmFnZW50
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKK2V4cG9ydHMuT1MgPSB7CisgICAgTElOVVg6ICJMSU5VWCIsCisg
ICAgTUFDOiAiTUFDIiwKKyAgICBXSU5ET1dTOiAiV0lORE9XUyIKK307CitleHBvcnRzLmdldE9T
ID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKGV4cG9ydHMuaXNNYWMpIHsKKyAgICAgICAgcmV0dXJu
IGV4cG9ydHMuT1MuTUFDOworICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5pc0xpbnV4KSB7CisgICAg
ICAgIHJldHVybiBleHBvcnRzLk9TLkxJTlVYOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBleHBvcnRzLk9TLldJTkRPV1M7CisgICAgfQorfTsKK2lmICh0eXBlb2YgbmF2aWdhdG9yICE9
ICJvYmplY3QiKQorICAgIHJldHVybjsKKwordmFyIG9zID0gKG5hdmlnYXRvci5wbGF0Zm9ybS5t
YXRjaCgvbWFjfHdpbnxsaW51eC9pKSB8fCBbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNlKCk7Cit2
YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworZXhwb3J0cy5pc1dpbiA9IChvcyA9PSAid2lu
Iik7CitleHBvcnRzLmlzTWFjID0gKG9zID09ICJtYWMiKTsKK2V4cG9ydHMuaXNMaW51eCA9IChv
cyA9PSAibGludXgiKTsKK2V4cG9ydHMuaXNJRSA9IAorICAgIChuYXZpZ2F0b3IuYXBwTmFtZSA9
PSAiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIiB8fCBuYXZpZ2F0b3IuYXBwTmFtZS5pbmRl
eE9mKCJNU0FwcEhvc3QiKSA+PSAwKQorICAgICYmIHBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJB
Z2VudC5tYXRjaCgvTVNJRSAoWzAtOV0rW1wuMC05XSspLylbMV0pOworICAgIAorZXhwb3J0cy5p
c09sZElFID0gZXhwb3J0cy5pc0lFICYmIGV4cG9ydHMuaXNJRSA8IDk7CitleHBvcnRzLmlzR2Vj
a28gPSBleHBvcnRzLmlzTW96aWxsYSA9IHdpbmRvdy5jb250cm9sbGVycyAmJiB3aW5kb3cubmF2
aWdhdG9yLnByb2R1Y3QgPT09ICJHZWNrbyI7CitleHBvcnRzLmlzT2xkR2Vja28gPSBleHBvcnRz
LmlzR2Vja28gJiYgcGFyc2VJbnQoKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL3J2XDooXGQr
KS8pfHxbXSlbMV0sIDEwKSA8IDQ7CitleHBvcnRzLmlzT3BlcmEgPSB3aW5kb3cub3BlcmEgJiYg
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSkgPT0gIltvYmplY3Qg
T3BlcmFdIjsKK2V4cG9ydHMuaXNXZWJLaXQgPSBwYXJzZUZsb2F0KHVhLnNwbGl0KCJXZWJLaXQv
IilbMV0pIHx8IHVuZGVmaW5lZDsKKworZXhwb3J0cy5pc0Nocm9tZSA9IHBhcnNlRmxvYXQodWEu
c3BsaXQoIiBDaHJvbWUvIilbMV0pIHx8IHVuZGVmaW5lZDsKKworZXhwb3J0cy5pc0FJUiA9IHVh
LmluZGV4T2YoIkFkb2JlQUlSIikgPj0gMDsKKworZXhwb3J0cy5pc0lQYWQgPSB1YS5pbmRleE9m
KCJpUGFkIikgPj0gMDsKKworZXhwb3J0cy5pc1RvdWNoUGFkID0gdWEuaW5kZXhPZigiVG91Y2hQ
YWQiKSA+PSAwOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRvcicsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9maXhvbGRicm93c2VycycsICdhY2UvbGli
L29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2tleWJvYXJk
L3RleHRpbnB1dCcsICdhY2UvbW91c2UvbW91c2VfaGFuZGxlcicsICdhY2UvbW91c2UvZm9sZF9o
YW5kbGVyJywgJ2FjZS9rZXlib2FyZC9rZXliaW5kaW5nJywgJ2FjZS9lZGl0X3Nlc3Npb24nLCAn
YWNlL3NlYXJjaCcsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9j
b21tYW5kcy9jb21tYW5kX21hbmFnZXInLCAnYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMn
LCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
CityZXF1aXJlKCIuL2xpYi9maXhvbGRicm93c2VycyIpOworCit2YXIgb29wID0gcmVxdWlyZSgi
Li9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciB1c2Vy
YWdlbnQgPSByZXF1aXJlKCIuL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBUZXh0SW5wdXQgPSByZXF1
aXJlKCIuL2tleWJvYXJkL3RleHRpbnB1dCIpLlRleHRJbnB1dDsKK3ZhciBNb3VzZUhhbmRsZXIg
PSByZXF1aXJlKCIuL21vdXNlL21vdXNlX2hhbmRsZXIiKS5Nb3VzZUhhbmRsZXI7Cit2YXIgRm9s
ZEhhbmRsZXIgPSByZXF1aXJlKCIuL21vdXNlL2ZvbGRfaGFuZGxlciIpLkZvbGRIYW5kbGVyOwor
dmFyIEtleUJpbmRpbmcgPSByZXF1aXJlKCIuL2tleWJvYXJkL2tleWJpbmRpbmciKS5LZXlCaW5k
aW5nOwordmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vz
c2lvbjsKK3ZhciBTZWFyY2ggPSByZXF1aXJlKCIuL3NlYXJjaCIpLlNlYXJjaDsKK3ZhciBSYW5n
ZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJl
KCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIENvbW1hbmRNYW5hZ2Vy
ID0gcmVxdWlyZSgiLi9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiKS5Db21tYW5kTWFuYWdlcjsK
K3ZhciBkZWZhdWx0Q29tbWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFu
ZHMiKS5jb21tYW5kczsKK3ZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwordmFyIEVk
aXRvciA9IGZ1bmN0aW9uKHJlbmRlcmVyLCBzZXNzaW9uKSB7CisgICAgdmFyIGNvbnRhaW5lciA9
IHJlbmRlcmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTsKKyAgICB0aGlzLmNvbnRhaW5lciA9IGNv
bnRhaW5lcjsKKyAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7CisKKyAgICB0aGlzLmNvbW1h
bmRzID0gbmV3IENvbW1hbmRNYW5hZ2VyKHVzZXJhZ2VudC5pc01hYyA/ICJtYWMiIDogIndpbiIs
IGRlZmF1bHRDb21tYW5kcyk7CisgICAgdGhpcy50ZXh0SW5wdXQgID0gbmV3IFRleHRJbnB1dChy
ZW5kZXJlci5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLCB0aGlzKTsKKyAgICB0aGlzLnJlbmRlcmVy
LnRleHRhcmVhID0gdGhpcy50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOworICAgIHRoaXMua2V5Qmlu
ZGluZyA9IG5ldyBLZXlCaW5kaW5nKHRoaXMpOworICAgIHRoaXMuJG1vdXNlSGFuZGxlciA9IG5l
dyBNb3VzZUhhbmRsZXIodGhpcyk7CisgICAgbmV3IEZvbGRIYW5kbGVyKHRoaXMpOworCisgICAg
dGhpcy4kYmxvY2tTY3JvbGxpbmcgPSAwOworICAgIHRoaXMuJHNlYXJjaCA9IG5ldyBTZWFyY2go
KS5zZXQoeworICAgICAgICB3cmFwOiB0cnVlCisgICAgfSk7CisKKyAgICB0aGlzLnNldFNlc3Np
b24oc2Vzc2lvbiB8fCBuZXcgRWRpdFNlc3Npb24oIiIpKTsKK307CisKKyhmdW5jdGlvbigpewor
CisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0S2V5
Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2V5Ym9hcmRIYW5kbGVyKSB7CisgICAgICAgIGlmICh0
eXBlb2Yga2V5Ym9hcmRIYW5kbGVyID09ICJzdHJpbmciICYmIGtleWJvYXJkSGFuZGxlcikgewor
ICAgICAgICAgICAgdGhpcy4ka2V5YmluZGluZ0lkID0ga2V5Ym9hcmRIYW5kbGVyOworICAgICAg
ICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsi
a2V5YmluZGluZyIsIGtleWJvYXJkSGFuZGxlcl0sIGZ1bmN0aW9uKG1vZHVsZSkgeworICAgICAg
ICAgICAgICAgIGlmIChfc2VsZi4ka2V5YmluZGluZ0lkID09IGtleWJvYXJkSGFuZGxlcikKKyAg
ICAgICAgICAgICAgICAgICAgX3NlbGYua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIobW9k
dWxlICYmIG1vZHVsZS5oYW5kbGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGtleWJpbmRpbmdJZDsKKyAgICAgICAgICAgIHRo
aXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVyKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMua2V5QmluZGluZy5nZXRLZXlib2FyZEhhbmRsZXIoKTsKKyAg
ICB9OworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAg
aWYgKHRoaXMuc2Vzc2lvbiA9PSBzZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICh0aGlzLnNlc3Npb24pIHsKKyAgICAgICAgICAgIHZhciBvbGRTZXNzaW9uID0gdGhp
cy5zZXNzaW9uOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ImNoYW5nZSIsIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UpOworICAgICAgICAgICAgdGhpcy5zZXNz
aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZU1vZGUiLCB0aGlzLiRvbkNoYW5nZU1vZGUp
OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRva2VuaXpl
clVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIiwgdGhpcy4kb25DaGFuZ2VU
YWJTaXplKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2VXcmFwTGltaXQiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7CisgICAgICAgICAgICB0
aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLCB0aGlzLiRv
bkNoYW5nZVdyYXBNb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExp
c3RlbmVyKCJvbkNoYW5nZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOworICAgICAgICAgICAg
dGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIiwgdGhp
cy4kb25DaGFuZ2VGcm9udE1hcmtlcik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsIHRoaXMuJG9uQ2hhbmdlQmFja01hcmtl
cik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdl
QnJlYWtwb2ludCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7CisgICAgICAgICAgICB0aGlz
LnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQW5ub3RhdGlvbiIsIHRoaXMuJG9u
Q2hhbmdlQW5ub3RhdGlvbik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiY2hhbmdlT3ZlcndyaXRlIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOworICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9sbFRvcCIs
IHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1v
dmVFdmVudExpc3RlbmVyKCJjaGFuZ2VMZWZ0VG9wIiwgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdl
KTsKKworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rp
b24oKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VD
dXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisgICAgICAgICAgICBzZWxlY3Rpb24ucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25TZWxlY3Rpb25DaGFu
Z2UpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKworICAg
ICAgICB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlID0gdGhpcy5vbkRvY3VtZW50Q2hhbmdlLmJpbmQo
dGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4k
b25Eb2N1bWVudENoYW5nZSk7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2Vzc2lvbihzZXNz
aW9uKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hhbmdlTW9kZS5i
aW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZU1vZGUi
LCB0aGlzLiRvbkNoYW5nZU1vZGUpOworCisgICAgICAgIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRl
ID0gdGhpcy5vblRva2VuaXplclVwZGF0ZS5iaW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFk
ZEV2ZW50TGlzdGVuZXIoInRva2VuaXplclVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRl
KTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZVRhYlNpemUgPSB0aGlzLnJlbmRlcmVyLm9uQ2hh
bmdlVGFiU2l6ZS5iaW5kKHRoaXMucmVuZGVyZXIpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50
TGlzdGVuZXIoImNoYW5nZVRhYlNpemUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpOworCisgICAg
ICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBMaW1pdC5iaW5k
KHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBMaW1p
dCIsIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0KTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZVdy
YXBNb2RlID0gdGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Np
b24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLCB0aGlzLiRvbkNoYW5nZVdyYXBN
b2RlKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZUZvbGQgPSB0aGlzLm9uQ2hhbmdlRm9sZC5i
aW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZvbGQi
LCB0aGlzLiRvbkNoYW5nZUZvbGQpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJr
ZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5z
ZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIiwgdGhpcy4kb25DaGFu
Z2VGcm9udE1hcmtlcik7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyID0gdGhp
cy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNoYW5nZUJhY2tNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUJhY2tNYXJr
ZXIpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCA9IHRoaXMub25DaGFuZ2VC
cmVha3BvaW50LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3Rl
bmVyKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50KTsKKworICAg
ICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbi5i
aW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdl
QW5ub3RhdGlvbiIsIHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbik7CisKKyAgICAgICAgdGhpcy4k
b25DdXJzb3JDaGFuZ2UgPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAg
IHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUiLCB0aGlzLiRv
bkN1cnNvckNoYW5nZSk7CisKKyAgICAgICAgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UgPSB0aGlz
Lm9uU2Nyb2xsVG9wQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRF
dmVudExpc3RlbmVyKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRvcENoYW5nZSk7
CisKKyAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNjcm9sbExlZnRD
aGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNoYW5nZVNjcm9sbExlZnQiLCB0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpOworCisgICAgICAg
IHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5z
ZWxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JD
aGFuZ2UpOworCisgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5vblNlbGVj
dGlvbkNoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRFdmVudExp
c3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7CisKKyAg
ICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGlu
ZyArPSAxOworICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7CisgICAgICAgIHRoaXMuJGJs
b2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgdGhpcy5vblNjcm9sbFRvcENoYW5nZSgpOwor
ICAgICAgICB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpOworICAgICAgICB0aGlzLm9uU2VsZWN0
aW9uQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpOworICAgICAg
ICB0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpOworICAgICAgICB0aGlzLm9uQ2hhbmdlQnJlYWtw
b2ludCgpOworICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpOworICAgICAgICB0aGlz
LnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLnJlbmRlcmVyLmFkanVzdFdyYXBMaW1p
dCgpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKKworICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VTZXNzaW9uIiwgeworICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbiwK
KyAgICAgICAgICAgIG9sZFNlc3Npb246IG9sZFNlc3Npb24KKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICB0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
c2Vzc2lvbjsKKyAgICB9OworICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWwsIGN1cnNv
clBvcykgeworICAgICAgICB0aGlzLnNlc3Npb24uZG9jLnNldFZhbHVlKHZhbCk7CisKKyAgICAg
ICAgaWYgKCFjdXJzb3JQb3MpCisgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpOworICAgICAg
ICBlbHNlIGlmIChjdXJzb3JQb3MgPT0gMSkKKyAgICAgICAgICAgIHRoaXMubmF2aWdhdGVGaWxl
RW5kKCk7CisgICAgICAgIGVsc2UgaWYgKGN1cnNvclBvcyA9PSAtMSkKKyAgICAgICAgICAgIHRo
aXMubmF2aWdhdGVGaWxlU3RhcnQoKTsKKworICAgICAgICByZXR1cm4gdmFsOworICAgIH07Cisg
ICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNz
aW9uLmdldFZhbHVlKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb247CisgICAgfTsKKyAgICB0aGlzLnJl
c2l6ZSA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIub25SZXNpemUo
Zm9yY2UpOworICAgIH07CisgICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIuc2V0VGhlbWUodGhlbWUpOworICAgIH07CisgICAgdGhpcy5n
ZXRUaGVtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRU
aGVtZSgpOworICAgIH07CisgICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3R5bGUpOworICAgIH07CisgICAgdGhpcy51
bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51bnNl
dFN0eWxlKHN0eWxlKTsKKyAgICB9OworICAgIHRoaXMuc2V0Rm9udFNpemUgPSBmdW5jdGlvbihz
aXplKSB7CisgICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PSAibnVtYmVyIikKKyAgICAgICAgICAg
IHNpemUgPSBzaXplICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZm9udFNp
emUgPSBzaXplOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZvbnRTaXplKCk7CisgICAg
fTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMu
c2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0KTsKKyAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCA9IG51bGw7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0UGVuZGluZykgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdGhp
cy4kaGlnaGxpZ2h0UGVuZGluZyA9IHRydWU7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBzZWxmLiRoaWdobGlnaHRQZW5kaW5nID0gZmFsc2U7CisKKyAgICAg
ICAgICAgIHZhciBwb3MgPSBzZWxmLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldChzZWxmLmdl
dEN1cnNvclBvc2l0aW9uKCkpOworICAgICAgICAgICAgaWYgKHBvcykgeworICAgICAgICAgICAg
ICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBw
b3MuY29sdW1uKzEpOworICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi4kYnJhY2tldEhpZ2hs
aWdodCA9IHNlbGYuc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2VfYnJhY2tldCIsICJ0ZXh0
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDUwKTsKKyAgICB9OworICAgIHRoaXMuZm9j
dXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIF9zZWxmLnRleHRJbnB1dC5mb2N1cygp
OworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICB9Owor
ICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRl
eHRJbnB1dC5pc0ZvY3VzZWQoKTsKKyAgICB9OworICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7CisgICAgfTsKKyAgICB0aGlzLm9uRm9j
dXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuJGlzRm9jdXNlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudmlzdWFsaXpl
Rm9jdXMoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiZm9jdXMiKTsKKyAgICB9OworICAgIHRoaXMu
b25CbHVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy4kaXNGb2N1c2VkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRpc0ZvY3VzZWQgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudmlz
dWFsaXplQmx1cigpOworICAgICAgICB0aGlzLl9lbWl0KCJibHVyIik7CisgICAgfTsKKworICAg
IHRoaXMuJGN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVy
LnVwZGF0ZUN1cnNvcigpOworICAgIH07CisgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZhciByYW5n
ZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgbGFzdFJvdzsKKworICAgICAgICBpZiAocmFu
Z2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgZGVsdGEuYWN0aW9uICE9ICJpbnNlcnRM
aW5lcyIgJiYgZGVsdGEuYWN0aW9uICE9ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAgICBsYXN0
Um93ID0gcmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGFzdFJvdyA9
IEluZmluaXR5OworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJhbmdlLnN0YXJ0
LnJvdywgbGFzdFJvdyk7CisKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgZSk7CisgICAg
ICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOworICAgIH07CisKKyAgICB0aGlzLm9uVG9rZW5pemVy
VXBkYXRlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3QpOworICAg
IH07CisKKworICAgIHRoaXMub25TY3JvbGxUb3BDaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKTsK
KyAgICB9OworICAgIAorICAgIHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9YKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxM
ZWZ0KCkpOworICAgIH07CisgICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTsKKworICAgICAgICBpZiAoIXRoaXMuJGJsb2Nr
U2Nyb2xsaW5nKSB7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9W
aWV3KCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRoaWdobGlnaHRCcmFja2V0cygpOwor
ICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVIaWdo
bGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhp
cy5nZXRTZXNzaW9uKCk7CisKKyAgICAgICAgdmFyIGhpZ2hsaWdodDsKKyAgICAgICAgaWYgKHRo
aXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUpIHsKKyAgICAgICAgICAgIGlmICgodGhpcy4kc2VsZWN0
aW9uU3R5bGUgIT0gImxpbmUiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpKSkKKyAg
ICAgICAgICAgICAgICBoaWdobGlnaHQgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciAmJiAhaGln
aGxpZ2h0KSB7CisgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9uLiRoaWdo
bGlnaHRMaW5lTWFya2VyLmlkKTsKKyAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdodExpbmVN
YXJrZXIgPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKCFzZXNzaW9uLiRoaWdobGlnaHRMaW5l
TWFya2VyICYmIGhpZ2hsaWdodCkgeworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGlu
ZU1hcmtlciA9IHNlc3Npb24uaGlnaGxpZ2h0TGluZXMoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0
LnJvdywgImFjZV9hY3RpdmUtbGluZSIpOworICAgICAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodCkg
eworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5yb3cgPSBo
aWdobGlnaHQucm93OworICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5l
bmQucm93ID0gaGlnaGxpZ2h0LnJvdzsKKyAgICAgICAgICAgIHNlc3Npb24uX2VtaXQoImNoYW5n
ZUJhY2tNYXJrZXIiKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLm9uU2VsZWN0aW9u
Q2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lv
bjsKKworICAgICAgICBpZiAoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKSB7CisgICAgICAgICAg
ICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIpOworICAgICAg
ICB9CisgICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlciA9IG51bGw7CisKKyAgICAgICAg
aWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9
IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc3R5bGUgPSB0aGlz
LmdldFNlbGVjdGlvblN0eWxlKCk7CisgICAgICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJr
ZXIgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVM
aW5lKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxl
Y3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCkKKyAgICAgICAg
dGhpcy5zZXNzaW9uLmhpZ2hsaWdodChyZSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9lbWl0
KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0U2VsZWN0aW9uSGln
aExpZ2h0UmVnZXhwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5z
ZXNzaW9uOworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdl
KCk7CisgICAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5pc011bHRp
TGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydE91dGVyID0g
c2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiAtIDE7CisgICAgICAgIHZhciBlbmRPdXRlciA9IHNlbGVj
dGlvbi5lbmQuY29sdW1uICsgMTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUo
c2VsZWN0aW9uLnN0YXJ0LnJvdyk7CisgICAgICAgIHZhciBsaW5lQ29scyA9IGxpbmUubGVuZ3Ro
OworICAgICAgICB2YXIgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoTWF0aC5tYXgoc3RhcnRPdXRl
ciwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihlbmRP
dXRlciwgbGluZUNvbHMpKTsKKyAgICAgICAgaWYgKChzdGFydE91dGVyID49IDAgJiYgL15bXHdc
ZF0vLnRlc3QobmVlZGxlKSkgfHwKKyAgICAgICAgICAgIChlbmRPdXRlciA8PSBsaW5lQ29scyAm
JiAvW1x3XGRdJC8udGVzdChuZWVkbGUpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBuZWVkbGUgPSBsaW5lLnN1YnN0cmluZyhzZWxlY3Rpb24uc3RhcnQuY29sdW1uLCBzZWxlY3Rp
b24uZW5kLmNvbHVtbik7CisgICAgICAgIGlmICghL15bXHdcZF0rJC8udGVzdChuZWVkbGUpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByZSA9IHRoaXMuJHNlYXJjaC4kYXNz
ZW1ibGVSZWdFeHAoeworICAgICAgICAgICAgd2hvbGVXb3JkOiB0cnVlLAorICAgICAgICAgICAg
Y2FzZVNlbnNpdGl2ZTogdHJ1ZSwKKyAgICAgICAgICAgIG5lZWRsZTogbmVlZGxlCisgICAgICAg
IH0pOworCisgICAgICAgIHJldHVybiByZTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdl
RnJvbnRNYXJrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVG
cm9udE1hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwor
ICAgIH07CisKKworICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQnJlYWtwb2ludHMoKTsKKyAgICB9OworCisgICAg
dGhpcy5vbkNoYW5nZUFubm90YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci5zZXRBbm5vdGF0aW9ucyh0aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSk7CisgICAg
fTsKKworCisgICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci51cGRhdGVUZXh0KCk7CisgICAgfTsKKworCisgICAgdGhpcy5vbkNoYW5nZVdy
YXBMaW1pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwo
KTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZVdyYXBNb2RlID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIub25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworCisgICAgdGhp
cy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxp
Z2h0QWN0aXZlTGluZSgpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKKyAg
ICB9OworCisgICAgdGhpcy5nZXRDb3B5VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
dGV4dCA9ICIiOworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9u
UmFuZ2UoKSk7CisKKyAgICAgICAgdGhpcy5fZW1pdCgiY29weSIsIHRleHQpOworICAgICAgICBy
ZXR1cm4gdGV4dDsKKyAgICB9OworICAgIHRoaXMub25Db3B5ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuY29tbWFuZHMuZXhlYygiY29weSIsIHRoaXMpOworICAgIH07CisgICAgdGhpcy5v
bkN1dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoImN1dCIsIHRo
aXMpOworICAgIH07CisgICAgdGhpcy5vblBhc3RlID0gZnVuY3Rpb24odGV4dCkgeworICAgICAg
ICBpZiAodGhpcy4kcmVhZE9ubHkpIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlz
Ll9lbWl0KCJwYXN0ZSIsIHRleHQpOworICAgICAgICB0aGlzLmluc2VydCh0ZXh0KTsKKyAgICB9
OworCisKKyAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgYXJncykgewor
ICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoY29tbWFuZCwgdGhpcywgYXJncyk7CisgICAgfTsK
KyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIHNlc3Npb24g
PSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBtb2RlID0gc2Vzc2lvbi5nZXRNb2RlKCk7Cisg
ICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7CisKKyAgICAgICAg
aWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgdmFyIHRyYW5z
Zm9ybSA9IG1vZGUudHJhbnNmb3JtQWN0aW9uKHNlc3Npb24uZ2V0U3RhdGUoY3Vyc29yLnJvdyks
ICdpbnNlcnRpb24nLCB0aGlzLCBzZXNzaW9uLCB0ZXh0KTsKKyAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm0pCisgICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybS50ZXh0OworICAgICAgICB9
CisKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHQiLCB0aGlzLnNlc3Npb24uZ2V0VGFi
U3RyaW5nKCkpOworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgY3Vyc29yID0gdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJh
bmdlKCkpOworICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSkgeworICAgICAgICAg
ICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vyc29yLCBjdXJzb3IpOworICAg
ICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArPSB0ZXh0Lmxlbmd0aDsKKyAgICAgICAgICAgIHRo
aXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jbGVh
clNlbGVjdGlvbigpOworCisgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47CisgICAg
ICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1cnNvci5yb3cpOworICAgICAg
ICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgdmFyIHNo
b3VsZE91dGRlbnQgPSBtb2RlLmNoZWNrT3V0ZGVudChsaW5lU3RhdGUsIGxpbmUsIHRleHQpOwor
ICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi5pbnNlcnQoY3Vyc29yLCB0ZXh0KTsKKworICAgICAg
ICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm0uc2VsZWN0aW9uLmxlbmd0aCA9PSAyKSB7IC8vIFRyYW5zZm9ybSByZWxhdGl2
ZSB0byB0aGUgY3VycmVudCBjb2x1bW4KKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5y
b3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50
IHJvdy4KKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZSgK
KyAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2Vs
ZWN0aW9uWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVj
dGlvblsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3cgKyB0cmFu
c2Zvcm0uc2VsZWN0aW9uWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLnNlbGVjdGlvblszXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChzZXNzaW9uLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKHRleHQpKSB7CisgICAgICAgICAgICB2
YXIgbGluZUluZGVudCA9IG1vZGUuZ2V0TmV4dExpbmVJbmRlbnQobGluZVN0YXRlLCBsaW5lLnNs
aWNlKDAsIGN1cnNvci5jb2x1bW4pLCBzZXNzaW9uLmdldFRhYlN0cmluZygpKTsKKworICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oY3Vyc29yLnJvdysxLCAwKTsKKworICAgICAgICAgICAg
dmFyIHNpemUgPSBzZXNzaW9uLmdldFRhYlNpemUoKTsKKyAgICAgICAgICAgIHZhciBtaW5JbmRl
bnQgPSBOdW1iZXIuTUFYX1ZBTFVFOworCisgICAgICAgICAgICBmb3IgKHZhciByb3cgPSBjdXJz
b3Iucm93ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7CisgICAgICAgICAgICAgICAgdmFy
IGluZGVudCA9IDA7CisKKyAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJv
dyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgKytp
KQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoaSkgPT0gJ1x0JykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGVudCArPSBzaXplOworICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChsaW5lLmNoYXJBdChpKSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRlbnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKC9bXlxzXS8udGVzdChsaW5lKSkKKyAg
ICAgICAgICAgICAgICAgICAgbWluSW5kZW50ID0gTWF0aC5taW4oaW5kZW50LCBtaW5JbmRlbnQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHZhciByb3cgPSBjdXJzb3Iucm93
ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7CisgICAgICAgICAgICAgICAgdmFyIG91dGRl
bnQgPSBtaW5JbmRlbnQ7CisKKyAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5l
KHJvdyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAm
JiBvdXRkZW50ID4gMDsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5jaGFyQXQo
aSkgPT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRlbnQgLT0gc2l6ZTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZS5jaGFyQXQoaSkgPT0gJyAnKQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0ZGVudCAtPSAxOworICAgICAgICAgICAgICAgIHNlc3Npb24u
cmVtb3ZlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2Vzc2lvbi5pbmRlbnRSb3dzKGN1cnNvci5yb3cgKyAxLCBlbmQucm93LCBsaW5lSW5k
ZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxkT3V0ZGVudCkKKyAgICAgICAgICAg
IG1vZGUuYXV0b091dGRlbnQobGluZVN0YXRlLCBzZXNzaW9uLCBjdXJzb3Iucm93KTsKKyAgICB9
OworCisgICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdGhp
cy5rZXlCaW5kaW5nLm9uVGV4dElucHV0KHRleHQpOworICAgIH07CisKKyAgICB0aGlzLm9uQ29t
bWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkgeworICAgICAgICB0aGlzLmtl
eUJpbmRpbmcub25Db21tYW5kS2V5KGUsIGhhc2hJZCwga2V5Q29kZSk7CisgICAgfTsKKyAgICB0
aGlzLnNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICB0aGlzLnNl
c3Npb24uc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7CisgICAgfTsKKyAgICB0aGlzLmdldE92ZXJ3
cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldE92ZXJ3
cml0ZSgpOworICAgIH07CisgICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy5zZXNzaW9uLnRvZ2dsZU92ZXJ3cml0ZSgpOworICAgIH07CisgICAgdGhp
cy5zZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKHNwZWVkKSB7CisgICAgICAgIHRoaXMuJG1vdXNl
SGFuZGxlci5zZXRTY3JvbGxTcGVlZChzcGVlZCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9s
bFNwZWVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRtb3VzZUhhbmRsZXIu
Z2V0U2Nyb2xsU3BlZWQoKTsKKyAgICB9OworICAgIHRoaXMuc2V0RHJhZ0RlbGF5ID0gZnVuY3Rp
b24oZHJhZ0RlbGF5KSB7CisgICAgICAgIHRoaXMuJG1vdXNlSGFuZGxlci5zZXREcmFnRGVsYXko
ZHJhZ0RlbGF5KTsKKyAgICB9OworICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLiRtb3VzZUhhbmRsZXIuZ2V0RHJhZ0RlbGF5KCk7CisgICAg
fTsKKworICAgIHRoaXMuJHNlbGVjdGlvblN0eWxlID0gImxpbmUiOworICAgIHRoaXMuc2V0U2Vs
ZWN0aW9uU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgeworICAgICAgICBpZiAodGhpcy4kc2VsZWN0
aW9uU3R5bGUgPT0gc3R5bGUpIHJldHVybjsKKworICAgICAgICB0aGlzLiRzZWxlY3Rpb25TdHls
ZSA9IHN0eWxlOworICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvblN0eWxlIiwge2RhdGE6IHN0eWxlfSk7CisgICAgfTsK
KyAgICB0aGlzLmdldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLiRzZWxlY3Rpb25TdHlsZTsKKyAgICB9OworCisgICAgdGhpcy4kaGlnaGxpZ2h0QWN0
aXZlTGluZSA9IHRydWU7CisgICAgdGhpcy5zZXRIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rp
b24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRBY3RpdmVM
aW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lID0gc2hvdWxkSGlnaGxpZ2h0OworICAgICAgICB0aGlz
LiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgfTsKKyAgICB0aGlzLmdldEhpZ2hs
aWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hs
aWdodEFjdGl2ZUxpbmU7CisgICAgfTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUg
PSB0cnVlOworICAgIHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKHNob3Vs
ZEhpZ2hsaWdodCkgeworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9PSBz
aG91bGRIaWdobGlnaHQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKHNob3VsZEhpZ2hsaWdodCk7CisgICAgICAgIHRo
aXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBzaG91bGRIaWdobGlnaHQ7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZTsKKyAgICB9OworCisgICAgdGhpcy4kaGlnaGxp
Z2h0U2VsZWN0ZWRXb3JkID0gdHJ1ZTsKKyAgICB0aGlzLnNldEhpZ2hsaWdodFNlbGVjdGVkV29y
ZCA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgeworICAgICAgICBpZiAodGhpcy4kaGlnaGxp
Z2h0U2VsZWN0ZWRXb3JkID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBzaG91bGRIaWdobGlnaHQ7
CisgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgfTsKKyAgICB0aGlzLmdl
dEhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOworICAgIH07CisKKyAgICB0aGlzLnNldEFuaW1hdGVk
U2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
c2V0QW5pbWF0ZWRTY3JvbGwoc2hvdWxkQW5pbWF0ZSk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0
QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJl
ci5nZXRBbmltYXRlZFNjcm9sbCgpOworICAgIH07CisgICAgdGhpcy5zZXRTaG93SW52aXNpYmxl
cyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0
U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpOworICAgIH07CisgICAgdGhpcy5nZXRTaG93
SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5n
ZXRTaG93SW52aXNpYmxlcygpOworICAgIH07CisKKyAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRH
dWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RGlz
cGxheUluZGVudEd1aWRlcyhkaXNwbGF5KTsKKyAgICB9OworCisgICAgdGhpcy5nZXREaXNwbGF5
SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVy
LmdldERpc3BsYXlJbmRlbnRHdWlkZXMoKTsKKyAgICB9OworICAgIHRoaXMuc2V0U2hvd1ByaW50
TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIuc2V0U2hvd1ByaW50TWFyZ2luKHNob3dQcmludE1hcmdpbik7CisgICAgfTsKKyAgICB0aGlz
LmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5y
ZW5kZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuc2V0UHJpbnRN
YXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKKyAgICAgICAgdGhpcy5y
ZW5kZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihzaG93UHJpbnRNYXJnaW4pOworICAgIH07Cisg
ICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpOworICAgIH07CisKKyAgICB0
aGlzLiRyZWFkT25seSA9IGZhbHNlOworICAgIHRoaXMuc2V0UmVhZE9ubHkgPSBmdW5jdGlvbihy
ZWFkT25seSkgeworICAgICAgICB0aGlzLiRyZWFkT25seSA9IHJlYWRPbmx5OworICAgICAgICB0
aGlzLnRleHRJbnB1dC5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCFyZWFkT25seSk7CisgICAgfTsKKyAgICB0aGlz
LmdldFJlYWRPbmx5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyZWFkT25s
eTsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZUJlaGF2aW91cnMgPSB0cnVlOworICAgIHRoaXMu
c2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICB0aGlz
LiRtb2RlQmVoYXZpb3VycyA9IGVuYWJsZWQ7CisgICAgfTsKKyAgICB0aGlzLmdldEJlaGF2aW91
cnNFbmFibGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9kZUJlaGF2
aW91cnM7CisgICAgfTsKKworICAgIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9IHRydWU7Cisg
ICAgdGhpcy5zZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkgewor
ICAgICAgICB0aGlzLiRtb2RlV3JhcEJlaGF2aW91cnMgPSBlbmFibGVkOworICAgIH07CisgICAg
dGhpcy5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLiRtb2RlV3JhcEJlaGF2aW91cnM7CisgICAgfTsKKyAgICB0aGlzLnNldFNob3dG
b2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgdmFyIGd1dHRlciA9IHRoaXMu
cmVuZGVyZXIuJGd1dHRlckxheWVyOworICAgICAgICBpZiAoZ3V0dGVyLmdldFNob3dGb2xkV2lk
Z2V0cygpID09IHNob3cpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpOworICAgICAgICB0aGlz
LiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1
bGwoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRTaG93Rm9sZFdp
ZGdldHMoKTsKKyAgICB9OworCisgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlv
bihzaG93KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RmFkZUZvbGRXaWRnZXRzKHNob3cp
OworICAgIH07CisKKyAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRGYWRlRm9sZFdpZGdldHMoKTsKKyAgICB9
OworICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24oZGlyKSB7CisgICAgICAgIGlmICh0aGlzLnNl
bGVjdGlvbi5pc0VtcHR5KCkpeworICAgICAgICAgICAgaWYgKGRpciA9PSAibGVmdCIpCisgICAg
ICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCgpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFJpZ2h0KCk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAg
ICAgIGlmICh0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIHZhciBz
ZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICAgICAgdmFyIHN0YXRlID0gc2Vzc2lvbi5n
ZXRTdGF0ZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIG5ld19yYW5nZSA9IHNl
c3Npb24uZ2V0TW9kZSgpLnRyYW5zZm9ybUFjdGlvbihzdGF0ZSwgJ2RlbGV0aW9uJywgdGhpcywg
c2Vzc2lvbiwgcmFuZ2UpOworICAgICAgICAgICAgaWYgKG5ld19yYW5nZSkKKyAgICAgICAgICAg
ICAgICByYW5nZSA9IG5ld19yYW5nZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc2Vzc2lv
bi5yZW1vdmUocmFuZ2UpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsK
KyAgICB0aGlzLnJlbW92ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhp
cy5zZWxlY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0
V29yZFJpZ2h0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVj
dGlvblJhbmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAg
ICB0aGlzLnJlbW92ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnNl
bGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3Jk
TGVmdCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25S
YW5nZSgpKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhp
cy5yZW1vdmVUb0xpbmVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5zZWxl
Y3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZVN0
YXJ0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJh
bmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlz
LnJlbW92ZVRvTGluZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5zZWxlY3Rp
b24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCgp
OworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAg
ICAgaWYgKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSByYW5nZS5lbmQuY29sdW1uICYmIHJhbmdlLnN0
YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1u
ID0gMDsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3crKzsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9u
KCk7CisgICAgfTsKKyAgICB0aGlzLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9u
LnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICAgICAgdGhpcy5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdGhpcy5pbnNlcnQoIlxuIik7CisgICAgICAgIHRo
aXMubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTsKKyAgICB9OworICAgIHRoaXMudHJhbnNw
b3NlTGV0dGVycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGNvbHVtbiA9
IGN1cnNvci5jb2x1bW47CisgICAgICAgIGlmIChjb2x1bW4gPT09IDApCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iu
cm93KTsKKyAgICAgICAgdmFyIHN3YXAsIHJhbmdlOworICAgICAgICBpZiAoY29sdW1uIDwgbGlu
ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4pICsgbGlu
ZS5jaGFyQXQoY29sdW1uLTEpOworICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoY3Vyc29y
LnJvdywgY29sdW1uLTEsIGN1cnNvci5yb3csIGNvbHVtbisxKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4tMSkgKyBsaW5l
LmNoYXJBdChjb2x1bW4tMik7CisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShjdXJzb3Iu
cm93LCBjb2x1bW4tMiwgY3Vyc29yLnJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgc3dhcCk7CisgICAgfTsKKyAgICB0aGlzLnRvTG93
ZXJDYXNlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBvcmlnaW5hbFJhbmdlID0gdGhpcy5n
ZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAg
IHZhciB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIHRo
aXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0LnRvTG93ZXJDYXNlKCkpOworICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShvcmlnaW5hbFJhbmdlKTsKKyAgICB9Owor
ICAgIHRoaXMudG9VcHBlckNhc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG9yaWdpbmFs
UmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIGlmICh0aGlzLnNlbGVj
dGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFu
Z2UoKTsKKyAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdl
KTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9VcHBlckNhc2Uo
KSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdpbmFsUmFu
Z2UpOworICAgIH07CisgICAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKTsKKworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgcmFuZ2UuZW5k
LnJvdyB8fCByYW5nZS5zdGFydC5jb2x1bW4gPCByYW5nZS5lbmQuY29sdW1uKSB7CisgICAgICAg
ICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICAgICAgc2Vz
c2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgIlx0Iik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5kZW50U3RyaW5nOworCisgICAgICAgICAgICBpZiAo
dGhpcy5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2l6
ZSAgICAgICAgPSBzZXNzaW9uLmdldFRhYlNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgcG9z
aXRpb24gICAgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
IGNvbHVtbiAgICAgID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKHBvc2l0aW9uLnJv
dywgcG9zaXRpb24uY29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICAgY291bnQgICAgICAgPSAo
c2l6ZSAtIGNvbHVtbiAlIHNpemUpOworCisgICAgICAgICAgICAgICAgaW5kZW50U3RyaW5nID0g
bGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBjb3VudCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBpbmRlbnRTdHJpbmcgPSAiXHQiOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
aW5zZXJ0KGluZGVudFN0cmluZyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuYmxvY2tJ
bmRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3Rl
ZFJvd3MoKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJzdCwgcm93
cy5sYXN0LCAiXHQiKTsKKyAgICB9OworICAgIHRoaXMuYmxvY2tPdXRkZW50ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7
CisgICAgICAgIHRoaXMuc2Vzc2lvbi5vdXRkZW50Um93cyhzZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7
CisgICAgfTsKKyAgICB0aGlzLnNvcnRMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
cm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRo
aXMuc2Vzc2lvbjsKKworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgZm9yIChpID0g
cm93cy5maXJzdDsgaSA8PSByb3dzLmxhc3Q7IGkrKykKKyAgICAgICAgICAgIGxpbmVzLnB1c2go
c2Vzc2lvbi5nZXRMaW5lKGkpKTsKKworICAgICAgICBsaW5lcy5zb3J0KGZ1bmN0aW9uKGEsIGIp
IHsKKyAgICAgICAgICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNlKCkpIHJl
dHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPiBiLnRvTG93ZXJDYXNl
KCkpIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworCisgICAg
ICAgIHZhciBkZWxldGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IHJvd3MuZmlyc3Q7IGkgPD0gcm93cy5sYXN0OyBpKyspIHsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGkpOworICAgICAgICAgICAgZGVsZXRlUmFuZ2Uu
c3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOworICAg
ICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoOworICAgICAgICAg
ICAgc2Vzc2lvbi5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBsaW5lc1tpLXJvd3MuZmlyc3RdKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zZXNzaW9uLmdldFN0YXRlKHRoaXMuZ2V0Q3Vy
c29yUG9zaXRpb24oKS5yb3cpOworICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVk
Um93cygpOworICAgICAgICB0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUNvbW1lbnRMaW5l
cyhzdGF0ZSwgdGhpcy5zZXNzaW9uLCByb3dzLmZpcnN0LCByb3dzLmxhc3QpOworICAgIH07Cisg
ICAgdGhpcy5nZXROdW1iZXJBdCA9IGZ1bmN0aW9uKCByb3csIGNvbHVtbiApIHsKKyAgICAgICAg
dmFyIF9udW1iZXJSeCA9IC9bXC1dP1swLTldKyg/OlwuWzAtOV0rKT8vZworICAgICAgICBfbnVt
YmVyUngubGFzdEluZGV4ID0gMAorCisgICAgICAgIHZhciBzID0gdGhpcy5zZXNzaW9uLmdldExp
bmUocm93KQorICAgICAgICB3aGlsZShfbnVtYmVyUngubGFzdEluZGV4IDwgY29sdW1uIC0gMSAp
eworICAgICAgICAgICAgdmFyIG0gPSBfbnVtYmVyUnguZXhlYyhzKQorICAgICAgICAgICAgaWYo
bS5pbmRleCA8PSBjb2x1bW4gJiYgbS5pbmRleCttWzBdLmxlbmd0aCA+PSBjb2x1bW4peworICAg
ICAgICAgICAgICAgIHZhciBudW1iZXIgPSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBt
WzBdLAorICAgICAgICAgICAgICAgICAgICBzdGFydDogbS5pbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgZW5kOiBtLmluZGV4K21bMF0ubGVuZ3RoCisKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgdGhpcy5tb2RpZnlOdW1iZXIgPSBmdW5jdGlv
bihhbW91bnQpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigp
LnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLmNv
bHVtbjsKKyAgICAgICAgdmFyIGNoYXJSYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVtbi0xLCBy
b3csIGNvbHVtbik7CisKKyAgICAgICAgdmFyIGMgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdl
KGNoYXJSYW5nZSk7CisgICAgICAgIGlmICghaXNOYU4ocGFyc2VGbG9hdChjKSkgJiYgaXNGaW5p
dGUoYykpIHsKKyAgICAgICAgICAgIHZhciBuciA9IHRoaXMuZ2V0TnVtYmVyQXQocm93LCBjb2x1
bW4pOworICAgICAgICAgICAgaWYgKG5yKSB7CisgICAgICAgICAgICAgICAgdmFyIGZwID0gbnIu
dmFsdWUuaW5kZXhPZigiLiIpID49IDAgPyBuci5zdGFydCArIG5yLnZhbHVlLmluZGV4T2YoIi4i
KSArIDEgOiBuci5lbmQ7CisgICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxzID0gbnIuc3RhcnQg
KyBuci52YWx1ZS5sZW5ndGggLSBmcDsKKworICAgICAgICAgICAgICAgIHZhciB0ID0gcGFyc2VG
bG9hdChuci52YWx1ZSk7CisgICAgICAgICAgICAgICAgdCAqPSBNYXRoLnBvdygxMCwgZGVjaW1h
bHMpOworICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgaWYoZnAgIT09IG5yLmVu
ZCAmJiBjb2x1bW4gPCBmcCl7CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAqPSBNYXRoLnBv
dygxMCwgbnIuZW5kIC0gY29sdW1uIC0gMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0
ICs9IGFtb3VudDsKKyAgICAgICAgICAgICAgICB0IC89IE1hdGgucG93KDEwLCBkZWNpbWFscyk7
CisgICAgICAgICAgICAgICAgdmFyIG5uciA9IHQudG9GaXhlZChkZWNpbWFscyk7CisgICAgICAg
ICAgICAgICAgdmFyIHJlcGxhY2VSYW5nZSA9IG5ldyBSYW5nZShyb3csIG5yLnN0YXJ0LCByb3cs
IG5yLmVuZCk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmVwbGFjZVJh
bmdlLCBubnIpOworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgTWF0aC5t
YXgobnIuc3RhcnQgKzEsIGNvbHVtbiArIG5uci5sZW5ndGggLSBuci52YWx1ZS5sZW5ndGgpKTsK
KworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZUxpbmVz
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dz
KCk7CisgICAgICAgIHZhciByYW5nZTsKKyAgICAgICAgaWYgKHJvd3MuZmlyc3QgPT09IDAgfHwg
cm93cy5sYXN0KzEgPCB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkpCisgICAgICAgICAgICByYW5n
ZSA9IG5ldyBSYW5nZShyb3dzLmZpcnN0LCAwLCByb3dzLmxhc3QrMSwgMCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKAorICAgICAgICAgICAgICAgIHJvd3Mu
Zmlyc3QtMSwgdGhpcy5zZXNzaW9uLmdldExpbmUocm93cy5maXJzdC0xKS5sZW5ndGgsCisgICAg
ICAgICAgICAgICAgcm93cy5sYXN0LCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dzLmxhc3QpLmxl
bmd0aAorICAgICAgICAgICAgKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7
CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworCisgICAgdGhpcy5kdXBs
aWNhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbCA9IHRoaXMuc2Vs
ZWN0aW9uOworICAgICAgICB2YXIgZG9jID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgcmFu
Z2UgPSBzZWwuZ2V0UmFuZ2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGRvYy5kdXBs
aWNhdGVMaW5lcyhyb3csIHJvdyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIg
cmV2ZXJzZSA9IHNlbC5pc0JhY2t3YXJkcygpCisgICAgICAgICAgICB2YXIgcG9pbnQgPSBzZWwu
aXNCYWNrd2FyZHMoKSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworICAgICAgICAgICAgdmFy
IGVuZFBvaW50ID0gZG9jLmluc2VydChwb2ludCwgZG9jLmdldFRleHRSYW5nZShyYW5nZSksIGZh
bHNlKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0ID0gcG9pbnQ7CisgICAgICAgICAgICByYW5n
ZS5lbmQgPSBlbmRQb2ludDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VsLnNldFNlbGVj
dGlvblJhbmdlKHJhbmdlLCByZXZlcnNlKQorICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLm1v
dmVMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUxpbmVzKGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9u
Lm1vdmVMaW5lc0Rvd24oZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB9KTsKKyAgICB9Owor
ICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUxp
bmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5zZXNzaW9uLm1vdmVMaW5lc1VwKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24ocmFuZ2UsIHRvUG9zaXRpb24pIHsK
KyAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlVGV4dChyYW5nZSwgdG9Qb3NpdGlvbik7
CisgICAgfTsKKyAgICB0aGlzLmNvcHlMaW5lc1VwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICAgICAg
dGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuY29weUxpbmVzRG93
biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RS
b3csIGxhc3RSb3cpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZHVwbGljYXRl
TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMu
JG1vdmVMaW5lcyA9IGZ1bmN0aW9uKG1vdmVyKSB7CisgICAgICAgIHZhciByb3dzID0gdGhpcy4k
Z2V0U2VsZWN0ZWRSb3dzKCk7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlv
bjsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSkgeworICAgICAgICAgICAg
dmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgcmV2ZXJz
ZSA9IHNlbGVjdGlvbi5pc0JhY2t3YXJkcygpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGxp
bmVzTW92ZWQgPSBtb3Zlci5jYWxsKHRoaXMsIHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7CisKKyAg
ICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgKz0gbGluZXNN
b3ZlZDsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgKz0gbGluZXNNb3ZlZDsKKyAgICAgICAg
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmV2ZXJzZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5j
aG9yKHJvd3MubGFzdCtsaW5lc01vdmVkKzEsIDApOworICAgICAgICAgICAgc2VsZWN0aW9uLiRt
b3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3Zl
Q3Vyc29yVG8ocm93cy5maXJzdCtsaW5lc01vdmVkLCAwKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfTsKKyAgICB0aGlzLiRnZXRTZWxlY3RlZFJvd3MgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLmNvbGxhcHNlUm93
cygpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmaXJzdDogcmFuZ2Uuc3RhcnQu
cm93LAorICAgICAgICAgICAgbGFzdDogcmFuZ2UuZW5kLnJvdworICAgICAgICB9OworICAgIH07
CisKKyAgICB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5zaG93Q29tcG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigp
KTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rpb24odGV4
dCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbXBvc2l0aW9uVGV4dCh0ZXh0KTsKKyAg
ICB9OworCisgICAgdGhpcy5vbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMucmVuZGVyZXIuaGlkZUNvbXBvc2l0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLmdldEZp
cnN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJl
ci5nZXRGaXJzdFZpc2libGVSb3coKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFZpc2libGVS
b3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0TGFzdFZp
c2libGVSb3coKTsKKyAgICB9OworICAgIHRoaXMuaXNSb3dWaXNpYmxlID0gZnVuY3Rpb24ocm93
KSB7CisgICAgICAgIHJldHVybiAocm93ID49IHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCkgJiYg
cm93IDw9IHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKSk7CisgICAgfTsKKyAgICB0aGlzLmlzUm93
RnVsbHlWaXNpYmxlID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiAocm93ID49IHRo
aXMucmVuZGVyZXIuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSAmJiByb3cgPD0gdGhpcy5yZW5k
ZXJlci5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkpOworICAgIH07CisgICAgdGhpcy4kZ2V0Vmlz
aWJsZVJvd0NvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVy
LmdldFNjcm9sbEJvdHRvbVJvdygpIC0gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxUb3BSb3coKSAr
IDE7CisgICAgfTsKKworICAgIHRoaXMuJG1vdmVCeVBhZ2UgPSBmdW5jdGlvbihkaXIsIHNlbGVj
dCkgeworICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyOworICAgICAgICB2YXIg
Y29uZmlnID0gdGhpcy5yZW5kZXJlci5sYXllckNvbmZpZzsKKyAgICAgICAgdmFyIHJvd3MgPSBk
aXIgKiBNYXRoLmZsb29yKGNvbmZpZy5oZWlnaHQgLyBjb25maWcubGluZUhlaWdodCk7CisKKyAg
ICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcrKzsKKyAgICAgICAgaWYgKHNlbGVjdCA9PSB0cnVl
KSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KHJvd3MsIDApOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ID09IGZhbHNlKSB7CisgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkocm93cywgMCk7CisgICAgICAgICAgICB0aGlz
LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuJGJs
b2NrU2Nyb2xsaW5nLS07CisKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHJlbmRlcmVyLnNjcm9s
bFRvcDsKKworICAgICAgICByZW5kZXJlci5zY3JvbGxCeSgwLCByb3dzICogY29uZmlnLmxpbmVI
ZWlnaHQpOworICAgICAgICBpZiAoc2VsZWN0ICE9IG51bGwpCisgICAgICAgICAgICByZW5kZXJl
ci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUpOworCisgICAgICAgIHJlbmRlcmVyLmFu
aW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0UGFnZURv
d24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCB0cnVlKTsKKyAg
ICB9OworICAgIHRoaXMuc2VsZWN0UGFnZVVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
JG1vdmVCeVBhZ2UoLTEsIHRydWUpOworICAgIH07CisgICAgdGhpcy5nb3RvUGFnZURvd24gPSBm
dW5jdGlvbigpIHsKKyAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEsIGZhbHNlKTsKKyAgICB9Owor
ICAgIHRoaXMuZ290b1BhZ2VVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlQnlQ
YWdlKC0xLCBmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFBhZ2VEb3duID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSk7CisgICAgfTsKKyAgICB0aGlzLnNj
cm9sbFBhZ2VVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xKTsK
KyAgICB9OworICAgIHRoaXMuc2Nyb2xsVG9Sb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci5zY3JvbGxUb1Jvdyhyb3cpOworICAgIH07CisgICAgdGhpcy5zY3JvbGxU
b0xpbmUgPSBmdW5jdGlvbihsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKSB7CisgICAg
ICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9MaW5lKGxpbmUsIGNlbnRlciwgYW5pbWF0ZSwgY2Fs
bGJhY2spOworICAgIH07CisgICAgdGhpcy5jZW50ZXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB2
YXIgcG9zID0geworICAgICAgICAgICAgcm93OiBNYXRoLmZsb29yKHJhbmdlLnN0YXJ0LnJvdyAr
IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93KSAvIDIpLAorICAgICAgICAgICAgY29s
dW1uOiBNYXRoLmZsb29yKHJhbmdlLnN0YXJ0LmNvbHVtbiArIChyYW5nZS5lbmQuY29sdW1uIC0g
cmFuZ2Uuc3RhcnQuY29sdW1uKSAvIDIpCisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yZW5kZXJl
ci5hbGlnbkN1cnNvcihwb3MsIDAuNSk7CisgICAgfTsKKyAgICB0aGlzLmdldEN1cnNvclBvc2l0
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRDdXJz
b3IoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25TY3JlZW4gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRp
b24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdl
dFJhbmdlKCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZWxlY3RBbGwoKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKyAgICB9Owor
ICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxl
Y3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNv
clRvKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24g
PSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9z
aXRpb24ocG9zKTsKKyAgICB9OworICAgIHRoaXMuanVtcFRvTWF0Y2hpbmcgPSBmdW5jdGlvbihz
ZWxlY3QpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
KworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKGN1cnNv
cik7CisgICAgICAgIGlmICghcmFuZ2UpIHsKKyAgICAgICAgICAgIHJhbmdlID0gdGhpcy5maW5k
KHsKKyAgICAgICAgICAgICAgICBuZWVkbGU6IC9be30oKVxbXF1dL2csCisgICAgICAgICAgICAg
ICAgcHJldmVudFNjcm9sbDp0cnVlLAorICAgICAgICAgICAgICAgIHN0YXJ0OiB7cm93OiBjdXJz
b3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW4gLSAxfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHZhciBwb3MgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgIGlmIChwb3Mucm93ID09IGN1cnNv
ci5yb3cgJiYgTWF0aC5hYnMocG9zLmNvbHVtbiAtIGN1cnNvci5jb2x1bW4pIDwgMikKKyAgICAg
ICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRCcmFja2V0UmFuZ2UocG9zKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcG9zID0gcmFuZ2UgJiYgcmFuZ2UuY3Vyc29yIHx8
IHBvczsKKyAgICAgICAgaWYgKHBvcykgeworICAgICAgICAgICAgaWYgKHNlbGVjdCkgeworICAg
ICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc0VxdWFsKHRoaXMuZ2V0U2VsZWN0aW9u
UmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNl
bGVjdFRvKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgdGhpcy5t
b3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMuZ290b0xpbmUgPSBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1
bW4sIGFuaW1hdGUpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsK
KyAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OiBsaW5lTnVtYmVyIC0gMSwgY29sdW1u
OiBjb2x1bW4gfHwgMH0pOworCisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7Cisg
ICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxpbmVOdW1iZXIgLSAxLCBjb2x1bW4gfHwgMCk7Cisg
ICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgaWYgKCF0aGlzLmlz
Um93RnVsbHlWaXNpYmxlKGxpbmVOdW1iZXIgLSAxKSkKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xs
VG9MaW5lKGxpbmVOdW1iZXIgLSAxLCB0cnVlLCBhbmltYXRlKTsKKyAgICB9OworICAgIHRoaXMu
bmF2aWdhdGVUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHRoaXMuY2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOworICAg
IH07CisgICAgdGhpcy5uYXZpZ2F0ZVVwID0gZnVuY3Rpb24odGltZXMpIHsKKyAgICAgICAgdGhp
cy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGltZXMgPSB0aW1lcyB8fCAx
OworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLXRpbWVzLCAwKTsKKyAgICB9
OworICAgIHRoaXMubmF2aWdhdGVEb3duID0gZnVuY3Rpb24odGltZXMpIHsKKyAgICAgICAgdGhp
cy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGltZXMgPSB0aW1lcyB8fCAx
OworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkodGltZXMsIDApOworICAgIH07
CisgICAgdGhpcy5uYXZpZ2F0ZUxlZnQgPSBmdW5jdGlvbih0aW1lcykgeworICAgICAgICBpZiAo
IXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblN0
YXJ0ID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLnN0YXJ0OworICAgICAgICAgICAgdGhpcy5t
b3ZlQ3Vyc29yVG9Qb3NpdGlvbihzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgICAgICB3aGls
ZSAodGltZXMtLSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JM
ZWZ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5jbGVhclNlbGVj
dGlvbigpOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVJpZ2h0ID0gZnVuY3Rpb24odGltZXMp
IHsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IHZhciBzZWxlY3Rpb25FbmQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuZW5kOworICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzZWxlY3Rpb25FbmQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGltZXMgPSB0aW1lcyB8fCAxOworICAgICAg
ICAgICAgd2hpbGUgKHRpbWVzLS0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5t
b3ZlQ3Vyc29yUmlnaHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlz
LmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGluZVN0YXJ0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lU3RhcnQo
KTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5uYXZp
Z2F0ZUxpbmVFbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1
cnNvckxpbmVFbmQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07Cisg
ICAgdGhpcy5uYXZpZ2F0ZUZpbGVFbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNjcm9s
bFRvcCA9IHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9wOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5t
b3ZlQ3Vyc29yRmlsZUVuZCgpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIHRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOworICAgIH07Cisg
ICAgdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Ny
b2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMuc2VsZWN0aW9u
Lm1vdmVDdXJzb3JGaWxlU3RhcnQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwor
ICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKKyAgICB9
OworICAgIHRoaXMubmF2aWdhdGVXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRSaWdodCgpOworICAgICAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlV29yZExlZnQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRMZWZ0KCk7CisgICAgICAg
IHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0
aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zKQorICAgICAg
ICAgICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSB0
aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOworICAgICAgICB2YXIgcmVwbGFjZWQgPSAw
OworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOworCisg
ICAgICAgIGlmICh0aGlzLiR0cnlSZXBsYWNlKHJhbmdlLCByZXBsYWNlbWVudCkpIHsKKyAgICAg
ICAgICAgIHJlcGxhY2VkID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmFuZ2UgIT09IG51
bGwpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdl
KTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFu
Z2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVwbGFj
ZWQ7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihyZXBsYWNlbWVudCwg
b3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucykgeworICAgICAgICAgICAgdGhpcy4kc2Vh
cmNoLnNldChvcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZXMgPSB0aGlz
LiRzZWFyY2guZmluZEFsbCh0aGlzLnNlc3Npb24pOworICAgICAgICB2YXIgcmVwbGFjZWQgPSAw
OworICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gcmVwbGFj
ZWQ7CisKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKworICAgICAgICB2YXIg
c2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB0aGlzLmNsZWFy
U2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbygwLCAwKTsK
KworICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgICAgICBpZih0aGlzLiR0cnlSZXBsYWNlKHJhbmdlc1tpXSwgcmVwbGFjZW1lbnQp
KSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZWQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvbik7
CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgcmV0dXJuIHJl
cGxhY2VkOworICAgIH07CisKKyAgICB0aGlzLiR0cnlSZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2Us
IHJlcGxhY2VtZW50KSB7CisgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0
UmFuZ2UocmFuZ2UpOworICAgICAgICByZXBsYWNlbWVudCA9IHRoaXMuJHNlYXJjaC5yZXBsYWNl
KGlucHV0LCByZXBsYWNlbWVudCk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVsbCkg
eworICAgICAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHJl
cGxhY2VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdl
dExhc3RTZWFyY2hPcHRpb25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRz
ZWFyY2guZ2V0T3B0aW9ucygpOworICAgIH07CisgICAgdGhpcy5maW5kID0gZnVuY3Rpb24obmVl
ZGxlLCBvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIGlmICghb3B0aW9ucykKKyAgICAgICAg
ICAgIG9wdGlvbnMgPSB7fTsKKworICAgICAgICBpZiAodHlwZW9mIG5lZWRsZSA9PSAic3RyaW5n
IiB8fCBuZWVkbGUgaW5zdGFuY2VvZiBSZWdFeHApCisgICAgICAgICAgICBvcHRpb25zLm5lZWRs
ZSA9IG5lZWRsZTsKKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5lZWRsZSA9PSAib2JqZWN0IikK
KyAgICAgICAgICAgIG9vcC5taXhpbihvcHRpb25zLCBuZWVkbGUpOworCisgICAgICAgIHZhciBy
YW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgIGlmIChvcHRpb25zLm5l
ZWRsZSA9PSBudWxsKSB7CisgICAgICAgICAgICBuZWVkbGUgPSB0aGlzLnNlc3Npb24uZ2V0VGV4
dFJhbmdlKHJhbmdlKQorICAgICAgICAgICAgICAgIHx8IHRoaXMuJHNlYXJjaC4kb3B0aW9ucy5u
ZWVkbGU7CisgICAgICAgICAgICBpZiAoIW5lZWRsZSkgeworICAgICAgICAgICAgICAgIHJhbmdl
ID0gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0
LmNvbHVtbik7CisgICAgICAgICAgICAgICAgbmVlZGxlID0gdGhpcy5zZXNzaW9uLmdldFRleHRS
YW5nZShyYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0
KHtuZWVkbGU6IG5lZWRsZX0pOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4kc2VhcmNoLnNl
dChvcHRpb25zKTsKKyAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KQorICAgICAgICAgICAgdGhp
cy4kc2VhcmNoLnNldCh7c3RhcnQ6IHJhbmdlfSk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0g
dGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTsKKyAgICAgICAgaWYgKG9wdGlvbnMucHJl
dmVudFNjcm9sbCkKKyAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICAgICAgaWYgKG5l
d1JhbmdlKSB7CisgICAgICAgICAgICB0aGlzLnJldmVhbFJhbmdlKG5ld1JhbmdlLCBhbmltYXRl
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
b3B0aW9ucy5iYWNrd2FyZHMpCisgICAgICAgICAgICByYW5nZS5zdGFydCA9IHJhbmdlLmVuZDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQ7CisgICAg
ICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKKyAgICB9OworICAgIHRoaXMuZmlu
ZE5leHQgPSBmdW5jdGlvbihvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuZmluZCh7
c2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2V9LCBvcHRpb25zLCBhbmltYXRlKTsK
KyAgICB9OworICAgIHRoaXMuZmluZFByZXZpb3VzID0gZnVuY3Rpb24ob3B0aW9ucywgYW5pbWF0
ZSkgeworICAgICAgICB0aGlzLmZpbmQob3B0aW9ucywge3NraXBDdXJyZW50OiB0cnVlLCBiYWNr
d2FyZHM6IHRydWV9LCBhbmltYXRlKTsKKyAgICB9OworCisgICAgdGhpcy5yZXZlYWxSYW5nZSA9
IGZ1bmN0aW9uKHJhbmdlLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5n
ICs9IDE7CisgICAgICAgIHRoaXMuc2Vzc2lvbi51bmZvbGQocmFuZ2UpOworICAgICAgICB0aGlz
LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSk7CisgICAgICAgIHRoaXMuJGJsb2Nr
U2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMucmVuZGVyZXIu
c2Nyb2xsVG9wOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3
KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIDAuNSk7CisgICAgICAgIGlmIChhbmltYXRlICE9IGZh
bHNlKQorICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRv
cCk7CisgICAgfTsKKyAgICB0aGlzLnVuZG8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4k
YmxvY2tTY3JvbGxpbmcrKzsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCku
dW5kbygpOworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tOworICAgICAgICB0aGlzLnJl
bmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7CisgICAgfTsKKyAgICB0aGlz
LnJlZG8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcrKzsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkucmVkbygpOworICAgICAgICB0aGlz
LiRibG9ja1Njcm9sbGluZy0tOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvcklu
dG9WaWV3KG51bGwsIDAuNSk7CisgICAgfTsKKyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5kZXN0cm95KCk7CisgICAgfTsKKworfSkuY2FsbChF
ZGl0b3IucHJvdG90eXBlKTsKKworCitleHBvcnRzLkVkaXRvciA9IEVkaXRvcjsKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvbGliL2xhbmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9ydHMuc3Ry
aW5nUmV2ZXJzZSA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBzdHJpbmcuc3BsaXQo
IiIpLnJldmVyc2UoKS5qb2luKCIiKTsKK307CisKK2V4cG9ydHMuc3RyaW5nUmVwZWF0ID0gZnVu
Y3Rpb24gKHN0cmluZywgY291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gJyc7CisgICAgd2hpbGUg
KGNvdW50ID4gMCkgeworICAgICAgICBpZiAoY291bnQgJiAxKQorICAgICAgICAgICAgcmVzdWx0
ICs9IHN0cmluZzsKKworICAgICAgICBpZiAoY291bnQgPj49IDEpCisgICAgICAgICAgICBzdHJp
bmcgKz0gc3RyaW5nOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKKwordmFyIHRyaW1C
ZWdpblJlZ2V4cCA9IC9eXHNccyovOwordmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKKwor
ZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4g
c3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cit9OworCitleHBvcnRzLnN0cmlu
Z1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4gc3RyaW5nLnJlcGxh
Y2UodHJpbUVuZFJlZ2V4cCwgJycpOworfTsKKworZXhwb3J0cy5jb3B5T2JqZWN0ID0gZnVuY3Rp
b24ob2JqKSB7CisgICAgdmFyIGNvcHkgPSB7fTsKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7
CisgICAgICAgIGNvcHlba2V5XSA9IG9ialtrZXldOworICAgIH0KKyAgICByZXR1cm4gY29weTsK
K307CisKK2V4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpeworICAgIHZhciBjb3B5
ID0gW107CisgICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHsKKyAg
ICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKKyAgICAg
ICAgICAgIGNvcHlbaV0gPSB0aGlzLmNvcHlPYmplY3QoIGFycmF5W2ldICk7CisgICAgICAgIGVs
c2UgCisgICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07CisgICAgfQorICAgIHJldHVybiBj
b3B5OworfTsKKworZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIChvYmopIHsKKyAgICBpZiAo
dHlwZW9mIG9iaiAhPSAib2JqZWN0IikgeworICAgICAgICByZXR1cm4gb2JqOworICAgIH0KKyAg
ICAKKyAgICB2YXIgY29weSA9IG9iai5jb25zdHJ1Y3RvcigpOworICAgIGZvciAodmFyIGtleSBp
biBvYmopIHsKKyAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PSAib2JqZWN0IikgeworICAg
ICAgICAgICAgY29weVtrZXldID0gdGhpcy5kZWVwQ29weShvYmpba2V5XSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gY29weTsKK307CisKK2V4cG9ydHMuYXJyYXlUb01hcCA9IGZ1bmN0aW9u
KGFycikgeworICAgIHZhciBtYXAgPSB7fTsKKyAgICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIG1hcFthcnJbaV1dID0gMTsKKyAgICB9CisgICAgcmV0dXJuIG1h
cDsKKworfTsKKworZXhwb3J0cy5jcmVhdGVNYXAgPSBmdW5jdGlvbihwcm9wcykgeworICAgIHZh
ciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgIGZvciAodmFyIGkgaW4gcHJvcHMpIHsK
KyAgICAgICAgbWFwW2ldID0gcHJvcHNbaV07CisgICAgfQorICAgIHJldHVybiBtYXA7Cit9Owor
ZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgeworICBmb3IgKHZh
ciBpID0gMDsgaSA8PSBhcnJheS5sZW5ndGg7IGkrKykgeworICAgIGlmICh2YWx1ZSA9PT0gYXJy
YXlbaV0pIHsKKyAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKKyAgICB9CisgIH0KK307CisKK2V4
cG9ydHMuZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBs
YWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cit9OworCitleHBvcnRzLmVz
Y2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYvZywg
IiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJl
cGxhY2UoLzwvZywgIiYjNjA7Iik7Cit9OworCitleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1
bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CisgICAgdmFyIG1hdGNoZXMgPSBbXTsKKworICAgIHN0
cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CisgICAgICAgIG1hdGNoZXMucHVz
aCh7CisgICAgICAgICAgICBvZmZzZXQ6IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLAor
ICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCisgICAgICAgIH0pOworICAgIH0pOworCisg
ICAgcmV0dXJuIG1hdGNoZXM7Cit9OworZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihm
Y24pIHsKKworICAgIHZhciB0aW1lciA9IG51bGw7CisgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRpbWVyID0gbnVsbDsKKyAgICAgICAgZmNuKCk7CisgICAgfTsKKwor
ICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKKyAgICAgICAgZGVmZXJyZWQu
Y2FuY2VsKCk7CisgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8
fCAwKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgIH07CisKKyAgICBkZWZlcnJlZC5z
Y2hlZHVsZSA9IGRlZmVycmVkOworCisgICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGlzLmNhbmNlbCgpOworICAgICAgICBmY24oKTsKKyAgICAgICAgcmV0dXJuIGRl
ZmVycmVkOworICAgIH07CisKKyAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAgICAg
ICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfTsKKworICAgIHJldHVybiBkZWZlcnJlZDsKK307CisK
KworZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsK
KyAgICB2YXIgdGltZXIgPSBudWxsOworICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aW1lciA9IG51bGw7CisgICAgICAgIGZjbigpOworICAgIH07CisKKyAgICB2YXIg
X3NlbGYgPSBmdW5jdGlvbih0aW1lb3V0KSB7CisgICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91
dCh0aW1lcik7CisgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8
fCBkZWZhdWx0VGltZW91dCk7CisgICAgfTsKKworICAgIF9zZWxmLmRlbGF5ID0gX3NlbGY7Cisg
ICAgX3NlbGYuc2NoZWR1bGUgPSBmdW5jdGlvbih0aW1lb3V0KSB7CisgICAgICAgIGlmICh0aW1l
ciA9PSBudWxsKQorICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1l
b3V0IHx8IDApOworICAgIH07CisKKyAgICBfc2VsZi5jYWxsID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuY2FuY2VsKCk7CisgICAgICAgIGZjbigpOworICAgIH07CisKKyAgICBfc2VsZi5j
YW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVy
KTsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAgIH07CisKKyAgICBfc2VsZi5pc1BlbmRpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRpbWVyOworICAgIH07CisKKyAgICByZXR1
cm4gX3NlbGY7Cit9OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9rZXlib2FyZC90ZXh0aW5wdXQn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNl
L2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4u
L2xpYi9ldmVudCIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQi
KTsKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUo
Ii4uL2xpYi9sYW5nIik7Cit2YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXNDaHJvbWUg
PCAxODsKKwordmFyIFRleHRJbnB1dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGhvc3QpIHsKKyAg
ICB2YXIgdGV4dCA9IGRvbS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOworICAgIHRleHQuY2xh
c3NOYW1lID0gImFjZV90ZXh0LWlucHV0IjsKKyAgICBpZiAodXNlcmFnZW50LmlzVG91Y2hQYWQp
CisgICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCJ4LXBhbG0tZGlzYWJsZS1hdXRvLWNhcCIsIHRy
dWUpOworCisgICAgdGV4dC53cmFwID0gIm9mZiI7CisgICAgdGV4dC5hdXRvY29ycmVjdCA9ICJv
ZmYiOworICAgIHRleHQuYXV0b2NhcGl0YWxpemUgPSAib2ZmIjsKKyAgICB0ZXh0LnNwZWxsY2hl
Y2sgPSBmYWxzZTsKKworICAgIHRleHQuc3R5bGUuYm90dG9tID0gIjIwMDBlbSI7CisgICAgcGFy
ZW50Tm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgcGFyZW50Tm9kZS5maXJzdENoaWxkKTsKKworICAg
IHZhciBQTEFDRUhPTERFUiA9ICJceDAxXHgwMSI7CisKKyAgICB2YXIgY3V0ID0gZmFsc2U7Cisg
ICAgdmFyIGNvcGllZCA9IGZhbHNlOworICAgIHZhciBwYXN0ZWQgPSBmYWxzZTsKKyAgICB2YXIg
aW5Db21wb3N0aW9uID0gZmFsc2U7CisgICAgdmFyIHRlbXBTdHlsZSA9ICcnOworICAgIHZhciBp
c1NlbGVjdGlvbkVtcHR5ID0gdHJ1ZTsKKyAgICB0cnkgeyB2YXIgaXNGb2N1c2VkID0gZG9jdW1l
bnQuYWN0aXZlRWxlbWVudCA9PT0gdGV4dDsgfSBjYXRjaChlKSB7fQorICAgIAorICAgIGV2ZW50
LmFkZExpc3RlbmVyKHRleHQsICJibHVyIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGhvc3Qub25C
bHVyKCk7CisgICAgICAgIGlzRm9jdXNlZCA9IGZhbHNlOworICAgIH0pOworICAgIGV2ZW50LmFk
ZExpc3RlbmVyKHRleHQsICJmb2N1cyIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpc0ZvY3VzZWQg
PSB0cnVlOworICAgICAgICBob3N0Lm9uRm9jdXMoKTsKKyAgICAgICAgcmVzZXRTZWxlY3Rpb24o
KTsKKyAgICB9KTsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7IHRleHQuZm9jdXMoKTsg
fTsKKyAgICB0aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsgdGV4dC5ibHVyKCk7IH07CisgICAgdGhp
cy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGlzRm9jdXNlZDsKKyAg
ICB9OworICAgIHZhciBzeW5jU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigp
IHsKKyAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKGlzU2VsZWN0aW9uRW1wdHkp
OworICAgIH0pOworICAgIHZhciBzeW5jVmFsdWUgPSBsYW5nLmRlbGF5ZWRDYWxsKGZ1bmN0aW9u
KCkgeworICAgICAgICAgaWYgKCFpbkNvbXBvc3Rpb24pIHsKKyAgICAgICAgICAgIHRleHQudmFs
dWUgPSBQTEFDRUhPTERFUjsKKyAgICAgICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNlbGVjdGlv
bigpOworICAgICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rpb24gcmVzZXRTZWxlY3Rpb24o
aXNFbXB0eSkgeworICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0VtcHR5ID8gMiA6IDE7CisgICAgICAg
IHZhciBzZWxlY3Rpb25FbmQgPSAyOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGV4dC5z
ZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAg
fSBjYXRjaChlKXt9CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVzZXRWYWx1ZSgpIHsKKyAgICAg
ICAgaWYgKGluQ29tcG9zdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGV4dC52
YWx1ZSA9IFBMQUNFSE9MREVSOworICAgICAgICBpZiAodXNlcmFnZW50LmlzV2ViS2l0KQorICAg
ICAgICAgICAgc3luY1ZhbHVlLnNjaGVkdWxlKCk7CisgICAgfQorCisgICAgdXNlcmFnZW50Lmlz
V2ViS2l0IHx8IGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlU2VsZWN0aW9uJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmIChob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkgIT0gaXNTZWxlY3Rp
b25FbXB0eSkgeworICAgICAgICAgICAgaXNTZWxlY3Rpb25FbXB0eSA9ICFpc1NlbGVjdGlvbkVt
cHR5OworICAgICAgICAgICAgc3luY1NlbGVjdGlvbi5zY2hlZHVsZSgpOworICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICByZXNldFZhbHVlKCk7CisgICAgaWYgKGlzRm9jdXNlZCkKKyAgICAgICAg
aG9zdC5vbkZvY3VzKCk7CisKKworICAgIHZhciBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24odGV4
dCkgeworICAgICAgICByZXR1cm4gdGV4dC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiB0ZXh0LnNl
bGVjdGlvbkVuZCA9PT0gdGV4dC52YWx1ZS5sZW5ndGg7CisgICAgfTsKKyAgICBpZiAoIXRleHQu
c2V0U2VsZWN0aW9uUmFuZ2UgJiYgdGV4dC5jcmVhdGVUZXh0UmFuZ2UpIHsKKyAgICAgICAgdGV4
dC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlVGV4dFJhbmdlKCk7Cisg
ICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsKKyAgICAgICAgICAgIHJhbmdlLm1vdmVT
dGFydCgnY2hhcmFjdGVyJywgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICAgICAgcmFuZ2UubW92
ZUVuZCgnY2hhcmFjdGVyJywgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgICAgIHJhbmdlLnNlbGVj
dCgpOworICAgICAgICB9OworICAgICAgICBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24odGV4dCkg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0ZXh0Lm93
bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgICB9Y2F0Y2go
ZSkge30KKyAgICAgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVudCgpICE9
IHRleHQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UudGV4dCA9
PSB0ZXh0LnZhbHVlOworICAgICAgICB9CisgICAgfQorICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJ
RSkgeworICAgICAgICB2YXIgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOworICAgICAgICB2YXIg
b25Qcm9wZXJ0eUNoYW5nZSA9IGZ1bmN0aW9uKGUpeworICAgICAgICAgICAgaWYgKGluUHJvcGVy
dHlDaGFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIGRhdGEg
PSB0ZXh0LnZhbHVlOworICAgICAgICAgICAgaWYgKGluQ29tcG9zdGlvbiB8fCAhZGF0YSB8fCBk
YXRhID09IFBMQUNFSE9MREVSKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGlmIChlICYmIGRhdGEgPT0gUExBQ0VIT0xERVJbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN5bmNQcm9wZXJ0eS5zY2hlZHVsZSgpOworCisgICAgICAgICAgICBzZW5kVGV4dChkYXRhKTsK
KyAgICAgICAgICAgIGluUHJvcGVydHlDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAgcmVzZXRW
YWx1ZSgpOworICAgICAgICAgICAgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOworICAgICAgICB9
OworICAgICAgICB2YXIgc3luY1Byb3BlcnR5ID0gbGFuZy5kZWxheWVkQ2FsbChvblByb3BlcnR5
Q2hhbmdlKTsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInByb3BlcnR5Y2hhbmdl
Iiwgb25Qcm9wZXJ0eUNoYW5nZSk7CisKKyAgICAgICAgdmFyIGtleXRhYmxlID0geyAxMzoxLCAy
NzoxIH07CisgICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJrZXl1cCIsIGZ1bmN0aW9u
IChlKSB7CisgICAgICAgICAgICBpZiAoaW5Db21wb3N0aW9uICYmICghdGV4dC52YWx1ZSB8fCBr
ZXl0YWJsZVtlLmtleUNvZGVdKSkKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9z
aXRpb25FbmQsIDApOworICAgICAgICAgICAgaWYgKCh0ZXh0LnZhbHVlLmNoYXJDb2RlQXQoMCl8
fDApIDwgMTI5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaW5Db21wb3N0aW9uID8gb25Db21wb3NpdGlvblVwZGF0ZSgpIDogb25Db21wb3Np
dGlvblN0YXJ0KCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZhciBvblNlbGVjdCA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGN1dCkgeworICAgICAgICAgICAgY3V0ID0gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvcGllZCkgewor
ICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHsKKyAgICAgICAgICAgIGhvc3Qu
c2VsZWN0QWxsKCk7CisgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgaWYg
KHBhc3RlZCkgeworICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGlm
IChkYXRhKQorICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTsKKyAgICAgICAgICAg
IHBhc3RlZCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVJb
MF0pIHsKKyAgICAgICAgICAgIGhvc3QuZXhlY0NvbW1hbmQoImRlbCIsIHtzb3VyY2U6ICJhY2Ui
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZGF0YS5zdWJzdHJpbmcoMCwg
MikgPT0gUExBQ0VIT0xERVIpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDIp
OworICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVswXSA9PSBQTEFDRUhPTERFUlswXSkKKyAgICAg
ICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHIoMSk7CisgICAgICAgICAgICBlbHNlIGlmIChk
YXRhW2RhdGEubGVuZ3RoIC0gMV0gPT0gUExBQ0VIT0xERVJbMF0pCisgICAgICAgICAgICAgICAg
ZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpOworICAgICAgICAgICAgaWYgKGRhdGFbZGF0YS5sZW5n
dGggLSAxXSA9PSBQTEFDRUhPTERFUlswXSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5z
bGljZSgwLCAtMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAg
ICAgICAgICAgIGhvc3Qub25UZXh0SW5wdXQoZGF0YSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IHZhciBvbklucHV0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgZGF0YSA9IHRleHQudmFsdWU7CisgICAg
ICAgIHJlc2V0VmFsdWUoKTsKKworICAgICAgICBzZW5kVGV4dChkYXRhKTsKKyAgICB9OworCisg
ICAgdmFyIG9uQ3V0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0
Q29weVRleHQoKTsKKyAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdChlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmRE
YXRhOworCisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFUQSkgewor
ICAgICAgICAgICAgdmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIs
IGRhdGEpOworICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIGhv
c3Qub25DdXQoKTsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3VwcG9ydGVkKSB7CisgICAg
ICAgICAgICBjdXQgPSB0cnVlOworICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGRhdGE7CisgICAg
ICAgICAgICB0ZXh0LnNlbGVjdCgpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgIGN1dCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJlc2V0VmFs
dWUoKTsKKyAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOworICAgICAgICAgICAgICAg
IGhvc3Qub25DdXQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworICAg
IHZhciBvbkNvcHkgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkYXRhID0gaG9zdC5nZXRD
b3B5VGV4dCgpOworICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERh
dGE7CisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFUQSkgeworICAg
ICAgICAgICAgdmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsIGRh
dGEpOworICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIGhvc3Qu
b25Db3B5KCk7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdXBwb3J0ZWQpIHsKKyAgICAgICAg
ICAgIGNvcGllZCA9IHRydWU7CisgICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTsKKyAgICAg
ICAgICAgIHRleHQuc2VsZWN0KCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7
CisgICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmVzZXRW
YWx1ZSgpOworICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICAg
ICAgaG9zdC5vbkNvcHkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHZhciBvblBhc3RlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgY2xpcGJvYXJkRGF0
YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKKworICAgICAgICBp
ZiAoY2xpcGJvYXJkRGF0YSkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBjbGlwYm9hcmREYXRh
LmdldERhdGEoIlRleHQiKTsKKyAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgICAg
IGhvc3Qub25QYXN0ZShkYXRhKTsKKyAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNJRSkKKyAg
ICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc2V0U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGV4dC52YWx1ZSA9ICIiOworICAgICAgICAgICAgcGFzdGVkID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBldmVudC5hZGRDb21tYW5kS2V5TGlzdGVuZXIodGV4dCwgaG9z
dC5vbkNvbW1hbmRLZXkuYmluZChob3N0KSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0
LCAic2VsZWN0Iiwgb25TZWxlY3QpOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImlu
cHV0Iiwgb25JbnB1dCk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY3V0Iiwgb25D
dXQpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb3B5Iiwgb25Db3B5KTsKKyAgICBl
dmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAicGFzdGUiLCBvblBhc3RlKTsKKyAgICBpZiAoISgnb25j
dXQnIGluIHRleHQpIHx8ICEoJ29uY29weScgaW4gdGV4dCkgfHwgISgnb25wYXN0ZScgaW4gdGV4
dCkpeworICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihwYXJlbnROb2RlLCAia2V5ZG93biIsIGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGlmICgodXNlcmFnZW50LmlzTWFjICYmICFlLm1ldGFL
ZXkpIHx8ICFlLmN0cmxLZXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHN3
aXRjaCAoZS5rZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSA2NzoKKyAgICAgICAgICAg
ICAgICAgICAgb25Db3B5KGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIDg2OgorICAgICAgICAgICAgICAgICAgICBvblBhc3RlKGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDg4OgorICAgICAgICAg
ICAgICAgICAgICBvbkN1dChlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICB2YXIgb25Db21wb3NpdGlvblN0YXJ0ID0g
ZnVuY3Rpb24oZSkgeworICAgICAgICBpbkNvbXBvc3Rpb24gPSB0cnVlOworICAgICAgICBob3N0
Lm9uQ29tcG9zaXRpb25TdGFydCgpOworICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9zaXRpb25V
cGRhdGUsIDApOworICAgIH07CisKKyAgICB2YXIgb25Db21wb3NpdGlvblVwZGF0ZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAoIWluQ29tcG9zdGlvbikgcmV0dXJuOworICAgICAgICBob3N0
Lm9uQ29tcG9zaXRpb25VcGRhdGUodGV4dC52YWx1ZSk7CisgICAgfTsKKworICAgIHZhciBvbkNv
bXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpbkNvbXBvc3Rpb24gPSBmYWxz
ZTsKKyAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uRW5kKCk7CisgICAgfTsKKworICAgIHZhciBz
eW5jQ29tcG9zaXRpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKG9uQ29tcG9zaXRpb25VcGRhdGUsIDUw
KTsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb21wb3NpdGlvbnN0YXJ0Iiwgb25D
b21wb3NpdGlvblN0YXJ0KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCB1c2VyYWdlbnQu
aXNHZWNrbyA/ICJ0ZXh0IiA6ICJrZXl1cCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNj
aGVkdWxlKCl9KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29tcG9zaXRpb25lbmQi
LCBvbkNvbXBvc2l0aW9uRW5kKTsKKworICAgIHRoaXMuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9OworCisgICAgdGhpcy5zZXRSZWFkT25seSA9
IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAgICAgdGV4dC5yZWFkT25seSA9IHJlYWRPbmx5Owor
ICAgIH07CisKKyAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IGlmICghdGVtcFN0eWxlKQorICAgICAgICAgICAgdGVtcFN0eWxlID0gdGV4dC5zdHlsZS5jc3NU
ZXh0OworCisgICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9ICJ6LWluZGV4OjEwMDAwMDsiICsg
KHVzZXJhZ2VudC5pc0lFID8gIm9wYWNpdHk6MC4xOyIgOiAiIik7CisKKyAgICAgICAgcmVzZXRT
ZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTsKKyAgICAgICAgaG9zdC5fZW1pdCgi
bmF0aXZlY29udGV4dG1lbnUiLCB7dGFyZ2V0OiBob3N0fSk7CisgICAgICAgIHZhciByZWN0ID0g
aG9zdC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIHZhciBtb3Zl
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRY
IC0gcmVjdC5sZWZ0IC0gMiArICJweCI7CisgICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IGUu
Y2xpZW50WSAtIHJlY3QudG9wIC0gMiArICJweCI7CisgICAgICAgIH07CisgICAgICAgIG1vdmUo
ZSk7CisKKyAgICAgICAgaWYgKGUudHlwZSAhPSAibW91c2Vkb3duIikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3Ip
CisgICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IG51bGw7
CisgICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pCisgICAgICAgICAgICBldmVudC5jYXB0dXJl
KGhvc3QuY29udGFpbmVyLCBtb3ZlLCBvbkNvbnRleHRNZW51Q2xvc2UpOworICAgIH07CisKKyAg
ICB0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSA9IG9uQ29udGV4dE1lbnVDbG9zZTsKKyAgICBmdW5j
dGlvbiBvbkNvbnRleHRNZW51Q2xvc2UoKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkgeworICAgICAgICAgICAgICAgIHRleHQu
c3R5bGUuY3NzVGV4dCA9IHRlbXBTdHlsZTsKKyAgICAgICAgICAgICAgICB0ZW1wU3R5bGUgPSAn
JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRrZWVwVGV4
dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4k
a2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGhvc3QucmVuZGVy
ZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDAp
OworICAgIH0KKyAgICBpZiAoIXVzZXJhZ2VudC5pc0dlY2tvKSB7CisgICAgICAgIGV2ZW50LmFk
ZExpc3RlbmVyKHRleHQsICJjb250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
IGhvc3QudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZSk7CisgICAgICAgICAgICBvbkNvbnRleHRN
ZW51Q2xvc2UoKTsKKyAgICAgICAgfSk7CisgICAgfQorfTsKKworZXhwb3J0cy5UZXh0SW5wdXQg
PSBUZXh0SW5wdXQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2hhbmRsZXIn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNl
L2xpYi91c2VyYWdlbnQnLCAnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCAnYWNlL21vdXNl
L2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCAnYWNlL21vdXNlL21vdXNlX2V2ZW50JywgJ2FjZS9t
b3VzZS9kcmFnZHJvcCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKK3ZhciB1c2VyYWdlbnQgPSBy
ZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgRGVmYXVsdEhhbmRsZXJzID0gcmVxdWly
ZSgiLi9kZWZhdWx0X2hhbmRsZXJzIikuRGVmYXVsdEhhbmRsZXJzOwordmFyIERlZmF1bHRHdXR0
ZXJIYW5kbGVyID0gcmVxdWlyZSgiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIikuR3V0dGVySGFu
ZGxlcjsKK3ZhciBNb3VzZUV2ZW50ID0gcmVxdWlyZSgiLi9tb3VzZV9ldmVudCIpLk1vdXNlRXZl
bnQ7Cit2YXIgRHJhZ2Ryb3BIYW5kbGVyID0gcmVxdWlyZSgiLi9kcmFnZHJvcCIpLkRyYWdkcm9w
SGFuZGxlcjsKKwordmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgeworICAgIHRo
aXMuZWRpdG9yID0gZWRpdG9yOworCisgICAgbmV3IERlZmF1bHRIYW5kbGVycyh0aGlzKTsKKyAg
ICBuZXcgRGVmYXVsdEd1dHRlckhhbmRsZXIodGhpcyk7CisgICAgbmV3IERyYWdkcm9wSGFuZGxl
cih0aGlzKTsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5jb250YWluZXIsICJtb3Vz
ZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGVkaXRvci5mb2N1cygpOworICAgICAgICBy
ZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgfSk7CisKKyAgICB2YXIgbW91c2VU
YXJnZXQgPSBlZGl0b3IucmVuZGVyZXIuZ2V0TW91c2VFdmVudFRhcmdldCgpOworICAgIGV2ZW50
LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiY2xpY2siLCB0aGlzLm9uTW91c2VFdmVudC5iaW5k
KHRoaXMsICJjbGljayIpKTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgIm1v
dXNlbW92ZSIsIHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzLCAibW91c2Vtb3ZlIikpOworICAg
IGV2ZW50LmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIobW91c2VUYXJnZXQsIFszMDAsIDMwMCwg
MjUwXSwgdGhpcywgIm9uTW91c2VFdmVudCIpOworICAgIGV2ZW50LmFkZE1vdXNlV2hlZWxMaXN0
ZW5lcihlZGl0b3IuY29udGFpbmVyLCB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMsICJtb3Vz
ZXdoZWVsIikpOworCisgICAgdmFyIGd1dHRlckVsID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXI7
CisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJtb3VzZWRvd24iLCB0aGlzLm9uTW91
c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJtb3VzZWRvd24iKSk7CisgICAgZXZlbnQuYWRkTGlz
dGVuZXIoZ3V0dGVyRWwsICJjbGljayIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1
dHRlcmNsaWNrIikpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAiZGJsY2xpY2si
LCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJkYmxjbGljayIpKTsKKyAgICBl
dmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgIm1vdXNlbW92ZSIsIHRoaXMub25Nb3VzZUV2ZW50
LmJpbmQodGhpcywgImd1dHRlcm1vdXNlbW92ZSIpKTsKK307CisKKyhmdW5jdGlvbigpIHsKKwor
ICAgIHRoaXMuJHNjcm9sbFNwZWVkID0gMTsKKyAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVu
Y3Rpb24oc3BlZWQpIHsKKyAgICAgICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSBzcGVlZDsKKyAgICB9
OworCisgICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kc2Nyb2xsU3BlZWQ7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZUV2ZW50ID0g
ZnVuY3Rpb24obmFtZSwgZSkgeworICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBuZXcg
TW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikpOworICAgIH07CisKKyAgICB0aGlzLiRkcmFnRGVs
YXkgPSAyNTA7CisgICAgdGhpcy5zZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVsYXkpIHsK
KyAgICAgICAgdGhpcy4kZHJhZ0RlbGF5ID0gZHJhZ0RlbGF5OworICAgIH07CisKKyAgICB0aGlz
LmdldERyYWdEZWxheSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kZHJhZ0Rl
bGF5OworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24obmFtZSwgZSkg
eworICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkgJiYg
dGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkubW91c2Vtb3ZlOworICAgICAgICBpZiAoIWxpc3Rl
bmVycyB8fCAhbGlzdGVuZXJzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikp
OworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKG5hbWUsIGUpIHsK
KyAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcik7
CisgICAgICAgIG1vdXNlRXZlbnQuc3BlZWQgPSB0aGlzLiRzY3JvbGxTcGVlZCAqIDI7CisgICAg
ICAgIG1vdXNlRXZlbnQud2hlZWxYID0gZS53aGVlbFg7CisgICAgICAgIG1vdXNlRXZlbnQud2hl
ZWxZID0gZS53aGVlbFk7CisKKyAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQobmFtZSwgbW91c2VF
dmVudCk7CisgICAgfTsKKworICAgIHRoaXMuc2V0U3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkgewor
ICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CisgICAgfTsKKworICAgIHRoaXMuY2FwdHVyZU1v
dXNlID0gZnVuY3Rpb24oZXYsIHN0YXRlKSB7CisgICAgICAgIGlmIChzdGF0ZSkKKyAgICAgICAg
ICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpOworCisgICAgICAgIHRoaXMueCA9IGV2Lng7CisgICAg
ICAgIHRoaXMueSA9IGV2Lnk7CisgICAgICAgIAorICAgICAgICB0aGlzLmlzTW91c2VQcmVzc2Vk
ID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVyZXI7Cisg
ICAgICAgIGlmIChyZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IpCisgICAgICAgICAgICBy
ZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSBudWxsOworCisgICAgICAgIHZhciBzZWxm
ID0gdGhpczsKKyAgICAgICAgdmFyIG9uTW91c2VNb3ZlID0gZnVuY3Rpb24oZSkgeworICAgICAg
ICAgICAgc2VsZi54ID0gZS5jbGllbnRYOworICAgICAgICAgICAgc2VsZi55ID0gZS5jbGllbnRZ
OworICAgICAgICB9OworCisgICAgICAgIHZhciBvbkNhcHR1cmVFbmQgPSBmdW5jdGlvbihlKSB7
CisgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOworICAgICAgICAgICAgc2VsZltz
ZWxmLnN0YXRlICsgIkVuZCJdICYmIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXShlKTsKKyAgICAg
ICAgICAgIHNlbGYuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChyZW5k
ZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJl
bmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVu
ZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzZWxmLmlzTW91c2VQcmVzc2VkID0gZmFsc2U7CisgICAgICAgIH07CisKKyAgICAgICAgdmFy
IG9uQ2FwdHVyZUludGVydmFsID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxmW3NlbGYu
c3RhdGVdICYmIHNlbGZbc2VsZi5zdGF0ZV0oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHVzZXJhZ2VudC5pc09sZElFICYmIGV2LmRvbUV2ZW50LnR5cGUgPT0gImRibGNsaWNr
IikgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBvbkNhcHR1cmVJbnRlcnZhbCgpOworICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUVuZChldi5k
b21FdmVudCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGV2ZW50LmNhcHR1cmUodGhpcy5lZGl0b3IuY29udGFpbmVyLCBvbk1vdXNl
TW92ZSwgb25DYXB0dXJlRW5kKTsKKyAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRlcnZhbChv
bkNhcHR1cmVJbnRlcnZhbCwgMjApOworICAgIH07Cit9KS5jYWxsKE1vdXNlSGFuZGxlci5wcm90
b3R5cGUpOworCitleHBvcnRzLk1vdXNlSGFuZGxlciA9IE1vdXNlSGFuZGxlcjsKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycycsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi91c2VyYWdlbnQnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGRvbSA9IHJlcXVpcmUo
Ii4uL2xpYi9kb20iKTsKK3ZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50
Iik7CisKK3ZhciBEUkFHX09GRlNFVCA9IDU7IC8vIHBpeGVscworCitmdW5jdGlvbiBEZWZhdWx0
SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CisgICAgbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlv
biA9IG51bGw7CisKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVkaXRvcjsKKyAgICBl
ZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNlZG93biIsIHRoaXMub25Nb3VzZURvd24uYmlu
ZChtb3VzZUhhbmRsZXIpKTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImRibGNsaWNr
IiwgdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7CisgICAgZWRpdG9yLnNl
dERlZmF1bHRIYW5kbGVyKCJ0cmlwbGVjbGljayIsIHRoaXMub25UcmlwbGVDbGljay5iaW5kKG1v
dXNlSGFuZGxlcikpOworICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigicXVhZGNsaWNrIiwg
dGhpcy5vblF1YWRDbGljay5iaW5kKG1vdXNlSGFuZGxlcikpOworICAgIGVkaXRvci5zZXREZWZh
dWx0SGFuZGxlcigibW91c2V3aGVlbCIsIHRoaXMub25Nb3VzZVdoZWVsLmJpbmQobW91c2VIYW5k
bGVyKSk7CisKKyAgICB2YXIgZXhwb3J0cyA9IFsic2VsZWN0IiwgInN0YXJ0U2VsZWN0IiwgImRy
YWciLCAiZHJhZ0VuZCIsICJkcmFnV2FpdCIsCisgICAgICAgICJkcmFnV2FpdEVuZCIsICJzdGFy
dERyYWciLCAiZm9jdXNXYWl0Il07CisKKyAgICBleHBvcnRzLmZvckVhY2goZnVuY3Rpb24oeCkg
eworICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdOworICAgIH0sIHRoaXMpOworCisg
ICAgbW91c2VIYW5kbGVyLnNlbGVjdEJ5TGluZXMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJp
bmQobW91c2VIYW5kbGVyLCAiZ2V0TGluZVJhbmdlIik7CisgICAgbW91c2VIYW5kbGVyLnNlbGVj
dEJ5V29yZHMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQobW91c2VIYW5kbGVyLCAiZ2V0
V29yZFJhbmdlIik7CisKKyAgICBtb3VzZUhhbmRsZXIuJGZvY3VzV2FpdFRpbW91dCA9IDI1MDsK
K30KKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGV2
KSB7CisgICAgICAgIHZhciBpblNlbGVjdGlvbiA9IGV2LmluU2VsZWN0aW9uKCk7CisgICAgICAg
IHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHRoaXMubW91c2Vk
b3duRXZlbnQgPSBldjsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgICAg
ICAgIHZhciBidXR0b24gPSBldi5nZXRCdXR0b24oKTsKKyAgICAgICAgaWYgKGJ1dHRvbiAhPT0g
MCkgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlv
blJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb25SYW5n
ZS5pc0VtcHR5KCk7CisKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25FbXB0eSkgeworICAgICAg
ICAgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICAgICAg
ICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShldi5kb21FdmVudCk7Cisg
ICAgICAgICAgICByZXR1cm47IC8vIHN0b3BwaW5nIGV2ZW50IGhlcmUgYnJlYWtzIGNvbnRleHRt
ZW51IG9uIGZmIG1hYworICAgICAgICB9CisgICAgICAgIGlmIChpblNlbGVjdGlvbiAmJiAhZWRp
dG9yLmlzRm9jdXNlZCgpKSB7CisgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLiRmb2N1c1dhaXRUaW1vdXQgJiYgIXRoaXMuJGNsaWNrU2VsZWN0aW9uKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgiZm9jdXNXYWl0Iik7CisgICAgICAgICAg
ICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpOworICAgICAgICAgICAgICAgIHJldHVybiBldi5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFpblNlbGVjdGlvbiB8fCB0aGlzLiRjbGlja1NlbGVjdGlvbiB8fCBldi5nZXRTaGlmdEtleSgp
KSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0KHBvcyk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaW5TZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA9
IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJkcmFn
V2FpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpOworICAg
ICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTsKKyAgICB9OworCisgICAgdGhpcy5zdGFy
dFNlbGVjdCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICBwb3MgPSBwb3MgfHwgdGhpcy5lZGl0
b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpOworICAg
ICAgICBpZiAodGhpcy5tb3VzZWRvd25FdmVudC5nZXRTaGlmdEtleSgpKSB7CisgICAgICAgICAg
ICB0aGlzLmVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihwb3MpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKCF0aGlzLiRjbGlja1NlbGVjdGlvbikgeworICAgICAgICAgICAg
dGhpcy5lZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgICAgIHRoaXMu
ZWRpdG9yLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuc2V0U3RhdGUoInNlbGVjdCIpOworICAgIH07CisKKyAgICB0aGlzLnNlbGVjdCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgYW5jaG9yLCBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0
aGlzLngsIHRoaXMueSk7CisKKyAgICAgICAgaWYgKHRoaXMuJGNsaWNrU2VsZWN0aW9uKSB7Cisg
ICAgICAgICAgICB2YXIgY21wID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uY29tcGFyZVBvaW50KGN1
cnNvcik7CisKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBh
bmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5lbmQ7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNtcCA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tTZWxlY3Rp
b24uc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBvcmll
bnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24sIGN1
cnNvcik7CisgICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJzb3I7Cisg
ICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihhbmNo
b3Iucm93LCBhbmNob3IuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBlZGl0b3Iuc2VsZWN0
aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKKworICAgICAgICBlZGl0b3IucmVuZGVyZXIu
c2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworCisgICAgdGhpcy5leHRlbmRTZWxlY3Rp
b25CeSA9IGZ1bmN0aW9uKHVuaXROYW1lKSB7CisgICAgICAgIHZhciBhbmNob3IsIGVkaXRvciA9
IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVl
blRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKKyAgICAgICAgdmFyIHJhbmdlID0g
ZWRpdG9yLnNlbGVjdGlvblt1bml0TmFtZV0oY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CisK
KyAgICAgICAgaWYgKHRoaXMuJGNsaWNrU2VsZWN0aW9uKSB7CisgICAgICAgICAgICB2YXIgY21w
U3RhcnQgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpOwor
ICAgICAgICAgICAgdmFyIGNtcEVuZCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2lu
dChyYW5nZS5lbmQpOworCisgICAgICAgICAgICBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5k
IDw9IDApIHsKKyAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5l
bmQ7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgIT0gY3Vyc29yLnJvdyB8fCBy
YW5nZS5lbmQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGN1
cnNvciA9IHJhbmdlLnN0YXJ0OworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXBFbmQgPT0gMSAm
JiBjbXBTdGFydCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tT
ZWxlY3Rpb24uc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPSBj
dXJzb3Iucm93IHx8IHJhbmdlLnN0YXJ0LmNvbHVtbiAhPSBjdXJzb3IuY29sdW1uKQorICAgICAg
ICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNtcFN0YXJ0ID09IC0xICYmIGNtcEVuZCA9PSAxKSB7CisgICAgICAgICAgICAgICAgY3Vyc29y
ID0gcmFuZ2UuZW5kOworICAgICAgICAgICAgICAgIGFuY2hvciA9IHJhbmdlLnN0YXJ0OworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgb3JpZW50ZWRSYW5nZSA9IGNh
bGNSYW5nZU9yaWVudGF0aW9uKHRoaXMuJGNsaWNrU2VsZWN0aW9uLCBjdXJzb3IpOworICAgICAg
ICAgICAgICAgIGN1cnNvciA9IG9yaWVudGVkUmFuZ2UuY3Vyc29yOworICAgICAgICAgICAgICAg
IGFuY2hvciA9IG9yaWVudGVkUmFuZ2UuYW5jaG9yOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywgYW5jaG9y
LmNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bv
c2l0aW9uKGN1cnNvcik7CisKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvcklu
dG9WaWV3KCk7CisgICAgfTsKKworICAgIHRoaXMuc3RhcnREcmFnID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgi
ZHJhZyIpOworICAgICAgICB0aGlzLmRyYWdSYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5n
ZSgpOworICAgICAgICB2YXIgc3R5bGUgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uU3R5bGUoKTsKKyAg
ICAgICAgdGhpcy5kcmFnU2VsZWN0aW9uTWFya2VyID0gZWRpdG9yLnNlc3Npb24uYWRkTWFya2Vy
KHRoaXMuZHJhZ1JhbmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAgZWRpdG9y
LmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIGRvbS5hZGRDc3NDbGFzcyhlZGl0b3IuY29udGFp
bmVyLCAiYWNlX2RyYWdnaW5nIik7CisgICAgICAgIGlmICghdGhpcy4kZHJhZ0tleWJpbmRpbmcp
IHsKKyAgICAgICAgICAgIHRoaXMuJGRyYWdLZXliaW5kaW5nID0geworICAgICAgICAgICAgICAg
IGhhbmRsZUtleWJvYXJkOiBmdW5jdGlvbihkYXRhLCBoYXNoSWQsIGtleVN0cmluZywga2V5Q29k
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoa2V5U3RyaW5nID09ICJlc2MiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiB0aGlzLmNvbW1hbmR9OworICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgY29tbWFuZDogeworICAgICAgICAgICAgICAg
ICAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzZWxmID0gZWRpdG9yLiRtb3VzZUhhbmRsZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmRyYWdDdXJzb3IgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFn
RW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0U2VsZWN0KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBlZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhp
cy4kZHJhZ0tleWJpbmRpbmcpOworICAgIH07CisKKyAgICB0aGlzLmZvY3VzV2FpdCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5tb3VzZWRv
d25FdmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTsKKyAgICAg
ICAgdmFyIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgIGlmIChkaXN0
YW5jZSA+IERSQUdfT0ZGU0VUIHx8dGltZSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA+IHRo
aXMuJGZvY3VzV2FpdFRpbW91dCkKKyAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QoKTsKKyAg
ICB9OworCisgICAgdGhpcy5kcmFnV2FpdCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRp
c3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRv
d25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7CisgICAgICAgIHZhciB0aW1lID0gKG5ldyBEYXRl
KCkpLmdldFRpbWUoKTsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgICAg
ICAgIGlmIChkaXN0YW5jZSA+IERSQUdfT0ZGU0VUKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0
U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0aW1lIC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gZWRpdG9yLmdl
dERyYWdEZWxheSgpKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRoaXMuZHJhZ1dhaXRFbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IHRoaXMubW91c2Vkb3duRXZlbnQuZG9tRXZlbnQgPSBlOworICAgICAgICB0aGlzLnN0YXJ0U2Vs
ZWN0KCk7CisgICAgfTsKKworICAgIHRoaXMuZHJhZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHRoaXMuZHJhZ0N1cnNvciA9IGVkaXRv
ci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLngsIHRoaXMueSk7CisgICAg
ICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0aGlzLmRyYWdDdXJzb3IpOworICAgICAg
ICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworCisgICAg
dGhpcy5kcmFnRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5l
ZGl0b3I7CisgICAgICAgIHZhciBkcmFnQ3Vyc29yID0gdGhpcy5kcmFnQ3Vyc29yOworICAgICAg
ICB2YXIgZHJhZ1JhbmdlID0gdGhpcy5kcmFnUmFuZ2U7CisgICAgICAgIGRvbS5yZW1vdmVDc3ND
bGFzcyhlZGl0b3IuY29udGFpbmVyLCAiYWNlX2RyYWdnaW5nIik7CisgICAgICAgIGVkaXRvci5z
ZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLmRyYWdTZWxlY3Rpb25NYXJrZXIpOworICAgICAgICBl
ZGl0b3Iua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kZHJhZ0tleWJpbmRp
bmcpOworCisgICAgICAgIGlmICghZHJhZ0N1cnNvcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKGUgJiYgKGUuY3Ry
bEtleSB8fCBlLmFsdEtleSkpIHsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNl
c3Npb247CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBkcmFnUmFuZ2U7CisgICAgICAgICAg
ICBuZXdSYW5nZS5lbmQgPSBzZXNzaW9uLmluc2VydChkcmFnQ3Vyc29yLCBzZXNzaW9uLmdldFRl
eHRSYW5nZShkcmFnUmFuZ2UpKTsKKyAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0ID0gZHJhZ0N1
cnNvcjsKKyAgICAgICAgfSBlbHNlIGlmIChkcmFnUmFuZ2UuY29udGFpbnMoZHJhZ0N1cnNvci5y
b3csIGRyYWdDdXJzb3IuY29sdW1uKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gZWRpdG9yLm1vdmVUZXh0KGRyYWdS
YW5nZSwgZHJhZ0N1cnNvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5ld1JhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0
aW9uUmFuZ2UobmV3UmFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLm9uRG91YmxlQ2xpY2sgPSBm
dW5jdGlvbihldikgeworICAgICAgICB2YXIgcG9zID0gZXYuZ2V0RG9jdW1lbnRQb3NpdGlvbigp
OworICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBzZXNzaW9u
ID0gZWRpdG9yLnNlc3Npb247CisKKyAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRCcmFj
a2V0UmFuZ2UocG9zKTsKKyAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICBpZiAocmFu
Z2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07Cisg
ICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSByYW5nZTsKKyAgICAgICAgICAgIHRoaXMuc2V0
U3RhdGUoInNlbGVjdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFdvcmRSYW5nZShw
b3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0QnlXb3Jk
cyIpOworICAgIH07CisKKyAgICB0aGlzLm9uVHJpcGxlQ2xpY2sgPSBmdW5jdGlvbihldikgewor
ICAgICAgICB2YXIgcG9zID0gZXYuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOworICAgICAgICB2YXIg
ZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0QnlM
aW5lcyIpOworICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24u
Z2V0TGluZVJhbmdlKHBvcy5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uUXVhZENsaWNrID0g
ZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgICAg
ICAgIGVkaXRvci5zZWxlY3RBbGwoKTsKKyAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSBl
ZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgibnVsbCIp
OworICAgIH07CisKKyAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKGV2KSB7CisgICAg
ICAgIGlmIChldi5nZXRTaGlmdEtleSgpIHx8IGV2LmdldEFjY2VsS2V5KCkpeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsK
KyAgICAgICAgdmFyIGlzU2Nyb2xhYmxlID0gZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xsYWJsZUJ5
KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7CisgICAgICAgIGlm
IChpc1Njcm9sYWJsZSkgeworICAgICAgICAgICAgdGhpcy4kcGFzc1Njcm9sbEV2ZW50ID0gZmFs
c2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy4kcGFzc1Njcm9sbEV2
ZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKCF0aGlzLiRz
Y3JvbGxTdG9wVGltZW91dCkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAg
ICAgICAgICAgICAgICB0aGlzLiRzY3JvbGxTdG9wVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJHBhc3NTY3JvbGxFdmVudCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJHNjcm9sbFN0b3BUaW1lb3V0ID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9LCAyMDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVl
bFkgKiBldi5zcGVlZCk7CisgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpOworICAg
IH07CisKK30pLmNhbGwoRGVmYXVsdEhhbmRsZXJzLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuRGVm
YXVsdEhhbmRsZXJzID0gRGVmYXVsdEhhbmRsZXJzOworCitmdW5jdGlvbiBjYWxjRGlzdGFuY2Uo
YXgsIGF5LCBieCwgYnkpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGJ4IC0gYXgs
IDIpICsgTWF0aC5wb3coYnkgLSBheSwgMikpOworfQorCitmdW5jdGlvbiBjYWxjUmFuZ2VPcmll
bnRhdGlvbihyYW5nZSwgY3Vyc29yKSB7CisgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5n
ZS5lbmQucm93KQorICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5jb2x1bW4gLSByYW5nZS5z
dGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uOworICAgIGVsc2UKKyAgICAgICAgdmFyIGNt
cCA9IDIgKiBjdXJzb3Iucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gcmFuZ2UuZW5kLnJvdzsKKwor
ICAgIGlmIChjbXAgPCAwKQorICAgICAgICByZXR1cm4ge2N1cnNvcjogcmFuZ2Uuc3RhcnQsIGFu
Y2hvcjogcmFuZ2UuZW5kfTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB7Y3Vyc29yOiByYW5n
ZS5lbmQsIGFuY2hvcjogcmFuZ2Uuc3RhcnR9OworfQorCit9KTsKKworYWNlLmRlZmluZSgnYWNl
L21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnICwgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7
Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKKworZnVuY3Rpb24gR3V0dGVy
SGFuZGxlcihtb3VzZUhhbmRsZXIpIHsKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVk
aXRvcjsKKyAgICB2YXIgZ3V0dGVyID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllcjsKKwor
ICAgIG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImd1dHRlcm1vdXNlZG93
biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBndXR0ZXIuZ2V0UmVn
aW9uKGUpOworCisgICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0
aW9uKCkucm93OworICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLnNlc3Npb24uc2VsZWN0
aW9uOworCisgICAgICAgIGlmIChlLmdldFNoaWZ0S2V5KCkpCisgICAgICAgICAgICBzZWxlY3Rp
b24uc2VsZWN0VG8ocm93LCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZS5k
b21FdmVudC5kZXRhaWwgPT0gMikgeworICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3RBbGwo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5z
ZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgbW91c2VIYW5k
bGVyLmNhcHR1cmVNb3VzZShlLCAic2VsZWN0QnlMaW5lcyIpOworICAgICAgICByZXR1cm4gZS5w
cmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworCisKKyAgICB2YXIgdG9vbHRpcFRpbWVvdXQsIG1v
dXNlRXZlbnQsIHRvb2x0aXAsIHRvb2x0aXBBbm5vdGF0aW9uOworICAgIGZ1bmN0aW9uIGNyZWF0
ZVRvb2x0aXAoKSB7CisgICAgICAgIHRvb2x0aXAgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gImFjZV9ndXR0ZXItdG9vbHRpcCI7CisgICAg
ICAgIHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgZWRpdG9yLmNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0b29sdGlwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzaG93VG9v
bHRpcCgpIHsKKyAgICAgICAgaWYgKCF0b29sdGlwKSB7CisgICAgICAgICAgICBjcmVhdGVUb29s
dGlwKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvdyA9IG1vdXNlRXZlbnQuZ2V0RG9jdW1l
bnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgdmFyIGFubm90YXRpb24gPSBndXR0ZXIuJGFubm90
YXRpb25zW3Jvd107CisgICAgICAgIGlmICghYW5ub3RhdGlvbikKKyAgICAgICAgICAgIHJldHVy
biBoaWRlVG9vbHRpcCgpOworCisgICAgICAgIHZhciBtYXhSb3cgPSBlZGl0b3Iuc2Vzc2lvbi5n
ZXRMZW5ndGgoKTsKKyAgICAgICAgaWYgKHJvdyA9PSBtYXhSb3cpIHsKKyAgICAgICAgICAgIHZh
ciBzY3JlZW5Sb3cgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVzKDAs
IG1vdXNlRXZlbnQueSkucm93OworICAgICAgICAgICAgdmFyIHBvcyA9IG1vdXNlRXZlbnQuJHBv
czsKKyAgICAgICAgICAgIGlmIChzY3JlZW5Sb3cgPiBlZGl0b3Iuc2Vzc2lvbi5kb2N1bWVudFRv
U2NyZWVuUm93KHBvcy5yb3csIHBvcy5jb2x1bW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBo
aWRlVG9vbHRpcCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRvb2x0aXBBbm5vdGF0aW9u
ID09IGFubm90YXRpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRvb2x0aXBBbm5v
dGF0aW9uID0gYW5ub3RhdGlvbi50ZXh0LmpvaW4oIjxici8+Iik7CisKKyAgICAgICAgdG9vbHRp
cC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgdG9vbHRpcC5pbm5lckhUTUwgPSB0
b29sdGlwQW5ub3RhdGlvbjsKKyAgICAgICAgZWRpdG9yLm9uKCJtb3VzZXdoZWVsIiwgaGlkZVRv
b2x0aXApOworCisgICAgICAgIG1vdmVUb29sdGlwKG1vdXNlRXZlbnQpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGhpZGVUb29sdGlwKCkgeworICAgICAgICBpZiAodG9vbHRpcFRpbWVvdXQpCisg
ICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IGNsZWFyVGltZW91dCh0b29sdGlwVGltZW91dCk7
CisgICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikgeworICAgICAgICAgICAgdG9vbHRpcC5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgdG9vbHRpcEFubm90YXRpb24gPSBu
dWxsOworICAgICAgICAgICAgZWRpdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwi
LCBoaWRlVG9vbHRpcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBtb3ZlVG9v
bHRpcChlKSB7CisgICAgICAgIHZhciByZWN0ID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIHRvb2x0aXAuc3R5bGUubGVmdCA9IGUueCAr
IDE1ICsgInB4IjsKKyAgICAgICAgaWYgKGUueSArIDMgKiBlZGl0b3IucmVuZGVyZXIubGluZUhl
aWdodCArIDE1IDwgcmVjdC5ib3R0b20pIHsKKyAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUuYm90
dG9tID0gICIiOworICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS50b3AgPSAgZS55ICsgMTUgKyAi
cHgiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS50b3AgPSAg
IiI7CisgICAgICAgICAgICB0b29sdGlwLnN0eWxlLmJvdHRvbSA9IHJlY3QuYm90dG9tIC0gZS55
ICsgNSArICJweCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb3VzZUhhbmRsZXIuZWRpdG9y
LnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZW1vdmUiLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgIHZhciB0YXJnZXQgPSBlLmRvbUV2ZW50LnRhcmdldCB8fCBlLmRvbUV2ZW50LnNyY0VsZW1l
bnQ7CisgICAgICAgIGlmIChkb20uaGFzQ3NzQ2xhc3ModGFyZ2V0LCAiYWNlX2ZvbGQtd2lkZ2V0
IikpCisgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTsKKworICAgICAgICBpZiAodG9v
bHRpcEFubm90YXRpb24pCisgICAgICAgICAgICBtb3ZlVG9vbHRpcChlKTsKKworICAgICAgICBt
b3VzZUV2ZW50ID0gZTsKKyAgICAgICAgaWYgKHRvb2x0aXBUaW1lb3V0KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAobW91
c2VFdmVudCAmJiAhbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKQorICAgICAgICAgICAgICAg
IHNob3dUb29sdGlwKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaGlkZVRv
b2x0aXAoKTsKKyAgICAgICAgfSwgNTApOworICAgIH0pOworCisgICAgZXZlbnQuYWRkTGlzdGVu
ZXIoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIsICJtb3VzZW91dCIsIGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgbW91c2VFdmVudCA9IG51bGw7CisgICAgICAgIGlmICghdG9vbHRpcEFubm90YXRpb24g
fHwgdG9vbHRpcFRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdG9vbHRp
cFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdG9vbHRpcFRp
bWVvdXQgPSBudWxsOworICAgICAgICAgICAgaGlkZVRvb2x0aXAoKTsKKyAgICAgICAgfSwgNTAp
OworICAgIH0pOworCit9CisKK2V4cG9ydHMuR3V0dGVySGFuZGxlciA9IEd1dHRlckhhbmRsZXI7
CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvbW91c2VfZXZlbnQnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdl
bnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50
ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4v
bGliL3VzZXJhZ2VudCIpOwordmFyIE1vdXNlRXZlbnQgPSBleHBvcnRzLk1vdXNlRXZlbnQgPSBm
dW5jdGlvbihkb21FdmVudCwgZWRpdG9yKSB7CisgICAgdGhpcy5kb21FdmVudCA9IGRvbUV2ZW50
OworICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICAgIAorICAgIHRoaXMueCA9IHRoaXMuY2xp
ZW50WCA9IGRvbUV2ZW50LmNsaWVudFg7CisgICAgdGhpcy55ID0gdGhpcy5jbGllbnRZID0gZG9t
RXZlbnQuY2xpZW50WTsKKworICAgIHRoaXMuJHBvcyA9IG51bGw7CisgICAgdGhpcy4kaW5TZWxl
Y3Rpb24gPSBudWxsOworICAgIAorICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7
CisgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Cit9OworCisoZnVuY3Rpb24oKSB7
ICAKKyAgICAKKyAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24odGhpcy5kb21FdmVudCk7CisgICAgICAgIHRoaXMucHJv
cGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsKKyAgICB9OworICAgIAorICAgIHRoaXMucHJldmVudERl
ZmF1bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQodGhpcy5k
b21FdmVudCk7CisgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7CisgICAgfTsK
KyAgICAKKyAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdCgpOworICAgIH07CisgICAg
dGhpcy5nZXREb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz
LiRwb3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kcG9zOworICAgICAgICAKKyAgICAgICAg
dGhpcy4kcG9zID0gdGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMo
dGhpcy5jbGllbnRYLCB0aGlzLmNsaWVudFkpOworICAgICAgICByZXR1cm4gdGhpcy4kcG9zOwor
ICAgIH07CisgICAgdGhpcy5pblNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
dGhpcy4kaW5TZWxlY3Rpb24gIT09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5T
ZWxlY3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9y
OworICAgICAgICAKKyAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKSB7CisgICAgICAg
ICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJh
bmdlKCk7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXREb2N1bWVudFBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb25SYW5nZS5jb250YWlu
cyhwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247CisgICAgfTsKKyAgICB0aGlzLmdldEJ1dHRvbiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZXZlbnQuZ2V0QnV0dG9uKHRoaXMuZG9tRXZl
bnQpOworICAgIH07CisgICAgdGhpcy5nZXRTaGlmdEtleSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5kb21FdmVudC5zaGlmdEtleTsKKyAgICB9OworICAgIAorICAgIHRoaXMu
Z2V0QWNjZWxLZXkgPSB1c2VyYWdlbnQuaXNNYWMKKyAgICAgICAgPyBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMuZG9tRXZlbnQubWV0YUtleTsgfQorICAgICAgICA6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5OyB9OworICAgIAorfSkuY2FsbChNb3VzZUV2ZW50LnBy
b3RvdHlwZSk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvZHJhZ2Ryb3AnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4v
bGliL2V2ZW50Iik7CisKK3ZhciBEcmFnZHJvcEhhbmRsZXIgPSBmdW5jdGlvbihtb3VzZUhhbmRs
ZXIpIHsKKyAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVkaXRvcjsKKyAgICB2YXIgZHJh
Z1NlbGVjdGlvbk1hcmtlciwgeCwgeTsKKyAgICB2YXIgdGltZXJJZCwgcmFuZ2UsIGlzQmFja3dh
cmRzOworICAgIHZhciBkcmFnQ3Vyc29yLCBjb3VudGVyID0gMDsKKworICAgIHZhciBtb3VzZVRh
cmdldCA9IGVkaXRvci5jb250YWluZXI7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJn
ZXQsICJkcmFnZW50ZXIiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlZGl0b3IuZ2V0UmVh
ZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY291bnRlcisrOworICAgICAg
ICBpZiAoIWRyYWdTZWxlY3Rpb25NYXJrZXIpIHsKKyAgICAgICAgICAgIHJhbmdlID0gZWRpdG9y
LmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICBpc0JhY2t3YXJkcyA9IGVkaXRvci5z
ZWxlY3Rpb24uaXNCYWNrd2FyZHMoKTsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IGVkaXRvci5n
ZXRTZWxlY3Rpb25TdHlsZSgpOworICAgICAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IGVk
aXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7Cisg
ICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGNsZWFySW50
ZXJ2YWwodGltZXJJZCk7CisgICAgICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwob25EcmFn
SW50ZXJ2YWwsIDIwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERl
ZmF1bHQoZSk7CisgICAgfSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwg
ImRyYWdvdmVyIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHggPSBlLmNsaWVudFg7CisgICAgICAg
IHkgPSBlLmNsaWVudFk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsK
KyAgICB9KTsKKyAgICAKKyAgICB2YXIgb25EcmFnSW50ZXJ2YWwgPSAgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0
ZXMoeCwgeSk7CisgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihkcmFnQ3Vyc29y
KTsKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7CisgICAg
fTsKKyAgICAKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdsZWF2ZSIs
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjb3VudGVyLS07CisgICAgICAgIGlmIChjb3VudGVyID4g
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsK
KyAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxlY3Rpb25NYXJrZXIp
OworICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDsKKyAgICAgICAgZWRpdG9yLnNl
bGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgaXNCYWNrd2FyZHMpOworICAgICAgICBy
ZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgfSk7CisgICAgCisgICAgZXZlbnQu
YWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcm9wIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBp
ZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNv
dW50ZXIgPSAwOworICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOworICAgICAgICBlZGl0
b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIoZHJhZ1NlbGVjdGlvbk1hcmtlcik7CisgICAgICAgIGRy
YWdTZWxlY3Rpb25NYXJrZXIgPSBudWxsOworCisgICAgICAgIHJhbmdlLmVuZCA9IGVkaXRvci5z
ZXNzaW9uLmluc2VydChkcmFnQ3Vyc29yLCBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdUZXh0Jykp
OworICAgICAgICByYW5nZS5zdGFydCA9IGRyYWdDdXJzb3I7CisgICAgICAgIGVkaXRvci5mb2N1
cygpOworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsK
KyAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgIH0pOworCit9Owor
CitleHBvcnRzLkRyYWdkcm9wSGFuZGxlciA9IERyYWdkcm9wSGFuZGxlcjsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW91c2UvZm9sZF9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitmdW5j
dGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHsKKworICAgIGVkaXRvci5vbigiY2xpY2siLCBmdW5j
dGlvbihlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigp
OworICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworICAgICAgICB2YXIgZm9s
ZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uLCAxKTsK
KyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGlmIChlLmdldEFjY2VsS2V5KCkpCisg
ICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVGb2xkKGZvbGQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHNlc3Npb24uZXhwYW5kRm9sZChmb2xkKTsKKworICAgICAgICAg
ICAgZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGVkaXRvci5vbigiZ3V0dGVy
bW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRv
ci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOworCisgICAgICAgIGlmIChndXR0
ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikgeworICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0
RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9y
LnNlc3Npb247CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBzZXNzaW9u
LmZvbGRXaWRnZXRzW3Jvd10pCisgICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xk
V2lkZ2V0Q2xpY2socm93LCBlKTsKKyAgICAgICAgICAgIGUuc3RvcCgpOworICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICBlZGl0b3Iub24oImd1dHRlcmRibGNsaWNrIiwgZnVuY3Rpb24oZSkgewor
ICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5n
ZXRSZWdpb24oZSk7CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSAiZm9sZFdpZGdldHMi
KSB7CisgICAgICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93Owor
ICAgICAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgICAgIHZh
ciBmdyA9IHNlc3Npb24uZm9sZFdpZGdldHM7CisgICAgICAgICAgICBpZiAoIWZ3IHx8IGZ3W3Jv
d10pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB2YXIgaSA9IHJvdyAt
IDEsIGZpcnN0UmFuZ2U7CisgICAgICAgICAgICB3aGlsZSAoaSA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGMgPSBmd1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKQorICAg
ICAgICAgICAgICAgICAgICBjID0gZndbaV0gPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChjID09ICJzdGFydCIpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0UmFuZ2UoaSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZmlyc3RSYW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmFu
Z2UgPSByYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLmVuZC5y
b3cgPj0gcm93KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChpID09IC0xKQorICAgICAgICAgICAgICAgIHJhbmdlID0gZmlyc3RSYW5nZTsKKworICAgICAg
ICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0
LnJvdzsKKyAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHJvdywg
c2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoLCAxKTsKKworICAgICAgICAgICAgICAgIGlmIChm
b2xkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xkKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZEZv
bGQoIi4uLiIsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNj
cm9sbEN1cnNvckludG9WaWV3KHtyb3c6IHJhbmdlLnN0YXJ0LnJvdywgY29sdW1uOiAwfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZS5zdG9wKCk7Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KKworZXhwb3J0cy5Gb2xkSGFuZGxlciA9IEZvbGRIYW5kbGVy
OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2tleWJvYXJkL2tleWJpbmRpbmcnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIva2V5cycsICdhY2UvbGliL2V2ZW50
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBrZXlVdGls
ICA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIv
ZXZlbnQiKTsKKwordmFyIEtleUJpbmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICB0aGlz
LiRlZGl0b3IgPSBlZGl0b3I7CisgICAgdGhpcy4kZGF0YSA9IHsgfTsKKyAgICB0aGlzLiRoYW5k
bGVycyA9IFtdOworICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZWRpdG9yLmNvbW1hbmRzKTsK
K307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyID0gZnVuY3Rp
b24oa2IpIHsKKyAgICAgICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kZGVmYXVs
dEhhbmRsZXIpOworICAgICAgICB0aGlzLiRkZWZhdWx0SGFuZGxlciA9IGtiOworICAgICAgICB0
aGlzLmFkZEtleWJvYXJkSGFuZGxlcihrYiwgMCk7CisgICAgICAgIHRoaXMuJGRhdGEgPSB7ZWRp
dG9yOiB0aGlzLiRlZGl0b3J9OworICAgIH07CisKKyAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxl
ciA9IGZ1bmN0aW9uKGtiKSB7CisgICAgICAgIGlmICh0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5k
bGVycy5sZW5ndGggLSAxXSA9PSBrYikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3
aGlsZSAodGhpcy4kaGFuZGxlcnNbMV0pCisgICAgICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJk
SGFuZGxlcih0aGlzLiRoYW5kbGVyc1sxXSk7CisKKyAgICAgICAgdGhpcy5hZGRLZXlib2FyZEhh
bmRsZXIoa2IsIDEpOworICAgIH07CisKKyAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlciA9IGZ1
bmN0aW9uKGtiLCBwb3MpIHsKKyAgICAgICAgaWYgKCFrYikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKKyAgICAgICAgaWYg
KGkgIT0gLTEpCisgICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UoaSwgMSk7CisKKyAg
ICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5w
dXNoKGtiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNl
KHBvcywgMCwga2IpOworCisgICAgICAgIGlmIChpID09IC0xICYmIGtiLmF0dGFjaCkKKyAgICAg
ICAgICAgIGtiLmF0dGFjaCh0aGlzLiRlZGl0b3IpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92
ZUtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7CisgICAgICAgIHZhciBpID0gdGhpcy4k
aGFuZGxlcnMuaW5kZXhPZihrYik7CisgICAgICAgIGlmIChpID09IC0xKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UoaSwgMSk7CisgICAg
ICAgIGtiLmRldGFjaCAmJiBrYi5kZXRhY2godGhpcy4kZWRpdG9yKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5sZW5ndGgg
LSAxXTsKKyAgICB9OworCisgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMgPSBmdW5jdGlv
biAoaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUpIHsKKyAgICAgICAgdmFyIHRvRXhlY3V0
ZTsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgdmFyIGNvbW1hbmRzID0g
dGhpcy4kZWRpdG9yLmNvbW1hbmRzOworCisgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLiRoYW5k
bGVycy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRs
ZXJzW2ldLmhhbmRsZUtleWJvYXJkKAorICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEsIGhhc2hJ
ZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlCisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYg
KCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5kKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKHRvRXhlY3V0ZS5jb21tYW5kID09ICJudWxsIikgeworICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0b0V4ZWN1dGUucGFzc0V2ZW50ICE9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVj
KHRvRXhlY3V0ZS5jb21tYW5kLCB0aGlzLiRlZGl0b3IsIHRvRXhlY3V0ZS5hcmdzLCBlKTsgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBl
ICYmIGhhc2hJZCAhPSAtMSkKKyAgICAgICAgICAgICAgICBldmVudC5zdG9wRXZlbnQoZSk7Cisg
ICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbW1hbmRL
ZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKKyAgICAgICAgdmFyIGtleVN0cmlu
ZyA9IGtleVV0aWwua2V5Q29kZVRvU3RyaW5nKGtleUNvZGUpOworICAgICAgICB0aGlzLiRjYWxs
S2V5Ym9hcmRIYW5kbGVycyhoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSk7CisgICAgfTsK
KworICAgIHRoaXMub25UZXh0SW5wdXQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBz
dWNjZXNzID0gdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoLTEsIHRleHQpOworICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICB0aGlzLiRlZGl0b3IuY29tbWFuZHMuZXhlYygiaW5z
ZXJ0c3RyaW5nIiwgdGhpcy4kZWRpdG9yLCB0ZXh0KTsKKyAgICB9OworCit9KS5jYWxsKEtleUJp
bmRpbmcucHJvdG90eXBlKTsKKworZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGluZzsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvY29uZmlnJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycs
ICdhY2UvbGliL25ldCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3NlbGVjdGlvbics
ICdhY2UvbW9kZS90ZXh0JywgJ2FjZS9yYW5nZScsICdhY2UvZG9jdW1lbnQnLCAnYWNlL2JhY2tn
cm91bmRfdG9rZW5pemVyJywgJ2FjZS9zZWFyY2hfaGlnaGxpZ2h0JywgJ2FjZS9lZGl0X3Nlc3Np
b24vZm9sZGluZycsICdhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2gnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4v
Y29uZmlnIik7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJl
cXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQiKTsKK3Zh
ciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0
dGVyOwordmFyIFNlbGVjdGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwor
dmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi9tb2RlL3RleHQiKS5Nb2RlOwordmFyIFJhbmdlID0g
cmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIERvY3VtZW50ID0gcmVxdWlyZSgiLi9kb2N1
bWVudCIpLkRvY3VtZW50OwordmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSByZXF1aXJlKCIuL2Jh
Y2tncm91bmRfdG9rZW5pemVyIikuQmFja2dyb3VuZFRva2VuaXplcjsKK3ZhciBTZWFyY2hIaWdo
bGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQ7CisK
K3ZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKKyAgICB0aGlzLiRicmVh
a3BvaW50cyA9IFtdOworICAgIHRoaXMuJGRlY29yYXRpb25zID0gW107CisgICAgdGhpcy4kZnJv
bnRNYXJrZXJzID0ge307CisgICAgdGhpcy4kYmFja01hcmtlcnMgPSB7fTsKKyAgICB0aGlzLiRt
YXJrZXJJZCA9IDE7CisgICAgdGhpcy4kdW5kb1NlbGVjdCA9IHRydWU7CisgICAgCisgICAgdGhp
cy4kZm9sZERhdGEgPSBbXTsKKyAgICB0aGlzLiRmb2xkRGF0YS50b1N0cmluZyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgc3RyID0gIiI7CisgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlv
bihmb2xkTGluZSkgeworICAgICAgICAgICAgc3RyICs9ICJcbiIgKyBmb2xkTGluZS50b1N0cmlu
ZygpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHN0cjsKKyAgICB9CisgICAgdGhpcy5v
bigiY2hhbmdlRm9sZCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpOworICAgIHRoaXMu
JG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOworICAgIAorICAgIGlmICh0eXBl
b2YgdGV4dCAhPSAib2JqZWN0IiB8fCAhdGV4dC5nZXRMaW5lKQorICAgICAgICB0ZXh0ID0gbmV3
IERvY3VtZW50KHRleHQpOworCisgICAgdGhpcy5zZXREb2N1bWVudCh0ZXh0KTsKKworICAgIHRo
aXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbih0aGlzKTsKKyAgICB0aGlzLnNldE1vZGUobW9k
ZSk7Cit9OworCisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZl
bnRFbWl0dGVyKTsKKyAgICB0aGlzLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7CisgICAg
ICAgIGlmICh0aGlzLmRvYykKKyAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92ZUxpc3RlbmVyKCJj
aGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CisKKyAgICAgICAgdGhpcy5kb2MgPSBkb2M7CisgICAg
ICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworCisgICAgICAgIGlmICh0aGlz
LmJnVG9rZW5pemVyKQorICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0
aGlzLmdldERvY3VtZW50KCkpOworCisgICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTsKKyAgICB9
OworICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZG9jOworICAgIH07CisgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSA9IGZ1bmN0aW9uKGRvY1Jv
dykgeworICAgICAgICBpZiAoIWRvY1JvdykgeworICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2Fj
aGUgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlID0gW107CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0Nh
Y2hlSW5kZXgodGhpcy4kZG9jUm93Q2FjaGUsIGRvY1JvdykgKyAxOworICAgICAgICB2YXIgbCA9
IHRoaXMuJGRvY1Jvd0NhY2hlLmxlbmd0aDsKKyAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUuc3Bs
aWNlKGksIGwpOworICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5zcGxpY2UoaSwgbCk7CisK
KyAgICB9OworCisgICAgdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCA9IGZ1bmN0aW9uKGNhY2hlQXJy
YXksIHZhbCkgeworICAgICAgICB2YXIgbG93ID0gMDsKKyAgICAgICAgdmFyIGhpID0gY2FjaGVB
cnJheS5sZW5ndGggLSAxOworCisgICAgICAgIHdoaWxlIChsb3cgPD0gaGkpIHsKKyAgICAgICAg
ICAgIHZhciBtaWQgPSAobG93ICsgaGkpID4+IDE7CisgICAgICAgICAgICB2YXIgYyA9IGNhY2hl
QXJyYXlbbWlkXTsKKworICAgICAgICAgICAgaWYgKHZhbCA+IGMpCisgICAgICAgICAgICAgICAg
bG93ID0gbWlkICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA8IGMpCisgICAgICAgICAg
ICAgICAgaGkgPSBtaWQgLSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBtaWQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbG93IC0xOworICAgIH07CisK
KyAgICB0aGlzLnJlc2V0Q2FjaGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vZGlm
aWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAgICAgdGhpcy4k
cm93TGVuZ3RoQ2FjaGUgPSBbXTsKKyAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAg
ICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCisgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVy
LnN0YXJ0KDApOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgdmFyIGZvbGQgPSBlLmRhdGE7CisgICAgICAgIHRoaXMuJHJlc2V0Um93Q2Fj
aGUoZm9sZC5zdGFydC5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rp
b24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHRoaXMuJG1vZGlm
aWVkID0gdHJ1ZTsKKworICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGRlbHRhLnJhbmdlLnN0
YXJ0LnJvdyk7CisKKyAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVy
bmFsRGF0YU9uQ2hhbmdlKGUpOworICAgICAgICBpZiAoIXRoaXMuJGZyb21VbmRvICYmIHRoaXMu
JHVuZG9NYW5hZ2VyICYmICFkZWx0YS5pZ25vcmUpIHsKKyAgICAgICAgICAgIHRoaXMuJGRlbHRh
c0RvYy5wdXNoKGRlbHRhKTsKKyAgICAgICAgICAgIGlmIChyZW1vdmVkRm9sZHMgJiYgcmVtb3Zl
ZEZvbGRzLmxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZGVsdGFzRm9sZC5w
dXNoKHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlRm9sZHMiLAorICAgICAg
ICAgICAgICAgICAgICBmb2xkczogIHJlbW92ZWRGb2xkcworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hl
ZHVsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci4kdXBkYXRlT25D
aGFuZ2UoZGVsdGEpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCBlKTsKKyAgICB9Owor
ICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHRoaXMuZG9jLnNl
dFZhbHVlKHRleHQpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwgMCk7
CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAgICAgdGhp
cy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAgICAgdGhpcy4kZGVsdGFzID0gW107CisgICAgICAg
IHRoaXMuJGRlbHRhc0RvYyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107Cisg
ICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgpOworICAgIH07CisgICAgdGhpcy5n
ZXRWYWx1ZSA9CisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbjsKKyAgICB9OworICAg
IHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYmdU
b2tlbml6ZXIuZ2V0U3RhdGUocm93KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVu
Y3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFRva2Vucyhy
b3cpOworICAgIH07CisgICAgdGhpcy5nZXRUb2tlbkF0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKKyAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7
CisgICAgICAgIHZhciB0b2tlbiwgYyA9IDA7CisgICAgICAgIGlmIChjb2x1bW4gPT0gbnVsbCkg
eworICAgICAgICAgICAgaSA9IHRva2Vucy5sZW5ndGggLSAxOworICAgICAgICAgICAgYyA9IHRo
aXMuZ2V0TGluZShyb3cpLmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
YyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChjID49IGNv
bHVtbikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgIGlmICghdG9rZW4pCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgdG9rZW4uaW5kZXggPSBpOworICAgICAgICB0
b2tlbi5zdGFydCA9IGMgLSB0b2tlbi52YWx1ZS5sZW5ndGg7CisgICAgICAgIHJldHVybiB0b2tl
bjsKKyAgICB9OworICAgIHRoaXMuc2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbih1bmRvTWFuYWdl
cikgeworICAgICAgICB0aGlzLiR1bmRvTWFuYWdlciA9IHVuZG9NYW5hZ2VyOworICAgICAgICB0
aGlzLiRkZWx0YXMgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107CisgICAgICAg
IHRoaXMuJGRlbHRhc0ZvbGQgPSBbXTsKKworICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01h
bmFnZXIpCisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTsKKwor
ICAgICAgICBpZiAodW5kb01hbmFnZXIpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsK
KworICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgc2VsZi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRm9sZC5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgZ3Jv
dXA6ICJmb2xkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhczogc2VsZi4kZGVsdGFz
Rm9sZAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4k
ZGVsdGFzRm9sZCA9IFtdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChzZWxmLiRkZWx0YXNEb2MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRl
bHRhcy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAiZG9jIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbHRhczogc2VsZi4kZGVsdGFzRG9jCisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNEb2MgPSBbXTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzLmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW5kb01hbmFnZXIuZXhlY3V0ZSh7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICJhY2V1cGRhdGUiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnczogW3NlbGYuJGRlbHRhcywgc2VsZl0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzID0g
W107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlciA9
CisgICAgICAgICAgICAgICAgbGFuZy5kZWZlcnJlZENhbGwodGhpcy4kc3luY0luZm9ybVVuZG9N
YW5hZ2VyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRkZWZhdWx0VW5kb01hbmFn
ZXIgPSB7CisgICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sCisgICAgICAgIHJlZG86IGZ1bmN0
aW9uKCkge30sCisgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9CisgICAgfTsKKyAgICB0aGlz
LmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1bmRv
TWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7CisgICAgfTsKKyAgICB0aGlzLmdl
dFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFi
cygpKSB7CisgICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0aGlzLmdl
dFRhYlNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gIlx0IjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiR1c2VTb2Z0VGFicyA9IHRydWU7CisgICAg
dGhpcy5zZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKHVzZVNvZnRUYWJzKSB7CisgICAgICAgIGlm
ICh0aGlzLiR1c2VTb2Z0VGFicyA9PT0gdXNlU29mdFRhYnMpIHJldHVybjsKKworICAgICAgICB0
aGlzLiR1c2VTb2Z0VGFicyA9IHVzZVNvZnRUYWJzOworICAgIH07CisgICAgdGhpcy5nZXRVc2VT
b2Z0VGFicyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29mdFRhYnM7
CisgICAgfTsKKworICAgIHRoaXMuJHRhYlNpemUgPSA0OworICAgIHRoaXMuc2V0VGFiU2l6ZSA9
IGZ1bmN0aW9uKHRhYlNpemUpIHsKKyAgICAgICAgaWYgKGlzTmFOKHRhYlNpemUpIHx8IHRoaXMu
JHRhYlNpemUgPT09IHRhYlNpemUpIHJldHVybjsKKworICAgICAgICB0aGlzLiRtb2RpZmllZCA9
IHRydWU7CisgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107CisgICAgICAgIHRoaXMu
JHRhYlNpemUgPSB0YWJTaXplOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VUYWJTaXplIik7
CisgICAgfTsKKyAgICB0aGlzLmdldFRhYlNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJHRhYlNpemU7CisgICAgfTsKKyAgICB0aGlzLmlzVGFiU3RvcCA9IGZ1bmN0aW9u
KHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFicyAmJiAocG9zaXRp
b24uY29sdW1uICUgdGhpcy4kdGFiU2l6ZSA9PSAwKTsKKyAgICB9OworCisgICAgdGhpcy4kb3Zl
cndyaXRlID0gZmFsc2U7CisgICAgdGhpcy5zZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3Jp
dGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJG92ZXJ3cml0ZSA9PSBvdmVyd3JpdGUpIHJldHVybjsK
KworICAgICAgICB0aGlzLiRvdmVyd3JpdGUgPSBvdmVyd3JpdGU7CisgICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZU92ZXJ3cml0ZSIpOworICAgIH07CisgICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTsKKyAgICB9OworICAg
IHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0T3Zl
cndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpOworICAgIH07CisgICAgdGhpcy5hZGRHdXR0ZXJEZWNv
cmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRk
ZWNvcmF0aW9uc1tyb3ddKQorICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICIi
OworICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddICs9ICIgIiArIGNsYXNzTmFtZTsKKyAg
ICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRo
aXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7Cisg
ICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gPSAodGhpcy4kZGVjb3JhdGlvbnNbcm93XSB8
fCAiIikucmVwbGFjZSgiICIgKyBjbGFzc05hbWUsICIiKTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzOworICAgIH07
CisgICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAgICAgdGhp
cy4kYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPHJvd3MubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0gImFjZV9i
cmVha3BvaW50IjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3Bv
aW50Iiwge30pOworICAgIH07CisgICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFrcG9pbnQg
PSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgeworICAgICAgICBpZiAoY2xhc3NOYW1lID09PSB1
bmRlZmluZWQpCisgICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQiOworICAg
ICAgICBpZiAoY2xhc3NOYW1lKQorICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93XSA9
IGNsYXNzTmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFr
cG9pbnRzW3Jvd107CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7
CisgICAgfTsKKyAgICB0aGlzLmNsZWFyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdykgeworICAg
ICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuYWRkTWFya2VyID0gZnVu
Y3Rpb24ocmFuZ2UsIGNsYXp6LCB0eXBlLCBpbkZyb250KSB7CisgICAgICAgIHZhciBpZCA9IHRo
aXMuJG1hcmtlcklkKys7CisKKyAgICAgICAgdmFyIG1hcmtlciA9IHsKKyAgICAgICAgICAgIHJh
bmdlIDogcmFuZ2UsCisgICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsCisgICAgICAg
ICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5cGUgOiBudWxsLAor
ICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKKyAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9u
dCwKKyAgICAgICAgICAgIGlkOiBpZAorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluRnJvbnQp
IHsKKyAgICAgICAgICAgIHRoaXMuJGZyb250TWFya2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VGcm9udE1hcmtlciIpCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIikKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBpZDsKKyAgICB9OworICAgIHRoaXMuYWRkRHluYW1pY01hcmtlciA9IGZ1bmN0aW9uKG1hcmtl
ciwgaW5Gcm9udCkgeworICAgICAgICBpZiAoIW1hcmtlci51cGRhdGUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7CisgICAgICAgIG1hcmtl
ci5pZCA9IGlkOworICAgICAgICBtYXJrZXIuaW5Gcm9udCA9ICEhaW5Gcm9udDsKKworICAgICAg
ICBpZiAoaW5Gcm9udCkgeworICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lkXSA9IG1h
cmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9IG1hcmtlcjsK
KyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1hcmtlcjsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlTWFya2VyID0g
ZnVuY3Rpb24obWFya2VySWQpIHsKKyAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuJGZyb250TWFy
a2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRdOworICAgICAgICBp
ZiAoIW1hcmtlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWFya2VycyA9
IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7
CisgICAgICAgIGlmIChtYXJrZXIpIHsKKyAgICAgICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJr
ZXJJZF0pOworICAgICAgICAgICAgdGhpcy5fZW1pdChtYXJrZXIuaW5Gcm9udCA/ICJjaGFuZ2VG
cm9udE1hcmtlciIgOiAiY2hhbmdlQmFja01hcmtlciIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0aGlzLmdldE1hcmtlcnMgPSBmdW5jdGlvbihpbkZyb250KSB7CisgICAgICAgIHJldHVybiBp
bkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7CisgICAgfTsK
KworICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHsKKyAgICAgICAgaWYgKCF0aGlz
LiRzZWFyY2hIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBuZXcgU2Vh
cmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfc2VsZWN0ZWQtd29yZCIsICJ0ZXh0Iik7CisgICAgICAg
ICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQgPSB0aGlzLmFkZER5bmFtaWNNYXJrZXIoaGlnaGxp
Z2h0KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQuc2V0UmVnZXhw
KHJlKTsKKyAgICB9CisgICAgdGhpcy5oaWdobGlnaHRMaW5lcyA9IGZ1bmN0aW9uKHN0YXJ0Um93
LCBlbmRSb3csIGNsYXp6LCBpbkZyb250KSB7CisgICAgICAgIGlmICh0eXBlb2YgZW5kUm93ICE9
ICJudW1iZXIiKSB7CisgICAgICAgICAgICBjbGF6eiA9IGVuZFJvdzsKKyAgICAgICAgICAgIGVu
ZFJvdyA9IHN0YXJ0Um93OworICAgICAgICB9CisgICAgICAgIGlmICghY2xhenopCisgICAgICAg
ICAgICBjbGF6eiA9ICJhY2Vfc3RlcCI7CisgICAgICAgIAorICAgICAgICB2YXIgcmFuZ2UgPSBu
ZXcgUmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOworICAgICAgICAKKyAgICAg
ICAgdmFyIGlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAiZnVsbExpbmUiLCBpbkZy
b250KTsKKyAgICAgICAgcmFuZ2UuaWQgPSBpZDsKKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAg
IH07CisgICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25zKSB7Cisg
ICAgICAgIHRoaXMuJGFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CisgICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZUFubm90YXRpb24iLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmdldEFubm90YXRp
b25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRhbm5vdGF0aW9ucyB8fCBb
XTsKKyAgICB9OworICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IHt9OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VB
bm5vdGF0aW9uIiwge30pOworICAgIH07CisgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0
aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhccj9cbikv
bSk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUg
PSBtYXRjaFsxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdM
aW5lID0gIlxuIjsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBm
dW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShy
b3cpOworCisgICAgICAgIHZhciBpblRva2VuID0gZmFsc2U7CisgICAgICAgIGlmIChjb2x1bW4g
PiAwKQorICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uIC0gMSkubWF0
Y2godGhpcy50b2tlblJlKTsKKworICAgICAgICBpZiAoIWluVG9rZW4pCisgICAgICAgICAgICBp
blRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4pLm1hdGNoKHRoaXMudG9rZW5SZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoaW5Ub2tlbikKKyAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9r
ZW5SZTsKKyAgICAgICAgZWxzZSBpZiAoL15ccyskLy50ZXN0KGxpbmUuc2xpY2UoY29sdW1uLTEs
IGNvbHVtbisxKSkpCisgICAgICAgICAgICB2YXIgcmUgPSAvXHMvOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2YXIgcmUgPSB0aGlzLm5vblRva2VuUmU7CisKKyAgICAgICAgdmFyIHN0YXJ0
ID0gY29sdW1uOworICAgICAgICBpZiAoc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgc3RhcnQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxl
IChzdGFydCA+PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZSkpOworICAgICAgICAg
ICAgc3RhcnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmQgPSBjb2x1bW47CisgICAg
ICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBsaW5lLmNoYXJBdChlbmQpLm1hdGNoKHJl
KSkgeworICAgICAgICAgICAgZW5kKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3
IFJhbmdlKHJvdywgc3RhcnQsIHJvdywgZW5kKTsKKyAgICB9OworICAgIHRoaXMuZ2V0QVdvcmRS
YW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciB3b3JkUmFuZ2UgPSB0
aGlzLmdldFdvcmRSYW5nZShyb3csIGNvbHVtbik7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5n
ZXRMaW5lKHdvcmRSYW5nZS5lbmQucm93KTsKKworICAgICAgICB3aGlsZSAobGluZS5jaGFyQXQo
d29yZFJhbmdlLmVuZC5jb2x1bW4pLm1hdGNoKC9bIFx0XS8pKSB7CisgICAgICAgICAgICB3b3Jk
UmFuZ2UuZW5kLmNvbHVtbiArPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB3b3JkUmFu
Z2U7CisgICAgfTsKKyAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1v
ZGUpIHsKKyAgICAgICAgdGhpcy5kb2Muc2V0TmV3TGluZU1vZGUobmV3TGluZU1vZGUpOworICAg
IH07CisgICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTsKKyAgICB9OworCisgICAgdGhpcy4kdXNlV29y
a2VyID0gdHJ1ZTsKKyAgICB0aGlzLnNldFVzZVdvcmtlciA9IGZ1bmN0aW9uKHVzZVdvcmtlcikg
eworICAgICAgICBpZiAodGhpcy4kdXNlV29ya2VyID09IHVzZVdvcmtlcikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7CisKKyAgICAg
ICAgdGhpcy4kc3RvcFdvcmtlcigpOworICAgICAgICBpZiAodXNlV29ya2VyKQorICAgICAgICAg
ICAgdGhpcy4kc3RhcnRXb3JrZXIoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0VXNlV29ya2VyID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VXb3JrZXI7CisgICAgfTsKKyAg
ICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcm93
cyA9IGUuZGF0YTsKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydChyb3dzLmZpcnN0KTsK
KyAgICAgICAgdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRlIiwgZSk7CisgICAgfTsKKworICAg
IHRoaXMuJG1vZGVzID0ge307CisgICAgdGhpcy4kbW9kZSA9IG51bGw7CisgICAgdGhpcy4kbW9k
ZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7CisgICAgICAg
IGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgaWYg
KG1vZGUuZ2V0VG9rZW5pemVyKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvbkNoYW5n
ZU1vZGUobW9kZSk7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IG1vZGU7CisgICAgICAgICAg
ICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHBhdGggPSBtb2RlIHx8ICJhY2UvbW9kZS90ZXh0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0pCisgICAgICAgICAgICB0aGlzLiRtb2Rlc1si
YWNlL21vZGUvdGV4dCJdID0gbmV3IFRleHRNb2RlKCk7CisKKyAgICAgICAgaWYgKHRoaXMuJG1v
ZGVzW3BhdGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdl
TW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7CisgICAgICAgIHRoaXMuJG1vZGVJZCA9IHBhdGg7Cisg
ICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBhdGhdLCBmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy4kbW9kZUlkICE9PSBwYXRoKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhd
KTsKKyAgICAgICAgICAgIGlmIChtICYmIG0uTW9kZSkgeworICAgICAgICAgICAgICAgIG0gPSBu
ZXcgbS5Nb2RlKG9wdGlvbnMpOworICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucykgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1twYXRoXSA9IG07CisgICAgICAgICAgICAgICAg
ICAgIG0uJGlkID0gcGF0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhp
cy4kb25DaGFuZ2VNb2RlKG0pCisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0aGlzKSk7
CisgICAgICAgIGlmICghdGhpcy4kbW9kZSkKKyAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9k
ZSh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdLCB0cnVlKTsKKyAgICB9OworCisgICAgdGhp
cy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlzUGxhY2Vob2xkZXIpIHsKKyAgICAg
ICAgaWYgKHRoaXMuJG1vZGUgPT09IG1vZGUpIHJldHVybjsKKyAgICAgICAgdGhpcy4kbW9kZSA9
IG1vZGU7CisKKyAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOworCisgICAgICAgIGlmICh0aGlz
LiR1c2VXb3JrZXIpCisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOworCisgICAgICAg
IHZhciB0b2tlbml6ZXIgPSBtb2RlLmdldFRva2VuaXplcigpOworCisgICAgICAgIGlmKHRva2Vu
aXplci5hZGRFdmVudExpc3RlbmVyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciBv
blJlbG9hZFRva2VuaXplciA9IHRoaXMub25SZWxvYWRUb2tlbml6ZXIuYmluZCh0aGlzKTsKKyAg
ICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGUiLCBvblJlbG9hZFRv
a2VuaXplcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMuYmdUb2tlbml6ZXIpIHsK
KyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIgPSBuZXcgQmFja2dyb3VuZFRva2VuaXplcih0
b2tlbml6ZXIpOworICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgICAgIHRo
aXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIiwgZnVuY3Rpb24oZSkgewor
ICAgICAgICAgICAgICAgIF9zZWxmLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUiLCBlKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXpl
ci5zZXRUb2tlbml6ZXIodG9rZW5pemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYmdU
b2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB0aGlz
LnRva2VuUmUgPSBtb2RlLnRva2VuUmU7CisgICAgICAgIHRoaXMubm9uVG9rZW5SZSA9IG1vZGUu
bm9uVG9rZW5SZTsKKworCisgICAgICAgIGlmICghJGlzUGxhY2Vob2xkZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkOworICAgICAgICAgICAgdGhpcy4kc2V0Rm9sZGlu
Zyhtb2RlLmZvbGRpbmdSdWxlcyk7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VNb2Rl
Iik7CisgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApOworICAgICAgICB9Cisg
ICAgfTsKKworCisgICAgdGhpcy4kc3RvcFdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAodGhpcy4kd29ya2VyKQorICAgICAgICAgICAgdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpOwor
CisgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CisgICAgfTsKKworCisgICAgdGhpcy4kc3Rh
cnRXb3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICJ1
bmRlZmluZWQiICYmICFyZXF1aXJlLm5vV29ya2VyKSB7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IHRoaXMuJG1vZGUuY3JlYXRlV29ya2VyKHRoaXMp
OworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7
CisgICAgfTsKKyAgICB0aGlzLmdldE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJG1vZGU7CisgICAgfTsKKworICAgIHRoaXMuJHNjcm9sbFRvcCA9IDA7CisgICAgdGhp
cy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKKyAgICAgICAgc2Nyb2xsVG9w
ID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBzY3JvbGxUb3ApKTsKKyAgICAgICAgaWYgKHRoaXMu
JHNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHRoaXMuJHNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
U2Nyb2xsVG9wIiwgc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Nyb2xsVG9wID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxUb3A7CisgICAgfTsKKwor
ICAgIHRoaXMuJHNjcm9sbExlZnQgPSAwOworICAgIHRoaXMuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0
aW9uKHNjcm9sbExlZnQpIHsKKyAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQoTWF0aC5t
YXgoMCwgc2Nyb2xsTGVmdCkpOworICAgICAgICBpZiAodGhpcy4kc2Nyb2xsTGVmdCA9PT0gc2Ny
b2xsTGVmdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLiRzY3JvbGxMZWZ0
ID0gc2Nyb2xsTGVmdDsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2Nyb2xsTGVmdCIsIHNj
cm9sbExlZnQpOworICAgIH07CisgICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxMZWZ0OworICAgIH07CisgICAgdGhpcy5nZXRT
Y3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRjb21wdXRlV2lkdGgoKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7CisgICAgfTsKKworICAgIHRoaXMuJGNv
bXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLiRtb2RpZmll
ZCB8fCBmb3JjZSkgeworICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTsKKworICAg
ICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0OworCisgICAgICAgICAgICB2YXIgbGlu
ZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOworICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhp
cy4kcm93TGVuZ3RoQ2FjaGU7CisgICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAw
OworICAgICAgICAgICAgdmFyIGZvbGRJbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgZm9sZExp
bmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXhdOworICAgICAgICAgICAgdmFyIGZvbGRTdGFy
dCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAg
ICB2YXIgbGVuID0gbGluZXMubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA+PSBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXgrK107
CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3Rh
cnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGNhY2hlW2ldID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlW2ldID0gdGhp
cy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZXNbaV0pWzBdOworCisgICAgICAgICAgICAgICAg
aWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCisgICAgICAgICAgICAgICAgICAgIGxv
bmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5k
b2MuZ2V0TGluZShyb3cpOworICAgIH07CisgICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZp
cnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lcyhmaXJz
dFJvdywgbGFzdFJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7CisgICAgfTsKKyAgICB0aGlz
LmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRv
Yy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7CisgICAg
fTsKKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CisgICAgICAg
IHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRleHQpOworICAgIH07CisgICAgdGhp
cy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVt
b3ZlKHJhbmdlKTsKKyAgICB9OworICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0
YXMsIGRvbnRTZWxlY3QpIHsKKyAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKKyAgICAgICAgdmFy
IGxhc3RVbmRvUmFuZ2UgPSBudWxsOworICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFzLmxlbmd0
aCAtIDE7IGkgIT0gLTE7IGktLSkgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ld
OworICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5kb2MucmV2ZXJ0RGVsdGFzKGRlbHRhLmRlbHRhcyk7CisgICAgICAgICAgICAgICAg
bGFzdFVuZG9SYW5nZSA9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rp
b24oZGVsdGEuZGVsdGFzLCB0cnVlLCBsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZGVsdGEuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24oZm9sZERl
bHRhKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZERlbHRhLmZvbGRz
KTsKKyAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOworICAgICAgICBsYXN0VW5kb1JhbmdlICYm
CisgICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCisgICAgICAgICAgICAhZG9udFNlbGVj
dCAmJgorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVu
ZG9SYW5nZSk7CisgICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgIH07CisgICAgdGhp
cy5yZWRvQ2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgeworICAgICAgICBp
ZiAoIWRlbHRhcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4k
ZnJvbVVuZG8gPSB0cnVlOworICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3JvdXAgPT0g
ImRvYyIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRvYy5hcHBseURlbHRhcyhkZWx0YS5kZWx0
YXMpOworICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgZmFsc2UsIGxhc3RVbmRvUmFu
Z2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21VbmRvID0g
ZmFsc2U7CisgICAgICAgIGxhc3RVbmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMuJHVuZG9T
ZWxlY3QgJiYKKyAgICAgICAgICAgICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0aGlzLnNl
bGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgcmV0dXJu
IGxhc3RVbmRvUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldFVuZG9TZWxlY3QgPSBmdW5jdGlv
bihlbmFibGUpIHsKKyAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCA9IGVuYWJsZTsKKyAgICB9Owor
CisgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbiA9IGZ1bmN0aW9uKGRlbHRhcywgaXNVbmRvLCBs
YXN0VW5kb1JhbmdlKSB7CisgICAgICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7CisgICAg
ICAgICAgICB2YXIgaW5zZXJ0ID0KKyAgICAgICAgICAgICAgICBkZWx0YS5hY3Rpb24gPT0gImlu
c2VydFRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiOworICAgICAgICAgICAg
cmV0dXJuIGlzVW5kbyA/ICFpbnNlcnQgOiBpbnNlcnQ7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgZGVsdGEgPSBkZWx0YXNbMF07CisgICAgICAgIHZhciByYW5nZSwgcG9pbnQ7CisgICAgICAg
IHZhciBsYXN0RGVsdGFJc0luc2VydCA9IGZhbHNlOworICAgICAgICBpZiAoaXNJbnNlcnQoZGVs
dGEpKSB7CisgICAgICAgICAgICByYW5nZSA9IGRlbHRhLnJhbmdlLmNsb25lKCk7CisgICAgICAg
ICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJh
bmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRlbHRhcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoaXNJbnNl
cnQoZGVsdGEpKSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5zdGFydDsK
KyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVt
bikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZGVsdGEucmFu
Z2Uuc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2ludCA9IGRl
bHRhLnJhbmdlLmVuZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5y
b3csIHBvaW50LmNvbHVtbikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRF
bmQoZGVsdGEucmFuZ2UuZW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwb2ludCA9IGRlbHRhLnJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGlmIChy
YW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZS5mcm9tUG9p
bnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVsbCkgewor
ICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsK
KyAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0
YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5lbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIH07
CisgICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpOworICAgIH07CisgICAgdGhpcy5tb3Zl
VGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgeworICAgICAgICB2YXIgdGV4
dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7CisgICAgICAgIHRoaXMucmVtb3ZlKGZy
b21SYW5nZSk7CisKKyAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5yb3c7CisgICAgICAg
IHZhciB0b0NvbHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOworICAgICAgICBpZiAoIWZyb21SYW5n
ZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYKKyAgICAg
ICAgICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCisgICAgICAgICAgICB0b0Nv
bHVtbiAtPSB0ZXh0Lmxlbmd0aDsKKworICAgICAgICBpZiAoZnJvbVJhbmdlLmlzTXVsdGlMaW5l
KCkgJiYgZnJvbVJhbmdlLmVuZC5yb3cgPCB0b1JvdykgeworICAgICAgICAgICAgdmFyIGxpbmVz
ID0gdGhpcy5kb2MuJHNwbGl0KHRleHQpOworICAgICAgICAgICAgdG9Sb3cgLT0gbGluZXMubGVu
Z3RoIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmRSb3cgPSB0b1JvdyArIGZyb21S
YW5nZS5lbmQucm93IC0gZnJvbVJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGVuZENvbHVt
biA9IGZyb21SYW5nZS5pc011bHRpTGluZSgpID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZy
b21SYW5nZS5lbmQuY29sdW1uIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvQ29sdW1uICsg
ZnJvbVJhbmdlLmVuZC5jb2x1bW4gLSBmcm9tUmFuZ2Uuc3RhcnQuY29sdW1uOworCisgICAgICAg
IHZhciB0b1JhbmdlID0gbmV3IFJhbmdlKHRvUm93LCB0b0NvbHVtbiwgZW5kUm93LCBlbmRDb2x1
bW4pOworCisgICAgICAgIHRoaXMuaW5zZXJ0KHRvUmFuZ2Uuc3RhcnQsIHRleHQpOworCisgICAg
ICAgIHJldHVybiB0b1JhbmdlOworICAgIH07CisgICAgdGhpcy5pbmRlbnRSb3dzID0gZnVuY3Rp
b24oc3RhcnRSb3csIGVuZFJvdywgaW5kZW50U3RyaW5nKSB7CisgICAgICAgIGluZGVudFN0cmlu
ZyA9IGluZGVudFN0cmluZy5yZXBsYWNlKC9cdC9nLCB0aGlzLmdldFRhYlN0cmluZygpKTsKKyAg
ICAgICAgZm9yICh2YXIgcm93PXN0YXJ0Um93OyByb3c8PWVuZFJvdzsgcm93KyspCisgICAgICAg
ICAgICB0aGlzLmluc2VydCh7cm93OiByb3csIGNvbHVtbjowfSwgaW5kZW50U3RyaW5nKTsKKyAg
ICB9OworICAgIHRoaXMub3V0ZGVudFJvd3MgPSBmdW5jdGlvbiAocmFuZ2UpIHsKKyAgICAgICAg
dmFyIHJvd1JhbmdlID0gcmFuZ2UuY29sbGFwc2VSb3dzKCk7CisgICAgICAgIHZhciBkZWxldGVS
YW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdl
dFRhYlNpemUoKTsKKworICAgICAgICBmb3IgKHZhciBpID0gcm93UmFuZ2Uuc3RhcnQucm93OyBp
IDw9IHJvd1JhbmdlLmVuZC5yb3c7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlz
LmdldExpbmUoaSk7CisKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7Cisg
ICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgc2l6ZTsgKytqKQorICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdChq
KSAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGog
PCBzaXplICYmIGxpbmUuY2hhckF0KGopID09ICdcdCcpIHsKKyAgICAgICAgICAgICAgICBkZWxl
dGVSYW5nZS5zdGFydC5jb2x1bW4gPSBqOworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVu
ZC5jb2x1bW4gPSBqICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5n
ZS5lbmQuY29sdW1uID0gajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucmVtb3Zl
KGRlbGV0ZVJhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5tb3ZlTGluZXNVcCA9
IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmIChmaXJzdFJvdyA8PSAw
KSByZXR1cm4gMDsKKworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuZG9jLnJlbW92ZUxpbmVz
KGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TGluZXMoZmlyc3RS
b3cgLSAxLCByZW1vdmVkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07CisgICAgdGhpcy5t
b3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYg
KGxhc3RSb3cgPj0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7CisKKyAgICAgICAg
dmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7Cisg
ICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93KzEsIHJlbW92ZWQpOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9OworICAgIHRoaXMuZHVwbGljYXRlTGluZXMgPSBmdW5jdGlvbihm
aXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRjbGlwUm93
VG9Eb2N1bWVudChmaXJzdFJvdyk7CisgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kY2xpcFJv
d1RvRG9jdW1lbnQobGFzdFJvdyk7CisKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5nZXRMaW5l
cyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0
Um93LCBsaW5lcyk7CisKKyAgICAgICAgdmFyIGFkZGVkUm93cyA9IGxhc3RSb3cgLSBmaXJzdFJv
dyArIDE7CisgICAgICAgIHJldHVybiBhZGRlZFJvd3M7CisgICAgfTsKKworCisgICAgdGhpcy4k
Y2xpcFJvd1RvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIE1hdGgu
bWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkpOworICAgIH07CisK
KyAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAg
ICAgICBpZiAoY29sdW1uIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKKyAgICB9
OworCisKKyAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4pIHsKKyAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uKTsKKworICAgICAg
ICBpZiAocm93IDwgMCkgeworICAgICAgICAgICAgcm93ID0gMDsKKyAgICAgICAgICAgIGNvbHVt
biA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5kb2Mu
Z2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocm93ID49IGxlbikgeworICAgICAgICAgICAg
ICAgIHJvdyA9IGxlbiAtIDE7CisgICAgICAgICAgICAgICAgY29sdW1uID0gdGhpcy5kb2MuZ2V0
TGluZShsZW4tMSkubGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBjb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoLCBjb2x1bW4p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHJvdzogcm93LAorICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4KKyAgICAgICAgfTsKKyAg
ICB9OworCisgICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJhbmdlKSB7
CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCAwKSB7CisgICAgICAgICAgICByYW5nZS5z
dGFydC5yb3cgPSAwOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRoaXMuJGNsaXBD
b2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3csCisgICAgICAgICAg
ICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKKyAgICAgICAgaWYgKHJh
bmdlLmVuZC5yb3cgPiBsZW4pIHsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBsZW47Cisg
ICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy5kb2MuZ2V0TGluZShsZW4pLmxlbmd0
aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlz
LiRjbGlwQ29sdW1uVG9Sb3coCisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdywKKyAgICAg
ICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uCisgICAgICAgICAgICApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByYW5nZTsKKyAgICB9OworICAgIHRoaXMuJHdyYXBMaW1pdCA9IDgwOwor
ICAgIHRoaXMuJHVzZVdyYXBNb2RlID0gZmFsc2U7CisgICAgdGhpcy4kd3JhcExpbWl0UmFuZ2Ug
PSB7CisgICAgICAgIG1pbiA6IG51bGwsCisgICAgICAgIG1heCA6IG51bGwKKyAgICB9OworICAg
IHRoaXMuc2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbih1c2VXcmFwTW9kZSkgeworICAgICAgICBp
ZiAodXNlV3JhcE1vZGUgIT0gdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
JHVzZVdyYXBNb2RlID0gdXNlV3JhcE1vZGU7CisgICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9
IHRydWU7CisgICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOworICAgICAgICAgICAg
aWYgKHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuJHdyYXBEYXRhLnB1c2goW10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCBsZW4gLSAxKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUiKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5nZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kdXNlV3JhcE1vZGU7CisgICAgfTsKKyAgICB0aGlzLnNldFdyYXBMaW1pdFJhbmdl
ID0gZnVuY3Rpb24obWluLCBtYXgpIHsKKyAgICAgICAgaWYgKHRoaXMuJHdyYXBMaW1pdFJhbmdl
Lm1pbiAhPT0gbWluIHx8IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCAhPT0gbWF4KSB7CisgICAg
ICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gPSBtaW47CisgICAgICAgICAgICB0aGlz
LiR3cmFwTGltaXRSYW5nZS5tYXggPSBtYXg7CisgICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9
IHRydWU7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTW9kZSIpOworICAgICAg
ICB9CisgICAgfTsKKyAgICB0aGlzLmFkanVzdFdyYXBMaW1pdCA9IGZ1bmN0aW9uKGRlc2lyZWRM
aW1pdCkgeworICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kY29uc3RyYWluV3JhcExpbWl0
KGRlc2lyZWRMaW1pdCk7CisgICAgICAgIGlmICh3cmFwTGltaXQgIT0gdGhpcy4kd3JhcExpbWl0
ICYmIHdyYXBMaW1pdCA+IDApIHsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdCA9IHdyYXBM
aW1pdDsKKyAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
ICh0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBE
YXRhKDAsIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRyZXNl
dFJvd0NhY2hlKDApOworICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVdyYXBMaW1p
dCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICB0aGlzLiRjb25zdHJhaW5XcmFw
TGltaXQgPSBmdW5jdGlvbih3cmFwTGltaXQpIHsKKyAgICAgICAgdmFyIG1pbiA9IHRoaXMuJHdy
YXBMaW1pdFJhbmdlLm1pbjsKKyAgICAgICAgaWYgKG1pbikKKyAgICAgICAgICAgIHdyYXBMaW1p
dCA9IE1hdGgubWF4KG1pbiwgd3JhcExpbWl0KTsKKworICAgICAgICB2YXIgbWF4ID0gdGhpcy4k
d3JhcExpbWl0UmFuZ2UubWF4OworICAgICAgICBpZiAobWF4KQorICAgICAgICAgICAgd3JhcExp
bWl0ID0gTWF0aC5taW4obWF4LCB3cmFwTGltaXQpOworICAgICAgICByZXR1cm4gTWF0aC5tYXgo
MSwgd3JhcExpbWl0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7CisgICAgfTsKKyAgICB0aGlzLmdl
dFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sCisgICAgICAgICAgICBtYXggOiB0
aGlzLiR3cmFwTGltaXRSYW5nZS5tYXgKKyAgICAgICAgfTsKKyAgICB9OworCisgICAgdGhpcy4k
dXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciB1
c2VXcmFwTW9kZSA9IHRoaXMuJHVzZVdyYXBNb2RlOworICAgICAgICB2YXIgbGVuOworICAgICAg
ICB2YXIgYWN0aW9uID0gZS5kYXRhLmFjdGlvbjsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gZS5k
YXRhLnJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBlLmRhdGEucmFuZ2Uu
ZW5kLnJvdzsKKyAgICAgICAgdmFyIHN0YXJ0ID0gZS5kYXRhLnJhbmdlLnN0YXJ0OworICAgICAg
ICB2YXIgZW5kID0gZS5kYXRhLnJhbmdlLmVuZDsKKyAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9
IG51bGw7CisKKyAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJMaW5lcyIpICE9IC0xKSB7Cisg
ICAgICAgICAgICBpZiAoYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpIHsKKyAgICAgICAgICAgICAg
ICBsYXN0Um93ID0gZmlyc3RSb3cgKyAoZS5kYXRhLmxpbmVzLmxlbmd0aCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxlbiA9IGUuZGF0YS5saW5lcyA/IGUuZGF0YS5saW5lcy5sZW5n
dGggOiBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZW4gPSBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuICE9
IDApIHsKKyAgICAgICAgICAgIGlmIChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikgIT0gLTEpIHsK
KyAgICAgICAgICAgICAgICB0aGlzW3VzZVdyYXBNb2RlID8gIiR3cmFwRGF0YSIgOiAiJHJvd0xl
bmd0aENhY2hlIl0uc3BsaWNlKGZpcnN0Um93LCBsZW4pOworCisgICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xk
cyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7CisgICAgICAgICAgICAgICAg
dGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOworCisgICAgICAgICAgICAgICAgdmFyIGZv
bGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKKyAgICAgICAgICAgICAgICB2YXIg
aWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywgZW5kLmNvbHVtbiwgc3RhcnQu
Y29sdW1uIC0gZW5kLmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0
Um93KC1sZW4pOworCisgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZUJlZm9yZSA9IHRo
aXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExp
bmVCZWZvcmUgJiYgZm9sZExpbmVCZWZvcmUgIT09IGZvbGRMaW5lKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb2xkTGluZUJlZm9yZS5tZXJnZShmb2xkTGluZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb2xkTGluZSA9IGZvbGRMaW5lQmVmb3JlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5l
KSArIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpZHg7IGlk
eCA8IGZvbGRMaW5lcy5sZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
b2xkTGluZSA9IGZvbGRMaW5lc1tpZHhdOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExp
bmUuc3RhcnQucm93ID49IGVuZC5yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRM
aW5lLnNoaWZ0Um93KC1sZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93OworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJnczsKKyAgICAgICAgICAgICAgICBpZiAo
dXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtmaXJzdFJvdywgMF07
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3Mu
cHVzaChbXSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhLnNwbGljZS5hcHBs
eSh0aGlzLiR3cmFwRGF0YSwgYXJncyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbik7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3MudW5zaGlmdChmaXJzdFJvdywgMCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvd0xl
bmd0aENhY2hlLnNwbGljZS5hcHBseSh0aGlzLiRyb3dMZW5ndGhDYWNoZSwgYXJncyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xk
RGF0YTsKKyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGZp
cnN0Um93KTsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBp
ZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRMaW5lLnJh
bmdlLmNvbXBhcmVJbnNpZGUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pCisgICAgICAgICAgICAg
ICAgICAgIGlmIChjbXAgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUg
PSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdFJvdywgMCwgZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgMCwgZW5k
LmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGlu
ZS5zaGlmdFJvdyhsZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpZHg7IGlkeCA8IGZvbGRMaW5lcy5sZW5ndGg7
IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGRMaW5lc1tp
ZHhdOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93ID49IGZpcnN0
Um93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuID0gTWF0aC5hYnMoZS5kYXRhLnJhbmdl
LnN0YXJ0LmNvbHVtbiAtIGUuZGF0YS5yYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgICAgIGlm
IChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICByZW1v
dmVkRm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShlLmRhdGEucmFuZ2UpOworICAgICAgICAg
ICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZvbGRzKTsKKworICAgICAgICAgICAgICAg
IGxlbiA9IC1sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0
aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKKyAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewor
ICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGZpcnN0Um93LCBzdGFydC5j
b2x1bW4sIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNl
V3JhcE1vZGUgJiYgdGhpcy4kd3JhcERhdGEubGVuZ3RoICE9IHRoaXMuZG9jLmdldExlbmd0aCgp
KSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5kICR3cmFw
RGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh1c2VXcmFwTW9kZSkKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZpcnN0
Um93LCBsYXN0Um93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93
TGVuZ3RoQ2FjaGUoZmlyc3RSb3csIGxhc3RSb3cpOworCisgICAgICAgIHJldHVybiByZW1vdmVk
Rm9sZHM7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlID0gZnVuY3Rp
b24oZmlyc3RSb3csIGxhc3RSb3csIGIpIHsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVb
Zmlyc3RSb3ddID0gbnVsbDsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbbGFzdFJvd10g
PSBudWxsOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSA9IGZ1bmN0aW9uKGZp
cnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExp
bmVzKCk7CisgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5nZXRUYWJTaXplKCk7CisgICAgICAg
IHZhciB3cmFwRGF0YSA9IHRoaXMuJHdyYXBEYXRhOworICAgICAgICB2YXIgd3JhcExpbWl0ID0g
dGhpcy4kd3JhcExpbWl0OworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICB2YXIgZm9sZExp
bmU7CisKKyAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93OworICAgICAgICBsYXN0Um93ID0gTWF0
aC5taW4obGFzdFJvdywgbGluZXMubGVuZ3RoIC0gMSk7CisgICAgICAgIHdoaWxlIChyb3cgPD0g
bGFzdFJvdykgeworICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdywg
Zm9sZExpbmUpOworICAgICAgICAgICAgaWYgKCFmb2xkTGluZSkgeworICAgICAgICAgICAgICAg
IHRva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMobGFuZy5zdHJpbmdUcmltUmlnaHQobGlu
ZXNbcm93XSkpOworICAgICAgICAgICAgICAgIHdyYXBEYXRhW3Jvd10gPSB0aGlzLiRjb21wdXRl
V3JhcFNwbGl0cyh0b2tlbnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSk7CisgICAgICAgICAgICAgICAg
cm93ICsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMgPSBb
XTsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCBy
b3csIGNvbHVtbiwgbGFzdENvbHVtbikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdh
bGtUb2tlbnM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVs
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnMgPSB0aGlzLiRnZXRE
aXNwbGF5VG9rZW5zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwbGFjZWhvbGRlciwgdG9rZW5zLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2Fsa1Rva2Vuc1swXSA9IFBMQUNFSE9MREVSX1NUQVJUOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgd2Fsa1Rva2Vucy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zW2ldID0gUExBQ0VIT0xE
RVJfQk9EWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnMg
PSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lc1tyb3ddLnN1YnN0cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbnMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2Vucy5jb25jYXQod2Fs
a1Rva2Vucyk7CisgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwKKyAgICAgICAgICAg
ICAgICAgICAgZm9sZExpbmUuZW5kLnJvdywKKyAgICAgICAgICAgICAgICAgICAgbGluZXNbZm9s
ZExpbmUuZW5kLnJvd10ubGVuZ3RoICsgMQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGggIT0gMCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAt
IDFdID49IFNQQUNFKQorICAgICAgICAgICAgICAgICAgICB0b2tlbnMucG9wKCk7CisKKyAgICAg
ICAgICAgICAgICB3cmFwRGF0YVtmb2xkTGluZS5zdGFydC5yb3ddCisgICAgICAgICAgICAgICAg
ICAgID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUp
OworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgQ0hBUiA9IDEsCisgICAgICAgIENIQVJf
RVhUID0gMiwKKyAgICAgICAgUExBQ0VIT0xERVJfU1RBUlQgPSAzLAorICAgICAgICBQTEFDRUhP
TERFUl9CT0RZID0gIDQsCisgICAgICAgIFBVTkNUVUFUSU9OID0gOSwKKyAgICAgICAgU1BBQ0Ug
PSAxMCwKKyAgICAgICAgVEFCID0gMTEsCisgICAgICAgIFRBQl9TUEFDRSA9IDEyOworCisKKyAg
ICB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyA9IGZ1bmN0aW9uKHRva2Vucywgd3JhcExpbWl0KSB7
CisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBb
XTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzcGxpdHMgPSBbXTsKKyAgICAgICAgdmFyIGRp
c3BsYXlMZW5ndGggPSB0b2tlbnMubGVuZ3RoOworICAgICAgICB2YXIgbGFzdFNwbGl0ID0gMCwg
bGFzdERvY1NwbGl0ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBhZGRTcGxpdChzY3JlZW5Qb3Mp
IHsKKyAgICAgICAgICAgIHZhciBkaXNwbGF5ZWQgPSB0b2tlbnMuc2xpY2UobGFzdFNwbGl0LCBz
Y3JlZW5Qb3MpOworICAgICAgICAgICAgdmFyIGxlbiA9IGRpc3BsYXllZC5sZW5ndGg7CisgICAg
ICAgICAgICBkaXNwbGF5ZWQuam9pbigiIikuCisgICAgICAgICAgICAgICAgcmVwbGFjZSgvMTIv
ZywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOworICAgICAgICAg
ICAgICAgIH0pLgorICAgICAgICAgICAgICAgIHJlcGxhY2UoLzIvZywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOworICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuOworICAgICAgICAgICAgc3BsaXRzLnB1c2gobGFz
dERvY1NwbGl0KTsKKyAgICAgICAgICAgIGxhc3RTcGxpdCA9IHNjcmVlblBvczsKKyAgICAgICAg
fQorCisgICAgICAgIHdoaWxlIChkaXNwbGF5TGVuZ3RoIC0gbGFzdFNwbGl0ID4gd3JhcExpbWl0
KSB7CisgICAgICAgICAgICB2YXIgc3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7CisgICAg
ICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSA+PSBTUEFDRSkgeworICAgICAgICAgICAgICAgIHdo
aWxlICh0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7CisgICAgICAgICAgICAgICAgICAgIHNwbGl0
ICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVAorICAgICAgICAgICAgICAgIHx8
IHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfQk9EWSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNwbGl0OyBzcGxpdCAhPSBsYXN0U3BsaXQgLSAxOyBzcGxpdC0tKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NU
QVJUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3BsaXQgPiBsYXN0
U3BsaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7CisgICAgICAgICAgICAgICAgZm9yIChzcGxp
dDsgc3BsaXQgPCB0b2tlbnMubGVuZ3RoOyBzcGxpdCsrKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0b2tlbnNbc3BsaXRdICE9IFBMQUNFSE9MREVSX0JPRFkpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcGxpdCA9PSB0b2tl
bnMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gQnJlYWtzIHRoZSB3
aGlsZS1sb29wLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTcGxpdChz
cGxpdCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgbWluU3BsaXQgPSBNYXRoLm1heChzcGxpdCAtIDEwLCBsYXN0U3BsaXQgLSAxKTsK
KyAgICAgICAgICAgIHdoaWxlIChzcGxpdCA+IG1pblNwbGl0ICYmIHRva2Vuc1tzcGxpdF0gPCBQ
TEFDRUhPTERFUl9TVEFSVCkgeworICAgICAgICAgICAgICAgIHNwbGl0IC0tOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0
XSA9PSBQVU5DVFVBVElPTikgeworICAgICAgICAgICAgICAgIHNwbGl0IC0tOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHNwbGl0ID4gbWluU3BsaXQpIHsKKyAgICAgICAgICAgICAg
ICBhZGRTcGxpdCgrK3NwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OworICAgICAg
ICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzcGxpdHM7
CisgICAgfTsKKyAgICB0aGlzLiRnZXREaXNwbGF5VG9rZW5zID0gZnVuY3Rpb24oc3RyLCBvZmZz
ZXQpIHsKKyAgICAgICAgdmFyIGFyciA9IFtdOworICAgICAgICB2YXIgdGFiU2l6ZTsKKyAgICAg
ICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
dHIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7
CisgICAgICAgICAgICBpZiAoYyA9PSA5KSB7CisgICAgICAgICAgICAgICAgdGFiU2l6ZSA9IHRo
aXMuZ2V0U2NyZWVuVGFiU2l6ZShhcnIubGVuZ3RoICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBhcnIucHVzaChUQUIpOworICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAxOyBuIDwgdGFi
U2l6ZTsgbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQl9TUEFDRSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYyA9
PSAzMikgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKFNQQUNFKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZigoYyA+IDM5ICYmIGMgPCA0OCkgfHwgKGMgPiA1NyAmJiBjIDwgNjQpKSB7CisgICAg
ICAgICAgICAgICAgYXJyLnB1c2goUFVOQ1RVQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAgICAgICAg
ICAgICAgICBhcnIucHVzaChDSEFSLCBDSEFSX0VYVCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBhcnI7CisgICAgfTsKKyAgICB0aGlzLiRnZXRTdHJpbmdTY3JlZW5X
aWR0aCA9IGZ1bmN0aW9uKHN0ciwgbWF4U2NyZWVuQ29sdW1uLCBzY3JlZW5Db2x1bW4pIHsKKyAg
ICAgICAgaWYgKG1heFNjcmVlbkNvbHVtbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFswLCAw
XTsKKyAgICAgICAgaWYgKG1heFNjcmVlbkNvbHVtbiA9PSBudWxsKQorICAgICAgICAgICAgbWF4
U2NyZWVuQ29sdW1uID0gSW5maW5pdHk7CisgICAgICAgIHNjcmVlbkNvbHVtbiA9IHNjcmVlbkNv
bHVtbiB8fCAwOworCisgICAgICAgIHZhciBjLCBjb2x1bW47CisgICAgICAgIGZvciAoY29sdW1u
ID0gMDsgY29sdW1uIDwgc3RyLmxlbmd0aDsgY29sdW1uKyspIHsKKyAgICAgICAgICAgIGMgPSBz
dHIuY2hhckNvZGVBdChjb2x1bW4pOworICAgICAgICAgICAgaWYgKGMgPT0gOSkgeworICAgICAg
ICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0aGlzLmdldFNjcmVlblRhYlNpemUoc2NyZWVuQ29s
dW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAwICYm
IGlzRnVsbFdpZHRoKGMpKSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDI7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjcmVlbkNvbHVtbiA+IG1heFNjcmVlbkNv
bHVtbikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIFtzY3JlZW5Db2x1bW4sIGNvbHVtbl07CisgICAgfTsKKyAgICB0
aGlzLmdldFJvd0xlbmd0aCA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICBpZiAoIXRoaXMuJHVz
ZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7CisgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiR3cmFwRGF0YVty
b3ddLmxlbmd0aCArIDE7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0U2NyZWVuTGFz
dFJvd0NvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdykgeworICAgICAgICB2YXIgcG9zID0gdGhp
cy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZBTFVFKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3Mucm93LCBwb3Mu
Y29sdW1uKTsKKyAgICB9OworICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uID0gZnVu
Y3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMu
ZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7CisgICAgICAgIHJldHVybiB0
aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4oc2NyZWVuUm93KTsKKyAgICB9OworICAgIHRoaXMu
Z2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0Nv
bHVtbikgeworICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93
KGRvY1JvdywgZG9jQ29sdW1uKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVu
dFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSAvIDEwKTsKKyAgICB9OworICAg
IHRoaXMuZ2V0Um93U3BsaXREYXRhID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGlmICghdGhp
cy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgdGhpcy5nZXRTY3JlZW5UYWJTaXplID0gZnVuY3Rpb24oc2NyZWVu
Q29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gc2NyZWVuQ29sdW1uICUg
dGhpcy4kdGFiU2l6ZTsKKyAgICB9OworCisKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRSb3cg
PSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhp
cy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLnJvdzsK
KyAgICB9OworCisKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihz
Y3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0Rv
Y3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLmNvbHVtbjsKKyAgICB9Owor
ICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBz
Y3JlZW5Db2x1bW4pIHsKKyAgICAgICAgaWYgKHNjcmVlblJvdyA8IDApCisgICAgICAgICAgICBy
ZXR1cm4ge3JvdzogMCwgY29sdW1uOiAwfTsKKworICAgICAgICB2YXIgbGluZTsKKyAgICAgICAg
dmFyIGRvY1JvdyA9IDA7CisgICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOworICAgICAgICB2YXIg
Y29sdW1uOworICAgICAgICB2YXIgcm93ID0gMDsKKyAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7
CisKKyAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7CisgICAgICAg
IHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTsKKyAg
ICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkg
eworICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRv
Y1JvdyA9IHRoaXMuJGRvY1Jvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBz
Y3JlZW5Sb3cgPiByb3dDYWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgZG9DYWNoZSA9ICFsOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG1heFJvdyA9IHRo
aXMuZ2V0TGVuZ3RoKCkgLSAxOworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldE5leHRG
b2xkTGluZShkb2NSb3cpOworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xk
TGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKworICAgICAgICB3aGlsZSAocm93IDw9IHNjcmVl
blJvdykgeworICAgICAgICAgICAgcm93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGgoZG9jUm93
KTsKKyAgICAgICAgICAgIGlmIChyb3cgKyByb3dMZW5ndGggLSAxID49IHNjcmVlblJvdyB8fCBk
b2NSb3cgPj0gbWF4Um93KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJvdyArPSByb3dMZW5ndGg7CisgICAgICAgICAgICAg
ICAgZG9jUm93Kys7CisgICAgICAgICAgICAgICAgaWYgKGRvY1JvdyA+IGZvbGRTdGFydCkgewor
ICAgICAgICAgICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5lbmQucm93KzE7CisgICAgICAg
ICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93LCBmb2xk
TGluZSk7CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExp
bmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9DYWNoZSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2goZG9jUm93KTsKKyAgICAgICAgICAgICAgICB0aGlz
LiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZm9sZExpbmUgJiYgZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1Jvdykgewor
ICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGZvbGRMaW5lKTsKKyAg
ICAgICAgICAgIGRvY1JvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgfSBlbHNlIGlm
IChyb3cgKyByb3dMZW5ndGggPD0gc2NyZWVuUm93IHx8IGRvY1JvdyA+IG1heFJvdykgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICByb3c6IG1heFJvdywKKyAgICAgICAg
ICAgICAgICBjb2x1bW46IHRoaXMuZ2V0TGluZShtYXhSb3cpLmxlbmd0aAorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0TGluZShkb2NS
b3cpOworICAgICAgICAgICAgZm9sZExpbmUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy4k
d3JhcERhdGFbZG9jUm93XTsKKyAgICAgICAgICAgIGlmIChzcGxpdHMpIHsKKyAgICAgICAgICAg
ICAgICBjb2x1bW4gPSBzcGxpdHNbc2NyZWVuUm93IC0gcm93XTsKKyAgICAgICAgICAgICAgICBp
ZihzY3JlZW5Sb3cgPiByb3cgJiYgc3BsaXRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICBkb2NDb2x1bW4gPSBzcGxpdHNbc2NyZWVuUm93IC0gcm93IC0gMV0gfHwgc3BsaXRzW3NwbGl0
cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5n
KGRvY0NvbHVtbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZG9jQ29sdW1uICs9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKGxpbmUs
IHNjcmVlbkNvbHVtbilbMV07CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAmJiBkb2ND
b2x1bW4gPj0gY29sdW1uKQorICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1uIC0gMTsKKwor
ICAgICAgICBpZiAoZm9sZExpbmUpCisgICAgICAgICAgICByZXR1cm4gZm9sZExpbmUuaWR4VG9Q
b3NpdGlvbihkb2NDb2x1bW4pOworCisgICAgICAgIHJldHVybiB7cm93OiBkb2NSb3csIGNvbHVt
bjogZG9jQ29sdW1ufTsKKyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9u
ID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiBkb2ND
b2x1bW4gPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGNsaXBQ
b3NpdGlvblRvRG9jdW1lbnQoZG9jUm93LnJvdywgZG9jUm93LmNvbHVtbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHBvcyA9IHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoZG9jUm93
LCBkb2NDb2x1bW4pOworCisgICAgICAgIGRvY1JvdyA9IHBvcy5yb3c7CisgICAgICAgIGRvY0Nv
bHVtbiA9IHBvcy5jb2x1bW47CisKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IDA7CisgICAgICAg
IHZhciBmb2xkU3RhcnRSb3cgPSBudWxsOworICAgICAgICB2YXIgZm9sZCA9IG51bGw7CisgICAg
ICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChkb2NSb3csIGRvY0NvbHVtbiwgMSk7CisgICAgICAg
IGlmIChmb2xkKSB7CisgICAgICAgICAgICBkb2NSb3cgPSBmb2xkLnN0YXJ0LnJvdzsKKyAgICAg
ICAgICAgIGRvY0NvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHJvd0VuZCwgcm93ID0gMDsKKworCisgICAgICAgIHZhciByb3dDYWNoZSA9IHRoaXMu
JGRvY1Jvd0NhY2hlOworICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0NhY2hlSW5kZXgocm93
Q2FjaGUsIGRvY1Jvdyk7CisgICAgICAgIHZhciBsID0gcm93Q2FjaGUubGVuZ3RoOworICAgICAg
ICBpZiAobCAmJiBpID49IDApIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByb3dDYWNoZVtpXTsK
KyAgICAgICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLiRzY3JlZW5Sb3dDYWNoZVtpXTsKKyAg
ICAgICAgICAgIHZhciBkb0NhY2hlID0gZG9jUm93ID4gcm93Q2FjaGVbbCAtIDFdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKHJvdyk7CisgICAgICAg
IHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTsK
KworICAgICAgICB3aGlsZSAocm93IDwgZG9jUm93KSB7CisgICAgICAgICAgICBpZiAocm93ID49
IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3cg
KyAxOworICAgICAgICAgICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9s
ZExpbmUocm93RW5kLCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9s
ZExpbmUgP2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cgKyAxOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzY3JlZW5Sb3cgKz0gdGhpcy5nZXRSb3dMZW5ndGgocm93
KTsKKyAgICAgICAgICAgIHJvdyA9IHJvd0VuZDsKKworICAgICAgICAgICAgaWYgKGRvQ2FjaGUp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKHJvdyk7CisgICAgICAg
ICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChzY3JlZW5Sb3cpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0TGluZSA9ICIiOworICAgICAgICBpZiAo
Zm9sZExpbmUgJiYgcm93ID49IGZvbGRTdGFydCkgeworICAgICAgICAgICAgdGV4dExpbmUgPSB0
aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSwgZG9jUm93LCBkb2NDb2x1bW4pOworICAg
ICAgICAgICAgZm9sZFN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdGV4dExpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KS5zdWJzdHJp
bmcoMCwgZG9jQ29sdW1uKTsKKyAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGRvY1JvdzsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgIHZh
ciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0Um93XTsKKyAgICAgICAgICAgIHZh
ciBzY3JlZW5Sb3dPZmZzZXQgPSAwOworICAgICAgICAgICAgd2hpbGUgKHRleHRMaW5lLmxlbmd0
aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5S
b3cgKys7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93T2Zmc2V0Kys7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRleHRMaW5lLnN1YnN0cmluZygKKyAgICAgICAgICAg
ICAgICB3cmFwUm93W3NjcmVlblJvd09mZnNldCAtIDFdIHx8IDAsIHRleHRMaW5lLmxlbmd0aAor
ICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICByb3c6IHNjcmVlblJvdywKKyAgICAgICAgICAgIGNvbHVtbjogdGhpcy4kZ2V0U3RyaW5nU2Ny
ZWVuV2lkdGgodGV4dExpbmUpWzBdCisgICAgICAgIH07CisgICAgfTsKKyAgICB0aGlzLmRvY3Vt
ZW50VG9TY3JlZW5Db2x1bW4gPSBmdW5jdGlvbihyb3csIGRvY0NvbHVtbikgeworICAgICAgICBy
ZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBkb2NDb2x1bW4pLmNvbHVt
bjsKKyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyA9IGZ1bmN0aW9uKGRvY1Jv
dywgZG9jQ29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3Np
dGlvbihkb2NSb3csIGRvY0NvbHVtbikucm93OworICAgIH07CisgICAgdGhpcy5nZXRTY3JlZW5M
ZW5ndGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOworICAgICAg
ICB2YXIgZm9sZCA9IG51bGw7CisgICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAg
ICAgICAgICAgIHNjcmVlblJvd3MgPSB0aGlzLmdldExlbmd0aCgpOworICAgICAgICAgICAgdmFy
IGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRE
YXRhW2ldOworICAgICAgICAgICAgICAgIHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93IC0gZm9s
ZC5zdGFydC5yb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgbGFzdFJvdyA9IHRoaXMuJHdyYXBEYXRhLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBy
b3cgPSAwLCBpID0gMDsKKyAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsr
XTsKKyAgICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOklu
ZmluaXR5OworCisgICAgICAgICAgICB3aGlsZSAocm93IDwgbGFzdFJvdykgeworICAgICAgICAg
ICAgICAgIHNjcmVlblJvd3MgKz0gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOworICAg
ICAgICAgICAgICAgIHJvdyArKzsKKyAgICAgICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0
KSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IGZvbGQuZW5kLnJvdysxOworICAgICAgICAg
ICAgICAgICAgICBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9sZFN0YXJ0ID0gZm9sZCA/Zm9sZC5zdGFydC5yb3cgOkluZmluaXR5OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzY3Jl
ZW5Sb3dzOworICAgIH07CisgICAgZnVuY3Rpb24gaXNGdWxsV2lkdGgoYykgeworICAgICAgICBp
ZiAoYyA8IDB4MTEwMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IGMgPj0gMHgxMTAwICYmIGMgPD0gMHgxMTVGIHx8CisgICAgICAgICAgICAgICBjID49IDB4MTFB
MyAmJiBjIDw9IDB4MTFBNyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDExRkEgJiYgYyA8PSAw
eDExRkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyMzI5ICYmIGMgPD0gMHgyMzJBIHx8Cisg
ICAgICAgICAgICAgICBjID49IDB4MkU4MCAmJiBjIDw9IDB4MkU5OSB8fAorICAgICAgICAgICAg
ICAgYyA+PSAweDJFOUIgJiYgYyA8PSAweDJFRjMgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgy
RjAwICYmIGMgPD0gMHgyRkQ1IHx8CisgICAgICAgICAgICAgICBjID49IDB4MkZGMCAmJiBjIDw9
IDB4MkZGQiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMwMDAgJiYgYyA8PSAweDMwM0UgfHwK
KyAgICAgICAgICAgICAgIGMgPj0gMHgzMDQxICYmIGMgPD0gMHgzMDk2IHx8CisgICAgICAgICAg
ICAgICBjID49IDB4MzA5OSAmJiBjIDw9IDB4MzBGRiB8fAorICAgICAgICAgICAgICAgYyA+PSAw
eDMxMDUgJiYgYyA8PSAweDMxMkQgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMTMxICYmIGMg
PD0gMHgzMThFIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzE5MCAmJiBjIDw9IDB4MzFCQSB8
fAorICAgICAgICAgICAgICAgYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRTMgfHwKKyAgICAgICAg
ICAgICAgIGMgPj0gMHgzMUYwICYmIGMgPD0gMHgzMjFFIHx8CisgICAgICAgICAgICAgICBjID49
IDB4MzIyMCAmJiBjIDw9IDB4MzI0NyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMyNTAgJiYg
YyA8PSAweDMyRkUgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMzAwICYmIGMgPD0gMHg0REJG
IHx8CisgICAgICAgICAgICAgICBjID49IDB4NEUwMCAmJiBjIDw9IDB4QTQ4QyB8fAorICAgICAg
ICAgICAgICAgYyA+PSAweEE0OTAgJiYgYyA8PSAweEE0QzYgfHwKKyAgICAgICAgICAgICAgIGMg
Pj0gMHhBOTYwICYmIGMgPD0gMHhBOTdDIHx8CisgICAgICAgICAgICAgICBjID49IDB4QUMwMCAm
JiBjIDw9IDB4RDdBMyB8fAorICAgICAgICAgICAgICAgYyA+PSAweEQ3QjAgJiYgYyA8PSAweEQ3
QzYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhEN0NCICYmIGMgPD0gMHhEN0ZCIHx8CisgICAg
ICAgICAgICAgICBjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRiB8fAorICAgICAgICAgICAgICAg
YyA+PSAweEZFMTAgJiYgYyA8PSAweEZFMTkgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRTMw
ICYmIGMgPD0gMHhGRTUyIHx8CisgICAgICAgICAgICAgICBjID49IDB4RkU1NCAmJiBjIDw9IDB4
RkU2NiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZFNjggJiYgYyA8PSAweEZFNkIgfHwKKyAg
ICAgICAgICAgICAgIGMgPj0gMHhGRjAxICYmIGMgPD0gMHhGRjYwIHx8CisgICAgICAgICAgICAg
ICBjID49IDB4RkZFMCAmJiBjIDw9IDB4RkZFNjsKKyAgICB9OworCit9KS5jYWxsKEVkaXRTZXNz
aW9uLnByb3RvdHlwZSk7CisKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2ZvbGRpbmciKS5Gb2xk
aW5nLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9u
L2JyYWNrZXRfbWF0Y2giKS5CcmFja2V0TWF0Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUp
OworCitleHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247Cit9KTsKKworYWNlLmRlZmlu
ZSgnYWNlL2NvbmZpZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9sYW5nJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9saWIvZXZlbnRfZW1p
dHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKyJubyB1c2Ugc3Ry
aWN0IjsKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgb29wID0gcmVx
dWlyZSgiLi9saWIvb29wIik7Cit2YXIgbmV0ID0gcmVxdWlyZSgiLi9saWIvbmV0Iik7Cit2YXIg
RXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRl
cjsKKwordmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpczsKK30pKCk7
CisKK3ZhciBvcHRpb25zID0geworICAgIHBhY2thZ2VkOiBmYWxzZSwKKyAgICB3b3JrZXJQYXRo
OiBudWxsLAorICAgIG1vZGVQYXRoOiBudWxsLAorICAgIHRoZW1lUGF0aDogbnVsbCwKKyAgICBi
YXNlUGF0aDogIiIsCisgICAgc3VmZml4OiAiLmpzIiwKKyAgICAkbW9kdWxlVXJsczoge30KK307
CisKK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgaWYgKCFvcHRpb25zLmhhc093
blByb3BlcnR5KGtleSkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb25maWcg
a2V5OiAiICsga2V5KTsKKworICAgIHJldHVybiBvcHRpb25zW2tleV07Cit9OworCitleHBvcnRz
LnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJv
cGVydHkoa2V5KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6
ICIgKyBrZXkpOworCisgICAgb3B0aW9uc1trZXldID0gdmFsdWU7Cit9OworCitleHBvcnRzLmFs
bCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBsYW5nLmNvcHlPYmplY3Qob3B0aW9ucyk7Cit9
Oworb29wLmltcGxlbWVudChleHBvcnRzLCBFdmVudEVtaXR0ZXIpOworCitleHBvcnRzLm1vZHVs
ZVVybCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBvbmVudCkgeworICAgIGlmIChvcHRpb25zLiRtb2R1
bGVVcmxzW25hbWVdKQorICAgICAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXTsK
KworICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoIi8iKTsKKyAgICBjb21wb25lbnQgPSBjb21w
b25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMl0gfHwgIiI7CisgICAgdmFyIGJhc2UgPSBw
YXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBsYWNlKGNvbXBvbmVudCwgIiIpLnJlcGxhY2UoLyhe
W1wtX10pfChbXC1fXSQpLywgIiIpOworCisgICAgaWYgKCFiYXNlICYmIHBhcnRzLmxlbmd0aCA+
IDEpCisgICAgICAgIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXTsKKyAgICB2YXIgcGF0
aCA9IG9wdGlvbnNbY29tcG9uZW50ICsgIlBhdGgiXTsKKyAgICBpZiAocGF0aCA9PSBudWxsKQor
ICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDsKKyAgICBpZiAocGF0aCAmJiBwYXRoLnNs
aWNlKC0xKSAhPSAiLyIpCisgICAgICAgIHBhdGggKz0gIi8iOworICAgIHJldHVybiBwYXRoICsg
Y29tcG9uZW50ICsgIi0iICsgYmFzZSArIHRoaXMuZ2V0KCJzdWZmaXgiKTsKK307CisKK2V4cG9y
dHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgc3Vic3QpIHsKKyAgICByZXR1cm4gb3B0
aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSA9IHN1YnN0OworfTsKKworZXhwb3J0cy5sb2FkTW9kdWxl
ID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgb25Mb2FkKSB7CisgICAgdmFyIG1vZHVsZSwgbW9kdWxl
VHlwZTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGVOYW1lKSkgeworICAgICAgICBtb2R1
bGVUeXBlID0gbW9kdWxlTmFtZVswXTsKKyAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVb
MV07CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIG1vZHVsZSA9IHJlcXVpcmUobW9kdWxlTmFt
ZSk7CisgICAgfSBjYXRjaCAoZSkge307CisgICAgaWYgKG1vZHVsZSkKKyAgICAgICAgcmV0dXJu
IG9uTG9hZChtb2R1bGUpOworCisgICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXF1aXJlKFttb2R1bGVOYW1lXSwgZnVuY3Rpb24obW9kdWxlKSB7CisgICAgICAgICAg
ICBleHBvcnRzLl9lbWl0KCJsb2FkLm1vZHVsZSIsIHtuYW1lOiBtb2R1bGVOYW1lLCBtb2R1bGU6
IG1vZHVsZX0pOworICAgICAgICAgICAgb25Mb2FkKG1vZHVsZSk7CisgICAgICAgIH0pOworICAg
IH07CisKKyAgICBpZiAoIWV4cG9ydHMuZ2V0KCJwYWNrYWdlZCIpKQorICAgICAgICByZXR1cm4g
YWZ0ZXJMb2FkKCk7CisgICAgbmV0LmxvYWRTY3JpcHQoZXhwb3J0cy5tb2R1bGVVcmwobW9kdWxl
TmFtZSwgbW9kdWxlVHlwZSksIGFmdGVyTG9hZCk7Cit9OworZXhwb3J0cy5pbml0ID0gZnVuY3Rp
b24oKSB7CisgICAgb3B0aW9ucy5wYWNrYWdlZCA9IHJlcXVpcmUucGFja2FnZWQgfHwgbW9kdWxl
LnBhY2thZ2VkIHx8IChnbG9iYWwuZGVmaW5lICYmIGRlZmluZS5wYWNrYWdlZCk7CisKKyAgICBp
ZiAoIWdsb2JhbC5kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgdmFyIHNjcmlw
dE9wdGlvbnMgPSB7fTsKKyAgICB2YXIgc2NyaXB0VXJsID0gIiI7CisKKyAgICB2YXIgc2NyaXB0
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKKyAgICBmb3IgKHZh
ciBpPTA7IGk8c2NyaXB0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgc2NyaXB0ID0gc2Ny
aXB0c1tpXTsKKworICAgICAgICB2YXIgc3JjID0gc2NyaXB0LnNyYyB8fCBzY3JpcHQuZ2V0QXR0
cmlidXRlKCJzcmMiKTsKKyAgICAgICAgaWYgKCFzcmMpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzOworICAgICAgICBm
b3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKyspIHsKKyAgICAgICAg
ICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tqXTsKKyAgICAgICAgICAgIGlmIChhdHRyLm5hbWUu
aW5kZXhPZigiZGF0YS1hY2UtIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRPcHRp
b25zW2RlSHlwaGVuYXRlKGF0dHIubmFtZS5yZXBsYWNlKC9eZGF0YS1hY2UtLywgIiIpKV0gPSBh
dHRyLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIG0gPSBz
cmMubWF0Y2goL14oLiopXC9hY2UoXC1cdyspP1wuanMoXD98JCkvKTsKKyAgICAgICAgaWYgKG0p
CisgICAgICAgICAgICBzY3JpcHRVcmwgPSBtWzFdOworICAgIH0KKworICAgIGlmIChzY3JpcHRV
cmwpIHsKKyAgICAgICAgc2NyaXB0T3B0aW9ucy5iYXNlID0gc2NyaXB0T3B0aW9ucy5iYXNlIHx8
IHNjcmlwdFVybDsKKyAgICAgICAgc2NyaXB0T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7CisgICAg
fQorCisgICAgc2NyaXB0T3B0aW9ucy5iYXNlUGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAg
ICBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggPSBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggfHwg
c2NyaXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMubW9kZVBhdGggPSBzY3JpcHRP
cHRpb25zLm1vZGVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAgICBzY3JpcHRPcHRpb25z
LnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFz
ZTsKKyAgICBkZWxldGUgc2NyaXB0T3B0aW9ucy5iYXNlOworCisgICAgZm9yICh2YXIga2V5IGlu
IHNjcmlwdE9wdGlvbnMpCisgICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9
PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgc2NyaXB0T3B0aW9u
c1trZXldKTsKK307CisKK2Z1bmN0aW9uIGRlSHlwaGVuYXRlKHN0cikgeworICAgIHJldHVybiBz
dHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNh
c2UoKTsgfSk7Cit9CisKK30pOworYWNlLmRlZmluZSgnYWNlL2xpYi9uZXQnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIu
L3VzZXJhZ2VudCIpOworCitleHBvcnRzLmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7
CisgICAgdmFyIHhociA9IGV4cG9ydHMuY3JlYXRlWGhyKCk7CisgICAgeGhyLm9wZW4oJ0dFVCcs
IHVybCwgdHJ1ZSk7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChldnQp
IHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CisgICAgICAgICAgICBjYWxs
YmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgeGhyLnNlbmQo
bnVsbCk7Cit9OworCit2YXIgcHJvZ0lkcyA9IFsnTXN4bWwyLlhNTEhUVFAnLCAnTWljcm9zb2Z0
LlhNTEhUVFAnLCAnTXN4bWwyLlhNTEhUVFAuNC4wJ107CisKK2V4cG9ydHMuY3JlYXRlWGhyID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIHhociwgaSwgcHJvZ0lkOworICAgIGlmICh0eXBlb2YgWE1M
SHR0cFJlcXVlc3QgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgIHJldHVybiBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsr
KSB7CisgICAgICAgICAgICBwcm9nSWQgPSBwcm9nSWRzW2ldOworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdChwcm9nSWQpOworICAgICAg
ICAgICAgfSBjYXRjaCAoZSkge30KKworICAgICAgICAgICAgaWYgKHhocikgeworICAgICAgICAg
ICAgICAgIHByb2dJZHMgPSBbcHJvZ0lkXTsgIC8vIHNvIGZhc3RlciBuZXh0IHRpbWUKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICgheGhyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiY3JlYXRlWGhyKCk6IFhNTEh0
dHBSZXF1ZXN0IG5vdCBhdmFpbGFibGUiKTsKKyAgICB9CisKKyAgICByZXR1cm4geGhyOworfTsK
KworZXhwb3J0cy5sb2FkU2NyaXB0ID0gZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spIHsKKyAgICB2
YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisgICAg
dmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKworICAgIHMuc3JjID0g
cGF0aDsKKyAgICBoZWFkLmFwcGVuZENoaWxkKHMpOworCisgICAgaWYgKHVzZXJhZ2VudC5pc09s
ZElFKQorICAgICAgICBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9PSAnbG9hZGVkJyAmJiBjYWxsYmFjaygpOworICAgICAg
ICB9OworICAgIGVsc2UKKyAgICAgICAgcy5vbmxvYWQgPSBjYWxsYmFjazsKK307CisKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBFdmVudEVtaXR0ZXIgPSB7fTsKKworRXZlbnRFbWl0dGVyLl9lbWl0ID0KK0V2ZW50RW1p
dHRlci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgeworICAgIHRoaXMu
X2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OworICAgIHRoaXMuX2Rl
ZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7fTsKKworICAgIHZhciBs
aXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107CisgICAgdmFy
IGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07CisgICAg
aWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQorICAgICAgICBlID0ge307
CisKKyAgICBpZiAoIWUudHlwZSkKKyAgICAgICAgZS50eXBlID0gZXZlbnROYW1lOworICAgIAor
ICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1
ZTsKKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KSB7
CisgICAgICAgIGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRo
aXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7CisgICAgICAgIH07CisgICAgfQorCisgICAgZm9y
ICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykgeworICAgICAgICBsaXN0ZW5lcnNb
aV0oZSk7CisgICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVmYXVsdFBy
ZXZlbnRlZCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUpOworfTsKKworRXZlbnRF
bWl0dGVyLnNldERlZmF1bHRIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFjaykg
eworICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7
fTsKKyAgICAKKyAgICBpZiAodGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV0pCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiVGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgJyIgKyBldmVudE5h
bWUgKyAiJyBpcyBhbHJlYWR5IHNldCIpOworICAgICAgICAKKyAgICB0aGlzLl9kZWZhdWx0SGFu
ZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOworfTsKKworRXZlbnRFbWl0dGVyLm9uID0KK0V2
ZW50RW1pdHRlci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFj
aykgeworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9
OworCisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsK
KyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdp
c3RyeVtldmVudE5hbWVdID0gW107CisKKyAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJh
Y2spID09IC0xKQorICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7Cit9OworCitFdmVu
dEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQorRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZXZlbnRSZWdp
c3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CisKKyAgICB2YXIgbGlzdGVuZXJzID0g
dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzKQorICAg
ICAgICByZXR1cm47CisKKyAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFj
ayk7CisgICAgaWYgKGluZGV4ICE9PSAtMSkKKyAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRl
eCwgMSk7Cit9OworCitFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24o
ZXZlbnROYW1lKSB7CisgICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVn
aXN0cnlbZXZlbnROYW1lXSA9IFtdOworfTsKKworZXhwb3J0cy5FdmVudEVtaXR0ZXIgPSBFdmVu
dEVtaXR0ZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uvc2VsZWN0aW9uJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2
YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1
aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFJhbmdlID0gcmVx
dWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlc3Npb24p
IHsKKyAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuZG9jID0gc2Vzc2lvbi5n
ZXREb2N1bWVudCgpOworCisgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIHRoaXMubGVh
ZCA9IHRoaXMuc2VsZWN0aW9uTGVhZCA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAwKTsKKyAg
ICB0aGlzLmFuY2hvciA9IHRoaXMuc2VsZWN0aW9uQW5jaG9yID0gdGhpcy5kb2MuY3JlYXRlQW5j
aG9yKDAsIDApOworCisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMubGVhZC5vbigiY2hh
bmdlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VDdXJzb3IiKTsK
KyAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5KQorICAgICAgICAgICAgc2VsZi5fZW1pdCgiY2hh
bmdlU2VsZWN0aW9uIik7CisgICAgICAgIGlmICghc2VsZi4ka2VlcERlc2lyZWRDb2x1bW5PbkNo
YW5nZSAmJiBlLm9sZC5jb2x1bW4gIT0gZS52YWx1ZS5jb2x1bW4pCisgICAgICAgICAgICBzZWxm
LiRkZXNpcmVkQ29sdW1uID0gbnVsbDsKKyAgICB9KTsKKworICAgIHRoaXMuc2VsZWN0aW9uQW5j
aG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5
KQorICAgICAgICAgICAgc2VsZi5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgfSk7Cit9
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRl
cik7CisgICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAodGhp
cy4kaXNFbXB0eSB8fCAoCisgICAgICAgICAgICB0aGlzLmFuY2hvci5yb3cgPT0gdGhpcy5sZWFk
LnJvdyAmJgorICAgICAgICAgICAgdGhpcy5hbmNob3IuY29sdW1uID09IHRoaXMubGVhZC5jb2x1
bW4KKyAgICAgICAgKSk7CisgICAgfTsKKyAgICB0aGlzLmlzTXVsdGlMaW5lID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2UoKS5pc011bHRp
TGluZSgpOworICAgIH07CisgICAgdGhpcy5nZXRDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubGVhZC5nZXRQb3NpdGlvbigpOworICAgIH07CisgICAgdGhpcy5zZXRT
ZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0aGlzLmFu
Y2hvci5zZXRQb3NpdGlvbihyb3csIGNvbHVtbik7CisKKyAgICAgICAgaWYgKHRoaXMuJGlzRW1w
dHkpIHsKKyAgICAgICAgICAgIHRoaXMuJGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlz
LmdldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy4kaXNF
bXB0eSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkxlYWQoKQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmNob3IuZ2V0UG9zaXRpb24oKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLnNoaWZ0U2Vs
ZWN0aW9uID0gZnVuY3Rpb24oY29sdW1ucykgeworICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkg
eworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8odGhpcy5sZWFkLnJvdywgdGhpcy5sZWFk
LmNvbHVtbiArIGNvbHVtbnMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9OworCisg
ICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbkFuY2hvcigpOworICAgICAgICB2
YXIgbGVhZCA9IHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpOworCisgICAgICAgIHZhciBpc0JhY2t3
YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTsKKworICAgICAgICBpZiAoIWlzQmFja3dhcmRzIHx8
IGFuY2hvci5jb2x1bW4gIT09IDApCisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hv
cihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uICsgY29sdW1ucyk7CisKKyAgICAgICAgaWYgKGlz
QmFja3dhcmRzIHx8IGxlYWQuY29sdW1uICE9PSAwKSB7CisgICAgICAgICAgICB0aGlzLiRtb3Zl
U2VsZWN0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRv
KGxlYWQucm93LCBsZWFkLmNvbHVtbiArIGNvbHVtbnMpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIHRoaXMuaXNCYWNrd2FyZHMgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGFuY2hvciA9IHRoaXMuYW5jaG9yOworICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVh
ZDsKKyAgICAgICAgcmV0dXJuIChhbmNob3Iucm93ID4gbGVhZC5yb3cgfHwgKGFuY2hvci5yb3cg
PT0gbGVhZC5yb3cgJiYgYW5jaG9yLmNvbHVtbiA+IGxlYWQuY29sdW1uKSk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhbmNob3IgPSB0aGlz
LmFuY2hvcjsKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisKKyAgICAgICAgaWYgKHRo
aXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMobGVhZCwg
bGVhZCk7CisKKyAgICAgICAgaWYgKHRoaXMuaXNCYWNrd2FyZHMoKSkgeworICAgICAgICAgICAg
cmV0dXJuIFJhbmdlLmZyb21Qb2ludHMobGVhZCwgYW5jaG9yKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGFuY2hvciwgbGVh
ZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRpc0VtcHR5KSB7CisgICAgICAgICAgICB0aGlzLiRp
c0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIp
OworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKKyAgICAgICAg
dGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoMCwgMCk7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRv
KGxhc3RSb3csIHRoaXMuZG9jLmdldExpbmUobGFzdFJvdykubGVuZ3RoKTsKKyAgICB9OworICAg
IHRoaXMuc2V0UmFuZ2UgPQorICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihy
YW5nZSwgcmV2ZXJzZSkgeworICAgICAgICBpZiAocmV2ZXJzZSkgeworICAgICAgICAgICAgdGhp
cy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7Cisg
ICAgICAgICAgICB0aGlzLnNlbGVjdFRvKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29s
dW1uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5j
aG9yKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgIHRo
aXMuc2VsZWN0VG8ocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7CisgICAgfTsKKworICAgIHRoaXMu
JG1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihtb3ZlcikgeworICAgICAgICB2YXIgbGVhZCA9IHRo
aXMubGVhZDsKKyAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpCisgICAgICAgICAgICB0aGlzLnNl
dFNlbGVjdGlvbkFuY2hvcihsZWFkLnJvdywgbGVhZC5jb2x1bW4pOworCisgICAgICAgIG1vdmVy
LmNhbGwodGhpcyk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFRvID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4pIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAgICAgICAgfSk7CisgICAg
fTsKKyAgICB0aGlzLnNlbGVjdFRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAg
dGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1
cnNvclRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVj
dFVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3Zl
Q3Vyc29yVXApOworICAgIH07CisgICAgdGhpcy5zZWxlY3REb3duID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRG93bik7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdFJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVT
ZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yUmlnaHQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RM
ZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3Zl
Q3Vyc29yTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdExpbmVTdGFydCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVTdGFy
dCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdExpbmVFbmQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMaW5lRW5kKTsKKyAgICB9Owor
ICAgIHRoaXMuc2VsZWN0RmlsZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3Zl
U2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVFbmQpOworICAgIH07CisgICAgdGhpcy5zZWxl
Y3RGaWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0
aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RXb3JkUmln
aHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVD
dXJzb3JXb3JkUmlnaHQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RXb3JkTGVmdCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRM
ZWZ0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0V29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpIHsKKyAgICAg
ICAgICAgIHZhciBjdXJzb3IgPSByb3cgfHwgdGhpcy5sZWFkOworICAgICAgICAgICAgcm93ID0g
Y3Vyc29yLnJvdzsKKyAgICAgICAgICAgIGNvbHVtbiA9IGN1cnNvci5jb2x1bW47CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2Uocm93LCBjb2x1bW4p
OworICAgIH07CisgICAgdGhpcy5zZWxlY3RXb3JkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRXb3JkUmFuZ2UoKSk7CisgICAgfTsKKyAgICB0
aGlzLnNlbGVjdEFXb3JkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlz
LmdldEN1cnNvcigpOworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QVdvcmRS
YW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgdGhpcy5zZXRTZWxlY3Rp
b25SYW5nZShyYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0TGluZVJhbmdlID0gZnVuY3Rp
b24ocm93LCBleGNsdWRlTGFzdENoYXIpIHsKKyAgICAgICAgdmFyIHJvd1N0YXJ0ID0gdHlwZW9m
IHJvdyA9PSAibnVtYmVyIiA/IHJvdyA6IHRoaXMubGVhZC5yb3c7CisgICAgICAgIHZhciByb3dF
bmQ7CisKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJv
d1N0YXJ0KTsKKyAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICByb3dTdGFydCA9
IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5y
b3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByb3dFbmQgPSByb3dTdGFydDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZXhjbHVkZUxhc3RDaGFyKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kLCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dF
bmQpLmxlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uo
cm93U3RhcnQsIDAsIHJvd0VuZCArIDEsIDApOworICAgIH07CisgICAgdGhpcy5zZWxlY3RMaW5l
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRM
aW5lUmFuZ2UoKSk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JVcCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgtMSwgMCk7CisgICAgfTsKKyAgICB0aGlzLm1v
dmVDdXJzb3JEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDEs
IDApOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksCisgICAgICAgICAgICBm
b2xkOworCisgICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iu
cm93LCBjdXJzb3IuY29sdW1uLCAtMSkpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRv
KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CisgICAgICAgIH0gZWxzZSBpZiAo
Y3Vyc29yLmNvbHVtbiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLnJvdyA+IDApIHsK
KyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhjdXJzb3Iucm93IC0gMSwgdGhpcy5k
b2MuZ2V0TGluZShjdXJzb3Iucm93IC0gMSkubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNz
aW9uLmdldFRhYlNpemUoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uaXNUYWJTdG9w
KGN1cnNvcikgJiYgdGhpcy5kb2MuZ2V0TGluZShjdXJzb3Iucm93KS5zbGljZShjdXJzb3IuY29s
dW1uLXRhYlNpemUsIGN1cnNvci5jb2x1bW4pLnNwbGl0KCIgIikubGVuZ3RoLTEgPT0gdGFiU2l6
ZSkKKyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCAtdGFiU2l6ZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgLTEpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksCisgICAgICAg
ICAgICBmb2xkOworICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoY3Vy
c29yLnJvdywgY3Vyc29yLmNvbHVtbiwgMSkpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNv
clRvKGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh0aGlzLmxlYWQuY29sdW1uID09IHRoaXMuZG9jLmdldExpbmUodGhpcy5sZWFkLnJv
dykubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5sZWFkLnJvdyA8IHRoaXMuZG9jLmdl
dExlbmd0aCgpIC0gMSkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHRoaXMu
bGVhZC5yb3cgKyAxLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTsK
KyAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQ7CisgICAgICAgICAgICBpZiAodGhp
cy5zZXNzaW9uLmlzVGFiU3RvcChjdXJzb3IpICYmIHRoaXMuZG9jLmdldExpbmUoY3Vyc29yLnJv
dykuc2xpY2UoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbit0YWJTaXplKS5zcGxpdCgiICIp
Lmxlbmd0aC0xID09IHRhYlNpemUpCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnko
MCwgdGFiU2l6ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5tb3Zl
Q3Vyc29yQnkoMCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxp
bmVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsK
KyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisgICAgICAgIHZhciBzY3Jl
ZW5Sb3cgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhyb3csIGNvbHVtbik7Cisg
ICAgICAgIHZhciBmaXJzdENvbHVtblBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9j
dW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIDApOworICAgICAgICB2YXIgYmVmb3JlQ3Vyc29yID0g
dGhpcy5zZXNzaW9uLmdldERpc3BsYXlMaW5lKAorICAgICAgICAgICAgcm93LCBudWxsLCBmaXJz
dENvbHVtblBvc2l0aW9uLnJvdywKKyAgICAgICAgICAgIGZpcnN0Q29sdW1uUG9zaXRpb24uY29s
dW1uCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIGxlYWRpbmdTcGFjZSA9IGJlZm9yZUN1cnNv
ci5tYXRjaCgvXlxzKi8pOworICAgICAgICBpZiAobGVhZGluZ1NwYWNlWzBdLmxlbmd0aCAhPSBj
b2x1bW4gJiYgIXRoaXMuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCkKKyAgICAgICAg
ICAgIGZpcnN0Q29sdW1uUG9zaXRpb24uY29sdW1uICs9IGxlYWRpbmdTcGFjZVswXS5sZW5ndGg7
CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oZmlyc3RDb2x1bW5Qb3NpdGlvbik7
CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JMaW5lRW5kID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICB2YXIgbGluZUVuZCA9IHRoaXMuc2Vz
c2lvbi5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbihsZWFkLnJvdywgbGVhZC5jb2x1
bW4pOworICAgICAgICBpZiAodGhpcy5sZWFkLmNvbHVtbiA9PSBsaW5lRW5kLmNvbHVtbikgewor
ICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShsaW5lRW5kLnJvdyk7
CisgICAgICAgICAgICBpZiAobGluZUVuZC5jb2x1bW4gPT0gbGluZS5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgdGV4dEVuZCA9IGxpbmUuc2VhcmNoKC9ccyskLyk7CisgICAgICAgICAg
ICAgICAgaWYgKHRleHRFbmQgPiAwKQorICAgICAgICAgICAgICAgICAgICBsaW5lRW5kLmNvbHVt
biA9IHRleHRFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm1v
dmVDdXJzb3JUbyhsaW5lRW5kLnJvdywgbGluZUVuZC5jb2x1bW4pOworICAgIH07CisgICAgdGhp
cy5tb3ZlQ3Vyc29yRmlsZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhp
cy5kb2MuZ2V0TGVuZ3RoKCkgLSAxOworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5kb2MuZ2V0
TGluZShyb3cpLmxlbmd0aDsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4p
OworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMubW92ZUN1cnNvclRvKDAsIDApOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vy
c29yTG9uZ1dvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5s
ZWFkLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisgICAgICAg
IHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgcmlnaHRPZkN1
cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisKKyAgICAgICAgdmFyIG1hdGNoOworICAg
ICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICB0aGlz
LnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICB2YXIgZm9sZCA9IHRoaXMu
c2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkgewor
ICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1
bW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaCA9
IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKKyAgICAgICAg
ICAgIGNvbHVtbiArPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg7CisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAg
cmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbHVtbiA+PSBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vy
c29yVG8ocm93LCBsaW5lLmxlbmd0aCk7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JSaWdo
dCgpOworICAgICAgICAgICAgaWYgKHJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMSkKKyAg
ICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5S
ZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7CisgICAgICAgICAgICBjb2x1bW4gKz0gdGhpcy5zZXNz
aW9uLnRva2VuUmUubGFzdEluZGV4OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUu
bGFzdEluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJv
dywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsKKyAgICAgICAgdmFy
IGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisgICAgICAgIHZhciBmb2xkOworICAgICAgICBp
ZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIC0xKSkgeworICAg
ICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29s
dW1uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdHIg
PSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KHJvdywgY29sdW1uLCAtMSk7CisgICAgICAg
IGlmIChzdHIgPT0gbnVsbCkgeworICAgICAgICAgICAgc3RyID0gdGhpcy5kb2MuZ2V0TGluZShy
b3cpLnN1YnN0cmluZygwLCBjb2x1bW4pCisgICAgICAgIH0KKworICAgICAgICB2YXIgbGVmdE9m
Q3Vyc29yID0gbGFuZy5zdHJpbmdSZXZlcnNlKHN0cik7CisgICAgICAgIHZhciBtYXRjaDsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgdGhp
cy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgaWYgKG1hdGNoID0gdGhp
cy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhsZWZ0T2ZDdXJzb3IpKSB7CisgICAgICAgICAgICBj
b2x1bW4gLT0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4OworICAgICAgICAgICAg
bGVmdE9mQ3Vyc29yID0gbGVmdE9mQ3Vyc29yLnNsaWNlKHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJl
Lmxhc3RJbmRleCk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5k
ZXggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChjb2x1bW4gPD0gMCkgeworICAgICAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCAwKTsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNv
ckxlZnQoKTsKKyAgICAgICAgICAgIGlmIChyb3cgPiAwKQorICAgICAgICAgICAgICAgIHRoaXMu
bW92ZUN1cnNvcldvcmRMZWZ0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1hdGNoID0gdGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhsZWZ0T2ZDdXJzb3Ip
KSB7CisgICAgICAgICAgICBjb2x1bW4gLT0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4
OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAgICB9Owor
CisgICAgdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXggPSBmdW5jdGlvbihyaWdodE9mQ3Vyc29yKSB7
CisgICAgICAgIHZhciBtYXRjaCwgaW5kZXggPSAwLCBjaDsKKyAgICAgICAgdmFyIHdoaXRlc3Bh
Y2VSZSA9IC9ccy87CisgICAgICAgIHZhciB0b2tlblJlID0gdGhpcy5zZXNzaW9uLnRva2VuUmU7
CisKKyAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICBpZiAobWF0Y2ggPSB0
aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7CisgICAgICAgICAgICBp
bmRleCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVz
cGFjZVJlLnRlc3QoY2gpKQorICAgICAgICAgICAgICAgIGluZGV4ICsrOworCisgICAgICAgICAg
ICBpZiAoaW5kZXggPD0gMSkgeworICAgICAgICAgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0g
MDsKKyAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAm
JiAhdG9rZW5SZS50ZXN0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlblJlLmxhc3RJ
bmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICsrOworICAgICAgICAgICAgICAg
ICAgICBpZiAod2hpdGVzcGFjZVJlLnRlc3QoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPiAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtLQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gcmln
aHRPZkN1cnNvcltpbmRleF0pICYmIHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID4gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlblJlLmxh
c3RJbmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH07CisKKyAgICB0aGlz
Lm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93
ID0gdGhpcy5sZWFkLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47
CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIg
cmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CisKKyAgICAgICAgdmFyIGZv
bGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTsKKyAgICAgICAgaWYg
KGZvbGQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93
LCBmb2xkLmVuZC5jb2x1bW4pOworCisgICAgICAgIGlmIChjb2x1bW4gPT0gbGluZS5sZW5ndGgp
IHsKKyAgICAgICAgICAgIHZhciBsID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAg
ICBkbyB7ICAgIAorICAgICAgICAgICAgICAgIHJvdysrOworICAgICAgICAgICAgICAgIHJpZ2h0
T2ZDdXJzb3IgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykKKyAgICAgICAgICAgIH0gd2hpbGUgKHJv
dyA8IGwgJiYgL15ccyokLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIS9eXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKQorICAgICAgICAgICAgICAg
IHJpZ2h0T2ZDdXJzb3IgPSAiIgorICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KHJpZ2h0T2ZDdXJz
b3IpOworCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uICsgaW5kZXgpOwor
ICAgIH07CisKKyAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0g
dGhpcy5sZWFkLmNvbHVtbjsKKworICAgICAgICB2YXIgZm9sZDsKKyAgICAgICAgaWYgKGZvbGQg
PSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAtMSkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1u
KTsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vic3Ry
aW5nKDAsIGNvbHVtbik7CisgICAgICAgIGlmIChjb2x1bW4gPT0gMCkgeworICAgICAgICAgICAg
ZG8geyAgICAKKyAgICAgICAgICAgICAgICByb3ctLTsKKyAgICAgICAgICAgICAgICBsaW5lID0g
dGhpcy5kb2MuZ2V0TGluZShyb3cpOworICAgICAgICAgICAgfSB3aGlsZSAocm93ID4gMCAmJiAv
XlxzKiQvLnRlc3QobGluZSkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbHVtbiA9IGxp
bmUubGVuZ3RoOworICAgICAgICAgICAgaWYgKCEvXHMrJC8udGVzdChsaW5lKSkKKyAgICAgICAg
ICAgICAgICBsaW5lID0gIiIKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZWZ0T2ZDdXJzb3Ig
PSBsYW5nLnN0cmluZ1JldmVyc2UobGluZSk7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNo
b3J0V29yZEVuZEluZGV4KGxlZnRPZkN1cnNvcik7CisKKyAgICAgICAgcmV0dXJuIHRoaXMubW92
ZUN1cnNvclRvKHJvdywgY29sdW1uIC0gaW5kZXgpOworICAgIH07CisKKyAgICB0aGlzLm1vdmVD
dXJzb3JXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4k
c2VsZWN0TG9uZ1dvcmRzKQorICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdo
dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRS
aWdodCgpOworICAgIH07CisKKyAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpCisgICAgICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdCgpOworICAgIH07CisgICAgdGhpcy5t
b3ZlQ3Vyc29yQnkgPSBmdW5jdGlvbihyb3dzLCBjaGFycykgeworICAgICAgICB2YXIgc2NyZWVu
UG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbigKKyAgICAgICAgICAg
IHRoaXMubGVhZC5yb3csCisgICAgICAgICAgICB0aGlzLmxlYWQuY29sdW1uCisgICAgICAgICk7
CisKKyAgICAgICAgaWYgKGNoYXJzID09PSAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy4kZGVz
aXJlZENvbHVtbikKKyAgICAgICAgICAgICAgICBzY3JlZW5Qb3MuY29sdW1uID0gdGhpcy4kZGVz
aXJlZENvbHVtbjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLiRkZXNp
cmVkQ29sdW1uID0gc2NyZWVuUG9zLmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBk
b2NQb3MgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblBvcy5y
b3cgKyByb3dzLCBzY3JlZW5Qb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
ZG9jUG9zLnJvdywgZG9jUG9zLmNvbHVtbiArIGNoYXJzLCBjaGFycyA9PT0gMCk7CisgICAgfTsK
KyAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwor
ICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbiwga2Vl
cERlc2lyZWRDb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9s
ZEF0KHJvdywgY29sdW1uLCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIHJv
dyA9IGZvbGQuc3RhcnQucm93OworICAgICAgICAgICAgY29sdW1uID0gZm9sZC5zdGFydC5jb2x1
bW47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdl
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5sZWFkLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKKyAg
ICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IGZhbHNlOworCisgICAgICAg
IGlmICgha2VlcERlc2lyZWRDb2x1bW4pCisgICAgICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1u
ID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvU2NyZWVuID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7CisgICAgICAgIHZhciBwb3MgPSB0aGlz
LnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgY29sdW1uKTsKKyAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4p
OworICAgIH07CisgICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5s
ZWFkLmRldGFjaCgpOworICAgICAgICB0aGlzLmFuY2hvci5kZXRhY2goKTsKKyAgICAgICAgdGhp
cy5zZXNzaW9uID0gdGhpcy5kb2MgPSBudWxsOworICAgIH0KKworICAgIHRoaXMuZnJvbU9yaWVu
dGVkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJh
bmdlKHJhbmdlLCByYW5nZS5jdXJzb3IgPT0gcmFuZ2Uuc3RhcnQpOworICAgICAgICB0aGlzLiRk
ZXNpcmVkQ29sdW1uID0gcmFuZ2UuZGVzaXJlZENvbHVtbiB8fCB0aGlzLiRkZXNpcmVkQ29sdW1u
OworICAgIH0KKworICAgIHRoaXMudG9PcmllbnRlZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsK
KyAgICAgICAgdmFyIHIgPSB0aGlzLmdldFJhbmdlKCk7CisgICAgICAgIGlmIChyYW5nZSkgewor
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gci5zdGFydC5jb2x1bW47CisgICAgICAg
ICAgICByYW5nZS5zdGFydC5yb3cgPSByLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJhbmdlLmVu
ZC5jb2x1bW4gPSByLmVuZC5jb2x1bW47CisgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gci5l
bmQucm93OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2UgPSByOworICAgICAg
ICB9CisKKyAgICAgICAgcmFuZ2UuY3Vyc29yID0gdGhpcy5pc0JhY2t3YXJkcygpID8gcmFuZ2Uu
c3RhcnQgOiByYW5nZS5lbmQ7CisgICAgICAgIHJhbmdlLmRlc2lyZWRDb2x1bW4gPSB0aGlzLiRk
ZXNpcmVkQ29sdW1uOworICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfQorCit9KS5jYWxsKFNl
bGVjdGlvbi5wcm90b3R5cGUpOworCitleHBvcnRzLlNlbGVjdGlvbiA9IFNlbGVjdGlvbjsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvcmFuZ2UnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIFJhbmdlID0g
ZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgeworICAg
IHRoaXMuc3RhcnQgPSB7CisgICAgICAgIHJvdzogc3RhcnRSb3csCisgICAgICAgIGNvbHVtbjog
c3RhcnRDb2x1bW4KKyAgICB9OworCisgICAgdGhpcy5lbmQgPSB7CisgICAgICAgIHJvdzogZW5k
Um93LAorICAgICAgICBjb2x1bW46IGVuZENvbHVtbgorICAgIH07Cit9OworCisoZnVuY3Rpb24o
KSB7IAorICAgIHRoaXMuaXNFcXVhbCA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJldHVy
biB0aGlzLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cgJiYKKyAgICAgICAgICAgIHRoaXMu
ZW5kLnJvdyA9PSByYW5nZS5lbmQucm93ICYmCisgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVt
biA9PSByYW5nZS5zdGFydC5jb2x1bW4gJiYKKyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9
PSByYW5nZS5lbmQuY29sdW1uCisgICAgfTsgCisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gKCJSYW5nZTogWyIgKyB0aGlzLnN0YXJ0LnJvdyArICIvIiAr
IHRoaXMuc3RhcnQuY29sdW1uICsKKyAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93
ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKKyAgICB9OyAKKworICAgIHRoaXMuY29u
dGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5jb21w
YXJlKHJvdywgY29sdW1uKSA9PSAwOworICAgIH07IAorICAgIHRoaXMuY29tcGFyZVJhbmdlID0g
ZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIGNtcCwKKyAgICAgICAgICAgIGVuZCA9IHJh
bmdlLmVuZCwKKyAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CisKKyAgICAgICAgY21w
ID0gdGhpcy5jb21wYXJlKGVuZC5yb3csIGVuZC5jb2x1bW4pOworICAgICAgICBpZiAoY21wID09
IDEpIHsKKyAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNv
bHVtbik7CisgICAgICAgICAgICBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY21wID09IC0xKSB7CisgICAg
ICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjbXAgPSB0
aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgaWYgKGNt
cCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsgCisgICAgdGhpcy5jb21wYXJlUG9pbnQgPSBmdW5jdGlvbihwKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocC5yb3csIHAuY29sdW1uKTsKKyAgICB9OyAKKyAg
ICB0aGlzLmNvbnRhaW5zUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICByZXR1cm4g
dGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQo
cmFuZ2UuZW5kKSA9PSAwOworICAgIH07CisgICAgdGhpcy5pbnRlcnNlY3RzID0gZnVuY3Rpb24o
cmFuZ2UpIHsKKyAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgcmV0dXJuIChjbXAgPT0gLTEgfHwgY21wID09IDAgfHwgY21wID09IDEpOworICAgIH07
CisgICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47CisgICAg
fTsgCisgICAgdGhpcy5pc1N0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1
bW47CisgICAgfTsgCisgICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7
CisgICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CisgICAgICAgICAgICB0aGlz
LnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47CisgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9
IHJvdy5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9
IHJvdzsKKyAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gY29sdW1uOworICAgICAgICB9
CisgICAgfTsgCisgICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAg
ICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgeworICAgICAgICAgICAgdGhpcy5lbmQu
Y29sdW1uID0gcm93LmNvbHVtbjsKKyAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7CisgICAg
ICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CisgICAgICAgIH0KKyAgICB9OyAKKyAg
ICB0aGlzLmluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0aGlz
LmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzRW5k
KHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsgCisgICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7CisgICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07IAorICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsK
KyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAg
IGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAgICBpZiAocm93ID09PSB0aGlz
LnN0YXJ0LnJvdykgeworICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0
LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAocm93IDwgdGhpcy5zdGFydC5yb3cp
CisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKHJvdyA+IHRoaXMuZW5kLnJv
dykKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9
PT0gcm93KQorICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/
IDAgOiAtMTsKKworICAgICAgICBpZiAodGhpcy5lbmQucm93ID09PSByb3cpCisgICAgICAgICAg
ICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOworCisgICAgICAgIHJl
dHVybiAwOworICAgIH07CisgICAgdGhpcy5jb21wYXJlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNv
bHVtbikgeworICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQu
Y29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIHRoaXMuY29tcGFyZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1u
KSB7CisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9
PSBjb2x1bW4pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Cisg
ICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1
bW4pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3Rh
cnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmNvbXBhcmUocm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmNsaXBS
b3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYgKHRoaXMuZW5k
LnJvdyA+IGxhc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSB7CisgICAgICAgICAgICAg
ICAgcm93OiBsYXN0Um93KzEsCisgICAgICAgICAgICAgICAgY29sdW1uOiAwCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykg
eworICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgIHJvdzogbGFzdFJv
dysxLAorICAgICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KSB7CisgICAgICAgICAg
ICB2YXIgc3RhcnQgPSB7CisgICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywKKyAgICAgICAg
ICAgICAgICBjb2x1bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSB7Cisg
ICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywKKyAgICAgICAgICAgICAgICBjb2x1bW46IDAK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2lu
dHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsKKyAgICB9OworICAgIHRo
aXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIGNtcCA9IHRo
aXMuY29tcGFyZShyb3csIGNvbHVtbik7CisKKyAgICAgICAgaWYgKGNtcCA9PSAwKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMSkKKyAgICAgICAg
ICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OworICAgICAgICBlbHNl
CisgICAgICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CisKKyAg
ICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8
IHRoaXMuZW5kKTsKKyAgICB9OworCisgICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgPT0gdGhpcy5lbmQucm93ICYmIHRoaXMuc3Rh
cnQuY29sdW1uID09IHRoaXMuZW5kLmNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLmlzTXVsdGlM
aW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRo
aXMuZW5kLnJvdyk7CisgICAgfTsKKyAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKKyAgICB9
OworICAgIHRoaXMuY29sbGFwc2VSb3dzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz
LmVuZC5jb2x1bW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFy
dC5yb3csIDAsIE1hdGgubWF4KHRoaXMuc3RhcnQucm93LCB0aGlzLmVuZC5yb3ctMSksIDApCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3cs
IDAsIHRoaXMuZW5kLnJvdywgMCkKKyAgICB9OworICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1
bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHNjcmVlblBvc1N0YXJ0ID0KKyAgICAgICAg
ICAgIHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpOworICAgICAg
ICB2YXIgc2NyZWVuUG9zRW5kID0KKyAgICAgICAgICAgIHNlc3Npb24uZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKHRoaXMuZW5kKTsKKworICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAorICAgICAg
ICAgICAgc2NyZWVuUG9zU3RhcnQucm93LCBzY3JlZW5Qb3NTdGFydC5jb2x1bW4sCisgICAgICAg
ICAgICBzY3JlZW5Qb3NFbmQucm93LCBzY3JlZW5Qb3NFbmQuY29sdW1uCisgICAgICAgICk7Cisg
ICAgfTsKKworfSkuY2FsbChSYW5nZS5wcm90b3R5cGUpOworUmFuZ2UuZnJvbVBvaW50cyA9IGZ1
bmN0aW9uKHN0YXJ0LCBlbmQpIHsKKyAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3Rh
cnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTsKK307CisKK2V4cG9ydHMuUmFuZ2UgPSBS
YW5nZTsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS90ZXh0JywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxp
Z2h0X3J1bGVzJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdW5pY29kZSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgVG9rZW5pemVyID0gcmVxdWly
ZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJl
cXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2YXIg
QmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgdW5pY29k
ZSA9IHJlcXVpcmUoIi4uL3VuaWNvZGUiKTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBUZXh0SGlnaGxpZ2h0UnVsZXMo
KS5nZXRSdWxlcygpKTsKKyAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQmVoYXZpb3VyKCk7Cit9
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLnRva2VuUmUgPSBuZXcgUmVnRXhwKCJeWyIK
KyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLkwKKyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2Vz
Lk1uICsgdW5pY29kZS5wYWNrYWdlcy5NYworICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTmQK
KyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLlBjICsgIlxcJF9dKyIsICJnIgorICAgICk7Cisg
ICAgCisgICAgdGhpcy5ub25Ub2tlblJlID0gbmV3IFJlZ0V4cCgiXig/OlteIgorICAgICAgICAr
IHVuaWNvZGUucGFja2FnZXMuTAorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTW4gKyB1bmlj
b2RlLnBhY2thZ2VzLk1jCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5OZAorICAgICAgICAr
IHVuaWNvZGUucGFja2FnZXMuUGMgKyAiXFwkX118XHNdKSsiLCAiZyIKKyAgICApOworCisgICAg
dGhpcy5nZXRUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRv
a2VuaXplcjsKKyAgICB9OworCisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlv
bihzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSB7CisgICAgfTsKKworICAgIHRoaXMuZ2V0
TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAgICAgIHJl
dHVybiAiIjsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0
ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICB0
aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgfTsKKwor
ICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIG1hdGNo
ID0gbGluZS5tYXRjaCgvXihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH07CisgICAgCisgICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0
ZXMgPSBmdW5jdGlvbiAobWFwcGluZykgeworICAgICAgICBpZiAoIXRoaXMuJGVtYmVkcykgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuJG1vZGVzID0ge307
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBpZiAobWFwcGluZ1t0aGlzLiRlbWJlZHNbaV1dKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSA9IG5ldyBtYXBwaW5nW3RoaXMuJGVt
YmVkc1tpXV0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dmFyIGRlbGVnYXRpb25zID0gWyd0b2dnbGVDb21tZW50TGluZXMnLCAnZ2V0TmV4dExpbmVJbmRl
bnQnLCAnY2hlY2tPdXRkZW50JywgJ2F1dG9PdXRkZW50JywgJ3RyYW5zZm9ybUFjdGlvbiddOwor
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZWdhdGlvbnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIChmdW5jdGlvbihzY29wZSkgeworICAgICAgICAgICAgICB2YXIgZnVuY3Rp
b25OYW1lID0gZGVsZWdhdGlvbnNbaV07CisgICAgICAgICAgICAgIHZhciBkZWZhdWx0SGFuZGxl
ciA9IHNjb3BlW2Z1bmN0aW9uTmFtZV07CisgICAgICAgICAgICAgIHNjb3BlW2RlbGVnYXRpb25z
W2ldXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRlbGVn
YXRvcihmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgZGVmYXVsdEhhbmRsZXIpOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9ICh0aGlzKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdGhpcy4kZGVsZWdhdG9yID0gZnVuY3Rpb24obWV0aG9kLCBhcmdzLCBkZWZhdWx0SGFuZGxl
cikgeworICAgICAgICB2YXIgc3RhdGUgPSBhcmdzWzBdOworICAgICAgICAKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRlbWJlZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSkgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IHN0YXRlLnNwbGl0KHRoaXMuJGVtYmVkc1tpXSk7
CisgICAgICAgICAgICBpZiAoIXNwbGl0WzBdICYmIHNwbGl0WzFdKSB7CisgICAgICAgICAgICAg
ICAgYXJnc1swXSA9IHNwbGl0WzFdOworICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdGhpcy4k
bW9kZXNbdGhpcy4kZW1iZWRzW2ldXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kZVttZXRo
b2RdLmFwcGx5KG1vZGUsIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciByZXQgPSBkZWZhdWx0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRIYW5kbGVyID8gcmV0IDogdW5kZWZpbmVkOworICAgIH07CisgICAgCisgICAg
dGhpcy50cmFuc2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNl
c3Npb24sIHBhcmFtKSB7CisgICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXIpIHsKKyAgICAgICAg
ICAgIHZhciBiZWhhdmlvdXJzID0gdGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMoKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGJlaGF2aW91cnNba2V5XVthY3Rpb25dKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBy
ZXQgPSBiZWhhdmlvdXJzW2tleV1bYWN0aW9uXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7
CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3Rva2VuaXpl
cicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7Cit2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMsIGZsYWcp
IHsKKyAgICBmbGFnID0gZmxhZyA/ICJnIiArIGZsYWcgOiAiZyI7CisgICAgdGhpcy5zdGF0ZXMg
PSBydWxlczsKKworICAgIHRoaXMucmVnRXhwcyA9IHt9OworICAgIHRoaXMubWF0Y2hNYXBwaW5n
cyA9IHt9OworICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN0YXRlcykgeworICAgICAgICB2YXIg
c3RhdGUgPSB0aGlzLnN0YXRlc1trZXldOworICAgICAgICB2YXIgcnVsZVJlZ0V4cHMgPSBbXTsK
KyAgICAgICAgdmFyIG1hdGNoVG90YWwgPSAwOworICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMu
bWF0Y2hNYXBwaW5nc1trZXldID0ge2RlZmF1bHRUb2tlbjogInRleHQifTsKKworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
cnVsZSA9IHN0YXRlW2ldOworICAgICAgICAgICAgaWYgKHJ1bGUuZGVmYXVsdFRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgbWFwcGluZy5kZWZhdWx0VG9rZW4gPSBydWxlLmRlZmF1bHRUb2tlbjsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChydWxlLnJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKQorICAgICAgICAgICAgICAgIHJ1bGUucmVn
ZXggPSBydWxlLnJlZ2V4LnRvU3RyaW5nKCkuc2xpY2UoMSwgLTEpOworICAgICAgICAgICAgdmFy
IGFkanVzdGVkcmVnZXggPSBydWxlLnJlZ2V4OworICAgICAgICAgICAgdmFyIG1hdGNoY291bnQg
PSBuZXcgUmVnRXhwKCIoPzooIiArIGFkanVzdGVkcmVnZXggKyAiKXwoLikpIikuZXhlYygiYSIp
Lmxlbmd0aCAtIDI7CisgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlLnRva2VuKSkg
eworICAgICAgICAgICAgICAgIGlmIChydWxlLnRva2VuLmxlbmd0aCA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW5BcnJheSA9IHJ1bGUudG9r
ZW47CisgICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSB0aGlzLiRhcnJheVRva2VuczsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtYXRj
aGNvdW50ID4gMSkgeworICAgICAgICAgICAgICAgIGlmICgvXFxcZC8udGVzdChydWxlLnJlZ2V4
KSkgeworICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdleC5yZXBs
YWNlKC9cXChbMC05XSspL2csIGZ1bmN0aW9uIChtYXRjaCwgZGlnaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiXFwiICsgKHBhcnNlSW50KGRpZ2l0LCAxMCkgKyBtYXRjaFRv
dGFsICsgMSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAxOworICAgICAgICAgICAgICAg
ICAgICBhZGp1c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVsZS5yZWdl
eCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcnVsZS5zcGxpdFJl
Z2V4KQorICAgICAgICAgICAgICAgICAgICBydWxlLnNwbGl0UmVnZXggPSB0aGlzLmNyZWF0ZVNw
bGl0dGVyUmVnZXhwKHJ1bGUucmVnZXgsIGZsYWcpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtYXBwaW5nW21hdGNoVG90YWxdID0gaTsKKyAgICAgICAgICAgIG1hdGNoVG90YWwgKz0g
bWF0Y2hjb3VudDsKKworICAgICAgICAgICAgcnVsZVJlZ0V4cHMucHVzaChhZGp1c3RlZHJlZ2V4
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJlZ0V4cCgi
KCIgKyBydWxlUmVnRXhwcy5qb2luKCIpfCgiKSArICIpfCgkKSIsIGZsYWcpOworICAgIH0KK307
CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRhcnJheVRva2VucyA9IGZ1bmN0aW9uKHN0cikg
eworICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgdmFy
IHZhbHVlcyA9IHN0ci5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpCisgICAgICAgIHZhciB0b2tlbnMg
PSBbXTsKKyAgICAgICAgdmFyIHR5cGVzID0gdGhpcy50b2tlbkFycmF5OworICAgICAgICBpZiAo
dHlwZXMubGVuZ3RoICE9IHZhbHVlcy5sZW5ndGggLSAyKSB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmNvbnNvbGUpCisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih0eXBlcy5sZW5ndGgg
LCB2YWx1ZXMubGVuZ3RoIC0gMiwgc3RyLCB0aGlzLnNwbGl0UmVnZXgpOworICAgICAgICAgICAg
cmV0dXJuIFt7dHlwZTogImVycm9yLmludmFsaWQiLCB2YWx1ZTogc3RyfV07CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgaWYgKHZhbHVlc1tpICsgMV0pIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5z
Lmxlbmd0aF0gPSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLAorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2kgKyAxXQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9Owor
ICAgIAorICAgIHRoaXMucmVtb3ZlQ2FwdHVyaW5nR3JvdXBzID0gZnVuY3Rpb24oc3JjKSB7Cisg
ICAgICAgIHZhciByID0gc3JjLnJlcGxhY2UoCisgICAgICAgICAgICAvXFsoPzpcXC58W15cXV0p
Kj9cXXxcXC58XChcP1s6PSFdfChcKCkvZywKKyAgICAgICAgICAgIGZ1bmN0aW9uKHgsIHkpIHty
ZXR1cm4geSA/ICIoPzoiIDogeDt9CisgICAgICAgICk7CisgICAgICAgIHJldHVybiByOworICAg
IH07CisgICAgCisgICAgdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9uKHNyYywg
ZmxhZykgeworICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvXChcPz0oW14oKV18XFwuKSo/XCkk
LywgIiIpOworICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIGZsYWcpOworICAgIH07Cisg
ICAgdGhpcy5nZXRMaW5lVG9rZW5zID0gZnVuY3Rpb24obGluZSwgc3RhcnRTdGF0ZSkgeworICAg
ICAgICBpZiAoc3RhcnRTdGF0ZSAmJiB0eXBlb2Ygc3RhcnRTdGF0ZSAhPSAic3RyaW5nIikgewor
ICAgICAgICAgICAgdmFyIHN0YWNrID0gc3RhcnRTdGF0ZS5zbGljZSgwKTsKKyAgICAgICAgICAg
IHN0YXJ0U3RhdGUgPSBzdGFja1swXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2YXIg
c3RhY2sgPSBbXTsKKworICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhcnRTdGF0ZSB8fCAi
c3RhcnQiOworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdOwor
ICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1tjdXJyZW50U3RhdGVdOwor
ICAgICAgICB2YXIgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRlXTsKKyAgICAgICAgcmUu
bGFzdEluZGV4ID0gMDsKKworICAgICAgICB2YXIgbWF0Y2gsIHRva2VucyA9IFtdOworICAgICAg
ICB2YXIgbGFzdEluZGV4ID0gMDsKKworICAgICAgICB2YXIgdG9rZW4gPSB7dHlwZTogbnVsbCwg
dmFsdWU6ICIifTsKKworICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGxpbmUpKSB7Cisg
ICAgICAgICAgICB2YXIgdHlwZSA9IG1hcHBpbmcuZGVmYXVsdFRva2VuOworICAgICAgICAgICAg
dmFyIHJ1bGUgPSBudWxsOworICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hbMF07CisgICAg
ICAgICAgICB2YXIgaW5kZXggPSByZS5sYXN0SW5kZXg7CisKKyAgICAgICAgICAgIGlmIChpbmRl
eCAtIHZhbHVlLmxlbmd0aCA+IGxhc3RJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBza2lw
cGVkID0gbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCAtIHZhbHVlLmxlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gdHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICB0b2tlbi52YWx1ZSArPSBza2lwcGVkOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHt0eXBl
OiB0eXBlLCB2YWx1ZTogc2tpcHBlZH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoLmxlbmd0aC0yOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hbaSArIDFdID09PSB1bmRlZmluZWQpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgcnVsZSA9IHN0YXRl
W21hcHBpbmdbaV1dOworICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgcnVsZS50b2tlbiA9
PSAiZnVuY3Rpb24iCisgICAgICAgICAgICAgICAgICAgID8gcnVsZS50b2tlbih2YWx1ZSwgY3Vy
cmVudFN0YXRlLCBzdGFjaykKKyAgICAgICAgICAgICAgICAgICAgOiBydWxlLnRva2VuOworCisg
ICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dCkgeworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBydWxlLm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdGhpcy5z
dGF0ZXNbY3VycmVudFN0YXRlXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvciAm
JiBjb25zb2xlLmVycm9yKGN1cnJlbnRTdGF0ZSwgImRvZXNuJ3QgZXhpc3QiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9ICJzdGFydCI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5n
c1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRlXTsKKyAg
ICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT0gInN0cmluZyIp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCghcnVsZSB8fCBydWxlLm1lcmdlICE9PSBmYWxz
ZSkgJiYgdG9rZW4udHlwZSA9PT0gdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4udmFsdWUgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IHt0eXBlOiB0eXBlLCB2YWx1ZTogdmFsdWV9OworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUp
CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiAiIn07CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGg7IGkrKykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2Vucy5wdXNoKHR5cGVbaV0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA9PSBsaW5lLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAgIHRva2Vu
cy5wdXNoKHRva2VuKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9rZW5zIDog
dG9rZW5zLAorICAgICAgICAgICAgc3RhdGUgOiBzdGFjay5sZW5ndGggPyBzdGFjayA6IGN1cnJl
bnRTdGF0ZQorICAgICAgICB9OworICAgIH07CisKK30pLmNhbGwoVG9rZW5pemVyLnByb3RvdHlw
ZSk7CisKK2V4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyOworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOworCit2YXIgVGV4
dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRydWxlcyA9IHsKKyAg
ICAgICAgInN0YXJ0IiA6IFt7CisgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKKyAg
ICAgICAgICAgIHJlZ2V4IDogJ14kJworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4rIgorICAgICAgICB9XQorICAgIH07Cit9
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmFkZFJ1bGVzID0gZnVuY3Rpb24ocnVsZXMs
IHByZWZpeCkgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcnVsZXMpIHsKKyAgICAgICAgICAg
IHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHN0YXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtp
XTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
IHJ1bGUubmV4dCA9IHByZWZpeCArIHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRydWxlc1twcmVmaXggKyBrZXldID0gc3RhdGU7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXRSdWxlcyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kcnVsZXM7CisgICAgfTsKKworICAgIHRoaXMuZW1iZWRSdWxl
cyA9IGZ1bmN0aW9uIChIaWdobGlnaHRSdWxlcywgcHJlZml4LCBlc2NhcGVSdWxlcywgc3RhdGVz
LCBhcHBlbmQpIHsKKyAgICAgICAgdmFyIGVtYmVkUnVsZXMgPSBuZXcgSGlnaGxpZ2h0UnVsZXMo
KS5nZXRSdWxlcygpOworICAgICAgICBpZiAoc3RhdGVzKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBzdGF0ZXNb
aV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
dGF0ZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJlZFJ1bGVzKQorICAg
ICAgICAgICAgICAgIHN0YXRlcy5wdXNoKHByZWZpeCArIGtleSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHRoaXMuYWRkUnVsZXMoZW1iZWRSdWxlcywgcHJlZml4KTsKKworICAgICAg
ICBpZiAoZXNjYXBlUnVsZXMpIHsKKyAgICAgICAgICAgIHZhciBhZGRSdWxlcyA9IEFycmF5LnBy
b3RvdHlwZVthcHBlbmQgPyAicHVzaCIgOiAidW5zaGlmdCJdOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzdGF0ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgYWRkUnVs
ZXMuYXBwbHkodGhpcy4kcnVsZXNbc3RhdGVzW2ldXSwgbGFuZy5kZWVwQ29weShlc2NhcGVSdWxl
cykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLiRlbWJlZHMpCisgICAgICAgICAg
ICB0aGlzLiRlbWJlZHMgPSBbXTsKKyAgICAgICAgdGhpcy4kZW1iZWRzLnB1c2gocHJlZml4KTsK
KyAgICB9CisKKyAgICB0aGlzLmdldEVtYmVkcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kZW1iZWRzOworICAgIH07CisgICAgCisgICAgdGhpcy5ub3JtYWxpemVSdWxlcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWQgPSAwOworICAgICAgICBmb3IgKHZhciBrZXkg
aW4gdGhpcy4kcnVsZXMpIHsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuJHJ1bGVzW2tl
eV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTsKKyAgICAgICAgICAgICAgICBp
ZiAocnVsZS5uZXh0ICYmIEFycmF5LmlzQXJyYXkocnVsZS5uZXh0KSkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgc3RhdGVOYW1lID0gcnVsZS5zdGF0ZU5hbWUgfHwgKCJzdGF0ZSIgKyBpZCsr
KTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNbc3RhdGVOYW1lXSA9IHJ1bGUubmV4
dDsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gc3RhdGVOYW1lOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocnVsZS5ydWxlcykgeworICAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgciBpbiBydWxlLnJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy4kcnVsZXNbcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy4kcnVsZXNbcl0ucHVzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy4kcnVsZXNbcl0ucHVzaC5hcHBseSh0aGlzLiRydWxlc1tyXSwgcnVsZS5ydWxlc1tyXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJHJ1bGVzW3JdID0gcnVsZS5ydWxlc1tyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAocnVsZS5pbmNsdWRlIHx8IHR5cGVvZiBydWxlID09ICJzdHJpbmciKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2ksIDFdLmNvbmNhdCh0aGlzLiRydWxl
c1tydWxlLmluY2x1ZGUgfHwgcnVsZV0pOworICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5u
b0VzY2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5j
dGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7fSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNw
bGljZS5hcHBseShzdGF0ZSwgYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlciA9IGZ1
bmN0aW9uKG1hcCwgZGVmYXVsdFRva2VuLCBpZ25vcmVDYXNlLCBzcGxpdENoYXIpIHsKKyAgICAg
ICAgdmFyIGtleXdvcmRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICAgICAgT2JqZWN0Lmtl
eXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworICAgICAgICAgICAgdmFyIGEg
PSBtYXBbY2xhc3NOYW1lXTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVDYXNlKQorICAgICAgICAg
ICAgICAgIGEgPSBhLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICB2YXIgbGlzdCA9IGEuc3Bs
aXQoc3BsaXRDaGFyIHx8ICJ8Iik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5n
dGg7IGktLTsgKQorICAgICAgICAgICAgICAgIGtleXdvcmRzW2xpc3RbaV1dID0gY2xhc3NOYW1l
OworICAgICAgICB9KTsKKyAgICAgICAgbWFwID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIGlnbm9y
ZUNhc2UKKyAgICAgICAgICAgID8gZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFs
dWUudG9Mb3dlckNhc2UoKV0gfHwgZGVmYXVsdFRva2VuIH0KKyAgICAgICAgICAgIDogZnVuY3Rp
b24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFsdWVdIHx8IGRlZmF1bHRUb2tlbiB9OworICAg
IH0KKworICAgIHRoaXMuZ2V0S2V5d29yZHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJGtleXdvcmRzOworICAgIH07CisKK30pLmNhbGwoVGV4dEhpZ2hsaWdodFJ1bGVzLnBy
b3RvdHlwZSk7CisKK2V4cG9ydHMuVGV4dEhpZ2hsaWdodFJ1bGVzID0gVGV4dEhpZ2hsaWdodFJ1
bGVzOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91cicsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIEJlaGF2aW91ciA9IGZ1bmN0aW9uKCkgeworICAgdGhpcy4kYmVoYXZpb3Vy
cyA9IHt9OworfTsKKworKGZ1bmN0aW9uICgpIHsKKworICAgIHRoaXMuYWRkID0gZnVuY3Rpb24g
KG5hbWUsIGFjdGlvbiwgY2FsbGJhY2spIHsKKyAgICAgICAgc3dpdGNoICh1bmRlZmluZWQpIHsK
KyAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnM6CisgICAgICAgICAgICAgIHRoaXMuJGJl
aGF2aW91cnMgPSB7fTsKKyAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV06Cisg
ICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV0gPSB7fTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2FjdGlvbl0gPSBjYWxsYmFjazsKKyAgICB9Cisg
ICAgCisgICAgdGhpcy5hZGRCZWhhdmlvdXJzID0gZnVuY3Rpb24gKGJlaGF2aW91cnMpIHsKKyAg
ICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91cnMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGFjdGlvbiBpbiBiZWhhdmlvdXJzW2tleV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZChr
ZXksIGFjdGlvbiwgYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHsK
KyAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnMgJiYgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXSkg
eworICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV07CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdGhpcy5pbmhlcml0ID0gZnVuY3Rpb24gKG1vZGUsIGZpbHRlcikg
eworICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IHZhciBiZWhhdmlvdXJzID0gbmV3IG1vZGUoKS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IG1vZGUuZ2V0QmVoYXZp
b3VycyhmaWx0ZXIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYWRkQmVoYXZpb3VycyhiZWhh
dmlvdXJzKTsKKyAgICB9CisgICAgCisgICAgdGhpcy5nZXRCZWhhdmlvdXJzID0gZnVuY3Rpb24g
KGZpbHRlcikgeworICAgICAgICBpZiAoIWZpbHRlcikgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuJGJlaGF2aW91cnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgcmV0ID0g
e30KKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsdGVyLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnNbZmlsdGVyW2ldXSkgeworICAg
ICAgICAgICAgICAgICAgICByZXRbZmlsdGVyW2ldXSA9IHRoaXMuJGJlaGF2aW91cnNbZmlsdGVy
W2ldXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcmV0OworICAgICAgICB9CisgICAgfQorCit9KS5jYWxsKEJlaGF2aW91ci5wcm90b3R5cGUp
OworCitleHBvcnRzLkJlaGF2aW91ciA9IEJlaGF2aW91cjsKK30pOworYWNlLmRlZmluZSgnYWNl
L3VuaWNvZGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworZXhwb3J0cy5wYWNrYWdlcyA9IHt9OworCithZGRV
bmljb2RlUGFja2FnZSh7CisgICAgTDogICIwMDQxLTAwNUEwMDYxLTAwN0EwMEFBMDBCNTAwQkEw
MEMwLTAwRDYwMEQ4LTAwRjYwMEY4LTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzAt
MDM3NDAzNzYwMzc3MDM3QS0wMzdEMDM4NjAzODgtMDM4QTAzOEMwMzhFLTAzQTEwM0EzLTAzRjUw
M0Y3LTA0ODEwNDhBLTA1MjUwNTMxLTA1NTYwNTU5MDU2MS0wNTg3MDVEMC0wNUVBMDVGMC0wNUYy
MDYyMS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFNTA2RTYwNkVFMDZFRjA2RkEtMDZGQzA2
RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA3RjQwN0Y1MDdGQTA4MDAtMDgx
NTA4MUEwODI0MDgyODA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYxMDk3MTA5NzIwOTc5LTA5N0Yw
OTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5
REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEz
MDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQw
QThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBB
RTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIz
RDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5
MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBD
MEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4
NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENF
MTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3
RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUz
MzBFNDAtMEU0NjBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYw
RUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVD
NjBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUw
LTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBBMC0xMEM1
MTBEMC0xMEZBMTBGQzExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYw
LTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJD
OC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0x
NjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMx
MTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdENzE3REMxODIwLTE4NzcxODgw
LTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlD
MS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUFBNzFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFC
QUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzdEMUNFOS0xQ0VDMUNFRS0xQ0YxMUQwMC0x
REJGMUUwMC0xRjE1MUYxOC0xRjFEMUYyMC0xRjQ1MUY0OC0xRjREMUY1MC0xRjU3MUY1OTFGNUIx
RjVEMUY1Ri0xRjdEMUY4MC0xRkI0MUZCNi0xRkJDMUZCRTFGQzItMUZDNDFGQzYtMUZDQzFGRDAt
MUZEMzFGRDYtMUZEQjFGRTAtMUZFQzFGRjItMUZGNDFGRjYtMUZGQzIwNzEyMDdGMjA5MC0yMDk0
MjEwMjIxMDcyMTBBLTIxMTMyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEyRi0y
MTM5MjEzQy0yMTNGMjE0NS0yMTQ5MjE0RTIxODMyMTg0MkMwMC0yQzJFMkMzMC0yQzVFMkM2MC0y
Q0U0MkNFQi0yQ0VFMkQwMC0yRDI1MkQzMC0yRDY1MkQ2RjJEODAtMkQ5NjJEQTAtMkRBNjJEQTgt
MkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRE
RTJFMkYzMDA1MzAwNjMwMzEtMzAzNTMwM0IzMDNDMzA0MS0zMDk2MzA5RC0zMDlGMzBBMS0zMEZB
MzBGQy0zMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUw
MC05RkNCQTAwMC1BNDhDQTREMC1BNEZEQTUwMC1BNjBDQTYxMC1BNjFGQTYyQUE2MkJBNjQwLUE2
NUZBNjYyLUE2NkVBNjdGLUE2OTdBNkEwLUE2RTVBNzE3LUE3MUZBNzIyLUE3ODhBNzhCQTc4Q0E3
RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjIt
QThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBOUNGQUEwMC1BQTI4
QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTc2QUE3QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjkt
QUFCREFBQzBBQUMyQUFEQi1BQUREQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZC
RjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIwMC1GQjA2RkIxMy1GQjE3RkIxREZCMUYtRkIy
OEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNE
RkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkYyMS1GRjNBRkY0
MS1GRjVBRkY2Ni1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDIiwKKyAg
ICBMbDogIjAwNjEtMDA3QTAwQUEwMEI1MDBCQTAwREYtMDBGNjAwRjgtMDBGRjAxMDEwMTAzMDEw
NTAxMDcwMTA5MDEwQjAxMEQwMTBGMDExMTAxMTMwMTE1MDExNzAxMTkwMTFCMDExRDAxMUYwMTIx
MDEyMzAxMjUwMTI3MDEyOTAxMkIwMTJEMDEyRjAxMzEwMTMzMDEzNTAxMzcwMTM4MDEzQTAxM0Mw
MTNFMDE0MDAxNDIwMTQ0MDE0NjAxNDgwMTQ5MDE0QjAxNEQwMTRGMDE1MTAxNTMwMTU1MDE1NzAx
NTkwMTVCMDE1RDAxNUYwMTYxMDE2MzAxNjUwMTY3MDE2OTAxNkIwMTZEMDE2RjAxNzEwMTczMDE3
NTAxNzcwMTdBMDE3QzAxN0UtMDE4MDAxODMwMTg1MDE4ODAxOEMwMThEMDE5MjAxOTUwMTk5LTAx
OUIwMTlFMDFBMTAxQTMwMUE1MDFBODAxQUEwMUFCMDFBRDAxQjAwMUI0MDFCNjAxQjkwMUJBMDFC
RC0wMUJGMDFDNjAxQzkwMUNDMDFDRTAxRDAwMUQyMDFENDAxRDYwMUQ4MDFEQTAxREMwMUREMDFE
RjAxRTEwMUUzMDFFNTAxRTcwMUU5MDFFQjAxRUQwMUVGMDFGMDAxRjMwMUY1MDFGOTAxRkIwMUZE
MDFGRjAyMDEwMjAzMDIwNTAyMDcwMjA5MDIwQjAyMEQwMjBGMDIxMTAyMTMwMjE1MDIxNzAyMTkw
MjFCMDIxRDAyMUYwMjIxMDIyMzAyMjUwMjI3MDIyOTAyMkIwMjJEMDIyRjAyMzEwMjMzLTAyMzkw
MjNDMDIzRjAyNDAwMjQyMDI0NzAyNDkwMjRCMDI0RDAyNEYtMDI5MzAyOTUtMDJBRjAzNzEwMzcz
MDM3NzAzN0ItMDM3RDAzOTAwM0FDLTAzQ0UwM0QwMDNEMTAzRDUtMDNENzAzRDkwM0RCMDNERDAz
REYwM0UxMDNFMzAzRTUwM0U3MDNFOTAzRUIwM0VEMDNFRi0wM0YzMDNGNTAzRjgwM0ZCMDNGQzA0
MzAtMDQ1RjA0NjEwNDYzMDQ2NTA0NjcwNDY5MDQ2QjA0NkQwNDZGMDQ3MTA0NzMwNDc1MDQ3NzA0
NzkwNDdCMDQ3RDA0N0YwNDgxMDQ4QjA0OEQwNDhGMDQ5MTA0OTMwNDk1MDQ5NzA0OTkwNDlCMDQ5
RDA0OUYwNEExMDRBMzA0QTUwNEE3MDRBOTA0QUIwNEFEMDRBRjA0QjEwNEIzMDRCNTA0QjcwNEI5
MDRCQjA0QkQwNEJGMDRDMjA0QzQwNEM2MDRDODA0Q0EwNENDMDRDRTA0Q0YwNEQxMDREMzA0RDUw
NEQ3MDREOTA0REIwNEREMDRERjA0RTEwNEUzMDRFNTA0RTcwNEU5MDRFQjA0RUQwNEVGMDRGMTA0
RjMwNEY1MDRGNzA0RjkwNEZCMDRGRDA0RkYwNTAxMDUwMzA1MDUwNTA3MDUwOTA1MEIwNTBEMDUw
RjA1MTEwNTEzMDUxNTA1MTcwNTE5MDUxQjA1MUQwNTFGMDUyMTA1MjMwNTI1MDU2MS0wNTg3MUQw
MC0xRDJCMUQ2Mi0xRDc3MUQ3OS0xRDlBMUUwMTFFMDMxRTA1MUUwNzFFMDkxRTBCMUUwRDFFMEYx
RTExMUUxMzFFMTUxRTE3MUUxOTFFMUIxRTFEMUUxRjFFMjExRTIzMUUyNTFFMjcxRTI5MUUyQjFF
MkQxRTJGMUUzMTFFMzMxRTM1MUUzNzFFMzkxRTNCMUUzRDFFM0YxRTQxMUU0MzFFNDUxRTQ3MUU0
OTFFNEIxRTREMUU0RjFFNTExRTUzMUU1NTFFNTcxRTU5MUU1QjFFNUQxRTVGMUU2MTFFNjMxRTY1
MUU2NzFFNjkxRTZCMUU2RDFFNkYxRTcxMUU3MzFFNzUxRTc3MUU3OTFFN0IxRTdEMUU3RjFFODEx
RTgzMUU4NTFFODcxRTg5MUU4QjFFOEQxRThGMUU5MTFFOTMxRTk1LTFFOUQxRTlGMUVBMTFFQTMx
RUE1MUVBNzFFQTkxRUFCMUVBRDFFQUYxRUIxMUVCMzFFQjUxRUI3MUVCOTFFQkIxRUJEMUVCRjFF
QzExRUMzMUVDNTFFQzcxRUM5MUVDQjFFQ0QxRUNGMUVEMTFFRDMxRUQ1MUVENzFFRDkxRURCMUVE
RDFFREYxRUUxMUVFMzFFRTUxRUU3MUVFOTFFRUIxRUVEMUVFRjFFRjExRUYzMUVGNTFFRjcxRUY5
MUVGQjFFRkQxRUZGLTFGMDcxRjEwLTFGMTUxRjIwLTFGMjcxRjMwLTFGMzcxRjQwLTFGNDUxRjUw
LTFGNTcxRjYwLTFGNjcxRjcwLTFGN0QxRjgwLTFGODcxRjkwLTFGOTcxRkEwLTFGQTcxRkIwLTFG
QjQxRkI2MUZCNzFGQkUxRkMyLTFGQzQxRkM2MUZDNzFGRDAtMUZEMzFGRDYxRkQ3MUZFMC0xRkU3
MUZGMi0xRkY0MUZGNjFGRjcyMTBBMjEwRTIxMEYyMTEzMjEyRjIxMzQyMTM5MjEzQzIxM0QyMTQ2
LTIxNDkyMTRFMjE4NDJDMzAtMkM1RTJDNjEyQzY1MkM2NjJDNjgyQzZBMkM2QzJDNzEyQzczMkM3
NDJDNzYtMkM3QzJDODEyQzgzMkM4NTJDODcyQzg5MkM4QjJDOEQyQzhGMkM5MTJDOTMyQzk1MkM5
NzJDOTkyQzlCMkM5RDJDOUYyQ0ExMkNBMzJDQTUyQ0E3MkNBOTJDQUIyQ0FEMkNBRjJDQjEyQ0Iz
MkNCNTJDQjcyQ0I5MkNCQjJDQkQyQ0JGMkNDMTJDQzMyQ0M1MkNDNzJDQzkyQ0NCMkNDRDJDQ0Yy
Q0QxMkNEMzJDRDUyQ0Q3MkNEOTJDREIyQ0REMkNERjJDRTEyQ0UzMkNFNDJDRUMyQ0VFMkQwMC0y
RDI1QTY0MUE2NDNBNjQ1QTY0N0E2NDlBNjRCQTY0REE2NEZBNjUxQTY1M0E2NTVBNjU3QTY1OUE2
NUJBNjVEQTY1RkE2NjNBNjY1QTY2N0E2NjlBNjZCQTY2REE2ODFBNjgzQTY4NUE2ODdBNjg5QTY4
QkE2OERBNjhGQTY5MUE2OTNBNjk1QTY5N0E3MjNBNzI1QTcyN0E3MjlBNzJCQTcyREE3MkYtQTcz
MUE3MzNBNzM1QTczN0E3MzlBNzNCQTczREE3M0ZBNzQxQTc0M0E3NDVBNzQ3QTc0OUE3NEJBNzRE
QTc0RkE3NTFBNzUzQTc1NUE3NTdBNzU5QTc1QkE3NURBNzVGQTc2MUE3NjNBNzY1QTc2N0E3NjlB
NzZCQTc2REE3NkZBNzcxLUE3NzhBNzdBQTc3Q0E3N0ZBNzgxQTc4M0E3ODVBNzg3QTc4Q0ZCMDAt
RkIwNkZCMTMtRkIxN0ZGNDEtRkY1QSIsCisgICAgTHU6ICIwMDQxLTAwNUEwMEMwLTAwRDYwMEQ4
LTAwREUwMTAwMDEwMjAxMDQwMTA2MDEwODAxMEEwMTBDMDEwRTAxMTAwMTEyMDExNDAxMTYwMTE4
MDExQTAxMUMwMTFFMDEyMDAxMjIwMTI0MDEyNjAxMjgwMTJBMDEyQzAxMkUwMTMwMDEzMjAxMzQw
MTM2MDEzOTAxM0IwMTNEMDEzRjAxNDEwMTQzMDE0NTAxNDcwMTRBMDE0QzAxNEUwMTUwMDE1MjAx
NTQwMTU2MDE1ODAxNUEwMTVDMDE1RTAxNjAwMTYyMDE2NDAxNjYwMTY4MDE2QTAxNkMwMTZFMDE3
MDAxNzIwMTc0MDE3NjAxNzgwMTc5MDE3QjAxN0QwMTgxMDE4MjAxODQwMTg2MDE4NzAxODktMDE4
QjAxOEUtMDE5MTAxOTMwMTk0MDE5Ni0wMTk4MDE5QzAxOUQwMTlGMDFBMDAxQTIwMUE0MDFBNjAx
QTcwMUE5MDFBQzAxQUUwMUFGMDFCMS0wMUIzMDFCNTAxQjcwMUI4MDFCQzAxQzQwMUM3MDFDQTAx
Q0QwMUNGMDFEMTAxRDMwMUQ1MDFENzAxRDkwMURCMDFERTAxRTAwMUUyMDFFNDAxRTYwMUU4MDFF
QTAxRUMwMUVFMDFGMTAxRjQwMUY2LTAxRjgwMUZBMDFGQzAxRkUwMjAwMDIwMjAyMDQwMjA2MDIw
ODAyMEEwMjBDMDIwRTAyMTAwMjEyMDIxNDAyMTYwMjE4MDIxQTAyMUMwMjFFMDIyMDAyMjIwMjI0
MDIyNjAyMjgwMjJBMDIyQzAyMkUwMjMwMDIzMjAyM0EwMjNCMDIzRDAyM0UwMjQxMDI0My0wMjQ2
MDI0ODAyNEEwMjRDMDI0RTAzNzAwMzcyMDM3NjAzODYwMzg4LTAzOEEwMzhDMDM4RTAzOEYwMzkx
LTAzQTEwM0EzLTAzQUIwM0NGMDNEMi0wM0Q0MDNEODAzREEwM0RDMDNERTAzRTAwM0UyMDNFNDAz
RTYwM0U4MDNFQTAzRUMwM0VFMDNGNDAzRjcwM0Y5MDNGQTAzRkQtMDQyRjA0NjAwNDYyMDQ2NDA0
NjYwNDY4MDQ2QTA0NkMwNDZFMDQ3MDA0NzIwNDc0MDQ3NjA0NzgwNDdBMDQ3QzA0N0UwNDgwMDQ4
QTA0OEMwNDhFMDQ5MDA0OTIwNDk0MDQ5NjA0OTgwNDlBMDQ5QzA0OUUwNEEwMDRBMjA0QTQwNEE2
MDRBODA0QUEwNEFDMDRBRTA0QjAwNEIyMDRCNDA0QjYwNEI4MDRCQTA0QkMwNEJFMDRDMDA0QzEw
NEMzMDRDNTA0QzcwNEM5MDRDQjA0Q0QwNEQwMDREMjA0RDQwNEQ2MDREODA0REEwNERDMDRERTA0
RTAwNEUyMDRFNDA0RTYwNEU4MDRFQTA0RUMwNEVFMDRGMDA0RjIwNEY0MDRGNjA0RjgwNEZBMDRG
QzA0RkUwNTAwMDUwMjA1MDQwNTA2MDUwODA1MEEwNTBDMDUwRTA1MTAwNTEyMDUxNDA1MTYwNTE4
MDUxQTA1MUMwNTFFMDUyMDA1MjIwNTI0MDUzMS0wNTU2MTBBMC0xMEM1MUUwMDFFMDIxRTA0MUUw
NjFFMDgxRTBBMUUwQzFFMEUxRTEwMUUxMjFFMTQxRTE2MUUxODFFMUExRTFDMUUxRTFFMjAxRTIy
MUUyNDFFMjYxRTI4MUUyQTFFMkMxRTJFMUUzMDFFMzIxRTM0MUUzNjFFMzgxRTNBMUUzQzFFM0Ux
RTQwMUU0MjFFNDQxRTQ2MUU0ODFFNEExRTRDMUU0RTFFNTAxRTUyMUU1NDFFNTYxRTU4MUU1QTFF
NUMxRTVFMUU2MDFFNjIxRTY0MUU2NjFFNjgxRTZBMUU2QzFFNkUxRTcwMUU3MjFFNzQxRTc2MUU3
ODFFN0ExRTdDMUU3RTFFODAxRTgyMUU4NDFFODYxRTg4MUU4QTFFOEMxRThFMUU5MDFFOTIxRTk0
MUU5RTFFQTAxRUEyMUVBNDFFQTYxRUE4MUVBQTFFQUMxRUFFMUVCMDFFQjIxRUI0MUVCNjFFQjgx
RUJBMUVCQzFFQkUxRUMwMUVDMjFFQzQxRUM2MUVDODFFQ0ExRUNDMUVDRTFFRDAxRUQyMUVENDFF
RDYxRUQ4MUVEQTFFREMxRURFMUVFMDFFRTIxRUU0MUVFNjFFRTgxRUVBMUVFQzFFRUUxRUYwMUVG
MjFFRjQxRUY2MUVGODFFRkExRUZDMUVGRTFGMDgtMUYwRjFGMTgtMUYxRDFGMjgtMUYyRjFGMzgt
MUYzRjFGNDgtMUY0RDFGNTkxRjVCMUY1RDFGNUYxRjY4LTFGNkYxRkI4LTFGQkIxRkM4LTFGQ0Ix
RkQ4LTFGREIxRkU4LTFGRUMxRkY4LTFGRkIyMTAyMjEwNzIxMEItMjEwRDIxMTAtMjExMjIxMTUy
MTE5LTIxMUQyMTI0MjEyNjIxMjgyMTJBLTIxMkQyMTMwLTIxMzMyMTNFMjEzRjIxNDUyMTgzMkMw
MC0yQzJFMkM2MDJDNjItMkM2NDJDNjcyQzY5MkM2QjJDNkQtMkM3MDJDNzIyQzc1MkM3RS0yQzgw
MkM4MjJDODQyQzg2MkM4ODJDOEEyQzhDMkM4RTJDOTAyQzkyMkM5NDJDOTYyQzk4MkM5QTJDOUMy
QzlFMkNBMDJDQTIyQ0E0MkNBNjJDQTgyQ0FBMkNBQzJDQUUyQ0IwMkNCMjJDQjQyQ0I2MkNCODJD
QkEyQ0JDMkNCRTJDQzAyQ0MyMkNDNDJDQzYyQ0M4MkNDQTJDQ0MyQ0NFMkNEMDJDRDIyQ0Q0MkNE
NjJDRDgyQ0RBMkNEQzJDREUyQ0UwMkNFMjJDRUIyQ0VEQTY0MEE2NDJBNjQ0QTY0NkE2NDhBNjRB
QTY0Q0E2NEVBNjUwQTY1MkE2NTRBNjU2QTY1OEE2NUFBNjVDQTY1RUE2NjJBNjY0QTY2NkE2NjhB
NjZBQTY2Q0E2ODBBNjgyQTY4NEE2ODZBNjg4QTY4QUE2OENBNjhFQTY5MEE2OTJBNjk0QTY5NkE3
MjJBNzI0QTcyNkE3MjhBNzJBQTcyQ0E3MkVBNzMyQTczNEE3MzZBNzM4QTczQUE3M0NBNzNFQTc0
MEE3NDJBNzQ0QTc0NkE3NDhBNzRBQTc0Q0E3NEVBNzUwQTc1MkE3NTRBNzU2QTc1OEE3NUFBNzVD
QTc1RUE3NjBBNzYyQTc2NEE3NjZBNzY4QTc2QUE3NkNBNzZFQTc3OUE3N0JBNzdEQTc3RUE3ODBB
NzgyQTc4NEE3ODZBNzhCRkYyMS1GRjNBIiwKKyAgICBMdDogIjAxQzUwMUM4MDFDQjAxRjIxRjg4
LTFGOEYxRjk4LTFGOUYxRkE4LTFGQUYxRkJDMUZDQzFGRkMiLAorICAgIExtOiAiMDJCMC0wMkMx
MDJDNi0wMkQxMDJFMC0wMkU0MDJFQzAyRUUwMzc0MDM3QTA1NTkwNjQwMDZFNTA2RTYwN0Y0MDdG
NTA3RkEwODFBMDgyNDA4MjgwOTcxMEU0NjBFQzYxMEZDMTdENzE4NDMxQUE3MUM3OC0xQzdEMUQy
Qy0xRDYxMUQ3ODFEOUItMURCRjIwNzEyMDdGMjA5MC0yMDk0MkM3RDJENkYyRTJGMzAwNTMwMzEt
MzAzNTMwM0IzMDlEMzA5RTMwRkMtMzBGRUEwMTVBNEY4LUE0RkRBNjBDQTY3RkE3MTctQTcxRkE3
NzBBNzg4QTlDRkFBNzBBQURERkY3MEZGOUVGRjlGIiwKKyAgICBMbzogIjAxQkIwMUMwLTAxQzMw
Mjk0MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjNGMDY0MS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMw
NkQ1MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3MTItMDcyRjA3NEQtMDdBNTA3QjEwN0NBLTA3
RUEwODAwLTA4MTUwOTA0LTA5MzkwOTNEMDk1MDA5NTgtMDk2MTA5NzIwOTc5LTA5N0YwOTg1LTA5
OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOURE
MDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIw
QTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBB
OTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1
LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMw
QjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBC
OUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMx
MDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhD
MEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUt
MEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUt
MEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAt
MEU0NTBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBF
QTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVEQzBFREQw
RjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0wRjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEt
MTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEwNzUtMTA4MTEwOEUxMEQwLTEwRkExMTAwLTEyNDgx
MjRBLTEyNEQxMjUwLTEyNTYxMjU4MTI1QS0xMjVEMTI2MC0xMjg4MTI4QS0xMjhEMTI5MC0xMkIw
MTJCMi0xMkI1MTJCOC0xMkJFMTJDMDEyQzItMTJDNTEyQzgtMTJENjEyRDgtMTMxMDEzMTItMTMx
NTEzMTgtMTM1QTEzODAtMTM4RjEzQTAtMTNGNDE0MDEtMTY2QzE2NkYtMTY3RjE2ODEtMTY5QTE2
QTAtMTZFQTE3MDAtMTcwQzE3MEUtMTcxMTE3MjAtMTczMTE3NDAtMTc1MTE3NjAtMTc2QzE3NkUt
MTc3MDE3ODAtMTdCMzE3REMxODIwLTE4NDIxODQ0LTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1
MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEy
MC0xQTU0MUIwNS0xQjMzMUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFD
NEYxQzVBLTFDNzcxQ0U5LTFDRUMxQ0VFLTFDRjEyMTM1LTIxMzgyRDMwLTJENjUyRDgwLTJEOTYy
REEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4LTJEQkUyREMwLTJEQzYyREM4LTJEQ0UyREQw
LTJERDYyREQ4LTJEREUzMDA2MzAzQzMwNDEtMzA5NjMwOUYzMEExLTMwRkEzMEZGMzEwNS0zMTJE
MzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1BMDE0QTAx
Ni1BNDhDQTREMC1BNEY3QTUwMC1BNjBCQTYxMC1BNjFGQTYyQUE2MkJBNjZFQTZBMC1BNkU1QTdG
Qi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIyQTg0MC1BODczQTg4Mi1BOEIzQThGMi1B
OEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3Q0E5ODQtQTlCMkFBMDAtQUEyOEFBNDAt
QUE0MkFBNDQtQUE0QkFBNjAtQUE2RkFBNzEtQUE3NkFBN0FBQTgwLUFBQUZBQUIxQUFCNUFBQjZB
QUI5LUFBQkRBQUMwQUFDMkFBREJBQURDQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1E
N0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgt
RkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1G
REM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkY2Ni1GRjZGRkY3MS1GRjlERkZBMC1GRkJF
RkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDIiwKKyAgICBNOiAgIjAzMDAtMDM2
RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEIt
MDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEw
N0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAw
LTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2MjA5NjMwOTgxLTA5ODMwOUJDMDlCRS0wOUM0
MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMwQTAxLTBBMDMwQTNDMEEzRS0wQTQyMEE0NzBB
NDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4MS0wQTgzMEFCQzBBQkUtMEFDNTBBQzctMEFD
OTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIzQzBCM0UtMEI0NDBCNDcwQjQ4MEI0Qi0wQjRE
MEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0QwQkQ3MEMwMS0w
QzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzREMEM1NTBDNTYwQzYyMEM2MzBDODIwQzgzMENC
QzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBDRDUwQ0Q2MENFMjBDRTMwRDAyMEQwMzBEM0Ut
MEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYyMEQ2MzBEODIwRDgzMERDQTBEQ0YtMERENDBE
RDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVCNC0wRUI5MEVC
QjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGM0UwRjNGMEY3MS0wRjg0MEY4NjBG
ODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0xMDNFMTA1Ni0xMDU5MTA1RS0xMDYwMTA2Mi0x
MDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhEMTA4RjEwOUEtMTA5RDEzNUYxNzEyLTE3MTQx
NzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0xN0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5
MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFBMTctMUExQjFBNTUtMUE1RTFBNjAtMUE3QzFB
N0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMxQjgwLTFCODIxQkExLTFCQUExQzI0LTFDMzcx
Q0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBGMDJDRUYt
MkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlBQTY2Ri1BNjcyQTY3Q0E2N0RBNkYwQTZGMUE4
MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThCNC1BOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0
Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1BQTM2QUE0M0FBNENBQTREQUE3QkFBQjBBQUIy
LUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMtQUJFQUFCRUNBQkVERkIxRUZFMDAtRkUwRkZF
MjAtRkUyNiIsCisgICAgTW46ICIwMzAwLTAzNkYwNDgzLTA0ODcwNTkxLTA1QkQwNUJGMDVDMTA1
QzIwNUM0MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2NUUwNjcwMDZENi0wNkRDMDZERi0wNkU0MDZF
NzA2RTgwNkVBLTA2RUQwNzExMDczMC0wNzRBMDdBNi0wN0IwMDdFQi0wN0YzMDgxNi0wODE5MDgx
Qi0wODIzMDgyNS0wODI3MDgyOS0wODJEMDkwMC0wOTAyMDkzQzA5NDEtMDk0ODA5NEQwOTUxLTA5
NTUwOTYyMDk2MzA5ODEwOUJDMDlDMS0wOUM0MDlDRDA5RTIwOUUzMEEwMTBBMDIwQTNDMEE0MTBB
NDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3MTBBNzUwQTgxMEE4MjBBQkMwQUMxLTBBQzUw
QUM3MEFDODBBQ0QwQUUyMEFFMzBCMDEwQjNDMEIzRjBCNDEtMEI0NDBCNEQwQjU2MEI2MjBCNjMw
QjgyMEJDMDBCQ0QwQzNFLTBDNDAwQzQ2LTBDNDgwQzRBLTBDNEQwQzU1MEM1NjBDNjIwQzYzMENC
QzBDQkYwQ0M2MENDQzBDQ0QwQ0UyMENFMzBENDEtMEQ0NDBENEQwRDYyMEQ2MzBEQ0EwREQyLTBE
RDQwREQ2MEUzMTBFMzQtMEUzQTBFNDctMEU0RTBFQjEwRUI0LTBFQjkwRUJCMEVCQzBFQzgtMEVD
RDBGMTgwRjE5MEYzNTBGMzcwRjM5MEY3MS0wRjdFMEY4MC0wRjg0MEY4NjBGODcwRjkwLTBGOTcw
Rjk5LTBGQkMwRkM2MTAyRC0xMDMwMTAzMi0xMDM3MTAzOTEwM0ExMDNEMTAzRTEwNTgxMDU5MTA1
RS0xMDYwMTA3MS0xMDc0MTA4MjEwODUxMDg2MTA4RDEwOUQxMzVGMTcxMi0xNzE0MTczMi0xNzM0
MTc1MjE3NTMxNzcyMTc3MzE3QjctMTdCRDE3QzYxN0M5LTE3RDMxN0REMTgwQi0xODBEMThBOTE5
MjAtMTkyMjE5MjcxOTI4MTkzMjE5MzktMTkzQjFBMTcxQTE4MUE1NjFBNTgtMUE1RTFBNjAxQTYy
MUE2NS0xQTZDMUE3My0xQTdDMUE3RjFCMDAtMUIwMzFCMzQxQjM2LTFCM0ExQjNDMUI0MjFCNkIt
MUI3MzFCODAxQjgxMUJBMi0xQkE1MUJBODFCQTkxQzJDLTFDMzMxQzM2MUMzNzFDRDAtMUNEMjFD
RDQtMUNFMDFDRTItMUNFODFDRUQxREMwLTFERTYxREZELTFERkYyMEQwLTIwREMyMEUxMjBFNS0y
MEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJGMzA5OTMwOUFBNjZGQTY3Q0E2N0RBNkYwQTZG
MUE4MDJBODA2QTgwQkE4MjVBODI2QThDNEE4RTAtQThGMUE5MjYtQTkyREE5NDctQTk1MUE5ODAt
QTk4MkE5QjNBOUI2LUE5QjlBOUJDQUEyOS1BQTJFQUEzMUFBMzJBQTM1QUEzNkFBNDNBQTRDQUFC
MEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMxQUJFNUFCRThBQkVERkIxRUZFMDAtRkUwRkZF
MjAtRkUyNiIsCisgICAgTWM6ICIwOTAzMDkzRS0wOTQwMDk0OS0wOTRDMDk0RTA5ODIwOTgzMDlC
RS0wOUMwMDlDNzA5QzgwOUNCMDlDQzA5RDcwQTAzMEEzRS0wQTQwMEE4MzBBQkUtMEFDMDBBQzkw
QUNCMEFDQzBCMDIwQjAzMEIzRTBCNDAwQjQ3MEI0ODBCNEIwQjRDMEI1NzBCQkUwQkJGMEJDMTBC
QzIwQkM2LTBCQzgwQkNBLTBCQ0MwQkQ3MEMwMS0wQzAzMEM0MS0wQzQ0MEM4MjBDODMwQ0JFMEND
MC0wQ0M0MENDNzBDQzgwQ0NBMENDQjBDRDUwQ0Q2MEQwMjBEMDMwRDNFLTBENDAwRDQ2LTBENDgw
RDRBLTBENEMwRDU3MEQ4MjBEODMwRENGLTBERDEwREQ4LTBEREYwREYyMERGMzBGM0UwRjNGMEY3
RjEwMkIxMDJDMTAzMTEwMzgxMDNCMTAzQzEwNTYxMDU3MTA2Mi0xMDY0MTA2Ny0xMDZEMTA4MzEw
ODQxMDg3LTEwOEMxMDhGMTA5QS0xMDlDMTdCNjE3QkUtMTdDNTE3QzcxN0M4MTkyMy0xOTI2MTky
OS0xOTJCMTkzMDE5MzExOTMzLTE5MzgxOUIwLTE5QzAxOUM4MTlDOTFBMTktMUExQjFBNTUxQTU3
MUE2MTFBNjMxQTY0MUE2RC0xQTcyMUIwNDFCMzUxQjNCMUIzRC0xQjQxMUI0MzFCNDQxQjgyMUJB
MTFCQTYxQkE3MUJBQTFDMjQtMUMyQjFDMzQxQzM1MUNFMTFDRjJBODIzQTgyNEE4MjdBODgwQTg4
MUE4QjQtQThDM0E5NTJBOTUzQTk4M0E5QjRBOUI1QTlCQUE5QkJBOUJELUE5QzBBQTJGQUEzMEFB
MzNBQTM0QUE0REFBN0JBQkUzQUJFNEFCRTZBQkU3QUJFOUFCRUFBQkVDIiwKKyAgICBNZTogIjA0
ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2NzAtQTY3MiIsCisgICAgTjogICIwMDMwLTAw
MzkwMEIyMDBCMzAwQjkwMEJDLTAwQkUwNjYwLTA2NjkwNkYwLTA2RjkwN0MwLTA3QzkwOTY2LTA5
NkYwOUU2LTA5RUYwOUY0LTA5RjkwQTY2LTBBNkYwQUU2LTBBRUYwQjY2LTBCNkYwQkU2LTBCRjIw
QzY2LTBDNkYwQzc4LTBDN0UwQ0U2LTBDRUYwRDY2LTBENzUwRTUwLTBFNTkwRUQwLTBFRDkwRjIw
LTBGMzMxMDQwLTEwNDkxMDkwLTEwOTkxMzY5LTEzN0MxNkVFLTE2RjAxN0UwLTE3RTkxN0YwLTE3
RjkxODEwLTE4MTkxOTQ2LTE5NEYxOUQwLTE5REExQTgwLTFBODkxQTkwLTFBOTkxQjUwLTFCNTkx
QkIwLTFCQjkxQzQwLTFDNDkxQzUwLTFDNTkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTgy
MjE4NS0yMTg5MjQ2MC0yNDlCMjRFQS0yNEZGMjc3Ni0yNzkzMkNGRDMwMDczMDIxLTMwMjkzMDM4
LTMwM0EzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYzMjgwLTMyODkzMkIxLTMyQkZBNjIwLUE2
MjlBNkU2LUE2RUZBODMwLUE4MzVBOEQwLUE4RDlBOTAwLUE5MDlBOUQwLUE5RDlBQTUwLUFBNTlB
QkYwLUFCRjlGRjEwLUZGMTkiLAorICAgIE5kOiAiMDAzMC0wMDM5MDY2MC0wNjY5MDZGMC0wNkY5
MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMEE2Ni0wQTZGMEFFNi0wQUVGMEI2Ni0wQjZGMEJF
Ni0wQkVGMEM2Ni0wQzZGMENFNi0wQ0VGMEQ2Ni0wRDZGMEU1MC0wRTU5MEVEMC0wRUQ5MEYyMC0w
RjI5MTA0MC0xMDQ5MTA5MC0xMDk5MTdFMC0xN0U5MTgxMC0xODE5MTk0Ni0xOTRGMTlEMC0xOURB
MUE4MC0xQTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJCMC0xQkI5MUM0MC0xQzQ5MUM1MC0xQzU5QTYy
MC1BNjI5QThEMC1BOEQ5QTkwMC1BOTA5QTlEMC1BOUQ5QUE1MC1BQTU5QUJGMC1BQkY5RkYxMC1G
RjE5IiwKKyAgICBObDogIjE2RUUtMTZGMDIxNjAtMjE4MjIxODUtMjE4ODMwMDczMDIxLTMwMjkz
MDM4LTMwM0FBNkU2LUE2RUYiLAorICAgIE5vOiAiMDBCMjAwQjMwMEI5MDBCQy0wMEJFMDlGNC0w
OUY5MEJGMC0wQkYyMEM3OC0wQzdFMEQ3MC0wRDc1MEYyQS0wRjMzMTM2OS0xMzdDMTdGMC0xN0Y5
MjA3MDIwNzQtMjA3OTIwODAtMjA4OTIxNTAtMjE1RjIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2
LTI3OTMyQ0ZEMzE5Mi0zMTk1MzIyMC0zMjI5MzI1MS0zMjVGMzI4MC0zMjg5MzJCMS0zMkJGQTgz
MC1BODM1IiwKKyAgICBQOiAgIjAwMjEtMDAyMzAwMjUtMDAyQTAwMkMtMDAyRjAwM0EwMDNCMDAz
RjAwNDAwMDVCLTAwNUQwMDVGMDA3QjAwN0QwMEExMDBBQjAwQjcwMEJCMDBCRjAzN0UwMzg3MDU1
QS0wNTVGMDU4OTA1OEEwNUJFMDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYx
QjA2MUUwNjFGMDY2QS0wNjZEMDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1
MDk3MDBERjQwRTRGMEU1QTBFNUIwRjA0LTBGMTIwRjNBLTBGM0QwRjg1MEZEMC0wRkQ0MTA0QS0x
MDRGMTBGQjEzNjEtMTM2ODE0MDAxNjZEMTY2RTE2OUIxNjlDMTZFQi0xNkVEMTczNTE3MzYxN0Q0
LTE3RDYxN0Q4LTE3REExODAwLTE4MEExOTQ0MTk0NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYx
QUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdFMUM3RjFDRDMyMDEwLTIwMjcyMDMwLTIwNDMy
MDQ1LTIwNTEyMDUzLTIwNUUyMDdEMjA3RTIwOEQyMDhFMjMyOTIzMkEyNzY4LTI3NzUyN0M1MjdD
NjI3RTYtMjdFRjI5ODMtMjk5ODI5RDgtMjlEQjI5RkMyOUZEMkNGOS0yQ0ZDMkNGRTJDRkYyRTAw
LTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMwMDgtMzAxMTMwMTQtMzAxRjMwMzAzMDNEMzBBMDMwRkJB
NEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4
RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZEM0VG
RDNGRkUxMC1GRTE5RkUzMC1GRTUyRkU1NC1GRTYxRkU2M0ZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZG
MDUtRkYwQUZGMEMtRkYwRkZGMUFGRjFCRkYxRkZGMjBGRjNCLUZGM0RGRjNGRkY1QkZGNURGRjVG
LUZGNjUiLAorICAgIFBkOiAiMDAyRDA1OEEwNUJFMTQwMDE4MDYyMDEwLTIwMTUyRTE3MkUxQTMw
MUMzMDMwMzBBMEZFMzFGRTMyRkU1OEZFNjNGRjBEIiwKKyAgICBQczogIjAwMjgwMDVCMDA3QjBG
M0EwRjNDMTY5QjIwMUEyMDFFMjA0NTIwN0QyMDhEMjMyOTI3NjgyNzZBMjc2QzI3NkUyNzcwMjc3
MjI3NzQyN0M1MjdFNjI3RTgyN0VBMjdFQzI3RUUyOTgzMjk4NTI5ODcyOTg5Mjk4QjI5OEQyOThG
Mjk5MTI5OTMyOTk1Mjk5NzI5RDgyOURBMjlGQzJFMjIyRTI0MkUyNjJFMjgzMDA4MzAwQTMwMEMz
MDBFMzAxMDMwMTQzMDE2MzAxODMwMUEzMDFERkQzRUZFMTdGRTM1RkUzN0ZFMzlGRTNCRkUzREZF
M0ZGRTQxRkU0M0ZFNDdGRTU5RkU1QkZFNURGRjA4RkYzQkZGNUJGRjVGRkY2MiIsCisgICAgUGU6
ICIwMDI5MDA1RDAwN0QwRjNCMEYzRDE2OUMyMDQ2MjA3RTIwOEUyMzJBMjc2OTI3NkIyNzZEMjc2
RjI3NzEyNzczMjc3NTI3QzYyN0U3MjdFOTI3RUIyN0VEMjdFRjI5ODQyOTg2Mjk4ODI5OEEyOThD
Mjk4RTI5OTAyOTkyMjk5NDI5OTYyOTk4MjlEOTI5REIyOUZEMkUyMzJFMjUyRTI3MkUyOTMwMDkz
MDBCMzAwRDMwMEYzMDExMzAxNTMwMTczMDE5MzAxQjMwMUUzMDFGRkQzRkZFMThGRTM2RkUzOEZF
M0FGRTNDRkUzRUZFNDBGRTQyRkU0NEZFNDhGRTVBRkU1Q0ZFNUVGRjA5RkYzREZGNURGRjYwRkY2
MyIsCisgICAgUGk6ICIwMEFCMjAxODIwMUIyMDFDMjAxRjIwMzkyRTAyMkUwNDJFMDkyRTBDMkUx
QzJFMjAiLAorICAgIFBmOiAiMDBCQjIwMTkyMDFEMjAzQTJFMDMyRTA1MkUwQTJFMEQyRTFEMkUy
MSIsCisgICAgUGM6ICIwMDVGMjAzRjIwNDAyMDU0RkUzM0ZFMzRGRTRELUZFNEZGRjNGIiwKKyAg
ICBQbzogIjAwMjEtMDAyMzAwMjUtMDAyNzAwMkEwMDJDMDAyRTAwMkYwMDNBMDAzQjAwM0YwMDQw
MDA1QzAwQTEwMEI3MDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1QzAwNUMzMDVDNjA1RjMwNUY0
MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3
RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEY4NTBGRDAt
MEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNjZEMTY2RTE2RUItMTZFRDE3MzUxNzM2MTdENC0x
N0Q2MTdEOC0xN0RBMTgwMC0xODA1MTgwNy0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFB
MC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxNjIwMTcyMDIw
LTIwMjcyMDMwLTIwMzgyMDNCLTIwM0UyMDQxLTIwNDMyMDQ3LTIwNTEyMDUzMjA1NS0yMDVFMkNG
OS0yQ0ZDMkNGRTJDRkYyRTAwMkUwMTJFMDYtMkUwODJFMEIyRTBFLTJFMTYyRTE4MkUxOTJFMUIy
RTFFMkUxRjJFMkEtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAzRDMwRkJBNEZFQTRGRkE2MEQtQTYw
RkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZB
OUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZFMTAtRkUxNkZFMTlGRTMwRkU0
NUZFNDZGRTQ5LUZFNENGRTUwLUZFNTJGRTU0LUZFNTdGRTVGLUZFNjFGRTY4RkU2QUZFNkJGRjAx
LUZGMDNGRjA1LUZGMDdGRjBBRkYwQ0ZGMEVGRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0NGRjYxRkY2
NEZGNjUiLAorICAgIFM6ICAiMDAyNDAwMkIwMDNDLTAwM0UwMDVFMDA2MDAwN0MwMDdFMDBBMi0w
MEE5MDBBQzAwQUUtMDBCMTAwQjQwMEI2MDBCODAwRDcwMEY3MDJDMi0wMkM1MDJEMi0wMkRGMDJF
NS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4NTAzRjYwNDgyMDYwNi0wNjA4MDYwQjA2MEUw
NjBGMDZFOTA2RkQwNkZFMDdGNjA5RjIwOUYzMDlGQTA5RkIwQUYxMEI3MDBCRjMtMEJGQTBDN0Yw
Q0YxMENGMjBENzkwRTNGMEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZC
RS0wRkM1MEZDNy0wRkNDMEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxN0RC
MTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3QzFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRE
LTFGREYxRkVELTFGRUYxRkZEMUZGRTIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjBBMC0yMEI4
MjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFFLTIxMjMyMTI1MjEyNzIx
MjkyMTJFMjEzQTIxM0IyMTQwLTIxNDQyMTRBLTIxNEQyMTRGMjE5MC0yMzI4MjMyQi0yM0U4MjQw
MC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3
MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUy
NzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjdDMC0yN0M0MjdDNy0yN0NBMjdDQzI3RDAt
MjdFNTI3RjAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5RkUtMkI0QzJCNTAtMkI1OTJDRTUtMkNF
QTJFODAtMkU5OTJFOUItMkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEyMzAxMzMwMjAzMDM2
MzAzNzMwM0UzMDNGMzA5QjMwOUMzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMy
MkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAt
QTRDNkE3MDAtQTcxNkE3MjBBNzIxQTc4OUE3OEFBODI4LUE4MkJBODM2LUE4MzlBQTc3LUFBNzlG
QjI5RkRGQ0ZERkRGRTYyRkU2NC1GRTY2RkU2OUZGMDRGRjBCRkYxQy1GRjFFRkYzRUZGNDBGRjVD
RkY1RUZGRTAtRkZFNkZGRTgtRkZFRUZGRkNGRkZEIiwKKyAgICBTbTogIjAwMkIwMDNDLTAwM0Uw
MDdDMDA3RTAwQUMwMEIxMDBENzAwRjcwM0Y2MDYwNi0wNjA4MjA0NDIwNTIyMDdBLTIwN0MyMDhB
LTIwOEMyMTQwLTIxNDQyMTRCMjE5MC0yMTk0MjE5QTIxOUIyMUEwMjFBMzIxQTYyMUFFMjFDRTIx
Q0YyMUQyMjFENDIxRjQtMjJGRjIzMDgtMjMwQjIzMjAyMzIxMjM3QzIzOUItMjNCMzIzREMtMjNF
MTI1QjcyNUMxMjVGOC0yNUZGMjY2RjI3QzAtMjdDNDI3QzctMjdDQTI3Q0MyN0QwLTI3RTUyN0Yw
LTI3RkYyOTAwLTI5ODIyOTk5LTI5RDcyOURDLTI5RkIyOUZFLTJBRkYyQjMwLTJCNDQyQjQ3LTJC
NENGQjI5RkU2MkZFNjQtRkU2NkZGMEJGRjFDLUZGMUVGRjVDRkY1RUZGRTJGRkU5LUZGRUMiLAor
ICAgIFNjOiAiMDAyNDAwQTItMDBBNTA2MEIwOUYyMDlGMzA5RkIwQUYxMEJGOTBFM0YxN0RCMjBB
MC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUxRkZFNUZGRTYiLAorICAgIFNrOiAiMDA1RTAw
NjAwMEE4MDBBRjAwQjQwMEI4MDJDMi0wMkM1MDJEMi0wMkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJG
RjAzNzUwMzg0MDM4NTFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRELTFGREYxRkVELTFGRUYxRkZE
MUZGRTMwOUIzMDlDQTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUZGM0VGRjQwRkZFMyIsCisgICAg
U286ICIwMEE2MDBBNzAwQTkwMEFFMDBCMDAwQjYwNDgyMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2
MDlGQTBCNzAwQkYzLTBCRjgwQkZBMEM3RjBDRjEwQ0YyMEQ3OTBGMDEtMEYwMzBGMTMtMEYxNzBG
MUEtMEYxRjBGMzQwRjM2MEYzODBGQkUtMEZDNTBGQzctMEZDQzBGQ0UwRkNGMEZENS0wRkQ4MTA5
RTEwOUYxMzYwMTM5MC0xMzk5MTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3QzIxMDAyMTAx
MjEwMy0yMTA2MjEwODIxMDkyMTE0MjExNi0yMTE4MjExRS0yMTIzMjEyNTIxMjcyMTI5MjEyRTIx
M0EyMTNCMjE0QTIxNEMyMTREMjE0RjIxOTUtMjE5OTIxOUMtMjE5RjIxQTEyMUEyMjFBNDIxQTUy
MUE3LTIxQUQyMUFGLTIxQ0QyMUQwMjFEMTIxRDMyMUQ1LTIxRjMyMzAwLTIzMDcyMzBDLTIzMUYy
MzIyLTIzMjgyMzJCLTIzN0IyMzdELTIzOUEyM0I0LTIzREIyM0UyLTIzRTgyNDAwLTI0MjYyNDQw
LTI0NEEyNDlDLTI0RTkyNTAwLTI1QjYyNUI4LTI1QzAyNUMyLTI1RjcyNjAwLTI2NkUyNjcwLTI2
Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0y
NzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUy
ODAwLTI4RkYyQjAwLTJCMkYyQjQ1MkI0NjJCNTAtMkI1OTJDRTUtMkNFQTJFODAtMkU5OTJFOUIt
MkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEyMzAxMzMwMjAzMDM2MzAzNzMwM0UzMDNGMzE5
MDMxOTEzMTk2LTMxOUYzMUMwLTMxRTMzMjAwLTMyMUUzMjJBLTMyNTAzMjYwLTMyN0YzMjhBLTMy
QjAzMkMwLTMyRkUzMzAwLTMzRkY0REMwLTRERkZBNDkwLUE0QzZBODI4LUE4MkJBODM2QTgzN0E4
MzlBQTc3LUFBNzlGREZERkZFNEZGRThGRkVERkZFRUZGRkNGRkZEIiwKKyAgICBaOiAgIjAwMjAw
MEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIwMkYyMDVGMzAwMCIsCisgICAgWnM6ICIwMDIw
MDBBMDE2ODAxODBFMjAwMC0yMDBBMjAyRjIwNUYzMDAwIiwKKyAgICBabDogIjIwMjgiLAorICAg
IFpwOiAiMjAyOSIsCisgICAgQzogICIwMDAwLTAwMUYwMDdGLTAwOUYwMEFEMDM3ODAzNzkwMzdG
LTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0w
NUNGMDVFQi0wNUVGMDVGNS0wNjA1MDYxQzA2MUQwNjIwMDY1RjA2REQwNzBFMDcwRjA3NEIwNzRD
MDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5
NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIw
OUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEw
NDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBB
NDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5
MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFG
MDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0
NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEIt
MEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEt
MEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQw
QzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2
NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MEND
OTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEw
RDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBE
ODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1
MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkw
RThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYw
RUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5
ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkx
MjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEz
MTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0x
NkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdCNDE3
QjUxN0RFMTdERjE3RUEtMTdFRjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4
QUYxOEY2LTE4RkYxOTFELTE5MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5
NzUtMTk3RjE5QUMtMTlBRjE5Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4
QS0xQThGMUE5QS0xQTlGMUFBRS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0x
QkZGMUMzOC0xQzNBMUM0QS0xQzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcx
RjFFMUYxRjFGNDYxRjQ3MUY0RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFG
RDQxRkQ1MUZEQzFGRjAxRkYxMUZGNTFGRkYyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNkYyMDcy
MjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIwRkYyMThBLTIxOEYyM0U5LTIzRkYyNDI3
LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3MDAyNzA1MjcwQTI3MEIyNzI4Mjc0QzI3
NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAyN0JGMjdDQjI3Q0QtMjdDRjJCNEQtMkI0
RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0yRDJGMkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5
Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRENzJEREYyRTMyLTJFN0YyRTlBMkVGNC0y
RUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4MzEwMC0zMTA0MzEyRS0zMTMwMzE4RjMx
QjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJGOUZDQy05RkZGQTQ4RC1BNDhGQTRDNy1B
NENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4LUE2OUZBNkY4LUE2RkZBNzhELUE3RkFB
ODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4Q0RBOERBLUE4REZBOEZDLUE4RkZBOTU0
LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1BOUZGQUEzNy1BQTNGQUE0RUFBNEZBQTVB
QUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFCRUVBQkVGQUJGQS1BQkZGRDdBNC1EN0FG
RDdDNy1EN0NBRDdGQy1GOEZGRkEyRUZBMkZGQTZFRkE2RkZBREEtRkFGRkZCMDctRkIxMkZCMTgt
RkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQyRkQ0MC1GRDRGRkQ5MEZEOTFGREM4LUZE
RUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNGRTY3RkU2Qy1GRTZGRkU3NUZFRkQtRkYw
MEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4RkZEOUZGREQtRkZERkZGRTdGRkVGLUZGRkJG
RkZFRkZGRiIsCisgICAgQ2M6ICIwMDAwLTAwMUYwMDdGLTAwOUYiLAorICAgIENmOiAiMDBBRDA2
MDAtMDYwMzA2REQwNzBGMTdCNDE3QjUyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNjQyMDZBLTIw
NkZGRUZGRkZGOS1GRkZCIiwKKyAgICBDbzogIkUwMDAtRjhGRiIsCisgICAgQ3M6ICJEODAwLURG
RkYiLAorICAgIENuOiAiMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3
MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNUZGMDYwNDA2MDUw
NjFDMDYxRDA2MjAwNjVGMDcwRTA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNG
LTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5
MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0w
OURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0
MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBB
NUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0Ew
QUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEy
MEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1
RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAt
MEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEt
MEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBD
NDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhE
MEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENF
NTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYw
RDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERC
RTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUz
RTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBF
QTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBF
RkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBG
RC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJC
NzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0x
MzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQt
MTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgxQS0x
ODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0xOTNG
MTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5REQxQTFD
MUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFCN0Qt
MUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFDRjMtMUNG
RjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVDMUY1
RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjA2NS0yMDY5MjA3
MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZGMjE4QS0yMThGMjNFOS0yM0ZGMjQy
Ny0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAwMjcwNTI3MEEyNzBCMjcyODI3NEMy
NzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdCRjI3Q0IyN0NELTI3Q0YyQjRELTJC
NEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQyRjJENjYtMkQ2RTJENzAtMkQ3RjJE
OTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcyRERGMkUzMi0yRTdGMkU5QTJFRjQt
MkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMxMDAtMzEwNDMxMkUtMzEzMDMxOEYz
MUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlGQ0MtOUZGRkE0OEQtQTQ4RkE0Qzct
QTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1BNjlGQTZGOC1BNkZGQTc4RC1BN0ZB
QTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENEQThEQS1BOERGQThGQy1BOEZGQTk1
NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlGRkFBMzctQUEzRkFBNEVBQTRGQUE1
QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVFQUJFRkFCRkEtQUJGRkQ3QTQtRDdB
RkQ3QzctRDdDQUQ3RkMtRDdGRkZBMkVGQTJGRkE2RUZBNkZGQURBLUZBRkZGQjA3LUZCMTJGQjE4
LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZENDAtRkQ0RkZEOTBGRDkxRkRDOC1G
REVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2N0ZFNkMtRkU2RkZFNzVGRUZERkVG
RUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlGRkRELUZGREZGRkU3RkZFRi1G
RkY4RkZGRUZGRkYiCit9KTsKKworZnVuY3Rpb24gYWRkVW5pY29kZVBhY2thZ2UgKHBhY2spIHsK
KyAgICB2YXIgY29kZVBvaW50ID0gL1x3ezR9L2c7CisgICAgZm9yICh2YXIgbmFtZSBpbiBwYWNr
KQorICAgICAgICBleHBvcnRzLnBhY2thZ2VzW25hbWVdID0gcGFja1tuYW1lXS5yZXBsYWNlKGNv
ZGVQb2ludCwgIlxcdSQmIik7Cit9OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2RvY3VtZW50
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
bGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3JhbmdlJywgJ2FjZS9hbmNob3InXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGli
L29vcCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIi
KS5FdmVudEVtaXR0ZXI7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2
YXIgQW5jaG9yID0gcmVxdWlyZSgiLi9hbmNob3IiKS5BbmNob3I7CisKK3ZhciBEb2N1bWVudCA9
IGZ1bmN0aW9uKHRleHQpIHsKKyAgICB0aGlzLiRsaW5lcyA9IFtdOworICAgIGlmICh0ZXh0Lmxl
bmd0aCA9PSAwKSB7CisgICAgICAgIHRoaXMuJGxpbmVzID0gWyIiXTsKKyAgICB9IGVsc2UgaWYg
KEFycmF5LmlzQXJyYXkodGV4dCkpIHsKKyAgICAgICAgdGhpcy5pbnNlcnRMaW5lcygwLCB0ZXh0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0s
IHRleHQpOworICAgIH0KK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQo
dGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkg
eworICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgdGhpcy5yZW1v
dmUobmV3IFJhbmdlKDAsIDAsIGxlbiwgdGhpcy5nZXRMaW5lKGxlbi0xKS5sZW5ndGgpKTsKKyAg
ICAgICAgdGhpcy5pbnNlcnQoe3JvdzogMCwgY29sdW1uOjB9LCB0ZXh0KTsKKyAgICB9OworICAg
IHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxs
TGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKKyAgICB9OworICAgIHRo
aXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOworICAgIH07CisgICAgaWYgKCJhYWEiLnNw
bGl0KC9hLykubGVuZ3RoID09IDApCisgICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4
dCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXHJcbnxcci9nLCAiXG4iKS5z
cGxpdCgiXG4iKTsKKyAgICAgICAgfQorICAgIGVsc2UKKyAgICAgICAgdGhpcy4kc3BsaXQgPSBm
dW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxc
bi8pOworICAgICAgICB9OworCisKKyAKKyAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rp
b24odGV4dCkgeworICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8
XG4pL20pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdM
aW5lID0gbWF0Y2hbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLiRhdXRv
TmV3TGluZSA9ICJcbiI7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0TmV3TGluZUNo
YXJhY3RlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2Rl
KSB7CisgICAgICAgICAgY2FzZSAid2luZG93cyI6CisgICAgICAgICAgICByZXR1cm4gIlxyXG4i
OworCisgICAgICAgICAgY2FzZSAidW5peCI6CisgICAgICAgICAgICByZXR1cm4gIlxuIjsKKwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kYXV0b05ld0xpbmU7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiXG4iOworICAg
IHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOworICAgIHRoaXMuc2V0TmV3TGluZU1vZGUgPSBm
dW5jdGlvbihuZXdMaW5lTW9kZSkgeworICAgICAgICBpZiAodGhpcy4kbmV3TGluZU1vZGUgPT09
IG5ld0xpbmVNb2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJG5ld0xp
bmVNb2RlID0gbmV3TGluZU1vZGU7CisgICAgfTsKKyAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRuZXdMaW5lTW9kZTsKKyAgICB9Owor
ICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICByZXR1cm4gKHRl
eHQgPT0gIlxyXG4iIHx8IHRleHQgPT0gIlxyIiB8fCB0ZXh0ID09ICJcbiIpOworICAgIH07Cisg
ICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRs
aW5lc1tyb3ddIHx8ICIiOworICAgIH07CisgICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZp
cnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJz
dFJvdywgbGFzdFJvdyArIDEpOworICAgIH07CisgICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lcygwLCB0aGlzLmdldExlbmd0aCgp
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7CisgICAgfTsKKyAgICB0aGlzLmdldFRleHRSYW5nZSA9
IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2Uu
ZW5kLnJvdykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJv
d10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4pOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5nZXRM
aW5lcyhyYW5nZS5zdGFydC5yb3crMSwgcmFuZ2UuZW5kLnJvdy0xKTsKKyAgICAgICAgICAgIGxp
bmVzLnVuc2hpZnQoKHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10gfHwgIiIpLnN1YnN0cmlu
ZyhyYW5nZS5zdGFydC5jb2x1bW4pKTsKKyAgICAgICAgICAgIGxpbmVzLnB1c2goKHRoaXMuJGxp
bmVzW3JhbmdlLmVuZC5yb3ddIHx8ICIiKS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbikp
OworICAgICAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVy
KCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJGNsaXBQb3NpdGlvbiA9IGZ1bmN0
aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwor
ICAgICAgICBpZiAocG9zaXRpb24ucm93ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcG9zaXRp
b24ucm93ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gMSk7CisgICAgICAgICAgICBwb3NpdGlvbi5j
b2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoLTEpLmxlbmd0aDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisgICAgfTsKKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBv
c2l0aW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICghdGV4dCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkK
KyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICBwb3NpdGlvbiA9IHRoaXMu
JGNsaXBQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9
IDEpCisgICAgICAgICAgICB0aGlzLiRkZXRlY3ROZXdMaW5lKHRleHQpOworCisgICAgICAgIHZh
ciBsaW5lcyA9IHRoaXMuJHNwbGl0KHRleHQpOworICAgICAgICB2YXIgZmlyc3RMaW5lID0gbGlu
ZXMuc3BsaWNlKDAsIDEpWzBdOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lcy5sZW5ndGgg
PT0gMCA/IG51bGwgOiBsaW5lcy5zcGxpY2UobGluZXMubGVuZ3RoIC0gMSwgMSlbMF07CisKKyAg
ICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydEluTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKTsK
KyAgICAgICAgaWYgKGxhc3RMaW5lICE9PSBudWxsKSB7CisgICAgICAgICAgICBwb3NpdGlvbiA9
IHRoaXMuaW5zZXJ0TmV3TGluZShwb3NpdGlvbik7IC8vIHRlcm1pbmF0ZSBmaXJzdCBsaW5lCisg
ICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0TGluZXMocG9zaXRpb24ucm93LCBsaW5l
cyk7CisgICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5lKHBvc2l0aW9uLCBs
YXN0TGluZSB8fCAiIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAg
IH07CisgICAgdGhpcy5pbnNlcnRMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKKyAgICAg
ICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywg
Y29sdW1uOiAwfTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDB4RkZGRikgeworICAgICAg
ICAgICAgdmFyIGVuZCA9IHRoaXMuaW5zZXJ0TGluZXMocm93LCBsaW5lcy5zbGljZSgweEZGRkYp
KTsKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgMHhGRkZGKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBhcmdzID0gW3JvdywgMF07CisgICAgICAgIGFyZ3MucHVzaC5hcHBs
eShhcmdzLCBsaW5lcyk7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZS5hcHBseSh0aGlzLiRs
aW5lcywgYXJncyk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgMCwgcm93
ICsgbGluZXMubGVuZ3RoLCAwKTsKKyAgICAgICAgdmFyIGRlbHRhID0geworICAgICAgICAgICAg
YWN0aW9uOiAiaW5zZXJ0TGluZXMiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAg
ICAgICAgbGluZXM6IGxpbmVzCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5n
ZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiBlbmQgfHwgcmFuZ2UuZW5kOwor
ICAgIH07CisgICAgdGhpcy5pbnNlcnROZXdMaW5lID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAg
ICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICB2
YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7CisKKyAgICAgICAgdGhp
cy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVt
bik7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShwb3NpdGlvbi5yb3cgKyAxLCAwLCBsaW5l
LnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4sIGxpbmUubGVuZ3RoKSk7CisKKyAgICAgICAgdmFy
IGVuZCA9IHsKKyAgICAgICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdyArIDEsCisgICAgICAgICAg
ICBjb2x1bW4gOiAwCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGRlbHRhID0geworICAgICAg
ICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsCisgICAgICAgICAgICByYW5nZTogUmFuZ2UuZnJv
bVBvaW50cyhwb3NpdGlvbiwgZW5kKSwKKyAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGlu
ZUNoYXJhY3RlcigpCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsg
ZGF0YTogZGVsdGEgfSk7CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAgIHRoaXMu
aW5zZXJ0SW5MaW5lID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRl
eHQubGVuZ3RoID09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAg
dmFyIGxpbmUgPSB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddIHx8ICIiOworCisgICAgICAgIHRo
aXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gPSBsaW5lLnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1
bW4pICsgdGV4dAorICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcocG9zaXRpb24uY29s
dW1uKTsKKworICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgcm93IDogcG9zaXRpb24u
cm93LAorICAgICAgICAgICAgY29sdW1uIDogcG9zaXRpb24uY29sdW1uICsgdGV4dC5sZW5ndGgK
KyAgICAgICAgfTsKKworICAgICAgICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246
ICJpbnNlcnRUZXh0IiwKKyAgICAgICAgICAgIHJhbmdlOiBSYW5nZS5mcm9tUG9pbnRzKHBvc2l0
aW9uLCBlbmQpLAorICAgICAgICAgICAgdGV4dDogdGV4dAorICAgICAgICB9OworICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOworCisgICAgICAgIHJldHVybiBl
bmQ7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAg
IHJhbmdlLnN0YXJ0ID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKKyAgICAgICAg
cmFuZ2UuZW5kID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLmVuZCk7CisKKyAgICAgICAgaWYg
KHJhbmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKKworICAg
ICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBsYXN0Um93
ID0gcmFuZ2UuZW5kLnJvdzsKKworICAgICAgICBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkgewor
ICAgICAgICAgICAgdmFyIGZpcnN0RnVsbFJvdyA9IHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSAwID8g
Zmlyc3RSb3cgOiBmaXJzdFJvdyArIDE7CisgICAgICAgICAgICB2YXIgbGFzdEZ1bGxSb3cgPSBs
YXN0Um93IC0gMTsKKworICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5jb2x1bW4gPiAwKQorICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGxhc3RSb3csIDAsIHJhbmdlLmVuZC5jb2x1
bW4pOworCisgICAgICAgICAgICBpZiAobGFzdEZ1bGxSb3cgPj0gZmlyc3RGdWxsUm93KQorICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMoZmlyc3RGdWxsUm93LCBsYXN0RnVsbFJvdyk7
CisKKyAgICAgICAgICAgIGlmIChmaXJzdEZ1bGxSb3cgIT0gZmlyc3RSb3cpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCB0
aGlzLmdldExpbmUoZmlyc3RSb3cpLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1v
dmVOZXdMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFu
Z2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0
aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgeworICAgICAgICBpZiAoc3RhcnRDb2x1
bW4gPT0gZW5kQ29sdW1uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByYW5n
ZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0Q29sdW1uLCByb3csIGVuZENvbHVtbik7CisgICAgICAg
IHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciByZW1vdmVkID0gbGlu
ZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CisgICAgICAgIHZhciBuZXdMaW5l
ID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgbGluZS5zdWJzdHJpbmcoZW5kQ29s
dW1uLCBsaW5lLmxlbmd0aCk7CisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShyb3csIDEsIG5l
d0xpbmUpOworCisgICAgICAgIHZhciBkZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlvbjogInJl
bW92ZVRleHQiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAgICAgICAgdGV4dDog
cmVtb3ZlZAorICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6
IGRlbHRhIH0pOworICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgfTsKKyAgICB0aGlz
LnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFy
IHJhbmdlID0gbmV3IFJhbmdlKGZpcnN0Um93LCAwLCBsYXN0Um93ICsgMSwgMCk7CisgICAgICAg
IHZhciByZW1vdmVkID0gdGhpcy4kbGluZXMuc3BsaWNlKGZpcnN0Um93LCBsYXN0Um93IC0gZmly
c3RSb3cgKyAxKTsKKworICAgICAgICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246
ICJyZW1vdmVMaW5lcyIsCisgICAgICAgICAgICByYW5nZTogcmFuZ2UsCisgICAgICAgICAgICBu
bDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCksCisgICAgICAgICAgICBsaW5lczogcmVtb3Zl
ZAorICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRh
IH0pOworICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlTmV3
TGluZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICB2YXIgZmlyc3RMaW5lID0gdGhpcy5nZXRM
aW5lKHJvdyk7CisgICAgICAgIHZhciBzZWNvbmRMaW5lID0gdGhpcy5nZXRMaW5lKHJvdysxKTsK
KworICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBmaXJzdExpbmUubGVuZ3RoLCBy
b3crMSwgMCk7CisgICAgICAgIHZhciBsaW5lID0gZmlyc3RMaW5lICsgc2Vjb25kTGluZTsKKwor
ICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93LCAyLCBsaW5lKTsKKworICAgICAgICB2YXIg
ZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwKKyAgICAgICAgICAg
IHJhbmdlOiByYW5nZSwKKyAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3Rl
cigpCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVs
dGEgfSk7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkg
eworICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCAmJiByYW5nZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CisgICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0
VGV4dFJhbmdlKHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5lbmQ7CisKKyAgICAg
ICAgdGhpcy5yZW1vdmUocmFuZ2UpOworICAgICAgICBpZiAodGV4dCkgeworICAgICAgICAgICAg
dmFyIGVuZCA9IHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCB0ZXh0KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZCA9IHJhbmdlLnN0YXJ0OworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAgIHRoaXMuYXBwbHlEZWx0YXMgPSBmdW5j
dGlvbihkZWx0YXMpIHsKKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRlbHRhcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOworICAgICAgICAgICAgdmFy
IHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uu
ZW5kKTsKKworICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiKQor
ICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluZXMocmFuZ2Uuc3RhcnQucm93LCBkZWx0YS5s
aW5lcyk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydFRleHQi
KQorICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCBkZWx0YS50ZXh0KTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKQorICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQu
cm93IC0gMSk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRl
eHQiKQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5yZXZlcnREZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsKKyAgICAgICAg
Zm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgICAgICAgICAgdmFy
IGRlbHRhID0gZGVsdGFzW2ldOworCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9t
UG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOworCisgICAgICAgICAg
ICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhp
cy5yZW1vdmVMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIpCisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0
aW9uID09ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhy
YW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRh
LmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFu
Z2Uuc3RhcnQsIGRlbHRhLnRleHQpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmluZGV4
VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBzdGFydFJvdykgeworICAgICAgICB2YXIgbGlu
ZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CisgICAgICAgIHZhciBuZXds
aW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOworICAgICAgICBm
b3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykg
eworICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsK
KyAgICAgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6
IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGxpbmVzW2wtMV0ubGVu
Z3RofTsKKyAgICB9OworICAgIHRoaXMucG9zaXRpb25Ub0luZGV4ID0gZnVuY3Rpb24ocG9zLCBz
dGFydFJvdykgeworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFs
bExpbmVzKCk7CisgICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hh
cmFjdGVyKCkubGVuZ3RoOworICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICB2YXIgcm93
ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSkKKyAgICAgICAgICAgIGluZGV4ICs9IGxpbmVz
W2ldLmxlbmd0aDsKKworICAgICAgICByZXR1cm4gaW5kZXggKyBuZXdsaW5lTGVuZ3RoICogaSAr
IHBvcy5jb2x1bW47CisgICAgfTsKKworfSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUpOworCitl
eHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2FuY2hv
cicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBFdmVudEVtaXR0ZXIg
PSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgQW5j
aG9yID0gZXhwb3J0cy5BbmNob3IgPSBmdW5jdGlvbihkb2MsIHJvdywgY29sdW1uKSB7CisgICAg
dGhpcy5kb2N1bWVudCA9IGRvYzsKKyAgICAKKyAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSAidW5k
ZWZpbmVkIikKKyAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsK
KyAgICBlbHNlCisgICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOworCisgICAg
dGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgZG9jLm9uKCJj
aGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICBvb3Au
aW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlzLmdldFBvc2l0aW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50
KHRoaXMucm93LCB0aGlzLmNvbHVtbik7CisgICAgfTsKKyAgICAgICAgCisgICAgdGhpcy5nZXRE
b2N1bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudDsKKyAg
ICB9OworCisgICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRl
bHRhID0gZS5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgcmFu
Z2Uuc3RhcnQucm93ICE9IHRoaXMucm93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPiB0aGlzLnJvdykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHRo
aXMucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA+IHRoaXMuY29sdW1uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIAorICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3c7CisgICAgICAgIHZhciBj
b2x1bW4gPSB0aGlzLmNvbHVtbjsKKyAgICAgICAgCisgICAgICAgIGlmIChkZWx0YS5hY3Rpb24g
PT09ICJpbnNlcnRUZXh0IikgeworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0g
cm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSBjb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBp
ZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbiArPSByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uIC09IHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgICAgICAgICAgcm93
ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSBy
YW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyA8IHJvdykgeworICAgICAgICAgICAgICAg
IHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydExpbmVzIikgeworICAg
ICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8PSByb3cpIHsKKyAgICAgICAgICAgICAgICBy
b3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKSB7
CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJvdyAmJiByYW5nZS5zdGFydC5j
b2x1bW4gPCBjb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLmNvbHVtbiA+
PSBjb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVt
bjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1h
dGgubWF4KDAsIGNvbHVtbiAtIChyYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1u
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLnN0YXJ0
LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgPCByb3cpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9PSByb3cpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbikgKyByYW5n
ZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJvdyAt
PSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykgeworICAgICAgICAgICAgICAg
IHJvdyAtPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAg
IGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW4pICsgcmFuZ2Uu
c3RhcnQuY29sdW1uOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFj
dGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93
IDw9IHJvdykgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IDw9IHJvdykKKyAg
ICAgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdl
LnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNldFBvc2l0
aW9uKHJvdywgY29sdW1uLCB0cnVlKTsKKyAgICB9OworCisgICAgdGhpcy5zZXRQb3NpdGlvbiA9
IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHsKKyAgICAgICAgdmFyIHBvczsKKyAgICAg
ICAgaWYgKG5vQ2xpcCkgeworICAgICAgICAgICAgcG9zID0geworICAgICAgICAgICAgICAgIHJv
dzogcm93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBv
c2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYmIHRoaXMuY29sdW1uID09IHBvcy5jb2x1bW4p
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIG9sZCA9IHsK
KyAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCisgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29s
dW1uCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7Cisg
ICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hh
bmdlIiwgeworICAgICAgICAgICAgb2xkOiBvbGQsCisgICAgICAgICAgICB2YWx1ZTogcG9zCisg
ICAgICAgIH0pOworICAgIH07CisKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9u
Q2hhbmdlKTsKKyAgICB9OworICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgcG9zID0ge307CisgICAgCisgICAgICAg
IGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgcG9z
LnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTsKKyAgICAg
ICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3Ro
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHsKKyAgICAgICAgICAgIHBv
cy5yb3cgPSAwOworICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBwb3Mucm93ID0gcm93OworICAgICAgICAgICAgcG9zLmNv
bHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1h
dGgubWF4KDAsIGNvbHVtbikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY29s
dW1uIDwgMCkKKyAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOworICAgICAgICAgICAgCisgICAg
ICAgIHJldHVybiBwb3M7CisgICAgfTsKKyAgICAKK30pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7
CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRf
ZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
b29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgi
Li9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBNQVhfTElORV9MRU5HVEgg
PSA1MDAwOworCit2YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGZ1bmN0aW9uKHRva2VuaXplciwg
ZWRpdG9yKSB7CisgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CisgICAgdGhpcy5saW5lcyA9IFtd
OworICAgIHRoaXMuc3RhdGVzID0gW107CisgICAgdGhpcy5jdXJyZW50TGluZSA9IDA7CisgICAg
dGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7CisKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg
ICB0aGlzLiR3b3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFzZWxmLnJ1bm5pbmcp
IHsgcmV0dXJuOyB9CisKKyAgICAgICAgdmFyIHdvcmtlclN0YXJ0ID0gbmV3IERhdGUoKTsKKyAg
ICAgICAgdmFyIHN0YXJ0TGluZSA9IHNlbGYuY3VycmVudExpbmU7CisgICAgICAgIHZhciBkb2Mg
PSBzZWxmLmRvYzsKKworICAgICAgICB2YXIgcHJvY2Vzc2VkTGluZXMgPSAwOworCisgICAgICAg
IHZhciBsZW4gPSBkb2MuZ2V0TGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChzZWxmLmN1cnJlbnRM
aW5lIDwgbGVuKSB7CisgICAgICAgICAgICBzZWxmLiR0b2tlbml6ZVJvdyhzZWxmLmN1cnJlbnRM
aW5lKTsKKyAgICAgICAgICAgIHdoaWxlIChzZWxmLmxpbmVzW3NlbGYuY3VycmVudExpbmVdKQor
ICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudExpbmUrKzsKKyAgICAgICAgICAgIHByb2Nlc3Nl
ZExpbmVzICsrOworICAgICAgICAgICAgaWYgKChwcm9jZXNzZWRMaW5lcyAlIDUgPT0gMCkgJiYg
KG5ldyBEYXRlKCkgLSB3b3JrZXJTdGFydCkgPiAyMCkgeworICAgICAgICAgICAgICAgIHNlbGYu
ZmlyZVVwZGF0ZUV2ZW50KHN0YXJ0TGluZSwgc2VsZi5jdXJyZW50TGluZS0xKTsKKyAgICAgICAg
ICAgICAgICBzZWxmLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHNlbGYuJHdvcmtlciwgMjApOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHNlbGYucnVubmluZyA9IGZhbHNlOworCisgICAgICAgIHNlbGYuZmlyZVVwZGF0ZUV2ZW50KHN0
YXJ0TGluZSwgbGVuIC0gMSk7CisgICAgfTsKK307CisKKyhmdW5jdGlvbigpeworCisgICAgb29w
LmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0VG9rZW5pemVyID0g
ZnVuY3Rpb24odG9rZW5pemVyKSB7CisgICAgICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVy
OworICAgICAgICB0aGlzLmxpbmVzID0gW107CisgICAgICAgIHRoaXMuc3RhdGVzID0gW107CisK
KyAgICAgICAgdGhpcy5zdGFydCgwKTsKKyAgICB9OworICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBm
dW5jdGlvbihkb2MpIHsKKyAgICAgICAgdGhpcy5kb2MgPSBkb2M7CisgICAgICAgIHRoaXMubGlu
ZXMgPSBbXTsKKyAgICAgICAgdGhpcy5zdGF0ZXMgPSBbXTsKKworICAgICAgICB0aGlzLnN0b3Ao
KTsKKyAgICB9OworICAgIHRoaXMuZmlyZVVwZGF0ZUV2ZW50ID0gZnVuY3Rpb24oZmlyc3RSb3cs
IGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICBmaXJzdDogZmly
c3RSb3csCisgICAgICAgICAgICBsYXN0OiBsYXN0Um93CisgICAgICAgIH07CisgICAgICAgIHRo
aXMuX2VtaXQoInVwZGF0ZSIsIHtkYXRhOiBkYXRhfSk7CisgICAgfTsKKyAgICB0aGlzLnN0YXJ0
ID0gZnVuY3Rpb24oc3RhcnRSb3cpIHsKKyAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IE1hdGgu
bWluKHN0YXJ0Um93IHx8IDAsIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgp
KTsKKyAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5saW5l
cy5sZW5ndGgpOworICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwg
dGhpcy5zdGF0ZXMubGVuZ3RoKTsKKworICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAgICAgdGhp
cy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7CisgICAgfTsKKworICAg
IHRoaXMuJHVwZGF0ZU9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKKyAgICAgICAgdmFyIHJh
bmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJv
dzsKKyAgICAgICAgdmFyIGxlbiA9IHJhbmdlLmVuZC5yb3cgLSBzdGFydFJvdzsKKworICAgICAg
ICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLmxpbmVzW3N0YXJ0Um93XSA9IG51
bGw7CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IiB8fCBk
ZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikgeworICAgICAgICAgICAgdGhpcy5saW5lcy5z
cGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpOworICAgICAgICAgICAgdGhpcy5zdGF0ZXMu
c3BsaWNlKHN0YXJ0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CisgICAgICAgICAgICBhcmdzLnVuc2hp
ZnQoc3RhcnRSb3csIDEpOworICAgICAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UuYXBwbHkodGhp
cy5saW5lcywgYXJncyk7CisgICAgICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UuYXBwbHkodGhp
cy5zdGF0ZXMsIGFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9
IE1hdGgubWluKHN0YXJ0Um93LCB0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLmRvYy5nZXRMZW5ndGgo
KSk7CisKKyAgICAgICAgdGhpcy5zdG9wKCk7CisgICAgICAgIHRoaXMucnVubmluZyA9IHNldFRp
bWVvdXQodGhpcy4kd29ya2VyLCA3MDApOworICAgIH07CisgICAgdGhpcy5zdG9wID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpCisgICAgICAgICAgICBjbGVhclRpbWVv
dXQodGhpcy5ydW5uaW5nKTsKKyAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CisgICAgfTsK
KyAgICB0aGlzLmdldFRva2VucyA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gdGhp
cy5saW5lc1tyb3ddIHx8IHRoaXMuJHRva2VuaXplUm93KHJvdyk7CisgICAgfTsKKyAgICB0aGlz
LmdldFN0YXRlID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5l
ID09IHJvdykKKyAgICAgICAgICAgIHRoaXMuJHRva2VuaXplUm93KHJvdyk7CisgICAgICAgIHJl
dHVybiB0aGlzLnN0YXRlc1tyb3ddIHx8ICJzdGFydCI7CisgICAgfTsKKworICAgIHRoaXMuJHRv
a2VuaXplUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2Mu
Z2V0TGluZShyb3cpOworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb3cgLSAxXTsK
KworICAgICAgICBpZiAobGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHsKKyAgICAgICAg
ICAgIHZhciBvdmVyZmxvdyA9IHt2YWx1ZTogbGluZS5zdWJzdHIoTUFYX0xJTkVfTEVOR1RIKSwg
dHlwZTogInRleHQifTsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDAsIE1BWF9MSU5F
X0xFTkdUSCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRva2VuaXplci5n
ZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgaWYgKG92ZXJmbG93KSB7CisgICAg
ICAgICAgICBkYXRhLnRva2Vucy5wdXNoKG92ZXJmbG93KTsKKyAgICAgICAgICAgIGRhdGEuc3Rh
dGUgPSAic3RhcnQiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhdGVzW3Jvd10g
KyAiIiAhPT0gZGF0YS5zdGF0ZSArICIiKSB7CisgICAgICAgICAgICB0aGlzLnN0YXRlc1tyb3dd
ID0gZGF0YS5zdGF0ZTsKKyAgICAgICAgICAgIHRoaXMubGluZXNbcm93ICsgMV0gPSBudWxsOwor
ICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudExpbmUgPiByb3cgKyAxKQorICAgICAgICAgICAg
ICAgIHRoaXMuY3VycmVudExpbmUgPSByb3cgKyAxOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
Y3VycmVudExpbmUgPT0gcm93KSB7CisgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gcm93
ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmxpbmVzW3Jvd10gPSBkYXRh
LnRva2VuczsKKyAgICB9OworCit9KS5jYWxsKEJhY2tncm91bmRUb2tlbml6ZXIucHJvdG90eXBl
KTsKKworZXhwb3J0cy5CYWNrZ3JvdW5kVG9rZW5pemVyID0gQmFja2dyb3VuZFRva2VuaXplcjsK
K30pOworCithY2UuZGVmaW5lKCdhY2Uvc2VhcmNoX2hpZ2hsaWdodCcsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvb29wJywgJ2FjZS9y
YW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgbGFu
ZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3Ai
KTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIFNlYXJjaEhp
Z2hsaWdodCA9IGZ1bmN0aW9uKHJlZ0V4cCwgY2xhenosIHR5cGUpIHsKKyAgICB0aGlzLnNldFJl
Z2V4cChyZWdFeHApOworICAgIHRoaXMuY2xhenogPSBjbGF6ejsKKyAgICB0aGlzLnR5cGUgPSB0
eXBlIHx8ICJ0ZXh0IjsKK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLk1BWF9SQU5HRVMg
PSA1MDA7CisgICAgCisgICAgdGhpcy5zZXRSZWdleHAgPSBmdW5jdGlvbihyZWdFeHApIHsKKyAg
ICAgICAgaWYgKHRoaXMucmVnRXhwKyIiID09IHJlZ0V4cCsiIikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy5yZWdFeHAgPSByZWdFeHA7CisgICAgICAgIHRoaXMuY2FjaGUgPSBb
XTsKKyAgICB9OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihodG1sLCBtYXJrZXJMYXll
ciwgc2Vzc2lvbiwgY29uZmlnKSB7CisgICAgICAgIGlmICghdGhpcy5yZWdFeHApCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHZhciBzdGFydCA9IGNvbmZpZy5maXJzdFJvdywgZW5kID0g
Y29uZmlnLmxhc3RSb3c7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsg
aSsrKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5jYWNoZVtpXTsKKyAgICAgICAg
ICAgIGlmIChyYW5nZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJhbmdlcyA9IGxhbmcu
Z2V0TWF0Y2hPZmZzZXRzKHNlc3Npb24uZ2V0TGluZShpKSwgdGhpcy5yZWdFeHApOworICAgICAg
ICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID4gdGhpcy5NQVhfUkFOR0VTKQorICAgICAgICAg
ICAgICAgICAgICByYW5nZXMgPSByYW5nZXMuc2xpY2UoMCwgdGhpcy5NQVhfUkFOR0VTKTsKKyAg
ICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKG1hdGNoKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRj
aC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHRoaXMuY2FjaGVbaV0gPSByYW5nZXMubGVuZ3RoID8gcmFuZ2VzIDogIiI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSByYW5nZXMubGVuZ3RoOyBqIC0t
OyApIHsKKyAgICAgICAgICAgICAgICBtYXJrZXJMYXllci5kcmF3U2luZ2xlTGluZU1hcmtlcigK
KyAgICAgICAgICAgICAgICAgICAgaHRtbCwgcmFuZ2VzW2pdLnRvU2NyZWVuUmFuZ2Uoc2Vzc2lv
biksIHRoaXMuY2xhenosIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgdGhpcy50
eXBlCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK30pLmNhbGwoU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuU2VhcmNo
SGlnaGxpZ2h0ID0gU2VhcmNoSGlnaGxpZ2h0OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0
X3Nlc3Npb24vZm9sZGluZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L3JhbmdlJywgJ2FjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lJywgJ2FjZS9lZGl0X3Nlc3Npb24v
Zm9sZCcsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKK3Zh
ciBGb2xkTGluZSA9IHJlcXVpcmUoIi4vZm9sZF9saW5lIikuRm9sZExpbmU7Cit2YXIgRm9sZCA9
IHJlcXVpcmUoIi4vZm9sZCIpLkZvbGQ7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4u
L3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKKworZnVuY3Rpb24gRm9sZGluZygpIHsK
KyAgICB0aGlzLmdldEZvbGRBdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBzaWRlKSB7CisgICAg
ICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUocm93KTsKKyAgICAgICAgaWYgKCFm
b2xkTGluZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBmb2xkcyA9
IGZvbGRMaW5lLmZvbGRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZCA9IGZvbGRzW2ldOworICAgICAgICAgICAg
aWYgKGZvbGQucmFuZ2UuY29udGFpbnMocm93LCBjb2x1bW4pKSB7CisgICAgICAgICAgICAgICAg
aWYgKHNpZGUgPT0gMSAmJiBmb2xkLnJhbmdlLmlzRW5kKHJvdywgY29sdW1uKSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpZGUg
PT0gLTEgJiYgZm9sZC5yYW5nZS5pc1N0YXJ0KHJvdywgY29sdW1uKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZvbGQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0
Rm9sZHNJblJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmFuZ2UgPSByYW5nZS5j
bG9uZSgpOworICAgICAgICB2YXIgc3RhcnQgPSByYW5nZS5zdGFydDsKKyAgICAgICAgdmFyIGVu
ZCA9IHJhbmdlLmVuZDsKKyAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwor
ICAgICAgICB2YXIgZm91bmRGb2xkcyA9IFtdOworCisgICAgICAgIHN0YXJ0LmNvbHVtbiArPSAx
OworICAgICAgICBlbmQuY29sdW1uIC09IDE7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmb2xkTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkTGlu
ZXNbaV0ucmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0g
MikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoY21wID09IC0yKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lc1tpXS5mb2xkczsKKyAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sZHMubGVuZ3RoOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZm9sZCA9IGZvbGRzW2pdOworICAgICAgICAgICAgICAgIGNtcCA9IGZv
bGQucmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgICAgICBpZiAoY21wID09
IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY21wID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSA0MikgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Zm91bmRGb2xkcy5wdXNoKGZvbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBmb3VuZEZvbGRzOworICAgIH07CisgICAgdGhpcy5nZXRBbGxGb2xkcyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgZm9sZHMgPSBbXTsKKyAgICAgICAgdmFyIGZvbGRMaW5lcyA9
IHRoaXMuJGZvbGREYXRhOworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gYWRkRm9sZChmb2xk
KSB7CisgICAgICAgICAgICBmb2xkcy5wdXNoKGZvbGQpOworICAgICAgICAgICAgaWYgKCFmb2xk
LnN1YkZvbGRzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZC5zdWJGb2xkcy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBhZGRGb2xkKGZvbGQuc3ViRm9sZHNbaV0pOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkr
KykKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sZExpbmVzW2ldLmZvbGRzLmxl
bmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGFkZEZvbGQoZm9sZExpbmVzW2ldLmZvbGRzW2pd
KTsKKworICAgICAgICByZXR1cm4gZm9sZHM7CisgICAgfTsKKyAgICB0aGlzLmdldEZvbGRTdHJp
bmdBdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCB0cmltLCBmb2xkTGluZSkgeworICAgICAgICBm
b2xkTGluZSA9IGZvbGRMaW5lIHx8IHRoaXMuZ2V0Rm9sZExpbmUocm93KTsKKyAgICAgICAgaWYg
KCFmb2xkTGluZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBsYXN0
Rm9sZCA9IHsKKyAgICAgICAgICAgIGVuZDogeyBjb2x1bW46IDAgfQorICAgICAgICB9OworICAg
ICAgICB2YXIgc3RyLCBmb2xkOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5l
LmZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb2xkID0gZm9sZExpbmUuZm9sZHNb
aV07CisgICAgICAgICAgICB2YXIgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5kKHJvdywgY29s
dW1uKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBzdHIg
PSB0aGlzCisgICAgICAgICAgICAgICAgICAgIC5nZXRMaW5lKGZvbGQuc3RhcnQucm93KQorICAg
ICAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKGxhc3RGb2xkLmVuZC5jb2x1bW4sIGZvbGQuc3Rh
cnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGNtcCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdEZvbGQgPSBmb2xkOworICAgICAgICB9
CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRMaW5lKGZvbGQu
c3RhcnQucm93KS5zdWJzdHJpbmcobGFzdEZvbGQuZW5kLmNvbHVtbik7CisKKyAgICAgICAgaWYg
KHRyaW0gPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBjb2x1bW4g
LSBsYXN0Rm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgZWxzZSBpZiAodHJpbSA9PSAxKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoY29sdW1uIC0gbGFzdEZvbGQuZW5kLmNvbHVt
bik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0Rm9sZExpbmUgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHsKKyAg
ICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIHZhciBpID0gMDsK
KyAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUpCisgICAgICAgICAgICBpID0gZm9sZERhdGEuaW5k
ZXhPZihzdGFydEZvbGRMaW5lKTsKKyAgICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICBp
ID0gMDsKKyAgICAgICAgZm9yIChpOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRhW2ldOworICAgICAgICAgICAgaWYgKGZvbGRM
aW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cgJiYgZm9sZExpbmUuZW5kLnJvdyA+PSBkb2NSb3cpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZExpbmU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGZvbGRMaW5lLmVuZC5yb3cgPiBkb2NSb3cpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
OworICAgIHRoaXMuZ2V0TmV4dEZvbGRMaW5lID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRM
aW5lKSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICB2
YXIgaSA9IDA7CisgICAgICAgIGlmIChzdGFydEZvbGRMaW5lKQorICAgICAgICAgICAgaSA9IGZv
bGREYXRhLmluZGV4T2Yoc3RhcnRGb2xkTGluZSk7CisgICAgICAgIGlmIChpID09IC0xKQorICAg
ICAgICAgICAgaSA9IDA7CisgICAgICAgIGZvciAoaTsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsKKyAgICAgICAgICAg
IGlmIChmb2xkTGluZS5lbmQucm93ID49IGRvY1JvdykgeworICAgICAgICAgICAgICAgIHJldHVy
biBmb2xkTGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkZWRSb3dDb3VudCA9IGZ1bmN0aW9uKGZpcnN0
LCBsYXN0KSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhLCByb3dDb3Vu
dCA9IGxhc3QtZmlyc3QrMTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV0sCisg
ICAgICAgICAgICAgICAgZW5kID0gZm9sZExpbmUuZW5kLnJvdywKKyAgICAgICAgICAgICAgICBz
dGFydCA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGlmIChlbmQgPj0gbGFzdCkg
eworICAgICAgICAgICAgICAgIGlmKHN0YXJ0IDwgbGFzdCkgeworICAgICAgICAgICAgICAgICAg
ICBpZihzdGFydCA+PSBmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09
IGxhc3Qtc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJvd0NvdW50ID0gMDsvL2luIG9uZSBmb2xkCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmKGVuZCA+PSBmaXJzdCl7
CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGZpcnN0KSAvL2ZvbGQgaW5zaWRlIHJhbmdl
CisgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09ICBlbmQtc3RhcnQ7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSAgZW5kLWZpcnN0KzE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvd0NvdW50OworICAg
IH07CisKKyAgICB0aGlzLiRhZGRGb2xkTGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lKSB7CisgICAg
ICAgIHRoaXMuJGZvbGREYXRhLnB1c2goZm9sZExpbmUpOworICAgICAgICB0aGlzLiRmb2xkRGF0
YS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnN0YXJ0LnJvdyAt
IGIuc3RhcnQucm93OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGZvbGRMaW5lOworICAg
IH07CisgICAgdGhpcy5hZGRGb2xkID0gZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJhbmdlKSB7Cisg
ICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICB2YXIgYWRkZWQg
PSBmYWxzZTsKKyAgICAgICAgdmFyIGZvbGQ7CisgICAgICAgIAorICAgICAgICBpZiAocGxhY2Vo
b2xkZXIgaW5zdGFuY2VvZiBGb2xkKQorICAgICAgICAgICAgZm9sZCA9IHBsYWNlaG9sZGVyOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmb2xkID0gbmV3IEZvbGQocmFuZ2UsIHBsYWNlaG9s
ZGVyKTsKKworICAgICAgICB0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50KGZvbGQucmFuZ2UpOwor
CisgICAgICAgIHZhciBzdGFydFJvdyA9IGZvbGQuc3RhcnQucm93OworICAgICAgICB2YXIgc3Rh
cnRDb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgdmFyIGVuZFJvdyA9IGZvbGQu
ZW5kLnJvdzsKKyAgICAgICAgdmFyIGVuZENvbHVtbiA9IGZvbGQuZW5kLmNvbHVtbjsKKyAgICAg
ICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdyAmJiBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiA8IDIp
CisgICAgICAgICAgICB0aHJvdyAiVGhlIHJhbmdlIGhhcyB0byBiZSBhdCBsZWFzdCAyIGNoYXJh
Y3RlcnMgd2lkdGgiOworCisgICAgICAgIHZhciBzdGFydEZvbGQgPSB0aGlzLmdldEZvbGRBdChz
dGFydFJvdywgc3RhcnRDb2x1bW4sIDEpOworICAgICAgICB2YXIgZW5kRm9sZCA9IHRoaXMuZ2V0
Rm9sZEF0KGVuZFJvdywgZW5kQ29sdW1uLCAtMSk7CisgICAgICAgIGlmIChzdGFydEZvbGQgJiYg
ZW5kRm9sZCA9PSBzdGFydEZvbGQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnRGb2xkLmFkZFN1
YkZvbGQoZm9sZCk7CisKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKHN0YXJ0Rm9sZCAmJiAh
c3RhcnRGb2xkLnJhbmdlLmlzU3RhcnQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSkKKyAgICAgICAg
ICAgIHx8IChlbmRGb2xkICYmICFlbmRGb2xkLnJhbmdlLmlzRW5kKGVuZFJvdywgZW5kQ29sdW1u
KSkKKyAgICAgICAgKSB7CisgICAgICAgICAgICB0aHJvdyAiQSBmb2xkIGNhbid0IGludGVyc2Vj
dCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9sZC5yYW5nZSArIHN0YXJ0Rm9sZC5yYW5nZTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShmb2xk
LnJhbmdlKTsKKyAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHRo
aXMucmVtb3ZlRm9sZHMoZm9sZHMpOworICAgICAgICAgICAgZm9sZC5zdWJGb2xkcyA9IGZvbGRz
OworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07CisgICAg
ICAgICAgICBpZiAoZW5kUm93ID09IGZvbGRMaW5lLnN0YXJ0LnJvdykgeworICAgICAgICAgICAg
ICAgIGZvbGRMaW5lLmFkZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoc3RhcnRSb3cgPT0gZm9sZExpbmUuZW5kLnJvdykgeworICAgICAgICAgICAgICAgIGZv
bGRMaW5lLmFkZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGlmICghZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBmb2xkTGluZU5leHQgPSBmb2xkRGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgICAgIGlm
IChmb2xkTGluZU5leHQgJiYgZm9sZExpbmVOZXh0LnN0YXJ0LnJvdyA9PSBlbmRSb3cpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLm1lcmdlKGZvbGRMaW5lTmV4dCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGVuZFJvdyA8PSBmb2xkTGluZS5zdGFydC5yb3cpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
YWRkZWQpCisgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuJGFkZEZvbGRMaW5lKG5ldyBGb2xk
TGluZSh0aGlzLiRmb2xkRGF0YSwgZm9sZCkpOworCisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFw
TW9kZSkKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZvbGRMaW5lLnN0YXJ0LnJv
dywgZm9sZExpbmUuc3RhcnQucm93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4k
dXBkYXRlUm93TGVuZ3RoQ2FjaGUoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5y
b3cpOworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZUZvbGQiLCB7IGRhdGE6IGZvbGQgfSk7CisKKyAgICAgICAgcmV0dXJuIGZvbGQ7Cisg
ICAgfTsKKworICAgIHRoaXMuYWRkRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgeworICAgICAgICBm
b2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRm9sZChm
b2xkKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlRm9sZCA9
IGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZC5mb2xkTGluZTsK
KyAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICB2YXIg
ZW5kUm93ID0gZm9sZExpbmUuZW5kLnJvdzsKKworICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhp
cy4kZm9sZERhdGE7CisgICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzOworICAgICAg
ICBpZiAoZm9sZHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIGZvbGRMaW5lcy5zcGxpY2Uo
Zm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUpLCAxKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
IGlmIChmb2xkTGluZS5yYW5nZS5pc0VuZChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikp
IHsKKyAgICAgICAgICAgIGZvbGRzLnBvcCgpOworICAgICAgICAgICAgZm9sZExpbmUuZW5kLnJv
dyA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdLmVuZC5yb3c7CisgICAgICAgICAgICBmb2xkTGlu
ZS5lbmQuY29sdW1uID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLmNvbHVtbjsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc1N0YXJ0KGZvbGQuc3RhcnQu
cm93LCBmb2xkLnN0YXJ0LmNvbHVtbikpIHsKKyAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7Cisg
ICAgICAgICAgICBmb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7CisgICAg
ICAgICAgICBmb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICBm
b2xkcy5zcGxpY2UoZm9sZHMuaW5kZXhPZihmb2xkKSwgMSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChmb2xk
LnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgZm9sZHMgPSBuZXdG
b2xkTGluZS5mb2xkczsKKyAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7CisgICAgICAgICAgICBu
ZXdGb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7CisgICAgICAgICAgICBu
ZXdGb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCisgICAgICAgICAgICB0aGlzLiR1
cGRhdGVXcmFwRGF0YShzdGFydFJvdywgZW5kUm93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoc3RhcnRSb3csIGVuZFJvdyk7CisgICAgICAg
IHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIs
IHsgZGF0YTogZm9sZCB9KTsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVGb2xkcyA9IGZ1bmN0
aW9uKGZvbGRzKSB7CisgICAgICAgIHZhciBjbG9uZUZvbGRzID0gW107CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNsb25lRm9s
ZHMucHVzaChmb2xkc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBjbG9uZUZvbGRzLmZvckVh
Y2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpOwor
ICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgIH07
CisKKyAgICB0aGlzLmV4cGFuZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CisgICAgICAgIHRoaXMu
cmVtb3ZlRm9sZChmb2xkKTsKKyAgICAgICAgZm9sZC5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9u
KGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkKTsKKyAgICAgICAgfSwgdGhp
cyk7CisgICAgICAgIGZvbGQuc3ViRm9sZHMgPSBbXTsKKyAgICB9OworCisgICAgdGhpcy5leHBh
bmRGb2xkcyA9IGZ1bmN0aW9uKGZvbGRzKSB7CisgICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rp
b24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOworICAgICAgICB9
LCB0aGlzKTsKKyAgICB9OworCisgICAgdGhpcy51bmZvbGQgPSBmdW5jdGlvbihsb2NhdGlvbiwg
ZXhwYW5kSW5uZXIpIHsKKyAgICAgICAgdmFyIHJhbmdlLCBmb2xkczsKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IG51bGwpCisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCB0aGlz
LmdldExlbmd0aCgpLCAwKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0aW9uID09ICJu
dW1iZXIiKQorICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UobG9jYXRpb24sIDAsIGxvY2F0
aW9uLCB0aGlzLmdldExpbmUobG9jYXRpb24pLmxlbmd0aCk7CisgICAgICAgIGVsc2UgaWYgKCJy
b3ciIGluIGxvY2F0aW9uKQorICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxv
Y2F0aW9uLCBsb2NhdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdlID0gbG9j
YXRpb247CisKKyAgICAgICAgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7Cisg
ICAgICAgIGlmIChleHBhbmRJbm5lcikgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhm
b2xkcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoZm9sZHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkcyhmb2xkcyk7CisgICAgICAgICAg
ICAgICAgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuaXNSb3dGb2xkZWQgPSBmdW5jdGlvbihkb2NS
b3csIHN0YXJ0Rm9sZFJvdykgeworICAgICAgICByZXR1cm4gISF0aGlzLmdldEZvbGRMaW5lKGRv
Y1Jvdywgc3RhcnRGb2xkUm93KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRSb3dGb2xkRW5kID0g
ZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0g
dGhpcy5nZXRGb2xkTGluZShkb2NSb3csIHN0YXJ0Rm9sZFJvdyk7CisgICAgICAgIHJldHVybiBm
b2xkTGluZSA/IGZvbGRMaW5lLmVuZC5yb3cgOiBkb2NSb3c7CisgICAgfTsKKworICAgIHRoaXMu
Z2V0Rm9sZERpc3BsYXlMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUsIGVuZFJvdywgZW5kQ29sdW1u
LCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHsKKyAgICAgICAgaWYgKHN0YXJ0Um93ID09IG51bGwp
IHsKKyAgICAgICAgICAgIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAg
ICAgc3RhcnRDb2x1bW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuZFJvdyA9PSBu
dWxsKSB7CisgICAgICAgICAgICBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93OworICAgICAgICAg
ICAgZW5kQ29sdW1uID0gdGhpcy5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOworICAgICAgICB9Cisg
ICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKKyAgICAgICAgdmFyIHRleHRMaW5lID0gIiI7CisK
KyAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4s
IGxhc3RDb2x1bW4pIHsKKyAgICAgICAgICAgIGlmIChyb3cgPCBzdGFydFJvdykgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocm93ID09IHN0YXJ0Um93
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bGFzdENvbHVtbiA9IE1hdGgubWF4KHN0YXJ0Q29sdW1uLCBsYXN0Q29sdW1uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgdGV4dExpbmUgKz0gcGxhY2Vob2xkZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHRleHRMaW5lICs9IGRvYy5nZXRMaW5lKHJvdykuc3Vic3RyaW5nKGxhc3RD
b2x1bW4sIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0aGlzKSwgZW5k
Um93LCBlbmRDb2x1bW4pOworICAgICAgICByZXR1cm4gdGV4dExpbmU7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0RGlzcGxheUxpbmUgPSBmdW5jdGlvbihyb3csIGVuZENvbHVtbiwgc3RhcnRSb3cs
IHN0YXJ0Q29sdW1uKSB7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUo
cm93KTsKKworICAgICAgICBpZiAoIWZvbGRMaW5lKSB7CisgICAgICAgICAgICB2YXIgbGluZTsK
KyAgICAgICAgICAgIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgICAgICBy
ZXR1cm4gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4gfHwgMCwgZW5kQ29sdW1uIHx8IGxpbmUu
bGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZv
bGREaXNwbGF5TGluZSgKKyAgICAgICAgICAgICAgICBmb2xkTGluZSwgcm93LCBlbmRDb2x1bW4s
IHN0YXJ0Um93LCBzdGFydENvbHVtbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4k
Y2xvbmVGb2xkRGF0YSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZmQgPSBbXTsKKyAgICAg
ICAgZmQgPSB0aGlzLiRmb2xkRGF0YS5tYXAoZnVuY3Rpb24oZm9sZExpbmUpIHsKKyAgICAgICAg
ICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzLm1hcChmdW5jdGlvbihmb2xkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZvbGQuY2xvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBGb2xkTGluZShmZCwgZm9sZHMpOworICAgICAgICB9KTsKKworICAg
ICAgICByZXR1cm4gZmQ7CisgICAgfTsKKworICAgIHRoaXMudG9nZ2xlRm9sZCA9IGZ1bmN0aW9u
KHRyeVRvVW5mb2xkKSB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbjsK
KyAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgIHZhciBm
b2xkOworICAgICAgICB2YXIgYnJhY2tldFBvczsKKworICAgICAgICBpZiAocmFuZ2UuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAg
ICBmb2xkID0gdGhpcy5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CisKKyAg
ICAgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZv
bGQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGJyYWNrZXRQb3MgPSB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoY3Vyc29yKSkg
eworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlUG9pbnQoYnJhY2tldFBvcykgPT0g
MSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQgPSBicmFja2V0UG9zOworICAgICAg
ICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvczsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4tLTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChicmFj
a2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVt
bjogY3Vyc29yLmNvbHVtbiArIDF9KSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21w
YXJlUG9pbnQoYnJhY2tldFBvcykgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5k
ID0gYnJhY2tldFBvczsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvczsKKworICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0
LmNvbHVtbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgcmFuZ2UgPSB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UoY3Vyc29yLnJvdywgY3Vyc29y
LmNvbHVtbikgfHwgcmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7CisgICAgICAg
ICAgICBpZiAodHJ5VG9VbmZvbGQgJiYgZm9sZHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5leHBhbmRGb2xkcyhmb2xkcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgaWYgKGZvbGRzLmxlbmd0aCA9PSAxICkgeworICAg
ICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1swXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICghZm9sZCkKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChy
YW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisKKyAgICAgICAgaWYgKGZvbGQg
JiYgZm9sZC5yYW5nZS50b1N0cmluZygpID09IHJhbmdlLnRvU3RyaW5nKCkpIHsKKyAgICAgICAg
ICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBwbGFjZWhvbGRlciA9ICIuLi4iOworICAgICAgICBpZiAoIXJhbmdl
LmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5nZXRUZXh0
UmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgaWYocGxhY2Vob2xkZXIubGVuZ3RoIDwgNCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9s
ZGVyLnRyaW0oKS5zdWJzdHJpbmcoMCwgMikgKyAiLi4iOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5hZGRGb2xkKHBsYWNlaG9sZGVyLCByYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0
Q29tbWVudEZvbGRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBkaXIpIHsKKyAgICAgICAg
dmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcm93LCBjb2x1bW4pOworICAg
ICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgaWYg
KHRva2VuICYmIC9eY29tbWVudHxzdHJpbmcvLnRlc3QodG9rZW4udHlwZSkpIHsKKyAgICAgICAg
ICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZSgpOworICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJl
Z0V4cCh0b2tlbi50eXBlLnJlcGxhY2UoL1wuLiovLCAiXFwuIikpOworICAgICAgICAgICAgaWYg
KGRpciAhPSAxKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgICAgIH0gd2hpbGUo
dG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3Iu
c3RlcEZvcndhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmFuZ2Uuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CisgICAgICAg
ICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4o
KSArIDI7CisKKyAgICAgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywg
cm93LCBjb2x1bW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZGlyICE9IC0xKSB7
CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJh
dG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSh0b2tlbiAmJiByZS50
ZXN0KHRva2VuLnR5cGUpKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBC
YWNrd2FyZCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdG9rZW4gPSBp
dGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKworICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9
IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOworICAgICAgICAgICAgcmFuZ2UuZW5kLmNv
bHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVu
Z3RoIC0gMjsKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0aGlzLmZvbGRBbGwgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93KSB7CisgICAgICAg
IHZhciBmb2xkV2lkZ2V0cyA9IHRoaXMuZm9sZFdpZGdldHM7CisgICAgICAgIGVuZFJvdyA9IGVu
ZFJvdyB8fCB0aGlzLmdldExlbmd0aCgpOworICAgICAgICBmb3IgKHZhciByb3cgPSBzdGFydFJv
dyB8fCAwOyByb3cgPCBlbmRSb3c7IHJvdysrKSB7CisgICAgICAgICAgICBpZiAoZm9sZFdpZGdl
dHNbcm93XSA9PSBudWxsKQorICAgICAgICAgICAgICAgIGZvbGRXaWRnZXRzW3Jvd10gPSB0aGlz
LmdldEZvbGRXaWRnZXQocm93KTsKKyAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddICE9
ICJzdGFydCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHZhciBy
YW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdyk7CisgICAgICAgICAgICBpZiAocmFu
Z2UgJiYgcmFuZ2UuZW5kLnJvdyA8PSBlbmRSb3cpIHRyeSB7CisgICAgICAgICAgICAgICAgdGhp
cy5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisgICAg
ICAgIH0KKyAgICB9OworICAgIAorICAgIHRoaXMuJGZvbGRTdHlsZXMgPSB7CisgICAgICAgICJt
YW51YWwiOiAxLAorICAgICAgICAibWFya2JlZ2luIjogMSwKKyAgICAgICAgIm1hcmtiZWdpbmVu
ZCI6IDEKKyAgICB9OworICAgIHRoaXMuJGZvbGRTdHlsZSA9ICJtYXJrYmVnaW4iOworICAgIHRo
aXMuc2V0Rm9sZFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRm
b2xkU3R5bGVzW3N0eWxlXSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBm
b2xkIHN0eWxlOiAiICsgc3R5bGUgKyAiWyIgKyBPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVz
KS5qb2luKCIsICIpICsgIl0iKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLiRmb2xkU3R5
bGUgPT0gc3R5bGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kZm9sZFN0
eWxlID0gc3R5bGU7CisgICAgICAgIAorICAgICAgICBpZiAoc3R5bGUgPT0gIm1hbnVhbCIpCisg
ICAgICAgICAgICB0aGlzLnVuZm9sZCgpOworICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGZvbGRN
b2RlOworICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG51bGwpOworICAgICAgICB0aGlzLiRzZXRG
b2xkaW5nKG1vZGUpOworICAgIH07CisgICAgdGhpcy4kc2V0Rm9sZGluZyA9IGZ1bmN0aW9uKGZv
bGRNb2RlKSB7CisgICAgICAgIGlmICh0aGlzLiRmb2xkTW9kZSA9PSBmb2xkTW9kZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICB0aGlzLiRmb2xkTW9kZSA9IGZv
bGRNb2RlOworICAgICAgICAKKyAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY2hhbmdlJywg
dGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VBbm5v
dGF0aW9uIik7CisgICAgICAgIAorICAgICAgICBpZiAoIWZvbGRNb2RlIHx8IHRoaXMuJGZvbGRT
dHlsZSA9PSAibWFudWFsIikgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9IG51bGw7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXMu
Zm9sZFdpZGdldHMgPSBbXTsKKyAgICAgICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZm9sZE1vZGUu
Z2V0Rm9sZFdpZGdldC5iaW5kKGZvbGRNb2RlLCB0aGlzLCB0aGlzLiRmb2xkU3R5bGUpOworICAg
ICAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZvbGRNb2RlLmdldEZvbGRXaWRnZXRSYW5n
ZS5iaW5kKGZvbGRNb2RlLCB0aGlzLCB0aGlzLiRmb2xkU3R5bGUpOworICAgICAgICAKKyAgICAg
ICAgdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMgPSB0aGlzLnVwZGF0ZUZvbGRXaWRnZXRzLmJpbmQo
dGhpcyk7CisgICAgICAgIHRoaXMub24oJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRz
KTsKKyAgICAgICAgCisgICAgfTsKKworICAgIHRoaXMub25Gb2xkV2lkZ2V0Q2xpY2sgPSBmdW5j
dGlvbihyb3csIGUpIHsKKyAgICAgICAgZSA9IGUuZG9tRXZlbnQ7CisgICAgICAgIHZhciB0eXBl
ID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRM
aW5lKHJvdyk7CisgICAgICAgIHZhciBvbmx5U3ViZm9sZHMgPSBlLnNoaWZ0S2V5OworICAgICAg
ICB2YXIgYWRkU3ViZm9sZHMgPSBvbmx5U3ViZm9sZHMgfHwgZS5jdHJsS2V5IHx8IGUuYWx0S2V5
IHx8IGUubWV0YUtleTsKKyAgICAgICAgdmFyIGZvbGQ7CisKKyAgICAgICAgaWYgKHR5cGUgPT0g
ImVuZCIpCisgICAgICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQocm93LCAwLCAtMSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3csIGxpbmUu
bGVuZ3RoLCAxKTsKKworICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgaWYgKGFkZFN1
YmZvbGRzKQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldEZv
bGRXaWRnZXRSYW5nZShyb3cpOworICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIGlm
ICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkgeworICAgICAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdl
dEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgMSk7CisgICAgICAg
ICAgICAgICAgaWYgKGZvbGQgJiYgcmFuZ2UuaXNFcXVhbChmb2xkLnJhbmdlKSkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghb25seVN1YmZvbGRzKQorICAgICAgICAgICAgICAgIHRoaXMuYWRk
Rm9sZCgiLi4uIiwgcmFuZ2UpOworCisgICAgICAgICAgICBpZiAoYWRkU3ViZm9sZHMpCisgICAg
ICAgICAgICAgICAgdGhpcy5mb2xkQWxsKHJhbmdlLnN0YXJ0LnJvdyArIDEsIHJhbmdlLmVuZC5y
b3cpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFkZFN1YmZvbGRzKQorICAg
ICAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyb3cgKyAxLCB0aGlzLmdldExlbmd0aCgpKTsKKyAg
ICAgICAgICAgIChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpLmNsYXNzTmFtZSArPSAiIGFjZV9p
bnZhbGlkIgorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnVwZGF0ZUZvbGRXaWRn
ZXRzID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAg
IHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5z
dGFydC5yb3c7CisgICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93IC0gZmlyc3RSb3c7CisK
KyAgICAgICAgaWYgKGxlbiA9PT0gMCkgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0c1tm
aXJzdFJvd10gPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVt
b3ZlVGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAgICAgICAgICAg
IHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlKGZpcnN0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CisgICAg
ICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpOworICAgICAgICAgICAgdGhpcy5mb2xk
V2lkZ2V0cy5zcGxpY2UuYXBwbHkodGhpcy5mb2xkV2lkZ2V0cywgYXJncyk7CisgICAgICAgIH0K
KyAgICB9OworCit9CisKK2V4cG9ydHMuRm9sZGluZyA9IEZvbGRpbmc7CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGluZScsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CitmdW5j
dGlvbiBGb2xkTGluZShmb2xkRGF0YSwgZm9sZHMpIHsKKyAgICB0aGlzLmZvbGREYXRhID0gZm9s
ZERhdGE7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9sZHMpKSB7CisgICAgICAgIHRoaXMuZm9s
ZHMgPSBmb2xkczsKKyAgICB9IGVsc2UgeworICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHMgPSBb
IGZvbGRzIF07CisgICAgfQorCisgICAgdmFyIGxhc3QgPSBmb2xkc1tmb2xkcy5sZW5ndGggLSAx
XQorICAgIHRoaXMucmFuZ2UgPSBuZXcgUmFuZ2UoZm9sZHNbMF0uc3RhcnQucm93LCBmb2xkc1sw
XS5zdGFydC5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LmVuZC5yb3cs
IGxhc3QuZW5kLmNvbHVtbik7CisgICAgdGhpcy5zdGFydCA9IHRoaXMucmFuZ2Uuc3RhcnQ7Cisg
ICAgdGhpcy5lbmQgICA9IHRoaXMucmFuZ2UuZW5kOworCisgICAgdGhpcy5mb2xkcy5mb3JFYWNo
KGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzKTsKKyAgICB9
LCB0aGlzKTsKK30KKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2hpZnRSb3cgPSBmdW5jdGlv
bihzaGlmdCkgeworICAgICAgICB0aGlzLnN0YXJ0LnJvdyArPSBzaGlmdDsKKyAgICAgICAgdGhp
cy5lbmQucm93ICs9IHNoaWZ0OworICAgICAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24o
Zm9sZCkgeworICAgICAgICAgICAgZm9sZC5zdGFydC5yb3cgKz0gc2hpZnQ7CisgICAgICAgICAg
ICBmb2xkLmVuZC5yb3cgKz0gc2hpZnQ7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHRoaXMu
YWRkRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgaWYgKGZvbGQuc2FtZVJvdykgewor
ICAgICAgICAgICAgaWYgKGZvbGQuc3RhcnQucm93IDwgdGhpcy5zdGFydFJvdyB8fCBmb2xkLmVu
ZFJvdyA+IHRoaXMuZW5kUm93KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgIkNhbid0IGFkZCBh
IGZvbGQgdG8gdGhpcyBGb2xkTGluZSBhcyBpdCBoYXMgbm8gY29ubmVjdGlvbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLmZvbGRzLnB1c2goZm9sZCk7CisgICAgICAgICAgICB0
aGlzLmZvbGRzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgIHJldHVybiAt
YS5yYW5nZS5jb21wYXJlRW5kKGIuc3RhcnQucm93LCBiLnN0YXJ0LmNvbHVtbik7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVFbmQoZm9sZC5zdGFy
dC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKSA+IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVu
ZC5yb3cgPSBmb2xkLmVuZC5yb3c7CisgICAgICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0g
IGZvbGQuZW5kLmNvbHVtbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5nZS5jb21w
YXJlU3RhcnQoZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pIDwgMCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuc3RhcnQucm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICAgICAg
dGhpcy5zdGFydC5jb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSB0aGlzLmVuZC5yb3cpIHsKKyAgICAg
ICAgICAgIHRoaXMuZm9sZHMucHVzaChmb2xkKTsKKyAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9
IGZvbGQuZW5kLnJvdzsKKyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGZvbGQuZW5kLmNv
bHVtbjsKKyAgICAgICAgfSBlbHNlIGlmIChmb2xkLmVuZC5yb3cgPT0gdGhpcy5zdGFydC5yb3cp
IHsKKyAgICAgICAgICAgIHRoaXMuZm9sZHMudW5zaGlmdChmb2xkKTsKKyAgICAgICAgICAgIHRo
aXMuc3RhcnQucm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICB0aGlzLnN0YXJ0LmNv
bHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dGhyb3cgIlRyeWluZyB0byBhZGQgZm9sZCB0byBGb2xkUm93IHRoYXQgZG9lc24ndCBoYXZlIGEg
bWF0Y2hpbmcgcm93IjsKKyAgICAgICAgfQorICAgICAgICBmb2xkLmZvbGRMaW5lID0gdGhpczsK
KyAgICB9CisKKyAgICB0aGlzLmNvbnRhaW5zUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAg
IHJldHVybiByb3cgPj0gdGhpcy5zdGFydC5yb3cgJiYgcm93IDw9IHRoaXMuZW5kLnJvdzsKKyAg
ICB9CisKKyAgICB0aGlzLndhbGsgPSBmdW5jdGlvbihjYWxsYmFjaywgZW5kUm93LCBlbmRDb2x1
bW4pIHsKKyAgICAgICAgdmFyIGxhc3RFbmQgPSAwLAorICAgICAgICAgICAgZm9sZHMgPSB0aGlz
LmZvbGRzLAorICAgICAgICAgICAgZm9sZCwKKyAgICAgICAgICAgIGNvbXAsIHN0b3AsIGlzTmV3
Um93ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZW5kUm93ID09IG51bGwpIHsKKyAgICAgICAgICAg
IGVuZFJvdyA9IHRoaXMuZW5kLnJvdzsKKyAgICAgICAgICAgIGVuZENvbHVtbiA9IHRoaXMuZW5k
LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvbGQgPSBmb2xkc1tpXTsKKworICAgICAgICAg
ICAgY29tcCA9IGZvbGQucmFuZ2UuY29tcGFyZVN0YXJ0KGVuZFJvdywgZW5kQ29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChjb21wID09IC0xKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVs
bCwgZW5kUm93LCBlbmRDb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0b3AgPSBjYWxsYmFjayhu
dWxsLCBmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93
KTsKKyAgICAgICAgICAgIHN0b3AgPSAhc3RvcCAmJiBjYWxsYmFjayhmb2xkLnBsYWNlaG9sZGVy
LCBmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4sIGxhc3RFbmQpOworICAgICAgICAg
ICAgaWYgKHN0b3AgfHwgY29tcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaXNOZXdSb3cgPSAhZm9sZC5zYW1lUm93OworICAgICAg
ICAgICAgbGFzdEVuZCA9IGZvbGQuZW5kLmNvbHVtbjsKKyAgICAgICAgfQorICAgICAgICBjYWxs
YmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpOworICAgIH0K
KworICAgIHRoaXMuZ2V0TmV4dEZvbGRUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAg
ICAgIHZhciBmb2xkLCBjbXA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xk
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9sZCA9IHRoaXMuZm9sZHNbaV07CisgICAg
ICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pOworICAgICAg
ICAgICAgaWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgIGZvbGQ6IGZvbGQsCisgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJhZnRl
ciIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMCkg
eworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZv
bGQsCisgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJpbnNpZGUiCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0K
KworICAgIHRoaXMuYWRkUmVtb3ZlQ2hhcnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgbGVuKSB7
CisgICAgICAgIHZhciByZXQgPSB0aGlzLmdldE5leHRGb2xkVG8ocm93LCBjb2x1bW4pLAorICAg
ICAgICAgICAgZm9sZCwgZm9sZHM7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIGZv
bGQgPSByZXQuZm9sZDsKKyAgICAgICAgICAgIGlmIChyZXQua2luZCA9PSAiaW5zaWRlIgorICAg
ICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQuY29sdW1uICE9IGNvbHVtbgorICAgICAgICAgICAg
ICAgICYmIGZvbGQuc3RhcnQucm93ICE9IHJvdykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cocm93LCBjb2x1bW4sIGZv
bGQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSByb3cpIHsKKyAg
ICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHM7CisgICAgICAgICAgICAgICAgdmFyIGkg
PSBmb2xkcy5pbmRleE9mKGZvbGQpOworICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gKz0gbGVuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGk7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07CisgICAgICAgICAgICAgICAgICAg
IGZvbGQuc3RhcnQuY29sdW1uICs9IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2xk
LnNhbWVSb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb2xkLmVuZC5jb2x1bW4gKz0gbGVuOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gbGVu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdGhpcy5zcGxpdCA9IGZ1
bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBmb2xkID0gdGhpcy5nZXROZXh0Rm9s
ZFRvKHJvdywgY29sdW1uKS5mb2xkLAorICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzOwor
ICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLmZvbGREYXRhOworCisgICAgICAgIGlmICghZm9s
ZCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGkg
PSBmb2xkcy5pbmRleE9mKGZvbGQpOworICAgICAgICB2YXIgZm9sZEJlZm9yZSA9IGZvbGRzW2kg
LSAxXTsKKyAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZEJlZm9yZS5lbmQucm93OworICAgICAg
ICB0aGlzLmVuZC5jb2x1bW4gPSBmb2xkQmVmb3JlLmVuZC5jb2x1bW47CisgICAgICAgIGZvbGRz
ID0gZm9sZHMuc3BsaWNlKGksIGZvbGRzLmxlbmd0aCAtIGkpOworCisgICAgICAgIHZhciBuZXdG
b2xkTGluZSA9IG5ldyBGb2xkTGluZShmb2xkRGF0YSwgZm9sZHMpOworICAgICAgICBmb2xkRGF0
YS5zcGxpY2UoZm9sZERhdGEuaW5kZXhPZih0aGlzKSArIDEsIDAsIG5ld0ZvbGRMaW5lKTsKKyAg
ICAgICAgcmV0dXJuIG5ld0ZvbGRMaW5lOworICAgIH0KKworICAgIHRoaXMubWVyZ2UgPSBmdW5j
dGlvbihmb2xkTGluZU5leHQpIHsKKyAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVOZXh0LmZv
bGRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICB0aGlzLmFkZEZvbGQoZm9sZHNbaV0pOworICAgICAgICB9CisgICAgICAgIHZh
ciBmb2xkRGF0YSA9IHRoaXMuZm9sZERhdGE7CisgICAgICAgIGZvbGREYXRhLnNwbGljZShmb2xk
RGF0YS5pbmRleE9mKGZvbGRMaW5lTmV4dCksIDEpOworICAgIH0KKworICAgIHRoaXMudG9TdHJp
bmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJldCA9IFt0aGlzLnJhbmdlLnRvU3RyaW5n
KCkgKyAiOiBbIiBdOworCisgICAgICAgIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xk
KSB7CisgICAgICAgICAgICByZXQucHVzaCgiICAiICsgZm9sZC50b1N0cmluZygpKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldC5wdXNoKCJdIikKKyAgICAgICAgcmV0dXJuIHJldC5qb2luKCJc
biIpOworICAgIH0KKworICAgIHRoaXMuaWR4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGlkeCkgewor
ICAgICAgICB2YXIgbGFzdEZvbGRFbmRDb2x1bW4gPSAwOworICAgICAgICB2YXIgZm9sZDsKKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIHZhciBmb2xkID0gdGhpcy5mb2xkc1tpXTsKKworICAgICAgICAgICAgaWR4IC09
IGZvbGQuc3RhcnQuY29sdW1uIC0gbGFzdEZvbGRFbmRDb2x1bW47CisgICAgICAgICAgICBpZiAo
aWR4IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IHJvdzogZm9sZC5zdGFydC5yb3csCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogZm9sZC5z
dGFydC5jb2x1bW4gKyBpZHgKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZHggLT0gZm9sZC5wbGFjZWhvbGRlci5sZW5ndGg7CisgICAgICAgICAgICBp
ZiAoaWR4IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmb2xkLnN0YXJ0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBsYXN0Rm9sZEVuZENvbHVtbiA9IGZvbGQuZW5kLmNvbHVt
bjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICByb3c6IHRoaXMu
ZW5kLnJvdywKKyAgICAgICAgICAgIGNvbHVtbjogdGhpcy5lbmQuY29sdW1uICsgaWR4CisgICAg
ICAgIH07CisgICAgfQorfSkuY2FsbChGb2xkTGluZS5wcm90b3R5cGUpOworCitleHBvcnRzLkZv
bGRMaW5lID0gRm9sZExpbmU7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9m
b2xkJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBGb2xkID0gZXhwb3J0cy5Gb2xkID0gZnVuY3Rpb24o
cmFuZ2UsIHBsYWNlaG9sZGVyKSB7CisgICAgdGhpcy5mb2xkTGluZSA9IG51bGw7CisgICAgdGhp
cy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyOworICAgIHRoaXMucmFuZ2UgPSByYW5nZTsKKyAg
ICB0aGlzLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CisgICAgdGhpcy5lbmQgPSByYW5nZS5lbmQ7CisK
KyAgICB0aGlzLnNhbWVSb3cgPSByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdzsKKyAg
ICB0aGlzLnN1YkZvbGRzID0gW107Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLnRv
U3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAnIicgKyB0aGlzLnBsYWNlaG9s
ZGVyICsgJyIgJyArIHRoaXMucmFuZ2UudG9TdHJpbmcoKTsKKyAgICB9OworCisgICAgdGhpcy5z
ZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lKSB7CisgICAgICAgIHRoaXMuZm9sZExpbmUg
PSBmb2xkTGluZTsKKyAgICAgICAgdGhpcy5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQp
IHsKKyAgICAgICAgICAgIGZvbGQuc2V0Rm9sZExpbmUoZm9sZExpbmUpOworICAgICAgICB9KTsK
KyAgICB9OworCisgICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFu
Z2UgPSB0aGlzLnJhbmdlLmNsb25lKCk7CisgICAgICAgIHZhciBmb2xkID0gbmV3IEZvbGQocmFu
Z2UsIHRoaXMucGxhY2Vob2xkZXIpOworICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVu
Y3Rpb24oc3ViRm9sZCkgeworICAgICAgICAgICAgZm9sZC5zdWJGb2xkcy5wdXNoKHN1YkZvbGQu
Y2xvbmUoKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gZm9sZDsKKyAgICB9OworCisg
ICAgdGhpcy5hZGRTdWJGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAgICBpZiAodGhpcy5y
YW5nZS5pc0VxdWFsKGZvbGQpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAg
aWYgKCF0aGlzLnJhbmdlLmNvbnRhaW5zUmFuZ2UoZm9sZCkpCisgICAgICAgICAgICB0aHJvdyAi
QSBmb2xkIGNhbid0IGludGVyc2VjdCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9sZC5yYW5n
ZSArIHRoaXMucmFuZ2U7CisKKyAgICAgICAgdmFyIHJvdyA9IGZvbGQucmFuZ2Uuc3RhcnQucm93
LCBjb2x1bW4gPSBmb2xkLnJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGNtcCA9IC0xOyBpIDwgdGhpcy5zdWJGb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgY21wID0gdGhpcy5zdWJGb2xkc1tpXS5yYW5nZS5jb21wYXJlKHJvdywgY29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChjbXAgIT0gMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB2YXIgYWZ0ZXJTdGFydCA9IHRoaXMuc3ViRm9sZHNbaV07CisKKyAgICAgICAg
aWYgKGNtcCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIGFmdGVyU3RhcnQuYWRkU3ViRm9sZChm
b2xkKTsKKyAgICAgICAgdmFyIHJvdyA9IGZvbGQucmFuZ2UuZW5kLnJvdywgY29sdW1uID0gZm9s
ZC5yYW5nZS5lbmQuY29sdW1uOworICAgICAgICBmb3IgKHZhciBqID0gaSwgY21wID0gLTE7IGog
PCB0aGlzLnN1YkZvbGRzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBjbXAgPSB0aGlzLnN1
YkZvbGRzW2pdLnJhbmdlLmNvbXBhcmUocm93LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKGNt
cCAhPSAxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciBh
ZnRlckVuZCA9IHRoaXMuc3ViRm9sZHNbal07CisKKyAgICAgICAgaWYgKGNtcCA9PSAwKQorICAg
ICAgICAgICAgdGhyb3cgIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBm
b2xkIiArIGZvbGQucmFuZ2UgKyB0aGlzLnJhbmdlOworCisgICAgICAgIHZhciBjb25zdW1lZEZv
bGRzID0gdGhpcy5zdWJGb2xkcy5zcGxpY2UoaSwgaiAtIGksIGZvbGQpOworICAgICAgICBmb2xk
LnNldEZvbGRMaW5lKHRoaXMuZm9sZExpbmUpOworCisgICAgICAgIHJldHVybiBmb2xkOworICAg
IH07CisKK30pLmNhbGwoRm9sZC5wcm90b3R5cGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNl
L3Rva2VuX2l0ZXJhdG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5j
dGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gZnVu
Y3Rpb24oc2Vzc2lvbiwgaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbikgeworICAgIHRoaXMuJHNl
c3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuJHJvdyA9IGluaXRpYWxSb3c7CisgICAgdGhpcy4k
cm93VG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoaW5pdGlhbFJvdyk7CisKKyAgICB2YXIgdG9r
ZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbik7CisgICAg
dGhpcy4kdG9rZW5JbmRleCA9IHRva2VuID8gdG9rZW4uaW5kZXggOiAtMTsKK307CisKKyhmdW5j
dGlvbigpIHsgCisgICAgdGhpcy5zdGVwQmFja3dhcmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kdG9rZW5JbmRleCAtPSAxOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRoaXMuJHRv
a2VuSW5kZXggPCAwKSB7CisgICAgICAgICAgICB0aGlzLiRyb3cgLT0gMTsKKyAgICAgICAgICAg
IGlmICh0aGlzLiRyb3cgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kcm93ID0gMDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5z
KHRoaXMuJHJvdyk7CisgICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gdGhpcy4kcm93VG9r
ZW5zLmxlbmd0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4g
dGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdOworICAgIH07ICAgCisgICAgdGhpcy5z
dGVwRm9yd2FyZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93Q291bnQgPSB0aGlzLiRz
ZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICB0aGlzLiR0b2tlbkluZGV4ICs9IDE7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAodGhpcy4kdG9rZW5JbmRleCA+PSB0aGlzLiRyb3dUb2tlbnMu
bGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLiRyb3cgKz0gMTsKKyAgICAgICAgICAgIGlmICh0
aGlzLiRyb3cgPj0gcm93Q291bnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRyb3cgPSByb3dD
b3VudCAtIDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRo
aXMuJHJvdyk7CisgICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gMDsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5J
bmRleF07CisgICAgfTsgICAgICAKKyAgICB0aGlzLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsK
KyAgICB9OyAgICAgIAorICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuUm93ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy4kcm93OworICAgIH07ICAgICAKKyAgICB0aGlzLmdldEN1
cnJlbnRUb2tlbkNvbHVtbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93VG9rZW5zID0g
dGhpcy4kcm93VG9rZW5zOworICAgICAgICB2YXIgdG9rZW5JbmRleCA9IHRoaXMuJHRva2VuSW5k
ZXg7CisgICAgICAgIHZhciBjb2x1bW4gPSByb3dUb2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7Cisg
ICAgICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBjb2x1
bW47CisgICAgICAgICAgICAKKyAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgd2hpbGUgKHRv
a2VuSW5kZXggPiAwKSB7CisgICAgICAgICAgICB0b2tlbkluZGV4IC09IDE7CisgICAgICAgICAg
ICBjb2x1bW4gKz0gcm93VG9rZW5zW3Rva2VuSW5kZXhdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvbHVtbjsgIAorICAgIH07CisgICAgICAgICAg
ICAKK30pLmNhbGwoVG9rZW5JdGVyYXRvci5wcm90b3R5cGUpOworCitleHBvcnRzLlRva2VuSXRl
cmF0b3IgPSBUb2tlbkl0ZXJhdG9yOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Np
b24vYnJhY2tldF9tYXRjaCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L3Rva2VuX2l0ZXJhdG9yJywgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0
ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIiku
UmFuZ2U7CisKKworZnVuY3Rpb24gQnJhY2tldE1hdGNoKCkgeworCisgICAgdGhpcy5maW5kTWF0
Y2hpbmdCcmFja2V0ID0gZnVuY3Rpb24ocG9zaXRpb24sIGNoYXIpIHsKKyAgICAgICAgaWYgKHBv
c2l0aW9uLmNvbHVtbiA9PSAwKSByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgY2hhckJlZm9y
ZUN1cnNvciA9IGNoYXIgfHwgdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykuY2hhckF0KHBvc2l0
aW9uLmNvbHVtbi0xKTsKKyAgICAgICAgaWYgKGNoYXJCZWZvcmVDdXJzb3IgPT0gIiIpIHJldHVy
biBudWxsOworCisgICAgICAgIHZhciBtYXRjaCA9IGNoYXJCZWZvcmVDdXJzb3IubWF0Y2goLyhb
XChcW1x7XSl8KFtcKVxdXH1dKS8pOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zaXRpb24pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJd
LCBwb3NpdGlvbik7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmdldEJyYWNrZXRSYW5nZSA9IGZ1
bmN0aW9uKHBvcykgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShwb3Mucm93KTsK
KyAgICAgICAgdmFyIGJlZm9yZSA9IHRydWUsIHJhbmdlOworCisgICAgICAgIHZhciBjaHIgPSBs
aW5lLmNoYXJBdChwb3MuY29sdW1uLTEpOworICAgICAgICB2YXIgbWF0Y2ggPSBjaHIgJiYgY2hy
Lm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKTsKKyAgICAgICAgaWYgKCFtYXRjaCkgewor
ICAgICAgICAgICAgY2hyID0gbGluZS5jaGFyQXQocG9zLmNvbHVtbik7CisgICAgICAgICAgICBw
b3MgPSB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW4gKyAxfTsKKyAgICAgICAgICAg
IG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7CisgICAg
ICAgICAgICBiZWZvcmUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1hdGNoKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKG1hdGNoWzFdKSB7CisgICAg
ICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsx
XSwgcG9zKTsKKyAgICAgICAgICAgIGlmICghYnJhY2tldFBvcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhwb3MsIGJy
YWNrZXRQb3MpOworICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHsKKyAgICAgICAgICAgICAgICBy
YW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRP
cGVuaW5nQnJhY2tldChtYXRjaFsyXSwgcG9zKTsKKyAgICAgICAgICAgIGlmICghYnJhY2tldFBv
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJhbmdlID0gUmFu
Z2UuZnJvbVBvaW50cyhicmFja2V0UG9zLCBwb3MpOworICAgICAgICAgICAgaWYgKCFiZWZvcmUp
IHsKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmQuY29sdW1uLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYW5nZS5j
dXJzb3IgPSByYW5nZS5zdGFydDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHJhbmdlOworICAgIH07CisKKyAgICB0aGlzLiRicmFja2V0cyA9IHsKKyAgICAgICAgIikiOiAi
KCIsCisgICAgICAgICIoIjogIikiLAorICAgICAgICAiXSI6ICJbIiwKKyAgICAgICAgIlsiOiAi
XSIsCisgICAgICAgICJ7IjogIn0iLAorICAgICAgICAifSI6ICJ7IgorICAgIH07CisKKyAgICB0
aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0LCBwb3NpdGlvbiwgdHlw
ZVJlKSB7CisgICAgICAgIHZhciBvcGVuQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2JyYWNrZXRd
OworICAgICAgICB2YXIgZGVwdGggPSAxOworCisgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBU
b2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKKyAgICAg
ICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgIGlmICgh
dG9rZW4pCisgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAg
ICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAg
aWYgKCF0eXBlUmUpeworICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cCgKKyAgICAgICAg
ICAgICAgICAiKFxcLj8iICsKKyAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxhY2UoIi4i
LCAiXFwuIikucmVwbGFjZSgicnBhcmVuIiwgIi5wYXJlbiIpCisgICAgICAgICAgICAgICAgKyAi
KSsiCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHZhciB2YWx1ZUluZGV4ID0g
cG9zaXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgLSAyOwor
ICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHZhbHVlSW5kZXggPj0gMCkg
eworICAgICAgICAgICAgICAgIHZhciBjaHIgPSB2YWx1ZS5jaGFyQXQodmFsdWVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGNociA9PSBvcGVuQnJhY2tldCkgeworICAgICAgICAgICAgICAg
ICAgICBkZXB0aCAtPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRU
b2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdmFsdWVJbmRl
eCArIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaHIgPT0g
YnJhY2tldCkgeworICAgICAgICAgICAgICAgICAgICBkZXB0aCArPSAxOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZUluZGV4IC09IDE7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFj
a3dhcmQoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVzdCh0b2tl
bi50eXBlKSk7CisKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52
YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlSW5kZXggPSB2YWx1ZS5sZW5ndGggLSAxOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy4k
ZmluZENsb3NpbmdCcmFja2V0ID0gZnVuY3Rpb24oYnJhY2tldCwgcG9zaXRpb24sIHR5cGVSZSkg
eworICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXQgPSB0aGlzLiRicmFja2V0c1ticmFja2V0XTsK
KyAgICAgICAgdmFyIGRlcHRoID0gMTsKKworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9r
ZW5JdGVyYXRvcih0aGlzLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CisgICAgICAg
IHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICBpZiAoIXRv
a2VuKQorICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAg
ICBpZiAoIXRva2VuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghdHlwZVJl
KXsKKyAgICAgICAgICAgIHR5cGVSZSA9IG5ldyBSZWdFeHAoCisgICAgICAgICAgICAgICAgIihc
XC4/IiArCisgICAgICAgICAgICAgICAgdG9rZW4udHlwZS5yZXBsYWNlKCIuIiwgIlxcLiIpLnJl
cGxhY2UoImxwYXJlbiIsICIucGFyZW4iKQorICAgICAgICAgICAgICAgICsgIikrIgorICAgICAg
ICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0aW9uLmNv
bHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOworCisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAgICAg
ICAgICAgdmFyIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUg
KHZhbHVlSW5kZXggPCB2YWx1ZUxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciBjaHIgPSB2
YWx1ZS5jaGFyQXQodmFsdWVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGNociA9PSBjbG9z
aW5nQnJhY2tldCkgeworICAgICAgICAgICAgICAgICAgICBkZXB0aCAtPSAxOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHtyb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbjogdmFsdWVJbmRleCArIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tl
bkNvbHVtbigpfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjaHIgPT0gYnJhY2tldCkgeworICAgICAgICAgICAgICAg
ICAgICBkZXB0aCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1
ZUluZGV4ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICAgICAgfSB3aGls
ZSAodG9rZW4gJiYgIXR5cGVSZS50ZXN0KHRva2VuLnR5cGUpKTsKKworICAgICAgICAgICAgaWYg
KHRva2VuID09IG51bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHZh
bHVlSW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworfQorZXhwb3J0cy5CcmFja2V0TWF0Y2ggPSBCcmFja2V0TWF0Y2g7CisKK30pOwor
CithY2UuZGVmaW5lKCdhY2Uvc2VhcmNoJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9s
aWIvbGFuZyIpOwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIFJhbmdlID0g
cmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOworCit2YXIgU2VhcmNoID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy4kb3B0aW9ucyA9IHt9OworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2V0
ID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICBvb3AubWl4aW4odGhpcy4kb3B0aW9ucywg
b3B0aW9ucyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgdGhpcy5nZXRPcHRp
b25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBsYW5nLmNvcHlPYmplY3QodGhpcy4k
b3B0aW9ucyk7CisgICAgfTsKKyAgICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25z
KSB7CisgICAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zOworICAgIH07CisgICAgdGhpcy5m
aW5kID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLiRt
YXRjaEl0ZXJhdG9yKHNlc3Npb24sIHRoaXMuJG9wdGlvbnMpOworCisgICAgICAgIGlmICghaXRl
cmF0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGZpcnN0UmFu
Z2UgPSBudWxsOworICAgICAgICBpdGVyYXRvci5mb3JFYWNoKGZ1bmN0aW9uKHJhbmdlLCByb3cs
IG9mZnNldCkgeworICAgICAgICAgICAgaWYgKCFyYW5nZS5zdGFydCkgeworICAgICAgICAgICAg
ICAgIHZhciBjb2x1bW4gPSByYW5nZS5vZmZzZXQgKyAob2Zmc2V0IHx8IDApOworICAgICAgICAg
ICAgICAgIGZpcnN0UmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4sIHJvdywgY29sdW1uK3Jh
bmdlLmxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmaXJzdFJh
bmdlID0gcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgcmV0dXJuIGZpcnN0UmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLmZpbmRBbGwgPSBmdW5j
dGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9uczsKKyAg
ICAgICAgaWYgKCFvcHRpb25zLm5lZWRsZSkKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAg
ICAgdGhpcy4kYXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7CisKKyAgICAgICAgdmFyIHJhbmdlID0g
b3B0aW9ucy5yYW5nZTsKKyAgICAgICAgdmFyIGxpbmVzID0gcmFuZ2UKKyAgICAgICAgICAgID8g
c2Vzc2lvbi5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cpCisgICAgICAg
ICAgICA6IHNlc3Npb24uZG9jLmdldEFsbExpbmVzKCk7CisKKyAgICAgICAgdmFyIHJhbmdlcyA9
IFtdOworICAgICAgICB2YXIgcmUgPSBvcHRpb25zLnJlOworICAgICAgICBpZiAob3B0aW9ucy4k
aXNNdWx0aUxpbmUpIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSByZS5sZW5ndGg7CisgICAgICAg
ICAgICB2YXIgbWF4Um93ID0gbGluZXMubGVuZ3RoIC0gbGVuOworICAgICAgICAgICAgZm9yICh2
YXIgcm93ID0gcmUub2Zmc2V0IHx8IDA7IHJvdyA8PSBtYXhSb3c7IHJvdysrKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpbmVzW3JvdyArIGpdLnNlYXJjaChyZVtqXSkgPT0gLTEpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2YXIg
c3RhcnRMaW5lID0gbGluZXNbcm93XTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVz
W3JvdyArIGxlbiAtIDFdOworICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gc3RhcnRM
aW5lLm1hdGNoKHJlWzBdKVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4
ID0gbGluZS5tYXRjaChyZVtsZW4gLSAxXSlbMF0ubGVuZ3RoOworCisgICAgICAgICAgICAgICAg
cmFuZ2VzLnB1c2gobmV3IFJhbmdlKAorICAgICAgICAgICAgICAgICAgICByb3csIHN0YXJ0TGlu
ZS5sZW5ndGggLSBzdGFydEluZGV4LAorICAgICAgICAgICAgICAgICAgICByb3cgKyBsZW4gLSAx
LCBlbmRJbmRleAorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMo
bGluZXNbaV0sIHJlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hdGNo
ZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hl
c1tqXTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGksIG1hdGNo
Lm9mZnNldCwgaSwgbWF0Y2gub2Zmc2V0ICsgbWF0Y2gubGVuZ3RoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdlKSB7Cisg
ICAgICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAg
ICAgICB2YXIgZW5kQ29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgdmFy
IGkgPSAwLCBqID0gcmFuZ2VzLmxlbmd0aCAtIDE7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGog
JiYgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbiA8IHN0YXJ0Q29sdW1uICYmIHJhbmdlc1tpXS5zdGFy
dC5yb3cgPT0gcmFuZ2Uuc3RhcnQucm93KQorICAgICAgICAgICAgICAgIGkrKzsKKworICAgICAg
ICAgICAgd2hpbGUgKGkgPCBqICYmIHJhbmdlc1tqXS5lbmQuY29sdW1uID4gZW5kQ29sdW1uICYm
IHJhbmdlc1tqXS5lbmQucm93ID09IHJhbmdlLmVuZC5yb3cpCisgICAgICAgICAgICAgICAgai0t
OworICAgICAgICAgICAgcmV0dXJuIHJhbmdlcy5zbGljZShpLCBqICsgMSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmFuZ2VzOworICAgIH07CisgICAgdGhpcy5yZXBsYWNlID0gZnVu
Y3Rpb24oaW5wdXQsIHJlcGxhY2VtZW50KSB7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4k
b3B0aW9uczsKKworICAgICAgICB2YXIgcmUgPSB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25z
KTsKKyAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKQorICAgICAgICAgICAgcmV0dXJu
IHJlcGxhY2VtZW50OworCisgICAgICAgIGlmICghcmUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIG1hdGNoID0gcmUuZXhlYyhpbnB1dCk7CisgICAgICAgIGlmICghbWF0Y2gg
fHwgbWF0Y2hbMF0ubGVuZ3RoICE9IGlucHV0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAKKyAgICAgICAgcmVwbGFjZW1lbnQgPSBpbnB1dC5yZXBsYWNlKHJlLCBy
ZXBsYWNlbWVudCk7CisgICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkgeworICAgICAg
ICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5zcGxpdCgiIik7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBpbnB1dC5sZW5ndGgpOyBpLS07ICkg
eworICAgICAgICAgICAgICAgIHZhciBjaCA9IGlucHV0W2ldOworICAgICAgICAgICAgICAgIGlm
IChjaCAmJiBjaC50b0xvd2VyQ2FzZSgpICE9IGNoKQorICAgICAgICAgICAgICAgICAgICByZXBs
YWNlbWVudFtpXSA9IHJlcGxhY2VtZW50W2ldLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHJlcGxhY2VtZW50
W2ldLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBsYWNlbWVu
dCA9IHJlcGxhY2VtZW50LmpvaW4oIiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgfTsKKworICAgIHRoaXMuJG1hdGNoSXRlcmF0b3IgPSBm
dW5jdGlvbihzZXNzaW9uLCBvcHRpb25zKSB7CisgICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2Vt
YmxlUmVnRXhwKG9wdGlvbnMpOworICAgICAgICBpZiAoIXJlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHZhciBzZWxmID0gdGhpcywgY2FsbGJhY2ssIGJhY2t3YXJkcyA9
IG9wdGlvbnMuYmFja3dhcmRzOworCisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkg
eworICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBtYXRj
aEl0ZXJhdG9yID0gZnVuY3Rpb24obGluZSwgcm93LCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3RhcnRJbmRleCA9IGxpbmUuc2VhcmNoKHJlWzBdKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhcnRJbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyBpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpbmUuc2VhcmNoKHJlW2ldKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgZW5kSW5k
ZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7CisKKyAgICAgICAgICAgICAg
ICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBzdGFydEluZGV4LCByb3cgKyBsZW4gLSAxLCBl
bmRJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlLm9mZnNldCA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdy0tOworICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zdGFydC5jb2x1bW4gPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gKz0g
b2Zmc2V0OworCisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHJhbmdlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9IGVsc2Ug
aWYgKGJhY2t3YXJkcykgeworICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlv
bihsaW5lLCByb3csIHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9
IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKGxpbmUsIHJlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gbWF0Y2hlcy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICAgICAgICAg
IGlmIChjYWxsYmFjayhtYXRjaGVzW2ldLCByb3csIHN0YXJ0SW5kZXgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlvbihsaW5lLCByb3csIHN0
YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxhbmcuZ2V0TWF0Y2hP
ZmZzZXRzKGxpbmUsIHJlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1h
dGNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhtYXRj
aGVzW2ldLCByb3csIHN0YXJ0SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKF9jYWxsYmFjaykgeworICAgICAgICAgICAgICAg
IGNhbGxiYWNrID0gX2NhbGxiYWNrOworICAgICAgICAgICAgICAgIHNlbGYuJGxpbmVJdGVyYXRv
cihzZXNzaW9uLCBvcHRpb25zKS5mb3JFYWNoKG1hdGNoSXRlcmF0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cCA9IGZ1bmN0
aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMubmVlZGxlIGluc3RhbmNlb2YgUmVn
RXhwKQorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSBvcHRpb25zLm5lZWRsZTsKKwor
ICAgICAgICB2YXIgbmVlZGxlID0gb3B0aW9ucy5uZWVkbGU7CisKKyAgICAgICAgaWYgKCFvcHRp
b25zLm5lZWRsZSkKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCFvcHRpb25zLnJlZ0V4cCkKKyAgICAgICAgICAgIG5lZWRsZSA9IGxhbmcuZXNj
YXBlUmVnRXhwKG5lZWRsZSk7CisKKyAgICAgICAgaWYgKG9wdGlvbnMud2hvbGVXb3JkKQorICAg
ICAgICAgICAgbmVlZGxlID0gIlxcYiIgKyBuZWVkbGUgKyAiXFxiIjsKKworICAgICAgICB2YXIg
bW9kaWZpZXIgPSBvcHRpb25zLmNhc2VTZW5zaXRpdmUgPyAiZyIgOiAiZ2kiOworCisgICAgICAg
IG9wdGlvbnMuJGlzTXVsdGlMaW5lID0gL1tcblxyXS8udGVzdChuZWVkbGUpOworICAgICAgICBp
ZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpCisgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9
IHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpOworCisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKG5lZWRsZSwgbW9kaWZp
ZXIpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHJlID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSByZTsKKyAgICB9OworCisgICAgdGhp
cy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAgPSBmdW5jdGlvbihuZWVkbGUsIG1vZGlmaWVyKSB7
CisgICAgICAgIHZhciBwYXJ0cyA9IG5lZWRsZS5yZXBsYWNlKC9cclxufFxyfFxuL2csICIkXG5e
Iikuc3BsaXQoIlxuIik7CisgICAgICAgIHZhciByZSA9IFtdOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB0cnkgeworICAgICAgICAgICAgcmUucHVzaChu
ZXcgUmVnRXhwKHBhcnRzW2ldLCBtb2RpZmllcikpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydHNbMF0g
PT0gIiIpIHsKKyAgICAgICAgICAgIHJlLnNoaWZ0KCk7CisgICAgICAgICAgICByZS5vZmZzZXQg
PSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmUub2Zmc2V0ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmU7CisgICAgfTsKKworICAgIHRoaXMuJGxpbmVJdGVyYXRv
ciA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGJhY2t3YXJkcyA9
IG9wdGlvbnMuYmFja3dhcmRzID09IHRydWU7CisgICAgICAgIHZhciBza2lwQ3VycmVudCA9IG9w
dGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2U7CisKKyAgICAgICAgdmFyIHJhbmdlID0gb3B0aW9u
cy5yYW5nZTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gb3B0aW9ucy5zdGFydDsKKyAgICAgICAgaWYg
KCFzdGFydCkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2UgPyByYW5nZVtiYWNrd2FyZHMgPyAi
ZW5kIiA6ICJzdGFydCJdIDogc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICAgICAg
IAorICAgICAgICBpZiAoc3RhcnQuc3RhcnQpCisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0W3Nr
aXBDdXJyZW50ICE9IGJhY2t3YXJkcyA/ICJlbmQiIDogInN0YXJ0Il07CisKKyAgICAgICAgdmFy
IGZpcnN0Um93ID0gcmFuZ2UgPyByYW5nZS5zdGFydC5yb3cgOiAwOworICAgICAgICB2YXIgbGFz
dFJvdyA9IHJhbmdlID8gcmFuZ2UuZW5kLnJvdyA6IHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxOwor
CisgICAgICAgIHZhciBmb3JFYWNoID0gYmFja3dhcmRzID8gZnVuY3Rpb24oY2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3RhcnQucm93OworCisgICAgICAgICAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgc3RhcnQuY29sdW1u
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGluZSwgcm93KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChyb3ctLTsgcm93ID49IGZp
cnN0Um93OyByb3ctLSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNlc3Npb24u
Z2V0TGluZShyb3cpLCByb3cpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud3JhcCA9PSBmYWxzZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChyb3cgPSBsYXN0Um93LCBmaXJz
dFJvdyA9IHN0YXJ0LnJvdzsgcm93ID49IGZpcnN0Um93OyByb3ctLSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxiYWNrKHNlc3Npb24uZ2V0TGluZShyb3cpLCByb3cpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKGNhbGxiYWNr
KSB7CisgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHN0YXJ0LnJvdzsKKworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vic3RyKHN0YXJ0LmNvbHVtbik7
CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGxpbmUsIHJvdywgc3RhcnQuY29sdW1uKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChyb3cg
PSByb3crMTsgcm93IDw9IGxhc3RSb3c7IHJvdysrKQorICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09IGZhbHNl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBmb3IgKHJv
dyA9IGZpcnN0Um93LCBsYXN0Um93ID0gc3RhcnQucm93OyByb3cgPD0gbGFzdFJvdzsgcm93Kysp
CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUocm93KSwg
cm93KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4ge2ZvckVhY2g6IGZvckVhY2h9OworICAgIH07CisKK30p
LmNhbGwoU2VhcmNoLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuU2VhcmNoID0gU2VhcmNoOworfSk7
CithY2UuZGVmaW5lKCdhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyJywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uva2V5Ym9hcmQvaGFzaF9o
YW5kbGVyJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFy
IEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhh
bmRsZXI7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIi
KS5FdmVudEVtaXR0ZXI7CisKK3ZhciBDb21tYW5kTWFuYWdlciA9IGZ1bmN0aW9uKHBsYXRmb3Jt
LCBjb21tYW5kcykgeworICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKKyAgICB0aGlzLmNv
bW1hbmRzID0gdGhpcy5ieU5hbWUgPSB7fTsKKyAgICB0aGlzLmNvbW1tYW5kS2V5QmluZGluZyA9
IHt9OworCisgICAgdGhpcy5hZGRDb21tYW5kcyhjb21tYW5kcyk7CisgICAgCisgICAgdGhpcy5z
ZXREZWZhdWx0SGFuZGxlcigiZXhlYyIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0dXJuIGUu
Y29tbWFuZC5leGVjKGUuZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAgIH0pOworfTsKKworb29w
LmluaGVyaXRzKENvbW1hbmRNYW5hZ2VyLCBIYXNoSGFuZGxlcik7CisKKyhmdW5jdGlvbigpIHsK
KworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKworICAgIHRoaXMuZXhl
YyA9IGZ1bmN0aW9uKGNvbW1hbmQsIGVkaXRvciwgYXJncykgeworICAgICAgICBpZiAodHlwZW9m
IGNvbW1hbmQgPT09ICdzdHJpbmcnKQorICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFu
ZHNbY29tbWFuZF07CisKKyAgICAgICAgaWYgKCFjb21tYW5kKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLiRyZWFkT25seSAmJiAhY29t
bWFuZC5yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIg
cmV0dmFsdWUgPSB0aGlzLl9lbWl0KCJleGVjIiwgeworICAgICAgICAgICAgZWRpdG9yOiBlZGl0
b3IsCisgICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLAorICAgICAgICAgICAgYXJnczogYXJn
cworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmV0dmFsdWUgPT09IGZhbHNlID8gZmFs
c2UgOiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLnRvZ2dsZVJlY29yZGluZyA9IGZ1bmN0aW9u
KGVkaXRvcikgeworICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgZWRpdG9yICYmIGVkaXRvci5fZW1pdCgiY2hhbmdlU3RhdHVzIik7Cisg
ICAgICAgIGlmICh0aGlzLnJlY29yZGluZykgeworICAgICAgICAgICAgdGhpcy5tYWNyby5wb3Ao
KTsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXhlYyIsIHRoaXMuJGFk
ZENvbW1hbmRUb01hY3JvKTsKKworICAgICAgICAgICAgaWYgKCF0aGlzLm1hY3JvLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICB0aGlzLm1hY3JvID0gdGhpcy5vbGRNYWNybzsKKworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCF0aGlzLiRhZGRDb21tYW5kVG9NYWNybykgeworICAgICAgICAgICAgdGhpcy4kYWRkQ29tbWFu
ZFRvTWFjcm8gPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYWNyby5wdXNo
KFtlLmNvbW1hbmQsIGUuYXJnc10pOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5vbGRNYWNybyA9IHRoaXMubWFjcm87CisgICAgICAgIHRoaXMu
bWFjcm8gPSBbXTsKKyAgICAgICAgdGhpcy5vbigiZXhlYyIsIHRoaXMuJGFkZENvbW1hbmRUb01h
Y3JvKTsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gdHJ1ZTsKKyAgICB9OworCisg
ICAgdGhpcy5yZXBsYXkgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgaWYgKHRoaXMuJGlu
UmVwbGF5IHx8ICF0aGlzLm1hY3JvKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICh0aGlzLnJlY29yZGluZykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGlu
ZyhlZGl0b3IpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9
IHRydWU7CisgICAgICAgICAgICB0aGlzLm1hY3JvLmZvckVhY2goZnVuY3Rpb24oeCkgeworICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5leGVjKHgsIGVkaXRvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB0aGlzLmV4ZWMoeFswXSwgZWRpdG9yLCB4WzFdKTsKKyAgICAgICAgICAgIH0s
IHRoaXMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdGhpcy4kaW5SZXBsYXkg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnRyaW1NYWNybyA9IGZ1bmN0
aW9uKG0pIHsKKyAgICAgICAgcmV0dXJuIG0ubWFwKGZ1bmN0aW9uKHgpeworICAgICAgICAgICAg
aWYgKHR5cGVvZiB4WzBdICE9ICJzdHJpbmciKQorICAgICAgICAgICAgICAgIHhbMF0gPSB4WzBd
Lm5hbWU7CisgICAgICAgICAgICBpZiAoIXhbMV0pCisgICAgICAgICAgICAgICAgeCA9IHhbMF07
CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfSk7CisgICAgfTsKKworfSkuY2FsbChD
b21tYW5kTWFuYWdlci5wcm90b3R5cGUpOworCitleHBvcnRzLkNvbW1hbmRNYW5hZ2VyID0gQ29t
bWFuZE1hbmFnZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5k
bGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2tleXMnXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGtleVV0aWwgID0g
cmVxdWlyZSgiLi4vbGliL2tleXMiKTsKKworZnVuY3Rpb24gSGFzaEhhbmRsZXIoY29uZmlnLCBw
bGF0Zm9ybSkgeworICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKKyAgICB0aGlzLmNvbW1h
bmRzID0ge307CisgICAgdGhpcy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsKKworICAgIHRoaXMu
YWRkQ29tbWFuZHMoY29uZmlnKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuYWRk
Q29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKKyAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNb
Y29tbWFuZC5uYW1lXSkKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWFuZChjb21tYW5kKTsK
KworICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmQubmFtZV0gPSBjb21tYW5kOworCisgICAg
ICAgIGlmIChjb21tYW5kLmJpbmRLZXkpCisgICAgICAgICAgICB0aGlzLl9idWlsZEtleUhhc2go
Y29tbWFuZCk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlQ29tbWFuZCA9IGZ1bmN0aW9uKGNv
bW1hbmQpIHsKKyAgICAgICAgdmFyIG5hbWUgPSAodHlwZW9mIGNvbW1hbmQgPT09ICdzdHJpbmcn
ID8gY29tbWFuZCA6IGNvbW1hbmQubmFtZSk7CisgICAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1h
bmRzW25hbWVdOworICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1lXTsKKyAgICAgICAg
dmFyIGNrYiA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOworICAgICAgICBmb3IgKHZhciBoYXNo
SWQgaW4gY2tiKSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY2tiW2hhc2hJZF0pIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2tiW2hhc2hJZF1ba2V5XSA9PSBjb21tYW5kKQorICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgY2tiW2hhc2hJZF1ba2V5XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmJpbmRLZXkgPSBmdW5jdGlvbihrZXksIGNvbW1h
bmQpIHsKKyAgICAgICAgaWYoIWtleSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KHR5cGVvZiBjb21tYW5kID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkQ29t
bWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBrZXl9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBja2IgPSB0aGlzLmNvbW1tYW5k
S2V5QmluZGluZzsKKyAgICAgICAga2V5LnNwbGl0KCJ8IikuZm9yRWFjaChmdW5jdGlvbihrZXlQ
YXJ0KSB7CisgICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VLZXlzKGtleVBhcnQs
IGNvbW1hbmQpOworICAgICAgICAgICAgdmFyIGhhc2hJZCA9IGJpbmRpbmcuaGFzaElkOworICAg
ICAgICAgICAgKGNrYltoYXNoSWRdIHx8IChja2JbaGFzaElkXSA9IHt9KSlbYmluZGluZy5rZXld
ID0gY29tbWFuZDsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMuYWRkQ29t
bWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgeworICAgICAgICBjb21tYW5kcyAmJiBPYmplY3Qu
a2V5cyhjb21tYW5kcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgICAgICB2YXIg
Y29tbWFuZCA9IGNvbW1hbmRzW25hbWVdOworICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5k
ID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5kS2V5KGNvbW1h
bmQsIG5hbWUpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJmdW5jdGlv
biIpCisgICAgICAgICAgICAgICAgY29tbWFuZCA9IHsgZXhlYzogY29tbWFuZCB9OworCisgICAg
ICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSkKKyAgICAgICAgICAgICAgICBjb21tYW5kLm5hbWUg
PSBuYW1lOworCisgICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZCk7CisgICAgICAg
IH0sIHRoaXMpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92ZUNvbW1hbmRzID0gZnVuY3Rpb24o
Y29tbWFuZHMpIHsKKyAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2goZnVuY3Rp
b24obmFtZSkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmRzW25hbWVd
KTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMuYmluZEtleXMgPSBmdW5j
dGlvbihrZXlMaXN0KSB7CisgICAgICAgIE9iamVjdC5rZXlzKGtleUxpc3QpLmZvckVhY2goZnVu
Y3Rpb24oa2V5KSB7CisgICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBrZXlMaXN0W2tleV0p
OworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgICAgdGhpcy5fYnVpbGRLZXlIYXNoID0g
ZnVuY3Rpb24oY29tbWFuZCkgeworICAgICAgICB2YXIgYmluZGluZyA9IGNvbW1hbmQuYmluZEtl
eTsKKyAgICAgICAgaWYgKCFiaW5kaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZhciBrZXkgPSB0eXBlb2YgYmluZGluZyA9PSAic3RyaW5nIiA/IGJpbmRpbmc6IGJpbmRpbmdb
dGhpcy5wbGF0Zm9ybV07CisgICAgICAgIHRoaXMuYmluZEtleShrZXksIGNvbW1hbmQpOworICAg
IH07CisgICAgdGhpcy5wYXJzZUtleXMgPSBmdW5jdGlvbihrZXlzKSB7CisgICAgICAgIHZhciBw
YXJ0cyA9IGtleXMudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1wtXCtdKFtcLVwrXSk/LykuZmlsdGVy
KGZ1bmN0aW9uKHgpe3JldHVybiB4fSk7CisgICAgICAgIHZhciBrZXkgPSBwYXJ0cy5wb3AoKTsK
KworICAgICAgICB2YXIga2V5Q29kZSA9IGtleVV0aWxba2V5XTsKKyAgICAgICAgaWYgKGtleVV0
aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXSkKKyAgICAgICAgICAgIGtleSA9IGtleVV0aWwuRlVO
Q1RJT05fS0VZU1trZXlDb2RlXS50b0xvd2VyQ2FzZSgpOworICAgICAgICBlbHNlIGlmICghcGFy
dHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiAtMX07Cisg
ICAgICAgIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAxICYmIHBhcnRzWzBdID09ICJzaGlmdCIp
CisgICAgICAgICAgICByZXR1cm4ge2tleToga2V5LnRvVXBwZXJDYXNlKCksIGhhc2hJZDogLTF9
OworCisgICAgICAgIHZhciBoYXNoSWQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gcGFydHMu
bGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICB2YXIgbW9kaWZpZXIgPSBrZXlVdGlsLktFWV9N
T0RTW3BhcnRzW2ldXTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSBudWxsKQorICAgICAg
ICAgICAgICAgIHRocm93ICJpbnZhbGlkIG1vZGlmaWVyICIgKyBwYXJ0c1tpXSArICIgaW4gIiAr
IGtleXM7CisgICAgICAgICAgICBoYXNoSWQgfD0gbW9kaWZpZXI7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiBoYXNoSWR9OworICAgIH07CisKKyAgICB0aGlz
LmZpbmRLZXlDb21tYW5kID0gZnVuY3Rpb24gZmluZEtleUNvbW1hbmQoaGFzaElkLCBrZXlTdHJp
bmcpIHsKKyAgICAgICAgdmFyIGNrYnIgPSB0aGlzLmNvbW1tYW5kS2V5QmluZGluZzsKKyAgICAg
ICAgcmV0dXJuIGNrYnJbaGFzaElkXSAmJiBja2JyW2hhc2hJZF1ba2V5U3RyaW5nXTsKKyAgICB9
OworCisgICAgdGhpcy5oYW5kbGVLZXlib2FyZCA9IGZ1bmN0aW9uKGRhdGEsIGhhc2hJZCwga2V5
U3RyaW5nLCBrZXlDb2RlKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjb21tYW5k
OiB0aGlzLmZpbmRLZXlDb21tYW5kKGhhc2hJZCwga2V5U3RyaW5nKQorICAgICAgICB9OworICAg
IH07CisKK30pLmNhbGwoSGFzaEhhbmRsZXIucHJvdG90eXBlKQorCitleHBvcnRzLkhhc2hIYW5k
bGVyID0gSGFzaEhhbmRsZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2NvbW1hbmRzL2RlZmF1
bHRfY29tbWFuZHMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
bGFuZycsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBjb25maWcgPSBy
ZXF1aXJlKCIuLi9jb25maWciKTsKKworZnVuY3Rpb24gYmluZEtleSh3aW4sIG1hYykgeworICAg
IHJldHVybiB7CisgICAgICAgIHdpbjogd2luLAorICAgICAgICBtYWM6IG1hYworICAgIH07Cit9
CisKK2V4cG9ydHMuY29tbWFuZHMgPSBbeworICAgIG5hbWU6ICJzZWxlY3RhbGwiLAorICAgIGJp
bmRLZXk6IGJpbmRLZXkoIkN0cmwtQSIsICJDb21tYW5kLUEiKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdEFsbCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogImNlbnRlcnNlbGVjdGlvbiIsCisgICAgYmluZEtleTogYmluZEtleShu
dWxsLCAiQ3RybC1MIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jZW50
ZXJTZWxlY3Rpb24oKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJn
b3RvbGluZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1MIiwgIkNvbW1hbmQtTCIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICB2YXIgbGluZSA9IHBhcnNlSW50
KHByb21wdCgiRW50ZXIgbGluZSBudW1iZXI6IiksIDEwKTsKKyAgICAgICAgaWYgKCFpc05hTihs
aW5lKSkgeworICAgICAgICAgICAgZWRpdG9yLmdvdG9MaW5lKGxpbmUpOworICAgICAgICB9Cisg
ICAgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJmb2xkIiwKKyAgICBi
aW5kS2V5OiBiaW5kS2V5KCJBbHQtTHxDdHJsLUYxIiwgIkNvbW1hbmQtQWx0LUx8Q29tbWFuZC1G
MSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi50b2dnbGVG
b2xkKGZhbHNlKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJ1bmZv
bGQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1MfEN0cmwtU2hpZnQtRjEiLCAi
Q29tbWFuZC1BbHQtU2hpZnQtTHxDb21tYW5kLVNoaWZ0LUYxIiksCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQodHJ1ZSk7IH0sCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZm9sZGFsbCIsCisgICAgYmluZEtleTogYmlu
ZEtleSgiQWx0LTAiLCAiQ29tbWFuZC1PcHRpb24tMCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi5mb2xkQWxsKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUK
K30sIHsKKyAgICBuYW1lOiAidW5mb2xkYWxsIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQt
U2hpZnQtMCIsICJDb21tYW5kLU9wdGlvbi1TaGlmdC0wIiksCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnVuZm9sZCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVl
Cit9LCB7CisgICAgbmFtZTogImZpbmRuZXh0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LUsiLCAiQ29tbWFuZC1HIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5m
aW5kTmV4dCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImZpbmRw
cmV2aW91cyIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1LIiwgIkNvbW1hbmQt
U2hpZnQtRyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZFByZXZp
b3VzKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZmluZCIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1GIiwgIkNvbW1hbmQtRiIpLAorICAgIGV4ZWM6IGZ1
bmN0aW9uKGVkaXRvcikgeworICAgICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFy
Y2hib3giLCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yKX0pOworICAgIH0sCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAib3ZlcndyaXRlIiwKKyAgICBiaW5kS2V5OiAi
SW5zZXJ0IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZU92ZXJ3
cml0ZSgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHRv
c3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtSG9tZSIsICJDb21tYW5k
LVNoaWZ0LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxl
Y3Rpb24oKS5zZWxlY3RGaWxlU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZv
ckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9zdGFydCIs
CisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1Ib21lIiwgIkNvbW1hbmQtSG9tZXxDb21tYW5k
LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVT
dGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9u
bHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dXAiLAorICAgIGJpbmRLZXk6IGJpbmRL
ZXkoIlNoaWZ0LVVwIiwgIlNoaWZ0LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RVcCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ29s
aW5ldXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlVwIiwgIlVwfEN0cmwtUCIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVVcChhcmdzLnRpbWVz
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHRvZW5kIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLVNoaWZ0LUVuZCIsICJDb21tYW5kLVNoaWZ0LURvd24iKSwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVFbmQoKTsgfSwK
KyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogImdvdG9lbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRW5k
IiwgIkNvbW1hbmQtRW5kfENvbW1hbmQtRG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IubmF2aWdhdGVGaWxlRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3Rk
b3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1Eb3duIiwgIlNoaWZ0LURvd24iKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVj
dERvd24oKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRP
bmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvbGluZWRvd24iLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIkRvd24iLCAiRG93bnxDdHJsLU4iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Is
IGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlRG93bihhcmdzLnRpbWVzKTsgfSwKKyAgICBtdWx0aVNl
bGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFt
ZTogInNlbGVjdHdvcmRsZWZ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUxl
ZnQiLCAiT3B0aW9uLVNoaWZ0LUxlZnQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRMZWZ0KCk7IH0sCisgICAgbXVsdGlTZWxl
Y3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6
ICJnb3Rvd29yZGxlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtTGVmdCIsICJPcHRp
b24tTGVmdCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVX
b3JkTGVmdCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9saW5lc3RhcnQiLAorICAgIGJp
bmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1MZWZ0IiwgIkNvbW1hbmQtU2hpZnQtTGVmdCIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0
TGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICBy
ZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvbGluZXN0YXJ0IiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJBbHQtTGVmdHxIb21lIiwgIkNvbW1hbmQtTGVmdHxIb21lfEN0cmwtQSIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lU3RhcnQo
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdGxlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXko
IlNoaWZ0LUxlZnQiLCAiU2hpZnQtTGVmdCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGVmdCgpOyB9LAorICAgIG11bHRpU2VsZWN0
QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
Z290b2xlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkxlZnQiLCAiTGVmdHxDdHJsLUIiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlTGVmdChh
cmdzLnRpbWVzKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJl
YWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHdvcmRyaWdodCIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1SaWdodCIsICJPcHRpb24tU2hpZnQtUmlnaHQiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVj
dFdvcmRSaWdodCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAg
cmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3dvcmRyaWdodCIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1SaWdodCIsICJPcHRpb24tUmlnaHQiKSwKKyAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm5hdmlnYXRlV29yZFJpZ2h0KCk7IH0sCisgICAgbXVs
dGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJzZWxlY3R0b2xpbmVlbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlm
dC1SaWdodCIsICJDb21tYW5kLVNoaWZ0LVJpZ2h0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCisgICAgbXVs
dGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJnb3RvbGluZWVuZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVJpZ2h0fEVu
ZCIsICJDb21tYW5kLVJpZ2h0fEVuZHxDdHJsLUUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLm5hdmlnYXRlTGluZUVuZCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0
cmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LVJpZ2h0IiwgIlNoaWZ0LVJpZ2h0
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5z
ZWxlY3RSaWdodCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAg
cmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3JpZ2h0IiwKKyAgICBiaW5kS2V5
OiBiaW5kS2V5KCJSaWdodCIsICJSaWdodHxDdHJsLUYiKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlUmlnaHQoYXJncy50aW1lcyk7IH0sCisgICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgewor
ICAgIG5hbWU6ICJzZWxlY3RwYWdlZG93biIsCisgICAgYmluZEtleTogIlNoaWZ0LVBhZ2VEb3du
IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBhZ2VEb3duKCk7
IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAicGFnZWRvd24iLAorICAg
IGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgIk9wdGlvbi1QYWdlRG93biIpLAorICAgIGV4ZWM6IGZ1
bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZURvd24oKTsgfSwKKyAgICByZWFkT25s
eTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvcGFnZWRvd24iLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIlBhZ2VEb3duIiwgIlBhZ2VEb3dufEN0cmwtViIpLAorICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IuZ290b1BhZ2VEb3duKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUK
K30sIHsKKyAgICBuYW1lOiAic2VsZWN0cGFnZXVwIiwKKyAgICBiaW5kS2V5OiAiU2hpZnQtUGFn
ZVVwIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBhZ2VVcCgp
OyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInBhZ2V1cCIsCisgICAg
YmluZEtleTogYmluZEtleShudWxsLCAiT3B0aW9uLVBhZ2VVcCIpLAorICAgIGV4ZWM6IGZ1bmN0
aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZVVwKCk7IH0sCisgICAgcmVhZE9ubHk6IHRy
dWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3BhZ2V1cCIsCisgICAgYmluZEtleTogIlBhZ2VVcCIs
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nb3RvUGFnZVVwKCk7IH0sCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2Nyb2xsdXAiLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIkN0cmwtVXAiLCBudWxsKSwKKyAgICBleGVjOiBmdW5jdGlvbihlKSB7IGUu
cmVuZGVyZXIuc2Nyb2xsQnkoMCwgLTIgKiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWln
aHQpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNjcm9sbGRvd24i
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRG93biIsIG51bGwpLAorICAgIGV4ZWM6IGZ1
bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAyICogZS5yZW5kZXJlci5sYXllckNv
bmZpZy5saW5lSGVpZ2h0KTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6
ICJzZWxlY3RsaW5lc3RhcnQiLAorICAgIGJpbmRLZXk6ICJTaGlmdC1Ib21lIiwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVTdGFy
dCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0bGluZWVuZCIsCisgICAgYmluZEtleTogIlNo
aWZ0LUVuZCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rp
b24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNo
IiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJ0b2dnbGVyZWNvcmRpbmci
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQWx0LUUiLCAiQ29tbWFuZC1PcHRpb24tRSIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMudG9nZ2xlUmVj
b3JkaW5nKGVkaXRvcik7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
cmVwbGF5bWFjcm8iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRSIsICJDb21t
YW5kLVNoaWZ0LUUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbW1h
bmRzLnJlcGxheShlZGl0b3IpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFt
ZTogImp1bXB0b21hdGNoaW5nIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVAiLCAiQ3Ry
bC1TaGlmdC1QIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9N
YXRjaGluZygpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9tYXRjaGluZyIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1QIiwgbnVsbCksCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlKTsgfSwKKyAgICByZWFkT25seTog
dHJ1ZQorfSwgCit7CisgICAgbmFtZTogImN1dCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7CisgICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAg
ICAgICBlZGl0b3IuX2VtaXQoImN1dCIsIHJhbmdlKTsKKworICAgICAgICBpZiAoIWVkaXRvci5z
ZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmUo
cmFuZ2UpOworICAgICAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIH0K
KyAgICB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1l
OiAicmVtb3ZlbGluZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1EIiwgIkNvbW1hbmQt
RCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlTGluZXMoKTsg
fSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogImR1
cGxpY2F0ZVNlbGVjdGlvbiIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1EIiwg
IkNvbW1hbmQtU2hpZnQtRCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
ZHVwbGljYXRlU2VsZWN0aW9uKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNo
IgorfSwgeworICAgIG5hbWU6ICJzb3J0bGluZXMiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0
cmwtQWx0LVMiLCAiQ29tbWFuZC1BbHQtUyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3Iuc29ydExpbmVzKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNo
IgorfSwgeworICAgIG5hbWU6ICJ0b2dnbGVjb21tZW50IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLS8iLCAiQ29tbWFuZC0vIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci50b2dnbGVDb21tZW50TGluZXMoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZv
ckVhY2giCit9LCB7CisgICAgbmFtZTogIm1vZGlmeU51bWJlclVwIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLVNoaWZ0LVVwIiwgIkFsdC1TaGlmdC1VcCIpLAorICAgIGV4ZWM6IGZ1bmN0
aW9uKGVkaXRvcikgeyBlZGl0b3IubW9kaWZ5TnVtYmVyKDEpOyB9LAorICAgIG11bHRpU2VsZWN0
QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAibW9kaWZ5TnVtYmVyRG93biIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1Eb3duIiwgIkFsdC1TaGlmdC1Eb3duIiks
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIoLTEpOyB9
LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAicmVw
bGFjZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1IIiwgIkNvbW1hbmQtT3B0aW9uLUYi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgY29uZmlnLmxvYWRNb2R1
bGUoImFjZS9leHQvc2VhcmNoYm94IiwgZnVuY3Rpb24oZSkge2UuU2VhcmNoKGVkaXRvciwgdHJ1
ZSl9KTsKKyAgICB9Cit9LCB7CisgICAgbmFtZTogInVuZG8iLAorICAgIGJpbmRLZXk6IGJpbmRL
ZXkoIkN0cmwtWiIsICJDb21tYW5kLVoiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLnVuZG8oKTsgfQorfSwgeworICAgIG5hbWU6ICJyZWRvIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLVNoaWZ0LVp8Q3RybC1ZIiwgIkNvbW1hbmQtU2hpZnQtWnxDb21tYW5kLVki
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlZG8oKTsgfQorfSwgewor
ICAgIG5hbWU6ICJjb3B5bGluZXN1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0
LVVwIiwgIkNvbW1hbmQtT3B0aW9uLVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5jb3B5TGluZXNVcCgpOyB9Cit9LCB7CisgICAgbmFtZTogIm1vdmVsaW5lc3VwIiwK
KyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtVXAiLCAiT3B0aW9uLVVwIiksCisgICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb3ZlTGluZXNVcCgpOyB9Cit9LCB7CisgICAgbmFt
ZTogImNvcHlsaW5lc2Rvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1Eb3du
IiwgIkNvbW1hbmQtT3B0aW9uLURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLmNvcHlMaW5lc0Rvd24oKTsgfQorfSwgeworICAgIG5hbWU6ICJtb3ZlbGluZXNkb3du
IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtRG93biIsICJPcHRpb24tRG93biIpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW92ZUxpbmVzRG93bigpOyB9Cit9LCB7
CisgICAgbmFtZTogImRlbCIsCisgICAgYmluZEtleTogYmluZEtleSgiRGVsZXRlIiwgIkRlbGV0
ZXxDdHJsLUQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZSgi
cmlnaHQiKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAg
bmFtZTogImJhY2tzcGFjZSIsCisgICAgYmluZEtleTogYmluZEtleSgKKyAgICAgICAgIkNvbW1h
bmQtQmFja3NwYWNlfE9wdGlvbi1CYWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZSIs
CisgICAgICAgICJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxTaGlmdC1CYWNrc3Bh
Y2V8QmFja3NwYWNlfEN0cmwtSCIKKyAgICApLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3IucmVtb3ZlKCJsZWZ0Iik7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmV0b2xpbmVzdGFydCIsCisgICAgYmluZEtleTog
YmluZEtleSgiQWx0LUJhY2tzcGFjZSIsICJDb21tYW5kLUJhY2tzcGFjZSIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlVG9MaW5lU3RhcnQoKTsgfSwKKyAgICBt
dWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92ZXRvbGlu
ZWVuZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LURlbGV0ZSIsICJDdHJsLUsiKSwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZUVuZCgpOyB9LAor
ICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAicmVtb3Zl
d29yZGxlZnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQmFja3NwYWNlIiwgIkFsdC1C
YWNrc3BhY2V8Q3RybC1BbHQtQmFja3NwYWNlIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci5yZW1vdmVXb3JkTGVmdCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAi
Zm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAicmVtb3Zld29yZHJpZ2h0IiwKKyAgICBiaW5kS2V5
OiBiaW5kS2V5KCJDdHJsLURlbGV0ZSIsICJBbHQtRGVsZXRlIiksCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVXb3JkUmlnaHQoKTsgfSwKKyAgICBtdWx0aVNlbGVj
dEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogIm91dGRlbnQiLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIlNoaWZ0LVRhYiIsICJTaGlmdC1UYWIiKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiaW5kZW50IiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJUYWIiLCAiVGFiIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5pbmRlbnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LHsKKyAg
ICBuYW1lOiAiYmxvY2tvdXRkZW50IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVsiLCAi
Q3RybC1bIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja091dGRl
bnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LHsKKyAgICBuYW1l
OiAiYmxvY2tpbmRlbnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtXSIsICJDdHJsLV0i
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrSW5kZW50KCk7IH0s
CisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJpbnNl
cnRzdHJpbmciLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgc3RyKSB7IGVkaXRvci5pbnNl
cnQoc3RyKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAg
bmFtZTogImluc2VydHRleHQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgewor
ICAgICAgICBlZGl0b3IuaW5zZXJ0KGxhbmcuc3RyaW5nUmVwZWF0KGFyZ3MudGV4dCAgfHwgIiIs
IGFyZ3MudGltZXMgfHwgMSkpOworICAgIH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIgorfSwgeworICAgIG5hbWU6ICJzcGxpdGxpbmUiLAorICAgIGJpbmRLZXk6IGJpbmRLZXko
bnVsbCwgIkN0cmwtTyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc3Bs
aXRMaW5lKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAg
IG5hbWU6ICJ0cmFuc3Bvc2VsZXR0ZXJzIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVQi
LCAiQ3RybC1UIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50cmFuc3Bv
c2VMZXR0ZXJzKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246IGZ1bmN0aW9uKGVkaXRvcikg
e2VkaXRvci50cmFuc3Bvc2VTZWxlY3Rpb25zKDEpOyB9Cit9LCB7CisgICAgbmFtZTogInRvdXBw
ZXJjYXNlIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVUiLCAiQ3RybC1VIiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b1VwcGVyQ2FzZSgpOyB9LAorICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAidG9sb3dlcmNhc2Ui
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVSIsICJDdHJsLVNoaWZ0LVUiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvTG93ZXJDYXNlKCk7IH0sCisg
ICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfV07CisKK30pOworCithY2UuZGVmaW5l
KCdhY2UvdW5kb21hbmFnZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIFVuZG9NYW5hZ2VyID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5yZXNldCgpOworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGRlbHRhcyA9IG9w
dGlvbnMuYXJnc1swXTsKKyAgICAgICAgdGhpcy4kZG9jICA9IG9wdGlvbnMuYXJnc1sxXTsKKyAg
ICAgICAgdGhpcy4kdW5kb1N0YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgdGhpcy4kcmVkb1N0
YWNrID0gW107CisgICAgfTsKKyAgICB0aGlzLnVuZG8gPSBmdW5jdGlvbihkb250U2VsZWN0KSB7
CisgICAgICAgIHZhciBkZWx0YXMgPSB0aGlzLiR1bmRvU3RhY2sucG9wKCk7CisgICAgICAgIHZh
ciB1bmRvU2VsZWN0aW9uUmFuZ2UgPSBudWxsOworICAgICAgICBpZiAoZGVsdGFzKSB7CisgICAg
ICAgICAgICB1bmRvU2VsZWN0aW9uUmFuZ2UgPQorICAgICAgICAgICAgICAgIHRoaXMuJGRvYy51
bmRvQ2hhbmdlcyhkZWx0YXMsIGRvbnRTZWxlY3QpOworICAgICAgICAgICAgdGhpcy4kcmVkb1N0
YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5kb1NlbGVjdGlv
blJhbmdlOworICAgIH07CisgICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oZG9udFNlbGVjdCkgewor
ICAgICAgICB2YXIgZGVsdGFzID0gdGhpcy4kcmVkb1N0YWNrLnBvcCgpOworICAgICAgICB2YXIg
cmVkb1NlbGVjdGlvblJhbmdlID0gbnVsbDsKKyAgICAgICAgaWYgKGRlbHRhcykgeworICAgICAg
ICAgICAgcmVkb1NlbGVjdGlvblJhbmdlID0KKyAgICAgICAgICAgICAgICB0aGlzLiRkb2MucmVk
b0NoYW5nZXMoZGVsdGFzLCBkb250U2VsZWN0KTsKKyAgICAgICAgICAgIHRoaXMuJHVuZG9TdGFj
ay5wdXNoKGRlbHRhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlZG9TZWxlY3Rpb25S
YW5nZTsKKyAgICB9OworICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy4kdW5kb1N0YWNrID0gW107CisgICAgICAgIHRoaXMuJHJlZG9TdGFjayA9IFtdOworICAgIH07
CisgICAgdGhpcy5oYXNVbmRvID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1
bmRvU3RhY2subGVuZ3RoID4gMDsKKyAgICB9OworICAgIHRoaXMuaGFzUmVkbyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcmVkb1N0YWNrLmxlbmd0aCA+IDA7CisgICAgfTsK
KworfSkuY2FsbChVbmRvTWFuYWdlci5wcm90b3R5cGUpOworCitleHBvcnRzLlVuZG9NYW5hZ2Vy
ID0gVW5kb01hbmFnZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3ZpcnR1YWxfcmVuZGVyZXIn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9s
aWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2NvbmZp
ZycsICdhY2UvbGliL25ldCcsICdhY2UvbGF5ZXIvZ3V0dGVyJywgJ2FjZS9sYXllci9tYXJrZXIn
LCAnYWNlL2xheWVyL3RleHQnLCAnYWNlL2xheWVyL2N1cnNvcicsICdhY2Uvc2Nyb2xsYmFyJywg
J2FjZS9yZW5kZXJsb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29w
Iik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7Cit2YXIgZXZlbnQgPSByZXF1aXJl
KCIuL2xpYi9ldmVudCIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2Vu
dCIpOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Cit2YXIgbmV0ID0gcmVxdWly
ZSgiLi9saWIvbmV0Iik7Cit2YXIgR3V0dGVyTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVyL2d1dHRl
ciIpLkd1dHRlcjsKK3ZhciBNYXJrZXJMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvbWFya2VyIiku
TWFya2VyOwordmFyIFRleHRMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvdGV4dCIpLlRleHQ7Cit2
YXIgQ3Vyc29yTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVyL2N1cnNvciIpLkN1cnNvcjsKK3ZhciBT
Y3JvbGxCYXIgPSByZXF1aXJlKCIuL3Njcm9sbGJhciIpLlNjcm9sbEJhcjsKK3ZhciBSZW5kZXJM
b29wID0gcmVxdWlyZSgiLi9yZW5kZXJsb29wIikuUmVuZGVyTG9vcDsKK3ZhciBFdmVudEVtaXR0
ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIGVk
aXRvckNzcyA9ICIuYWNlX2VkaXRvciB7XAorcG9zaXRpb246IHJlbGF0aXZlO1wKK292ZXJmbG93
OiBoaWRkZW47XAorZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCAnVWJ1bnR1IE1vbm8n
LCAnQ29uc29sYXMnLCAnc291cmNlLWNvZGUtcHJvJywgbW9ub3NwYWNlO1wKK2ZvbnQtc2l6ZTog
MTJweDtcCitsaW5lLWhlaWdodDogbm9ybWFsO1wKK31cCisuYWNlX3Njcm9sbGVyIHtcCitwb3Np
dGlvbjogYWJzb2x1dGU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCit0b3A6IDA7XAorYm90dG9tOiAw
O1wKK31cCisuYWNlX2NvbnRlbnQge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCistbW96LWJveC1z
aXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2Jv
eC1zaXppbmc6IGJvcmRlci1ib3g7XAorY3Vyc29yOiB0ZXh0O1wKK31cCisuYWNlX2d1dHRlciB7
XAorcG9zaXRpb246IGFic29sdXRlO1wKK292ZXJmbG93IDogaGlkZGVuO1wKK3dpZHRoOiBhdXRv
O1wKK3RvcDogMDtcCitib3R0b206IDA7XAorbGVmdDogMDtcCitjdXJzb3I6IGRlZmF1bHQ7XAor
ei1pbmRleDogNDtcCit9XAorLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKK3Bvc2l0aW9uOiBh
YnNvbHV0ZTtcCitsZWZ0OiAwO1wKK3JpZ2h0OiAwO1wKK31cCisuYWNlX3Njcm9sbGVyLmFjZV9z
Y3JvbGwtbGVmdCB7XAorYm94LXNoYWRvdzogMTdweCAwIDE2cHggLTE2cHggcmdiYSgwLCAwLCAw
LCAwLjQpIGluc2V0O1wKK31cCisuYWNlX2d1dHRlci1jZWxsIHtcCitwYWRkaW5nLWxlZnQ6IDE5
cHg7XAorcGFkZGluZy1yaWdodDogNnB4O1wKK2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7
XAorfVwKKy5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1
cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFB
QVFDQVlBQUFBZjgvOWhBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdS
NWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRs
ZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJ
ajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVH
MXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpB
eE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02
Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZ
WGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2Ju
TTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pw
NGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFz
Ym5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHda
UzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRH
OXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1
cGFXUTZRVU0yT0VaRFFUUTRSVFUwTVRGRk1VRXpNMFZGUlRNMlJVWTFNMFJCTWpZaUlIaHRjRTFO
T2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlFVTTJPRVpEUVRVNFJUVTBNVEZGTVVFek0wVkZS
VE0yUlVZMU0wUkJNallpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRH
RnVZMlZKUkQwaWVHMXdMbWxwWkRwQlF6WTRSa05CTWpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpV
elJFRXlOaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBCUXpZNFJrTkJNemhG
TlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZi
ajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNp
SS9Qa2dYeGJBQUFBSmJTVVJCVkhqYXBGTk5hQk5CRkg0enM1dmRaTFA1c1FtTnBUODJRWTIwOWhl
aDFpb1dpc2FEUmNTS0YwV0tKMEdRbnJ6cnhhc0hzUjZFbmxyd0QwVGFneEphYmFWRXBGWXhMV2xM
U1M4MjJ0cjg3bTY2Y2NmZDJHS3lWaEE2TU15YmdmZTk3L3ZtUFVRcGhkMHNaanRvOVhJbjlPT3N2
bHUybmtxUnpWVSs2dnZselBmOFc2Yms4ZHhRME5QYnhBQUxnQ2dnMkprYVF1aHpRYXUvRWwwemJt
VUE3VTBFczh2MkNpWW1LUUpIR08xUUlDQ0xvcWlsTWhrbXVyREF5YXBLZ3FJdGV6aS9VU1JkSnFF
WVk0RDVqQ3kwM2h0MnlNa2t2TDkxalRUWDEwcXp5eXUyaHJ1UFJON2pnYkgrRU9zWGNNTGdZaVRo
RWdBTWhBQlc4NW9xeTFEWGRSSWR2UDFBSEoyYWNRWHZESXJWSGNkUU5yRUtOWVNWTVNaR01qRXpJ
SUF3RFhJbys2Ry9GeGNHbnprQzNUMm9NaExqcmU0OXNCQitSUmNITHFkYWZLNnNZZEUvR0dCd1Ux
VnBGTmowYU44cEpiZStCa1p5ZXZVcnZMbDZYbW0wVzlJdVRjMER4ckROQUpkNW9FdkkvS1JzTkMz
YlF5TmpQTzl5UTFZSGNmajJRdmZRYy81VFVoSlRCYzJpTTBVN0FXRFF0YzFuSkh2RC9jZk8yczdq
YUdraVRFZmEvRXA4Y29MdTd6bU5taDgrZGM1bFpEdVVlRkFHVU5BL09ZNkpWYXlwUTB2anI3WFlq
VXZKTTM3dnQrajF2dVRLNURnVmZWVW9UalZlK3kzL0x4TXhZMkdnVStDU0x5NGNwZnNZb3JSWHVY
SU9pMFZ0NDBoNjd1WkZUZElvNm5MYVpjd1VKV0F6d05TMHRCbnFxS3pRRG5qZEcvaVB5WnhvNDZI
YUtVcGJ2WWtqOHFZUlRac0JoZ2UrSkhoWnloMHg5Yjk1SnFqVkprVDA4NGtaSVB3dS9tUFdxUGdm
UTVqWGgyKzkyQXk3SGVkZkFnd0E2S0RXYWZiNHczY0FBQUFBU1VWT1JLNUNZSUk9XCIpO1wKK2Jh
Y2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNl
bnRlcjtcCit9XAorLmFjZV9ndXR0ZXItY2VsbC5hY2Vfd2FybmluZyB7XAorYmFja2dyb3VuZC1p
bWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0Zu
WlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9l
SEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkz
cHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4
aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMz
Tnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdl
RzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1pp
MXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJ
Z2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0
Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRM
eUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1D
OXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1V
Z1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5
SW5odGNDNXBhV1E2UVVNMk9FWkRRVGc0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBSQk1qWWlJ
SGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRVU0yT0VaRFFUazRSVFUwTVRGRk1V
RXpNMFZGUlRNMlJVWTFNMFJCTWpZaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZ
NmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEJRelk0UmtOQk5qaEZOVFF4TVVVeFFUTXpSVVZG
TXpaRlJqVXpSRUV5TmlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwQlF6WTRS
a05CTnpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlOaUl2UGlBOEwzSmtaanBFWlhOamNt
bHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdW
dVpEMGljaUkvUGdkN1BmSUFBQUdtU1VSQlZIamFZdnIvL3o4REpaaUpnVUlBTm9DUmtSRWI5Z0xp
U1ZBYVF4NE9RTTdBQWt3ZDdYVTIvdisrL3JPdHRkWUdFQjlkQVNFdk9NeWRHS2ZIOEd2L3A0WFRr
dlJCZkx4ZVFBUCsxY1VoWG9weXZ6aFA3UC9Jb1NqN2c3TXcwOWNOS082SjFRUTBMNGdJQ1BJdi92
ZWcvOFcrSmRGdlFOTEhWc1c5L25tbjl6azdCK2NDa0R3aEw3Z3Q2a25TWm54OS9MdUNFT2N2a0lB
TVArY3Z0bzluZnF5Wm1tVUFrc2ZuQlV0Yk02MGdYLzMva2d5djMveFNGT0w1RFpUK0w4dlArWWZo
NWN2ZlB2cC94VUh5UUhYR3lBWXdncHdCalpZRlQzWTFPRWwvT2ZDSDRmZnYzd3pjNGl3TXZOSXNE
SitmL21INCt2SVBBeHNiNjMxV1cwWWxuNlpwUUxYZE1LL0RYR0RmbGgrc0l2MzdFaXZENXgvL0di
NytZV1Q0eTg2c2w3QkNDa1NEK1orKy8xZGt2c0ZSbCtIbkQxUnZqZTRGOHdoak1YbUdqNThZR2Y1
enNETXdjbkF3ZlB2S2NtbDYyRHNRRGVhRHhOKy9ZMHF3bHBFSHFyZEI5NElSTklEVWdmZ2ZLSkNo
R0s0T2lrRVczZ1RpWFVCOTUwQVNMRkFGNTRBQzk0QTBHOVFBZk9ubUY5RENEekFCRnFTMDhJSFlE
SVNjZGlqT2pRQUJCZ0MrLzlhd0JIOTZqd0FBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCitiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKK31cCisuYWNlX2d1dHRlci1jZWxsLmFjZV9pbmZv
IHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09E
bGhFQUFRQU1RQUFBQUFBRUZCUVZKU1VsNWVYbVJrWkd0cmEzOS9mNFdGaFltSmlaR1JrYWFtcHJ5
OHZNUER3OHpNek5YVjFkemMzT1RrNU9ycTZ2RHc4UC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBa0FBQlFBTEFBQUFBQVFBQkFBQUFVdUlDV09a
R21lYUJtbDVYR3dGQ1FTQkd5WFJTQXd0cVFJaVJ1aXdJTTVCb1lWYkVGSXlHQ1FvZUpHclZwdElR
QTdcIik7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjtcCit9XAorLmFjZV9kYXJr
IC5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRh
dGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFB
QUFmOC85aEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBB
QUFBeVJwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldk
cGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0
T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJ
a0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNeTFqTURFeElEWTJMakUwTlRZMk1Td2dNakF4TWk4d01p
OHdOaTB4TkRvMU5qb3lOeUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNK
b2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1q
SWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQ
U0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRU
MGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNS
U1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52
ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJ
RU5UTmlBb1RXRmphVzUwYjNOb0tTSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpE
cEdSVGs1TVRWR1JFSXhORGt4TVVVeE9UYzVRMEZGUkVReU1UTkdNakJGUXlJZ2VHMXdUVTA2Ukc5
amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR1JUazVNVFZHUlVJeE5Ea3hNVVV4T1RjNVEwRkZSRVF5
TVROR01qQkZReUkrSUR4NGJYQk5UVHBFWlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5OMFlXNWpa
VWxFUFNKNGJYQXVhV2xrT2taRk9Ua3hOVVpDUWpFME9URXhSVEU1TnpsRFFVVkVSREl4TTBZeU1F
VkRJaUJ6ZEZKbFpqcGtiMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPa1pGT1RreE5VWkRRakUwT1RF
eFJURTVOemxEUVVWRVJESXhNMFl5TUVWRElpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQaUE4
TDNKa1pqcFNSRVkrSUR3dmVEcDRiWEJ0WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNKeUlqOCtT
SURrakFBQUFKMUpSRUZVZU5waS9QLy9Qd01sZ0ltQlFrQjdBNnFycS8rRE1DNTVGa0lHS0NvcTRw
Vm5wRmtnVHAwNjlmLysvZnYvcjF1MzdyK3RyZTEva2cwQStwdG45dXpaWUxhUmtSSHBMdmp3NGNO
WFdWbFpodWZQbnpPY08zZU9kQU8wdGJWUEFqSERtemR2R0E0ZlBzeElzZ0dTa3BKbXYzNzlZbmoz
N2gyRGpJeU1DTWtHM0xoeFEvVDI3ZHNNYW1wcURIWjJkcS9wSDQxRHh3Q0FBQU1BRmRjNjhkVXNG
WmdBQUFBQVNVVk9SSzVDWUlJPVwiKTtcCit9XAorLmFjZV9zY3JvbGxiYXIge1wKK3Bvc2l0aW9u
OiBhYnNvbHV0ZTtcCitvdmVyZmxvdy14OiBoaWRkZW47XAorb3ZlcmZsb3cteTogc2Nyb2xsO1wK
K3JpZ2h0OiAwO1wKK3RvcDogMDtcCitib3R0b206IDA7XAorfVwKKy5hY2Vfc2Nyb2xsYmFyLWlu
bmVyIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAord2lkdGg6IDFweDtcCitsZWZ0OiAwO1wKK31c
CisuYWNlX3ByaW50LW1hcmdpbiB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK2hlaWdodDogMTAw
JTtcCit9XAorLmFjZV90ZXh0LWlucHV0IHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRl
eDogMDtcCit3aWR0aDogMC41ZW07XAoraGVpZ2h0OiAxZW07XAorb3BhY2l0eTogMDtcCitiYWNr
Z3JvdW5kOiB0cmFuc3BhcmVudDtcCistbW96LWFwcGVhcmFuY2U6IG5vbmU7XAorYXBwZWFyYW5j
ZTogbm9uZTtcCitib3JkZXI6IG5vbmU7XAorcmVzaXplOiBub25lO1wKK291dGxpbmU6IG5vbmU7
XAorb3ZlcmZsb3c6IGhpZGRlbjtcCitmb250OiBpbmhlcml0O1wKK31cCisuYWNlX3RleHQtaW5w
dXQuYWNlX2NvbXBvc2l0aW9uIHtcCitiYWNrZ3JvdW5kOiAjZjhmOGY4O1wKK2NvbG9yOiAjMTEx
O1wKK3otaW5kZXg6IDEwMDA7XAorb3BhY2l0eTogMTtcCitib3JkZXI6IHNvbGlkIGxpZ2h0Z3Jh
eSAxcHg7XAorbWFyZ2luOiAtMXB4O1wKK3BhZGRpbmc6IDAgMXB4O1wKK31cCisuYWNlX2xheWVy
IHtcCit6LWluZGV4OiAxO1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdzogaGlkZGVu
O1wKK3doaXRlLXNwYWNlOiBub3dyYXA7XAoraGVpZ2h0OiAxMDAlO1wKK3dpZHRoOiAxMDAlO1wK
Ky1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1zaXppbmc6IGJvcmRl
ci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCisvKiBzZXR0aW5nIHBvaW50ZXItZXZl
bnRzOiBhdXRvOyBvbiBub2RlIHVuZGVyIHRoZSBtb3VzZSwgd2hpY2ggY2hhbmdlc1wKK2R1cmlu
ZyBzY3JvbGwsIHdpbGwgYnJlYWsgbW91c2Ugd2hlZWwgc2Nyb2xsaW5nIGluIFNhZmFyaSAqL1wK
K3BvaW50ZXItZXZlbnRzOiBub25lO1wKK31cCisuYWNlX2d1dHRlci1sYXllciB7XAorcG9zaXRp
b246IHJlbGF0aXZlO1wKK3dpZHRoOiBhdXRvO1wKK3RleHQtYWxpZ246IHJpZ2h0O1wKK3BvaW50
ZXItZXZlbnRzOiBhdXRvO1wKK31cCisuYWNlX3RleHQtbGF5ZXIge1wKK2NvbG9yOiBibGFjaztc
Citmb250OiBpbmhlcml0ICFpbXBvcnRhbnQ7XAorfVwKKy5hY2VfY2prIHtcCitkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7XAordGV4dC1hbGlnbjogY2VudGVyO1wKK31cCisuYWNlX2N1cnNvci1sYXll
ciB7XAorei1pbmRleDogNDtcCit9XAorLmFjZV9jdXJzb3Ige1wKK3otaW5kZXg6IDQ7XAorcG9z
aXRpb246IGFic29sdXRlO1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0
LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCit9XAor
LmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7XAorb3BhY2l0eTogMC4yO1wKK31cCisu
YWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XAorLW1vei10cmFuc2l0aW9uOiBvcGFj
aXR5IDAuMThzO1wKKy13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCistby10cmFu
c2l0aW9uOiBvcGFjaXR5IDAuMThzO1wKKy1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzO1wK
K3RyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorfVwKKy5hY2VfY3Vyc29yW3N0eWxlKj1cIm9w
YWNpdHk6IDBcIl17XAorLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNy
b3NvZnQuQWxwaGEoT3BhY2l0eT0wKVwiO1wKK31cCisuYWNlX2VkaXRvci5hY2VfbXVsdGlzZWxl
Y3QgLmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XAorfVwKKy5hY2VfbGlu
ZSB7XAord2hpdGUtc3BhY2U6IG5vd3JhcDtcCit9XAorLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9z
dGVwIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRleDogMztcCit9XAorLmFjZV9tYXJr
ZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4
OiA1O1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKK3Bvc2l0aW9uOiBh
YnNvbHV0ZTtcCit6LWluZGV4OiA2O1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2
ZS1saW5lIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRleDogMjtcCit9XAorLmFjZV9t
YXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAor
ei1pbmRleDogNDtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gt
c2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorfVwKKy5hY2Vf
bGluZSAuYWNlX2ZvbGQge1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0
LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCitkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7XAoraGVpZ2h0OiAxMXB4O1wKK21hcmdpbi10b3A6IC0ycHg7XAor
dmVydGljYWwtYWxpZ246IG1pZGRsZTtcCitiYWNrZ3JvdW5kLWltYWdlOlwKK3VybChcImRhdGE6
aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMTEl
MDAlMDAlMDAlMDklMDglMDYlMDAlMDAlMDAlRDQlRTglQzclMEMlMDAlMDAlMDMlMUVpQ0NQSUND
JTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNB
ZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUEl
QzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdC
JTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJC
JURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVD
NCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIy
eSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMl
MjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RM
c1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1
QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTND
JUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3
JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTgl
QkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlB
JTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAl
OTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVE
NyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIl
RjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1El
M0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQl
RDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIl
QjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgx
JUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhR
JUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVF
JTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0Ul
REUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJG
JThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgy
JUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUl
QzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVol
RUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVC
RSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4
NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkgl
RDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43
VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYl
M0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDEl
QkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBB
JUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAw
JTlBJTlDJTE4JTAwJTAwJTAwJUI1SURBVCglMTUlQTUlOTElM0QlMEUlMDIhJTEwJTg1YWMlRTEl
MDUlRDYlQ0UlRDYlQzYlQ0UlRDIlRTglRUQlQ0QlREUlQzAlQzYlRDZOLiVFMFYlRjglM0QlOUNh
JTg5MVhIJUMyJUJFJUQ5eSUzRiU5MCElRTYlOUMlQzMlQkZrJUU1JTAxMSVDNi0lRjUlQzhOJTA0
JURGJUJEJUZGJTg5JURGdCU4M0ROJTYwJTNFJUYzJUFCJUEwJURFJTFBJTVEZyVCRSUxMFElOTcl
MUIlNDAlOUMlQThvJTEwJThGJTVFJTgyOCVCNCUxQiU2MCU4NyVGNiUwMiUyNiU4NSUxQ2glMUUl
QzElMkIlNUJrJUZGJTg2JUVFJUI3aiUwOSU5QSVEQSU5QiVBQ2UlQTMlRjklRUMlREEhOSVCNCVE
NSVBNiU4MSU4NiU4NiU5OCVDQyUzQyU1QiU0MCVGQSU4MSVCMyVFOSVDQiUyMyU5NCVDMTZBem8l
MDUlRDQlRTElQzElOTVhJTNCJThBJyVBMCVFOCVDQyUxNyUyMiU4NSUxRCVCQSUwMCVBMiVGQSVE
QyUwQSU5NCVEMSVEMSU4RCU4QiUzQSU4NCUxN0IlQzclNjAlMUElMjVaJUZDJThEJTAwJTAwJTAw
JTAwSUVORCVBRUIlNjAlODJcIiksXAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBB
JTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUwMDclMDglMDYlMDAlMDAl
MDAlQzQlREQlODBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVE
RmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZr
VyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0El
QzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJM
JUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5
cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJC
JUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8l
REYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVD
JUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4
QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQl
RDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAl
MUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURF
JTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUy
NCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUz
bGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAl
OTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVE
NiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTky
JTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIl
MENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVE
JTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThF
JUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1
JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlEl
RDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4
KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5
RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQl
QkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVC
QiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNF
XyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4
RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RP
JTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlcl
OTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYl
NUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1
JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUz
RG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JURE
JUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZ
cyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCUzQUlEQVQ4
JTExYyVGQyVGRiVGRiU3RiUxOCUwMyUxQSU2MCUwMSVGMiUzRiVBMCU4OTElODAlMDQlRkYlMTEt
JUY4JTE3JTlCSiVFMiUwNSVCMVpEJTgxdiUyNnQlRTclODAlRjglQTMlODJoJUExMiUxQSUyMCVB
MyUwMSUwMiUwRiUwMSVCQSUyNSUwNiUwMCUxOSVDMCUwRCVBRUYlRDUlM0VTJTAwJTAwJTAwJTAw
SUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCwgcmVwZWF0
LXg7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwgdG9wIGxlZnQ7XAorY29s
b3I6IHRyYW5zcGFyZW50O1wKK2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wKKy1tb3otYm9yZGVy
LXJhZGl1czogMnB4O1wKKy13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1wKK2JvcmRlci1yYWRp
dXM6IDJweDtcCitjdXJzb3I6IHBvaW50ZXI7XAorcG9pbnRlci1ldmVudHM6IGF1dG87XAorfVwK
Ky5hY2VfZGFyayAuYWNlX2ZvbGQge1wKK31cCisuYWNlX2ZvbGQ6aG92ZXJ7XAorYmFja2dyb3Vu
ZC1pbWFnZTpcCit1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAl
MDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3
JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0
JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFol
RUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3
JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIz
JTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQl
MkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIl
ODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVj
JUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVF
MCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5
NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODEl
MTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYy
XyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAl
OEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUy
NiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIl
MDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIx
JUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVG
RSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVE
QiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVD
NCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlf
JTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1
JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTcl
QjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5
MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1
JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYl
RUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlD
JThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVF
MSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhh
JUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYl
M0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1
bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBB
byU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5
JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIw
JTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThC
JTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdG
JTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUw
QiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkx
JTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMw
JUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJG
ayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVB
MCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAl
ODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIl
QUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODEl
QjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTcl
MjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYw
JTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFwKK3VybChcImRhdGE6
aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUl
MDAlMDAlMDA3JTA4JTA2JTAwJTAwJTAwJUM0JUREJTgwQyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQ
cm9maWxlJTAwJTAweCUwMSU4NVQlREZrJUQzUCUxNCVGRSVEQWUlOUQlQjAlRTElOEIlM0FnJTEx
JTA5JTNFaCU5MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVBNiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUy
NCVFRH4lQjAlMDclRDklOEJvJTNBJUM1dyVGMSUwNyUzRSVGOSUwNyUwQyVEOSU4M28lN0IlOTIl
MEQlQzYlMTRhJUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5RSU5QjRNJ1MlMDMlQjklRjclQkIlREYl
RjklRUU5JyVFNyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJGJTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0
JTE0JURGJUYyJTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVG
JUIzJUYzJTBFJTFFJUM2bHQlRUVvJURGJUFCJUZFYyVENSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVC
RSU5NDUlQzQlMjIlRTFZJUEwaSU1QyVENHQlMTMlRTAlRDYlODklRUYlOUQxNSVDMiVDRExzWCVB
NyUwNCUwOSUxRmc4b2MlODElRTElOEMlOEQlMjMlOTZmNDUlNDAlOUElMDklQzIlMDclQzVCJTNB
SyVCOCU0MDglOThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJF
UiUyRiVFNWRFJUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8lQjAlQTglOTQlRTklOUIlQUQlRTclMTAl
OERtJTlBJTE5TiVEMSU3QyU4QSVERSUxRjklN0RwJThDJUU2JTAwJUQ1JUMxJTNGXyUxOCVCREEl
QjglOURwWDYlRTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYlQkQlRTclRUV0aSU5OCVFRGUlOUElOTdZ
KSUxMiUyNSUxQyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAzJTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVC
MCU5RjQlQkY0M1klRjMlRTMlRURQJTk1JTA0JUVCMSVDNSVGNSVGNktGJUY0JUJBJUJEJUQ3JURC
JTkxJTkzJTA3JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUlQkQlRjclRjVyJThBJUU1eSU5MiVGMCVF
QiVCNCUxRSU4RCVENSVGNCU1QiU5MiUzQVYlREIlREIlRTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUw
M0hCJTgyJThFJTFDZCglRTAlOTFCJTBDYSU5QWMlQzQlQUElRjhMJTE2JTE5JTIySiVBNCVEMml0
VHklQjI4JUQ2JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUwRSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVG
NiVFMCVGQiU5RSVERCUyNSVENyU4RSVCQyUxNSU4NSVDNSVCNyVBMyVEOFElRUQlQjUlODElRTkl
QkElQjIlMTMlOUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUl
OEElRTUlQjFIJTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBTJTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2
JTEyWCUwQyVCQSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUxNyVDMiU5NyVCRiVENCVDOCVDRSVERSVB
RCUxMSVDQiU4MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVDJTI1JUQyTCVEMiVFQmQlQjglQkYlOEEl
RjVCJUM2JTE4JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4QTklRjIlREFQJTBCJyUwNnclODIlRUIl
RTYlRTIlNUMlMkYlRDclMDclOUUlQkIlQ0MlNUQlRTElRkElQjklMDglQUQuciUyMyU4RSVDMiUx
NyVGNUUlN0MhJUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVBNyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVC
QiVEMyU5MSVCQSVBMiVCMXolOTQlOEYlREInJUY2JTNEJThFJUFBJTEzJTE5JUIyJUIxJUJFJUIx
flYlMDglMkIlQjQlQTJjakolQjN0TyUwMCUwMyUyNW1OJTk3JUYzJTA1JTkzJUVGJTExJTg0JTBC
JTdDJTg4JUFFLSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8lOTklMEMlNUUlOTclMENJJUFGSCVEOS4l
QjAlM0IlOEYlRUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVGMypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2
JTVFJTE5JUMwJUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5
RSVCNyU4MCU5MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUzRVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUw
RiVBQiVENSU5RiVDRiVBQSVENSVERCVFNyVFNCU3RiUwQnglQTMlRkMlMDYlQTklMjMlMEElRDYl
QzIlQTFfMiUwMCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIlMTMlMDAlMDAlMEIlMTMlMDElMDAlOUEl
OUMlMTglMDAlMDAlMDAzSURBVDglMTFjJUZDJUZGJUZGJTdGJTNFJTAzJTFBJTYwJTAxJUYyJTNG
JUEzJTg5MSU4MCUwNCVGRlElMjYlRjh3JUMwJUI0MyVBMSVEQiUwQyVFMiU4RiUwQSVBMiU4NSVD
QWglODAlOEMlMDYlMDglM0MlMDQlRTglOTYlMTglMDAlQTNTJTBEJUNEJUNGJUQ4JUMxJTlEJTAw
JTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVh
dCwgcmVwZWF0LXg7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwgdG9wIGxl
ZnQ7XAorfVwKKy5hY2VfZWRpdG9yLmFjZV9kcmFnZ2luZyAuYWNlX2NvbnRlbnQge1wKK2N1cnNv
cjogbW92ZTtcCit9XAorLmFjZV9ndXR0ZXItdG9vbHRpcCB7XAorYmFja2dyb3VuZC1jb2xvcjog
I0ZGRjtcCitiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0byBib3R0
b20sIHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAuMSkpO1wKK2JhY2tncm91bmQtaW1hZ2U6
IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAu
MSkpO1wKK2JvcmRlcjogMXB4IHNvbGlkIGdyYXk7XAorYm9yZGVyLXJhZGl1czogMXB4O1wKK2Jv
eC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XAorY29sb3I6IGJsYWNrO1wK
K2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCittYXgtd2lkdGg6IDUwMHB4O1wKK3BhZGRpbmc6IDRw
eDtcCitwb3NpdGlvbjogZml4ZWQ7XAorei1pbmRleDogMzAwO1wKKy1tb3otYm94LXNpemluZzog
Ym9yZGVyLWJveDtcCistd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemlu
ZzogYm9yZGVyLWJveDtcCitjdXJzb3I6IGRlZmF1bHQ7XAord2hpdGUtc3BhY2U6IHByZS1saW5l
O1wKK3dvcmQtd3JhcDogYnJlYWstd29yZDtcCitsaW5lLWhlaWdodDogbm9ybWFsO1wKK2ZvbnQt
c3R5bGU6IG5vcm1hbDtcCitmb250LXdlaWdodDogbm9ybWFsO1wKK2xldHRlci1zcGFjaW5nOiBu
b3JtYWw7XAorfVwKKy5hY2VfZm9sZGluZy1lbmFibGVkID4gLmFjZV9ndXR0ZXItY2VsbCB7XAor
cGFkZGluZy1yaWdodDogMTNweDtcCit9XAorLmFjZV9mb2xkLXdpZGdldCB7XAorLW1vei1ib3gt
c2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCiti
b3gtc2l6aW5nOiBib3JkZXItYm94O1wKK21hcmdpbjogMCAtMTJweCAwIDFweDtcCitkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7XAord2lkdGg6IDExcHg7XAordmVydGljYWwtYWxpZ246IHRvcDtcCiti
YWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEEl
MDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAwJTAwJThE
byUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQWUlOEElQjElMEQlMDAwJTBDJUMyJUYyJTJDSyU5NiVC
QyVEMCU4RjklODElODhIJUU5JUQwJTBFJTk2JUMwJTEwJTkyJTNFJTAyJTgwJTVFJTgyJUU0JUE5
Ki0lRUVzdyVDOCVDQyUxMSVFRSU5NnclRDglREMlRTkqRWglMEMlMTUxKCUwMCUwMCUwMCUwMElF
TkQlQUVCJTYwJTgyXCIpO1wKK2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XAorYmFja2dy
b3VuZC1wb3NpdGlvbjogY2VudGVyO1wKK2JvcmRlci1yYWRpdXM6IDNweDtcCitib3JkZXI6IDFw
eCBzb2xpZCB0cmFuc3BhcmVudDtcCit9XAorLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcCiti
YWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEEl
MDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAwJTAwJThE
byUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQW0lQzclQzElMDklMDAwJTA4QyVEMSU4QyVFQ0UlQzhF
KCU4RSVFQyUwMiklMUVaSiVGMSVDMSclMDQlMDdJJUUxJUU1JUVFJUNBTCVGNSVBMiU5OSU5OSUy
MiVFMiVENiUxRlUlQjUlRkUwJUQ5eCVBNyUyNld6NSUwRSVENSUwMCUwMCUwMCUwMElFTkQlQUVC
JTYwJTgyXCIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWQge1wKK2JhY2tncm91
bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUw
MCUwRElIRFIlMDAlMDAlMDAlMDMlMDAlMDAlMDAlMDYlMDglMDYlMDAlMDAlMDAlMDYlRTUlMjQl
MEMlMDAlMDAlMDA5SURBVHglREE1JUNBJUMxJTA5JTAwMCUwOCUwMyVDMCVBQyooJTNFJTA0JUMx
JTBEJUJBJUIxJTIzJUE0VWglRTAlMjAlODElQzAlQ0MlRjglODIlODElQUElQTIlQUFyR2ZyJTg4
JTA4JTExJTExJTFDJUREJTdEJUUwJUVFJTVCJUY2JUY2JUNCJUI4JTA1USUyRiVFOXRhaSVEOSUw
MCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0OmhvdmVy
IHtcCitib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMyk7XAorYmFja2dyb3VuZC1j
b2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKKy1tb3otYm94LXNoYWRvdzogMCAxcHgg
MXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCistd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4
IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XAorYm94LXNoYWRvdzogMCAxcHggMXB4IHJn
YmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCit9XAorLmFjZV9mb2xkLXdpZGdldDphY3RpdmUge1wK
K2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40KTtcCitiYWNrZ3JvdW5kLWNvbG9y
OiByZ2JhKDAsIDAsIDAsIDAuMDUpO1wKKy1tb3otYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC44KTtcCistd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDAuOCk7XAorYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC44KTtcCit9XAorLyoqXAorKiBEYXJrIHZlcnNpb24gZm9yIGZvbGQgd2lkZ2V0
c1wKKyovXAorLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQge1wKK2JhY2tncm91bmQtaW1hZ2U6
IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVB
QUFBRkNBWUFBQUNOYnlibEFBQUFIa2xFUVZRSVcyUDQvLzgvQXpvR0VRN29HQ2FMTEFoV2lTd0Ix
NDZCQVFDU1RQWW9jcVQwQUFBQUFFbEZUa1N1UW1DQ1wiKTtcCit9XAorLmFjZV9kYXJrIC5hY2Vf
Zm9sZC13aWRnZXQuYWNlX2VuZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFn
ZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJs
QUFBQUgwbEVRVlFJVzJQNC8vOC9BeFE3d05qSUFqRE1nQzRBeGpDVktCaXJJQUFGMGt6MnJsaHhw
QUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCit9XAorLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQu
YWNlX2Nsb3NlZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFz
ZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFGQ0FZQUFBQ0FjVmFpQUFBQUhFbEVR
VlFJVzJQNC8vKy9BeEF6Z0RBRGxPT0F6bkhBS2dQV0F3QVJqaThVSURUZlFRQUFBQUJKUlU1RXJr
SmdnZz09XCIpO1wKK31cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XAorYm94
LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCitiYWNrZ3JvdW5k
LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XAorfVwKKy5hY2VfZGFyayAuYWNlX2Zv
bGQtd2lkZ2V0OmFjdGl2ZSB7XAorLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjIpO1wKKy13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1
LCAyNTUsIDI1NSwgMC4yKTtcCitib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjIpO1wKK31cCisuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9pbnZhbGlkIHtcCitiYWNrZ3Jv
dW5kLWNvbG9yOiAjRkZCNEI0O1wKK2JvcmRlci1jb2xvcjogI0RFNTU1NTtcCit9XAorLmFjZV9m
YWRlLWZvbGQtd2lkZ2V0cyAuYWNlX2ZvbGQtd2lkZ2V0IHtcCistbW96LXRyYW5zaXRpb246IG9w
YWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKKy13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRz
IGVhc2UgMC4wNXM7XAorLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XAor
LW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKK3RyYW5zaXRpb246IG9w
YWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKK29wYWNpdHk6IDA7XAorfVwKKy5hY2VfZmFkZS1mb2xk
LXdpZGdldHM6aG92ZXIgLmFjZV9mb2xkLXdpZGdldCB7XAorLW1vei10cmFuc2l0aW9uOiBvcGFj
aXR5IDAuMDVzIGVhc2UgMC4wNXM7XAorLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVz
IGVhc2UgMC4wNXM7XAorLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wK
Ky1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAordHJhbnNpdGlvbjog
b3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wKK29wYWNpdHk6MTtcCit9XAorLmFjZV91bmRlcmxp
bmUge1wKK3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKK31cCisuYWNlX2JvbGQge1wKK2Zv
bnQtd2VpZ2h0OiBib2xkO1wKK31cCisuYWNlX25vYm9sZCAuYWNlX2JvbGQge1wKK2ZvbnQtd2Vp
Z2h0OiBub3JtYWw7XAorfVwKKy5hY2VfaXRhbGljIHtcCitmb250LXN0eWxlOiBpdGFsaWM7XAor
fVwKKyI7CisKK2RvbS5pbXBvcnRDc3NTdHJpbmcoZWRpdG9yQ3NzLCAiYWNlX2VkaXRvciIpOwor
Cit2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgeworICAg
IHZhciBfc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lciB8fCBk
b20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3Ig
PSAhdXNlcmFnZW50LmlzSUU7CisKKyAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIs
ICJhY2VfZWRpdG9yIik7CisKKyAgICB0aGlzLnNldFRoZW1lKHRoZW1lKTsKKworICAgIHRoaXMu
JGd1dHRlciA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLiRndXR0ZXIuY2xh
c3NOYW1lID0gImFjZV9ndXR0ZXIiOworICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuJGd1dHRlcik7CisKKyAgICB0aGlzLnNjcm9sbGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxlciI7CisgICAg
dGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxlcik7CisKKyAgICB0aGlzLmNv
bnRlbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5jb250ZW50LmNsYXNz
TmFtZSA9ICJhY2VfY29udGVudCI7CisgICAgdGhpcy5zY3JvbGxlci5hcHBlbmRDaGlsZCh0aGlz
LmNvbnRlbnQpOworCisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKHRydWUpOworICAg
IHRoaXMuJGd1dHRlckxheWVyID0gbmV3IEd1dHRlckxheWVyKHRoaXMuJGd1dHRlcik7CisgICAg
dGhpcy4kZ3V0dGVyTGF5ZXIub24oImNoYW5nZUd1dHRlcldpZHRoIiwgdGhpcy5vbkd1dHRlclJl
c2l6ZS5iaW5kKHRoaXMpKTsKKworICAgIHRoaXMuJG1hcmtlckJhY2sgPSBuZXcgTWFya2VyTGF5
ZXIodGhpcy5jb250ZW50KTsKKworICAgIHZhciB0ZXh0TGF5ZXIgPSB0aGlzLiR0ZXh0TGF5ZXIg
PSBuZXcgVGV4dExheWVyKHRoaXMuY29udGVudCk7CisgICAgdGhpcy5jYW52YXMgPSB0ZXh0TGF5
ZXIuZWxlbWVudDsKKworICAgIHRoaXMuJG1hcmtlckZyb250ID0gbmV3IE1hcmtlckxheWVyKHRo
aXMuY29udGVudCk7CisKKyAgICB0aGlzLiRjdXJzb3JMYXllciA9IG5ldyBDdXJzb3JMYXllcih0
aGlzLmNvbnRlbnQpOworICAgIHRoaXMuJGhvcml6U2Nyb2xsID0gZmFsc2U7CisgICAgdGhpcy4k
aG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICB0aGlzLiRhbmltYXRlZFNj
cm9sbCA9IGZhbHNlOworCisgICAgdGhpcy5zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFyKHRoaXMu
Y29udGFpbmVyKTsKKyAgICB0aGlzLnNjcm9sbEJhci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwi
LCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICghX3NlbGYuJGluU2Nyb2xsQW5pbWF0aW9uKQor
ICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoZS5kYXRhKTsKKyAgICB9KTsK
KworICAgIHRoaXMuc2Nyb2xsVG9wID0gMDsKKyAgICB0aGlzLnNjcm9sbExlZnQgPSAwOworCisg
ICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5zY3JvbGxlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9zZWxmLnNjcm9sbGVyLnNjcm9sbExlZnQ7Cisg
ICAgICAgIF9zZWxmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICBfc2VsZi5zZXNz
aW9uLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7CisgICAgfSk7CisKKyAgICB0aGlzLmN1cnNv
clBvcyA9IHsKKyAgICAgICAgcm93IDogMCwKKyAgICAgICAgY29sdW1uIDogMAorICAgIH07CisK
KyAgICB0aGlzLiR0ZXh0TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ2hhcmFjdGVyU2l6
ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICBfc2VsZi51cGRhdGVDaGFyYWN0ZXJTaXplKCk7Cisg
ICAgICAgIF9zZWxmLm9uUmVzaXplKHRydWUpOworICAgIH0pOworCisgICAgdGhpcy4kc2l6ZSA9
IHsKKyAgICAgICAgd2lkdGg6IDAsCisgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAgc2Nyb2xs
ZXJIZWlnaHQ6IDAsCisgICAgICAgIHNjcm9sbGVyV2lkdGg6IDAKKyAgICB9OworCisgICAgdGhp
cy5sYXllckNvbmZpZyA9IHsKKyAgICAgICAgd2lkdGggOiAxLAorICAgICAgICBwYWRkaW5nIDog
MCwKKyAgICAgICAgZmlyc3RSb3cgOiAwLAorICAgICAgICBmaXJzdFJvd1NjcmVlbjogMCwKKyAg
ICAgICAgbGFzdFJvdyA6IDAsCisgICAgICAgIGxpbmVIZWlnaHQgOiAxLAorICAgICAgICBjaGFy
YWN0ZXJXaWR0aCA6IDEsCisgICAgICAgIG1pbkhlaWdodCA6IDEsCisgICAgICAgIG1heEhlaWdo
dCA6IDEsCisgICAgICAgIG9mZnNldCA6IDAsCisgICAgICAgIGhlaWdodCA6IDEKKyAgICB9Owor
CisgICAgdGhpcy4kbG9vcCA9IG5ldyBSZW5kZXJMb29wKAorICAgICAgICB0aGlzLiRyZW5kZXJD
aGFuZ2VzLmJpbmQodGhpcyksCisgICAgICAgIHRoaXMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQu
ZGVmYXVsdFZpZXcKKyAgICApOworICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0Vf
RlVMTCk7CisKKyAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUoKTsKKyAgICB0aGlzLnNldFBh
ZGRpbmcoNCk7Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zaG93R3V0dGVyID0gdHJ1
ZTsKKworICAgIHRoaXMuQ0hBTkdFX0NVUlNPUiA9IDE7CisgICAgdGhpcy5DSEFOR0VfTUFSS0VS
ID0gMjsKKyAgICB0aGlzLkNIQU5HRV9HVVRURVIgPSA0OworICAgIHRoaXMuQ0hBTkdFX1NDUk9M
TCA9IDg7CisgICAgdGhpcy5DSEFOR0VfTElORVMgPSAxNjsKKyAgICB0aGlzLkNIQU5HRV9URVhU
ID0gMzI7CisgICAgdGhpcy5DSEFOR0VfU0laRSA9IDY0OworICAgIHRoaXMuQ0hBTkdFX01BUktF
Ul9CQUNLID0gMTI4OworICAgIHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCA9IDI1NjsKKyAgICB0
aGlzLkNIQU5HRV9GVUxMID0gNTEyOworICAgIHRoaXMuQ0hBTkdFX0hfU0NST0xMID0gMTAyNDsK
KworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICAKKyAgICB0aGlz
LnVwZGF0ZUNoYXJhY3RlclNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuJHRl
eHRMYXllci5hbGxvd0JvbGRGb250cyAhPSB0aGlzLiRhbGxvd0JvbGRGb250cykgeworICAgICAg
ICAgICAgdGhpcy4kYWxsb3dCb2xkRm9udHMgPSB0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9u
dHM7CisgICAgICAgICAgICB0aGlzLnNldFN0eWxlKCJhY2Vfbm9ib2xkIiwgIXRoaXMuJGFsbG93
Qm9sZEZvbnRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5jaGFyYWN0ZXJX
aWR0aCA9IHRoaXMuJHRleHRMYXllci5nZXRDaGFyYWN0ZXJXaWR0aCgpOworICAgICAgICB0aGlz
LmxpbmVIZWlnaHQgPSB0aGlzLiR0ZXh0TGF5ZXIuZ2V0TGluZUhlaWdodCgpOworICAgICAgICB0
aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07CisgICAgdGhpcy5zZXRTZXNzaW9uID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAg
ICAgICAKKyAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGVyIjsK
KyAgICAgICAgCisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7
CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAg
dGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kZ3V0
dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLnNl
dFNlc3Npb24oc2Vzc2lvbik7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFO
R0VfRlVMTCk7CisgICAgICAgIAorICAgIH07CisgICAgdGhpcy51cGRhdGVMaW5lcyA9IGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmIChsYXN0Um93ID09PSB1bmRlZmlu
ZWQpCisgICAgICAgICAgICBsYXN0Um93ID0gSW5maW5pdHk7CisKKyAgICAgICAgaWYgKCF0aGlz
LiRjaGFuZ2VkTGluZXMpIHsKKyAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcyA9IHsKKyAg
ICAgICAgICAgICAgICBmaXJzdFJvdzogZmlyc3RSb3csCisgICAgICAgICAgICAgICAgbGFzdFJv
dzogbGFzdFJvdworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPiBmaXJzdFJvdykKKyAg
ICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPSBmaXJzdFJvdzsKKwor
ICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93IDwgbGFzdFJvdykKKyAg
ICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA9IGxhc3RSb3c7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cg
PiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRM
aW5lcy5sYXN0Um93IDwgdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9MSU5FUyk7Cisg
ICAgfTsKKworICAgIHRoaXMub25DaGFuZ2VUYWJTaXplID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCB8IHRoaXMuQ0hBTkdFX01BUktF
Uik7CisgICAgICAgIHRoaXMuJHRleHRMYXllci5vbkNoYW5nZVRhYlNpemUoKTsKKyAgICB9Owor
ICAgIHRoaXMudXBkYXRlVGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRsb29wLnNj
aGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAgIH07CisgICAgdGhpcy51cGRhdGVGdWxsID0g
ZnVuY3Rpb24oZm9yY2UpIHsKKyAgICAgICAgaWYgKGZvcmNlKXsKKyAgICAgICAgICAgIHRoaXMu
JHJlbmRlckNoYW5nZXModGhpcy5DSEFOR0VfRlVMTCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZV
TEwpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUZvbnRTaXplID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuJHRleHRMYXllci5jaGVja0ZvclNpemVDaGFuZ2VzKCk7Cisg
ICAgfTsKKyAgICB0aGlzLm9uUmVzaXplID0gZnVuY3Rpb24oZm9yY2UsIGd1dHRlcldpZHRoLCB3
aWR0aCwgaGVpZ2h0KSB7CisgICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy5DSEFOR0VfU0laRTsK
KyAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplOworCisgICAgICAgIGlmICh0aGlzLnJlc2l6
aW5nID4gMikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5yZXNp
emluZyA+IDEpCisgICAgICAgICAgICB0aGlzLnJlc2l6aW5nKys7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRoaXMucmVzaXppbmcgPSBmb3JjZSA/IDEgOiAwOworICAgICAgICBpZiAoIWhl
aWdodCkKKyAgICAgICAgICAgIGhlaWdodCA9IGRvbS5nZXRJbm5lckhlaWdodCh0aGlzLmNvbnRh
aW5lcik7CisKKyAgICAgICAgaWYgKGhlaWdodCAmJiAoZm9yY2UgfHwgc2l6ZS5oZWlnaHQgIT0g
aGVpZ2h0KSkgeworICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAg
ICAgIHNpemUuc2Nyb2xsZXJIZWlnaHQgPSB0aGlzLnNjcm9sbGVyLmNsaWVudEhlaWdodDsKKyAg
ICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldEhlaWdodChzaXplLnNjcm9sbGVySGVpZ2h0KTsK
KworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikgeworICAgICAgICAgICAgICAgIHRoaXMu
c2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5nZXRTY3JvbGxUb3AoKSk7CisgICAgICAgICAgICAg
ICAgY2hhbmdlcyA9IGNoYW5nZXMgfCB0aGlzLkNIQU5HRV9GVUxMOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gZG9t
LmdldElubmVyV2lkdGgodGhpcy5jb250YWluZXIpOworCisgICAgICAgIGlmICh3aWR0aCAmJiAo
Zm9yY2UgfHwgdGhpcy5yZXNpemluZyA+IDEgfHwgc2l6ZS53aWR0aCAhPSB3aWR0aCkpIHsKKyAg
ICAgICAgICAgIHNpemUud2lkdGggPSB3aWR0aDsKKworICAgICAgICAgICAgdmFyIGd1dHRlcldp
ZHRoID0gdGhpcy5zaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoIDogMDsKKyAg
ICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsK
KyAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gZ3V0
dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpKTsKKyAgICAgICAgICAgIHRoaXMu
c2Nyb2xsZXIuc3R5bGUucmlnaHQgPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpICsgInB4IjsK
KworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMu
YWRqdXN0V3JhcExpbWl0KCkgfHwgZm9yY2UpCisgICAgICAgICAgICAgICAgY2hhbmdlcyA9IGNo
YW5nZXMgfCB0aGlzLkNIQU5HRV9GVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcmNl
KQorICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzLCB0cnVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZShjaGFuZ2VzKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChmb3JjZSkKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlc2l6aW5n
OworICAgIH07CisKKyAgICB0aGlzLm9uR3V0dGVyUmVzaXplID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciB3aWR0aCA9IHRoaXMuJHNpemUud2lkdGg7CisgICAgICAgIHZhciBndXR0ZXJXaWR0
aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7CisgICAg
ICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsKKyAgICAg
ICAgdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJX
aWR0aCAtIHRoaXMuc2Nyb2xsQmFyLmdldFdpZHRoKCkpOworCisgICAgICAgIGlmICh0aGlzLnNl
c3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLmFkanVzdFdyYXBMaW1pdCgpKQorICAgICAg
ICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICB9OworICAg
IHRoaXMuYWRqdXN0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhdmFpbGFi
bGVXaWR0aCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHRoaXMuJHBhZGRpbmcgKiAyOwor
ICAgICAgICB2YXIgbGltaXQgPSBNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoIC8gdGhpcy5jaGFy
YWN0ZXJXaWR0aCk7CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uYWRqdXN0V3JhcExpbWl0
KGxpbWl0KTsKKyAgICB9OworICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbihz
aG91bGRBbmltYXRlKXsKKyAgICAgICAgdGhpcy4kYW5pbWF0ZWRTY3JvbGwgPSBzaG91bGRBbmlt
YXRlOworICAgIH07CisgICAgdGhpcy5nZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kYW5pbWF0ZWRTY3JvbGw7CisgICAgfTsKKyAgICB0aGlzLnNl
dFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oc2hvd0ludmlzaWJsZXMpIHsKKyAgICAgICAgaWYg
KHRoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcykpCisgICAg
ICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAgIH07Cisg
ICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzOworICAgIH07CisKKyAgICB0aGlzLmdldERp
c3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRl
eHRMYXllci5kaXNwbGF5SW5kZW50R3VpZGVzOworICAgIH07CisgICAgCisgICAgdGhpcy5zZXRE
aXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgeworICAgICAgICBpZiAodGhp
cy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoZGlzcGxheSkpCisgICAgICAgICAg
ICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOworICAgIH07CisgICAgCisg
ICAgdGhpcy4kc2hvd1ByaW50TWFyZ2luID0gdHJ1ZTsKKyAgICB0aGlzLnNldFNob3dQcmludE1h
cmdpbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikgeworICAgICAgICB0aGlzLiRzaG93UHJp
bnRNYXJnaW4gPSBzaG93UHJpbnRNYXJnaW47CisgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFy
Z2luKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2luOworICAgIH07CisKKyAgICB0
aGlzLiRwcmludE1hcmdpbkNvbHVtbiA9IDgwOworICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1
bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKKyAgICAgICAgdGhpcy4kcHJpbnRNYXJn
aW5Db2x1bW4gPSBzaG93UHJpbnRNYXJnaW47CisgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFy
Z2luKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbjsKKyAgICB9OworICAg
IHRoaXMuZ2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiB0aGlzLnNo
b3dHdXR0ZXI7CisgICAgfTsKKyAgICB0aGlzLnNldFNob3dHdXR0ZXIgPSBmdW5jdGlvbihzaG93
KXsKKyAgICAgICAgaWYodGhpcy5zaG93R3V0dGVyID09PSBzaG93KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0aGlzLiRndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAiYmxvY2si
IDogIm5vbmUiOworICAgICAgICB0aGlzLnNob3dHdXR0ZXIgPSBzaG93OworICAgICAgICB0aGlz
Lm9uUmVzaXplKHRydWUpOworICAgIH07CisKKyAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0cyA9
IGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBkb20uaGFzQ3NzQ2xhc3ModGhpcy4kZ3V0dGVy
LCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7CisgICAgfTsKKworICAgIHRoaXMuc2V0RmFkZUZv
bGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAgICAgICBpZiAoc2hvdykKKyAgICAgICAg
ICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsICJhY2VfZmFkZS1mb2xkLXdpZGdldHMi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuJGd1
dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOworICAgIH07CisKKyAgICB0aGlzLiRoaWdo
bGlnaHRHdXR0ZXJMaW5lID0gZmFsc2U7CisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5l
ID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRoaWdobGln
aHRHdXR0ZXJMaW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IHNob3VsZEhpZ2hsaWdodDsKKworICAg
ICAgICBpZiAoIXRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMu
JGd1dHRlckxpbmVIaWdobGlnaHQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
ICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyLWFj
dGl2ZS1saW5lIjsKKyAgICAgICAgICAgIHRoaXMuJGd1dHRlci5hcHBlbmRDaGlsZCh0aGlzLiRn
dXR0ZXJMaW5lSGlnaGxpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUuZGlzcGxheSA9IHNob3VsZEhp
Z2hsaWdodCA/ICIiIDogIm5vbmUiOworICAgICAgICBpZiAodGhpcy4kY3Vyc29yTGF5ZXIuJHBp
eGVsUG9zKQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOwor
ICAgIH07CisKKyAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU7CisgICAgfTsKKworICAg
IHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS50b3AgPSB0aGlzLiRjdXJzb3JMYXllci4k
cGl4ZWxQb3MudG9wIC0gdGhpcy5sYXllckNvbmZpZy5vZmZzZXQgKyAicHgiOworICAgICAgICB0
aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmhlaWdodCA9IHRoaXMubGF5ZXJDb25maWcu
bGluZUhlaWdodCArICJweCI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLiR1cGRhdGVQcmludE1h
cmdpbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJHNob3dQcmludE1hcmdpbiAm
JiAhdGhpcy4kcHJpbnRNYXJnaW5FbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoIXRoaXMuJHByaW50TWFyZ2luRWwpIHsKKyAgICAgICAgICAgIHZhciBjb250YWluZXJFbCA9
IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lckVsLmNsYXNz
TmFtZSA9ICJhY2VfbGF5ZXIgYWNlX3ByaW50LW1hcmdpbi1sYXllciI7CisgICAgICAgICAgICB0
aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg
ICAgdGhpcy4kcHJpbnRNYXJnaW5FbC5jbGFzc05hbWUgPSAiYWNlX3ByaW50LW1hcmdpbiI7Cisg
ICAgICAgICAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZCh0aGlzLiRwcmludE1hcmdpbkVsKTsK
KyAgICAgICAgICAgIHRoaXMuY29udGVudC5pbnNlcnRCZWZvcmUoY29udGFpbmVyRWwsIHRoaXMu
Y29udGVudC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdHlsZSA9IHRo
aXMuJHByaW50TWFyZ2luRWwuc3R5bGU7CisgICAgICAgIHN0eWxlLmxlZnQgPSAoKHRoaXMuY2hh
cmFjdGVyV2lkdGggKiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbikgKyB0aGlzLiRwYWRkaW5nKSAr
ICJweCI7CisgICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLiRzaG93UHJpbnRNYXJnaW4g
PyAidmlzaWJsZSIgOiAiaGlkZGVuIjsKKyAgICB9OworICAgIHRoaXMuZ2V0Q29udGFpbmVyRWxl
bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CisgICAg
fTsKKyAgICB0aGlzLmdldE1vdXNlRXZlbnRUYXJnZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuY29udGVudDsKKyAgICB9OworICAgIHRoaXMuZ2V0VGV4dEFyZWFDb250YWlu
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOworICAgIH07
CisgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKCF0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdmFyIGNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7CisgICAgICAgIHZhciBwb3NUb3Ag
PSB0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MudG9wOworICAgICAgICB2YXIgcG9zTGVmdCA9
IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy5sZWZ0OworICAgICAgICBwb3NUb3AgLT0gY29u
ZmlnLm9mZnNldDsKKworICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBjb25maWcu
aGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZhciB3ID0gdGhpcy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgaWYgKHRoaXMuJGNvbXBvc2l0
aW9uKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy50ZXh0YXJlYS52YWx1ZS5yZXBsYWNl
KC9eXHgwMSsvLCAiIik7CisgICAgICAgICAgICB3ICo9IHRoaXMuc2Vzc2lvbi4kZ2V0U3RyaW5n
U2NyZWVuV2lkdGgodmFsKVswXTsKKyAgICAgICAgfQorICAgICAgICBwb3NMZWZ0IC09IHRoaXMu
c2Nyb2xsTGVmdDsKKyAgICAgICAgaWYgKHBvc0xlZnQgPiB0aGlzLiRzaXplLnNjcm9sbGVyV2lk
dGggLSB3KQorICAgICAgICAgICAgcG9zTGVmdCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAt
IHc7CisKKyAgICAgICAgcG9zTGVmdCAtPSB0aGlzLnNjcm9sbEJhci53aWR0aDsKKworICAgICAg
ICB0aGlzLnRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRoaXMubGluZUhlaWdodCArICJweCI7Cisg
ICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUud2lkdGggPSB3ICsgInB4IjsKKyAgICAgICAgdGhp
cy50ZXh0YXJlYS5zdHlsZS5yaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHBvc0xl
ZnQgLSB3ICsgInB4IjsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5ib3R0b20gPSB0aGlz
LiRzaXplLmhlaWdodCAtIHBvc1RvcCAtIHRoaXMubGluZUhlaWdodCArICJweCI7CisgICAgfTsK
KyAgICB0aGlzLmdldEZpcnN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdzsKKyAgICB9OworICAgIHRoaXMuZ2V0Rmlyc3RG
dWxseVZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJD
b25maWcuZmlyc3RSb3cgKyAodGhpcy5sYXllckNvbmZpZy5vZmZzZXQgPT09IDAgPyAwIDogMSk7
CisgICAgfTsKKyAgICB0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGZsaW50ID0gTWF0aC5mbG9vcigodGhpcy5sYXllckNvbmZpZy5oZWlnaHQg
KyB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCkgLyB0aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQp
OworICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyAtIDEgKyBmbGludDsK
KyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcubGFzdFJvdzsKKyAgICB9OworCisgICAgdGhpcy4k
cGFkZGluZyA9IG51bGw7CisgICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykg
eworICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZzsKKyAgICAgICAgdGhpcy4kdGV4dExh
eWVyLnNldFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFBh
ZGRpbmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldFBhZGRpbmcocGFk
ZGluZyk7CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAg
ICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICAgICAgdGhp
cy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0SFNjcm9sbEJhckFs
d2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhvcml6U2Ny
b2xsQWx3YXlzVmlzaWJsZTsKKyAgICB9OworICAgIHRoaXMuc2V0SFNjcm9sbEJhckFsd2F5c1Zp
c2libGUgPSBmdW5jdGlvbihhbHdheXNWaXNpYmxlKSB7CisgICAgICAgIGlmICh0aGlzLiRob3Jp
elNjcm9sbEFsd2F5c1Zpc2libGUgIT0gYWx3YXlzVmlzaWJsZSkgeworICAgICAgICAgICAgdGhp
cy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlID0gYWx3YXlzVmlzaWJsZTsKKyAgICAgICAgICAg
IGlmICghdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiRob3JpelNjcm9s
bCkKKyAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9M
TCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldElubmVySGVpZ2h0KHRoaXMubGF5
ZXJDb25maWcubWF4SGVpZ2h0KTsKKyAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0U2Nyb2xsVG9w
KHRoaXMuc2Nyb2xsVG9wKTsKKyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyA9IGZ1
bmN0aW9uKGNoYW5nZXMsIGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgKCFjaGFuZ2Vz
IHx8ICF0aGlzLnNlc3Npb24gfHwgIXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9GVUxMIHx8
CisgICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0laRSB8fAorICAgICAgICAgICAg
Y2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwKKyAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlz
LkNIQU5HRV9MSU5FUyB8fAorICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NDUk9M
TAorICAgICAgICApCisgICAgICAgICAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTsKKyAg
ICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTCkgeworICAgICAgICAgICAg
dGhpcy5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OworICAgICAgICAgICAg
dmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQ7CisgICAgICAgICAgICB0
aGlzLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNl
dFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7CisKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuY2xh
c3NOYW1lID0gdGhpcy5zY3JvbGxMZWZ0ID09IDAgPyAiYWNlX3Njcm9sbGVyIiA6ICJhY2Vfc2Ny
b2xsZXIgYWNlX3Njcm9sbC1sZWZ0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX0ZVTEwpIHsKKyAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci5jaGVja0Zv
clNpemVDaGFuZ2VzKCk7CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKKyAg
ICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAg
ICAgICAgICBpZiAodGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRl
ckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1hcmtl
ckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbWFya2Vy
RnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kY3Vyc29y
TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbW92ZVRl
eHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUg
JiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NST0xMKSB7
CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKKyAgICAgICAgICAgIGlmIChj
aGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfTElORVMp
CisgICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmln
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2Ny
b2xsTGluZXModGhpcy5sYXllckNvbmZpZyk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dH
dXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5
ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUodGhpcy5sYXll
ckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhpcy5sYXll
ckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXll
ckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAg
ICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJM
aW5lSGlnaGxpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQpIHsKKyAgICAgICAgICAgIHRoaXMuJHRl
eHRMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICBpZiAodGhpcy5z
aG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlz
LmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaGFuZ2VzICYgdGhp
cy5DSEFOR0VfTElORVMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiR1cGRhdGVMaW5lcygpIHx8
IChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSAmJiB0aGlzLnNob3dHdXR0ZXIpCisgICAg
ICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8
IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNo
b3dHdXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMu
bGF5ZXJDb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNI
QU5HRV9DVVJTT1IpIHsKKyAgICAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlz
LmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7
CisgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1
dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VzICYg
KHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCkpIHsKKyAgICAg
ICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMu
Q0hBTkdFX01BUktFUl9CQUNLKSkgeworICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRh
dGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX1NJWkUpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsK
KyAgICB9OworCisgICAgdGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIHZhciBvZmZzZXQg
PSB0aGlzLnNjcm9sbFRvcCAlIHRoaXMubGluZUhlaWdodDsKKyAgICAgICAgdmFyIG1pbkhlaWdo
dCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgKyB0aGlzLmxpbmVIZWlnaHQ7CisKKyAgICAg
ICAgdmFyIGxvbmdlc3RMaW5lID0gdGhpcy4kZ2V0TG9uZ2VzdExpbmUoKTsKKworICAgICAgICB2
YXIgaG9yaXpTY3JvbGwgPSB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgfHwgdGhpcy4k
c2l6ZS5zY3JvbGxlcldpZHRoIC0gbG9uZ2VzdExpbmUgPCAwOworICAgICAgICB2YXIgaG9yaXpT
Y3JvbGxDaGFuZ2VkID0gdGhpcy4kaG9yaXpTY3JvbGwgIT09IGhvcml6U2Nyb2xsOworICAgICAg
ICB0aGlzLiRob3JpelNjcm9sbCA9IGhvcml6U2Nyb2xsOworICAgICAgICBpZiAoaG9yaXpTY3Jv
bGxDaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93WCA9
IGhvcml6U2Nyb2xsID8gInNjcm9sbCIgOiAiaGlkZGVuIjsKKyAgICAgICAgICAgIGlmICghaG9y
aXpTY3JvbGwpCisgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoMCk7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1heEhlaWdodCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3Jl
ZW5MZW5ndGgoKSAqIHRoaXMubGluZUhlaWdodDsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbFRvcChNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLnNjcm9sbFRvcCwgbWF4SGVpZ2h0IC0g
dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkpKTsKKworICAgICAgICB2YXIgbGluZUNvdW50ID0g
TWF0aC5jZWlsKG1pbkhlaWdodCAvIHRoaXMubGluZUhlaWdodCkgLSAxOworICAgICAgICB2YXIg
Zmlyc3RSb3cgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLnNjcm9sbFRvcCAtIG9mZnNl
dCkgLyB0aGlzLmxpbmVIZWlnaHQpKTsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBmaXJzdFJvdyAr
IGxpbmVDb3VudDsKKyAgICAgICAgdmFyIGZpcnN0Um93U2NyZWVuLCBmaXJzdFJvd0hlaWdodDsK
KyAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7CisgICAgICAgIGZpcnN0
Um93ID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGZpcnN0Um93LCAwKTsKKyAgICAgICAg
dmFyIGZvbGRMaW5lID0gc2Vzc2lvbi5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgIGlm
IChmb2xkTGluZSkgeworICAgICAgICAgICAgZmlyc3RSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7
CisgICAgICAgIH0KKworICAgICAgICBmaXJzdFJvd1NjcmVlbiA9IHNlc3Npb24uZG9jdW1lbnRU
b1NjcmVlblJvdyhmaXJzdFJvdywgMCk7CisgICAgICAgIGZpcnN0Um93SGVpZ2h0ID0gc2Vzc2lv
bi5nZXRSb3dMZW5ndGgoZmlyc3RSb3cpICogbGluZUhlaWdodDsKKworICAgICAgICBsYXN0Um93
ID0gTWF0aC5taW4oc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGxhc3RSb3csIDApLCBzZXNz
aW9uLmdldExlbmd0aCgpIC0gMSk7CisgICAgICAgIG1pbkhlaWdodCA9IHRoaXMuJHNpemUuc2Ny
b2xsZXJIZWlnaHQgKyBzZXNzaW9uLmdldFJvd0xlbmd0aChsYXN0Um93KSAqIGxpbmVIZWlnaHQg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RS
b3dIZWlnaHQ7CisKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgLSBmaXJzdFJvd1Nj
cmVlbiAqIGxpbmVIZWlnaHQ7CisKKyAgICAgICAgdGhpcy5sYXllckNvbmZpZyA9IHsKKyAgICAg
ICAgICAgIHdpZHRoIDogbG9uZ2VzdExpbmUsCisgICAgICAgICAgICBwYWRkaW5nIDogdGhpcy4k
cGFkZGluZywKKyAgICAgICAgICAgIGZpcnN0Um93IDogZmlyc3RSb3csCisgICAgICAgICAgICBm
aXJzdFJvd1NjcmVlbjogZmlyc3RSb3dTY3JlZW4sCisgICAgICAgICAgICBsYXN0Um93IDogbGFz
dFJvdywKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgOiBsaW5lSGVpZ2h0LAorICAgICAgICAgICAg
Y2hhcmFjdGVyV2lkdGggOiB0aGlzLmNoYXJhY3RlcldpZHRoLAorICAgICAgICAgICAgbWluSGVp
Z2h0IDogbWluSGVpZ2h0LAorICAgICAgICAgICAgbWF4SGVpZ2h0IDogbWF4SGVpZ2h0LAorICAg
ICAgICAgICAgb2Zmc2V0IDogb2Zmc2V0LAorICAgICAgICAgICAgaGVpZ2h0IDogdGhpcy4kc2l6
ZS5zY3JvbGxlckhlaWdodAorICAgICAgICB9OworCisgICAgICAgIHRoaXMuJGd1dHRlckxheWVy
LmVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gKC1vZmZzZXQpICsgInB4IjsKKyAgICAgICAgdGhp
cy5jb250ZW50LnN0eWxlLm1hcmdpblRvcCA9ICgtb2Zmc2V0KSArICJweCI7CisgICAgICAgIHRo
aXMuY29udGVudC5zdHlsZS53aWR0aCA9IGxvbmdlc3RMaW5lICsgMiAqIHRoaXMuJHBhZGRpbmcg
KyAicHgiOworICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gbWluSGVpZ2h0ICsg
InB4IjsKKyAgICAgICAgaWYgKGhvcml6U2Nyb2xsQ2hhbmdlZCkKKyAgICAgICAgICAgIHRoaXMu
b25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZUxpbmVzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBmaXJzdFJvdyA9IHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJv
dzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdzsKKyAg
ICAgICAgdGhpcy4kY2hhbmdlZExpbmVzID0gbnVsbDsKKworICAgICAgICB2YXIgbGF5ZXJDb25m
aWcgPSB0aGlzLmxheWVyQ29uZmlnOworCisgICAgICAgIGlmIChmaXJzdFJvdyA+IGxheWVyQ29u
ZmlnLmxhc3RSb3cgKyAxKSB7IHJldHVybjsgfQorICAgICAgICBpZiAobGFzdFJvdyA8IGxheWVy
Q29uZmlnLmZpcnN0Um93KSB7IHJldHVybjsgfQorICAgICAgICBpZiAobGFzdFJvdyA9PT0gSW5m
aW5pdHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICAg
ICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRo
aXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZp
ZywgZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisg
ICAgdGhpcy4kZ2V0TG9uZ2VzdExpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNoYXJD
b3VudCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpOworICAgICAgICBpZiAodGhpcy4k
dGV4dExheWVyLnNob3dJbnZpc2libGVzKQorICAgICAgICAgICAgY2hhckNvdW50ICs9IDE7CisK
KyAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIDIgKiB0
aGlzLiRwYWRkaW5nLCBNYXRoLnJvdW5kKGNoYXJDb3VudCAqIHRoaXMuY2hhcmFjdGVyV2lkdGgp
KTsKKyAgICB9OworICAgIHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtl
cnModHJ1ZSkpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX01BUktF
Ul9GUk9OVCk7CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUJhY2tNYXJrZXJzID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0
TWFya2VycygpKTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJL
RVJfQkFDSyk7CisgICAgfTsKKyAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlv
bihyb3csIGNsYXNzTmFtZSl7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLmFkZEd1dHRlckRl
Y29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisgICAgdGhpcy5yZW1vdmVHdXR0ZXJE
ZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICB0aGlzLiRndXR0
ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKKyAgICB9Owor
ICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludHMgPSBmdW5jdGlvbihyb3dzKSB7CisgICAgICAgIHRo
aXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKKyAgICB9OworICAgIHRoaXMu
c2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykgeworICAgICAgICB0aGlzLiRn
dXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CisgICAgICAgIHRoaXMuJGxv
b3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKKyAgICB9OworICAgIHRoaXMudXBkYXRl
Q3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5D
SEFOR0VfQ1VSU09SKTsKKyAgICB9OworICAgIHRoaXMuaGlkZUN1cnNvciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0
aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIu
c2hvd0N1cnNvcigpOworICAgIH07CisKKyAgICB0aGlzLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3
ID0gZnVuY3Rpb24oYW5jaG9yLCBsZWFkLCBvZmZzZXQpIHsKKyAgICAgICAgdGhpcy5zY3JvbGxD
dXJzb3JJbnRvVmlldyhhbmNob3IsIG9mZnNldCk7CisgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29y
SW50b1ZpZXcobGVhZCwgb2Zmc2V0KTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50
b1ZpZXcgPSBmdW5jdGlvbihjdXJzb3IsIG9mZnNldCkgeworICAgICAgICBpZiAodGhpcy4kc2l6
ZS5zY3JvbGxlckhlaWdodCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihjdXJzb3IpOworCisg
ICAgICAgIHZhciBsZWZ0ID0gcG9zLmxlZnQ7CisgICAgICAgIHZhciB0b3AgPSBwb3MudG9wOwor
CisgICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCA+IHRvcCkgeworICAgICAgICAgICAgaWYgKG9m
ZnNldCkKKyAgICAgICAgICAgICAgICB0b3AgLT0gb2Zmc2V0ICogdGhpcy4kc2l6ZS5zY3JvbGxl
ckhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9wKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWln
aHQgPCB0b3AgKyB0aGlzLmxpbmVIZWlnaHQpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQpCisg
ICAgICAgICAgICAgICAgdG9wICs9IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7
CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCArIHRoaXMubGluZUhl
aWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7CisKKyAgICAgICAgaWYgKHNjcm9sbExl
ZnQgPiBsZWZ0KSB7CisgICAgICAgICAgICBpZiAobGVmdCA8IHRoaXMuJHBhZGRpbmcgKyAyICog
dGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCkKKyAgICAgICAgICAgICAgICBsZWZ0ID0g
MDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGxlZnQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggPCBsZWZ0
ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbExlZnQoTWF0aC5yb3VuZChsZWZ0ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCAtIHRoaXMuJHNp
emUuc2Nyb2xsZXJXaWR0aCkpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9s
bFRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9s
bFRvcCgpOworICAgIH07CisgICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpOworICAgIH07CisgICAg
dGhpcy5nZXRTY3JvbGxUb3BSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
c2Nyb2xsVG9wIC8gdGhpcy5saW5lSGVpZ2h0OworICAgIH07CisgICAgdGhpcy5nZXRTY3JvbGxC
b3R0b21Sb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgu
Zmxvb3IoKHRoaXMuc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkgLyB0aGlz
LmxpbmVIZWlnaHQpIC0gMSk7CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvUm93ID0gZnVuY3Rp
b24ocm93KSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocm93ICogdGhpcy5s
aW5lSGVpZ2h0KTsKKyAgICB9OworCisgICAgdGhpcy5hbGlnbkN1cnNvciA9IGZ1bmN0aW9uKGN1
cnNvciwgYWxpZ25tZW50KSB7CisgICAgICAgIGlmICh0eXBlb2YgY3Vyc29yID09ICJudW1iZXIi
KQorICAgICAgICAgICAgY3Vyc29yID0ge3JvdzogY3Vyc29yLCBjb2x1bW46IDB9OworCisgICAg
ICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7
CisgICAgICAgIHZhciBoID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhl
aWdodDsKKyAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3AgLSBoICogKGFsaWdubWVudCB8fCAw
KTsKKworICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9mZnNldCk7CisgICAgICAg
IHJldHVybiBvZmZzZXQ7CisgICAgfTsKKworICAgIHRoaXMuU1RFUFMgPSA4OworICAgIHRoaXMu
JGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7CisgICAgICAgIHZhciBp
ID0gMDsKKyAgICAgICAgdmFyIGwgPSB0aGlzLlNURVBTOworICAgICAgICB2YXIgc3RlcHMgPSBb
XTsKKworICAgICAgICB2YXIgZnVuYyAgPSBmdW5jdGlvbih0LCB4X21pbiwgZHgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWluOworICAg
ICAgICB9OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpCisgICAgICAgICAgICBz
dGVwcy5wdXNoKGZ1bmMoaSAvIHRoaXMuU1RFUFMsIGZyb21WYWx1ZSwgdG9WYWx1ZSAtIGZyb21W
YWx1ZSkpOworCisgICAgICAgIHJldHVybiBzdGVwczsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xs
VG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykgeworICAg
ICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBs
aW5lLCBjb2x1bW46IDB9KTsKKyAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3A7CisgICAgICAg
IGlmIChjZW50ZXIpCisgICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3JvbGxlckhl
aWdodCAvIDI7CisKKyAgICAgICAgdmFyIGluaXRpYWxTY3JvbGwgPSB0aGlzLnNjcm9sbFRvcDsK
KyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpOworICAgICAgICBpZiAo
YW5pbWF0ZSAhPT0gZmFsc2UpCisgICAgICAgICAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcoaW5p
dGlhbFNjcm9sbCwgY2FsbGJhY2spOworICAgIH07CisKKyAgICB0aGlzLmFuaW1hdGVTY3JvbGxp
bmcgPSBmdW5jdGlvbihmcm9tVmFsdWUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciB0b1ZhbHVl
ID0gdGhpcy5zY3JvbGxUb3A7CisgICAgICAgIGlmICh0aGlzLiRhbmltYXRlZFNjcm9sbCAmJiBN
YXRoLmFicyhmcm9tVmFsdWUgLSB0b1ZhbHVlKSA8IDEwMDAwMCkgeworICAgICAgICAgICAgdmFy
IF9zZWxmID0gdGhpczsKKyAgICAgICAgICAgIHZhciBzdGVwcyA9IF9zZWxmLiRjYWxjU3RlcHMo
ZnJvbVZhbHVlLCB0b1ZhbHVlKTsKKyAgICAgICAgICAgIHRoaXMuJGluU2Nyb2xsQW5pbWF0aW9u
ID0gdHJ1ZTsKKworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiR0aW1lcik7CisKKyAg
ICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOworICAg
ICAgICAgICAgdGhpcy4kdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RlcHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNl
c3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOworICAgICAgICAgICAgICAgICAgICBf
c2VsZi5zZXNzaW9uLiRzY3JvbGxUb3AgPSB0b1ZhbHVlOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodG9WYWx1ZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Np
b24uJHNjcm9sbFRvcCA9IC0xOworICAgICAgICAgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNl
dFNjcm9sbFRvcCh0b1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9WYWx1ZSA9IG51bGw7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX3NlbGYuJHRp
bWVyID0gY2xlYXJJbnRlcnZhbChfc2VsZi4kdGltZXIpOworICAgICAgICAgICAgICAgICAgICBf
c2VsZi4kaW5TY3JvbGxBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgJiYgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCAx
MCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2Nyb2xsVG9ZID0gZnVuY3Rpb24oc2Ny
b2xsVG9wKSB7CisgICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCAhPT0gc2Nyb2xsVG9wKSB7Cisg
ICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7CisgICAg
ICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdGhpcy5zY3JvbGxUb1ggPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7CisgICAgICAgIGlmIChz
Y3JvbGxMZWZ0IDwgMCkKKyAgICAgICAgICAgIHNjcm9sbExlZnQgPSAwOworCisgICAgICAgIGlm
ICh0aGlzLnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpCisgICAgICAgICAgICB0aGlzLnNjcm9s
bExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0hfU0NST0xMKTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlvbihkZWx0
YVgsIGRlbHRhWSkgeworICAgICAgICBkZWx0YVkgJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRv
cCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyBkZWx0YVkpOworICAgICAgICBkZWx0YVgg
JiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQo
KSArIGRlbHRhWCk7CisgICAgfTsKKyAgICB0aGlzLmlzU2Nyb2xsYWJsZUJ5ID0gZnVuY3Rpb24o
ZGVsdGFYLCBkZWx0YVkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8IDAgJiYgdGhpcy5zZXNzaW9u
LmdldFNjcm9sbFRvcCgpID4gMCkKKyAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
IChkZWx0YVkgPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIHRoaXMuJHNpemUu
c2Nyb2xsZXJIZWlnaHQgPCB0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCkKKyAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVz
ID0gZnVuY3Rpb24oeCwgeSkgeworICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5zY3JvbGxl
ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB2YXIgb2Zmc2V0ID0gKHggKyB0
aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8gdGhpcy5j
aGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgdmFyIHJvdyA9IE1hdGguZmxvb3IoKHkgKyB0aGlzLnNj
cm9sbFRvcCAtIGNhbnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0KTsKKyAgICAgICAgdmFy
IGNvbCA9IE1hdGgucm91bmQob2Zmc2V0KTsKKworICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBj
b2x1bW46IGNvbCwgc2lkZTogb2Zmc2V0IC0gY29sID4gMCA/IDEgOiAtMX07CisgICAgfTsKKwor
ICAgIHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7CisgICAg
ICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworCisgICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKAorICAgICAgICAgICAgKHggKyB0aGlz
LnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8gdGhpcy5jaGFy
YWN0ZXJXaWR0aAorICAgICAgICApOworICAgICAgICB2YXIgcm93ID0gTWF0aC5mbG9vcigKKyAg
ICAgICAgICAgICh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGlu
ZUhlaWdodAorICAgICAgICApOworCisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2NyZWVu
VG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgTWF0aC5tYXgoY29sLCAwKSk7CisgICAgfTsKKyAgICB0
aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAg
ICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0
aW9uKHJvdywgY29sdW1uKTsKKworICAgICAgICB2YXIgeCA9IHRoaXMuJHBhZGRpbmcgKyBNYXRo
LnJvdW5kKHBvcy5jb2x1bW4gKiB0aGlzLmNoYXJhY3RlcldpZHRoKTsKKyAgICAgICAgdmFyIHkg
PSBwb3Mucm93ICogdGhpcy5saW5lSGVpZ2h0OworCisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBwYWdlWDogY2FudmFzUG9zLmxlZnQgKyB4IC0gdGhpcy5zY3JvbGxMZWZ0LAorICAgICAg
ICAgICAgcGFnZVk6IGNhbnZhc1Bvcy50b3AgKyB5IC0gdGhpcy5zY3JvbGxUb3AKKyAgICAgICAg
fTsKKyAgICB9OworICAgIHRoaXMudmlzdWFsaXplRm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7CisgICAgfTsK
KyAgICB0aGlzLnZpc3VhbGl6ZUJsdXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZG9tLnJlbW92
ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7CisgICAgfTsKKyAgICB0aGlz
LnNob3dDb21wb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIGlmICghdGhp
cy4kY29tcG9zaXRpb24pCisgICAgICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IHsKKyAgICAg
ICAgICAgICAgICBrZWVwVGV4dEFyZWFBdEN1cnNvcjogdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJz
b3IsCisgICAgICAgICAgICAgICAgY3NzVGV4dDogdGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0
CisgICAgICAgICAgICB9OworCisgICAgICAgIHRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0g
dHJ1ZTsKKyAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJhY2VfY29tcG9z
aXRpb24iKTsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0ID0gIiI7CisgICAg
ICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlzLnNldENv
bXBvc2l0aW9uVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdGhpcy4kbW92ZVRleHRB
cmVhVG9DdXJzb3IoKTsKKyAgICB9OworICAgIHRoaXMuaGlkZUNvbXBvc2l0aW9uID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICghdGhpcy4kY29tcG9zaXRpb24pCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJhY2VfY29t
cG9zaXRpb24iKTsKKyAgICAgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0aGlzLiRj
b21wb3NpdGlvbi5rZWVwVGV4dEFyZWFBdEN1cnNvcjsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5z
dHlsZS5jc3NUZXh0ID0gdGhpcy4kY29tcG9zaXRpb24uY3NzVGV4dDsKKyAgICAgICAgdGhpcy4k
Y29tcG9zaXRpb24gPSBudWxsOworICAgIH07CisKKyAgICB0aGlzLl9sb2FkVGhlbWUgPSBmdW5j
dGlvbihuYW1lLCBjYWxsYmFjaykgeworICAgICAgICAKKyAgICB9OworICAgIHRoaXMuc2V0VGhl
bWUgPSBmdW5jdGlvbih0aGVtZSkgeworICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAg
ICB0aGlzLiR0aGVtZVZhbHVlID0gdGhlbWU7CisgICAgICAgIF9zZWxmLl9kaXNwYXRjaEV2ZW50
KCd0aGVtZUNoYW5nZScse3RoZW1lOnRoZW1lfSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRo
ZW1lIHx8IHR5cGVvZiB0aGVtZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgdmFyIG1vZHVs
ZU5hbWUgPSB0aGVtZSB8fCAiYWNlL3RoZW1lL3RleHRtYXRlIjsKKyAgICAgICAgICAgIGNvbmZp
Zy5sb2FkTW9kdWxlKFsidGhlbWUiLCBtb2R1bGVOYW1lXSwgYWZ0ZXJMb2FkKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGFmdGVyTG9hZCh0aGVtZSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBhZnRlckxvYWQodGhlbWUpIHsKKyAgICAgICAgICAgIGRvbS5pbXBvcnRD
c3NTdHJpbmcoCisgICAgICAgICAgICAgICAgdGhlbWUuY3NzVGV4dCwKKyAgICAgICAgICAgICAg
ICB0aGVtZS5jc3NDbGFzcywKKyAgICAgICAgICAgICAgICBfc2VsZi5jb250YWluZXIub3duZXJE
b2N1bWVudAorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgaWYgKF9zZWxmLnRoZW1lKQor
ICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyhfc2VsZi5jb250YWluZXIsIF9zZWxm
LnRoZW1lLmNzc0NsYXNzKTsKKyAgICAgICAgICAgIF9zZWxmLiR0aGVtZSA9IHRoZW1lLmNzc0Ns
YXNzOworCisgICAgICAgICAgICBfc2VsZi50aGVtZSA9IHRoZW1lOworICAgICAgICAgICAgZG9t
LmFkZENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgdGhlbWUuY3NzQ2xhc3MpOworICAgICAgICAg
ICAgZG9tLnNldENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgImFjZV9kYXJrIiwgdGhlbWUuaXNE
YXJrKTsKKworICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGVtZS5wYWRkaW5nIHx8IDQ7Cisg
ICAgICAgICAgICBpZiAoX3NlbGYuJHBhZGRpbmcgJiYgcGFkZGluZyAhPSBfc2VsZi4kcGFkZGlu
ZykKKyAgICAgICAgICAgICAgICBfc2VsZi5zZXRQYWRkaW5nKHBhZGRpbmcpOworICAgICAgICAg
ICAgaWYgKF9zZWxmLiRzaXplKSB7CisgICAgICAgICAgICAgICAgX3NlbGYuJHNpemUud2lkdGgg
PSAwOworICAgICAgICAgICAgICAgIF9zZWxmLm9uUmVzaXplKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIF9zZWxmLl9kaXNwYXRjaEV2ZW50KCd0aGVtZUxvYWRl
ZCcse3RoZW1lOnRoZW1lfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0VGhlbWUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRoZW1lVmFsdWU7CisgICAgfTsK
KyAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24gc2V0U3R5bGUoc3R5bGUsIGluY2x1ZGUpIHsK
KyAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSwgaW5jbHVkZSAh
PSBmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLnVuc2V0U3R5bGUgPSBmdW5jdGlvbiB1bnNldFN0
eWxlKHN0eWxlKSB7CisgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwg
c3R5bGUpOworICAgIH07CisgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJHRleHRMYXllci5kZXN0cm95KCk7CisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmRl
c3Ryb3koKTsKKyAgICB9OworCit9KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpOwor
CitleHBvcnRzLlZpcnR1YWxSZW5kZXJlciA9IFZpcnR1YWxSZW5kZXJlcjsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbGF5ZXIvZ3V0dGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvbGliL2RvbScsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xp
Yi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cit2YXIgb29wID0gcmVxdWlyZSgi
Li4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIEV2
ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVy
OworCit2YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKKyAgICB0aGlzLmVsZW1lbnQg
PSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9
ICJhY2VfbGF5ZXIgYWNlX2d1dHRlci1sYXllciI7CisgICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQo
dGhpcy5lbGVtZW50KTsKKyAgICB0aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRzaG93Rm9s
ZFdpZGdldHMpOworICAgIAorICAgIHRoaXMuZ3V0dGVyV2lkdGggPSAwOworCisgICAgdGhpcy4k
YW5ub3RhdGlvbnMgPSBbXTsKKyAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IHRoaXMuJHVw
ZGF0ZUFubm90YXRpb25zLmJpbmQodGhpcyk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICBv
b3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlzLnNldFNlc3Npb24g
PSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24pCisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kdXBk
YXRlQW5ub3RhdGlvbnMpOworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgICAg
ICBzZXNzaW9uLm9uKCJjaGFuZ2UiLCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7CisgICAgfTsK
KworICAgIHRoaXMuYWRkR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1l
KXsKKyAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKQorICAgICAgICAgICAgY29uc29sZS53YXJu
ICYmIGNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0
aW9uIik7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xh
c3NOYW1lKTsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVu
Y3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpCisgICAg
ICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVzZSBzZXNz
aW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24iKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92
ZUd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisKKyAgICB0aGlzLnNl
dEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kYW5u
b3RhdGlvbnMgPSBbXQorICAgICAgICB2YXIgcm93SW5mbywgcm93OworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFubm90YXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
YW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldOworICAgICAgICAgICAgdmFyIHJvdyA9IGFubm90
YXRpb24ucm93OworICAgICAgICAgICAgdmFyIHJvd0luZm8gPSB0aGlzLiRhbm5vdGF0aW9uc1ty
b3ddOworICAgICAgICAgICAgaWYgKCFyb3dJbmZvKQorICAgICAgICAgICAgICAgIHJvd0luZm8g
PSB0aGlzLiRhbm5vdGF0aW9uc1tyb3ddID0ge3RleHQ6IFtdfTsKKyAgICAgICAgICAgCisgICAg
ICAgICAgICB2YXIgYW5ub1RleHQgPSBhbm5vdGF0aW9uLnRleHQ7CisgICAgICAgICAgICBhbm5v
VGV4dCA9IGFubm9UZXh0ID8gbGFuZy5lc2NhcGVIVE1MKGFubm9UZXh0KSA6IGFubm90YXRpb24u
aHRtbCB8fCAiIjsKKworICAgICAgICAgICAgaWYgKHJvd0luZm8udGV4dC5pbmRleE9mKGFubm9U
ZXh0KSA9PT0gLTEpCisgICAgICAgICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5ub1RleHQp
OworCisgICAgICAgICAgICB2YXIgdHlwZSA9IGFubm90YXRpb24udHlwZTsKKyAgICAgICAgICAg
IGlmICh0eXBlID09ICJlcnJvciIpCisgICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUg
PSAiIGFjZV9lcnJvciI7CisgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09ICJ3YXJuaW5nIiAm
JiByb3dJbmZvLmNsYXNzTmFtZSAhPSAiIGFjZV9lcnJvciIpCisgICAgICAgICAgICAgICAgcm93
SW5mby5jbGFzc05hbWUgPSAiIGFjZV93YXJuaW5nIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gImluZm8iICYmICghcm93SW5mby5jbGFzc05hbWUpKQorICAgICAgICAgICAgICAgIHJv
d0luZm8uY2xhc3NOYW1lID0gIiBhY2VfaW5mbyI7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICBpZiAoIXRo
aXMuJGFubm90YXRpb25zLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFy
IGRlbHRhID0gZS5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAg
ICAgdmFyIGZpcnN0Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGVuID0gcmFu
Z2UuZW5kLnJvdyAtIGZpcnN0Um93OworICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IiB8fCBkZWx0YS5hY3Rpb24g
PT0gInJlbW92ZUxpbmVzIikgeworICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNl
KGZpcnN0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CisgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmly
c3RSb3csIDEpOworICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlLmFwcGx5KHRo
aXMuJGFubm90YXRpb25zLCBhcmdzKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnVw
ZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgZW1wdHlBbm5vID0ge2NsYXNz
TmFtZTogIiJ9OworICAgICAgICB2YXIgaHRtbCA9IFtdOworICAgICAgICB2YXIgaSA9IGNvbmZp
Zy5maXJzdFJvdzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSBjb25maWcubGFzdFJvdzsKKyAgICAg
ICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGkpOworICAgICAgICB2
YXIgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAg
IHZhciBmb2xkV2lkZ2V0cyA9IHRoaXMuJHNob3dGb2xkV2lkZ2V0cyAmJiB0aGlzLnNlc3Npb24u
Zm9sZFdpZGdldHM7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuc2Vzc2lvbi4kYnJl
YWtwb2ludHM7CisgICAgICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuc2Vzc2lvbi4kZGVjb3Jh
dGlvbnM7CisgICAgICAgIHZhciBsYXN0TGluZU51bWJlciA9IDA7CisKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIGlmKGkgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAg
ICBpID0gZm9sZC5lbmQucm93ICsgMTsKKyAgICAgICAgICAgICAgICBmb2xkID0gdGhpcy5zZXNz
aW9uLmdldE5leHRGb2xkTGluZShpLCBmb2xkKTsKKyAgICAgICAgICAgICAgICBmb2xkU3RhcnQg
PSBmb2xkID9mb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZihpID4gbGFzdFJvdykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgdmFyIGFubm90YXRpb24gPSB0aGlzLiRhbm5vdGF0aW9uc1tpXSB8fCBlbXB0eUFubm87Cisg
ICAgICAgICAgICBodG1sLnB1c2goCisgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2FjZV9n
dXR0ZXItY2VsbCAiLAorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldIHx8ICIiLCBkZWNv
cmF0aW9uc1tpXSB8fCAiIiwgYW5ub3RhdGlvbi5jbGFzc05hbWUsCisgICAgICAgICAgICAgICAg
Iicgc3R5bGU9J2hlaWdodDoiLCB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKGkpICogY29uZmln
LmxpbmVIZWlnaHQsICJweDsnPiIsIAorICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0g
aSArIDEKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0cykgewor
ICAgICAgICAgICAgICAgIHZhciBjID0gZm9sZFdpZGdldHNbaV07CisgICAgICAgICAgICAgICAg
aWYgKGMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgYyA9IGZvbGRXaWRnZXRzW2ldID0g
dGhpcy5zZXNzaW9uLmdldEZvbGRXaWRnZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGMpCisg
ICAgICAgICAgICAgICAgICAgIGh0bWwucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICI8
c3BhbiBjbGFzcz0nYWNlX2ZvbGQtd2lkZ2V0IGFjZV8iLCBjLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYyA9PSAic3RhcnQiICYmIGkgPT0gZm9sZFN0YXJ0ICYmIGkgPCBmb2xkLmVuZC5yb3cg
PyAiIGFjZV9jbG9zZWQiIDogIiBhY2Vfb3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAi
JyBzdHlsZT0naGVpZ2h0OiIsIGNvbmZpZy5saW5lSGVpZ2h0LCAicHgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIic+PC9zcGFuPiIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaHRtbC5wdXNoKCI8L2Rpdj4iKTsKKworICAgICAgICAgICAg
aSsrOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9tLnNldElubmVySHRt
bCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5
bGUuaGVpZ2h0ID0gY29uZmlnLm1pbkhlaWdodCArICJweCI7CisgICAgICAgIAorICAgICAgICBp
ZiAodGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSkKKyAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVy
ID0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgdmFyIGd1dHRl
cldpZHRoID0gKCIiICsgbGFzdExpbmVOdW1iZXIpLmxlbmd0aCAqIGNvbmZpZy5jaGFyYWN0ZXJX
aWR0aDsKKyAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLiRwYWRkaW5nIHx8IHRoaXMuJGNvbXB1
dGVQYWRkaW5nKCk7CisgICAgICAgIGd1dHRlcldpZHRoICs9IHBhZGRpbmcubGVmdCArIHBhZGRp
bmcucmlnaHQ7CisgICAgICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gdGhpcy5ndXR0ZXJXaWR0aCkg
eworICAgICAgICAgICAgdGhpcy5ndXR0ZXJXaWR0aCA9IGd1dHRlcldpZHRoOworICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gTWF0aC5jZWlsKHRoaXMuZ3V0dGVyV2lkdGgp
ICsgInB4IjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUd1dHRlcldpZHRoIiwgZ3V0
dGVyV2lkdGgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0
cyA9IHRydWU7CisgICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7
CisgICAgICAgIGlmIChzaG93KQorICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxl
bWVudCwgImFjZV9mb2xkaW5nLWVuYWJsZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9mb2xkaW5nLWVuYWJsZWQiKTsK
KworICAgICAgICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OworICAgICAgICB0aGlzLiRw
YWRkaW5nID0gbnVsbDsKKyAgICB9OworICAgIAorICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRz
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzaG93Rm9sZFdpZGdldHM7Cisg
ICAgfTsKKworICAgIHRoaXMuJGNvbXB1dGVQYWRkaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICghdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4ge2xlZnQ6
IDAsIHJpZ2h0OiAwfTsKKyAgICAgICAgdmFyIHN0eWxlID0gZG9tLmNvbXB1dGVkU3R5bGUodGhp
cy5lbGVtZW50LmZpcnN0Q2hpbGQpOworICAgICAgICB0aGlzLiRwYWRkaW5nID0ge30KKyAgICAg
ICAgdGhpcy4kcGFkZGluZy5sZWZ0ID0gcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpICsgMTsK
KyAgICAgICAgdGhpcy4kcGFkZGluZy5yaWdodCA9IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdo
dCk7ICAKKyAgICAgICAgcmV0dXJuIHRoaXMuJHBhZGRpbmc7CisgICAgfTsKKworICAgIHRoaXMu
Z2V0UmVnaW9uID0gZnVuY3Rpb24ocG9pbnQpIHsKKyAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlz
LiRwYWRkaW5nIHx8IHRoaXMuJGNvbXB1dGVQYWRkaW5nKCk7CisgICAgICAgIHZhciByZWN0ID0g
dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICBpZiAocG9pbnQu
eCA8IHBhZGRpbmcubGVmdCArIHJlY3QubGVmdCkKKyAgICAgICAgICAgIHJldHVybiAibWFya2Vy
cyI7CisgICAgICAgIGlmICh0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgcG9pbnQueCA+IHJlY3Qu
cmlnaHQgLSBwYWRkaW5nLnJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuICJmb2xkV2lkZ2V0cyI7
CisgICAgfTsKKworfSkuY2FsbChHdXR0ZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5HdXR0ZXIg
PSBHdXR0ZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGF5ZXIvbWFya2VyJywgWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9kb20nXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVx
dWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7
CisKK3ZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgeworICAgIHRoaXMuZWxlbWVudCA9
IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0g
ImFjZV9sYXllciBhY2VfbWFya2VyLWxheWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0
aGlzLmVsZW1lbnQpOworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcGFkZGluZyA9
IDA7CisKKyAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7CisgICAgICAg
IHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOworICAgIH07CisgICAgdGhpcy5zZXRTZXNzaW9uID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAg
IH07CisgICAgCisgICAgdGhpcy5zZXRNYXJrZXJzID0gZnVuY3Rpb24obWFya2VycykgeworICAg
ICAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzOworICAgIH07CisKKyAgICB0aGlzLnVwZGF0ZSA9
IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgY29uZmlnID0gY29uZmlnIHx8IHRoaXMu
Y29uZmlnOworICAgICAgICBpZiAoIWNvbmZpZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKKworCisgICAgICAgIHZhciBodG1sID0gW107Cisg
ICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm1hcmtlcnMpIHsKKyAgICAgICAgICAgIHZhciBt
YXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTsKKworICAgICAgICAgICAgaWYgKCFtYXJrZXIucmFu
Z2UpIHsKKyAgICAgICAgICAgICAgICBtYXJrZXIudXBkYXRlKGh0bWwsIHRoaXMsIHRoaXMuc2Vz
c2lvbiwgY29uZmlnKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdmFyIHJhbmdlID0gbWFya2VyLnJhbmdlLmNsaXBSb3dzKGNvbmZpZy5m
aXJzdFJvdywgY29uZmlnLmxhc3RSb3cpOworICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHko
KSkgY29udGludWU7CisKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2UudG9TY3JlZW5SYW5nZSh0
aGlzLnNlc3Npb24pOworICAgICAgICAgICAgaWYgKG1hcmtlci5yZW5kZXJlcikgeworICAgICAg
ICAgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcp
OworICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy4kcGFkZGluZyArIHJhbmdlLnN0YXJ0
LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAgICAgICAgICBtYXJrZXIu
cmVuZGVyZXIoaHRtbCwgcmFuZ2UsIGxlZnQsIHRvcCwgY29uZmlnKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobWFya2VyLnR5cGUgPT0gImZ1bGxMaW5lIikgeworICAgICAgICAgICAgICAgIHRo
aXMuZHJhd0Z1bGxMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gInRleHQiKQorICAgICAgICAgICAgICAgICAgICB0
aGlzLmRyYXdUZXh0TWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdNdWx0aUxp
bmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihodG1s
LCByYW5nZSwgbWFya2VyLmNsYXp6ICsgIiBhY2Vfc3RhcnQiLCBjb25maWcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5zZXRJbm5lckh0bWwo
dGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0VG9w
ID0gZnVuY3Rpb24ocm93LCBsYXllckNvbmZpZykgeworICAgICAgICByZXR1cm4gKHJvdyAtIGxh
eWVyQ29uZmlnLmZpcnN0Um93U2NyZWVuKSAqIGxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7CisgICAg
fTsKKyAgICB0aGlzLmRyYXdUZXh0TWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFu
Z2UsIGNsYXp6LCBsYXllckNvbmZpZykgeworICAgICAgICB2YXIgcm93ID0gcmFuZ2Uuc3RhcnQu
cm93OworCisgICAgICAgIHZhciBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2UoCisgICAgICAgICAgICBy
b3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgIHJvdywgdGhpcy5zZXNzaW9uLmdl
dFNjcmVlbkxhc3RSb3dDb2x1bW4ocm93KQorICAgICAgICApOworICAgICAgICB0aGlzLmRyYXdT
aW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenogKyAiIGFjZV9z
dGFydCIsIGxheWVyQ29uZmlnLCAxLCAidGV4dCIpOworICAgICAgICByb3cgPSByYW5nZS5lbmQu
cm93OworICAgICAgICBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCAwLCByb3csIHJhbmdlLmVu
ZC5jb2x1bW4pOworICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxk
ZXIsIGxpbmVSYW5nZSwgY2xhenosIGxheWVyQ29uZmlnLCAwLCAidGV4dCIpOworCisgICAgICAg
IGZvciAocm93ID0gcmFuZ2Uuc3RhcnQucm93ICsgMTsgcm93IDwgcmFuZ2UuZW5kLnJvdzsgcm93
KyspIHsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5zdGFydC5yb3cgPSByb3c7CisgICAgICAgICAg
ICBsaW5lUmFuZ2UuZW5kLnJvdyA9IHJvdzsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5lbmQuY29s
dW1uID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4ocm93KTsKKyAgICAgICAg
ICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGluZVJhbmdlLCBj
bGF6eiwgbGF5ZXJDb25maWcsIDEsICJ0ZXh0Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRo
aXMuZHJhd011bHRpTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBj
bGF6eiwgY29uZmlnLCB0eXBlKSB7CisgICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGlu
ZzsKKyAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICB2YXIg
dG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFy
IGxlZnQgPSBwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3Rlcldp
ZHRoOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNs
YXNzPSciLCBjbGF6eiwgIiBhY2Vfc3RhcnQnIHN0eWxlPSciLAorICAgICAgICAgICAgImhlaWdo
dDoiLCBoZWlnaHQsICJweDsiLAorICAgICAgICAgICAgInJpZ2h0OjA7IiwKKyAgICAgICAgICAg
ICJ0b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OiIsIGxlZnQsICJweDsnPjwv
ZGl2PiIKKyAgICAgICAgKTsKKyAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLmVuZC5y
b3csIGNvbmZpZyk7CisgICAgICAgIHZhciB3aWR0aCA9IHJhbmdlLmVuZC5jb2x1bW4gKiBjb25m
aWcuY2hhcmFjdGVyV2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAg
ICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAgICAgICJo
ZWlnaHQ6IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJ3aWR0aDoiLCB3aWR0aCwgInB4
OyIsCisgICAgICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDoi
LCBwYWRkaW5nLCAicHg7Jz48L2Rpdj4iCisgICAgICAgICk7CisgICAgICAgIGhlaWdodCA9IChy
YW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gMSkgKiBjb25maWcubGluZUhlaWdodDsK
KyAgICAgICAgaWYgKGhlaWdodCA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRv
cCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3cgKyAxLCBjb25maWcpOworCisgICAgICAg
IHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwg
Iicgc3R5bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAg
ICAgICAgICAicmlnaHQ6MDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsiLAorICAg
ICAgICAgICAgImxlZnQ6IiwgcGFkZGluZywgInB4Oyc+PC9kaXY+IgorICAgICAgICApOworICAg
IH07CisgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxk
ZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYUxlbmd0aCkgeworICAgICAgICB2YXIgaGVp
Z2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7CisgICAgICAgIHZhciB3aWR0aCA9IChyYW5nZS5lbmQu
Y29sdW1uICsgKGV4dHJhTGVuZ3RoIHx8IDApIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSAqIGNvbmZp
Zy5jaGFyYWN0ZXJXaWR0aDsKKworICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdl
LnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFyIGxlZnQgPSB0aGlzLiRwYWRkaW5nICsg
cmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworCisgICAgICAgIHN0
cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicg
c3R5bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAg
ICAgICAid2lkdGg6Iiwgd2lkdGgsICJweDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJw
eDsiLAorICAgICAgICAgICAgImxlZnQ6IiwgbGVmdCwicHg7Jz48L2Rpdj4iCisgICAgICAgICk7
CisgICAgfTsKKworICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5n
QnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcpIHsKKyAgICAgICAgdmFyIHRvcCA9IHRoaXMu
JGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CisgICAgICAgIHZhciBoZWlnaHQgPSBj
b25maWcubGluZUhlaWdodDsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPSByYW5nZS5l
bmQucm93KQorICAgICAgICAgICAgaGVpZ2h0ICs9IHRoaXMuJGdldFRvcChyYW5nZS5lbmQucm93
LCBjb25maWcpIC0gdG9wOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAg
ICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicgc3R5bGU9JyIsCisgICAgICAgICAgICAiaGVp
Z2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisg
ICAgICAgICAgICAibGVmdDowO3JpZ2h0OjA7Jz48L2Rpdj4iCisgICAgICAgICk7CisgICAgfQor
Cit9KS5jYWxsKE1hcmtlci5wcm90b3R5cGUpOworCitleHBvcnRzLk1hcmtlciA9IE1hcmtlcjsK
KworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9sYXllci90ZXh0JywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2xh
bmcnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIu
Li9saWIvb29wIik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwordmFyIGxhbmcg
PSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xp
Yi91c2VyYWdlbnQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRf
ZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKKwordmFyIFRleHQgPSBmdW5jdGlvbihwYXJlbnRFbCkg
eworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfdGV4dC1sYXllciI7CisgICAgcGFy
ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuJGNoYXJhY3RlclNp
emUgPSB7d2lkdGg6IDAsIGhlaWdodDogMH07CisgICAgdGhpcy5jaGVja0ZvclNpemVDaGFuZ2Vz
KCk7CisgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7Cit9OworCisoZnVuY3Rpb24oKSB7CisK
KyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisKKyAgICB0aGlzLkVPRl9D
SEFSID0gIlx4QjYiOyAvLyImcGFyYTsiOworICAgIHRoaXMuRU9MX0NIQVIgPSAiXHhBQyI7IC8v
IiZub3Q7IjsKKyAgICB0aGlzLlRBQl9DSEFSID0gIlx1MjE5MiI7IC8vIiZyYXJyOyIgIlx1MjFF
NSI7CisgICAgdGhpcy5TUEFDRV9DSEFSID0gIlx4QjciOyAvLyImbWlkZG90OyI7CisgICAgdGhp
cy4kcGFkZGluZyA9IDA7CisKKyAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5n
KSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOworICAgICAgICB0aGlzLmVsZW1l
bnQuc3R5bGUucGFkZGluZyA9ICIwICIgKyBwYWRkaW5nICsgInB4IjsKKyAgICB9OworCisgICAg
dGhpcy5nZXRMaW5lSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRj
aGFyYWN0ZXJTaXplLmhlaWdodCB8fCAxOworICAgIH07CisKKyAgICB0aGlzLmdldENoYXJhY3Rl
cldpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRjaGFyYWN0ZXJTaXpl
LndpZHRoIHx8IDE7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygpOworICAg
ICAgICBpZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6ZS53aWR0
aCB8fCB0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7CisgICAg
ICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gImJvbGQiOworICAg
ICAgICAgICAgdmFyIGJvbGRTaXplID0gdGhpcy4kbWVhc3VyZVNpemVzKCk7CisgICAgICAgICAg
ICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gIiI7CisgICAgICAgICAgICB0
aGlzLiRjaGFyYWN0ZXJTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIHRoaXMuYWxsb3dCb2xkRm9u
dHMgPSBib2xkU2l6ZSAmJiBib2xkU2l6ZS53aWR0aCA9PT0gc2l6ZS53aWR0aCAmJiBib2xkU2l6
ZS5oZWlnaHQgPT09IHNpemUuaGVpZ2h0OworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
Q2hhcmFjdGVyU2l6ZSIsIHtkYXRhOiBzaXplfSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kcG9sbFNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0g
dGhpczsKKyAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSBzZXRJbnRlcnZhbChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcygpOworICAg
ICAgICB9LCA1MDApOworICAgIH07CisKKyAgICB0aGlzLiRmb250U3R5bGVzID0geworICAgICAg
ICBmb250RmFtaWx5IDogMSwKKyAgICAgICAgZm9udFNpemUgOiAxLAorICAgICAgICBmb250V2Vp
Z2h0IDogMSwKKyAgICAgICAgZm9udFN0eWxlIDogMSwKKyAgICAgICAgbGluZUhlaWdodCA6IDEK
KyAgICB9OworCisgICAgdGhpcy4kbWVhc3VyZVNpemVzID0gdXNlcmFnZW50LmlzSUUgfHwgdXNl
cmFnZW50LmlzT2xkR2Vja28gPyBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG4gPSAxMDAwOwor
ICAgICAgICBpZiAoIXRoaXMuJG1lYXN1cmVOb2RlKSB7CisgICAgICAgICAgICB2YXIgbWVhc3Vy
ZU5vZGUgPSB0aGlzLiRtZWFzdXJlTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgICAgIHZhciBzdHlsZSA9IG1lYXN1cmVOb2RlLnN0eWxlOworCisgICAgICAgICAgICBz
dHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKKyAgICAgICAgICAgIHN0eWxlLmxl
ZnQgPSBzdHlsZS50b3AgPSAoLW4gKiA0MCkgICsgInB4IjsKKworICAgICAgICAgICAgc3R5bGUu
dmlzaWJpbGl0eSA9ICJoaWRkZW4iOworICAgICAgICAgICAgc3R5bGUucG9zaXRpb24gPSAiZml4
ZWQiOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAgICAgICAg
ICBzdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CisgICAgICAgICAgICBtZWFzdXJlTm9kZS5p
bm5lckhUTUwgPSBsYW5nLnN0cmluZ1JlcGVhdCgiWHkiLCBuKTsKKworICAgICAgICAgICAgaWYg
KHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMu
ZWxlbWVudC5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgIHdoaWxlICghZG9tLmhhc0Nzc0Ns
YXNzKGNvbnRhaW5lciwgImFjZV9lZGl0b3IiKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworCisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlOworICAgICAg
ICB2YXIgY29tcHV0ZWRTdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCk7Cisg
ICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy4kZm9udFN0eWxlcykKKyAgICAgICAgICAgIHN0
eWxlW3Byb3BdID0gY29tcHV0ZWRTdHlsZVtwcm9wXTsKKworICAgICAgICB2YXIgc2l6ZSA9IHsK
KyAgICAgICAgICAgIGhlaWdodDogdGhpcy4kbWVhc3VyZU5vZGUub2Zmc2V0SGVpZ2h0LAorICAg
ICAgICAgICAgd2lkdGg6IHRoaXMuJG1lYXN1cmVOb2RlLm9mZnNldFdpZHRoIC8gKG4gKiAyKQor
ICAgICAgICB9OworICAgICAgICBpZiAoc2l6ZS53aWR0aCA9PSAwIHx8IHNpemUuaGVpZ2h0ID09
IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4gc2l6ZTsKKyAg
ICB9CisgICAgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRtZWFzdXJlTm9kZSkg
eworICAgICAgICAgICAgdmFyIG1lYXN1cmVOb2RlID0gdGhpcy4kbWVhc3VyZU5vZGUgPSBkb20u
Y3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB2YXIgc3R5bGUgPSBtZWFzdXJlTm9k
ZS5zdHlsZTsKKworICAgICAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQgPSAiYXV0
byI7CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gLTEwMCArICJweCI7CisK
KyAgICAgICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICAgICAgICAgIHN0
eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gInZp
c2libGUiOworICAgICAgICAgICAgc3R5bGUud2hpdGVTcGFjZSA9ICJub3dyYXAiOworCisgICAg
ICAgICAgICBtZWFzdXJlTm9kZS5pbm5lckhUTUwgPSAiWCI7CisKKyAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIHdoaWxlIChj
b250YWluZXIgJiYgIWRvbS5oYXNDc3NDbGFzcyhjb250YWluZXIsICJhY2VfZWRpdG9yIikpCisg
ICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisKKyAgICAg
ICAgICAgIGlmICghY29udGFpbmVyKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRtZWFz
dXJlTm9kZSA9IG51bGw7CisKKyAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtZWFz
dXJlTm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1lYXN1cmVO
b2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAgIHZhciBzaXplID0geworICAg
ICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoOiByZWN0Lndp
ZHRoCisgICAgICAgIH07CisgICAgICAgIGlmIChzaXplLndpZHRoID09IDAgfHwgc2l6ZS5oZWln
aHQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiBzaXpl
OworICAgIH07CisKKyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7Cisg
ICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJT
dHJpbmcoKTsKKyAgICB9OworCisgICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNlOworICAg
IHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykgeworICAg
ICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyA9PSBzaG93SW52aXNpYmxlcykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0lu
dmlzaWJsZXM7CisgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcyA9IHRydWU7
CisgICAgdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgewor
ICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0g
ZGlzcGxheTsKKyAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy4kdGFiU3RyaW5ncyA9IFtdOworICAgIHRoaXMu
b25DaGFuZ2VUYWJTaXplID0KKyAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTsKKyAg
ICAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZTsKKyAgICAgICAgdmFyIHRhYlN0ciA9IHRoaXMu
JHRhYlN0cmluZ3MgPSBbMF07CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFiU2l6ZSAr
IDE7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKKyAgICAg
ICAgICAgICAgICB0YWJTdHIucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIKKyAg
ICAgICAgICAgICAgICAgICAgKyB0aGlzLlRBQl9DSEFSCisgICAgICAgICAgICAgICAgICAgICsg
bGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCBpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgKyAi
PC9zcGFuPiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0YWJTdHIu
cHVzaChsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKSB7CisgICAgICAgICAg
ICB0aGlzLiRpbmRlbnRHdWlkZVJlID0gIC9cc1xTfCBcdHxcdCB8XHMkLzsKKyAgICAgICAgICAg
IHZhciBjbGFzc05hbWUgPSAiYWNlX2luZGVudC1ndWlkZSI7CisgICAgICAgICAgICBpZiAodGhp
cy5zaG93SW52aXNpYmxlcykgeworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAiIGFjZV9p
bnZpc2libGUiOworICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmlu
Z1JlcGVhdCh0aGlzLlNQQUNFX0NIQVIsIHRoaXMudGFiU2l6ZSk7CisgICAgICAgICAgICAgICAg
dmFyIHRhYkNvbnRlbnQgPSB0aGlzLlRBQl9DSEFSICsgbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAi
LCB0aGlzLnRhYlNpemUgLSAxKTsKKyAgICAgICAgICAgIH0gZWxzZXsKKyAgICAgICAgICAgICAg
ICB2YXIgc3BhY2VDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCB0aGlzLnRhYlNp
emUpOworICAgICAgICAgICAgICAgIHZhciB0YWJDb250ZW50ID0gc3BhY2VDb250ZW50OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyIgIl0gPSAiPHNwYW4g
Y2xhc3M9JyIgKyBjbGFzc05hbWUgKyAiJz4iICsgc3BhY2VDb250ZW50ICsgIjwvc3Bhbj4iOwor
ICAgICAgICAgICAgdGhpcy4kdGFiU3RyaW5nc1siXHQiXSA9ICI8c3BhbiBjbGFzcz0nIiArIGNs
YXNzTmFtZSArICInPiIgKyB0YWJDb250ZW50ICsgIjwvc3Bhbj4iOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBs
YXN0Um93KSB7CisgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXN0Um93ICE9IGNvbmZpZy5sYXN0
Um93IHx8CisgICAgICAgICAgICB0aGlzLmNvbmZpZy5maXJzdFJvdyAhPSBjb25maWcuZmlyc3RS
b3cpIHsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGluZXMoY29uZmlnKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKKworICAgICAgICB2YXIgZmlyc3QgPSBNYXRo
Lm1heChmaXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTsKKyAgICAgICAgdmFyIGxhc3QgPSBNYXRo
Lm1pbihsYXN0Um93LCBjb25maWcubGFzdFJvdyk7CisKKyAgICAgICAgdmFyIGxpbmVFbGVtZW50
cyA9IHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzOworICAgICAgICB2YXIgbGluZUVsZW1lbnRzSWR4
ID0gMDsKKworICAgICAgICBmb3IgKHZhciByb3cgPSBjb25maWcuZmlyc3RSb3c7IHJvdyA8IGZp
cnN0OyByb3crKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdl
dEZvbGRMaW5lKHJvdyk7CisgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZm9sZExpbmUuY29udGFpbnNSb3coZmlyc3QpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByb3cgPSBm
b2xkTGluZS5lbmQucm93OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxpbmVFbGVtZW50c0lkeCArKzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByb3cg
PSBmaXJzdDsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xk
TGluZShyb3cpOworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5z
dGFydC5yb3cgOiBJbmZpbml0eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5l
LmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRO
ZXh0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0g
Zm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3QpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmVFbGVtZW50c1tsaW5lRWxlbWVudHNJZHgr
K107CisgICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIg
aHRtbCA9IFtdOworICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoCisgICAgICAgICAg
ICAgICAgICAgIGh0bWwsIHJvdywgIXRoaXMuJHVzZUxpbmVHcm91cHMoKSwgcm93ID09IGZvbGRT
dGFydCA/IGZvbGRMaW5lIDogZmFsc2UKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg
ICAgIGRvbS5zZXRJbm5lckh0bWwobGluZUVsZW1lbnQsIGh0bWwuam9pbigiIikpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcm93Kys7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhp
cy5zY3JvbGxMaW5lcyA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB2YXIgb2xkQ29uZmln
ID0gdGhpcy5jb25maWc7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisgICAgICAg
IGlmICghb2xkQ29uZmlnIHx8IG9sZENvbmZpZy5sYXN0Um93IDwgY29uZmlnLmZpcnN0Um93KQor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CisKKyAgICAgICAgaWYgKGNv
bmZpZy5sYXN0Um93IDwgb2xkQ29uZmlnLmZpcnN0Um93KQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMudXBkYXRlKGNvbmZpZyk7CisKKyAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50OworICAg
ICAgICBpZiAob2xkQ29uZmlnLmZpcnN0Um93IDwgY29uZmlnLmZpcnN0Um93KQorICAgICAgICAg
ICAgZm9yICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChvbGRDb25maWcu
Zmlyc3RSb3csIGNvbmZpZy5maXJzdFJvdyAtIDEpOyByb3c+MDsgcm93LS0pCisgICAgICAgICAg
ICAgICAgZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgaWYgKG9sZENv
bmZpZy5sYXN0Um93ID4gY29uZmlnLmxhc3RSb3cpCisgICAgICAgICAgICBmb3IgKHZhciByb3c9
dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGNvbmZpZy5sYXN0Um93ICsgMSwgb2xkQ29u
ZmlnLmxhc3RSb3cpOyByb3c+MDsgcm93LS0pCisgICAgICAgICAgICAgICAgZWwucmVtb3ZlQ2hp
bGQoZWwubGFzdENoaWxkKTsKKworICAgICAgICBpZiAoY29uZmlnLmZpcnN0Um93IDwgb2xkQ29u
ZmlnLmZpcnN0Um93KSB7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRyZW5kZXJM
aW5lc0ZyYWdtZW50KGNvbmZpZywgY29uZmlnLmZpcnN0Um93LCBvbGRDb25maWcuZmlyc3RSb3cg
LSAxKTsKKyAgICAgICAgICAgIGlmIChlbC5maXJzdENoaWxkKQorICAgICAgICAgICAgICAgIGVs
Lmluc2VydEJlZm9yZShmcmFnbWVudCwgZWwuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNvbmZpZy5sYXN0Um93ID4gb2xkQ29uZmlnLmxhc3RSb3cpIHsKKyAgICAg
ICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29uZmlnLCBv
bGRDb25maWcubGFzdFJvdyArIDEsIGNvbmZpZy5sYXN0Um93KTsKKyAgICAgICAgICAgIGVsLmFw
cGVuZENoaWxkKGZyYWdtZW50KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRyZW5k
ZXJMaW5lc0ZyYWdtZW50ID0gZnVuY3Rpb24oY29uZmlnLCBmaXJzdFJvdywgbGFzdFJvdykgewor
ICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKKyAgICAgICAg
dmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpOworICAgICAg
ICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0
eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRT
dGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTsKKyAgICAg
ICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93LCBm
b2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGlu
ZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChy
b3cgPiBsYXN0Um93KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2YXIg
Y29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgICAgICB2YXIg
aHRtbCA9IFtdOworICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1sLCByb3csIGZhbHNl
LCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7CisgICAgICAgICAgICBjb250
YWluZXIuaW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKKyAgICAgICAgICAgIGlmICh0aGlzLiR1
c2VMaW5lR3JvdXBzKCkpIHsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0g
J2FjZV9saW5lX2dyb3VwJzsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChj
b250YWluZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlu
ZXMgPSBjb250YWluZXIuY2hpbGROb2RlcworICAgICAgICAgICAgICAgIHdoaWxlKGxpbmVzLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobGluZXNbMF0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByb3crKzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfTsKKworICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24o
Y29uZmlnKSB7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisgICAgICAgIHZhciBo
dG1sID0gW107CisgICAgICAgIHZhciBmaXJzdFJvdyA9IGNvbmZpZy5maXJzdFJvdywgbGFzdFJv
dyA9IGNvbmZpZy5sYXN0Um93OworCisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKKyAgICAg
ICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpOworICAg
ICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZp
bml0eTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHJvdyA+IGZv
bGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTsKKyAg
ICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93
LCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xk
TGluZS5zdGFydC5yb3cgOkluZmluaXR5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHJvdyA+IGxhc3RSb3cpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlm
ICh0aGlzLiR1c2VMaW5lR3JvdXBzKCkpCisgICAgICAgICAgICAgICAgaHRtbC5wdXNoKCI8ZGl2
IGNsYXNzPSdhY2VfbGluZV9ncm91cCc+IikKKworICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGlu
ZShodG1sLCByb3csIGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7
CisKKyAgICAgICAgICAgIGlmICh0aGlzLiR1c2VMaW5lR3JvdXBzKCkpCisgICAgICAgICAgICAg
ICAgaHRtbC5wdXNoKCI8L2Rpdj4iKTsgLy8gZW5kIHRoZSBsaW5lIGdyb3VwCisKKyAgICAgICAg
ICAgIHJvdysrOworICAgICAgICB9CisgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5zZXRJbm5l
ckh0bWwodGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKKyAgICB9OworCisgICAgdGhpcy4k
dGV4dFRva2VuID0geworICAgICAgICAidGV4dCI6IHRydWUsCisgICAgICAgICJycGFyZW4iOiB0
cnVlLAorICAgICAgICAibHBhcmVuIjogdHJ1ZQorICAgIH07CisKKyAgICB0aGlzLiRyZW5kZXJU
b2tlbiA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVl
KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHJlcGxhY2VSZWcgPSAv
XHR8Jnw8fCggKyl8KFtceDAwLVx4MWZceDgwLVx4YTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDBm
XHUyMDI4XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGXSl8W1x1MTEwMC1cdTExNUZcdTEx
QTMtXHUxMUE3XHUxMUZBLVx1MTFGRlx1MjMyOS1cdTIzMkFcdTJFODAtXHUyRTk5XHUyRTlCLVx1
MkVGM1x1MkYwMC1cdTJGRDVcdTJGRjAtXHUyRkZCXHUzMDAwLVx1MzAzRVx1MzA0MS1cdTMwOTZc
dTMwOTktXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxOTAtXHUzMUJBXHUzMUMw
LVx1MzFFM1x1MzFGMC1cdTMyMUVcdTMyMjAtXHUzMjQ3XHUzMjUwLVx1MzJGRVx1MzMwMC1cdTRE
QkZcdTRFMDAtXHVBNDhDXHVBNDkwLVx1QTRDNlx1QTk2MC1cdUE5N0NcdUFDMDAtXHVEN0EzXHVE
N0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQUZGXHVGRTEwLVx1RkUxOVx1RkUzMC1c
dUZFNTJcdUZFNTQtXHVGRTY2XHVGRTY4LVx1RkU2Qlx1RkYwMS1cdUZGNjBcdUZGRTAtXHVGRkU2
XS9nOworICAgICAgICB2YXIgcmVwbGFjZUZ1bmMgPSBmdW5jdGlvbihjLCBhLCBiLCB0YWJJZHgs
IGlkeDQpIHsKKyAgICAgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuc2hvd0ludmlzaWJsZXMgPworICAgICAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9J2Fj
ZV9pbnZpc2libGUnPiIgKyBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIsIGMubGVu
Z3RoKSArICI8L3NwYW4+IiA6CisgICAgICAgICAgICAgICAgICAgIGxhbmcuc3RyaW5nUmVwZWF0
KCJceGEwIiwgYy5sZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICImIikgewor
ICAgICAgICAgICAgICAgIHJldHVybiAiJiMzODsiOworICAgICAgICAgICAgfSBlbHNlIGlmIChj
ID09ICI8IikgeworICAgICAgICAgICAgICAgIHJldHVybiAiJiM2MDsiOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjID09ICJcdCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IHNl
bGYuc2Vzc2lvbi5nZXRTY3JlZW5UYWJTaXplKHNjcmVlbkNvbHVtbiArIHRhYklkeCk7CisgICAg
ICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRhYlNpemUgLSAxOworICAgICAgICAgICAgICAg
IHJldHVybiBzZWxmLiR0YWJTdHJpbmdzW3RhYlNpemVdOworICAgICAgICAgICAgfSBlbHNlIGlm
IChjID09ICJcdTMwMDAiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNsYXNzVG9Vc2UgPSBzZWxm
LnNob3dJbnZpc2libGVzID8gImFjZV9jamsgYWNlX2ludmlzaWJsZSIgOiAiYWNlX2NqayI7Cisg
ICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IHNlbGYuU1BB
Q0VfQ0hBUiA6ICIiOworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOworICAgICAg
ICAgICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9JyIgKyBjbGFzc1RvVXNlICsgIicgc3R5bGU9
J3dpZHRoOiIgKworICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuY2hhcmFjdGVyV2lk
dGggKiAyKSArCisgICAgICAgICAgICAgICAgICAgICJweCc+IiArIHNwYWNlICsgIjwvc3Bhbj4i
OworICAgICAgICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8
c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSBhY2VfaW52YWxpZCc+IiArIHNlbGYuU1BBQ0VfQ0hB
UiArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Ny
ZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0nYWNl
X2Nqaycgc3R5bGU9J3dpZHRoOiIgKworICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcu
Y2hhcmFjdGVyV2lkdGggKiAyKSArCisgICAgICAgICAgICAgICAgICAgICJweCc+IiArIGMgKyAi
PC9zcGFuPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIG91dHB1
dCA9IHZhbHVlLnJlcGxhY2UocmVwbGFjZVJlZywgcmVwbGFjZUZ1bmMpOworCisgICAgICAgIGlm
ICghdGhpcy4kdGV4dFRva2VuW3Rva2VuLnR5cGVdKSB7CisgICAgICAgICAgICB2YXIgY2xhc3Nl
cyA9ICJhY2VfIiArIHRva2VuLnR5cGUucmVwbGFjZSgvXC4vZywgIiBhY2VfIik7CisgICAgICAg
ICAgICB2YXIgc3R5bGUgPSAiIjsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJmb2xk
IikKKyAgICAgICAgICAgICAgICBzdHlsZSA9ICIgc3R5bGU9J3dpZHRoOiIgKyAodG9rZW4udmFs
dWUubGVuZ3RoICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpICsgInB4OycgIjsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgiPHNwYW4gY2xhc3M9JyIsIGNsYXNzZXMsICInIiwg
c3R5bGUsICI+Iiwgb3V0cHV0LCAiPC9zcGFuPiIpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKG91dHB1dCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNjcmVlbkNvbHVtbiArIHZhbHVlLmxlbmd0aDsKKyAgICB9OworCisgICAg
dGhpcy5yZW5kZXJJbmRlbnRHdWlkZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHZhbHVlKSB7
CisgICAgICAgIHZhciBjb2xzID0gdmFsdWUuc2VhcmNoKHRoaXMuJGluZGVudEd1aWRlUmUpOwor
ICAgICAgICBpZiAoY29scyA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAg
ICBpZiAodmFsdWVbMF0gPT0gIiAiKSB7CisgICAgICAgICAgICBjb2xzIC09IGNvbHMgJSB0aGlz
LnRhYlNpemU7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdSZXBl
YXQodGhpcy4kdGFiU3RyaW5nc1siICJdLCBjb2xzL3RoaXMudGFiU2l6ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLnN1YnN0cihjb2xzKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVsw
XSA9PSAiXHQiKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdS
ZXBlYXQodGhpcy4kdGFiU3RyaW5nc1siXHQiXSwgY29scykpOworICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLnN1YnN0cihjb2xzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfTsKKworICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5lID0gZnVuY3Rpb24oc3RyaW5nQnVp
bGRlciwgdG9rZW5zLCBzcGxpdHMsIG9ubHlDb250ZW50cykgeworICAgICAgICB2YXIgY2hhcnMg
PSAwOworICAgICAgICB2YXIgc3BsaXQgPSAwOworICAgICAgICB2YXIgc3BsaXRDaGFycyA9IHNw
bGl0c1swXTsKKyAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0b2tl
biA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAg
ICAgICAgICAgaWYgKGkgPT0gMCAmJiB0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHsKKyAgICAg
ICAgICAgICAgICBjaGFycyA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IHRoaXMucmVuZGVySW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGNoYXJzIC09IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGNoYXJzICsgdmFsdWUubGVuZ3RoIDwgc3BsaXRDaGFycykgeworICAgICAgICAg
ICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHN0cmluZ0J1aWxkZXIsIHNj
cmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBjaGFycyArPSB2YWx1
ZS5sZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlIChj
aGFycyArIHZhbHVlLmxlbmd0aCA+PSBzcGxpdENoYXJzKSB7CisgICAgICAgICAgICAgICAgICAg
IHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4sIHZhbHVlLnN1YnN0cmluZygwLCBzcGxpdENoYXJzIC0gY2hhcnMpCisgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5n
KHNwbGl0Q2hhcnMgLSBjaGFycyk7CisgICAgICAgICAgICAgICAgICAgIGNoYXJzID0gc3BsaXRD
aGFyczsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW9ubHlDb250ZW50cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCI8L2Rpdj4iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hlaWdodDoi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQsICJw
eCc+IgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHNwbGl0ICsrOworICAgICAgICAgICAgICAgICAgICBzY3Jl
ZW5Db2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3BsaXRzW3Nw
bGl0XSB8fCBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWUubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhcnMg
Kz0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlz
LiRyZW5kZXJUb2tlbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIsIHNj
cmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMu
JHJlbmRlclNpbXBsZUxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMpIHsKKyAg
ICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CisgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1sw
XTsKKyAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgIGlmICh0aGlzLmRp
c3BsYXlJbmRlbnRHdWlkZXMpCisgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVuZGVySW5kZW50
R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAg
ICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3Jl
ZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG9r
ZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAg
ICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0
aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuJHJlbmRlckxpbmUgPSBmdW5jdGlvbihz
dHJpbmdCdWlsZGVyLCByb3csIG9ubHlDb250ZW50cywgZm9sZExpbmUpIHsKKyAgICAgICAgaWYg
KCFmb2xkTGluZSAmJiBmb2xkTGluZSAhPSBmYWxzZSkKKyAgICAgICAgICAgIGZvbGRMaW5lID0g
dGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7CisKKyAgICAgICAgaWYgKGZvbGRMaW5lKQor
ICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJvdywgZm9s
ZExpbmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5zZXNz
aW9uLmdldFRva2Vucyhyb3cpOworCisKKyAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpIHsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICAgICAiPGRpdiBjbGFz
cz0nYWNlX2xpbmUnIHN0eWxlPSdoZWlnaHQ6IiwgdGhpcy5jb25maWcubGluZUhlaWdodCwgInB4
Jz4iCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2Vucy5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZ2V0Um93U3BsaXRE
YXRhKHJvdyk7CisgICAgICAgICAgICBpZiAoc3BsaXRzICYmIHNwbGl0cy5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUoc3RyaW5nQnVpbGRlciwgdG9rZW5z
LCBzcGxpdHMsIG9ubHlDb250ZW50cyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdGhpcy4kcmVuZGVyU2ltcGxlTGluZShzdHJpbmdCdWlsZGVyLCB0b2tlbnMpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKKyAgICAgICAgICAgIGlm
IChmb2xkTGluZSkKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93CisKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICAgICAiPHNwYW4gY2xh
c3M9J2FjZV9pbnZpc2libGUnPiIsCisgICAgICAgICAgICAgICAgcm93ID09IHRoaXMuc2Vzc2lv
bi5nZXRMZW5ndGgoKSAtIDEgPyB0aGlzLkVPRl9DSEFSIDogdGhpcy5FT0xfQ0hBUiwKKyAgICAg
ICAgICAgICAgICAiPC9zcGFuPiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFvbmx5Q29udGVudHMpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIjwvZGl2
PiIpOworICAgIH07CisKKyAgICB0aGlzLiRnZXRGb2xkTGluZVRva2VucyA9IGZ1bmN0aW9uKHJv
dywgZm9sZExpbmUpIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAg
ICAgIHZhciByZW5kZXJUb2tlbnMgPSBbXTsKKworICAgICAgICBmdW5jdGlvbiBhZGRUb2tlbnMo
dG9rZW5zLCBmcm9tLCB0bykgeworICAgICAgICAgICAgdmFyIGlkeCA9IDAsIGNvbCA9IDA7Cisg
ICAgICAgICAgICB3aGlsZSAoKGNvbCArIHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aCkgPCBmcm9t
KSB7CisgICAgICAgICAgICAgICAgY29sICs9IHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBpZHgrKzsKKworICAgICAgICAgICAgICAgIGlmIChpZHggPT0gdG9rZW5z
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNvbCAhPSBmcm9tKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0g
dG9rZW5zW2lkeF0udmFsdWUuc3Vic3RyaW5nKGZyb20gLSBjb2wpOworICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5sZW5ndGggPiAodG8gLSBmcm9tKSkKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdG8gLSBmcm9tKTsKKworICAgICAgICAgICAgICAgIHJl
bmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9rZW5zW2lkeF0u
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICBjb2wgPSBmcm9tICsgdmFsdWUubGVuZ3RoOworICAgICAg
ICAgICAgICAgIGlkeCArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAo
Y29sIDwgdG8gJiYgaWR4IDwgdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IHRva2Vuc1tpZHhdLnZhbHVlOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5n
dGggKyBjb2wgPiB0bykgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7
CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGNvbCkKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHRva2Vuc1tpZHhdKTsKKyAgICAgICAgICAgICAg
ICBjb2wgKz0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlkeCArPSAxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9r
ZW5zKHJvdyk7CisgICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJv
dywgY29sdW1uLCBsYXN0Q29sdW1uLCBpc05ld1JvdykgeworICAgICAgICAgICAgaWYgKHBsYWNl
aG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGU6ICJmb2xkIiwKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWU6IHBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChpc05ld1JvdykKKyAgICAgICAgICAgICAgICAgICAgdG9r
ZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKworICAgICAgICAgICAgICAgIGlmICh0b2tl
bnMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBhZGRUb2tlbnModG9rZW5zLCBsYXN0Q29s
dW1uLCBjb2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICB9LCBmb2xkTGluZS5lbmQucm93
LCB0aGlzLnNlc3Npb24uZ2V0TGluZShmb2xkTGluZS5lbmQucm93KS5sZW5ndGgpOworCisgICAg
ICAgIHJldHVybiByZW5kZXJUb2tlbnM7CisgICAgfTsKKworICAgIHRoaXMuJHVzZUxpbmVHcm91
cHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFw
TW9kZSgpOworICAgIH07CisKKyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgY2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcik7CisgICAgICAgIGlm
ICh0aGlzLiRtZWFzdXJlTm9kZSkKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kbWVhc3VyZU5vZGUpOworICAgICAgICBkZWxldGUgdGhp
cy4kbWVhc3VyZU5vZGU7CisgICAgfTsKKworfSkuY2FsbChUZXh0LnByb3RvdHlwZSk7CisKK2V4
cG9ydHMuVGV4dCA9IFRleHQ7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGF5ZXIvY3Vyc29y
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbSddLCBmdW5j
dGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgZG9tID0gcmVxdWlyZSgi
Li4vbGliL2RvbSIpOworCit2YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKKyAgICB0
aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50
LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX2N1cnNvci1sYXllciI7CisgICAgcGFyZW50RWwu
YXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7
CisgICAgdGhpcy5pc0JsaW5raW5nID0gdHJ1ZTsKKyAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSAx
MDAwOworICAgIHRoaXMuc21vb3RoQmxpbmtpbmcgPSBmYWxzZTsKKworICAgIHRoaXMuY3Vyc29y
cyA9IFtdOworICAgIHRoaXMuY3Vyc29yID0gdGhpcy5hZGRDdXJzb3IoKTsKKyAgICBkb20uYWRk
Q3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7Cit9OworCisoZnVu
Y3Rpb24oKSB7CisKKyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKyAgICB0aGlzLnNldFBhZGRpbmcg
PSBmdW5jdGlvbihwYWRkaW5nKSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOwor
ICAgIH07CisKKyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAg
ICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgfTsKKworICAgIHRoaXMuc2V0Qmxpbmtp
bmcgPSBmdW5jdGlvbihibGlua2luZykgeworICAgICAgICBpZiAoYmxpbmtpbmcgIT0gdGhpcy5p
c0JsaW5raW5nKXsKKyAgICAgICAgICAgIHRoaXMuaXNCbGlua2luZyA9IGJsaW5raW5nOworICAg
ICAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
aGlzLnNldEJsaW5rSW50ZXJ2YWwgPSBmdW5jdGlvbihibGlua0ludGVydmFsKSB7CisgICAgICAg
IGlmIChibGlua0ludGVydmFsICE9IHRoaXMuYmxpbmtJbnRlcnZhbCl7CisgICAgICAgICAgICB0
aGlzLmJsaW5rSW50ZXJ2YWwgPSBibGlua0ludGVydmFsOworICAgICAgICAgICAgdGhpcy5yZXN0
YXJ0VGltZXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnNldFNtb290aEJsaW5r
aW5nID0gZnVuY3Rpb24oc21vb3RoQmxpbmtpbmcpIHsKKyAgICAgICAgaWYgKHNtb290aEJsaW5r
aW5nICE9IHRoaXMuc21vb3RoQmxpbmtpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuc21vb3RoQmxp
bmtpbmcgPSBzbW9vdGhCbGlua2luZzsKKyAgICAgICAgICAgIGlmIChzbW9vdGhCbGlua2luZykK
KyAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290
aC1ibGlua2luZyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvbS5yZW1v
dmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CisgICAgICAg
ICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMu
YWRkQ3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlbCA9IGRvbS5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgZWwuY2xhc3NOYW1lID0gImFjZV9jdXJzb3IiOworICAgICAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpOworICAgICAgICB0aGlzLmN1cnNvcnMucHVz
aChlbCk7CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVDdXJz
b3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuY3Vyc29ycy5sZW5ndGggPiAxKSB7
CisgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmN1cnNvcnMucG9wKCk7CisgICAgICAgICAgICBl
bC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKKyAgICAgICAgICAgIHJldHVybiBlbDsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmhpZGVDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRo
aXMuZWxlbWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIpOworICAgICAgICB0aGlzLnJlc3RhcnRU
aW1lcigpOworICAgIH07CisKKyAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3Mo
dGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7CisgICAgICAgIHRoaXMucmVzdGFy
dFRpbWVyKCk7CisgICAgfTsKKworICAgIHRoaXMucmVzdGFydFRpbWVyID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTsKKyAgICAgICAgY2xlYXJU
aW1lb3V0KHRoaXMudGltZW91dElkKTsKKyAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcp
CisgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290
aC1ibGlua2luZyIpOworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jdXJzb3JzLmxlbmd0aDsg
aS0tOyApCisgICAgICAgICAgICB0aGlzLmN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9ICIiOwor
CisgICAgICAgIGlmICghdGhpcy5pc0JsaW5raW5nIHx8ICF0aGlzLmJsaW5rSW50ZXJ2YWwgfHwg
IXRoaXMuaXNWaXNpYmxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlz
LnNtb290aEJsaW5raW5nKQorICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeworICAg
ICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJs
aW5raW5nIik7CisgICAgICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIHZhciBibGlu
ayA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY3Vyc29ycy5s
ZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tpXS5zdHls
ZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LmJpbmQodGhp
cyksIDAuNiAqIHRoaXMuYmxpbmtJbnRlcnZhbCk7CisgICAgICAgIH0uYmluZCh0aGlzKTsKKwor
ICAgICAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkgeworICAgICAg
ICAgICAgICAgIHRoaXMuY3Vyc29yc1tpXS5zdHlsZS5vcGFjaXR5ID0gIiI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBibGluaygpOworICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuYmxp
bmtJbnRlcnZhbCk7CisKKyAgICAgICAgYmxpbmsoKTsKKyAgICB9OworCisgICAgdGhpcy5nZXRQ
aXhlbFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24sIG9uU2NyZWVuKSB7CisgICAgICAgIGlm
ICghdGhpcy5jb25maWcgfHwgIXRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHJldHVybiB7bGVm
dCA6IDAsIHRvcCA6IDB9OworCisgICAgICAgIGlmICghcG9zaXRpb24pCisgICAgICAgICAgICBw
b3NpdGlvbiA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CisgICAgICAgIHZh
ciBwb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHBvc2l0aW9uKTsK
KyAgICAgICAgdmFyIGN1cnNvckxlZnQgPSB0aGlzLiRwYWRkaW5nICsgcG9zLmNvbHVtbiAqIHRo
aXMuY29uZmlnLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgY3Vyc29yVG9wID0gKHBvcy5y
b3cgLSAob25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAqCisgICAg
ICAgICAgICB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0OworCisgICAgICAgIHJldHVybiB7bGVmdCA6
IGN1cnNvckxlZnQsIHRvcCA6IGN1cnNvclRvcH07CisgICAgfTsKKworICAgIHRoaXMudXBkYXRl
ID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisg
ICAgICAgIHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzOwor
ICAgICAgICB2YXIgaSA9IDAsIGN1cnNvckluZGV4ID0gMDsKKworICAgICAgICBpZiAoc2VsZWN0
aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXsKKyAgICAgICAg
ICAgIHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFy
IHBpeGVsUG9zID0gdGhpcy5nZXRQaXhlbFBvc2l0aW9uKHNlbGVjdGlvbnNbaV0uY3Vyc29yLCB0
cnVlKTsKKyAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdodCArIGNv
bmZpZy5vZmZzZXQgfHwKKyAgICAgICAgICAgICAgICAgcGl4ZWxQb3MudG9wIDwgLWNvbmZpZy5v
ZmZzZXQpICYmIGkgPiAxKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZhciBzdHlsZSA9ICh0aGlzLmN1cnNvcnNbY3Vyc29ySW5kZXgr
K10gfHwgdGhpcy5hZGRDdXJzb3IoKSkuc3R5bGU7CisKKyAgICAgICAgICAgIHN0eWxlLmxlZnQg
PSBwaXhlbFBvcy5sZWZ0ICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLnRvcCA9IHBpeGVsUG9z
LnRvcCArICJweCI7CisgICAgICAgICAgICBzdHlsZS53aWR0aCA9IGNvbmZpZy5jaGFyYWN0ZXJX
aWR0aCArICJweCI7CisgICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBjb25maWcubGluZUhlaWdo
dCArICJweCI7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMuY3Vyc29ycy5sZW5ndGgg
PiBjdXJzb3JJbmRleCkKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQ3Vyc29yKCk7CisKKyAgICAg
ICAgdmFyIG92ZXJ3cml0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKKyAgICAgICAg
dGhpcy4kc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7CisgICAgICAgIHRoaXMuJHBpeGVsUG9zID0g
cGl4ZWxQb3M7CisgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgfTsKKworICAgIHRo
aXMuJHNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICBpZiAob3Zl
cndyaXRlICE9IHRoaXMub3ZlcndyaXRlKSB7CisgICAgICAgICAgICB0aGlzLm92ZXJ3cml0ZSA9
IG92ZXJ3cml0ZTsKKyAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpCisgICAgICAgICAgICAgICAg
ZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9vdmVyd3JpdGUtY3Vyc29ycyIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlz
LmVsZW1lbnQsICJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0
aGlzLmludGVydmFsSWQpOworICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpOwor
ICAgIH07CisKK30pLmNhbGwoQ3Vyc29yLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuQ3Vyc29yID0g
Q3Vyc29yOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3Njcm9sbGJhcicsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20nLCAnYWNl
L2xpYi9ldmVudCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwor
dmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIpOwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9s
aWIvZXZlbnQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0
dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCkgewor
ICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxiYXIiOworCisgICAgdGhpcy5pbm5lciA9IGRv
bS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmlubmVyLmNsYXNzTmFtZSA9ICJhY2Vf
c2Nyb2xsYmFyLWlubmVyIjsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5l
cik7CisKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKKyAgICB0aGlzLndp
ZHRoID0gZG9tLnNjcm9sbGJhcldpZHRoKHBhcmVudC5vd25lckRvY3VtZW50KTsKKyAgICB0aGlz
LmVsZW1lbnQuc3R5bGUud2lkdGggPSAodGhpcy53aWR0aCB8fCAxNSkgKyA1ICsgInB4IjsKKwor
ICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgInNjcm9sbCIsIHRoaXMub25TY3Jv
bGwuYmluZCh0aGlzKSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgb29wLmltcGxlbWVudCh0
aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMub25TY3JvbGwgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkgeworICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3Ag
PSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICAgICAgdGhpcy5fZW1pdCgic2Nyb2xs
Iiwge2RhdGE6IHRoaXMuc2Nyb2xsVG9wfSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5za2lw
RXZlbnQgPSBmYWxzZTsKKyAgICB9OworICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7CisgICAgfTsKKyAgICB0aGlzLnNldEhlaWdodCA9
IGZ1bmN0aW9uKGhlaWdodCkgeworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0g
aGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIHRoaXMuc2V0SW5uZXJIZWlnaHQgPSBmdW5jdGlv
bihoZWlnaHQpIHsKKyAgICAgICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAi
cHgiOworICAgIH07CisgICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3Ap
IHsKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wICE9IHNjcm9sbFRvcCkgeworICAgICAgICAg
ICAgdGhpcy5za2lwRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0
aGlzLmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAgICB9CisgICAgfTsKKwor
fSkuY2FsbChTY3JvbGxCYXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5TY3JvbGxCYXIgPSBTY3Jv
bGxCYXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3JlbmRlcmxvb3AnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQi
KTsKKworCit2YXIgUmVuZGVyTG9vcCA9IGZ1bmN0aW9uKG9uUmVuZGVyLCB3aW4pIHsKKyAgICB0
aGlzLm9uUmVuZGVyID0gb25SZW5kZXI7CisgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7CisgICAg
dGhpcy5jaGFuZ2VzID0gMDsKKyAgICB0aGlzLndpbmRvdyA9IHdpbiB8fCB3aW5kb3c7Cit9Owor
CisoZnVuY3Rpb24oKSB7CisKKworICAgIHRoaXMuc2NoZWR1bGUgPSBmdW5jdGlvbihjaGFuZ2Up
IHsKKyAgICAgICAgdGhpcy5jaGFuZ2VzID0gdGhpcy5jaGFuZ2VzIHwgY2hhbmdlOworICAgICAg
ICBpZiAoIXRoaXMucGVuZGluZykgeworICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CisgICAgICAgICAgICBldmVudC5uZXh0RnJh
bWUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgX3NlbGYucGVuZGluZyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VzOworICAgICAgICAgICAgICAgIHdoaWxlIChjaGFu
Z2VzID0gX3NlbGYuY2hhbmdlcykgeworICAgICAgICAgICAgICAgICAgICBfc2VsZi5jaGFuZ2Vz
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgX3NlbGYub25SZW5kZXIoY2hhbmdlcyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgdGhpcy53aW5kb3cpOworICAgICAgICB9Cisg
ICAgfTsKKworfSkuY2FsbChSZW5kZXJMb29wLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuUmVuZGVy
TG9vcCA9IFJlbmRlckxvb3A7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL211bHRpX3NlbGVjdCcs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlX2xpc3QnLCAnYWNl
L3JhbmdlJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNlL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVy
JywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb21tYW5kcy9tdWx0aV9z
ZWxlY3RfY29tbWFuZHMnLCAnYWNlL3NlYXJjaCcsICdhY2UvZWRpdF9zZXNzaW9uJywgJ2FjZS9l
ZGl0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3ZhciBSYW5n
ZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7Cit2YXIgUmFuZ2UgPSBy
ZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgiLi9zZWxl
Y3Rpb24iKS5TZWxlY3Rpb247Cit2YXIgb25Nb3VzZURvd24gPSByZXF1aXJlKCIuL21vdXNlL211
bHRpX3NlbGVjdF9oYW5kbGVyIikub25Nb3VzZURvd247Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIu
L2xpYi9ldmVudCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgY29t
bWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcyIpOworZXhw
b3J0cy5jb21tYW5kcyA9IGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcy5jb25jYXQoY29tbWFuZHMu
bXVsdGlTZWxlY3RDb21tYW5kcyk7Cit2YXIgU2VhcmNoID0gcmVxdWlyZSgiLi9zZWFyY2giKS5T
ZWFyY2g7Cit2YXIgc2VhcmNoID0gbmV3IFNlYXJjaCgpOworCitmdW5jdGlvbiBmaW5kKHNlc3Np
b24sIG5lZWRsZSwgZGlyKSB7CisgICAgc2VhcmNoLiRvcHRpb25zLndyYXAgPSB0cnVlOworICAg
IHNlYXJjaC4kb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGU7CisgICAgc2VhcmNoLiRvcHRpb25zLmJh
Y2t3YXJkcyA9IGRpciA9PSAtMTsKKyAgICByZXR1cm4gc2VhcmNoLmZpbmQoc2Vzc2lvbik7Cit9
Cit2YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9u
OworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ2V0U2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4kc2VsZWN0aW9uTWFya2VyczsKKyAgICB9OworfSku
Y2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMucmFu
Z2VzID0gbnVsbDsKKyAgICB0aGlzLnJhbmdlTGlzdCA9IG51bGw7CisgICAgdGhpcy5hZGRSYW5n
ZSA9IGZ1bmN0aW9uKHJhbmdlLCAkYmxvY2tDaGFuZ2VFdmVudHMpIHsKKyAgICAgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIXRoaXMuaW5NdWx0aVNl
bGVjdE1vZGUgJiYgdGhpcy5yYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgIHZhciBvbGRS
YW5nZSA9IHRoaXMudG9PcmllbnRlZFJhbmdlKCk7CisgICAgICAgICAgICBpZiAocmFuZ2UuaW50
ZXJzZWN0cyhvbGRSYW5nZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICRibG9ja0NoYW5nZUV2
ZW50cyB8fCB0aGlzLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKKworICAgICAgICAgICAgdGhp
cy5yYW5nZUxpc3QuYWRkKG9sZFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuJG9uQWRkUmFuZ2Uo
b2xkUmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyYW5nZS5jdXJzb3IpCisgICAg
ICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7CisKKyAgICAgICAgdmFyIHJlbW92ZWQg
PSB0aGlzLnJhbmdlTGlzdC5hZGQocmFuZ2UpOworCisgICAgICAgIHRoaXMuJG9uQWRkUmFuZ2Uo
cmFuZ2UpOworCisgICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMu
JG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisKKyAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA+
IDEgJiYgIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQo
Im11bHRpU2VsZWN0Iik7CisgICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IGZhbHNlOworICAgICAg
ICAgICAgdGhpcy5yYW5nZUxpc3QuYXR0YWNoKHRoaXMuc2Vzc2lvbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gJGJsb2NrQ2hhbmdlRXZlbnRzIHx8IHRoaXMuZnJvbU9yaWVudGVkUmFu
Z2UocmFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLnRvU2luZ2xlUmFuZ2UgPSBmdW5jdGlvbihy
YW5nZSkgeworICAgICAgICByYW5nZSA9IHJhbmdlIHx8IHRoaXMucmFuZ2VzWzBdOworICAgICAg
ICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpOworICAgICAgICBpZiAo
cmVtb3ZlZC5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQp
OworCisgICAgICAgIHJhbmdlICYmIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2UpOworICAg
IH07CisgICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICB2
YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnN1YnN0cmFjdFBvaW50KHBvcyk7CisgICAgICAg
IGlmIChyZW1vdmVkKSB7CisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQp
OworICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWRbMF07CisgICAgICAgIH0KKyAgICB9OworICAg
IHRoaXMubWVyZ2VPdmVybGFwcGluZ1JhbmdlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
cmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0Lm1lcmdlKCk7CisgICAgICAgIGlmIChyZW1vdmVkLmxl
bmd0aCkKKyAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisgICAgICAg
IGVsc2UgaWYodGhpcy5yYW5nZXNbMF0pCisgICAgICAgICAgICB0aGlzLmZyb21PcmllbnRlZFJh
bmdlKHRoaXMucmFuZ2VzWzBdKTsKKyAgICB9OworCisgICAgdGhpcy4kb25BZGRSYW5nZSA9IGZ1
bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMucmFuZ2VMaXN0
LnJhbmdlcy5sZW5ndGg7CisgICAgICAgIHRoaXMucmFuZ2VzLnVuc2hpZnQocmFuZ2UpOworICAg
ICAgICB0aGlzLl9lbWl0KCJhZGRSYW5nZSIsIHtyYW5nZTogcmFuZ2V9KTsKKyAgICB9OworCisg
ICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKHJlbW92ZWQpIHsKKyAgICAgICAgdGhp
cy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKKyAgICAgICAgaWYg
KHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAg
ICAgICAgIHZhciBsYXN0UmFuZ2UgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7CisgICAg
ICAgICAgICByZW1vdmVkLnB1c2gobGFzdFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMucmFuZ2VD
b3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gcmVtb3ZlZC5sZW5n
dGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJhbmdlcy5pbmRleE9m
KHJlbW92ZWRbaV0pOworICAgICAgICAgICAgdGhpcy5yYW5nZXMuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2VtaXQoInJlbW92ZVJhbmdlIiwge3Jhbmdlczog
cmVtb3ZlZH0pOworCisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPT0gMCAmJiB0aGlzLmlu
TXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0g
ZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJzaW5nbGVTZWxlY3QiKTsKKyAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLnJh
bmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3RS
YW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTsKKyAgICAgICAgaWYgKGxhc3RSYW5n
ZSAmJiAhbGFzdFJhbmdlLmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSkKKyAgICAgICAgICAgIHRo
aXMuZnJvbU9yaWVudGVkUmFuZ2UobGFzdFJhbmdlKTsKKyAgICB9OworICAgIHRoaXMuJGluaXRS
YW5nZUxpc3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMucmFuZ2VMaXN0ID0gbmV3IFJhbmdlTGlz
dCgpOworICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOworICAgICAgICB0aGlzLnJhbmdlQ291bnQg
PSAwOworICAgIH07CisgICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKTsKKyAgICB9OworCisgICAg
dGhpcy5zcGxpdEludG9MaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMucmFu
Z2VDb3VudCA+IDEpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlTGlzdC5y
YW5nZXM7CisgICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGgg
LSAxXTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2VzWzBd
LnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgdGhpcy50b1NpbmdsZVJhbmdl
KCk7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0UmFuZ2Uu
Y3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgaXNCYWNrd2Fy
ZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7CisgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSByYW5n
ZS5zdGFydC5yb3c7CisgICAgICAgICAgICB2YXIgZW5kUm93ID0gcmFuZ2UuZW5kLnJvdzsKKyAg
ICAgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNCYWNrd2FyZHMpCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLmVuZCwg
ZW5kID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSByYW5nZS5zdGFydCwgZW5kID0gcmFuZ2UuZW5kOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJvbVBvaW50cyhl
bmQsIGVuZCkpOworICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJvbVBvaW50
cyhzdGFydCwgc3RhcnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciByZWN0U2VsID0gW107CisgICAgICAgICAgICB2YXIgciA9IHRo
aXMuZ2V0TGluZVJhbmdlKHN0YXJ0Um93LCB0cnVlKTsKKyAgICAgICAgICAgIHIuc3RhcnQuY29s
dW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHIpOwor
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgKyAxOyBpIDwgZW5kUm93OyBpKysp
CisgICAgICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHRoaXMuZ2V0TGluZVJhbmdlKGksIHRydWUp
KTsKKworICAgICAgICAgICAgciA9IHRoaXMuZ2V0TGluZVJhbmdlKGVuZFJvdywgdHJ1ZSk7Cisg
ICAgICAgICAgICByLmVuZC5jb2x1bW4gPSByYW5nZS5lbmQuY29sdW1uOworICAgICAgICAgICAg
cmVjdFNlbC5wdXNoKHIpOworCisgICAgICAgICAgICByZWN0U2VsLmZvckVhY2godGhpcy5hZGRS
YW5nZSwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMudG9nZ2xlQmxvY2tTZWxl
Y3Rpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxKSB7
CisgICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzOworICAgICAg
ICAgICAgdmFyIGxhc3RSYW5nZSA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV07CisgICAgICAg
ICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHJhbmdlc1swXS5zdGFydCwgbGFzdFJh
bmdlLmVuZCk7CisKKyAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZSgpOworICAgICAgICAg
ICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgbGFzdFJhbmdlLmN1cnNvciA9PSBsYXN0
UmFuZ2Uuc3RhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9
IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25MZWFk
KTsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKHRoaXMuc2VsZWN0aW9uQW5jaG9yKTsKKworICAgICAgICAgICAgdmFyIHJlY3RT
ZWwgPSB0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhjdXJzb3IsIGFuY2hvcik7CisgICAgICAg
ICAgICByZWN0U2VsLmZvckVhY2godGhpcy5hZGRSYW5nZSwgdGhpcyk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrID0gZnVuY3Rpb24oc2NyZWVuQ3Vy
c29yLCBzY3JlZW5BbmNob3IsIGluY2x1ZGVFbXB0eUxpbmVzKSB7CisgICAgICAgIHZhciByZWN0
U2VsID0gW107CisKKyAgICAgICAgdmFyIHhCYWNrd2FyZHMgPSBzY3JlZW5DdXJzb3IuY29sdW1u
IDwgc2NyZWVuQW5jaG9yLmNvbHVtbjsKKyAgICAgICAgaWYgKHhCYWNrd2FyZHMpIHsKKyAgICAg
ICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkN1cnNvci5jb2x1bW47CisgICAgICAgICAg
ICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQW5jaG9yLmNvbHVtbjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1bW47CisgICAg
ICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciB5QmFja3dhcmRzID0gc2NyZWVuQ3Vyc29yLnJvdyA8IHNjcmVlbkFuY2hv
ci5yb3c7CisgICAgICAgIGlmICh5QmFja3dhcmRzKSB7CisgICAgICAgICAgICB2YXIgc3RhcnRS
b3cgPSBzY3JlZW5DdXJzb3Iucm93OworICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkFu
Y2hvci5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBz
Y3JlZW5BbmNob3Iucm93OworICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkN1cnNvci5y
b3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhcnRDb2x1bW4gPCAwKQorICAgICAgICAg
ICAgc3RhcnRDb2x1bW4gPSAwOworICAgICAgICBpZiAoc3RhcnRSb3cgPCAwKQorICAgICAgICAg
ICAgc3RhcnRSb3cgPSAwOworCisgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cpCisgICAg
ICAgICAgICBpbmNsdWRlRW1wdHlMaW5lcyA9IHRydWU7CisKKyAgICAgICAgZm9yICh2YXIgcm93
ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7CisgICAgICAgICAgICB2YXIgcmFu
Z2UgPSBSYW5nZS5mcm9tUG9pbnRzKAorICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zY3Jl
ZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBzdGFydENvbHVtbiksCisgICAgICAgICAgICAgICAg
dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGVuZENvbHVtbikKKyAg
ICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGRvY0VuZCAmJiBpc1NhbWVQb2ludChyYW5nZS5lbmQsIGRvY0VuZCkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHZhciBkb2NFbmQgPSBy
YW5nZS5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYW5nZS5jdXJzb3IgPSB4QmFj
a3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7CisgICAgICAgICAgICByZWN0U2VsLnB1
c2gocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHlCYWNrd2FyZHMpCisgICAgICAg
ICAgICByZWN0U2VsLnJldmVyc2UoKTsKKworICAgICAgICBpZiAoIWluY2x1ZGVFbXB0eUxpbmVz
KSB7CisgICAgICAgICAgICB2YXIgZW5kID0gcmVjdFNlbC5sZW5ndGggLSAxOworICAgICAgICAg
ICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMCkKKyAgICAgICAgICAg
ICAgICBlbmQtLTsKKyAgICAgICAgICAgIGlmIChlbmQgPiAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtzdGFydF0uaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IGVuZDsgaSA+PSBzdGFydDsgaS0tKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlY3RTZWxbaV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZWN0
U2VsLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZWN0U2VsOworICAgIH07Cit9KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpOwordmFy
IEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOworKGZ1bmN0aW9uKCkgeworICAg
IHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJh
Y2tNYXJrZXJzKCk7CisgICAgfTsKKyAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0
aW9uKG9yaWVudGVkUmFuZ2UpIHsKKyAgICAgICAgaWYgKCFvcmllbnRlZFJhbmdlLmN1cnNvcikK
KyAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5lbmQ7CisK
KyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpOworICAgICAgICBv
cmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50ZWRSYW5n
ZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLiRzZWxl
Y3Rpb25NYXJrZXJzLnB1c2gob3JpZW50ZWRSYW5nZSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5z
ZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5n
dGg7CisgICAgICAgIHJldHVybiBvcmllbnRlZFJhbmdlOworICAgIH07CisgICAgdGhpcy5yZW1v
dmVTZWxlY3Rpb25NYXJrZXIgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAoIXJhbmdl
Lm1hcmtlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92
ZU1hcmtlcihyYW5nZS5tYXJrZXIpOworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNlc3Npb24u
JHNlbGVjdGlvbk1hcmtlcnMuaW5kZXhPZihyYW5nZSk7CisgICAgICAgIGlmIChpbmRleCAhPSAt
MSkKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5zcGxpY2UoaW5k
ZXgsIDEpOworICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQgPSB0aGlz
LnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RoOworICAgIH07CisKKyAgICB0aGlzLnJl
bW92ZVNlbGVjdGlvbk1hcmtlcnMgPSBmdW5jdGlvbihyYW5nZXMpIHsKKyAgICAgICAgdmFyIG1h
cmtlckxpc3QgPSB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnM7CisgICAgICAgIGZvciAo
dmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0g
cmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXJrZXIpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdl
Lm1hcmtlcik7CisgICAgICAgICAgICB2YXIgaW5kZXggPSBtYXJrZXJMaXN0LmluZGV4T2YocmFu
Z2UpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICAgICAgICAgIG1hcmtl
ckxpc3Quc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNlc3Npb24u
c2VsZWN0aW9uTWFya2VyQ291bnQgPSBtYXJrZXJMaXN0Lmxlbmd0aDsKKyAgICB9OworCisgICAg
dGhpcy4kb25BZGRSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGhpcy5hZGRTZWxlY3Rp
b25NYXJrZXIoZS5yYW5nZSk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7
CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisg
ICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGhpcy5yZW1v
dmVTZWxlY3Rpb25NYXJrZXJzKGUucmFuZ2VzKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRh
dGVDdXJzb3IoKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwor
ICAgIH07CisKKyAgICB0aGlzLiRvbk11bHRpU2VsZWN0ID0gZnVuY3Rpb24oZSkgeworICAgICAg
ICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IHRydWU7CisKKyAgICAgICAgdGhpcy5zZXRTdHls
ZSgiYWNlX211bHRpc2VsZWN0Iik7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5hZGRLZXlib2Fy
ZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKKyAgICAgICAgdGhpcy5jb21tYW5k
cy5vbigiZXhlYyIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTsKKworICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tN
YXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uU2luZ2xlU2VsZWN0ID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLm11bHRpU2VsZWN0LmluVmlydHVhbE1vZGUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBm
YWxzZTsKKworICAgICAgICB0aGlzLnVuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIpOworICAg
ICAgICB0aGlzLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRzLmtleWJv
YXJkSGFuZGxlcik7CisKKyAgICAgICAgdGhpcy5jb21tYW5kcy5yZW1vdmVFdmVudExpc3RlbmVy
KCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpOworICAgICAgICB0aGlzLnJlbmRlcmVy
LnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJz
KCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjID0gZnVuY3Rpb24oZSkg
eworICAgICAgICB2YXIgY29tbWFuZCA9IGUuY29tbWFuZDsKKyAgICAgICAgdmFyIGVkaXRvciA9
IGUuZWRpdG9yOworICAgICAgICBpZiAoIWVkaXRvci5tdWx0aVNlbGVjdCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uKSB7CisgICAg
ICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAgICAgICAgICAg
ZWRpdG9yLm11bHRpU2VsZWN0LmFkZFJhbmdlKGVkaXRvci5tdWx0aVNlbGVjdC50b09yaWVudGVk
UmFuZ2UoKSk7CisgICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGlu
Z1JhbmdlcygpOworICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24g
PT0gImZvckVhY2giKSB7CisgICAgICAgICAgICBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihjb21t
YW5kLCBlLmFyZ3MpOworICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rp
b24gPT0gInNpbmdsZSIpIHsKKyAgICAgICAgICAgIGVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2Rl
KCk7CisgICAgICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbihlZGl0
b3IsIGUuYXJncyB8fCB7fSk7CisgICAgICAgIH0KKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp
OworICAgIH07IAorICAgIHRoaXMuZm9yRWFjaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKGNtZCwgYXJn
cykgeworICAgICAgICBpZiAodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIHZhciByYW5nZUxpc3Qg
PSBzZWxlY3Rpb24ucmFuZ2VMaXN0OworCisgICAgICAgIHZhciByZWcgPSBzZWxlY3Rpb24uX2V2
ZW50UmVnaXN0cnk7CisgICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHt9OworCisg
ICAgICAgIHZhciB0bXBTZWwgPSBuZXcgU2VsZWN0aW9uKHNlc3Npb24pOworICAgICAgICB0aGlz
LmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gcmFu
Z2VMaXN0LnJhbmdlcy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHRtcFNlbC5mcm9tT3Jp
ZW50ZWRSYW5nZShyYW5nZUxpc3QucmFuZ2VzW2ldKTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0
aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSB0bXBTZWw7CisgICAgICAgICAgICBjbWQuZXhlYyh0
aGlzLCBhcmdzIHx8IHt9KTsKKyAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFuZ2UocmFu
Z2VMaXN0LnJhbmdlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgdG1wU2VsLmRldGFjaCgpOwor
CisgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSBzZWxlY3Rpb247
CisgICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IGZhbHNlOworICAgICAgICBz
ZWxlY3Rpb24uX2V2ZW50UmVnaXN0cnkgPSByZWc7CisgICAgICAgIHNlbGVjdGlvbi5tZXJnZU92
ZXJsYXBwaW5nUmFuZ2VzKCk7CisKKyAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZSgpOworICAg
ICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgfTsKKyAgICB0aGlzLmV4aXRNdWx0
aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5WaXJ0dWFsU2Vs
ZWN0aW9uTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5tdWx0aVNlbGVj
dC50b1NpbmdsZVJhbmdlKCk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Q29weVRleHQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHRleHQgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMuaW5NdWx0
aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLm11bHRpU2VsZWN0
LnJhbmdlTGlzdC5yYW5nZXM7CisgICAgICAgICAgICB0ZXh0ID0gW107CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IHRleHQucHVzaCh0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlc1tpXSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGV4dCA9IHRleHQuam9pbih0aGlzLnNlc3Npb24uZ2V0RG9j
dW1lbnQoKS5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOworICAgICAgICB9IGVsc2UgaWYgKCF0aGlz
LnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRleHQgPSB0aGlzLnNlc3Npb24u
Z2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdGV4dDsKKyAgICB9OworICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0aW9uKHRl
eHQpIHsKKyAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuX2VtaXQoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIGlmICghdGhpcy5p
bk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydCh0ZXh0KTsK
KworICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7CisgICAgICAg
IHZhciByYW5nZXMgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzOworCisgICAgICAg
IGlmIChsaW5lcy5sZW5ndGggPiByYW5nZXMubGVuZ3RoIHx8IChsaW5lcy5sZW5ndGggPD0gMiB8
fCAhbGluZXNbMV0pKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZXhlYygiaW5z
ZXJ0c3RyaW5nIiwgdGhpcywgdGV4dCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5s
ZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CisgICAg
ICAgICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB0aGlzLnNlc3Np
b24ucmVtb3ZlKHJhbmdlKTsKKworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChyYW5n
ZS5zdGFydCwgbGluZXNbaV0pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmZpbmRBbGwg
PSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFkZGl0aXZlKSB7CisgICAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OworICAgICAgICBvcHRpb25zLm5lZWRsZSA9IG5lZWRsZSB8fCBvcHRp
b25zLm5lZWRsZTsKKyAgICAgICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKKworICAgICAg
ICB2YXIgcmFuZ2VzID0gdGhpcy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTsKKyAgICAg
ICAgaWYgKCFyYW5nZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
dGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMu
bXVsdGlTZWxlY3Q7CisKKyAgICAgICAgaWYgKCFhZGRpdGl2ZSkKKyAgICAgICAgICAgIHNlbGVj
dGlvbi50b1NpbmdsZVJhbmdlKHJhbmdlc1swXSk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHJh
bmdlcy5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdl
c1tpXSwgdHJ1ZSk7CisKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKworICAg
ICAgICByZXR1cm4gcmFuZ2VzLmxlbmd0aDsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0TW9yZUxp
bmVzID0gZnVuY3Rpb24oZGlyLCBza2lwKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2Vs
ZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpOworICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSByYW5n
ZS5jdXJzb3IgPT0gcmFuZ2UuZW5kOworCisgICAgICAgIHZhciBzY3JlZW5MZWFkID0gdGhpcy5z
ZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyYW5nZS5jdXJzb3IpOworICAgICAgICBp
ZiAodGhpcy5zZWxlY3Rpb24uJGRlc2lyZWRDb2x1bW4pCisgICAgICAgICAgICBzY3JlZW5MZWFk
LmNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uOworCisgICAgICAgIHZhciBs
ZWFkID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5MZWFkLnJv
dyArIGRpciwgc2NyZWVuTGVhZC5jb2x1bW4pOworCisgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICB2YXIgc2NyZWVuQW5jaG9yID0gdGhpcy5zZXNzaW9uLmRvY3Vt
ZW50VG9TY3JlZW5Qb3NpdGlvbihpc0JhY2t3YXJkcyA/IHJhbmdlLmVuZCA6IHJhbmdlLnN0YXJ0
KTsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVu
dFBvc2l0aW9uKHNjcmVlbkFuY2hvci5yb3cgKyBkaXIsIHNjcmVlbkFuY2hvci5jb2x1bW4pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFuY2hvciA9IGxlYWQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNCYWNrd2FyZHMpIHsKKyAgICAgICAgICAgIHZhciBuZXdSYW5n
ZSA9IFJhbmdlLmZyb21Qb2ludHMobGVhZCwgYW5jaG9yKTsKKyAgICAgICAgICAgIG5ld1Jhbmdl
LmN1cnNvciA9IG5ld1JhbmdlLnN0YXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dmFyIG5ld1JhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpOworICAgICAgICAg
ICAgbmV3UmFuZ2UuY3Vyc29yID0gbmV3UmFuZ2UuZW5kOworICAgICAgICB9CisKKyAgICAgICAg
bmV3UmFuZ2UuZGVzaXJlZENvbHVtbiA9IHNjcmVlbkxlYWQuY29sdW1uOworICAgICAgICBpZiAo
IXRoaXMuc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB0aGlzLnNl
bGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoc2tpcCkKKyAgICAgICAgICAgICAgICB2YXIgdG9SZW1vdmUgPSByYW5nZS5jdXJzb3I7Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7Cisg
ICAgICAgIGlmICh0b1JlbW92ZSkKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnN1YnN0cmFj
dFBvaW50KHRvUmVtb3ZlKTsKKyAgICB9OworICAgIHRoaXMudHJhbnNwb3NlU2VsZWN0aW9ucyA9
IGZ1bmN0aW9uKGRpcikgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAg
ICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisgICAgICAgIHZhciBhbGwgPSBz
ZWwucmFuZ2VzOworCisgICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkgewor
ICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOworICAgICAgICAgICAgaWYgKHJhbmdlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHZhciB0bXAgPSBzZXNzaW9uLmdldFdvcmRSYW5n
ZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAg
cmFuZ2Uuc3RhcnQucm93ID0gdG1wLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICByYW5nZS5z
dGFydC5jb2x1bW4gPSB0bXAuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgICAgIHJhbmdlLmVu
ZC5yb3cgPSB0bXAuZW5kLnJvdzsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0g
dG1wLmVuZC5jb2x1bW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2VsLm1l
cmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKKworICAgICAgICB2YXIgd29yZHMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFu
Z2UgPSBhbGxbaV07CisgICAgICAgICAgICB3b3Jkcy51bnNoaWZ0KHNlc3Npb24uZ2V0VGV4dFJh
bmdlKHJhbmdlKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyIDwgMCkKKyAgICAgICAg
ICAgIHdvcmRzLnVuc2hpZnQod29yZHMucG9wKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB3b3Jkcy5wdXNoKHdvcmRzLnNoaWZ0KCkpOworCisgICAgICAgIGZvciAodmFyIGkgPSBhbGwu
bGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOworICAgICAg
ICAgICAgdmFyIHRtcCA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgICAgICBzZXNzaW9uLnJlcGxh
Y2UocmFuZ2UsIHdvcmRzW2ldKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHRtcC5z
dGFydC5yb3c7CisgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0bXAuc3RhcnQuY29s
dW1uOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdE1vcmUgPSBmdW5jdGlvbihk
aXIsIHNraXApIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAg
IHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0OworCisgICAgICAgIHZhciByYW5nZSA9IHNl
bC50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93
LCByYW5nZS5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2Uu
ZW5kOworICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShyYW5nZSk7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIG5lZWRsZSA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsK
KworICAgICAgICB2YXIgbmV3UmFuZ2UgPSBmaW5kKHNlc3Npb24sIG5lZWRsZSwgZGlyKTsKKyAg
ICAgICAgaWYgKG5ld1JhbmdlKSB7CisgICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBkaXIg
PT0gLTEgPyBuZXdSYW5nZS5zdGFydCA6IG5ld1JhbmdlLmVuZDsKKyAgICAgICAgICAgIHRoaXMu
bXVsdGlTZWxlY3QuYWRkUmFuZ2UobmV3UmFuZ2UpOworICAgICAgICB9CisgICAgICAgIGlmIChz
a2lwKQorICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5zdWJzdHJhY3RQb2ludChyYW5nZS5j
dXJzb3IpOworICAgIH07CisgICAgdGhpcy5hbGlnbkN1cnNvcnMgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBzZWwgPSBzZXNz
aW9uLm11bHRpU2VsZWN0OworICAgICAgICB2YXIgcmFuZ2VzID0gc2VsLnJhbmdlczsKKworICAg
ICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMu
c2VsZWN0aW9uLmdldFJhbmdlKCk7CisgICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5zdGFydC5y
b3csIGxyID0gcmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuc2Vz
c2lvbi5kb2MucmVtb3ZlTGluZXMoZnIsIGxyKTsKKyAgICAgICAgICAgIGxpbmVzID0gdGhpcy4k
cmVBbGlnblRleHQobGluZXMpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5pbnNlcnRM
aW5lcyhmciwgbGluZXMpOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKKyAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5n
dGg7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgcm93ID0gLTE7CisgICAgICAgICAgICB2YXIgc2Ft
ZVJvd1JhbmdlcyA9IHJhbmdlcy5maWx0ZXIoZnVuY3Rpb24ocikgeworICAgICAgICAgICAgICAg
IGlmIChyLmN1cnNvci5yb3cgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByb3cgPSByLmN1cnNvci5yb3c7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHNlbC4kb25SZW1vdmVSYW5nZShzYW1lUm93UmFuZ2VzKTsKKworICAgICAg
ICAgICAgdmFyIG1heENvbCA9IDA7CisgICAgICAgICAgICB2YXIgbWluU3BhY2UgPSBJbmZpbml0
eTsKKyAgICAgICAgICAgIHZhciBzcGFjZU9mZnNldHMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKHIp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOworICAgICAgICAgICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHAucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgc3Bh
Y2VPZmZzZXQgPSBsaW5lLnN1YnN0cihwLmNvbHVtbikuc2VhcmNoKC9cUy9nKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHNwYWNl
T2Zmc2V0ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChwLmNvbHVtbiA+IG1heENvbCkKKyAg
ICAgICAgICAgICAgICAgICAgbWF4Q29sID0gcC5jb2x1bW47CisgICAgICAgICAgICAgICAgaWYg
KHNwYWNlT2Zmc2V0IDwgbWluU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIG1pblNwYWNlID0g
c3BhY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlT2Zmc2V0OworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyLCBpKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHAgPSByLmN1cnNvcjsKKyAgICAgICAgICAgICAgICB2YXIgbCA9
IG1heENvbCAtIHAuY29sdW1uOworICAgICAgICAgICAgICAgIHZhciBkID0gc3BhY2VPZmZzZXRz
W2ldIC0gbWluU3BhY2U7CisgICAgICAgICAgICAgICAgaWYgKGwgPiBkKQorICAgICAgICAgICAg
ICAgICAgICBzZXNzaW9uLmluc2VydChwLCBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIGwgLSBkKSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92
ZShuZXcgUmFuZ2UocC5yb3csIHAuY29sdW1uLCBwLnJvdywgcC5jb2x1bW4gLSBsICsgZCkpOwor
CisgICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByLmVuZC5jb2x1bW4gPSBtYXhDb2w7
CisgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgPSByLmVuZC5yb3cgPSBwLnJvdzsKKyAgICAg
ICAgICAgICAgICByLmN1cnNvciA9IHIuZW5kOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBzZWwuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2VzWzBdKTsKKyAgICAgICAgICAgIHRoaXMucmVu
ZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJh
Y2tNYXJrZXJzKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kcmVBbGlnblRleHQg
PSBmdW5jdGlvbihsaW5lcykgeworICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRydWUsIGlz
UmlnaHRBbGlnbmVkID0gdHJ1ZTsKKyAgICAgICAgdmFyIHN0YXJ0VywgdGV4dFcsIGVuZFc7CisK
KyAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7CisgICAgICAgICAgICB2
YXIgbSA9IGxpbmUubWF0Y2goLyhccyopKC4qPykoXHMqKShbPTpdLiopLyk7CisgICAgICAgICAg
ICBpZiAoIW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFtsaW5lXTsKKworICAgICAgICAgICAg
aWYgKHN0YXJ0VyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5n
dGg7CisgICAgICAgICAgICAgICAgdGV4dFcgPSBtWzJdLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICBlbmRXID0gbVszXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGFydFcgKyB0ZXh0VyArIGVuZFcgIT0gbVsxXS5s
ZW5ndGggKyBtWzJdLmxlbmd0aCArIG1bM10ubGVuZ3RoKQorICAgICAgICAgICAgICAgIGlzUmln
aHRBbGlnbmVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoc3RhcnRXICE9IG1bMV0ubGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGlzTGVmdEFsaWduZWQgPSBmYWxzZTsKKworICAgICAgICAgICAg
aWYgKHN0YXJ0VyA+IG1bMV0ubGVuZ3RoKQorICAgICAgICAgICAgICAgIHN0YXJ0VyA9IG1bMV0u
bGVuZ3RoOworICAgICAgICAgICAgaWYgKHRleHRXIDwgbVsyXS5sZW5ndGgpCisgICAgICAgICAg
ICAgICAgdGV4dFcgPSBtWzJdLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChlbmRXID4gbVszXS5s
ZW5ndGgpCisgICAgICAgICAgICAgICAgZW5kVyA9IG1bM10ubGVuZ3RoOworCisgICAgICAgICAg
ICByZXR1cm4gbTsKKyAgICAgICAgfSkubWFwKGlzTGVmdEFsaWduZWQgPyBpc1JpZ2h0QWxpZ25l
ZCA/IGFsaWduUmlnaHQgOiBhbGlnbkxlZnQgOiB1bkFsaWduKTsKKworICAgICAgICBmdW5jdGlv
biBzcGFjZXMobikgeworICAgICAgICAgICAgcmV0dXJuIGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwg
bik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhbGlnbkxlZnQobSkgeworICAgICAg
ICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXQorICAgICAg
ICAgICAgICAgICsgc3BhY2VzKHRleHRXIC0gbVsyXS5sZW5ndGggKyBlbmRXKQorICAgICAgICAg
ICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpCisgICAgICAgIH0KKyAg
ICAgICAgZnVuY3Rpb24gYWxpZ25SaWdodChtKSB7CisgICAgICAgICAgICByZXR1cm4gIW1bMl0g
PyBtWzBdIDogc3BhY2VzKHN0YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsyXQorICAg
ICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcsICIgIikKKyAgICAgICAgICAgICAgICArIG1bNF0u
cmVwbGFjZSgvXihbPTpdKVxzKy8sICIkMSAiKQorICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9u
IHVuQWxpZ24obSkgeworICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhz
dGFydFcpICsgbVsyXQorICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcpCisgICAgICAgICAg
ICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCAiJDEgIikKKyAgICAgICAgfQorICAg
IH0KK30pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7CisKKworZnVuY3Rpb24gaXNTYW1lUG9pbnQo
cDEsIHAyKSB7CisgICAgcmV0dXJuIHAxLnJvdyA9PSBwMi5yb3cgJiYgcDEuY29sdW1uID09IHAy
LmNvbHVtbjsKK30KK2V4cG9ydHMub25TZXNzaW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAg
IHZhciBzZXNzaW9uID0gZS5zZXNzaW9uOworICAgIGlmICghc2Vzc2lvbi5tdWx0aVNlbGVjdCkg
eworICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzID0gW107CisgICAgICAgIHNlc3Np
b24uc2VsZWN0aW9uLiRpbml0UmFuZ2VMaXN0KCk7CisgICAgICAgIHNlc3Npb24ubXVsdGlTZWxl
Y3QgPSBzZXNzaW9uLnNlbGVjdGlvbjsKKyAgICB9CisgICAgdGhpcy5tdWx0aVNlbGVjdCA9IHNl
c3Npb24ubXVsdGlTZWxlY3Q7CisKKyAgICB2YXIgb2xkU2Vzc2lvbiA9IGUub2xkU2Vzc2lvbjsK
KyAgICBpZiAob2xkU2Vzc2lvbikgeworICAgICAgICBpZiAob2xkU2Vzc2lvbi5tdWx0aVNlbGVj
dCAmJiBvbGRTZXNzaW9uLm11bHRpU2VsZWN0LmVkaXRvciA9PSB0aGlzKQorICAgICAgICAgICAg
b2xkU2Vzc2lvbi5tdWx0aVNlbGVjdC5lZGl0b3IgPSBudWxsOworCisgICAgICAgIHNlc3Npb24u
bXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWRkUmFuZ2UiLCB0aGlzLiRvbkFkZFJh
bmdlKTsKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJy
ZW1vdmVSYW5nZSIsIHRoaXMuJG9uUmVtb3ZlUmFuZ2UpOworICAgICAgICBzZXNzaW9uLm11bHRp
U2VsZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm11bHRpU2VsZWN0IiwgdGhpcy4kb25NdWx0aVNl
bGVjdCk7CisgICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
c2luZ2xlU2VsZWN0IiwgdGhpcy4kb25TaW5nbGVTZWxlY3QpOworICAgIH0KKworICAgIHNlc3Np
b24ubXVsdGlTZWxlY3Qub24oImFkZFJhbmdlIiwgdGhpcy4kb25BZGRSYW5nZSk7CisgICAgc2Vz
c2lvbi5tdWx0aVNlbGVjdC5vbigicmVtb3ZlUmFuZ2UiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTsK
KyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJtdWx0aVNlbGVjdCIsIHRoaXMuJG9uTXVsdGlT
ZWxlY3QpOworICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oInNpbmdsZVNlbGVjdCIsIHRoaXMu
JG9uU2luZ2xlU2VsZWN0KTsKKworICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlICE9IHNl
c3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgIGlmIChzZXNzaW9u
LnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkKKyAgICAgICAgICAgIHRoaXMuJG9uTXVsdGlT
ZWxlY3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kb25TaW5nbGVTZWxlY3Qo
KTsKKyAgICB9Cit9OworZnVuY3Rpb24gTXVsdGlTZWxlY3QoZWRpdG9yKSB7CisgICAgZWRpdG9y
LiRvbkFkZFJhbmdlID0gZWRpdG9yLiRvbkFkZFJhbmdlLmJpbmQoZWRpdG9yKTsKKyAgICBlZGl0
b3IuJG9uUmVtb3ZlUmFuZ2UgPSBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UuYmluZChlZGl0b3IpOwor
ICAgIGVkaXRvci4kb25NdWx0aVNlbGVjdCA9IGVkaXRvci4kb25NdWx0aVNlbGVjdC5iaW5kKGVk
aXRvcik7CisgICAgZWRpdG9yLiRvblNpbmdsZVNlbGVjdCA9IGVkaXRvci4kb25TaW5nbGVTZWxl
Y3QuYmluZChlZGl0b3IpOworCisgICAgZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UuY2FsbChlZGl0
b3IsIGVkaXRvcik7CisgICAgZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIiwgZXhwb3J0cy5vblNl
c3Npb25DaGFuZ2UuYmluZChlZGl0b3IpKTsKKworICAgIGVkaXRvci5vbigibW91c2Vkb3duIiwg
b25Nb3VzZURvd24pOworICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcy5k
ZWZhdWx0Q29tbWFuZHMpOworCisgICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRvcik7Cit9
CisKK2Z1bmN0aW9uIGFkZEFsdEN1cnNvckxpc3RlbmVycyhlZGl0b3IpeworICAgIHZhciBlbCA9
IGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOworICAgIHZhciBhbHRDdXJzb3IgPSBmYWxz
ZTsKKyAgICB2YXIgY29udGVudEVsID0gZWRpdG9yLnJlbmRlcmVyLmNvbnRlbnQ7CisgICAgZXZl
bnQuYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAo
ZS5rZXlDb2RlID09IDE4ICYmICEoZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5
KSkgeworICAgICAgICAgICAgaWYgKCFhbHRDdXJzb3IpIHsKKyAgICAgICAgICAgICAgICBjb250
ZW50RWwuc3R5bGUuY3Vyc29yID0gImNyb3NzaGFpciI7CisgICAgICAgICAgICAgICAgYWx0Q3Vy
c29yID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhbHRDdXJzb3Ip
IHsKKyAgICAgICAgICAgIGNvbnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiIjsKKyAgICAgICAgfQor
ICAgIH0pOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZWwsICJrZXl1cCIsIHJlc2V0KTsKKyAg
ICBldmVudC5hZGRMaXN0ZW5lcihlbCwgImJsdXIiLCByZXNldCk7CisgICAgZnVuY3Rpb24gcmVz
ZXQoKSB7CisgICAgICAgIGlmIChhbHRDdXJzb3IpIHsKKyAgICAgICAgICAgIGNvbnRlbnRFbC5z
dHlsZS5jdXJzb3IgPSAiIjsKKyAgICAgICAgICAgIGFsdEN1cnNvciA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfQorfQorCitleHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvcmFuZ2VfbGlzdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworCit2
YXIgUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yYW5nZXMgPSBbXTsKK307CisK
KyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIp
IHsKKyAgICAgICAgcmV0dXJuIHAxLnJvdyAtIHAyLnJvdyB8fCBwMS5jb2x1bW4gLSBwMi5jb2x1
bW47CisgICAgfTsKKworICAgIHRoaXMucG9pbnRJbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRJ
bmRleCkgeworICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOworCisgICAgICAgIGZvciAo
dmFyIGkgPSBzdGFydEluZGV4IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICB2YXIgcmFuZ2UgPSBsaXN0W2ldOworICAgICAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29t
cGFyZVBvaW50cyhwb3MsIHJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNtcCA9PSAwKQorICAg
ICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlUG9p
bnRzKHBvcywgcmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgaWYgKGNtcCA+PSAwKQorICAgICAg
ICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgICAgICByZXR1cm4gLWktMTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gLWkgLSAxOworICAgIH07CisKKyAgICB0aGlzLmFkZCA9IGZ1bmN0
aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHJh
bmdlLnN0YXJ0KTsKKyAgICAgICAgaWYgKHN0YXJ0SW5kZXggPCAwKQorICAgICAgICAgICAgc3Rh
cnRJbmRleCA9IC1zdGFydEluZGV4IC0gMTsKKworICAgICAgICB2YXIgZW5kSW5kZXggPSB0aGlz
LnBvaW50SW5kZXgocmFuZ2UuZW5kLCBzdGFydEluZGV4KTsKKworICAgICAgICBpZiAoZW5kSW5k
ZXggPCAwKQorICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbmRJbmRleCsrOworCisgICAgICAgIHJldHVybiB0aGlzLnJhbmdl
cy5zcGxpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4LCByYW5nZSk7CisgICAg
fTsKKworICAgIHRoaXMuYWRkTGlzdCA9IGZ1bmN0aW9uKGxpc3QpIHsKKyAgICAgICAgdmFyIHJl
bW92ZWQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07ICkgewor
ICAgICAgICAgICAgcmVtb3ZlZC5wdXNoLmNhbGwocmVtb3ZlZCwgdGhpcy5hZGQobGlzdFtpXSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW1vdmVkOworICAgIH07CisKKyAgICB0aGlz
LnN1YnN0cmFjdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHZhciBpID0gdGhpcy5w
b2ludEluZGV4KHBvcyk7CisKKyAgICAgICAgaWYgKGkgPj0gMCkKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLnJhbmdlcy5zcGxpY2UoaSwgMSk7CisgICAgfTsKKyAgICB0aGlzLm1lcmdlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gW107CisgICAgICAgIHZhciBsaXN0ID0g
dGhpcy5yYW5nZXM7CisgICAgICAgIHZhciBuZXh0ID0gbGlzdFswXSwgcmFuZ2U7CisgICAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmFu
Z2UgPSBuZXh0OworICAgICAgICAgICAgbmV4dCA9IGxpc3RbaV07CisgICAgICAgICAgICB2YXIg
Y21wID0gdGhpcy5jb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5zdGFydCk7CisgICAgICAg
ICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgaWYgKGNtcCA9PSAwICYmICEocmFuZ2UuaXNFbXB0eSgpIHx8IG5leHQuaXNFbXB0eSgpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFy
ZVBvaW50cyhyYW5nZS5lbmQsIG5leHQuZW5kKSA8IDApIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5lbmQucm93ID0gbmV4dC5lbmQucm93OworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1
bW4gPSBuZXh0LmVuZC5jb2x1bW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpc3Qu
c3BsaWNlKGksIDEpOworICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKG5leHQpOworICAgICAgICAg
ICAgbmV4dCA9IHJhbmdlOworICAgICAgICAgICAgaS0tOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHJlbW92ZWQ7CisgICAgfTsKKworICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5wb2ludEluZGV4KHtyb3c6IHJvdywg
Y29sdW1uOiBjb2x1bW59KSA+PSAwOworICAgIH07CisKKyAgICB0aGlzLmNvbnRhaW5zUG9pbnQg
PSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRJbmRleChwb3MpID49
IDA7CisgICAgfTsKKworICAgIHRoaXMucmFuZ2VBdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7Cisg
ICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7CisgICAgICAgIGlmIChpID49IDAp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbaV07CisgICAgfTsKKworCisgICAgdGhp
cy5jbGlwUm93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAgdmFyIGxp
c3QgPSB0aGlzLnJhbmdlczsKKyAgICAgICAgaWYgKGxpc3RbMF0uc3RhcnQucm93ID4gZW5kUm93
IHx8IGxpc3RbbGlzdC5sZW5ndGggLSAxXS5zdGFydC5yb3cgPCBzdGFydFJvdykKKyAgICAgICAg
ICAgIHJldHVybiBbXTsKKworICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9pbnRJbmRl
eCh7cm93OiBzdGFydFJvdywgY29sdW1uOiAwfSk7CisgICAgICAgIGlmIChzdGFydEluZGV4IDwg
MCkKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7CisgICAgICAgIHZh
ciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBlbmRSb3csIGNvbHVtbjogMH0sIHN0
YXJ0SW5kZXgpOworICAgICAgICBpZiAoZW5kSW5kZXggPCAwKQorICAgICAgICAgICAgZW5kSW5k
ZXggPSAtZW5kSW5kZXggLSAxOworCisgICAgICAgIHZhciBjbGlwcGVkID0gW107CisgICAgICAg
IGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykgeworICAgICAgICAg
ICAgY2xpcHBlZC5wdXNoKGxpc3RbaV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjbGlw
cGVkOworICAgIH07CisKKyAgICB0aGlzLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKDAsIHRoaXMucmFuZ2VzLmxlbmd0aCk7CisgICAg
fTsKKworICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICBpZiAo
dGhpcy5zZXNzaW9uKQorICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKKworICAgICAgICB0aGlz
LnNlc3Npb24gPSBzZXNzaW9uOworICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy4kb25DaGFu
Z2UuYmluZCh0aGlzKTsKKworICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScsIHRoaXMu
b25DaGFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsKKyAgICAg
ICAgdGhpcy5zZXNzaW9uID0gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy4kb25DaGFuZ2UgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgIHZhciBjaGFuZ2VSYW5nZSA9IGUuZGF0YS5yYW5nZTsKKyAg
ICAgICAgaWYgKGUuZGF0YS5hY3Rpb25bMF0gPT0gImkiKXsKKyAgICAgICAgICAgIHZhciBzdGFy
dCA9IGNoYW5nZVJhbmdlLnN0YXJ0OworICAgICAgICAgICAgdmFyIGVuZCA9IGNoYW5nZVJhbmdl
LmVuZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSBjaGFuZ2VSYW5n
ZS5zdGFydDsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IGNoYW5nZVJhbmdlLmVuZDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgc3RhcnRSb3cgPSBzdGFydC5yb3c7CisgICAgICAgIHZhciBlbmRS
b3cgPSBlbmQucm93OworICAgICAgICB2YXIgbGluZURpZiA9IGVuZFJvdyAtIHN0YXJ0Um93Owor
CisgICAgICAgIHZhciBjb2xEaWZmID0gLXN0YXJ0LmNvbHVtbiArIGVuZC5jb2x1bW47CisgICAg
ICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlczsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwg
biA9IHJhbmdlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByID0gcmFu
Z2VzW2ldOworICAgICAgICAgICAgaWYgKHIuZW5kLnJvdyA8IHN0YXJ0Um93KQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID4gc3RhcnRSb3cp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChyLnN0YXJ0LnJvdyA9
PSBzdGFydFJvdyAmJiByLnN0YXJ0LmNvbHVtbiA+PSBzdGFydC5jb2x1bW4gKSB7CisgICAgICAg
ICAgICAgICAgci5zdGFydC5jb2x1bW4gKz0gY29sRGlmZjsKKyAgICAgICAgICAgICAgICByLnN0
YXJ0LnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHIuZW5k
LnJvdyA9PSBzdGFydFJvdyAmJiByLmVuZC5jb2x1bW4gPj0gIHN0YXJ0LmNvbHVtbikgeworICAg
ICAgICAgICAgICAgIHIuZW5kLmNvbHVtbiArPSBjb2xEaWZmOworICAgICAgICAgICAgICAgIHIu
ZW5kLnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxpbmVEaWYgIT0gMCAmJiBpIDwgbikgeworICAgICAgICAgICAgZm9yICg7IGkgPCBuOyBp
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKKyAgICAgICAgICAgICAg
ICByLnN0YXJ0LnJvdyArPSBsaW5lRGlmOworICAgICAgICAgICAgICAgIHIuZW5kLnJvdyArPSBs
aW5lRGlmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChSYW5n
ZUxpc3QucHJvdG90eXBlKTsKKworZXhwb3J0cy5SYW5nZUxpc3QgPSBSYW5nZUxpc3Q7Cit9KTsK
KworYWNlLmRlZmluZSgnYWNlL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZl
bnQiKTsKK2Z1bmN0aW9uIGlzU2FtZVBvaW50KHAxLCBwMikgeworICAgIHJldHVybiBwMS5yb3cg
PT0gcDIucm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47Cit9CisKK2Z1bmN0aW9uIG9uTW91
c2VEb3duKGUpIHsKKyAgICB2YXIgZXYgPSBlLmRvbUV2ZW50OworICAgIHZhciBhbHQgPSBldi5h
bHRLZXk7CisgICAgdmFyIHNoaWZ0ID0gZXYuc2hpZnRLZXk7CisgICAgdmFyIGN0cmwgPSBlLmdl
dEFjY2VsS2V5KCk7CisgICAgdmFyIGJ1dHRvbiA9IGUuZ2V0QnV0dG9uKCk7CisKKyAgICBpZiAo
ZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUgJiYgYnV0dG9uID09IDIpIHsKKyAgICAgICAgZS5l
ZGl0b3IudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZS5kb21FdmVudCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjdHJsICYmICFhbHQpIHsKKyAgICAgICAgaWYgKGJ1
dHRvbiA9PSAwICYmIGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAgICAgICAgZS5l
ZGl0b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgdmFyIGVkaXRvciA9IGUuZWRpdG9yOworICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2Vs
ZWN0aW9uOworICAgIHZhciBpc011bHRpU2VsZWN0ID0gZWRpdG9yLmluTXVsdGlTZWxlY3RNb2Rl
OworICAgIHZhciBwb3MgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKTsKKyAgICB2YXIgY3Vyc29y
ID0gc2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgIHZhciBpblNlbGVjdGlvbiA9IGUuaW5TZWxl
Y3Rpb24oKSB8fCAoc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChwb3MsIGN1cnNv
cikpOworCisKKyAgICB2YXIgbW91c2VYID0gZS54LCBtb3VzZVkgPSBlLnk7CisgICAgdmFyIG9u
TW91c2VTZWxlY3Rpb24gPSBmdW5jdGlvbihlKSB7CisgICAgICAgIG1vdXNlWCA9IGUuY2xpZW50
WDsKKyAgICAgICAgbW91c2VZID0gZS5jbGllbnRZOworICAgIH07CisKKyAgICB2YXIgYmxvY2tT
ZWxlY3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG5ld0N1cnNvciA9IGVkaXRvci5yZW5k
ZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpOworICAgICAgICB2
YXIgY3Vyc29yID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obmV3Q3Vyc29yLnJv
dywgbmV3Q3Vyc29yLmNvbHVtbik7CisKKyAgICAgICAgaWYgKGlzU2FtZVBvaW50KHNjcmVlbkN1
cnNvciwgbmV3Q3Vyc29yKQorICAgICAgICAgICAgJiYgaXNTYW1lUG9pbnQoY3Vyc29yLCBzZWxl
Y3Rpb24uc2VsZWN0aW9uTGVhZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNjcmVl
bkN1cnNvciA9IG5ld0N1cnNvcjsKKworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJz
b3JUb1Bvc2l0aW9uKGN1cnNvcik7CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7
CisKKyAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMocmVjdFNlbCk7CisgICAg
ICAgIHJlY3RTZWwgPSBzZWxlY3Rpb24ucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHNjcmVlbkN1cnNv
ciwgc2NyZWVuQW5jaG9yKTsKKyAgICAgICAgcmVjdFNlbC5mb3JFYWNoKGVkaXRvci5hZGRTZWxl
Y3Rpb25NYXJrZXIsIGVkaXRvcik7CisgICAgICAgIGVkaXRvci51cGRhdGVTZWxlY3Rpb25NYXJr
ZXJzKCk7CisgICAgfTsKKyAgICAKKyAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwor
ICAgIHZhciBzY3JlZW5BbmNob3IgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3Jk
aW5hdGVzKG1vdXNlWCwgbW91c2VZKTsKKyAgICB2YXIgc2NyZWVuQ3Vyc29yID0gc2NyZWVuQW5j
aG9yOworCisgICAgCisKKyAgICBpZiAoY3RybCAmJiAhc2hpZnQgJiYgIWFsdCAmJiBidXR0b24g
PT0gMCkgeworICAgICAgICBpZiAoIWlzTXVsdGlTZWxlY3QgJiYgaW5TZWxlY3Rpb24pCisgICAg
ICAgICAgICByZXR1cm47IC8vIGRyYWdnaW5nCisKKyAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0
KSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7
CisgICAgICAgICAgICBlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyKHJhbmdlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBvbGRSYW5nZSA9IHNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VBdFBv
aW50KHBvcyk7CisKKyAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBmdW5j
dGlvbigpe30sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRtcFNlbCA9IHNlbGVjdGlv
bi50b09yaWVudGVkUmFuZ2UoKTsKKworICAgICAgICAgICAgaWYgKG9sZFJhbmdlICYmIHRtcFNl
bC5pc0VtcHR5KCkgJiYgaXNTYW1lUG9pbnQob2xkUmFuZ2UuY3Vyc29yLCB0bXBTZWwuY3Vyc29y
KSkKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG1wU2VsLmN1cnNv
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihyYW5nZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0bXBTZWwpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYmIGFsdCAm
JiBidXR0b24gPT0gMCkgeworICAgICAgICBlLnN0b3AoKTsKKworICAgICAgICBpZiAoaXNNdWx0
aVNlbGVjdCAmJiAhY3RybCkKKyAgICAgICAgICAgIHNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCk7
CisgICAgICAgIGVsc2UgaWYgKCFpc011bHRpU2VsZWN0ICYmIGN0cmwpCisgICAgICAgICAgICBz
ZWxlY3Rpb24uYWRkUmFuZ2UoKTsKKworICAgICAgICBzZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9z
aXRpb24ocG9zKTsKKyAgICAgICAgc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAg
ICAgdmFyIHJlY3RTZWwgPSBbXTsKKworICAgICAgICB2YXIgb25Nb3VzZVNlbGVjdGlvbkVuZCA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7CisgICAg
ICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdFNlbC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmVjdFNlbFtpXSk7CisgICAgICAgIH07CisKKyAgICAg
ICAgdmFyIG9uU2VsZWN0aW9uSW50ZXJ2YWwgPSBibG9ja1NlbGVjdDsKKworICAgICAgICBldmVu
dC5jYXB0dXJlKGVkaXRvci5jb250YWluZXIsIG9uTW91c2VTZWxlY3Rpb24sIG9uTW91c2VTZWxl
Y3Rpb25FbmQpOworICAgICAgICB2YXIgdGltZXJJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkg
e29uU2VsZWN0aW9uSW50ZXJ2YWwoKTt9LCAyMCk7CisKKyAgICAgICAgcmV0dXJuIGUucHJldmVu
dERlZmF1bHQoKTsKKyAgICB9Cit9CisKKworZXhwb3J0cy5vbk1vdXNlRG93biA9IG9uTW91c2VE
b3duOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21t
YW5kcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2tleWJvYXJkL2hh
c2hfaGFuZGxlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK2V4cG9y
dHMuZGVmYXVsdENvbW1hbmRzID0gW3sKKyAgICBuYW1lOiAiYWRkQ3Vyc29yQWJvdmUiLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xKTsgfSwK
KyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtVXAiLCBtYWM6ICJDdHJsLUFsdC1VcCJ9LAor
ICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImFkZEN1cnNvckJlbG93IiwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxKTsgfSwK
KyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtRG93biIsIG1hYzogIkN0cmwtQWx0LURvd24i
fSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJhZGRDdXJzb3JBYm92ZVNr
aXBDdXJyZW50IiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1v
cmVMaW5lcygtMSwgdHJ1ZSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVNoaWZ0
LVVwIiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtVXAifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJhZGRDdXJzb3JCZWxvd1NraXBDdXJyZW50IiwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxLCB0cnVlKTsgfSwKKyAgICBi
aW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtRG93biIsIG1hYzogIkN0cmwtQWx0LVNoaWZ0
LURvd24ifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RNb3Jl
QmVmb3JlIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUo
LTEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1MZWZ0IiwgbWFjOiAiQ3RybC1B
bHQtTGVmdCJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdE1v
cmVBZnRlciIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3Jl
KDEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1SaWdodCIsIG1hYzogIkN0cmwt
QWx0LVJpZ2h0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0
TmV4dEJlZm9yZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RN
b3JlKC0xLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtTGVm
dCIsIG1hYzogIkN0cmwtQWx0LVNoaWZ0LUxlZnQifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3ROZXh0QWZ0ZXIiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgxLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAi
Q3RybC1BbHQtU2hpZnQtUmlnaHQiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1SaWdodCJ9LAorICAg
IHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNwbGl0SW50b0xpbmVzIiwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm11bHRpU2VsZWN0LnNwbGl0SW50b0xpbmVz
KCk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUwiLCBtYWM6ICJDdHJsLUFsdC1M
In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiYWxpZ25DdXJzb3JzIiwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmFsaWduQ3Vyc29ycygpOyB9LAor
ICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1BIiwgbWFjOiAiQ3RybC1BbHQtQSJ9Cit9XTsK
K2V4cG9ydHMubXVsdGlTZWxlY3RDb21tYW5kcyA9IFt7CisgICAgbmFtZTogInNpbmdsZVNlbGVj
dGlvbiIsCisgICAgYmluZEtleTogImVzYyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7IH0sCisgICAgcmVhZG9ubHk6IHRydWUsCisg
ICAgaXNBdmFpbGFibGU6IGZ1bmN0aW9uKGVkaXRvcikge3JldHVybiBlZGl0b3IgJiYgZWRpdG9y
LmluTXVsdGlTZWxlY3RNb2RlfQorfV07CisKK3ZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4u
L2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOworZXhwb3J0cy5rZXlib2FyZEhh
bmRsZXIgPSBuZXcgSGFzaEhhbmRsZXIoZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzKTsKKwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0
dGVyJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBFdmVudEVtaXR0ZXIg
PSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBjb25m
aWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKKwordmFyIFdvcmtlckNsaWVudCA9IGZ1bmN0aW9u
KHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKKyAgICB0aGlzLmNoYW5nZUxp
c3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOworICAgIHRoaXMub25NZXNz
YWdlID0gdGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKTsKKyAgICB0aGlzLm9uRXJyb3IgPSB0aGlz
Lm9uRXJyb3IuYmluZCh0aGlzKTsKKworICAgIHZhciB3b3JrZXJVcmw7CisgICAgaWYgKGNvbmZp
Zy5nZXQoInBhY2thZ2VkIikpIHsKKyAgICAgICAgd29ya2VyVXJsID0gY29uZmlnLm1vZHVsZVVy
bChtb2QsICJ3b3JrZXIiKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgbm9ybWFsaXplUGF0
aCA9IHRoaXMuJG5vcm1hbGl6ZVBhdGg7CisgICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZS5zdXBw
b3J0cyAhPT0gInVuZGVmaW5lZCIgJiYgcmVxdWlyZS5zdXBwb3J0cy5pbmRleE9mKCJ1Y2pzMi1w
aW5mLTAiKSA+PSAwKSB7CisgICAgICAgICAgICB3b3JrZXJVcmwgPSByZXF1aXJlLm5hbWVUb1Vy
bCgiYWNlL3dvcmtlci93b3JrZXJfc291cmNlbWludCIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHJlcXVpcmUubmFtZVRvVXJsICYmICFyZXF1aXJlLnRvVXJsKQorICAgICAg
ICAgICAgICAgIHJlcXVpcmUudG9VcmwgPSByZXF1aXJlLm5hbWVUb1VybDsKKyAgICAgICAgICAg
IHdvcmtlclVybCA9IG5vcm1hbGl6ZVBhdGgocmVxdWlyZS50b1VybCgiYWNlL3dvcmtlci93b3Jr
ZXIiLCBudWxsLCAiXyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0bG5zID0ge307Cisg
ICAgICAgIHRvcExldmVsTmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKG5zKSB7CisgICAgICAg
ICAgICB0bG5zW25zXSA9IG5vcm1hbGl6ZVBhdGgocmVxdWlyZS50b1VybChucywgbnVsbCwgIl8i
KS5yZXBsYWNlKC8uanMoXD8uKik/JC8sICIiKSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHRoaXMuJHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKTsKKyAgICB0aGlzLiR3b3JrZXIu
cG9zdE1lc3NhZ2UoeworICAgICAgICBpbml0IDogdHJ1ZSwKKyAgICAgICAgdGxuczogdGxucywK
KyAgICAgICAgbW9kdWxlOiBtb2QsCisgICAgICAgIGNsYXNzbmFtZTogY2xhc3NuYW1lCisgICAg
fSk7CisKKyAgICB0aGlzLmNhbGxiYWNrSWQgPSAxOworICAgIHRoaXMuY2FsbGJhY2tzID0ge307
CisKKyAgICB0aGlzLiR3b3JrZXIub25lcnJvciA9IHRoaXMub25FcnJvcjsKKyAgICB0aGlzLiR3
b3JrZXIub25tZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2U7Cit9OworCisoZnVuY3Rpb24oKXsKKwor
ICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKworICAgIHRoaXMub25FcnJv
ciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cg
JiYgY29uc29sZS5sb2coZSk7CisgICAgICAgIHRocm93IGU7CisgICAgfTsKKworICAgIHRoaXMu
b25NZXNzYWdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgbXNnID0gZS5kYXRhOworICAg
ICAgICBzd2l0Y2gobXNnLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxvZyI6CisgICAgICAg
ICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cgJiYgY29uc29sZS5sb2cuYXBw
bHkoY29uc29sZSwgbXNnLmRhdGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlICJldmVudCI6CisgICAgICAgICAgICAgICAgdGhpcy5fZW1pdChtc2cubmFtZSwg
e2RhdGE6IG1zZy5kYXRhfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgImNhbGwiOgorICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuY2FsbGJh
Y2tzW21zZy5pZF07CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKG1zZy5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXMuY2FsbGJhY2tzW21zZy5pZF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJG5vcm1hbGl6ZVBhdGgg
PSBmdW5jdGlvbihwYXRoKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgLy8gbmVlZGVk
IGZvciBmaWxlOi8vIHByb3RvY29sCisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAgICAgICAg
cGF0aCA9IHBhdGgucmVwbGFjZSgvXlthLXpdKzpcL1wvW15cL10rLywgIiIpOyAvLyBSZW1vdmUg
ZG9tYWluIG5hbWUgYW5kIHJlYnVpbGQgaXQKKyAgICAgICAgcGF0aCA9IGxvY2F0aW9uLnByb3Rv
Y29sICsgIi8vIiArIGxvY2F0aW9uLmhvc3QKKyAgICAgICAgICAgICsgKHBhdGguY2hhckF0KDAp
ID09ICIvIiA/ICIiIDogbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywgIiIp
KQorICAgICAgICAgICAgKyAiLyIgKyBwYXRoLnJlcGxhY2UoL15bXC9dKy8sICIiKTsKKyAgICAg
ICAgcmV0dXJuIHBhdGg7CisgICAgfTsKKworICAgIHRoaXMudGVybWluYXRlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuX2VtaXQoInRlcm1pbmF0ZSIsIHt9KTsKKyAgICAgICAgdGhpcy4k
d29ya2VyLnRlcm1pbmF0ZSgpOworICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsOworICAgICAg
ICB0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5jaGFuZ2VMaXN0
ZW5lcik7CisgICAgICAgIHRoaXMuJGRvYyA9IG51bGw7CisgICAgfTsKKworICAgIHRoaXMuc2Vu
ZCA9IGZ1bmN0aW9uKGNtZCwgYXJncykgeworICAgICAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3Nh
Z2Uoe2NvbW1hbmQ6IGNtZCwgYXJnczogYXJnc30pOworICAgIH07CisKKyAgICB0aGlzLmNhbGwg
PSBmdW5jdGlvbihjbWQsIGFyZ3MsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChjYWxsYmFjaykg
eworICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5jYWxsYmFja0lkKys7CisgICAgICAgICAgICB0
aGlzLmNhbGxiYWNrc1tpZF0gPSBjYWxsYmFjazsKKyAgICAgICAgICAgIGFyZ3MucHVzaChpZCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZW5kKGNtZCwgYXJncyk7CisgICAgfTsKKworICAg
IHRoaXMuZW1pdCA9IGZ1bmN0aW9uKGV2ZW50LCBkYXRhKSB7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OiBldmVudCwgZGF0YToge2Rh
dGE6IGRhdGEuZGF0YX19KTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChleCkge30KKyAgICB9
OworCisgICAgdGhpcy5hdHRhY2hUb0RvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7CisgICAgICAg
IGlmKHRoaXMuJGRvYykKKyAgICAgICAgICAgIHRoaXMudGVybWluYXRlKCk7CisKKyAgICAgICAg
dGhpcy4kZG9jID0gZG9jOworICAgICAgICB0aGlzLmNhbGwoInNldFZhbHVlIiwgW2RvYy5nZXRW
YWx1ZSgpXSk7CisgICAgICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy5jaGFuZ2VMaXN0ZW5lcik7
CisgICAgfTsKKworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGUucmFuZ2UgPSB7CisgICAgICAgICAgICBzdGFydDogZS5kYXRhLnJhbmdlLnN0YXJ0LAor
ICAgICAgICAgICAgZW5kOiBlLmRhdGEucmFuZ2UuZW5kCisgICAgICAgIH07CisgICAgICAgIHRo
aXMuZW1pdCgiY2hhbmdlIiwgZSk7CisgICAgfTsKKworfSkuY2FsbChXb3JrZXJDbGllbnQucHJv
dG90eXBlKTsKKworCit2YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVz
cGFjZXMsIG1vZCwgY2xhc3NuYW1lKSB7CisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5lciA9IHRoaXMu
Y2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTsKKyAgICB0aGlzLmNhbGxiYWNrSWQgPSAxOworICAg
IHRoaXMuY2FsbGJhY2tzID0ge307CisgICAgdGhpcy5tZXNzYWdlQnVmZmVyID0gW107CisKKyAg
ICB2YXIgbWFpbiA9IG51bGw7CisgICAgdmFyIHNlbmRlciA9IE9iamVjdC5jcmVhdGUoRXZlbnRF
bWl0dGVyKTsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOworCisgICAgdGhpcy4kd29ya2VyID0ge30K
KyAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIF9z
ZWxmLm1lc3NhZ2VCdWZmZXIucHVzaChlKTsKKyAgICAgICAgbWFpbiAmJiBzZXRUaW1lb3V0KHBy
b2Nlc3NOZXh0KTsKKyAgICB9OworCisgICAgdmFyIHByb2Nlc3NOZXh0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBtc2cgPSBfc2VsZi5tZXNzYWdlQnVmZmVyLnNoaWZ0KCk7CisgICAgICAg
IGlmIChtc2cuY29tbWFuZCkKKyAgICAgICAgICAgIG1haW5bbXNnLmNvbW1hbmRdLmFwcGx5KG1h
aW4sIG1zZy5hcmdzKTsKKyAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50KQorICAgICAgICAgICAg
c2VuZGVyLl9lbWl0KG1zZy5ldmVudCwgbXNnLmRhdGEpOworICAgIH07CisKKyAgICBzZW5kZXIu
cG9zdE1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgX3NlbGYub25NZXNzYWdlKHtk
YXRhOiBtc2d9KTsKKyAgICB9OworICAgIHNlbmRlci5jYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEs
IGNhbGxiYWNrSWQpIHsKKyAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTogImNhbGwiLCBp
ZDogY2FsbGJhY2tJZCwgZGF0YTogZGF0YX0pOworICAgIH07CisgICAgc2VuZGVyLmVtaXQgPSBm
dW5jdGlvbihuYW1lLCBkYXRhKSB7CisgICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6ICJl
dmVudCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTsKKyAgICB9OworCisgICAgcmVxdWlyZShb
bW9kXSwgZnVuY3Rpb24oTWFpbikgeworICAgICAgICBtYWluID0gbmV3IE1haW5bY2xhc3NuYW1l
XShzZW5kZXIpOworICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1ZmZlci5sZW5ndGgpCisg
ICAgICAgICAgICBwcm9jZXNzTmV4dCgpOworICAgIH0pOworfTsKKworVUlXb3JrZXJDbGllbnQu
cHJvdG90eXBlID0gV29ya2VyQ2xpZW50LnByb3RvdHlwZTsKKworZXhwb3J0cy5VSVdvcmtlckNs
aWVudCA9IFVJV29ya2VyQ2xpZW50OworZXhwb3J0cy5Xb3JrZXJDbGllbnQgPSBXb3JrZXJDbGll
bnQ7CisKK30pOworYWNlLmRlZmluZSgnYWNlL3BsYWNlaG9sZGVyJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywg
J2FjZS9saWIvb29wJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBFdmVudEVtaXR0ZXIg
PSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIG9vcCA9
IHJlcXVpcmUoIi4vbGliL29vcCIpOworCit2YXIgUGxhY2VIb2xkZXIgPSBmdW5jdGlvbihzZXNz
aW9uLCBsZW5ndGgsIHBvcywgb3RoZXJzLCBtYWluQ2xhc3MsIG90aGVyc0NsYXNzKSB7CisgICAg
dmFyIF9zZWxmID0gdGhpczsKKyAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKKyAgICB0aGlzLnNl
c3Npb24gPSBzZXNzaW9uOworICAgIHRoaXMuZG9jID0gc2Vzc2lvbi5nZXREb2N1bWVudCgpOwor
ICAgIHRoaXMubWFpbkNsYXNzID0gbWFpbkNsYXNzOworICAgIHRoaXMub3RoZXJzQ2xhc3MgPSBv
dGhlcnNDbGFzczsKKyAgICB0aGlzLiRvblVwZGF0ZSA9IHRoaXMub25VcGRhdGUuYmluZCh0aGlz
KTsKKyAgICB0aGlzLmRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25VcGRhdGUpOworICAgIHRoaXMu
JG90aGVycyA9IG90aGVyczsKKyAgICAKKyAgICB0aGlzLiRvbkN1cnNvckNoYW5nZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgX3Nl
bGYub25DdXJzb3JDaGFuZ2UoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAKKyAgICB0aGlz
LiRwb3MgPSBwb3M7CisgICAgdmFyIHVuZG9TdGFjayA9IHNlc3Npb24uZ2V0VW5kb01hbmFnZXIo
KS4kdW5kb1N0YWNrIHx8IHNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS4kdW5kb3N0YWNrIHx8IHts
ZW5ndGg6IC0xfTsKKyAgICB0aGlzLiR1bmRvU3RhY2tEZXB0aCA9ICB1bmRvU3RhY2subGVuZ3Ro
OworICAgIHRoaXMuc2V0dXAoKTsKKworICAgIHNlc3Npb24uc2VsZWN0aW9uLm9uKCJjaGFuZ2VD
dXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7Cit9OworCisoZnVuY3Rpb24oKSB7CisKKyAg
ICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5zZXR1cCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICB2YXIgZG9jID0g
dGhpcy5kb2M7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2
YXIgcG9zID0gdGhpcy4kcG9zOworCisgICAgICAgIHRoaXMucG9zID0gZG9jLmNyZWF0ZUFuY2hv
cihwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAgICAgdGhpcy5tYXJrZXJJZCA9IHNlc3Npb24u
YWRkTWFya2VyKG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBwb3MuY29s
dW1uICsgdGhpcy5sZW5ndGgpLCB0aGlzLm1haW5DbGFzcywgbnVsbCwgZmFsc2UpOworICAgICAg
ICB0aGlzLnBvcy5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHNl
c3Npb24ucmVtb3ZlTWFya2VyKF9zZWxmLm1hcmtlcklkKTsKKyAgICAgICAgICAgIF9zZWxmLm1h
cmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKGV2ZW50LnZhbHVlLnJvdywgZXZl
bnQudmFsdWUuY29sdW1uLCBldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbitfc2Vs
Zi5sZW5ndGgpLCBfc2VsZi5tYWluQ2xhc3MsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHRoaXMub3RoZXJzID0gW107CisgICAgICAgIHRoaXMuJG90aGVycy5mb3JFYWNoKGZ1
bmN0aW9uKG90aGVyKSB7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gZG9jLmNyZWF0ZUFuY2hv
cihvdGhlci5yb3csIG90aGVyLmNvbHVtbik7CisgICAgICAgICAgICBfc2VsZi5vdGhlcnMucHVz
aChhbmNob3IpOworICAgICAgICB9KTsKKyAgICAgICAgc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KGZh
bHNlKTsKKyAgICB9OworICAgIHRoaXMuc2hvd090aGVyTWFya2VycyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZih0aGlzLm90aGVyc0FjdGl2ZSkgcmV0dXJuOworICAgICAgICB2YXIgc2Vzc2lv
biA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAgICAgdGhp
cy5vdGhlcnNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLm90aGVycy5mb3JFYWNoKGZ1bmN0
aW9uKGFuY2hvcikgeworICAgICAgICAgICAgYW5jaG9yLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRN
YXJrZXIobmV3IFJhbmdlKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4sIGFuY2hvci5yb3csIGFu
Y2hvci5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYub3RoZXJzQ2xhc3MsIG51bGwsIGZhbHNl
KTsKKyAgICAgICAgICAgIGFuY2hvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihhbmNob3IubWFya2VySWQpOworICAg
ICAgICAgICAgICAgIGFuY2hvci5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5n
ZShldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbiwgZXZlbnQudmFsdWUucm93LCBl
dmVudC52YWx1ZS5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYub3RoZXJzQ2xhc3MsIG51bGws
IGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMu
aGlkZU90aGVyTWFya2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZighdGhpcy5vdGhlcnNB
Y3RpdmUpIHJldHVybjsKKyAgICAgICAgdGhpcy5vdGhlcnNBY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm90aGVyc1tpXS5tYXJrZXJJZCk7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICB2YXIgZGVsdGEgPSBldmVudC5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBk
ZWx0YS5yYW5nZTsKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93
KSByZXR1cm47CisgICAgICAgIGlmKHJhbmdlLnN0YXJ0LnJvdyAhPT0gdGhpcy5wb3Mucm93KSBy
ZXR1cm47CisgICAgICAgIGlmICh0aGlzLiR1cGRhdGluZykgcmV0dXJuOworICAgICAgICB0aGlz
LiR1cGRhdGluZyA9IHRydWU7CisgICAgICAgIHZhciBsZW5ndGhEaWZmID0gZGVsdGEuYWN0aW9u
ID09PSAiaW5zZXJ0VGV4dCIgPyByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1u
IDogcmFuZ2Uuc3RhcnQuY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbjsKKyAgICAgICAgCisgICAg
ICAgIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA+PSB0aGlzLnBvcy5jb2x1bW4gJiYgcmFuZ2Uuc3Rh
cnQuY29sdW1uIDw9IHRoaXMucG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoICsgMSkgeworICAgICAg
ICAgICAgdmFyIGRpc3RhbmNlRnJvbVN0YXJ0ID0gcmFuZ2Uuc3RhcnQuY29sdW1uIC0gdGhpcy5w
b3MuY29sdW1uOworICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gbGVuZ3RoRGlmZjsKKyAgICAg
ICAgICAgIGlmKCF0aGlzLnNlc3Npb24uJGZyb21VbmRvKSB7CisgICAgICAgICAgICAgICAgaWYo
ZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgb3RoZXJQb3MgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjog
b3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9OworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYob3RoZXJQb3Mucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQu
Y29sdW1uIDwgb3RoZXJQb3MuY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1Bvcy5jb2x1bW4gKz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZG9jLmluc2VydChuZXdQb3MsIGRlbHRhLnRleHQpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmKGRlbHRhLmFjdGlvbiA9PT0gInJlbW92ZVRleHQiKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm90aGVycy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0g
dGhpcy5vdGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9zID0ge3Jv
dzogb3RoZXJQb3Mucm93LCBjb2x1bW46IG90aGVyUG9zLmNvbHVtbiArIGRpc3RhbmNlRnJvbVN0
YXJ0fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyUG9zLnJvdyA9PT0gcmFuZ2Uu
c3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyUG9zLmNvbHVtbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0aERpZmY7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZW1vdmUobmV3IFJhbmdlKG5ld1Bvcy5yb3cs
IG5ld1Bvcy5jb2x1bW4sIG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4gLSBsZW5ndGhEaWZmKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID09PSB0aGlzLnBvcy5jb2x1bW4gJiYgZGVsdGEuYWN0
aW9uID09PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zLnNldFBvc2l0aW9u
KHRoaXMucG9zLnJvdywgdGhpcy5wb3MuY29sdW1uIC0gbGVuZ3RoRGlmZik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyID0gdGhpcy5vdGhlcnNb
aV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90aGVy
LnJvdywgY29sdW1uOiBvdGhlci5jb2x1bW4gLSBsZW5ndGhEaWZmfTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZihvdGhlci5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiByYW5nZS5z
dGFydC5jb2x1bW4gPCBvdGhlci5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1Bvcy5jb2x1bW4gKz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdGhlci5zZXRQb3NpdGlvbihuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAw
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihyYW5nZS5zdGFy
dC5jb2x1bW4gPT09IHRoaXMucG9zLmNvbHVtbiAmJiBkZWx0YS5hY3Rpb24gPT09ICJyZW1vdmVU
ZXh0IikgeworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMu
b3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyLnJvdyA9PT0g
cmFuZ2Uuc3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyLmNvbHVtbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5zZXRQb3NpdGlvbihvdGhlci5y
b3csIG90aGVyLmNvbHVtbiAtIGxlbmd0aERpZmYpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfS5i
aW5kKHRoaXMpLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLnBvcy5fZW1pdCgiY2hhbmdlIiwge3ZhbHVlOiB0aGlzLnBvc30pOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLl9lbWl0KCJjaGFuZ2UiLCB7dmFsdWU6IHRoaXMu
b3RoZXJzW2ldfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kdXBk
YXRpbmcgPSBmYWxzZTsKKyAgICB9OworCisgICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGlmICh0aGlzLiR1cGRhdGluZykgcmV0dXJuOworICAgICAg
ICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKKyAgICAgICAg
aWYocG9zLnJvdyA9PT0gdGhpcy5wb3Mucm93ICYmIHBvcy5jb2x1bW4gPj0gdGhpcy5wb3MuY29s
dW1uICYmIHBvcy5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHRoaXMuc2hvd090aGVyTWFya2VycygpOworICAgICAgICAgICAgdGhpcy5fZW1p
dCgiY3Vyc29yRW50ZXIiLCBldmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
aGlzLmhpZGVPdGhlck1hcmtlcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImN1cnNvckxl
YXZlIiwgZXZlbnQpOworICAgICAgICB9CisgICAgfTsgICAgCisgICAgdGhpcy5kZXRhY2ggPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm1hcmtl
cklkKTsKKyAgICAgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzKCk7CisgICAgICAgIHRoaXMuZG9j
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uVXBkYXRlKTsKKyAgICAgICAg
dGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VDdXJzb3Ii
LCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisgICAgICAgIHRoaXMucG9zLmRldGFjaCgpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB0aGlzLm90aGVyc1tpXS5kZXRhY2goKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LnNlc3Npb24uc2V0VW5kb1NlbGVjdCh0cnVlKTsKKyAgICB9OworICAgIHRoaXMuY2FuY2VsID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmKHRoaXMuJHVuZG9TdGFja0RlcHRoID09PSAtMSkKKyAg
ICAgICAgICAgIHRocm93IEVycm9yKCJDYW5jZWxpbmcgcGxhY2Vob2xkZXJzIG9ubHkgc3VwcG9y
dGVkIHdpdGggdW5kbyBtYW5hZ2VyIGF0dGFjaGVkIHRvIHNlc3Npb24uIik7CisgICAgICAgIHZh
ciB1bmRvTWFuYWdlciA9IHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpOworICAgICAgICB2
YXIgdW5kb3NSZXF1aXJlZCA9ICh1bmRvTWFuYWdlci4kdW5kb1N0YWNrIHx8IHVuZG9NYW5hZ2Vy
LiR1bmRvc3RhY2spLmxlbmd0aCAtIHRoaXMuJHVuZG9TdGFja0RlcHRoOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHVuZG9zUmVxdWlyZWQ7IGkrKykgeworICAgICAgICAgICAgdW5kb01h
bmFnZXIudW5kbyh0cnVlKTsKKyAgICAgICAgfQorICAgIH07Cit9KS5jYWxsKFBsYWNlSG9sZGVy
LnByb3RvdHlwZSk7CisKKworZXhwb3J0cy5QbGFjZUhvbGRlciA9IFBsYWNlSG9sZGVyOworfSk7
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlJywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5S
YW5nZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307
CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbnVsbDsK
KyAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbnVsbDsKKyAgICB0aGlzLmdldEZvbGRXaWRn
ZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgbGlu
ZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOworICAgICAgICBpZiAodGhpcy5mb2xkaW5nU3RhcnRN
YXJrZXIudGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiAic3RhcnQiOworICAgICAgICBp
ZiAoZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiCisgICAgICAgICAgICAgICAgJiYgdGhpcy5m
b2xkaW5nU3RvcE1hcmtlcgorICAgICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0b3BNYXJr
ZXIudGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICAgICAgcmV0dXJu
ICIiOworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNl
c3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisK
KyAgICB0aGlzLmluZGVudGF0aW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVt
bikgeworICAgICAgICB2YXIgcmUgPSAvXFMvOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
Z2V0TGluZShyb3cpOworICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsK
KyAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gY29sdW1uIHx8IGxpbmUubGVuZ3RoOworICAgICAgICB2
YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKKyAgICAgICAgdmFyIHN0YXJ0Um93ID0g
cm93OworICAgICAgICB2YXIgZW5kUm93ID0gcm93OworCisgICAgICAgIHdoaWxlICgrK3JvdyA8
IG1heFJvdykgeworICAgICAgICAgICAgdmFyIGxldmVsID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyku
c2VhcmNoKHJlKTsKKworICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGV2ZWwgPD0gc3RhcnRMZXZlbCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZW5kUm93ID0gcm93OworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CisgICAgICAgICAgICB2YXIg
ZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOworICAgICAgICAgICAg
cmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1u
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2sgPSBm
dW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7CisgICAgICAg
IHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gKyAxfTsKKyAgICAgICAgdmFy
IGVuZCA9IHNlc3Npb24uJGZpbmRDbG9zaW5nQnJhY2tldChicmFja2V0LCBzdGFydCwgdHlwZVJl
KTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0c1tlbmQucm93XTsKKyAgICAgICAgaWYgKGZ3ID09IG51
bGwpCisgICAgICAgICAgICBmdyA9IHRoaXMuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBlbmQucm93
KTsKKworICAgICAgICBpZiAoZncgPT0gInN0YXJ0IiAmJiBlbmQucm93ID4gc3RhcnQucm93KSB7
CisgICAgICAgICAgICBlbmQucm93IC0tOworICAgICAgICAgICAgZW5kLmNvbHVtbiA9IHNlc3Np
b24uZ2V0TGluZShlbmQucm93KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJh
bmdlLmZyb21Qb2ludHMoc3RhcnQsIGVuZCk7CisgICAgfTsKKworICAgIHRoaXMuY2xvc2luZ0Jy
YWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29sdW1uLCB0eXBl
UmUpIHsKKyAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OworICAg
ICAgICB2YXIgc3RhcnQgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoYnJhY2tldCwgZW5k
KTsKKworICAgICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHN0YXJ0LmNvbHVtbisrOworICAgICAgICBlbmQuY29sdW1uLS07CisKKyAgICAgICAgcmV0dXJu
ICBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOworICAgIH07Cit9KS5jYWxsKEZvbGRNb2Rl
LnByb3RvdHlwZSk7CisKK30pOworOworICAgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGFjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLCBmdW5jdGlvbihhKSB7CisgICAgICAg
ICAgICAgICAgICAgIGEgJiYgYS5jb25maWcuaW5pdCgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXdpbmRvdy5hY2UpCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlID0ge307
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhKSBpZiAoYS5oYXNPd25Qcm9w
ZXJ0eShrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWNlW2tleV0gPSBhW2tleV07Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSgpOworICAgICAgICAKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJlNzZjYTljNDQ1Zjhk
YjcwN2VmZjQ5ZWMzMjhiZjFiNDU5MTBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcwpAQCAtMCwwICsxLDMg
QEAKKy5hY2VfZWRpdG9yICogeworICAgIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmFlMTJlYjk3
NDgyNzExZTMwMTY1OTk4MGEzYzgwMjZjYzE1ZDdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMKQEAgLTAsMCArMSw3
NTEgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgu
b3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAg
ICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3MnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3Rva2VuaXplcics
ICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNl
X291dGRlbnQnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2FjZS9tb2RlL2JlaGF2aW91
ci9jc3MnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3Zh
ciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2YXIgVG9rZW5pemVyID0gcmVx
dWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0g
cmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7Cit2YXIg
TWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQi
KS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKK3ZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93
b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBDc3NCZWhhdmlvdXIgPSBy
ZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7Cit2YXIgQ1N0eWxlRm9sZE1v
ZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgQ3Nz
SGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpLCAiaSIpOworICAgIHRoaXMuJG91dGRlbnQgPSBu
ZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKKyAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3Nz
QmVoYXZpb3VyKCk7CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUo
KTsKK307Citvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOworCisoZnVuY3Rpb24oKSB7CisK
KyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOworCisgICAgdGhpcy5nZXROZXh0TGlu
ZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFyIGluZGVu
dCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJHRv
a2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CisgICAgICAgIGlmICh0
b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQi
KSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9CisKKyAgICAgICAgdmFy
IG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CisgICAgICAgIGlmIChtYXRjaCkgewor
ICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBp
bmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUs
IGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVu
dChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlv
bihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChk
b2MsIHJvdyk7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vz
c2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAi
YWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0dGFjaFRv
RG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIub24oImNz
c2xpbnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25z
KGUuZGF0YSk7CisgICAgICAgIH0pOworCisgICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9OworCit9KS5jYWxsKE1v
ZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKKworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbW9kZS90ZXh0
X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJl
KCIuLi9saWIvbGFuZyIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4
dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2YXIgc3VwcG9ydFR5cGUg
PSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFuaW1hdGlvbi1maWxsLW1vZGV8YWxpZ25tZW50LWFk
anVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbi1kaXJlY3Rp
b258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9u
LW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxhbmlt
YXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxpdHl8YmFja2dyb3VuZC1h
dHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29s
b3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9u
fGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kfGJhc2VsaW5lLXNo
aWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmstbGV2ZWx8Ym9va21hcmst
c3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVyLWJvdHRvbS1jb2xvcnxi
b3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRl
ci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29sbGFwc2V8Ym9yZGVy
LWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRlci1pbWFnZS1yZXBl
YXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXdp
ZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRl
ci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yaWdodC1jb2xv
cnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1zcGFjaW5nfGJv
cmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1sZWZ0LXJh
ZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3At
d2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdufGJveC1kZWNvcmF0aW9u
LWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZsZXh8Ym94LWxpbmVzfGJv
eC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNoYWRvd3xib3gtc2l6aW5n
fGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2FwdGlvbi1zaWRlfGNsZWFy
fGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1u
LWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1
bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNv
dW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0ZXJ8Y3VlLWJlZm9yZXxj
dWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2VsaW5lfGRyb3AtaW5pdGlh
bC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRyb3AtaW5pdGlhbC1iZWZv
cmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1pbml0aWFsLXNpemV8ZHJv
cC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8Zml0LXBvc2l0aW9ufGZs
b2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxm
b250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9udHxncmlk
LWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0fGh5cGhlbmF0ZS1h
ZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8aHlwaGVuYXRlLWxpbmVz
fGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3JpZW50YXRpb258aW1hZ2Ut
cmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGlnbnxsZWZ0fGxldHRlci1z
cGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5lLXN0YWNraW5nLXNoaWZ0
fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0LXN0eWxlLWltYWdlfGxp
c3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2luLWJvdHRv
bXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJnaW58bWFyay1hZnRlcnxt
YXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1hcnF1ZWUtcGxheS1jb3Vu
dHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhl
aWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8bmF2LWxlZnR8bmF2LXJp
Z2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxv
dXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvdy1zdHlsZXxvdmVyZmxv
dy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRp
bmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWst
YmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8cGF1c2UtYWZ0ZXJ8cGF1
c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwaG9uZW1lc3xw
aXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVzZW50YXRpb24tbGV2ZWx8
cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxyZXNpemV8cmVzdC1hZnRl
cnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9uLXBvaW50fHJvdGF0aW9u
fHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1Ynktc3BhbnxzaXplfHNw
ZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWFrfHNwZWVjaC1y
YXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQtbmFtZXx0YXJnZXQtbmV3
fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRleHQtYWxpZ258dGV4dC1k
ZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1pbmRlbnR8dGV4dC1qdXN0
aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0ZXh0LXdyYXB8dG9w
fHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybXx0cmFuc2l0aW9uLWRl
bGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0aW9uLXRp
bWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGlnbnx2aXNp
YmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2UtZmFtaWx5fHZvaWNlLXBp
dGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3RyZXNzfHZvaWNlLXZvbHVt
ZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8d2lkb3dzfHdpZHRofHdv
cmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKK3ZhciBzdXBwb3J0RnVu
Y3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdiYXx1cmx8YXR0cnxjb3Vu
dGVyfGNvdW50ZXJzIjsKK3ZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBvcnRzLnN1cHBvcnRDb25z
dGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3JvbGx8YWxsfGFscGhhYmV0
aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQtY29sdW1ufGF2b2lkLXBh
Z2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZvcmV8YmVsb3d8YmlkaS1v
dmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRlcnxib3JkZXItYm94fGJv
dGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNhcHMtaGVpZ2h0
fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGljfGNsb25l
fGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNvbnNpZGVyLXNoaWZ0c3xj
b250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1iZXppZXJ8ZGFzaGVkfGRl
Y2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3JlZ2Fy
ZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0
ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWFzZS1pbnxlYXNlLWlu
LW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1Ynl8ZmlsbHxmaXhlZHxn
ZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFuZ2luZ3xoZWJyZXd8aGVs
cHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpY29ufGlkZW9ncmFw
aC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBo
LXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxpbmhlcml0fGluaXRpYWx8
aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0fGlubGluZS10YWJsZXxp
bmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGludmVydHxpdGFs
aWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxsYXN0fGxlZnR8bGln
aHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxpc3QtaXRlbXxsb2NhbHxs
b29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dlci1yb21hbnxsb3dl
cmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1heC1zaXplfG1lZGl1bXxt
ZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdzcGFwZXJ8
bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1xdW90ZXxuby1yZXBlYXR8
bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxvYmxpcXVlfG9wZW4tcXVv
dGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFnZXxwb2ludGVyfHByZS1s
aW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxy
ZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxyaWdodHxyb3VuZHxyb3ct
cmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRlfHNsaWNlfHNtYWxs
LWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3RhcnR8c3RhdGljfHN0YXR1
cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0cmljdHxzdWJ8c3VwZXJ8
c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1jb2x1bW4tZ3JvdXB8dGFi
bGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3JvdXB8dGFibGUtcm93
LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVkZ2V8dGV4dC1iZWZvcmUt
ZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0aGlja3x0aGlufHRyYW5z
cGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBl
cmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2li
bGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyI7Cit2YXIgc3VwcG9ydENv
bnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9yID0gImFxdWF8YmxhY2t8
Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVy
cGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciOwordmFyIHN1cHBvcnRDb25zdGFudEZv
bnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlhbHxjZW50dXJ5fGNvbWlj
fGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8
c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fu
cy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOworCit2YXIgbnVtUmUgPSBleHBvcnRzLm51bVJlID0g
IlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKK3ZhciBwc2V1ZG9FbGVt
ZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxiKGFmdGVyfGJlZm9yZXxm
aXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVjdGlvbilcXGIiOwordmFy
IHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0gICIoOilcXGIoYWN0aXZl
fGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGlsZHxmaXJzdC1vZi10eXBl
fGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNoaWxkfGxhc3Qtb2YtdHlw
ZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxhc3Qtb2YtdHlwZXxudGgt
b2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxyb290fHRhcmdldHx2YWxp
ZHx2aXNpdGVkKVxcYiI7CisKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewor
CisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoeworICAg
ICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKKyAgICAgICAgInN1cHBv
cnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCisgICAgICAgICJzdXBwb3J0LnR5cGUiOiBz
dXBwb3J0VHlwZSwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiBzdXBwb3J0Q29u
c3RhbnRDb2xvciwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9udHMiOiBzdXBwb3J0Q29u
c3RhbnRGb250cworICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CisKKyAgICB2YXIgYmFzZV9ydWxlc2V0
ID0gWworICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkg
bGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAgICAgICAg
bmV4dCA6ICJydWxlc2V0X2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2Vu
IDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAgICByZWdleCA6ICdbIl0oPzoo
PzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJworICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgcmVnZXggOiAiWydd
KD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKKyAgICAgICAgfSwgeworICAgICAgICAg
ICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAorICAgICAgICAgICAg
cmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxmcnxnZHxncmFkfEh6fGlu
fGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2d3wlKSIKKyAgICAgICAg
fSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCisgICAgICAgICAg
ICByZWdleCA6IG51bVJlCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0
YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAiI1thLWYw
LTldezZ9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1l
cmljIiwgLy8gaGV4MyBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9Igor
ICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5
Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAorICAgICAgICAgICAg
cmVnZXggOiBwc2V1ZG9FbGVtZW50cworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFz
cy5jc3MiXSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3NlcworICAgICAgICB9LCB7
CisgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCisgICAgICAgICAgICByZWdleCA6
ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKKyAgICAgICAgfQorICAgICAgXTsKKwor
ICAgIHZhciBydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9ydWxlc2V0KTsKKyAgICBydWxl
c2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAgICAgICBy
ZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJzdGFydCIKKyAgICB9KTsKKworICAgIHZh
ciBtZWRpYV9ydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoIGJhc2VfcnVsZXNldCApOworICAgIG1l
ZGlhX3J1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCisg
ICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgIm1lZGlhIgorICAgIH0pOwor
CisgICAgdmFyIGJhc2VfY29tbWVudCA9IFt7CisgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIs
IC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQorICAgICAgICAgIHJlZ2V4IDogIi4rIgor
ICAgIH1dOworCisgICAgdmFyIGNvbW1lbnQgPSBsYW5nLmNvcHlBcnJheShiYXNlX2NvbW1lbnQp
OworICAgIGNvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8v
IGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIsCisgICAgICAg
ICAgbmV4dCA6ICJzdGFydCIKKyAgICB9KTsKKworICAgIHZhciBtZWRpYV9jb21tZW50ID0gbGFu
Zy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKKyAgICBtZWRpYV9jb21tZW50LnVuc2hpZnQoewor
ICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAg
ICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAibWVkaWEiCisgICAgfSk7
CisKKyAgICB2YXIgcnVsZXNldF9jb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50
KTsKKyAgICBydWxlc2V0X2NvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4gOiAiY29t
bWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIs
CisgICAgICAgICAgbmV4dCA6ICJydWxlc2V0IgorICAgIH0pOworCisgICAgdGhpcy4kcnVsZXMg
PSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIs
IC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKKyAg
ICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9r
ZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAorICAgICAgICAg
ICAgbmV4dDogICJydWxlc2V0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbjogInN0
cmluZyIsCisgICAgICAgICAgICByZWdleDogIkAuKj97IiwKKyAgICAgICAgICAgIG5leHQ6ICAi
bWVkaWEiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKKyAgICAg
ICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRv
a2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKKyAg
ICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdl
eDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogImNvbnN0
YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCisgICAgICAgIH1dLAorCisg
ICAgICAgICJtZWRpYSIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBt
dWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCisgICAgICAg
ICAgICBuZXh0IDogIm1lZGlhX2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRv
a2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKKyAgICAgICAg
ICAgIG5leHQ6ICAibWVkaWFfcnVsZXNldCIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tl
bjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIlxcfSIsCisgICAgICAgICAgICBuZXh0
OiAgInN0YXJ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCisg
ICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAg
ICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsi
CisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAg
cmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJj
b25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgorICAgICAgICB9XSwK
KworICAgICAgICAiY29tbWVudCIgOiBjb21tZW50LAorCisgICAgICAgICJydWxlc2V0IiA6IHJ1
bGVzZXQsCisgICAgICAgICJydWxlc2V0X2NvbW1lbnQiIDogcnVsZXNldF9jb21tZW50LAorCisg
ICAgICAgICJtZWRpYV9ydWxlc2V0IiA6IG1lZGlhX3J1bGVzZXQsCisgICAgICAgICJtZWRpYV9j
b21tZW50IiA6IG1lZGlhX2NvbW1lbnQKKyAgICB9OworfTsKKworb29wLmluaGVyaXRzKENzc0hp
Z2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkNzc0hpZ2hsaWdo
dFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9k
ZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIE1hdGNoaW5n
QnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhp
cy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAgICAgICBpZiAoISAv
XlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
cmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRk
ZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGlu
ZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOworCisg
ICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBjb2x1bW4gPSBtYXRj
aFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5n
QnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAgICAgaWYgKCFvcGVu
QnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOworCisgICAgICAg
IHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJv
dykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0x
KSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGlu
ZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVu
dC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdC
cmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2Nzcycs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21v
ZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0
ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBv
b3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgi
Li4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUo
Ii4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJl
KCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisKK3ZhciBDc3NCZWhhdmlv
dXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsK
KworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFj
dGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOicp
IHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1
cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0
b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFs
dWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVw
QmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tl
bi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAgICAgICAgICAgICAgIHZhciBsaW5lID0g
c2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgcmln
aHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEp
OworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmUuc3Vic3RyaW5n
KGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCisgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRo
aXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0
b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9j
LmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAm
JiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7Cisg
ICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJp
bnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0
KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vz
c2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAg
ICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91
cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdG9r
ZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIg
QmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIFRva2Vu
SXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7
Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZFX0lOU0VS
VF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24u
b3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBbInRleHQi
LCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsKKwor
Cit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJvdyA9IC0x
OwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkQnJhY2tl
dHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2VydGVkTGlu
ZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFyIENzdHls
ZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNT
YW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9y
ID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7
CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAgICAgICB2
YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vy
c29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShp
dGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tF
TlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
dGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVu
dFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1hdGNoVG9r
ZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRf
QkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuJG1hdGNo
VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVybiB0eXBl
cy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAKKyAgICBD
c3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lv
biwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0
aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93
KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUs
IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVkQnJhY2tl
dHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAgICAgICBh
dXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4p
OworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0
eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9u
LCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRp
b24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cp
OworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUp
KQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJ
bnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQg
PSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAgIG1heWJl
SW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIG1h
eWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3Vy
LmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkg
eworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAgICAg
ICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJyYWNrZXQg
PT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1
cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAgCisgICAg
Q3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3Is
IGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAg
ICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAg
IGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAmJgor
ICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNlcnRl
ZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5z
ZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQg
PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2VydGVkQnJh
Y2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5z
ZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0
cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisgICAgdGhp
cy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRp
dG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1
cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBz
ZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBz
ZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5nZXRX
cmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Np
b24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNvci5j
b2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0
b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIu
cmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
dGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmln
aHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24u
JGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6
IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYg
Q3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQp
KSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRD
bG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEs
IDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxuIikg
eworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChDc3R5bGVC
ZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CisgICAgICAg
ICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRlZEJy
YWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2Vy
dGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9
IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7
cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAgICAgICAg
ICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUluZGVu
dChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFi
U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdldElu
ZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLAor
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRl
bnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAo
c3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2Vs
ZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJh
bmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAg
IHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5l
bmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAg
ICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJlSW5zZXJ0
ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7CisgICAg
ICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAg
ICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9u
KTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhh
dmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNl
IGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsK
KyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3Is
IHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0K
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRl
eHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBv
c2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vy
c29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hh
ciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5k
T3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJz
b3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHls
ZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgewor
ICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2lu
ZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIs
IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAg
ICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAg
ICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKKyAgICAg
ICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwor
ICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNv
bHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0
Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9
PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0
b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9y
LCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRv
SW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5k
b2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5l
LnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAg
ICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9
IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4g
KyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09
IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRv
SW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tl
dHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFu
Z2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQg
PT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFu
Z2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImlu
c2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQp
IHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAgICAgICAg
ICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5n
ZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09
ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRX
cmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdl
dExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGluZS5z
dWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Np
b24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAgIHZhciBj
b2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8gVHJh
Y2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAgICAgICAg
IGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0gLTE7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZhbHVl
Lmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5cGUg
IT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rpb24u
c3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZhbHVl
Lmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRv
ciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSAr
IHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdG9r
ZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hh
ciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAn
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQo
InN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVk
aXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgp
ICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAg
ICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsg
MSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAg
ICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p
OworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOworCitl
eHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9s
ZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBv
b3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8u
Li9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2Rl
IikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlv
bigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVuY3Rp
b24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxdXSok
fF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10qKFx9
fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1
bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vz
c2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5m
b2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZh
ciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFd
LCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJh
bmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwor
ICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBt
YXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCBy
b3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdl
KHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90
b3R5cGUpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvYWNlL21vZGVfaHRtbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvYWNlL21vZGVfaHRtbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzgzYWFmYzA3ZWQ5YjI4MTg0MTY2NjRk
MDg1MzM5ZDA1NmVlOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCkBAIC0wLDAgKzEsMTg4NiBAQAorLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJT
RCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKK2FjZS5kZWZp
bmUoJ2FjZS9tb2RlL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL21vZGUvamF2YXNjcmlwdCcsICdhY2Uv
bW9kZS9jc3MnLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxl
cycsICdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsICdhY2UvbW9kZS9mb2xkaW5nL2h0bWwnXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVp
cmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7
Cit2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwordmFy
IENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7Cit2YXIgVG9rZW5pemVyID0gcmVxdWly
ZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJl
cXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7Cit2YXIg
SHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2h0bWwiKS5IdG1sQmVoYXZpb3Vy
OwordmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGU7
CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGhpZ2hsaWdodGVyID0gbmV3IEh0
bWxIaWdobGlnaHRSdWxlcygpOworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIo
aGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IEh0bWxC
ZWhhdmlvdXIoKTsKKyAgICAKKyAgICB0aGlzLiRlbWJlZHMgPSBoaWdobGlnaHRlci5nZXRFbWJl
ZHMoKTsKKyAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeworICAgICAgICAianMtIjogSmF2
YVNjcmlwdE1vZGUsCisgICAgICAgICJjc3MtIjogQ3NzTW9kZQorICAgIH0pOworICAgIAorICAg
IHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOworfTsKK29vcC5pbmhlcml0
cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIAorICAgIHRoaXMudG9n
Z2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVuZFJvdykg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVu
dCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGdl
dEluZGVudChsaW5lKTsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlv
bihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisK
K30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisK
K2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3Rva2VuaXpl
cicsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9tYXRj
aGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScsICdhY2Uvd29ya2VyL3dvcmtlcl9jbGll
bnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHls
ZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0g
cmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0Iiku
TW9kZTsKK3ZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7
Cit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hp
Z2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciBNYXRjaGluZ0Jy
YWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5n
QnJhY2VPdXRkZW50OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKK3Zh
ciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtl
ckNsaWVudDsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5
bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2Zv
bGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1
bGVzKCkuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNl
T3V0ZGVudCgpOworICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsK
KyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOworfTsKK29vcC5p
bmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworCisgICAgdGhpcy50
b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93
KSB7CisgICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJlID0gL14oXHMq
KVwvXC8vOworCisgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBlbmRSb3c7IGkrKykg
eworICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5nZXRMaW5lKGkpKSkgeworICAgICAgICAg
ICAgICAgIG91dGRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRkZW50KSB7CisgICAgICAgICAgICB2
YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKKyAgICAgICAgICAgICAgICB2YXIg
bSA9IGxpbmUubWF0Y2gocmUpOworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJv
dyA9IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7CisgICAgICAg
ICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IG1bMF0ubGVuZ3RoOworICAgICAgICAg
ICAgICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBtWzFdKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvYy5pbmRlbnRSb3dzKHN0YXJ0
Um93LCBlbmRSb3csICIvLyIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZ2V0TmV4
dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAgICAgIHZhciBp
bmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisKKyAgICAgICAgdmFyIHRva2VuaXplZExp
bmUgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CisgICAgICAg
IHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKKyAgICAgICAgdmFyIGVuZFN0YXRl
ID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKKworICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0
b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgeworICAgICAgICAgICAg
cmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXRlID09
ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7CisgICAgICAgICAgICB2YXIg
bWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pOwor
ICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0Iikg
eworICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4
X2FsbG93ZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgeworICAg
ICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0g
ZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRk
ZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091
dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVu
dC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNyZWF0ZVdv
cmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3Jr
ZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3Jp
cHRXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXRE
b2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIub24oImpzbGludCIsIGZ1bmN0aW9uKHJlc3Vs
dHMpIHsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsK
KyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CisgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9OworCit9KS5j
YWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZG9jX2NvbW1l
bnRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJl
KCIuLi9saWIvb29wIik7Cit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgi
Li9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7
Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxl
cyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3Jk
TWFwcGVyKHsKKyAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKKyAgICAgICAgICAgICJBcnJh
eXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3Ry
aW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCisgICAgICAgICAgICAiTmFtZXNwYWNlfFFO
YW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArIC8vIEU0WAorICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9h
dDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKworICAgICAgICAg
ICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8
IiAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRl
cm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAv
LyBFcnJvcnMKKyAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICJk
ZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8
ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9ucworICAgICAgICAg
ICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAv
LyBPdGhlcgorICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9j
dW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAvLyBQc2V1ZG8KKyAgICAg
ICAgImtleXdvcmQiOgorICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fCIg
KworICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8
ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKKyAgICAgICAgICAgICJpZnxpbnxpbnN0
YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3
aXRofGRlYnVnZ2VyfCIgKworICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2Fw
ZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKKyAgICAgICAgICAgICJjbGFzc3xlbnVtfGV4
dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBh
Y2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCisgICAgICAgICJzdG9yYWdlLnR5cGUiOgorICAgICAg
ICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAorICAgICAgICAiY29uc3RhbnQubGFuZ3Vh
Z2UiOgorICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCisgICAgICAg
ICJzdXBwb3J0LmZ1bmN0aW9uIjoKKyAgICAgICAgICAgICJhbGVydCIsCisgICAgICAgICJjb25z
dGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCisgICAgfSwgImlkZW50aWZpZXIi
KTsKKyAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5j
ZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOworICAgIHZhciBpZGVudGlm
aWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1
ZmZmZl0qXFxiIjsKKworICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/OnhbMC05YS1mQS1GXXsy
fXwiICsgLy8gaGV4CisgICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKKyAg
ICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CisgICAgICAgICIzWzAtNl1bMC03XT98
IiArIC8vIG9jdAorICAgICAgICAiMzdbMC03XT98IiArIC8vIG9jdAorICAgICAgICAiWzQtN11b
MC03XT98IiArIC8vb2N0CisgICAgICAgICIuKSI7CisKKyAgICB0aGlzLiRydWxlcyA9IHsKKyAg
ICAgICAgInN0YXJ0IiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJjb21tZW50IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wvLiokLworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUo
ImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAgICByZWdleCA6IC9c
L1wqLywKKyAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICByZWdl
eCA6ICInKD89LikiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICAgICByZWdleCA6ICciKD89LiknLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5n
IgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51
bWVyaWMiLCAvLyBoZXgKKyAgICAgICAgICAgICAgICByZWdleCA6IC8wW3hYXVswLTlhLWZBLUZd
K1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50
Lm51bWVyaWMiLCAvLyBmbG9hdAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1srLV0/XGQrKD86
KD86XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIs
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIiwKKyAgICAgICAgICAg
ICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwg
InRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKHByb3RvdHlwZSkoXFwu
KSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCisgICAgICAgICAgICAgICAgbmV4dDog
ImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlv
bi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAgICAgICAg
ICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4
dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIiko
XFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5l
eHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIs
ICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAorICAg
ICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKiko
PSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJm
dW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9r
ZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24u
b3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCisgICAgICAgICAgICAg
ICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAgICAi
c3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJw
YXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6
ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKiko
PSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAi
dGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxz
KykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5l
eHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIs
ICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgInRl
eHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShc
XHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4
dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIsICJzdG9yYWdl
LnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAg
ICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCisgICAgICAgICAgICAgICAgbmV4dCA6
ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIl0sCisgICAgICAg
ICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9n
fGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/
Om9wenp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRleHQpfG9ydHx1KD86cHxi
KD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpSZSg/OnNpemFibGV8cXVl
c3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIbyg/OnRL
ZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFsfFpPcHRpb25zfERhdGV8
VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhdGV8
RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8YXZlUHJlZmVyZW5jZXN8
bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFyKD86Q29kZUF0fEF0KXxv
KD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFyKD86VGltZW91dHxJbnRl
cnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNoZWV0fFBvcHVwfEV2ZW50
T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNlKXxVKD86VENTdHJpbmd8
cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEoPzpufGludCg/OkVuYWJs
ZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8ZCg/OmlzYWJsZUV4dGVy
bmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0YWludHxlc2NhcGV8d2F0
Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/Om8oPzpwfHcpfHVzaHxs
dWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/KXxyKD86aW50fG9tcHR8
ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8dmFsfGxlbWVudEZyb21Q
b2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9mfFVUQ3xxdWVyeUNvbW1h
bmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/Om5kfGxlKD86TW9kaWZp
ZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8byg/Om50KD86c2l6ZXxj
b2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzppbmt8byg/OmFkfGcpfGFz
dEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8b2J8YW4oPzoyKT8pfHBw
bHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8ZSg/OnNpemUoPzpCeXxU
byl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNlKD86Q2FwdHVyZXxFdmVu
dHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/OmkoPzpudXRlc3xsbGlz
ZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFllYXJ8VGltZSg/OnpvbmVP
ZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8
U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVhcnxBKD86dHRlbnRpb258
bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVsb3cpfFRvKD86QWJzb2x1
dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4KSl8Yig/OnRvYXxpZ3xv
KD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLworICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0
LmZ1bmN0aW9uLmRvbSJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnViKD86
c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5v
ZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86
aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9u
KXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3Ry
dWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGko
Pzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMo
PzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/
OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92
ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVt
fEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8
Ymx1cilcYig/PVwoKS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5jb25zdGFudCJdLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8
ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/
KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5
KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykp
fHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJ
KXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpz
dHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkp
fHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxv
c2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFu
c2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/
Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxu
KD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2Zp
bGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3Bs
YXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/
OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpz
ZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50
ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVn
aW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVu
dCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpv
KD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUo
PzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/Omlz
aWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJ
VkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1O
YW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5
bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8
d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gp
fEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxO
YW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0
KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQp
P3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVz
fHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86
MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8
Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxl
bG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKKyAgICAgICAgICAgICAgICByZWdleCA6
IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0aW1lRW5kfGFzc2VydClc
Yi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBw
ZXIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKKyAgICAgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKKyAgICAgICAg
ICAgICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitcLX5dfD09PXw9PXw9fCE9fCE9PXw8PXw+
PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwlPXxcKz18XC09fCY9fFxe
PS8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisg
ICAgICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8XDt8XC4vLAorICAgICAgICAgICAgICAg
IG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9bXFso
e10vLAorICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKKyAgICAgICAg
ICAgICAgICByZWdleCA6IC9bXF0pfV0vCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAv
XC89Py8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiAvXiMhLiokLworICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAi
cmVnZXhfYWxsb3dlZCI6IFsKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5n
ZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAg
ICByZWdleCA6ICJcXC9cXCoiLAorICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudF9yZWdl
eF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4OiAiXFwvIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiLAorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
dG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgInJl
Z2V4IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtl
eXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1m
QS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKKyAgICAgICAgICAgICAgICByZWdleDogIi9c
XHcqIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiLAorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAorICAgICAgICAgICAgICAgIHJlZ2V4
OiAvXHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2Uu
ZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXx7XGQrLD8oPzpc
ZCspP318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKKyAgICAgICAg
ICAgICAgICByZWdleDogL1x8LworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDog
L1xbXF4/LywKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIiwK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKKyAgICAg
ICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVn
ZXhwIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXhfY2hhcmFjdGVy
X2NsYXNzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhw
LmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxk
YS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiAiXSIsCisgICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IiwKKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2Fw
ZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICItIgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCisg
ICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgorICAg
ICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVy
IiwKKyAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAg
ICAgICAgICAgcmVnZXg6ICJbLCBdKyIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6
ICIkIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwK
KyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0
IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudF9yZWdleF9hbGxv
d2VkIiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwv
IiwgbmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCisgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDog
ImNvbW1lbnQifQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudCIgOiBbCisgICAgICAgICAg
ICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQgOiAic3RhcnQifSwK
KyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAgICAgIF0sCisgICAg
ICAgICJxcXN0cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IGVz
Y2FwZWRSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmlu
ZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAgICAgICAgICAgIG5l
eHQgIDogInFxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCisgICAgICAgICAg
ICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAg
ICAgInFzdHJpbmciIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDog
ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBlc2Nh
cGVkUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmci
LAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKKyAgICAgICAgICAgICAgICBuZXh0
ICA6ICJxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCisgICAgICAgICAgICAg
ICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIGRl
ZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisK
KyAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCisg
ICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7
Cit9OworCitvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxp
Z2h0UnVsZXMpOworCitleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3Jp
cHRIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9kb2NfY29tbWVu
dF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIv
b29wIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdo
dF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIERvY0NvbW1lbnRIaWdobGlnaHRS
dWxlcyA9IGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJzdGFy
dCIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisgICAgICAg
ICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3Nlcwor
ICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAorICAg
ICAgICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKKyAgICAgICAgfSwgeworICAgICAgICAgICAg
ZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgorICAgICAgICB9XQorICAgIH07Cit9OworCitv
b3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMp
OworCitEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3Rh
cnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRv
YyBjb21tZW50CisgICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAorICAgICAgICBuZXh0
ICA6IHN0YXJ0CisgICAgfTsKK307CisKK0RvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRS
dWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdG9rZW4gOiAi
Y29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgcmVnZXggOiAiXFwqXFwv
IiwKKyAgICAgICAgbmV4dCAgOiBzdGFydAorICAgIH07Cit9OworCisKK2V4cG9ydHMuRG9jQ29t
bWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOworCit9KTsKKwor
YWNlLmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFu
Z2U7CisKK3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CisKKyhmdW5j
dGlvbigpIHsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQp
IHsKKyAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKKyAgICB9Owor
CisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CisgICAgICAgIHZh
ciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRj
aCgvXihccypcfSkvKTsKKworICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKKworICAgICAg
ICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOworICAgICAgICB2YXIgb3BlbkJyYWNlUG9z
ID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwor
CisgICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSBy
ZXR1cm4gMDsKKworICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRM
aW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKKyAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJv
dywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CisgICAgfTsKKworICAgIHRoaXMuJGdldElu
ZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgv
XihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNo
WzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisKK30pLmNhbGwo
TWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKKworZXhwb3J0cy5NYXRjaGluZ0JyYWNl
T3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9t
b2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdG9rZW5faXRlcmF0b3In
LCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
CisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZpb3VyID0g
cmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSBy
ZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgbGFuZyA9
IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZFX0lOU0VSVF9JTl9UT0tFTlMg
PQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiXTsK
K3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBbInRleHQiLCAicGFyZW4ucnBh
cmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsKKworCit2YXIgYXV0b0lu
c2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJvdyA9IC0xOwordmFyIGF1dG9J
bnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkQnJhY2tldHMgPSAwOwordmFy
IG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2VydGVkTGluZVN0YXJ0ID0gIiI7
Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFyIENzdHlsZUJlaGF2aW91ciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9u
ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2Vu
SXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CisgICAgICAgIGlm
ICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRl
eHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAgICAgICB2YXIgaXRlcmF0b3Iy
ID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiAr
IDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvcjIuZ2V0
Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvci5zdGVw
Rm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCkg
IT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJh
dG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VO
Uyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0g
ZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVybiB0eXBlcy5pbmRleE9mKHRv
a2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlv
dXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbiwgYnJhY2tldCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
aWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIGF1dG9JbnNlcnRl
ZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOworICAg
ICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAgICAgICBhdXRvSW5zZXJ0ZWRM
aW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOworICAgICAgICBh
dXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3Vy
LnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7
CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBp
ZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKQorICAgICAgICAg
ICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9
IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0
cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5l
RW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRC
cmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2Vy
dGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkgeworICAgICAgICBy
ZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAgICAgICBjdXJzb3Iucm93
ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJyYWNrZXQgPT09IGF1dG9JbnNl
cnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4p
ID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZp
b3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUpIHsKKyAg
ICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1
cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3Ry
KGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAmJgorICAgICAgICAgICAg
bGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNlcnRlZExpbmVTdGFydDsK
KyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5n
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBhdXRvSW5zZXJ0
ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMtLTsKKyAg
ICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5n
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAg
ICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisgICAgdGhpcy5hZGQoImJyYWNl
cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24o
KTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwor
ICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBl
ZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNl
c3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVj
dGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vy
c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Q3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNvci5jb2x1bW5dKSkgewor
ICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0
b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJ
bnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnfScp
IHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29s
dW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9
JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5n
QnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9
KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZp
b3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxuIikgeworICAgICAgICAg
ICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNN
YXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CisgICAgICAgICAgICAgICAgY2xv
c2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKTsKKyAg
ICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChy
aWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7CisgICAgICAgICAgICAgICAgdmFy
IG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiBjdXJzb3Iu
cm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAgICAgICAgICAgICAgIGlmICgh
b3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAg
ICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUluZGVudChzdGF0ZSwgbGlu
ZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdc
bicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLAorICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKwor
ICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlv
biwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNz
aW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlM
aW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Np
b24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENo
YXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsg
MSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAg
IHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cy0t
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgicGFy
ZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Np
b24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7CisgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2YXIg
c2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
ZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVC
ZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAg
ICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICIp
Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDog
JygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gJyknKSB7
CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7Cisg
ICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwg
Y3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNr
ZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5p
c0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgeworICAgICAgICAgICAg
ICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycs
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChz
dGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxl
Y3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFu
Z2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJh
bmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScp
IHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24s
IGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnWycpIHsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rp
b24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJl
aGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVs
c2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkg
eworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRv
ciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAx
XQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
dGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShj
dXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhj
dXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRD
aGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZp
bmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1
cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0
eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7
CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9z
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFd
CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiZGVsZXRp
b24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewor
ICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwor
ICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ1snKSB7Cisg
ICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93
KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFy
dC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChy
aWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwor
ICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1
bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAg
aWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAgICAgICAgICB2YXIgcXVvdGUg
PSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25S
YW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJh
bmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVj
dGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vy
c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29y
LnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdENo
YXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5z
KHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAgIHZhciBjb2wgPSAwLCB0b2tl
bjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8gVHJhY2sgd2hldGhlciB3
ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAgICAgICAgIGZvciAodmFyIHgg
PSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2Vu
ID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSAic3Ry
aW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0gLTE7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZhbHVlLmxlbmd0aCArIGNv
bCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb2wgKz0g
dG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5cGUgIT09ICJjb21tZW50
IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rpb24uc3RhcnQuY29sdW1u
ICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZhbHVlLmxhc3RJbmRleE9m
KHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0g
InN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vi
c3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVv
dGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lv
biwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJh
bmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3Rl
ZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBz
ZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmln
aHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3Rh
cnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7
CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJl
dHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCit9OworCitv
b3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOworCitleHBvcnRzLkNzdHls
ZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9k
ZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJl
KCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJh
bmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7
CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Oworb29w
LmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVuY3Rpb24oKSB7CisKKyAg
ICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikv
OworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10qKFx9fFxdKXxeW1xzXCpd
KihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5l
KHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRN
YXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2gu
aW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwor
CisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSAr
IG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9sZFN0eWxl
ICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
bWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOworICAgICAgICBpZiAo
bWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5n
dGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOworCisg
ICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEp
OworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9
KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS90ZXh0JywgJ2FjZS90b2tlbml6ZXIn
LCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9tYXRjaGluZ19icmFj
ZV9vdXRkZW50JywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2UvbW9kZS9iZWhhdmlv
dXIvY3NzJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2
YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRva2VuaXplciA9IHJl
cXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9
IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwordmFy
IE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50
IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4v
d29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7Cit2YXIgQ3NzQmVoYXZpb3VyID0g
cmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwordmFyIENTdHlsZUZvbGRN
b2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOworCit2YXIgTW9kZSA9
IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3IENz
c0hpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSwgImkiKTsKKyAgICB0aGlzLiRvdXRkZW50ID0g
bmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENz
c0JlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2Rl
KCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgewor
CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKKworICAgIHRoaXMuZ2V0TmV4dExp
bmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAgICAgIHZhciBpbmRl
bnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLiR0
b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOworICAgICAgICBpZiAo
dG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50
IikgeworICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOworICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgIGluZGVudCArPSB0YWI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
aW5kZW50OworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRl
LCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRl
bnQobGluZSwgaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rp
b24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQo
ZG9jLCByb3cpOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNl
c3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwg
ImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CisgICAgICAgIHdvcmtlci5hdHRhY2hU
b0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAgICAgd29ya2VyLm9uKCJj
c3NsaW50IiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9u
cyhlLmRhdGEpOworICAgICAgICB9KTsKKworICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB3b3JrZXI7CisgICAgfTsKKworfSkuY2FsbChN
b2RlLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7CisKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL21vZGUvdGV4
dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWly
ZSgiLi4vbGliL2xhbmciKTsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Rl
eHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwordmFyIHN1cHBvcnRUeXBl
ID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbmltYXRpb24tZmlsbC1tb2RlfGFsaWdubWVudC1h
ZGp1c3R8YWxpZ25tZW50LWJhc2VsaW5lfGFuaW1hdGlvbi1kZWxheXxhbmltYXRpb24tZGlyZWN0
aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlv
bi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YW5p
bWF0aW9ufGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZmFjZS12aXNpYmlsaXR5fGJhY2tncm91bmQt
YXR0YWNobWVudHxiYWNrZ3JvdW5kLWJyZWFrfGJhY2tncm91bmQtY2xpcHxiYWNrZ3JvdW5kLWNv
bG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlv
bnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3VuZHxiYXNlbGluZS1z
aGlmdHxiaW5kaW5nfGJsZWVkfGJvb2ttYXJrLWxhYmVsfGJvb2ttYXJrLWxldmVsfGJvb2ttYXJr
LXN0YXRlfGJvb2ttYXJrLXRhcmdldHxib3JkZXItYm90dG9tfGJvcmRlci1ib3R0b20tY29sb3J8
Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c3xib3Jk
ZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWNvbGxhcHNlfGJvcmRl
ci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2UtcmVw
ZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS13
aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3Jk
ZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxib3JkZXItcmlnaHQtY29s
b3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItc3BhY2luZ3xi
b3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3AtbGVmdC1y
YWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9w
LXdpZHRofGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1hbGlnbnxib3gtZGVjb3JhdGlv
bi1icmVha3xib3gtZGlyZWN0aW9ufGJveC1mbGV4LWdyb3VwfGJveC1mbGV4fGJveC1saW5lc3xi
b3gtb3JkaW5hbC1ncm91cHxib3gtb3JpZW50fGJveC1wYWNrfGJveC1zaGFkb3d8Ym94LXNpemlu
Z3xicmVhay1hZnRlcnxicmVhay1iZWZvcmV8YnJlYWstaW5zaWRlfGNhcHRpb24tc2lkZXxjbGVh
cnxjbGlwfGNvbG9yLXByb2ZpbGV8Y29sb3J8Y29sdW1uLWNvdW50fGNvbHVtbi1maWxsfGNvbHVt
bi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGUtc3R5bGV8Y29s
dW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNvbHVtbnN8Y29udGVudHxj
b3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGNyb3B8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8
Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxkb21pbmFudC1iYXNlbGluZXxkcm9wLWluaXRp
YWwtYWZ0ZXItYWRqdXN0fGRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbnxkcm9wLWluaXRpYWwtYmVm
b3JlLWFkanVzdHxkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWdufGRyb3AtaW5pdGlhbC1zaXplfGRy
b3AtaW5pdGlhbC12YWx1ZXxlbGV2YXRpb258ZW1wdHktY2VsbHN8Zml0fGZpdC1wb3NpdGlvbnxm
bG9hdC1vZmZzZXR8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZvbnQtc2l6ZS1hZGp1c3R8
Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZvbnR8Z3Jp
ZC1jb2x1bW5zfGdyaWQtcm93c3xoYW5naW5nLXB1bmN0dWF0aW9ufGhlaWdodHxoeXBoZW5hdGUt
YWZ0ZXJ8aHlwaGVuYXRlLWJlZm9yZXxoeXBoZW5hdGUtY2hhcmFjdGVyfGh5cGhlbmF0ZS1saW5l
c3xoeXBoZW5hdGUtcmVzb3VyY2V8aHlwaGVuc3xpY29ufGltYWdlLW9yaWVudGF0aW9ufGltYWdl
LXJlbmRlcmluZ3xpbWFnZS1yZXNvbHV0aW9ufGlubGluZS1ib3gtYWxpZ258bGVmdHxsZXR0ZXIt
c3BhY2luZ3xsaW5lLWhlaWdodHxsaW5lLXN0YWNraW5nLXJ1Ynl8bGluZS1zdGFja2luZy1zaGlm
dHxsaW5lLXN0YWNraW5nLXN0cmF0ZWd5fGxpbmUtc3RhY2tpbmd8bGlzdC1zdHlsZS1pbWFnZXxs
aXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0
b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFyZ2lufG1hcmstYWZ0ZXJ8
bWFyay1iZWZvcmV8bWFya3xtYXJrc3xtYXJxdWVlLWRpcmVjdGlvbnxtYXJxdWVlLXBsYXktY291
bnR8bWFycXVlZS1zcGVlZHxtYXJxdWVlLXN0eWxlfG1heC1oZWlnaHR8bWF4LXdpZHRofG1pbi1o
ZWlnaHR8bWluLXdpZHRofG1vdmUtdG98bmF2LWRvd258bmF2LWluZGV4fG5hdi1sZWZ0fG5hdi1y
aWdodHxuYXYtdXB8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8
b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZsb3ctc3R5bGV8b3ZlcmZs
b3cteHxvdmVyZmxvdy15fG92ZXJmbG93fHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVmdHxwYWRk
aW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1hZnRlcnxwYWdlLWJyZWFr
LWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLXBvbGljeXxwYWdlfHBhdXNlLWFmdGVyfHBh
dXNlLWJlZm9yZXxwYXVzZXxwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3RpdmV8cGhvbmVtZXN8
cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9zaXRpb258cHJlc2VudGF0aW9uLWxldmVs
fHB1bmN0dWF0aW9uLXRyaW18cXVvdGVzfHJlbmRlcmluZy1pbnRlbnR8cmVzaXplfHJlc3QtYWZ0
ZXJ8cmVzdC1iZWZvcmV8cmVzdHxyaWNobmVzc3xyaWdodHxyb3RhdGlvbi1wb2ludHxyb3RhdGlv
bnxydWJ5LWFsaWdufHJ1Ynktb3Zlcmhhbmd8cnVieS1wb3NpdGlvbnxydWJ5LXNwYW58c2l6ZXxz
cGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlvbnxzcGVha3xzcGVlY2gt
cmF0ZXxzdHJlc3N8c3RyaW5nLXNldHx0YWJsZS1sYXlvdXR8dGFyZ2V0LW5hbWV8dGFyZ2V0LW5l
d3x0YXJnZXQtcG9zaXRpb258dGFyZ2V0fHRleHQtYWxpZ24tbGFzdHx0ZXh0LWFsaWdufHRleHQt
ZGVjb3JhdGlvbnx0ZXh0LWVtcGhhc2lzfHRleHQtaGVpZ2h0fHRleHQtaW5kZW50fHRleHQtanVz
dGlmeXx0ZXh0LW91dGxpbmV8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dGV4dC13cmFwfHRv
cHx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm18dHJhbnNpdGlvbi1k
ZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10
aW1pbmctZnVuY3Rpb258dHJhbnNpdGlvbnx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlz
aWJpbGl0eXx2b2ljZS1iYWxhbmNlfHZvaWNlLWR1cmF0aW9ufHZvaWNlLWZhbWlseXx2b2ljZS1w
aXRjaC1yYW5nZXx2b2ljZS1waXRjaHx2b2ljZS1yYXRlfHZvaWNlLXN0cmVzc3x2b2ljZS12b2x1
bWV8dm9sdW1lfHdoaXRlLXNwYWNlLWNvbGxhcHNlfHdoaXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3
b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7Cit2YXIgc3VwcG9ydEZ1
bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24gPSAicmdifHJnYmF8dXJsfGF0dHJ8Y291
bnRlcnxjb3VudGVycyI7Cit2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29u
c3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJl
dGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1w
YWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGkt
b3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxi
b3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdo
dHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9u
ZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8
Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxk
ZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdh
cmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1
dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1p
bi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8
Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhl
bHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3Jh
cGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFw
aC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFs
fGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8
aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRh
bGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxp
Z2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8
bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93
ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18
bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVy
fG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0
fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1
b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUt
bGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8
cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93
LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFs
bC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0
dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVy
fHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRh
YmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJv
dy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3Jl
LWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFu
c3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBw
ZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNp
YmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm8iOwordmFyIHN1cHBvcnRD
b25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRDb2xvciA9ICJhcXVhfGJsYWNr
fGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1
cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93IjsKK3ZhciBzdXBwb3J0Q29uc3RhbnRG
b250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9udHMgPSAiYXJpYWx8Y2VudHVyeXxjb21p
Y3xjb3VyaWVyfGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFjdHxsdWNpZGF8c3ltYm9s
fHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJkYW5hfHdlYmRpbmdzfHNh
bnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKKwordmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9
ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7Cit2YXIgcHNldWRvRWxl
bWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0gIihcXDorKVxcYihhZnRlcnxiZWZvcmV8
Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxlY3Rpb24pXFxiIjsKK3Zh
ciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2
ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlw
ZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5
cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRo
LW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFs
aWR8dmlzaXRlZClcXGIiOworCit2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsK
KworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKKyAg
ICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb24sCisgICAgICAgICJzdXBw
b3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAorICAgICAgICAic3VwcG9ydC50eXBlIjog
c3VwcG9ydFR5cGUsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjogc3VwcG9ydENv
bnN0YW50Q29sb3IsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENv
bnN0YW50Rm9udHMKKyAgICB9LCAidGV4dCIsIHRydWUpOworCisgICAgdmFyIGJhc2VfcnVsZXNl
dCA9IFsKKyAgICAgICAgeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRp
IGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKKyAgICAgICAgICAg
IG5leHQgOiAicnVsZXNldF9jb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tl
biA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86
KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKKyAgICAgICAgfSwgeworICAgICAgICAgICAg
dG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgIHJlZ2V4IDogIlsn
XSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwgImtleXdvcmQiXSwKKyAgICAgICAgICAg
IHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxp
bnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18dnd8JSkiCisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAorICAgICAgICAg
ICAgcmVnZXggOiBudW1SZQorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25z
dGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1m
MC05XXs2fSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVt
ZXJpYyIsIC8vIGhleDMgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXszfSIK
KyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0
eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3MiXSwKKyAgICAgICAgICAg
IHJlZ2V4IDogcHNldWRvRWxlbWVudHMKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4g
OiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tY2xh
c3MuY3NzIl0sCisgICAgICAgICAgICByZWdleCA6IHBzZXVkb0NsYXNzZXMKKyAgICAgICAgfSwg
eworICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAorICAgICAgICAgICAgcmVnZXgg
OiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCisgICAgICAgIH0KKyAgICAgIF07CisK
KyAgICB2YXIgcnVsZXNldCA9IGxhbmcuY29weUFycmF5KGJhc2VfcnVsZXNldCk7CisgICAgcnVs
ZXNldC51bnNoaWZ0KHsKKyAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKKyAgICAgICAg
cmVnZXggOiAiXFx9IiwKKyAgICAgICAgbmV4dDogICAic3RhcnQiCisgICAgfSk7CisKKyAgICB2
YXIgbWVkaWFfcnVsZXNldCA9IGxhbmcuY29weUFycmF5KCBiYXNlX3J1bGVzZXQgKTsKKyAgICBt
ZWRpYV9ydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAor
ICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJtZWRpYSIKKyAgICB9KTsK
KworICAgIHZhciBiYXNlX2NvbW1lbnQgPSBbeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQi
LCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKKyAgICAgICAgICByZWdleCA6ICIuKyIK
KyAgICB9XTsKKworICAgIHZhciBjb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50
KTsKKyAgICBjb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAv
LyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAg
ICAgIG5leHQgOiAic3RhcnQiCisgICAgfSk7CisKKyAgICB2YXIgbWVkaWFfY29tbWVudCA9IGxh
bmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7CisgICAgbWVkaWFfY29tbWVudC51bnNoaWZ0KHsK
KyAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CisgICAgICAg
ICAgcmVnZXggOiAiLio/XFwqXFwvIiwKKyAgICAgICAgICBuZXh0IDogIm1lZGlhIgorICAgIH0p
OworCisgICAgdmFyIHJ1bGVzZXRfY29tbWVudCA9IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVu
dCk7CisgICAgcnVsZXNldF9jb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8i
LAorICAgICAgICAgIG5leHQgOiAicnVsZXNldCIKKyAgICB9KTsKKworICAgIHRoaXMuJHJ1bGVz
ID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQi
LCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCisg
ICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRv
a2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKKyAgICAgICAg
ICAgIG5leHQ6ICAicnVsZXNldCIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW46ICJz
dHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJALio/eyIsCisgICAgICAgICAgICBuZXh0OiAg
Im1lZGlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCisgICAg
ICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0
b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsiCisg
ICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVn
ZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJjb25z
dGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgorICAgICAgICB9XSwKKwor
ICAgICAgICAibWVkaWEiIDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8g
bXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAg
ICAgICAgbmV4dCA6ICJtZWRpYV9jb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbjogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICByZWdleDogIlxceyIsCisgICAgICAg
ICAgICBuZXh0OiAgIm1lZGlhX3J1bGVzZXQiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9r
ZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAorICAgICAgICAgICAgbmV4
dDogICJzdGFydCIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAor
ICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAg
ICAgdG9rZW46ICJ2YXJpYWJsZSIsCisgICAgICAgICAgICByZWdleDogIlxcLlthLXowLTktX10r
IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKKyAgICAgICAgICAg
IHJlZ2V4OiAiOlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAi
Y29uc3RhbnQiLAorICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKKyAgICAgICAgfV0s
CisKKyAgICAgICAgImNvbW1lbnQiIDogY29tbWVudCwKKworICAgICAgICAicnVsZXNldCIgOiBy
dWxlc2V0LAorICAgICAgICAicnVsZXNldF9jb21tZW50IiA6IHJ1bGVzZXRfY29tbWVudCwKKwor
ICAgICAgICAibWVkaWFfcnVsZXNldCIgOiBtZWRpYV9ydWxlc2V0LAorICAgICAgICAibWVkaWFf
Y29tbWVudCIgOiBtZWRpYV9jb21tZW50CisgICAgfTsKK307CisKK29vcC5pbmhlcml0cyhDc3NI
aWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKKworZXhwb3J0cy5Dc3NIaWdobGln
aHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21v
ZGUvYmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5
bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVo
YXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENzdHlsZUJl
aGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2Vu
SXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7
CisKK3ZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmluaGVyaXQo
Q3N0eWxlQmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBm
dW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAg
IGlmICh0ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0
ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAg
dmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAgICAgdG9r
ZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAgICAgICAg
ICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAg
ICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwg
Y3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6
JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6
OycsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChz
dGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxl
Y3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFu
Z2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAg
IHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5l
bmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAg
ICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAgIHJldHVy
biByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5h
ZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRp
dG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsKKyAgICAg
ICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
ICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3Iu
Y29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NCZWhhdmlv
dXIsIENzdHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZp
b3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGli
L2xhbmcnLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9qYXZhc2Ny
aXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS94bWxfdXRpbCcsICdhY2UvbW9kZS90ZXh0
X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJl
KCIuLi9saWIvbGFuZyIpOwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3Nf
aGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7Cit2YXIgSmF2YVNjcmlwdEhpZ2hs
aWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFT
Y3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciB4bWxVdGlsID0gcmVxdWlyZSgiLi94bWxfdXRpbCIp
OwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVs
ZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7
CisgICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKKyAgICBidXR0b24gICAgICA6ICdmb3JtJywK
KyAgICBmb3JtICAgICAgICA6ICdmb3JtJywKKyAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCisg
ICAgaW5wdXQgICAgICAgOiAnZm9ybScsCisgICAgbGFiZWwgICAgICAgOiAnZm9ybScsCisgICAg
c2NyaXB0ICAgICAgOiAnc2NyaXB0JywKKyAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKKyAgICB0
ZXh0YXJlYSAgICA6ICdmb3JtJywKKyAgICBzdHlsZSAgICAgICA6ICdzdHlsZScsCisgICAgdGFi
bGUgICAgICAgOiAndGFibGUnLAorICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKKyAgICB0ZCAg
ICAgICAgICA6ICd0YWJsZScsCisgICAgdGZvb3QgICAgICAgOiAndGFibGUnLAorICAgIHRoICAg
ICAgICAgIDogJ3RhYmxlJywKKyAgICB0ciAgICAgICAgICA6ICd0YWJsZScKK30pOworCit2YXIg
SHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kcnVsZXMgPSB7Cisg
ICAgICAgIHN0YXJ0IDogW3sKKyAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAgICAgICAg
ICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwKKyAgICAgICAgICAgIG5leHQgOiAiY2RhdGEi
CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogInhtbC1wZSIsCisgICAgICAgICAg
ICByZWdleCA6ICI8XFw/Lio/XFw/PiIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhLS0iLAorICAgICAgICAgICAg
bmV4dCA6ICJjb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJ4bWwt
cGUiLAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIS4qPz4iCisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4IDogIjwoPz1zY3Jp
cHRcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic2NyaXB0IgorICAgICAgICB9LCB7CisgICAg
ICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsCisgICAgICAgICAgICByZWdleCA6ICI8KD89c3R5
bGVcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic3R5bGUiCisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwgLy8gb3BlbmluZyB0YWcKKyAgICAgICAgICAgIHJl
Z2V4IDogIjxcXC8/IiwKKyAgICAgICAgICAgIG5leHQgOiAidGFnIgorICAgICAgICB9LCB7Cisg
ICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCisg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lbnRp
dHkiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1G
XSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCisgICAgICAgIH1dLAorICAgIAorICAgICAg
ICBjZGF0YSA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICBy
ZWdleCA6ICJcXF1cXF0+IiwKKyAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCisgICAgICAgIH0g
XSwKKworICAgICAgICBjb21tZW50IDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50
IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4qPy0tPiIsCisgICAgICAgICAgICBuZXh0IDogInN0
YXJ0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIK
KyAgICAgICAgfSBdCisgICAgfTsKKyAgICAKKyAgICB4bWxVdGlsLnRhZyh0aGlzLiRydWxlcywg
InRhZyIsICJzdGFydCIsIHRhZ01hcCk7CisgICAgeG1sVXRpbC50YWcodGhpcy4kcnVsZXMsICJz
dHlsZSIsICJjc3Mtc3RhcnQiLCB0YWdNYXApOworICAgIHhtbFV0aWwudGFnKHRoaXMuJHJ1bGVz
LCAic2NyaXB0IiwgImpzLXN0YXJ0IiwgdGFnTWFwKTsKKyAgICAKKyAgICB0aGlzLmVtYmVkUnVs
ZXMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCAianMtIiwgW3sKKyAgICAgICAgdG9rZW46ICJj
b21tZW50IiwKKyAgICAgICAgcmVnZXg6ICJcXC9cXC8uKig/PTxcXC9zY3JpcHQ+KSIsCisgICAg
ICAgIG5leHQ6ICJ0YWciCisgICAgfSwgeworICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwKKyAg
ICAgICAgcmVnZXg6ICI8XFwvKD89c2NyaXB0KSIsCisgICAgICAgIG5leHQ6ICJ0YWciCisgICAg
fV0pOworICAgIAorICAgIHRoaXMuZW1iZWRSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0i
LCBbeworICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwKKyAgICAgICAgcmVnZXg6ICI8XFwvKD89
c3R5bGUpIiwKKyAgICAgICAgbmV4dDogInRhZyIKKyAgICB9XSk7Cit9OworCitvb3AuaW5oZXJp
dHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkh0
bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5l
KCdhY2UvbW9kZS94bWxfdXRpbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworZnVuY3Rpb24gc3RyaW5n
KHN0YXRlKSB7CisgICAgcmV0dXJuIFt7CisgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAg
ICAgIHJlZ2V4IDogJyInLAorICAgICAgICBuZXh0IDogc3RhdGUgKyAiX3Fxc3RyaW5nIgorICAg
IH0sIHsKKyAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgcmVnZXggOiAiJyIsCisg
ICAgICAgIG5leHQgOiBzdGF0ZSArICJfcXN0cmluZyIKKyAgICB9XTsKK30KKworZnVuY3Rpb24g
bXVsdGlMaW5lU3RyaW5nKHF1b3RlLCBzdGF0ZSkgeworICAgIHJldHVybiBbCisgICAgICAgIHt0
b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IHF1b3RlLCBuZXh0IDogc3RhdGV9LAorICAgICAgICB7
CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAg
ICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2Et
ekEtWjAtOV86XFwuLV0rOykiIAorICAgICAgICB9LAorICAgICAgICB7ZGVmYXVsdFRva2VuIDog
InN0cmluZyJ9CisgICAgXTsKK30KKworZXhwb3J0cy50YWcgPSBmdW5jdGlvbihzdGF0ZXMsIG5h
bWUsIG5leHRTdGF0ZSwgdGFnTWFwKSB7CisgICAgc3RhdGVzW25hbWVdID0gW3sKKyAgICAgICAg
dG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgfSwgeworICAgICAg
ICAKKyAgICB0b2tlbiA6ICF0YWdNYXAgPyAibWV0YS50YWcudGFnLW5hbWUiIDogZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0YWdNYXBbdmFsdWVdKQorICAgICAgICAgICAgICAg
IHJldHVybiAibWV0YS50YWcudGFnLW5hbWUuIiArIHRhZ01hcFt2YWx1ZV07CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRhLnRhZy50YWctbmFtZSI7CisgICAg
ICAgIH0sCisgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyIsCisgICAgICAgIG5leHQg
OiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIgCisgICAgfSwgeworICAgICAgICB0b2tl
bjogImVtcHR5IiwKKyAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICBuZXh0IDogbmFtZSArICJf
ZW1iZWRfYXR0cmlidXRlX2xpc3QiCisgICAgfV07CisKKyAgICBzdGF0ZXNbbmFtZSArICJfcXN0
cmluZyJdID0gbXVsdGlMaW5lU3RyaW5nKCInIiwgbmFtZSArICJfZW1iZWRfYXR0cmlidXRlX2xp
c3QiKTsKKyAgICBzdGF0ZXNbbmFtZSArICJfcXFzdHJpbmciXSA9IG11bHRpTGluZVN0cmluZygi
XCIiLCBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIpOworICAgIAorICAgIHN0YXRlc1tu
YW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCJdID0gW3sKKyAgICAgICAgdG9rZW4gOiAibWV0
YS50YWcuciIsCisgICAgICAgIHJlZ2V4IDogIi8/PiIsCisgICAgICAgIG5leHQgOiBuZXh0U3Rh
dGUKKyAgICB9LCB7CisgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAg
ICByZWdleCA6ICI9IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0
dHJpYnV0ZS1uYW1lIiwKKyAgICAgICAgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIgorICAgIH0s
IHsKKyAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CisgICAgICAg
IHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxi
IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4IDogIlxc
cysiCisgICAgfV0uY29uY2F0KHN0cmluZyhuYW1lKSk7Cit9OworCit9KTsKKworYWNlLmRlZmlu
ZSgnYWNlL21vZGUvYmVoYXZpb3VyL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCAnYWNlL21vZGUv
YmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9v
b3AiKTsKK3ZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIveG1sIikuWG1s
QmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0
eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9p
dGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgdm9pZEVsZW1lbnRzID0gWydhcmVhJywgJ2Jh
c2UnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1iZWQnLCAnaHInLCAnaW1nJywgJ2lucHV0
JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nLCAnc291cmNlJywgJ3RyYWNrJywg
J3diciddOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7CisgICAgdmFyIGhhc1R5
cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4nKTsKKyAg
ICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVkbGVMaXN0LmZvckVh
Y2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2YobmVlZGxl
KSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhhc1R5cGU7Cit9CisK
K3ZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworCisgICAgdGhpcy5pbmhlcml0KFht
bEJlaGF2aW91cik7IC8vIEdldCB4bWwgYmVoYXZpb3VyCisgICAgCisgICAgdGhpcy5hZGQoImF1
dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CisgICAgICAgICAg
ICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAg
IHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywg
cG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1
cnJlbnRUb2tlbigpOworICAgICAgICAgICAgdmFyIGF0Q3Vyc29yID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWcnKSAmJiAhKGhhc1R5
cGUodG9rZW4sICd0ZXh0JykgJiYgdG9rZW4udmFsdWUubWF0Y2goJy8nKSkpeworICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFj
a3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAoaGFzVHlwZSh0b2tl
biwgJ3N0cmluZycpIHx8IGhhc1R5cGUodG9rZW4sICdrZXl3b3JkLm9wZXJhdG9yJykgfHwgaGFz
VHlwZSh0b2tlbiwgJ2VudGl0eS5hdHRyaWJ1dGUtbmFtZScpIHx8IGhhc1R5cGUodG9rZW4sICd0
ZXh0JykpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXRDdXJzb3Ig
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhaGFzVHlw
ZSh0b2tlbiwgJ21ldGEudGFnLW5hbWUnKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKS52YWx1
ZS5tYXRjaCgnLycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgaWYgKGF0
Q3Vyc29yKXsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5n
KDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuLnN0YXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2b2lkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTEpeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICB0ZXh0OiAnPicgKyAnPC8nICsgZWxlbWVudCArICc+JywKKyAgICAgICAg
ICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKK30KK29vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3VyLCBYbWxCZWhhdmlvdXIpOworCitleHBv
cnRzLkh0bWxCZWhhdmlvdXIgPSBIdG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9tb2RlL2JlaGF2aW91ci94bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvbW9kZS9iZWhhdmlvdXIv
Y3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwordmFy
IEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKK3ZhciBDc3R5
bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKK3ZhciBU
b2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJh
dG9yOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7CisgICAgdmFyIGhhc1R5cGUg
PSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4nKTsKKyAgICB2
YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVkbGVMaXN0LmZvckVhY2go
ZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2YobmVlZGxlKSA9
PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhhc1R5cGU7Cit9CisKK3Zh
ciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisgICAgCisgICAgdGhpcy5pbmhlcml0KENz
dHlsZUJlaGF2aW91ciwgWyJzdHJpbmdfZHF1b3RlcyJdKTsgLy8gR2V0IHN0cmluZyBiZWhhdmlv
dXIKKyAgICAKKyAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rp
b24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAo
dGV4dCA9PSAnPicpIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJz
b3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0
b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOworICAgICAgICAgICAg
dmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICB2YXIg
YXRDdXJzb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5cGUodG9r
ZW4sICdtZXRhLnRhZycpICYmICEoaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSAmJiB0b2tlbi52YWx1
ZS5tYXRjaCgnLycpKSl7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgICAgIH0gd2hp
bGUgKHRva2VuICYmIChoYXNUeXBlKHRva2VuLCAnc3RyaW5nJykgfHwgaGFzVHlwZSh0b2tlbiwg
J2tleXdvcmQub3BlcmF0b3InKSB8fCBoYXNUeXBlKHRva2VuLCAnZW50aXR5LmF0dHJpYnV0ZS1u
YW1lJykgfHwgaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWctbmFtZScpIHx8IGl0
ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLnZhbHVlLm1hdGNoKCcvJykpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1
ZTsKKyAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CisgICAgICAgICAgICAgICAgdmFyIHRhZyA9
IHRhZy5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW4uc3RhcnQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgdGV4dDogJz4n
ICsgJzwvJyArIHRhZyArICc+JywKKyAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCdhdXRvaW5k
ZW50JywgJ2luc2VydGlvbicsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Np
b24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgeworICAgICAgICAgICAgdmFy
IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGxp
bmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAgICAgdmFyIHJp
Z2h0Q2hhcnMgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsg
Mik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFycyA9PSAnPC8nKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNv
ci5yb3cpKSArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgdmFyIG5l
eHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJv
dykpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCwKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxlbmd0aF0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAKK30K
K29vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMuWG1sQmVo
YXZpb3VyID0gWG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRp
bmcvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3An
LCAnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsICdhY2UvbW9kZS9mb2xkaW5nL3htbCcsICdhY2Uv
bW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwordmFyIE1peGVkRm9s
ZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7Cit2YXIgWG1sRm9sZE1vZGUgPSBy
ZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwordmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgi
Li9jc3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9
IGZ1bmN0aW9uKCkgeworICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1v
ZGUoeworICAgICAgICAiYXJlYSI6IDEsCisgICAgICAgICJiYXNlIjogMSwKKyAgICAgICAgImJy
IjogMSwKKyAgICAgICAgImNvbCI6IDEsCisgICAgICAgICJjb21tYW5kIjogMSwKKyAgICAgICAg
ImVtYmVkIjogMSwKKyAgICAgICAgImhyIjogMSwKKyAgICAgICAgImltZyI6IDEsCisgICAgICAg
ICJpbnB1dCI6IDEsCisgICAgICAgICJrZXlnZW4iOiAxLAorICAgICAgICAibGluayI6IDEsCisg
ICAgICAgICJtZXRhIjogMSwKKyAgICAgICAgInBhcmFtIjogMSwKKyAgICAgICAgInNvdXJjZSI6
IDEsCisgICAgICAgICJ0cmFjayI6IDEsCisgICAgICAgICJ3YnIiOiAxLAorICAgICAgICAibGki
OiAxLAorICAgICAgICAiZHQiOiAxLAorICAgICAgICAiZGQiOiAxLAorICAgICAgICAicCI6IDEs
CisgICAgICAgICJydCI6IDEsCisgICAgICAgICJycCI6IDEsCisgICAgICAgICJvcHRncm91cCI6
IDEsCisgICAgICAgICJvcHRpb24iOiAxLAorICAgICAgICAiY29sZ3JvdXAiOiAxLAorICAgICAg
ICAidGQiOiAxLAorICAgICAgICAidGgiOiAxCisgICAgfSksIHsKKyAgICAgICAgImpzLSI6IG5l
dyBDU3R5bGVGb2xkTW9kZSgpLAorICAgICAgICAiY3NzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgp
CisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1peGVkRm9sZE1vZGUpOwor
Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZm9sZGluZy9m
b2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCYXNlRm9sZE1vZGUgPSByZXF1
aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOworCit2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZv
bGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1Yk1vZGVzKSB7CisgICAgdGhpcy5kZWZh
dWx0TW9kZSA9IGRlZmF1bHRNb2RlOworICAgIHRoaXMuc3ViTW9kZXMgPSBzdWJNb2RlczsKK307
Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5jdGlvbigpIHsK
KworCisgICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgICAgIGZvciAo
dmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXhP
ZihrZXkpID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Yk1vZGVzW2tleV07
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0aGlz
LiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7Cisg
ICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzdGF0ZSk7CisgICAgICAgIHJldHVybiAo
bW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7
CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZv
bGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICB0aGlzLiR0cnlN
b2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwK
KyAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9u
LCBmb2xkU3R5bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9s
ZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKKyAgICAgICAgKTsKKyAgICB9OworCisg
ICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUs
IHJvdykgeworICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0
ZShyb3ctMSkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRX
aWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQorICAgICAgICAgICAgbW9kZSA9IHRoaXMu
JGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKKyAg
ICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKKyAg
ICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOworCithY2UuZGVmaW5l
KCdhY2UvbW9kZS9mb2xkaW5nL3htbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9yYW5nZScsICdhY2UvbW9kZS9m
b2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9v
b3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKK3ZhciBSYW5nZSA9
IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWly
ZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgi
Li4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOworCit2YXIgRm9sZE1vZGUgPSBl
eHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzKSB7CisgICAgQmFzZUZvbGRN
b2RlLmNhbGwodGhpcyk7CisgICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwg
e307Cit9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVuY3Rp
b24oKSB7CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xk
U3R5bGUsIHJvdykgeworICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUo
c2Vzc2lvbiwgcm93KTsKKworICAgICAgICBpZiAodGFnLmNsb3NpbmcpCisgICAgICAgICAgICBy
ZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiID8gImVuZCIgOiAiIjsKKworICAgICAg
ICBpZiAoIXRhZy50YWdOYW1lIHx8IHRoaXMudm9pZEVsZW1lbnRzW3RhZy50YWdOYW1lLnRvTG93
ZXJDYXNlKCldKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgIGlmICh0YWcuc2Vs
ZkNsb3NpbmcpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgaWYgKHRhZy52YWx1
ZS5pbmRleE9mKCIvIiArIHRhZy50YWdOYW1lKSAhPT0gLTEpCisgICAgICAgICAgICByZXR1cm4g
IiI7CisKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLl9n
ZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgeworICAgICAgICB2YXIg
dG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFyIHZhbHVlID0gIiI7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAodG9rZW4udHlw
ZS5pbmRleE9mKCJtZXRhLnRhZyIpID09PSAwKQorICAgICAgICAgICAgICAgIHZhbHVlICs9IHRv
a2VuLnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlICs9IGxh
bmcuc3RyaW5nUmVwZWF0KCIgIiwgdG9rZW4udmFsdWUubGVuZ3RoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICB9OworCisg
ICAgdGhpcy50YWdSZSA9IC9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVowLTk6IV0qKVxzKihcLz8p
Pj8pLzsKKyAgICB0aGlzLl9wYXJzZVRhZyA9IGZ1bmN0aW9uKHRhZykgeworICAgICAgICAKKyAg
ICAgICAgdmFyIG1hdGNoID0gdGhpcy50YWdSZS5leGVjKHRhZyk7CisgICAgICAgIHZhciBjb2x1
bW4gPSB0aGlzLnRhZ1JlLmxhc3RJbmRleCB8fCAwOworICAgICAgICB0aGlzLnRhZ1JlLmxhc3RJ
bmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiB0YWcsCisg
ICAgICAgICAgICBtYXRjaDogbWF0Y2ggPyBtYXRjaFsyXSA6ICIiLAorICAgICAgICAgICAgY2xv
c2luZzogbWF0Y2ggPyAhIW1hdGNoWzNdIDogZmFsc2UsCisgICAgICAgICAgICBzZWxmQ2xvc2lu
ZzogbWF0Y2ggPyAhIW1hdGNoWzVdIHx8IG1hdGNoWzJdID09ICIvPiIgOiBmYWxzZSwKKyAgICAg
ICAgICAgIHRhZ05hbWU6IG1hdGNoID8gbWF0Y2hbNF0gOiAiIiwKKyAgICAgICAgICAgIGNvbHVt
bjogbWF0Y2hbMV0gPyBjb2x1bW4gKyBtYXRjaFsxXS5sZW5ndGggOiBjb2x1bW4KKyAgICAgICAg
fTsKKyAgICB9OworICAgIHRoaXMuX3JlYWRUYWdGb3J3YXJkID0gZnVuY3Rpb24oaXRlcmF0b3Ip
IHsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAg
ICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIAor
ICAgICAgICB2YXIgdmFsdWUgPSAiIjsKKyAgICAgICAgdmFyIHN0YXJ0OworICAgICAgICAKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZigibWV0YS50YWci
KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRv
ci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjog
aXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW4udmFsdWU7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIj4iKSAhPT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGFnLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHRhZy5l
bmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRU
b2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRD
dXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLl9y
ZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgeworICAgICAgICB2YXIgdG9rZW4g
PSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgCisgICAgICAgIHZhciB2YWx1ZSA9ICIi
OworICAgICAgICB2YXIgZW5kOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICh0b2tl
bi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWVuZCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2Vu
LnZhbHVlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlICsgdmFsdWU7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
dGFnLmVuZCA9IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0geworICAgICAg
ICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29s
dW1uKCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaXRlcmF0
b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRl
cmF0b3Iuc3RlcEJhY2t3YXJkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAKKyAgICB0aGlzLl9wb3AgPSBmdW5jdGlvbihzdGFjaywgdGFnKSB7CisgICAg
ICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFy
IHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKKyAgICAgICAgICAgIGlmICghdGFnIHx8IHRv
cC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNr
LnBvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52b2lkRWxl
bWVudHNbdGFnLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52b2lkRWxlbWVudHNbdG9wLnRhZ05hbWVd
KSB7CisgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmdldEZvbGRX
aWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAg
IHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0VGFnLm1hdGNoKQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIAorICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFnLmNsb3Np
bmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CisgICAgICAgIHZhciBzdGFjayA9IFtdOworICAg
ICAgICB2YXIgdGFnOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0JhY2t3YXJkKSB7CisgICAg
ICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZp
cnN0VGFnLmNvbHVtbik7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAgICAgICAgICAg
ICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5jb2x1bW4gKyBm
aXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB3
aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQoaXRlcmF0b3IpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0
YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiAr
PSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVu
ZC5jb2x1bW4gLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9t
UG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFjay5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
YW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcp
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lv
biwgcm93LCBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRhZy5tYXRjaC5sZW5ndGgpOworICAgICAg
ICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IHJvdywKKyAgICAgICAgICAg
ICAgICBjb2x1bW46IGZpcnN0VGFnLmNvbHVtbgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRv
cikpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCF0YWcu
Y2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0
LCBlbmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZykKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
fTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNjcmlwdC5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNjcmlwdC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xOTVlODRkNmQxOTljN2E0NjU3OGE5MTllYWNmNjY0Zjg0YTk4YjY0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2Uv
bW9kZV9qYXZhc2NyaXB0LmpzCkBAIC0wLDAgKzEsODk2IEBACisvKiAqKioqKiBCRUdJTiBMSUNF
TlNFIEJMT0NLICoqKioqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6Cisg
KgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICog
KioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworYWNlLmRlZmluZSgnYWNlL21vZGUv
amF2YXNjcmlwdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2phdmFzY3Jp
cHRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCAn
YWNlL3JhbmdlJywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2UvbW9kZS9iZWhhdmlv
dXIvY3N0eWxlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7
Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRva2VuaXplciA9
IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBKYXZhU2NyaXB0SGlnaGxp
Z2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNj
cmlwdEhpZ2hsaWdodFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgi
Li9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgUmFu
Z2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIFdvcmtlckNsaWVudCA9IHJlcXVp
cmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwordmFyIENzdHlsZUJl
aGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsK
K3ZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9k
ZTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcg
VG9rZW5pemVyKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpKTsKKyAg
ICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4k
YmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVz
ID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2Rl
KTsKKworKGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1
bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAgdmFyIG91dGRl
bnQgPSB0cnVlOworICAgICAgICB2YXIgcmUgPSAvXihccyopXC9cLy87CisKKyAgICAgICAgZm9y
ICh2YXIgaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXJl
LnRlc3QoZG9jLmdldExpbmUoaSkpKSB7CisgICAgICAgICAgICAgICAgb3V0ZGVudCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG91dGRlbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVSYW5nZSA9IG5ldyBS
YW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBl
bmRSb3c7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGRv
Yy5nZXRMaW5lKGkpOworICAgICAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChyZSk7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgICAg
ICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5l
bmQuY29sdW1uID0gbVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgZG9jLnJlcGxhY2UoZGVs
ZXRlUmFuZ2UsIG1bMV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgZG9jLmluZGVudFJvd3Moc3RhcnRSb3csIGVuZFJvdywgIi8vIik7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9u
KHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVu
dChsaW5lKTsKKworICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuJHRva2VuaXplci5n
ZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXpl
ZExpbmUudG9rZW5zOworICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRl
OworCisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFd
LnR5cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAi
cmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14u
Kig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7CisgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CisgICAgICAgICAgICBpZiAoZW5k
U3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWF0Y2gg
PSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGVu
dCArPSAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGVudCArPSAi
KiAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGluZGVudDsK
KyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwg
aW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUs
IGlucHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRl
LCBkb2MsIHJvdykgeworICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93
KTsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lv
bikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNl
L21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOworICAgICAgICB3
b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOworCisgICAgICAg
IHdvcmtlci5vbigianNsaW50IiwgZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAgICAgc2Vz
c2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOworICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gd29ya2VyOworICAgIH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwor
CitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFz
Y3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCAn
YWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBE
b2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdo
dF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVs
ZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVz
OworCit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdmFy
IGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoeworICAgICAgICAidmFy
aWFibGUubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlv
bnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25z
dHJ1Y3RvcnMKKyAgICAgICAgICAgICJOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8IiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gRTRYCisgICAgICAg
ICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fElu
dDMyQXJyYXl8SW50OEFycmF5fCIgICArCisgICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMy
QXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICAr
CisgICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxS
ZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgICArIC8vIEVycm9ycworICAgICAgICAgICAg
IlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21w
b25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBO
b24tY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgICAgICAiaXNOYU58cGFyc2VGbG9hdHxw
YXJzZUludHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
CisgICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCisgICAgICAgICAgICAi
dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbworICAgICAgICAia2V5d29yZCI6CisgICAgICAg
ICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8IiArCisgICAgICAgICAgICAiYnJlYWt8
Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1
bmN0aW9ufCIgKworICAgICAgICAgICAgImlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0
Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8IiArCisgICAg
ICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90
b19ffCIgKworICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1w
bGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGlj
IiwKKyAgICAgICAgInN0b3JhZ2UudHlwZSI6CisgICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxm
dW5jdGlvbiIsCisgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CisgICAgICAgICAgICAibnVs
bHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgor
ICAgICAgICAgICAgImFsZXJ0IiwKKyAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4i
OiAidHJ1ZXxmYWxzZSIKKyAgICB9LCAiaWRlbnRpZmllciIpOworICAgIHZhciBrd0JlZm9yZVJl
ID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0
eXBlb2Z8eWllbGR8dm9pZCI7CisgICAgdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1
MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSpcXGIiOworCisgICAgdmFy
IGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKKyAgICAgICAg
InVbMC05YS1mQS1GXXs0fXwiICsgLy8gdW5pY29kZQorICAgICAgICAiWzAtMl1bMC03XXswLDJ9
fCIgKyAvLyBvY3QKKyAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8gb2N0CisgICAgICAgICIz
N1swLTddP3wiICsgLy8gb2N0CisgICAgICAgICJbNC03XVswLTddP3wiICsgLy9vY3QKKyAgICAg
ICAgIi4pIjsKKworICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogWworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgRG9j
Q29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUg
Y29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAorICAgICAgICAgICAgICAg
IG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIicoPz0uKSIsCisgICAgICAg
ICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScs
CisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAorICAgICAg
ICAgICAgICAgIHJlZ2V4IDogLzBbeFhdWzAtOWEtZkEtRl0rXGIvCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0Cisg
ICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/
XGQrKT8pP1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWwor
ICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9y
IiwgInN1cHBvcnQuZnVuY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24u
b3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsImtleXdvcmQub3BlcmF0
b3IiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlk
ZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIp
KFxccyopKD0pIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWworICAgICAgICAgICAg
ICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5u
YW1lLmZ1bmN0aW9uIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVy
YXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmll
clJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlv
bikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50
cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAg
ICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVy
YXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0
IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJl
Z2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxz
KikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAg
ICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFt
ZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0
b3IiLCAidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIs
ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsg
IikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxz
KykoXFx3KykoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2Fy
Z3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAg
ICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1
bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiKGZ1bmN0aW9uKShcXHMrKSgiICsgaWRlbnRpZmllclJlICsg
IikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50
cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAg
ICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24u
b3BlcmF0b3IiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAi
dGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAg
ICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9u
KShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRz
IgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWworICAgICAgICAg
ICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVu
LmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6
KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1
bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVS
ZSArICIpXFxiIiwKKyAgICAgICAgICAgICAgICBuZXh0IDogInJlZ2V4X2FsbG93ZWQiCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJh
dG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKKyAgICAgICAgICAgICAgICByZWdleCA6IC8oXC4p
KHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9s
bCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B6enp6fHJpa2UpfGkoPzpufHpl
VG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGko
PzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRl
c3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxU
aW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxs
aXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0
aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZl
bnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxm
aXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRz
fGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0
cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3Ry
aW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58Rmlu
aXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2
ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/
Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGlu
Z3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxu
YWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0
fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVu
YWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0
ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21D
aGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hv
cnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIo
PzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFj
ZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQo
PzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29u
ZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRD
KD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0
ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxt
KD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmli
dXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5r
fGFjaykpXGIoPz1cKCkvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZG9tIl0sCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRl
eHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hp
bGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJl
YXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9v
dCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJl
bmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxD
ZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFk
fEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRh
KSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0
dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8
VGFnTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLworICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsICJzdXBwb3J0LmNvbnN0YW50Il0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShz
KD86eXN0ZW1MYW5ndWFnZXxjcig/OmlwdHN8b2xsYmFyc3xlZW4oPzpYfFl8VG9wfExlZnQpKXx0
KD86eWxlKD86U2hlZXRzKT98YXR1cyg/OlRleHR8YmFyKT8pfGlibGluZyg/OkJlbG93fEFib3Zl
KXxvdXJjZXx1ZmZpeGVzfGUoPzpjdXJpdHkoPzpQb2xpY3kpP3xsKD86ZWN0aW9ufGYpKSl8aCg/
OmlzdG9yeXxvc3QoPzpuYW1lKT98YXMoPzpofEZvY3VzKSl8eXxYKD86TUxEb2N1bWVudHxTTERv
Y3VtZW50KXxuKD86ZXh0fGFtZSg/OnNwYWNlKD86c3xVUkkpfFByb3ApKXxNKD86SU5fVkFMVUV8
QVhfVkFMVUUpfGMoPzpoYXJhY3RlclNldHxvKD86big/OnN0cnVjdG9yfHRyb2xsZXJzKXxva2ll
RW5hYmxlZHxsb3JEZXB0aHxtcCg/Om9uZW50c3xsZXRlKSl8dXJyZW50fHB1Q2xhc3N8bCg/Omko
PzpwKD86Ym9hcmREYXRhKT98ZW50SW5mb3JtYXRpb24pfG9zZWR8YXNzZXMpfGFsbGUoPzplfHIp
fHJ5cHRvKXx0KD86byg/Om9sYmFyfHApfGV4dCg/OlRyYW5zZm9ybXxJbmRlbnR8RGVjb3JhdGlv
bnxBbGlnbil8YWdzKXxTUVJUKD86MV8yfDIpfGkoPzpuKD86bmVyKD86SGVpZ2h0fFdpZHRoKXxw
dXQpfGRzfGdub3JlQ2FzZSl8ekluZGV4fG8oPzpzY3B1fG4oPzpyZWFkeXN0YXRlY2hhbmdlfExp
bmUpfHV0ZXIoPzpIZWlnaHR8V2lkdGgpfHAoPzpzUHJvZmlsZXxlbmVyKXxmZnNjcmVlbkJ1ZmZl
cmluZyl8TkVHQVRJVkVfSU5GSU5JVFl8ZCg/OmkoPzpzcGxheXxhbG9nKD86SGVpZ2h0fFRvcHxX
aWR0aHxMZWZ0fEFyZ3VtZW50cyl8cmVjdG9yaWVzKXxlKD86c2NyaXB0aW9ufGZhdWx0KD86U3Rh
dHVzfENoKD86ZWNrZWR8YXJzZXQpfFZpZXcpKSl8dSg/OnNlcig/OlByb2ZpbGV8TGFuZ3VhZ2V8
QWdlbnQpfG4oPzppcXVlSUR8ZGVmaW5lZCl8cGRhdGVJbnRlcnZhbCl8X2NvbnRlbnR8cCg/Oml4
ZWxEZXB0aHxvcnR8ZXJzb25hbGJhcnxrY3MxMXxsKD86dWdpbnN8YXRmb3JtKXxhKD86dGhuYW1l
fGRkaW5nKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KXxyZW50KD86V2luZG93fExheWVyKT98Z2Uo
PzpYKD86T2Zmc2V0KT98WSg/Ok9mZnNldCk/KSl8cig/Om8oPzp0byg/OmNvbHx0eXBlKXxkdWN0
KD86U3ViKT98bXB0ZXIpfGUoPzp2aW91c3xmaXgpKSl8ZSg/Om4oPzpjb2Rpbmd8YWJsZWRQbHVn
aW4pfHgoPzp0ZXJuYWx8cGFuZG8pfG1iZWRzKXx2KD86aXNpYmlsaXR5fGVuZG9yKD86U3ViKT98
TGlua2NvbG9yKXxVUkxVbmVuY29kZWR8UCg/Okl8T1NJVElWRV9JTkZJTklUWSl8Zig/OmlsZW5h
bWV8byg/Om50KD86U2l6ZXxGYW1pbHl8V2VpZ2h0KXxybU5hbWUpfHJhbWUoPzpzfEVsZW1lbnQp
fGdDb2xvcil8RXx3aGl0ZVNwYWNlfGwoPzppKD86c3RTdHlsZVR5cGV8big/OmVIZWlnaHR8a0Nv
bG9yKSl8byg/OmNhKD86dGlvbig/OmJhcik/fGxOYW1lKXx3c3JjKXxlKD86bmd0aHxmdCg/OkNv
bnRleHQpPyl8YSg/OnN0KD86TSg/Om9kaWZpZWR8YXRjaCl8SW5kZXh8UGFyZW4pfHllcig/OnN8
WCl8bmd1YWdlKSl8YSg/OnBwKD86TWlub3JWZXJzaW9ufE5hbWV8Q28oPzpkZU5hbWV8cmUpfFZl
cnNpb24pfHZhaWwoPzpIZWlnaHR8VG9wfFdpZHRofExlZnQpfGxsfHIoPzppdHl8Z3VtZW50cyl8
TGlua2NvbG9yfGJvdmUpfHIoPzppZ2h0KD86Q29udGV4dCk/fGUoPzpzcG9uc2UoPzpYTUx8VGV4
dCl8YWR5U3RhdGUpKXxnbG9iYWx8eHxtKD86aW1lVHlwZXN8dWx0aWxpbmV8ZW51YmFyfGFyZ2lu
KD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KSl8TCg/Ok4oPzoxMHwyKXxPRyg/OjEwRXwyRSkpfGIo
PzpvKD86dHRvbXxyZGVyKD86V2lkdGh8UmlnaHRXaWR0aHxCb3R0b21XaWR0aHxTdHlsZXxDb2xv
cnxUb3BXaWR0aHxMZWZ0V2lkdGgpKXx1ZmZlckRlcHRofGVsb3d8YWNrZ3JvdW5kKD86Q29sb3J8
SW1hZ2UpKSlcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsi
c3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24u
ZmlyZWJ1ZyJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhjb25zb2xlKShcLikod2Fybnxp
bmZvfGxvZ3xlcnJvcnx0aW1lfHRpbWVFbmR8YXNzZXJ0KVxiLworICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IGlkZW50aWZpZXJSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuIDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwr
XCt8WyEkJSYqK1wtfl18PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58
IXwmJnxcfFx8fFw/XDp8XCo9fCU9fFwrPXxcLT18Jj18XF49LywKKyAgICAgICAgICAgICAgICBu
ZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6
IC9cP3xcOnxcLHxcO3xcLi8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dl
ZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFy
ZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8sCisgICAgICAgICAgICAgICAg
bmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcXSl9
XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9w
ZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cLz0/LywKKyAgICAgICAgICAgICAg
ICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuOiAiY29tbWVudCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCisg
ICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9hbGxvd2VkIjogWworICAg
ICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0
IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8v
IG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCisg
ICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCisgICAgICAgICAgICAg
ICAgcmVnZXggOiAiXFwvXFwvLiokIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAor
ICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKKyAgICAg
ICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAg
ICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXgiOiBbCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCisgICAg
ICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsy
fXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5y
ZWdleHAiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1xcdyoiLAorICAgICAgICAgICAgICAg
IG5leHQ6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiAiaW52YWxpZCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkKyw/KD86XGQrKT99Wysq
XXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfHtcZCssPyg/OlxkKyk/fXx7LFxkK318WysqXVw/fFso
KSReKyo/XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25z
dGFudC5sYW5ndWFnZS5kZWxpbWl0ZXIiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFn
ZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLAorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIs
CisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAiCisgICAgICAgICAgICB9Cisg
ICAgICAgIF0sCisgICAgICAgICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiOiBbCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCisg
ICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1G
XXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0
YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKKyAgICAg
ICAgICAgICAgICBuZXh0OiAicmVnZXgiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICBy
ZWdleDogIi0iCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0
eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAi
c3RhcnQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAi
c3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCisgICAgICAgICAgICB9CisgICAgICAgIF0s
CisgICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAorICAgICAgICAgICAgICAgIHJl
Z2V4OiBpZGVudGlmaWVyUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
bjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIlssIF0r
IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9u
Lm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4
OiAiIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9CisgICAg
ICAgIF0sCisgICAgICAgICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiIDogWworICAgICAgICAgICAg
e3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInJlZ2V4X2FsbG93
ZWQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAgICAgIF0s
CisgICAgICAgICJjb21tZW50IiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50Iiwg
cmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJzdGFydCJ9LAorICAgICAgICAgICAge2RlZmF1bHRU
b2tlbiA6ICJjb21tZW50In0KKyAgICAgICAgXSwKKyAgICAgICAgInFxc3RyaW5nIiA6IFsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5l
c2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6ICJcXFxcJCIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciLAorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAg
ICAgICAgICAgcmVnZXggOiAnInwkJywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIs
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5n
IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicXN0cmluZyIgOiBbCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNj
YXBlIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAiXFxcXCQiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciLAorICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAg
ICAgICAgcmVnZXggOiAiJ3wkIiwKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIsCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgor
ICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIHRoaXMuZW1iZWRSdWxlcyhE
b2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKKyAgICAgICAgWyBEb2NDb21tZW50SGln
aGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKK307CisKK29vcC5pbmhlcml0cyhK
YXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK2V4cG9ydHMu
SmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOworfSk7
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcycsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUv
dGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0SGlnaGxp
Z2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdo
dFJ1bGVzOworCit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisK
KyAgICB0aGlzLiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsgeworICAgICAgICAgICAg
dG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4IDogIkBbXFx3XFxk
X10rIiAvLyBUT0RPOiBmaXggZW1haWwgYWRkcmVzc2VzCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisgICAgICAgICAgICByZWdleCA6ICJcXGJU
T0RPXFxiIgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVu
dC5kb2MiCisgICAgICAgIH1dCisgICAgfTsKK307CisKK29vcC5pbmhlcml0cyhEb2NDb21tZW50
SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK0RvY0NvbW1lbnRIaWdobGln
aHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgeworICAgIHJldHVybiB7Cisg
ICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gZG9jIGNvbW1lbnQKKyAgICAgICAgcmVn
ZXggOiAiXFwvXFwqKD89XFwqKSIsCisgICAgICAgIG5leHQgIDogc3RhcnQKKyAgICB9OworfTsK
KworRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUgPSBmdW5jdGlvbiAoc3RhcnQp
IHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3Np
bmcgY29tbWVudAorICAgICAgICByZWdleCA6ICJcXCpcXC8iLAorICAgICAgICBuZXh0ICA6IHN0
YXJ0CisgICAgfTsKK307CisKKworZXhwb3J0cy5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBE
b2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9t
YXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIE1hdGNoaW5nQnJh
Y2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5j
aGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAgICAgICBpZiAoISAvXlxz
KyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0
dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRkZW50
ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShy
b3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOworCisgICAg
ICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsx
XS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJh
Y2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAgICAgaWYgKCFvcGVuQnJh
Y2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOworCisgICAgICAgIHZh
ciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykp
OworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwg
aW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkg
eworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAgICAgaWYg
KG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5w
cm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFj
ZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21v
ZGUvYmVoYXZpb3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvbGliL2xhbmcnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUo
Ii4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIi
KS5CZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0
ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xh
bmciKTsKKwordmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CisgICAgWyJ0ZXh0IiwgInBhcmVu
LnJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwordmFyIFNBRkVfSU5TRVJUX0JFRk9S
RV9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3Bl
cmF0b3IiLCAiY29tbWVudCJdOworCisKK3ZhciBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2
YXIgYXV0b0luc2VydGVkUm93ID0gLTE7Cit2YXIgYXV0b0luc2VydGVkTGluZUVuZCA9ICIiOwor
dmFyIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgbWF5YmVJbnNlcnRlZFJvdyA9IC0x
OwordmFyIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkTGlu
ZUVuZCA9ICIiOworCit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworICAgIAor
ICAgIENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5jdGlvbihlZGl0b3IsIHNl
c3Npb24pIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigp
OworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJz
b3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlw
ZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RP
S0VOUykpIHsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVyYXRvcihz
ZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAo
IXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4
dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgIHJl
dHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fAorICAg
ICAgICAgICAgdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkg
fHwgInRleHQiLCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKKyAgICB9OworICAgIAorICAg
IENzdHlsZUJlaGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0b2tlbiwgdHlwZXMp
IHsKKyAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tlbikgPiAt
MTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0ID0g
ZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9u
LmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNBdXRvSW5zZXJ0
ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVuZFswXSkpCisgICAgICAg
ICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIGF1dG9JbnNlcnRlZFJvdyA9
IGN1cnNvci5yb3c7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBicmFja2V0ICsgbGlu
ZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNrZXRzKys7
CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQgPSBm
dW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9
IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhpcy5pc01heWJlSW5zZXJ0
ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpCisgICAgICAgICAgICBtYXliZUluc2VydGVkQnJhY2tl
dHMgPSAwOworICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKKyAgICAgICAg
bWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pICsg
YnJhY2tldDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5lLnN1YnN0cihjdXJz
b3IuY29sdW1uKTsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7CisgICAgfTsKKyAg
ICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24o
Y3Vyc29yLCBsaW5lLCBicmFja2V0KSB7CisgICAgICAgIHJldHVybiBhdXRvSW5zZXJ0ZWRCcmFj
a2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1dG9JbnNlcnRlZFJvdyAm
JgorICAgICAgICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGluZUVuZFswXSAmJgorICAg
ICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1dG9JbnNlcnRlZExpbmVF
bmQ7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xv
c2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkgeworICAgICAgICByZXR1cm4gbWF5YmVJbnNl
cnRlZEJyYWNrZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gbWF5YmVJbnNl
cnRlZFJvdyAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IG1h
eWJlSW5zZXJ0ZWRMaW5lRW5kICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0cigwLCBjdXJzb3Iu
Y29sdW1uKSA9PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OworICAgIH07CisgICAgCisgICAgQ3N0
eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgYXV0b0luc2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3RyKDEpOwor
ICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgIH07CisgICAgCisgICAgQ3N0eWxl
QmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9
IC0xOworICAgIH07CisKKyAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgdmFy
IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9
IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICh0ZXh0ID09ICd7
JykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5n
ZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdl
KHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVk
ICE9PSAieyIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snICsgc2VsZWN0
ZWQgKyAnfScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5l
SW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoL1tcXVx9
XCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7CisgICAgICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIn0iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6
ICd7fScsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChlZGl0b3IsIHNlc3Npb24s
ICJ7Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAneycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAx
XQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgeworICAgICAgICAgICAgdmFyIHJp
Z2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAx
KTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2NvbHVtbjog
Y3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAgICAgIGlm
IChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9z
aW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVo
YXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAi
XG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7CisgICAgICAgICAgICB2YXIgY2xvc2luZyA9ICIiOwor
ICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1
cnNvciwgbGluZSkpIHsKKyAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBl
YXQoIn0iLCBtYXliZUluc2VydGVkQnJhY2tldHMpOworICAgICAgICAgICAgICAgIENzdHlsZUJl
aGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vy
c29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScgfHwgY2xv
c2luZyAhPT0gIiIpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gc2Vzc2lv
bi5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNv
bHVtbn0sICd9Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MpCisgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgICAgIHZhciBpbmRlbnQg
PSB0aGlzLmdldE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0cmluZygwLCBjdXJzb3Iu
Y29sdW1uKSwgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgdmFyIG5l
eHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBu
ZXh0X2luZGVudCArIGNsb3NpbmcsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEs
IGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImJyYWNlcyIs
ICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJh
bmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShy
YW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAn
eycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5z
dGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJh
bmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChy
aWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwor
ICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5zZXJ0aW9uIiwgZnVu
Y3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBp
ZiAodGV4dCA9PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0
U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9j
LmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAi
IiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcgKyBzZWxlY3RlZCArICcp
JywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRp
b24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5y
ZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAorICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKKyAgICAgICAgICAgIHZhciBjdXJz
b3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0g
c2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENo
YXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7Cisg
ICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHZhciBt
YXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46IGN1cnNv
ci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhj
dXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91
ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFk
ZCgicGFyZW5zIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwg
c2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0
VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNl
bGVjdGVkID09ICcoJykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRM
aW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5z
dWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7
CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHJh
bmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJp
bnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0
KSB7CisgICAgICAgIGlmICh0ZXh0ID09ICdbJykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlv
biA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAo
c2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbJyAr
IHNlbGVjdGVkICsgJ10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3Vy
LmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgQ3N0
eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiXSIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbXScsCisg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykgeworICAgICAg
ICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAg
ICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5j
b2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCddJywg
e2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAg
ICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5z
ZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Q3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwg
YWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9
IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNN
dWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0g
c2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJp
Z2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0
YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnXScpIHsKKyAg
ICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFk
ZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24s
IGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4
dCA9PSAiJyIpIHsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CisgICAgICAgICAgICB2
YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2
YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBzZWxlY3Rl
ZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxl
Y3RlZCArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgICAg
ICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1cnNvci5j
b2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwnKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7
CisgICAgICAgICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOworICAgICAgICAgICAgICAgIHZh
ciBxdW90ZXBvcyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBvcGVuIHF1
b3RlLgorCisgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbnMubGVuZ3Ro
OyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbeF07CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgcXVvdGVwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChx
dW90ZXBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IHRva2VuLnZh
bHVlLmluZGV4T2YocXVvdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNlbGVjdGlvbi5zdGFydC5j
b2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNbeF0udmFsdWUubGVuZ3Ro
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IChxdW90
ZXBvcyA8IDAgJiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0b2tlbi50eXBlICE9PSAi
c3RyaW5nIiB8fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRva2VuLnZhbHVlLmxlbmd0
aCtjb2wtMSkgJiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUpID09PSB0b2tlbi52YWx1
ZS5sZW5ndGgtMSkpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNzdHlsZUJlaGF2aW91
ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb246IFsxLDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5nIikgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwg
Y3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5j
dGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2
YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBp
ZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxlY3RlZCA9
PSAiJyIpKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFu
Z2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7CisKK307CisKK29vcC5pbmhlcml0cyhDc3R5bGVCZWhh
dmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0eWxlQmVo
YXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2Un
LCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3Zh
ciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRNb2Rl
ID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhw
b3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJh
c2VGb2xkTW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFy
a2VyID0gLyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87CisgICAgdGhpcy5mb2xkaW5nU3Rv
cE1hcmtlciA9IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLzsKKworICAgIHRoaXMu
Z2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsK
KyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1h
dGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CisgICAgICAgIGlmICht
YXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKKworICAgICAgICAgICAg
aWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0
QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBz
ZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJtYXJrYmVnaW5lbmQiKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhp
cy5mb2xkaW5nU3RvcE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAg
dmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKworICAgICAgICAgICAgaWYg
KG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0Qmxv
Y2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZXNz
aW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CisgICAgICAgIH0KKyAgICB9Owor
Cit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZGY2N2ZhNDExNzBiMWU5M2IzNWM2MmQ1YWJiNDg0MTE2MjFhMWY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVf
dGV4dG1hdGUuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgu
b3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBF
TkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdhY2UvdGhlbWUvdGV4dG1h
dGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9tJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9ydHMuaXNEYXJrID0g
ZmFsc2U7CitleHBvcnRzLmNzc0NsYXNzID0gImFjZS10bSI7CitleHBvcnRzLmNzc1RleHQgPSAi
LmFjZS10bSAuYWNlX2d1dHRlciB7XAorYmFja2dyb3VuZDogI2YwZjBmMDtcCitjb2xvcjogIzMz
MztcCit9XAorLmFjZS10bSAuYWNlX3ByaW50LW1hcmdpbiB7XAord2lkdGg6IDFweDtcCitiYWNr
Z3JvdW5kOiAjZThlOGU4O1wKK31cCisuYWNlLXRtIC5hY2VfZm9sZCB7XAorYmFja2dyb3VuZC1j
b2xvcjogIzZCNzJFNjtcCit9XAorLmFjZS10bSAuYWNlX3Njcm9sbGVyIHtcCitiYWNrZ3JvdW5k
LWNvbG9yOiAjRkZGRkZGO1wKK31cCisuYWNlLXRtIC5hY2VfY3Vyc29yIHtcCitib3JkZXItbGVm
dDogMnB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2Vfb3ZlcndyaXRlLWN1cnNvcnMg
LmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0OiAwcHg7XAorYm9yZGVyLWJvdHRvbTogMXB4IHNv
bGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtcCitjb2xvcjogcmdiKDE5
MSwgMTkxLCAxOTEpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RvcmFnZSxcCisuYWNlLXRtIC5hY2Vf
a2V5d29yZCB7XAorY29sb3I6IGJsdWU7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudCB7XAor
Y29sb3I6IHJnYigxOTcsIDYsIDExKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9i
dWlsZGluIHtcCitjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCit9XAorLmFjZS10bSAuYWNlX2Nv
bnN0YW50LmFjZV9sYW5ndWFnZSB7XAorY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7XAorfVwKKy5h
Y2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XAorY29sb3I6IHJnYig2LCAxNTAsIDE0
KTtcCit9XAorLmFjZS10bSAuYWNlX2ludmFsaWQge1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEo
MjU1LCAwLCAwLCAwLjEpO1wKK2NvbG9yOiByZWQ7XAorfVwKKy5hY2UtdG0gLmFjZV9zdXBwb3J0
LmFjZV9mdW5jdGlvbiB7XAorY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAorfVwKKy5hY2UtdG0g
LmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XAorY29sb3I6IHJnYig2LCAxNTAsIDE0KTtcCit9
XAorLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsXAorLmFjZS10bSAuYWNlX3N1cHBvcnQu
YWNlX2NsYXNzIHtcCitjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wKK31cCisuYWNlLXRtIC5h
Y2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKK2NvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XAor
fVwKKy5hY2UtdG0gLmFjZV9zdHJpbmcge1wKK2NvbG9yOiByZ2IoMywgMTA2LCA3KTtcCit9XAor
LmFjZS10bSAuYWNlX2NvbW1lbnQge1wKK2NvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcCit9XAor
LmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XAorY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7
XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XAorY29sb3I6IHJn
YigxMjgsIDE1OSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmlj
IHtcCitjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAorfVwKKy5hY2UtdG0gLmFjZV92YXJpYWJsZSB7
XAorY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKK31cCisuYWNlLXRtIC5hY2VfeG1sLXBlIHtc
Citjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAorfVwKKy5hY2UtdG0gLmFjZV9lbnRpdHkuYWNl
X25hbWUuYWNlX2Z1bmN0aW9uIHtcCitjb2xvcjogIzAwMDBBMjtcCit9XAorLmFjZS10bSAuYWNl
X21hcmt1cC5hY2VfaGVhZGluZyB7XAorY29sb3I6IHJnYigxMiwgNywgMjU1KTtcCit9XAorLmFj
ZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7XAorY29sb3I6cmdiKDE4NSwgNiwgMTQ0KTtcCit9
XAorLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XAorY29sb3I6cmdiKDAsIDIyLCAxNDIpO1wK
K31cCisuYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XAorY29sb3I6IHJnYigyNTUsIDAs
IDApXAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKK2Jh
Y2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCit9XAorLmFjZS10bS5hY2VfbXVsdGlzZWxl
Y3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCitib3gtc2hhZG93OiAwIDAgM3B4IDBweCB3
aGl0ZTtcCitib3JkZXItcmFkaXVzOiAycHg7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5
ZXIgLmFjZV9zdGVwIHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO1wKK31cCisuYWNl
LXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKK2JhY2tncm91bmQ6IHJnYigxNjQs
IDIyOSwgMTAxKTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQg
e1wKK21hcmdpbjogLTFweCAwIDAgLTFweDtcCitib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAx
OTIsIDE5Mik7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGlu
ZSB7XAorYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCit9XAorLmFjZS10bSAuYWNl
X2d1dHRlci1hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7XAorfVwK
Ky5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCitiYWNrZ3Jv
dW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XAorYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAw
LCAyNTApO1wKK31cCisuYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtcCitiYWNrZ3JvdW5kOiB1
cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFB
QUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndBbVZnZDEvdzExL2dB
QUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAorfVwKKyI7CisKK3ZhciBkb20g
PSByZXF1aXJlKCIuLi9saWIvZG9tIik7Citkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3Nz
VGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApp
bmRleCA1ZmJkNDFlZjEwNzUzYWYyNGNlNjcxMTJmM2NhMGZlYzAzMThjOWFhLi5lY2UzYmFlNGI3
YjdiZDY2M2I1OWUyNTEzZGRjZmJhMDY0YzcwMTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC04NDUsNiArODQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0c19qcycs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0
b29sc19jb2RlbWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93b3JrZXJf
anMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRf
c2NyaXB0X2Zvcm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05MzMsNiArOTM0LDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2Rl
dnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0c19qcycsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19jb2RlbWlycm9yX2pzJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRv
b2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93b3JrZXJfanMnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfc2NyaXB0X2Zvcm1hdHRlcl93b3Jr
ZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0
ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05NTAsNiArOTUyLDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9Qcm9maWxlc1Bh
bmVsLmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVz
b3VyY2VzL2luc3BlY3Rvci9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvQ29kZU1pcnJvclRleHRF
ZGl0b3IuanMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9y
ZXNvdXJjZXMvaW5zcGVjdG9yL0FjZVRleHRFZGl0b3IuanMnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0hlYXBTbmFwc2hv
dFdvcmtlci5qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIp
L3Jlc291cmNlcy9pbnNwZWN0b3IvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9k
ZXZUb29scy5jc3MnLApAQCAtMTE4Niw2ICsxMTg5LDIyIEBACiAgICAgICAgICAgICAgICAgICAg
IH1dLAogICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3Jf
anMnLAorICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICAgICAgICAg
ICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1l
JzogJ2NvbmNhdGVuYXRlX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJ3NjcmlwdF9uYW1lJzogJ3NjcmlwdHMvaW5saW5lX2pzX2ltcG9ydHMucHknLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0X2ZpbGUnOiAnLi4vLi4vV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAoX3NjcmlwdF9u
YW1lKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rvcl9hY2Vf
ZWRpdG9yX2pzX2ZpbGVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ3NlYXJjaF9wYXRoJzogJy4uLy4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsnPChQUk9EVUNU
X0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BY2VUZXh0RWRpdG9yLmpzJ10sCisgICAgICAgICAg
ICAgICAgICAgICAgICAnYWN0aW9uJzogWydweXRob24nLCAnPEAoX3NjcmlwdF9uYW1lKScsICc8
QChfaW5wdXRfZmlsZSknLCAnPEAoX3NlYXJjaF9wYXRoKScsICc8QChfb3V0cHV0cyknLCAndHJ1
ZSddLAorICAgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvbmNhdGVu
YXRlZF9oZWFwX3NuYXBzaG90X3dvcmtlcl9qcycsCiAgICAgICAgICAgICAgICAgICAgICd0eXBl
JzogJ25vbmUnLAogICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190985</attachid>
            <date>2013-03-01 10:39:10 -0800</date>
            <delta_ts>2013-03-04 01:29:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111191-20130301223520.patch</filename>
            <type>text/plain</type>
            <size>698538</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODg0MjQ4NjUzZmZjMmEw
ZGZjMTRhZTljNWZhOTM3ZDZjMDNmOTJhYy4uZTQwYjk2MGZmYzljOTY1YmQ2NTIwYjU5OTNiMTEx
ODU5MjQxZDM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDEzLTAzLTAxICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhZGQgQWNlIGVkaXRvciBleHBlcmltZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkIEFj
ZSB0ZXh0IGVkaXRvciBleHBlcmltZW50LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qczogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeHBlcmltZW50c1NldHRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzczogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qczogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qczogQWRkZWQuCisK
KzIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlm
IGluc3BlY3RvcidzIHNvdXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGYxNDJhOGNhMzgxYzk1MTdkYjg3N2FiNWZjNGJhOTZjZTVkOTMwZTku
LmQyNjBkNWJlNzU2MGNiMjJkZDkzZmUwYzdkZTU3NDk1ODc4YzM5ODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlr
b3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFk
ZCBBY2UgZWRpdG9yIGV4cGVyaW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMTE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0YXJnZXQgdG8gY29uY2F0ZW5hdGUganMgZmlsZXMgZm9yIEFj
ZSBUZXh0IEVkaXRvci4KKworICAgICAgICAqIFdlYktpdC5neXA6CisKKzIwMTMtMDMtMDEgIEFu
ZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIGluc3BlY3RvcidzIHNv
dXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMTE4NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjVmZjk5MGY2
YWM1M2Y1NTI1MmFiZWYwYjg4YmZkNDJiNzUxMzFmYS4uNDJiOGY4NWUwNDI3ODBjYzVjOTM1MDhi
MmI4ZDJlN2FhZGI5MTI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTM1Miw2ICs1MzUyLDExIEBA
CiAgICAgICAgICAgICAnPEAod2ViaW5zcGVjdG9yX3N0YW5kYWxvbmVfZmlsZXMpJywKICAgICAg
ICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9zdGFuZGFsb25lX2ZpbGVzJzogWworICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcycsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9hdWRpdHNQYW5lbC5jc3MnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL2J1aWxkU3lzdGVtT25seS5qcycsCkBAIC01NDg0LDYgKzU0ODksMTEgQEAK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qcycsCiAgICAgICAgIF0s
CiAKKyAgICAgICAgJ3dlYmluc3BlY3Rvcl9hY2VfZWRpdG9yX2pzX2ZpbGVzJzogWworICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcycsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzJywKKyAgICAgICAgXSwKKwogICAgICAg
ICAnd2ViaW5zcGVjdG9yX21vZHVsZXNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnPEAod2Vi
aW5zcGVjdG9yX2VsZW1lbnRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAod2ViaW5zcGVj
dG9yX3Jlc291cmNlc19qc19maWxlcyknLApAQCAtNTQ5Myw2ICs1NTAzLDcgQEAKICAgICAgICAg
ICAgICc8QCh3ZWJpbnNwZWN0b3JfcHJvZmlsZXNfanNfZmlsZXMpJywKICAgICAgICAgICAgICc8
QCh3ZWJpbnNwZWN0b3JfYXVkaXRzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAod2ViaW5z
cGVjdG9yX2NvZGVtaXJyb3JfanNfZmlsZXMpJywKKyAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0
b3JfYWNlX2VkaXRvcl9qc19maWxlcyknLAogICAgICAgICBdLAogICAgICAgICAnd2ViaW5zcGVj
dG9yX3VnbGlmeWpzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
VWdsaWZ5SlMvcGFyc2UtanMuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkNTQyMmVmNzM2MmQ5OGYx
MmZiYjY4MmUxODQzZmQ0YjI4NWE2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMKQEAgLTAsMCArMSwzNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1w
b3J0U2NyaXB0KCJhY2UvYWNlLmpzIik7CisKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvcn0KKyAqIEBwYXJhbSB7P3N0cmluZ30gdXJsCisgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yRGVsZWdhdGV9IGRlbGVnYXRlCisgKi8KKworV2ViSW5zcGVjdG9yLkFj
ZVRleHRFZGl0b3IgPSBmdW5jdGlvbih1cmwsIGRlbGVnYXRlKQoreworICAgIFdlYkluc3BlY3Rv
ci5WaWV3LmNhbGwodGhpcyk7CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICB0
aGlzLl91cmwgPSB1cmw7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2UtZWRpdG9y
LWNvbnRhaW5lciI7CisKKyAgICB2YXIgcHJlZml4ID0gd2luZG93LmZsYXR0ZW5JbXBvcnRzID8g
IiIgOiAiYWNlLyI7CisgICAgYWNlLmNvbmZpZy5zZXRNb2R1bGVVcmwoImFjZS9tb2RlL2phdmFz
Y3JpcHQiLCBwcmVmaXggKyAibW9kZV9qYXZhc2NyaXB0LmpzIik7CisgICAgYWNlLmNvbmZpZy5z
ZXRNb2R1bGVVcmwoImFjZS9tb2RlL2phdmFzY3JpcHQiLCBwcmVmaXggKyAibW9kZV9jc3MuanMi
KTsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgiYWNlL21vZGUvamF2YXNjcmlwdCIsIHBy
ZWZpeCArICJtb2RlX2h0bWwuanMiKTsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgiYWNl
L3RoZW1lL3RleHRtYXRlIiwgcHJlZml4ICsgInRoZW1lX3RleHRtYXRlLmpzIik7CisgICAgdGhp
cy5fYWNlRWRpdG9yID0gd2luZG93LmFjZS5lZGl0KHRoaXMuZWxlbWVudCk7CisKKyAgICB0aGlz
Ll9hY2VFZGl0b3Iuc2V0U2hvd0ZvbGRXaWRnZXRzKGZhbHNlKTsKKyAgICB0aGlzLl9hY2VFZGl0
b3Iub24oImd1dHRlcmNsaWNrIiwgdGhpcy5fZ3V0dGVyQ2xpY2suYmluZCh0aGlzKSk7CisgICAg
dGhpcy5fYWNlRWRpdG9yLm9uKCJjaGFuZ2UiLCB0aGlzLl9vblRleHRDaGFuZ2UuYmluZCh0aGlz
KSk7CisgICAgdGhpcy5fYWNlRWRpdG9yLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmUoZmFsc2UpOwor
ICAgIHRoaXMuX2FjZUVkaXRvci5zZXNzaW9uLnNldFVzZVdvcmtlcihmYWxzZSk7CisgICAgdGhp
cy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJhY2UvYWNlZGV2dG9vbHMuY3NzIik7Cit9CisKK1dlYklu
c3BlY3Rvci5BY2VUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKKworICAgIF9vblRleHRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UZXh0Q2hh
bmdlZChudWxsLCBudWxsKTsKKyAgICB9LAorCisgICAgX2d1dHRlckNsaWNrOiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcGFyc2VJbnQoZXZlbnQuZG9t
RXZlbnQudGFyZ2V0LnRleHRDb250ZW50KSAtIDE7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkV2ZW50cy5HdXR0ZXJDbGljaywg
eyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBldmVudDogZXZlbnQuZG9tRXZlbnQgfSk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQorICAgICAqLwor
ICAgIHNldCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaChtaW1lVHlw
ZSkgeworICAgICAgICBjYXNlICJ0ZXh0L2h0bWwiOgorICAgICAgICAgICAgdGhpcy5fYWNlRWRp
dG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCJhY2UvbW9kZS9odG1sIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAidGV4dC9jc3MiOgorICAgICAgICAgICAgdGhpcy5fYWNlRWRp
dG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCJhY2UvbW9kZS9jc3MiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJ0ZXh0L2phdmFzY3JpcHQiOgorICAgICAgICAgICAgdGhpcy5f
YWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCJhY2UvbW9kZS9qYXZhc2NyaXB0Iik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IHJlYWRPbmx5CisgICAgICovCisgICAgc2V0UmVhZE9ubHk6IGZ1bmN0
aW9uKHJlYWRPbmx5KQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLnNldFJlYWRPbmx5
KHJlYWRPbmx5KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0K
KyAgICAgKi8KKyAgICByZWFkT25seTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2FjZUVkaXRvci5nZXRSZWFkT25seSgpOworICAgIH0sCisKKyAgICBmb2N1czogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLmZvY3VzKCk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0VsZW1lbnR9CisgICAgICovCisgICAgZGVmYXVs
dEZvY3VzZWRFbGVtZW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5l
bGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSByZWdleAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcworICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkhpZ2hsaWdodERlc2NyaXB0b3J9
CisgICAgICovCisgICAgaGlnaGxpZ2h0UmVnZXg6IGZ1bmN0aW9uKHJlZ2V4LCBjc3NDbGFzcykK
KyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuaGlnaGxpZ2h0UmVnZXggbm90
IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MK
KyAgICAgKi8KKyAgICBoaWdobGlnaHRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIGNzc0NsYXNzKQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRSYW5nZSBub3Qg
aW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5IaWdobGlnaHREZXNjcmlwdG9yfSBoaWdobGlnaHRE
ZXNjcmlwdG9yCisgICAgICovCisgICAgcmVtb3ZlSGlnaGxpZ2h0OiBmdW5jdGlvbihoaWdobGln
aHREZXNjcmlwdG9yKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5yZW1v
dmVIaWdobGlnaHQgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICovCisgICAgcmV2ZWFsTGluZTogZnVu
Y3Rpb24obGluZU51bWJlcikgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2Nyb2xsVG9MaW5l
KGxpbmVOdW1iZXIsIGZhbHNlLCB0cnVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVk
CisgICAgICogQHBhcmFtIHtib29sZWFufSBjb25kaXRpb25hbAorICAgICAqLworICAgIGFkZEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRpc2FibGVkLCBjb25kaXRpb25hbCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0QnJlYWtwb2ludChs
aW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICByZW1vdmVCcmVha3Bv
aW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9y
LmdldFNlc3Npb24oKS5jbGVhckJyZWFrcG9pbnQobGluZU51bWJlcik7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICovCisgICAgc2V0
RXhlY3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGNvbnNv
bGUubG9nKCJhY2VFZGl0b3Iuc2V0RXhlY3V0aW9uTGluZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBy
YW5nZQorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBjb3B5UmFuZ2U6IGZ1
bmN0aW9uKHJhbmdlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5jb3B5
UmFuZ2Ugbm90IGltcGxlbWVudGVkIik7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9LAorCisg
ICAgY2xlYXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLmNsZWFyRXhlY3V0aW9uTGluZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAg
KiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKKyAgICAgKi8KKyAgICBhZGREZWNvcmF0aW9uOiBm
dW5jdGlvbihsaW5lTnVtYmVyLCBlbGVtZW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2co
ImFjZUVkaXRvci5hZGREZWNvcmF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7
RWxlbWVudH0gZWxlbWVudAorICAgICAqLworICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGVsZW1lbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLnJlbW92ZURlY29yYXRpb24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKKyAgICAgKi8K
KyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5sb2coImFjZUVkaXRvci5tYXJrQW5kUmV2ZWFsUmFuZ2Ugbm90IGltcGxlbWVudGVk
Iik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVy
CisgICAgICovCisgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7
CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuaGlnaGxpZ2h0TGluZSBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICB9LAorCisgICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpIHsK
KyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5jbGVhckxpbmVIaWdobGlnaHQgbm90IGlt
cGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5LjxF
bGVtZW50Pn0KKyAgICAgKi8KKyAgICBlbGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0Zv
cjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yfSB0ZXh0RWRpdG9yCisg
ICAgICovCisgICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rpb24odGV4dEVkaXRvcikK
KyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuaW5oZXJpdFNjcm9sbFBvc2l0
aW9ucyBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgYmVnaW5VcGRhdGVzOiBmdW5j
dGlvbigpIHsgfSwKKworICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKCkgeyB9LAorCisgICAgb25S
ZXNpemU6IGZ1bmN0aW9uKCkgeyB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0CisgICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KKyAgICAgKi8KKyAgICBlZGl0UmFu
Z2U6IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFj
ZUVkaXRvci5lZGl0UmFuZ2Ugbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICovCisgICAgc2Nyb2xsVG9M
aW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9y
LnNjcm9sbFRvTGluZShsaW5lTnVtYmVyLCBmYWxzZSwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAgICovCisgICAg
c2VsZWN0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLnNlbGVjdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZT99CisgICAgICovCisgICAgbGFzdFNl
bGVjdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRv
ci5sYXN0U2VsZWN0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRSYW5nZQorICAgICAqLwor
ICAgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24odGV4dFJhbmdlKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5sb2coImFjZUVkaXRvci5zZXRTZWxlY3Rpb24gbm90IGltcGxlbWVudGVkIik7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0CisgICAgICovCisgICAg
c2V0VGV4dDogZnVuY3Rpb24odGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5n
ZXRTZXNzaW9uKCkuc2V0VmFsdWUodGV4dCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICB0ZXh0OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5nZXRWYWx1ZSgpOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQor
ICAgICAqLworICAgIHJhbmdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmxv
ZygiYWNlRWRpdG9yLnJhbmdlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KKyAgICAgKi8KKyAgICBsaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0TGluZShsaW5lTnVtYmVy
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLwor
ICAgIGdldCBsaW5lc0NvdW50KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWNlRWRpdG9yLmdl
dFNlc3Npb24oKS5nZXRMZW5ndGgoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IGxpbmUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJh
bSB7T2JqZWN0P30gdmFsdWUKKyAgICAgKi8KKyAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxp
bmUsIG5hbWUsIHZhbHVlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5z
ZXRBdHRyaWJ1dGUgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAg
KiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gdmFsdWUKKyAgICAgKi8KKyAgICBnZXRBdHRyaWJ1dGU6
IGZ1bmN0aW9uKGxpbmUsIG5hbWUpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLmdldEF0dHJpYnV0ZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQor
ICAgICAqLworICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmVtb3ZlQXR0cmlidXRlIG5vdCBpbXBs
ZW1lbnRlZCIpOworICAgIH0sCisKKyAgICB3YXNTaG93bjogZnVuY3Rpb24oKSB7IH0sCisKKyAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggYWQ2OTg1ZGEzMjZl
YjE3MDUxMmU4MTNkNzQ2OGUwNzVjYTRiZTY0ZS4uYzY5NGI4OTg4MjM5NzhmMGU3ZWFmODYyN2Mw
YThhMjI0NGZkNmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TZXR0aW5ncy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NldHRpbmdzLmpzCkBAIC0yMTAsNiArMjEwLDcgQEAgV2ViSW5zcGVjdG9yLkV4cGVyaW1lbnRz
U2V0dGluZ3MgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jYW52YXNJbnNwZWN0aW9uID0gdGhpcy5f
Y3JlYXRlRXhwZXJpbWVudCgiY2FudmFzSW5zcGVjdGlvbiAiLCAiQ2FudmFzIGluc3BlY3Rpb24i
KTsKICAgICB0aGlzLnNhc3MgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJzYXNzIiwgIlN1cHBv
cnQgZm9yIFNhc3MiKTsKICAgICB0aGlzLmNvZGVtaXJyb3IgPSB0aGlzLl9jcmVhdGVFeHBlcmlt
ZW50KCJjb2RlbWlycm9yIiwgIlVzZSBDb2RlTWlycm9yIGVkaXRvciIpOworICAgIHRoaXMuYWNl
VGV4dEVkaXRvciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImFjZVRleHRFZGl0b3IiLCAiVXNl
IEFjZSBlZGl0b3IiKTsKICAgICB0aGlzLmNzc1JlZ2lvbnMgPSB0aGlzLl9jcmVhdGVFeHBlcmlt
ZW50KCJjc3NSZWdpb25zIiwgIkNTUyBSZWdpb25zIFN1cHBvcnQiKTsKICAgICB0aGlzLnNob3dP
dmVycmlkZXNJbkRyYXdlciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoInNob3dPdmVycmlkZXNJ
bkRyYXdlciIsICJTaG93IE92ZXJyaWRlcyBpbiBkcmF3ZXIiKTsKICAgICB0aGlzLmZpbGVTeXN0
ZW1Qcm9qZWN0ID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgiZmlsZVN5c3RlbVByb2plY3QiLCAi
RmlsZSBzeXN0ZW0gZm9sZGVycyBpbiBTb3VyY2VzIFBhbmVsIik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCBkZDAyOTAyMTVk
NmMyNDI2YWViY2QzMmQ5MTViYTliYjRjMmQ3NTNiLi43Y2E2NmQ0NjhmM2E0NTM3NDYwMWU3YzZl
YWM0NzI1N2I4Zjk4ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTQ2LDYgKzQ2LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lID0gZnVuY3Rpb24oY29udGVudFByb3ZpZGVyKQogICAgIGlmIChXZWJJbnNwZWN0b3Iu
ZXhwZXJpbWVudHNTZXR0aW5ncy5jb2RlbWlycm9yLmlzRW5hYmxlZCgpKSB7CiAgICAgICAgIGxv
YWRTY3JpcHQoIkNvZGVNaXJyb3JUZXh0RWRpdG9yLmpzIik7CiAgICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yKHRoaXMuX3VybCwg
dGV4dEVkaXRvckRlbGVnYXRlKTsKKyAgICB9IGVsc2UgaWYgKFdlYkluc3BlY3Rvci5leHBlcmlt
ZW50c1NldHRpbmdzLmFjZVRleHRFZGl0b3IuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgbG9hZFNj
cmlwdCgiQWNlVGV4dEVkaXRvci5qcyIpOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yID0gbmV3
IFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yKHRoaXMuX3VybCwgdGV4dEVkaXRvckRlbGVnYXRl
KTsKICAgICB9IGVsc2UKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBXZWJJbnNwZWN0
b3IuRGVmYXVsdFRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdhdGUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTlkMWIwMDM5ZjMyMTNkZjVlYjE2MDY0NGMwZTY0YjhhODcwZjE3NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcwpAQCAt
MCwwICsxLDE0NDY4IEBACisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0IChjKSAy
MDEwLCBBamF4Lm9yZyBCLlYuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0
aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4g
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxP
Q0sgKioqKiogKi8KKworKGZ1bmN0aW9uKCkgeworCit2YXIgQUNFX05BTUVTUEFDRSA9ICJhY2Ui
OworCit2YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzOworfSkoKTsK
KworCitpZiAoIUFDRV9OQU1FU1BBQ0UgJiYgdHlwZW9mIHJlcXVpcmVqcyAhPT0gInVuZGVmaW5l
ZCIpCisgICAgcmV0dXJuOworCisKK3ZhciBfZGVmaW5lID0gZnVuY3Rpb24obW9kdWxlLCBkZXBz
LCBwYXlsb2FkKSB7CisgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICdzdHJpbmcnKSB7CisgICAg
ICAgIGlmIChfZGVmaW5lLm9yaWdpbmFsKQorICAgICAgICAgICAgX2RlZmluZS5vcmlnaW5hbC5h
cHBseSh3aW5kb3csIGFyZ3VtZW50cyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29u
c29sZS5lcnJvcignZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc25cJ3QgYSBzdHJp
bmcuJyk7CisgICAgICAgICAgICBjb25zb2xlLnRyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpCisgICAgICAg
IHBheWxvYWQgPSBkZXBzOworCisgICAgaWYgKCFfZGVmaW5lLm1vZHVsZXMpCisgICAgICAgIF9k
ZWZpbmUubW9kdWxlcyA9IHt9OworCisgICAgX2RlZmluZS5tb2R1bGVzW21vZHVsZV0gPSBwYXls
b2FkOworfTsKK3ZhciBfcmVxdWlyZSA9IGZ1bmN0aW9uKHBhcmVudElkLCBtb2R1bGUsIGNhbGxi
YWNrKSB7CisgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb2R1bGUpID09
PSAiW29iamVjdCBBcnJheV0iKSB7CisgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBtb2R1bGUubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgZGVwID0gbG9va3VwKHBhcmVudElkLCBtb2R1bGVbaV0pOworICAgICAgICAgICAg
aWYgKCFkZXAgJiYgX3JlcXVpcmUub3JpZ2luYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIF9y
ZXF1aXJlLm9yaWdpbmFsLmFwcGx5KHdpbmRvdywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHBh
cmFtcy5wdXNoKGRlcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBwYXJhbXMpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgIHZhciBw
YXlsb2FkID0gbG9va3VwKHBhcmVudElkLCBtb2R1bGUpOworICAgICAgICBpZiAoIXBheWxvYWQg
JiYgX3JlcXVpcmUub3JpZ2luYWwpCisgICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUub3JpZ2lu
YWwuYXBwbHkod2luZG93LCBhcmd1bWVudHMpOworCisgICAgICAgIGlmIChjYWxsYmFjaykgewor
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwYXls
b2FkOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9yZXF1aXJlLm9yaWdpbmFsKQor
ICAgICAgICAgICAgcmV0dXJuIF9yZXF1aXJlLm9yaWdpbmFsLmFwcGx5KHdpbmRvdywgYXJndW1l
bnRzKTsKKyAgICB9Cit9OworCit2YXIgbm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50
SWQsIG1vZHVsZU5hbWUpIHsKKyAgICBpZiAobW9kdWxlTmFtZS5pbmRleE9mKCIhIikgIT09IC0x
KSB7CisgICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7CisgICAgICAg
IHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyAiISIgKyBub3Jt
YWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1sxXSk7CisgICAgfQorICAgIGlmIChtb2R1bGVO
YW1lLmNoYXJBdCgwKSA9PSAiLiIpIHsKKyAgICAgICAgdmFyIGJhc2UgPSBwYXJlbnRJZC5zcGxp
dCgiLyIpLnNsaWNlKDAsIC0xKS5qb2luKCIvIik7CisgICAgICAgIG1vZHVsZU5hbWUgPSBiYXNl
ICsgIi8iICsgbW9kdWxlTmFtZTsKKworICAgICAgICB3aGlsZShtb2R1bGVOYW1lLmluZGV4T2Yo
Ii4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgeworICAgICAgICAgICAgdmFy
IHByZXZpb3VzID0gbW9kdWxlTmFtZTsKKyAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBtb2R1bGVO
YW1lLnJlcGxhY2UoL1wvXC5cLy8sICIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCAiIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbW9kdWxlTmFtZTsKK307Cit2YXIgbG9v
a3VwID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKKworICAgIG1vZHVsZU5hbWUg
PSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIG1vZHVsZU5hbWUpOworCisgICAgdmFyIG1vZHVs
ZSA9IF9kZWZpbmUubW9kdWxlc1ttb2R1bGVOYW1lXTsKKyAgICBpZiAoIW1vZHVsZSkgeworICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ2Z1
bmN0aW9uJykgeworICAgICAgICB2YXIgZXhwb3J0cyA9IHt9OworICAgICAgICB2YXIgbW9kID0g
eworICAgICAgICAgICAgaWQ6IG1vZHVsZU5hbWUsCisgICAgICAgICAgICB1cmk6ICcnLAorICAg
ICAgICAgICAgZXhwb3J0czogZXhwb3J0cywKKyAgICAgICAgICAgIHBhY2thZ2VkOiB0cnVlCisg
ICAgICAgIH07CisKKyAgICAgICAgdmFyIHJlcSA9IGZ1bmN0aW9uKG1vZHVsZSwgY2FsbGJhY2sp
IHsKKyAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZShtb2R1bGVOYW1lLCBtb2R1bGUsIGNhbGxi
YWNrKTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBtb2R1bGUocmVx
LCBleHBvcnRzLCBtb2QpOworICAgICAgICBleHBvcnRzID0gcmV0dXJuVmFsdWUgfHwgbW9kLmV4
cG9ydHM7CisgICAgICAgIF9kZWZpbmUubW9kdWxlc1ttb2R1bGVOYW1lXSA9IGV4cG9ydHM7Cisg
ICAgICAgIHJldHVybiBleHBvcnRzOworICAgIH0KKworICAgIHJldHVybiBtb2R1bGU7Cit9Owor
CitmdW5jdGlvbiBleHBvcnRBY2UobnMpIHsKKyAgICB2YXIgcmVxdWlyZSA9IGZ1bmN0aW9uKG1v
ZHVsZSwgY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIF9yZXF1aXJlKCIiLCBtb2R1bGUsIGNh
bGxiYWNrKTsKKyAgICB9OyAgICAKKworICAgIHZhciByb290ID0gZ2xvYmFsOworICAgIGlmIChu
cykgeworICAgICAgICBpZiAoIWdsb2JhbFtuc10pCisgICAgICAgICAgICBnbG9iYWxbbnNdID0g
e307CisgICAgICAgIHJvb3QgPSBnbG9iYWxbbnNdOworICAgIH0KKworICAgIGlmICghcm9vdC5k
ZWZpbmUgfHwgIXJvb3QuZGVmaW5lLnBhY2thZ2VkKSB7CisgICAgICAgIF9kZWZpbmUub3JpZ2lu
YWwgPSByb290LmRlZmluZTsKKyAgICAgICAgcm9vdC5kZWZpbmUgPSBfZGVmaW5lOworICAgICAg
ICByb290LmRlZmluZS5wYWNrYWdlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFyb290LnJl
cXVpcmUgfHwgIXJvb3QucmVxdWlyZS5wYWNrYWdlZCkgeworICAgICAgICBfcmVxdWlyZS5vcmln
aW5hbCA9IHJvb3QucmVxdWlyZTsKKyAgICAgICAgcm9vdC5yZXF1aXJlID0gcmVxdWlyZTsKKyAg
ICAgICAgcm9vdC5yZXF1aXJlLnBhY2thZ2VkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2V4cG9ydEFj
ZShBQ0VfTkFNRVNQQUNFKTsKKworfSkoKTsKKworYWNlLmRlZmluZSgnYWNlL2FjZScsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9maXhvbGRicm93c2VycycsICdh
Y2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9lZGl0b3InLCAnYWNlL2VkaXRfc2Vz
c2lvbicsICdhY2UvdW5kb21hbmFnZXInLCAnYWNlL3ZpcnR1YWxfcmVuZGVyZXInLCAnYWNlL211
bHRpX3NlbGVjdCcsICdhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQnLCAnYWNlL2tleWJvYXJkL2hh
c2hfaGFuZGxlcicsICdhY2UvcGxhY2Vob2xkZXInLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21v
ZGUnLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCityZXF1aXJlKCIuL2xpYi9maXhvbGRicm93c2VycyIpOworCit2YXIgZG9tID0gcmVxdWly
ZSgiLi9saWIvZG9tIik7Cit2YXIgZXZlbnQgPSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOworCit2
YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0b3I7Cit2YXIgRWRpdFNlc3Npb24g
PSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uOwordmFyIFVuZG9NYW5hZ2Vy
ID0gcmVxdWlyZSgiLi91bmRvbWFuYWdlciIpLlVuZG9NYW5hZ2VyOwordmFyIFJlbmRlcmVyID0g
cmVxdWlyZSgiLi92aXJ0dWFsX3JlbmRlcmVyIikuVmlydHVhbFJlbmRlcmVyOwordmFyIE11bHRp
U2VsZWN0ID0gcmVxdWlyZSgiLi9tdWx0aV9zZWxlY3QiKS5NdWx0aVNlbGVjdDsKK3JlcXVpcmUo
Ii4vd29ya2VyL3dvcmtlcl9jbGllbnQiKTsKK3JlcXVpcmUoIi4va2V5Ym9hcmQvaGFzaF9oYW5k
bGVyIik7CityZXF1aXJlKCIuL3BsYWNlaG9sZGVyIik7CityZXF1aXJlKCIuL21vZGUvZm9sZGlu
Zy9mb2xkX21vZGUiKTsKK2V4cG9ydHMuY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKK2V4
cG9ydHMucmVxdWlyZSA9IHJlcXVpcmU7CitleHBvcnRzLmVkaXQgPSBmdW5jdGlvbihlbCkgewor
ICAgIGlmICh0eXBlb2YoZWwpID09ICJzdHJpbmciKSB7CisgICAgICAgIHZhciBfaWQgPSBlbDsK
KyAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoX2lkKTsKKyAgICAgICAg
aWYgKCFlbCkKKyAgICAgICAgICAgIHRocm93ICJhY2UuZWRpdCBjYW4ndCBmaW5kIGRpdiAjIiAr
IF9pZDsKKyAgICB9CisKKyAgICBpZiAoZWwuZW52ICYmIGVsLmVudi5lZGl0b3IgaW5zdGFuY2Vv
ZiBFZGl0b3IpCisgICAgICAgIHJldHVybiBlbC5lbnYuZWRpdG9yOworCisgICAgdmFyIGRvYyA9
IGV4cG9ydHMuY3JlYXRlRWRpdFNlc3Npb24oZG9tLmdldElubmVyVGV4dChlbCkpOworICAgIGVs
LmlubmVySFRNTCA9ICcnOworCisgICAgdmFyIGVkaXRvciA9IG5ldyBFZGl0b3IobmV3IFJlbmRl
cmVyKGVsKSk7CisgICAgbmV3IE11bHRpU2VsZWN0KGVkaXRvcik7CisgICAgZWRpdG9yLnNldFNl
c3Npb24oZG9jKTsKKworICAgIHZhciBlbnYgPSB7CisgICAgICAgIGRvY3VtZW50OiBkb2MsCisg
ICAgICAgIGVkaXRvcjogZWRpdG9yLAorICAgICAgICBvblJlc2l6ZTogZWRpdG9yLnJlc2l6ZS5i
aW5kKGVkaXRvcikKKyAgICB9OworICAgIGV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywgInJlc2l6
ZSIsIGVudi5vblJlc2l6ZSk7CisgICAgZWwuZW52ID0gZWRpdG9yLmVudiA9IGVudjsKKyAgICBy
ZXR1cm4gZWRpdG9yOworfTsKK2V4cG9ydHMuY3JlYXRlRWRpdFNlc3Npb24gPSBmdW5jdGlvbih0
ZXh0LCBtb2RlKSB7CisgICAgdmFyIGRvYyA9IG5ldyBFZGl0U2Vzc2lvbih0ZXh0LCBkb2MpOwor
ICAgIGRvYy5zZXRVbmRvTWFuYWdlcihuZXcgVW5kb01hbmFnZXIoKSk7CisgICAgcmV0dXJuIGRv
YzsKK30KK2V4cG9ydHMuRWRpdFNlc3Npb24gPSBFZGl0U2Vzc2lvbjsKK2V4cG9ydHMuVW5kb01h
bmFnZXIgPSBVbmRvTWFuYWdlcjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGliL2ZpeG9sZGJy
b3dzZXJzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL3JlZ2V4
cCcsICdhY2UvbGliL2VzNS1zaGltJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworCisKK3JlcXVpcmUoIi4vcmVnZXhwIik7CityZXF1aXJlKCIuL2VzNS1zaGltIik7CisK
K30pOworIAorYWNlLmRlZmluZSgnYWNlL2xpYi9yZWdleHAnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisg
ICAgdmFyIHJlYWwgPSB7CisgICAgICAgICAgICBleGVjOiBSZWdFeHAucHJvdG90eXBlLmV4ZWMs
CisgICAgICAgICAgICB0ZXN0OiBSZWdFeHAucHJvdG90eXBlLnRlc3QsCisgICAgICAgICAgICBt
YXRjaDogU3RyaW5nLnByb3RvdHlwZS5tYXRjaCwKKyAgICAgICAgICAgIHJlcGxhY2U6IFN0cmlu
Zy5wcm90b3R5cGUucmVwbGFjZSwKKyAgICAgICAgICAgIHNwbGl0OiBTdHJpbmcucHJvdG90eXBl
LnNwbGl0CisgICAgICAgIH0sCisgICAgICAgIGNvbXBsaWFudEV4ZWNOcGNnID0gcmVhbC5leGVj
LmNhbGwoLygpPz8vLCAiIilbMV0gPT09IHVuZGVmaW5lZCwgLy8gY2hlY2sgYGV4ZWNgIGhhbmRs
aW5nIG9mIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwcworICAgICAgICBjb21wbGlh
bnRMYXN0SW5kZXhJbmNyZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgeCA9
IC9eL2c7CisgICAgICAgICAgICByZWFsLnRlc3QuY2FsbCh4LCAiIik7CisgICAgICAgICAgICBy
ZXR1cm4gIXgubGFzdEluZGV4OworICAgICAgICB9KCk7CisKKyAgICBpZiAoY29tcGxpYW50TGFz
dEluZGV4SW5jcmVtZW50ICYmIGNvbXBsaWFudEV4ZWNOcGNnKQorICAgICAgICByZXR1cm47Cisg
ICAgUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHN0cikgeworICAgICAgICB2YXIg
bWF0Y2ggPSByZWFsLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwKKyAgICAgICAgICAgIG5h
bWUsIHIyOworICAgICAgICBpZiAoIHR5cGVvZihzdHIpID09ICdzdHJpbmcnICYmIG1hdGNoKSB7
CisgICAgICAgICAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnICYmIG1hdGNoLmxlbmd0aCA+IDEg
JiYgaW5kZXhPZihtYXRjaCwgIiIpID4gLTEpIHsKKyAgICAgICAgICAgICAgICByMiA9IFJlZ0V4
cCh0aGlzLnNvdXJjZSwgcmVhbC5yZXBsYWNlLmNhbGwoZ2V0TmF0aXZlRmxhZ3ModGhpcyksICJn
IiwgIiIpKTsKKyAgICAgICAgICAgICAgICByZWFsLnJlcGxhY2UuY2FsbChzdHIuc2xpY2UobWF0
Y2guaW5kZXgpLCByMiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFtpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRo
aXMuX3hyZWdleHAgJiYgdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXMpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lc1tpIC0gMV07CisgICAg
ICAgICAgICAgICAgICAgIGlmIChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtu
YW1lXSA9IG1hdGNoW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIHRoaXMuZ2xvYmFsICYm
ICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2guaW5kZXgpKQorICAg
ICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1hdGNoOworICAgIH07CisgICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQpIHsK
KyAgICAgICAgUmVnRXhwLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKHN0cikgeworICAgICAg
ICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTsKKyAgICAgICAgICAg
IGlmIChtYXRjaCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxh
c3RJbmRleCA+IG1hdGNoLmluZGV4KSkKKyAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0t
OworICAgICAgICAgICAgcmV0dXJuICEhbWF0Y2g7CisgICAgICAgIH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZ2V0TmF0aXZlRmxhZ3MgKHJlZ2V4KSB7CisgICAgICAgIHJldHVybiAocmVnZXgu
Z2xvYmFsICAgICA/ICJnIiA6ICIiKSArCisgICAgICAgICAgICAgICAocmVnZXguaWdub3JlQ2Fz
ZSA/ICJpIiA6ICIiKSArCisgICAgICAgICAgICAgICAocmVnZXgubXVsdGlsaW5lICA/ICJtIiA6
ICIiKSArCisgICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/ICJ4IiA6ICIiKSArIC8v
IFByb3Bvc2VkIGZvciBFUzQ7IGluY2x1ZGVkIGluIEFTMworICAgICAgICAgICAgICAgKHJlZ2V4
LnN0aWNreSAgICAgPyAieSIgOiAiIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5kZXhPZiAo
YXJyYXksIGl0ZW0sIGZyb20pIHsKKyAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9m
KSAvLyBVc2UgdGhlIG5hdGl2ZSBhcnJheSBtZXRob2QgaWYgYXZhaWxhYmxlCisgICAgICAgICAg
ICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IGZyb20gfHwgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJy
YXlbaV0gPT09IGl0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZXM1
LXNoaW0nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCitmdW5jdGlvbiBFbXB0eSgpIHt9CisKK2lmICghRnVu
Y3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKKyAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1
bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKKyAgICAgICAgdmFyIHRhcmdldCA9
IHRoaXM7CisgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxl
ZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGZvciBub3JtYWwgY2FsbAorICAgICAg
ICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGlmICh0aGlzIGluc3Rh
bmNlb2YgYm91bmQpIHsKKworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBw
bHkoCisgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIGFyZ3Mu
Y29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQuYXBwbHkoCisgICAgICAgICAgICAgICAgICAgIHRoYXQsCisgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAg
ICAgICApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgaWYodGFyZ2V0
LnByb3RvdHlwZSkgeworICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3Rv
dHlwZTsKKyAgICAgICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpOworICAgICAg
ICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Ym91bmQ7CisgICAgfTsKK30KK3ZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7Cit2
YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKK3ZhciBwcm90b3R5cGVPZk9i
amVjdCA9IE9iamVjdC5wcm90b3R5cGU7Cit2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNs
aWNlOwordmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmlu
Zyk7Cit2YXIgb3ducyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0
eSk7Cit2YXIgZGVmaW5lR2V0dGVyOwordmFyIGRlZmluZVNldHRlcjsKK3ZhciBsb29rdXBHZXR0
ZXI7Cit2YXIgbG9va3VwU2V0dGVyOwordmFyIHN1cHBvcnRzQWNjZXNzb3JzOworaWYgKChzdXBw
b3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9f
IikpKSB7CisgICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9f
ZGVmaW5lR2V0dGVyX18pOworICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVP
Zk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKKyAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQo
cHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CisgICAgbG9va3VwU2V0dGVyID0g
Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOworfQoraWYgKFsx
LDJdLnNwbGljZSgwKS5sZW5ndGggIT0gMikgeworICAgIGlmKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0
IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKKyAgICAgICAgZnVuY3Rpb24g
bWFrZUFycmF5KGwpIHsKKyAgICAgICAgICAgIHZhciBhID0gbmV3IEFycmF5KGwrMik7CisgICAg
ICAgICAgICBhWzBdID0gYVsxXSA9IDA7CisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgYXJyYXkgPSBbXSwgbGVuZ3RoQmVmb3JlOworICAgICAgICAKKyAgICAg
ICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjApKTsKKyAgICAgICAgYXJy
YXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjYpKTsKKworICAgICAgICBsZW5ndGhC
ZWZvcmUgPSBhcnJheS5sZW5ndGg7IC8vNDYKKyAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJY
WFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CisKKyAgICAgICAgbGVuZ3RoQmVmb3JlICsgMSA9PSBh
cnJheS5sZW5ndGgKKworICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVt
ZW50YXRpb24gd2l0aG91dCBidWdzCisgICAgICAgIH0KKyAgICB9KCkpIHsvL0lFIDYvNworICAg
ICAgICB2YXIgYXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKKyAgICAgICAg
QXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgewor
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFtdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJy
YXlfc3BsaWNlLmFwcGx5KHRoaXMsIFsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IHZv
aWQgMCA/IDAgOiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZv
aWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50CisgICAgICAgICAgICAg
ICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSkKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICB9IGVsc2Ugey8vSUU4CisgICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxp
Y2UgPSBmdW5jdGlvbihwb3MsIHJlbW92ZUNvdW50KXsKKyAgICAgICAgICAgIHZhciBsZW5ndGgg
PSB0aGlzLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHBvcyA+IGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7CisgICAgICAgICAgICAgICAg
cG9zID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkgeworICAgICAgICAgICAg
ICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpCisgICAgICAgICAgICAg
ICAgcmVtb3ZlQ291bnQgPSBsZW5ndGggLSBwb3M7CisKKyAgICAgICAgICAgIHZhciByZW1vdmVk
ID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7CisgICAgICAgICAgICB2YXIgaW5z
ZXJ0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgICAgICAgICAgdmFyIGFkZCA9IGlu
c2VydC5sZW5ndGg7ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNv
dW50LCBsZW5ndGggLSBwb3MpOworICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9z
ICsgcmVtb3ZlOworICAgICAgICAgICAgICAgIHZhciB0YWlsTmV3UG9zID0gdGFpbE9sZFBvcyAr
IGFkZCAtIHJlbW92ZTsKKyAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0g
dGFpbE9sZFBvczsKKyAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5n
dGggLSByZW1vdmU7CisKKyAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQ
b3MpIHsgLy8gY2FzZSBBCisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGFpbENvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1Bv
cytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBC
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHRhaWxDb3VudDsgaS0tOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytp
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLy8gZWxzZSwgYWRk
ID09IHJlbW92ZSAobm90aGluZyB0byBkbykKKworICAgICAgICAgICAgICAgIGlmIChhZGQgJiYg
cG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmxl
bmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlOyAvLyB0cnVuY2F0ZSBhcnJheQorICAgICAgICAgICAg
ICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVt
b3ZlICsgYWRkOyAvLyByZXNlcnZlcyBzcGFjZQorICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgYWRkOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ld
ID0gaW5zZXJ0W2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CisgICAgICAgIH07Cisg
ICAgfQorfQoraWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0
aW9uIGlzQXJyYXkob2JqKSB7CisgICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29i
amVjdCBBcnJheV0iOworICAgIH07Cit9Cit2YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoImEiKSwK
KyAgICBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9ICJhIiB8fCAhKDAgaW4gYm94ZWRT
dHJpbmcpOworCitpZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CisgICAgQXJyYXkucHJv
dG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgeworICAg
ICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3Bs
aXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAg
ICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAg
ICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCisgICAgICAgICAgICBpID0gLTEsCisgICAg
ICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKyAgICAgICAgaWYgKF90b1N0cmlu
ZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAo
KytpIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAg
ICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7CisgICAg
QXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHsKKyAg
ICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9IHNw
bGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAg
ICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgcmVzdWx0
ID0gQXJyYXkobGVuZ3RoKSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworICAg
ICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQorICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1
bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewor
ICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlz
cCAqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAg
ICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmlu
Z10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAg
ICAgICAgICAgcmVzdWx0ID0gW10sCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIHRo
aXNwID0gYXJndW1lbnRzWzFdOworICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmpl
Y3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAi
IGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOworICAgICAgICAgICAgICAgIGlmIChmdW4uY2Fs
bCh0aGlzcCwgdmFsdWUsIGksIG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlw
ZS5ldmVyeSkgeworICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1
biAvKiwgdGhpc3AgKi8pIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAor
ICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29i
amVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAg
ICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAw
LAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisgICAgICAgIGlmIChfdG9TdHJp
bmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChp
IGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7
CisgICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3Ag
Ki8pIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAg
c2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmdd
IiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9i
amVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAg
ICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAi
W29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1
biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYg
ZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZSkgeworICAgIEFycmF5
LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsK
KyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9
IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/Cisg
ICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwK
KyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworICAgICAgICBpZiAoX3Rv
U3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0
aWFsIHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZh
ciByZXN1bHQ7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGZbaSsrXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJh
eSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
K30KK2lmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7CisgICAgQXJyYXkucHJvdG90
eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8p
IHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2Vs
ZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/
CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVj
dCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworICAgICAgICBpZiAo
X3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRo
IG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByZXN1bHQsIGkg
PSBsZW5ndGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBh
cnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGlmIChpIGluIHRoaXMpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2
b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoaS0tKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9Citp
ZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IChbMCwgMV0uaW5kZXhPZigxLCAyKSAhPSAt
MSkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2Yoc291
Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7CisgICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcg
JiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAg
ICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCisgICAg
ICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAgICAgICBpZiAoIWxlbmd0
aCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGkg
PSAwOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGkg
PSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKKyAgICAgICAgfQorICAgICAgICBpID0gaSA+PSAw
ID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOworICAgICAgICBmb3IgKDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdo
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUubGFz
dEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CisgICAgQXJy
YXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8q
LCBmcm9tSW5kZXggKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9T
dHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMu
c3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAg
IGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVuZ3RoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGkgPSBsZW5ndGgg
LSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGkg
PSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKKyAgICAgICAgZm9yICg7
IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0g
c2VsZltpXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZ2V0UHJv
dG90eXBlT2YpIHsKKyAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90
b3R5cGVPZihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAor
ICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID8KKyAgICAgICAgICAgIG9iamVjdC5jb25z
dHJ1Y3Rvci5wcm90b3R5cGUgOgorICAgICAgICAgICAgcHJvdG90eXBlT2ZPYmplY3QKKyAgICAg
ICAgKTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSB7
CisgICAgdmFyIEVSUl9OT05fT0JKRUNUID0gIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IgY2FsbGVkIG9uIGEgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1vYmplY3Q6
ICI7CisgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgICAgIGlmICgodHlw
ZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8
IG9iamVjdCA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05P
Tl9PQkpFQ1QgKyBvYmplY3QpOworICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwg
c2V0dGVyOworICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmln
dXJhYmxlOiB0cnVlIH07CisgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykgeworICAgICAg
ICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAgICAgICAgICBvYmpl
Y3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CisKKyAgICAgICAgICAgIHZhciBnZXR0
ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB2YXIgc2V0
dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOworICAgICAgICAgICAgb2JqZWN0
Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKworICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0
ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRl
cjsKKyAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAg
ICAgcmV0dXJuIGRlc2NyaXB0b3I7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXMpIHsKKyAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhv
YmplY3QpOworICAgIH07Cit9CitpZiAoIU9iamVjdC5jcmVhdGUpIHsKKyAgICB2YXIgY3JlYXRl
RW1wdHk7CisgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7Cisg
ICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsg
Il9fcHJvdG9fXyI6IG51bGwgfTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBj
cmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9Owor
ICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlbXB0eSkKKyAgICAgICAgICAgICAgICBlbXB0eVtp
XSA9IG51bGw7CisgICAgICAgICAgICBlbXB0eS5jb25zdHJ1Y3RvciA9CisgICAgICAgICAgICBl
bXB0eS5oYXNPd25Qcm9wZXJ0eSA9CisgICAgICAgICAgICBlbXB0eS5wcm9wZXJ0eUlzRW51bWVy
YWJsZSA9CisgICAgICAgICAgICBlbXB0eS5pc1Byb3RvdHlwZU9mID0KKyAgICAgICAgICAgIGVt
cHR5LnRvTG9jYWxlU3RyaW5nID0KKyAgICAgICAgICAgIGVtcHR5LnRvU3RyaW5nID0KKyAgICAg
ICAgICAgIGVtcHR5LnZhbHVlT2YgPQorICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0gbnVs
bDsKKyAgICAgICAgICAgIHJldHVybiBlbXB0eTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE9i
amVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7Cisg
ICAgICAgIHZhciBvYmplY3Q7CisgICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5
cGUpKyJdICE9ICdvYmplY3QnIik7CisgICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgp
IHt9OworICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgICAg
ICBvYmplY3QgPSBuZXcgVHlwZSgpOworICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHBy
b3RvdHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKQor
ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsK
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCitmdW5jdGlvbiBkb2VzRGVmaW5l
UHJvcGVydHlXb3JrKG9iamVjdCkgeworICAgIHRyeSB7CisgICAgICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsKKyAgICAgICAgcmV0dXJuICJzZW50aW5l
bCIgaW4gb2JqZWN0OworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgIH0KK30KK2lmIChP
YmplY3QuZGVmaW5lUHJvcGVydHkpIHsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2Jq
ZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7CisgICAgdmFyIGRlZmluZVByb3BlcnR5
V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAorICAgICAgICBk
b2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAg
ICBpZiAoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jr
c09uRG9tKSB7CisgICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRl
ZmluZVByb3BlcnR5OworICAgIH0KK30KKworaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwg
ZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgeworICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQ
VE9SID0gIlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOworICAgIHZh
ciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBv
biBub24tb2JqZWN0OiAiCisgICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJn
ZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKKworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwg
cHJvcGVydHksIGRlc2NyaXB0b3IpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJv
YmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxs
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQg
KyBvYmplY3QpOworICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYm
IHR5cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwp
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBU
T1IgKyBkZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsK
KyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5
RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOworICAg
ICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKKworICAgICAgICAgICAg
aWYgKHN1cHBvcnRzQWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9i
amVjdCwgcHJvcGVydHkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJv
dG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90
b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CisgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtw
cm9wZXJ0eV07CisgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3Iu
dmFsdWU7CisgICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRl
c2NyaXB0b3IudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXN1cHBvcnRzQWNjZXNzb3JzKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKKyAgICAgICAgICAgIGlmIChv
d25zKGRlc2NyaXB0b3IsICJnZXQiKSkKKyAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2Jq
ZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpOworICAgICAgICAgICAgaWYgKG93bnMoZGVz
Y3JpcHRvciwgInNldCIpKQorICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHBy
b3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH07Cit9CitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwg
cHJvcGVydGllcykgeworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7
CisgICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpCisgICAgICAgICAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNb
cHJvcGVydHldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9
CitpZiAoIU9iamVjdC5zZWFsKSB7CisgICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9i
amVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9CitpZiAoIU9iamVjdC5m
cmVlemUpIHsKKyAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewor
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9Cit0cnkgeworICAgIE9iamVjdC5mcmVl
emUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgT2JqZWN0LmZy
ZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBm
dW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9
PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3Qp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE9iamVjdC5mcmVlemUpOworfQor
aWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsKKyAgICBPYmplY3QucHJldmVudEV4dGVu
c2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICB9OworfQoraWYgKCFPYmplY3QuaXNTZWFsZWQpIHsKKyAgICBPYmpl
Y3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07Cit9CitpZiAoIU9iamVjdC5pc0Zyb3plbikgeworICAgIE9iamVjdC5p
c0Zyb3plbiA9IGZ1bmN0aW9uIGlzRnJvemVuKG9iamVjdCkgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgeworICAgIE9iamVjdC5p
c0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CisgICAgICAgIGlm
IChPYmplY3Qob2JqZWN0KSA9PT0gb2JqZWN0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisgICAgICAgIHZhciBuYW1lID0g
Jyc7CisgICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKKyAgICAgICAgICAgIG5h
bWUgKz0gJz8nOworICAgICAgICB9CisgICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7CisgICAg
ICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKKyAgICAgICAgZGVsZXRl
IG9iamVjdFtuYW1lXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH07Cit9Citp
ZiAoIU9iamVjdC5rZXlzKSB7CisgICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKKyAgICAg
ICAgZG9udEVudW1zID0gWworICAgICAgICAgICAgInRvU3RyaW5nIiwKKyAgICAgICAgICAgICJ0
b0xvY2FsZVN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVPZiIsCisgICAgICAgICAgICAiaGFz
T3duUHJvcGVydHkiLAorICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAorICAgICAgICAgICAg
InByb3BlcnR5SXNFbnVtZXJhYmxlIiwKKyAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKKyAgICAg
ICAgXSwKKyAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKKworICAg
IGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKKyAgICAgICAgaGFzRG9udEVu
dW1CdWcgPSBmYWxzZTsKKyAgICB9CisKKyAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMo
b2JqZWN0KSB7CisKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0g
Im9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fAorICAgICAgICAgICAg
b2JqZWN0ID09PSBudWxsCisgICAgICAgICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGtleXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3Qp
IHsKKyAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICBrZXlzLnB1c2gobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaGFzRG9udEVudW1CdWcpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRv
bnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9udEVu
dW0gPSBkb250RW51bXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250
RW51bSkpIHsKKyAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGtl
eXM7CisgICAgfTsKKworfQoraWYgKCFEYXRlLm5vdykgeworICAgIERhdGUubm93ID0gZnVuY3Rp
b24gbm93KCkgeworICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgICAgfTsK
K30KK2lmKCIwIi5zcGxpdCh2b2lkIDAsIDApLmxlbmd0aCkgeworICAgIHZhciBzdHJpbmdfc3Bs
aXQgPSBTdHJpbmcucHJvdG90eXBlLnNwbGl0OworICAgIFN0cmluZy5wcm90b3R5cGUuc3BsaXQg
PSBmdW5jdGlvbihzZXBhcmF0b3IsIGxpbWl0KSB7CisgICAgICAgIGlmKHNlcGFyYXRvciA9PT0g
dm9pZCAwICYmIGxpbWl0ID09PSAwKXJldHVybiBbXTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ19z
cGxpdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0KK30KK2lmKCIiLnN1YnN0ciAmJiAi
MGIiLnN1YnN0cigtMSkgIT09ICJiIikgeworICAgIHZhciBzdHJpbmdfc3Vic3RyID0gU3RyaW5n
LnByb3RvdHlwZS5zdWJzdHI7CisgICAgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgPSBmdW5jdGlv
bihzdGFydCwgbGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBzdHJpbmdfc3Vic3RyLmNhbGwoCisg
ICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgc3RhcnQgPCAwID8gKHN0YXJ0ID0gdGhpcy5s
ZW5ndGggKyBzdGFydCkgPCAwID8gMCA6IHN0YXJ0IDogc3RhcnQsCisgICAgICAgICAgICBsZW5n
dGgKKyAgICAgICAgKTsKKyAgICB9Cit9Cit2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERc
eDIwXHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKworICAgICJcdTIw
MDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBc
dTIwMjgiICsKKyAgICAiXHUyMDI5XHVGRUZGIjsKK2lmICghU3RyaW5nLnByb3RvdHlwZS50cmlt
IHx8IHdzLnRyaW0oKSkgeworICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CisgICAgdmFyIHRyaW1C
ZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCisgICAgICAgIHRy
aW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKKyAgICBTdHJpbmcucHJv
dG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltKCkgeworICAgICAgICBpZiAodGhpcyA9PT0gdW5k
ZWZpbmVkIHx8IHRoaXMgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoImNhbid0IGNvbnZlcnQgIit0aGlzKyIgdG8gb2JqZWN0Iik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIFN0cmluZyh0aGlzKQorICAgICAgICAgICAgLnJlcGxhY2UodHJpbUJlZ2luUmVn
ZXhwLCAiIikKKyAgICAgICAgICAgIC5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKKyAgICB9
OworfQorCitmdW5jdGlvbiB0b0ludGVnZXIobikgeworICAgIG4gPSArbjsKKyAgICBpZiAobiAh
PT0gbikgeyAvLyBpc05hTgorICAgICAgICBuID0gMDsKKyAgICB9IGVsc2UgaWYgKG4gIT09IDAg
JiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CisgICAgICAgIG4gPSAobiA+IDAgfHwg
LTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7CisgICAgfQorICAgIHJldHVybiBuOworfQor
CitmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZhciB0eXBlID0gdHlwZW9mIGlu
cHV0OworICAgIHJldHVybiAoCisgICAgICAgIGlucHV0ID09PSBudWxsIHx8CisgICAgICAgIHR5
cGUgPT09ICJ1bmRlZmluZWQiIHx8CisgICAgICAgIHR5cGUgPT09ICJib29sZWFuIiB8fAorICAg
ICAgICB0eXBlID09PSAibnVtYmVyIiB8fAorICAgICAgICB0eXBlID09PSAic3RyaW5nIgorICAg
ICk7Cit9CisKK2Z1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7CisgICAgdmFyIHZhbCwgdmFs
dWVPZiwgdG9TdHJpbmc7CisgICAgaWYgKGlzUHJpbWl0aXZlKGlucHV0KSkgeworICAgICAgICBy
ZXR1cm4gaW5wdXQ7CisgICAgfQorICAgIHZhbHVlT2YgPSBpbnB1dC52YWx1ZU9mOworICAgIGlm
ICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICB2YWwgPSB2YWx1ZU9m
LmNhbGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0b1N0cmluZyA9IGlucHV0LnRv
U3RyaW5nOworICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7CisgICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2
YWwpKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAgICB9CisgICAgfQorICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoKTsKK30KK3ZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7Cisg
ICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmlu
ZWQKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK28rIiB0byBv
YmplY3QiKTsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdChvKTsKK307CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbGliL2RvbScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFhIVE1MX05TID0g
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOworCitleHBvcnRzLmNyZWF0ZUVsZW1lbnQg
PSBmdW5jdGlvbih0YWcsIG5zKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRO
UyA/CisgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucyB8fCBYSFRNTF9OUywg
dGFnKSA6CisgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKK307CisKK2V4
cG9ydHMuc2V0VGV4dCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKKyAgICBpZiAoZWxlbS5pbm5l
clRleHQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBlbGVtLmlubmVyVGV4dCA9IHRleHQ7Cisg
ICAgfQorICAgIGlmIChlbGVtLnRleHRDb250ZW50ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ZWxlbS50ZXh0Q29udGVudCA9IHRleHQ7CisgICAgfQorfTsKKworZXhwb3J0cy5oYXNDc3NDbGFz
cyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7CisgICAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUu
c3BsaXQoL1xzKy9nKTsKKyAgICByZXR1cm4gY2xhc3Nlcy5pbmRleE9mKG5hbWUpICE9PSAtMTsK
K307CitleHBvcnRzLmFkZENzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHsKKyAgICBpZiAo
IWV4cG9ydHMuaGFzQ3NzQ2xhc3MoZWwsIG5hbWUpKSB7CisgICAgICAgIGVsLmNsYXNzTmFtZSAr
PSAiICIgKyBuYW1lOworICAgIH0KK307CitleHBvcnRzLnJlbW92ZUNzc0NsYXNzID0gZnVuY3Rp
b24oZWwsIG5hbWUpIHsKKyAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXHMr
L2cpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHZhciBpbmRleCA9IGNsYXNzZXMuaW5k
ZXhPZihuYW1lKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRleCwgMSk7CisgICAgfQor
ICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbigiICIpOworfTsKKworZXhwb3J0cy50b2dn
bGVDc3NDbGFzcyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7CisgICAgdmFyIGNsYXNzZXMgPSBlbC5j
bGFzc05hbWUuc3BsaXQoL1xzKy9nKSwgYWRkID0gdHJ1ZTsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICB2YXIgaW5kZXggPSBjbGFzc2VzLmluZGV4T2YobmFtZSk7CisgICAgICAgIGlmIChp
bmRleCA9PSAtMSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYWRk
ID0gZmFsc2U7CisgICAgICAgIGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICB9CisgICAg
aWYoYWRkKQorICAgICAgICBjbGFzc2VzLnB1c2gobmFtZSk7CisKKyAgICBlbC5jbGFzc05hbWUg
PSBjbGFzc2VzLmpvaW4oIiAiKTsKKyAgICByZXR1cm4gYWRkOworfTsKK2V4cG9ydHMuc2V0Q3Nz
Q2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbGFzc05hbWUsIGluY2x1ZGUpIHsKKyAgICBpZiAoaW5j
bHVkZSkgeworICAgICAgICBleHBvcnRzLmFkZENzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXhwb3J0cy5yZW1vdmVDc3NDbGFzcyhub2RlLCBjbGFzc05h
bWUpOworICAgIH0KK307CisKK2V4cG9ydHMuaGFzQ3NzU3RyaW5nID0gZnVuY3Rpb24oaWQsIGRv
YykgeworICAgIHZhciBpbmRleCA9IDAsIHNoZWV0czsKKyAgICBkb2MgPSBkb2MgfHwgZG9jdW1l
bnQ7CisKKyAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQgJiYgKHNoZWV0cyA9IGRvYy5zdHls
ZVNoZWV0cykpIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgc2hlZXRzLmxlbmd0aCkKKyAgICAg
ICAgICAgIGlmIChzaGVldHNbaW5kZXgrK10ub3duaW5nRWxlbWVudC5pZCA9PT0gaWQpIHJldHVy
biB0cnVlOworICAgIH0gZWxzZSBpZiAoKHNoZWV0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgic3R5bGUiKSkpIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgc2hlZXRzLmxlbmd0aCkKKyAg
ICAgICAgICAgIGlmIChzaGVldHNbaW5kZXgrK10uaWQgPT09IGlkKSByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9OworCitleHBvcnRzLmltcG9ydENzc1N0cmluZyA9
IGZ1bmN0aW9uIGltcG9ydENzc1N0cmluZyhjc3NUZXh0LCBpZCwgZG9jKSB7CisgICAgZG9jID0g
ZG9jIHx8IGRvY3VtZW50OworICAgIGlmIChpZCAmJiBleHBvcnRzLmhhc0Nzc1N0cmluZyhpZCwg
ZG9jKSkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCisgICAgdmFyIHN0eWxlOworICAgIAor
ICAgIGlmIChkb2MuY3JlYXRlU3R5bGVTaGVldCkgeworICAgICAgICBzdHlsZSA9IGRvYy5jcmVh
dGVTdHlsZVNoZWV0KCk7CisgICAgICAgIHN0eWxlLmNzc1RleHQgPSBjc3NUZXh0OworICAgICAg
ICBpZiAoaWQpCisgICAgICAgICAgICBzdHlsZS5vd25pbmdFbGVtZW50LmlkID0gaWQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudE5TCisgICAgICAgICAg
ICA/IGRvYy5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTlMsICJzdHlsZSIpCisgICAgICAgICAgICA6
IGRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOworCisgICAgICAgIHN0eWxlLmFwcGVuZENoaWxk
KGRvYy5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7CisgICAgICAgIGlmIChpZCkKKyAgICAgICAg
ICAgIHN0eWxlLmlkID0gaWQ7CisKKyAgICAgICAgdmFyIGhlYWQgPSBkb2MuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImhlYWQiKVswXSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50OworICAgICAgICBoZWFk
LmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICB9Cit9OworCitleHBvcnRzLmltcG9ydENzc1N0eWxz
aGVldCA9IGZ1bmN0aW9uKHVyaSwgZG9jKSB7CisgICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0
KSB7CisgICAgICAgIGRvYy5jcmVhdGVTdHlsZVNoZWV0KHVyaSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdmFyIGxpbmsgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsKKyAgICAgICAg
bGluay5yZWwgPSAnc3R5bGVzaGVldCc7CisgICAgICAgIGxpbmsuaHJlZiA9IHVyaTsKKworICAg
ICAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdIHx8IGRv
Yy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7CisgICAg
fQorfTsKKworZXhwb3J0cy5nZXRJbm5lcldpZHRoID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAg
IHJldHVybiAoCisgICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50
LCAicGFkZGluZ0xlZnQiKSwgMTApICsKKyAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5jb21wdXRl
ZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nUmlnaHQiKSwgMTApICsgCisgICAgICAgIGVsZW1lbnQu
Y2xpZW50V2lkdGgKKyAgICApOworfTsKKworZXhwb3J0cy5nZXRJbm5lckhlaWdodCA9IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gKAorICAgICAgICBwYXJzZUludChleHBvcnRzLmNv
bXB1dGVkU3R5bGUoZWxlbWVudCwgInBhZGRpbmdUb3AiKSwgMTApICsKKyAgICAgICAgcGFyc2VJ
bnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nQm90dG9tIiksIDEwKSAr
CisgICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0CisgICAgKTsKK307CisKK2lmICh3aW5kb3cu
cGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCkgeworICAgIGV4cG9ydHMuZ2V0UGFnZVNjcm9sbFRv
cCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0OworICAg
IH07CisKKyAgICBleHBvcnRzLmdldFBhZ2VTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQ7CisgICAgfTsKK30KK2Vsc2UgeworICAgIGV4
cG9ydHMuZ2V0UGFnZVNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZG9j
dW1lbnQuYm9keS5zY3JvbGxUb3A7CisgICAgfTsKKworICAgIGV4cG9ydHMuZ2V0UGFnZVNjcm9s
bExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xs
TGVmdDsKKyAgICB9OworfQorCitpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpCisgICAgZXhw
b3J0cy5jb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKKyAgICAgICAg
aWYgKHN0eWxlKQorICAgICAgICAgICAgcmV0dXJuICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShl
bGVtZW50LCAiIikgfHwge30pW3N0eWxlXSB8fCAiIjsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKSB8fCB7fTsKKyAgICB9OworZWxzZQorICAgIGV4
cG9ydHMuY29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CisgICAgICAg
IGlmIChzdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmN1cnJlbnRTdHlsZVtzdHls
ZV07CisgICAgICAgIHJldHVybiBlbGVtZW50LmN1cnJlbnRTdHlsZTsKKyAgICB9OworCitleHBv
cnRzLnNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24oZG9jdW1lbnQpIHsKKyAgICB2YXIgaW5uZXIg
PSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoImFjZV9pbm5lciIpOworICAgIGlubmVyLnN0eWxlLndp
ZHRoID0gIjEwMCUiOworICAgIGlubmVyLnN0eWxlLm1pbldpZHRoID0gIjBweCI7CisgICAgaW5u
ZXIuc3R5bGUuaGVpZ2h0ID0gIjIwMHB4IjsKKyAgICBpbm5lci5zdHlsZS5kaXNwbGF5ID0gImJs
b2NrIjsKKworICAgIHZhciBvdXRlciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudCgiYWNlX291dGVy
Iik7CisgICAgdmFyIHN0eWxlID0gb3V0ZXIuc3R5bGU7CisKKyAgICBzdHlsZS5wb3NpdGlvbiA9
ICJhYnNvbHV0ZSI7CisgICAgc3R5bGUubGVmdCA9ICItMTAwMDBweCI7CisgICAgc3R5bGUub3Zl
cmZsb3cgPSAiaGlkZGVuIjsKKyAgICBzdHlsZS53aWR0aCA9ICIyMDBweCI7CisgICAgc3R5bGUu
bWluV2lkdGggPSAiMHB4IjsKKyAgICBzdHlsZS5oZWlnaHQgPSAiMTUwcHgiOworICAgIHN0eWxl
LmRpc3BsYXkgPSAiYmxvY2siOworCisgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworCisg
ICAgdmFyIGJvZHkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgYm9keS5hcHBlbmRD
aGlsZChvdXRlcik7CisKKyAgICB2YXIgbm9TY3JvbGxiYXIgPSBpbm5lci5vZmZzZXRXaWR0aDsK
KworICAgIHN0eWxlLm92ZXJmbG93ID0gInNjcm9sbCI7CisgICAgdmFyIHdpdGhTY3JvbGxiYXIg
PSBpbm5lci5vZmZzZXRXaWR0aDsKKworICAgIGlmIChub1Njcm9sbGJhciA9PSB3aXRoU2Nyb2xs
YmFyKSB7CisgICAgICAgIHdpdGhTY3JvbGxiYXIgPSBvdXRlci5jbGllbnRXaWR0aDsKKyAgICB9
CisKKyAgICBib2R5LnJlbW92ZUNoaWxkKG91dGVyKTsKKworICAgIHJldHVybiBub1Njcm9sbGJh
ci13aXRoU2Nyb2xsYmFyOworfTsKK2V4cG9ydHMuc2V0SW5uZXJIdG1sID0gZnVuY3Rpb24oZWws
IGlubmVySHRtbCkgeworICAgIHZhciBlbGVtZW50ID0gZWwuY2xvbmVOb2RlKGZhbHNlKTsvL2Rv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaW5u
ZXJIdG1sOworICAgIGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsZW1lbnQsIGVsKTsKKyAg
ICByZXR1cm4gZWxlbWVudDsKK307CisKK2V4cG9ydHMuc2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24o
ZWwsIGlubmVyVGV4dCkgeworICAgIHZhciBkb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQ7Cisg
ICAgaWYgKGRvY3VtZW50LmJvZHkgJiYgInRleHRDb250ZW50IiBpbiBkb2N1bWVudC5ib2R5KQor
ICAgICAgICBlbC50ZXh0Q29udGVudCA9IGlubmVyVGV4dDsKKyAgICBlbHNlCisgICAgICAgIGVs
LmlubmVyVGV4dCA9IGlubmVyVGV4dDsKKworfTsKKworZXhwb3J0cy5nZXRJbm5lclRleHQgPSBm
dW5jdGlvbihlbCkgeworICAgIHZhciBkb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQ7CisgICAg
aWYgKGRvY3VtZW50LmJvZHkgJiYgInRleHRDb250ZW50IiBpbiBkb2N1bWVudC5ib2R5KQorICAg
ICAgICByZXR1cm4gZWwudGV4dENvbnRlbnQ7CisgICAgZWxzZQorICAgICAgICAgcmV0dXJuIGVs
LmlubmVyVGV4dCB8fCBlbC50ZXh0Q29udGVudCB8fCAiIjsKK307CisKK2V4cG9ydHMuZ2V0UGFy
ZW50V2luZG93ID0gZnVuY3Rpb24oZG9jdW1lbnQpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuZGVm
YXVsdFZpZXcgfHwgZG9jdW1lbnQucGFyZW50V2luZG93OworfTsKKworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9saWIvZXZlbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIva2V5cycsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbGliL2RvbSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIga2V5cyA9IHJlcXVpcmUoIi4v
a2V5cyIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vdXNlcmFnZW50Iik7Cit2YXIgZG9t
ID0gcmVxdWlyZSgiLi9kb20iKTsKKworZXhwb3J0cy5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKGVs
ZW0sIHR5cGUsIGNhbGxiYWNrKSB7CisgICAgaWYgKGVsZW0uYWRkRXZlbnRMaXN0ZW5lcikgewor
ICAgICAgICByZXR1cm4gZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBmYWxz
ZSk7CisgICAgfQorICAgIGlmIChlbGVtLmF0dGFjaEV2ZW50KSB7CisgICAgICAgIHZhciB3cmFw
cGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjYWxsYmFjayh3aW5kb3cuZXZlbnQpOwor
ICAgICAgICB9OworICAgICAgICBjYWxsYmFjay5fd3JhcHBlciA9IHdyYXBwZXI7CisgICAgICAg
IGVsZW0uYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBwZXIpOworICAgIH0KK307CisKK2V4
cG9ydHMucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBjYWxsYmFjaykgewor
ICAgIGlmIChlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgcmV0dXJuIGVsZW0u
cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpOworICAgIH0KKyAgICBp
ZiAoZWxlbS5kZXRhY2hFdmVudCkgeworICAgICAgICBlbGVtLmRldGFjaEV2ZW50KCJvbiIgKyB0
eXBlLCBjYWxsYmFjay5fd3JhcHBlciB8fCBjYWxsYmFjayk7CisgICAgfQorfTsKK2V4cG9ydHMu
c3RvcEV2ZW50ID0gZnVuY3Rpb24oZSkgeworICAgIGV4cG9ydHMuc3RvcFByb3BhZ2F0aW9uKGUp
OworICAgIGV4cG9ydHMucHJldmVudERlZmF1bHQoZSk7CisgICAgcmV0dXJuIGZhbHNlOworfTsK
KworZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUuc3Rv
cFByb3BhZ2F0aW9uKQorICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIGVsc2UKKyAg
ICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOworfTsKKworZXhwb3J0cy5wcmV2ZW50RGVmYXVs
dCA9IGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkKKyAgICAgICAgZS5w
cmV2ZW50RGVmYXVsdCgpOworICAgIGVsc2UKKyAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNl
OworfTsKK2V4cG9ydHMuZ2V0QnV0dG9uID0gZnVuY3Rpb24oZSkgeworICAgIGlmIChlLnR5cGUg
PT0gImRibGNsaWNrIikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGUudHlwZSA9PSAiY29u
dGV4dG1lbnUiIHx8IChlLmN0cmxLZXkgJiYgdXNlcmFnZW50LmlzTWFjKSkKKyAgICAgICAgcmV0
dXJuIDI7CisgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgcmV0dXJuIGUuYnV0
dG9uOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHsxOjAsIDI6MiwgNDoxfVtl
LmJ1dHRvbl07CisgICAgfQorfTsKKworaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRD
YXB0dXJlKSB7CisgICAgZXhwb3J0cy5jYXB0dXJlID0gZnVuY3Rpb24oZWwsIGV2ZW50SGFuZGxl
ciwgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKSB7CisgICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTsK
KyAgICAgICAgZnVuY3Rpb24gb25SZWxlYXNlQ2FwdHVyZShlKSB7CisgICAgICAgICAgICBldmVu
dEhhbmRsZXIoZSk7CisKKyAgICAgICAgICAgIGlmICghY2FsbGVkKSB7CisgICAgICAgICAgICAg
ICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWxlYXNlQ2FwdHVyZUhhbmRsZXIo
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIo
ZWwsICJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIpOworICAgICAgICAgICAgZXhwb3J0cy5yZW1v
dmVMaXN0ZW5lcihlbCwgIm1vdXNldXAiLCBvblJlbGVhc2VDYXB0dXJlKTsKKyAgICAgICAgICAg
IGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIoZWwsICJsb3NlY2FwdHVyZSIsIG9uUmVsZWFzZUNhcHR1
cmUpOworCisgICAgICAgICAgICBlbC5yZWxlYXNlQ2FwdHVyZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgIm1vdXNlbW92ZSIsIGV2ZW50SGFuZGxlcik7
CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZXVwIiwgb25SZWxlYXNlQ2Fw
dHVyZSk7CisgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJsb3NlY2FwdHVyZSIsIG9u
UmVsZWFzZUNhcHR1cmUpOworICAgICAgICBlbC5zZXRDYXB0dXJlKCk7CisgICAgfTsKK30KK2Vs
c2UgeworICAgIGV4cG9ydHMuY2FwdHVyZSA9IGZ1bmN0aW9uKGVsLCBldmVudEhhbmRsZXIsIHJl
bGVhc2VDYXB0dXJlSGFuZGxlcikgeworICAgICAgICBmdW5jdGlvbiBvbk1vdXNlVXAoZSkgewor
ICAgICAgICAgICAgZXZlbnRIYW5kbGVyICYmIGV2ZW50SGFuZGxlcihlKTsKKyAgICAgICAgICAg
IHJlbGVhc2VDYXB0dXJlSGFuZGxlciAmJiByZWxlYXNlQ2FwdHVyZUhhbmRsZXIoZSk7CisKKyAg
ICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGV2ZW50
SGFuZGxlciwgdHJ1ZSk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCJtb3VzZXVwIiwgb25Nb3VzZVVwLCB0cnVlKTsKKworICAgICAgICAgICAgZS5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNlbW92ZSIsIGV2ZW50SGFuZGxlciwgdHJ1ZSk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBvbk1vdXNlVXAsIHRydWUpOworICAgIH07Cit9CisKK2V4
cG9ydHMuYWRkTW91c2VXaGVlbExpc3RlbmVyID0gZnVuY3Rpb24oZWwsIGNhbGxiYWNrKSB7Cisg
ICAgdmFyIGZhY3RvciA9IDg7CisgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICBpZiAoZS53aGVlbERlbHRhICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChl
LndoZWVsRGVsdGFYICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBlLndoZWVsWCA9
IC1lLndoZWVsRGVsdGFYIC8gZmFjdG9yOworICAgICAgICAgICAgICAgIGUud2hlZWxZID0gLWUu
d2hlZWxEZWx0YVkgLyBmYWN0b3I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGUud2hlZWxYID0gMDsKKyAgICAgICAgICAgICAgICBlLndoZWVsWSA9IC1lLndoZWVsRGVs
dGEgLyBmYWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoZS5heGlzICYmIGUuYXhpcyA9PSBlLkhPUklaT05UQUxfQVhJUykgewor
ICAgICAgICAgICAgICAgIGUud2hlZWxYID0gKGUuZGV0YWlsIHx8IDApICogNTsKKyAgICAgICAg
ICAgICAgICBlLndoZWVsWSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGUud2hlZWxYID0gMDsKKyAgICAgICAgICAgICAgICBlLndoZWVsWSA9IChlLmRldGFpbCB8
fCAwKSAqIDU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2soZSk7
CisgICAgfTsKKyAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAiRE9NTW91c2VTY3JvbGwiLCBs
aXN0ZW5lcik7CisgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgIm1vdXNld2hlZWwiLCBsaXN0
ZW5lcik7Cit9OworCitleHBvcnRzLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIgPSBmdW5jdGlv
bihlbCwgdGltZW91dHMsIGV2ZW50SGFuZGxlciwgY2FsbGJhY2tOYW1lKSB7CisgICAgdmFyIGNs
aWNrcyA9IDA7CisgICAgdmFyIHN0YXJ0WCwgc3RhcnRZLCB0aW1lcjsKKyAgICB2YXIgZXZlbnRO
YW1lcyA9IHsKKyAgICAgICAgMjogImRibGNsaWNrIiwKKyAgICAgICAgMzogInRyaXBsZWNsaWNr
IiwKKyAgICAgICAgNDogInF1YWRjbGljayIKKyAgICB9OworCisgICAgZXhwb3J0cy5hZGRMaXN0
ZW5lcihlbCwgIm1vdXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGV4cG9ydHMu
Z2V0QnV0dG9uKGUpICE9IDApIHsKKyAgICAgICAgICAgIGNsaWNrcyA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YXIgaXNOZXdDbGljayA9IE1hdGguYWJzKGUuY2xpZW50WCAt
IHN0YXJ0WCkgPiA1IHx8IE1hdGguYWJzKGUuY2xpZW50WSAtIHN0YXJ0WSkgPiA1OworCisgICAg
ICAgICAgICBpZiAoIXRpbWVyIHx8IGlzTmV3Q2xpY2spCisgICAgICAgICAgICAgICAgY2xpY2tz
ID0gMDsKKworICAgICAgICAgICAgY2xpY2tzICs9IDE7CisKKyAgICAgICAgICAgIGlmICh0aW1l
cikKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpCisgICAgICAgICAgICB0aW1l
ciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7dGltZXIgPSBudWxsfSwgdGltZW91dHNbY2xpY2tz
IC0gMV0gfHwgNjAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xpY2tzID09IDEpIHsKKyAg
ICAgICAgICAgIHN0YXJ0WCA9IGUuY2xpZW50WDsKKyAgICAgICAgICAgIHN0YXJ0WSA9IGUuY2xp
ZW50WTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKCJt
b3VzZWRvd24iLCBlKTsKKworICAgICAgICBpZiAoY2xpY2tzID4gNCkKKyAgICAgICAgICAgIGNs
aWNrcyA9IDA7CisgICAgICAgIGVsc2UgaWYgKGNsaWNrcyA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oZXZlbnROYW1lc1tjbGlja3NdLCBlKTsKKyAg
ICB9KTsKKworICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSkgeworICAgICAgICBleHBvcnRzLmFk
ZExpc3RlbmVyKGVsLCAiZGJsY2xpY2siLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBjbGlj
a3MgPSAyOworICAgICAgICAgICAgaWYgKHRpbWVyKQorICAgICAgICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aW1lcik7CisgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
dGltZXIgPSBudWxsfSwgdGltZW91dHNbY2xpY2tzIC0gMV0gfHwgNjAwKTsKKyAgICAgICAgICAg
IGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKCJtb3VzZWRvd24iLCBlKTsKKyAgICAgICAgICAg
IGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7CisgICAg
ICAgIH0pOworICAgIH0KK307CisKK2Z1bmN0aW9uIG5vcm1hbGl6ZUNvbW1hbmRLZXlzKGNhbGxi
YWNrLCBlLCBrZXlDb2RlKSB7CisgICAgdmFyIGhhc2hJZCA9IDA7CisgICAgaWYgKCh1c2VyYWdl
bnQuaXNPcGVyYSAmJiAhKCJLZXlib2FyZEV2ZW50IiBpbiB3aW5kb3cpKSAmJiB1c2VyYWdlbnQu
aXNNYWMpIHsKKyAgICAgICAgaGFzaElkID0gMCB8IChlLm1ldGFLZXkgPyAxIDogMCkgfCAoZS5h
bHRLZXkgPyAyIDogMCkKKyAgICAgICAgICAgIHwgKGUuc2hpZnRLZXkgPyA0IDogMCkgfCAoZS5j
dHJsS2V5ID8gOCA6IDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGhhc2hJZCA9IDAgfCAoZS5j
dHJsS2V5ID8gMSA6IDApIHwgKGUuYWx0S2V5ID8gMiA6IDApCisgICAgICAgICAgICB8IChlLnNo
aWZ0S2V5ID8gNCA6IDApIHwgKGUubWV0YUtleSA/IDggOiAwKTsKKyAgICB9CisKKyAgICBpZiAo
a2V5Q29kZSBpbiBrZXlzLk1PRElGSUVSX0tFWVMpIHsKKyAgICAgICAgc3dpdGNoIChrZXlzLk1P
RElGSUVSX0tFWVNba2V5Q29kZV0pIHsKKyAgICAgICAgICAgIGNhc2UgIkFsdCI6CisgICAgICAg
ICAgICAgICAgaGFzaElkID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgIlNoaWZ0IjoKKyAgICAgICAgICAgICAgICBoYXNoSWQgPSA0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiQ3RybCI6CisgICAgICAgICAgICAgICAgaGFz
aElkID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgaGFzaElkID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBrZXlDb2RlID0gMDsKKyAgICB9CisKKyAgICBpZiAoaGFzaElkICYgOCAm
JiAoa2V5Q29kZSA9PSA5MSB8fCBrZXlDb2RlID09IDkzKSkgeworICAgICAgICBrZXlDb2RlID0g
MDsKKyAgICB9CisgICAgaWYgKCFoYXNoSWQgJiYgIShrZXlDb2RlIGluIGtleXMuRlVOQ1RJT05f
S0VZUykgJiYgIShrZXlDb2RlIGluIGtleXMuUFJJTlRBQkxFX0tFWVMpKSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGNhbGxiYWNrKGUsIGhhc2hJZCwga2V5Q29k
ZSk7Cit9CisKK2V4cG9ydHMuYWRkQ29tbWFuZEtleUxpc3RlbmVyID0gZnVuY3Rpb24oZWwsIGNh
bGxiYWNrKSB7CisgICAgdmFyIGFkZExpc3RlbmVyID0gZXhwb3J0cy5hZGRMaXN0ZW5lcjsKKyAg
ICBpZiAodXNlcmFnZW50LmlzT2xkR2Vja28gfHwgKHVzZXJhZ2VudC5pc09wZXJhICYmICEoIktl
eWJvYXJkRXZlbnQiIGluIHdpbmRvdykpKSB7CisgICAgICAgIHZhciBsYXN0S2V5RG93bktleUNv
ZGUgPSBudWxsOworICAgICAgICBhZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBmdW5jdGlvbihl
KSB7CisgICAgICAgICAgICBsYXN0S2V5RG93bktleUNvZGUgPSBlLmtleUNvZGU7CisgICAgICAg
IH0pOworICAgICAgICBhZGRMaXN0ZW5lcihlbCwgImtleXByZXNzIiwgZnVuY3Rpb24oZSkgewor
ICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNvbW1hbmRLZXlzKGNhbGxiYWNrLCBlLCBsYXN0
S2V5RG93bktleUNvZGUpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIg
bGFzdERvd24gPSBudWxsOworCisgICAgICAgIGFkZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGxhc3REb3duID0gZS5rZXlJZGVudGlmaWVyIHx8IGUu
a2V5Q29kZTsKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFj
aywgZSwgZS5rZXlDb2RlKTsKKyAgICAgICAgfSk7CisgICAgfQorfTsKKworaWYgKHdpbmRvdy5w
b3N0TWVzc2FnZSAmJiAhdXNlcmFnZW50LmlzT2xkSUUpIHsKKyAgICB2YXIgcG9zdE1lc3NhZ2VJ
ZCA9IDE7CisgICAgZXhwb3J0cy5uZXh0VGljayA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB3aW4pIHsK
KyAgICAgICAgd2luID0gd2luIHx8IHdpbmRvdzsKKyAgICAgICAgdmFyIG1lc3NhZ2VOYW1lID0g
Inplcm8tdGltZW91dC1tZXNzYWdlLSIgKyBwb3N0TWVzc2FnZUlkOworICAgICAgICBleHBvcnRz
LmFkZExpc3RlbmVyKHdpbiwgIm1lc3NhZ2UiLCBmdW5jdGlvbiBsaXN0ZW5lcihlKSB7CisgICAg
ICAgICAgICBpZiAoZS5kYXRhID09IG1lc3NhZ2VOYW1lKSB7CisgICAgICAgICAgICAgICAgZXhw
b3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7CisgICAgICAgICAgICAgICAgZXhwb3J0cy5yZW1vdmVM
aXN0ZW5lcih3aW4sICJtZXNzYWdlIiwgbGlzdGVuZXIpOworICAgICAgICAgICAgICAgIGNhbGxi
YWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB3aW4ucG9zdE1lc3Nh
Z2UobWVzc2FnZU5hbWUsICIqIik7CisgICAgfTsKK30KKworCitleHBvcnRzLm5leHRGcmFtZSA9
IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAgICB3aW5kb3cub1JlcXVlc3RBbmlt
YXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAorICAg
IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAgICB3aW5kb3cud2Via2l0UmVx
dWVzdEFuaW1hdGlvbkZyYW1lOworCitpZiAoZXhwb3J0cy5uZXh0RnJhbWUpCisgICAgZXhwb3J0
cy5uZXh0RnJhbWUgPSBleHBvcnRzLm5leHRGcmFtZS5iaW5kKHdpbmRvdyk7CitlbHNlCisgICAg
ZXhwb3J0cy5uZXh0RnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICBzZXRUaW1l
b3V0KGNhbGxiYWNrLCAxNyk7CisgICAgfTsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGliL2tl
eXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJl
KCIuL29vcCIpOwordmFyIEtleXMgPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHJldCA9IHsKKyAg
ICAgICAgTU9ESUZJRVJfS0VZUzogeworICAgICAgICAgICAgMTY6ICdTaGlmdCcsIDE3OiAnQ3Ry
bCcsIDE4OiAnQWx0JywgMjI0OiAnTWV0YScKKyAgICAgICAgfSwKKworICAgICAgICBLRVlfTU9E
UzogeworICAgICAgICAgICAgImN0cmwiOiAxLCAiYWx0IjogMiwgIm9wdGlvbiIgOiAyLAorICAg
ICAgICAgICAgInNoaWZ0IjogNCwgIm1ldGEiOiA4LCAiY29tbWFuZCI6IDgKKyAgICAgICAgfSwK
KworICAgICAgICBGVU5DVElPTl9LRVlTIDogeworICAgICAgICAgICAgOCAgOiAiQmFja3NwYWNl
IiwKKyAgICAgICAgICAgIDkgIDogIlRhYiIsCisgICAgICAgICAgICAxMyA6ICJSZXR1cm4iLAor
ICAgICAgICAgICAgMTkgOiAiUGF1c2UiLAorICAgICAgICAgICAgMjcgOiAiRXNjIiwKKyAgICAg
ICAgICAgIDMyIDogIlNwYWNlIiwKKyAgICAgICAgICAgIDMzIDogIlBhZ2VVcCIsCisgICAgICAg
ICAgICAzNCA6ICJQYWdlRG93biIsCisgICAgICAgICAgICAzNSA6ICJFbmQiLAorICAgICAgICAg
ICAgMzYgOiAiSG9tZSIsCisgICAgICAgICAgICAzNyA6ICJMZWZ0IiwKKyAgICAgICAgICAgIDM4
IDogIlVwIiwKKyAgICAgICAgICAgIDM5IDogIlJpZ2h0IiwKKyAgICAgICAgICAgIDQwIDogIkRv
d24iLAorICAgICAgICAgICAgNDQgOiAiUHJpbnQiLAorICAgICAgICAgICAgNDUgOiAiSW5zZXJ0
IiwKKyAgICAgICAgICAgIDQ2IDogIkRlbGV0ZSIsCisgICAgICAgICAgICA5NiA6ICJOdW1wYWQw
IiwKKyAgICAgICAgICAgIDk3IDogIk51bXBhZDEiLAorICAgICAgICAgICAgOTggOiAiTnVtcGFk
MiIsCisgICAgICAgICAgICA5OSA6ICJOdW1wYWQzIiwKKyAgICAgICAgICAgIDEwMDogIk51bXBh
ZDQiLAorICAgICAgICAgICAgMTAxOiAiTnVtcGFkNSIsCisgICAgICAgICAgICAxMDI6ICJOdW1w
YWQ2IiwKKyAgICAgICAgICAgIDEwMzogIk51bXBhZDciLAorICAgICAgICAgICAgMTA0OiAiTnVt
cGFkOCIsCisgICAgICAgICAgICAxMDU6ICJOdW1wYWQ5IiwKKyAgICAgICAgICAgIDExMjogIkYx
IiwKKyAgICAgICAgICAgIDExMzogIkYyIiwKKyAgICAgICAgICAgIDExNDogIkYzIiwKKyAgICAg
ICAgICAgIDExNTogIkY0IiwKKyAgICAgICAgICAgIDExNjogIkY1IiwKKyAgICAgICAgICAgIDEx
NzogIkY2IiwKKyAgICAgICAgICAgIDExODogIkY3IiwKKyAgICAgICAgICAgIDExOTogIkY4IiwK
KyAgICAgICAgICAgIDEyMDogIkY5IiwKKyAgICAgICAgICAgIDEyMTogIkYxMCIsCisgICAgICAg
ICAgICAxMjI6ICJGMTEiLAorICAgICAgICAgICAgMTIzOiAiRjEyIiwKKyAgICAgICAgICAgIDE0
NDogIk51bWxvY2siLAorICAgICAgICAgICAgMTQ1OiAiU2Nyb2xsbG9jayIKKyAgICAgICAgfSwK
KworICAgICAgICBQUklOVEFCTEVfS0VZUzogeworICAgICAgICAgICAzMjogJyAnLCAgNDg6ICcw
JywgIDQ5OiAnMScsICA1MDogJzInLCAgNTE6ICczJywgIDUyOiAnNCcsIDUzOiAgJzUnLAorICAg
ICAgICAgICA1NDogJzYnLCAgNTU6ICc3JywgIDU2OiAnOCcsICA1NzogJzknLCAgNTk6ICc7Jywg
IDYxOiAnPScsIDY1OiAgJ2EnLAorICAgICAgICAgICA2NjogJ2InLCAgNjc6ICdjJywgIDY4OiAn
ZCcsICA2OTogJ2UnLCAgNzA6ICdmJywgIDcxOiAnZycsIDcyOiAgJ2gnLAorICAgICAgICAgICA3
MzogJ2knLCAgNzQ6ICdqJywgIDc1OiAnaycsICA3NjogJ2wnLCAgNzc6ICdtJywgIDc4OiAnbics
IDc5OiAgJ28nLAorICAgICAgICAgICA4MDogJ3AnLCAgODE6ICdxJywgIDgyOiAncicsICA4Mzog
J3MnLCAgODQ6ICd0JywgIDg1OiAndScsIDg2OiAgJ3YnLAorICAgICAgICAgICA4NzogJ3cnLCAg
ODg6ICd4JywgIDg5OiAneScsICA5MDogJ3onLCAxMDc6ICcrJywgMTA5OiAnLScsIDExMDogJy4n
LAorICAgICAgICAgIDE4ODogJywnLCAxOTA6ICcuJywgMTkxOiAnLycsIDE5MjogJ2AnLCAyMTk6
ICdbJywgMjIwOiAnXFwnLAorICAgICAgICAgIDIyMTogJ10nLCAyMjI6ICdcJycKKyAgICAgICAg
fQorICAgIH07CisgICAgZm9yICh2YXIgaSBpbiByZXQuRlVOQ1RJT05fS0VZUykgeworICAgICAg
ICB2YXIgbmFtZSA9IHJldC5GVU5DVElPTl9LRVlTW2ldLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
IHJldFtuYW1lXSA9IHBhcnNlSW50KGksIDEwKTsKKyAgICB9CisgICAgb29wLm1peGluKHJldCwg
cmV0Lk1PRElGSUVSX0tFWVMpOworICAgIG9vcC5taXhpbihyZXQsIHJldC5QUklOVEFCTEVfS0VZ
Uyk7CisgICAgb29wLm1peGluKHJldCwgcmV0LkZVTkNUSU9OX0tFWVMpOworICAgIHJldC5lbnRl
ciA9IHJldFsicmV0dXJuIl07CisgICAgcmV0LmVzY2FwZSA9IHJldC5lc2M7CisgICAgcmV0LmRl
bCA9IHJldFsiZGVsZXRlIl07CisgICAgcmV0WzE3M10gPSAnLSc7CisKKyAgICByZXR1cm4gcmV0
OworfSkoKTsKK29vcC5taXhpbihleHBvcnRzLCBLZXlzKTsKKworZXhwb3J0cy5rZXlDb2RlVG9T
dHJpbmcgPSBmdW5jdGlvbihrZXlDb2RlKSB7CisgICAgcmV0dXJuIChLZXlzW2tleUNvZGVdIHx8
IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Q29kZSkpLnRvTG93ZXJDYXNlKCk7Cit9CisKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbGliL29vcCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworZXhwb3J0cy5p
bmhlcml0cyA9IChmdW5jdGlvbigpIHsKKyAgICB2YXIgdGVtcEN0b3IgPSBmdW5jdGlvbigpIHt9
OworICAgIHJldHVybiBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHsKKyAgICAgICAgdGVtcEN0
b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTsKKyAgICAgICAgY3Rvci5zdXBlcl8g
PSBzdXBlckN0b3IucHJvdG90eXBlOworICAgICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyB0ZW1w
Q3RvcigpOworICAgICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7CisgICAg
fTsKK30oKSk7CisKK2V4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7CisgICAg
Zm9yICh2YXIga2V5IGluIG1peGluKSB7CisgICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsK
KyAgICB9Cit9OworCitleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikg
eworICAgIGV4cG9ydHMubWl4aW4ocHJvdG8sIG1peGluKTsKK307CisKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbGliL3VzZXJhZ2VudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CitleHBvcnRzLk9TID0gewor
ICAgIExJTlVYOiAiTElOVVgiLAorICAgIE1BQzogIk1BQyIsCisgICAgV0lORE9XUzogIldJTkRP
V1MiCit9OworZXhwb3J0cy5nZXRPUyA9IGZ1bmN0aW9uKCkgeworICAgIGlmIChleHBvcnRzLmlz
TWFjKSB7CisgICAgICAgIHJldHVybiBleHBvcnRzLk9TLk1BQzsKKyAgICB9IGVsc2UgaWYgKGV4
cG9ydHMuaXNMaW51eCkgeworICAgICAgICByZXR1cm4gZXhwb3J0cy5PUy5MSU5VWDsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gZXhwb3J0cy5PUy5XSU5ET1dTOworICAgIH0KK307Citp
ZiAodHlwZW9mIG5hdmlnYXRvciAhPSAib2JqZWN0IikKKyAgICByZXR1cm47CisKK3ZhciBvcyA9
IChuYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goL21hY3x3aW58bGludXgvaSkgfHwgWyJvdGhlciJd
KVswXS50b0xvd2VyQ2FzZSgpOwordmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKK2V4cG9y
dHMuaXNXaW4gPSAob3MgPT0gIndpbiIpOworZXhwb3J0cy5pc01hYyA9IChvcyA9PSAibWFjIik7
CitleHBvcnRzLmlzTGludXggPSAob3MgPT0gImxpbnV4Iik7CitleHBvcnRzLmlzSUUgPSAKKyAg
ICAobmF2aWdhdG9yLmFwcE5hbWUgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciIgfHwg
bmF2aWdhdG9yLmFwcE5hbWUuaW5kZXhPZigiTVNBcHBIb3N0IikgPj0gMCkKKyAgICAmJiBwYXJz
ZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUgKFswLTldK1tcLjAtOV0rKS8p
WzFdKTsKKyAgICAKK2V4cG9ydHMuaXNPbGRJRSA9IGV4cG9ydHMuaXNJRSAmJiBleHBvcnRzLmlz
SUUgPCA5OworZXhwb3J0cy5pc0dlY2tvID0gZXhwb3J0cy5pc01vemlsbGEgPSB3aW5kb3cuY29u
dHJvbGxlcnMgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAiR2Vja28iOworZXhwb3J0
cy5pc09sZEdlY2tvID0gZXhwb3J0cy5pc0dlY2tvICYmIHBhcnNlSW50KChuYXZpZ2F0b3IudXNl
ckFnZW50Lm1hdGNoKC9ydlw6KFxkKykvKXx8W10pWzFdLCAxMCkgPCA0OworZXhwb3J0cy5pc09w
ZXJhID0gd2luZG93Lm9wZXJhICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5k
b3cub3BlcmEpID09ICJbb2JqZWN0IE9wZXJhXSI7CitleHBvcnRzLmlzV2ViS2l0ID0gcGFyc2VG
bG9hdCh1YS5zcGxpdCgiV2ViS2l0LyIpWzFdKSB8fCB1bmRlZmluZWQ7CisKK2V4cG9ydHMuaXND
aHJvbWUgPSBwYXJzZUZsb2F0KHVhLnNwbGl0KCIgQ2hyb21lLyIpWzFdKSB8fCB1bmRlZmluZWQ7
CisKK2V4cG9ydHMuaXNBSVIgPSB1YS5pbmRleE9mKCJBZG9iZUFJUiIpID49IDA7CisKK2V4cG9y
dHMuaXNJUGFkID0gdWEuaW5kZXhPZigiaVBhZCIpID49IDA7CisKK2V4cG9ydHMuaXNUb3VjaFBh
ZCA9IHVhLmluZGV4T2YoIlRvdWNoUGFkIikgPj0gMDsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9lZGl0b3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZml4
b2xkYnJvd3NlcnMnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvdXNl
cmFnZW50JywgJ2FjZS9rZXlib2FyZC90ZXh0aW5wdXQnLCAnYWNlL21vdXNlL21vdXNlX2hhbmRs
ZXInLCAnYWNlL21vdXNlL2ZvbGRfaGFuZGxlcicsICdhY2Uva2V5Ym9hcmQva2V5YmluZGluZycs
ICdhY2UvZWRpdF9zZXNzaW9uJywgJ2FjZS9zZWFyY2gnLCAnYWNlL3JhbmdlJywgJ2FjZS9saWIv
ZXZlbnRfZW1pdHRlcicsICdhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyJywgJ2FjZS9jb21t
YW5kcy9kZWZhdWx0X2NvbW1hbmRzJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKworcmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsK
KwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIu
L2xpYi9sYW5nIik7Cit2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi9saWIvdXNlcmFnZW50Iik7
Cit2YXIgVGV4dElucHV0ID0gcmVxdWlyZSgiLi9rZXlib2FyZC90ZXh0aW5wdXQiKS5UZXh0SW5w
dXQ7Cit2YXIgTW91c2VIYW5kbGVyID0gcmVxdWlyZSgiLi9tb3VzZS9tb3VzZV9oYW5kbGVyIiku
TW91c2VIYW5kbGVyOwordmFyIEZvbGRIYW5kbGVyID0gcmVxdWlyZSgiLi9tb3VzZS9mb2xkX2hh
bmRsZXIiKS5Gb2xkSGFuZGxlcjsKK3ZhciBLZXlCaW5kaW5nID0gcmVxdWlyZSgiLi9rZXlib2Fy
ZC9rZXliaW5kaW5nIikuS2V5QmluZGluZzsKK3ZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4v
ZWRpdF9zZXNzaW9uIikuRWRpdFNlc3Npb247Cit2YXIgU2VhcmNoID0gcmVxdWlyZSgiLi9zZWFy
Y2giKS5TZWFyY2g7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIg
RXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRl
cjsKK3ZhciBDb21tYW5kTWFuYWdlciA9IHJlcXVpcmUoIi4vY29tbWFuZHMvY29tbWFuZF9tYW5h
Z2VyIikuQ29tbWFuZE1hbmFnZXI7Cit2YXIgZGVmYXVsdENvbW1hbmRzID0gcmVxdWlyZSgiLi9j
b21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzIikuY29tbWFuZHM7Cit2YXIgY29uZmlnID0gcmVxdWly
ZSgiLi9jb25maWciKTsKK3ZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikg
eworICAgIHZhciBjb250YWluZXIgPSByZW5kZXJlci5nZXRDb250YWluZXJFbGVtZW50KCk7Cisg
ICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7CisgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRl
cmVyOworCisgICAgdGhpcy5jb21tYW5kcyA9IG5ldyBDb21tYW5kTWFuYWdlcih1c2VyYWdlbnQu
aXNNYWMgPyAibWFjIiA6ICJ3aW4iLCBkZWZhdWx0Q29tbWFuZHMpOworICAgIHRoaXMudGV4dElu
cHV0ICA9IG5ldyBUZXh0SW5wdXQocmVuZGVyZXIuZ2V0VGV4dEFyZWFDb250YWluZXIoKSwgdGhp
cyk7CisgICAgdGhpcy5yZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmdldEVsZW1l
bnQoKTsKKyAgICB0aGlzLmtleUJpbmRpbmcgPSBuZXcgS2V5QmluZGluZyh0aGlzKTsKKyAgICB0
aGlzLiRtb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMpOworICAgIG5ldyBGb2xk
SGFuZGxlcih0aGlzKTsKKworICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nID0gMDsKKyAgICB0aGlz
LiRzZWFyY2ggPSBuZXcgU2VhcmNoKCkuc2V0KHsKKyAgICAgICAgd3JhcDogdHJ1ZQorICAgIH0p
OworCisgICAgdGhpcy5zZXRTZXNzaW9uKHNlc3Npb24gfHwgbmV3IEVkaXRTZXNzaW9uKCIiKSk7
Cit9OworCisoZnVuY3Rpb24oKXsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0
dGVyKTsKKyAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtleWJvYXJkSGFu
ZGxlcikgeworICAgICAgICBpZiAodHlwZW9mIGtleWJvYXJkSGFuZGxlciA9PSAic3RyaW5nIiAm
JiBrZXlib2FyZEhhbmRsZXIpIHsKKyAgICAgICAgICAgIHRoaXMuJGtleWJpbmRpbmdJZCA9IGtl
eWJvYXJkSGFuZGxlcjsKKyAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CisgICAgICAgICAg
ICBjb25maWcubG9hZE1vZHVsZShbImtleWJpbmRpbmciLCBrZXlib2FyZEhhbmRsZXJdLCBmdW5j
dGlvbihtb2R1bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3NlbGYuJGtleWJpbmRpbmdJZCA9
PSBrZXlib2FyZEhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgIF9zZWxmLmtleUJpbmRpbmcu
c2V0S2V5Ym9hcmRIYW5kbGVyKG1vZHVsZSAmJiBtb2R1bGUuaGFuZGxlcik7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRrZXliaW5k
aW5nSWQ7CisgICAgICAgICAgICB0aGlzLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKGtl
eWJvYXJkSGFuZGxlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0S2V5Ym9hcmRI
YW5kbGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmtleUJpbmRpbmcuZ2V0
S2V5Ym9hcmRIYW5kbGVyKCk7CisgICAgfTsKKyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlv
bihzZXNzaW9uKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24gPT0gc2Vzc2lvbikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy5zZXNzaW9uKSB7CisgICAgICAgICAg
ICB2YXIgb2xkU2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKTsK
KyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VNb2Rl
IiwgdGhpcy4kb25DaGFuZ2VNb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVF
dmVudExpc3RlbmVyKCJ0b2tlbml6ZXJVcGRhdGUiLCB0aGlzLiRvblRva2VuaXplclVwZGF0ZSk7
CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlVGFi
U2l6ZSIsIHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZSk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24u
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcExpbWl0IiwgdGhpcy4kb25DaGFuZ2VXcmFw
TGltaXQpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNo
YW5nZVdyYXBNb2RlIiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7CisgICAgICAgICAgICB0aGlz
LnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25DaGFuZ2VGb2xkIiwgdGhpcy4kb25DaGFu
Z2VGb2xkKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2VGcm9udE1hcmtlciIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpOworICAgICAgICAg
ICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUJhY2tNYXJrZXIiLCB0
aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXIpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUJyZWFrcG9pbnQiLCB0aGlzLiRvbkNoYW5nZUJyZWFrcG9p
bnQpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5n
ZUFubm90YXRpb24iLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pOworICAgICAgICAgICAgdGhp
cy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZU92ZXJ3cml0ZSIsIHRoaXMuJG9u
Q3Vyc29yQ2hhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3Rl
bmVyKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRvcENoYW5nZSk7CisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlTGVmdFRvcCIsIHRo
aXMuJG9uU2Nyb2xsTGVmdENoYW5nZSk7CisKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0
aGlzLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOworICAg
ICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIs
IHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc2Vz
c2lvbiA9IHNlc3Npb247CisKKyAgICAgICAgdGhpcy4kb25Eb2N1bWVudENoYW5nZSA9IHRoaXMu
b25Eb2N1bWVudENoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlz
dGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UpOworICAgICAgICB0aGlzLnJl
bmRlcmVyLnNldFNlc3Npb24oc2Vzc2lvbik7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2Rl
ID0gdGhpcy5vbkNoYW5nZU1vZGUuYmluZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVu
dExpc3RlbmVyKCJjaGFuZ2VNb2RlIiwgdGhpcy4kb25DaGFuZ2VNb2RlKTsKKworICAgICAgICB0
aGlzLiRvblRva2VuaXplclVwZGF0ZSA9IHRoaXMub25Ub2tlbml6ZXJVcGRhdGUuYmluZCh0aGlz
KTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJ0b2tlbml6ZXJVcGRhdGUiLCB0
aGlzLiRvblRva2VuaXplclVwZGF0ZSk7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VUYWJTaXpl
ID0gdGhpcy5yZW5kZXJlci5vbkNoYW5nZVRhYlNpemUuYmluZCh0aGlzLnJlbmRlcmVyKTsKKyAg
ICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIiwgdGhpcy4kb25D
aGFuZ2VUYWJTaXplKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCA9IHRoaXMu
b25DaGFuZ2VXcmFwTGltaXQuYmluZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExp
c3RlbmVyKCJjaGFuZ2VXcmFwTGltaXQiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7CisKKyAg
ICAgICAgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSA9IHRoaXMub25DaGFuZ2VXcmFwTW9kZS5iaW5k
KHRoaXMpOworICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBNb2Rl
IiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VGb2xk
ID0gdGhpcy5vbkNoYW5nZUZvbGQuYmluZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVu
dExpc3RlbmVyKCJjaGFuZ2VGb2xkIiwgdGhpcy4kb25DaGFuZ2VGb2xkKTsKKworICAgICAgICB0
aGlzLiRvbkNoYW5nZUZyb250TWFya2VyID0gdGhpcy5vbkNoYW5nZUZyb250TWFya2VyLmJpbmQo
dGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VGcm9u
dE1hcmtlciIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpOworCisgICAgICAgIHRoaXMuJG9u
Q2hhbmdlQmFja01hcmtlciA9IHRoaXMub25DaGFuZ2VCYWNrTWFya2VyLmJpbmQodGhpcyk7Cisg
ICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VCYWNrTWFya2VyIiwg
dGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTsKKworICAgICAgICB0aGlzLiRvbkNoYW5nZUJyZWFr
cG9pbnQgPSB0aGlzLm9uQ2hhbmdlQnJlYWtwb2ludC5iaW5kKHRoaXMpOworICAgICAgICB0aGlz
LnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQnJlYWtwb2ludCIsIHRoaXMuJG9uQ2hh
bmdlQnJlYWtwb2ludCk7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uID0gdGhp
cy5vbkNoYW5nZUFubm90YXRpb24uYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNoYW5nZUFubm90YXRpb24iLCB0aGlzLiRvbkNoYW5nZUFubm90YXRp
b24pOworCisgICAgICAgIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlID0gdGhpcy5vbkN1cnNvckNoYW5n
ZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hh
bmdlT3ZlcndyaXRlIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOworCisgICAgICAgIHRoaXMuJG9u
U2Nyb2xsVG9wQ2hhbmdlID0gdGhpcy5vblNjcm9sbFRvcENoYW5nZS5iaW5kKHRoaXMpOworICAg
ICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsVG9wIiwgdGhp
cy4kb25TY3JvbGxUb3BDaGFuZ2UpOworCisgICAgICAgIHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5n
ZSA9IHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vz
c2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTY3JvbGxMZWZ0IiwgdGhpcy4kb25TY3JvbGxM
ZWZ0Q2hhbmdlKTsKKworICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24uZ2V0U2VsZWN0
aW9uKCk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUN1
cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKworICAgICAgICB0aGlzLiRvblNlbGVjdGlv
bkNoYW5nZSA9IHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgdGhp
cy5zZWxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25T
ZWxlY3Rpb25DaGFuZ2UpOworCisgICAgICAgIHRoaXMub25DaGFuZ2VNb2RlKCk7CisKKyAgICAg
ICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5n
ZSgpOworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxOworCisgICAgICAgIHRoaXMu
b25TY3JvbGxUb3BDaGFuZ2UoKTsKKyAgICAgICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UoKTsK
KyAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpOworICAgICAgICB0aGlzLm9uQ2hhbmdl
RnJvbnRNYXJrZXIoKTsKKyAgICAgICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIoKTsKKyAgICAg
ICAgdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQoKTsKKyAgICAgICAgdGhpcy5vbkNoYW5nZUFubm90
YXRpb24oKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5y
ZW5kZXJlci5hZGp1c3RXcmFwTGltaXQoKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVG
dWxsKCk7CisKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2Vzc2lvbiIsIHsKKyAgICAgICAg
ICAgIHNlc3Npb246IHNlc3Npb24sCisgICAgICAgICAgICBvbGRTZXNzaW9uOiBvbGRTZXNzaW9u
CisgICAgICAgIH0pOworICAgIH07CisgICAgdGhpcy5nZXRTZXNzaW9uID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb247CisgICAgfTsKKyAgICB0aGlzLnNldFZhbHVl
ID0gZnVuY3Rpb24odmFsLCBjdXJzb3JQb3MpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5z
ZXRWYWx1ZSh2YWwpOworCisgICAgICAgIGlmICghY3Vyc29yUG9zKQorICAgICAgICAgICAgdGhp
cy5zZWxlY3RBbGwoKTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09IDEpCisgICAgICAg
ICAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCgpOworICAgICAgICBlbHNlIGlmIChjdXJzb3JQb3Mg
PT0gLTEpCisgICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0KCk7CisKKyAgICAgICAg
cmV0dXJuIHZhbDsKKyAgICB9OworICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZSgpOworICAgIH07CisgICAgdGhpcy5n
ZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9u
OworICAgIH07CisgICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbihmb3JjZSkgeworICAgICAgICB0
aGlzLnJlbmRlcmVyLm9uUmVzaXplKGZvcmNlKTsKKyAgICB9OworICAgIHRoaXMuc2V0VGhlbWUg
PSBmdW5jdGlvbih0aGVtZSkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFRoZW1lKHRoZW1l
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VGhlbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMucmVuZGVyZXIuZ2V0VGhlbWUoKTsKKyAgICB9OworICAgIHRoaXMuc2V0U3R5bGUg
PSBmdW5jdGlvbihzdHlsZSkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHN0eWxl
KTsKKyAgICB9OworICAgIHRoaXMudW5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7CisgICAg
ICAgIHRoaXMucmVuZGVyZXIudW5zZXRTdHlsZShzdHlsZSk7CisgICAgfTsKKyAgICB0aGlzLnNl
dEZvbnRTaXplID0gZnVuY3Rpb24oc2l6ZSkgeworICAgICAgICBpZiAodHlwZW9mIHNpemUgPT0g
Im51bWJlciIpCisgICAgICAgICAgICBzaXplID0gc2l6ZSArICJweCI7CisgICAgICAgIHRoaXMu
Y29udGFpbmVyLnN0eWxlLmZvbnRTaXplID0gc2l6ZTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51
cGRhdGVGb250U2l6ZSgpOworICAgIH07CisKKyAgICB0aGlzLiRoaWdobGlnaHRCcmFja2V0cyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0
KSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuc2Vzc2lvbi4k
YnJhY2tldEhpZ2hsaWdodCk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdo
bGlnaHQgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodFBl
bmRpbmcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2Vs
ZiA9IHRoaXM7CisgICAgICAgIHRoaXMuJGhpZ2hsaWdodFBlbmRpbmcgPSB0cnVlOworICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi4kaGlnaGxpZ2h0UGVu
ZGluZyA9IGZhbHNlOworCisgICAgICAgICAgICB2YXIgcG9zID0gc2VsZi5zZXNzaW9uLmZpbmRN
YXRjaGluZ0JyYWNrZXQoc2VsZi5nZXRDdXJzb3JQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGlm
IChwb3MpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UocG9zLnJvdywg
cG9zLmNvbHVtbiwgcG9zLnJvdywgcG9zLmNvbHVtbisxKTsKKyAgICAgICAgICAgICAgICBzZWxm
LnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQgPSBzZWxmLnNlc3Npb24uYWRkTWFya2VyKHJhbmdl
LCAiYWNlX2JyYWNrZXQiLCAidGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9LCA1MCk7
CisgICAgfTsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBfc2Vs
ZiA9IHRoaXM7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBf
c2VsZi50ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMudGV4dElu
cHV0LmZvY3VzKCk7CisgICAgfTsKKyAgICB0aGlzLmlzRm9jdXNlZCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKCk7CisgICAgfTsKKyAgICB0
aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy50ZXh0SW5wdXQuYmx1cigpOwor
ICAgIH07CisgICAgdGhpcy5vbkZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz
LiRpc0ZvY3VzZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGlzRm9jdXNl
ZCA9IHRydWU7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0N1cnNvcigpOworICAgICAgICB0
aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUZvY3VzKCk7CisgICAgICAgIHRoaXMuX2VtaXQoImZvY3Vz
Iik7CisgICAgfTsKKyAgICB0aGlzLm9uQmx1ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
IXRoaXMuJGlzRm9jdXNlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy4kaXNG
b2N1c2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUN1cnNvcigpOworICAg
ICAgICB0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUJsdXIoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Ymx1ciIpOworICAgIH07CisKKyAgICB0aGlzLiRjdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICB9OworICAgIHRoaXMu
b25Eb2N1bWVudENoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gZS5k
YXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAgdmFyIGxhc3RS
b3c7CisKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93ICYmIGRl
bHRhLmFjdGlvbiAhPSAiaW5zZXJ0TGluZXMiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlTGlu
ZXMiKQorICAgICAgICAgICAgbGFzdFJvdyA9IHJhbmdlLmVuZC5yb3c7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGxhc3RSb3cgPSBJbmZpbml0eTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51
cGRhdGVMaW5lcyhyYW5nZS5zdGFydC5yb3csIGxhc3RSb3cpOworCisgICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZSIsIGUpOworICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTsKKyAgICB9Owor
CisgICAgdGhpcy5vblRva2VuaXplclVwZGF0ZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFy
IHJvd3MgPSBlLmRhdGE7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMocm93cy5m
aXJzdCwgcm93cy5sYXN0KTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdl
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9ZKHRoaXMuc2Vz
c2lvbi5nZXRTY3JvbGxUb3AoKSk7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLm9uU2Nyb2xsTGVm
dENoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWCh0
aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpKTsKKyAgICB9OworICAgIHRoaXMub25DdXJzb3JD
aGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kY3Vyc29yQ2hhbmdlKCk7CisKKyAg
ICAgICAgaWYgKCF0aGlzLiRibG9ja1Njcm9sbGluZykgeworICAgICAgICAgICAgdGhpcy5yZW5k
ZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4k
aGlnaGxpZ2h0QnJhY2tldHMoKTsKKyAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZl
TGluZSgpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICB9Owor
CisgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbigpOworCisgICAgICAgIHZhciBoaWdo
bGlnaHQ7CisgICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lKSB7CisgICAgICAg
ICAgICBpZiAoKHRoaXMuJHNlbGVjdGlvblN0eWxlICE9ICJsaW5lIiB8fCAhdGhpcy5zZWxlY3Rp
b24uaXNNdWx0aUxpbmUoKSkpCisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gdGhpcy5nZXRD
dXJzb3JQb3NpdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlc3Npb24uJGhpZ2hs
aWdodExpbmVNYXJrZXIgJiYgIWhpZ2hsaWdodCkgeworICAgICAgICAgICAgc2Vzc2lvbi5yZW1v
dmVNYXJrZXIoc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5pZCk7CisgICAgICAgICAgICBz
ZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmICgh
c2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciAmJiBoaWdobGlnaHQpIHsKKyAgICAgICAgICAg
IHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgPSBzZXNzaW9uLmhpZ2hsaWdodExpbmVzKGhp
Z2hsaWdodC5yb3csIGhpZ2hsaWdodC5yb3csICJhY2VfYWN0aXZlLWxpbmUiKTsKKyAgICAgICAg
fSBlbHNlIGlmIChoaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdodExp
bmVNYXJrZXIuc3RhcnQucm93ID0gaGlnaGxpZ2h0LnJvdzsKKyAgICAgICAgICAgIHNlc3Npb24u
JGhpZ2hsaWdodExpbmVNYXJrZXIuZW5kLnJvdyA9IGhpZ2hsaWdodC5yb3c7CisgICAgICAgICAg
ICBzZXNzaW9uLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIik7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFy
IHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisKKyAgICAgICAgaWYgKHNlc3Npb24uJHNlbGVjdGlv
bk1hcmtlcikgeworICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kc2Vs
ZWN0aW9uTWFya2VyKTsKKyAgICAgICAgfQorICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJr
ZXIgPSBudWxsOworCisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOworICAgICAg
ICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpOworICAgICAgICAgICAg
c2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2Vf
c2VsZWN0aW9uIiwgc3R5bGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy4k
dXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJl
ID0gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkICYmIHRoaXMuJGdldFNlbGVjdGlvbkhpZ2hM
aWdodFJlZ2V4cCgpCisgICAgICAgIHRoaXMuc2Vzc2lvbi5oaWdobGlnaHQocmUpOworICAgICAg
ICAKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgfTsKKworICAg
IHRoaXMuJGdldFNlbGVjdGlvbkhpZ2hMaWdodFJlZ2V4cCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKworICAgICAgICB2YXIgc2VsZWN0aW9uID0g
dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBpZiAoc2VsZWN0aW9uLmlzRW1wdHko
KSB8fCBzZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgc3RhcnRPdXRlciA9IHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gLSAxOworICAgICAg
ICB2YXIgZW5kT3V0ZXIgPSBzZWxlY3Rpb24uZW5kLmNvbHVtbiArIDE7CisgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5nZXRMaW5lKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICB2YXIg
bGluZUNvbHMgPSBsaW5lLmxlbmd0aDsKKyAgICAgICAgdmFyIG5lZWRsZSA9IGxpbmUuc3Vic3Ry
aW5nKE1hdGgubWF4KHN0YXJ0T3V0ZXIsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWF0aC5taW4oZW5kT3V0ZXIsIGxpbmVDb2xzKSk7CisgICAgICAgIGlmICgoc3Rh
cnRPdXRlciA+PSAwICYmIC9eW1x3XGRdLy50ZXN0KG5lZWRsZSkpIHx8CisgICAgICAgICAgICAo
ZW5kT3V0ZXIgPD0gbGluZUNvbHMgJiYgL1tcd1xkXSQvLnRlc3QobmVlZGxlKSkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoc2VsZWN0aW9u
LnN0YXJ0LmNvbHVtbiwgc2VsZWN0aW9uLmVuZC5jb2x1bW4pOworICAgICAgICBpZiAoIS9eW1x3
XGRdKyQvLnRlc3QobmVlZGxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
cmUgPSB0aGlzLiRzZWFyY2guJGFzc2VtYmxlUmVnRXhwKHsKKyAgICAgICAgICAgIHdob2xlV29y
ZDogdHJ1ZSwKKyAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IHRydWUsCisgICAgICAgICAgICBu
ZWVkbGU6IG5lZWRsZQorICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmU7CisgICAgfTsK
KworCisgICAgdGhpcy5vbkNoYW5nZUZyb250TWFya2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMucmVuZGVyZXIudXBkYXRlRnJvbnRNYXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMu
b25DaGFuZ2VCYWNrTWFya2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
dXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdlQnJlYWtw
b2ludCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJyZWFrcG9p
bnRzKCk7CisgICAgfTsKKworICAgIHRoaXMub25DaGFuZ2VBbm5vdGF0aW9uID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QW5ub3RhdGlvbnModGhpcy5zZXNzaW9uLmdl
dEFubm90YXRpb25zKCkpOworICAgIH07CisKKworICAgIHRoaXMub25DaGFuZ2VNb2RlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpOworICAgIH07CisK
KworICAgIHRoaXMub25DaGFuZ2VXcmFwTGltaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci51cGRhdGVGdWxsKCk7CisgICAgfTsKKworICAgIHRoaXMub25DaGFuZ2VXcmFw
TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHRydWUp
OworICAgIH07CisKKworICAgIHRoaXMub25DaGFuZ2VGb2xkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci51cGRhdGVGdWxsKCk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Q29weVRleHQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHRleHQgPSAiIjsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVj
dGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRS
YW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOworCisgICAgICAgIHRoaXMuX2VtaXQoImNv
cHkiLCB0ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgfTsKKyAgICB0aGlzLm9uQ29w
eSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoImNvcHkiLCB0aGlz
KTsKKyAgICB9OworICAgIHRoaXMub25DdXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5j
b21tYW5kcy5leGVjKCJjdXQiLCB0aGlzKTsKKyAgICB9OworICAgIHRoaXMub25QYXN0ZSA9IGZ1
bmN0aW9uKHRleHQpIHsKKyAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KSAKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdGhpcy5fZW1pdCgicGFzdGUiLCB0ZXh0KTsKKyAgICAgICAgdGhp
cy5pbnNlcnQodGV4dCk7CisgICAgfTsKKworCisgICAgdGhpcy5leGVjQ29tbWFuZCA9IGZ1bmN0
aW9uKGNvbW1hbmQsIGFyZ3MpIHsKKyAgICAgICAgdGhpcy5jb21tYW5kcy5leGVjKGNvbW1hbmQs
IHRoaXMsIGFyZ3MpOworICAgIH07CisgICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbih0ZXh0KSB7
CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgbW9kZSA9
IHNlc3Npb24uZ2V0TW9kZSgpOworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQ
b3NpdGlvbigpOworCisgICAgICAgIGlmICh0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkpIHsK
KyAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSBtb2RlLnRyYW5zZm9ybUFjdGlvbihzZXNzaW9u
LmdldFN0YXRlKGN1cnNvci5yb3cpLCAnaW5zZXJ0aW9uJywgdGhpcywgc2Vzc2lvbiwgdGV4dCk7
CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtKQorICAgICAgICAgICAgICAgIHRleHQgPSB0cmFu
c2Zvcm0udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlx0
IiwgdGhpcy5zZXNzaW9uLmdldFRhYlN0cmluZygpKTsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVj
dGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGN1cnNvciA9IHRoaXMuc2Vzc2lvbi5yZW1v
dmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLnNlc3Npb24uZ2V0T3Zl
cndyaXRlKCkpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZS5mcm9tUG9pbnRz
KGN1cnNvciwgY3Vyc29yKTsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKz0gdGV4dC5s
ZW5ndGg7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKworICAgICAgICB2YXIgc3RhcnQg
PSBjdXJzb3IuY29sdW1uOworICAgICAgICB2YXIgbGluZVN0YXRlID0gc2Vzc2lvbi5nZXRTdGF0
ZShjdXJzb3Iucm93KTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29y
LnJvdyk7CisgICAgICAgIHZhciBzaG91bGRPdXRkZW50ID0gbW9kZS5jaGVja091dGRlbnQobGlu
ZVN0YXRlLCBsaW5lLCB0ZXh0KTsKKyAgICAgICAgdmFyIGVuZCA9IHNlc3Npb24uaW5zZXJ0KGN1
cnNvciwgdGV4dCk7CisKKyAgICAgICAgaWYgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0uc2VsZWN0
aW9uKSB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtLnNlbGVjdGlvbi5sZW5ndGggPT0gMikg
eyAvLyBUcmFuc2Zvcm0gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY29sdW1uCisgICAgICAgICAg
ICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoCisgICAgICAgICAgICAgICAg
ICAgIG5ldyBSYW5nZShjdXJzb3Iucm93LCBzdGFydCArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Iucm93LCBzdGFydCArIHRyYW5z
Zm9ybS5zZWxlY3Rpb25bMV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIFRyYW5zZm9ybSBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCByb3cuCisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rp
b24uc2V0U2VsZWN0aW9uUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgIG5ldyBSYW5nZShjdXJz
b3Iucm93ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zZm9ybS5zZWxlY3Rpb25bMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJzb3Iucm93ICsgdHJhbnNmb3JtLnNlbGVjdGlvblsyXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zZWxlY3Rpb25bM10pKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoc2Vzc2lvbi5nZXREb2N1bWVudCgpLmlzTmV3TGluZSh0
ZXh0KSkgeworICAgICAgICAgICAgdmFyIGxpbmVJbmRlbnQgPSBtb2RlLmdldE5leHRMaW5lSW5k
ZW50KGxpbmVTdGF0ZSwgbGluZS5zbGljZSgwLCBjdXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRU
YWJTdHJpbmcoKSk7CisKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGN1cnNvci5yb3cr
MSwgMCk7CisKKyAgICAgICAgICAgIHZhciBzaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7Cisg
ICAgICAgICAgICB2YXIgbWluSW5kZW50ID0gTnVtYmVyLk1BWF9WQUxVRTsKKworICAgICAgICAg
ICAgZm9yICh2YXIgcm93ID0gY3Vyc29yLnJvdyArIDE7IHJvdyA8PSBlbmQucm93OyArK3Jvdykg
eworICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSAwOworCisgICAgICAgICAgICAgICAgbGlu
ZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGluZS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hh
ckF0KGkpID09ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gc2l6ZTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZS5jaGFyQXQoaSkgPT0gJyAnKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgv
W15cc10vLnRlc3QobGluZSkpCisgICAgICAgICAgICAgICAgICAgIG1pbkluZGVudCA9IE1hdGgu
bWluKGluZGVudCwgbWluSW5kZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
ICh2YXIgcm93ID0gY3Vyc29yLnJvdyArIDE7IHJvdyA8PSBlbmQucm93OyArK3JvdykgeworICAg
ICAgICAgICAgICAgIHZhciBvdXRkZW50ID0gbWluSW5kZW50OworCisgICAgICAgICAgICAgICAg
bGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZS5sZW5ndGggJiYgb3V0ZGVudCA+IDA7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxpbmUuY2hhckF0KGkpID09ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRkZW50IC09IHNpemU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUuY2hh
ckF0KGkpID09ICcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRlbnQgLT0gMTsKKyAg
ICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlc3Npb24uaW5kZW50Um93cyhjdXJzb3Iucm93
ICsgMSwgZW5kLnJvdywgbGluZUluZGVudCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNob3Vs
ZE91dGRlbnQpCisgICAgICAgICAgICBtb2RlLmF1dG9PdXRkZW50KGxpbmVTdGF0ZSwgc2Vzc2lv
biwgY3Vyc29yLnJvdyk7CisgICAgfTsKKworICAgIHRoaXMub25UZXh0SW5wdXQgPSBmdW5jdGlv
bih0ZXh0KSB7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5vblRleHRJbnB1dCh0ZXh0KTsKKyAg
ICB9OworCisgICAgdGhpcy5vbkNvbW1hbmRLZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNv
ZGUpIHsKKyAgICAgICAgdGhpcy5rZXlCaW5kaW5nLm9uQ29tbWFuZEtleShlLCBoYXNoSWQsIGtl
eUNvZGUpOworICAgIH07CisgICAgdGhpcy5zZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3Jp
dGUpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldE92ZXJ3cml0ZShvdmVyd3JpdGUpOworICAg
IH07CisgICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKKyAgICB9OworICAgIHRoaXMudG9nZ2xlT3Zl
cndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi50b2dnbGVPdmVyd3Jp
dGUoKTsKKyAgICB9OworICAgIHRoaXMuc2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbihzcGVlZCkg
eworICAgICAgICB0aGlzLiRtb3VzZUhhbmRsZXIuc2V0U2Nyb2xsU3BlZWQoc3BlZWQpOworICAg
IH07CisgICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldFNjcm9sbFNwZWVkKCk7CisgICAgfTsKKyAgICB0aGlz
LnNldERyYWdEZWxheSA9IGZ1bmN0aW9uKGRyYWdEZWxheSkgeworICAgICAgICB0aGlzLiRtb3Vz
ZUhhbmRsZXIuc2V0RHJhZ0RlbGF5KGRyYWdEZWxheSk7CisgICAgfTsKKyAgICB0aGlzLmdldERy
YWdEZWxheSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVy
LmdldERyYWdEZWxheSgpOworICAgIH07CisKKyAgICB0aGlzLiRzZWxlY3Rpb25TdHlsZSA9ICJs
aW5lIjsKKyAgICB0aGlzLnNldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAg
ICAgICAgaWYgKHRoaXMuJHNlbGVjdGlvblN0eWxlID09IHN0eWxlKSByZXR1cm47CisKKyAgICAg
ICAgdGhpcy4kc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgdGhpcy5vblNlbGVjdGlv
bkNoYW5nZSgpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb25TdHlsZSIsIHtk
YXRhOiBzdHlsZX0pOworICAgIH07CisgICAgdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kc2VsZWN0aW9uU3R5bGU7CisgICAgfTsKKwor
ICAgIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPSB0cnVlOworICAgIHRoaXMuc2V0SGlnaGxp
Z2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgeworICAgICAgICBpZiAo
dGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSA9PSBzaG91bGRIaWdobGlnaHQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSA9IHNob3VsZEhp
Z2hsaWdodDsKKyAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpOworICAg
IH07CisgICAgdGhpcy5nZXRIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lOworICAgIH07CisKKyAgICB0aGlz
LiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gdHJ1ZTsKKyAgICB0aGlzLnNldEhpZ2hsaWdodEd1dHRl
ckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAgICAgICAgaWYgKHRoaXMuJGhp
Z2hsaWdodEd1dHRlckxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZShzaG91bGRI
aWdobGlnaHQpOworICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gc2hvdWxkSGln
aGxpZ2h0OworICAgIH07CisKKyAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU7CisgICAg
fTsKKworICAgIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IHRydWU7CisgICAgdGhpcy5z
ZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAg
ICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCA9PSBzaG91bGRIaWdobGlnaHQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRX
b3JkID0gc2hvdWxkSGlnaGxpZ2h0OworICAgICAgICB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSgp
OworICAgIH07CisgICAgdGhpcy5nZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZDsKKyAgICB9Owor
CisgICAgdGhpcy5zZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKHNob3VsZEFuaW1hdGUpewor
ICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEFuaW1hdGVkU2Nyb2xsKHNob3VsZEFuaW1hdGUpOwor
ICAgIH07CisKKyAgICB0aGlzLmdldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oKXsKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0QW5pbWF0ZWRTY3JvbGwoKTsKKyAgICB9OworICAg
IHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykgeworICAg
ICAgICB0aGlzLnJlbmRlcmVyLnNldFNob3dJbnZpc2libGVzKHNob3dJbnZpc2libGVzKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2hvd0ludmlzaWJsZXMoKTsKKyAgICB9OworCisgICAg
dGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgeworICAgICAg
ICB0aGlzLnJlbmRlcmVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoZGlzcGxheSk7CisgICAgfTsK
KworICAgIHRoaXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXREaXNwbGF5SW5kZW50R3VpZGVzKCk7CisgICAgfTsK
KyAgICB0aGlzLnNldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikg
eworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFNob3dQcmludE1hcmdpbihzaG93UHJpbnRNYXJn
aW4pOworICAgIH07CisgICAgdGhpcy5nZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2hvd1ByaW50TWFyZ2luKCk7CisgICAg
fTsKKyAgICB0aGlzLnNldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rpb24oc2hvd1ByaW50TWFy
Z2luKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJpbnRNYXJnaW5Db2x1bW4oc2hvd1By
aW50TWFyZ2luKTsKKyAgICB9OworICAgIHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0UHJpbnRNYXJnaW5Db2x1
bW4oKTsKKyAgICB9OworCisgICAgdGhpcy4kcmVhZE9ubHkgPSBmYWxzZTsKKyAgICB0aGlzLnNl
dFJlYWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKKyAgICAgICAgdGhpcy4kcmVhZE9ubHkg
PSByZWFkT25seTsKKyAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0UmVhZE9ubHkocmVhZE9ubHkp
OworICAgICAgICB0aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyghcmVhZE9u
bHkpOworICAgIH07CisgICAgdGhpcy5nZXRSZWFkT25seSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kcmVhZE9ubHk7CisgICAgfTsKKworICAgIHRoaXMuJG1vZGVCZWhhdmlv
dXJzID0gdHJ1ZTsKKyAgICB0aGlzLnNldEJlaGF2aW91cnNFbmFibGVkID0gZnVuY3Rpb24gKGVu
YWJsZWQpIHsKKyAgICAgICAgdGhpcy4kbW9kZUJlaGF2aW91cnMgPSBlbmFibGVkOworICAgIH07
CisgICAgdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJG1vZGVCZWhhdmlvdXJzOworICAgIH07CisKKyAgICB0aGlzLiRtb2RlV3Jh
cEJlaGF2aW91cnMgPSB0cnVlOworICAgIHRoaXMuc2V0V3JhcEJlaGF2aW91cnNFbmFibGVkID0g
ZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAgdGhpcy4kbW9kZVdyYXBCZWhhdmlvdXJzID0g
ZW5hYmxlZDsKKyAgICB9OworICAgIHRoaXMuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9kZVdyYXBCZWhhdmlvdXJzOworICAg
IH07CisgICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7CisgICAg
ICAgIHZhciBndXR0ZXIgPSB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllcjsKKyAgICAgICAgaWYg
KGd1dHRlci5nZXRTaG93Rm9sZFdpZGdldHMoKSA9PSBzaG93KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMucmVuZGVyZXIuJGd1dHRlckxheWVyLnNldFNob3dGb2xkV2lkZ2V0
cyhzaG93KTsKKyAgICAgICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gc2hvdzsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dGb2xk
V2lkZ2V0cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci4kZ3V0
dGVyTGF5ZXIuZ2V0U2hvd0ZvbGRXaWRnZXRzKCk7CisgICAgfTsKKworICAgIHRoaXMuc2V0RmFk
ZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNl
dEZhZGVGb2xkV2lkZ2V0cyhzaG93KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRGYWRlRm9sZFdp
ZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RmFk
ZUZvbGRXaWRnZXRzKCk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKGRpcikg
eworICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXsKKyAgICAgICAgICAgIGlm
IChkaXIgPT0gImxlZnQiKQorICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExl
ZnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZWxlY3RSaWdodCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRT
ZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBpZiAodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgp
KSB7CisgICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgICAg
IHZhciBzdGF0ZSA9IHNlc3Npb24uZ2V0U3RhdGUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAg
ICAgIHZhciBuZXdfcmFuZ2UgPSBzZXNzaW9uLmdldE1vZGUoKS50cmFuc2Zvcm1BY3Rpb24oc3Rh
dGUsICdkZWxldGlvbicsIHRoaXMsIHNlc3Npb24sIHJhbmdlKTsKKyAgICAgICAgICAgIGlmIChu
ZXdfcmFuZ2UpCisgICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXdfcmFuZ2U7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgdGhpcy5jbGVh
clNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5yZW1vdmVXb3JkUmlnaHQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lv
bi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgdGhpcy5jbGVhclNl
bGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5yZW1vdmVXb3JkTGVmdCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKTsKKworICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rp
b24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlVG9MaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRoaXMu
c2VsZWN0aW9uLnNlbGVjdExpbmVTdGFydCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1v
dmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlv
bigpOworICAgIH07CisgICAgdGhpcy5yZW1vdmVUb0xpbmVFbmQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRoaXMuc2Vs
ZWN0aW9uLnNlbGVjdExpbmVFbmQoKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNl
bGVjdGlvblJhbmdlKCk7CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5jb2x1bW4gPT0gcmFuZ2Uu
ZW5kLmNvbHVtbiAmJiByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykgeworICAgICAg
ICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IDA7CisgICAgICAgICAgICByYW5nZS5lbmQucm93Kys7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAg
ICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5zcGxpdExpbmUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsK
KyAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgIHRoaXMuaW5z
ZXJ0KCJcbiIpOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGN1cnNvcik7Cisg
ICAgfTsKKyAgICB0aGlzLnRyYW5zcG9zZUxldHRlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7
CisgICAgICAgIHZhciBjb2x1bW4gPSBjdXJzb3IuY29sdW1uOworICAgICAgICBpZiAoY29sdW1u
ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBsaW5lID0gdGhpcy5z
ZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIHZhciBzd2FwLCByYW5nZTsKKyAg
ICAgICAgaWYgKGNvbHVtbiA8IGxpbmUubGVuZ3RoKSB7CisgICAgICAgICAgICBzd2FwID0gbGlu
ZS5jaGFyQXQoY29sdW1uKSArIGxpbmUuY2hhckF0KGNvbHVtbi0xKTsKKyAgICAgICAgICAgIHJh
bmdlID0gbmV3IFJhbmdlKGN1cnNvci5yb3csIGNvbHVtbi0xLCBjdXJzb3Iucm93LCBjb2x1bW4r
MSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzd2FwID0gbGluZS5j
aGFyQXQoY29sdW1uLTEpICsgbGluZS5jaGFyQXQoY29sdW1uLTIpOworICAgICAgICAgICAgcmFu
Z2UgPSBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgY29sdW1uLTIsIGN1cnNvci5yb3csIGNvbHVtbik7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHN3YXApOwor
ICAgIH07CisgICAgdGhpcy50b0xvd2VyQ2FzZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
b3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgaWYgKHRo
aXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2Vs
ZWN0V29yZCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxl
Y3Rpb25SYW5nZSgpOworICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFu
Z2UocmFuZ2UpOworICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgdGV4dC50b0xv
d2VyQ2FzZSgpKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uob3Jp
Z2luYWxSYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLnRvVXBwZXJDYXNlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBvcmlnaW5hbFJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOwor
ICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0aGlz
LnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmFuZ2Ug
PSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5zZXNz
aW9uLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJh
bmdlLCB0ZXh0LnRvVXBwZXJDYXNlKCkpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb25SYW5nZShvcmlnaW5hbFJhbmdlKTsKKyAgICB9OworICAgIHRoaXMuaW5kZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2
YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisKKyAgICAgICAgaWYgKHJhbmdl
LnN0YXJ0LnJvdyA8IHJhbmdlLmVuZC5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uIDwgcmFuZ2Uu
ZW5kLmNvbHVtbikgeworICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJv
d3MoKTsKKyAgICAgICAgICAgIHNlc3Npb24uaW5kZW50Um93cyhyb3dzLmZpcnN0LCByb3dzLmxh
c3QsICJcdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGluZGVudFN0cmlu
ZzsKKworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VTb2Z0VGFicygpKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHNpemUgICAgICAgID0gc2Vzc2lvbi5nZXRUYWJTaXplKCksCisg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICBjb2x1bW4gICAgICA9IHNlc3Npb24uZG9jdW1lbnRUb1Nj
cmVlbkNvbHVtbihwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiksCisgICAgICAgICAgICAg
ICAgICAgIGNvdW50ICAgICAgID0gKHNpemUgLSBjb2x1bW4gJSBzaXplKTsKKworICAgICAgICAg
ICAgICAgIGluZGVudFN0cmluZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgY291bnQpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaW5kZW50U3RyaW5nID0gIlx0IjsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydChpbmRlbnRTdHJpbmcpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICB0aGlzLmJsb2NrSW5kZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBy
b3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5pbmRl
bnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgIlx0Iik7CisgICAgfTsKKyAgICB0aGlzLmJs
b2NrT3V0ZGVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5z
ZXNzaW9uLmdldFNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnNlc3Npb24ub3V0ZGVudFJvd3Mo
c2VsZWN0aW9uLmdldFJhbmdlKCkpOworICAgIH07CisgICAgdGhpcy5zb3J0TGluZXMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAg
ICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisKKyAgICAgICAgdmFyIGxpbmVzID0g
W107CisgICAgICAgIGZvciAoaSA9IHJvd3MuZmlyc3Q7IGkgPD0gcm93cy5sYXN0OyBpKyspCisg
ICAgICAgICAgICBsaW5lcy5wdXNoKHNlc3Npb24uZ2V0TGluZShpKSk7CisKKyAgICAgICAgbGlu
ZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICBpZiAoYS50b0xvd2VyQ2FzZSgp
IDwgYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYS50b0xvd2Vy
Q2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9KTsKKworICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwg
MCwgMCwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSByb3dzLmZpcnN0OyBpIDw9IHJvd3MubGFz
dDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShpKTsKKyAg
ICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7CisgICAgICAgICAgICBkZWxldGVS
YW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBs
aW5lLmxlbmd0aDsKKyAgICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShkZWxldGVSYW5nZSwgbGlu
ZXNbaS1yb3dzLmZpcnN0XSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMudG9nZ2xlQ29t
bWVudExpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Vzc2lv
bi5nZXRTdGF0ZSh0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkucm93KTsKKyAgICAgICAgdmFyIHJv
d3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmdldE1v
ZGUoKS50b2dnbGVDb21tZW50TGluZXMoc3RhdGUsIHRoaXMuc2Vzc2lvbiwgcm93cy5maXJzdCwg
cm93cy5sYXN0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0TnVtYmVyQXQgPSBmdW5jdGlvbiggcm93
LCBjb2x1bW4gKSB7CisgICAgICAgIHZhciBfbnVtYmVyUnggPSAvW1wtXT9bMC05XSsoPzpcLlsw
LTldKyk/L2cKKyAgICAgICAgX251bWJlclJ4Lmxhc3RJbmRleCA9IDAKKworICAgICAgICB2YXIg
cyA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdykKKyAgICAgICAgd2hpbGUoX251bWJlclJ4Lmxh
c3RJbmRleCA8IGNvbHVtbiAtIDEgKXsKKyAgICAgICAgICAgIHZhciBtID0gX251bWJlclJ4LmV4
ZWMocykKKyAgICAgICAgICAgIGlmKG0uaW5kZXggPD0gY29sdW1uICYmIG0uaW5kZXgrbVswXS5s
ZW5ndGggPj0gY29sdW1uKXsKKyAgICAgICAgICAgICAgICB2YXIgbnVtYmVyID0geworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZTogbVswXSwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG0u
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgIGVuZDogbS5pbmRleCttWzBdLmxlbmd0aAorCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIHRoaXMu
bW9kaWZ5TnVtYmVyID0gZnVuY3Rpb24oYW1vdW50KSB7CisgICAgICAgIHZhciByb3cgPSB0aGlz
LnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5yb3c7CisgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnNl
bGVjdGlvbi5nZXRDdXJzb3IoKS5jb2x1bW47CisgICAgICAgIHZhciBjaGFyUmFuZ2UgPSBuZXcg
UmFuZ2Uocm93LCBjb2x1bW4tMSwgcm93LCBjb2x1bW4pOworCisgICAgICAgIHZhciBjID0gdGhp
cy5zZXNzaW9uLmdldFRleHRSYW5nZShjaGFyUmFuZ2UpOworICAgICAgICBpZiAoIWlzTmFOKHBh
cnNlRmxvYXQoYykpICYmIGlzRmluaXRlKGMpKSB7CisgICAgICAgICAgICB2YXIgbnIgPSB0aGlz
LmdldE51bWJlckF0KHJvdywgY29sdW1uKTsKKyAgICAgICAgICAgIGlmIChucikgeworICAgICAg
ICAgICAgICAgIHZhciBmcCA9IG5yLnZhbHVlLmluZGV4T2YoIi4iKSA+PSAwID8gbnIuc3RhcnQg
KyBuci52YWx1ZS5pbmRleE9mKCIuIikgKyAxIDogbnIuZW5kOworICAgICAgICAgICAgICAgIHZh
ciBkZWNpbWFscyA9IG5yLnN0YXJ0ICsgbnIudmFsdWUubGVuZ3RoIC0gZnA7CisKKyAgICAgICAg
ICAgICAgICB2YXIgdCA9IHBhcnNlRmxvYXQobnIudmFsdWUpOworICAgICAgICAgICAgICAgIHQg
Kj0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTsKKyAgICAgICAgICAgICAgICAKKworICAgICAgICAg
ICAgICAgIGlmKGZwICE9PSBuci5lbmQgJiYgY29sdW1uIDwgZnApeworICAgICAgICAgICAgICAg
ICAgICBhbW91bnQgKj0gTWF0aC5wb3coMTAsIG5yLmVuZCAtIGNvbHVtbiAtIDEpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAqPSBNYXRoLnBv
dygxMCwgbnIuZW5kIC0gY29sdW1uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgdCArPSBhbW91bnQ7CisgICAgICAgICAgICAgICAgdCAvPSBN
YXRoLnBvdygxMCwgZGVjaW1hbHMpOworICAgICAgICAgICAgICAgIHZhciBubnIgPSB0LnRvRml4
ZWQoZGVjaW1hbHMpOworICAgICAgICAgICAgICAgIHZhciByZXBsYWNlUmFuZ2UgPSBuZXcgUmFu
Z2Uocm93LCBuci5zdGFydCwgcm93LCBuci5lbmQpOworICAgICAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5yZXBsYWNlKHJlcGxhY2VSYW5nZSwgbm5yKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1v
dmVDdXJzb3JUbyhyb3csIE1hdGgubWF4KG5yLnN0YXJ0ICsxLCBjb2x1bW4gKyBubnIubGVuZ3Ro
IC0gbnIudmFsdWUubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93cyA9
IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB2YXIgcmFuZ2U7CisgICAgICAgIGlm
IChyb3dzLmZpcnN0ID09PSAwIHx8IHJvd3MubGFzdCsxIDwgdGhpcy5zZXNzaW9uLmdldExlbmd0
aCgpKQorICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93cy5maXJzdCwgMCwgcm93cy5s
YXN0KzEsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgK
KyAgICAgICAgICAgICAgICByb3dzLmZpcnN0LTEsIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvd3Mu
Zmlyc3QtMSkubGVuZ3RoLAorICAgICAgICAgICAgICAgIHJvd3MubGFzdCwgdGhpcy5zZXNzaW9u
LmdldExpbmUocm93cy5sYXN0KS5sZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgICAgIHRoaXMu
c2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgfTsKKworICAgIHRoaXMuZHVwbGljYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBzZWwgPSB0aGlzLnNlbGVjdGlvbjsKKyAgICAgICAgdmFyIGRvYyA9IHRoaXMuc2Vz
c2lvbjsKKyAgICAgICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlKCk7CisgICAgICAgIGlmIChy
YW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByYW5nZS5zdGFydC5yb3c7
CisgICAgICAgICAgICBkb2MuZHVwbGljYXRlTGluZXMocm93LCByb3cpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmFyIHJldmVyc2UgPSBzZWwuaXNCYWNrd2FyZHMoKQorICAgICAg
ICAgICAgdmFyIHBvaW50ID0gc2VsLmlzQmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdl
LmVuZDsKKyAgICAgICAgICAgIHZhciBlbmRQb2ludCA9IGRvYy5pbnNlcnQocG9pbnQsIGRvYy5n
ZXRUZXh0UmFuZ2UocmFuZ2UpLCBmYWxzZSk7CisgICAgICAgICAgICByYW5nZS5zdGFydCA9IHBv
aW50OworICAgICAgICAgICAgcmFuZ2UuZW5kID0gZW5kUG9pbnQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNlbC5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmV2ZXJzZSkKKyAgICAgICAg
fQorICAgIH07CisgICAgdGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGluZXNEb3duKGZpcnN0Um93LCBsYXN0Um93KTsK
KyAgICAgICAgfSk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVMaW5lc1VwID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGluZXNVcChmaXJzdFJvdywgbGFz
dFJvdyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0aW9u
KHJhbmdlLCB0b1Bvc2l0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLiRyZWFkT25seSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ubW92ZVRl
eHQocmFuZ2UsIHRvUG9zaXRpb24pOworICAgIH07CisgICAgdGhpcy5jb3B5TGluZXNVcCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RSb3csIGxh
c3RSb3cpIHsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kdXBsaWNhdGVMaW5lcyhmaXJzdFJv
dywgbGFzdFJvdyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICB0aGlzLmNvcHlMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92
ZUxpbmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICB0aGlzLiRtb3ZlTGluZXMgPSBmdW5jdGlvbihtb3ZlcikgeworICAg
ICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIGlmICghc2VsZWN0aW9uLmlzTXVsdGlM
aW5lKCkpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZSgpOwor
ICAgICAgICAgICAgdmFyIHJldmVyc2UgPSBzZWxlY3Rpb24uaXNCYWNrd2FyZHMoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBsaW5lc01vdmVkID0gbW92ZXIuY2FsbCh0aGlzLCByb3dzLmZp
cnN0LCByb3dzLmxhc3QpOworCisgICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgcmFu
Z2Uuc3RhcnQucm93ICs9IGxpbmVzTW92ZWQ7CisgICAgICAgICAgICByYW5nZS5lbmQucm93ICs9
IGxpbmVzTW92ZWQ7CisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFu
Z2UsIHJldmVyc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihyb3dzLmxhc3QrbGluZXNNb3ZlZCsxLCAwKTsKKyAg
ICAgICAgICAgIHNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24ubW92ZUN1cnNvclRvKHJvd3MuZmlyc3QrbGluZXNNb3ZlZCwgMCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy4kZ2V0U2VsZWN0
ZWRSb3dzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UoKS5jb2xsYXBzZVJvd3MoKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgZmlyc3Q6IHJhbmdlLnN0YXJ0LnJvdywKKyAgICAgICAgICAgIGxhc3Q6IHJhbmdlLmVuZC5y
b3cKKyAgICAgICAgfTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQgPSBm
dW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0NvbXBvc2l0aW9uKHRo
aXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7CisgICAgfTsKKworICAgIHRoaXMub25Db21wb3NpdGlv
blVwZGF0ZSA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDb21w
b3NpdGlvblRleHQodGV4dCk7CisgICAgfTsKKworICAgIHRoaXMub25Db21wb3NpdGlvbkVuZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDb21wb3NpdGlvbigpOwor
ICAgIH07CisgICAgdGhpcy5nZXRGaXJzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldExhc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnJlbmRlcmVyLmdldExhc3RWaXNpYmxlUm93KCk7CisgICAgfTsKKyAgICB0aGlzLmlzUm93
VmlzaWJsZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gKHJvdyA+PSB0aGlzLmdl
dEZpcnN0VmlzaWJsZVJvdygpICYmIHJvdyA8PSB0aGlzLmdldExhc3RWaXNpYmxlUm93KCkpOwor
ICAgIH07CisgICAgdGhpcy5pc1Jvd0Z1bGx5VmlzaWJsZSA9IGZ1bmN0aW9uKHJvdykgeworICAg
ICAgICByZXR1cm4gKHJvdyA+PSB0aGlzLnJlbmRlcmVyLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93
KCkgJiYgcm93IDw9IHRoaXMucmVuZGVyZXIuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpKTsKKyAg
ICB9OworICAgIHRoaXMuJGdldFZpc2libGVSb3dDb3VudCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKSAtIHRoaXMucmVuZGVy
ZXIuZ2V0U2Nyb2xsVG9wUm93KCkgKyAxOworICAgIH07CisKKyAgICB0aGlzLiRtb3ZlQnlQYWdl
ID0gZnVuY3Rpb24oZGlyLCBzZWxlY3QpIHsKKyAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5y
ZW5kZXJlcjsKKyAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucmVuZGVyZXIubGF5ZXJDb25maWc7
CisgICAgICAgIHZhciByb3dzID0gZGlyICogTWF0aC5mbG9vcihjb25maWcuaGVpZ2h0IC8gY29u
ZmlnLmxpbmVIZWlnaHQpOworCisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nKys7CisgICAg
ICAgIGlmIChzZWxlY3QgPT0gdHJ1ZSkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uJG1v
dmVTZWxlY3Rpb24oZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JC
eShyb3dzLCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdCA9
PSBmYWxzZSkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckJ5KHJvd3Ms
IDApOworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tOworCisgICAgICAgIHZhciBzY3Jv
bGxUb3AgPSByZW5kZXJlci5zY3JvbGxUb3A7CisKKyAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQnko
MCwgcm93cyAqIGNvbmZpZy5saW5lSGVpZ2h0KTsKKyAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxs
KQorICAgICAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsK
KworICAgICAgICByZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdFBhZ2VEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1v
dmVCeVBhZ2UoMSwgdHJ1ZSk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFBhZ2VVcCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xLCB0cnVlKTsKKyAgICB9OworICAg
IHRoaXMuZ290b1BhZ2VEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgdGhpcy4kbW92ZUJ5UGFn
ZSgxLCBmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLmdvdG9QYWdlVXAgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgZmFsc2UpOworICAgIH07CisgICAgdGhpcy5z
Y3JvbGxQYWdlRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEp
OworICAgIH07CisgICAgdGhpcy5zY3JvbGxQYWdlVXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kbW92ZUJ5UGFnZSgtMSk7CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvUm93ID0gZnVu
Y3Rpb24ocm93KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3cocm93KTsKKyAg
ICB9OworICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmlt
YXRlLCBjYWxsYmFjaykgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShsaW5l
LCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIHRoaXMuY2VudGVyU2Vs
ZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UoKTsKKyAgICAgICAgdmFyIHBvcyA9IHsKKyAgICAgICAgICAgIHJvdzogTWF0aC5m
bG9vcihyYW5nZS5zdGFydC5yb3cgKyAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdykg
LyAyKSwKKyAgICAgICAgICAgIGNvbHVtbjogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5jb2x1bW4g
KyAocmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbikgLyAyKQorICAgICAgICB9
CisgICAgICAgIHRoaXMucmVuZGVyZXIuYWxpZ25DdXJzb3IocG9zLCAwLjUpOworICAgIH07Cisg
ICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlzLmdldEN1cnNvclBv
c2l0aW9uU2NyZWVuID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24u
ZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7CisgICAg
fTsKKyAgICB0aGlzLmdldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RB
bGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAg
ICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0QWxsKCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Ny
b2xsaW5nIC09IDE7CisgICAgfTsKKyAgICB0aGlzLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAg
ICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHRo
aXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlz
Lm1vdmVDdXJzb3JUb1Bvc2l0aW9uID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHRoaXMuc2Vs
ZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CisgICAgfTsKKyAgICB0aGlzLmp1bXBU
b01hdGNoaW5nID0gZnVuY3Rpb24oc2VsZWN0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlz
LmdldEN1cnNvclBvc2l0aW9uKCk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZXNzaW9u
LmdldEJyYWNrZXRSYW5nZShjdXJzb3IpOworICAgICAgICBpZiAoIXJhbmdlKSB7CisgICAgICAg
ICAgICByYW5nZSA9IHRoaXMuZmluZCh7CisgICAgICAgICAgICAgICAgbmVlZGxlOiAvW3t9KClc
W1xdXS9nLAorICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6dHJ1ZSwKKyAgICAgICAgICAg
ICAgICBzdGFydDoge3JvdzogY3Vyc29yLnJvdywgY29sdW1uOiBjdXJzb3IuY29sdW1uIC0gMX0K
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB2YXIgcG9zID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAg
ICBpZiAocG9zLnJvdyA9PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJz
b3IuY29sdW1uKSA8IDIpCisgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0
QnJhY2tldFJhbmdlKHBvcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBvcyA9IHJh
bmdlICYmIHJhbmdlLmN1cnNvciB8fCBwb3M7CisgICAgICAgIGlmIChwb3MpIHsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UuaXNF
cXVhbCh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpKQorICAgICAgICAgICAgICAgICAgICB0aGlz
LmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RUbyhwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwor
ICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvcy5yb3csIHBvcy5jb2x1bW4pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdvdG9MaW5lID0gZnVu
Y3Rpb24obGluZU51bWJlciwgY29sdW1uLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuc2VsZWN0
aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi51bmZvbGQoe3Jvdzog
bGluZU51bWJlciAtIDEsIGNvbHVtbjogY29sdW1uIHx8IDB9KTsKKworICAgICAgICB0aGlzLiRi
bG9ja1Njcm9sbGluZyArPSAxOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsaW5lTnVtYmVy
IC0gMSwgY29sdW1uIHx8IDApOworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxOwor
CisgICAgICAgIGlmICghdGhpcy5pc1Jvd0Z1bGx5VmlzaWJsZShsaW5lTnVtYmVyIC0gMSkpCisg
ICAgICAgICAgICB0aGlzLnNjcm9sbFRvTGluZShsaW5lTnVtYmVyIC0gMSwgdHJ1ZSwgYW5pbWF0
ZSk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
eworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMubW92ZUN1cnNv
clRvKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVVcCA9IGZ1bmN0aW9u
KHRpbWVzKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIHRpbWVzID0gdGltZXMgfHwgMTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNv
ckJ5KC10aW1lcywgMCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlRG93biA9IGZ1bmN0aW9u
KHRpbWVzKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIHRpbWVzID0gdGltZXMgfHwgMTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNv
ckJ5KHRpbWVzLCAwKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVMZWZ0ID0gZnVuY3Rpb24o
dGltZXMpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFy
dDsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uU3RhcnQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGltZXMgPSB0aW1lcyB8
fCAxOworICAgICAgICAgICAgd2hpbGUgKHRpbWVzLS0pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGVmdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVS
aWdodCA9IGZ1bmN0aW9uKHRpbWVzKSB7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gdGhpcy5nZXRTZWxlY3Rp
b25SYW5nZSgpLmVuZDsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2Vs
ZWN0aW9uRW5kKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpbWVz
ID0gdGltZXMgfHwgMTsKKyAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclJpZ2h0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhp
cy5uYXZpZ2F0ZUxpbmVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdGlv
bi5tb3ZlQ3Vyc29yTGluZVN0YXJ0KCk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsK
KyAgICB9OworICAgIHRoaXMubmF2aWdhdGVMaW5lRW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lRW5kKCk7CisgICAgICAgIHRoaXMuY2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVGaWxlRW5kID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDsKKyAg
ICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVFbmQoKTsKKyAgICAgICAgdGhpcy5j
bGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmco
c2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVGaWxlU3RhcnQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9wOwor
ICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KCk7CisgICAgICAgIHRo
aXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xs
aW5nKHNjcm9sbFRvcCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlV29yZFJpZ2h0ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTsK
KyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0
ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJz
b3JXb3JkTGVmdCgpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAg
ICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyZXBsYWNlbWVudCwgb3B0aW9ucykgeworICAgICAg
ICBpZiAob3B0aW9ucykKKyAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7CisK
KyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTsKKyAg
ICAgICAgdmFyIHJlcGxhY2VkID0gMDsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAg
IHJldHVybiByZXBsYWNlZDsKKworICAgICAgICBpZiAodGhpcy4kdHJ5UmVwbGFjZShyYW5nZSwg
cmVwbGFjZW1lbnQpKSB7CisgICAgICAgICAgICByZXBsYWNlZCA9IDE7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJhbmdlICE9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZShyYW5nZSk7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9s
bFNlbGVjdGlvbkludG9WaWV3KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJlcGxhY2VkOworICAgIH07CisgICAgdGhpcy5yZXBsYWNlQWxsID0g
ZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMpIHsK
KyAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgcmFuZ2VzID0gdGhpcy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTsKKyAg
ICAgICAgdmFyIHJlcGxhY2VkID0gMDsKKyAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKQorICAg
ICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOworCisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5n
ICs9IDE7CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2Uo
KTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnNlbGVjdGlv
bi5tb3ZlQ3Vyc29yVG8oMCwgMCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5n
dGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgaWYodGhpcy4kdHJ5UmVwbGFjZShy
YW5nZXNbaV0sIHJlcGxhY2VtZW50KSkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VkKys7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb25SYW5nZShzZWxlY3Rpb24pOworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAx
OworCisgICAgICAgIHJldHVybiByZXBsYWNlZDsKKyAgICB9OworCisgICAgdGhpcy4kdHJ5UmVw
bGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCByZXBsYWNlbWVudCkgeworICAgICAgICB2YXIgaW5wdXQg
PSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgcmVwbGFjZW1lbnQg
PSB0aGlzLiRzZWFyY2gucmVwbGFjZShpbnB1dCwgcmVwbGFjZW1lbnQpOworICAgICAgICBpZiAo
cmVwbGFjZW1lbnQgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHJhbmdlLmVuZCA9IHRoaXMuc2Vz
c2lvbi5yZXBsYWNlKHJhbmdlLCByZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gcmFu
Z2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgIH07CisgICAgdGhpcy5nZXRMYXN0U2VhcmNoT3B0aW9ucyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kc2VhcmNoLmdldE9wdGlvbnMoKTsKKyAgICB9OworICAgIHRo
aXMuZmluZCA9IGZ1bmN0aW9uKG5lZWRsZSwgb3B0aW9ucywgYW5pbWF0ZSkgeworICAgICAgICBp
ZiAoIW9wdGlvbnMpCisgICAgICAgICAgICBvcHRpb25zID0ge307CisKKyAgICAgICAgaWYgKHR5
cGVvZiBuZWVkbGUgPT0gInN0cmluZyIgfHwgbmVlZGxlIGluc3RhbmNlb2YgUmVnRXhwKQorICAg
ICAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGU7CisgICAgICAgIGVsc2UgaWYgKHR5cGVv
ZiBuZWVkbGUgPT0gIm9iamVjdCIpCisgICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9ucywgbmVl
ZGxlKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwor
ICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgbmVlZGxl
ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkKKyAgICAgICAgICAgICAgICB8fCB0
aGlzLiRzZWFyY2guJG9wdGlvbnMubmVlZGxlOworICAgICAgICAgICAgaWYgKCFuZWVkbGUpIHsK
KyAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uu
c3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIG5lZWRsZSA9
IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOiBuZWVkbGV9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7CisgICAgICAgIGlmICghb3B0aW9ucy5z
dGFydCkKKyAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe3N0YXJ0OiByYW5nZX0pOworCisg
ICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7Cisg
ICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRTY3JvbGwpCisgICAgICAgICAgICByZXR1cm4gbmV3
UmFuZ2U7CisgICAgICAgIGlmIChuZXdSYW5nZSkgeworICAgICAgICAgICAgdGhpcy5yZXZlYWxS
YW5nZShuZXdSYW5nZSwgYW5pbWF0ZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMuYmFja3dhcmRzKQorICAgICAgICAgICAgcmFu
Z2Uuc3RhcnQgPSByYW5nZS5lbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdlLmVu
ZCA9IHJhbmdlLnN0YXJ0OworICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7
CisgICAgfTsKKyAgICB0aGlzLmZpbmROZXh0ID0gZnVuY3Rpb24ob3B0aW9ucywgYW5pbWF0ZSkg
eworICAgICAgICB0aGlzLmZpbmQoe3NraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IGZhbHNl
fSwgb3B0aW9ucywgYW5pbWF0ZSk7CisgICAgfTsKKyAgICB0aGlzLmZpbmRQcmV2aW91cyA9IGZ1
bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHsKKyAgICAgICAgdGhpcy5maW5kKG9wdGlvbnMsIHtz
a2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiB0cnVlfSwgYW5pbWF0ZSk7CisgICAgfTsKKwor
ICAgIHRoaXMucmV2ZWFsUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgYW5pbWF0ZSkgeworICAgICAg
ICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOworICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xk
KHJhbmdlKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2Up
OworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxOworCisgICAgICAgIHZhciBzY3Jv
bGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5z
Y3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCAwLjUpOworICAg
ICAgICBpZiAoYW5pbWF0ZSAhPSBmYWxzZSkKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYW5p
bWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOworICAgIH07CisgICAgdGhpcy51bmRvID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nKys7CisgICAgICAgIHRoaXMuc2Vz
c2lvbi5nZXRVbmRvTWFuYWdlcigpLnVuZG8oKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxp
bmctLTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAw
LjUpOworICAgIH07CisgICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
JGJsb2NrU2Nyb2xsaW5nKys7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigp
LnJlZG8oKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmctLTsKKyAgICAgICAgdGhpcy5y
ZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUpOworICAgIH07CisgICAgdGhp
cy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuZGVzdHJveSgp
OworICAgIH07CisKK30pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7CisKKworZXhwb3J0cy5FZGl0
b3IgPSBFZGl0b3I7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9sYW5nJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCitleHBvcnRzLnN0cmluZ1JldmVyc2UgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAg
ICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cit9OworCitleHBv
cnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CisgICAgdmFyIHJl
c3VsdCA9ICcnOworICAgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICAgICAgaWYgKGNvdW50ICYg
MSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmc7CisKKyAgICAgICAgaWYgKGNvdW50ID4+
PSAxKQorICAgICAgICAgICAgc3RyaW5nICs9IHN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK307CisKK3ZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKK3ZhciB0cmltRW5k
UmVnZXhwID0gL1xzXHMqJC87CisKK2V4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAo
c3RyaW5nKSB7CisgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgJycp
OworfTsKKworZXhwb3J0cy5zdHJpbmdUcmltUmlnaHQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7Cisg
ICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICcnKTsKK307CisKK2V4cG9y
dHMuY29weU9iamVjdCA9IGZ1bmN0aW9uKG9iaikgeworICAgIHZhciBjb3B5ID0ge307CisgICAg
Zm9yICh2YXIga2V5IGluIG9iaikgeworICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsKKyAg
ICB9CisgICAgcmV0dXJuIGNvcHk7Cit9OworCitleHBvcnRzLmNvcHlBcnJheSA9IGZ1bmN0aW9u
KGFycmF5KXsKKyAgICB2YXIgY29weSA9IFtdOworICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5s
ZW5ndGg7IGk8bDsgaSsrKSB7CisgICAgICAgIGlmIChhcnJheVtpXSAmJiB0eXBlb2YgYXJyYXlb
aV0gPT0gIm9iamVjdCIpCisgICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5jb3B5T2JqZWN0KCBh
cnJheVtpXSApOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ld
OworICAgIH0KKyAgICByZXR1cm4gY29weTsKK307CisKK2V4cG9ydHMuZGVlcENvcHkgPSBmdW5j
dGlvbiAob2JqKSB7CisgICAgaWYgKHR5cGVvZiBvYmogIT0gIm9iamVjdCIpIHsKKyAgICAgICAg
cmV0dXJuIG9iajsKKyAgICB9CisgICAgCisgICAgdmFyIGNvcHkgPSBvYmouY29uc3RydWN0b3Io
KTsKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgICAgIGlmICh0eXBlb2Ygb2JqW2tl
eV0gPT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgIGNvcHlba2V5XSA9IHRoaXMuZGVlcENvcHko
b2JqW2tleV0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29weVtrZXldID0gb2Jq
W2tleV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvcHk7Cit9OworCitleHBvcnRz
LmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKKyAgICB2YXIgbWFwID0ge307CisgICAgZm9y
ICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgeworICAgICAgICBtYXBbYXJyW2ldXSA9IDE7
CisgICAgfQorICAgIHJldHVybiBtYXA7CisKK307CisKK2V4cG9ydHMuY3JlYXRlTWFwID0gZnVu
Y3Rpb24ocHJvcHMpIHsKKyAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICBm
b3IgKHZhciBpIGluIHByb3BzKSB7CisgICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOworICAgIH0K
KyAgICByZXR1cm4gbWFwOworfTsKK2V4cG9ydHMuYXJyYXlSZW1vdmUgPSBmdW5jdGlvbihhcnJh
eSwgdmFsdWUpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPD0gYXJyYXkubGVuZ3RoOyBpKyspIHsK
KyAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CisgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7
CisgICAgfQorICB9Cit9OworCitleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikg
eworICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKis/XiR7fSgpfFtcXVwvXFxdKS9nLCAnXFwk
MScpOworfTsKKworZXhwb3J0cy5lc2NhcGVIVE1MID0gZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0
dXJuIHN0ci5yZXBsYWNlKC8mL2csICImIzM4OyIpLnJlcGxhY2UoLyIvZywgIiYjMzQ7IikucmVw
bGFjZSgvJy9nLCAiJiMzOTsiKS5yZXBsYWNlKC88L2csICImIzYwOyIpOworfTsKKworZXhwb3J0
cy5nZXRNYXRjaE9mZnNldHMgPSBmdW5jdGlvbihzdHJpbmcsIHJlZ0V4cCkgeworICAgIHZhciBt
YXRjaGVzID0gW107CisKKyAgICBzdHJpbmcucmVwbGFjZShyZWdFeHAsIGZ1bmN0aW9uKHN0cikg
eworICAgICAgICBtYXRjaGVzLnB1c2goeworICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNb
YXJndW1lbnRzLmxlbmd0aC0yXSwKKyAgICAgICAgICAgIGxlbmd0aDogc3RyLmxlbmd0aAorICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIHJldHVybiBtYXRjaGVzOworfTsKK2V4cG9ydHMuZGVm
ZXJyZWRDYWxsID0gZnVuY3Rpb24oZmNuKSB7CisKKyAgICB2YXIgdGltZXIgPSBudWxsOworICAg
IHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aW1lciA9IG51bGw7CisgICAg
ICAgIGZjbigpOworICAgIH07CisKKyAgICB2YXIgZGVmZXJyZWQgPSBmdW5jdGlvbih0aW1lb3V0
KSB7CisgICAgICAgIGRlZmVycmVkLmNhbmNlbCgpOworICAgICAgICB0aW1lciA9IHNldFRpbWVv
dXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAg
ICB9OworCisgICAgZGVmZXJyZWQuc2NoZWR1bGUgPSBkZWZlcnJlZDsKKworICAgIGRlZmVycmVk
LmNhbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jYW5jZWwoKTsKKyAgICAgICAgZmNu
KCk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9OworCisgICAgZGVmZXJyZWQuY2Fu
Y2VsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CisgICAgICAg
IHRpbWVyID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgIH07CisKKyAgICBy
ZXR1cm4gZGVmZXJyZWQ7Cit9OworCisKK2V4cG9ydHMuZGVsYXllZENhbGwgPSBmdW5jdGlvbihm
Y24sIGRlZmF1bHRUaW1lb3V0KSB7CisgICAgdmFyIHRpbWVyID0gbnVsbDsKKyAgICB2YXIgY2Fs
bGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAgICAgICBmY24o
KTsKKyAgICB9OworCisgICAgdmFyIF9zZWxmID0gZnVuY3Rpb24odGltZW91dCkgeworICAgICAg
ICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpOworICAgICAgICB0aW1lciA9IHNldFRpbWVv
dXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOworICAgIH07CisKKyAgICBf
c2VsZi5kZWxheSA9IF9zZWxmOworICAgIF9zZWxmLnNjaGVkdWxlID0gZnVuY3Rpb24odGltZW91
dCkgeworICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKKyAgICAgICAgICAgIHRpbWVyID0gc2V0
VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTsKKyAgICB9OworCisgICAgX3NlbGYuY2Fs
bCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNhbmNlbCgpOworICAgICAgICBmY24oKTsK
KyAgICB9OworCisgICAgX3NlbGYuY2FuY2VsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRpbWVy
ICYmIGNsZWFyVGltZW91dCh0aW1lcik7CisgICAgICAgIHRpbWVyID0gbnVsbDsKKyAgICB9Owor
CisgICAgX3NlbGYuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aW1l
cjsKKyAgICB9OworCisgICAgcmV0dXJuIF9zZWxmOworfTsKK30pOworCithY2UuZGVmaW5lKCdh
Y2Uva2V5Ym9hcmQvdGV4dGlucHV0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvdXNlcmFnZW50JywgJ2FjZS9saWIvZG9tJywgJ2Fj
ZS9saWIvbGFuZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKK3ZhciB1c2VyYWdlbnQgPSByZXF1
aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIp
OwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIEJST0tFTl9TRVREQVRB
ID0gdXNlcmFnZW50LmlzQ2hyb21lIDwgMTg7CisKK3ZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihw
YXJlbnROb2RlLCBob3N0KSB7CisgICAgdmFyIHRleHQgPSBkb20uY3JlYXRlRWxlbWVudCgidGV4
dGFyZWEiKTsKKyAgICB0ZXh0LmNsYXNzTmFtZSA9ICJhY2VfdGV4dC1pbnB1dCI7CisgICAgaWYg
KHVzZXJhZ2VudC5pc1RvdWNoUGFkKQorICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZSgieC1wYWxt
LWRpc2FibGUtYXV0by1jYXAiLCB0cnVlKTsKKworICAgIHRleHQud3JhcCA9ICJvZmYiOworICAg
IHRleHQuYXV0b2NvcnJlY3QgPSAib2ZmIjsKKyAgICB0ZXh0LmF1dG9jYXBpdGFsaXplID0gIm9m
ZiI7CisgICAgdGV4dC5zcGVsbGNoZWNrID0gZmFsc2U7CisKKyAgICB0ZXh0LnN0eWxlLmJvdHRv
bSA9ICIyMDAwZW0iOworICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHQsIHBhcmVudE5v
ZGUuZmlyc3RDaGlsZCk7CisKKyAgICB2YXIgUExBQ0VIT0xERVIgPSAiXHgwMVx4MDEiOworCisg
ICAgdmFyIGN1dCA9IGZhbHNlOworICAgIHZhciBjb3BpZWQgPSBmYWxzZTsKKyAgICB2YXIgcGFz
dGVkID0gZmFsc2U7CisgICAgdmFyIGluQ29tcG9zdGlvbiA9IGZhbHNlOworICAgIHZhciB0ZW1w
U3R5bGUgPSAnJzsKKyAgICB2YXIgaXNTZWxlY3Rpb25FbXB0eSA9IHRydWU7CisgICAgdHJ5IHsg
dmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2go
ZSkge30KKyAgICAKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiYmx1ciIsIGZ1bmN0aW9u
KCkgeworICAgICAgICBob3N0Lm9uQmx1cigpOworICAgICAgICBpc0ZvY3VzZWQgPSBmYWxzZTsK
KyAgICB9KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiZm9jdXMiLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgaXNGb2N1c2VkID0gdHJ1ZTsKKyAgICAgICAgaG9zdC5vbkZvY3VzKCk7Cisg
ICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7CisgICAgfSk7CisgICAgdGhpcy5mb2N1cyA9IGZ1bmN0
aW9uKCkgeyB0ZXh0LmZvY3VzKCk7IH07CisgICAgdGhpcy5ibHVyID0gZnVuY3Rpb24oKSB7IHRl
eHQuYmx1cigpOyB9OworICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBpc0ZvY3VzZWQ7CisgICAgfTsKKyAgICB2YXIgc3luY1NlbGVjdGlvbiA9IGxhbmcu
ZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7CisgICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNlbGVj
dGlvbihpc1NlbGVjdGlvbkVtcHR5KTsKKyAgICB9KTsKKyAgICB2YXIgc3luY1ZhbHVlID0gbGFu
Zy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHsKKyAgICAgICAgIGlmICghaW5Db21wb3N0aW9uKSB7
CisgICAgICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7CisgICAgICAgICAgICBpc0Zv
Y3VzZWQgJiYgcmVzZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgIH0KKyAgICB9KTsKKworICAgIGZ1
bmN0aW9uIHJlc2V0U2VsZWN0aW9uKGlzRW1wdHkpIHsKKyAgICAgICAgaWYgKGluQ29tcG9zdGlv
bikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gaXNF
bXB0eSA/IDIgOiAxOworICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gMjsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIHRleHQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIH0gY2F0Y2goZSl7fQorICAgIH0KKworICAgIGZ1bmN0aW9u
IHJlc2V0VmFsdWUoKSB7CisgICAgICAgIGlmIChpbkNvbXBvc3Rpb24pCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRleHQudmFsdWUgPSBQTEFDRUhPTERFUjsKKyAgICAgICAgaWYgKHVz
ZXJhZ2VudC5pc1dlYktpdCkKKyAgICAgICAgICAgIHN5bmNWYWx1ZS5zY2hlZHVsZSgpOworICAg
IH0KKworICAgIHVzZXJhZ2VudC5pc1dlYktpdCB8fCBob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2No
YW5nZVNlbGVjdGlvbicsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaG9zdC5zZWxlY3Rpb24u
aXNFbXB0eSgpICE9IGlzU2VsZWN0aW9uRW1wdHkpIHsKKyAgICAgICAgICAgIGlzU2VsZWN0aW9u
RW1wdHkgPSAhaXNTZWxlY3Rpb25FbXB0eTsKKyAgICAgICAgICAgIHN5bmNTZWxlY3Rpb24uc2No
ZWR1bGUoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgcmVzZXRWYWx1ZSgpOworICAgIGlm
IChpc0ZvY3VzZWQpCisgICAgICAgIGhvc3Qub25Gb2N1cygpOworCisKKyAgICB2YXIgaXNBbGxT
ZWxlY3RlZCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRleHQuc2VsZWN0aW9u
U3RhcnQgPT09IDAgJiYgdGV4dC5zZWxlY3Rpb25FbmQgPT09IHRleHQudmFsdWUubGVuZ3RoOwor
ICAgIH07CisgICAgaWYgKCF0ZXh0LnNldFNlbGVjdGlvblJhbmdlICYmIHRleHQuY3JlYXRlVGV4
dFJhbmdlKSB7CisgICAgICAgIHRleHQuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
LmNyZWF0ZVRleHRSYW5nZSgpOworICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7Cisg
ICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHNlbGVjdGlvblN0YXJ0KTsK
KyAgICAgICAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHNlbGVjdGlvbkVuZCk7Cisg
ICAgICAgICAgICByYW5nZS5zZWxlY3QoKTsKKyAgICAgICAgfTsKKyAgICAgICAgaXNBbGxTZWxl
Y3RlZCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgdmFyIHJhbmdlID0gdGV4dC5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp
OworICAgICAgICAgICAgfWNhdGNoKGUpIHt9CisgICAgICAgICAgICBpZiAoIXJhbmdlIHx8IHJh
bmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZXh0KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJhbmdlLnRleHQgPT0gdGV4dC52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAodXNlcmFnZW50LmlzT2xkSUUpIHsKKyAgICAgICAgdmFyIGluUHJvcGVydHlDaGFuZ2Ug
PSBmYWxzZTsKKyAgICAgICAgdmFyIG9uUHJvcGVydHlDaGFuZ2UgPSBmdW5jdGlvbihlKXsKKyAg
ICAgICAgICAgIGlmIChpblByb3BlcnR5Q2hhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHZhciBkYXRhID0gdGV4dC52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpbkNv
bXBvc3Rpb24gfHwgIWRhdGEgfHwgZGF0YSA9PSBQTEFDRUhPTERFUikKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZSAmJiBkYXRhID09IFBMQUNFSE9MREVSWzBdKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzeW5jUHJvcGVydHkuc2NoZWR1bGUoKTsKKworICAgICAg
ICAgICAgc2VuZFRleHQoZGF0YSk7CisgICAgICAgICAgICBpblByb3BlcnR5Q2hhbmdlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJlc2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGluUHJvcGVydHlDaGFu
Z2UgPSBmYWxzZTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHN5bmNQcm9wZXJ0eSA9IGxhbmcu
ZGVsYXllZENhbGwob25Qcm9wZXJ0eUNoYW5nZSk7CisgICAgICAgIGV2ZW50LmFkZExpc3RlbmVy
KHRleHQsICJwcm9wZXJ0eWNoYW5nZSIsIG9uUHJvcGVydHlDaGFuZ2UpOworCisgICAgICAgIHZh
ciBrZXl0YWJsZSA9IHsgMTM6MSwgMjc6MSB9OworICAgICAgICBldmVudC5hZGRMaXN0ZW5lcih0
ZXh0LCAia2V5dXAiLCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKGluQ29tcG9zdGlv
biAmJiAoIXRleHQudmFsdWUgfHwga2V5dGFibGVbZS5rZXlDb2RlXSkpCisgICAgICAgICAgICAg
ICAgc2V0VGltZW91dChvbkNvbXBvc2l0aW9uRW5kLCAwKTsKKyAgICAgICAgICAgIGlmICgodGV4
dC52YWx1ZS5jaGFyQ29kZUF0KDApfHwwKSA8IDEyOSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluQ29tcG9zdGlvbiA/IG9uQ29tcG9zaXRp
b25VcGRhdGUoKSA6IG9uQ29tcG9zaXRpb25TdGFydCgpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICB2YXIgb25TZWxlY3QgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChjdXQpIHsKKyAg
ICAgICAgICAgIGN1dCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChjb3BpZWQpIHsKKyAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FsbFNlbGVjdGVkKHRleHQp
KSB7CisgICAgICAgICAgICBob3N0LnNlbGVjdEFsbCgpOworICAgICAgICAgICAgcmVzZXRTZWxl
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2YXIgc2VuZFRleHQgPSBmdW5jdGlv
bihkYXRhKSB7CisgICAgICAgIGlmIChwYXN0ZWQpIHsKKyAgICAgICAgICAgIHJlc2V0U2VsZWN0
aW9uKCk7CisgICAgICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgICAgICBob3N0Lm9uUGFz
dGUoZGF0YSk7CisgICAgICAgICAgICBwYXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
IChkYXRhID09IFBMQUNFSE9MREVSWzBdKSB7CisgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5k
KCJkZWwiLCB7c291cmNlOiAiYWNlIn0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGRhdGEuc3Vic3RyaW5nKDAsIDIpID09IFBMQUNFSE9MREVSKQorICAgICAgICAgICAgICAg
IGRhdGEgPSBkYXRhLnN1YnN0cigyKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbMF0gPT0g
UExBQ0VIT0xERVJbMF0pCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDEpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09IFBMQUNFSE9MREVS
WzBdKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTsKKyAgICAgICAg
ICAgIGlmIChkYXRhW2RhdGEubGVuZ3RoIC0gMV0gPT0gUExBQ0VIT0xERVJbMF0pCisgICAgICAg
ICAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgICAgICBob3N0Lm9uVGV4dElucHV0KGRhdGEpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgb25JbnB1dCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgaWYgKGluQ29tcG9zdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGRh
dGEgPSB0ZXh0LnZhbHVlOworICAgICAgICByZXNldFZhbHVlKCk7CisKKyAgICAgICAgc2VuZFRl
eHQoZGF0YSk7CisgICAgfTsKKworICAgIHZhciBvbkN1dCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgdmFyIGRhdGEgPSBob3N0LmdldENvcHlUZXh0KCk7CisgICAgICAgIGlmICghZGF0YSkgewor
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0
YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKKworICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSAm
JiAhQlJPS0VOX1NFVERBVEEpIHsKKyAgICAgICAgICAgIHZhciBzdXBwb3J0ZWQgPSBjbGlwYm9h
cmREYXRhLnNldERhdGEoIlRleHQiLCBkYXRhKTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0ZWQp
IHsKKyAgICAgICAgICAgICAgICBob3N0Lm9uQ3V0KCk7CisgICAgICAgICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXN1cHBvcnRlZCkgeworICAgICAgICAgICAgY3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRl
eHQudmFsdWUgPSBkYXRhOworICAgICAgICAgICAgdGV4dC5zZWxlY3QoKTsKKyAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBjdXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICByZXNldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgcmVzZXRTZWxlY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBob3N0Lm9uQ3V0KCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB2YXIgb25Db3B5ID0gZnVuY3Rpb24oZSkgeworICAgICAg
ICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQoKTsKKyAgICAgICAgaWYgKCFkYXRhKSB7Cisg
ICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRh
IHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhOworICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSAmJiAh
QlJPS0VOX1NFVERBVEEpIHsKKyAgICAgICAgICAgIHZhciBzdXBwb3J0ZWQgPSBjbGlwYm9hcmRE
YXRhLnNldERhdGEoIlRleHQiLCBkYXRhKTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0ZWQpIHsK
KyAgICAgICAgICAgICAgICBob3N0Lm9uQ29weSgpOworICAgICAgICAgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgh
c3VwcG9ydGVkKSB7CisgICAgICAgICAgICBjb3BpZWQgPSB0cnVlOworICAgICAgICAgICAgdGV4
dC52YWx1ZSA9IGRhdGE7CisgICAgICAgICAgICB0ZXh0LnNlbGVjdCgpOworICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICByZXNldFNlbGVj
dGlvbigpOworICAgICAgICAgICAgICAgIGhvc3Qub25Db3B5KCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB2YXIgb25QYXN0ZSA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBi
b2FyZERhdGE7CisKKyAgICAgICAgaWYgKGNsaXBib2FyZERhdGEpIHsKKyAgICAgICAgICAgIHZh
ciBkYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0Iik7CisgICAgICAgICAgICBpZiAo
ZGF0YSkKKyAgICAgICAgICAgICAgICBob3N0Lm9uUGFzdGUoZGF0YSk7CisgICAgICAgICAgICBp
ZiAodXNlcmFnZW50LmlzSUUpCisgICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXNldFNlbGVj
dGlvbik7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRleHQudmFsdWUgPSAiIjsKKyAgICAgICAgICAg
IHBhc3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZXZlbnQuYWRkQ29tbWFu
ZEtleUxpc3RlbmVyKHRleHQsIGhvc3Qub25Db21tYW5kS2V5LmJpbmQoaG9zdCkpOworCisgICAg
ZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInNlbGVjdCIsIG9uU2VsZWN0KTsKKworICAgIGV2ZW50
LmFkZExpc3RlbmVyKHRleHQsICJpbnB1dCIsIG9uSW5wdXQpOworCisgICAgZXZlbnQuYWRkTGlz
dGVuZXIodGV4dCwgImN1dCIsIG9uQ3V0KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAi
Y29weSIsIG9uQ29weSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInBhc3RlIiwgb25Q
YXN0ZSk7CisgICAgaWYgKCEoJ29uY3V0JyBpbiB0ZXh0KSB8fCAhKCdvbmNvcHknIGluIHRleHQp
IHx8ICEoJ29ucGFzdGUnIGluIHRleHQpKXsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIocGFy
ZW50Tm9kZSwgImtleWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBpZiAoKHVzZXJh
Z2VudC5pc01hYyAmJiAhZS5tZXRhS2V5KSB8fCAhZS5jdHJsS2V5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgNjc6CisgICAgICAgICAgICAgICAgICAgIG9uQ29weShlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA4NjoKKyAgICAgICAgICAgICAgICAg
ICAgb25QYXN0ZShlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA4ODoKKyAgICAgICAgICAgICAgICAgICAgb25DdXQoZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgdmFy
IG9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaW5Db21wb3N0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKKyAgICAgICAgc2V0
VGltZW91dChvbkNvbXBvc2l0aW9uVXBkYXRlLCAwKTsKKyAgICB9OworCisgICAgdmFyIG9uQ29t
cG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFpbkNvbXBvc3Rpb24p
IHJldHVybjsKKyAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlKHRleHQudmFsdWUpOwor
ICAgIH07CisKKyAgICB2YXIgb25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgaW5Db21wb3N0aW9uID0gZmFsc2U7CisgICAgICAgIGhvc3Qub25Db21wb3NpdGlvbkVuZCgp
OworICAgIH07CisKKyAgICB2YXIgc3luY0NvbXBvc2l0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChv
bkNvbXBvc2l0aW9uVXBkYXRlLCA1MCk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAi
Y29tcG9zaXRpb25zdGFydCIsIG9uQ29tcG9zaXRpb25TdGFydCk7CisgICAgZXZlbnQuYWRkTGlz
dGVuZXIodGV4dCwgdXNlcmFnZW50LmlzR2Vja28gPyAidGV4dCIgOiAia2V5dXAiLCBmdW5jdGlv
bigpe3N5bmNDb21wb3NpdGlvbi5zY2hlZHVsZSgpfSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIo
dGV4dCwgImNvbXBvc2l0aW9uZW5kIiwgb25Db21wb3NpdGlvbkVuZCk7CisKKyAgICB0aGlzLmdl
dEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgfTsKKwor
ICAgIHRoaXMuc2V0UmVhZE9ubHkgPSBmdW5jdGlvbihyZWFkT25seSkgeworICAgICAgIHRleHQu
cmVhZE9ubHkgPSByZWFkT25seTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbnRleHRNZW51ID0g
ZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIXRlbXBTdHlsZSkKKyAgICAgICAgICAgIHRlbXBT
dHlsZSA9IHRleHQuc3R5bGUuY3NzVGV4dDsKKworICAgICAgICB0ZXh0LnN0eWxlLmNzc1RleHQg
PSAiei1pbmRleDoxMDAwMDA7IiArICh1c2VyYWdlbnQuaXNJRSA/ICJvcGFjaXR5OjAuMTsiIDog
IiIpOworCisgICAgICAgIHJlc2V0U2VsZWN0aW9uKGhvc3Quc2VsZWN0aW9uLmlzRW1wdHkoKSk7
CisgICAgICAgIGhvc3QuX2VtaXQoIm5hdGl2ZWNvbnRleHRtZW51Iiwge3RhcmdldDogaG9zdH0p
OworICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOworICAgICAgICB2YXIgbW92ZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIHRleHQu
c3R5bGUubGVmdCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIDIgKyAicHgiOworICAgICAgICAg
ICAgdGV4dC5zdHlsZS50b3AgPSBlLmNsaWVudFkgLSByZWN0LnRvcCAtIDIgKyAicHgiOworICAg
ICAgICB9OworICAgICAgICBtb3ZlKGUpOworCisgICAgICAgIGlmIChlLnR5cGUgIT0gIm1vdXNl
ZG93biIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGhvc3QucmVuZGVyZXIu
JGtlZXBUZXh0QXJlYUF0Q3Vyc29yKQorICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4ka2VlcFRl
eHRBcmVhQXRDdXJzb3IgPSBudWxsOworICAgICAgICBpZiAodXNlcmFnZW50LmlzV2luKQorICAg
ICAgICAgICAgZXZlbnQuY2FwdHVyZShob3N0LmNvbnRhaW5lciwgbW92ZSwgb25Db250ZXh0TWVu
dUNsb3NlKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNvbnRleHRNZW51Q2xvc2UgPSBvbkNvbnRl
eHRNZW51Q2xvc2U7CisgICAgZnVuY3Rpb24gb25Db250ZXh0TWVudUNsb3NlKCkgeworICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wU3R5bGUpIHsK
KyAgICAgICAgICAgICAgICB0ZXh0LnN0eWxlLmNzc1RleHQgPSB0ZW1wU3R5bGU7CisgICAgICAg
ICAgICAgICAgdGVtcFN0eWxlID0gJyc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LCAwKTsKKyAgICB9CisgICAgaWYgKCF1c2VyYWdlbnQuaXNHZWNr
bykgeworICAgICAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29udGV4dG1lbnUiLCBmdW5j
dGlvbihlKSB7CisgICAgICAgICAgICBob3N0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpOwor
ICAgICAgICAgICAgb25Db250ZXh0TWVudUNsb3NlKCk7CisgICAgICAgIH0pOworICAgIH0KK307
CisKK2V4cG9ydHMuVGV4dElucHV0ID0gVGV4dElucHV0OworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9tb3VzZS9tb3VzZV9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvdXNlcmFnZW50JywgJ2FjZS9tb3VzZS9kZWZhdWx0
X2hhbmRsZXJzJywgJ2FjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyJywgJ2FjZS9tb3Vz
ZS9tb3VzZV9ldmVudCcsICdhY2UvbW91c2UvZHJhZ2Ryb3AnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50
Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIERl
ZmF1bHRIYW5kbGVycyA9IHJlcXVpcmUoIi4vZGVmYXVsdF9oYW5kbGVycyIpLkRlZmF1bHRIYW5k
bGVyczsKK3ZhciBEZWZhdWx0R3V0dGVySGFuZGxlciA9IHJlcXVpcmUoIi4vZGVmYXVsdF9ndXR0
ZXJfaGFuZGxlciIpLkd1dHRlckhhbmRsZXI7Cit2YXIgTW91c2VFdmVudCA9IHJlcXVpcmUoIi4v
bW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50OwordmFyIERyYWdkcm9wSGFuZGxlciA9IHJlcXVpcmUo
Ii4vZHJhZ2Ryb3AiKS5EcmFnZHJvcEhhbmRsZXI7CisKK3ZhciBNb3VzZUhhbmRsZXIgPSBmdW5j
dGlvbihlZGl0b3IpIHsKKyAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKworICAgIG5ldyBEZWZh
dWx0SGFuZGxlcnModGhpcyk7CisgICAgbmV3IERlZmF1bHRHdXR0ZXJIYW5kbGVyKHRoaXMpOwor
ICAgIG5ldyBEcmFnZHJvcEhhbmRsZXIodGhpcyk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihl
ZGl0b3IuY29udGFpbmVyLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBlZGl0
b3IuZm9jdXMoKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAg
IH0pOworCisgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLnJlbmRlcmVyLmdldE1vdXNlRXZl
bnRUYXJnZXQoKTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImNsaWNrIiwg
dGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiY2xpY2siKSk7CisgICAgZXZlbnQuYWRkTGlz
dGVuZXIobW91c2VUYXJnZXQsICJtb3VzZW1vdmUiLCB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhp
cywgIm1vdXNlbW92ZSIpKTsKKyAgICBldmVudC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKG1v
dXNlVGFyZ2V0LCBbMzAwLCAzMDAsIDI1MF0sIHRoaXMsICJvbk1vdXNlRXZlbnQiKTsKKyAgICBl
dmVudC5hZGRNb3VzZVdoZWVsTGlzdGVuZXIoZWRpdG9yLmNvbnRhaW5lciwgdGhpcy5vbk1vdXNl
V2hlZWwuYmluZCh0aGlzLCAibW91c2V3aGVlbCIpKTsKKworICAgIHZhciBndXR0ZXJFbCA9IGVk
aXRvci5yZW5kZXJlci4kZ3V0dGVyOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAi
bW91c2Vkb3duIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVybW91c2Vkb3du
IikpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAiY2xpY2siLCB0aGlzLm9uTW91
c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJjbGljayIpKTsKKyAgICBldmVudC5hZGRMaXN0ZW5l
cihndXR0ZXJFbCwgImRibGNsaWNrIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0
dGVyZGJsY2xpY2siKSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJtb3VzZW1v
dmUiLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJtb3VzZW1vdmUiKSk7Cit9
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRzY3JvbGxTcGVlZCA9IDE7CisgICAgdGhp
cy5zZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKHNwZWVkKSB7CisgICAgICAgIHRoaXMuJHNjcm9s
bFNwZWVkID0gc3BlZWQ7CisgICAgfTsKKworICAgIHRoaXMuZ2V0U2Nyb2xsU3BlZWQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFNwZWVkOworICAgIH07CisKKyAg
ICB0aGlzLm9uTW91c2VFdmVudCA9IGZ1bmN0aW9uKG5hbWUsIGUpIHsKKyAgICAgICAgdGhpcy5l
ZGl0b3IuX2VtaXQobmFtZSwgbmV3IE1vdXNlRXZlbnQoZSwgdGhpcy5lZGl0b3IpKTsKKyAgICB9
OworCisgICAgdGhpcy4kZHJhZ0RlbGF5ID0gMjUwOworICAgIHRoaXMuc2V0RHJhZ0RlbGF5ID0g
ZnVuY3Rpb24oZHJhZ0RlbGF5KSB7CisgICAgICAgIHRoaXMuJGRyYWdEZWxheSA9IGRyYWdEZWxh
eTsKKyAgICB9OworCisgICAgdGhpcy5nZXREcmFnRGVsYXkgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJGRyYWdEZWxheTsKKyAgICB9OworCisgICAgdGhpcy5vbk1vdXNlTW92
ZSA9IGZ1bmN0aW9uKG5hbWUsIGUpIHsKKyAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuZWRp
dG9yLl9ldmVudFJlZ2lzdHJ5ICYmIHRoaXMuZWRpdG9yLl9ldmVudFJlZ2lzdHJ5Lm1vdXNlbW92
ZTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcnMgfHwgIWxpc3RlbmVycy5sZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQobmFtZSwgbmV3IE1vdXNl
RXZlbnQoZSwgdGhpcy5lZGl0b3IpKTsKKyAgICB9OworCisgICAgdGhpcy5vbk1vdXNlV2hlZWwg
PSBmdW5jdGlvbihuYW1lLCBlKSB7CisgICAgICAgIHZhciBtb3VzZUV2ZW50ID0gbmV3IE1vdXNl
RXZlbnQoZSwgdGhpcy5lZGl0b3IpOworICAgICAgICBtb3VzZUV2ZW50LnNwZWVkID0gdGhpcy4k
c2Nyb2xsU3BlZWQgKiAyOworICAgICAgICBtb3VzZUV2ZW50LndoZWVsWCA9IGUud2hlZWxYOwor
ICAgICAgICBtb3VzZUV2ZW50LndoZWVsWSA9IGUud2hlZWxZOworCisgICAgICAgIHRoaXMuZWRp
dG9yLl9lbWl0KG5hbWUsIG1vdXNlRXZlbnQpOworICAgIH07CisKKyAgICB0aGlzLnNldFN0YXRl
ID0gZnVuY3Rpb24oc3RhdGUpIHsKKyAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOworICAgIH07
CisKKyAgICB0aGlzLmNhcHR1cmVNb3VzZSA9IGZ1bmN0aW9uKGV2LCBzdGF0ZSkgeworICAgICAg
ICBpZiAoc3RhdGUpCisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTsKKworICAgICAg
ICB0aGlzLnggPSBldi54OworICAgICAgICB0aGlzLnkgPSBldi55OworICAgICAgICAKKyAgICAg
ICAgdGhpcy5pc01vdXNlUHJlc3NlZCA9IHRydWU7CisgICAgICAgIHZhciByZW5kZXJlciA9IHRo
aXMuZWRpdG9yLnJlbmRlcmVyOworICAgICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0
Q3Vyc29yKQorICAgICAgICAgICAgcmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gbnVs
bDsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBvbk1vdXNlTW92ZSA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIHNlbGYueCA9IGUuY2xpZW50WDsKKyAgICAgICAg
ICAgIHNlbGYueSA9IGUuY2xpZW50WTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgb25DYXB0
dXJlRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklk
KTsKKyAgICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXSAmJiBzZWxmW3NlbGYuc3Rh
dGUgKyAiRW5kIl0oZSk7CisgICAgICAgICAgICBzZWxmLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7
CisgICAgICAgICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICByZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2VsZi5pc01vdXNlUHJlc3NlZCA9IGZhbHNlOworICAg
ICAgICB9OworCisgICAgICAgIHZhciBvbkNhcHR1cmVJbnRlcnZhbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRlXSAmJiBzZWxmW3NlbGYuc3RhdGVdKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5kb21F
dmVudC50eXBlID09ICJkYmxjbGljayIpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwoKTsKKyAgICAgICAgICAg
ICAgICBvbkNhcHR1cmVFbmQoZXYuZG9tRXZlbnQpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBldmVudC5jYXB0dXJlKHRoaXMuZWRp
dG9yLmNvbnRhaW5lciwgb25Nb3VzZU1vdmUsIG9uQ2FwdHVyZUVuZCk7CisgICAgICAgIHZhciB0
aW1lcklkID0gc2V0SW50ZXJ2YWwob25DYXB0dXJlSW50ZXJ2YWwsIDIwKTsKKyAgICB9OworfSku
Y2FsbChNb3VzZUhhbmRsZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb3VzZUhhbmRsZXIgPSBN
b3VzZUhhbmRsZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxl
cnMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9tJywgJ2Fj
ZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cit2YXIgdXNlcmFnZW50ID0gcmVx
dWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOworCit2YXIgRFJBR19PRkZTRVQgPSA1OyAvLyBwaXhl
bHMKKworZnVuY3Rpb24gRGVmYXVsdEhhbmRsZXJzKG1vdXNlSGFuZGxlcikgeworICAgIG1vdXNl
SGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gPSBudWxsOworCisgICAgdmFyIGVkaXRvciA9IG1vdXNl
SGFuZGxlci5lZGl0b3I7CisgICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZWRvd24i
LCB0aGlzLm9uTW91c2VEb3duLmJpbmQobW91c2VIYW5kbGVyKSk7CisgICAgZWRpdG9yLnNldERl
ZmF1bHRIYW5kbGVyKCJkYmxjbGljayIsIHRoaXMub25Eb3VibGVDbGljay5iaW5kKG1vdXNlSGFu
ZGxlcikpOworICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigidHJpcGxlY2xpY2siLCB0aGlz
Lm9uVHJpcGxlQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVs
dEhhbmRsZXIoInF1YWRjbGljayIsIHRoaXMub25RdWFkQ2xpY2suYmluZChtb3VzZUhhbmRsZXIp
KTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNld2hlZWwiLCB0aGlzLm9uTW91
c2VXaGVlbC5iaW5kKG1vdXNlSGFuZGxlcikpOworCisgICAgdmFyIGV4cG9ydHMgPSBbInNlbGVj
dCIsICJzdGFydFNlbGVjdCIsICJkcmFnIiwgImRyYWdFbmQiLCAiZHJhZ1dhaXQiLAorICAgICAg
ICAiZHJhZ1dhaXRFbmQiLCAic3RhcnREcmFnIiwgImZvY3VzV2FpdCJdOworCisgICAgZXhwb3J0
cy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgbW91c2VIYW5kbGVyW3hdID0gdGhpc1t4
XTsKKyAgICB9LCB0aGlzKTsKKworICAgIG1vdXNlSGFuZGxlci5zZWxlY3RCeUxpbmVzID0gdGhp
cy5leHRlbmRTZWxlY3Rpb25CeS5iaW5kKG1vdXNlSGFuZGxlciwgImdldExpbmVSYW5nZSIpOwor
ICAgIG1vdXNlSGFuZGxlci5zZWxlY3RCeVdvcmRzID0gdGhpcy5leHRlbmRTZWxlY3Rpb25CeS5i
aW5kKG1vdXNlSGFuZGxlciwgImdldFdvcmRSYW5nZSIpOworCisgICAgbW91c2VIYW5kbGVyLiRm
b2N1c1dhaXRUaW1vdXQgPSAyNTA7Cit9CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMub25N
b3VzZURvd24gPSBmdW5jdGlvbihldikgeworICAgICAgICB2YXIgaW5TZWxlY3Rpb24gPSBldi5p
blNlbGVjdGlvbigpOworICAgICAgICB2YXIgcG9zID0gZXYuZ2V0RG9jdW1lbnRQb3NpdGlvbigp
OworICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50ID0gZXY7CisgICAgICAgIHZhciBlZGl0b3Ig
PSB0aGlzLmVkaXRvcjsKKworICAgICAgICB2YXIgYnV0dG9uID0gZXYuZ2V0QnV0dG9uKCk7Cisg
ICAgICAgIGlmIChidXR0b24gIT09IDApIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5n
ZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGlv
bkVtcHR5ID0gc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSgpOworCisgICAgICAgICAgICBpZiAoc2Vs
ZWN0aW9uRW1wdHkpIHsKKyAgICAgICAgICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRp
b24ocG9zKTsKKyAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9u
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlZGl0b3IudGV4dElucHV0Lm9uQ29udGV4
dE1lbnUoZXYuZG9tRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOyAvLyBzdG9wcGluZyBldmVu
dCBoZXJlIGJyZWFrcyBjb250ZXh0bWVudSBvbiBmZiBtYWMKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaW5TZWxlY3Rpb24gJiYgIWVkaXRvci5pc0ZvY3VzZWQoKSkgeworICAgICAgICAgICAgZWRp
dG9yLmZvY3VzKCk7CisgICAgICAgICAgICBpZiAodGhpcy4kZm9jdXNXYWl0VGltb3V0ICYmICF0
aGlzLiRjbGlja1NlbGVjdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoImZv
Y3VzV2FpdCIpOworICAgICAgICAgICAgICAgIHRoaXMuY2FwdHVyZU1vdXNlKGV2KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghaW5TZWxlY3Rpb24gfHwgdGhpcy4kY2xpY2tTZWxlY3Rp
b24gfHwgZXYuZ2V0U2hpZnRLZXkoKSkgeworICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdChw
b3MpOworICAgICAgICB9IGVsc2UgaWYgKGluU2VsZWN0aW9uKSB7CisgICAgICAgICAgICB0aGlz
Lm1vdXNlZG93bkV2ZW50LnRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICAg
ICAgdGhpcy5zZXRTdGF0ZSgiZHJhZ1dhaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
Y2FwdHVyZU1vdXNlKGV2KTsKKyAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgfTsKKworICAgIHRoaXMuc3RhcnRTZWxlY3QgPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAg
cG9zID0gcG9zIHx8IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVz
KHRoaXMueCwgdGhpcy55KTsKKyAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0U2hp
ZnRLZXkoKSkgeworICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9z
aXRpb24ocG9zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghdGhpcy4kY2xpY2tTZWxl
Y3Rpb24pIHsKKyAgICAgICAgICAgIHRoaXMuZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBv
cyk7CisgICAgICAgICAgICB0aGlzLmVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLnNldFN0YXRlKCJzZWxlY3QiKTsKKyAgICB9OworCisg
ICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGFuY2hvciwgZWRpdG9y
ID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2Ny
ZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpOworCisgICAgICAgIGlmICh0aGlz
LiRjbGlja1NlbGVjdGlvbikgeworICAgICAgICAgICAgdmFyIGNtcCA9IHRoaXMuJGNsaWNrU2Vs
ZWN0aW9uLmNvbXBhcmVQb2ludChjdXJzb3IpOworCisgICAgICAgICAgICBpZiAoY21wID09IC0x
KSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAgIGFuY2hv
ciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLnN0YXJ0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YXIgb3JpZW50ZWRSYW5nZSA9IGNhbGNSYW5nZU9yaWVudGF0aW9uKHRo
aXMuJGNsaWNrU2VsZWN0aW9uLCBjdXJzb3IpOworICAgICAgICAgICAgICAgIGN1cnNvciA9IG9y
aWVudGVkUmFuZ2UuY3Vyc29yOworICAgICAgICAgICAgICAgIGFuY2hvciA9IG9yaWVudGVkUmFu
Z2UuYW5jaG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbik7CisgICAgICAgIH0K
KyAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKGN1cnNvcik7CisKKyAg
ICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7CisgICAgfTsKKwor
ICAgIHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkgPSBmdW5jdGlvbih1bml0TmFtZSkgeworICAgICAg
ICB2YXIgYW5jaG9yLCBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdmFyIGN1cnNvciA9
IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLngsIHRoaXMueSk7
CisgICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb25bdW5pdE5hbWVdKGN1cnNvci5y
b3csIGN1cnNvci5jb2x1bW4pOworCisgICAgICAgIGlmICh0aGlzLiRjbGlja1NlbGVjdGlvbikg
eworICAgICAgICAgICAgdmFyIGNtcFN0YXJ0ID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uY29tcGFy
ZVBvaW50KHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIHZhciBjbXBFbmQgPSB0aGlzLiRjbGlj
a1NlbGVjdGlvbi5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgaWYgKGNt
cFN0YXJ0ID09IC0xICYmIGNtcEVuZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgYW5jaG9yID0g
dGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kOworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQu
cm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2UuZW5kLmNvbHVtbiAhPSBjdXJzb3IuY29sdW1uKQor
ICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY21wRW5kID09IDEgJiYgY21wU3RhcnQgPj0gMCkgeworICAgICAgICAgICAgICAg
IGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLnN0YXJ0OworICAgICAgICAgICAgICAgIGlm
IChyYW5nZS5zdGFydC5yb3cgIT0gY3Vyc29yLnJvdyB8fCByYW5nZS5zdGFydC5jb2x1bW4gIT0g
Y3Vyc29yLmNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2UuZW5kOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChjbXBTdGFydCA9PSAtMSAmJiBjbXBFbmQgPT0gMSkgewor
ICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDsKKyAgICAgICAgICAgICAgICBhbmNo
b3IgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0aGlzLiRjbGlja1NlbGVj
dGlvbiwgY3Vyc29yKTsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRlZFJhbmdlLmN1
cnNvcjsKKyAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJhbmdlLmFuY2hvcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5j
aG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOworICAgICAgICB9CisgICAgICAgIGVkaXRv
ci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpOworCisgICAgICAgIGVkaXRvci5y
ZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOworICAgIH07CisKKyAgICB0aGlzLnN0YXJ0
RHJhZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7Cisg
ICAgICAgIHRoaXMuc2V0U3RhdGUoImRyYWciKTsKKyAgICAgICAgdGhpcy5kcmFnUmFuZ2UgPSBl
ZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgdmFyIHN0eWxlID0gZWRpdG9yLmdl
dFNlbGVjdGlvblN0eWxlKCk7CisgICAgICAgIHRoaXMuZHJhZ1NlbGVjdGlvbk1hcmtlciA9IGVk
aXRvci5zZXNzaW9uLmFkZE1hcmtlcih0aGlzLmRyYWdSYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBz
dHlsZSk7CisgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOworICAgICAgICBkb20uYWRk
Q3NzQ2xhc3MoZWRpdG9yLmNvbnRhaW5lciwgImFjZV9kcmFnZ2luZyIpOworICAgICAgICBpZiAo
IXRoaXMuJGRyYWdLZXliaW5kaW5nKSB7CisgICAgICAgICAgICB0aGlzLiRkcmFnS2V5YmluZGlu
ZyA9IHsKKyAgICAgICAgICAgICAgICBoYW5kbGVLZXlib2FyZDogZnVuY3Rpb24oZGF0YSwgaGFz
aElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleVN0
cmluZyA9PSAiZXNjIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29tbWFuZDog
dGhpcy5jb21tYW5kfTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGNvbW1h
bmQ6IHsKKyAgICAgICAgICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGVkaXRvci4kbW91c2VIYW5kbGVyOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnQ3Vyc29yID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuZHJhZ0VuZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zdGFydFNlbGVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZWRpdG9yLmtleUJpbmRpbmcu
YWRkS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGRyYWdLZXliaW5kaW5nKTsKKyAgICB9OworCisgICAg
dGhpcy5mb2N1c1dhaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gY2Fs
Y0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRvd25FdmVudC55LCB0
aGlzLngsIHRoaXMueSk7CisgICAgICAgIHZhciB0aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUo
KTsKKworICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCB8fHRpbWUgLSB0aGlzLm1v
dXNlZG93bkV2ZW50LnRpbWUgPiB0aGlzLiRmb2N1c1dhaXRUaW1vdXQpCisgICAgICAgICAgICB0
aGlzLnN0YXJ0U2VsZWN0KCk7CisgICAgfTsKKworICAgIHRoaXMuZHJhZ1dhaXQgPSBmdW5jdGlv
bihlKSB7CisgICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93
bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54LCB0aGlzLnkpOworICAgICAg
ICB2YXIgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgICAgIHZhciBlZGl0b3Ig
PSB0aGlzLmVkaXRvcjsKKworICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCkgewor
ICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3Vt
ZW50UG9zaXRpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAodGltZSAtIHRoaXMubW91c2Vkb3du
RXZlbnQudGltZSA+IGVkaXRvci5nZXREcmFnRGVsYXkoKSkgeworICAgICAgICAgICAgdGhpcy5z
dGFydERyYWcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmRyYWdXYWl0RW5kID0g
ZnVuY3Rpb24oZSkgeworICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50LmRvbUV2ZW50ID0gZTsK
KyAgICAgICAgdGhpcy5zdGFydFNlbGVjdCgpOworICAgIH07CisKKyAgICB0aGlzLmRyYWcgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgICB0
aGlzLmRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMo
dGhpcy54LCB0aGlzLnkpOworICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24odGhp
cy5kcmFnQ3Vyc29yKTsKKyAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9W
aWV3KCk7CisgICAgfTsKKworICAgIHRoaXMuZHJhZ0VuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgZHJhZ0N1cnNvciA9IHRo
aXMuZHJhZ0N1cnNvcjsKKyAgICAgICAgdmFyIGRyYWdSYW5nZSA9IHRoaXMuZHJhZ1JhbmdlOwor
ICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3MoZWRpdG9yLmNvbnRhaW5lciwgImFjZV9kcmFnZ2lu
ZyIpOworICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5kcmFnU2VsZWN0
aW9uTWFya2VyKTsKKyAgICAgICAgZWRpdG9yLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5k
bGVyKHRoaXMuJGRyYWdLZXliaW5kaW5nKTsKKworICAgICAgICBpZiAoIWRyYWdDdXJzb3IpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgICAgIGlmIChlICYmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkpKSB7CisgICAgICAgICAgICB2
YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0g
ZHJhZ1JhbmdlOworICAgICAgICAgICAgbmV3UmFuZ2UuZW5kID0gc2Vzc2lvbi5pbnNlcnQoZHJh
Z0N1cnNvciwgc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoZHJhZ1JhbmdlKSk7CisgICAgICAgICAgICBu
ZXdSYW5nZS5zdGFydCA9IGRyYWdDdXJzb3I7CisgICAgICAgIH0gZWxzZSBpZiAoZHJhZ1Jhbmdl
LmNvbnRhaW5zKGRyYWdDdXJzb3Iucm93LCBkcmFnQ3Vyc29yLmNvbHVtbikpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9
IGVkaXRvci5tb3ZlVGV4dChkcmFnUmFuZ2UsIGRyYWdDdXJzb3IpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFuZXdSYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlZGl0
b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG5ld1JhbmdlKTsKKyAgICB9OworCisgICAg
dGhpcy5vbkRvdWJsZUNsaWNrID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIHBvcyA9IGV2
LmdldERvY3VtZW50UG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9y
OworICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworCisgICAgICAgIHZhciBy
YW5nZSA9IHNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHBvcyk7CisgICAgICAgIGlmIChyYW5nZSkg
eworICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJh
bmdlLnN0YXJ0LmNvbHVtbi0tOworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gcmFuZ2U7
CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJzZWxlY3QiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNl
bGVjdGlvbi5nZXRXb3JkUmFuZ2UocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAgIHRoaXMu
c2V0U3RhdGUoInNlbGVjdEJ5V29yZHMiKTsKKyAgICB9OworCisgICAgdGhpcy5vblRyaXBsZUNs
aWNrID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9z
aXRpb24oKTsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgICAgICAgIHRo
aXMuc2V0U3RhdGUoInNlbGVjdEJ5TGluZXMiKTsKKyAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rp
b24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldExpbmVSYW5nZShwb3Mucm93KTsKKyAgICB9OworCisg
ICAgdGhpcy5vblF1YWRDbGljayA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgIHZhciBlZGl0b3Ig
PSB0aGlzLmVkaXRvcjsKKworICAgICAgICBlZGl0b3Iuc2VsZWN0QWxsKCk7CisgICAgICAgIHRo
aXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAg
IHRoaXMuc2V0U3RhdGUoIm51bGwiKTsKKyAgICB9OworCisgICAgdGhpcy5vbk1vdXNlV2hlZWwg
PSBmdW5jdGlvbihldikgeworICAgICAgICBpZiAoZXYuZ2V0U2hpZnRLZXkoKSB8fCBldi5nZXRB
Y2NlbEtleSgpKXsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBpc1Njcm9sYWJsZSA9IGVkaXRvci5y
ZW5kZXJlci5pc1Njcm9sbGFibGVCeShldi53aGVlbFggKiBldi5zcGVlZCwgZXYud2hlZWxZICog
ZXYuc3BlZWQpOworICAgICAgICBpZiAoaXNTY3JvbGFibGUpIHsKKyAgICAgICAgICAgIHRoaXMu
JHBhc3NTY3JvbGxFdmVudCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHRoaXMuJHBhc3NTY3JvbGxFdmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmICghdGhpcy4kc2Nyb2xsU3RvcFRpbWVvdXQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgICAgICAgdGhpcy4kc2Nyb2xsU3RvcFRpbWVv
dXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLiRw
YXNzU2Nyb2xsRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzZWxmLiRzY3JvbGxT
dG9wVGltZW91dCA9IG51bGw7CisgICAgICAgICAgICAgICAgfSwgMjAwKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCeShldi53aGVl
bFggKiBldi5zcGVlZCwgZXYud2hlZWxZICogZXYuc3BlZWQpOworICAgICAgICByZXR1cm4gZXYu
cHJldmVudERlZmF1bHQoKTsKKyAgICB9OworCit9KS5jYWxsKERlZmF1bHRIYW5kbGVycy5wcm90
b3R5cGUpOworCitleHBvcnRzLkRlZmF1bHRIYW5kbGVycyA9IERlZmF1bHRIYW5kbGVyczsKKwor
ZnVuY3Rpb24gY2FsY0Rpc3RhbmNlKGF4LCBheSwgYngsIGJ5KSB7CisgICAgcmV0dXJuIE1hdGgu
c3FydChNYXRoLnBvdyhieCAtIGF4LCAyKSArIE1hdGgucG93KGJ5IC0gYXksIDIpKTsKK30KKwor
ZnVuY3Rpb24gY2FsY1JhbmdlT3JpZW50YXRpb24ocmFuZ2UsIGN1cnNvcikgeworICAgIGlmIChy
YW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykKKyAgICAgICAgdmFyIGNtcCA9IDIgKiBj
dXJzb3IuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbjsKKyAg
ICBlbHNlCisgICAgICAgIHZhciBjbXAgPSAyICogY3Vyc29yLnJvdyAtIHJhbmdlLnN0YXJ0LnJv
dyAtIHJhbmdlLmVuZC5yb3c7CisKKyAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgcmV0dXJuIHtj
dXJzb3I6IHJhbmdlLnN0YXJ0LCBhbmNob3I6IHJhbmdlLmVuZH07CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4ge2N1cnNvcjogcmFuZ2UuZW5kLCBhbmNob3I6IHJhbmdlLnN0YXJ0fTsKK30KKwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2
ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCit2YXIgZG9tID0g
cmVxdWlyZSgiLi4vbGliL2RvbSIpOwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50
Iik7CisKK2Z1bmN0aW9uIEd1dHRlckhhbmRsZXIobW91c2VIYW5kbGVyKSB7CisgICAgdmFyIGVk
aXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7CisgICAgdmFyIGd1dHRlciA9IGVkaXRvci5yZW5k
ZXJlci4kZ3V0dGVyTGF5ZXI7CisKKyAgICBtb3VzZUhhbmRsZXIuZWRpdG9yLnNldERlZmF1bHRI
YW5kbGVyKCJndXR0ZXJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICghZWRp
dG9yLmlzRm9jdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgZ3V0dGVy
UmVnaW9uID0gZ3V0dGVyLmdldFJlZ2lvbihlKTsKKworICAgICAgICBpZiAoZ3V0dGVyUmVnaW9u
ID09ICJmb2xkV2lkZ2V0cyIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHJv
dyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IGVkaXRvci5zZXNzaW9uLnNlbGVjdGlvbjsKKworICAgICAgICBpZiAoZS5nZXRTaGlmdEtleSgp
KQorICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdFRvKHJvdywgMCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGUuZG9tRXZlbnQuZGV0YWlsID09IDIpIHsKKyAgICAgICAgICAg
ICAgICBlZGl0b3Iuc2VsZWN0QWxsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdXNlSGFuZGxlci4kY2xp
Y2tTZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldExpbmVSYW5nZShyb3cpOworICAgICAg
ICB9CisgICAgICAgIG1vdXNlSGFuZGxlci5jYXB0dXJlTW91c2UoZSwgInNlbGVjdEJ5TGluZXMi
KTsKKyAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9KTsKKworCisgICAg
dmFyIHRvb2x0aXBUaW1lb3V0LCBtb3VzZUV2ZW50LCB0b29sdGlwLCB0b29sdGlwQW5ub3RhdGlv
bjsKKyAgICBmdW5jdGlvbiBjcmVhdGVUb29sdGlwKCkgeworICAgICAgICB0b29sdGlwID0gZG9t
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICJhY2Vf
Z3V0dGVyLXRvb2x0aXAiOworICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CisgICAgICAgIGVkaXRvci5jb250YWluZXIuYXBwZW5kQ2hpbGQodG9vbHRpcCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKSB7CisgICAgICAgIGlmICghdG9vbHRpcCkgewor
ICAgICAgICAgICAgY3JlYXRlVG9vbHRpcCgpOworICAgICAgICB9CisgICAgICAgIHZhciByb3cg
PSBtb3VzZUV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgIHZhciBhbm5v
dGF0aW9uID0gZ3V0dGVyLiRhbm5vdGF0aW9uc1tyb3ddOworICAgICAgICBpZiAoIWFubm90YXRp
b24pCisgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTsKKworICAgICAgICB2YXIgbWF4
Um93ID0gZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CisgICAgICAgIGlmIChyb3cgPT0gbWF4
Um93KSB7CisgICAgICAgICAgICB2YXIgc2NyZWVuUm93ID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVs
VG9TY3JlZW5Db29yZGluYXRlcygwLCBtb3VzZUV2ZW50LnkpLnJvdzsKKyAgICAgICAgICAgIHZh
ciBwb3MgPSBtb3VzZUV2ZW50LiRwb3M7CisgICAgICAgICAgICBpZiAoc2NyZWVuUm93ID4gZWRp
dG9yLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhwb3Mucm93LCBwb3MuY29sdW1uKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh0b29sdGlwQW5ub3RhdGlvbiA9PSBhbm5vdGF0aW9uKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0b29sdGlwQW5ub3RhdGlvbiA9IGFubm90YXRpb24udGV4dC5qb2luKCI8YnIv
PiIpOworCisgICAgICAgIHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgICAg
IHRvb2x0aXAuaW5uZXJIVE1MID0gdG9vbHRpcEFubm90YXRpb247CisgICAgICAgIGVkaXRvci5v
bigibW91c2V3aGVlbCIsIGhpZGVUb29sdGlwKTsKKworICAgICAgICBtb3ZlVG9vbHRpcChtb3Vz
ZUV2ZW50KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBoaWRlVG9vbHRpcCgpIHsKKyAgICAgICAg
aWYgKHRvb2x0aXBUaW1lb3V0KQorICAgICAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBjbGVhclRp
bWVvdXQodG9vbHRpcFRpbWVvdXQpOworICAgICAgICBpZiAodG9vbHRpcEFubm90YXRpb24pIHsK
KyAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgICAg
IHRvb2x0aXBBbm5vdGF0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIGVkaXRvci5yZW1vdmVFdmVu
dExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgaGlkZVRvb2x0aXApOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gbW92ZVRvb2x0aXAoZSkgeworICAgICAgICB2YXIgcmVjdCA9IGVkaXRv
ci5yZW5kZXJlci4kZ3V0dGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB0b29s
dGlwLnN0eWxlLmxlZnQgPSBlLnggKyAxNSArICJweCI7CisgICAgICAgIGlmIChlLnkgKyAzICog
ZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQgKyAxNSA8IHJlY3QuYm90dG9tKSB7CisgICAgICAg
ICAgICB0b29sdGlwLnN0eWxlLmJvdHRvbSA9ICAiIjsKKyAgICAgICAgICAgIHRvb2x0aXAuc3R5
bGUudG9wID0gIGUueSArIDE1ICsgInB4IjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRvb2x0aXAuc3R5bGUudG9wID0gICIiOworICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS5ib3R0
b20gPSByZWN0LmJvdHRvbSAtIGUueSArIDUgKyAicHgiOworICAgICAgICB9CisgICAgfQorCisg
ICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigiZ3V0dGVybW91c2Vtb3Zl
IiwgZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgdGFyZ2V0ID0gZS5kb21FdmVudC50YXJnZXQg
fHwgZS5kb21FdmVudC5zcmNFbGVtZW50OworICAgICAgICBpZiAoZG9tLmhhc0Nzc0NsYXNzKHRh
cmdldCwgImFjZV9mb2xkLXdpZGdldCIpKQorICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlw
KCk7CisKKyAgICAgICAgaWYgKHRvb2x0aXBBbm5vdGF0aW9uKQorICAgICAgICAgICAgbW92ZVRv
b2x0aXAoZSk7CisKKyAgICAgICAgbW91c2VFdmVudCA9IGU7CisgICAgICAgIGlmICh0b29sdGlw
VGltZW91dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBudWxs
OworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQgJiYgIW1vdXNlSGFuZGxlci5pc01vdXNlUHJl
c3NlZCkKKyAgICAgICAgICAgICAgICBzaG93VG9vbHRpcCgpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGhpZGVUb29sdGlwKCk7CisgICAgICAgIH0sIDUwKTsKKyAgICB9KTsK
KworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyLCAibW91c2Vv
dXQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIG1vdXNlRXZlbnQgPSBudWxsOworICAgICAgICBp
ZiAoIXRvb2x0aXBBbm5vdGF0aW9uIHx8IHRvb2x0aXBUaW1lb3V0KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gbnVsbDsKKyAgICAgICAgICAgIGhpZGVUb29s
dGlwKCk7CisgICAgICAgIH0sIDUwKTsKKyAgICB9KTsKKworfQorCitleHBvcnRzLkd1dHRlckhh
bmRsZXIgPSBHdXR0ZXJIYW5kbGVyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL21v
dXNlX2V2ZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2
ZW50JywgJ2FjZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwordmFyIHVz
ZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBNb3VzZUV2ZW50ID0g
ZXhwb3J0cy5Nb3VzZUV2ZW50ID0gZnVuY3Rpb24oZG9tRXZlbnQsIGVkaXRvcikgeworICAgIHRo
aXMuZG9tRXZlbnQgPSBkb21FdmVudDsKKyAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgICAK
KyAgICB0aGlzLnggPSB0aGlzLmNsaWVudFggPSBkb21FdmVudC5jbGllbnRYOworICAgIHRoaXMu
eSA9IHRoaXMuY2xpZW50WSA9IGRvbUV2ZW50LmNsaWVudFk7CisKKyAgICB0aGlzLiRwb3MgPSBu
dWxsOworICAgIHRoaXMuJGluU2VsZWN0aW9uID0gbnVsbDsKKyAgICAKKyAgICB0aGlzLnByb3Bh
Z2F0aW9uU3RvcHBlZCA9IGZhbHNlOworICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNl
OworfTsKKworKGZ1bmN0aW9uKCkgeyAgCisgICAgCisgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZl
bnQpOworICAgICAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7CisgICAgfTsKKyAg
ICAKKyAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KHRoaXMuZG9tRXZlbnQpOworICAgICAgICB0aGlzLmRlZmF1bHRQcmV2
ZW50ZWQgPSB0cnVlOworICAgIH07CisgICAgCisgICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHRoaXMucHJldmVudERl
ZmF1bHQoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAodGhpcy4kcG9zKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHBv
czsKKyAgICAgICAgCisgICAgICAgIHRoaXMuJHBvcyA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNj
cmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMuY2xpZW50WCwgdGhpcy5jbGllbnRZKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJHBvczsKKyAgICB9OworICAgIHRoaXMuaW5TZWxlY3Rpb24gPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuJGluU2VsZWN0aW9uICE9PSBudWxsKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uOworICAgICAgICAgICAgCisgICAgICAgIHZh
ciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgCisgICAgICAgIGlmIChlZGl0b3IuZ2V0
UmVhZE9ubHkoKSkgeworICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9
IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJh
bmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNl
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0
RG9jdW1lbnRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0g
c2VsZWN0aW9uUmFuZ2UuY29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uOworICAgIH07
CisgICAgdGhpcy5nZXRCdXR0b24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGV2ZW50
LmdldEJ1dHRvbih0aGlzLmRvbUV2ZW50KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hpZnRLZXkg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXk7Cisg
ICAgfTsKKyAgICAKKyAgICB0aGlzLmdldEFjY2VsS2V5ID0gdXNlcmFnZW50LmlzTWFjCisgICAg
ICAgID8gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUV2ZW50Lm1ldGFLZXk7IH0KKyAgICAg
ICAgOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQuY3RybEtleTsgfTsKKyAgICAK
K30pLmNhbGwoTW91c2VFdmVudC5wcm90b3R5cGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNl
L21vdXNlL2RyYWdkcm9wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2Uv
bGliL2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworCit2YXIgRHJhZ2Ryb3BIYW5kbGVy
ID0gZnVuY3Rpb24obW91c2VIYW5kbGVyKSB7CisgICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxl
ci5lZGl0b3I7CisgICAgdmFyIGRyYWdTZWxlY3Rpb25NYXJrZXIsIHgsIHk7CisgICAgdmFyIHRp
bWVySWQsIHJhbmdlLCBpc0JhY2t3YXJkczsKKyAgICB2YXIgZHJhZ0N1cnNvciwgY291bnRlciA9
IDA7CisKKyAgICB2YXIgbW91c2VUYXJnZXQgPSBlZGl0b3IuY29udGFpbmVyOworICAgIGV2ZW50
LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ2VudGVyIiwgZnVuY3Rpb24oZSkgeworICAg
ICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNvdW50ZXIrKzsKKyAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKSB7CisgICAg
ICAgICAgICByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAg
aXNCYWNrd2FyZHMgPSBlZGl0b3Iuc2VsZWN0aW9uLmlzQmFja3dhcmRzKCk7CisgICAgICAgICAg
ICB2YXIgc3R5bGUgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uU3R5bGUoKTsKKyAgICAgICAgICAgIGRy
YWdTZWxlY3Rpb25NYXJrZXIgPSBlZGl0b3Iuc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2Vf
c2VsZWN0aW9uIiwgc3R5bGUpOworICAgICAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOworICAgICAgICAgICAgdGltZXJJ
ZCA9IHNldEludGVydmFsKG9uRHJhZ0ludGVydmFsLCAyMCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgIH0pOworCisgICAgZXZlbnQuYWRk
TGlzdGVuZXIobW91c2VUYXJnZXQsICJkcmFnb3ZlciIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
aWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB4
ID0gZS5jbGllbnRYOworICAgICAgICB5ID0gZS5jbGllbnRZOworICAgICAgICByZXR1cm4gZXZl
bnQucHJldmVudERlZmF1bHQoZSk7CisgICAgfSk7CisgICAgCisgICAgdmFyIG9uRHJhZ0ludGVy
dmFsID0gIGZ1bmN0aW9uKCkgeworICAgICAgICBkcmFnQ3Vyc29yID0gZWRpdG9yLnJlbmRlcmVy
LnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHgsIHkpOworICAgICAgICBlZGl0b3IubW92ZUN1cnNv
clRvUG9zaXRpb24oZHJhZ0N1cnNvcik7CisgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxD
dXJzb3JJbnRvVmlldygpOworICAgIH07CisgICAgCisgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91
c2VUYXJnZXQsICJkcmFnbGVhdmUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlZGl0b3Iu
Z2V0UmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY291bnRlci0tOwor
ICAgICAgICBpZiAoY291bnRlciA+IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNs
ZWFySW50ZXJ2YWwodGltZXJJZCk7CisgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZU1hcmtl
cihkcmFnU2VsZWN0aW9uTWFya2VyKTsKKyAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IG51
bGw7CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIGlz
QmFja3dhcmRzKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAg
IH0pOworICAgIAorICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJvcCIsIGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjb3VudGVyID0gMDsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0
aW1lcklkKTsKKyAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxlY3Rp
b25NYXJrZXIpOworICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDsKKworICAgICAg
ICByYW5nZS5lbmQgPSBlZGl0b3Iuc2Vzc2lvbi5pbnNlcnQoZHJhZ0N1cnNvciwgZS5kYXRhVHJh
bnNmZXIuZ2V0RGF0YSgnVGV4dCcpKTsKKyAgICAgICAgcmFuZ2Uuc3RhcnQgPSBkcmFnQ3Vyc29y
OworICAgICAgICBlZGl0b3IuZm9jdXMoKTsKKyAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb25SYW5nZShyYW5nZSk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVs
dChlKTsKKyAgICB9KTsKKworfTsKKworZXhwb3J0cy5EcmFnZHJvcEhhbmRsZXIgPSBEcmFnZHJv
cEhhbmRsZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vdXNlL2ZvbGRfaGFuZGxlcicsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKworZnVuY3Rpb24gRm9sZEhhbmRsZXIoZWRpdG9yKSB7CisKKyAgICBl
ZGl0b3Iub24oImNsaWNrIiwgZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBl
LmdldERvY3VtZW50UG9zaXRpb24oKTsKKyAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vz
c2lvbjsKKyAgICAgICAgdmFyIGZvbGQgPSBzZXNzaW9uLmdldEZvbGRBdChwb3NpdGlvbi5yb3cs
IHBvc2l0aW9uLmNvbHVtbiwgMSk7CisgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICBp
ZiAoZS5nZXRBY2NlbEtleSgpKQorICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChm
b2xkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmV4cGFuZEZv
bGQoZm9sZCk7CisKKyAgICAgICAgICAgIGUuc3RvcCgpOworICAgICAgICB9CisgICAgfSk7CisK
KyAgICBlZGl0b3Iub24oImd1dHRlcm1vdXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
aWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZh
ciBndXR0ZXJSZWdpb24gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihl
KTsKKworICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKKyAgICAg
ICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgICAg
ICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworICAgICAgICAgICAgaWYgKHNlc3Npb24u
Zm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3ddKQorICAgICAgICAgICAgICAg
IGVkaXRvci5zZXNzaW9uLm9uRm9sZFdpZGdldENsaWNrKHJvdywgZSk7CisgICAgICAgICAgICBl
LnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxj
bGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5y
ZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOworCisgICAgICAgIGlmIChndXR0ZXJS
ZWdpb24gPT0gImZvbGRXaWRnZXRzIikgeworICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9j
dW1lbnRQb3NpdGlvbigpLnJvdzsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNl
c3Npb247CisgICAgICAgICAgICB2YXIgZncgPSBzZXNzaW9uLmZvbGRXaWRnZXRzOworICAgICAg
ICAgICAgaWYgKCFmdyB8fCBmd1tyb3ddKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgdmFyIGkgPSByb3cgLSAxLCBmaXJzdFJhbmdlOworICAgICAgICAgICAgd2hpbGUg
KGkgPj0gMCkgeworICAgICAgICAgICAgICAgIHZhciBjID0gZndbaV07CisgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgYyA9IGZ3W2ldID0gc2Vzc2lv
bi5nZXRGb2xkV2lkZ2V0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAic3RhcnQiKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Rm9sZFdpZGdldFJh
bmdlKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmFuZ2UpCisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gcmFuZ2U7CisgICAgICAgICAgICAgICAgICAgIGlm
IChyYW5nZSAmJiByYW5nZS5lbmQucm93ID49IHJvdykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpLS07CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgICAgICAgICByYW5nZSA9
IGZpcnN0UmFuZ2U7CisKKyAgICAgICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgICAg
IHZhciByb3cgPSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBz
ZXNzaW9uLmdldEZvbGRBdChyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCwgMSk7CisK
KyAgICAgICAgICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9u
LnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2Vzc2lvbi5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisgICAgICAgICAgICAgICAg
ICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyh7cm93OiByYW5nZS5zdGFy
dC5yb3csIGNvbHVtbjogMH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGUuc3RvcCgpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK2V4cG9ydHMuRm9s
ZEhhbmRsZXIgPSBGb2xkSGFuZGxlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9rZXlib2Fy
ZC9rZXliaW5kaW5nJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGli
L2tleXMnLCAnYWNlL2xpYi9ldmVudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCit2YXIga2V5VXRpbCAgPSByZXF1aXJlKCIuLi9saWIva2V5cyIpOwordmFyIGV2
ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CisKK3ZhciBLZXlCaW5kaW5nID0gZnVuY3Rp
b24oZWRpdG9yKSB7CisgICAgdGhpcy4kZWRpdG9yID0gZWRpdG9yOworICAgIHRoaXMuJGRhdGEg
PSB7IH07CisgICAgdGhpcy4kaGFuZGxlcnMgPSBbXTsKKyAgICB0aGlzLnNldERlZmF1bHRIYW5k
bGVyKGVkaXRvci5jb21tYW5kcyk7Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZXRE
ZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7CisgICAgICAgIHRoaXMucmVtb3ZlS2V5Ym9h
cmRIYW5kbGVyKHRoaXMuJGRlZmF1bHRIYW5kbGVyKTsKKyAgICAgICAgdGhpcy4kZGVmYXVsdEhh
bmRsZXIgPSBrYjsKKyAgICAgICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIoa2IsIDApOworICAg
ICAgICB0aGlzLiRkYXRhID0ge2VkaXRvcjogdGhpcy4kZWRpdG9yfTsKKyAgICB9OworCisgICAg
dGhpcy5zZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICBpZiAodGhp
cy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV0gPT0ga2IpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgd2hpbGUgKHRoaXMuJGhhbmRsZXJzWzFdKQorICAgICAgICAg
ICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kaGFuZGxlcnNbMV0pOworCisgICAg
ICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKKyAgICB9OworCisgICAgdGhpcy5h
ZGRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYiwgcG9zKSB7CisgICAgICAgIGlmICgha2Ip
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBpID0gdGhpcy4kaGFuZGxlcnMuaW5k
ZXhPZihrYik7CisgICAgICAgIGlmIChpICE9IC0xKQorICAgICAgICAgICAgdGhpcy4kaGFuZGxl
cnMuc3BsaWNlKGksIDEpOworCisgICAgICAgIGlmIChwb3MgPT0gdW5kZWZpbmVkKQorICAgICAg
ICAgICAgdGhpcy4kaGFuZGxlcnMucHVzaChrYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRoaXMuJGhhbmRsZXJzLnNwbGljZShwb3MsIDAsIGtiKTsKKworICAgICAgICBpZiAoaSA9PSAt
MSAmJiBrYi5hdHRhY2gpCisgICAgICAgICAgICBrYi5hdHRhY2godGhpcy4kZWRpdG9yKTsKKyAg
ICB9OworCisgICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikgewor
ICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpOworICAgICAgICBpZiAo
aSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdGhpcy4kaGFuZGxl
cnMuc3BsaWNlKGksIDEpOworICAgICAgICBrYi5kZXRhY2ggJiYga2IuZGV0YWNoKHRoaXMuJGVk
aXRvcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLmdldEtleWJv
YXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNb
dGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07CisgICAgfTsKKworICAgIHRoaXMuJGNhbGxLZXli
b2FyZEhhbmRsZXJzID0gZnVuY3Rpb24gKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKSB7
CisgICAgICAgIHZhciB0b0V4ZWN1dGU7CisgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgIHZhciBjb21tYW5kcyA9IHRoaXMuJGVkaXRvci5jb21tYW5kczsKKworICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy4kaGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICB0
b0V4ZWN1dGUgPSB0aGlzLiRoYW5kbGVyc1tpXS5oYW5kbGVLZXlib2FyZCgKKyAgICAgICAgICAg
ICAgICB0aGlzLiRkYXRhLCBoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZQorICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgIGlmICghdG9FeGVjdXRlIHx8ICF0b0V4ZWN1dGUuY29tbWFuZCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh0b0V4ZWN1dGUuY29t
bWFuZCA9PSAibnVsbCIpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdG9FeGVjdXRlLnBh
c3NFdmVudCAhPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
dWNjZXNzID0gY29tbWFuZHMuZXhlYyh0b0V4ZWN1dGUuY29tbWFuZCwgdGhpcy4kZWRpdG9yLCB0
b0V4ZWN1dGUuYXJncywgZSk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgZSAmJiBoYXNoSWQgIT0gLTEpCisgICAgICAgICAgICAgICAg
ZXZlbnQuc3RvcEV2ZW50KGUpOworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfTsK
KworICAgIHRoaXMub25Db21tYW5kS2V5ID0gZnVuY3Rpb24oZSwgaGFzaElkLCBrZXlDb2RlKSB7
CisgICAgICAgIHZhciBrZXlTdHJpbmcgPSBrZXlVdGlsLmtleUNvZGVUb1N0cmluZyhrZXlDb2Rl
KTsKKyAgICAgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoaGFzaElkLCBrZXlTdHJpbmcs
IGtleUNvZGUsIGUpOworICAgIH07CisKKyAgICB0aGlzLm9uVGV4dElucHV0ID0gZnVuY3Rpb24o
dGV4dCkgeworICAgICAgICB2YXIgc3VjY2VzcyA9IHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJz
KC0xLCB0ZXh0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgdGhpcy4kZWRp
dG9yLmNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsIHRoaXMuJGVkaXRvciwgdGV4dCk7Cisg
ICAgfTsKKworfSkuY2FsbChLZXlCaW5kaW5nLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuS2V5Qmlu
ZGluZyA9IEtleUJpbmRpbmc7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbics
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2NvbmZpZycsICdhY2UvbGli
L29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xpYi9ldmVudF9lbWl0
dGVyJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvcmFuZ2UnLCAnYWNl
L2RvY3VtZW50JywgJ2FjZS9iYWNrZ3JvdW5kX3Rva2VuaXplcicsICdhY2Uvc2VhcmNoX2hpZ2hs
aWdodCcsICdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRpbmcnLCAnYWNlL2VkaXRfc2Vzc2lvbi9icmFj
a2V0X21hdGNoJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGli
L29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgbmV0ID0gcmVx
dWlyZSgiLi9saWIvbmV0Iik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZl
bnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBTZWxlY3Rpb24gPSByZXF1aXJlKCIuL3Nl
bGVjdGlvbiIpLlNlbGVjdGlvbjsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vbW9kZS90ZXh0
IikuTW9kZTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBEb2N1
bWVudCA9IHJlcXVpcmUoIi4vZG9jdW1lbnQiKS5Eb2N1bWVudDsKK3ZhciBCYWNrZ3JvdW5kVG9r
ZW5pemVyID0gcmVxdWlyZSgiLi9iYWNrZ3JvdW5kX3Rva2VuaXplciIpLkJhY2tncm91bmRUb2tl
bml6ZXI7Cit2YXIgU2VhcmNoSGlnaGxpZ2h0ID0gcmVxdWlyZSgiLi9zZWFyY2hfaGlnaGxpZ2h0
IikuU2VhcmNoSGlnaGxpZ2h0OworCit2YXIgRWRpdFNlc3Npb24gPSBmdW5jdGlvbih0ZXh0LCBt
b2RlKSB7CisgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsKKyAgICB0aGlzLiRkZWNvcmF0aW9u
cyA9IFtdOworICAgIHRoaXMuJGZyb250TWFya2VycyA9IHt9OworICAgIHRoaXMuJGJhY2tNYXJr
ZXJzID0ge307CisgICAgdGhpcy4kbWFya2VySWQgPSAxOworICAgIHRoaXMuJHVuZG9TZWxlY3Qg
PSB0cnVlOworICAgIAorICAgIHRoaXMuJGZvbGREYXRhID0gW107CisgICAgdGhpcy4kZm9sZERh
dGEudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHN0ciA9ICIiOworICAgICAg
ICB0aGlzLmZvckVhY2goZnVuY3Rpb24oZm9sZExpbmUpIHsKKyAgICAgICAgICAgIHN0ciArPSAi
XG4iICsgZm9sZExpbmUudG9TdHJpbmcoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBz
dHI7CisgICAgfQorICAgIHRoaXMub24oImNoYW5nZUZvbGQiLCB0aGlzLm9uQ2hhbmdlRm9sZC5i
aW5kKHRoaXMpKTsKKyAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlz
KTsKKyAgICAKKyAgICBpZiAodHlwZW9mIHRleHQgIT0gIm9iamVjdCIgfHwgIXRleHQuZ2V0TGlu
ZSkKKyAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTsKKworICAgIHRoaXMuc2V0RG9j
dW1lbnQodGV4dCk7CisKKyAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24odGhpcyk7
CisgICAgdGhpcy5zZXRNb2RlKG1vZGUpOworfTsKKworCisoZnVuY3Rpb24oKSB7CisKKyAgICBv
b3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5zZXREb2N1bWVudCA9
IGZ1bmN0aW9uKGRvYykgeworICAgICAgICBpZiAodGhpcy5kb2MpCisgICAgICAgICAgICB0aGlz
LmRvYy5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworCisgICAgICAg
IHRoaXMuZG9jID0gZG9jOworICAgICAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdl
KTsKKworICAgICAgICBpZiAodGhpcy5iZ1Rva2VuaXplcikKKyAgICAgICAgICAgIHRoaXMuYmdU
b2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB0aGlz
LnJlc2V0Q2FjaGVzKCk7CisgICAgfTsKKyAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYzsKKyAgICB9OworICAgIHRoaXMuJHJlc2V0Um93
Q2FjaGUgPSBmdW5jdGlvbihkb2NSb3cpIHsKKyAgICAgICAgaWYgKCFkb2NSb3cpIHsKKyAgICAg
ICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlID0gW107CisgICAgICAgICAgICB0aGlzLiRzY3JlZW5S
b3dDYWNoZSA9IFtdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHRoaXMuJGRvY1Jvd0NhY2hlLCBkb2NSb3cp
ICsgMTsKKyAgICAgICAgdmFyIGwgPSB0aGlzLiRkb2NSb3dDYWNoZS5sZW5ndGg7CisgICAgICAg
IHRoaXMuJGRvY1Jvd0NhY2hlLnNwbGljZShpLCBsKTsKKyAgICAgICAgdGhpcy4kc2NyZWVuUm93
Q2FjaGUuc3BsaWNlKGksIGwpOworCisgICAgfTsKKworICAgIHRoaXMuJGdldFJvd0NhY2hlSW5k
ZXggPSBmdW5jdGlvbihjYWNoZUFycmF5LCB2YWwpIHsKKyAgICAgICAgdmFyIGxvdyA9IDA7Cisg
ICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTsKKworICAgICAgICB3aGlsZSAo
bG93IDw9IGhpKSB7CisgICAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxOworICAg
ICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07CisKKyAgICAgICAgICAgIGlmICh2YWwg
PiBjKQorICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAgICAgICBlbHNlIGlm
ICh2YWwgPCBjKQorICAgICAgICAgICAgICAgIGhpID0gbWlkIC0gMTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWlkOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGxvdyAtMTsKKyAgICB9OworCisgICAgdGhpcy5yZXNldENhY2hlcyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgIHRoaXMuJHdyYXBEYXRh
ID0gW107CisgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107CisgICAgICAgIHRoaXMu
JHJlc2V0Um93Q2FjaGUoMCk7CisgICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKQorICAgICAg
ICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydCgwKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNo
YW5nZUZvbGQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBmb2xkID0gZS5kYXRhOworICAg
ICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGZvbGQuc3RhcnQucm93KTsKKyAgICB9OworCisgICAg
dGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRh
OworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisKKyAgICAgICAgdGhpcy4kcmVzZXRS
b3dDYWNoZShkZWx0YS5yYW5nZS5zdGFydC5yb3cpOworCisgICAgICAgIHZhciByZW1vdmVkRm9s
ZHMgPSB0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZShlKTsKKyAgICAgICAgaWYgKCF0
aGlzLiRmcm9tVW5kbyAmJiB0aGlzLiR1bmRvTWFuYWdlciAmJiAhZGVsdGEuaWdub3JlKSB7Cisg
ICAgICAgICAgICB0aGlzLiRkZWx0YXNEb2MucHVzaChkZWx0YSk7CisgICAgICAgICAgICBpZiAo
cmVtb3ZlZEZvbGRzICYmIHJlbW92ZWRGb2xkcy5sZW5ndGggIT0gMCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuJGRlbHRhc0ZvbGQucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbjog
InJlbW92ZUZvbGRzIiwKKyAgICAgICAgICAgICAgICAgICAgZm9sZHM6ICByZW1vdmVkRm9sZHMK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4k
aW5mb3JtVW5kb01hbmFnZXIuc2NoZWR1bGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
YmdUb2tlbml6ZXIuJHVwZGF0ZU9uQ2hhbmdlKGRlbHRhKTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlIiwgZSk7CisgICAgfTsKKyAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkg
eworICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh0ZXh0KTsKKyAgICAgICAgdGhpcy5zZWxlY3Rp
b24ubW92ZUN1cnNvclRvKDAsIDApOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVj
dGlvbigpOworCisgICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7CisgICAgICAgIHRoaXMu
JGRlbHRhcyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNEb2MgPSBbXTsKKyAgICAgICAgdGhp
cy4kZGVsdGFzRm9sZCA9IFtdOworICAgICAgICB0aGlzLmdldFVuZG9NYW5hZ2VyKCkucmVzZXQo
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VmFsdWUgPQorICAgIHRoaXMudG9TdHJpbmcgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFZhbHVlKCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5z
ZWxlY3Rpb247CisgICAgfTsKKyAgICB0aGlzLmdldFN0YXRlID0gZnVuY3Rpb24ocm93KSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFN0YXRlKHJvdyk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFRva2VucyA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5i
Z1Rva2VuaXplci5nZXRUb2tlbnMocm93KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VG9rZW5BdCA9
IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmJnVG9r
ZW5pemVyLmdldFRva2Vucyhyb3cpOworICAgICAgICB2YXIgdG9rZW4sIGMgPSAwOworICAgICAg
ICBpZiAoY29sdW1uID09IG51bGwpIHsKKyAgICAgICAgICAgIGkgPSB0b2tlbnMubGVuZ3RoIC0g
MTsKKyAgICAgICAgICAgIGMgPSB0aGlzLmdldExpbmUocm93KS5sZW5ndGg7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGMgKz0gdG9rZW5zW2ldLnZhbHVlLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICBpZiAoYyA+PSBjb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOworICAg
ICAgICBpZiAoIXRva2VuKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHRva2Vu
LmluZGV4ID0gaTsKKyAgICAgICAgdG9rZW4uc3RhcnQgPSBjIC0gdG9rZW4udmFsdWUubGVuZ3Ro
OworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfTsKKyAgICB0aGlzLnNldFVuZG9NYW5hZ2Vy
ID0gZnVuY3Rpb24odW5kb01hbmFnZXIpIHsKKyAgICAgICAgdGhpcy4kdW5kb01hbmFnZXIgPSB1
bmRvTWFuYWdlcjsKKyAgICAgICAgdGhpcy4kZGVsdGFzID0gW107CisgICAgICAgIHRoaXMuJGRl
bHRhc0RvYyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107CisKKyAgICAgICAg
aWYgKHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyKQorICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5k
b01hbmFnZXIuY2FuY2VsKCk7CisKKyAgICAgICAgaWYgKHVuZG9NYW5hZ2VyKSB7CisgICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgIHRoaXMuJHN5bmNJbmZvcm1VbmRv
TWFuYWdlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGYuJGluZm9ybVVuZG9N
YW5hZ2VyLmNhbmNlbCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0ZvbGQu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhcy5wdXNoKHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdyb3VwOiAiZm9sZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWx0YXM6IHNlbGYuJGRlbHRhc0ZvbGQKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhc0ZvbGQgPSBbXTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRG9jLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICBzZWxmLiRkZWx0YXMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAg
ICBncm91cDogImRvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRl
bHRhc0RvYworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi4kZGVsdGFzRG9jID0gW107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHNlbGYuJGRlbHRhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHVuZG9N
YW5hZ2VyLmV4ZWN1dGUoeworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAiYWNldXBk
YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtzZWxmLiRkZWx0YXMsIHNlbGZd
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHNlbGYuJGRlbHRhcyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy4kaW5mb3JtVW5kb01hbmFnZXIgPQorICAgICAgICAgICAgICAgIGxhbmcuZGVmZXJyZWRDYWxs
KHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2VyID0geworICAgICAgICB1bmRvOiBmdW5jdGlvbigpIHt9
LAorICAgICAgICByZWRvOiBmdW5jdGlvbigpIHt9LAorICAgICAgICByZXNldDogZnVuY3Rpb24o
KSB7fQorICAgIH07CisgICAgdGhpcy5nZXRVbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kdW5kb01hbmFnZXIgfHwgdGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2Vy
OworICAgIH07CisgICAgdGhpcy5nZXRUYWJTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHRoaXMuZ2V0VXNlU29mdFRhYnMoKSkgeworICAgICAgICAgICAgcmV0dXJuIGxhbmcuc3Ry
aW5nUmVwZWF0KCIgIiwgdGhpcy5nZXRUYWJTaXplKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuICJcdCI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4kdXNl
U29mdFRhYnMgPSB0cnVlOworICAgIHRoaXMuc2V0VXNlU29mdFRhYnMgPSBmdW5jdGlvbih1c2VT
b2Z0VGFicykgeworICAgICAgICBpZiAodGhpcy4kdXNlU29mdFRhYnMgPT09IHVzZVNvZnRUYWJz
KSByZXR1cm47CisKKyAgICAgICAgdGhpcy4kdXNlU29mdFRhYnMgPSB1c2VTb2Z0VGFiczsKKyAg
ICB9OworICAgIHRoaXMuZ2V0VXNlU29mdFRhYnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJHVzZVNvZnRUYWJzOworICAgIH07CisKKyAgICB0aGlzLiR0YWJTaXplID0gNDsK
KyAgICB0aGlzLnNldFRhYlNpemUgPSBmdW5jdGlvbih0YWJTaXplKSB7CisgICAgICAgIGlmIChp
c05hTih0YWJTaXplKSB8fCB0aGlzLiR0YWJTaXplID09PSB0YWJTaXplKSByZXR1cm47CisKKyAg
ICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNo
ZSA9IFtdOworICAgICAgICB0aGlzLiR0YWJTaXplID0gdGFiU2l6ZTsKKyAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlVGFiU2l6ZSIpOworICAgIH07CisgICAgdGhpcy5nZXRUYWJTaXplID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplOworICAgIH07CisgICAgdGhp
cy5pc1RhYlN0b3AgPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICByZXR1cm4gdGhpcy4k
dXNlU29mdFRhYnMgJiYgKHBvc2l0aW9uLmNvbHVtbiAlIHRoaXMuJHRhYlNpemUgPT0gMCk7Cisg
ICAgfTsKKworICAgIHRoaXMuJG92ZXJ3cml0ZSA9IGZhbHNlOworICAgIHRoaXMuc2V0T3Zlcndy
aXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7CisgICAgICAgIGlmICh0aGlzLiRvdmVyd3JpdGUg
PT0gb3ZlcndyaXRlKSByZXR1cm47CisKKyAgICAgICAgdGhpcy4kb3ZlcndyaXRlID0gb3Zlcndy
aXRlOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VPdmVyd3JpdGUiKTsKKyAgICB9OworICAg
IHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRv
dmVyd3JpdGU7CisgICAgfTsKKyAgICB0aGlzLnRvZ2dsZU92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLnNldE92ZXJ3cml0ZSghdGhpcy4kb3ZlcndyaXRlKTsKKyAgICB9Owor
ICAgIHRoaXMuYWRkR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7
CisgICAgICAgIGlmICghdGhpcy4kZGVjb3JhdGlvbnNbcm93XSkKKyAgICAgICAgICAgIHRoaXMu
JGRlY29yYXRpb25zW3Jvd10gPSAiIjsKKyAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSAr
PSAiICIgKyBjbGFzc05hbWU7CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQi
LCB7fSk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlv
bihyb3csIGNsYXNzTmFtZSkgeworICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddID0gKHRo
aXMuJGRlY29yYXRpb25zW3Jvd10gfHwgIiIpLnJlcGxhY2UoIiAiICsgY2xhc3NOYW1lLCAiIik7
CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAg
ICB0aGlzLmdldEJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlz
LiRicmVha3BvaW50czsKKyAgICB9OworICAgIHRoaXMuc2V0QnJlYWtwb2ludHMgPSBmdW5jdGlv
bihyb3dzKSB7CisgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAo
dmFyIGk9MDsgaTxyb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLiRicmVha3Bv
aW50c1tyb3dzW2ldXSA9ICJhY2VfYnJlYWtwb2ludCI7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuY2xlYXJC
cmVha3BvaW50cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRicmVha3BvaW50cyA9IFtd
OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07Cisg
ICAgdGhpcy5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKKyAgICAg
ICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgY2xhc3NOYW1lID0g
ImFjZV9icmVha3BvaW50IjsKKyAgICAgICAgaWYgKGNsYXNzTmFtZSkKKyAgICAgICAgICAgIHRo
aXMuJGJyZWFrcG9pbnRzW3Jvd10gPSBjbGFzc05hbWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLiRicmVha3BvaW50c1tyb3ddOworICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07CisgICAgdGhpcy5jbGVhckJyZWFrcG9pbnQg
PSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107
CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAg
ICB0aGlzLmFkZE1hcmtlciA9IGZ1bmN0aW9uKHJhbmdlLCBjbGF6eiwgdHlwZSwgaW5Gcm9udCkg
eworICAgICAgICB2YXIgaWQgPSB0aGlzLiRtYXJrZXJJZCsrOworCisgICAgICAgIHZhciBtYXJr
ZXIgPSB7CisgICAgICAgICAgICByYW5nZSA6IHJhbmdlLAorICAgICAgICAgICAgdHlwZSA6IHR5
cGUgfHwgImxpbmUiLAorICAgICAgICAgICAgcmVuZGVyZXI6IHR5cGVvZiB0eXBlID09ICJmdW5j
dGlvbiIgPyB0eXBlIDogbnVsbCwKKyAgICAgICAgICAgIGNsYXp6IDogY2xhenosCisgICAgICAg
ICAgICBpbkZyb250OiAhIWluRnJvbnQsCisgICAgICAgICAgICBpZDogaWQKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpbkZyb250KSB7CisgICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNb
aWRdID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIi
KQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy4kYmFja01hcmtlcnNbaWRdID0g
bWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpCisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gaWQ7CisgICAgfTsKKyAgICB0aGlzLmFkZER5bmFtaWNN
YXJrZXIgPSBmdW5jdGlvbihtYXJrZXIsIGluRnJvbnQpIHsKKyAgICAgICAgaWYgKCFtYXJrZXIu
dXBkYXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgaWQgPSB0aGlzLiRtYXJr
ZXJJZCsrOworICAgICAgICBtYXJrZXIuaWQgPSBpZDsKKyAgICAgICAgbWFya2VyLmluRnJvbnQg
PSAhIWluRnJvbnQ7CisKKyAgICAgICAgaWYgKGluRnJvbnQpIHsKKyAgICAgICAgICAgIHRoaXMu
JGZyb250TWFya2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VGcm9udE1hcmtlciIpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLiRiYWNr
TWFya2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNr
TWFya2VyIikKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXJrZXI7CisgICAgfTsKKyAg
ICB0aGlzLnJlbW92ZU1hcmtlciA9IGZ1bmN0aW9uKG1hcmtlcklkKSB7CisgICAgICAgIHZhciBt
YXJrZXIgPSB0aGlzLiRmcm9udE1hcmtlcnNbbWFya2VySWRdIHx8IHRoaXMuJGJhY2tNYXJrZXJz
W21hcmtlcklkXTsKKyAgICAgICAgaWYgKCFtYXJrZXIpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIG1hcmtlcnMgPSBtYXJrZXIuaW5Gcm9udCA/IHRoaXMuJGZyb250TWFya2Vy
cyA6IHRoaXMuJGJhY2tNYXJrZXJzOworICAgICAgICBpZiAobWFya2VyKSB7CisgICAgICAgICAg
ICBkZWxldGUgKG1hcmtlcnNbbWFya2VySWRdKTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQobWFy
a2VyLmluRnJvbnQgPyAiY2hhbmdlRnJvbnRNYXJrZXIiIDogImNoYW5nZUJhY2tNYXJrZXIiKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRNYXJrZXJzID0gZnVuY3Rpb24oaW5Gcm9u
dCkgeworICAgICAgICByZXR1cm4gaW5Gcm9udCA/IHRoaXMuJGZyb250TWFya2VycyA6IHRoaXMu
JGJhY2tNYXJrZXJzOworICAgIH07CisKKyAgICB0aGlzLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJl
KSB7CisgICAgICAgIGlmICghdGhpcy4kc2VhcmNoSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICB2
YXIgaGlnaGxpZ2h0ID0gbmV3IFNlYXJjaEhpZ2hsaWdodChudWxsLCAiYWNlX3NlbGVjdGVkLXdv
cmQiLCAidGV4dCIpOworICAgICAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0ID0gdGhpcy5h
ZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kc2Vh
cmNoSGlnaGxpZ2h0LnNldFJlZ2V4cChyZSk7CisgICAgfQorICAgIHRoaXMuaGlnaGxpZ2h0TGlu
ZXMgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBjbGF6eiwgaW5Gcm9udCkgeworICAgICAg
ICBpZiAodHlwZW9mIGVuZFJvdyAhPSAibnVtYmVyIikgeworICAgICAgICAgICAgY2xhenogPSBl
bmRSb3c7CisgICAgICAgICAgICBlbmRSb3cgPSBzdGFydFJvdzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWNsYXp6KQorICAgICAgICAgICAgY2xhenogPSAiYWNlX3N0ZXAiOworICAgICAgICAK
KyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0Um93LCAwLCBlbmRSb3csIEluZmlu
aXR5KTsKKyAgICAgICAgCisgICAgICAgIHZhciBpZCA9IHRoaXMuYWRkTWFya2VyKHJhbmdlLCBj
bGF6eiwgImZ1bGxMaW5lIiwgaW5Gcm9udCk7CisgICAgICAgIHJhbmdlLmlkID0gaWQ7CisgICAg
ICAgIHJldHVybiByYW5nZTsKKyAgICB9OworICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5j
dGlvbihhbm5vdGF0aW9ucykgeworICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IGFubm90YXRp
b25zOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VBbm5vdGF0aW9uIiwge30pOworICAgIH07
CisgICAgdGhpcy5nZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy4kYW5ub3RhdGlvbnMgfHwgW107CisgICAgfTsKKyAgICB0aGlzLmNsZWFyQW5ub3RhdGlv
bnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSB7fTsKKyAgICAg
ICAgdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIsIHt9KTsKKyAgICB9OworICAgIHRoaXMu
JGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBtYXRjaCA9IHRl
eHQubWF0Y2goL14uKj8oXHI/XG4pL20pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
ICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2hbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7CisgICAgICAgIH0KKyAgICB9OworICAg
IHRoaXMuZ2V0V29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFy
IGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKworICAgICAgICB2YXIgaW5Ub2tlbiA9IGZhbHNl
OworICAgICAgICBpZiAoY29sdW1uID4gMCkKKyAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUu
Y2hhckF0KGNvbHVtbiAtIDEpLm1hdGNoKHRoaXMudG9rZW5SZSk7CisKKyAgICAgICAgaWYgKCFp
blRva2VuKQorICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uKS5tYXRj
aCh0aGlzLnRva2VuUmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGluVG9rZW4pCisgICAgICAg
ICAgICB2YXIgcmUgPSB0aGlzLnRva2VuUmU7CisgICAgICAgIGVsc2UgaWYgKC9eXHMrJC8udGVz
dChsaW5lLnNsaWNlKGNvbHVtbi0xLCBjb2x1bW4rMSkpKQorICAgICAgICAgICAgdmFyIHJlID0g
L1xzLzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFyIHJlID0gdGhpcy5ub25Ub2tlblJl
OworCisgICAgICAgIHZhciBzdGFydCA9IGNvbHVtbjsKKyAgICAgICAgaWYgKHN0YXJ0ID4gMCkg
eworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHN0YXJ0LS07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoc3RhcnQgPj0gMCAmJiBsaW5lLmNoYXJBdChzdGFydCku
bWF0Y2gocmUpKTsKKyAgICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgZW5kID0gY29sdW1uOworICAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgbGlu
ZS5jaGFyQXQoZW5kKS5tYXRjaChyZSkpIHsKKyAgICAgICAgICAgIGVuZCsrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3csIHN0YXJ0LCByb3csIGVuZCk7CisgICAg
fTsKKyAgICB0aGlzLmdldEFXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAg
ICAgICB2YXIgd29yZFJhbmdlID0gdGhpcy5nZXRXb3JkUmFuZ2Uocm93LCBjb2x1bW4pOworICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZSh3b3JkUmFuZ2UuZW5kLnJvdyk7CisKKyAgICAg
ICAgd2hpbGUgKGxpbmUuY2hhckF0KHdvcmRSYW5nZS5lbmQuY29sdW1uKS5tYXRjaCgvWyBcdF0v
KSkgeworICAgICAgICAgICAgd29yZFJhbmdlLmVuZC5jb2x1bW4gKz0gMTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gd29yZFJhbmdlOworICAgIH07CisgICAgdGhpcy5zZXROZXdMaW5lTW9k
ZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CisgICAgICAgIHRoaXMuZG9jLnNldE5ld0xpbmVN
b2RlKG5ld0xpbmVNb2RlKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TmV3TGluZU1vZGUgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldE5ld0xpbmVNb2RlKCk7CisgICAg
fTsKKworICAgIHRoaXMuJHVzZVdvcmtlciA9IHRydWU7CisgICAgdGhpcy5zZXRVc2VXb3JrZXIg
PSBmdW5jdGlvbih1c2VXb3JrZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuJHVzZVdvcmtlciA9PSB1
c2VXb3JrZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kdXNlV29ya2Vy
ID0gdXNlV29ya2VyOworCisgICAgICAgIHRoaXMuJHN0b3BXb3JrZXIoKTsKKyAgICAgICAgaWYg
KHVzZVdvcmtlcikKKyAgICAgICAgICAgIHRoaXMuJHN0YXJ0V29ya2VyKCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFVzZVdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
dXNlV29ya2VyOworICAgIH07CisgICAgdGhpcy5vblJlbG9hZFRva2VuaXplciA9IGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgdmFyIHJvd3MgPSBlLmRhdGE7CisgICAgICAgIHRoaXMuYmdUb2tlbml6
ZXIuc3RhcnQocm93cy5maXJzdCk7CisgICAgICAgIHRoaXMuX2VtaXQoInRva2VuaXplclVwZGF0
ZSIsIGUpOworICAgIH07CisKKyAgICB0aGlzLiRtb2RlcyA9IHt9OworICAgIHRoaXMuJG1vZGUg
PSBudWxsOworICAgIHRoaXMuJG1vZGVJZCA9IG51bGw7CisgICAgdGhpcy5zZXRNb2RlID0gZnVu
Y3Rpb24obW9kZSkgeworICAgICAgICBpZiAobW9kZSAmJiB0eXBlb2YgbW9kZSA9PT0gIm9iamVj
dCIpIHsKKyAgICAgICAgICAgIGlmIChtb2RlLmdldFRva2VuaXplcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKG1vZGUpOworICAgICAgICAgICAgdmFyIG9wdGlv
bnMgPSBtb2RlOworICAgICAgICAgICAgdmFyIHBhdGggPSBvcHRpb25zLnBhdGg7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gbW9kZSB8fCAiYWNlL21vZGUvdGV4dCI7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdKQorICAg
ICAgICAgICAgdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSA9IG5ldyBUZXh0TW9kZSgpOwor
CisgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbcGF0aF0pOworICAgICAgICB0
aGlzLiRtb2RlSWQgPSBwYXRoOworICAgICAgICBjb25maWcubG9hZE1vZHVsZShbIm1vZGUiLCBw
YXRoXSwgZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVJZCAhPT0gcGF0
aCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAodGhpcy4kbW9kZXNb
cGF0aF0gJiYgIW9wdGlvbnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdl
TW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7CisgICAgICAgICAgICBpZiAobSAmJiBtLk1vZGUpIHsK
KyAgICAgICAgICAgICAgICBtID0gbmV3IG0uTW9kZShvcHRpb25zKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kbW9kZXNbcGF0aF0g
PSBtOworICAgICAgICAgICAgICAgICAgICBtLiRpZCA9IHBhdGg7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZShtKQorICAgICAgICAgICAgfQor
ICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICBpZiAoIXRoaXMuJG1vZGUpCisgICAgICAg
ICAgICB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSwgdHJ1
ZSk7CisgICAgfTsKKworICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSA9IGZ1bmN0aW9uKG1vZGUsICRp
c1BsYWNlaG9sZGVyKSB7CisgICAgICAgIGlmICh0aGlzLiRtb2RlID09PSBtb2RlKSByZXR1cm47
CisgICAgICAgIHRoaXMuJG1vZGUgPSBtb2RlOworCisgICAgICAgIHRoaXMuJHN0b3BXb3JrZXIo
KTsKKworICAgICAgICBpZiAodGhpcy4kdXNlV29ya2VyKQorICAgICAgICAgICAgdGhpcy4kc3Rh
cnRXb3JrZXIoKTsKKworICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9kZS5nZXRUb2tlbml6ZXIo
KTsKKworICAgICAgICBpZih0b2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lciAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgICB2YXIgb25SZWxvYWRUb2tlbml6ZXIgPSB0aGlzLm9uUmVsb2FkVG9r
ZW5pemVyLmJpbmQodGhpcyk7CisgICAgICAgICAgICB0b2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5l
cigidXBkYXRlIiwgb25SZWxvYWRUb2tlbml6ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF0aGlzLmJnVG9rZW5pemVyKSB7CisgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyID0gbmV3
IEJhY2tncm91bmRUb2tlbml6ZXIodG9rZW5pemVyKTsKKyAgICAgICAgICAgIHZhciBfc2VsZiA9
IHRoaXM7CisgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIoInVw
ZGF0ZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICBfc2VsZi5fZW1pdCgidG9rZW5p
emVyVXBkYXRlIiwgZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKHRva2VuaXplcik7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1l
bnQoKSk7CisKKyAgICAgICAgdGhpcy50b2tlblJlID0gbW9kZS50b2tlblJlOworICAgICAgICB0
aGlzLm5vblRva2VuUmUgPSBtb2RlLm5vblRva2VuUmU7CisKKworICAgICAgICBpZiAoISRpc1Bs
YWNlaG9sZGVyKSB7CisgICAgICAgICAgICB0aGlzLiRtb2RlSWQgPSBtb2RlLiRpZDsKKyAgICAg
ICAgICAgIHRoaXMuJHNldEZvbGRpbmcobW9kZS5mb2xkaW5nUnVsZXMpOworICAgICAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlTW9kZSIpOworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5z
dGFydCgwKTsKKyAgICAgICAgfQorICAgIH07CisKKworICAgIHRoaXMuJHN0b3BXb3JrZXIgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuJHdvcmtlcikKKyAgICAgICAgICAgIHRoaXMu
JHdvcmtlci50ZXJtaW5hdGUoKTsKKworICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsOworICAg
IH07CisKKworICAgIHRoaXMuJHN0YXJ0V29ya2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh0eXBlb2YgV29ya2VyICE9PSAidW5kZWZpbmVkIiAmJiAhcmVxdWlyZS5ub1dvcmtlcikgewor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0aGlzLiR3b3JrZXIgPSB0aGlzLiRt
b2RlLmNyZWF0ZVdvcmtlcih0aGlzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygiQ291bGQgbm90IGxvYWQgd29ya2VyIik7CisgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coZSk7CisgICAgICAgICAgICAgICAgdGhpcy4kd29ya2VyID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLiR3b3JrZXIgPSBudWxsOworICAgIH07CisgICAgdGhpcy5nZXRNb2RlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRtb2RlOworICAgIH07CisKKyAgICB0aGlzLiRz
Y3JvbGxUb3AgPSAwOworICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oc2Nyb2xsVG9w
KSB7CisgICAgICAgIHNjcm9sbFRvcCA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgc2Nyb2xsVG9w
KSk7CisgICAgICAgIGlmICh0aGlzLiRzY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB0aGlzLiRzY3JvbGxUb3AgPSBzY3JvbGxUb3A7CisgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZVNjcm9sbFRvcCIsIHNjcm9sbFRvcCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
c2Nyb2xsVG9wOworICAgIH07CisKKyAgICB0aGlzLiRzY3JvbGxMZWZ0ID0gMDsKKyAgICB0aGlz
LnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7CisgICAgICAgIHNjcm9sbExl
ZnQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbExlZnQpKTsKKyAgICAgICAgaWYgKHRo
aXMuJHNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZVNjcm9sbExlZnQiLCBzY3JvbGxMZWZ0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Ny
b2xsTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kc2Nyb2xsTGVmdDsK
KyAgICB9OworICAgIHRoaXMuZ2V0U2NyZWVuV2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kY29tcHV0ZVdpZHRoKCk7CisgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoOwor
ICAgIH07CisKKyAgICB0aGlzLiRjb21wdXRlV2lkdGggPSBmdW5jdGlvbihmb3JjZSkgeworICAg
ICAgICBpZiAodGhpcy4kbW9kaWZpZWQgfHwgZm9yY2UpIHsKKyAgICAgICAgICAgIHRoaXMuJG1v
ZGlmaWVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5XaWR0aCA9IHRoaXMuJHdyYXBMaW1pdDsK
KworICAgICAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5kb2MuZ2V0QWxsTGluZXMoKTsKKyAgICAg
ICAgICAgIHZhciBjYWNoZSA9IHRoaXMuJHJvd0xlbmd0aENhY2hlOworICAgICAgICAgICAgdmFy
IGxvbmdlc3RTY3JlZW5MaW5lID0gMDsKKyAgICAgICAgICAgIHZhciBmb2xkSW5kZXggPSAwOwor
ICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy4kZm9sZERhdGFbZm9sZEluZGV4XTsKKyAg
ICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6
IEluZmluaXR5OworICAgICAgICAgICAgdmFyIGxlbiA9IGxpbmVzLmxlbmd0aDsKKworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChpID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBmb2xkTGluZS5lbmQu
cm93ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gbGVuKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy4k
Zm9sZERhdGFbZm9sZEluZGV4KytdOworICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBm
b2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmIChjYWNoZVtpXSA9PSBudWxsKQorICAgICAgICAgICAg
ICAgICAgICBjYWNoZVtpXSA9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKGxpbmVzW2ldKVsw
XTsKKworICAgICAgICAgICAgICAgIGlmIChjYWNoZVtpXSA+IGxvbmdlc3RTY3JlZW5MaW5lKQor
ICAgICAgICAgICAgICAgICAgICBsb25nZXN0U2NyZWVuTGluZSA9IGNhY2hlW2ldOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5zY3JlZW5XaWR0aCA9IGxvbmdlc3RTY3JlZW5MaW5l
OworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldExpbmUgPSBmdW5jdGlvbihyb3cpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExpbmUocm93KTsKKyAgICB9OworICAgIHRoaXMu
Z2V0TGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICByZXR1cm4g
dGhpcy5kb2MuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgIH07CisgICAgdGhpcy5n
ZXRMZW5ndGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExlbmd0
aCgpOworICAgIH07CisgICAgdGhpcy5nZXRUZXh0UmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewor
ICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlIHx8IHRoaXMuc2VsZWN0
aW9uLmdldFJhbmdlKCkpOworICAgIH07CisgICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3Np
dGlvbiwgdGV4dCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MuaW5zZXJ0KHBvc2l0aW9uLCB0
ZXh0KTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZG9jLnJlbW92ZShyYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLnVuZG9D
aGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7CisgICAgICAgIGlmICghZGVs
dGFzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLiRmcm9tVW5k
byA9IHRydWU7CisgICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVsbDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IGRlbHRhcy5sZW5ndGggLSAxOyBpICE9IC0xOyBpLS0pIHsKKyAgICAgICAgICAg
IHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKKyAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSAi
ZG9jIikgeworICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJldmVydERlbHRhcyhkZWx0YS5kZWx0
YXMpOworICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgdHJ1ZSwgbGFzdFVuZG9SYW5n
ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbHRhLmRlbHRhcy5m
b3JFYWNoKGZ1bmN0aW9uKGZvbGREZWx0YSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFk
ZEZvbGRzKGZvbGREZWx0YS5mb2xkcyk7CisgICAgICAgICAgICAgICAgfSwgdGhpcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKKyAg
ICAgICAgbGFzdFVuZG9SYW5nZSAmJgorICAgICAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCAmJgor
ICAgICAgICAgICAgIWRvbnRTZWxlY3QgJiYKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNl
dFNlbGVjdGlvblJhbmdlKGxhc3RVbmRvUmFuZ2UpOworICAgICAgICByZXR1cm4gbGFzdFVuZG9S
YW5nZTsKKyAgICB9OworICAgIHRoaXMucmVkb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRv
bnRTZWxlY3QpIHsKKyAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKKyAgICAgICAgdmFyIGxhc3RV
bmRvUmFuZ2UgPSBudWxsOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOworICAgICAgICAg
ICAgaWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kb2Mu
YXBwbHlEZWx0YXMoZGVsdGEuZGVsdGFzKTsKKyAgICAgICAgICAgICAgICBsYXN0VW5kb1Jhbmdl
ID0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0
YXMsIGZhbHNlLCBsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOworICAgICAgICBsYXN0VW5kb1JhbmdlICYmCisg
ICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCisgICAgICAgICAgICAhZG9udFNlbGVjdCAm
JgorICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVuZG9S
YW5nZSk7CisgICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgIH07CisgICAgdGhpcy5z
ZXRVbmRvU2VsZWN0ID0gZnVuY3Rpb24oZW5hYmxlKSB7CisgICAgICAgIHRoaXMuJHVuZG9TZWxl
Y3QgPSBlbmFibGU7CisgICAgfTsKKworICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24gPSBmdW5j
dGlvbihkZWx0YXMsIGlzVW5kbywgbGFzdFVuZG9SYW5nZSkgeworICAgICAgICBmdW5jdGlvbiBp
c0luc2VydChkZWx0YSkgeworICAgICAgICAgICAgdmFyIGluc2VydCA9CisgICAgICAgICAgICAg
ICAgZGVsdGEuYWN0aW9uID09ICJpbnNlcnRUZXh0IiB8fCBkZWx0YS5hY3Rpb24gPT0gImluc2Vy
dExpbmVzIjsKKyAgICAgICAgICAgIHJldHVybiBpc1VuZG8gPyAhaW5zZXJ0IDogaW5zZXJ0Owor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzWzBdOworICAgICAgICB2YXIg
cmFuZ2UsIHBvaW50OworICAgICAgICB2YXIgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGlzSW5zZXJ0KGRlbHRhKSkgeworICAgICAgICAgICAgcmFuZ2UgPSBkZWx0YS5y
YW5nZS5jbG9uZSgpOworICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRh
LnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICBsYXN0RGVsdGFJ
c0luc2VydCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkg
PCBkZWx0YXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGRlbHRhID0gZGVsdGFzW2ldOwor
ICAgICAgICAgICAgaWYgKGlzSW5zZXJ0KGRlbHRhKSkgeworICAgICAgICAgICAgICAgIHBvaW50
ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUo
cG9pbnQucm93LCBwb2ludC5jb2x1bW4pID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJh
bmdlLnNldFN0YXJ0KGRlbHRhLnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5lbmQ7CisgICAgICAgICAgICAgICAgaWYg
KHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1bW4pID09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGRlbHRhLnJhbmdlLmVuZCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5zdGFydDsK
KyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVt
bikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPQorICAgICAgICAgICAgICAg
ICAgICAgICAgUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uu
c3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0RGVsdGFJc0lu
c2VydCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChsYXN0
VW5kb1JhbmdlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBjbXAgPSBsYXN0VW5kb1Jhbmdl
LmNvbXBhcmVSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBpZiAoY21wID09IDEpIHsKKyAgICAg
ICAgICAgICAgICByYW5nZS5zZXRTdGFydChsYXN0VW5kb1JhbmdlLnN0YXJ0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY21wID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5k
KGxhc3RVbmRvUmFuZ2UuZW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByYW5nZTsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdl
LCB0ZXh0KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5yZXBsYWNlKHJhbmdlLCB0ZXh0KTsK
KyAgICB9OworICAgIHRoaXMubW92ZVRleHQgPSBmdW5jdGlvbihmcm9tUmFuZ2UsIHRvUG9zaXRp
b24pIHsKKyAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldFRleHRSYW5nZShmcm9tUmFuZ2UpOwor
ICAgICAgICB0aGlzLnJlbW92ZShmcm9tUmFuZ2UpOworCisgICAgICAgIHZhciB0b1JvdyA9IHRv
UG9zaXRpb24ucm93OworICAgICAgICB2YXIgdG9Db2x1bW4gPSB0b1Bvc2l0aW9uLmNvbHVtbjsK
KyAgICAgICAgaWYgKCFmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBmcm9tUmFuZ2Uuc3RhcnQu
cm93ID09IHRvUm93ICYmCisgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVtbiA8IHRvQ29s
dW1uKQorICAgICAgICAgICAgdG9Db2x1bW4gLT0gdGV4dC5sZW5ndGg7CisKKyAgICAgICAgaWYg
KGZyb21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5lbmQucm93IDwgdG9Sb3cpIHsK
KyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLiRzcGxpdCh0ZXh0KTsKKyAgICAgICAg
ICAgIHRvUm93IC09IGxpbmVzLmxlbmd0aCAtIDE7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
ZW5kUm93ID0gdG9Sb3cgKyBmcm9tUmFuZ2UuZW5kLnJvdyAtIGZyb21SYW5nZS5zdGFydC5yb3c7
CisgICAgICAgIHZhciBlbmRDb2x1bW4gPSBmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVtbiA6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b0NvbHVtbiArIGZyb21SYW5nZS5lbmQuY29sdW1uIC0gZnJvbVJhbmdlLnN0
YXJ0LmNvbHVtbjsKKworICAgICAgICB2YXIgdG9SYW5nZSA9IG5ldyBSYW5nZSh0b1JvdywgdG9D
b2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKKworICAgICAgICB0aGlzLmluc2VydCh0b1Jhbmdl
LnN0YXJ0LCB0ZXh0KTsKKworICAgICAgICByZXR1cm4gdG9SYW5nZTsKKyAgICB9OworICAgIHRo
aXMuaW5kZW50Um93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGluZGVudFN0cmluZykg
eworICAgICAgICBpbmRlbnRTdHJpbmcgPSBpbmRlbnRTdHJpbmcucmVwbGFjZSgvXHQvZywgdGhp
cy5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgIGZvciAodmFyIHJvdz1zdGFydFJvdzsgcm93PD1l
bmRSb3c7IHJvdysrKQorICAgICAgICAgICAgdGhpcy5pbnNlcnQoe3Jvdzogcm93LCBjb2x1bW46
MH0sIGluZGVudFN0cmluZyk7CisgICAgfTsKKyAgICB0aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rp
b24gKHJhbmdlKSB7CisgICAgICAgIHZhciByb3dSYW5nZSA9IHJhbmdlLmNvbGxhcHNlUm93cygp
OworICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAg
ICAgIHZhciBzaXplID0gdGhpcy5nZXRUYWJTaXplKCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IHJvd1JhbmdlLnN0YXJ0LnJvdzsgaSA8PSByb3dSYW5nZS5lbmQucm93OyArK2kpIHsKKyAgICAg
ICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKGkpOworCisgICAgICAgICAgICBkZWxldGVS
YW5nZS5zdGFydC5yb3cgPSBpOworICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7ICsraikKKyAgICAgICAgICAg
ICAgICBpZiAobGluZS5jaGFyQXQoaikgIT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChqIDwgc2l6ZSAmJiBsaW5lLmNoYXJBdChqKSA9PSAnXHQnKSB7
CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gajsKKyAgICAgICAg
ICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gaiArIDE7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7CisgICAg
ICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGo7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLnJlbW92ZShkZWxldGVSYW5nZSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAg
ICAgICBpZiAoZmlyc3RSb3cgPD0gMCkgcmV0dXJuIDA7CisKKyAgICAgICAgdmFyIHJlbW92ZWQg
PSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHRoaXMu
ZG9jLmluc2VydExpbmVzKGZpcnN0Um93IC0gMSwgcmVtb3ZlZCk7CisgICAgICAgIHJldHVybiAt
MTsKKyAgICB9OworICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKGZpcnN0Um93LCBs
YXN0Um93KSB7CisgICAgICAgIGlmIChsYXN0Um93ID49IHRoaXMuZG9jLmdldExlbmd0aCgpLTEp
IHJldHVybiAwOworCisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5kb2MucmVtb3ZlTGluZXMo
Zmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJv
dysxLCByZW1vdmVkKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfTsKKyAgICB0aGlzLmR1cGxp
Y2F0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGZp
cnN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoZmlyc3RSb3cpOworICAgICAgICB2YXIg
bGFzdFJvdyA9IHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50KGxhc3RSb3cpOworCisgICAgICAgIHZh
ciBsaW5lcyA9IHRoaXMuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB0aGlz
LmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdywgbGluZXMpOworCisgICAgICAgIHZhciBhZGRlZFJv
d3MgPSBsYXN0Um93IC0gZmlyc3RSb3cgKyAxOworICAgICAgICByZXR1cm4gYWRkZWRSb3dzOwor
ICAgIH07CisKKworICAgIHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7
CisgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3csIHRoaXMuZG9jLmdldExl
bmd0aCgpLTEpKTsKKyAgICB9OworCisgICAgdGhpcy4kY2xpcENvbHVtblRvUm93ID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKGNvbHVtbiA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUocm93KS5s
ZW5ndGgsIGNvbHVtbik7CisgICAgfTsKKworCisgICAgdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1
bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4
KDAsIGNvbHVtbik7CisKKyAgICAgICAgaWYgKHJvdyA8IDApIHsKKyAgICAgICAgICAgIHJvdyA9
IDA7CisgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpOworICAgICAgICAgICAgaWYgKHJvdyA+
PSBsZW4pIHsKKyAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxOworICAgICAgICAgICAgICAg
IGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGlu
ZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICByb3c6IHJvdywKKyAgICAgICAgICAgIGNvbHVtbjog
Y29sdW1uCisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1l
bnQgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgMCkg
eworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gMDsKKyAgICAgICAgICAgIHJhbmdlLnN0
YXJ0LmNvbHVtbiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYW5nZS5zdGFy
dC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coCisgICAgICAgICAgICAgICAgcmFuZ2Uu
c3RhcnQucm93LAorICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbgorICAgICAgICAg
ICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgo
KSAtIDE7CisgICAgICAgIGlmIChyYW5nZS5lbmQucm93ID4gbGVuKSB7CisgICAgICAgICAgICBy
YW5nZS5lbmQucm93ID0gbGVuOworICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMu
ZG9jLmdldExpbmUobGVuKS5sZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
YW5nZS5lbmQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KAorICAgICAgICAgICAgICAg
IHJhbmdlLmVuZC5yb3csCisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbgorICAgICAg
ICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKyAgICB0
aGlzLiR3cmFwTGltaXQgPSA4MDsKKyAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlOworICAg
IHRoaXMuJHdyYXBMaW1pdFJhbmdlID0geworICAgICAgICBtaW4gOiBudWxsLAorICAgICAgICBt
YXggOiBudWxsCisgICAgfTsKKyAgICB0aGlzLnNldFVzZVdyYXBNb2RlID0gZnVuY3Rpb24odXNl
V3JhcE1vZGUpIHsKKyAgICAgICAgaWYgKHVzZVdyYXBNb2RlICE9IHRoaXMuJHVzZVdyYXBNb2Rl
KSB7CisgICAgICAgICAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IHVzZVdyYXBNb2RlOworICAgICAg
ICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dD
YWNoZSgwKTsKKyAgICAgICAgICAgIGlmICh1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgICAg
IHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpOworICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBE
YXRhID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLiR3cmFwRGF0YS5wdXNoKFtdKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoMCwgbGVuIC0g
MSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVdyYXBN
b2RlIik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0VXNlV3JhcE1vZGUgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVdyYXBNb2RlOworICAgIH07CisgICAg
dGhpcy5zZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7CisgICAgICAgIGlm
ICh0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gIT09IG1pbiB8fCB0aGlzLiR3cmFwTGltaXRSYW5n
ZS5tYXggIT09IG1heCkgeworICAgICAgICAgICAgdGhpcy4kd3JhcExpbWl0UmFuZ2UubWluID0g
bWluOworICAgICAgICAgICAgdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4ID0gbWF4OworICAgICAg
ICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hh
bmdlV3JhcE1vZGUiKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5hZGp1c3RXcmFwTGlt
aXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQpIHsKKyAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRo
aXMuJGNvbnN0cmFpbldyYXBMaW1pdChkZXNpcmVkTGltaXQpOworICAgICAgICBpZiAod3JhcExp
bWl0ICE9IHRoaXMuJHdyYXBMaW1pdCAmJiB3cmFwTGltaXQgPiAwKSB7CisgICAgICAgICAgICB0
aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7CisgICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9
IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CisgICAg
ICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VXcmFwTGltaXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisg
ICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24od3JhcExpbWl0KSB7CisgICAg
ICAgIHZhciBtaW4gPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW47CisgICAgICAgIGlmIChtaW4p
CisgICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1heChtaW4sIHdyYXBMaW1pdCk7CisKKyAg
ICAgICAgdmFyIG1heCA9IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heDsKKyAgICAgICAgaWYgKG1h
eCkKKyAgICAgICAgICAgIHdyYXBMaW1pdCA9IE1hdGgubWluKG1heCwgd3JhcExpbWl0KTsKKyAg
ICAgICAgcmV0dXJuIE1hdGgubWF4KDEsIHdyYXBMaW1pdCk7CisgICAgfTsKKyAgICB0aGlzLmdl
dFdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kd3JhcExpbWl0
OworICAgIH07CisgICAgdGhpcy5nZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgbWluIDogdGhpcy4kd3JhcExpbWl0UmFuZ2UubWlu
LAorICAgICAgICAgICAgbWF4IDogdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4CisgICAgICAgIH07
CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlID0gZnVuY3Rp
b24oZSkgeworICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFwTW9kZTsKKyAg
ICAgICAgdmFyIGxlbjsKKyAgICAgICAgdmFyIGFjdGlvbiA9IGUuZGF0YS5hY3Rpb247CisgICAg
ICAgIHZhciBmaXJzdFJvdyA9IGUuZGF0YS5yYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBs
YXN0Um93ID0gZS5kYXRhLnJhbmdlLmVuZC5yb3c7CisgICAgICAgIHZhciBzdGFydCA9IGUuZGF0
YS5yYW5nZS5zdGFydDsKKyAgICAgICAgdmFyIGVuZCA9IGUuZGF0YS5yYW5nZS5lbmQ7CisgICAg
ICAgIHZhciByZW1vdmVkRm9sZHMgPSBudWxsOworCisgICAgICAgIGlmIChhY3Rpb24uaW5kZXhP
ZigiTGluZXMiKSAhPSAtMSkgeworICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAiaW5zZXJ0TGlu
ZXMiKSB7CisgICAgICAgICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93ICsgKGUuZGF0YS5saW5l
cy5sZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0Um93
ID0gZmlyc3RSb3c7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4gPSBlLmRhdGEubGlu
ZXMgPyBlLmRhdGEubGluZXMubGVuZ3RoIDogbGFzdFJvdyAtIGZpcnN0Um93OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbGVuID0gbGFzdFJvdyAtIGZpcnN0Um93OworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxlbiAhPSAwKSB7CisgICAgICAgICAgICBpZiAoYWN0aW9uLmluZGV4
T2YoInJlbW92ZSIpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpc1t1c2VXcmFwTW9kZSA/
ICIkd3JhcERhdGEiIDogIiRyb3dMZW5ndGhDYWNoZSJdLnNwbGljZShmaXJzdFJvdywgbGVuKTsK
KworICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAg
ICAgICAgICAgICByZW1vdmVkRm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShlLmRhdGEucmFu
Z2UpOworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZvbGRzKTsKKwor
ICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZW5kLnJvdyk7
CisgICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGZvbGRM
aW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGVuZC5y
b3csIGVuZC5jb2x1bW4sIHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW4pOworICAgICAgICAgICAg
ICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKKworICAgICAgICAgICAgICAgICAgICB2
YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvbGRMaW5lQmVmb3JlICYmIGZvbGRMaW5lQmVmb3JlICE9PSBmb2xk
TGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmVCZWZvcmUubWVyZ2UoZm9s
ZExpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZUJlZm9y
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xk
TGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBm
aXJzdFJvdzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGFyZ3M7
CisgICAgICAgICAgICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICAgICAgICAg
IGFyZ3MgPSBbZmlyc3RSb3csIDBdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goW10pOworICAgICAgICAgICAgICAgICAgICB0aGlz
LiR3cmFwRGF0YS5zcGxpY2UuYXBwbHkodGhpcy4kd3JhcERhdGEsIGFyZ3MpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW4pOwor
ICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDApOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZS5zcGxpY2UuYXBwbHkodGhpcy4kcm93TGVu
Z3RoQ2FjaGUsIGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIg
Zm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5l
ID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGlkeCA9
IDA7CisgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBjbXAgPSBmb2xkTGluZS5yYW5nZS5jb21wYXJlSW5zaWRlKHN0YXJ0LnJvdywgc3RhcnQu
Y29sdW1uKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUuc3BsaXQoc3RhcnQucm93LCBzdGFydC5j
b2x1bW4pOworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1
bW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3Zl
Q2hhcnMoZmlyc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGlu
ZSkgKyAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaWR4OyBp
ZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Zm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRM
aW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9s
ZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbiA9
IE1hdGguYWJzKGUuZGF0YS5yYW5nZS5zdGFydC5jb2x1bW4gLSBlLmRhdGEucmFuZ2UuZW5kLmNv
bHVtbik7CisgICAgICAgICAgICBpZiAoYWN0aW9uLmluZGV4T2YoInJlbW92ZSIpICE9IC0xKSB7
CisgICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZS5k
YXRhLnJhbmdlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xk
cyk7CisKKyAgICAgICAgICAgICAgICBsZW4gPSAtbGVuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAg
ICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVD
aGFycyhmaXJzdFJvdywgc3RhcnQuY29sdW1uLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRhLmxlbmd0aCAh
PSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigiZG9j
LmdldExlbmd0aCgpIGFuZCAkd3JhcERhdGEubGVuZ3RoIGhhdmUgdG8gYmUgdGhlIHNhbWUhIik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlV3JhcE1vZGUpCisgICAgICAgICAgICB0aGlz
LiR1cGRhdGVXcmFwRGF0YShmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZpcnN0Um93LCBsYXN0Um93KTsKKwor
ICAgICAgICByZXR1cm4gcmVtb3ZlZEZvbGRzOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVS
b3dMZW5ndGhDYWNoZSA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93LCBiKSB7CisgICAgICAg
IHRoaXMuJHJvd0xlbmd0aENhY2hlW2ZpcnN0Um93XSA9IG51bGw7CisgICAgICAgIHRoaXMuJHJv
d0xlbmd0aENhY2hlW2xhc3RSb3ddID0gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRl
V3JhcERhdGEgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgbGlu
ZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOworICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMu
Z2V0VGFiU2l6ZSgpOworICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFwRGF0YTsKKyAg
ICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJHdyYXBMaW1pdDsKKyAgICAgICAgdmFyIHRva2Vu
czsKKyAgICAgICAgdmFyIGZvbGRMaW5lOworCisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsK
KyAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0aCAtIDEpOwor
ICAgICAgICB3aGlsZSAocm93IDw9IGxhc3RSb3cpIHsKKyAgICAgICAgICAgIGZvbGRMaW5lID0g
dGhpcy5nZXRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgIGlmICghZm9sZExp
bmUpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKGxh
bmcuc3RyaW5nVHJpbVJpZ2h0KGxpbmVzW3Jvd10pKTsKKyAgICAgICAgICAgICAgICB3cmFwRGF0
YVtyb3ddID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRhYlNp
emUpOworICAgICAgICAgICAgICAgIHJvdyArKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdG9rZW5zID0gW107CisgICAgICAgICAgICAgICAgZm9sZExpbmUud2Fsayhm
dW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB3YWxrVG9rZW5zOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsIHRva2Vucy5sZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhPTERFUl9TVEFS
VDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdhbGtU
b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fs
a1Rva2Vuc1tpXSA9IFBMQUNFSE9MREVSX0JPRFk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFzdENvbHVtbiwg
Y29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmxlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bnMgPSB0b2tlbnMuY29uY2F0KHdhbGtUb2tlbnMpOworICAgICAgICAgICAgICAgICAgICB9LmJp
bmQodGhpcyksCisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3csCisgICAgICAg
ICAgICAgICAgICAgIGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEKKyAgICAgICAg
ICAgICAgICApOworICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoICE9IDAgJiYg
dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA+PSBTUEFDRSkKKyAgICAgICAgICAgICAgICAgICAg
dG9rZW5zLnBvcCgpOworCisgICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUuc3RhcnQu
cm93XQorICAgICAgICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vu
cywgd3JhcExpbWl0LCB0YWJTaXplKTsKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5l
bmQucm93ICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIENI
QVIgPSAxLAorICAgICAgICBDSEFSX0VYVCA9IDIsCisgICAgICAgIFBMQUNFSE9MREVSX1NUQVJU
ID0gMywKKyAgICAgICAgUExBQ0VIT0xERVJfQk9EWSA9ICA0LAorICAgICAgICBQVU5DVFVBVElP
TiA9IDksCisgICAgICAgIFNQQUNFID0gMTAsCisgICAgICAgIFRBQiA9IDExLAorICAgICAgICBU
QUJfU1BBQ0UgPSAxMjsKKworCisgICAgdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMgPSBmdW5jdGlv
bih0b2tlbnMsIHdyYXBMaW1pdCkgeworICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAwKSB7
CisgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3BsaXRz
ID0gW107CisgICAgICAgIHZhciBkaXNwbGF5TGVuZ3RoID0gdG9rZW5zLmxlbmd0aDsKKyAgICAg
ICAgdmFyIGxhc3RTcGxpdCA9IDAsIGxhc3REb2NTcGxpdCA9IDA7CisKKyAgICAgICAgZnVuY3Rp
b24gYWRkU3BsaXQoc2NyZWVuUG9zKSB7CisgICAgICAgICAgICB2YXIgZGlzcGxheWVkID0gdG9r
ZW5zLnNsaWNlKGxhc3RTcGxpdCwgc2NyZWVuUG9zKTsKKyAgICAgICAgICAgIHZhciBsZW4gPSBk
aXNwbGF5ZWQubGVuZ3RoOworICAgICAgICAgICAgZGlzcGxheWVkLmpvaW4oIiIpLgorICAgICAg
ICAgICAgICAgIHJlcGxhY2UoLzEyL2csIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICBsZW4gLT0gMTsKKyAgICAgICAgICAgICAgICB9KS4KKyAgICAgICAgICAgICAgICByZXBsYWNl
KC8yL2csIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgbGFzdERvY1NwbGl0ICs9IGxlbjsKKyAgICAg
ICAgICAgIHNwbGl0cy5wdXNoKGxhc3REb2NTcGxpdCk7CisgICAgICAgICAgICBsYXN0U3BsaXQg
PSBzY3JlZW5Qb3M7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoZGlzcGxheUxlbmd0aCAt
IGxhc3RTcGxpdCA+IHdyYXBMaW1pdCkgeworICAgICAgICAgICAgdmFyIHNwbGl0ID0gbGFzdFNw
bGl0ICsgd3JhcExpbWl0OworICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0Up
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zW3NwbGl0XSA+PSBTUEFDRSkgeworICAg
ICAgICAgICAgICAgICAgICBzcGxpdCArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfU1RB
UlQKKyAgICAgICAgICAgICAgICB8fCB0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX0JPRFkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgIT0gbGFz
dFNwbGl0IC0gMTsgc3BsaXQtLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3Nw
bGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHNwbGl0ID4gbGFzdFNwbGl0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFNw
bGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OworICAg
ICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsgc3BsaXQrKykg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFDRUhPTERFUl9C
T0RZKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsgIC8vIEJyZWFrcyB0aGUgd2hpbGUtbG9vcC4KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgoc3BsaXQg
LSAxMCwgbGFzdFNwbGl0IC0gMSk7CisgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxp
dCAmJiB0b2tlbnNbc3BsaXRdIDwgUExBQ0VIT0xERVJfU1RBUlQpIHsKKyAgICAgICAgICAgICAg
ICBzcGxpdCAtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChzcGxpdCA+IG1p
blNwbGl0ICYmIHRva2Vuc1tzcGxpdF0gPT0gUFVOQ1RVQVRJT04pIHsKKyAgICAgICAgICAgICAg
ICBzcGxpdCAtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcGxpdCA+IG1pblNw
bGl0KSB7CisgICAgICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxp
dCArIHdyYXBMaW1pdDsKKyAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc3BsaXRzOworICAgIH07CisgICAgdGhpcy4kZ2V0RGlzcGxheVRva2Vu
cyA9IGZ1bmN0aW9uKHN0ciwgb2Zmc2V0KSB7CisgICAgICAgIHZhciBhcnIgPSBbXTsKKyAgICAg
ICAgdmFyIHRhYlNpemU7CisgICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOworCisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
YyA9IHN0ci5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgaWYgKGMgPT0gOSkgeworICAgICAg
ICAgICAgICAgIHRhYlNpemUgPSB0aGlzLmdldFNjcmVlblRhYlNpemUoYXJyLmxlbmd0aCArIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBuID0gMTsgbiA8IHRhYlNpemU7IG4rKykgeworICAgICAgICAgICAgICAgICAgICBh
cnIucHVzaChUQUJfU1BBQ0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMzIpIHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChT
UEFDRSk7CisgICAgICAgICAgICB9IGVsc2UgaWYoKGMgPiAzOSAmJiBjIDwgNDgpIHx8IChjID4g
NTcgJiYgYyA8IDY0KSkgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKFBVTkNUVUFUSU9OKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAwICYmIGlzRnVs
bFdpZHRoKGMpKSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUiwgQ0hBUl9FWFQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChDSEFSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyOworICAgIH07CisgICAg
dGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNjcmVlbkNvbHVt
biwgc2NyZWVuQ29sdW1uKSB7CisgICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0gMCkKKyAg
ICAgICAgICAgIHJldHVybiBbMCwgMF07CisgICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0g
bnVsbCkKKyAgICAgICAgICAgIG1heFNjcmVlbkNvbHVtbiA9IEluZmluaXR5OworICAgICAgICBz
Y3JlZW5Db2x1bW4gPSBzY3JlZW5Db2x1bW4gfHwgMDsKKworICAgICAgICB2YXIgYywgY29sdW1u
OworICAgICAgICBmb3IgKGNvbHVtbiA9IDA7IGNvbHVtbiA8IHN0ci5sZW5ndGg7IGNvbHVtbisr
KSB7CisgICAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoY29sdW1uKTsKKyAgICAgICAgICAg
IGlmIChjID09IDkpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gdGhpcy5nZXRT
Y3JlZW5UYWJTaXplKHNjcmVlbkNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkgeworICAgICAgICAgICAgICAg
IHNjcmVlbkNvbHVtbiArPSAyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzY3JlZW5Db2x1bW4gKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY3Jl
ZW5Db2x1bW4gPiBtYXhTY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBbc2NyZWVuQ29sdW1uLCBj
b2x1bW5dOworICAgIH07CisgICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHsK
KyAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERhdGFbcm93XSkg
eworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOworICAgICAgICB9CisgICAgfTsK
KyAgICB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3cpIHsK
KyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJv
dywgTnVtYmVyLk1BWF9WQUxVRSk7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3Jl
ZW5Db2x1bW4ocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLmdldERvY3Vt
ZW50TGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAgICAg
IHZhciBzY3JlZW5Sb3cgPSB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1
bW4pOworICAgICAgICByZXR1cm4gdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHNjcmVlblJv
dyk7CisgICAgfTsKKyAgICB0aGlzLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uID0g
ZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRo
aXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7CisgICAgICAgIHJldHVy
biB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhfVkFM
VUUgLyAxMCk7CisgICAgfTsKKyAgICB0aGlzLmdldFJvd1NwbGl0RGF0YSA9IGZ1bmN0aW9uKHJv
dykgeworICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
JHdyYXBEYXRhW3Jvd107CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0U2NyZWVuVGFi
U2l6ZSA9IGZ1bmN0aW9uKHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy4kdGFi
U2l6ZSAtIHNjcmVlbkNvbHVtbiAlIHRoaXMuJHRhYlNpemU7CisgICAgfTsKKworCisgICAgdGhp
cy5zY3JlZW5Ub0RvY3VtZW50Um93ID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4p
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJv
dywgc2NyZWVuQ29sdW1uKS5yb3c7CisgICAgfTsKKworCisgICAgdGhpcy5zY3JlZW5Ub0RvY3Vt
ZW50Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29s
dW1uKS5jb2x1bW47CisgICAgfTsKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbiA9
IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7CisgICAgICAgIGlmIChzY3JlZW5S
b3cgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHtyb3c6IDAsIGNvbHVtbjogMH07CisKKyAgICAg
ICAgdmFyIGxpbmU7CisgICAgICAgIHZhciBkb2NSb3cgPSAwOworICAgICAgICB2YXIgZG9jQ29s
dW1uID0gMDsKKyAgICAgICAgdmFyIGNvbHVtbjsKKyAgICAgICAgdmFyIHJvdyA9IDA7CisgICAg
ICAgIHZhciByb3dMZW5ndGggPSAwOworCisgICAgICAgIHZhciByb3dDYWNoZSA9IHRoaXMuJHNj
cmVlblJvd0NhY2hlOworICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0NhY2hlSW5kZXgocm93
Q2FjaGUsIHNjcmVlblJvdyk7CisgICAgICAgIHZhciBsID0gcm93Q2FjaGUubGVuZ3RoOworICAg
ICAgICBpZiAobCAmJiBpID49IDApIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByb3dDYWNoZVtp
XTsKKyAgICAgICAgICAgIHZhciBkb2NSb3cgPSB0aGlzLiRkb2NSb3dDYWNoZVtpXTsKKyAgICAg
ICAgICAgIHZhciBkb0NhY2hlID0gc2NyZWVuUm93ID4gcm93Q2FjaGVbbCAtIDFdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBtYXhSb3cgPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKKyAgICAgICAgdmFyIGZv
bGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93KTsKKyAgICAgICAgdmFyIGZvbGRT
dGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisKKyAgICAg
ICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cpIHsKKyAgICAgICAgICAgIHJvd0xlbmd0aCA9IHRo
aXMuZ2V0Um93TGVuZ3RoKGRvY1Jvdyk7CisgICAgICAgICAgICBpZiAocm93ICsgcm93TGVuZ3Ro
IC0gMSA+PSBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3cgKz0gcm93
TGVuZ3RoOworICAgICAgICAgICAgICAgIGRvY1JvdysrOworICAgICAgICAgICAgICAgIGlmIChk
b2NSb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jUm93ID0gZm9sZExp
bmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4
dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpOworICAgICAgICAgICAgICAgICAgICBmb2xkU3Rh
cnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRv
Q2FjaGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRvY1Jvdyk7
CisgICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZvbGRMaW5lLnN0
YXJ0LnJvdyA8PSBkb2NSb3cpIHsKKyAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldEZvbGREaXNw
bGF5TGluZShmb2xkTGluZSk7CisgICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5zdGFydC5y
b3c7CisgICAgICAgIH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVlblJvdyB8fCBk
b2NSb3cgPiBtYXhSb3cpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
cm93OiBtYXhSb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExpbmUobWF4Um93
KS5sZW5ndGgKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxp
bmUgPSB0aGlzLmdldExpbmUoZG9jUm93KTsKKyAgICAgICAgICAgIGZvbGRMaW5lID0gbnVsbDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAg
ICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107CisgICAgICAgICAgICBpZiAo
c3BsaXRzKSB7CisgICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJv
d107CisgICAgICAgICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0cy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJv
dyAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgICAg
IGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRvY0NvbHVtbiArPSB0aGlzLiRnZXRT
dHJpbmdTY3JlZW5XaWR0aChsaW5lLCBzY3JlZW5Db2x1bW4pWzFdOworICAgICAgICBpZiAodGhp
cy4kdXNlV3JhcE1vZGUgJiYgZG9jQ29sdW1uID49IGNvbHVtbikKKyAgICAgICAgICAgIGRvY0Nv
bHVtbiA9IGNvbHVtbiAtIDE7CisKKyAgICAgICAgaWYgKGZvbGRMaW5lKQorICAgICAgICAgICAg
cmV0dXJuIGZvbGRMaW5lLmlkeFRvUG9zaXRpb24oZG9jQ29sdW1uKTsKKworICAgICAgICByZXR1
cm4ge3JvdzogZG9jUm93LCBjb2x1bW46IGRvY0NvbHVtbn07CisgICAgfTsKKyAgICB0aGlzLmRv
Y3VtZW50VG9TY3JlZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7Cisg
ICAgICAgIGlmICh0eXBlb2YgZG9jQ29sdW1uID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAg
IHZhciBwb3MgPSB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGRvY1Jvdy5yb3csIGRvY1Jv
dy5jb2x1bW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3MgPSB0aGlzLiRjbGlwUG9z
aXRpb25Ub0RvY3VtZW50KGRvY1JvdywgZG9jQ29sdW1uKTsKKworICAgICAgICBkb2NSb3cgPSBw
b3Mucm93OworICAgICAgICBkb2NDb2x1bW4gPSBwb3MuY29sdW1uOworCisgICAgICAgIHZhciBz
Y3JlZW5Sb3cgPSAwOworICAgICAgICB2YXIgZm9sZFN0YXJ0Um93ID0gbnVsbDsKKyAgICAgICAg
dmFyIGZvbGQgPSBudWxsOworICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQoZG9jUm93LCBk
b2NDb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgZG9jUm93ID0g
Zm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICBkb2NDb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVt
bjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByb3dFbmQsIHJvdyA9IDA7CisKKworICAgICAg
ICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRkb2NSb3dDYWNoZTsKKyAgICAgICAgdmFyIGkgPSB0aGlz
LiRnZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCBkb2NSb3cpOworICAgICAgICB2YXIgbCA9IHJv
d0NhY2hlLmxlbmd0aDsKKyAgICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7CisgICAgICAgICAgICB2
YXIgcm93ID0gcm93Q2FjaGVbaV07CisgICAgICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy4k
c2NyZWVuUm93Q2FjaGVbaV07CisgICAgICAgICAgICB2YXIgZG9DYWNoZSA9IGRvY1JvdyA+IHJv
d0NhY2hlW2wgLSAxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkb0NhY2hl
ID0gIWw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldE5leHRG
b2xkTGluZShyb3cpOworICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgP2ZvbGRMaW5l
LnN0YXJ0LnJvdyA6SW5maW5pdHk7CisKKyAgICAgICAgd2hpbGUgKHJvdyA8IGRvY1Jvdykgewor
ICAgICAgICAgICAgaWYgKHJvdyA+PSBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICByb3dF
bmQgPSBmb2xkTGluZS5lbmQucm93ICsgMTsKKyAgICAgICAgICAgICAgICBpZiAocm93RW5kID4g
ZG9jUm93KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb2xk
TGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKHJvd0VuZCwgZm9sZExpbmUpOworICAgICAgICAg
ICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcm93
RW5kID0gcm93ICsgMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2NyZWVuUm93ICs9
IHRoaXMuZ2V0Um93TGVuZ3RoKHJvdyk7CisgICAgICAgICAgICByb3cgPSByb3dFbmQ7CisKKyAg
ICAgICAgICAgIGlmIChkb0NhY2hlKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2Fj
aGUucHVzaChyb3cpOworICAgICAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2go
c2NyZWVuUm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dExp
bmUgPSAiIjsKKyAgICAgICAgaWYgKGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3RhcnQpIHsKKyAg
ICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRv
Y1JvdywgZG9jQ29sdW1uKTsKKyAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZvbGRMaW5lLnN0
YXJ0LnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5n
ZXRMaW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7CisgICAgICAgICAgICBmb2xk
U3RhcnRSb3cgPSBkb2NSb3c7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBN
b2RlKSB7CisgICAgICAgICAgICB2YXIgd3JhcFJvdyA9IHRoaXMuJHdyYXBEYXRhW2ZvbGRTdGFy
dFJvd107CisgICAgICAgICAgICB2YXIgc2NyZWVuUm93T2Zmc2V0ID0gMDsKKyAgICAgICAgICAg
IHdoaWxlICh0ZXh0TGluZS5sZW5ndGggPj0gd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXRdKSB7Cisg
ICAgICAgICAgICAgICAgc2NyZWVuUm93ICsrOworICAgICAgICAgICAgICAgIHNjcmVlblJvd09m
ZnNldCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5z
dWJzdHJpbmcoCisgICAgICAgICAgICAgICAgd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXQgLSAxXSB8
fCAwLCB0ZXh0TGluZS5sZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgcm93OiBzY3JlZW5Sb3csCisgICAgICAgICAgICBjb2x1
bW46IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXQorICAgICAgICB9Owor
ICAgIH07CisgICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uID0gZnVuY3Rpb24ocm93LCBk
b2NDb2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9u
KHJvdywgZG9jQ29sdW1uKS5jb2x1bW47CisgICAgfTsKKyAgICB0aGlzLmRvY3VtZW50VG9TY3Jl
ZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAgICAgICByZXR1cm4gdGhp
cy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1bW4pLnJvdzsKKyAgICB9
OworICAgIHRoaXMuZ2V0U2NyZWVuTGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBz
Y3JlZW5Sb3dzID0gMDsKKyAgICAgICAgdmFyIGZvbGQgPSBudWxsOworICAgICAgICBpZiAoIXRo
aXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICBzY3JlZW5Sb3dzID0gdGhpcy5nZXRMZW5n
dGgoKTsKKyAgICAgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgIGZvbGQgPSBmb2xkRGF0YVtpXTsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dz
IC09IGZvbGQuZW5kLnJvdyAtIGZvbGQuc3RhcnQucm93OworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiR3cmFwRGF0YS5sZW5n
dGg7CisgICAgICAgICAgICB2YXIgcm93ID0gMCwgaSA9IDA7CisgICAgICAgICAgICB2YXIgZm9s
ZCA9IHRoaXMuJGZvbGREYXRhW2krK107CisgICAgICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9s
ZCA/IGZvbGQuc3RhcnQucm93IDpJbmZpbml0eTsKKworICAgICAgICAgICAgd2hpbGUgKHJvdyA8
IGxhc3RSb3cpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHRoaXMuJHdyYXBEYXRh
W3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgICAgICAgICByb3cgKys7CisgICAgICAgICAgICAg
ICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xk
LmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2kr
K107CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93
IDpJbmZpbml0eTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gc2NyZWVuUm93czsKKyAgICB9OworICAgIGZ1bmN0aW9uIGlzRnVs
bFdpZHRoKGMpIHsKKyAgICAgICAgaWYgKGMgPCAweDExMDApCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBjID49IDB4MTEwMCAmJiBjIDw9IDB4MTE1RiB8fAorICAg
ICAgICAgICAgICAgYyA+PSAweDExQTMgJiYgYyA8PSAweDExQTcgfHwKKyAgICAgICAgICAgICAg
IGMgPj0gMHgxMUZBICYmIGMgPD0gMHgxMUZGIHx8CisgICAgICAgICAgICAgICBjID49IDB4MjMy
OSAmJiBjIDw9IDB4MjMyQSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDJFODAgJiYgYyA8PSAw
eDJFOTkgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyRTlCICYmIGMgPD0gMHgyRUYzIHx8Cisg
ICAgICAgICAgICAgICBjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZENSB8fAorICAgICAgICAgICAg
ICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkIgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgz
MDAwICYmIGMgPD0gMHgzMDNFIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzA0MSAmJiBjIDw9
IDB4MzA5NiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMwOTkgJiYgYyA8PSAweDMwRkYgfHwK
KyAgICAgICAgICAgICAgIGMgPj0gMHgzMTA1ICYmIGMgPD0gMHgzMTJEIHx8CisgICAgICAgICAg
ICAgICBjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE4RSB8fAorICAgICAgICAgICAgICAgYyA+PSAw
eDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMUMwICYmIGMg
PD0gMHgzMUUzIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzFGMCAmJiBjIDw9IDB4MzIxRSB8
fAorICAgICAgICAgICAgICAgYyA+PSAweDMyMjAgJiYgYyA8PSAweDMyNDcgfHwKKyAgICAgICAg
ICAgICAgIGMgPj0gMHgzMjUwICYmIGMgPD0gMHgzMkZFIHx8CisgICAgICAgICAgICAgICBjID49
IDB4MzMwMCAmJiBjIDw9IDB4NERCRiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDRFMDAgJiYg
YyA8PSAweEE0OEMgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhBNDkwICYmIGMgPD0gMHhBNEM2
IHx8CisgICAgICAgICAgICAgICBjID49IDB4QTk2MCAmJiBjIDw9IDB4QTk3QyB8fAorICAgICAg
ICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8PSAweEQ3QTMgfHwKKyAgICAgICAgICAgICAgIGMg
Pj0gMHhEN0IwICYmIGMgPD0gMHhEN0M2IHx8CisgICAgICAgICAgICAgICBjID49IDB4RDdDQiAm
JiBjIDw9IDB4RDdGQiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEY5MDAgJiYgYyA8PSAweEZB
RkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRTEwICYmIGMgPD0gMHhGRTE5IHx8CisgICAg
ICAgICAgICAgICBjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU1MiB8fAorICAgICAgICAgICAgICAg
YyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRTY4
ICYmIGMgPD0gMHhGRTZCIHx8CisgICAgICAgICAgICAgICBjID49IDB4RkYwMSAmJiBjIDw9IDB4
RkY2MCB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZGRTAgJiYgYyA8PSAweEZGRTY7CisgICAg
fTsKKworfSkuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworCityZXF1aXJlKCIuL2VkaXRf
c2Vzc2lvbi9mb2xkaW5nIikuRm9sZGluZy5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7City
ZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIikuQnJhY2tldE1hdGNoLmNhbGwo
RWRpdFNlc3Npb24ucHJvdG90eXBlKTsKKworZXhwb3J0cy5FZGl0U2Vzc2lvbiA9IEVkaXRTZXNz
aW9uOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9jb25maWcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL29vcCcsICdhY2UvbGliL25l
dCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7Cisibm8gdXNlIHN0cmljdCI7CisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIv
bGFuZyIpOwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIG5ldCA9IHJlcXVp
cmUoIi4vbGliL25ldCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50
X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisKK3ZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIHRoaXM7Cit9KSgpOworCit2YXIgb3B0aW9ucyA9IHsKKyAgICBwYWNrYWdlZDog
ZmFsc2UsCisgICAgd29ya2VyUGF0aDogbnVsbCwKKyAgICBtb2RlUGF0aDogbnVsbCwKKyAgICB0
aGVtZVBhdGg6IG51bGwsCisgICAgYmFzZVBhdGg6ICIiLAorICAgIHN1ZmZpeDogIi5qcyIsCisg
ICAgJG1vZHVsZVVybHM6IHt9Cit9OworCitleHBvcnRzLmdldCA9IGZ1bmN0aW9uKGtleSkgewor
ICAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlVua25vd24gY29uZmlnIGtleTogIiArIGtleSk7CisKKyAgICByZXR1cm4gb3B0aW9u
c1trZXldOworfTsKKworZXhwb3J0cy5zZXQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAg
aWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVW5rbm93biBjb25maWcga2V5OiAiICsga2V5KTsKKworICAgIG9wdGlvbnNba2V5XSA9IHZh
bHVlOworfTsKKworZXhwb3J0cy5hbGwgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbGFuZy5j
b3B5T2JqZWN0KG9wdGlvbnMpOworfTsKK29vcC5pbXBsZW1lbnQoZXhwb3J0cywgRXZlbnRFbWl0
dGVyKTsKKworZXhwb3J0cy5tb2R1bGVVcmwgPSBmdW5jdGlvbihuYW1lLCBjb21wb25lbnQpIHsK
KyAgICBpZiAob3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSkKKyAgICAgICAgcmV0dXJuIG9wdGlv
bnMuJG1vZHVsZVVybHNbbmFtZV07CisKKyAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCIvIik7
CisgICAgY29tcG9uZW50ID0gY29tcG9uZW50IHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdIHx8
ICIiOworICAgIHZhciBiYXNlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZShjb21w
b25lbnQsICIiKS5yZXBsYWNlKC8oXltcLV9dKXwoW1wtX10kKS8sICIiKTsKKworICAgIGlmICgh
YmFzZSAmJiBwYXJ0cy5sZW5ndGggPiAxKQorICAgICAgICBiYXNlID0gcGFydHNbcGFydHMubGVu
Z3RoIC0gMl07CisgICAgdmFyIHBhdGggPSBvcHRpb25zW2NvbXBvbmVudCArICJQYXRoIl07Cisg
ICAgaWYgKHBhdGggPT0gbnVsbCkKKyAgICAgICAgcGF0aCA9IG9wdGlvbnMuYmFzZVBhdGg7Cisg
ICAgaWYgKHBhdGggJiYgcGF0aC5zbGljZSgtMSkgIT0gIi8iKQorICAgICAgICBwYXRoICs9ICIv
IjsKKyAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudCArICItIiArIGJhc2UgKyB0aGlzLmdldCgi
c3VmZml4Iik7Cit9OworCitleHBvcnRzLnNldE1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUsIHN1
YnN0KSB7CisgICAgcmV0dXJuIG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0gPSBzdWJzdDsKK307
CisKK2V4cG9ydHMubG9hZE1vZHVsZSA9IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIG9uTG9hZCkgewor
ICAgIHZhciBtb2R1bGUsIG1vZHVsZVR5cGU7CisgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxl
TmFtZSkpIHsKKyAgICAgICAgbW9kdWxlVHlwZSA9IG1vZHVsZU5hbWVbMF07CisgICAgICAgIG1v
ZHVsZU5hbWUgPSBtb2R1bGVOYW1lWzFdOworICAgIH0KKyAgICB0cnkgeworICAgICAgICBtb2R1
bGUgPSByZXF1aXJlKG1vZHVsZU5hbWUpOworICAgIH0gY2F0Y2ggKGUpIHt9OworICAgIGlmICht
b2R1bGUpCisgICAgICAgIHJldHVybiBvbkxvYWQobW9kdWxlKTsKKworICAgIHZhciBhZnRlckxv
YWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmVxdWlyZShbbW9kdWxlTmFtZV0sIGZ1bmN0aW9u
KG1vZHVsZSkgeworICAgICAgICAgICAgZXhwb3J0cy5fZW1pdCgibG9hZC5tb2R1bGUiLCB7bmFt
ZTogbW9kdWxlTmFtZSwgbW9kdWxlOiBtb2R1bGV9KTsKKyAgICAgICAgICAgIG9uTG9hZChtb2R1
bGUpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgaWYgKCFleHBvcnRzLmdldCgicGFja2Fn
ZWQiKSkKKyAgICAgICAgcmV0dXJuIGFmdGVyTG9hZCgpOworICAgIG5ldC5sb2FkU2NyaXB0KGV4
cG9ydHMubW9kdWxlVXJsKG1vZHVsZU5hbWUsIG1vZHVsZVR5cGUpLCBhZnRlckxvYWQpOworfTsK
K2V4cG9ydHMuaW5pdCA9IGZ1bmN0aW9uKCkgeworICAgIG9wdGlvbnMucGFja2FnZWQgPSByZXF1
aXJlLnBhY2thZ2VkIHx8IG1vZHVsZS5wYWNrYWdlZCB8fCAoZ2xvYmFsLmRlZmluZSAmJiBkZWZp
bmUucGFja2FnZWQpOworCisgICAgaWYgKCFnbG9iYWwuZG9jdW1lbnQpCisgICAgICAgIHJldHVy
biAiIjsKKworICAgIHZhciBzY3JpcHRPcHRpb25zID0ge307CisgICAgdmFyIHNjcmlwdFVybCA9
ICIiOworCisgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
c2NyaXB0Iik7CisgICAgZm9yICh2YXIgaT0wOyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNbaV07CisKKyAgICAgICAgdmFyIHNyYyA9IHNjcmlw
dC5zcmMgfHwgc2NyaXB0LmdldEF0dHJpYnV0ZSgic3JjIik7CisgICAgICAgIGlmICghc3JjKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzY3JpcHQu
YXR0cmlidXRlczsKKyAgICAgICAgZm9yICh2YXIgaj0wLCBsPWF0dHJpYnV0ZXMubGVuZ3RoOyBq
IDwgbDsgaisrKSB7CisgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJpYnV0ZXNbal07CisgICAg
ICAgICAgICBpZiAoYXR0ci5uYW1lLmluZGV4T2YoImRhdGEtYWNlLSIpID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgc2NyaXB0T3B0aW9uc1tkZUh5cGhlbmF0ZShhdHRyLm5hbWUucmVwbGFjZSgv
XmRhdGEtYWNlLS8sICIiKSldID0gYXR0ci52YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHZhciBtID0gc3JjLm1hdGNoKC9eKC4qKVwvYWNlKFwtXHcrKT9cLmpzKFw/
fCQpLyk7CisgICAgICAgIGlmIChtKQorICAgICAgICAgICAgc2NyaXB0VXJsID0gbVsxXTsKKyAg
ICB9CisKKyAgICBpZiAoc2NyaXB0VXJsKSB7CisgICAgICAgIHNjcmlwdE9wdGlvbnMuYmFzZSA9
IHNjcmlwdE9wdGlvbnMuYmFzZSB8fCBzY3JpcHRVcmw7CisgICAgICAgIHNjcmlwdE9wdGlvbnMu
cGFja2FnZWQgPSB0cnVlOworICAgIH0KKworICAgIHNjcmlwdE9wdGlvbnMuYmFzZVBhdGggPSBz
Y3JpcHRPcHRpb25zLmJhc2U7CisgICAgc2NyaXB0T3B0aW9ucy53b3JrZXJQYXRoID0gc2NyaXB0
T3B0aW9ucy53b3JrZXJQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAgICBzY3JpcHRPcHRp
b25zLm1vZGVQYXRoID0gc2NyaXB0T3B0aW9ucy5tb2RlUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJh
c2U7CisgICAgc2NyaXB0T3B0aW9ucy50aGVtZVBhdGggPSBzY3JpcHRPcHRpb25zLnRoZW1lUGF0
aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CisgICAgZGVsZXRlIHNjcmlwdE9wdGlvbnMuYmFzZTsK
KworICAgIGZvciAodmFyIGtleSBpbiBzY3JpcHRPcHRpb25zKQorICAgICAgICBpZiAodHlwZW9m
IHNjcmlwdE9wdGlvbnNba2V5XSAhPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICBleHBvcnRz
LnNldChrZXksIHNjcmlwdE9wdGlvbnNba2V5XSk7Cit9OworCitmdW5jdGlvbiBkZUh5cGhlbmF0
ZShzdHIpIHsKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24obSwgbTEp
IHsgcmV0dXJuIG0xLnRvVXBwZXJDYXNlKCk7IH0pOworfQorCit9KTsKK2FjZS5kZWZpbmUoJ2Fj
ZS9saWIvbmV0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL3Vz
ZXJhZ2VudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
dXNlcmFnZW50ID0gcmVxdWlyZSgiLi91c2VyYWdlbnQiKTsKKworZXhwb3J0cy5nZXQgPSBmdW5j
dGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgIHZhciB4aHIgPSBleHBvcnRzLmNyZWF0ZVhocigp
OworICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgIHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0g
NCkgeworICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIHhoci5zZW5kKG51bGwpOworfTsKKwordmFyIHByb2dJZHMgPSBbJ01zeG1s
Mi5YTUxIVFRQJywgJ01pY3Jvc29mdC5YTUxIVFRQJywgJ01zeG1sMi5YTUxIVFRQLjQuMCddOwor
CitleHBvcnRzLmNyZWF0ZVhociA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB4aHIsIGksIHByb2dJ
ZDsKKyAgICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAidW5kZWZpbmVkIikgeworICAg
ICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgcHJvZ0lkID0gcHJvZ0lkc1tp
XTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhP
YmplY3QocHJvZ0lkKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisKKyAgICAgICAgICAg
IGlmICh4aHIpIHsKKyAgICAgICAgICAgICAgICBwcm9nSWRzID0gW3Byb2dJZF07ICAvLyBzbyBm
YXN0ZXIgbmV4dCB0aW1lCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhocikgeworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImNyZWF0ZVhocigpOiBYTUxIdHRwUmVxdWVzdCBub3QgYXZhaWxhYmxlIik7CisgICAgfQor
CisgICAgcmV0dXJuIHhocjsKK307CisKK2V4cG9ydHMubG9hZFNjcmlwdCA9IGZ1bmN0aW9uKHBh
dGgsIGNhbGxiYWNrKSB7CisgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnaGVhZCcpWzBdOworICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2Ny
aXB0Jyk7CisKKyAgICBzLnNyYyA9IHBhdGg7CisgICAgaGVhZC5hcHBlbmRDaGlsZChzKTsKKwor
ICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSkKKyAgICAgICAgcy5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPT0gJ2xvYWRlZCcg
JiYgY2FsbGJhY2soKTsKKyAgICAgICAgfTsKKyAgICBlbHNlCisgICAgICAgIHMub25sb2FkID0g
Y2FsbGJhY2s7Cit9OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9ldmVudF9lbWl0dGVy
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgRXZlbnRFbWl0dGVyID0ge307CisKK0V2ZW50RW1p
dHRlci5fZW1pdCA9CitFdmVudEVtaXR0ZXIuX2Rpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbihldmVu
dE5hbWUsIGUpIHsKKyAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3Ry
eSB8fCB7fTsKKyAgICB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxl
cnMgfHwge307CisKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVu
dE5hbWVdIHx8IFtdOworICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5k
bGVyc1tldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzLmxlbmd0aCAmJiAhZGVmYXVsdEhh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlb2YgZSAhPSAib2JqZWN0IiB8
fCAhZSkKKyAgICAgICAgZSA9IHt9OworCisgICAgaWYgKCFlLnR5cGUpCisgICAgICAgIGUudHlw
ZSA9IGV2ZW50TmFtZTsKKyAgICAKKyAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKSB7CisgICAg
ICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0aGlzLnBy
b3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIGlm
ICghZS5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOworICAgICAg
ICB9OworICAgIH0KKworICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgbGlzdGVuZXJzW2ldKGUpOworICAgICAgICBpZiAoZS5wcm9wYWdhdGlvblN0
b3BwZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGRlZmF1bHRI
YW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCisgICAgICAgIHJldHVybiBkZWZhdWx0SGFu
ZGxlcihlKTsKK307CisKK0V2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9u
KGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB0aGlz
Ll9kZWZhdWx0SGFuZGxlcnMgfHwge307CisgICAgCisgICAgaWYgKHRoaXMuX2RlZmF1bHRIYW5k
bGVyc1tldmVudE5hbWVdKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZWZhdWx0IGhh
bmRsZXIgZm9yICciICsgZXZlbnROYW1lICsgIicgaXMgYWxyZWFkeSBzZXQiKTsKKyAgICAgICAg
CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV0gPSBjYWxsYmFjazsKK307CisK
K0V2ZW50RW1pdHRlci5vbiA9CitFdmVudEVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0
aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhp
cy5fZXZlbnRSZWdpc3RyeSB8fCB7fTsKKworICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVu
dFJlZ2lzdHJ5W2V2ZW50TmFtZV07CisgICAgaWYgKCFsaXN0ZW5lcnMpCisgICAgICAgIGxpc3Rl
bmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOworCisgICAgaWYgKGxp
c3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKSA9PSAtMSkKKyAgICAgICAgbGlzdGVuZXJzLnB1c2go
Y2FsbGJhY2spOworfTsKKworRXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyID0KK0V2ZW50RW1p
dHRlci5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFjaykg
eworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9Owor
CisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsKKyAg
ICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGluZGV4ID0gbGlz
dGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOworICAgIGlmIChpbmRleCAhPT0gLTEpCisgICAgICAg
IGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpOworfTsKKworRXZlbnRFbWl0dGVyLnJlbW92ZUFs
bExpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkgeworICAgIGlmICh0aGlzLl9ldmVudFJl
Z2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKK307CisKK2V4cG9y
dHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNl
L3NlbGVjdGlvbicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvcmFuZ2Un
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJl
cXVpcmUoIi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2
YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1p
dHRlcjsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBTZWxlY3Rp
b24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAg
ICB0aGlzLmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTsKKworICAgIHRoaXMuY2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICB0aGlzLmxlYWQgPSB0aGlzLnNlbGVjdGlvbkxlYWQgPSB0aGlzLmRvYy5j
cmVhdGVBbmNob3IoMCwgMCk7CisgICAgdGhpcy5hbmNob3IgPSB0aGlzLnNlbGVjdGlvbkFuY2hv
ciA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAwKTsKKworICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICB0aGlzLmxlYWQub24oImNoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgc2VsZi5f
ZW1pdCgiY2hhbmdlQ3Vyc29yIik7CisgICAgICAgIGlmICghc2VsZi4kaXNFbXB0eSkKKyAgICAg
ICAgICAgIHNlbGYuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgICAgICBpZiAoIXNlbGYu
JGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UgJiYgZS5vbGQuY29sdW1uICE9IGUudmFsdWUuY29s
dW1uKQorICAgICAgICAgICAgc2VsZi4kZGVzaXJlZENvbHVtbiA9IG51bGw7CisgICAgfSk7CisK
KyAgICB0aGlzLnNlbGVjdGlvbkFuY2hvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICghc2VsZi4kaXNFbXB0eSkKKyAgICAgICAgICAgIHNlbGYuX2VtaXQoImNoYW5nZVNl
bGVjdGlvbiIpOworICAgIH0pOworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxl
bWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuaXNFbXB0eSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gKHRoaXMuJGlzRW1wdHkgfHwgKAorICAgICAgICAgICAgdGhpcy5h
bmNob3Iucm93ID09IHRoaXMubGVhZC5yb3cgJiYKKyAgICAgICAgICAgIHRoaXMuYW5jaG9yLmNv
bHVtbiA9PSB0aGlzLmxlYWQuY29sdW1uCisgICAgICAgICkpOworICAgIH07CisgICAgdGhpcy5p
c011bHRpTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
aGlzLmdldFJhbmdlKCkuaXNNdWx0aUxpbmUoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0Q3Vyc29y
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsK
KyAgICB9OworICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICAgICAgdGhpcy5hbmNob3Iuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOworCisg
ICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KSB7CisgICAgICAgICAgICB0aGlzLiRpc0VtcHR5ID0g
ZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRT
ZWxlY3Rpb25MZWFkKCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5j
aG9yLmdldFBvc2l0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNlbGVjdGlvbkxlYWQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGVhZC5nZXRQb3NpdGlvbigpOworICAg
IH07CisgICAgdGhpcy5zaGlmdFNlbGVjdGlvbiA9IGZ1bmN0aW9uKGNvbHVtbnMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuJGlzRW1wdHkpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHRo
aXMubGVhZC5yb3csIHRoaXMubGVhZC5jb2x1bW4gKyBjb2x1bW5zKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rp
b25BbmNob3IoKTsKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmdldFNlbGVjdGlvbkxlYWQoKTsK
KworICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7CisKKyAgICAg
ICAgaWYgKCFpc0JhY2t3YXJkcyB8fCBhbmNob3IuY29sdW1uICE9PSAwKQorICAgICAgICAgICAg
dGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbiArIGNvbHVt
bnMpOworCisgICAgICAgIGlmIChpc0JhY2t3YXJkcyB8fCBsZWFkLmNvbHVtbiAhPT0gMCkgewor
ICAgICAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsZWFkLnJvdywgbGVhZC5jb2x1bW4gKyBjb2x1bW5zKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmlzQmFja3dhcmRz
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmFuY2hvcjsKKyAgICAg
ICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisgICAgICAgIHJldHVybiAoYW5jaG9yLnJvdyA+IGxl
YWQucm93IHx8IChhbmNob3Iucm93ID09IGxlYWQucm93ICYmIGFuY2hvci5jb2x1bW4gPiBsZWFk
LmNvbHVtbikpOworICAgIH07CisgICAgdGhpcy5nZXRSYW5nZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7CisgICAgICAgIHZhciBsZWFkID0gdGhpcy5s
ZWFkOworCisgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBS
YW5nZS5mcm9tUG9pbnRzKGxlYWQsIGxlYWQpOworCisgICAgICAgIGlmICh0aGlzLmlzQmFja3dh
cmRzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hv
cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUmFuZ2Uu
ZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmNs
ZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy4kaXNFbXB0eSkg
eworICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9l
bWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5zZWxl
Y3RBbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLmRvYy5nZXRM
ZW5ndGgoKSAtIDE7CisgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKDAsIDApOworICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsYXN0Um93LCB0aGlzLmRvYy5nZXRMaW5lKGxhc3RSb3cp
Lmxlbmd0aCk7CisgICAgfTsKKyAgICB0aGlzLnNldFJhbmdlID0KKyAgICB0aGlzLnNldFNlbGVj
dGlvblJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsIHJldmVyc2UpIHsKKyAgICAgICAgaWYgKHJldmVy
c2UpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKHJhbmdlLmVuZC5yb3cs
IHJhbmdlLmVuZC5jb2x1bW4pOworICAgICAgICAgICAgdGhpcy5zZWxlY3RUbyhyYW5nZS5zdGFy
dC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNv
bHVtbik7CisgICAgICAgICAgICB0aGlzLnNlbGVjdFRvKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVu
ZC5jb2x1bW4pOworICAgICAgICB9CisgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBudWxs
OworICAgIH07CisKKyAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uID0gZnVuY3Rpb24obW92ZXIpIHsK
KyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisgICAgICAgIGlmICh0aGlzLiRpc0VtcHR5
KQorICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IobGVhZC5yb3csIGxlYWQuY29s
dW1uKTsKKworICAgICAgICBtb3Zlci5jYWxsKHRoaXMpOworICAgIH07CisgICAgdGhpcy5zZWxl
Y3RUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rp
b24oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVt
bik7CisgICAgICAgIH0pOworICAgIH07CisgICAgdGhpcy5zZWxlY3RUb1Bvc2l0aW9uID0gZnVu
Y3Rpb24ocG9zKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CisgICAgICAgIH0pOwor
ICAgIH07CisgICAgdGhpcy5zZWxlY3RVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRt
b3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvclVwKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
RG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92
ZUN1cnNvckRvd24pOworICAgIH07CisgICAgdGhpcy5zZWxlY3RSaWdodCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvclJpZ2h0KTsKKyAg
ICB9OworICAgIHRoaXMuc2VsZWN0TGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRt
b3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxlZnQpOworICAgIH07CisgICAgdGhpcy5zZWxl
Y3RMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0
aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RMaW5lRW5k
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vy
c29yTGluZUVuZCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEZpbGVFbmQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlRW5kKTsK
KyAgICB9OworICAgIHRoaXMuc2VsZWN0RmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KTsKKyAgICB9Owor
ICAgIHRoaXMuc2VsZWN0V29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1v
dmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0KTsKKyAgICB9OworICAgIHRoaXMu
c2VsZWN0V29yZExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlv
bih0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLmdldFdvcmRSYW5n
ZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0eXBlb2YgY29sdW1uID09
ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gcm93IHx8IHRoaXMubGVh
ZDsKKyAgICAgICAgICAgIHJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgICAgICBjb2x1bW4gPSBj
dXJzb3IuY29sdW1uOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0
V29yZFJhbmdlKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0V29yZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0V29yZFJh
bmdlKCkpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RBV29yZCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3IoKTsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5zZXNzaW9uLmdldEFXb3JkUmFuZ2UoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7Cisg
ICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOworICAgIH07CisKKyAgICB0aGlz
LmdldExpbmVSYW5nZSA9IGZ1bmN0aW9uKHJvdywgZXhjbHVkZUxhc3RDaGFyKSB7CisgICAgICAg
IHZhciByb3dTdGFydCA9IHR5cGVvZiByb3cgPT0gIm51bWJlciIgPyByb3cgOiB0aGlzLmxlYWQu
cm93OworICAgICAgICB2YXIgcm93RW5kOworCisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMu
c2Vzc2lvbi5nZXRGb2xkTGluZShyb3dTdGFydCk7CisgICAgICAgIGlmIChmb2xkTGluZSkgewor
ICAgICAgICAgICAgcm93U3RhcnQgPSBmb2xkTGluZS5zdGFydC5yb3c7CisgICAgICAgICAgICBy
b3dFbmQgPSBmb2xkTGluZS5lbmQucm93OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cm93RW5kID0gcm93U3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4Y2x1ZGVMYXN0Q2hh
cikKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93U3RhcnQsIDAsIHJvd0VuZCwgdGhp
cy5zZXNzaW9uLmdldExpbmUocm93RW5kKS5sZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gbmV3IFJhbmdlKHJvd1N0YXJ0LCAwLCByb3dFbmQgKyAxLCAwKTsKKyAgICB9
OworICAgIHRoaXMuc2VsZWN0TGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNldFNl
bGVjdGlvblJhbmdlKHRoaXMuZ2V0TGluZVJhbmdlKCkpOworICAgIH07CisgICAgdGhpcy5tb3Zl
Q3Vyc29yVXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoLTEsIDAp
OworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JCeSgxLCAwKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxl
ZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVhZC5nZXRQb3Np
dGlvbigpLAorICAgICAgICAgICAgZm9sZDsKKworICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vz
c2lvbi5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiwgLTEpKSB7CisgICAgICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4p
OworICAgICAgICB9IGVsc2UgaWYgKGN1cnNvci5jb2x1bW4gPT0gMCkgeworICAgICAgICAgICAg
aWYgKGN1cnNvci5yb3cgPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
Y3Vyc29yLnJvdyAtIDEsIHRoaXMuZG9jLmdldExpbmUoY3Vyc29yLnJvdyAtIDEpLmxlbmd0aCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2
YXIgdGFiU2l6ZSA9IHRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7CisgICAgICAgICAgICBpZiAo
dGhpcy5zZXNzaW9uLmlzVGFiU3RvcChjdXJzb3IpICYmIHRoaXMuZG9jLmdldExpbmUoY3Vyc29y
LnJvdykuc2xpY2UoY3Vyc29yLmNvbHVtbi10YWJTaXplLCBjdXJzb3IuY29sdW1uKS5zcGxpdCgi
ICIpLmxlbmd0aC0xID09IHRhYlNpemUpCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29y
QnkoMCwgLXRhYlNpemUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMu
bW92ZUN1cnNvckJ5KDAsIC0xKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vy
c29yUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVhZC5n
ZXRQb3NpdGlvbigpLAorICAgICAgICAgICAgZm9sZDsKKyAgICAgICAgaWYgKGZvbGQgPSB0aGlz
LnNlc3Npb24uZ2V0Rm9sZEF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4sIDEpKSB7CisgICAg
ICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5sZWFkLmNvbHVtbiA9PSB0aGlzLmRv
Yy5nZXRMaW5lKHRoaXMubGVhZC5yb3cpLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
bGVhZC5yb3cgPCB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLm1vdmVDdXJzb3JUbyh0aGlzLmxlYWQucm93ICsgMSwgMCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMu
c2Vzc2lvbi5nZXRUYWJTaXplKCk7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFk
OworICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoY3Vyc29yKSAmJiB0aGlz
LmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpLnNsaWNlKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4rdGFiU2l6ZSkuc3BsaXQoIiAiKS5sZW5ndGgtMSA9PSB0YWJTaXplKQorICAgICAgICAgICAg
ICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIHRhYlNpemUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIDEpOworICAgICAgICB9CisgICAgfTsK
KyAgICB0aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IHJvdyA9IHRoaXMubGVhZC5yb3c7CisgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29s
dW1uOworICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3Jl
ZW5Sb3cocm93LCBjb2x1bW4pOworICAgICAgICB2YXIgZmlyc3RDb2x1bW5Qb3NpdGlvbiA9IHRo
aXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCAwKTsKKyAgICAg
ICAgdmFyIGJlZm9yZUN1cnNvciA9IHRoaXMuc2Vzc2lvbi5nZXREaXNwbGF5TGluZSgKKyAgICAg
ICAgICAgIHJvdywgbnVsbCwgZmlyc3RDb2x1bW5Qb3NpdGlvbi5yb3csCisgICAgICAgICAgICBm
aXJzdENvbHVtblBvc2l0aW9uLmNvbHVtbgorICAgICAgICApOworCisgICAgICAgIHZhciBsZWFk
aW5nU3BhY2UgPSBiZWZvcmVDdXJzb3IubWF0Y2goL15ccyovKTsKKyAgICAgICAgaWYgKGxlYWRp
bmdTcGFjZVswXS5sZW5ndGggIT0gY29sdW1uICYmICF0aGlzLnNlc3Npb24uJHVzZUVtYWNzU3R5
bGVMaW5lU3RhcnQpCisgICAgICAgICAgICBmaXJzdENvbHVtblBvc2l0aW9uLmNvbHVtbiArPSBs
ZWFkaW5nU3BhY2VbMF0ubGVuZ3RoOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9u
KGZpcnN0Q29sdW1uUG9zaXRpb24pOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yTGluZUVu
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVhZDsKKyAgICAgICAg
dmFyIGxpbmVFbmQgPSB0aGlzLnNlc3Npb24uZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRp
b24obGVhZC5yb3csIGxlYWQuY29sdW1uKTsKKyAgICAgICAgaWYgKHRoaXMubGVhZC5jb2x1bW4g
PT0gbGluZUVuZC5jb2x1bW4pIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9u
LmdldExpbmUobGluZUVuZC5yb3cpOworICAgICAgICAgICAgaWYgKGxpbmVFbmQuY29sdW1uID09
IGxpbmUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdmFyIHRleHRFbmQgPSBsaW5lLnNlYXJj
aCgvXHMrJC8pOworICAgICAgICAgICAgICAgIGlmICh0ZXh0RW5kID4gMCkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZUVuZC5jb2x1bW4gPSB0ZXh0RW5kOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGluZUVuZC5yb3csIGxpbmVFbmQuY29s
dW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckZpbGVFbmQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHJvdyA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKKyAgICAgICAgdmFy
IGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUocm93KS5sZW5ndGg7CisgICAgICAgIHRoaXMubW92
ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckZpbGVT
dGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbygwLCAwKTsKKyAg
ICB9OworICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7CisgICAgICAgIHZhciBjb2x1bW4gPSB0aGlz
LmxlYWQuY29sdW1uOworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTsK
KyAgICAgICAgdmFyIHJpZ2h0T2ZDdXJzb3IgPSBsaW5lLnN1YnN0cmluZyhjb2x1bW4pOworCisg
ICAgICAgIHZhciBtYXRjaDsKKyAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdElu
ZGV4ID0gMDsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAg
ICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTsK
KyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQu
ZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKHJpZ2h0
T2ZDdXJzb3IpKSB7CisgICAgICAgICAgICBjb2x1bW4gKz0gdGhpcy5zZXNzaW9uLm5vblRva2Vu
UmUubGFzdEluZGV4OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdElu
ZGV4ID0gMDsKKyAgICAgICAgICAgIHJpZ2h0T2ZDdXJzb3IgPSBsaW5lLnN1YnN0cmluZyhjb2x1
bW4pOworICAgICAgICB9CisgICAgICAgIGlmIChjb2x1bW4gPj0gbGluZS5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgbGluZS5sZW5ndGgpOworICAgICAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yUmlnaHQoKTsKKyAgICAgICAgICAgIGlmIChyb3cgPCB0aGlzLmRv
Yy5nZXRMZW5ndGgoKSAtIDEpCisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yV29yZFJp
Z2h0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNo
ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhyaWdodE9mQ3Vyc29yKSkgeworICAgICAgICAg
ICAgY29sdW1uICs9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDsKKyAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVD
dXJzb3JMb25nV29yZExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMu
bGVhZC5yb3c7CisgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uOworICAgICAg
ICB2YXIgZm9sZDsKKyAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJv
dywgY29sdW1uLCAtMSkpIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuc3Rh
cnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICB2YXIgc3RyID0gdGhpcy5zZXNzaW9uLmdldEZvbGRTdHJpbmdBdChyb3cs
IGNvbHVtbiwgLTEpOworICAgICAgICBpZiAoc3RyID09IG51bGwpIHsKKyAgICAgICAgICAgIHN0
ciA9IHRoaXMuZG9jLmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKQorICAgICAgICB9
CisKKyAgICAgICAgdmFyIGxlZnRPZkN1cnNvciA9IGxhbmcuc3RyaW5nUmV2ZXJzZShzdHIpOwor
ICAgICAgICB2YXIgbWF0Y2g7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJ
bmRleCA9IDA7CisgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7Cisg
ICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMobGVmdE9mQ3Vy
c29yKSkgeworICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxh
c3RJbmRleDsKKyAgICAgICAgICAgIGxlZnRPZkN1cnNvciA9IGxlZnRPZkN1cnNvci5zbGljZSh0
aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgpOworICAgICAgICAgICAgdGhpcy5zZXNz
aW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29s
dW1uIDw9IDApIHsKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgMCk7CisgICAg
ICAgICAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0KCk7CisgICAgICAgICAgICBpZiAocm93ID4gMCkK
KyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tl
blJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkgeworICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vz
c2lvbi50b2tlblJlLmxhc3RJbmRleDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJl
Lmxhc3RJbmRleCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhy
b3csIGNvbHVtbik7CisgICAgfTsKKworICAgIHRoaXMuJHNob3J0V29yZEVuZEluZGV4ID0gZnVu
Y3Rpb24ocmlnaHRPZkN1cnNvcikgeworICAgICAgICB2YXIgbWF0Y2gsIGluZGV4ID0gMCwgY2g7
CisgICAgICAgIHZhciB3aGl0ZXNwYWNlUmUgPSAvXHMvOworICAgICAgICB2YXIgdG9rZW5SZSA9
IHRoaXMuc2Vzc2lvbi50b2tlblJlOworCisgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsK
KyAgICAgICAgaWYgKG1hdGNoID0gdGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhyaWdodE9mQ3Vy
c29yKSkgeworICAgICAgICAgICAgaW5kZXggPSB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5k
ZXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoKGNoID0gcmlnaHRPZkN1
cnNvcltpbmRleF0pICYmIHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkKKyAgICAgICAgICAgICAgICBp
bmRleCArKzsKKworICAgICAgICAgICAgaWYgKGluZGV4IDw9IDEpIHsKKyAgICAgICAgICAgICAg
ICB0b2tlblJlLmxhc3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBy
aWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgIXRva2VuUmUudGVzdChjaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICBpbmRl
eCArKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4LS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAmJiB3aGl0ZXNwYWNlUmUu
dGVzdChjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICsrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOworCisgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICB9OworCisgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkUmlnaHQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7CisgICAgICAgIHZhciBjb2x1
bW4gPSB0aGlzLmxlYWQuY29sdW1uOworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZG9jLmdldExp
bmUocm93KTsKKyAgICAgICAgdmFyIHJpZ2h0T2ZDdXJzb3IgPSBsaW5lLnN1YnN0cmluZyhjb2x1
bW4pOworCisgICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNv
bHVtbiwgMSk7CisgICAgICAgIGlmIChmb2xkKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92
ZUN1cnNvclRvKGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTsKKworICAgICAgICBpZiAo
Y29sdW1uID09IGxpbmUubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgbCA9IHRoaXMuZG9jLmdl
dExlbmd0aCgpOworICAgICAgICAgICAgZG8geyAgICAKKyAgICAgICAgICAgICAgICByb3crKzsK
KyAgICAgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpCisg
ICAgICAgICAgICB9IHdoaWxlIChyb3cgPCBsICYmIC9eXHMqJC8udGVzdChyaWdodE9mQ3Vyc29y
KSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEvXlxzKy8udGVzdChyaWdodE9mQ3Vy
c29yKSkKKyAgICAgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gIiIKKyAgICAgICAgICAgIGNv
bHVtbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLiRzaG9ydFdv
cmRFbmRJbmRleChyaWdodE9mQ3Vyc29yKTsKKworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhy
b3csIGNvbHVtbiArIGluZGV4KTsKKyAgICB9OworCisgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRX
b3JkTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsK
KyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CisKKyAgICAgICAgdmFyIGZv
bGQ7CisgICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVt
biwgLTEpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuc3RhcnQu
cm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CisKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Np
b24uZ2V0TGluZShyb3cpLnN1YnN0cmluZygwLCBjb2x1bW4pOworICAgICAgICBpZiAoY29sdW1u
ID09IDApIHsKKyAgICAgICAgICAgIGRvIHsgICAgCisgICAgICAgICAgICAgICAgcm93LS07Cisg
ICAgICAgICAgICAgICAgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgICAg
IH0gd2hpbGUgKHJvdyA+IDAgJiYgL15ccyokLy50ZXN0KGxpbmUpKQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBjb2x1bW4gPSBsaW5lLmxlbmd0aDsKKyAgICAgICAgICAgIGlmICghL1xzKyQv
LnRlc3QobGluZSkpCisgICAgICAgICAgICAgICAgbGluZSA9ICIiCisgICAgICAgIH0KKworICAg
ICAgICB2YXIgbGVmdE9mQ3Vyc29yID0gbGFuZy5zdHJpbmdSZXZlcnNlKGxpbmUpOworICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLiRzaG9ydFdvcmRFbmRJbmRleChsZWZ0T2ZDdXJzb3IpOworCisg
ICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbiAtIGluZGV4KTsKKyAg
ICB9OworCisgICAgdGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICh0aGlzLnNlc3Npb24uJHNlbGVjdExvbmdXb3JkcykKKyAgICAgICAgICAgIHRoaXMu
bW92ZUN1cnNvckxvbmdXb3JkUmlnaHQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhp
cy5tb3ZlQ3Vyc29yU2hvcnRXb3JkUmlnaHQoKTsKKyAgICB9OworCisgICAgdGhpcy5tb3ZlQ3Vy
c29yV29yZExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kc2Vs
ZWN0TG9uZ1dvcmRzKQorICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRMZWZ0KCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZExlZnQo
KTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckJ5ID0gZnVuY3Rpb24ocm93cywgY2hhcnMp
IHsKKyAgICAgICAgdmFyIHNjcmVlblBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVu
UG9zaXRpb24oCisgICAgICAgICAgICB0aGlzLmxlYWQucm93LAorICAgICAgICAgICAgdGhpcy5s
ZWFkLmNvbHVtbgorICAgICAgICApOworCisgICAgICAgIGlmIChjaGFycyA9PT0gMCkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuJGRlc2lyZWRDb2x1bW4pCisgICAgICAgICAgICAgICAgc2NyZWVu
UG9zLmNvbHVtbiA9IHRoaXMuJGRlc2lyZWRDb2x1bW47CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IHNjcmVlblBvcy5jb2x1bW47CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgZG9jUG9zID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1l
bnRQb3NpdGlvbihzY3JlZW5Qb3Mucm93ICsgcm93cywgc2NyZWVuUG9zLmNvbHVtbik7CisgICAg
ICAgIHRoaXMubW92ZUN1cnNvclRvKGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4gKyBjaGFycywg
Y2hhcnMgPT09IDApOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1
bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvc2l0aW9uLnJv
dywgcG9zaXRpb24uY29sdW1uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvID0gZnVu
Y3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7CisgICAgICAgIHZhciBmb2xk
ID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7CisgICAgICAgIGlmIChm
b2xkKSB7CisgICAgICAgICAgICByb3cgPSBmb2xkLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGNv
bHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4ka2Vl
cERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IHRydWU7CisgICAgICAgIHRoaXMubGVhZC5zZXRQb3Np
dGlvbihyb3csIGNvbHVtbik7CisgICAgICAgIHRoaXMuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFu
Z2UgPSBmYWxzZTsKKworICAgICAgICBpZiAoIWtlZXBEZXNpcmVkQ29sdW1uKQorICAgICAgICAg
ICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJz
b3JUb1NjcmVlbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBrZWVwRGVzaXJlZENvbHVtbikgewor
ICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihy
b3csIGNvbHVtbik7CisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvcy5yb3csIHBvcy5jb2x1
bW4sIGtlZXBEZXNpcmVkQ29sdW1uKTsKKyAgICB9OworICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMubGVhZC5kZXRhY2goKTsKKyAgICAgICAgdGhpcy5hbmNob3Iu
ZGV0YWNoKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHRoaXMuZG9jID0gbnVsbDsKKyAgICB9
CisKKyAgICB0aGlzLmZyb21PcmllbnRlZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0
YXJ0KTsKKyAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IHJhbmdlLmRlc2lyZWRDb2x1bW4g
fHwgdGhpcy4kZGVzaXJlZENvbHVtbjsKKyAgICB9CisKKyAgICB0aGlzLnRvT3JpZW50ZWRSYW5n
ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciByID0gdGhpcy5nZXRSYW5nZSgpOwor
ICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHIu
c3RhcnQuY29sdW1uOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gci5zdGFydC5yb3c7
CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gci5lbmQuY29sdW1uOworICAgICAgICAg
ICAgcmFuZ2UuZW5kLnJvdyA9IHIuZW5kLnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJhbmdlID0gcjsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdlLmN1cnNvciA9IHRoaXMu
aXNCYWNrd2FyZHMoKSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworICAgICAgICByYW5nZS5k
ZXNpcmVkQ29sdW1uID0gdGhpcy4kZGVzaXJlZENvbHVtbjsKKyAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgIH0KKworfSkuY2FsbChTZWxlY3Rpb24ucHJvdG90eXBlKTsKKworZXhwb3J0cy5TZWxl
Y3Rpb24gPSBTZWxlY3Rpb247Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3JhbmdlJywgWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKK3ZhciBSYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5k
Um93LCBlbmRDb2x1bW4pIHsKKyAgICB0aGlzLnN0YXJ0ID0geworICAgICAgICByb3c6IHN0YXJ0
Um93LAorICAgICAgICBjb2x1bW46IHN0YXJ0Q29sdW1uCisgICAgfTsKKworICAgIHRoaXMuZW5k
ID0geworICAgICAgICByb3c6IGVuZFJvdywKKyAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KKyAg
ICB9OworfTsKKworKGZ1bmN0aW9uKCkgeyAKKyAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihy
YW5nZSkgeworICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcmFuZ2Uuc3RhcnQucm93
ICYmCisgICAgICAgICAgICB0aGlzLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJgorICAgICAg
ICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCisgICAgICAg
ICAgICB0aGlzLmVuZC5jb2x1bW4gPT0gcmFuZ2UuZW5kLmNvbHVtbgorICAgIH07IAorICAgIHRo
aXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsg
dGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCisgICAgICAgICAgICAi
XSAtPiBbIiArIHRoaXMuZW5kLnJvdyArICIvIiArIHRoaXMuZW5kLmNvbHVtbiArICJdIik7Cisg
ICAgfTsgCisKKyAgICB0aGlzLmNvbnRhaW5zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKKyAgICB9OyAKKyAg
ICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciBjbXAs
CisgICAgICAgICAgICBlbmQgPSByYW5nZS5lbmQsCisgICAgICAgICAgICBzdGFydCA9IHJhbmdl
LnN0YXJ0OworCisgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShlbmQucm93LCBlbmQuY29sdW1u
KTsKKyAgICAgICAgaWYgKGNtcCA9PSAxKSB7CisgICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBh
cmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9
PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1u
KTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDQyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07IAorICAgIHRoaXMuY29tcGFyZVBv
aW50ID0gZnVuY3Rpb24ocCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBw
LmNvbHVtbik7CisgICAgfTsgCisgICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFu
Z2UpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLnN0YXJ0KSA9PSAw
ICYmIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLmVuZCkgPT0gMDsKKyAgICB9OworICAgIHRoaXMu
aW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciBjbXAgPSB0aGlzLmNv
bXBhcmVSYW5nZShyYW5nZSk7CisgICAgICAgIHJldHVybiAoY21wID09IC0xIHx8IGNtcCA9PSAw
IHx8IGNtcCA9PSAxKTsKKyAgICB9OworICAgIHRoaXMuaXNFbmQgPSBmdW5jdGlvbihyb3csIGNv
bHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5j
b2x1bW4gPT0gY29sdW1uOworICAgIH07IAorICAgIHRoaXMuaXNTdGFydCA9IGZ1bmN0aW9uKHJv
dywgY29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhp
cy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOworICAgIH07IAorICAgIHRoaXMuc2V0U3RhcnQgPSBm
dW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0
IikgeworICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSByb3cuY29sdW1uOworICAgICAg
ICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3c7CisgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVt
biA9IGNvbHVtbjsKKyAgICAgICAgfQorICAgIH07IAorICAgIHRoaXMuc2V0RW5kID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIpIHsK
KyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CisgICAgICAgICAgICB0
aGlzLmVuZC5yb3cgPSByb3cucm93OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhp
cy5lbmQucm93ID0gcm93OworICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gY29sdW1uOwor
ICAgICAgICB9CisgICAgfTsgCisgICAgdGhpcy5pbnNpZGUgPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgeworICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikgfHwgdGhpcy5pc1N0YXJ0KHJvdywg
Y29sdW1uKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07IAorICAgIHRoaXMuaW5zaWRlU3Rh
cnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJv
dywgY29sdW1uKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVt
bikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OyAKKyAgICB0aGlzLmluc2lkZUVuZCA9IGZ1
bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1
bW4pID09IDApIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgeworICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aUxpbmUoKSkgeworICAgICAg
ICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29sdW1uIDwgdGhpcy5zdGFydC5jb2x1bW4gPyAtMSA6IChjb2x1bW4gPiB0aGlzLmVuZC5j
b2x1bW4gPyAxIDogMCk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHJvdyA8IHRoaXMuc3RhcnQucm93KQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAg
IGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAg
ICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4g
Pj0gdGhpcy5zdGFydC5jb2x1bW4gPyAwIDogLTE7CisKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJv
dyA9PT0gcm93KQorICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8PSB0aGlzLmVuZC5jb2x1bW4g
PyAwIDogMTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworICAgIHRoaXMuY29tcGFyZVN0
YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93
ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBh
cmUocm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmNvbXBhcmVFbmQg
PSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJv
dyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBj
b2x1bW4pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmNvbXBhcmVJbnNpZGUgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0
aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4g
PT0gY29sdW1uKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7
CisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPiBsYXN0Um93KSB7CisgICAgICAgICAgICB2YXIg
ZW5kID0geworICAgICAgICAgICAgICAgIHJvdzogbGFzdFJvdysxLAorICAgICAgICAgICAgICAg
IGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlz
LnN0YXJ0LnJvdyA+IGxhc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IHsKKyAgICAg
ICAgICAgICAgICByb3c6IGxhc3RSb3crMSwKKyAgICAgICAgICAgICAgICBjb2x1bW46IDAKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPCBm
aXJzdFJvdykgeworICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgIHJv
dzogZmlyc3RSb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiAwCisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KSB7CisgICAg
ICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgICAgIHJvdzogZmlyc3RSb3csCisgICAg
ICAgICAgICAgICAgY29sdW1uOiAwCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlz
LmVuZCk7CisgICAgfTsKKyAgICB0aGlzLmV4dGVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7
CisgICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOworCisgICAgICAg
IGlmIChjbXAgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBlbHNlIGlm
IChjbXAgPT0gLTEpCisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjog
Y29sdW1ufTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywg
Y29sdW1uOiBjb2x1bW59OworCisgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0
IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7CisgICAgfTsKKworICAgIHRoaXMuaXNF
bXB0eSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09IHRo
aXMuZW5kLnJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSB0aGlzLmVuZC5jb2x1bW4pOworICAg
IH07CisgICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
KHRoaXMuc3RhcnQucm93ICE9PSB0aGlzLmVuZC5yb3cpOworICAgIH07CisgICAgdGhpcy5jbG9u
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0aGlzLnN0
YXJ0LCB0aGlzLmVuZCk7CisgICAgfTsKKyAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAodGhpcy5lbmQuY29sdW1uID09IDApCisgICAgICAgICAgICByZXR1
cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCBNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdywg
dGhpcy5lbmQucm93LTEpLCAwKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbmV3
IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApCisgICAgfTsKKyAgICB0
aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZhciBzY3Jl
ZW5Qb3NTdGFydCA9CisgICAgICAgICAgICBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlv
bih0aGlzLnN0YXJ0KTsKKyAgICAgICAgdmFyIHNjcmVlblBvc0VuZCA9CisgICAgICAgICAgICBz
ZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7CisKKyAgICAgICAgcmV0
dXJuIG5ldyBSYW5nZSgKKyAgICAgICAgICAgIHNjcmVlblBvc1N0YXJ0LnJvdywgc2NyZWVuUG9z
U3RhcnQuY29sdW1uLAorICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5k
LmNvbHVtbgorICAgICAgICApOworICAgIH07CisKK30pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsK
K1JhbmdlLmZyb21Qb2ludHMgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7CisgICAgcmV0dXJuIG5l
dyBSYW5nZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbiwgZW5kLnJvdywgZW5kLmNvbHVtbik7Cit9
OworCitleHBvcnRzLlJhbmdlID0gUmFuZ2U7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUv
dGV4dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Rva2VuaXplcics
ICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAn
YWNlL3VuaWNvZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBU
ZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4
dEhpZ2hsaWdodFJ1bGVzOwordmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyIiku
QmVoYXZpb3VyOwordmFyIHVuaWNvZGUgPSByZXF1aXJlKCIuLi91bmljb2RlIik7CisKK3ZhciBN
b2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihu
ZXcgVGV4dEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kYmVoYXZpb3Vy
ID0gbmV3IEJlaGF2aW91cigpOworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy50b2tl
blJlID0gbmV3IFJlZ0V4cCgiXlsiCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MCisgICAg
ICAgICsgdW5pY29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWMKKyAgICAgICAg
KyB1bmljb2RlLnBhY2thZ2VzLk5kCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArICJc
XCRfXSsiLCAiZyIKKyAgICApOworICAgIAorICAgIHRoaXMubm9uVG9rZW5SZSA9IG5ldyBSZWdF
eHAoIl4oPzpbXiIKKyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLkwKKyAgICAgICAgKyB1bmlj
b2RlLnBhY2thZ2VzLk1uICsgdW5pY29kZS5wYWNrYWdlcy5NYworICAgICAgICArIHVuaWNvZGUu
cGFja2FnZXMuTmQKKyAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLlBjICsgIlxcJF9dfFxzXSkr
IiwgImciCisgICAgKTsKKworICAgIHRoaXMuZ2V0VG9rZW5pemVyID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLiR0b2tlbml6ZXI7CisgICAgfTsKKworICAgIHRoaXMudG9nZ2xl
Q29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVuZFJvdykgewor
ICAgIH07CisKKyAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxp
bmUsIHRhYikgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tP
dXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBk
b2MsIHJvdykgeworICAgIH07CisKKyAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5l
KSB7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMrKS8pOworICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlV29ya2VyID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAg
dGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzID0gZnVuY3Rpb24gKG1hcHBpbmcpIHsKKyAgICAgICAg
aWYgKCF0aGlzLiRlbWJlZHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLiRtb2RlcyA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
JGVtYmVkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKG1hcHBpbmdbdGhpcy4kZW1i
ZWRzW2ldXSkgeworICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV0g
PSBuZXcgbWFwcGluZ1t0aGlzLiRlbWJlZHNbaV1dKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZhciBkZWxlZ2F0aW9ucyA9IFsndG9nZ2xlQ29tbWVudExp
bmVzJywgJ2dldE5leHRMaW5lSW5kZW50JywgJ2NoZWNrT3V0ZGVudCcsICdhdXRvT3V0ZGVudCcs
ICd0cmFuc2Zvcm1BY3Rpb24nXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGVn
YXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAoZnVuY3Rpb24oc2NvcGUpIHsKKyAg
ICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGRlbGVnYXRpb25zW2ldOworICAgICAgICAg
ICAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSBzY29wZVtmdW5jdGlvbk5hbWVdOworICAgICAgICAg
ICAgICBzY29wZVtkZWxlZ2F0aW9uc1tpXV0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLiRkZWxlZ2F0b3IoZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIGRlZmF1
bHRIYW5kbGVyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAodGhpcykpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHRoaXMuJGRlbGVnYXRvciA9IGZ1bmN0aW9uKG1ldGhv
ZCwgYXJncywgZGVmYXVsdEhhbmRsZXIpIHsKKyAgICAgICAgdmFyIHN0YXRlID0gYXJnc1swXTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV0p
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgc3BsaXQgPSBzdGF0ZS5z
cGxpdCh0aGlzLiRlbWJlZHNbaV0pOworICAgICAgICAgICAgaWYgKCFzcGxpdFswXSAmJiBzcGxp
dFsxXSkgeworICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBzcGxpdFsxXTsKKyAgICAgICAgICAg
ICAgICB2YXIgbW9kZSA9IHRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV07CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1vZGVbbWV0aG9kXS5hcHBseShtb2RlLCBhcmdzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB2YXIgcmV0ID0gZGVmYXVsdEhhbmRsZXIuYXBwbHkodGhp
cywgYXJncyk7CisgICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlciA/IHJldCA6IHVuZGVmaW5l
ZDsKKyAgICB9OworICAgIAorICAgIHRoaXMudHJhbnNmb3JtQWN0aW9uID0gZnVuY3Rpb24oc3Rh
dGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCBwYXJhbSkgeworICAgICAgICBpZiAodGhpcy4k
YmVoYXZpb3VyKSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IHRoaXMuJGJlaGF2aW91
ci5nZXRCZWhhdmlvdXJzKCk7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYmVoYXZpb3Vy
cykgeworICAgICAgICAgICAgICAgIGlmIChiZWhhdmlvdXJzW2tleV1bYWN0aW9uXSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0uYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK30p
LmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisKK2Fj
ZS5kZWZpbmUoJ2FjZS90b2tlbml6ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIFRva2VuaXplciA9
IGZ1bmN0aW9uKHJ1bGVzLCBmbGFnKSB7CisgICAgZmxhZyA9IGZsYWcgPyAiZyIgKyBmbGFnIDog
ImciOworICAgIHRoaXMuc3RhdGVzID0gcnVsZXM7CisKKyAgICB0aGlzLnJlZ0V4cHMgPSB7fTsK
KyAgICB0aGlzLm1hdGNoTWFwcGluZ3MgPSB7fTsKKyAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5z
dGF0ZXMpIHsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZXNba2V5XTsKKyAgICAgICAg
dmFyIHJ1bGVSZWdFeHBzID0gW107CisgICAgICAgIHZhciBtYXRjaFRvdGFsID0gMDsKKyAgICAg
ICAgdmFyIG1hcHBpbmcgPSB0aGlzLm1hdGNoTWFwcGluZ3Nba2V5XSA9IHtkZWZhdWx0VG9rZW46
ICJ0ZXh0In07CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTsKKyAgICAgICAgICAgIGlmIChy
dWxlLmRlZmF1bHRUb2tlbikgeworICAgICAgICAgICAgICAgIG1hcHBpbmcuZGVmYXVsdFRva2Vu
ID0gcnVsZS5kZWZhdWx0VG9rZW47CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAocnVsZS5yZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkKKyAg
ICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5yZWdleC50b1N0cmluZygpLnNsaWNlKDEs
IC0xKTsKKyAgICAgICAgICAgIHZhciBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdleDsKKyAgICAg
ICAgICAgIHZhciBtYXRjaGNvdW50ID0gbmV3IFJlZ0V4cCgiKD86KCIgKyBhZGp1c3RlZHJlZ2V4
ICsgIil8KC4pKSIpLmV4ZWMoImEiKS5sZW5ndGggLSAyOworICAgICAgICAgICAgaWYgKEFycmF5
LmlzQXJyYXkocnVsZS50b2tlbikpIHsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS50b2tlbi5s
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBydWxlLnRva2VuID0gcnVsZS50b2tl
blswXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBydWxl
LnRva2VuQXJyYXkgPSBydWxlLnRva2VuOworICAgICAgICAgICAgICAgICAgICBydWxlLnRva2Vu
ID0gdGhpcy4kYXJyYXlUb2tlbnM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAobWF0Y2hjb3VudCA+IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
L1xcXGQvLnRlc3QocnVsZS5yZWdleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRy
ZWdleCA9IHJ1bGUucmVnZXgucmVwbGFjZSgvXFwoWzAtOV0rKS9nLCBmdW5jdGlvbiAobWF0Y2gs
IGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlxcIiArIChwYXJzZUlu
dChkaWdpdCwgMTApICsgbWF0Y2hUb3RhbCArIDEpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGNvdW50
ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRyZWdleCA9IHRoaXMucmVtb3ZlQ2Fw
dHVyaW5nR3JvdXBzKHJ1bGUucmVnZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIXJ1bGUuc3BsaXRSZWdleCkKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5zcGxp
dFJlZ2V4ID0gdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cChydWxlLnJlZ2V4LCBmbGFnKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFwcGluZ1ttYXRjaFRvdGFsXSA9IGk7CisgICAg
ICAgICAgICBtYXRjaFRvdGFsICs9IG1hdGNoY291bnQ7CisKKyAgICAgICAgICAgIHJ1bGVSZWdF
eHBzLnB1c2goYWRqdXN0ZWRyZWdleCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnJlZ0V4
cHNba2V5XSA9IG5ldyBSZWdFeHAoIigiICsgcnVsZVJlZ0V4cHMuam9pbigiKXwoIikgKyAiKXwo
JCkiLCBmbGFnKTsKKyAgICB9Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kYXJyYXlU
b2tlbnMgPSBmdW5jdGlvbihzdHIpIHsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICBy
ZXR1cm4gW107CisgICAgICAgIHZhciB2YWx1ZXMgPSBzdHIuc3BsaXQodGhpcy5zcGxpdFJlZ2V4
KQorICAgICAgICB2YXIgdG9rZW5zID0gW107CisgICAgICAgIHZhciB0eXBlcyA9IHRoaXMudG9r
ZW5BcnJheTsKKyAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCAhPSB2YWx1ZXMubGVuZ3RoIC0gMikg
eworICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKQorICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IodHlwZXMubGVuZ3RoICwgdmFsdWVzLmxlbmd0aCAtIDIsIHN0ciwgdGhpcy5zcGxp
dFJlZ2V4KTsKKyAgICAgICAgICAgIHJldHVybiBbe3R5cGU6ICJlcnJvci5pbnZhbGlkIiwgdmFs
dWU6IHN0cn1dOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaSArIDFdKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGhdID0geworICAgICAgICAgICAgICAgICAgICB0
eXBlOiB0eXBlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1tpICsgMV0K
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b2tlbnM7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnJlbW92ZUNhcHR1cmluZ0dyb3Vw
cyA9IGZ1bmN0aW9uKHNyYykgeworICAgICAgICB2YXIgciA9IHNyYy5yZXBsYWNlKAorICAgICAg
ICAgICAgL1xbKD86XFwufFteXF1dKSo/XF18XFwufFwoXD9bOj0hXXwoXCgpL2csCisgICAgICAg
ICAgICBmdW5jdGlvbih4LCB5KSB7cmV0dXJuIHkgPyAiKD86IiA6IHg7fQorICAgICAgICApOwor
ICAgICAgICByZXR1cm4gcjsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlU3BsaXR0ZXJS
ZWdleHAgPSBmdW5jdGlvbihzcmMsIGZsYWcpIHsKKyAgICAgICAgc3JjID0gc3JjLnJlcGxhY2Uo
L1woXD89KFteKCldfFxcLikqP1wpJC8sICIiKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAo
c3JjLCBmbGFnKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGluZVRva2VucyA9IGZ1bmN0aW9uKGxp
bmUsIHN0YXJ0U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0YXJ0U3RhdGUgJiYgdHlwZW9mIHN0YXJ0
U3RhdGUgIT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXJ0U3RhdGUu
c2xpY2UoMCk7CisgICAgICAgICAgICBzdGFydFN0YXRlID0gc3RhY2tbMF07CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdmFyIHN0YWNrID0gW107CisKKyAgICAgICAgdmFyIGN1cnJlbnRT
dGF0ZSA9IHN0YXJ0U3RhdGUgfHwgInN0YXJ0IjsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5z
dGF0ZXNbY3VycmVudFN0YXRlXTsKKyAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLm1hdGNoTWFw
cGluZ3NbY3VycmVudFN0YXRlXTsKKyAgICAgICAgdmFyIHJlID0gdGhpcy5yZWdFeHBzW2N1cnJl
bnRTdGF0ZV07CisgICAgICAgIHJlLmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgdmFyIG1hdGNo
LCB0b2tlbnMgPSBbXTsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgdmFy
IHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiAiIn07CisKKyAgICAgICAgd2hpbGUgKG1hdGNo
ID0gcmUuZXhlYyhsaW5lKSkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBtYXBwaW5nLmRlZmF1
bHRUb2tlbjsKKyAgICAgICAgICAgIHZhciBydWxlID0gbnVsbDsKKyAgICAgICAgICAgIHZhciB2
YWx1ZSA9IG1hdGNoWzBdOworICAgICAgICAgICAgdmFyIGluZGV4ID0gcmUubGFzdEluZGV4Owor
CisgICAgICAgICAgICBpZiAoaW5kZXggLSB2YWx1ZS5sZW5ndGggPiBsYXN0SW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc2tpcHBlZCA9IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5k
ZXggLSB2YWx1ZS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IHR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgKz0gc2tpcHBlZDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSB7dHlwZTogdHlwZSwgdmFsdWU6IHNraXBwZWR9OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBtYXRjaC5sZW5ndGgtMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoW2kgKyAx
XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIHJ1bGUgPSBzdGF0ZVttYXBwaW5nW2ldXTsKKyAgICAgICAgICAgICAgICB0eXBl
ID0gdHlwZW9mIHJ1bGUudG9rZW4gPT0gImZ1bmN0aW9uIgorICAgICAgICAgICAgICAgICAgICA/
IHJ1bGUudG9rZW4odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spCisgICAgICAgICAgICAgICAg
ICAgIDogcnVsZS50b2tlbjsKKworICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0OworICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgICAgICAg
ICAgICAgIGlmICghc3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jb25z
b2xlICYmIGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS5lcnJvcihjdXJyZW50U3RhdGUsICJkb2Vz
bid0IGV4aXN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSAic3Rh
cnQiOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50
U3RhdGVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1hcHBp
bmcgPSB0aGlzLm1hdGNoTWFwcGluZ3NbY3VycmVudFN0YXRlXTsKKyAgICAgICAgICAgICAgICAg
ICAgbGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJlID0gdGhpcy5yZWdF
eHBzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IGlu
ZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB0eXBlID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoIXJ1bGUg
fHwgcnVsZS5tZXJnZSAhPT0gZmFsc2UpICYmIHRva2VuLnR5cGUgPT09IHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogdHlwZSwgdmFsdWU6IHZhbHVlfTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1
c2godG9rZW4pOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHt0eXBlOiBudWxsLCB2YWx1
ZTogIiJ9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0eXBlW2ldKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXN0
SW5kZXggPT0gbGluZS5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGxhc3RJbmRleCA9IGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUpCisgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHRva2VucyA6IHRva2VucywKKyAgICAgICAgICAgIHN0YXRlIDogc3RhY2su
bGVuZ3RoID8gc3RhY2sgOiBjdXJyZW50U3RhdGUKKyAgICAgICAgfTsKKyAgICB9OworCit9KS5j
YWxsKFRva2VuaXplci5wcm90b3R5cGUpOworCitleHBvcnRzLlRva2VuaXplciA9IFRva2VuaXpl
cjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcycsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4v
bGliL2xhbmciKTsKKwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworCisg
ICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9r
ZW4gOiAiZW1wdHlfbGluZSIsCisgICAgICAgICAgICByZWdleCA6ICdeJCcKKyAgICAgICAgfSwg
eworICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICByZWdleCA6ICIuKyIK
KyAgICAgICAgfV0KKyAgICB9OworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5hZGRS
dWxlcyA9IGZ1bmN0aW9uKHJ1bGVzLCBwcmVmaXgpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGlu
IHJ1bGVzKSB7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSBydWxlc1trZXldOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIHZhciBydWxlID0gc3RhdGVbaV07CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dCkg
eworICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBwcmVmaXggKyBydWxlLm5leHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy4kcnVsZXNb
cHJlZml4ICsga2V5XSA9IHN0YXRlOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZ2V0
UnVsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJ1bGVzOworICAgIH07
CisKKyAgICB0aGlzLmVtYmVkUnVsZXMgPSBmdW5jdGlvbiAoSGlnaGxpZ2h0UnVsZXMsIHByZWZp
eCwgZXNjYXBlUnVsZXMsIHN0YXRlcywgYXBwZW5kKSB7CisgICAgICAgIHZhciBlbWJlZFJ1bGVz
ID0gbmV3IEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKTsKKyAgICAgICAgaWYgKHN0YXRlcykg
eworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZXMubGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICAgICAgc3RhdGVzW2ldID0gcHJlZml4ICsgc3RhdGVzW2ldOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3RhdGVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gZW1iZWRSdWxlcykKKyAgICAgICAgICAgICAgICBzdGF0ZXMucHVzaChwcmVmaXggKyBr
ZXkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzLmFkZFJ1bGVzKGVtYmVkUnVs
ZXMsIHByZWZpeCk7CisKKyAgICAgICAgaWYgKGVzY2FwZVJ1bGVzKSB7CisgICAgICAgICAgICB2
YXIgYWRkUnVsZXMgPSBBcnJheS5wcm90b3R5cGVbYXBwZW5kID8gInB1c2giIDogInVuc2hpZnQi
XTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgICAgIGFkZFJ1bGVzLmFwcGx5KHRoaXMuJHJ1bGVzW3N0YXRlc1tpXV0sIGxh
bmcuZGVlcENvcHkoZXNjYXBlUnVsZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhp
cy4kZW1iZWRzKQorICAgICAgICAgICAgdGhpcy4kZW1iZWRzID0gW107CisgICAgICAgIHRoaXMu
JGVtYmVkcy5wdXNoKHByZWZpeCk7CisgICAgfQorCisgICAgdGhpcy5nZXRFbWJlZHMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGVtYmVkczsKKyAgICB9OworICAgIAorICAg
IHRoaXMubm9ybWFsaXplUnVsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkID0gMDsK
KyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuJHJ1bGVzKSB7CisgICAgICAgICAgICB2YXIg
c3RhdGUgPSB0aGlzLiRydWxlc1trZXldOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzdGF0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVb
aV07CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dCAmJiBBcnJheS5pc0FycmF5KHJ1bGUu
bmV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlTmFtZSA9IHJ1bGUuc3RhdGVO
YW1lIHx8ICgic3RhdGUiICsgaWQrKyk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJ1bGVz
W3N0YXRlTmFtZV0gPSBydWxlLm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9
IHN0YXRlTmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUu
cnVsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgaW4gcnVsZS5ydWxlcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJ1bGVzW3JdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJ1bGVzW3JdLnB1c2gpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3JdLnB1c2guYXBwbHkodGhpcy4kcnVs
ZXNbcl0sIHJ1bGUucnVsZXNbcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tyXSA9IHJ1bGUucnVsZXNb
cl07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZSB8fCB0eXBl
b2YgcnVsZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtp
LCAxXS5jb25jYXQodGhpcy4kcnVsZXNbcnVsZS5pbmNsdWRlIHx8IHJ1bGVdKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJ1bGUubm9Fc2NhcGUpCisgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oeCkge3JldHVybiAheC5uZXh0O30pOworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zcGxpY2UuYXBwbHkoc3RhdGUsIGFyZ3MpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmNy
ZWF0ZUtleXdvcmRNYXBwZXIgPSBmdW5jdGlvbihtYXAsIGRlZmF1bHRUb2tlbiwgaWdub3JlQ2Fz
ZSwgc3BsaXRDaGFyKSB7CisgICAgICAgIHZhciBrZXl3b3JkcyA9IE9iamVjdC5jcmVhdGUobnVs
bCk7CisgICAgICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUp
IHsKKyAgICAgICAgICAgIHZhciBhID0gbWFwW2NsYXNzTmFtZV07CisgICAgICAgICAgICBpZiAo
aWdub3JlQ2FzZSkKKyAgICAgICAgICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpOworICAgICAg
ICAgICAgdmFyIGxpc3QgPSBhLnNwbGl0KHNwbGl0Q2hhciB8fCAifCIpOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgICAgICAgICBrZXl3b3Jk
c1tsaXN0W2ldXSA9IGNsYXNzTmFtZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1hcCA9IG51bGw7
CisgICAgICAgIHJldHVybiBpZ25vcmVDYXNlCisgICAgICAgICAgICA/IGZ1bmN0aW9uKHZhbHVl
KSB7cmV0dXJuIGtleXdvcmRzW3ZhbHVlLnRvTG93ZXJDYXNlKCldIHx8IGRlZmF1bHRUb2tlbiB9
CisgICAgICAgICAgICA6IGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIGtleXdvcmRzW3ZhbHVlXSB8
fCBkZWZhdWx0VG9rZW4gfTsKKyAgICB9CisKKyAgICB0aGlzLmdldEtleXdvcmRzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRrZXl3b3JkczsKKyAgICB9OworCit9KS5jYWxs
KFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOworCitleHBvcnRzLlRleHRIaWdobGlnaHRS
dWxlcyA9IFRleHRIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9i
ZWhhdmlvdXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBCZWhhdmlvdXIgPSBmdW5jdGlvbigp
IHsKKyAgIHRoaXMuJGJlaGF2aW91cnMgPSB7fTsKK307CisKKyhmdW5jdGlvbiAoKSB7CisKKyAg
ICB0aGlzLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCBhY3Rpb24sIGNhbGxiYWNrKSB7CisgICAgICAg
IHN3aXRjaCAodW5kZWZpbmVkKSB7CisgICAgICAgICAgY2FzZSB0aGlzLiRiZWhhdmlvdXJzOgor
ICAgICAgICAgICAgICB0aGlzLiRiZWhhdmlvdXJzID0ge307CisgICAgICAgICAgY2FzZSB0aGlz
LiRiZWhhdmlvdXJzW25hbWVdOgorICAgICAgICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVd
ID0ge307CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXVthY3Rpb25d
ID0gY2FsbGJhY2s7CisgICAgfQorICAgIAorICAgIHRoaXMuYWRkQmVoYXZpb3VycyA9IGZ1bmN0
aW9uIChiZWhhdmlvdXJzKSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBhY3Rpb24gaW4gYmVoYXZpb3Vyc1trZXldKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCBhY3Rpb24sIGJlaGF2aW91cnNba2V5XVthY3Rpb25d
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLnJlbW92
ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXJzICYmIHRo
aXMuJGJlaGF2aW91cnNbbmFtZV0pIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRiZWhhdmlv
dXJzW25hbWVdOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRoaXMuaW5oZXJpdCA9IGZ1
bmN0aW9uIChtb2RlLCBmaWx0ZXIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBtb2RlID09PSAiZnVu
Y3Rpb24iKSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IG5ldyBtb2RlKCkuZ2V0QmVo
YXZpb3VycyhmaWx0ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGJlaGF2
aW91cnMgPSBtb2RlLmdldEJlaGF2aW91cnMoZmlsdGVyKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLmFkZEJlaGF2aW91cnMoYmVoYXZpb3Vycyk7CisgICAgfQorICAgIAorICAgIHRoaXMuZ2V0
QmVoYXZpb3VycyA9IGZ1bmN0aW9uIChmaWx0ZXIpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLiRiZWhhdmlvdXJzOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFyIHJldCA9IHt9CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGZpbHRlci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLiRiZWhhdmlv
dXJzW2ZpbHRlcltpXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0W2ZpbHRlcltpXV0gPSB0
aGlzLiRiZWhhdmlvdXJzW2ZpbHRlcltpXV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworfSkuY2Fs
bChCZWhhdmlvdXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5CZWhhdmlvdXIgPSBCZWhhdmlvdXI7
Cit9KTsKK2FjZS5kZWZpbmUoJ2FjZS91bmljb2RlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK2V4cG9ydHMu
cGFja2FnZXMgPSB7fTsKKworYWRkVW5pY29kZVBhY2thZ2UoeworICAgIEw6ICAiMDA0MS0wMDVB
MDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBDMC0wMEQ2MDBEOC0wMEY2MDBGOC0wMkMxMDJDNi0wMkQx
MDJFMC0wMkU0MDJFQzAyRUUwMzcwLTAzNzQwMzc2MDM3NzAzN0EtMDM3RDAzODYwMzg4LTAzOEEw
MzhDMDM4RS0wM0ExMDNBMy0wM0Y1MDNGNy0wNDgxMDQ4QS0wNTI1MDUzMS0wNTU2MDU1OTA1NjEt
MDU4NzA1RDAtMDVFQTA1RjAtMDVGMjA2MjEtMDY0QTA2NkUwNjZGMDY3MS0wNkQzMDZENTA2RTUw
NkU2MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3MTItMDcyRjA3NEQtMDdBNTA3QjEwN0NBLTA3
RUEwN0Y0MDdGNTA3RkEwODAwLTA4MTUwODFBMDgyNDA4MjgwOTA0LTA5MzkwOTNEMDk1MDA5NTgt
MDk2MTA5NzEwOTcyMDk3OS0wOTdGMDk4NS0wOThDMDk4RjA5OTAwOTkzLTA5QTgwOUFBLTA5QjAw
OUIyMDlCNi0wOUI5MDlCRDA5Q0UwOURDMDlERDA5REYtMDlFMTA5RjAwOUYxMEEwNS0wQTBBMEEw
RjBBMTAwQTEzLTBBMjgwQTJBLTBBMzAwQTMyMEEzMzBBMzUwQTM2MEEzODBBMzkwQTU5LTBBNUMw
QTVFMEE3Mi0wQTc0MEE4NS0wQThEMEE4Ri0wQTkxMEE5My0wQUE4MEFBQS0wQUIwMEFCMjBBQjMw
QUI1LTBBQjkwQUJEMEFEMDBBRTAwQUUxMEIwNS0wQjBDMEIwRjBCMTAwQjEzLTBCMjgwQjJBLTBC
MzAwQjMyMEIzMzBCMzUtMEIzOTBCM0QwQjVDMEI1RDBCNUYtMEI2MTBCNzEwQjgzMEI4NS0wQjhB
MEI4RS0wQjkwMEI5Mi0wQjk1MEI5OTBCOUEwQjlDMEI5RTBCOUYwQkEzMEJBNDBCQTgtMEJBQTBC
QUUtMEJCOTBCRDAwQzA1LTBDMEMwQzBFLTBDMTAwQzEyLTBDMjgwQzJBLTBDMzMwQzM1LTBDMzkw
QzNEMEM1ODBDNTkwQzYwMEM2MTBDODUtMEM4QzBDOEUtMEM5MDBDOTItMENBODBDQUEtMENCMzBD
QjUtMENCOTBDQkQwQ0RFMENFMDBDRTEwRDA1LTBEMEMwRDBFLTBEMTAwRDEyLTBEMjgwRDJBLTBE
MzkwRDNEMEQ2MDBENjEwRDdBLTBEN0YwRDg1LTBEOTYwRDlBLTBEQjEwREIzLTBEQkIwREJEMERD
MC0wREM2MEUwMS0wRTMwMEUzMjBFMzMwRTQwLTBFNDYwRTgxMEU4MjBFODQwRTg3MEU4ODBFOEEw
RThEMEU5NC0wRTk3MEU5OS0wRTlGMEVBMS0wRUEzMEVBNTBFQTcwRUFBMEVBQjBFQUQtMEVCMDBF
QjIwRUIzMEVCRDBFQzAtMEVDNDBFQzYwRURDMEVERDBGMDAwRjQwLTBGNDcwRjQ5LTBGNkMwRjg4
LTBGOEIxMDAwLTEwMkExMDNGMTA1MC0xMDU1MTA1QS0xMDVEMTA2MTEwNjUxMDY2MTA2RS0xMDcw
MTA3NS0xMDgxMTA4RTEwQTAtMTBDNTEwRDAtMTBGQTEwRkMxMTAwLTEyNDgxMjRBLTEyNEQxMjUw
LTEyNTYxMjU4MTI1QS0xMjVEMTI2MC0xMjg4MTI4QS0xMjhEMTI5MC0xMkIwMTJCMi0xMkI1MTJC
OC0xMkJFMTJDMDEyQzItMTJDNTEyQzgtMTJENjEyRDgtMTMxMDEzMTItMTMxNTEzMTgtMTM1QTEz
ODAtMTM4RjEzQTAtMTNGNDE0MDEtMTY2QzE2NkYtMTY3RjE2ODEtMTY5QTE2QTAtMTZFQTE3MDAt
MTcwQzE3MEUtMTcxMTE3MjAtMTczMTE3NDAtMTc1MTE3NjAtMTc2QzE3NkUtMTc3MDE3ODAtMTdC
MzE3RDcxN0RDMTgyMC0xODc3MTg4MC0xOEE4MThBQTE4QjAtMThGNTE5MDAtMTkxQzE5NTAtMTk2
RDE5NzAtMTk3NDE5ODAtMTlBQjE5QzEtMTlDNzFBMDAtMUExNjFBMjAtMUE1NDFBQTcxQjA1LTFC
MzMxQjQ1LTFCNEIxQjgzLTFCQTAxQkFFMUJBRjFDMDAtMUMyMzFDNEQtMUM0RjFDNUEtMUM3RDFD
RTktMUNFQzFDRUUtMUNGMTFEMDAtMURCRjFFMDAtMUYxNTFGMTgtMUYxRDFGMjAtMUY0NTFGNDgt
MUY0RDFGNTAtMUY1NzFGNTkxRjVCMUY1RDFGNUYtMUY3RDFGODAtMUZCNDFGQjYtMUZCQzFGQkUx
RkMyLTFGQzQxRkM2LTFGQ0MxRkQwLTFGRDMxRkQ2LTFGREIxRkUwLTFGRUMxRkYyLTFGRjQxRkY2
LTFGRkMyMDcxMjA3RjIwOTAtMjA5NDIxMDIyMTA3MjEwQS0yMTEzMjExNTIxMTktMjExRDIxMjQy
MTI2MjEyODIxMkEtMjEyRDIxMkYtMjEzOTIxM0MtMjEzRjIxNDUtMjE0OTIxNEUyMTgzMjE4NDJD
MDAtMkMyRTJDMzAtMkM1RTJDNjAtMkNFNDJDRUItMkNFRTJEMDAtMkQyNTJEMzAtMkQ2NTJENkYy
RDgwLTJEOTYyREEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4LTJEQkUyREMwLTJEQzYyREM4
LTJEQ0UyREQwLTJERDYyREQ4LTJEREUyRTJGMzAwNTMwMDYzMDMxLTMwMzUzMDNCMzAzQzMwNDEt
MzA5NjMwOUQtMzA5RjMwQTEtMzBGQTMwRkMtMzBGRjMxMDUtMzEyRDMxMzEtMzE4RTMxQTAtMzFC
NzMxRjAtMzFGRjM0MDAtNERCNTRFMDAtOUZDQkEwMDAtQTQ4Q0E0RDAtQTRGREE1MDAtQTYwQ0E2
MTAtQTYxRkE2MkFBNjJCQTY0MC1BNjVGQTY2Mi1BNjZFQTY3Ri1BNjk3QTZBMC1BNkU1QTcxNy1B
NzFGQTcyMi1BNzg4QTc4QkE3OENBN0ZCLUE4MDFBODAzLUE4MDVBODA3LUE4MEFBODBDLUE4MjJB
ODQwLUE4NzNBODgyLUE4QjNBOEYyLUE4RjdBOEZCQTkwQS1BOTI1QTkzMC1BOTQ2QTk2MC1BOTdD
QTk4NC1BOUIyQTlDRkFBMDAtQUEyOEFBNDAtQUE0MkFBNDQtQUE0QkFBNjAtQUE3NkFBN0FBQTgw
LUFBQUZBQUIxQUFCNUFBQjZBQUI5LUFBQkRBQUMwQUFDMkFBREItQUFEREFCQzAtQUJFMkFDMDAt
RDdBM0Q3QjAtRDdDNkQ3Q0ItRDdGQkY5MDAtRkEyREZBMzAtRkE2REZBNzAtRkFEOUZCMDAtRkIw
NkZCMTMtRkIxN0ZCMURGQjFGLUZCMjhGQjJBLUZCMzZGQjM4LUZCM0NGQjNFRkI0MEZCNDFGQjQz
RkI0NEZCNDYtRkJCMUZCRDMtRkQzREZENTAtRkQ4RkZEOTItRkRDN0ZERjAtRkRGQkZFNzAtRkU3
NEZFNzYtRkVGQ0ZGMjEtRkYzQUZGNDEtRkY1QUZGNjYtRkZCRUZGQzItRkZDN0ZGQ0EtRkZDRkZG
RDItRkZEN0ZGREEtRkZEQyIsCisgICAgTGw6ICIwMDYxLTAwN0EwMEFBMDBCNTAwQkEwMERGLTAw
RjYwMEY4LTAwRkYwMTAxMDEwMzAxMDUwMTA3MDEwOTAxMEIwMTBEMDEwRjAxMTEwMTEzMDExNTAx
MTcwMTE5MDExQjAxMUQwMTFGMDEyMTAxMjMwMTI1MDEyNzAxMjkwMTJCMDEyRDAxMkYwMTMxMDEz
MzAxMzUwMTM3MDEzODAxM0EwMTNDMDEzRTAxNDAwMTQyMDE0NDAxNDYwMTQ4MDE0OTAxNEIwMTRE
MDE0RjAxNTEwMTUzMDE1NTAxNTcwMTU5MDE1QjAxNUQwMTVGMDE2MTAxNjMwMTY1MDE2NzAxNjkw
MTZCMDE2RDAxNkYwMTcxMDE3MzAxNzUwMTc3MDE3QTAxN0MwMTdFLTAxODAwMTgzMDE4NTAxODgw
MThDMDE4RDAxOTIwMTk1MDE5OS0wMTlCMDE5RTAxQTEwMUEzMDFBNTAxQTgwMUFBMDFBQjAxQUQw
MUIwMDFCNDAxQjYwMUI5MDFCQTAxQkQtMDFCRjAxQzYwMUM5MDFDQzAxQ0UwMUQwMDFEMjAxRDQw
MUQ2MDFEODAxREEwMURDMDFERDAxREYwMUUxMDFFMzAxRTUwMUU3MDFFOTAxRUIwMUVEMDFFRjAx
RjAwMUYzMDFGNTAxRjkwMUZCMDFGRDAxRkYwMjAxMDIwMzAyMDUwMjA3MDIwOTAyMEIwMjBEMDIw
RjAyMTEwMjEzMDIxNTAyMTcwMjE5MDIxQjAyMUQwMjFGMDIyMTAyMjMwMjI1MDIyNzAyMjkwMjJC
MDIyRDAyMkYwMjMxMDIzMy0wMjM5MDIzQzAyM0YwMjQwMDI0MjAyNDcwMjQ5MDI0QjAyNEQwMjRG
LTAyOTMwMjk1LTAyQUYwMzcxMDM3MzAzNzcwMzdCLTAzN0QwMzkwMDNBQy0wM0NFMDNEMDAzRDEw
M0Q1LTAzRDcwM0Q5MDNEQjAzREQwM0RGMDNFMTAzRTMwM0U1MDNFNzAzRTkwM0VCMDNFRDAzRUYt
MDNGMzAzRjUwM0Y4MDNGQjAzRkMwNDMwLTA0NUYwNDYxMDQ2MzA0NjUwNDY3MDQ2OTA0NkIwNDZE
MDQ2RjA0NzEwNDczMDQ3NTA0NzcwNDc5MDQ3QjA0N0QwNDdGMDQ4MTA0OEIwNDhEMDQ4RjA0OTEw
NDkzMDQ5NTA0OTcwNDk5MDQ5QjA0OUQwNDlGMDRBMTA0QTMwNEE1MDRBNzA0QTkwNEFCMDRBRDA0
QUYwNEIxMDRCMzA0QjUwNEI3MDRCOTA0QkIwNEJEMDRCRjA0QzIwNEM0MDRDNjA0QzgwNENBMDRD
QzA0Q0UwNENGMDREMTA0RDMwNEQ1MDRENzA0RDkwNERCMDRERDA0REYwNEUxMDRFMzA0RTUwNEU3
MDRFOTA0RUIwNEVEMDRFRjA0RjEwNEYzMDRGNTA0RjcwNEY5MDRGQjA0RkQwNEZGMDUwMTA1MDMw
NTA1MDUwNzA1MDkwNTBCMDUwRDA1MEYwNTExMDUxMzA1MTUwNTE3MDUxOTA1MUIwNTFEMDUxRjA1
MjEwNTIzMDUyNTA1NjEtMDU4NzFEMDAtMUQyQjFENjItMUQ3NzFENzktMUQ5QTFFMDExRTAzMUUw
NTFFMDcxRTA5MUUwQjFFMEQxRTBGMUUxMTFFMTMxRTE1MUUxNzFFMTkxRTFCMUUxRDFFMUYxRTIx
MUUyMzFFMjUxRTI3MUUyOTFFMkIxRTJEMUUyRjFFMzExRTMzMUUzNTFFMzcxRTM5MUUzQjFFM0Qx
RTNGMUU0MTFFNDMxRTQ1MUU0NzFFNDkxRTRCMUU0RDFFNEYxRTUxMUU1MzFFNTUxRTU3MUU1OTFF
NUIxRTVEMUU1RjFFNjExRTYzMUU2NTFFNjcxRTY5MUU2QjFFNkQxRTZGMUU3MTFFNzMxRTc1MUU3
NzFFNzkxRTdCMUU3RDFFN0YxRTgxMUU4MzFFODUxRTg3MUU4OTFFOEIxRThEMUU4RjFFOTExRTkz
MUU5NS0xRTlEMUU5RjFFQTExRUEzMUVBNTFFQTcxRUE5MUVBQjFFQUQxRUFGMUVCMTFFQjMxRUI1
MUVCNzFFQjkxRUJCMUVCRDFFQkYxRUMxMUVDMzFFQzUxRUM3MUVDOTFFQ0IxRUNEMUVDRjFFRDEx
RUQzMUVENTFFRDcxRUQ5MUVEQjFFREQxRURGMUVFMTFFRTMxRUU1MUVFNzFFRTkxRUVCMUVFRDFF
RUYxRUYxMUVGMzFFRjUxRUY3MUVGOTFFRkIxRUZEMUVGRi0xRjA3MUYxMC0xRjE1MUYyMC0xRjI3
MUYzMC0xRjM3MUY0MC0xRjQ1MUY1MC0xRjU3MUY2MC0xRjY3MUY3MC0xRjdEMUY4MC0xRjg3MUY5
MC0xRjk3MUZBMC0xRkE3MUZCMC0xRkI0MUZCNjFGQjcxRkJFMUZDMi0xRkM0MUZDNjFGQzcxRkQw
LTFGRDMxRkQ2MUZENzFGRTAtMUZFNzFGRjItMUZGNDFGRjYxRkY3MjEwQTIxMEUyMTBGMjExMzIx
MkYyMTM0MjEzOTIxM0MyMTNEMjE0Ni0yMTQ5MjE0RTIxODQyQzMwLTJDNUUyQzYxMkM2NTJDNjYy
QzY4MkM2QTJDNkMyQzcxMkM3MzJDNzQyQzc2LTJDN0MyQzgxMkM4MzJDODUyQzg3MkM4OTJDOEIy
QzhEMkM4RjJDOTEyQzkzMkM5NTJDOTcyQzk5MkM5QjJDOUQyQzlGMkNBMTJDQTMyQ0E1MkNBNzJD
QTkyQ0FCMkNBRDJDQUYyQ0IxMkNCMzJDQjUyQ0I3MkNCOTJDQkIyQ0JEMkNCRjJDQzEyQ0MzMkND
NTJDQzcyQ0M5MkNDQjJDQ0QyQ0NGMkNEMTJDRDMyQ0Q1MkNENzJDRDkyQ0RCMkNERDJDREYyQ0Ux
MkNFMzJDRTQyQ0VDMkNFRTJEMDAtMkQyNUE2NDFBNjQzQTY0NUE2NDdBNjQ5QTY0QkE2NERBNjRG
QTY1MUE2NTNBNjU1QTY1N0E2NTlBNjVCQTY1REE2NUZBNjYzQTY2NUE2NjdBNjY5QTY2QkE2NkRB
NjgxQTY4M0E2ODVBNjg3QTY4OUE2OEJBNjhEQTY4RkE2OTFBNjkzQTY5NUE2OTdBNzIzQTcyNUE3
MjdBNzI5QTcyQkE3MkRBNzJGLUE3MzFBNzMzQTczNUE3MzdBNzM5QTczQkE3M0RBNzNGQTc0MUE3
NDNBNzQ1QTc0N0E3NDlBNzRCQTc0REE3NEZBNzUxQTc1M0E3NTVBNzU3QTc1OUE3NUJBNzVEQTc1
RkE3NjFBNzYzQTc2NUE3NjdBNzY5QTc2QkE3NkRBNzZGQTc3MS1BNzc4QTc3QUE3N0NBNzdGQTc4
MUE3ODNBNzg1QTc4N0E3OENGQjAwLUZCMDZGQjEzLUZCMTdGRjQxLUZGNUEiLAorICAgIEx1OiAi
MDA0MS0wMDVBMDBDMC0wMEQ2MDBEOC0wMERFMDEwMDAxMDIwMTA0MDEwNjAxMDgwMTBBMDEwQzAx
MEUwMTEwMDExMjAxMTQwMTE2MDExODAxMUEwMTFDMDExRTAxMjAwMTIyMDEyNDAxMjYwMTI4MDEy
QTAxMkMwMTJFMDEzMDAxMzIwMTM0MDEzNjAxMzkwMTNCMDEzRDAxM0YwMTQxMDE0MzAxNDUwMTQ3
MDE0QTAxNEMwMTRFMDE1MDAxNTIwMTU0MDE1NjAxNTgwMTVBMDE1QzAxNUUwMTYwMDE2MjAxNjQw
MTY2MDE2ODAxNkEwMTZDMDE2RTAxNzAwMTcyMDE3NDAxNzYwMTc4MDE3OTAxN0IwMTdEMDE4MTAx
ODIwMTg0MDE4NjAxODcwMTg5LTAxOEIwMThFLTAxOTEwMTkzMDE5NDAxOTYtMDE5ODAxOUMwMTlE
MDE5RjAxQTAwMUEyMDFBNDAxQTYwMUE3MDFBOTAxQUMwMUFFMDFBRjAxQjEtMDFCMzAxQjUwMUI3
MDFCODAxQkMwMUM0MDFDNzAxQ0EwMUNEMDFDRjAxRDEwMUQzMDFENTAxRDcwMUQ5MDFEQjAxREUw
MUUwMDFFMjAxRTQwMUU2MDFFODAxRUEwMUVDMDFFRTAxRjEwMUY0MDFGNi0wMUY4MDFGQTAxRkMw
MUZFMDIwMDAyMDIwMjA0MDIwNjAyMDgwMjBBMDIwQzAyMEUwMjEwMDIxMjAyMTQwMjE2MDIxODAy
MUEwMjFDMDIxRTAyMjAwMjIyMDIyNDAyMjYwMjI4MDIyQTAyMkMwMjJFMDIzMDAyMzIwMjNBMDIz
QjAyM0QwMjNFMDI0MTAyNDMtMDI0NjAyNDgwMjRBMDI0QzAyNEUwMzcwMDM3MjAzNzYwMzg2MDM4
OC0wMzhBMDM4QzAzOEUwMzhGMDM5MS0wM0ExMDNBMy0wM0FCMDNDRjAzRDItMDNENDAzRDgwM0RB
MDNEQzAzREUwM0UwMDNFMjAzRTQwM0U2MDNFODAzRUEwM0VDMDNFRTAzRjQwM0Y3MDNGOTAzRkEw
M0ZELTA0MkYwNDYwMDQ2MjA0NjQwNDY2MDQ2ODA0NkEwNDZDMDQ2RTA0NzAwNDcyMDQ3NDA0NzYw
NDc4MDQ3QTA0N0MwNDdFMDQ4MDA0OEEwNDhDMDQ4RTA0OTAwNDkyMDQ5NDA0OTYwNDk4MDQ5QTA0
OUMwNDlFMDRBMDA0QTIwNEE0MDRBNjA0QTgwNEFBMDRBQzA0QUUwNEIwMDRCMjA0QjQwNEI2MDRC
ODA0QkEwNEJDMDRCRTA0QzAwNEMxMDRDMzA0QzUwNEM3MDRDOTA0Q0IwNENEMDREMDA0RDIwNEQ0
MDRENjA0RDgwNERBMDREQzA0REUwNEUwMDRFMjA0RTQwNEU2MDRFODA0RUEwNEVDMDRFRTA0RjAw
NEYyMDRGNDA0RjYwNEY4MDRGQTA0RkMwNEZFMDUwMDA1MDIwNTA0MDUwNjA1MDgwNTBBMDUwQzA1
MEUwNTEwMDUxMjA1MTQwNTE2MDUxODA1MUEwNTFDMDUxRTA1MjAwNTIyMDUyNDA1MzEtMDU1NjEw
QTAtMTBDNTFFMDAxRTAyMUUwNDFFMDYxRTA4MUUwQTFFMEMxRTBFMUUxMDFFMTIxRTE0MUUxNjFF
MTgxRTFBMUUxQzFFMUUxRTIwMUUyMjFFMjQxRTI2MUUyODFFMkExRTJDMUUyRTFFMzAxRTMyMUUz
NDFFMzYxRTM4MUUzQTFFM0MxRTNFMUU0MDFFNDIxRTQ0MUU0NjFFNDgxRTRBMUU0QzFFNEUxRTUw
MUU1MjFFNTQxRTU2MUU1ODFFNUExRTVDMUU1RTFFNjAxRTYyMUU2NDFFNjYxRTY4MUU2QTFFNkMx
RTZFMUU3MDFFNzIxRTc0MUU3NjFFNzgxRTdBMUU3QzFFN0UxRTgwMUU4MjFFODQxRTg2MUU4ODFF
OEExRThDMUU4RTFFOTAxRTkyMUU5NDFFOUUxRUEwMUVBMjFFQTQxRUE2MUVBODFFQUExRUFDMUVB
RTFFQjAxRUIyMUVCNDFFQjYxRUI4MUVCQTFFQkMxRUJFMUVDMDFFQzIxRUM0MUVDNjFFQzgxRUNB
MUVDQzFFQ0UxRUQwMUVEMjFFRDQxRUQ2MUVEODFFREExRURDMUVERTFFRTAxRUUyMUVFNDFFRTYx
RUU4MUVFQTFFRUMxRUVFMUVGMDFFRjIxRUY0MUVGNjFFRjgxRUZBMUVGQzFFRkUxRjA4LTFGMEYx
RjE4LTFGMUQxRjI4LTFGMkYxRjM4LTFGM0YxRjQ4LTFGNEQxRjU5MUY1QjFGNUQxRjVGMUY2OC0x
RjZGMUZCOC0xRkJCMUZDOC0xRkNCMUZEOC0xRkRCMUZFOC0xRkVDMUZGOC0xRkZCMjEwMjIxMDcy
MTBCLTIxMEQyMTEwLTIxMTIyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEzMC0y
MTMzMjEzRTIxM0YyMTQ1MjE4MzJDMDAtMkMyRTJDNjAyQzYyLTJDNjQyQzY3MkM2OTJDNkIyQzZE
LTJDNzAyQzcyMkM3NTJDN0UtMkM4MDJDODIyQzg0MkM4NjJDODgyQzhBMkM4QzJDOEUyQzkwMkM5
MjJDOTQyQzk2MkM5ODJDOUEyQzlDMkM5RTJDQTAyQ0EyMkNBNDJDQTYyQ0E4MkNBQTJDQUMyQ0FF
MkNCMDJDQjIyQ0I0MkNCNjJDQjgyQ0JBMkNCQzJDQkUyQ0MwMkNDMjJDQzQyQ0M2MkNDODJDQ0Ey
Q0NDMkNDRTJDRDAyQ0QyMkNENDJDRDYyQ0Q4MkNEQTJDREMyQ0RFMkNFMDJDRTIyQ0VCMkNFREE2
NDBBNjQyQTY0NEE2NDZBNjQ4QTY0QUE2NENBNjRFQTY1MEE2NTJBNjU0QTY1NkE2NThBNjVBQTY1
Q0E2NUVBNjYyQTY2NEE2NjZBNjY4QTY2QUE2NkNBNjgwQTY4MkE2ODRBNjg2QTY4OEE2OEFBNjhD
QTY4RUE2OTBBNjkyQTY5NEE2OTZBNzIyQTcyNEE3MjZBNzI4QTcyQUE3MkNBNzJFQTczMkE3MzRB
NzM2QTczOEE3M0FBNzNDQTczRUE3NDBBNzQyQTc0NEE3NDZBNzQ4QTc0QUE3NENBNzRFQTc1MEE3
NTJBNzU0QTc1NkE3NThBNzVBQTc1Q0E3NUVBNzYwQTc2MkE3NjRBNzY2QTc2OEE3NkFBNzZDQTc2
RUE3NzlBNzdCQTc3REE3N0VBNzgwQTc4MkE3ODRBNzg2QTc4QkZGMjEtRkYzQSIsCisgICAgTHQ6
ICIwMUM1MDFDODAxQ0IwMUYyMUY4OC0xRjhGMUY5OC0xRjlGMUZBOC0xRkFGMUZCQzFGQ0MxRkZD
IiwKKyAgICBMbTogIjAyQjAtMDJDMTAyQzYtMDJEMTAyRTAtMDJFNDAyRUMwMkVFMDM3NDAzN0Ew
NTU5MDY0MDA2RTUwNkU2MDdGNDA3RjUwN0ZBMDgxQTA4MjQwODI4MDk3MTBFNDYwRUM2MTBGQzE3
RDcxODQzMUFBNzFDNzgtMUM3RDFEMkMtMUQ2MTFENzgxRDlCLTFEQkYyMDcxMjA3RjIwOTAtMjA5
NDJDN0QyRDZGMkUyRjMwMDUzMDMxLTMwMzUzMDNCMzA5RDMwOUUzMEZDLTMwRkVBMDE1QTRGOC1B
NEZEQTYwQ0E2N0ZBNzE3LUE3MUZBNzcwQTc4OEE5Q0ZBQTcwQUFEREZGNzBGRjlFRkY5RiIsCisg
ICAgTG86ICIwMUJCMDFDMC0wMUMzMDI5NDA1RDAtMDVFQTA1RjAtMDVGMjA2MjEtMDYzRjA2NDEt
MDY0QTA2NkUwNjZGMDY3MS0wNkQzMDZENTA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3
MkYwNzRELTA3QTUwN0IxMDdDQS0wN0VBMDgwMC0wODE1MDkwNC0wOTM5MDkzRDA5NTAwOTU4LTA5
NjEwOTcyMDk3OS0wOTdGMDk4NS0wOThDMDk4RjA5OTAwOTkzLTA5QTgwOUFBLTA5QjAwOUIyMDlC
Ni0wOUI5MDlCRDA5Q0UwOURDMDlERDA5REYtMDlFMTA5RjAwOUYxMEEwNS0wQTBBMEEwRjBBMTAw
QTEzLTBBMjgwQTJBLTBBMzAwQTMyMEEzMzBBMzUwQTM2MEEzODBBMzkwQTU5LTBBNUMwQTVFMEE3
Mi0wQTc0MEE4NS0wQThEMEE4Ri0wQTkxMEE5My0wQUE4MEFBQS0wQUIwMEFCMjBBQjMwQUI1LTBB
QjkwQUJEMEFEMDBBRTAwQUUxMEIwNS0wQjBDMEIwRjBCMTAwQjEzLTBCMjgwQjJBLTBCMzAwQjMy
MEIzMzBCMzUtMEIzOTBCM0QwQjVDMEI1RDBCNUYtMEI2MTBCNzEwQjgzMEI4NS0wQjhBMEI4RS0w
QjkwMEI5Mi0wQjk1MEI5OTBCOUEwQjlDMEI5RTBCOUYwQkEzMEJBNDBCQTgtMEJBQTBCQUUtMEJC
OTBCRDAwQzA1LTBDMEMwQzBFLTBDMTAwQzEyLTBDMjgwQzJBLTBDMzMwQzM1LTBDMzkwQzNEMEM1
ODBDNTkwQzYwMEM2MTBDODUtMEM4QzBDOEUtMEM5MDBDOTItMENBODBDQUEtMENCMzBDQjUtMENC
OTBDQkQwQ0RFMENFMDBDRTEwRDA1LTBEMEMwRDBFLTBEMTAwRDEyLTBEMjgwRDJBLTBEMzkwRDNE
MEQ2MDBENjEwRDdBLTBEN0YwRDg1LTBEOTYwRDlBLTBEQjEwREIzLTBEQkIwREJEMERDMC0wREM2
MEUwMS0wRTMwMEUzMjBFMzMwRTQwLTBFNDUwRTgxMEU4MjBFODQwRTg3MEU4ODBFOEEwRThEMEU5
NC0wRTk3MEU5OS0wRTlGMEVBMS0wRUEzMEVBNTBFQTcwRUFBMEVBQjBFQUQtMEVCMDBFQjIwRUIz
MEVCRDBFQzAtMEVDNDBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAt
MTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODEx
MDhFMTBEMC0xMEZBMTEwMC0xMjQ4MTI0QS0xMjREMTI1MC0xMjU2MTI1ODEyNUEtMTI1RDEyNjAt
MTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEyQjgtMTJCRTEyQzAxMkMyLTEyQzUxMkM4
LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUExMzgwLTEzOEYxM0EwLTEzRjQxNDAxLTE2
NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAwLTE3MEMxNzBFLTE3MTExNzIwLTE3MzEx
NzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3QjMxN0RDMTgyMC0xODQyMTg0NC0xODc3
MTg4MC0xOEE4MThBQTE4QjAtMThGNTE5MDAtMTkxQzE5NTAtMTk2RDE5NzAtMTk3NDE5ODAtMTlB
QjE5QzEtMTlDNzFBMDAtMUExNjFBMjAtMUE1NDFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFC
QUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzc3MUNFOS0xQ0VDMUNFRS0xQ0YxMjEzNS0y
MTM4MkQzMC0yRDY1MkQ4MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJF
MkRDMC0yREM2MkRDOC0yRENFMkREMC0yREQ2MkREOC0yRERFMzAwNjMwM0MzMDQxLTMwOTYzMDlG
MzBBMS0zMEZBMzBGRjMxMDUtMzEyRDMxMzEtMzE4RTMxQTAtMzFCNzMxRjAtMzFGRjM0MDAtNERC
NTRFMDAtOUZDQkEwMDAtQTAxNEEwMTYtQTQ4Q0E0RDAtQTRGN0E1MDAtQTYwQkE2MTAtQTYxRkE2
MkFBNjJCQTY2RUE2QTAtQTZFNUE3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4
NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NB
OTg0LUE5QjJBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNkZBQTcxLUFBNzZBQTdB
QUE4MC1BQUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCQUFEQ0FCQzAtQUJFMkFD
MDAtRDdBM0Q3QjAtRDdDNkQ3Q0ItRDdGQkY5MDAtRkEyREZBMzAtRkE2REZBNzAtRkFEOUZCMURG
QjFGLUZCMjhGQjJBLUZCMzZGQjM4LUZCM0NGQjNFRkI0MEZCNDFGQjQzRkI0NEZCNDYtRkJCMUZC
RDMtRkQzREZENTAtRkQ4RkZEOTItRkRDN0ZERjAtRkRGQkZFNzAtRkU3NEZFNzYtRkVGQ0ZGNjYt
RkY2RkZGNzEtRkY5REZGQTAtRkZCRUZGQzItRkZDN0ZGQ0EtRkZDRkZGRDItRkZEN0ZGREEtRkZE
QyIsCisgICAgTTogICIwMzAwLTAzNkYwNDgzLTA0ODkwNTkxLTA1QkQwNUJGMDVDMTA1QzIwNUM0
MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2NUUwNjcwMDZENi0wNkRDMDZERS0wNkU0MDZFNzA2RTgw
NkVBLTA2RUQwNzExMDczMC0wNzRBMDdBNi0wN0IwMDdFQi0wN0YzMDgxNi0wODE5MDgxQi0wODIz
MDgyNS0wODI3MDgyOS0wODJEMDkwMC0wOTAzMDkzQzA5M0UtMDk0RTA5NTEtMDk1NTA5NjIwOTYz
MDk4MS0wOTgzMDlCQzA5QkUtMDlDNDA5QzcwOUM4MDlDQi0wOUNEMDlENzA5RTIwOUUzMEEwMS0w
QTAzMEEzQzBBM0UtMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBBODEtMEE4
MzBBQkMwQUJFLTBBQzUwQUM3LTBBQzkwQUNCLTBBQ0QwQUUyMEFFMzBCMDEtMEIwMzBCM0MwQjNF
LTBCNDQwQjQ3MEI0ODBCNEItMEI0RDBCNTYwQjU3MEI2MjBCNjMwQjgyMEJCRS0wQkMyMEJDNi0w
QkM4MEJDQS0wQkNEMEJENzBDMDEtMEMwMzBDM0UtMEM0NDBDNDYtMEM0ODBDNEEtMEM0RDBDNTUw
QzU2MEM2MjBDNjMwQzgyMEM4MzBDQkMwQ0JFLTBDQzQwQ0M2LTBDQzgwQ0NBLTBDQ0QwQ0Q1MENE
NjBDRTIwQ0UzMEQwMjBEMDMwRDNFLTBENDQwRDQ2LTBENDgwRDRBLTBENEQwRDU3MEQ2MjBENjMw
RDgyMEQ4MzBEQ0EwRENGLTBERDQwREQ2MEREOC0wRERGMERGMjBERjMwRTMxMEUzNC0wRTNBMEU0
Ny0wRTRFMEVCMTBFQjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkw
RjNFMEYzRjBGNzEtMEY4NDBGODYwRjg3MEY5MC0wRjk3MEY5OS0wRkJDMEZDNjEwMkItMTAzRTEw
NTYtMTA1OTEwNUUtMTA2MDEwNjItMTA2NDEwNjctMTA2RDEwNzEtMTA3NDEwODItMTA4RDEwOEYx
MDlBLTEwOUQxMzVGMTcxMi0xNzE0MTczMi0xNzM0MTc1MjE3NTMxNzcyMTc3MzE3QjYtMTdEMzE3
REQxODBCLTE4MEQxOEE5MTkyMC0xOTJCMTkzMC0xOTNCMTlCMC0xOUMwMTlDODE5QzkxQTE3LTFB
MUIxQTU1LTFBNUUxQTYwLTFBN0MxQTdGMUIwMC0xQjA0MUIzNC0xQjQ0MUI2Qi0xQjczMUI4MC0x
QjgyMUJBMS0xQkFBMUMyNC0xQzM3MUNEMC0xQ0QyMUNENC0xQ0U4MUNFRDFDRjIxREMwLTFERTYx
REZELTFERkYyMEQwLTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5QUE2NkYt
QTY3MkE2N0NBNjdEQTZGMEE2RjFBODAyQTgwNkE4MEJBODIzLUE4MjdBODgwQTg4MUE4QjQtQThD
NEE4RTAtQThGMUE5MjYtQTkyREE5NDctQTk1M0E5ODAtQTk4M0E5QjMtQTlDMEFBMjktQUEzNkFB
NDNBQTRDQUE0REFBN0JBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkUzLUFCRUFB
QkVDQUJFREZCMUVGRTAwLUZFMEZGRTIwLUZFMjYiLAorICAgIE1uOiAiMDMwMC0wMzZGMDQ4My0w
NDg3MDU5MS0wNUJEMDVCRjA1QzEwNUMyMDVDNDA1QzUwNUM3MDYxMC0wNjFBMDY0Qi0wNjVFMDY3
MDA2RDYtMDZEQzA2REYtMDZFNDA2RTcwNkU4MDZFQS0wNkVEMDcxMTA3MzAtMDc0QTA3QTYtMDdC
MDA3RUItMDdGMzA4MTYtMDgxOTA4MUItMDgyMzA4MjUtMDgyNzA4MjktMDgyRDA5MDAtMDkwMjA5
M0MwOTQxLTA5NDgwOTREMDk1MS0wOTU1MDk2MjA5NjMwOTgxMDlCQzA5QzEtMDlDNDA5Q0QwOUUy
MDlFMzBBMDEwQTAyMEEzQzBBNDEwQTQyMEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1
MEE4MTBBODIwQUJDMEFDMS0wQUM1MEFDNzBBQzgwQUNEMEFFMjBBRTMwQjAxMEIzQzBCM0YwQjQx
LTBCNDQwQjREMEI1NjBCNjIwQjYzMEI4MjBCQzAwQkNEMEMzRS0wQzQwMEM0Ni0wQzQ4MEM0QS0w
QzREMEM1NTBDNTYwQzYyMEM2MzBDQkMwQ0JGMENDNjBDQ0MwQ0NEMENFMjBDRTMwRDQxLTBENDQw
RDREMEQ2MjBENjMwRENBMEREMi0wREQ0MERENjBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVC
NC0wRUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGNzEtMEY3RTBGODAt
MEY4NDBGODYwRjg3MEY5MC0wRjk3MEY5OS0wRkJDMEZDNjEwMkQtMTAzMDEwMzItMTAzNzEwMzkx
MDNBMTAzRDEwM0UxMDU4MTA1OTEwNUUtMTA2MDEwNzEtMTA3NDEwODIxMDg1MTA4NjEwOEQxMDlE
MTM1RjE3MTItMTcxNDE3MzItMTczNDE3NTIxNzUzMTc3MjE3NzMxN0I3LTE3QkQxN0M2MTdDOS0x
N0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5MjIxOTI3MTkyODE5MzIxOTM5LTE5M0IxQTE3MUEx
ODFBNTYxQTU4LTFBNUUxQTYwMUE2MjFBNjUtMUE2QzFBNzMtMUE3QzFBN0YxQjAwLTFCMDMxQjM0
MUIzNi0xQjNBMUIzQzFCNDIxQjZCLTFCNzMxQjgwMUI4MTFCQTItMUJBNTFCQTgxQkE5MUMyQy0x
QzMzMUMzNjFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTAxQ0UyLTFDRTgxQ0VEMURDMC0xREU2MURGRC0x
REZGMjBEMC0yMERDMjBFMTIwRTUtMjBGMDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkz
MDlBQTY2RkE2N0NBNjdEQTZGMEE2RjFBODAyQTgwNkE4MEJBODI1QTgyNkE4QzRBOEUwLUE4RjFB
OTI2LUE5MkRBOTQ3LUE5NTFBOTgwLUE5ODJBOUIzQTlCNi1BOUI5QTlCQ0FBMjktQUEyRUFBMzFB
QTMyQUEzNUFBMzZBQTQzQUE0Q0FBQjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTVB
QkU4QUJFREZCMUVGRTAwLUZFMEZGRTIwLUZFMjYiLAorICAgIE1jOiAiMDkwMzA5M0UtMDk0MDA5
NDktMDk0QzA5NEUwOTgyMDk4MzA5QkUtMDlDMDA5QzcwOUM4MDlDQjA5Q0MwOUQ3MEEwMzBBM0Ut
MEE0MDBBODMwQUJFLTBBQzAwQUM5MEFDQjBBQ0MwQjAyMEIwMzBCM0UwQjQwMEI0NzBCNDgwQjRC
MEI0QzBCNTcwQkJFMEJCRjBCQzEwQkMyMEJDNi0wQkM4MEJDQS0wQkNDMEJENzBDMDEtMEMwMzBD
NDEtMEM0NDBDODIwQzgzMENCRTBDQzAtMENDNDBDQzcwQ0M4MENDQTBDQ0IwQ0Q1MENENjBEMDIw
RDAzMEQzRS0wRDQwMEQ0Ni0wRDQ4MEQ0QS0wRDRDMEQ1NzBEODIwRDgzMERDRi0wREQxMEREOC0w
RERGMERGMjBERjMwRjNFMEYzRjBGN0YxMDJCMTAyQzEwMzExMDM4MTAzQjEwM0MxMDU2MTA1NzEw
NjItMTA2NDEwNjctMTA2RDEwODMxMDg0MTA4Ny0xMDhDMTA4RjEwOUEtMTA5QzE3QjYxN0JFLTE3
QzUxN0M3MTdDODE5MjMtMTkyNjE5MjktMTkyQjE5MzAxOTMxMTkzMy0xOTM4MTlCMC0xOUMwMTlD
ODE5QzkxQTE5LTFBMUIxQTU1MUE1NzFBNjExQTYzMUE2NDFBNkQtMUE3MjFCMDQxQjM1MUIzQjFC
M0QtMUI0MTFCNDMxQjQ0MUI4MjFCQTExQkE2MUJBNzFCQUExQzI0LTFDMkIxQzM0MUMzNTFDRTEx
Q0YyQTgyM0E4MjRBODI3QTg4MEE4ODFBOEI0LUE4QzNBOTUyQTk1M0E5ODNBOUI0QTlCNUE5QkFB
OUJCQTlCRC1BOUMwQUEyRkFBMzBBQTMzQUEzNEFBNERBQTdCQUJFM0FCRTRBQkU2QUJFN0FCRTlB
QkVBQUJFQyIsCisgICAgTWU6ICIwNDg4MDQ4OTA2REUyMERELTIwRTAyMEUyLTIwRTRBNjcwLUE2
NzIiLAorICAgIE46ICAiMDAzMC0wMDM5MDBCMjAwQjMwMEI5MDBCQy0wMEJFMDY2MC0wNjY5MDZG
MC0wNkY5MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMDlGNC0wOUY5MEE2Ni0wQTZGMEFFNi0w
QUVGMEI2Ni0wQjZGMEJFNi0wQkYyMEM2Ni0wQzZGMEM3OC0wQzdFMENFNi0wQ0VGMEQ2Ni0wRDc1
MEU1MC0wRTU5MEVEMC0wRUQ5MEYyMC0wRjMzMTA0MC0xMDQ5MTA5MC0xMDk5MTM2OS0xMzdDMTZF
RS0xNkYwMTdFMC0xN0U5MTdGMC0xN0Y5MTgxMC0xODE5MTk0Ni0xOTRGMTlEMC0xOURBMUE4MC0x
QTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJCMC0xQkI5MUM0MC0xQzQ5MUM1MC0xQzU5MjA3MDIwNzQt
MjA3OTIwODAtMjA4OTIxNTAtMjE4MjIxODUtMjE4OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5
MzJDRkQzMDA3MzAyMS0zMDI5MzAzOC0zMDNBMzE5Mi0zMTk1MzIyMC0zMjI5MzI1MS0zMjVGMzI4
MC0zMjg5MzJCMS0zMkJGQTYyMC1BNjI5QTZFNi1BNkVGQTgzMC1BODM1QThEMC1BOEQ5QTkwMC1B
OTA5QTlEMC1BOUQ5QUE1MC1BQTU5QUJGMC1BQkY5RkYxMC1GRjE5IiwKKyAgICBOZDogIjAwMzAt
MDAzOTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjBBNjYtMEE2
RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJFRjBDNjYtMEM2RjBDRTYtMENFRjBENjYtMEQ2RjBF
NTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYyOTEwNDAtMTA0OTEwOTAtMTA5OTE3RTAtMTdFOTE4MTAt
MTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJC
OTFDNDAtMUM0OTFDNTAtMUM1OUE2MjAtQTYyOUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFB
NTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOSIsCisgICAgTmw6ICIxNkVFLTE2RjAyMTYwLTIxODIy
MTg1LTIxODgzMDA3MzAyMS0zMDI5MzAzOC0zMDNBQTZFNi1BNkVGIiwKKyAgICBObzogIjAwQjIw
MEIzMDBCOTAwQkMtMDBCRTA5RjQtMDlGOTBCRjAtMEJGMjBDNzgtMEM3RTBENzAtMEQ3NTBGMkEt
MEYzMzEzNjktMTM3QzE3RjAtMTdGOTIwNzAyMDc0LTIwNzkyMDgwLTIwODkyMTUwLTIxNUYyMTg5
MjQ2MC0yNDlCMjRFQS0yNEZGMjc3Ni0yNzkzMkNGRDMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1
RjMyODAtMzI4OTMyQjEtMzJCRkE4MzAtQTgzNSIsCisgICAgUDogICIwMDIxLTAwMjMwMDI1LTAw
MkEwMDJDLTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1Qi0wMDVEMDA1RjAwN0IwMDdEMDBBMTAwQUIw
MEI3MDBCQjAwQkYwMzdFMDM4NzA1NUEtMDU1RjA1ODkwNThBMDVCRTA1QzAwNUMzMDVDNjA1RjMw
NUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3
LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEYzQS0w
RjNEMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNDAwMTY2RDE2NkUxNjlCMTY5
QzE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODBBMTk0NDE5NDUxOURF
MTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0Yx
Q0QzMjAxMC0yMDI3MjAzMC0yMDQzMjA0NS0yMDUxMjA1My0yMDVFMjA3RDIwN0UyMDhEMjA4RTIz
MjkyMzJBMjc2OC0yNzc1MjdDNTI3QzYyN0U2LTI3RUYyOTgzLTI5OTgyOUQ4LTI5REIyOUZDMjlG
RDJDRjktMkNGQzJDRkUyQ0ZGMkUwMC0yRTJFMkUzMDJFMzEzMDAxLTMwMDMzMDA4LTMwMTEzMDE0
LTMwMUYzMDMwMzAzRDMwQTAzMEZCQTRGRUE0RkZBNjBELUE2MEZBNjczQTY3RUE2RjItQTZGN0E4
NzQtQTg3N0E4Q0VBOENGQThGOC1BOEZBQTkyRUE5MkZBOTVGQTlDMS1BOUNEQTlERUE5REZBQTVD
LUFBNUZBQURFQUFERkFCRUJGRDNFRkQzRkZFMTAtRkUxOUZFMzAtRkU1MkZFNTQtRkU2MUZFNjNG
RTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMEFGRjBDLUZGMEZGRjFBRkYxQkZGMUZGRjIwRkYz
Qi1GRjNERkYzRkZGNUJGRjVERkY1Ri1GRjY1IiwKKyAgICBQZDogIjAwMkQwNThBMDVCRTE0MDAx
ODA2MjAxMC0yMDE1MkUxNzJFMUEzMDFDMzAzMDMwQTBGRTMxRkUzMkZFNThGRTYzRkYwRCIsCisg
ICAgUHM6ICIwMDI4MDA1QjAwN0IwRjNBMEYzQzE2OUIyMDFBMjAxRTIwNDUyMDdEMjA4RDIzMjky
NzY4Mjc2QTI3NkMyNzZFMjc3MDI3NzIyNzc0MjdDNTI3RTYyN0U4MjdFQTI3RUMyN0VFMjk4MzI5
ODUyOTg3Mjk4OTI5OEIyOThEMjk4RjI5OTEyOTkzMjk5NTI5OTcyOUQ4MjlEQTI5RkMyRTIyMkUy
NDJFMjYyRTI4MzAwODMwMEEzMDBDMzAwRTMwMTAzMDE0MzAxNjMwMTgzMDFBMzAxREZEM0VGRTE3
RkUzNUZFMzdGRTM5RkUzQkZFM0RGRTNGRkU0MUZFNDNGRTQ3RkU1OUZFNUJGRTVERkYwOEZGM0JG
RjVCRkY1RkZGNjIiLAorICAgIFBlOiAiMDAyOTAwNUQwMDdEMEYzQjBGM0QxNjlDMjA0NjIwN0Uy
MDhFMjMyQTI3NjkyNzZCMjc2RDI3NkYyNzcxMjc3MzI3NzUyN0M2MjdFNzI3RTkyN0VCMjdFRDI3
RUYyOTg0Mjk4NjI5ODgyOThBMjk4QzI5OEUyOTkwMjk5MjI5OTQyOTk2Mjk5ODI5RDkyOURCMjlG
RDJFMjMyRTI1MkUyNzJFMjkzMDA5MzAwQjMwMEQzMDBGMzAxMTMwMTUzMDE3MzAxOTMwMUIzMDFF
MzAxRkZEM0ZGRTE4RkUzNkZFMzhGRTNBRkUzQ0ZFM0VGRTQwRkU0MkZFNDRGRTQ4RkU1QUZFNUNG
RTVFRkYwOUZGM0RGRjVERkY2MEZGNjMiLAorICAgIFBpOiAiMDBBQjIwMTgyMDFCMjAxQzIwMUYy
MDM5MkUwMjJFMDQyRTA5MkUwQzJFMUMyRTIwIiwKKyAgICBQZjogIjAwQkIyMDE5MjAxRDIwM0Ey
RTAzMkUwNTJFMEEyRTBEMkUxRDJFMjEiLAorICAgIFBjOiAiMDA1RjIwM0YyMDQwMjA1NEZFMzNG
RTM0RkU0RC1GRTRGRkYzRiIsCisgICAgUG86ICIwMDIxLTAwMjMwMDI1LTAwMjcwMDJBMDAyQzAw
MkUwMDJGMDAzQTAwM0IwMDNGMDA0MDAwNUMwMEExMDBCNzAwQkYwMzdFMDM4NzA1NUEtMDU1RjA1
ODkwNUMwMDVDMzA1QzYwNUYzMDVGNDA2MDkwNjBBMDYwQzA2MEQwNjFCMDYxRTA2MUYwNjZBLTA2
NkQwNkQ0MDcwMC0wNzBEMDdGNy0wN0Y5MDgzMC0wODNFMDk2NDA5NjUwOTcwMERGNDBFNEYwRTVB
MEU1QjBGMDQtMEYxMjBGODUwRkQwLTBGRDQxMDRBLTEwNEYxMEZCMTM2MS0xMzY4MTY2RDE2NkUx
NkVCLTE2RUQxNzM1MTczNjE3RDQtMTdENjE3RDgtMTdEQTE4MDAtMTgwNTE4MDctMTgwQTE5NDQx
OTQ1MTlERTE5REYxQTFFMUExRjFBQTAtMUFBNjFBQTgtMUFBRDFCNUEtMUI2MDFDM0ItMUMzRjFD
N0UxQzdGMUNEMzIwMTYyMDE3MjAyMC0yMDI3MjAzMC0yMDM4MjAzQi0yMDNFMjA0MS0yMDQzMjA0
Ny0yMDUxMjA1MzIwNTUtMjA1RTJDRjktMkNGQzJDRkUyQ0ZGMkUwMDJFMDEyRTA2LTJFMDgyRTBC
MkUwRS0yRTE2MkUxODJFMTkyRTFCMkUxRTJFMUYyRTJBLTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMw
M0QzMEZCQTRGRUE0RkZBNjBELUE2MEZBNjczQTY3RUE2RjItQTZGN0E4NzQtQTg3N0E4Q0VBOENG
QThGOC1BOEZBQTkyRUE5MkZBOTVGQTlDMS1BOUNEQTlERUE5REZBQTVDLUFBNUZBQURFQUFERkFC
RUJGRTEwLUZFMTZGRTE5RkUzMEZFNDVGRTQ2RkU0OS1GRTRDRkU1MC1GRTUyRkU1NC1GRTU3RkU1
Ri1GRTYxRkU2OEZFNkFGRTZCRkYwMS1GRjAzRkYwNS1GRjA3RkYwQUZGMENGRjBFRkYwRkZGMUFG
RjFCRkYxRkZGMjBGRjNDRkY2MUZGNjRGRjY1IiwKKyAgICBTOiAgIjAwMjQwMDJCMDAzQy0wMDNF
MDA1RTAwNjAwMDdDMDA3RTAwQTItMDBBOTAwQUMwMEFFLTAwQjEwMEI0MDBCNjAwQjgwMEQ3MDBG
NzAyQzItMDJDNTAyRDItMDJERjAyRTUtMDJFQjAyRUQwMkVGLTAyRkYwMzc1MDM4NDAzODUwM0Y2
MDQ4MjA2MDYtMDYwODA2MEIwNjBFMDYwRjA2RTkwNkZEMDZGRTA3RjYwOUYyMDlGMzA5RkEwOUZC
MEFGMTBCNzAwQkYzLTBCRkEwQzdGMENGMTBDRjIwRDc5MEUzRjBGMDEtMEYwMzBGMTMtMEYxNzBG
MUEtMEYxRjBGMzQwRjM2MEYzODBGQkUtMEZDNTBGQzctMEZDQzBGQ0UwRkNGMEZENS0wRkQ4MTA5
RTEwOUYxMzYwMTM5MC0xMzk5MTdEQjE5NDAxOUUwLTE5RkYxQjYxLTFCNkExQjc0LTFCN0MxRkJE
MUZCRi0xRkMxMUZDRC0xRkNGMUZERC0xRkRGMUZFRC0xRkVGMUZGRDFGRkUyMDQ0MjA1MjIwN0Et
MjA3QzIwOEEtMjA4QzIwQTAtMjBCODIxMDAyMTAxMjEwMy0yMTA2MjEwODIxMDkyMTE0MjExNi0y
MTE4MjExRS0yMTIzMjEyNTIxMjcyMTI5MjEyRTIxM0EyMTNCMjE0MC0yMTQ0MjE0QS0yMTREMjE0
RjIxOTAtMjMyODIzMkItMjNFODI0MDAtMjQyNjI0NDAtMjQ0QTI0OUMtMjRFOTI1MDAtMjZDRDI2
Q0YtMjZFMTI2RTMyNkU4LTI2RkYyNzAxLTI3MDQyNzA2LTI3MDkyNzBDLTI3MjcyNzI5LTI3NEIy
NzREMjc0Ri0yNzUyMjc1Ni0yNzVFMjc2MS0yNzY3Mjc5NDI3OTgtMjdBRjI3QjEtMjdCRTI3QzAt
MjdDNDI3QzctMjdDQTI3Q0MyN0QwLTI3RTUyN0YwLTI5ODIyOTk5LTI5RDcyOURDLTI5RkIyOUZF
LTJCNEMyQjUwLTJCNTkyQ0U1LTJDRUEyRTgwLTJFOTkyRTlCLTJFRjMyRjAwLTJGRDUyRkYwLTJG
RkIzMDA0MzAxMjMwMTMzMDIwMzAzNjMwMzczMDNFMzAzRjMwOUIzMDlDMzE5MDMxOTEzMTk2LTMx
OUYzMUMwLTMxRTMzMjAwLTMyMUUzMjJBLTMyNTAzMjYwLTMyN0YzMjhBLTMyQjAzMkMwLTMyRkUz
MzAwLTMzRkY0REMwLTRERkZBNDkwLUE0QzZBNzAwLUE3MTZBNzIwQTcyMUE3ODlBNzhBQTgyOC1B
ODJCQTgzNi1BODM5QUE3Ny1BQTc5RkIyOUZERkNGREZERkU2MkZFNjQtRkU2NkZFNjlGRjA0RkYw
QkZGMUMtRkYxRUZGM0VGRjQwRkY1Q0ZGNUVGRkUwLUZGRTZGRkU4LUZGRUVGRkZDRkZGRCIsCisg
ICAgU206ICIwMDJCMDAzQy0wMDNFMDA3QzAwN0UwMEFDMDBCMTAwRDcwMEY3MDNGNjA2MDYtMDYw
ODIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjE0MC0yMTQ0MjE0QjIxOTAtMjE5NDIxOUEyMTlC
MjFBMDIxQTMyMUE2MjFBRTIxQ0UyMUNGMjFEMjIxRDQyMUY0LTIyRkYyMzA4LTIzMEIyMzIwMjMy
MTIzN0MyMzlCLTIzQjMyM0RDLTIzRTEyNUI3MjVDMTI1RjgtMjVGRjI2NkYyN0MwLTI3QzQyN0M3
LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yN0ZGMjkwMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlG
RS0yQUZGMkIzMC0yQjQ0MkI0Ny0yQjRDRkIyOUZFNjJGRTY0LUZFNjZGRjBCRkYxQy1GRjFFRkY1
Q0ZGNUVGRkUyRkZFOS1GRkVDIiwKKyAgICBTYzogIjAwMjQwMEEyLTAwQTUwNjBCMDlGMjA5RjMw
OUZCMEFGMTBCRjkwRTNGMTdEQjIwQTAtMjBCOEE4MzhGREZDRkU2OUZGMDRGRkUwRkZFMUZGRTVG
RkU2IiwKKyAgICBTazogIjAwNUUwMDYwMDBBODAwQUYwMEI0MDBCODAyQzItMDJDNTAyRDItMDJE
RjAyRTUtMDJFQjAyRUQwMkVGLTAyRkYwMzc1MDM4NDAzODUxRkJEMUZCRi0xRkMxMUZDRC0xRkNG
MUZERC0xRkRGMUZFRC0xRkVGMUZGRDFGRkUzMDlCMzA5Q0E3MDAtQTcxNkE3MjBBNzIxQTc4OUE3
OEFGRjNFRkY0MEZGRTMiLAorICAgIFNvOiAiMDBBNjAwQTcwMEE5MDBBRTAwQjAwMEI2MDQ4MjA2
MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RkEwQjcwMEJGMy0wQkY4MEJGQTBDN0YwQ0YxMENGMjBE
NzkwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBG
Q0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE5NDAxOUUwLTE5RkYxQjYx
LTFCNkExQjc0LTFCN0MyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUt
MjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNEEyMTRDMjE0RDIxNEYyMTk1LTIxOTkyMTlD
LTIxOUYyMUExMjFBMjIxQTQyMUE1MjFBNy0yMUFEMjFBRi0yMUNEMjFEMDIxRDEyMUQzMjFENS0y
MUYzMjMwMC0yMzA3MjMwQy0yMzFGMjMyMi0yMzI4MjMyQi0yMzdCMjM3RC0yMzlBMjNCNC0yM0RC
MjNFMi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNUI2MjVCOC0yNUMwMjVD
Mi0yNUY3MjYwMC0yNjZFMjY3MC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3
MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3Njcy
Nzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjgwMC0yOEZGMkIwMC0yQjJGMkI0NTJCNDYyQjUwLTJCNTky
Q0U1LTJDRUEyRTgwLTJFOTkyRTlCLTJFRjMyRjAwLTJGRDUyRkYwLTJGRkIzMDA0MzAxMjMwMTMz
MDIwMzAzNjMwMzczMDNFMzAzRjMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIy
QS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1B
NEM2QTgyOC1BODJCQTgzNkE4MzdBODM5QUE3Ny1BQTc5RkRGREZGRTRGRkU4RkZFREZGRUVGRkZD
RkZGRCIsCisgICAgWjogICIwMDIwMDBBMDE2ODAxODBFMjAwMC0yMDBBMjAyODIwMjkyMDJGMjA1
RjMwMDAiLAorICAgIFpzOiAiMDAyMDAwQTAxNjgwMTgwRTIwMDAtMjAwQTIwMkYyMDVGMzAwMCIs
CisgICAgWmw6ICIyMDI4IiwKKyAgICBacDogIjIwMjkiLAorICAgIEM6ICAiMDAwMC0wMDFGMDA3
Ri0wMDlGMDBBRDAzNzgwMzc5MDM3Ri0wMzgzMDM4QjAzOEQwM0EyMDUyNi0wNTMwMDU1NzA1NTgw
NTYwMDU4ODA1OEItMDU5MDA1QzgtMDVDRjA1RUItMDVFRjA1RjUtMDYwNTA2MUMwNjFEMDYyMDA2
NUYwNkREMDcwRTA3MEYwNzRCMDc0QzA3QjItMDdCRjA3RkItMDdGRjA4MkUwODJGMDgzRi0wOEZG
MDkzQTA5M0IwOTRGMDk1NjA5NTcwOTczLTA5NzgwOTgwMDk4NDA5OEQwOThFMDk5MTA5OTIwOUE5
MDlCMTA5QjMtMDlCNTA5QkEwOUJCMDlDNTA5QzYwOUM5MDlDQTA5Q0YtMDlENjA5RDgtMDlEQjA5
REUwOUU0MDlFNTA5RkMtMEEwMDBBMDQwQTBCLTBBMEUwQTExMEExMjBBMjkwQTMxMEEzNDBBMzcw
QTNBMEEzQjBBM0QwQTQzLTBBNDYwQTQ5MEE0QTBBNEUtMEE1MDBBNTItMEE1ODBBNUQwQTVGLTBB
NjUwQTc2LTBBODAwQTg0MEE4RTBBOTIwQUE5MEFCMTBBQjQwQUJBMEFCQjBBQzYwQUNBMEFDRTBB
Q0YwQUQxLTBBREYwQUU0MEFFNTBBRjAwQUYyLTBCMDAwQjA0MEIwRDBCMEUwQjExMEIxMjBCMjkw
QjMxMEIzNDBCM0EwQjNCMEI0NTBCNDYwQjQ5MEI0QTBCNEUtMEI1NTBCNTgtMEI1QjBCNUUwQjY0
MEI2NTBCNzItMEI4MTBCODQwQjhCLTBCOEQwQjkxMEI5Ni0wQjk4MEI5QjBCOUQwQkEwLTBCQTIw
QkE1LTBCQTcwQkFCLTBCQUQwQkJBLTBCQkQwQkMzLTBCQzUwQkM5MEJDRTBCQ0YwQkQxLTBCRDYw
QkQ4LTBCRTUwQkZCLTBDMDAwQzA0MEMwRDBDMTEwQzI5MEMzNDBDM0EtMEMzQzBDNDUwQzQ5MEM0
RS0wQzU0MEM1NzBDNUEtMEM1RjBDNjQwQzY1MEM3MC0wQzc3MEM4MDBDODEwQzg0MEM4RDBDOTEw
Q0E5MENCNDBDQkEwQ0JCMENDNTBDQzkwQ0NFLTBDRDQwQ0Q3LTBDREQwQ0RGMENFNDBDRTUwQ0Yw
MENGMy0wRDAxMEQwNDBEMEQwRDExMEQyOTBEM0EtMEQzQzBENDUwRDQ5MEQ0RS0wRDU2MEQ1OC0w
RDVGMEQ2NDBENjUwRDc2LTBENzgwRDgwMEQ4MTBEODQwRDk3LTBEOTkwREIyMERCQzBEQkUwREJG
MERDNy0wREM5MERDQi0wRENFMERENTBERDcwREUwLTBERjEwREY1LTBFMDAwRTNCLTBFM0UwRTVD
LTBFODAwRTgzMEU4NTBFODYwRTg5MEU4QjBFOEMwRThFLTBFOTMwRTk4MEVBMDBFQTQwRUE2MEVB
ODBFQTkwRUFDMEVCQTBFQkUwRUJGMEVDNTBFQzcwRUNFMEVDRjBFREEwRURCMEVERS0wRUZGMEY0
ODBGNkQtMEY3MDBGOEMtMEY4RjBGOTgwRkJEMEZDRDBGRDktMEZGRjEwQzYtMTBDRjEwRkQtMTBG
RjEyNDkxMjRFMTI0RjEyNTcxMjU5MTI1RTEyNUYxMjg5MTI4RTEyOEYxMkIxMTJCNjEyQjcxMkJG
MTJDMTEyQzYxMkM3MTJENzEzMTExMzE2MTMxNzEzNUItMTM1RTEzN0QtMTM3RjEzOUEtMTM5RjEz
RjUtMTNGRjE2OUQtMTY5RjE2RjEtMTZGRjE3MEQxNzE1LTE3MUYxNzM3LTE3M0YxNzU0LTE3NUYx
NzZEMTc3MTE3NzQtMTc3RjE3QjQxN0I1MTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgx
QS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0x
OTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5REQx
QTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFC
N0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFDRjMt
MUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVD
MUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjAwQi0yMDBG
MjAyQS0yMDJFMjA2MC0yMDZGMjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZG
MjE4QS0yMThGMjNFOS0yM0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAw
MjcwNTI3MEEyNzBCMjcyODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdC
RjI3Q0IyN0NELTI3Q0YyQjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQy
RjJENjYtMkQ2RTJENzAtMkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcy
RERGMkUzMi0yRTdGMkU5QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMx
MDAtMzEwNDMxMkUtMzEzMDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlG
Q0MtOUZGRkE0OEQtQTQ4RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1B
NjlGQTZGOC1BNkZGQTc4RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENE
QThEQS1BOERGQThGQy1BOEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlG
RkFBMzctQUEzRkFBNEVBQTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVF
QUJFRkFCRkEtQUJGRkQ3QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRjhGRkZBMkVGQTJGRkE2RUZBNkZG
QURBLUZBRkZGQjA3LUZCMTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZE
NDAtRkQ0RkZEOTBGRDkxRkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2
N0ZFNkMtRkU2RkZFNzVGRUZELUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlG
RkRELUZGREZGRkU3RkZFRi1GRkZCRkZGRUZGRkYiLAorICAgIENjOiAiMDAwMC0wMDFGMDA3Ri0w
MDlGIiwKKyAgICBDZjogIjAwQUQwNjAwLTA2MDMwNkREMDcwRjE3QjQxN0I1MjAwQi0yMDBGMjAy
QS0yMDJFMjA2MC0yMDY0MjA2QS0yMDZGRkVGRkZGRjktRkZGQiIsCisgICAgQ286ICJFMDAwLUY4
RkYiLAorICAgIENzOiAiRDgwMC1ERkZGIiwKKyAgICBDbjogIjAzNzgwMzc5MDM3Ri0wMzgzMDM4
QjAzOEQwM0EyMDUyNi0wNTMwMDU1NzA1NTgwNTYwMDU4ODA1OEItMDU5MDA1QzgtMDVDRjA1RUIt
MDVFRjA1RjUtMDVGRjA2MDQwNjA1MDYxQzA2MUQwNjIwMDY1RjA3MEUwNzRCMDc0QzA3QjItMDdC
RjA3RkItMDdGRjA4MkUwODJGMDgzRi0wOEZGMDkzQTA5M0IwOTRGMDk1NjA5NTcwOTczLTA5Nzgw
OTgwMDk4NDA5OEQwOThFMDk5MTA5OTIwOUE5MDlCMTA5QjMtMDlCNTA5QkEwOUJCMDlDNTA5QzYw
OUM5MDlDQTA5Q0YtMDlENjA5RDgtMDlEQjA5REUwOUU0MDlFNTA5RkMtMEEwMDBBMDQwQTBCLTBB
MEUwQTExMEExMjBBMjkwQTMxMEEzNDBBMzcwQTNBMEEzQjBBM0QwQTQzLTBBNDYwQTQ5MEE0QTBB
NEUtMEE1MDBBNTItMEE1ODBBNUQwQTVGLTBBNjUwQTc2LTBBODAwQTg0MEE4RTBBOTIwQUE5MEFC
MTBBQjQwQUJBMEFCQjBBQzYwQUNBMEFDRTBBQ0YwQUQxLTBBREYwQUU0MEFFNTBBRjAwQUYyLTBC
MDAwQjA0MEIwRDBCMEUwQjExMEIxMjBCMjkwQjMxMEIzNDBCM0EwQjNCMEI0NTBCNDYwQjQ5MEI0
QTBCNEUtMEI1NTBCNTgtMEI1QjBCNUUwQjY0MEI2NTBCNzItMEI4MTBCODQwQjhCLTBCOEQwQjkx
MEI5Ni0wQjk4MEI5QjBCOUQwQkEwLTBCQTIwQkE1LTBCQTcwQkFCLTBCQUQwQkJBLTBCQkQwQkMz
LTBCQzUwQkM5MEJDRTBCQ0YwQkQxLTBCRDYwQkQ4LTBCRTUwQkZCLTBDMDAwQzA0MEMwRDBDMTEw
QzI5MEMzNDBDM0EtMEMzQzBDNDUwQzQ5MEM0RS0wQzU0MEM1NzBDNUEtMEM1RjBDNjQwQzY1MEM3
MC0wQzc3MEM4MDBDODEwQzg0MEM4RDBDOTEwQ0E5MENCNDBDQkEwQ0JCMENDNTBDQzkwQ0NFLTBD
RDQwQ0Q3LTBDREQwQ0RGMENFNDBDRTUwQ0YwMENGMy0wRDAxMEQwNDBEMEQwRDExMEQyOTBEM0Et
MEQzQzBENDUwRDQ5MEQ0RS0wRDU2MEQ1OC0wRDVGMEQ2NDBENjUwRDc2LTBENzgwRDgwMEQ4MTBE
ODQwRDk3LTBEOTkwREIyMERCQzBEQkUwREJGMERDNy0wREM5MERDQi0wRENFMERENTBERDcwREUw
LTBERjEwREY1LTBFMDAwRTNCLTBFM0UwRTVDLTBFODAwRTgzMEU4NTBFODYwRTg5MEU4QjBFOEMw
RThFLTBFOTMwRTk4MEVBMDBFQTQwRUE2MEVBODBFQTkwRUFDMEVCQTBFQkUwRUJGMEVDNTBFQzcw
RUNFMEVDRjBFREEwRURCMEVERS0wRUZGMEY0ODBGNkQtMEY3MDBGOEMtMEY4RjBGOTgwRkJEMEZD
RDBGRDktMEZGRjEwQzYtMTBDRjEwRkQtMTBGRjEyNDkxMjRFMTI0RjEyNTcxMjU5MTI1RTEyNUYx
Mjg5MTI4RTEyOEYxMkIxMTJCNjEyQjcxMkJGMTJDMTEyQzYxMkM3MTJENzEzMTExMzE2MTMxNzEz
NUItMTM1RTEzN0QtMTM3RjEzOUEtMTM5RjEzRjUtMTNGRjE2OUQtMTY5RjE2RjEtMTZGRjE3MEQx
NzE1LTE3MUYxNzM3LTE3M0YxNzU0LTE3NUYxNzZEMTc3MTE3NzQtMTc3RjE3REUxN0RGMTdFQS0x
N0VGMTdGQS0xN0ZGMTgwRjE4MUEtMTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQt
MTkxRjE5MkMtMTkyRjE5M0MtMTkzRjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFG
MTlDQS0xOUNGMTlEQi0xOUREMUExQzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYx
QUFFLTFBRkYxQjRDLTFCNEYxQjdELTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRB
LTFDNEMxQzgwLTFDQ0YxQ0YzLTFDRkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcx
RjRFMUY0RjFGNTgxRjVBMUY1QzFGNUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFG
RjExRkY1MUZGRjIwNjUtMjA2OTIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBG
RjIxOEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3Mjcw
MDI3MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3
QkYyN0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJE
MkYyRDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3
MkRERjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgz
MTAwLTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5
RkNDLTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgt
QTY5RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThD
REE4REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5
RkZBQTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJF
RUFCRUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUQ3RkZGQTJFRkEyRkZBNkVGQTZG
RkFEQS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJG
RDQwLUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZF
NjdGRTZDLUZFNkZGRTc1RkVGREZFRkVGRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhG
RkQ5RkZERC1GRkRGRkZFN0ZGRUYtRkZGOEZGRkVGRkZGIgorfSk7CisKK2Z1bmN0aW9uIGFkZFVu
aWNvZGVQYWNrYWdlIChwYWNrKSB7CisgICAgdmFyIGNvZGVQb2ludCA9IC9cd3s0fS9nOworICAg
IGZvciAodmFyIG5hbWUgaW4gcGFjaykKKyAgICAgICAgZXhwb3J0cy5wYWNrYWdlc1tuYW1lXSA9
IHBhY2tbbmFtZV0ucmVwbGFjZShjb2RlUG9pbnQsICJcXHUkJiIpOworfTsKKworfSk7CisKK2Fj
ZS5kZWZpbmUoJ2FjZS9kb2N1bWVudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9yYW5nZScsICdh
Y2UvYW5jaG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJl
KCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFJhbmdlID0gcmVxdWly
ZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIEFuY2hvciA9IHJlcXVpcmUoIi4vYW5jaG9yIikuQW5j
aG9yOworCit2YXIgRG9jdW1lbnQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgdGhpcy4kbGluZXMg
PSBbXTsKKyAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkgeworICAgICAgICB0aGlzLiRsaW5lcyA9
IFsiIl07CisgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7CisgICAgICAgIHRo
aXMuaW5zZXJ0TGluZXMoMCwgdGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5pbnNl
cnQoe3JvdzogMCwgY29sdW1uOjB9LCB0ZXh0KTsKKyAgICB9Cit9OworCisoZnVuY3Rpb24oKSB7
CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5zZXRW
YWx1ZSA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVuZ3Ro
KCk7CisgICAgICAgIHRoaXMucmVtb3ZlKG5ldyBSYW5nZSgwLCAwLCBsZW4sIHRoaXMuZ2V0TGlu
ZShsZW4tMSkubGVuZ3RoKSk7CisgICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjow
fSwgdGV4dCk7CisgICAgfTsKKyAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmdldEFsbExpbmVzKCkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0
ZXIoKSk7CisgICAgfTsKKyAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7CisgICAgICAgIHJldHVybiBuZXcgQW5jaG9yKHRoaXMsIHJvdywgY29sdW1uKTsKKyAg
ICB9OworICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PSAwKQorICAgICAgICB0aGlz
LiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxh
Y2UoL1xyXG58XHIvZywgIlxuIikuc3BsaXQoIlxuIik7CisgICAgICAgIH0KKyAgICBlbHNlCisg
ICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICAgICAgcmV0dXJu
IHRleHQuc3BsaXQoL1xyXG58XHJ8XG4vKTsKKyAgICAgICAgfTsKKworCisgCisgICAgdGhpcy4k
ZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gdGV4
dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAg
ICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiXG4iOworICAgICAgICB9CisgICAgfTsK
KyAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc3dp
dGNoICh0aGlzLiRuZXdMaW5lTW9kZSkgeworICAgICAgICAgIGNhc2UgIndpbmRvd3MiOgorICAg
ICAgICAgICAgcmV0dXJuICJcclxuIjsKKworICAgICAgICAgIGNhc2UgInVuaXgiOgorICAgICAg
ICAgICAgcmV0dXJuICJcbiI7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJGF1dG9OZXdMaW5lOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJGF1
dG9OZXdMaW5lID0gIlxuIjsKKyAgICB0aGlzLiRuZXdMaW5lTW9kZSA9ICJhdXRvIjsKKyAgICB0
aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1vZGUpIHsKKyAgICAgICAgaWYg
KHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOworICAgIH07CisgICAg
dGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
bmV3TGluZU1vZGU7CisgICAgfTsKKyAgICB0aGlzLmlzTmV3TGluZSA9IGZ1bmN0aW9uKHRleHQp
IHsKKyAgICAgICAgcmV0dXJuICh0ZXh0ID09ICJcclxuIiB8fCB0ZXh0ID09ICJcciIgfHwgdGV4
dCA9PSAiXG4iKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgewor
ICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCAiIjsKKyAgICB9OworICAgIHRoaXMu
Z2V0TGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICByZXR1cm4g
dGhpcy4kbGluZXMuc2xpY2UoZmlyc3RSb3csIGxhc3RSb3cgKyAxKTsKKyAgICB9OworICAgIHRo
aXMuZ2V0QWxsTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlu
ZXMoMCwgdGhpcy5nZXRMZW5ndGgoKSk7CisgICAgfTsKKyAgICB0aGlzLmdldExlbmd0aCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbGluZXMubGVuZ3RoOworICAgIH07Cisg
ICAgdGhpcy5nZXRUZXh0UmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAocmFu
Z2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LiRsaW5lc1tyYW5nZS5zdGFydC5yb3ddLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHZhciBsaW5lcyA9IHRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93KzEsIHJhbmdlLmVuZC5y
b3ctMSk7CisgICAgICAgICAgICBsaW5lcy51bnNoaWZ0KCh0aGlzLiRsaW5lc1tyYW5nZS5zdGFy
dC5yb3ddIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKSk7CisgICAgICAgICAg
ICBsaW5lcy5wdXNoKCh0aGlzLiRsaW5lc1tyYW5nZS5lbmQucm93XSB8fCAiIikuc3Vic3RyaW5n
KDAsIHJhbmdlLmVuZC5jb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lcy5qb2luKHRo
aXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlz
LiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICB2YXIgbGVuZ3Ro
ID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA+PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwor
ICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gdGhpcy5nZXRMaW5lKGxlbmd0aC0xKS5sZW5n
dGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH07CisgICAgdGhp
cy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgeworICAgICAgICBpZiAoIXRleHQg
fHwgdGV4dC5sZW5ndGggPT09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAg
ICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBp
ZiAodGhpcy5nZXRMZW5ndGgoKSA8PSAxKQorICAgICAgICAgICAgdGhpcy4kZGV0ZWN0TmV3TGlu
ZSh0ZXh0KTsKKworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRzcGxpdCh0ZXh0KTsKKyAgICAg
ICAgdmFyIGZpcnN0TGluZSA9IGxpbmVzLnNwbGljZSgwLCAxKVswXTsKKyAgICAgICAgdmFyIGxh
c3RMaW5lID0gbGluZXMubGVuZ3RoID09IDAgPyBudWxsIDogbGluZXMuc3BsaWNlKGxpbmVzLmxl
bmd0aCAtIDEsIDEpWzBdOworCisgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRJbkxpbmUo
cG9zaXRpb24sIGZpcnN0TGluZSk7CisgICAgICAgIGlmIChsYXN0TGluZSAhPT0gbnVsbCkgewor
ICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydE5ld0xpbmUocG9zaXRpb24pOyAvLyB0
ZXJtaW5hdGUgZmlyc3QgbGluZQorICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydExp
bmVzKHBvc2l0aW9uLnJvdywgbGluZXMpOworICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmlu
c2VydEluTGluZShwb3NpdGlvbiwgbGFzdExpbmUgfHwgIiIpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBwb3NpdGlvbjsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0TGluZXMgPSBmdW5jdGlv
bihyb3csIGxpbmVzKSB7CisgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT0gMCkKKyAgICAgICAg
ICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogMH07CisgICAgICAgIGlmIChsaW5lcy5sZW5n
dGggPiAweEZGRkYpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLmluc2VydExpbmVzKHJv
dywgbGluZXMuc2xpY2UoMHhGRkZGKSk7CisgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNl
KDAsIDB4RkZGRik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYXJncyA9IFtyb3csIDBdOwor
ICAgICAgICBhcmdzLnB1c2guYXBwbHkoYXJncywgbGluZXMpOworICAgICAgICB0aGlzLiRsaW5l
cy5zcGxpY2UuYXBwbHkodGhpcy4kbGluZXMsIGFyZ3MpOworCisgICAgICAgIHZhciByYW5nZSA9
IG5ldyBSYW5nZShyb3csIDAsIHJvdyArIGxpbmVzLmxlbmd0aCwgMCk7CisgICAgICAgIHZhciBk
ZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlvbjogImluc2VydExpbmVzIiwKKyAgICAgICAgICAg
IHJhbmdlOiByYW5nZSwKKyAgICAgICAgICAgIGxpbmVzOiBsaW5lcworICAgICAgICB9OworICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOworICAgICAgICByZXR1
cm4gZW5kIHx8IHJhbmdlLmVuZDsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1
bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgICAgIHBvc2l0aW9uID0gdGhpcy4kY2xpcFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3dd
IHx8ICIiOworCisgICAgICAgIHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gPSBsaW5lLnN1YnN0
cmluZygwLCBwb3NpdGlvbi5jb2x1bW4pOworICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2UocG9z
aXRpb24ucm93ICsgMSwgMCwgbGluZS5zdWJzdHJpbmcocG9zaXRpb24uY29sdW1uLCBsaW5lLmxl
bmd0aCkpOworCisgICAgICAgIHZhciBlbmQgPSB7CisgICAgICAgICAgICByb3cgOiBwb3NpdGlv
bi5yb3cgKyAxLAorICAgICAgICAgICAgY29sdW1uIDogMAorICAgICAgICB9OworCisgICAgICAg
IHZhciBkZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlvbjogImluc2VydFRleHQiLAorICAgICAg
ICAgICAgcmFuZ2U6IFJhbmdlLmZyb21Qb2ludHMocG9zaXRpb24sIGVuZCksCisgICAgICAgICAg
ICB0ZXh0OiB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKQorICAgICAgICB9OworICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOworCisgICAgICAgIHJldHVybiBl
bmQ7CisgICAgfTsKKyAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0
ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOworCisgICAgICAgIHZhciBsaW5lID0gdGhpcy4kbGluZXNbcG9zaXRpb24ucm93
XSB8fCAiIjsKKworICAgICAgICB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddID0gbGluZS5zdWJz
dHJpbmcoMCwgcG9zaXRpb24uY29sdW1uKSArIHRleHQKKyAgICAgICAgICAgICAgICArIGxpbmUu
c3Vic3RyaW5nKHBvc2l0aW9uLmNvbHVtbik7CisKKyAgICAgICAgdmFyIGVuZCA9IHsKKyAgICAg
ICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdywKKyAgICAgICAgICAgIGNvbHVtbiA6IHBvc2l0aW9u
LmNvbHVtbiArIHRleHQubGVuZ3RoCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGRlbHRhID0g
eworICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsCisgICAgICAgICAgICByYW5nZTog
UmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwKKyAgICAgICAgICAgIHRleHQ6IHRleHQK
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9
KTsKKworICAgICAgICByZXR1cm4gZW5kOworICAgIH07CisgICAgdGhpcy5yZW1vdmUgPSBmdW5j
dGlvbihyYW5nZSkgeworICAgICAgICByYW5nZS5zdGFydCA9IHRoaXMuJGNsaXBQb3NpdGlvbihy
YW5nZS5zdGFydCk7CisgICAgICAgIHJhbmdlLmVuZCA9IHRoaXMuJGNsaXBQb3NpdGlvbihyYW5n
ZS5lbmQpOworCisgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gcmFuZ2Uuc3RhcnQ7CisKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gcmFuZ2Uuc3RhcnQucm93
OworICAgICAgICB2YXIgbGFzdFJvdyA9IHJhbmdlLmVuZC5yb3c7CisKKyAgICAgICAgaWYgKHJh
bmdlLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAgICAgIHZhciBmaXJzdEZ1bGxSb3cgPSByYW5n
ZS5zdGFydC5jb2x1bW4gPT0gMCA/IGZpcnN0Um93IDogZmlyc3RSb3cgKyAxOworICAgICAgICAg
ICAgdmFyIGxhc3RGdWxsUm93ID0gbGFzdFJvdyAtIDE7CisKKyAgICAgICAgICAgIGlmIChyYW5n
ZS5lbmQuY29sdW1uID4gMCkKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShsYXN0
Um93LCAwLCByYW5nZS5lbmQuY29sdW1uKTsKKworICAgICAgICAgICAgaWYgKGxhc3RGdWxsUm93
ID49IGZpcnN0RnVsbFJvdykKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKGZpcnN0
RnVsbFJvdywgbGFzdEZ1bGxSb3cpOworCisgICAgICAgICAgICBpZiAoZmlyc3RGdWxsUm93ICE9
IGZpcnN0Um93KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbkxpbmUoZmlyc3RSb3cs
IHJhbmdlLnN0YXJ0LmNvbHVtbiwgdGhpcy5nZXRMaW5lKGZpcnN0Um93KS5sZW5ndGgpOworICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlTmV3TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5yZW1v
dmVJbkxpbmUoZmlyc3RSb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OworICAgIH07CisgICAgdGhp
cy5yZW1vdmVJbkxpbmUgPSBmdW5jdGlvbihyb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHsK
KyAgICAgICAgaWYgKHN0YXJ0Q29sdW1uID09IGVuZENvbHVtbikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBzdGFydENvbHVtbiwgcm93
LCBlbmRDb2x1bW4pOworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOworICAg
ICAgICB2YXIgcmVtb3ZlZCA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4p
OworICAgICAgICB2YXIgbmV3TGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSAr
IGxpbmUuc3Vic3RyaW5nKGVuZENvbHVtbiwgbGluZS5sZW5ndGgpOworICAgICAgICB0aGlzLiRs
aW5lcy5zcGxpY2Uocm93LCAxLCBuZXdMaW5lKTsKKworICAgICAgICB2YXIgZGVsdGEgPSB7Cisg
ICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwKKyAgICAgICAgICAgIHJhbmdlOiByYW5n
ZSwKKyAgICAgICAgICAgIHRleHQ6IHJlbW92ZWQKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0
YXJ0OworICAgIH07CisgICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBs
YXN0Um93KSB7CisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShmaXJzdFJvdywgMCwgbGFz
dFJvdyArIDEsIDApOworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuJGxpbmVzLnNwbGljZShm
aXJzdFJvdywgbGFzdFJvdyAtIGZpcnN0Um93ICsgMSk7CisKKyAgICAgICAgdmFyIGRlbHRhID0g
eworICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlTGluZXMiLAorICAgICAgICAgICAgcmFuZ2U6
IHJhbmdlLAorICAgICAgICAgICAgbmw6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLAorICAg
ICAgICAgICAgbGluZXM6IHJlbW92ZWQKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CisgICAg
fTsKKyAgICB0aGlzLnJlbW92ZU5ld0xpbmUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgdmFy
IGZpcnN0TGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgc2Vjb25kTGluZSA9
IHRoaXMuZ2V0TGluZShyb3crMSk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJv
dywgZmlyc3RMaW5lLmxlbmd0aCwgcm93KzEsIDApOworICAgICAgICB2YXIgbGluZSA9IGZpcnN0
TGluZSArIHNlY29uZExpbmU7CisKKyAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHJvdywgMiwg
bGluZSk7CisKKyAgICAgICAgdmFyIGRlbHRhID0geworICAgICAgICAgICAgYWN0aW9uOiAicmVt
b3ZlVGV4dCIsCisgICAgICAgICAgICByYW5nZTogcmFuZ2UsCisgICAgICAgICAgICB0ZXh0OiB0
aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKQorICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0
KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOworICAgIH07CisgICAgdGhpcy5yZXBsYWNlID0g
ZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQubGVuZ3RoID09IDAgJiYg
cmFuZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OworICAgICAg
ICBpZiAodGV4dCA9PSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSkpCisgICAgICAgICAgICByZXR1
cm4gcmFuZ2UuZW5kOworCisgICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgaWYg
KHRleHQpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLmluc2VydChyYW5nZS5zdGFydCwg
dGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbmQgPSByYW5n
ZS5zdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmQ7CisgICAgfTsKKyAgICB0
aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CisgICAgICAgIGZvciAodmFyIGk9
MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRh
c1tpXTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFu
Z2Uuc3RhcnQsIGRlbHRhLnJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rp
b24gPT0gImluc2VydExpbmVzIikKKyAgICAgICAgICAgICAgICB0aGlzLmluc2VydExpbmVzKHJh
bmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEu
YWN0aW9uID09ICJpbnNlcnRUZXh0IikKKyAgICAgICAgICAgICAgICB0aGlzLmluc2VydChyYW5n
ZS5zdGFydCwgZGVsdGEudGV4dCk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24g
PT0gInJlbW92ZUxpbmVzIikKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdl
LnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyAtIDEpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVs
dGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShy
YW5nZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rp
b24oZGVsdGFzKSB7CisgICAgICAgIGZvciAodmFyIGk9ZGVsdGFzLmxlbmd0aC0xOyBpPj0wOyBp
LS0pIHsKKyAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKKworICAgICAgICAgICAg
dmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFu
Z2UuZW5kKTsKKworICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMi
KQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5n
ZS5lbmQucm93IC0gMSk7CisgICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gImlu
c2VydFRleHQiKQorICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKQorICAgICAgICAgICAg
ICAgIHRoaXMuaW5zZXJ0TGluZXMocmFuZ2Uuc3RhcnQucm93LCBkZWx0YS5saW5lcyk7CisgICAg
ICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKQorICAgICAgICAg
ICAgICAgIHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCBkZWx0YS50ZXh0KTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdGhpcy5pbmRleFRvUG9zaXRpb24gPSBmdW5jdGlvbihpbmRleCwgc3RhcnRS
b3cpIHsKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5l
cygpOworICAgICAgICB2YXIgbmV3bGluZUxlbmd0aCA9IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3Rl
cigpLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDAsIGwgPSBsaW5l
cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxl
bmd0aCArIG5ld2xpbmVMZW5ndGg7CisgICAgICAgICAgICBpZiAoaW5kZXggPCAwKQorICAgICAg
ICAgICAgICAgIHJldHVybiB7cm93OiBpLCBjb2x1bW46IGluZGV4ICsgbGluZXNbaV0ubGVuZ3Ro
ICsgbmV3bGluZUxlbmd0aH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtyb3c6IGwtMSwg
Y29sdW1uOiBsaW5lc1tsLTFdLmxlbmd0aH07CisgICAgfTsKKyAgICB0aGlzLnBvc2l0aW9uVG9J
bmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKKyAgICAgICAgdmFyIGxpbmVzID0gdGhp
cy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOworICAgICAgICB2YXIgbmV3bGluZUxlbmd0
aCA9IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aDsKKyAgICAgICAgdmFyIGluZGV4
ID0gMDsKKyAgICAgICAgdmFyIHJvdyA9IE1hdGgubWluKHBvcy5yb3csIGxpbmVzLmxlbmd0aCk7
CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwOyBpIDwgcm93OyArK2kpCisgICAg
ICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIGluZGV4
ICsgbmV3bGluZUxlbmd0aCAqIGkgKyBwb3MuY29sdW1uOworICAgIH07CisKK30pLmNhbGwoRG9j
dW1lbnQucHJvdG90eXBlKTsKKworZXhwb3J0cy5Eb2N1bWVudCA9IERvY3VtZW50OworfSk7CisK
K2FjZS5kZWZpbmUoJ2FjZS9hbmNob3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29w
Iik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2
ZW50RW1pdHRlcjsKKwordmFyIEFuY2hvciA9IGV4cG9ydHMuQW5jaG9yID0gZnVuY3Rpb24oZG9j
LCByb3csIGNvbHVtbikgeworICAgIHRoaXMuZG9jdW1lbnQgPSBkb2M7CisgICAgCisgICAgaWYg
KHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCisgICAgICAgIHRoaXMuc2V0UG9zaXRpb24o
cm93LnJvdywgcm93LmNvbHVtbik7CisgICAgZWxzZQorICAgICAgICB0aGlzLnNldFBvc2l0aW9u
KHJvdywgY29sdW1uKTsKKworICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5k
KHRoaXMpOworICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworfTsKKworKGZ1
bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworCisg
ICAgdGhpcy5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
Y2xpcFBvc2l0aW9uVG9Eb2N1bWVudCh0aGlzLnJvdywgdGhpcy5jb2x1bW4pOworICAgIH07Cisg
ICAgICAgIAorICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZG9jdW1lbnQ7CisgICAgfTsKKworICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlv
bihlKSB7CisgICAgICAgIHZhciBkZWx0YSA9IGUuZGF0YTsKKyAgICAgICAgdmFyIHJhbmdlID0g
ZGVsdGEucmFuZ2U7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9
PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyAhPSB0aGlzLnJvdykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID4g
dGhpcy5yb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgaWYg
KHJhbmdlLnN0YXJ0LnJvdyA9PSB0aGlzLnJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPiB0aGlz
LmNvbHVtbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAgICAgdmFyIHJvdyA9IHRo
aXMucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW47CisgICAgICAgIAorICAg
ICAgICBpZiAoZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgIGlm
IChyYW5nZS5zdGFydC5yb3cgPT09IHJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPD0gY29sdW1u
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJv
dykgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gKz0gcmFuZ2UuZW5kLmNvbHVtbiAtIHJh
bmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAtPSByYW5nZS5zdGFydC5jb2x1bW47Cisg
ICAgICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgPCBy
b3cpIHsKKyAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0
LnJvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT09
ICJpbnNlcnRMaW5lcyIpIHsKKyAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPD0gcm93
KSB7CisgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5y
b3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0
aW9uID09ICJyZW1vdmVUZXh0IikgeworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9
PSByb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDwgY29sdW1uKSB7CisgICAgICAgICAgICAgICAg
aWYgKHJhbmdlLmVuZC5jb2x1bW4gPj0gY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBjb2x1
bW4gPSByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4gLSAocmFuZ2UuZW5kLmNvbHVt
biAtIHJhbmdlLnN0YXJ0LmNvbHVtbikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmIChyYW5nZS5zdGFydC5yb3cgIT09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3Rh
cnQucm93IDwgcm93KSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgPT0gcm93
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIHJh
bmdlLmVuZC5jb2x1bW4pICsgcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByb3cgLT0gKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2UuZW5kLnJvdyA9PSBy
b3cpIHsKKyAgICAgICAgICAgICAgICByb3cgLT0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0
LnJvdzsKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4gLSByYW5n
ZS5lbmQuY29sdW1uKSArIHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikgeworICAgICAgICAg
ICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8PSByb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAocmFu
Z2UuZW5kLnJvdyA8PSByb3cpCisgICAgICAgICAgICAgICAgICAgIHJvdyAtPSByYW5nZS5lbmQu
cm93IC0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByb3cgPSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgICAgICAgICAgICAgIGNv
bHVtbiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3csIGNvbHVtbiwgdHJ1ZSk7CisgICAgfTsKKwor
ICAgIHRoaXMuc2V0UG9zaXRpb24gPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgbm9DbGlwKSB7Cisg
ICAgICAgIHZhciBwb3M7CisgICAgICAgIGlmIChub0NsaXApIHsKKyAgICAgICAgICAgIHBvcyA9
IHsKKyAgICAgICAgICAgICAgICByb3c6IHJvdywKKyAgICAgICAgICAgICAgICBjb2x1bW46IGNv
bHVtbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHBvcyA9IHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQocm93LCBjb2x1bW4pOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlz
LmNvbHVtbiA9PSBwb3MuY29sdW1uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIHZhciBvbGQgPSB7CisgICAgICAgICAgICByb3c6IHRoaXMucm93LAorICAgICAg
ICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAg
dGhpcy5yb3cgPSBwb3Mucm93OworICAgICAgICB0aGlzLmNvbHVtbiA9IHBvcy5jb2x1bW47Cisg
ICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsKKyAgICAgICAgICAgIG9sZDogb2xkLAorICAg
ICAgICAgICAgdmFsdWU6IHBvcworICAgICAgICB9KTsKKyAgICB9OworCisgICAgdGhpcy5kZXRh
Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLiRjbGlwUG9z
aXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIHBv
cyA9IHt9OworICAgIAorICAgICAgICBpZiAocm93ID49IHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50Lmdl
dExlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBwb3MuY29sdW1uID0gdGhpcy5kb2N1bWVudC5n
ZXRMaW5lKHBvcy5yb3cpLmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyb3cg
PCAwKSB7CisgICAgICAgICAgICBwb3Mucm93ID0gMDsKKyAgICAgICAgICAgIHBvcy5jb2x1bW4g
PSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9zLnJvdyA9IHJv
dzsKKyAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExp
bmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGNvbHVtbiA8IDApCisgICAgICAgICAgICBwb3MuY29sdW1uID0g
MDsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gcG9zOworICAgIH07CisgICAgCit9KS5j
YWxsKEFuY2hvci5wcm90b3R5cGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2JhY2tncm91
bmRfdG9rZW5pemVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGli
L29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIEV2
ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7
Cit2YXIgTUFYX0xJTkVfTEVOR1RIID0gNTAwMDsKKwordmFyIEJhY2tncm91bmRUb2tlbml6ZXIg
PSBmdW5jdGlvbih0b2tlbml6ZXIsIGVkaXRvcikgeworICAgIHRoaXMucnVubmluZyA9IGZhbHNl
OworICAgIHRoaXMubGluZXMgPSBbXTsKKyAgICB0aGlzLnN0YXRlcyA9IFtdOworICAgIHRoaXMu
Y3VycmVudExpbmUgPSAwOworICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVyOworCisgICAg
dmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy4kd29ya2VyID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICghc2VsZi5ydW5uaW5nKSB7IHJldHVybjsgfQorCisgICAgICAgIHZhciB3b3JrZXJT
dGFydCA9IG5ldyBEYXRlKCk7CisgICAgICAgIHZhciBzdGFydExpbmUgPSBzZWxmLmN1cnJlbnRM
aW5lOworICAgICAgICB2YXIgZG9jID0gc2VsZi5kb2M7CisKKyAgICAgICAgdmFyIHByb2Nlc3Nl
ZExpbmVzID0gMDsKKworICAgICAgICB2YXIgbGVuID0gZG9jLmdldExlbmd0aCgpOworICAgICAg
ICB3aGlsZSAoc2VsZi5jdXJyZW50TGluZSA8IGxlbikgeworICAgICAgICAgICAgc2VsZi4kdG9r
ZW5pemVSb3coc2VsZi5jdXJyZW50TGluZSk7CisgICAgICAgICAgICB3aGlsZSAoc2VsZi5saW5l
c1tzZWxmLmN1cnJlbnRMaW5lXSkKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRMaW5lKys7
CisgICAgICAgICAgICBwcm9jZXNzZWRMaW5lcyArKzsKKyAgICAgICAgICAgIGlmICgocHJvY2Vz
c2VkTGluZXMgJSA1ID09IDApICYmIChuZXcgRGF0ZSgpIC0gd29ya2VyU3RhcnQpID4gMjApIHsK
KyAgICAgICAgICAgICAgICBzZWxmLmZpcmVVcGRhdGVFdmVudChzdGFydExpbmUsIHNlbGYuY3Vy
cmVudExpbmUtMSk7CisgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gc2V0VGltZW91dChz
ZWxmLiR3b3JrZXIsIDIwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzZWxmLnJ1bm5pbmcgPSBmYWxzZTsKKworICAgICAgICBz
ZWxmLmZpcmVVcGRhdGVFdmVudChzdGFydExpbmUsIGxlbiAtIDEpOworICAgIH07Cit9OworCiso
ZnVuY3Rpb24oKXsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAg
ICB0aGlzLnNldFRva2VuaXplciA9IGZ1bmN0aW9uKHRva2VuaXplcikgeworICAgICAgICB0aGlz
LnRva2VuaXplciA9IHRva2VuaXplcjsKKyAgICAgICAgdGhpcy5saW5lcyA9IFtdOworICAgICAg
ICB0aGlzLnN0YXRlcyA9IFtdOworCisgICAgICAgIHRoaXMuc3RhcnQoMCk7CisgICAgfTsKKyAg
ICB0aGlzLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7CisgICAgICAgIHRoaXMuZG9jID0g
ZG9jOworICAgICAgICB0aGlzLmxpbmVzID0gW107CisgICAgICAgIHRoaXMuc3RhdGVzID0gW107
CisKKyAgICAgICAgdGhpcy5zdG9wKCk7CisgICAgfTsKKyAgICB0aGlzLmZpcmVVcGRhdGVFdmVu
dCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBkYXRhID0gewor
ICAgICAgICAgICAgZmlyc3Q6IGZpcnN0Um93LAorICAgICAgICAgICAgbGFzdDogbGFzdFJvdwor
ICAgICAgICB9OworICAgICAgICB0aGlzLl9lbWl0KCJ1cGRhdGUiLCB7ZGF0YTogZGF0YX0pOwor
ICAgIH07CisgICAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKHN0YXJ0Um93KSB7CisgICAgICAgIHRo
aXMuY3VycmVudExpbmUgPSBNYXRoLm1pbihzdGFydFJvdyB8fCAwLCB0aGlzLmN1cnJlbnRMaW5l
LCB0aGlzLmRvYy5nZXRMZW5ndGgoKSk7CisgICAgICAgIHRoaXMubGluZXMuc3BsaWNlKHRoaXMu
Y3VycmVudExpbmUsIHRoaXMubGluZXMubGVuZ3RoKTsKKyAgICAgICAgdGhpcy5zdGF0ZXMuc3Bs
aWNlKHRoaXMuY3VycmVudExpbmUsIHRoaXMuc3RhdGVzLmxlbmd0aCk7CisKKyAgICAgICAgdGhp
cy5zdG9wKCk7CisgICAgICAgIHRoaXMucnVubmluZyA9IHNldFRpbWVvdXQodGhpcy4kd29ya2Vy
LCA3MDApOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVPbkNoYW5nZSA9IGZ1bmN0aW9uKGRl
bHRhKSB7CisgICAgICAgIHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgc3Rh
cnRSb3cgPSByYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93
IC0gc3RhcnRSb3c7CisKKyAgICAgICAgaWYgKGxlbiA9PT0gMCkgeworICAgICAgICAgICAgdGhp
cy5saW5lc1tzdGFydFJvd10gPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlv
biA9PSAicmVtb3ZlVGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAg
ICAgICAgICAgIHRoaXMubGluZXMuc3BsaWNlKHN0YXJ0Um93LCBsZW4gKyAxLCBudWxsKTsKKyAg
ICAgICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5KGxlbiArIDEpOwor
ICAgICAgICAgICAgYXJncy51bnNoaWZ0KHN0YXJ0Um93LCAxKTsKKyAgICAgICAgICAgIHRoaXMu
bGluZXMuc3BsaWNlLmFwcGx5KHRoaXMubGluZXMsIGFyZ3MpOworICAgICAgICAgICAgdGhpcy5z
dGF0ZXMuc3BsaWNlLmFwcGx5KHRoaXMuc3RhdGVzLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuY3VycmVudExpbmUgPSBNYXRoLm1pbihzdGFydFJvdywgdGhpcy5jdXJyZW50TGlu
ZSwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpOworCisgICAgICAgIHRoaXMuc3RvcCgpOworICAgICAg
ICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwgNzAwKTsKKyAgICB9Owor
ICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5ydW5uaW5nKQor
ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucnVubmluZyk7CisgICAgICAgIHRoaXMucnVu
bmluZyA9IGZhbHNlOworICAgIH07CisgICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGluZXNbcm93XSB8fCB0aGlzLiR0b2tlbml6ZVJvdyhy
b3cpOworICAgIH07CisgICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAg
ICBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpCisgICAgICAgICAgICB0aGlzLiR0b2tlbml6
ZVJvdyhyb3cpOworICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXNbcm93XSB8fCAic3RhcnQiOwor
ICAgIH07CisKKyAgICB0aGlzLiR0b2tlbml6ZVJvdyA9IGZ1bmN0aW9uKHJvdykgeworICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIHN0YXRlID0g
dGhpcy5zdGF0ZXNbcm93IC0gMV07CisKKyAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gTUFYX0xJ
TkVfTEVOR1RIKSB7CisgICAgICAgICAgICB2YXIgb3ZlcmZsb3cgPSB7dmFsdWU6IGxpbmUuc3Vi
c3RyKE1BWF9MSU5FX0xFTkdUSCksIHR5cGU6ICJ0ZXh0In07CisgICAgICAgICAgICBsaW5lID0g
bGluZS5zbGljZSgwLCBNQVhfTElORV9MRU5HVEgpOworICAgICAgICB9CisgICAgICAgIHZhciBk
YXRhID0gdGhpcy50b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CisgICAgICAg
IGlmIChvdmVyZmxvdykgeworICAgICAgICAgICAgZGF0YS50b2tlbnMucHVzaChvdmVyZmxvdyk7
CisgICAgICAgICAgICBkYXRhLnN0YXRlID0gInN0YXJ0IjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh0aGlzLnN0YXRlc1tyb3ddICsgIiIgIT09IGRhdGEuc3RhdGUgKyAiIikgeworICAgICAg
ICAgICAgdGhpcy5zdGF0ZXNbcm93XSA9IGRhdGEuc3RhdGU7CisgICAgICAgICAgICB0aGlzLmxp
bmVzW3JvdyArIDFdID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5lID4g
cm93ICsgMSkKKyAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gcm93ICsgMTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRMaW5lID09IHJvdykgeworICAgICAgICAgICAg
dGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dGhpcy5saW5lc1tyb3ddID0gZGF0YS50b2tlbnM7CisgICAgfTsKKworfSkuY2FsbChCYWNrZ3Jv
dW5kVG9rZW5pemVyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuQmFja2dyb3VuZFRva2VuaXplciA9
IEJhY2tncm91bmRUb2tlbml6ZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL3NlYXJjaF9oaWdo
bGlnaHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZycs
ICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgb29w
ID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIiku
UmFuZ2U7CisKK3ZhciBTZWFyY2hIaWdobGlnaHQgPSBmdW5jdGlvbihyZWdFeHAsIGNsYXp6LCB0
eXBlKSB7CisgICAgdGhpcy5zZXRSZWdleHAocmVnRXhwKTsKKyAgICB0aGlzLmNsYXp6ID0gY2xh
eno7CisgICAgdGhpcy50eXBlID0gdHlwZSB8fCAidGV4dCI7Cit9OworCisoZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5NQVhfUkFOR0VTID0gNTAwOworICAgIAorICAgIHRoaXMuc2V0UmVnZXhwID0g
ZnVuY3Rpb24ocmVnRXhwKSB7CisgICAgICAgIGlmICh0aGlzLnJlZ0V4cCsiIiA9PSByZWdFeHAr
IiIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMucmVnRXhwID0gcmVnRXhwOwor
ICAgICAgICB0aGlzLmNhY2hlID0gW107CisgICAgfTsKKworICAgIHRoaXMudXBkYXRlID0gZnVu
Y3Rpb24oaHRtbCwgbWFya2VyTGF5ZXIsIHNlc3Npb24sIGNvbmZpZykgeworICAgICAgICBpZiAo
IXRoaXMucmVnRXhwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgc3RhcnQgPSBj
b25maWcuZmlyc3RSb3csIGVuZCA9IGNvbmZpZy5sYXN0Um93OworCisgICAgICAgIGZvciAodmFy
IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykgeworICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRo
aXMuY2FjaGVbaV07CisgICAgICAgICAgICBpZiAocmFuZ2VzID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICByYW5nZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhzZXNzaW9uLmdldExpbmUoaSks
IHRoaXMucmVnRXhwKTsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IHRoaXMu
TUFYX1JBTkdFUykKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gcmFuZ2VzLnNsaWNlKDAs
IHRoaXMuTUFYX1JBTkdFUyk7CisgICAgICAgICAgICAgICAgcmFuZ2VzID0gcmFuZ2VzLm1hcChm
dW5jdGlvbihtYXRjaCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKGks
IG1hdGNoLm9mZnNldCwgaSwgbWF0Y2gub2Zmc2V0ICsgbWF0Y2gubGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW2ldID0gcmFuZ2VzLmxlbmd0
aCA/IHJhbmdlcyA6ICIiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHZhciBq
ID0gcmFuZ2VzLmxlbmd0aDsgaiAtLTsgKSB7CisgICAgICAgICAgICAgICAgbWFya2VyTGF5ZXIu
ZHJhd1NpbmdsZUxpbmVNYXJrZXIoCisgICAgICAgICAgICAgICAgICAgIGh0bWwsIHJhbmdlc1tq
XS50b1NjcmVlblJhbmdlKHNlc3Npb24pLCB0aGlzLmNsYXp6LCBjb25maWcsCisgICAgICAgICAg
ICAgICAgICAgIG51bGwsIHRoaXMudHlwZQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKFNlYXJjaEhpZ2hsaWdodC5wcm90b3R5
cGUpOworCitleHBvcnRzLlNlYXJjaEhpZ2hsaWdodCA9IFNlYXJjaEhpZ2hsaWdodDsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRpbmcnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZScsICdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGlu
ZScsICdhY2UvZWRpdF9zZXNzaW9uL2ZvbGQnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUo
Ii4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgRm9sZExpbmUgPSByZXF1aXJlKCIuL2ZvbGRfbGluZSIp
LkZvbGRMaW5lOwordmFyIEZvbGQgPSByZXF1aXJlKCIuL2ZvbGQiKS5Gb2xkOwordmFyIFRva2Vu
SXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisK
K2Z1bmN0aW9uIEZvbGRpbmcoKSB7CisgICAgdGhpcy5nZXRGb2xkQXQgPSBmdW5jdGlvbihyb3cs
IGNvbHVtbiwgc2lkZSkgeworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5l
KHJvdyk7CisgICAgICAgIGlmICghZm9sZExpbmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkczsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGQgPSBm
b2xkc1tpXTsKKyAgICAgICAgICAgIGlmIChmb2xkLnJhbmdlLmNvbnRhaW5zKHJvdywgY29sdW1u
KSkgeworICAgICAgICAgICAgICAgIGlmIChzaWRlID09IDEgJiYgZm9sZC5yYW5nZS5pc0VuZChy
b3csIGNvbHVtbikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChzaWRlID09IC0xICYmIGZvbGQucmFuZ2UuaXNTdGFydChyb3csIGNv
bHVtbikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBmb2xkOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKyAgICB0aGlzLmdldEZvbGRzSW5SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Cisg
ICAgICAgIHJhbmdlID0gcmFuZ2UuY2xvbmUoKTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2Uu
c3RhcnQ7CisgICAgICAgIHZhciBlbmQgPSByYW5nZS5lbmQ7CisgICAgICAgIHZhciBmb2xkTGlu
ZXMgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAgICAgdmFyIGZvdW5kRm9sZHMgPSBbXTsKKworICAg
ICAgICBzdGFydC5jb2x1bW4gKz0gMTsKKyAgICAgICAgZW5kLmNvbHVtbiAtPSAxOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICB2YXIgY21wID0gZm9sZExpbmVzW2ldLnJhbmdlLmNvbXBhcmVSYW5nZShyYW5nZSk7Cisg
ICAgICAgICAgICBpZiAoY21wID09IDIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMikgeworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZm9sZHMgPSBm
b2xkTGluZXNbaV0uZm9sZHM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGRz
Lmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBmb2xkc1tqXTsKKyAg
ICAgICAgICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVSYW5nZShyYW5nZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNtcCA9PSAtMikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAyKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlm
IChjbXAgPT0gNDIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZvdW5kRm9sZHMucHVzaChmb2xkKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZm91bmRGb2xkczsKKyAgICB9OworICAgIHRo
aXMuZ2V0QWxsRm9sZHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZvbGRzID0gW107Cisg
ICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGFkZEZvbGQoZm9sZCkgeworICAgICAgICAgICAgZm9sZHMucHVzaChmb2xkKTsK
KyAgICAgICAgICAgIGlmICghZm9sZC5zdWJGb2xkcykKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGQu
c3ViRm9sZHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgYWRkRm9sZChmb2xkLnN1YkZv
bGRzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmb2xkTGluZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGZvbGRMaW5lc1tpXS5mb2xkcy5sZW5ndGg7IGorKykKKyAgICAgICAgICAgICAgICBhZGRGb2xk
KGZvbGRMaW5lc1tpXS5mb2xkc1tqXSk7CisKKyAgICAgICAgcmV0dXJuIGZvbGRzOworICAgIH07
CisgICAgdGhpcy5nZXRGb2xkU3RyaW5nQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgdHJpbSwg
Zm9sZExpbmUpIHsKKyAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZSB8fCB0aGlzLmdldEZvbGRM
aW5lKHJvdyk7CisgICAgICAgIGlmICghZm9sZExpbmUpCisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKworICAgICAgICB2YXIgbGFzdEZvbGQgPSB7CisgICAgICAgICAgICBlbmQ6IHsgY29sdW1u
OiAwIH0KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHN0ciwgZm9sZDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBmb2xkTGluZS5mb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
Zm9sZCA9IGZvbGRMaW5lLmZvbGRzW2ldOworICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGQucmFu
Z2UuY29tcGFyZUVuZChyb3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7
CisgICAgICAgICAgICAgICAgc3RyID0gdGhpcworICAgICAgICAgICAgICAgICAgICAuZ2V0TGlu
ZShmb2xkLnN0YXJ0LnJvdykKKyAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhsYXN0Rm9s
ZC5lbmQuY29sdW1uLCBmb2xkLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjbXAgPT09IDApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RG
b2xkID0gZm9sZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHN0
ciA9IHRoaXMuZ2V0TGluZShmb2xkLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGxhc3RGb2xkLmVuZC5j
b2x1bW4pOworCisgICAgICAgIGlmICh0cmltID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0
ci5zdWJzdHJpbmcoMCwgY29sdW1uIC0gbGFzdEZvbGQuZW5kLmNvbHVtbik7CisgICAgICAgIGVs
c2UgaWYgKHRyaW0gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKGNvbHVt
biAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gc3RyOworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRMaW5lID0gZnVuY3Rpb24oZG9jUm93
LCBzdGFydEZvbGRMaW5lKSB7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRh
OworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChzdGFydEZvbGRMaW5lKQorICAgICAg
ICAgICAgaSA9IGZvbGREYXRhLmluZGV4T2Yoc3RhcnRGb2xkTGluZSk7CisgICAgICAgIGlmIChp
ID09IC0xKQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIGZvciAoaTsgaSA8IGZvbGREYXRh
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsK
KyAgICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPD0gZG9jUm93ICYmIGZvbGRMaW5l
LmVuZC5yb3cgPj0gZG9jUm93KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkTGluZS5lbmQucm93ID4gZG9jUm93KSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICB0aGlzLmdldE5leHRGb2xkTGluZSA9IGZ1bmN0
aW9uKGRvY1Jvdywgc3RhcnRGb2xkTGluZSkgeworICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlz
LiRmb2xkRGF0YTsKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICBpZiAoc3RhcnRGb2xkTGlu
ZSkKKyAgICAgICAgICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpOworICAg
ICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICBmb3IgKGk7IGkg
PCBmb2xkRGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9s
ZERhdGFbaV07CisgICAgICAgICAgICBpZiAoZm9sZExpbmUuZW5kLnJvdyA+PSBkb2NSb3cpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZExpbmU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZGVkUm93
Q291bnQgPSBmdW5jdGlvbihmaXJzdCwgbGFzdCkgeworICAgICAgICB2YXIgZm9sZERhdGEgPSB0
aGlzLiRmb2xkRGF0YSwgcm93Q291bnQgPSBsYXN0LWZpcnN0KzE7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xk
TGluZSA9IGZvbGREYXRhW2ldLAorICAgICAgICAgICAgICAgIGVuZCA9IGZvbGRMaW5lLmVuZC5y
b3csCisgICAgICAgICAgICAgICAgc3RhcnQgPSBmb2xkTGluZS5zdGFydC5yb3c7CisgICAgICAg
ICAgICBpZiAoZW5kID49IGxhc3QpIHsKKyAgICAgICAgICAgICAgICBpZihzdGFydCA8IGxhc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYoc3RhcnQgPj0gZmlyc3QpCisgICAgICAgICAgICAg
ICAgICAgICAgICByb3dDb3VudCAtPSBsYXN0LXN0YXJ0OworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCA9IDA7Ly9pbiBvbmUgZm9sZAor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihlbmQgPj0gZmlyc3QpeworICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBmaXJz
dCkgLy9mb2xkIGluc2lkZSByYW5nZQorICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSAg
ZW5kLXN0YXJ0OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcm93
Q291bnQgLT0gIGVuZC1maXJzdCsxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiByb3dDb3VudDsKKyAgICB9OworCisgICAgdGhpcy4kYWRkRm9sZExpbmUgPSBmdW5j
dGlvbihmb2xkTGluZSkgeworICAgICAgICB0aGlzLiRmb2xkRGF0YS5wdXNoKGZvbGRMaW5lKTsK
KyAgICAgICAgdGhpcy4kZm9sZERhdGEuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAg
ICByZXR1cm4gYS5zdGFydC5yb3cgLSBiLnN0YXJ0LnJvdzsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBmb2xkTGluZTsKKyAgICB9OworICAgIHRoaXMuYWRkRm9sZCA9IGZ1bmN0aW9uKHBs
YWNlaG9sZGVyLCByYW5nZSkgeworICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0
YTsKKyAgICAgICAgdmFyIGFkZGVkID0gZmFsc2U7CisgICAgICAgIHZhciBmb2xkOworICAgICAg
ICAKKyAgICAgICAgaWYgKHBsYWNlaG9sZGVyIGluc3RhbmNlb2YgRm9sZCkKKyAgICAgICAgICAg
IGZvbGQgPSBwbGFjZWhvbGRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9sZCA9IG5l
dyBGb2xkKHJhbmdlLCBwbGFjZWhvbGRlcik7CisKKyAgICAgICAgdGhpcy4kY2xpcFJhbmdlVG9E
b2N1bWVudChmb2xkLnJhbmdlKTsKKworICAgICAgICB2YXIgc3RhcnRSb3cgPSBmb2xkLnN0YXJ0
LnJvdzsKKyAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CisgICAg
ICAgIHZhciBlbmRSb3cgPSBmb2xkLmVuZC5yb3c7CisgICAgICAgIHZhciBlbmRDb2x1bW4gPSBm
b2xkLmVuZC5jb2x1bW47CisgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cgJiYgZW5kQ29s
dW1uIC0gc3RhcnRDb2x1bW4gPCAyKQorICAgICAgICAgICAgdGhyb3cgIlRoZSByYW5nZSBoYXMg
dG8gYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIHdpZHRoIjsKKworICAgICAgICB2YXIgc3RhcnRG
b2xkID0gdGhpcy5nZXRGb2xkQXQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCAxKTsKKyAgICAgICAg
dmFyIGVuZEZvbGQgPSB0aGlzLmdldEZvbGRBdChlbmRSb3csIGVuZENvbHVtbiwgLTEpOworICAg
ICAgICBpZiAoc3RhcnRGb2xkICYmIGVuZEZvbGQgPT0gc3RhcnRGb2xkKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXJ0Rm9sZC5hZGRTdWJGb2xkKGZvbGQpOworCisgICAgICAgIGlmICgKKyAgICAg
ICAgICAgIChzdGFydEZvbGQgJiYgIXN0YXJ0Rm9sZC5yYW5nZS5pc1N0YXJ0KHN0YXJ0Um93LCBz
dGFydENvbHVtbikpCisgICAgICAgICAgICB8fCAoZW5kRm9sZCAmJiAhZW5kRm9sZC5yYW5nZS5p
c0VuZChlbmRSb3csIGVuZENvbHVtbikpCisgICAgICAgICkgeworICAgICAgICAgICAgdGhyb3cg
IkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIiArIGZvbGQucmFu
Z2UgKyBzdGFydEZvbGQucmFuZ2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZvbGRzID0gdGhp
cy5nZXRGb2xkc0luUmFuZ2UoZm9sZC5yYW5nZSk7CisgICAgICAgIGlmIChmb2xkcy5sZW5ndGgg
PiAwKSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTsKKyAgICAgICAgICAg
IGZvbGQuc3ViRm9sZHMgPSBmb2xkczsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xkTGlu
ZSA9IGZvbGREYXRhW2ldOworICAgICAgICAgICAgaWYgKGVuZFJvdyA9PSBmb2xkTGluZS5zdGFy
dC5yb3cpIHsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpOworICAgICAg
ICAgICAgICAgIGFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0Um93ID09IGZvbGRMaW5lLmVuZC5yb3cp
IHsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpOworICAgICAgICAgICAg
ICAgIGFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVOZXh0ID0gZm9sZERhdGFbaSArIDFdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVOZXh0ICYmIGZvbGRMaW5lTmV4dC5zdGFy
dC5yb3cgPT0gZW5kUm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5tZXJn
ZShmb2xkTGluZU5leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlbmRSb3cgPD0gZm9sZExpbmUu
c3RhcnQucm93KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWFkZGVkKQorICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlz
LiRhZGRGb2xkTGluZShuZXcgRm9sZExpbmUodGhpcy4kZm9sZERhdGEsIGZvbGQpKTsKKworICAg
ICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFw
RGF0YShmb2xkTGluZS5zdGFydC5yb3csIGZvbGRMaW5lLnN0YXJ0LnJvdyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZvbGRMaW5lLnN0YXJ0
LnJvdywgZm9sZExpbmUuc3RhcnQucm93KTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVl
OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VGb2xkIiwgeyBkYXRhOiBmb2xkIH0pOworCisg
ICAgICAgIHJldHVybiBmb2xkOworICAgIH07CisKKyAgICB0aGlzLmFkZEZvbGRzID0gZnVuY3Rp
b24oZm9sZHMpIHsKKyAgICAgICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAg
ICAgICAgICB0aGlzLmFkZEZvbGQoZm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisK
KyAgICB0aGlzLnJlbW92ZUZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CisgICAgICAgIHZhciBmb2xk
TGluZSA9IGZvbGQuZm9sZExpbmU7CisgICAgICAgIHZhciBzdGFydFJvdyA9IGZvbGRMaW5lLnN0
YXJ0LnJvdzsKKyAgICAgICAgdmFyIGVuZFJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CisKKyAgICAg
ICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICB2YXIgZm9sZHMgPSBm
b2xkTGluZS5mb2xkczsKKyAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAg
ICAgICBmb2xkTGluZXMuc3BsaWNlKGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSwgMSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZm9sZExpbmUucmFuZ2UuaXNFbmQoZm9sZC5lbmQu
cm93LCBmb2xkLmVuZC5jb2x1bW4pKSB7CisgICAgICAgICAgICBmb2xkcy5wb3AoKTsKKyAgICAg
ICAgICAgIGZvbGRMaW5lLmVuZC5yb3cgPSBmb2xkc1tmb2xkcy5sZW5ndGggLSAxXS5lbmQucm93
OworICAgICAgICAgICAgZm9sZExpbmUuZW5kLmNvbHVtbiA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAt
IDFdLmVuZC5jb2x1bW47CisgICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZm9sZExpbmUucmFu
Z2UuaXNTdGFydChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pKSB7CisgICAgICAg
ICAgICBmb2xkcy5zaGlmdCgpOworICAgICAgICAgICAgZm9sZExpbmUuc3RhcnQucm93ID0gZm9s
ZHNbMF0uc3RhcnQucm93OworICAgICAgICAgICAgZm9sZExpbmUuc3RhcnQuY29sdW1uID0gZm9s
ZHNbMF0uc3RhcnQuY29sdW1uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZvbGQuc2Ft
ZVJvdykgeworICAgICAgICAgICAgZm9sZHMuc3BsaWNlKGZvbGRzLmluZGV4T2YoZm9sZCksIDEp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG5ld0ZvbGRMaW5l
ID0gZm9sZExpbmUuc3BsaXQoZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKKyAg
ICAgICAgICAgIGZvbGRzID0gbmV3Rm9sZExpbmUuZm9sZHM7CisgICAgICAgICAgICBmb2xkcy5z
aGlmdCgpOworICAgICAgICAgICAgbmV3Rm9sZExpbmUuc3RhcnQucm93ID0gZm9sZHNbMF0uc3Rh
cnQucm93OworICAgICAgICAgICAgbmV3Rm9sZExpbmUuc3RhcnQuY29sdW1uID0gZm9sZHNbMF0u
c3RhcnQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2Rl
KQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoc3RhcnRSb3csIGVuZFJvdyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKHN0YXJ0
Um93LCBlbmRSb3cpOworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUZvbGQiLCB7IGRhdGE6IGZvbGQgfSk7CisgICAgfTsKKworICAgIHRo
aXMucmVtb3ZlRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgeworICAgICAgICB2YXIgY2xvbmVGb2xk
cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBjbG9uZUZvbGRzLnB1c2goZm9sZHNbaV0pOworICAgICAgICB9CisKKyAg
ICAgICAgY2xvbmVGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHRo
aXMucmVtb3ZlRm9sZChmb2xkKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIHRoaXMuJG1v
ZGlmaWVkID0gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5leHBhbmRGb2xkID0gZnVuY3Rpb24o
Zm9sZCkgeworICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgIGZvbGQuc3Vi
Rm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICB0aGlzLmFkZEZvbGQo
Zm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICBmb2xkLnN1YkZvbGRzID0gW107Cisg
ICAgfTsKKworICAgIHRoaXMuZXhwYW5kRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgeworICAgICAg
ICBmb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHRoaXMuZXhwYW5k
Rm9sZChmb2xkKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMudW5mb2xk
ID0gZnVuY3Rpb24obG9jYXRpb24sIGV4cGFuZElubmVyKSB7CisgICAgICAgIHZhciByYW5nZSwg
Zm9sZHM7CisgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKQorICAgICAgICAgICAgcmFuZ2Ug
PSBuZXcgUmFuZ2UoMCwgMCwgdGhpcy5nZXRMZW5ndGgoKSwgMCk7CisgICAgICAgIGVsc2UgaWYg
KHR5cGVvZiBsb2NhdGlvbiA9PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJhbmdlID0gbmV3IFJh
bmdlKGxvY2F0aW9uLCAwLCBsb2NhdGlvbiwgdGhpcy5nZXRMaW5lKGxvY2F0aW9uKS5sZW5ndGgp
OworICAgICAgICBlbHNlIGlmICgicm93IiBpbiBsb2NhdGlvbikKKyAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2UuZnJvbVBvaW50cyhsb2NhdGlvbiwgbG9jYXRpb24pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYW5nZSA9IGxvY2F0aW9uOworCisgICAgICAgIGZvbGRzID0gdGhpcy5nZXRG
b2xkc0luUmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoZXhwYW5kSW5uZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlRm9sZHMoZm9sZHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgd2hpbGUgKGZvbGRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9s
ZHMoZm9sZHMpOworICAgICAgICAgICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2Uo
cmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmlzUm93
Rm9sZGVkID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKKyAgICAgICAgcmV0dXJu
ICEhdGhpcy5nZXRGb2xkTGluZShkb2NSb3csIHN0YXJ0Rm9sZFJvdyk7CisgICAgfTsKKworICAg
IHRoaXMuZ2V0Um93Rm9sZEVuZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7Cisg
ICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRS
b3cpOworICAgICAgICByZXR1cm4gZm9sZExpbmUgPyBmb2xkTGluZS5lbmQucm93IDogZG9jUm93
OworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKGZvbGRM
aW5lLCBlbmRSb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7CisgICAgICAg
IGlmIChzdGFydFJvdyA9PSBudWxsKSB7CisgICAgICAgICAgICBzdGFydFJvdyA9IGZvbGRMaW5l
LnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHN0YXJ0Q29sdW1uID0gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChlbmRSb3cgPT0gbnVsbCkgeworICAgICAgICAgICAgZW5kUm93ID0gZm9sZExp
bmUuZW5kLnJvdzsKKyAgICAgICAgICAgIGVuZENvbHVtbiA9IHRoaXMuZ2V0TGluZShlbmRSb3cp
Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CisgICAgICAg
IHZhciB0ZXh0TGluZSA9ICIiOworCisgICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxh
Y2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uKSB7CisgICAgICAgICAgICBpZiAocm93
IDwgc3RhcnRSb3cpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHJvdyA9PSBzdGFydFJvdykgeworICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gPCBz
dGFydENvbHVtbikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGxhc3RDb2x1bW4gPSBNYXRoLm1heChzdGFydENvbHVtbiwg
bGFzdENvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIg
IT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IHBsYWNlaG9sZGVyOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBkb2MuZ2V0TGlu
ZShyb3cpLnN1YnN0cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pOworICAgICAgICAgICAgfQorICAg
ICAgICB9LmJpbmQodGhpcyksIGVuZFJvdywgZW5kQ29sdW1uKTsKKyAgICAgICAgcmV0dXJuIHRl
eHRMaW5lOworICAgIH07CisKKyAgICB0aGlzLmdldERpc3BsYXlMaW5lID0gZnVuY3Rpb24ocm93
LCBlbmRDb2x1bW4sIHN0YXJ0Um93LCBzdGFydENvbHVtbikgeworICAgICAgICB2YXIgZm9sZExp
bmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdyk7CisKKyAgICAgICAgaWYgKCFmb2xkTGluZSkgewor
ICAgICAgICAgICAgdmFyIGxpbmU7CisgICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGlu
ZShyb3cpOworICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uIHx8
IDAsIGVuZENvbHVtbiB8fCBsaW5lLmxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoCisgICAgICAgICAgICAgICAgZm9s
ZExpbmUsIHJvdywgZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRoaXMuJGNsb25lRm9sZERhdGEgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGZkID0gW107CisgICAgICAgIGZkID0gdGhpcy4kZm9sZERhdGEubWFwKGZ1bmN0aW9u
KGZvbGRMaW5lKSB7CisgICAgICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkcy5tYXAo
ZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmb2xkLmNsb25lKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZExpbmUoZmQsIGZvbGRz
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIGZkOworICAgIH07CisKKyAgICB0aGlz
LnRvZ2dsZUZvbGQgPSBmdW5jdGlvbih0cnlUb1VuZm9sZCkgeworICAgICAgICB2YXIgc2VsZWN0
aW9uID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRS
YW5nZSgpOworICAgICAgICB2YXIgZm9sZDsKKyAgICAgICAgdmFyIGJyYWNrZXRQb3M7CisKKyAg
ICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJh
bmdlLnN0YXJ0OworICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGN1cnNvci5yb3cs
IGN1cnNvci5jb2x1bW4pOworCisgICAgICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0
Y2hpbmdCcmFja2V0KGN1cnNvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFy
ZVBvaW50KGJyYWNrZXRQb3MpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5k
ID0gYnJhY2tldFBvczsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrOworICAgICAgICAgICAgICAgICAgICBy
YW5nZS5lbmQuY29sdW1uLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoYnJhY2tldFBvcyA9IHRoaXMuZmluZE1hdGNoaW5nQnJhY2tldCh7
cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxfSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmFuZ2UuY29tcGFyZVBvaW50KGJyYWNrZXRQb3MpID09IDEpCisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLmVuZCA9IGJyYWNrZXRQb3M7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7CisKKyAgICAg
ICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRDb21tZW50Rm9sZFJh
bmdlKGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pIHx8IHJhbmdlOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5nZXRGb2xkc0lu
UmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgaWYgKHRyeVRvVW5mb2xkICYmIGZvbGRzLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoZm9sZHMpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIGlmIChmb2xk
cy5sZW5ndGggPT0gMSApIHsKKyAgICAgICAgICAgICAgICBmb2xkID0gZm9sZHNbMF07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvbGQpCisgICAgICAgICAgICBm
b2xkID0gdGhpcy5nZXRGb2xkQXQocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4p
OworCisgICAgICAgIGlmIChmb2xkICYmIGZvbGQucmFuZ2UudG9TdHJpbmcoKSA9PSByYW5nZS50
b1N0cmluZygpKSB7CisgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSAiLi4u
IjsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAgICBwbGFj
ZWhvbGRlciA9IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmKHBsYWNl
aG9sZGVyLmxlbmd0aCA8IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlci50cmltKCkuc3Vic3RyaW5nKDAsIDIpICsgIi4uIjsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWRkRm9sZChwbGFjZWhvbGRlciwgcmFuZ2UpOwor
ICAgIH07CisKKyAgICB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNv
bHVtbiwgZGlyKSB7CisgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRo
aXMsIHJvdywgY29sdW1uKTsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVu
dFRva2VuKCk7CisgICAgICAgIGlmICh0b2tlbiAmJiAvXmNvbW1lbnR8c3RyaW5nLy50ZXN0KHRv
a2VuLnR5cGUpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoKTsKKyAgICAg
ICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAodG9rZW4udHlwZS5yZXBsYWNlKC9cLi4qLywgIlxc
LiIpKTsKKyAgICAgICAgICAgIGlmIChkaXIgIT0gMSkgeworICAgICAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAg
ICAgICAgICAgICAgICB9IHdoaWxlKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpOworICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJl
bnRUb2tlblJvdygpOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gaXRlcmF0b3Iu
Z2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyAyOworCisgICAgICAgICAgICBpdGVyYXRvciA9IG5l
dyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHJvdywgY29sdW1uKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGRpciAhPSAtMSkgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICAgICAgICAg
IH0gd2hpbGUodG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7CisgICAgICAgICAgICAgICAg
dG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisKKyAgICAg
ICAgICAgIHJhbmdlLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKKyAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1
bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aCAtIDI7CisgICAgICAgICAgICByZXR1cm4gcmFuZ2U7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5mb2xkQWxsID0gZnVuY3Rpb24oc3RhcnRS
b3csIGVuZFJvdykgeworICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLmZvbGRXaWRnZXRz
OworICAgICAgICBlbmRSb3cgPSBlbmRSb3cgfHwgdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAg
Zm9yICh2YXIgcm93ID0gc3RhcnRSb3cgfHwgMDsgcm93IDwgZW5kUm93OyByb3crKykgeworICAg
ICAgICAgICAgaWYgKGZvbGRXaWRnZXRzW3Jvd10gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBm
b2xkV2lkZ2V0c1tyb3ddID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7CisgICAgICAgICAgICBp
ZiAoZm9sZFdpZGdldHNbcm93XSAhPSAic3RhcnQiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShyb3cp
OworICAgICAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLmVuZC5yb3cgPD0gZW5kUm93KSB0cnkg
eworICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOworICAgICAgICAg
ICAgfSBjYXRjaChlKSB7fQorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0aGlzLiRmb2xk
U3R5bGVzID0geworICAgICAgICAibWFudWFsIjogMSwKKyAgICAgICAgIm1hcmtiZWdpbiI6IDEs
CisgICAgICAgICJtYXJrYmVnaW5lbmQiOiAxCisgICAgfTsKKyAgICB0aGlzLiRmb2xkU3R5bGUg
PSAibWFya2JlZ2luIjsKKyAgICB0aGlzLnNldEZvbGRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7
CisgICAgICAgIGlmICghdGhpcy4kZm9sZFN0eWxlc1tzdHlsZV0pCisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoImludmFsaWQgZm9sZCBzdHlsZTogIiArIHN0eWxlICsgIlsiICsgT2JqZWN0
LmtleXModGhpcy4kZm9sZFN0eWxlcykuam9pbigiLCAiKSArICJdIik7CisgICAgICAgIAorICAg
ICAgICBpZiAodGhpcy4kZm9sZFN0eWxlID09IHN0eWxlKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuJGZvbGRTdHlsZSA9IHN0eWxlOworICAgICAgICAKKyAgICAgICAgaWYg
KHN0eWxlID09ICJtYW51YWwiKQorICAgICAgICAgICAgdGhpcy51bmZvbGQoKTsKKyAgICAgICAg
dmFyIG1vZGUgPSB0aGlzLiRmb2xkTW9kZTsKKyAgICAgICAgdGhpcy4kc2V0Rm9sZGluZyhudWxs
KTsKKyAgICAgICAgdGhpcy4kc2V0Rm9sZGluZyhtb2RlKTsKKyAgICB9OworICAgIHRoaXMuJHNl
dEZvbGRpbmcgPSBmdW5jdGlvbihmb2xkTW9kZSkgeworICAgICAgICBpZiAodGhpcy4kZm9sZE1v
ZGUgPT0gZm9sZE1vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgdGhpcy4kZm9sZE1vZGUgPSBmb2xkTW9kZTsKKyAgICAgICAgCisgICAgICAgIHRoaXMucmVt
b3ZlTGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzKTsKKyAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKCFm
b2xkTW9kZSB8fCB0aGlzLiRmb2xkU3R5bGUgPT0gIm1hbnVhbCIpIHsKKyAgICAgICAgICAgIHRo
aXMuZm9sZFdpZGdldHMgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB0aGlzLmZvbGRXaWRnZXRzID0gW107CisgICAgICAgIHRoaXMuZ2V0
Rm9sZFdpZGdldCA9IGZvbGRNb2RlLmdldEZvbGRXaWRnZXQuYmluZChmb2xkTW9kZSwgdGhpcywg
dGhpcy4kZm9sZFN0eWxlKTsKKyAgICAgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmb2xk
TW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2UuYmluZChmb2xkTW9kZSwgdGhpcywgdGhpcy4kZm9sZFN0
eWxlKTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzID0gdGhpcy51
cGRhdGVGb2xkV2lkZ2V0cy5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLm9uKCdjaGFuZ2UnLCB0
aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7CisgICAgICAgIAorICAgIH07CisKKyAgICB0aGlzLm9u
Rm9sZFdpZGdldENsaWNrID0gZnVuY3Rpb24ocm93LCBlKSB7CisgICAgICAgIGUgPSBlLmRvbUV2
ZW50OworICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldChyb3cpOworICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgb25seVN1YmZvbGRz
ID0gZS5zaGlmdEtleTsKKyAgICAgICAgdmFyIGFkZFN1YmZvbGRzID0gb25seVN1YmZvbGRzIHx8
IGUuY3RybEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXk7CisgICAgICAgIHZhciBmb2xkOwor
CisgICAgICAgIGlmICh0eXBlID09ICJlbmQiKQorICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0
Rm9sZEF0KHJvdywgMCwgLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb2xkID0gdGhp
cy5nZXRGb2xkQXQocm93LCBsaW5lLmxlbmd0aCwgMSk7CisKKyAgICAgICAgaWYgKGZvbGQpIHsK
KyAgICAgICAgICAgIGlmIChhZGRTdWJmb2xkcykKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92
ZUZvbGQoZm9sZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5leHBh
bmRGb2xkKGZvbGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93KTsKKyAgICAgICAgaWYgKHJh
bmdlKSB7CisgICAgICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFy
dC5jb2x1bW4sIDEpOworICAgICAgICAgICAgICAgIGlmIChmb2xkICYmIHJhbmdlLmlzRXF1YWwo
Zm9sZC5yYW5nZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW9ubHlTdWJmb2xkcykKKyAg
ICAgICAgICAgICAgICB0aGlzLmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKKworICAgICAgICAgICAg
aWYgKGFkZFN1YmZvbGRzKQorICAgICAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyYW5nZS5zdGFy
dC5yb3cgKyAxLCByYW5nZS5lbmQucm93KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChhZGRTdWJmb2xkcykKKyAgICAgICAgICAgICAgICB0aGlzLmZvbGRBbGwocm93ICsgMSwg
dGhpcy5nZXRMZW5ndGgoKSk7CisgICAgICAgICAgICAoZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50
KS5jbGFzc05hbWUgKz0gIiBhY2VfaW52YWxpZCIKKyAgICAgICAgfQorICAgIH07CisgICAgCisg
ICAgdGhpcy51cGRhdGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRl
bHRhID0gZS5kYXRhOworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAg
dmFyIGZpcnN0Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGVuID0gcmFuZ2Uu
ZW5kLnJvdyAtIGZpcnN0Um93OworCisgICAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAg
ICAgIHRoaXMuZm9sZFdpZGdldHNbZmlyc3RSb3ddID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlm
IChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3Zl
TGluZXMiKSB7CisgICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZShmaXJzdFJvdywg
bGVuICsgMSwgbnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYXJncyA9
IEFycmF5KGxlbiArIDEpOworICAgICAgICAgICAgYXJncy51bnNoaWZ0KGZpcnN0Um93LCAxKTsK
KyAgICAgICAgICAgIHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlLmFwcGx5KHRoaXMuZm9sZFdpZGdl
dHMsIGFyZ3MpOworICAgICAgICB9CisgICAgfTsKKworfQorCitleHBvcnRzLkZvbGRpbmcgPSBG
b2xkaW5nOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIu
Li9yYW5nZSIpLlJhbmdlOworZnVuY3Rpb24gRm9sZExpbmUoZm9sZERhdGEsIGZvbGRzKSB7Cisg
ICAgdGhpcy5mb2xkRGF0YSA9IGZvbGREYXRhOworICAgIGlmIChBcnJheS5pc0FycmF5KGZvbGRz
KSkgeworICAgICAgICB0aGlzLmZvbGRzID0gZm9sZHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Zm9sZHMgPSB0aGlzLmZvbGRzID0gWyBmb2xkcyBdOworICAgIH0KKworICAgIHZhciBsYXN0ID0g
Zm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0KKyAgICB0aGlzLnJhbmdlID0gbmV3IFJhbmdlKGZvbGRz
WzBdLnN0YXJ0LnJvdywgZm9sZHNbMF0uc3RhcnQuY29sdW1uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdC5lbmQucm93LCBsYXN0LmVuZC5jb2x1bW4pOworICAgIHRoaXMuc3RhcnQg
PSB0aGlzLnJhbmdlLnN0YXJ0OworICAgIHRoaXMuZW5kICAgPSB0aGlzLnJhbmdlLmVuZDsKKwor
ICAgIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgIGZvbGQuc2V0
Rm9sZExpbmUodGhpcyk7CisgICAgfSwgdGhpcyk7Cit9CisKKyhmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnNoaWZ0Um93ID0gZnVuY3Rpb24oc2hpZnQpIHsKKyAgICAgICAgdGhpcy5zdGFydC5yb3cg
Kz0gc2hpZnQ7CisgICAgICAgIHRoaXMuZW5kLnJvdyArPSBzaGlmdDsKKyAgICAgICAgdGhpcy5m
b2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIGZvbGQuc3RhcnQucm93
ICs9IHNoaWZ0OworICAgICAgICAgICAgZm9sZC5lbmQucm93ICs9IHNoaWZ0OworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CisgICAgICAg
IGlmIChmb2xkLnNhbWVSb3cpIHsKKyAgICAgICAgICAgIGlmIChmb2xkLnN0YXJ0LnJvdyA8IHRo
aXMuc3RhcnRSb3cgfHwgZm9sZC5lbmRSb3cgPiB0aGlzLmVuZFJvdykgeworICAgICAgICAgICAg
ICAgIHRocm93ICJDYW4ndCBhZGQgYSBmb2xkIHRvIHRoaXMgRm9sZExpbmUgYXMgaXQgaGFzIG5v
IGNvbm5lY3Rpb24iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNo
KGZvbGQpOworICAgICAgICAgICAgdGhpcy5mb2xkcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLWEucmFuZ2UuY29tcGFyZUVuZChiLnN0YXJ0LnJvdywgYi5z
dGFydC5jb2x1bW4pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAodGhpcy5yYW5n
ZS5jb21wYXJlRW5kKGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbikgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OworICAgICAgICAgICAg
ICAgIHRoaXMuZW5kLmNvbHVtbiA9ICBmb2xkLmVuZC5jb2x1bW47CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHRoaXMucmFuZ2UuY29tcGFyZVN0YXJ0KGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29s
dW1uKSA8IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQu
cm93OworICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1
bW47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZm9sZC5zdGFydC5yb3cgPT0g
dGhpcy5lbmQucm93KSB7CisgICAgICAgICAgICB0aGlzLmZvbGRzLnB1c2goZm9sZCk7CisgICAg
ICAgICAgICB0aGlzLmVuZC5yb3cgPSBmb2xkLmVuZC5yb3c7CisgICAgICAgICAgICB0aGlzLmVu
ZC5jb2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47CisgICAgICAgIH0gZWxzZSBpZiAoZm9sZC5lbmQu
cm93ID09IHRoaXMuc3RhcnQucm93KSB7CisgICAgICAgICAgICB0aGlzLmZvbGRzLnVuc2hpZnQo
Zm9sZCk7CisgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQucm93OworICAg
ICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93ICJUcnlpbmcgdG8gYWRkIGZvbGQgdG8gRm9sZFJv
dyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG1hdGNoaW5nIHJvdyI7CisgICAgICAgIH0KKyAgICAgICAg
Zm9sZC5mb2xkTGluZSA9IHRoaXM7CisgICAgfQorCisgICAgdGhpcy5jb250YWluc1JvdyA9IGZ1
bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gcm93ID49IHRoaXMuc3RhcnQucm93ICYmIHJv
dyA8PSB0aGlzLmVuZC5yb3c7CisgICAgfQorCisgICAgdGhpcy53YWxrID0gZnVuY3Rpb24oY2Fs
bGJhY2ssIGVuZFJvdywgZW5kQ29sdW1uKSB7CisgICAgICAgIHZhciBsYXN0RW5kID0gMCwKKyAg
ICAgICAgICAgIGZvbGRzID0gdGhpcy5mb2xkcywKKyAgICAgICAgICAgIGZvbGQsCisgICAgICAg
ICAgICBjb21wLCBzdG9wLCBpc05ld1JvdyA9IHRydWU7CisKKyAgICAgICAgaWYgKGVuZFJvdyA9
PSBudWxsKSB7CisgICAgICAgICAgICBlbmRSb3cgPSB0aGlzLmVuZC5yb3c7CisgICAgICAgICAg
ICBlbmRDb2x1bW4gPSB0aGlzLmVuZC5jb2x1bW47CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb2xkID0g
Zm9sZHNbaV07CisKKyAgICAgICAgICAgIGNvbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVTdGFydChl
bmRSb3csIGVuZENvbHVtbik7CisgICAgICAgICAgICBpZiAoY29tcCA9PSAtMSkgeworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5kLCBpc05l
d1Jvdyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzdG9wID0gY2FsbGJhY2sobnVsbCwgZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29s
dW1uLCBsYXN0RW5kLCBpc05ld1Jvdyk7CisgICAgICAgICAgICBzdG9wID0gIXN0b3AgJiYgY2Fs
bGJhY2soZm9sZC5wbGFjZWhvbGRlciwgZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1u
LCBsYXN0RW5kKTsKKyAgICAgICAgICAgIGlmIChzdG9wIHx8IGNvbXAgPT0gMCkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlzTmV3Um93ID0g
IWZvbGQuc2FtZVJvdzsKKyAgICAgICAgICAgIGxhc3RFbmQgPSBmb2xkLmVuZC5jb2x1bW47Cisg
ICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2sobnVsbCwgZW5kUm93LCBlbmRDb2x1bW4sIGxhc3RF
bmQsIGlzTmV3Um93KTsKKyAgICB9CisKKyAgICB0aGlzLmdldE5leHRGb2xkVG8gPSBmdW5jdGlv
bihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgZm9sZCwgY21wOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvbGQg
PSB0aGlzLmZvbGRzW2ldOworICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5k
KHJvdywgY29sdW1uKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBmb2xkOiBmb2xkLAorICAgICAgICAg
ICAgICAgICAgICBraW5kOiAiYWZ0ZXIiCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICBmb2xkOiBmb2xkLAorICAgICAgICAgICAgICAgICAgICBraW5kOiAiaW5z
aWRlIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLmFkZFJlbW92ZUNoYXJzID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4sIGxlbikgeworICAgICAgICB2YXIgcmV0ID0gdGhpcy5nZXROZXh0Rm9s
ZFRvKHJvdywgY29sdW1uKSwKKyAgICAgICAgICAgIGZvbGQsIGZvbGRzOworICAgICAgICBpZiAo
cmV0KSB7CisgICAgICAgICAgICBmb2xkID0gcmV0LmZvbGQ7CisgICAgICAgICAgICBpZiAocmV0
LmtpbmQgPT0gImluc2lkZSIKKyAgICAgICAgICAgICAgICAmJiBmb2xkLnN0YXJ0LmNvbHVtbiAh
PSBjb2x1bW4KKyAgICAgICAgICAgICAgICAmJiBmb2xkLnN0YXJ0LnJvdyAhPSByb3cpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNv
bGUubG9nKHJvdywgY29sdW1uLCBmb2xkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZC5z
dGFydC5yb3cgPT0gcm93KSB7CisgICAgICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzOwor
ICAgICAgICAgICAgICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1u
ICs9IGxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpOyBpIDwg
Zm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzW2ld
OworICAgICAgICAgICAgICAgICAgICBmb2xkLnN0YXJ0LmNvbHVtbiArPSBsZW47CisgICAgICAg
ICAgICAgICAgICAgIGlmICghZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9s
ZC5lbmQuY29sdW1uICs9IGxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5lbmQuY29sdW1uICs9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHRoaXMuc3BsaXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIg
Zm9sZCA9IHRoaXMuZ2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbikuZm9sZCwKKyAgICAgICAgICAg
IGZvbGRzID0gdGhpcy5mb2xkczsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0
YTsKKworICAgICAgICBpZiAoIWZvbGQpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTsKKyAgICAgICAgdmFy
IGZvbGRCZWZvcmUgPSBmb2xkc1tpIC0gMV07CisgICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGRC
ZWZvcmUuZW5kLnJvdzsKKyAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZEJlZm9yZS5lbmQu
Y29sdW1uOworICAgICAgICBmb2xkcyA9IGZvbGRzLnNwbGljZShpLCBmb2xkcy5sZW5ndGggLSBp
KTsKKworICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBuZXcgRm9sZExpbmUoZm9sZERhdGEsIGZv
bGRzKTsKKyAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YodGhpcykgKyAx
LCAwLCBuZXdGb2xkTGluZSk7CisgICAgICAgIHJldHVybiBuZXdGb2xkTGluZTsKKyAgICB9CisK
KyAgICB0aGlzLm1lcmdlID0gZnVuY3Rpb24oZm9sZExpbmVOZXh0KSB7CisgICAgICAgIHZhciBm
b2xkcyA9IGZvbGRMaW5lTmV4dC5mb2xkczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
b2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy5hZGRGb2xkKGZvbGRzW2ldKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLmZvbGREYXRhOworICAgICAg
ICBmb2xkRGF0YS5zcGxpY2UoZm9sZERhdGEuaW5kZXhPZihmb2xkTGluZU5leHQpLCAxKTsKKyAg
ICB9CisKKyAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByZXQg
PSBbdGhpcy5yYW5nZS50b1N0cmluZygpICsgIjogWyIgXTsKKworICAgICAgICB0aGlzLmZvbGRz
LmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgcmV0LnB1c2goIiAgIiArIGZv
bGQudG9TdHJpbmcoKSk7CisgICAgICAgIH0pOworICAgICAgICByZXQucHVzaCgiXSIpCisgICAg
ICAgIHJldHVybiByZXQuam9pbigiXG4iKTsKKyAgICB9CisKKyAgICB0aGlzLmlkeFRvUG9zaXRp
b24gPSBmdW5jdGlvbihpZHgpIHsKKyAgICAgICAgdmFyIGxhc3RGb2xkRW5kQ29sdW1uID0gMDsK
KyAgICAgICAgdmFyIGZvbGQ7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZv
bGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuZm9sZHNbaV07
CisKKyAgICAgICAgICAgIGlkeCAtPSBmb2xkLnN0YXJ0LmNvbHVtbiAtIGxhc3RGb2xkRW5kQ29s
dW1uOworICAgICAgICAgICAgaWYgKGlkeCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICByb3c6IGZvbGQuc3RhcnQucm93LAorICAgICAgICAgICAg
ICAgICAgICBjb2x1bW46IGZvbGQuc3RhcnQuY29sdW1uICsgaWR4CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWR4IC09IGZvbGQucGxhY2Vob2xkZXIu
bGVuZ3RoOworICAgICAgICAgICAgaWYgKGlkeCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZm9sZC5zdGFydDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGFzdEZvbGRFbmRD
b2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgcm93OiB0aGlzLmVuZC5yb3csCisgICAgICAgICAgICBjb2x1bW46IHRoaXMu
ZW5kLmNvbHVtbiArIGlkeAorICAgICAgICB9OworICAgIH0KK30pLmNhbGwoRm9sZExpbmUucHJv
dG90eXBlKTsKKworZXhwb3J0cy5Gb2xkTGluZSA9IEZvbGRMaW5lOworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9lZGl0X3Nlc3Npb24vZm9sZCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cit2YXIgRm9sZCA9IGV4
cG9ydHMuRm9sZCA9IGZ1bmN0aW9uKHJhbmdlLCBwbGFjZWhvbGRlcikgeworICAgIHRoaXMuZm9s
ZExpbmUgPSBudWxsOworICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjsKKyAgICB0
aGlzLnJhbmdlID0gcmFuZ2U7CisgICAgdGhpcy5zdGFydCA9IHJhbmdlLnN0YXJ0OworICAgIHRo
aXMuZW5kID0gcmFuZ2UuZW5kOworCisgICAgdGhpcy5zYW1lUm93ID0gcmFuZ2Uuc3RhcnQucm93
ID09IHJhbmdlLmVuZC5yb3c7CisgICAgdGhpcy5zdWJGb2xkcyA9IFtdOworfTsKKworKGZ1bmN0
aW9uKCkgeworCisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gJyInICsgdGhpcy5wbGFjZWhvbGRlciArICciICcgKyB0aGlzLnJhbmdlLnRvU3RyaW5nKCk7
CisgICAgfTsKKworICAgIHRoaXMuc2V0Rm9sZExpbmUgPSBmdW5jdGlvbihmb2xkTGluZSkgewor
ICAgICAgICB0aGlzLmZvbGRMaW5lID0gZm9sZExpbmU7CisgICAgICAgIHRoaXMuc3ViRm9sZHMu
Zm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICBmb2xkLnNldEZvbGRMaW5lKGZv
bGRMaW5lKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5yYW5nZS5jbG9uZSgpOworICAgICAgICB2
YXIgZm9sZCA9IG5ldyBGb2xkKHJhbmdlLCB0aGlzLnBsYWNlaG9sZGVyKTsKKyAgICAgICAgdGhp
cy5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKHN1YkZvbGQpIHsKKyAgICAgICAgICAgIGZvbGQu
c3ViRm9sZHMucHVzaChzdWJGb2xkLmNsb25lKCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIGZvbGQ7CisgICAgfTsKKworICAgIHRoaXMuYWRkU3ViRm9sZCA9IGZ1bmN0aW9uKGZvbGQp
IHsKKyAgICAgICAgaWYgKHRoaXMucmFuZ2UuaXNFcXVhbChmb2xkKSkKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworCisgICAgICAgIGlmICghdGhpcy5yYW5nZS5jb250YWluc1JhbmdlKGZvbGQp
KQorICAgICAgICAgICAgdGhyb3cgIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlz
dGluZyBmb2xkIiArIGZvbGQucmFuZ2UgKyB0aGlzLnJhbmdlOworCisgICAgICAgIHZhciByb3cg
PSBmb2xkLnJhbmdlLnN0YXJ0LnJvdywgY29sdW1uID0gZm9sZC5yYW5nZS5zdGFydC5jb2x1bW47
CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBjbXAgPSAtMTsgaSA8IHRoaXMuc3ViRm9sZHMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbaV0ucmFuZ2UuY29t
cGFyZShyb3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAoY21wICE9IDEpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFmdGVyU3RhcnQgPSB0aGlzLnN1
YkZvbGRzW2ldOworCisgICAgICAgIGlmIChjbXAgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBh
ZnRlclN0YXJ0LmFkZFN1YkZvbGQoZm9sZCk7CisgICAgICAgIHZhciByb3cgPSBmb2xkLnJhbmdl
LmVuZC5yb3csIGNvbHVtbiA9IGZvbGQucmFuZ2UuZW5kLmNvbHVtbjsKKyAgICAgICAgZm9yICh2
YXIgaiA9IGksIGNtcCA9IC0xOyBqIDwgdGhpcy5zdWJGb2xkcy5sZW5ndGg7IGorKykgeworICAg
ICAgICAgICAgY21wID0gdGhpcy5zdWJGb2xkc1tqXS5yYW5nZS5jb21wYXJlKHJvdywgY29sdW1u
KTsKKyAgICAgICAgICAgIGlmIChjbXAgIT0gMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgYWZ0ZXJFbmQgPSB0aGlzLnN1YkZvbGRzW2pdOworCisgICAg
ICAgIGlmIChjbXAgPT0gMCkKKyAgICAgICAgICAgIHRocm93ICJBIGZvbGQgY2FuJ3QgaW50ZXJz
ZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZTsKKwor
ICAgICAgICB2YXIgY29uc3VtZWRGb2xkcyA9IHRoaXMuc3ViRm9sZHMuc3BsaWNlKGksIGogLSBp
LCBmb2xkKTsKKyAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzLmZvbGRMaW5lKTsKKworICAg
ICAgICByZXR1cm4gZm9sZDsKKyAgICB9OworCit9KS5jYWxsKEZvbGQucHJvdG90eXBlKTsKKwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS90b2tlbl9pdGVyYXRvcicsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cit2
YXIgVG9rZW5JdGVyYXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIGluaXRpYWxSb3csIGluaXRpYWxD
b2x1bW4pIHsKKyAgICB0aGlzLiRzZXNzaW9uID0gc2Vzc2lvbjsKKyAgICB0aGlzLiRyb3cgPSBp
bml0aWFsUm93OworICAgIHRoaXMuJHJvd1Rva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKGluaXRp
YWxSb3cpOworCisgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGluaXRpYWxSb3cs
IGluaXRpYWxDb2x1bW4pOworICAgIHRoaXMuJHRva2VuSW5kZXggPSB0b2tlbiA/IHRva2VuLmlu
ZGV4IDogLTE7Cit9OworCisoZnVuY3Rpb24oKSB7IAorICAgIHRoaXMuc3RlcEJhY2t3YXJkID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJHRva2VuSW5kZXggLT0gMTsKKyAgICAgICAgCisg
ICAgICAgIHdoaWxlICh0aGlzLiR0b2tlbkluZGV4IDwgMCkgeworICAgICAgICAgICAgdGhpcy4k
cm93IC09IDE7CisgICAgICAgICAgICBpZiAodGhpcy4kcm93IDwgMCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuJHJvdyA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB0aGlzLiRyb3dUb2tlbnMgPSB0
aGlzLiRzZXNzaW9uLmdldFRva2Vucyh0aGlzLiRyb3cpOworICAgICAgICAgICAgdGhpcy4kdG9r
ZW5JbmRleCA9IHRoaXMuJHJvd1Rva2Vucy5sZW5ndGggLSAxOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsK
KyAgICB9OyAgIAorICAgIHRoaXMuc3RlcEZvcndhcmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIHJvd0NvdW50ID0gdGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTsKKyAgICAgICAgdGhpcy4k
dG9rZW5JbmRleCArPSAxOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5k
ZXggPj0gdGhpcy4kcm93VG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy4kcm93ICs9
IDE7CisgICAgICAgICAgICBpZiAodGhpcy4kcm93ID49IHJvd0NvdW50KSB7CisgICAgICAgICAg
ICAgICAgdGhpcy4kcm93ID0gcm93Q291bnQgLSAxOworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRyb3dUb2tlbnMgPSB0aGlz
LiRzZXNzaW9uLmdldFRva2Vucyh0aGlzLiRyb3cpOworICAgICAgICAgICAgdGhpcy4kdG9rZW5J
bmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gdGhpcy4k
cm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdOworICAgIH07ICAgICAgCisgICAgdGhpcy5nZXRD
dXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tl
bnNbdGhpcy4kdG9rZW5JbmRleF07CisgICAgfTsgICAgICAKKyAgICB0aGlzLmdldEN1cnJlbnRU
b2tlblJvdyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJvdzsKKyAgICB9
OyAgICAgCisgICAgdGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHJvd1Rva2VucyA9IHRoaXMuJHJvd1Rva2VuczsKKyAgICAgICAgdmFyIHRva2Vu
SW5kZXggPSB0aGlzLiR0b2tlbkluZGV4OworICAgICAgICB2YXIgY29sdW1uID0gcm93VG9rZW5z
W3Rva2VuSW5kZXhdLnN0YXJ0OworICAgICAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQpCisg
ICAgICAgICAgICByZXR1cm4gY29sdW1uOworICAgICAgICAgICAgCisgICAgICAgIGNvbHVtbiA9
IDA7CisgICAgICAgIHdoaWxlICh0b2tlbkluZGV4ID4gMCkgeworICAgICAgICAgICAgdG9rZW5J
bmRleCAtPSAxOworICAgICAgICAgICAgY29sdW1uICs9IHJvd1Rva2Vuc1t0b2tlbkluZGV4XS52
YWx1ZS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjb2x1bW47
ICAKKyAgICB9OworICAgICAgICAgICAgCit9KS5jYWxsKFRva2VuSXRlcmF0b3IucHJvdG90eXBl
KTsKKworZXhwb3J0cy5Ub2tlbkl0ZXJhdG9yID0gVG9rZW5JdGVyYXRvcjsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2gnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvcmFuZ2UnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFRva2VuSXRlcmF0b3Ig
PSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgUmFuZ2Ug
PSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOworCisKK2Z1bmN0aW9uIEJyYWNrZXRNYXRjaCgp
IHsKKworICAgIHRoaXMuZmluZE1hdGNoaW5nQnJhY2tldCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBj
aGFyKSB7CisgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPT0gMCkgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgdmFyIGNoYXJCZWZvcmVDdXJzb3IgPSBjaGFyIHx8IHRoaXMuZ2V0TGluZShwb3Np
dGlvbi5yb3cpLmNoYXJBdChwb3NpdGlvbi5jb2x1bW4tMSk7CisgICAgICAgIGlmIChjaGFyQmVm
b3JlQ3Vyc29yID09ICIiKSByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgbWF0Y2ggPSBjaGFy
QmVmb3JlQ3Vyc29yLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKTsKKyAgICAgICAgaWYg
KCFtYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlmIChtYXRjaFsx
XSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQobWF0Y2hbMV0s
IHBvc2l0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGZpbmRP
cGVuaW5nQnJhY2tldChtYXRjaFsyXSwgcG9zaXRpb24pOworICAgIH07CisgICAgCisgICAgdGhp
cy5nZXRCcmFja2V0UmFuZ2UgPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgdmFyIGxpbmUgPSB0
aGlzLmdldExpbmUocG9zLnJvdyk7CisgICAgICAgIHZhciBiZWZvcmUgPSB0cnVlLCByYW5nZTsK
KworICAgICAgICB2YXIgY2hyID0gbGluZS5jaGFyQXQocG9zLmNvbHVtbi0xKTsKKyAgICAgICAg
dmFyIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7Cisg
ICAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgICAgIGNociA9IGxpbmUuY2hhckF0KHBvcy5j
b2x1bW4pOworICAgICAgICAgICAgcG9zID0ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29s
dW1uICsgMX07CisgICAgICAgICAgICBtYXRjaCA9IGNociAmJiBjaHIubWF0Y2goLyhbXChcW1x7
XSl8KFtcKVxdXH1dKS8pOworICAgICAgICAgICAgYmVmb3JlID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAg
IGlmIChtYXRjaFsxXSkgeworICAgICAgICAgICAgdmFyIGJyYWNrZXRQb3MgPSB0aGlzLiRmaW5k
Q2xvc2luZ0JyYWNrZXQobWF0Y2hbMV0sIHBvcyk7CisgICAgICAgICAgICBpZiAoIWJyYWNrZXRQ
b3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICByYW5nZSA9IFJh
bmdlLmZyb21Qb2ludHMocG9zLCBicmFja2V0UG9zKTsKKyAgICAgICAgICAgIGlmICghYmVmb3Jl
KSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAg
IHJhbmdlLnN0YXJ0LmNvbHVtbi0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmFuZ2Uu
Y3Vyc29yID0gcmFuZ2UuZW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGJy
YWNrZXRQb3MgPSB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQobWF0Y2hbMl0sIHBvcyk7CisgICAg
ICAgICAgICBpZiAoIWJyYWNrZXRQb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYnJhY2tldFBvcywgcG9zKTsKKyAg
ICAgICAgICAgIGlmICghYmVmb3JlKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29s
dW1uKys7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbi0tOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICB9OworCisgICAgdGhpcy4kYnJhY2tl
dHMgPSB7CisgICAgICAgICIpIjogIigiLAorICAgICAgICAiKCI6ICIpIiwKKyAgICAgICAgIl0i
OiAiWyIsCisgICAgICAgICJbIjogIl0iLAorICAgICAgICAieyI6ICJ9IiwKKyAgICAgICAgIn0i
OiAieyIKKyAgICB9OworCisgICAgdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0ID0gZnVuY3Rpb24o
YnJhY2tldCwgcG9zaXRpb24sIHR5cGVSZSkgeworICAgICAgICB2YXIgb3BlbkJyYWNrZXQgPSB0
aGlzLiRicmFja2V0c1ticmFja2V0XTsKKyAgICAgICAgdmFyIGRlcHRoID0gMTsKKworICAgICAg
ICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlzLCBwb3NpdGlvbi5yb3csIHBv
c2l0aW9uLmNvbHVtbik7CisgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRU
b2tlbigpOworICAgICAgICBpZiAoIXRva2VuKQorICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRv
ci5zdGVwRm9yd2FyZCgpOworICAgICAgICBpZiAoIXRva2VuKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgIGlmICghdHlwZVJlKXsKKyAgICAgICAgICAgIHR5cGVSZSA9
IG5ldyBSZWdFeHAoCisgICAgICAgICAgICAgICAgIihcXC4/IiArCisgICAgICAgICAgICAgICAg
dG9rZW4udHlwZS5yZXBsYWNlKCIuIiwgIlxcLiIpLnJlcGxhY2UoInJwYXJlbiIsICIucGFyZW4i
KQorICAgICAgICAgICAgICAgICsgIikrIgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0aW9uLmNvbHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJl
bnRUb2tlbkNvbHVtbigpIC0gMjsKKyAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7Cisg
ICAgICAgIAorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAKKyAgICAgICAgICAgIHdo
aWxlICh2YWx1ZUluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUu
Y2hhckF0KHZhbHVlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gb3BlbkJyYWNr
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRlcHRoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93
OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4o
KX07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVw
dGggKz0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWVJbmRleCAt
PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHRv
a2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICB9IHdoaWxlICh0b2tl
biAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkpOworCisgICAgICAgICAgICBpZiAodG9rZW4g
PT0gbnVsbCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICB2YWx1ZUluZGV4ID0gdmFs
dWUubGVuZ3RoIC0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgfTsKKworICAgIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJyYWNr
ZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIGNsb3NpbmdCcmFja2V0ID0gdGhp
cy4kYnJhY2tldHNbYnJhY2tldF07CisgICAgICAgIHZhciBkZXB0aCA9IDE7CisKKyAgICAgICAg
dmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBwb3Np
dGlvbi5jb2x1bW4pOworICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9r
ZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iu
c3RlcEZvcndhcmQoKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIXR5cGVSZSl7CisgICAgICAgICAgICB0eXBlUmUgPSBuZXcgUmVnRXhw
KAorICAgICAgICAgICAgICAgICIoXFwuPyIgKworICAgICAgICAgICAgICAgIHRva2VuLnR5cGUu
cmVwbGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCJscGFyZW4iLCAiLnBhcmVuIikKKyAgICAgICAg
ICAgICAgICArICIpKyIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZh
bHVlSW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1
bW4oKTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworCisgICAgICAgICAgICB2YXIgdmFsdWUg
PSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0
aDsKKyAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4IDwgdmFsdWVMZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUuY2hhckF0KHZhbHVlSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmIChjaHIgPT0gY2xvc2luZ0JyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVwdGggLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5S
b3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBp
dGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNr
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArPSAxOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQo
KTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVzdCh0b2tlbi50eXBl
KSk7CisKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICB2YWx1ZUluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKK30KK2V4cG9ydHMuQnJhY2tldE1hdGNoID0g
QnJhY2tldE1hdGNoOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3NlYXJjaCcsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvb29wJywg
J2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xp
Yi9vb3AiKTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIFNl
YXJjaCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJG9wdGlvbnMgPSB7fTsKK307CisKKyhmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnNldCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgb29w
Lm1peGluKHRoaXMuJG9wdGlvbnMsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIHRoaXMuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
bGFuZy5jb3B5T2JqZWN0KHRoaXMuJG9wdGlvbnMpOworICAgIH07CisgICAgdGhpcy5zZXRPcHRp
b25zID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9u
czsKKyAgICB9OworICAgIHRoaXMuZmluZCA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAg
dmFyIGl0ZXJhdG9yID0gdGhpcy4kbWF0Y2hJdGVyYXRvcihzZXNzaW9uLCB0aGlzLiRvcHRpb25z
KTsKKworICAgICAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHZhciBmaXJzdFJhbmdlID0gbnVsbDsKKyAgICAgICAgaXRlcmF0b3IuZm9yRWFj
aChmdW5jdGlvbihyYW5nZSwgcm93LCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICghcmFuZ2Uu
c3RhcnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gcmFuZ2Uub2Zmc2V0ICsgKG9m
ZnNldCB8fCAwKTsKKyAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gbmV3IFJhbmdlKHJvdywg
Y29sdW1uLCByb3csIGNvbHVtbityYW5nZS5sZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBmaXJzdFJhbmdlOworICAgIH07Cisg
ICAgdGhpcy5maW5kQWxsID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgb3B0aW9u
cyA9IHRoaXMuJG9wdGlvbnM7CisgICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpCisgICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIHRoaXMuJGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpOwor
CisgICAgICAgIHZhciByYW5nZSA9IG9wdGlvbnMucmFuZ2U7CisgICAgICAgIHZhciBsaW5lcyA9
IHJhbmdlCisgICAgICAgICAgICA/IHNlc3Npb24uZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCBy
YW5nZS5lbmQucm93KQorICAgICAgICAgICAgOiBzZXNzaW9uLmRvYy5nZXRBbGxMaW5lcygpOwor
CisgICAgICAgIHZhciByYW5nZXMgPSBbXTsKKyAgICAgICAgdmFyIHJlID0gb3B0aW9ucy5yZTsK
KyAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKSB7CisgICAgICAgICAgICB2YXIgbGVu
ID0gcmUubGVuZ3RoOworICAgICAgICAgICAgdmFyIG1heFJvdyA9IGxpbmVzLmxlbmd0aCAtIGxl
bjsKKyAgICAgICAgICAgIGZvciAodmFyIHJvdyA9IHJlLm9mZnNldCB8fCAwOyByb3cgPD0gbWF4
Um93OyByb3crKykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBq
KyspCisgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lc1tyb3cgKyBqXS5zZWFyY2gocmVbal0p
ID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGxpbmVzW3Jvd107CisgICAgICAgICAg
ICAgICAgdmFyIGxpbmUgPSBsaW5lc1tyb3cgKyBsZW4gLSAxXTsKKyAgICAgICAgICAgICAgICB2
YXIgc3RhcnRJbmRleCA9IHN0YXJ0TGluZS5tYXRjaChyZVswXSlbMF0ubGVuZ3RoOworICAgICAg
ICAgICAgICAgIHZhciBlbmRJbmRleCA9IGxpbmUubWF0Y2gocmVbbGVuIC0gMV0pWzBdLmxlbmd0
aDsKKworICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBSYW5nZSgKKyAgICAgICAgICAg
ICAgICAgICAgcm93LCBzdGFydExpbmUubGVuZ3RoIC0gc3RhcnRJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgcm93ICsgbGVuIC0gMSwgZW5kSW5kZXgKKyAgICAgICAgICAgICAgICApKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9
IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKGxpbmVzW2ldLCByZSk7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBtYXRjaCA9IG1hdGNoZXNbal07CisgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5w
dXNoKG5ldyBSYW5nZShpLCBtYXRjaC5vZmZzZXQsIGksIG1hdGNoLm9mZnNldCArIG1hdGNoLmxl
bmd0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gcmFuZ2Uu
c3RhcnQuY29sdW1uOworICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNv
bHVtbjsKKyAgICAgICAgICAgIHZhciBpID0gMCwgaiA9IHJhbmdlcy5sZW5ndGggLSAxOworICAg
ICAgICAgICAgd2hpbGUgKGkgPCBqICYmIHJhbmdlc1tpXS5zdGFydC5jb2x1bW4gPCBzdGFydENv
bHVtbiAmJiByYW5nZXNbaV0uc3RhcnQucm93ID09IHJhbmdlLnN0YXJ0LnJvdykKKyAgICAgICAg
ICAgICAgICBpKys7CisKKyAgICAgICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbal0uZW5k
LmNvbHVtbiA+IGVuZENvbHVtbiAmJiByYW5nZXNbal0uZW5kLnJvdyA9PSByYW5nZS5lbmQucm93
KQorICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIHJldHVybiByYW5nZXMuc2xpY2Uo
aSwgaiArIDEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJhbmdlczsKKyAgICB9Owor
ICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKGlucHV0LCByZXBsYWNlbWVudCkgeworICAgICAg
ICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7CisKKyAgICAgICAgdmFyIHJlID0gdGhpcy4k
YXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7CisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGlu
ZSkKKyAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKworICAgICAgICBpZiAoIXJlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9IHJlLmV4ZWMoaW5wdXQp
OworICAgICAgICBpZiAoIW1hdGNoIHx8IG1hdGNoWzBdLmxlbmd0aCAhPSBpbnB1dC5sZW5ndGgp
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHJlcGxhY2VtZW50
ID0gaW5wdXQucmVwbGFjZShyZSwgcmVwbGFjZW1lbnQpOworICAgICAgICBpZiAob3B0aW9ucy5w
cmVzZXJ2ZUNhc2UpIHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuc3Bs
aXQoIiIpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwg
aW5wdXQubGVuZ3RoKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSBpbnB1dFtp
XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2gudG9Mb3dlckNhc2UoKSAhPSBjaCkKKyAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b1VwcGVy
Q2FzZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5qb2luKCIiKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgIH07CisKKyAgICB0
aGlzLiRtYXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgeworICAgICAg
ICB2YXIgcmUgPSB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTsKKyAgICAgICAgaWYgKCFy
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXMs
IGNhbGxiYWNrLCBiYWNrd2FyZHMgPSBvcHRpb25zLmJhY2t3YXJkczsKKworICAgICAgICBpZiAo
b3B0aW9ucy4kaXNNdWx0aUxpbmUpIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSByZS5sZW5ndGg7
CisgICAgICAgICAgICB2YXIgbWF0Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKGxpbmUsIHJvdywgb2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBsaW5lLnNlYXJjaChyZVsw
XSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93ICsg
aSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLnNlYXJjaChyZVtpXSkgPT0gLTEpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gbGluZS5tYXRjaChyZVtsZW4gLSAxXSlbMF0ubGVu
Z3RoOworCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgc3RhcnRJ
bmRleCwgcm93ICsgbGVuIC0gMSwgZW5kSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZS5v
ZmZzZXQgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3ctLTsKKyAg
ICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gTnVtYmVyLk1BWF9WQUxVRTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAg
cmFuZ2Uuc3RhcnQuY29sdW1uICs9IG9mZnNldDsKKworICAgICAgICAgICAgICAgIGlmIChjYWxs
YmFjayhyYW5nZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSBlbHNlIGlmIChiYWNrd2FyZHMpIHsKKyAgICAgICAgICAgIHZhciBt
YXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24obGluZSwgcm93LCBzdGFydEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lLCByZSk7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1hdGNoZXMubGVuZ3RoLTE7IGkgPj0gMDsgaS0t
KQorICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobWF0Y2hlc1tpXSwgcm93LCBzdGFy
dEluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBtYXRjaEl0ZXJhdG9yID0g
ZnVuY3Rpb24obGluZSwgcm93LCBzdGFydEluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIG1h
dGNoZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lLCByZSk7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FsbGJhY2sobWF0Y2hlc1tpXSwgcm93LCBzdGFydEluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihfY2FsbGJh
Y2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IF9jYWxsYmFjazsKKyAgICAgICAgICAg
ICAgICBzZWxmLiRsaW5lSXRlcmF0b3Ioc2Vzc2lvbiwgb3B0aW9ucykuZm9yRWFjaChtYXRjaEl0
ZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworCisgICAgdGhpcy4k
YXNzZW1ibGVSZWdFeHAgPSBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25z
Lm5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cCkKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJl
ID0gb3B0aW9ucy5uZWVkbGU7CisKKyAgICAgICAgdmFyIG5lZWRsZSA9IG9wdGlvbnMubmVlZGxl
OworCisgICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpCisgICAgICAgICAgICByZXR1cm4gb3B0
aW9ucy5yZSA9IGZhbHNlOworCisgICAgICAgIGlmICghb3B0aW9ucy5yZWdFeHApCisgICAgICAg
ICAgICBuZWVkbGUgPSBsYW5nLmVzY2FwZVJlZ0V4cChuZWVkbGUpOworCisgICAgICAgIGlmIChv
cHRpb25zLndob2xlV29yZCkKKyAgICAgICAgICAgIG5lZWRsZSA9ICJcXGIiICsgbmVlZGxlICsg
IlxcYiI7CisKKyAgICAgICAgdmFyIG1vZGlmaWVyID0gb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8g
ImciIDogImdpIjsKKworICAgICAgICBvcHRpb25zLiRpc011bHRpTGluZSA9IC9bXG5ccl0vLnRl
c3QobmVlZGxlKTsKKyAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKQorICAgICAgICAg
ICAgcmV0dXJuIG9wdGlvbnMucmUgPSB0aGlzLiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cChuZWVk
bGUsIG1vZGlmaWVyKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHJlID0gbmV3
IFJlZ0V4cChuZWVkbGUsIG1vZGlmaWVyKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAg
ICAgICByZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0g
cmU7CisgICAgfTsKKworICAgIHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwID0gZnVuY3Rp
b24obmVlZGxlLCBtb2RpZmllcikgeworICAgICAgICB2YXIgcGFydHMgPSBuZWVkbGUucmVwbGFj
ZSgvXHJcbnxccnxcbi9nLCAiJFxuXiIpLnNwbGl0KCJcbiIpOworICAgICAgICB2YXIgcmUgPSBb
XTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgdHJ5IHsK
KyAgICAgICAgICAgIHJlLnB1c2gobmV3IFJlZ0V4cChwYXJ0c1tpXSwgbW9kaWZpZXIpKTsKKyAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBhcnRzWzBdID09ICIiKSB7CisgICAgICAgICAgICByZS5zaGlmdCgpOwor
ICAgICAgICAgICAgcmUub2Zmc2V0ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJlLm9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlOworICAgIH07CisK
KyAgICB0aGlzLiRsaW5lSXRlcmF0b3IgPSBmdW5jdGlvbihzZXNzaW9uLCBvcHRpb25zKSB7Cisg
ICAgICAgIHZhciBiYWNrd2FyZHMgPSBvcHRpb25zLmJhY2t3YXJkcyA9PSB0cnVlOworICAgICAg
ICB2YXIgc2tpcEN1cnJlbnQgPSBvcHRpb25zLnNraXBDdXJyZW50ICE9IGZhbHNlOworCisgICAg
ICAgIHZhciByYW5nZSA9IG9wdGlvbnMucmFuZ2U7CisgICAgICAgIHZhciBzdGFydCA9IG9wdGlv
bnMuc3RhcnQ7CisgICAgICAgIGlmICghc3RhcnQpCisgICAgICAgICAgICBzdGFydCA9IHJhbmdl
ID8gcmFuZ2VbYmFja3dhcmRzID8gImVuZCIgOiAic3RhcnQiXSA6IHNlc3Npb24uc2VsZWN0aW9u
LmdldFJhbmdlKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0LnN0YXJ0KQorICAgICAg
ICAgICAgc3RhcnQgPSBzdGFydFtza2lwQ3VycmVudCAhPSBiYWNrd2FyZHMgPyAiZW5kIiA6ICJz
dGFydCJdOworCisgICAgICAgIHZhciBmaXJzdFJvdyA9IHJhbmdlID8gcmFuZ2Uuc3RhcnQucm93
IDogMDsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSByYW5nZSA/IHJhbmdlLmVuZC5yb3cgOiBzZXNz
aW9uLmdldExlbmd0aCgpIC0gMTsKKworICAgICAgICB2YXIgZm9yRWFjaCA9IGJhY2t3YXJkcyA/
IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHN0YXJ0LnJv
dzsKKworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vi
c3RyaW5nKDAsIHN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGxp
bmUsIHJvdykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
IGZvciAocm93LS07IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pCisgICAgICAgICAgICAgICAgICAg
IGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUocm93KSwgcm93KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAgPT0g
ZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGZv
ciAocm93ID0gbGFzdFJvdywgZmlyc3RSb3cgPSBzdGFydC5yb3c7IHJvdyA+PSBmaXJzdFJvdzsg
cm93LS0pCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUo
cm93KSwgcm93KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0gOiBmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFy
dC5yb3c7CisKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cp
LnN1YnN0cihzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhsaW5l
LCByb3csIHN0YXJ0LmNvbHVtbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIGZvciAocm93ID0gcm93KzE7IHJvdyA8PSBsYXN0Um93OyByb3crKykKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNlc3Npb24uZ2V0TGluZShyb3cpLCByb3cp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYg
KG9wdGlvbnMud3JhcCA9PSBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAgICAgZm9yIChyb3cgPSBmaXJzdFJvdywgbGFzdFJvdyA9IHN0YXJ0LnJvdzsg
cm93IDw9IGxhc3RSb3c7IHJvdysrKQorICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2so
c2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHtmb3JFYWNoOiBm
b3JFYWNofTsKKyAgICB9OworCit9KS5jYWxsKFNlYXJjaC5wcm90b3R5cGUpOworCitleHBvcnRz
LlNlYXJjaCA9IFNlYXJjaDsKK30pOworYWNlLmRlZmluZSgnYWNlL2NvbW1hbmRzL2NvbW1hbmRf
bWFuYWdlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3An
LCAnYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlcicsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVp
cmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4uL2tleWJvYXJk
L2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUo
Ii4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgQ29tbWFuZE1hbmFn
ZXIgPSBmdW5jdGlvbihwbGF0Zm9ybSwgY29tbWFuZHMpIHsKKyAgICB0aGlzLnBsYXRmb3JtID0g
cGxhdGZvcm07CisgICAgdGhpcy5jb21tYW5kcyA9IHRoaXMuYnlOYW1lID0ge307CisgICAgdGhp
cy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsKKworICAgIHRoaXMuYWRkQ29tbWFuZHMoY29tbWFu
ZHMpOworICAgIAorICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoImV4ZWMiLCBmdW5jdGlvbihl
KSB7CisgICAgICAgIHJldHVybiBlLmNvbW1hbmQuZXhlYyhlLmVkaXRvciwgZS5hcmdzIHx8IHt9
KTsKKyAgICB9KTsKK307CisKK29vcC5pbmhlcml0cyhDb21tYW5kTWFuYWdlciwgSGFzaEhhbmRs
ZXIpOworCisoZnVuY3Rpb24oKSB7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1p
dHRlcik7CisKKyAgICB0aGlzLmV4ZWMgPSBmdW5jdGlvbihjb21tYW5kLCBlZGl0b3IsIGFyZ3Mp
IHsKKyAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJykKKyAgICAgICAgICAg
IGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmRdOworCisgICAgICAgIGlmICghY29tbWFu
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoZWRpdG9yICYmIGVk
aXRvci4kcmVhZE9ubHkgJiYgIWNvbW1hbmQucmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgdmFyIHJldHZhbHVlID0gdGhpcy5fZW1pdCgiZXhlYyIsIHsKKyAg
ICAgICAgICAgIGVkaXRvcjogZWRpdG9yLAorICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZCwK
KyAgICAgICAgICAgIGFyZ3M6IGFyZ3MKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJl
dHZhbHVlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy50b2dn
bGVSZWNvcmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgaWYgKHRoaXMuJGluUmVw
bGF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVkaXRvciAmJiBlZGl0b3IuX2Vt
aXQoImNoYW5nZVN0YXR1cyIpOworICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmcpIHsKKyAgICAg
ICAgICAgIHRoaXMubWFjcm8ucG9wKCk7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlz
dGVuZXIoImV4ZWMiLCB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyk7CisKKyAgICAgICAgICAgIGlm
ICghdGhpcy5tYWNyby5sZW5ndGgpCisgICAgICAgICAgICAgICAgdGhpcy5tYWNybyA9IHRoaXMu
b2xkTWFjcm87CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pIHsKKyAgICAg
ICAgICAgIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvID0gZnVuY3Rpb24oZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMubWFjcm8ucHVzaChbZS5jb21tYW5kLCBlLmFyZ3NdKTsKKyAgICAgICAgICAg
IH0uYmluZCh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMub2xkTWFjcm8gPSB0aGlz
Lm1hY3JvOworICAgICAgICB0aGlzLm1hY3JvID0gW107CisgICAgICAgIHRoaXMub24oImV4ZWMi
LCB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyk7CisgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGlu
ZyA9IHRydWU7CisgICAgfTsKKworICAgIHRoaXMucmVwbGF5ID0gZnVuY3Rpb24oZWRpdG9yKSB7
CisgICAgICAgIGlmICh0aGlzLiRpblJlcGxheSB8fCAhdGhpcy5tYWNybykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmcpCisgICAgICAgICAgICByZXR1
cm4gdGhpcy50b2dnbGVSZWNvcmRpbmcoZWRpdG9yKTsKKworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgdGhpcy4kaW5SZXBsYXkgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5tYWNyby5mb3JF
YWNoKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHggPT0gInN0cmlu
ZyIpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4LCBlZGl0b3IpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjKHhbMF0sIGVkaXRvciwg
eFsxXSk7CisgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgIHRoaXMuJGluUmVwbGF5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy50cmltTWFjcm8gPSBmdW5jdGlvbihtKSB7CisgICAgICAgIHJldHVybiBtLm1hcChmdW5j
dGlvbih4KXsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgeFswXSAhPSAic3RyaW5nIikKKyAgICAg
ICAgICAgICAgICB4WzBdID0geFswXS5uYW1lOworICAgICAgICAgICAgaWYgKCF4WzFdKQorICAg
ICAgICAgICAgICAgIHggPSB4WzBdOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0p
OworICAgIH07CisKK30pLmNhbGwoQ29tbWFuZE1hbmFnZXIucHJvdG90eXBlKTsKKworZXhwb3J0
cy5Db21tYW5kTWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyOworCit9KTsKKworYWNlLmRlZmluZSgn
YWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgLCAnYWNlL2xpYi9rZXlzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBrZXlVdGlsICA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7CisKK2Z1bmN0aW9u
IEhhc2hIYW5kbGVyKGNvbmZpZywgcGxhdGZvcm0pIHsKKyAgICB0aGlzLnBsYXRmb3JtID0gcGxh
dGZvcm07CisgICAgdGhpcy5jb21tYW5kcyA9IHt9OworICAgIHRoaXMuY29tbW1hbmRLZXlCaW5k
aW5nID0ge307CisKKyAgICB0aGlzLmFkZENvbW1hbmRzKGNvbmZpZyk7Cit9OworCisoZnVuY3Rp
b24oKSB7CisKKyAgICB0aGlzLmFkZENvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKSB7CisgICAg
ICAgIGlmICh0aGlzLmNvbW1hbmRzW2NvbW1hbmQubmFtZV0pCisgICAgICAgICAgICB0aGlzLnJl
bW92ZUNvbW1hbmQoY29tbWFuZCk7CisKKyAgICAgICAgdGhpcy5jb21tYW5kc1tjb21tYW5kLm5h
bWVdID0gY29tbWFuZDsKKworICAgICAgICBpZiAoY29tbWFuZC5iaW5kS2V5KQorICAgICAgICAg
ICAgdGhpcy5fYnVpbGRLZXlIYXNoKGNvbW1hbmQpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92
ZUNvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKSB7CisgICAgICAgIHZhciBuYW1lID0gKHR5cGVv
ZiBjb21tYW5kID09PSAnc3RyaW5nJyA/IGNvbW1hbmQgOiBjb21tYW5kLm5hbWUpOworICAgICAg
ICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1tuYW1lXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuY29t
bWFuZHNbbmFtZV07CisgICAgICAgIHZhciBja2IgPSB0aGlzLmNvbW1tYW5kS2V5QmluZGluZzsK
KyAgICAgICAgZm9yICh2YXIgaGFzaElkIGluIGNrYikgeworICAgICAgICAgICAgZm9yICh2YXIg
a2V5IGluIGNrYltoYXNoSWRdKSB7CisgICAgICAgICAgICAgICAgaWYgKGNrYltoYXNoSWRdW2tl
eV0gPT0gY29tbWFuZCkKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNrYltoYXNoSWRdW2tl
eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5iaW5kS2V5
ID0gZnVuY3Rpb24oa2V5LCBjb21tYW5kKSB7CisgICAgICAgIGlmKCFrZXkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PSAiZnVuY3Rpb24iKSB7Cisg
ICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoe2V4ZWM6IGNvbW1hbmQsIGJpbmRLZXk6IGtleSwg
bmFtZToga2V5fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2
YXIgY2tiID0gdGhpcy5jb21tbWFuZEtleUJpbmRpbmc7CisgICAgICAgIGtleS5zcGxpdCgifCIp
LmZvckVhY2goZnVuY3Rpb24oa2V5UGFydCkgeworICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSB0
aGlzLnBhcnNlS2V5cyhrZXlQYXJ0LCBjb21tYW5kKTsKKyAgICAgICAgICAgIHZhciBoYXNoSWQg
PSBiaW5kaW5nLmhhc2hJZDsKKyAgICAgICAgICAgIChja2JbaGFzaElkXSB8fCAoY2tiW2hhc2hJ
ZF0gPSB7fSkpW2JpbmRpbmcua2V5XSA9IGNvbW1hbmQ7CisgICAgICAgIH0sIHRoaXMpOworICAg
IH07CisKKyAgICB0aGlzLmFkZENvbW1hbmRzID0gZnVuY3Rpb24oY29tbWFuZHMpIHsKKyAgICAg
ICAgY29tbWFuZHMgJiYgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2goZnVuY3Rpb24obmFt
ZSkgeworICAgICAgICAgICAgdmFyIGNvbW1hbmQgPSBjb21tYW5kc1tuYW1lXTsKKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gInN0cmluZyIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuYmluZEtleShjb21tYW5kLCBuYW1lKTsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBjb21tYW5kID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIGNvbW1hbmQgPSB7IGV4
ZWM6IGNvbW1hbmQgfTsKKworICAgICAgICAgICAgaWYgKCFjb21tYW5kLm5hbWUpCisgICAgICAg
ICAgICAgICAgY29tbWFuZC5uYW1lID0gbmFtZTsKKworICAgICAgICAgICAgdGhpcy5hZGRDb21t
YW5kKGNvbW1hbmQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgICAgdGhpcy5yZW1v
dmVDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7CisgICAgICAgIE9iamVjdC5rZXlzKGNv
bW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMucmVtb3Zl
Q29tbWFuZChjb21tYW5kc1tuYW1lXSk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAg
ICB0aGlzLmJpbmRLZXlzID0gZnVuY3Rpb24oa2V5TGlzdCkgeworICAgICAgICBPYmplY3Qua2V5
cyhrZXlMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAgdGhpcy5iaW5k
S2V5KGtleSwga2V5TGlzdFtrZXldKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAg
IHRoaXMuX2J1aWxkS2V5SGFzaCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKKyAgICAgICAgdmFyIGJp
bmRpbmcgPSBjb21tYW5kLmJpbmRLZXk7CisgICAgICAgIGlmICghYmluZGluZykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGJpbmRpbmcgPT0gInN0cmlu
ZyIgPyBiaW5kaW5nOiBiaW5kaW5nW3RoaXMucGxhdGZvcm1dOworICAgICAgICB0aGlzLmJpbmRL
ZXkoa2V5LCBjb21tYW5kKTsKKyAgICB9OworICAgIHRoaXMucGFyc2VLZXlzID0gZnVuY3Rpb24o
a2V5cykgeworICAgICAgICB2YXIgcGFydHMgPSBrZXlzLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tc
LVwrXShbXC1cK10pPy8pLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geH0pOworICAgICAgICB2
YXIga2V5ID0gcGFydHMucG9wKCk7CisKKyAgICAgICAgdmFyIGtleUNvZGUgPSBrZXlVdGlsW2tl
eV07CisgICAgICAgIGlmIChrZXlVdGlsLkZVTkNUSU9OX0tFWVNba2V5Q29kZV0pCisgICAgICAg
ICAgICBrZXkgPSBrZXlVdGlsLkZVTkNUSU9OX0tFWVNba2V5Q29kZV0udG9Mb3dlckNhc2UoKTsK
KyAgICAgICAgZWxzZSBpZiAoIXBhcnRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiB7a2V5
OiBrZXksIGhhc2hJZDogLTF9OworICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMSAm
JiBwYXJ0c1swXSA9PSAic2hpZnQiKQorICAgICAgICAgICAgcmV0dXJuIHtrZXk6IGtleS50b1Vw
cGVyQ2FzZSgpLCBoYXNoSWQ6IC0xfTsKKworICAgICAgICB2YXIgaGFzaElkID0gMDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgdmFyIG1v
ZGlmaWVyID0ga2V5VXRpbC5LRVlfTU9EU1twYXJ0c1tpXV07CisgICAgICAgICAgICBpZiAobW9k
aWZpZXIgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiaW52YWxpZCBtb2RpZmllciAi
ICsgcGFydHNbaV0gKyAiIGluICIgKyBrZXlzOworICAgICAgICAgICAgaGFzaElkIHw9IG1vZGlm
aWVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7a2V5OiBrZXksIGhhc2hJZDogaGFzaElk
fTsKKyAgICB9OworCisgICAgdGhpcy5maW5kS2V5Q29tbWFuZCA9IGZ1bmN0aW9uIGZpbmRLZXlD
b21tYW5kKGhhc2hJZCwga2V5U3RyaW5nKSB7CisgICAgICAgIHZhciBja2JyID0gdGhpcy5jb21t
bWFuZEtleUJpbmRpbmc7CisgICAgICAgIHJldHVybiBja2JyW2hhc2hJZF0gJiYgY2ticltoYXNo
SWRdW2tleVN0cmluZ107CisgICAgfTsKKworICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmQgPSBmdW5j
dGlvbihkYXRhLCBoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgY29tbWFuZDogdGhpcy5maW5kS2V5Q29tbWFuZChoYXNoSWQsIGtleVN0
cmluZykKKyAgICAgICAgfTsKKyAgICB9OworCit9KS5jYWxsKEhhc2hIYW5kbGVyLnByb3RvdHlw
ZSkKKworZXhwb3J0cy5IYXNoSGFuZGxlciA9IEhhc2hIYW5kbGVyOworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9s
YW5nIik7Cit2YXIgY29uZmlnID0gcmVxdWlyZSgiLi4vY29uZmlnIik7CisKK2Z1bmN0aW9uIGJp
bmRLZXkod2luLCBtYWMpIHsKKyAgICByZXR1cm4geworICAgICAgICB3aW46IHdpbiwKKyAgICAg
ICAgbWFjOiBtYWMKKyAgICB9OworfQorCitleHBvcnRzLmNvbW1hbmRzID0gW3sKKyAgICBuYW1l
OiAic2VsZWN0YWxsIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUEiLCAiQ29tbWFuZC1B
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RBbGwoKTsgfSwK
KyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJjZW50ZXJzZWxlY3Rpb24iLAor
ICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgIkN0cmwtTCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IuY2VudGVyU2VsZWN0aW9uKCk7IH0sCisgICAgcmVhZE9ubHk6IHRy
dWUKK30sIHsKKyAgICBuYW1lOiAiZ290b2xpbmUiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0
cmwtTCIsICJDb21tYW5kLUwiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAg
ICAgdmFyIGxpbmUgPSBwYXJzZUludChwcm9tcHQoIkVudGVyIGxpbmUgbnVtYmVyOiIpLCAxMCk7
CisgICAgICAgIGlmICghaXNOYU4obGluZSkpIHsKKyAgICAgICAgICAgIGVkaXRvci5nb3RvTGlu
ZShsaW5lKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAg
ICBuYW1lOiAiZm9sZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LUx8Q3RybC1GMSIsICJD
b21tYW5kLUFsdC1MfENvbW1hbmQtRjEiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZChmYWxzZSk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUK
K30sIHsKKyAgICBuYW1lOiAidW5mb2xkIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtU2hp
ZnQtTHxDdHJsLVNoaWZ0LUYxIiwgIkNvbW1hbmQtQWx0LVNoaWZ0LUx8Q29tbWFuZC1TaGlmdC1G
MSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi50b2dnbGVG
b2xkKHRydWUpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImZvbGRh
bGwiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC0wIiwgIkNvbW1hbmQtT3B0aW9uLTAiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpOyB9
LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInVuZm9sZGFsbCIsCisgICAg
YmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LTAiLCAiQ29tbWFuZC1PcHRpb24tU2hpZnQtMCIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi51bmZvbGQoKTsg
fSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJmaW5kbmV4dCIsCisgICAg
YmluZEtleTogYmluZEtleSgiQ3RybC1LIiwgIkNvbW1hbmQtRyIpLAorICAgIGV4ZWM6IGZ1bmN0
aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZE5leHQoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQor
fSwgeworICAgIG5hbWU6ICJmaW5kcHJldmlvdXMiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0
cmwtU2hpZnQtSyIsICJDb21tYW5kLVNoaWZ0LUciKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmZpbmRQcmV2aW91cygpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7
CisgICAgbmFtZTogImZpbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRiIsICJDb21t
YW5kLUYiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgY29uZmlnLmxv
YWRNb2R1bGUoImFjZS9leHQvc2VhcmNoYm94IiwgZnVuY3Rpb24oZSkge2UuU2VhcmNoKGVkaXRv
cil9KTsKKyAgICB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogIm92ZXJ3
cml0ZSIsCisgICAgYmluZEtleTogIkluc2VydCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci50b2dnbGVPdmVyd3JpdGUoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3R0b3N0YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LVNoaWZ0LUhvbWUiLCAiQ29tbWFuZC1TaGlmdC1VcCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZVN0YXJ0KCk7IH0sCisgICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgewor
ICAgIG5hbWU6ICJnb3Rvc3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtSG9tZSIs
ICJDb21tYW5kLUhvbWV8Q29tbWFuZC1VcCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3IubmF2aWdhdGVGaWxlU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjog
ImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHVw
IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1VcCIsICJTaGlmdC1VcCIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0VXAoKTsg
fSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVl
Cit9LCB7CisgICAgbmFtZTogImdvbGluZXVwIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJVcCIs
ICJVcHxDdHJsLVAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9y
Lm5hdmlnYXRlVXAoYXJncy50aW1lcyk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R0b2VuZCIs
CisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1FbmQiLCAiQ29tbWFuZC1TaGlmdC1E
b3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24o
KS5zZWxlY3RGaWxlRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwK
KyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvZW5kIiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJDdHJsLUVuZCIsICJDb21tYW5kLUVuZHxDb21tYW5kLURvd24iKSwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm5hdmlnYXRlRmlsZUVuZCgpOyB9LAor
ICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30s
IHsKKyAgICBuYW1lOiAic2VsZWN0ZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQt
RG93biIsICJTaGlmdC1Eb3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5nZXRTZWxlY3Rpb24oKS5zZWxlY3REb3duKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb2xpbmVk
b3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJEb3duIiwgIkRvd258Q3RybC1OIiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZURvd24oYXJncy50
aW1lcyk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25s
eTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R3b3JkbGVmdCIsCisgICAgYmluZEtleTog
YmluZEtleSgiQ3RybC1TaGlmdC1MZWZ0IiwgIk9wdGlvbi1TaGlmdC1MZWZ0IiksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVm
dCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3dvcmRsZWZ0IiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KCJDdHJsLUxlZnQiLCAiT3B0aW9uLUxlZnQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLm5hdmlnYXRlV29yZExlZnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVj
dHRvbGluZXN0YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtU2hpZnQtTGVmdCIsICJD
b21tYW5kLVNoaWZ0LUxlZnQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9y
LmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290
b2xpbmVzdGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LUxlZnR8SG9tZSIsICJDb21t
YW5kLUxlZnR8SG9tZXxDdHJsLUEiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLm5hdmlnYXRlTGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RsZWZ0IiwK
KyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1MZWZ0IiwgIlNoaWZ0LUxlZnQiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExlZnQo
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9sZWZ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJM
ZWZ0IiwgIkxlZnR8Q3RybC1CIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7
IGVkaXRvci5uYXZpZ2F0ZUxlZnQoYXJncy50aW1lcyk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxl
Y3R3b3JkcmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtUmlnaHQiLCAi
T3B0aW9uLVNoaWZ0LVJpZ2h0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkUmlnaHQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFj
dGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdv
dG93b3JkcmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtUmlnaHQiLCAiT3B0aW9u
LVJpZ2h0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZVdv
cmRSaWdodCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9saW5lZW5kIiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJBbHQtU2hpZnQtUmlnaHQiLCAiQ29tbWFuZC1TaGlmdC1SaWdodCIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0
TGluZUVuZCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVh
ZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b2xpbmVlbmQiLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkFsdC1SaWdodHxFbmQiLCAiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FIiksCisg
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUxpbmVFbmQoKTsgfSwK
KyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogInNlbGVjdHJpZ2h0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlm
dC1SaWdodCIsICJTaGlmdC1SaWdodCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0UmlnaHQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFj
dGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdv
dG9yaWdodCIsCisgICAgYmluZEtleTogYmluZEtleSgiUmlnaHQiLCAiUmlnaHR8Q3RybC1GIiks
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZVJpZ2h0
KGFyZ3MudGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAg
cmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0cGFnZWRvd24iLAorICAgIGJp
bmRLZXk6ICJTaGlmdC1QYWdlRG93biIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5zZWxlY3RQYWdlRG93bigpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAg
bmFtZTogInBhZ2Vkb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJPcHRpb24tUGFn
ZURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNjcm9sbFBhZ2VE
b3duKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b3BhZ2Vk
b3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJQYWdlRG93biIsICJQYWdlRG93bnxDdHJsLVYi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlRG93bigpOyB9
LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHBhZ2V1cCIsCisg
ICAgYmluZEtleTogIlNoaWZ0LVBhZ2VVcCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5zZWxlY3RQYWdlVXAoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJwYWdldXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgIk9wdGlvbi1QYWdl
VXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNjcm9sbFBhZ2VVcCgp
OyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9wYWdldXAiLAor
ICAgIGJpbmRLZXk6ICJQYWdlVXAiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuZ290b1BhZ2VVcCgpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTog
InNjcm9sbHVwIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVVwIiwgbnVsbCksCisgICAg
ZXhlYzogZnVuY3Rpb24oZSkgeyBlLnJlbmRlcmVyLnNjcm9sbEJ5KDAsIC0yICogZS5yZW5kZXJl
ci5sYXllckNvbmZpZy5saW5lSGVpZ2h0KTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgewor
ICAgIG5hbWU6ICJzY3JvbGxkb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLURvd24i
LCBudWxsKSwKKyAgICBleGVjOiBmdW5jdGlvbihlKSB7IGUucmVuZGVyZXIuc2Nyb2xsQnkoMCwg
MiAqIGUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0bGluZXN0YXJ0IiwKKyAgICBiaW5kS2V5OiAi
U2hpZnQtSG9tZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxl
Y3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZv
ckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdGxpbmVl
bmQiLAorICAgIGJpbmRLZXk6ICJTaGlmdC1FbmQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZUVuZCgpOyB9LAorICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBu
YW1lOiAidG9nZ2xlcmVjb3JkaW5nIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUFsdC1F
IiwgIkNvbW1hbmQtT3B0aW9uLUUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLmNvbW1hbmRzLnRvZ2dsZVJlY29yZGluZyhlZGl0b3IpOyB9LAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogInJlcGxheW1hY3JvIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLVNoaWZ0LUUiLCAiQ29tbWFuZC1TaGlmdC1FIiksCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5jb21tYW5kcy5yZXBsYXkoZWRpdG9yKTsgfSwKKyAgICByZWFkT25s
eTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJqdW1wdG9tYXRjaGluZyIsCisgICAgYmluZEtleTog
YmluZEtleSgiQ3RybC1QIiwgIkN0cmwtU2hpZnQtUCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuanVtcFRvTWF0Y2hpbmcoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVj
dHRvbWF0Y2hpbmciLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtUCIsIG51bGwp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuanVtcFRvTWF0Y2hpbmcodHJ1
ZSk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIAoreworICAgIG5hbWU6ICJjdXQiLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuZ2V0
U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgZWRpdG9yLl9lbWl0KCJjdXQiLCByYW5nZSk7CisK
KyAgICAgICAgaWYgKCFlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgICAgIGVkaXRvci5jbGVhclNl
bGVjdGlvbigpOworICAgICAgICB9CisgICAgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZv
ckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92ZWxpbmUiLAorICAgIGJpbmRLZXk6IGJpbmRL
ZXkoIkN0cmwtRCIsICJDb21tYW5kLUQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLnJlbW92ZUxpbmVzKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNo
IgorfSwgeworICAgIG5hbWU6ICJkdXBsaWNhdGVTZWxlY3Rpb24iLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIkN0cmwtU2hpZnQtRCIsICJDb21tYW5kLVNoaWZ0LUQiKSwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLmR1cGxpY2F0ZVNlbGVjdGlvbigpOyB9LAorICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAic29ydGxpbmVzIiwKKyAg
ICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUFsdC1TIiwgIkNvbW1hbmQtQWx0LVMiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNvcnRMaW5lcygpOyB9LAorICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAidG9nZ2xlY29tbWVudCIs
CisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC0vIiwgIkNvbW1hbmQtLyIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlQ29tbWVudExpbmVzKCk7IH0sCisgICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJtb2RpZnlOdW1i
ZXJVcCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1VcCIsICJBbHQtU2hpZnQt
VXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vZGlmeU51bWJlcigx
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTog
Im1vZGlmeU51bWJlckRvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRG93
biIsICJBbHQtU2hpZnQtRG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IubW9kaWZ5TnVtYmVyKC0xKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2gi
Cit9LCB7CisgICAgbmFtZTogInJlcGxhY2UiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwt
SCIsICJDb21tYW5kLU9wdGlvbi1GIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7Cisg
ICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsIGZ1bmN0aW9uKGUp
IHtlLlNlYXJjaChlZGl0b3IsIHRydWUpfSk7CisgICAgfQorfSwgeworICAgIG5hbWU6ICJ1bmRv
IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVoiLCAiQ29tbWFuZC1aIiksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci51bmRvKCk7IH0KK30sIHsKKyAgICBuYW1lOiAi
cmVkbyIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1afEN0cmwtWSIsICJDb21t
YW5kLVNoaWZ0LVp8Q29tbWFuZC1ZIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5yZWRvKCk7IH0KK30sIHsKKyAgICBuYW1lOiAiY29weWxpbmVzdXAiLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1VcCIsICJDb21tYW5kLU9wdGlvbi1VcCIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzVXAoKTsgfQorfSwgeworICAg
IG5hbWU6ICJtb3ZlbGluZXN1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVVwIiwgIk9w
dGlvbi1VcCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW92ZUxpbmVz
VXAoKTsgfQorfSwgeworICAgIG5hbWU6ICJjb3B5bGluZXNkb3duIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJBbHQtU2hpZnQtRG93biIsICJDb21tYW5kLU9wdGlvbi1Eb3duIiksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb3B5TGluZXNEb3duKCk7IH0KK30sIHsKKyAg
ICBuYW1lOiAibW92ZWxpbmVzZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LURvd24i
LCAiT3B0aW9uLURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1v
dmVMaW5lc0Rvd24oKTsgfQorfSwgeworICAgIG5hbWU6ICJkZWwiLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIkRlbGV0ZSIsICJEZWxldGV8Q3RybC1EIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5yZW1vdmUoInJpZ2h0Iik7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJiYWNrc3BhY2UiLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoCisgICAgICAgICJDb21tYW5kLUJhY2tzcGFjZXxPcHRpb24tQmFja3NwYWNlfFNoaWZ0
LUJhY2tzcGFjZXxCYWNrc3BhY2UiLAorICAgICAgICAiQ3RybC1CYWNrc3BhY2V8Q29tbWFuZC1C
YWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZXxDdHJsLUgiCisgICAgKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZSgibGVmdCIpOyB9LAorICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAicmVtb3ZldG9saW5l
c3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1CYWNrc3BhY2UiLCAiQ29tbWFuZC1C
YWNrc3BhY2UiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRv
TGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgewor
ICAgIG5hbWU6ICJyZW1vdmV0b2xpbmVlbmQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1E
ZWxldGUiLCAiQ3RybC1LIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5y
ZW1vdmVUb0xpbmVFbmQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9
LCB7CisgICAgbmFtZTogInJlbW92ZXdvcmRsZWZ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLUJhY2tzcGFjZSIsICJBbHQtQmFja3NwYWNlfEN0cmwtQWx0LUJhY2tzcGFjZSIpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlV29yZExlZnQoKTsgfSwKKyAg
ICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92ZXdv
cmRyaWdodCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1EZWxldGUiLCAiQWx0LURlbGV0
ZSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlV29yZFJpZ2h0
KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6
ICJvdXRkZW50IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1UYWIiLCAiU2hpZnQtVGFi
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja091dGRlbnQoKTsg
fSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogImlu
ZGVudCIsCisgICAgYmluZEtleTogYmluZEtleSgiVGFiIiwgIlRhYiIpLAorICAgIGV4ZWM6IGZ1
bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuaW5kZW50KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIgorfSx7CisgICAgbmFtZTogImJsb2Nrb3V0ZGVudCIsCisgICAgYmluZEtl
eTogYmluZEtleSgiQ3RybC1bIiwgIkN0cmwtWyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IuYmxvY2tPdXRkZW50KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIgorfSx7CisgICAgbmFtZTogImJsb2NraW5kZW50IiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KCJDdHJsLV0iLCAiQ3RybC1dIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5ibG9ja0luZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIK
K30sIHsKKyAgICBuYW1lOiAiaW5zZXJ0c3RyaW5nIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IsIHN0cikgeyBlZGl0b3IuaW5zZXJ0KHN0cik7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJpbnNlcnR0ZXh0IiwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IsIGFyZ3MpIHsKKyAgICAgICAgZWRpdG9yLmluc2VydChsYW5nLnN0cmluZ1Jl
cGVhdChhcmdzLnRleHQgIHx8ICIiLCBhcmdzLnRpbWVzIHx8IDEpKTsKKyAgICB9LAorICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAic3BsaXRsaW5lIiwK
KyAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJDdHJsLU8iKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLnNwbGl0TGluZSgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAidHJhbnNwb3NlbGV0dGVycyIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1UIiwgIkN0cmwtVCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IudHJhbnNwb3NlTGV0dGVycygpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiBmdW5jdGlvbihlZGl0b3IpIHtlZGl0b3IudHJhbnNwb3NlU2VsZWN0aW9ucygxKTsgfQor
fSwgeworICAgIG5hbWU6ICJ0b3VwcGVyY2FzZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3Ry
bC1VIiwgIkN0cmwtVSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9V
cHBlckNhc2UoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7Cisg
ICAgbmFtZTogInRvbG93ZXJjYXNlIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0
LVUiLCAiQ3RybC1TaGlmdC1VIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci50b0xvd2VyQ2FzZSgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK31d
OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3VuZG9tYW5hZ2VyJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
K3ZhciBVbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMucmVzZXQoKTsKK307CisK
KyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLmV4ZWN1dGUgPSBmdW5jdGlvbihvcHRpb25zKSB7Cisg
ICAgICAgIHZhciBkZWx0YXMgPSBvcHRpb25zLmFyZ3NbMF07CisgICAgICAgIHRoaXMuJGRvYyAg
PSBvcHRpb25zLmFyZ3NbMV07CisgICAgICAgIHRoaXMuJHVuZG9TdGFjay5wdXNoKGRlbHRhcyk7
CisgICAgICAgIHRoaXMuJHJlZG9TdGFjayA9IFtdOworICAgIH07CisgICAgdGhpcy51bmRvID0g
ZnVuY3Rpb24oZG9udFNlbGVjdCkgeworICAgICAgICB2YXIgZGVsdGFzID0gdGhpcy4kdW5kb1N0
YWNrLnBvcCgpOworICAgICAgICB2YXIgdW5kb1NlbGVjdGlvblJhbmdlID0gbnVsbDsKKyAgICAg
ICAgaWYgKGRlbHRhcykgeworICAgICAgICAgICAgdW5kb1NlbGVjdGlvblJhbmdlID0KKyAgICAg
ICAgICAgICAgICB0aGlzLiRkb2MudW5kb0NoYW5nZXMoZGVsdGFzLCBkb250U2VsZWN0KTsKKyAg
ICAgICAgICAgIHRoaXMuJHJlZG9TdGFjay5wdXNoKGRlbHRhcyk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHVuZG9TZWxlY3Rpb25SYW5nZTsKKyAgICB9OworICAgIHRoaXMucmVkbyA9IGZ1
bmN0aW9uKGRvbnRTZWxlY3QpIHsKKyAgICAgICAgdmFyIGRlbHRhcyA9IHRoaXMuJHJlZG9TdGFj
ay5wb3AoKTsKKyAgICAgICAgdmFyIHJlZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7CisgICAgICAg
IGlmIChkZWx0YXMpIHsKKyAgICAgICAgICAgIHJlZG9TZWxlY3Rpb25SYW5nZSA9CisgICAgICAg
ICAgICAgICAgdGhpcy4kZG9jLnJlZG9DaGFuZ2VzKGRlbHRhcywgZG9udFNlbGVjdCk7CisgICAg
ICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZWRvU2VsZWN0aW9uUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlc2V0ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuJHVuZG9TdGFjayA9IFtdOworICAgICAgICB0aGlzLiRy
ZWRvU3RhY2sgPSBbXTsKKyAgICB9OworICAgIHRoaXMuaGFzVW5kbyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kdW5kb1N0YWNrLmxlbmd0aCA+IDA7CisgICAgfTsKKyAgICB0
aGlzLmhhc1JlZG8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJlZG9TdGFj
ay5sZW5ndGggPiAwOworICAgIH07CisKK30pLmNhbGwoVW5kb01hbmFnZXIucHJvdG90eXBlKTsK
KworZXhwb3J0cy5VbmRvTWFuYWdlciA9IFVuZG9NYW5hZ2VyOworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS92aXJ0dWFsX3JlbmRlcmVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL29vcCcsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIv
dXNlcmFnZW50JywgJ2FjZS9jb25maWcnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xheWVyL2d1dHRl
cicsICdhY2UvbGF5ZXIvbWFya2VyJywgJ2FjZS9sYXllci90ZXh0JywgJ2FjZS9sYXllci9jdXJz
b3InLCAnYWNlL3Njcm9sbGJhcicsICdhY2UvcmVuZGVybG9vcCcsICdhY2UvbGliL2V2ZW50X2Vt
aXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9v
cCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIp
OwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKK3ZhciB1c2VyYWdlbnQgPSBy
ZXF1aXJlKCIuL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZp
ZyIpOwordmFyIG5ldCA9IHJlcXVpcmUoIi4vbGliL25ldCIpOwordmFyIEd1dHRlckxheWVyID0g
cmVxdWlyZSgiLi9sYXllci9ndXR0ZXIiKS5HdXR0ZXI7Cit2YXIgTWFya2VyTGF5ZXIgPSByZXF1
aXJlKCIuL2xheWVyL21hcmtlciIpLk1hcmtlcjsKK3ZhciBUZXh0TGF5ZXIgPSByZXF1aXJlKCIu
L2xheWVyL3RleHQiKS5UZXh0OwordmFyIEN1cnNvckxheWVyID0gcmVxdWlyZSgiLi9sYXllci9j
dXJzb3IiKS5DdXJzb3I7Cit2YXIgU2Nyb2xsQmFyID0gcmVxdWlyZSgiLi9zY3JvbGxiYXIiKS5T
Y3JvbGxCYXI7Cit2YXIgUmVuZGVyTG9vcCA9IHJlcXVpcmUoIi4vcmVuZGVybG9vcCIpLlJlbmRl
ckxvb3A7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIp
LkV2ZW50RW1pdHRlcjsKK3ZhciBlZGl0b3JDc3MgPSAiLmFjZV9lZGl0b3Ige1wKK3Bvc2l0aW9u
OiByZWxhdGl2ZTtcCitvdmVyZmxvdzogaGlkZGVuO1wKK2ZvbnQtZmFtaWx5OiAnTW9uYWNvJywg
J01lbmxvJywgJ1VidW50dSBNb25vJywgJ0NvbnNvbGFzJywgJ3NvdXJjZS1jb2RlLXBybycsIG1v
bm9zcGFjZTtcCitmb250LXNpemU6IDEycHg7XAorbGluZS1oZWlnaHQ6IG5vcm1hbDtcCit9XAor
LmFjZV9zY3JvbGxlciB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK292ZXJmbG93OiBoaWRkZW47
XAordG9wOiAwO1wKK2JvdHRvbTogMDtcCit9XAorLmFjZV9jb250ZW50IHtcCitwb3NpdGlvbjog
YWJzb2x1dGU7XAorLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNp
emluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2N1cnNvcjogdGV4
dDtcCit9XAorLmFjZV9ndXR0ZXIge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdyA6
IGhpZGRlbjtcCit3aWR0aDogYXV0bztcCit0b3A6IDA7XAorYm90dG9tOiAwO1wKK2xlZnQ6IDA7
XAorY3Vyc29yOiBkZWZhdWx0O1wKK3otaW5kZXg6IDQ7XAorfVwKKy5hY2VfZ3V0dGVyLWFjdGl2
ZS1saW5lIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorbGVmdDogMDtcCityaWdodDogMDtcCit9
XAorLmFjZV9zY3JvbGxlci5hY2Vfc2Nyb2xsLWxlZnQge1wKK2JveC1zaGFkb3c6IDE3cHggMCAx
NnB4IC0xNnB4IHJnYmEoMCwgMCwgMCwgMC40KSBpbnNldDtcCit9XAorLmFjZV9ndXR0ZXItY2Vs
bCB7XAorcGFkZGluZy1sZWZ0OiAxOXB4O1wKK3BhZGRpbmctcmlnaHQ6IDZweDtcCitiYWNrZ3Jv
dW5kLXJlcGVhdDogbm8tcmVwZWF0O1wKK31cCisuYWNlX2d1dHRlci1jZWxsLmFjZV9lcnJvciB7
XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdYUkZXSFJUYjJaMGQyRnla
UUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpT
NTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJW
b2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2
WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpN
RFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lq
NGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1Rr
NUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5
WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRM
M2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJT
OTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1
amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5
Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5P
a2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UVVNMk9FWkRRVFE0UlRVME1URkZNVUV6TTBWRlJU
TTJSVVkxTTBSQk1qWWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRVU0yT0Va
RFFUVTRSVFUwTVRGRk1VRXpNMFZGUlRNMlJVWTFNMFJCTWpZaVBpQThlRzF3VFUwNlJHVnlhWFps
WkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEJRelk0UmtOQk1qaEZO
VFF4TVVVeFFUTXpSVVZGTXpaRlJqVXpSRUV5TmlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVH
MXdMbVJwWkRwQlF6WTRSa05CTXpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlOaUl2UGlB
OEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRn
UEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGtnWHhiQUFBQUpiU1VSQlZIamFwRk5OYUJOQkZINHpz
NXZkWkxQNXNRbU5wVDgyUVkyMDloZWgxaW9XaXNhRFJjU0tGMFdLSjBHUW5yenJ4YXNIc1I2RW5s
cndEMFRhZ3hKYWJhVkVwRll4TFdsTFNTODIydHI4N202NmNjZmQyR0t5VmhBNk1NeWJnZmU5Ny92
bVBVUXBoZDBzWmp0bzlYSW45T09zdmx1Mm5rcVJ6VlUrNnZ2bHpQZjhXNmJrOGR4UTBOUGJ4QUFM
Z0NnZzJKa2FRdWh6UWF1L0VsMHpibVVBN1UwRXM4djJDaVltS1FKSEdPMVFJQ0NMb3FpbE1oa211
ckRBeWFwS2dxSXRlemkvVVNSZEpxRVlZNEQ1akN5MDNodDJ5TWtrdkw5MWpUVFgxMHF6eXl1Mmhy
dVBSTjdqZ2JIK0VPc1hjTUxnWWlUaEVnQU1oQUJXODVvcXkxRFhkUklkdlAxQUhKMmFjUVh2REly
VkhjZFFOckVLTllTVk1TWkdNakV6SUlBd0RYSW8rNkcvRnhjR256a0MzVDJvTWhManJlNDlzQkIr
UlJjSExxZGFmSzZzWWRFL0dHQndVMVZwRk5qMGFOOHBKYmUrQmtaeWV2VXJ2TGw2WG1tMFc5SXVU
YzBEeHJETkFKZDVvRXZJL0tSc05DM2JReU5qUE85eVExWUhjZmoyUXZmUWMvNVRVaEpUQmMyaU0w
VTdBV0RRdGMxbkpIdkQvY2ZPMnM3amFHa2lURWZhL0VwOGNvTHU3em1ObWg4K2RjNWxaRHVVZUZB
R1VOQS9PWTZKVmF5cFEwdmpyN1hZalV2Sk0zN3Z0K2oxdnVUSzVEZ1ZmVlVvVGpWZSt5My9MeE14
WTJHZ1UrQ1NMeTRjcGZzWW9yUlh1WElPaTBWdDQwaDY3dVpGVGRJbzZuTGFaY3dVSldBendOUzB0
Qm5xcUt6UURuamRHL2lQeVp4bzQ2SGFLVXBidllrajhxWVJUWnNCaGdlK0pIaFp5aDB4OWI5NUpx
alZKa1QwODRrWklQd3UvbVBXcVBnZlE1alhoMis5MkF5N0hlZGZBZ3dBNktEV2FmYjR3M2NBQUFB
QVNVVk9SSzVDWUlJPVwiKTtcCitiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1wKK2JhY2tn
cm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XAorfVwKKy5hY2VfZ3V0dGVyLWNlbGwuYWNlX3dh
cm5pbmcge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxp
VkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFHWFJGV0hSVGIy
WjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1
aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZO
TUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZl
RDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElE
VXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNB
Z0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5
Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdk
R2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdllt
VXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJK
bExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVo
Wkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERj
bVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlI
aHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFVTTJPRVpEUVRnNFJUVTBNVEZGTVVF
ek0wVkZSVE0yUlVZMU0wUkJNallpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2
UVVNMk9FWkRRVGs0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBSQk1qWWlQaUE4ZUcxd1RVMDZS
R1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBCUXpZNFJr
TkJOamhGTlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSWdjM1JTWldZNlpHOWpkVzFsYm5S
SlJEMGllRzF3TG1ScFpEcEJRelk0UmtOQk56aEZOVFF4TVVVeFFUTXpSVVZGTXpaRlJqVXpSRUV5
TmlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdi
V1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnZDdQZklBQUFHbVNVUkJWSGphWXZyLy96
OERKWmlKZ1VJQU5vQ1JrUkViOWdMaVNWQWFReDRPUU03QUFrd2Q3WFUyL3YrKy9yT3R0ZFlHRUI5
ZEFTRXZPTXlkR0tmSDhHdi9wNFhUa3ZSQmZMeGVRQVArMWNVaFhvcHl2emhQN1AvSW9TajdnN013
MDljTktPNkoxUVEwTDRnSUNQSXYvdmVnLzhXK0pkRnZRTkxIVnNXOS9ubW45ems3QitjQ2tEd2hM
N2d0NmtuU1pueDkvTHVDRU9jdmtJQU1QK2N2dG85bmZxeVptbVVBa3NmbkJVdGJNNjBnWC8zL2tn
eXYzL3hTRk9MNURaVCtMOHZQK1lmaDVjdmZQdnAveFVIeVFIWEd5QVl3Z3B3QmpaWUZUM1kxT0Vs
L09mQ0g0ZmZ2M3d6YzRpd012TklzREorZi9tSDQrdklQQXhzYjYzMVdXMFlsbjZacFFMWGRNSy9E
WEdEZmxoK3NJdjM3RWl2RDV4Ly9HYjcrWVdUNHk4NnNsN0JDQ2tTRCtaKysvMWRrdnNGUmwrSG5E
MVJ2amU0Rjh3aGpNWG1HajU4WUdmNXpzRE13Y25Bd2ZQdktjbWw2MkRzUURlYUR4TisvWTBxd2xw
RUhxcmRCOTRJUk5JRFVnZmdmS0pDaEdLNE9pa0VXM2dUaVhVQjk1MEFTTEZBRjU0QUM5NEEwRzlR
QWZPbm1GOURDRHpBQkZxUzA4SUhZRElTY2Rpak9qUUFCQmdDKy85YXdCSDk2andBQUFBQkpSVTVF
cmtKZ2dnPT1cIik7XAorYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjtcCit9XAorLmFj
ZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTpp
bWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFNUUFBQUFBQUVGQlFWSlNVbDVlWG1Sa1pHdHJh
MzkvZjRXRmhZbUppWkdSa2FhbXByeTh2TVBEdzh6TXpOWFYxZHpjM09UazVPcnE2dkR3OFAvLy93
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQWtBQUJR
QUxBQUFBQUFRQUJBQUFBVXVJQ1dPWkdtZWFCbWw1WEd3RkNRU0JHeVhSU0F3dHFRSWlSdWl3SU01
Qm9ZVmJFRkl5R0NRb2VKR3JWcHRJUUE3XCIpO1wKK2JhY2tncm91bmQtcG9zaXRpb246IDJweCBj
ZW50ZXI7XAorfVwKKy5hY2VfZGFyayAuYWNlX2d1dHRlci1jZWxsLmFjZV9pbmZvIHtcCitiYWNr
Z3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlp
WlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlScFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFB
QUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNt
VlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5N
NmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TXkxak1ERXhJRFky
TGpFME5UWTJNU3dnTWpBeE1pOHdNaTh3TmkweE5EbzFOam95TnlBZ0lDQWdJQ0FnSWo0Z1BISmta
anBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6
SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdK
dmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4
TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZN
UzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVH
RndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQw
aVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9UV0ZqYVc1MGIzTm9LU0lnZUcxd1RVMDZTVzV6
ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBHUlRrNU1UVkdSRUl4TkRreE1VVXhPVGM1UTBGRlJFUXlN
VE5HTWpCRlF5SWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEdSVGs1TVRWR1JV
SXhORGt4TVVVeE9UYzVRMEZGUkVReU1UTkdNakJGUXlJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5K
dmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rWkZPVGt4TlVaQ1FqRTBPVEV4
UlRFNU56bERRVVZFUkRJeE0wWXlNRVZESWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVa
R2xrT2taRk9Ua3hOVVpEUWpFME9URXhSVEU1TnpsRFFVVkVSREl4TTBZeU1FVkRJaTgrSUR3dmNt
Um1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNo
d1lXTnJaWFFnWlc1a1BTSnlJajgrU0lEa2pBQUFBSjFKUkVGVWVOcGkvUC8vUHdNbGdJbUJRa0I3
QTZxcnEvK0RNQzU1RmtJR0tDb3E0cFZucEZrZ1RwMDY5Zi8rL2Z2L3IxdTM3cit0cmUxL2tnMEEr
cHRuOXV6WllMYVJrUkhwTHZqdzRjTlhXVmxaaHVmUG56T2NPM2VPZEFPMHRiVlBBakhEbXpkdkdB
NGZQc3hJc2dHU2twSm12Mzc5WW5qMzdoMkRqSXlNQ01rRzNMaHhRL1QyN2RzTWFtcHFESFoyZHEv
cEg0MUR4d0NBQUFNQUZkYzY4ZFVzRlpnQUFBQUFTVVZPUks1Q1lJST1cIik7XAorfVwKKy5hY2Vf
c2Nyb2xsYmFyIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorb3ZlcmZsb3cteDogaGlkZGVuO1wK
K292ZXJmbG93LXk6IHNjcm9sbDtcCityaWdodDogMDtcCit0b3A6IDA7XAorYm90dG9tOiAwO1wK
K31cCisuYWNlX3Njcm9sbGJhci1pbm5lciB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK3dpZHRo
OiAxcHg7XAorbGVmdDogMDtcCit9XAorLmFjZV9wcmludC1tYXJnaW4ge1wKK3Bvc2l0aW9uOiBh
YnNvbHV0ZTtcCitoZWlnaHQ6IDEwMCU7XAorfVwKKy5hY2VfdGV4dC1pbnB1dCB7XAorcG9zaXRp
b246IGFic29sdXRlO1wKK3otaW5kZXg6IDA7XAord2lkdGg6IDAuNWVtO1wKK2hlaWdodDogMWVt
O1wKK29wYWNpdHk6IDA7XAorYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XAorLW1vei1hcHBlYXJh
bmNlOiBub25lO1wKK2FwcGVhcmFuY2U6IG5vbmU7XAorYm9yZGVyOiBub25lO1wKK3Jlc2l6ZTog
bm9uZTtcCitvdXRsaW5lOiBub25lO1wKK292ZXJmbG93OiBoaWRkZW47XAorZm9udDogaW5oZXJp
dDtcCit9XAorLmFjZV90ZXh0LWlucHV0LmFjZV9jb21wb3NpdGlvbiB7XAorYmFja2dyb3VuZDog
I2Y4ZjhmODtcCitjb2xvcjogIzExMTtcCit6LWluZGV4OiAxMDAwO1wKK29wYWNpdHk6IDE7XAor
Ym9yZGVyOiBzb2xpZCBsaWdodGdyYXkgMXB4O1wKK21hcmdpbjogLTFweDtcCitwYWRkaW5nOiAw
IDFweDtcCit9XAorLmFjZV9sYXllciB7XAorei1pbmRleDogMTtcCitwb3NpdGlvbjogYWJzb2x1
dGU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCit3aGl0ZS1zcGFjZTogbm93cmFwO1wKK2hlaWdodDog
MTAwJTtcCit3aWR0aDogMTAwJTtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAor
Lyogc2V0dGluZyBwb2ludGVyLWV2ZW50czogYXV0bzsgb24gbm9kZSB1bmRlciB0aGUgbW91c2Us
IHdoaWNoIGNoYW5nZXNcCitkdXJpbmcgc2Nyb2xsLCB3aWxsIGJyZWFrIG1vdXNlIHdoZWVsIHNj
cm9sbGluZyBpbiBTYWZhcmkgKi9cCitwb2ludGVyLWV2ZW50czogbm9uZTtcCit9XAorLmFjZV9n
dXR0ZXItbGF5ZXIge1wKK3Bvc2l0aW9uOiByZWxhdGl2ZTtcCit3aWR0aDogYXV0bztcCit0ZXh0
LWFsaWduOiByaWdodDtcCitwb2ludGVyLWV2ZW50czogYXV0bztcCit9XAorLmFjZV90ZXh0LWxh
eWVyIHtcCitjb2xvcjogYmxhY2s7XAorZm9udDogaW5oZXJpdCAhaW1wb3J0YW50O1wKK31cCisu
YWNlX2NqayB7XAorZGlzcGxheTogaW5saW5lLWJsb2NrO1wKK3RleHQtYWxpZ246IGNlbnRlcjtc
Cit9XAorLmFjZV9jdXJzb3ItbGF5ZXIge1wKK3otaW5kZXg6IDQ7XAorfVwKKy5hY2VfY3Vyc29y
IHtcCit6LWluZGV4OiA0O1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCistbW96LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXpp
bmc6IGJvcmRlci1ib3g7XAorfVwKKy5hY2VfaGlkZGVuLWN1cnNvcnMgLmFjZV9jdXJzb3Ige1wK
K29wYWNpdHk6IDAuMjtcCit9XAorLmFjZV9zbW9vdGgtYmxpbmtpbmcgLmFjZV9jdXJzb3Ige1wK
Ky1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCistd2Via2l0LXRyYW5zaXRpb246IG9w
YWNpdHkgMC4xOHM7XAorLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCistbXMtdHJhbnNp
dGlvbjogb3BhY2l0eSAwLjE4cztcCit0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzO1wKK31cCisu
YWNlX2N1cnNvcltzdHlsZSo9XCJvcGFjaXR5OiAwXCJde1wKKy1tcy1maWx0ZXI6IFwicHJvZ2lk
OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9MClcIjtcCit9XAorLmFj
ZV9lZGl0b3IuYWNlX211bHRpc2VsZWN0IC5hY2VfY3Vyc29yIHtcCitib3JkZXItbGVmdC13aWR0
aDogMXB4O1wKK31cCisuYWNlX2xpbmUge1wKK3doaXRlLXNwYWNlOiBub3dyYXA7XAorfVwKKy5h
Y2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK3otaW5k
ZXg6IDM7XAorfVwKKy5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCitwb3NpdGlv
bjogYWJzb2x1dGU7XAorei1pbmRleDogNTtcCit9XAorLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9i
cmFja2V0IHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorei1pbmRleDogNjtcCit9XAorLmFjZV9t
YXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK3ot
aW5kZXg6IDI7XAorfVwKKy5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XAor
cG9zaXRpb246IGFic29sdXRlO1wKK3otaW5kZXg6IDQ7XAorLW1vei1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5nOiBi
b3JkZXItYm94O1wKK31cCisuYWNlX2xpbmUgLmFjZV9mb2xkIHtcCistbW96LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXpp
bmc6IGJvcmRlci1ib3g7XAorZGlzcGxheTogaW5saW5lLWJsb2NrO1wKK2hlaWdodDogMTFweDtc
CittYXJnaW4tdG9wOiAtMnB4O1wKK3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XAorYmFja2dyb3Vu
ZC1pbWFnZTpcCit1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAl
MDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3
JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0
JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFol
RUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3
JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIz
JTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQl
MkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIl
ODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVj
JUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVF
MCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5
NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODEl
MTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYy
XyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAl
OEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUy
NiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIl
MDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIx
JUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVG
RSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVE
QiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVD
NCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlf
JTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1
JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTcl
QjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5
MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1
JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYl
RUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlD
JThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVF
MSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhh
JUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYl
M0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1
bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBB
byU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5
JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIw
JTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThC
JTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdG
JTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUw
QiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkx
JTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMw
JUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJG
ayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVB
MCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAl
ODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIl
QUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODEl
QjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTcl
MjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYw
JTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFwKK3VybChcImRhdGE6
aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUl
MDAlMDAlMDA3JTA4JTA2JTAwJTAwJTAwJUM0JUREJTgwQyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQ
cm9maWxlJTAwJTAweCUwMSU4NVQlREZrJUQzUCUxNCVGRSVEQWUlOUQlQjAlRTElOEIlM0FnJTEx
JTA5JTNFaCU5MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVBNiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUy
NCVFRH4lQjAlMDclRDklOEJvJTNBJUM1dyVGMSUwNyUzRSVGOSUwNyUwQyVEOSU4M28lN0IlOTIl
MEQlQzYlMTRhJUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5RSU5QjRNJ1MlMDMlQjklRjclQkIlREYl
RjklRUU5JyVFNyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJGJTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0
JTE0JURGJUYyJTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVG
JUIzJUYzJTBFJTFFJUM2bHQlRUVvJURGJUFCJUZFYyVENSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVC
RSU5NDUlQzQlMjIlRTFZJUEwaSU1QyVENHQlMTMlRTAlRDYlODklRUYlOUQxNSVDMiVDRExzWCVB
NyUwNCUwOSUxRmc4b2MlODElRTElOEMlOEQlMjMlOTZmNDUlNDAlOUElMDklQzIlMDclQzVCJTNB
SyVCOCU0MDglOThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJF
UiUyRiVFNWRFJUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8lQjAlQTglOTQlRTklOUIlQUQlRTclMTAl
OERtJTlBJTE5TiVEMSU3QyU4QSVERSUxRjklN0RwJThDJUU2JTAwJUQ1JUMxJTNGXyUxOCVCREEl
QjglOURwWDYlRTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYlQkQlRTclRUV0aSU5OCVFRGUlOUElOTdZ
KSUxMiUyNSUxQyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAzJTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVC
MCU5RjQlQkY0M1klRjMlRTMlRURQJTk1JTA0JUVCMSVDNSVGNSVGNktGJUY0JUJBJUJEJUQ3JURC
JTkxJTkzJTA3JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUlQkQlRjclRjVyJThBJUU1eSU5MiVGMCVF
QiVCNCUxRSU4RCVENSVGNCU1QiU5MiUzQVYlREIlREIlRTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUw
M0hCJTgyJThFJTFDZCglRTAlOTFCJTBDYSU5QWMlQzQlQUElRjhMJTE2JTE5JTIySiVBNCVEMml0
VHklQjI4JUQ2JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUwRSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVG
NiVFMCVGQiU5RSVERCUyNSVENyU4RSVCQyUxNSU4NSVDNSVCNyVBMyVEOFElRUQlQjUlODElRTkl
QkElQjIlMTMlOUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUl
OEElRTUlQjFIJTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBTJTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2
JTEyWCUwQyVCQSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUxNyVDMiU5NyVCRiVENCVDOCVDRSVERSVB
RCUxMSVDQiU4MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVDJTI1JUQyTCVEMiVFQmQlQjglQkYlOEEl
RjVCJUM2JTE4JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4QTklRjIlREFQJTBCJyUwNnclODIlRUIl
RTYlRTIlNUMlMkYlRDclMDclOUUlQkIlQ0MlNUQlRTElRkElQjklMDglQUQuciUyMyU4RSVDMiUx
NyVGNUUlN0MhJUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVBNyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVC
QiVEMyU5MSVCQSVBMiVCMXolOTQlOEYlREInJUY2JTNEJThFJUFBJTEzJTE5JUIyJUIxJUJFJUIx
flYlMDglMkIlQjQlQTJjakolQjN0TyUwMCUwMyUyNW1OJTk3JUYzJTA1JTkzJUVGJTExJTg0JTBC
JTdDJTg4JUFFLSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8lOTklMEMlNUUlOTclMENJJUFGSCVEOS4l
QjAlM0IlOEYlRUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVGMypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2
JTVFJTE5JUMwJUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5
RSVCNyU4MCU5MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUzRVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUw
RiVBQiVENSU5RiVDRiVBQSVENSVERCVFNyVFNCU3RiUwQnglQTMlRkMlMDYlQTklMjMlMEElRDYl
QzIlQTFfMiUwMCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIlMTMlMDAlMDAlMEIlMTMlMDElMDAlOUEl
OUMlMTglMDAlMDAlMDAlM0FJREFUOCUxMWMlRkMlRkYlRkYlN0YlMTglMDMlMUElNjAlMDElRjIl
M0YlQTAlODkxJTgwJTA0JUZGJTExLSVGOCUxNyU5QkolRTIlMDUlQjFaRCU4MXYlMjZ0JUU3JTgw
JUY4JUEzJTgyaCVBMTIlMUElMjAlQTMlMDElMDIlMEYlMDElQkElMjUlMDYlMDAlMTklQzAlMEQl
QUVGJUQ1JTNFUyUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1wKK2JhY2tncm91bmQtcmVw
ZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1wKK2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBj
ZW50ZXIsIHRvcCBsZWZ0O1wKK2NvbG9yOiB0cmFuc3BhcmVudDtcCitib3JkZXI6IDFweCBzb2xp
ZCBibGFjaztcCistbW96LWJvcmRlci1yYWRpdXM6IDJweDtcCistd2Via2l0LWJvcmRlci1yYWRp
dXM6IDJweDtcCitib3JkZXItcmFkaXVzOiAycHg7XAorY3Vyc29yOiBwb2ludGVyO1wKK3BvaW50
ZXItZXZlbnRzOiBhdXRvO1wKK31cCisuYWNlX2RhcmsgLmFjZV9mb2xkIHtcCit9XAorLmFjZV9m
b2xkOmhvdmVye1wKK2JhY2tncm91bmQtaW1hZ2U6XAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5
UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUxMSUwMCUwMCUwMCUwOSUw
OCUwNiUwMCUwMCUwMCVENCVFOCVDNyUwQyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQcm9maWxlJTAw
JTAweCUwMSU4NVQlREZrJUQzUCUxNCVGRSVEQWUlOUQlQjAlRTElOEIlM0FnJTExJTA5JTNFaCU5
MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVBNiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUyNCVFRH4lQjAl
MDclRDklOEJvJTNBJUM1dyVGMSUwNyUzRSVGOSUwNyUwQyVEOSU4M28lN0IlOTIlMEQlQzYlMTRh
JUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5RSU5QjRNJ1MlMDMlQjklRjclQkIlREYlRjklRUU5JyVF
NyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJGJTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0JTE0JURGJUYy
JTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVGJUIzJUYzJTBF
JTFFJUM2bHQlRUVvJURGJUFCJUZFYyVENSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVCRSU5NDUlQzQl
MjIlRTFZJUEwaSU1QyVENHQlMTMlRTAlRDYlODklRUYlOUQxNSVDMiVDRExzWCVBNyUwNCUwOSUx
Rmc4b2MlODElRTElOEMlOEQlMjMlOTZmNDUlNDAlOUElMDklQzIlMDclQzVCJTNBSyVCOCU0MDgl
OThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJFUiUyRiVFNWRF
JUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8lQjAlQTglOTQlRTklOUIlQUQlRTclMTAlOERtJTlBJTE5
TiVEMSU3QyU4QSVERSUxRjklN0RwJThDJUU2JTAwJUQ1JUMxJTNGXyUxOCVCREElQjglOURwWDYl
RTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYlQkQlRTclRUV0aSU5OCVFRGUlOUElOTdZKSUxMiUyNSUx
QyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAzJTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVCMCU5RjQlQkY0
M1klRjMlRTMlRURQJTk1JTA0JUVCMSVDNSVGNSVGNktGJUY0JUJBJUJEJUQ3JURCJTkxJTkzJTA3
JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUlQkQlRjclRjVyJThBJUU1eSU5MiVGMCVFQiVCNCUxRSU4
RCVENSVGNCU1QiU5MiUzQVYlREIlREIlRTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUwM0hCJTgyJThF
JTFDZCglRTAlOTFCJTBDYSU5QWMlQzQlQUElRjhMJTE2JTE5JTIySiVBNCVEMml0VHklQjI4JUQ2
JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUwRSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVGNiVFMCVGQiU5
RSVERCUyNSVENyU4RSVCQyUxNSU4NSVDNSVCNyVBMyVEOFElRUQlQjUlODElRTklQkElQjIlMTMl
OUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUlOEElRTUlQjFI
JTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBTJTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2JTEyWCUwQyVC
QSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUxNyVDMiU5NyVCRiVENCVDOCVDRSVERSVBRCUxMSVDQiU4
MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVDJTI1JUQyTCVEMiVFQmQlQjglQkYlOEElRjVCJUM2JTE4
JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4QTklRjIlREFQJTBCJyUwNnclODIlRUIlRTYlRTIlNUMl
MkYlRDclMDclOUUlQkIlQ0MlNUQlRTElRkElQjklMDglQUQuciUyMyU4RSVDMiUxNyVGNUUlN0Mh
JUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVBNyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVCQiVEMyU5MSVC
QSVBMiVCMXolOTQlOEYlREInJUY2JTNEJThFJUFBJTEzJTE5JUIyJUIxJUJFJUIxflYlMDglMkIl
QjQlQTJjakolQjN0TyUwMCUwMyUyNW1OJTk3JUYzJTA1JTkzJUVGJTExJTg0JTBCJTdDJTg4JUFF
LSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8lOTklMEMlNUUlOTclMENJJUFGSCVEOS4lQjAlM0IlOEYl
RUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVGMypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2JTVFJTE5JUMw
JUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5RSVCNyU4MCU5
MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUzRVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUwRiVBQiVENSU5
RiVDRiVBQSVENSVERCVFNyVFNCU3RiUwQnglQTMlRkMlMDYlQTklMjMlMEElRDYlQzIlQTFfMiUw
MCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIlMTMlMDAlMDAlMEIlMTMlMDElMDAlOUElOUMlMTglMDAl
MDAlMDAlQjVJREFUKCUxNSVBNSU5MSUzRCUwRSUwMiElMTAlODVhYyVFMSUwNSVENiVDRSVENiVD
NiVDRSVEMiVFOCVFRCVDRCVERSVDMCVDNiVENk4uJUUwViVGOCUzRCU5Q2ElODkxWEglQzIlQkUl
RDl5JTNGJTkwISVFNiU5QyVDMyVCRmslRTUlMDExJUM2LSVGNSVDOE4lMDQlREYlQkQlRkYlODkl
REZ0JTgzRE4lNjAlM0UlRjMlQUIlQTAlREUlMUElNURnJUJFJTEwUSU5NyUxQiU0MCU5QyVBOG8l
MTAlOEYlNUUlODI4JUI0JTFCJTYwJTg3JUY2JTAyJTI2JTg1JTFDaCUxRSVDMSUyQiU1QmslRkYl
ODYlRUUlQjdqJTA5JTlBJURBJTlCJUFDZSVBMyVGOSVFQyVEQSE5JUI0JUQ1JUE2JTgxJTg2JTg2
JTk4JUNDJTNDJTVCJTQwJUZBJTgxJUIzJUU5JUNCJTIzJTk0JUMxNkF6byUwNSVENCVFMSVDMSU5
NWElM0IlOEEnJUEwJUU4JUNDJTE3JTIyJTg1JTFEJUJBJTAwJUEyJUZBJURDJTBBJTk0JUQxJUQx
JThEJThCJTNBJTg0JTE3QiVDNyU2MCUxQSUyNVolRkMlOEQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2
MCU4MlwiKSxcCit1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAl
MDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMl
MDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUl
REFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYl
QjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0Ul
RjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUl
OUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUw
RiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUx
NkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUl
OUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2
JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1
JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVF
NCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIw
JUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVF
NiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJE
JUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4
OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUl
RjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJE
JUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0
JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFB
JUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUl
QjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUl
QjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVF
NSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5
NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTcl
QzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUy
NSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5
JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZB
JUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTcl
REIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4
RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5
NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5
JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMq
cCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0Ml
NUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VW
JUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4
JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEz
JTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwM0lEQVQ4JTExYyVGQyVGRiVGRiU3
RiUzRSUwMyUxQSU2MCUwMSVGMiUzRiVBMyU4OTElODAlMDQlRkZRJTI2JUY4dyVDMCVCNDMlQTEl
REIlMEMlRTIlOEYlMEElQTIlODUlQ0FoJTgwJThDJTA2JTA4JTNDJTA0JUU4JTk2JTE4JTAwJUEz
UyUwRCVDRCVDRiVEOCVDMSU5RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1wKK2JhY2tn
cm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1wKK2JhY2tncm91bmQtcG9zaXRpb246
IGNlbnRlciBjZW50ZXIsIHRvcCBsZWZ0O1wKK31cCisuYWNlX2VkaXRvci5hY2VfZHJhZ2dpbmcg
LmFjZV9jb250ZW50IHtcCitjdXJzb3I6IG1vdmU7XAorfVwKKy5hY2VfZ3V0dGVyLXRvb2x0aXAg
e1wKK2JhY2tncm91bmQtY29sb3I6ICNGRkY7XAorYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1s
aW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjEp
KTtcCitiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3Bh
cmVudCwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcCitib3JkZXI6IDFweCBzb2xpZCBncmF5O1wKK2Jv
cmRlci1yYWRpdXM6IDFweDtcCitib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAw
LjMpO1wKK2NvbG9yOiBibGFjaztcCitkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XAorbWF4LXdpZHRo
OiA1MDBweDtcCitwYWRkaW5nOiA0cHg7XAorcG9zaXRpb246IGZpeGVkO1wKK3otaW5kZXg6IDMw
MDtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6aW5nOiBi
b3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorY3Vyc29yOiBkZWZhdWx0O1wK
K3doaXRlLXNwYWNlOiBwcmUtbGluZTtcCit3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XAorbGluZS1o
ZWlnaHQ6IG5vcm1hbDtcCitmb250LXN0eWxlOiBub3JtYWw7XAorZm9udC13ZWlnaHQ6IG5vcm1h
bDtcCitsZXR0ZXItc3BhY2luZzogbm9ybWFsO1wKK31cCisuYWNlX2ZvbGRpbmctZW5hYmxlZCA+
IC5hY2VfZ3V0dGVyLWNlbGwge1wKK3BhZGRpbmctcmlnaHQ6IDEzcHg7XAorfVwKKy5hY2VfZm9s
ZC13aWRnZXQge1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1z
aXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCittYXJnaW46IDAg
LTEycHggMCAxcHg7XAorZGlzcGxheTogaW5saW5lLWJsb2NrO1wKK3dpZHRoOiAxMXB4O1wKK3Zl
cnRpY2FsLWFsaWduOiB0b3A7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9w
bmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUw
MCUwNSUwOCUwNiUwMCUwMCUwMCU4RG8lMjYlRTUlMDAlMDAlMDA0SURBVHglREFlJThBJUIxJTBE
JTAwMCUwQyVDMiVGMiUyQ0slOTYlQkMlRDAlOEY5JTgxJTg4SCVFOSVEMCUwRSU5NiVDMCUxMCU5
MiUzRSUwMiU4MCU1RSU4MiVFNCVBOSotJUVFc3clQzglQ0MlMTElRUUlOTZ3JUQ4JURDJUU5KkVo
JTBDJTE1MSglMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCitiYWNrZ3JvdW5kLXJlcGVh
dDogbm8tcmVwZWF0O1wKK2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcCitib3JkZXItcmFk
aXVzOiAzcHg7XAorYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XAorfVwKKy5hY2VfZm9s
ZC13aWRnZXQuYWNlX2VuZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9w
bmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUw
MCUwNSUwOCUwNiUwMCUwMCUwMCU4RG8lMjYlRTUlMDAlMDAlMDA0SURBVHglREFtJUM3JUMxJTA5
JTAwMCUwOEMlRDElOEMlRUNFJUM4RSglOEUlRUMlMDIpJTFFWkolRjElQzEnJTA0JTA3SSVFMSVF
NSVFRSVDQUwlRjUlQTIlOTklOTklMjIlRTIlRDYlMUZVJUI1JUZFMCVEOXglQTclMjZXejUlMEUl
RDUlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCit9XAorLmFjZV9mb2xkLXdpZGdldC5h
Y2VfY2xvc2VkIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQ
TkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTAzJTAwJTAwJTAwJTA2JTA4
JTA2JTAwJTAwJTAwJTA2JUU1JTI0JTBDJTAwJTAwJTAwOUlEQVR4JURBNSVDQSVDMSUwOSUwMDAl
MDglMDMlQzAlQUMqKCUzRSUwNCVDMSUwRCVCQSVCMSUyMyVBNFVoJUUwJTIwJTgxJUMwJUNDJUY4
JTgyJTgxJUFBJUEyJUFBckdmciU4OCUwOCUxMSUxMSUxQyVERCU3RCVFMCVFRSU1QiVGNiVGNiVD
QiVCOCUwNVElMkYlRTl0YWklRDklMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCit9XAor
LmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XAorYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAw
LCAwLjMpO1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCist
bW96LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XAorLXdl
YmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKK2Jv
eC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XAorfVwKKy5hY2Vf
Zm9sZC13aWRnZXQ6YWN0aXZlIHtcCitib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAu
NCk7XAorYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcCistbW96LWJveC1z
aGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XAorLXdlYmtpdC1ib3gt
c2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKK2JveC1zaGFkb3c6
IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XAorfVwKKy8qKlwKKyogRGFyayB2
ZXJzaW9uIGZvciBmb2xkIHdpZGdldHNcCisqL1wKKy5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0
IHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSGtsRVFWUUlXMlA0Ly84
L0F6b0dFUTdvR0NhTExBaFdpU3dCMTQ2QkFRQ1NUUFlvY3FUMEFBQUFBRWxGVGtTdVFtQ0NcIik7
XAorfVwKKy5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQge1wKK2JhY2tncm91bmQt
aW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFIMGxFUVZRSVcyUDQvLzgvQXhRN3dOaklBakRNZ0M0
QXhqQ1ZLQmlySUFBRjBrejJybGh4cEFBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XAorfVwKKy5hY2Vf
ZGFyayAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWQge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVy
bChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQU1BQUFB
RkNBWUFBQUNBY1ZhaUFBQUFIRWxFUVZRSVcyUDQvLysvQXhBemdEQURsT09Bem5IQUtnUFdBd0FS
amk4VUlEVGZRUUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCit9XAorLmFjZV9kYXJrIC5hY2VfZm9s
ZC13aWRnZXQ6aG92ZXIge1wKK2JveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAy
NTUsIDAuMik7XAorYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1wK
K31cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldDphY3RpdmUge1wKKy1tb3otYm94LXNoYWRv
dzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCistd2Via2l0LWJveC1zaGFk
b3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorYm94LXNoYWRvdzogMCAx
cHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCit9XAorLmFjZV9mb2xkLXdpZGdldC5h
Y2VfaW52YWxpZCB7XAorYmFja2dyb3VuZC1jb2xvcjogI0ZGQjRCNDtcCitib3JkZXItY29sb3I6
ICNERTU1NTU7XAorfVwKKy5hY2VfZmFkZS1mb2xkLXdpZGdldHMgLmFjZV9mb2xkLXdpZGdldCB7
XAorLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCistd2Via2l0LXRy
YW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1wKKy1vLXRyYW5zaXRpb246IG9wYWNp
dHkgMC40cyBlYXNlIDAuMDVzO1wKKy1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAw
LjA1cztcCit0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCitvcGFjaXR5OiAw
O1wKK31cCisuYWNlX2ZhZGUtZm9sZC13aWRnZXRzOmhvdmVyIC5hY2VfZm9sZC13aWRnZXQge1wK
Ky1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wKKy13ZWJraXQtdHJh
bnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wKKy1vLXRyYW5zaXRpb246IG9wYWNp
dHkgMC4wNXMgZWFzZSAwLjA1cztcCistbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNl
IDAuMDVzO1wKK3RyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCitvcGFjaXR5
OjE7XAorfVwKKy5hY2VfdW5kZXJsaW5lIHtcCit0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtc
Cit9XAorLmFjZV9ib2xkIHtcCitmb250LXdlaWdodDogYm9sZDtcCit9XAorLmFjZV9ub2JvbGQg
LmFjZV9ib2xkIHtcCitmb250LXdlaWdodDogbm9ybWFsO1wKK31cCisuYWNlX2l0YWxpYyB7XAor
Zm9udC1zdHlsZTogaXRhbGljO1wKK31cCisiOworCitkb20uaW1wb3J0Q3NzU3RyaW5nKGVkaXRv
ckNzcywgImFjZV9lZGl0b3IiKTsKKwordmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNv
bnRhaW5lciwgdGhlbWUpIHsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOworCisgICAgdGhpcy5jb250
YWluZXIgPSBjb250YWluZXIgfHwgZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMu
JGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gIXVzZXJhZ2VudC5pc0lFOworCisgICAgZG9tLmFkZENz
c0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2VkaXRvciIpOworCisgICAgdGhpcy5zZXRUaGVt
ZSh0aGVtZSk7CisKKyAgICB0aGlzLiRndXR0ZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyIjsKKyAgICB0aGlzLmNv
bnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRndXR0ZXIpOworCisgICAgdGhpcy5zY3JvbGxlciA9
IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZSA9
ICJhY2Vfc2Nyb2xsZXIiOworICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2Ny
b2xsZXIpOworCisgICAgdGhpcy5jb250ZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgIHRoaXMuY29udGVudC5jbGFzc05hbWUgPSAiYWNlX2NvbnRlbnQiOworICAgIHRoaXMuc2Ny
b2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTsKKworICAgIHRoaXMuc2V0SGlnaGxpZ2h0
R3V0dGVyTGluZSh0cnVlKTsKKyAgICB0aGlzLiRndXR0ZXJMYXllciA9IG5ldyBHdXR0ZXJMYXll
cih0aGlzLiRndXR0ZXIpOworICAgIHRoaXMuJGd1dHRlckxheWVyLm9uKCJjaGFuZ2VHdXR0ZXJX
aWR0aCIsIHRoaXMub25HdXR0ZXJSZXNpemUuYmluZCh0aGlzKSk7CisKKyAgICB0aGlzLiRtYXJr
ZXJCYWNrID0gbmV3IE1hcmtlckxheWVyKHRoaXMuY29udGVudCk7CisKKyAgICB2YXIgdGV4dExh
eWVyID0gdGhpcy4kdGV4dExheWVyID0gbmV3IFRleHRMYXllcih0aGlzLmNvbnRlbnQpOworICAg
IHRoaXMuY2FudmFzID0gdGV4dExheWVyLmVsZW1lbnQ7CisKKyAgICB0aGlzLiRtYXJrZXJGcm9u
dCA9IG5ldyBNYXJrZXJMYXllcih0aGlzLmNvbnRlbnQpOworCisgICAgdGhpcy4kY3Vyc29yTGF5
ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50KTsKKyAgICB0aGlzLiRob3JpelNjcm9s
bCA9IGZhbHNlOworICAgIHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSA9IGZhbHNlOwor
CisgICAgdGhpcy4kYW5pbWF0ZWRTY3JvbGwgPSBmYWxzZTsKKworICAgIHRoaXMuc2Nyb2xsQmFy
ID0gbmV3IFNjcm9sbEJhcih0aGlzLmNvbnRhaW5lcik7CisgICAgdGhpcy5zY3JvbGxCYXIuYWRk
RXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIV9zZWxm
LiRpblNjcm9sbEFuaW1hdGlvbikKKyAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xs
VG9wKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICB0aGlzLnNjcm9sbFRvcCA9IDA7CisgICAgdGhp
cy5zY3JvbGxMZWZ0ID0gMDsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuc2Nyb2xsZXIs
ICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNjcm9sbExlZnQgPSBfc2VsZi5z
Y3JvbGxlci5zY3JvbGxMZWZ0OworICAgICAgICBfc2VsZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVm
dDsKKyAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpOworICAg
IH0pOworCisgICAgdGhpcy5jdXJzb3JQb3MgPSB7CisgICAgICAgIHJvdyA6IDAsCisgICAgICAg
IGNvbHVtbiA6IDAKKyAgICB9OworCisgICAgdGhpcy4kdGV4dExheWVyLmFkZEV2ZW50TGlzdGVu
ZXIoImNoYW5nZUNoYXJhY3RlclNpemUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgX3NlbGYudXBk
YXRlQ2hhcmFjdGVyU2l6ZSgpOworICAgICAgICBfc2VsZi5vblJlc2l6ZSh0cnVlKTsKKyAgICB9
KTsKKworICAgIHRoaXMuJHNpemUgPSB7CisgICAgICAgIHdpZHRoOiAwLAorICAgICAgICBoZWln
aHQ6IDAsCisgICAgICAgIHNjcm9sbGVySGVpZ2h0OiAwLAorICAgICAgICBzY3JvbGxlcldpZHRo
OiAwCisgICAgfTsKKworICAgIHRoaXMubGF5ZXJDb25maWcgPSB7CisgICAgICAgIHdpZHRoIDog
MSwKKyAgICAgICAgcGFkZGluZyA6IDAsCisgICAgICAgIGZpcnN0Um93IDogMCwKKyAgICAgICAg
Zmlyc3RSb3dTY3JlZW46IDAsCisgICAgICAgIGxhc3RSb3cgOiAwLAorICAgICAgICBsaW5lSGVp
Z2h0IDogMSwKKyAgICAgICAgY2hhcmFjdGVyV2lkdGggOiAxLAorICAgICAgICBtaW5IZWlnaHQg
OiAxLAorICAgICAgICBtYXhIZWlnaHQgOiAxLAorICAgICAgICBvZmZzZXQgOiAwLAorICAgICAg
ICBoZWlnaHQgOiAxCisgICAgfTsKKworICAgIHRoaXMuJGxvb3AgPSBuZXcgUmVuZGVyTG9vcCgK
KyAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcy5iaW5kKHRoaXMpLAorICAgICAgICB0aGlzLmNv
bnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3CisgICAgKTsKKyAgICB0aGlzLiRsb29w
LnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpOworCisgICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJT
aXplKCk7CisgICAgdGhpcy5zZXRQYWRkaW5nKDQpOworfTsKKworKGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuc2hvd0d1dHRlciA9IHRydWU7CisKKyAgICB0aGlzLkNIQU5HRV9DVVJTT1IgPSAxOwor
ICAgIHRoaXMuQ0hBTkdFX01BUktFUiA9IDI7CisgICAgdGhpcy5DSEFOR0VfR1VUVEVSID0gNDsK
KyAgICB0aGlzLkNIQU5HRV9TQ1JPTEwgPSA4OworICAgIHRoaXMuQ0hBTkdFX0xJTkVTID0gMTY7
CisgICAgdGhpcy5DSEFOR0VfVEVYVCA9IDMyOworICAgIHRoaXMuQ0hBTkdFX1NJWkUgPSA2NDsK
KyAgICB0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSyA9IDEyODsKKyAgICB0aGlzLkNIQU5HRV9NQVJL
RVJfRlJPTlQgPSAyNTY7CisgICAgdGhpcy5DSEFOR0VfRlVMTCA9IDUxMjsKKyAgICB0aGlzLkNI
QU5HRV9IX1NDUk9MTCA9IDEwMjQ7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1p
dHRlcik7CisgICAgCisgICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHMgIT0gdGhpcy4kYWxs
b3dCb2xkRm9udHMpIHsKKyAgICAgICAgICAgIHRoaXMuJGFsbG93Qm9sZEZvbnRzID0gdGhpcy4k
dGV4dExheWVyLmFsbG93Qm9sZEZvbnRzOworICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSgiYWNl
X25vYm9sZCIsICF0aGlzLiRhbGxvd0JvbGRGb250cyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHRoaXMuY2hhcmFjdGVyV2lkdGggPSB0aGlzLiR0ZXh0TGF5ZXIuZ2V0Q2hhcmFjdGVy
V2lkdGgoKTsKKyAgICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy4kdGV4dExheWVyLmdldExp
bmVIZWlnaHQoKTsKKyAgICAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9Owor
ICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5z
ZXNzaW9uID0gc2Vzc2lvbjsKKyAgICAgICAgCisgICAgICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NO
YW1lID0gImFjZV9zY3JvbGxlciI7CisgICAgICAgIAorICAgICAgICB0aGlzLiRjdXJzb3JMYXll
ci5zZXRTZXNzaW9uKHNlc3Npb24pOworICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldFNlc3Np
b24oc2Vzc2lvbik7CisgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldFNlc3Npb24oc2Vzc2lv
bik7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CisgICAg
ICAgIHRoaXMuJHRleHRMYXllci5zZXRTZXNzaW9uKHNlc3Npb24pOworICAgICAgICB0aGlzLiRs
b29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpOworICAgICAgICAKKyAgICB9OworICAgIHRo
aXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICBp
ZiAobGFzdFJvdyA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgbGFzdFJvdyA9IEluZmluaXR5
OworCisgICAgICAgIGlmICghdGhpcy4kY2hhbmdlZExpbmVzKSB7CisgICAgICAgICAgICB0aGlz
LiRjaGFuZ2VkTGluZXMgPSB7CisgICAgICAgICAgICAgICAgZmlyc3RSb3c6IGZpcnN0Um93LAor
ICAgICAgICAgICAgICAgIGxhc3RSb3c6IGxhc3RSb3cKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmZp
cnN0Um93ID4gZmlyc3RSb3cpCisgICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmZp
cnN0Um93ID0gZmlyc3RSb3c7CisKKyAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMu
bGFzdFJvdyA8IGxhc3RSb3cpCisgICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxh
c3RSb3cgPSBsYXN0Um93OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodGhpcy4k
Y2hhbmdlZExpbmVzLmZpcnN0Um93ID4gdGhpcy5sYXllckNvbmZpZy5sYXN0Um93IHx8CisgICAg
ICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA8IHRoaXMubGF5ZXJDb25maWcuZmly
c3RSb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUo
dGhpcy5DSEFOR0VfTElORVMpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlVGFiU2l6ZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RF
WFQgfCB0aGlzLkNIQU5HRV9NQVJLRVIpOworICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIub25DaGFu
Z2VUYWJTaXplKCk7CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZVRleHQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTsKKyAgICB9Owor
ICAgIHRoaXMudXBkYXRlRnVsbCA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIGlmIChmb3Jj
ZSl7CisgICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKHRoaXMuQ0hBTkdFX0ZVTEwsIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy4kbG9vcC5z
Y2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy51
cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hl
Y2tGb3JTaXplQ2hhbmdlcygpOworICAgIH07CisgICAgdGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9u
KGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICB2YXIgY2hhbmdl
cyA9IHRoaXMuQ0hBTkdFX1NJWkU7CisgICAgICAgIHZhciBzaXplID0gdGhpcy4kc2l6ZTsKKwor
ICAgICAgICBpZiAodGhpcy5yZXNpemluZyA+IDIpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcgPiAxKQorICAgICAgICAgICAgdGhpcy5yZXNpemlu
ZysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLnJlc2l6aW5nID0gZm9yY2UgPyAx
IDogMDsKKyAgICAgICAgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICBoZWlnaHQgPSBkb20uZ2V0
SW5uZXJIZWlnaHQodGhpcy5jb250YWluZXIpOworCisgICAgICAgIGlmIChoZWlnaHQgJiYgKGZv
cmNlIHx8IHNpemUuaGVpZ2h0ICE9IGhlaWdodCkpIHsKKyAgICAgICAgICAgIHNpemUuaGVpZ2h0
ID0gaGVpZ2h0OworCisgICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0ID0gdGhpcy5zY3Jv
bGxlci5jbGllbnRIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRIZWlnaHQo
c2l6ZS5zY3JvbGxlckhlaWdodCk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24pIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRoaXMuZ2V0U2Nyb2xs
VG9wKCkpOworICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzIHwgdGhpcy5DSEFOR0Vf
RlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghd2lkdGgpCisg
ICAgICAgICAgICB3aWR0aCA9IGRvbS5nZXRJbm5lcldpZHRoKHRoaXMuY29udGFpbmVyKTsKKwor
ICAgICAgICBpZiAod2lkdGggJiYgKGZvcmNlIHx8IHRoaXMucmVzaXppbmcgPiAxIHx8IHNpemUu
d2lkdGggIT0gd2lkdGgpKSB7CisgICAgICAgICAgICBzaXplLndpZHRoID0gd2lkdGg7CisKKyAg
ICAgICAgICAgIHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRl
ci5vZmZzZXRXaWR0aCA6IDA7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmxlZnQg
PSBndXR0ZXJXaWR0aCArICJweCI7CisgICAgICAgICAgICBzaXplLnNjcm9sbGVyV2lkdGggPSBN
YXRoLm1heCgwLCB3aWR0aCAtIGd1dHRlcldpZHRoIC0gdGhpcy5zY3JvbGxCYXIuZ2V0V2lkdGgo
KSk7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLnJpZ2h0ID0gdGhpcy5zY3JvbGxC
YXIuZ2V0V2lkdGgoKSArICJweCI7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0
VXNlV3JhcE1vZGUoKSAmJiB0aGlzLmFkanVzdFdyYXBMaW1pdCgpIHx8IGZvcmNlKQorICAgICAg
ICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzIHwgdGhpcy5DSEFOR0VfRlVMTDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChmb3JjZSkKKyAgICAgICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMo
Y2hhbmdlcywgdHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUoY2hhbmdlcyk7CisgICAgICAgIAorICAgICAgICBpZiAoZm9yY2UpCisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5yZXNpemluZzsKKyAgICB9OworCisgICAgdGhpcy5vbkd1dHRlclJlc2l6
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgd2lkdGggPSB0aGlzLiRzaXplLndpZHRoOwor
ICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlzLnNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIu
b2Zmc2V0V2lkdGggOiAwOworICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmxlZnQgPSBndXR0
ZXJXaWR0aCArICJweCI7CisgICAgICAgIHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1hdGgu
bWF4KDAsIHdpZHRoIC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpKTsK
KworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1
c3RXcmFwTGltaXQoKSkKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFO
R0VfRlVMTCk7CisgICAgfTsKKyAgICB0aGlzLmFkanVzdFdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgYXZhaWxhYmxlV2lkdGggPSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgg
LSB0aGlzLiRwYWRkaW5nICogMjsKKyAgICAgICAgdmFyIGxpbWl0ID0gTWF0aC5mbG9vcihhdmFp
bGFibGVXaWR0aCAvIHRoaXMuY2hhcmFjdGVyV2lkdGgpOworICAgICAgICByZXR1cm4gdGhpcy5z
ZXNzaW9uLmFkanVzdFdyYXBMaW1pdChsaW1pdCk7CisgICAgfTsKKyAgICB0aGlzLnNldEFuaW1h
dGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7CisgICAgICAgIHRoaXMuJGFuaW1h
dGVkU2Nyb2xsID0gc2hvdWxkQW5pbWF0ZTsKKyAgICB9OworICAgIHRoaXMuZ2V0QW5pbWF0ZWRT
Y3JvbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGFuaW1hdGVkU2Nyb2xs
OworICAgIH07CisgICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZp
c2libGVzKSB7CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXMo
c2hvd0ludmlzaWJsZXMpKQorICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNI
QU5HRV9URVhUKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRleHRMYXllci5zaG93SW52aXNpYmxlczsKKyAg
ICB9OworCisgICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLiR0ZXh0TGF5ZXIuZGlzcGxheUluZGVudEd1aWRlczsKKyAgICB9
OworICAgIAorICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3Bs
YXkpIHsKKyAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXREaXNwbGF5SW5kZW50R3VpZGVz
KGRpc3BsYXkpKQorICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9U
RVhUKTsKKyAgICB9OworICAgIAorICAgIHRoaXMuJHNob3dQcmludE1hcmdpbiA9IHRydWU7Cisg
ICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsK
KyAgICAgICAgdGhpcy4kc2hvd1ByaW50TWFyZ2luID0gc2hvd1ByaW50TWFyZ2luOworICAgICAg
ICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07CisgICAgdGhpcy5nZXRTaG93UHJp
bnRNYXJnaW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNob3dQcmludE1h
cmdpbjsKKyAgICB9OworCisgICAgdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4gPSA4MDsKKyAgICB0
aGlzLnNldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Cisg
ICAgICAgIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uID0gc2hvd1ByaW50TWFyZ2luOworICAgICAg
ICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07CisgICAgdGhpcy5nZXRQcmludE1h
cmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcHJpbnRNYXJn
aW5Db2x1bW47CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dHdXR0ZXIgPSBmdW5jdGlvbigpewor
ICAgICAgICByZXR1cm4gdGhpcy5zaG93R3V0dGVyOworICAgIH07CisgICAgdGhpcy5zZXRTaG93
R3V0dGVyID0gZnVuY3Rpb24oc2hvdyl7CisgICAgICAgIGlmKHRoaXMuc2hvd0d1dHRlciA9PT0g
c2hvdykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy4kZ3V0dGVyLnN0eWxlLmRp
c3BsYXkgPSBzaG93ID8gImJsb2NrIiA6ICJub25lIjsKKyAgICAgICAgdGhpcy5zaG93R3V0dGVy
ID0gc2hvdzsKKyAgICAgICAgdGhpcy5vblJlc2l6ZSh0cnVlKTsKKyAgICB9OworCisgICAgdGhp
cy5nZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbigpeworICAgICAgICByZXR1cm4gZG9tLmhh
c0Nzc0NsYXNzKHRoaXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOworICAgIH07
CisKKyAgICB0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAg
ICAgaWYgKHNob3cpCisgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAi
YWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvbS5y
ZW1vdmVDc3NDbGFzcyh0aGlzLiRndXR0ZXIsICJhY2VfZmFkZS1mb2xkLXdpZGdldHMiKTsKKyAg
ICB9OworCisgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZhbHNlOworICAgIHRoaXMu
c2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgeworICAg
ICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9PSBzaG91bGRIaWdobGlnaHQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBz
aG91bGRIaWdobGlnaHQ7CisKKyAgICAgICAgaWYgKCF0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0
KSB7CisgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0ID0gZG9tLmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5jbGFz
c05hbWUgPSAiYWNlX2d1dHRlci1hY3RpdmUtbGluZSI7CisgICAgICAgICAgICB0aGlzLiRndXR0
ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0
eWxlLmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25lIjsKKyAgICAgICAgaWYg
KHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcykKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUd1
dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICB9OworCisgICAgdGhpcy5nZXRIaWdobGlnaHRHdXR0
ZXJMaW5lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRHdXR0
ZXJMaW5lOworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUudG9w
ID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLnRvcCAtIHRoaXMubGF5ZXJDb25maWcub2Zm
c2V0ICsgInB4IjsKKyAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS5oZWln
aHQgPSB0aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQgKyAicHgiOworICAgIH07CisgICAgCisg
ICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0
aGlzLiRzaG93UHJpbnRNYXJnaW4gJiYgIXRoaXMuJHByaW50TWFyZ2luRWwpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLiRwcmludE1hcmdpbkVsKSB7CisgICAgICAg
ICAgICB2YXIgY29udGFpbmVyRWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
ICAgICBjb250YWluZXJFbC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9wcmludC1tYXJnaW4t
bGF5ZXIiOworICAgICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5FbCA9IGRvbS5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHRoaXMuJHByaW50TWFyZ2luRWwuY2xhc3NOYW1lID0g
ImFjZV9wcmludC1tYXJnaW4iOworICAgICAgICAgICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQo
dGhpcy4kcHJpbnRNYXJnaW5FbCk7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVm
b3JlKGNvbnRhaW5lckVsLCB0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLiRwcmludE1hcmdpbkVsLnN0eWxlOworICAgICAgICBz
dHlsZS5sZWZ0ID0gKCh0aGlzLmNoYXJhY3RlcldpZHRoICogdGhpcy4kcHJpbnRNYXJnaW5Db2x1
bW4pICsgdGhpcy4kcGFkZGluZykgKyAicHgiOworICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0g
dGhpcy4kc2hvd1ByaW50TWFyZ2luID8gInZpc2libGUiIDogImhpZGRlbiI7CisgICAgfTsKKyAg
ICB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuY29udGFpbmVyOworICAgIH07CisgICAgdGhpcy5nZXRNb3VzZUV2ZW50VGFyZ2V0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7CisgICAgfTsKKyAgICB0
aGlzLmdldFRleHRBcmVhQ29udGFpbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmNvbnRhaW5lcjsKKyAgICB9OworICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmln
OworICAgICAgICB2YXIgcG9zVG9wID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLnRvcDsK
KyAgICAgICAgdmFyIHBvc0xlZnQgPSB0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MubGVmdDsK
KyAgICAgICAgcG9zVG9wIC09IGNvbmZpZy5vZmZzZXQ7CisKKyAgICAgICAgaWYgKHBvc1RvcCA8
IDAgfHwgcG9zVG9wID4gY29uZmlnLmhlaWdodCAtIHRoaXMubGluZUhlaWdodCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB2YXIgdyA9IHRoaXMuY2hhcmFjdGVyV2lkdGg7CisgICAg
ICAgIGlmICh0aGlzLiRjb21wb3NpdGlvbikgeworICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMu
dGV4dGFyZWEudmFsdWUucmVwbGFjZSgvXlx4MDErLywgIiIpOworICAgICAgICAgICAgdyAqPSB0
aGlzLnNlc3Npb24uJGdldFN0cmluZ1NjcmVlbldpZHRoKHZhbClbMF07CisgICAgICAgIH0KKyAg
ICAgICAgcG9zTGVmdCAtPSB0aGlzLnNjcm9sbExlZnQ7CisgICAgICAgIGlmIChwb3NMZWZ0ID4g
dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gdykKKyAgICAgICAgICAgIHBvc0xlZnQgPSB0aGlz
LiRzaXplLnNjcm9sbGVyV2lkdGggLSB3OworCisgICAgICAgIHBvc0xlZnQgLT0gdGhpcy5zY3Jv
bGxCYXIud2lkdGg7CisKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSB0aGlz
LmxpbmVIZWlnaHQgKyAicHgiOworICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLndpZHRoID0g
dyArICJweCI7CisgICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUucmlnaHQgPSB0aGlzLiRzaXpl
LnNjcm9sbGVyV2lkdGggLSBwb3NMZWZ0IC0gdyArICJweCI7CisgICAgICAgIHRoaXMudGV4dGFy
ZWEuc3R5bGUuYm90dG9tID0gdGhpcy4kc2l6ZS5oZWlnaHQgLSBwb3NUb3AgLSB0aGlzLmxpbmVI
ZWlnaHQgKyAicHgiOworICAgIH07CisgICAgdGhpcy5nZXRGaXJzdFZpc2libGVSb3cgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3c7CisgICAg
fTsKKyAgICB0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICsgKHRoaXMubGF5ZXJDb25maWcu
b2Zmc2V0ID09PSAwID8gMCA6IDEpOworICAgIH07CisgICAgdGhpcy5nZXRMYXN0RnVsbHlWaXNp
YmxlUm93ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmbGludCA9IE1hdGguZmxvb3IoKHRo
aXMubGF5ZXJDb25maWcuaGVpZ2h0ICsgdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpIC8gdGhpcy5s
YXllckNvbmZpZy5saW5lSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcu
Zmlyc3RSb3cgLSAxICsgZmxpbnQ7CisgICAgfTsKKyAgICB0aGlzLmdldExhc3RWaXNpYmxlUm93
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7
CisgICAgfTsKKworICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsOworICAgIHRoaXMuc2V0UGFkZGlu
ZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7
CisgICAgICAgIHRoaXMuJHRleHRMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpOworICAgICAgICB0
aGlzLiRjdXJzb3JMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpOworICAgICAgICB0aGlzLiRtYXJr
ZXJGcm9udC5zZXRQYWRkaW5nKHBhZGRpbmcpOworICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNl
dFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFO
R0VfRlVMTCk7CisgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGU7CisgICAgfTsKKyAgICB0aGlz
LnNldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlID0gZnVuY3Rpb24oYWx3YXlzVmlzaWJsZSkgewor
ICAgICAgICBpZiAodGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlICE9IGFsd2F5c1Zpc2li
bGUpIHsKKyAgICAgICAgICAgIHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSA9IGFsd2F5
c1Zpc2libGU7CisgICAgICAgICAgICBpZiAoIXRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJs
ZSB8fCAhdGhpcy4kaG9yaXpTY3JvbGwpCisgICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hl
ZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMu
JHVwZGF0ZVNjcm9sbEJhciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNjcm9sbEJhci5z
ZXRJbm5lckhlaWdodCh0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCk7CisgICAgICAgIHRoaXMu
c2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0aGlzLnNjcm9sbFRvcCk7CisgICAgfTsKKworICAgIHRo
aXMuJHJlbmRlckNoYW5nZXMgPSBmdW5jdGlvbihjaGFuZ2VzLCBmb3JjZSkgeworICAgICAgICBp
ZiAoIWZvcmNlICYmICghY2hhbmdlcyB8fCAhdGhpcy5zZXNzaW9uIHx8ICF0aGlzLmNvbnRhaW5l
ci5vZmZzZXRXaWR0aCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgdGhpcy5DSEFOR0VfRlVMTCB8fAorICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdF
X1NJWkUgfHwKKyAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8CisgICAg
ICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfTElORVMgfHwKKyAgICAgICAgICAgIGNoYW5n
ZXMgJiB0aGlzLkNIQU5HRV9TQ1JPTEwKKyAgICAgICAgKQorICAgICAgICAgICAgdGhpcy4kY29t
cHV0ZUxheWVyQ29uZmlnKCk7CisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfSF9T
Q1JPTEwpIHsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHRoaXMuc2Ny
b2xsTGVmdDsKKyAgICAgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxlci5zY3Jv
bGxMZWZ0OworICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICAg
ICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpOworCisgICAgICAg
ICAgICB0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZSA9IHRoaXMuc2Nyb2xsTGVmdCA9PSAwID8gImFj
ZV9zY3JvbGxlciIgOiAiYWNlX3Njcm9sbGVyIGFjZV9zY3JvbGwtbGVmdCI7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9GVUxMKSB7CisgICAgICAgICAgICB0
aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOworICAgICAgICAgICAgdGhpcy4k
dXBkYXRlU2Nyb2xsQmFyKCk7CisgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKHRo
aXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAg
ICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Cisg
ICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAg
ICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAg
ICAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAg
ICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlz
LiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX1NDUk9MTCkgeworICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFy
KCk7CisgICAgICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwgY2hhbmdl
cyAmIHRoaXMuQ0hBTkdFX0xJTkVTKQorICAgICAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51
cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdGhpcy4kdGV4dExheWVyLnNjcm9sbExpbmVzKHRoaXMubGF5ZXJDb25maWcpOworCisgICAg
ICAgICAgICBpZiAodGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRl
ckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1hcmtl
ckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbWFya2Vy
RnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kY3Vyc29y
TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbW92ZVRl
eHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUg
JiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUKSB7
CisgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwor
ICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRn
dXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy4kdXBkYXRlTGluZXMoKSB8fCAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikgJiYg
dGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0
ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaGFuZ2Vz
ICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1
dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfQ1VSU09SKSB7CisgICAgICAgICAgICB0aGlzLiRj
dXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRt
b3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVy
TGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY2hhbmdlcyAmICh0aGlzLkNIQU5HRV9NQVJLRVIgfCB0aGlzLkNIQU5HRV9N
QVJLRVJfRlJPTlQpKSB7CisgICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhp
cy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhbmdlcyAmICh0aGlz
LkNIQU5HRV9NQVJLRVIgfCB0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSykpIHsKKyAgICAgICAgICAg
IHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TSVpFKQorICAgICAgICAgICAgdGhp
cy4kdXBkYXRlU2Nyb2xsQmFyKCk7CisgICAgfTsKKworICAgIHRoaXMuJGNvbXB1dGVMYXllckNv
bmZpZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsK
KworICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7
CisgICAgICAgIHZhciBtaW5IZWlnaHQgPSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ICsgdGhp
cy5saW5lSGVpZ2h0OworCisgICAgICAgIHZhciBsb25nZXN0TGluZSA9IHRoaXMuJGdldExvbmdl
c3RMaW5lKCk7CisKKyAgICAgICAgdmFyIGhvcml6U2Nyb2xsID0gdGhpcy4kaG9yaXpTY3JvbGxB
bHdheXNWaXNpYmxlIHx8IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIGxvbmdlc3RMaW5lIDwg
MDsKKyAgICAgICAgdmFyIGhvcml6U2Nyb2xsQ2hhbmdlZCA9IHRoaXMuJGhvcml6U2Nyb2xsICE9
PSBob3JpelNjcm9sbDsKKyAgICAgICAgdGhpcy4kaG9yaXpTY3JvbGwgPSBob3JpelNjcm9sbDsK
KyAgICAgICAgaWYgKGhvcml6U2Nyb2xsQ2hhbmdlZCkgeworICAgICAgICAgICAgdGhpcy5zY3Jv
bGxlci5zdHlsZS5vdmVyZmxvd1ggPSBob3JpelNjcm9sbCA/ICJzY3JvbGwiIDogImhpZGRlbiI7
CisgICAgICAgICAgICBpZiAoIWhvcml6U2Nyb2xsKQorICAgICAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5zZXRTY3JvbGxMZWZ0KDApOworICAgICAgICB9CisgICAgICAgIHZhciBtYXhIZWlnaHQg
PSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCkgKiB0aGlzLmxpbmVIZWlnaHQ7CisgICAg
ICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5z
Y3JvbGxUb3AsIG1heEhlaWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpKSk7CisKKyAg
ICAgICAgdmFyIGxpbmVDb3VudCA9IE1hdGguY2VpbChtaW5IZWlnaHQgLyB0aGlzLmxpbmVIZWln
aHQpIC0gMTsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgo
dGhpcy5zY3JvbGxUb3AgLSBvZmZzZXQpIC8gdGhpcy5saW5lSGVpZ2h0KSk7CisgICAgICAgIHZh
ciBsYXN0Um93ID0gZmlyc3RSb3cgKyBsaW5lQ291bnQ7CisgICAgICAgIHZhciBmaXJzdFJvd1Nj
cmVlbiwgZmlyc3RSb3dIZWlnaHQ7CisgICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5saW5l
SGVpZ2h0OworICAgICAgICBmaXJzdFJvdyA9IHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFJvdyhm
aXJzdFJvdywgMCk7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHNlc3Npb24uZ2V0Rm9sZExpbmUo
Zmlyc3RSb3cpOworICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgIGZpcnN0Um93
ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICB9CisKKyAgICAgICAgZmlyc3RSb3dTY3Jl
ZW4gPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3coZmlyc3RSb3csIDApOworICAgICAgICBm
aXJzdFJvd0hlaWdodCA9IHNlc3Npb24uZ2V0Um93TGVuZ3RoKGZpcnN0Um93KSAqIGxpbmVIZWln
aHQ7CisKKyAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVu
dFJvdyhsYXN0Um93LCAwKSwgc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDEpOworICAgICAgICBtaW5I
ZWlnaHQgPSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ICsgc2Vzc2lvbi5nZXRSb3dMZW5ndGgo
bGFzdFJvdykgKiBsaW5lSGVpZ2h0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Um93SGVpZ2h0OworCisgICAgICAgIG9mZnNldCA9IHRoaXMu
c2Nyb2xsVG9wIC0gZmlyc3RSb3dTY3JlZW4gKiBsaW5lSGVpZ2h0OworCisgICAgICAgIHRoaXMu
bGF5ZXJDb25maWcgPSB7CisgICAgICAgICAgICB3aWR0aCA6IGxvbmdlc3RMaW5lLAorICAgICAg
ICAgICAgcGFkZGluZyA6IHRoaXMuJHBhZGRpbmcsCisgICAgICAgICAgICBmaXJzdFJvdyA6IGZp
cnN0Um93LAorICAgICAgICAgICAgZmlyc3RSb3dTY3JlZW46IGZpcnN0Um93U2NyZWVuLAorICAg
ICAgICAgICAgbGFzdFJvdyA6IGxhc3RSb3csCisgICAgICAgICAgICBsaW5lSGVpZ2h0IDogbGlu
ZUhlaWdodCwKKyAgICAgICAgICAgIGNoYXJhY3RlcldpZHRoIDogdGhpcy5jaGFyYWN0ZXJXaWR0
aCwKKyAgICAgICAgICAgIG1pbkhlaWdodCA6IG1pbkhlaWdodCwKKyAgICAgICAgICAgIG1heEhl
aWdodCA6IG1heEhlaWdodCwKKyAgICAgICAgICAgIG9mZnNldCA6IG9mZnNldCwKKyAgICAgICAg
ICAgIGhlaWdodCA6IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQKKyAgICAgICAgfTsKKworICAg
ICAgICB0aGlzLiRndXR0ZXJMYXllci5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9ICgtb2Zmc2V0
KSArICJweCI7CisgICAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5Ub3AgPSAoLW9mZnNl
dCkgKyAicHgiOworICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSBsb25nZXN0TGlu
ZSArIDIgKiB0aGlzLiRwYWRkaW5nICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250ZW50LnN0eWxl
LmhlaWdodCA9IG1pbkhlaWdodCArICJweCI7CisgICAgICAgIGlmIChob3JpelNjcm9sbENoYW5n
ZWQpCisgICAgICAgICAgICB0aGlzLm9uUmVzaXplKHRydWUpOworICAgIH07CisKKyAgICB0aGlz
LiR1cGRhdGVMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlz
LiRjaGFuZ2VkTGluZXMuZmlyc3RSb3c7CisgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kY2hh
bmdlZExpbmVzLmxhc3RSb3c7CisgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcyA9IG51bGw7CisK
KyAgICAgICAgdmFyIGxheWVyQ29uZmlnID0gdGhpcy5sYXllckNvbmZpZzsKKworICAgICAgICBp
ZiAoZmlyc3RSb3cgPiBsYXllckNvbmZpZy5sYXN0Um93ICsgMSkgeyByZXR1cm47IH0KKyAgICAg
ICAgaWYgKGxhc3RSb3cgPCBsYXllckNvbmZpZy5maXJzdFJvdykgeyByZXR1cm47IH0KKyAgICAg
ICAgaWYgKGxhc3RSb3cgPT09IEluZmluaXR5KSB7CisgICAgICAgICAgICBpZiAodGhpcy5zaG93
R3V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShsYXllckNv
bmZpZyk7CisgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIu
dXBkYXRlTGluZXMobGF5ZXJDb25maWcsIGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMuJGdldExvbmdlc3RMaW5lID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBjaGFyQ291bnQgPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuV2lkdGgo
KTsKKyAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zaG93SW52aXNpYmxlcykKKyAgICAgICAg
ICAgIGNoYXJDb3VudCArPSAxOworCisgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLiRzaXpl
LnNjcm9sbGVyV2lkdGggLSAyICogdGhpcy4kcGFkZGluZywgTWF0aC5yb3VuZChjaGFyQ291bnQg
KiB0aGlzLmNoYXJhY3RlcldpZHRoKSk7CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUZyb250TWFy
a2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRNYXJrZXJz
KHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKHRydWUpKTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hl
ZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpOworICAgIH07CisgICAgdGhpcy51cGRhdGVC
YWNrTWFya2VycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldE1h
cmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoKSk7CisgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spOworICAgIH07CisgICAgdGhpcy5hZGRHdXR0
ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICB0aGlzLiRn
dXR0ZXJMYXllci5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKKyAgICB9Owor
ICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1l
KXsKKyAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihyb3cs
IGNsYXNzTmFtZSk7CisgICAgfTsKKyAgICB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzID0gZnVuY3Rp
b24ocm93cykgeworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRF
Uik7CisgICAgfTsKKyAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlv
bnMpIHsKKyAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlv
bnMpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUik7Cisg
ICAgfTsKKyAgICB0aGlzLnVwZGF0ZUN1cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0NVUlNPUik7CisgICAgfTsKKyAgICB0aGlzLmhp
ZGVDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIuaGlkZUN1
cnNvcigpOworICAgIH07CisgICAgdGhpcy5zaG93Q3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuJGN1cnNvckxheWVyLnNob3dDdXJzb3IoKTsKKyAgICB9OworCisgICAgdGhpcy5z
Y3JvbGxTZWxlY3Rpb25JbnRvVmlldyA9IGZ1bmN0aW9uKGFuY2hvciwgbGVhZCwgb2Zmc2V0KSB7
CisgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoYW5jaG9yLCBvZmZzZXQpOworICAg
ICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGxlYWQsIG9mZnNldCk7CisgICAgfTsKKyAg
ICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3ID0gZnVuY3Rpb24oY3Vyc29yLCBvZmZzZXQpIHsK
KyAgICAgICAgaWYgKHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgPT09IDApCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVs
UG9zaXRpb24oY3Vyc29yKTsKKworICAgICAgICB2YXIgbGVmdCA9IHBvcy5sZWZ0OworICAgICAg
ICB2YXIgdG9wID0gcG9zLnRvcDsKKworICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgPiB0b3Ap
IHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgICAgICAgICAgdG9wIC09IG9mZnNl
dCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24u
c2V0U2Nyb2xsVG9wKHRvcCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zY3JvbGxUb3AgKyB0
aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IDwgdG9wICsgdGhpcy5saW5lSGVpZ2h0KSB7CisgICAg
ICAgICAgICBpZiAob2Zmc2V0KQorICAgICAgICAgICAgICAgIHRvcCArPSBvZmZzZXQgKiB0aGlz
LiRzaXplLnNjcm9sbGVySGVpZ2h0OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9s
bFRvcCh0b3AgKyB0aGlzLmxpbmVIZWlnaHQgLSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0Owor
CisgICAgICAgIGlmIChzY3JvbGxMZWZ0ID4gbGVmdCkgeworICAgICAgICAgICAgaWYgKGxlZnQg
PCB0aGlzLiRwYWRkaW5nICsgMiAqIHRoaXMubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGgpCisg
ICAgICAgICAgICAgICAgbGVmdCA9IDA7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Ny
b2xsTGVmdChsZWZ0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0ICsgdGhpcy4kc2l6
ZS5zY3JvbGxlcldpZHRoIDwgbGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGgpIHsKKyAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgucm91bmQobGVmdCArIHRoaXMuY2hh
cmFjdGVyV2lkdGggLSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Nyb2xs
TGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9s
bExlZnQoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Nyb2xsVG9wUm93ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCAvIHRoaXMubGluZUhlaWdodDsKKyAgICB9
OworICAgIHRoaXMuZ2V0U2Nyb2xsQm90dG9tUm93ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUu
c2Nyb2xsZXJIZWlnaHQpIC8gdGhpcy5saW5lSGVpZ2h0KSAtIDEpOworICAgIH07CisgICAgdGhp
cy5zY3JvbGxUb1JvdyA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICB0aGlzLnNlc3Npb24uc2V0
U2Nyb2xsVG9wKHJvdyAqIHRoaXMubGluZUhlaWdodCk7CisgICAgfTsKKworICAgIHRoaXMuYWxp
Z25DdXJzb3IgPSBmdW5jdGlvbihjdXJzb3IsIGFsaWdubWVudCkgeworICAgICAgICBpZiAodHlw
ZW9mIGN1cnNvciA9PSAibnVtYmVyIikKKyAgICAgICAgICAgIGN1cnNvciA9IHtyb3c6IGN1cnNv
ciwgY29sdW1uOiAwfTsKKworICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0
UGl4ZWxQb3NpdGlvbihjdXJzb3IpOworICAgICAgICB2YXIgaCA9IHRoaXMuJHNpemUuc2Nyb2xs
ZXJIZWlnaHQgLSB0aGlzLmxpbmVIZWlnaHQ7CisgICAgICAgIHZhciBvZmZzZXQgPSBwb3MudG9w
IC0gaCAqIChhbGlnbm1lbnQgfHwgMCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9s
bFRvcChvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIH07CisKKyAgICB0aGlz
LlNURVBTID0gODsKKyAgICB0aGlzLiRjYWxjU3RlcHMgPSBmdW5jdGlvbihmcm9tVmFsdWUsIHRv
VmFsdWUpeworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZhciBsID0gdGhpcy5TVEVQUzsK
KyAgICAgICAgdmFyIHN0ZXBzID0gW107CisKKyAgICAgICAgdmFyIGZ1bmMgID0gZnVuY3Rpb24o
dCwgeF9taW4sIGR4KSB7CisgICAgICAgICAgICByZXR1cm4gZHggKiAoTWF0aC5wb3codCAtIDEs
IDMpICsgMSkgKyB4X21pbjsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
bDsgKytpKQorICAgICAgICAgICAgc3RlcHMucHVzaChmdW5jKGkgLyB0aGlzLlNURVBTLCBmcm9t
VmFsdWUsIHRvVmFsdWUgLSBmcm9tVmFsdWUpKTsKKworICAgICAgICByZXR1cm4gc3RlcHM7Cisg
ICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGNlbnRlciwgYW5p
bWF0ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGN1cnNvckxheWVyLmdl
dFBpeGVsUG9zaXRpb24oe3JvdzogbGluZSwgY29sdW1uOiAwfSk7CisgICAgICAgIHZhciBvZmZz
ZXQgPSBwb3MudG9wOworICAgICAgICBpZiAoY2VudGVyKQorICAgICAgICAgICAgb2Zmc2V0IC09
IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgLyAyOworCisgICAgICAgIHZhciBpbml0aWFsU2Ny
b2xsID0gdGhpcy5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Ao
b2Zmc2V0KTsKKyAgICAgICAgaWYgKGFuaW1hdGUgIT09IGZhbHNlKQorICAgICAgICAgICAgdGhp
cy5hbmltYXRlU2Nyb2xsaW5nKGluaXRpYWxTY3JvbGwsIGNhbGxiYWNrKTsKKyAgICB9OworCisg
ICAgdGhpcy5hbmltYXRlU2Nyb2xsaW5nID0gZnVuY3Rpb24oZnJvbVZhbHVlLCBjYWxsYmFjaykg
eworICAgICAgICB2YXIgdG9WYWx1ZSA9IHRoaXMuc2Nyb2xsVG9wOworICAgICAgICBpZiAodGhp
cy4kYW5pbWF0ZWRTY3JvbGwgJiYgTWF0aC5hYnMoZnJvbVZhbHVlIC0gdG9WYWx1ZSkgPCAxMDAw
MDApIHsKKyAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CisgICAgICAgICAgICB2YXIgc3Rl
cHMgPSBfc2VsZi4kY2FsY1N0ZXBzKGZyb21WYWx1ZSwgdG9WYWx1ZSk7CisgICAgICAgICAgICB0
aGlzLiRpblNjcm9sbEFuaW1hdGlvbiA9IHRydWU7CisKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2
YWwodGhpcy4kdGltZXIpOworCisgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9sbFRv
cChzdGVwcy5zaGlmdCgpKTsKKyAgICAgICAgICAgIHRoaXMuJHRpbWVyID0gc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0ZXBzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9sbFRvcChzdGVwcy5zaGlmdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gdG9WYWx1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRvVmFsdWUgIT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICBfc2VsZi5zZXNzaW9uLiRzY3JvbGxUb3AgPSAtMTsKKyAgICAgICAgICAgICAg
ICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9WYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHRvVmFsdWUgPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIF9zZWxmLiR0aW1lciA9IGNsZWFySW50ZXJ2YWwoX3NlbGYuJHRpbWVyKTsK
KyAgICAgICAgICAgICAgICAgICAgX3NlbGYuJGluU2Nyb2xsQW5pbWF0aW9uID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwgMTApOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNj
cm9sbFRvWSA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkgeworICAgICAgICBpZiAodGhpcy5zY3JvbGxU
b3AgIT09IHNjcm9sbFRvcCkgeworICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlz
LkNIQU5HRV9TQ1JPTEwpOworICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2Nyb2xsVG9YID0gZnVuY3Rpb24oc2Nyb2xs
TGVmdCkgeworICAgICAgICBpZiAoc2Nyb2xsTGVmdCA8IDApCisgICAgICAgICAgICBzY3JvbGxM
ZWZ0ID0gMDsKKworICAgICAgICBpZiAodGhpcy5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KQor
ICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICAgICAgdGhpcy4k
bG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9IX1NDUk9MTCk7CisgICAgfTsKKyAgICB0aGlzLnNj
cm9sbEJ5ID0gZnVuY3Rpb24oZGVsdGFYLCBkZWx0YVkpIHsKKyAgICAgICAgZGVsdGFZICYmIHRo
aXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpICsgZGVs
dGFZKTsKKyAgICAgICAgZGVsdGFYICYmIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHRoaXMu
c2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgKyBkZWx0YVgpOworICAgIH07CisgICAgdGhpcy5pc1Nj
cm9sbGFibGVCeSA9IGZ1bmN0aW9uKGRlbHRhWCwgZGVsdGFZKSB7CisgICAgICAgIGlmIChkZWx0
YVkgPCAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSA+IDApCisgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoZGVsdGFZID4gMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Ny
b2xsVG9wKCkgKyB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IDwgdGhpcy5sYXllckNvbmZpZy5t
YXhIZWlnaHQpCisgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLnBp
eGVsVG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0aW9uKHgsIHkpIHsKKyAgICAgICAgdmFyIGNh
bnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAg
ICAgdmFyIG9mZnNldCA9ICh4ICsgdGhpcy5zY3JvbGxMZWZ0IC0gY2FudmFzUG9zLmxlZnQgLSB0
aGlzLiRwYWRkaW5nKSAvIHRoaXMuY2hhcmFjdGVyV2lkdGg7CisgICAgICAgIHZhciByb3cgPSBN
YXRoLmZsb29yKCh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGlu
ZUhlaWdodCk7CisgICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKG9mZnNldCk7CisKKyAgICAg
ICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiBjb2wsIHNpZGU6IG9mZnNldCAtIGNvbCA+IDAg
PyAxIDogLTF9OworICAgIH07CisKKyAgICB0aGlzLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzID0g
ZnVuY3Rpb24oeCwgeSkgeworICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5zY3JvbGxlci5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB2YXIgY29sID0gTWF0aC5yb3VuZCgK
KyAgICAgICAgICAgICh4ICsgdGhpcy5zY3JvbGxMZWZ0IC0gY2FudmFzUG9zLmxlZnQgLSB0aGlz
LiRwYWRkaW5nKSAvIHRoaXMuY2hhcmFjdGVyV2lkdGgKKyAgICAgICAgKTsKKyAgICAgICAgdmFy
IHJvdyA9IE1hdGguZmxvb3IoCisgICAgICAgICAgICAoeSArIHRoaXMuc2Nyb2xsVG9wIC0gY2Fu
dmFzUG9zLnRvcCkgLyB0aGlzLmxpbmVIZWlnaHQKKyAgICAgICAgKTsKKworICAgICAgICByZXR1
cm4gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIE1hdGgubWF4KGNv
bCwgMCkpOworICAgIH07CisgICAgdGhpcy50ZXh0VG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVy
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9u
LmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGNvbHVtbik7CisKKyAgICAgICAgdmFyIHgg
PSB0aGlzLiRwYWRkaW5nICsgTWF0aC5yb3VuZChwb3MuY29sdW1uICogdGhpcy5jaGFyYWN0ZXJX
aWR0aCk7CisgICAgICAgIHZhciB5ID0gcG9zLnJvdyAqIHRoaXMubGluZUhlaWdodDsKKworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgcGFnZVg6IGNhbnZhc1Bvcy5sZWZ0ICsgeCAtIHRo
aXMuc2Nyb2xsTGVmdCwKKyAgICAgICAgICAgIHBhZ2VZOiBjYW52YXNQb3MudG9wICsgeSAtIHRo
aXMuc2Nyb2xsVG9wCisgICAgICAgIH07CisgICAgfTsKKyAgICB0aGlzLnZpc3VhbGl6ZUZvY3Vz
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwg
ImFjZV9mb2N1cyIpOworICAgIH07CisgICAgdGhpcy52aXN1YWxpemVCbHVyID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9mb2N1
cyIpOworICAgIH07CisgICAgdGhpcy5zaG93Q29tcG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlv
bikgeworICAgICAgICBpZiAoIXRoaXMuJGNvbXBvc2l0aW9uKQorICAgICAgICAgICAgdGhpcy4k
Y29tcG9zaXRpb24gPSB7CisgICAgICAgICAgICAgICAga2VlcFRleHRBcmVhQXRDdXJzb3I6IHRo
aXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yLAorICAgICAgICAgICAgICAgIGNzc1RleHQ6IHRoaXMu
dGV4dGFyZWEuc3R5bGUuY3NzVGV4dAorICAgICAgICAgICAgfTsKKworICAgICAgICB0aGlzLiRr
ZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7CisgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlz
LnRleHRhcmVhLCAiYWNlX2NvbXBvc2l0aW9uIik7CisgICAgICAgIHRoaXMudGV4dGFyZWEuc3R5
bGUuY3NzVGV4dCA9ICIiOworICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOwor
ICAgIH07CisgICAgdGhpcy5zZXRDb21wb3NpdGlvblRleHQgPSBmdW5jdGlvbih0ZXh0KSB7Cisg
ICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlzLmhp
ZGVDb21wb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJGNvbXBvc2l0
aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0
aGlzLnRleHRhcmVhLCAiYWNlX2NvbXBvc2l0aW9uIik7CisgICAgICAgIHRoaXMuJGtlZXBUZXh0
QXJlYUF0Q3Vyc29yID0gdGhpcy4kY29tcG9zaXRpb24ua2VlcFRleHRBcmVhQXRDdXJzb3I7Cisg
ICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IHRoaXMuJGNvbXBvc2l0aW9uLmNz
c1RleHQ7CisgICAgICAgIHRoaXMuJGNvbXBvc2l0aW9uID0gbnVsbDsKKyAgICB9OworCisgICAg
dGhpcy5fbG9hZFRoZW1lID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHsKKyAgICAgICAgCisg
ICAgfTsKKyAgICB0aGlzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHsKKyAgICAgICAgdmFy
IF9zZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy4kdGhlbWVWYWx1ZSA9IHRoZW1lOworICAgICAg
ICBfc2VsZi5fZGlzcGF0Y2hFdmVudCgndGhlbWVDaGFuZ2UnLHt0aGVtZTp0aGVtZX0pOworICAg
ICAgICAKKyAgICAgICAgaWYgKCF0aGVtZSB8fCB0eXBlb2YgdGhlbWUgPT0gInN0cmluZyIpIHsK
KyAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gdGhlbWUgfHwgImFjZS90aGVtZS90ZXh0bWF0
ZSI7CisgICAgICAgICAgICBjb25maWcubG9hZE1vZHVsZShbInRoZW1lIiwgbW9kdWxlTmFtZV0s
IGFmdGVyTG9hZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZnRlckxvYWQodGhl
bWUpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHRoZW1lKSB7Cisg
ICAgICAgICAgICBkb20uaW1wb3J0Q3NzU3RyaW5nKAorICAgICAgICAgICAgICAgIHRoZW1lLmNz
c1RleHQsCisgICAgICAgICAgICAgICAgdGhlbWUuY3NzQ2xhc3MsCisgICAgICAgICAgICAgICAg
X3NlbGYuY29udGFpbmVyLm93bmVyRG9jdW1lbnQKKyAgICAgICAgICAgICk7CisKKyAgICAgICAg
ICAgIGlmIChfc2VsZi50aGVtZSkKKyAgICAgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3Mo
X3NlbGYuY29udGFpbmVyLCBfc2VsZi50aGVtZS5jc3NDbGFzcyk7CisgICAgICAgICAgICBfc2Vs
Zi4kdGhlbWUgPSB0aGVtZS5jc3NDbGFzczsKKworICAgICAgICAgICAgX3NlbGYudGhlbWUgPSB0
aGVtZTsKKyAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyhfc2VsZi5jb250YWluZXIsIHRoZW1l
LmNzc0NsYXNzKTsKKyAgICAgICAgICAgIGRvbS5zZXRDc3NDbGFzcyhfc2VsZi5jb250YWluZXIs
ICJhY2VfZGFyayIsIHRoZW1lLmlzRGFyayk7CisKKyAgICAgICAgICAgIHZhciBwYWRkaW5nID0g
dGhlbWUucGFkZGluZyB8fCA0OworICAgICAgICAgICAgaWYgKF9zZWxmLiRwYWRkaW5nICYmIHBh
ZGRpbmcgIT0gX3NlbGYuJHBhZGRpbmcpCisgICAgICAgICAgICAgICAgX3NlbGYuc2V0UGFkZGlu
ZyhwYWRkaW5nKTsKKyAgICAgICAgICAgIGlmIChfc2VsZi4kc2l6ZSkgeworICAgICAgICAgICAg
ICAgIF9zZWxmLiRzaXplLndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBfc2VsZi5vblJlc2l6
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBfc2VsZi5fZGlz
cGF0Y2hFdmVudCgndGhlbWVMb2FkZWQnLHt0aGVtZTp0aGVtZX0pOworICAgICAgICB9CisgICAg
fTsKKyAgICB0aGlzLmdldFRoZW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlz
LiR0aGVtZVZhbHVlOworICAgIH07CisgICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uIHNldFN0
eWxlKHN0eWxlLCBpbmNsdWRlKSB7CisgICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLmNvbnRh
aW5lciwgc3R5bGUsIGluY2x1ZGUgIT0gZmFsc2UpOworICAgIH07CisgICAgdGhpcy51bnNldFN0
eWxlID0gZnVuY3Rpb24gdW5zZXRTdHlsZShzdHlsZSkgeworICAgICAgICBkb20ucmVtb3ZlQ3Nz
Q2xhc3ModGhpcy5jb250YWluZXIsIHN0eWxlKTsKKyAgICB9OworICAgIHRoaXMuZGVzdHJveSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuZGVzdHJveSgpOworICAgICAg
ICB0aGlzLiRjdXJzb3JMYXllci5kZXN0cm95KCk7CisgICAgfTsKKworfSkuY2FsbChWaXJ0dWFs
UmVuZGVyZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5WaXJ0dWFsUmVuZGVyZXIgPSBWaXJ0dWFs
UmVuZGVyZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xheWVyL2d1dHRlcicsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9vb3AnLCAn
YWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIp
OwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgi
Li4vbGliL2xhbmciKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRf
ZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKKwordmFyIEd1dHRlciA9IGZ1bmN0aW9uKHBhcmVudEVs
KSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9ndXR0ZXItbGF5ZXIiOworICAg
IHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgdGhpcy5zZXRTaG93Rm9s
ZFdpZGdldHModGhpcy4kc2hvd0ZvbGRXaWRnZXRzKTsKKyAgICAKKyAgICB0aGlzLmd1dHRlcldp
ZHRoID0gMDsKKworICAgIHRoaXMuJGFubm90YXRpb25zID0gW107CisgICAgdGhpcy4kdXBkYXRl
QW5ub3RhdGlvbnMgPSB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpOworfTsKKwor
KGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwor
CisgICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICBpZiAo
dGhpcy5zZXNzaW9uKQorICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoImNoYW5nZSIsIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zKTsKKyAgICAgICAgdGhpcy5zZXNz
aW9uID0gc2Vzc2lvbjsKKyAgICAgICAgc2Vzc2lvbi5vbigiY2hhbmdlIiwgdGhpcy4kdXBkYXRl
QW5ub3RhdGlvbnMpOworICAgIH07CisKKyAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBm
dW5jdGlvbihyb3csIGNsYXNzTmFtZSl7CisgICAgICAgIGlmICh3aW5kb3cuY29uc29sZSkKKyAg
ICAgICAgICAgIGNvbnNvbGUud2FybiAmJiBjb25zb2xlLndhcm4oImRlcHJlY2F0ZWQgdXNlIHNl
c3Npb24uYWRkR3V0dGVyRGVjb3JhdGlvbiIpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkR3V0
dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3Zl
R3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXsKKyAgICAgICAgaWYg
KHdpbmRvdy5jb25zb2xlKQorICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2Fy
bigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uIik7CisgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsK
KyAgICB9OworCisgICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25z
KSB7CisgICAgICAgIHRoaXMuJGFubm90YXRpb25zID0gW10KKyAgICAgICAgdmFyIHJvd0luZm8s
IHJvdzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTsKKyAgICAg
ICAgICAgIHZhciByb3cgPSBhbm5vdGF0aW9uLnJvdzsKKyAgICAgICAgICAgIHZhciByb3dJbmZv
ID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XTsKKyAgICAgICAgICAgIGlmICghcm93SW5mbykKKyAg
ICAgICAgICAgICAgICByb3dJbmZvID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XSA9IHt0ZXh0OiBb
XX07CisgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIGFubm9UZXh0ID0gYW5ub3RhdGlvbi50
ZXh0OworICAgICAgICAgICAgYW5ub1RleHQgPSBhbm5vVGV4dCA/IGxhbmcuZXNjYXBlSFRNTChh
bm5vVGV4dCkgOiBhbm5vdGF0aW9uLmh0bWwgfHwgIiI7CisKKyAgICAgICAgICAgIGlmIChyb3dJ
bmZvLnRleHQuaW5kZXhPZihhbm5vVGV4dCkgPT09IC0xKQorICAgICAgICAgICAgICAgIHJvd0lu
Zm8udGV4dC5wdXNoKGFubm9UZXh0KTsKKworICAgICAgICAgICAgdmFyIHR5cGUgPSBhbm5vdGF0
aW9uLnR5cGU7CisgICAgICAgICAgICBpZiAodHlwZSA9PSAiZXJyb3IiKQorICAgICAgICAgICAg
ICAgIHJvd0luZm8uY2xhc3NOYW1lID0gIiBhY2VfZXJyb3IiOworICAgICAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAid2FybmluZyIgJiYgcm93SW5mby5jbGFzc05hbWUgIT0gIiBhY2VfZXJyb3Ii
KQorICAgICAgICAgICAgICAgIHJvd0luZm8uY2xhc3NOYW1lID0gIiBhY2Vfd2FybmluZyI7Cisg
ICAgICAgICAgICBlbHNlIGlmICh0eXBlID09ICJpbmZvIiAmJiAoIXJvd0luZm8uY2xhc3NOYW1l
KSkKKyAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX2luZm8iOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zID0gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRhbm5vdGF0aW9ucy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHZhciBkZWx0YSA9IGUuZGF0YTsKKyAgICAgICAgdmFyIHJhbmdl
ID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZhciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsK
KyAgICAgICAgdmFyIGxlbiA9IHJhbmdlLmVuZC5yb3cgLSBmaXJzdFJvdzsKKyAgICAgICAgaWYg
KGxlbiA9PT0gMCkgeworICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3Zl
VGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAgICAgICAgICAgIHRo
aXMuJGFubm90YXRpb25zLnNwbGljZShmaXJzdFJvdywgbGVuICsgMSwgbnVsbCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5KGxlbiArIDEpOworICAgICAg
ICAgICAgYXJncy51bnNoaWZ0KGZpcnN0Um93LCAxKTsKKyAgICAgICAgICAgIHRoaXMuJGFubm90
YXRpb25zLnNwbGljZS5hcHBseSh0aGlzLiRhbm5vdGF0aW9ucywgYXJncyk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAg
dmFyIGVtcHR5QW5ubyA9IHtjbGFzc05hbWU6ICIifTsKKyAgICAgICAgdmFyIGh0bWwgPSBbXTsK
KyAgICAgICAgdmFyIGkgPSBjb25maWcuZmlyc3RSb3c7CisgICAgICAgIHZhciBsYXN0Um93ID0g
Y29uZmlnLmxhc3RSb3c7CisgICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldE5leHRG
b2xkTGluZShpKTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGQgPyBmb2xkLnN0YXJ0LnJv
dyA6IEluZmluaXR5OworICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLiRzaG93Rm9sZFdp
ZGdldHMgJiYgdGhpcy5zZXNzaW9uLmZvbGRXaWRnZXRzOworICAgICAgICB2YXIgYnJlYWtwb2lu
dHMgPSB0aGlzLnNlc3Npb24uJGJyZWFrcG9pbnRzOworICAgICAgICB2YXIgZGVjb3JhdGlvbnMg
PSB0aGlzLnNlc3Npb24uJGRlY29yYXRpb25zOworICAgICAgICB2YXIgbGFzdExpbmVOdW1iZXIg
PSAwOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZihpID4gZm9sZFN0
YXJ0KSB7CisgICAgICAgICAgICAgICAgaSA9IGZvbGQuZW5kLnJvdyArIDE7CisgICAgICAgICAg
ICAgICAgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoaSwgZm9sZCk7CisgICAg
ICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZCA/Zm9sZC5zdGFydC5yb3cgOkluZmluaXR5Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoaSA+IGxhc3RSb3cpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gdGhpcy4kYW5ub3RhdGlv
bnNbaV0gfHwgZW1wdHlBbm5vOworICAgICAgICAgICAgaHRtbC5wdXNoKAorICAgICAgICAgICAg
ICAgICI8ZGl2IGNsYXNzPSdhY2VfZ3V0dGVyLWNlbGwgIiwKKyAgICAgICAgICAgICAgICBicmVh
a3BvaW50c1tpXSB8fCAiIiwgZGVjb3JhdGlvbnNbaV0gfHwgIiIsIGFubm90YXRpb24uY2xhc3NO
YW1lLAorICAgICAgICAgICAgICAgICInIHN0eWxlPSdoZWlnaHQ6IiwgdGhpcy5zZXNzaW9uLmdl
dFJvd0xlbmd0aChpKSAqIGNvbmZpZy5saW5lSGVpZ2h0LCAicHg7Jz4iLCAKKyAgICAgICAgICAg
ICAgICBsYXN0TGluZU51bWJlciA9IGkgKyAxCisgICAgICAgICAgICApOworCisgICAgICAgICAg
ICBpZiAoZm9sZFdpZGdldHMpIHsKKyAgICAgICAgICAgICAgICB2YXIgYyA9IGZvbGRXaWRnZXRz
W2ldOworICAgICAgICAgICAgICAgIGlmIChjID09IG51bGwpCisgICAgICAgICAgICAgICAgICAg
IGMgPSBmb2xkV2lkZ2V0c1tpXSA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGkpOworICAg
ICAgICAgICAgICAgIGlmIChjKQorICAgICAgICAgICAgICAgICAgICBodG1sLnB1c2goCisgICAg
ICAgICAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9J2FjZV9mb2xkLXdpZGdldCBhY2VfIiwg
YywKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gInN0YXJ0IiAmJiBpID09IGZvbGRTdGFy
dCAmJiBpIDwgZm9sZC5lbmQucm93ID8gIiBhY2VfY2xvc2VkIiA6ICIgYWNlX29wZW4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIicgc3R5bGU9J2hlaWdodDoiLCBjb25maWcubGluZUhlaWdo
dCwgInB4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICInPjwvc3Bhbj4iCisgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGh0bWwucHVzaCgiPC9k
aXY+Iik7CisKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZWxl
bWVudCA9IGRvbS5zZXRJbm5lckh0bWwodGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKKyAg
ICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGNvbmZpZy5taW5IZWlnaHQgKyAicHgi
OworICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUpCisgICAg
ICAgICAgICBsYXN0TGluZU51bWJlciA9IHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKTsKKyAgICAg
ICAgCisgICAgICAgIHZhciBndXR0ZXJXaWR0aCA9ICgiIiArIGxhc3RMaW5lTnVtYmVyKS5sZW5n
dGggKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CisgICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4k
cGFkZGluZyB8fCB0aGlzLiRjb21wdXRlUGFkZGluZygpOworICAgICAgICBndXR0ZXJXaWR0aCAr
PSBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OworICAgICAgICBpZiAoZ3V0dGVyV2lkdGgg
IT09IHRoaXMuZ3V0dGVyV2lkdGgpIHsKKyAgICAgICAgICAgIHRoaXMuZ3V0dGVyV2lkdGggPSBn
dXR0ZXJXaWR0aDsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IE1hdGgu
Y2VpbCh0aGlzLmd1dHRlcldpZHRoKSArICJweCI7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VHdXR0ZXJXaWR0aCIsIGd1dHRlcldpZHRoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSB0cnVlOworICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRn
ZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAgICAgICBpZiAoc2hvdykKKyAgICAgICAgICAgIGRv
bS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfZm9sZGluZy1lbmFibGVkIik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJh
Y2VfZm9sZGluZy1lbmFibGVkIik7CisKKyAgICAgICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0g
c2hvdzsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLmdldFNob3dGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy4kc2hvd0ZvbGRXaWRnZXRzOworICAgIH07CisKKyAgICB0aGlzLiRjb21wdXRlUGFkZGluZyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5maXJzdENoaWxkKQorICAg
ICAgICAgICAgcmV0dXJuIHtsZWZ0OiAwLCByaWdodDogMH07CisgICAgICAgIHZhciBzdHlsZSA9
IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTsKKyAgICAgICAgdGhp
cy4kcGFkZGluZyA9IHt9CisgICAgICAgIHRoaXMuJHBhZGRpbmcubGVmdCA9IHBhcnNlSW50KHN0
eWxlLnBhZGRpbmdMZWZ0KSArIDE7CisgICAgICAgIHRoaXMuJHBhZGRpbmcucmlnaHQgPSBwYXJz
ZUludChzdHlsZS5wYWRkaW5nUmlnaHQpOyAgCisgICAgICAgIHJldHVybiB0aGlzLiRwYWRkaW5n
OworICAgIH07CisKKyAgICB0aGlzLmdldFJlZ2lvbiA9IGZ1bmN0aW9uKHBvaW50KSB7CisgICAg
ICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGluZyB8fCB0aGlzLiRjb21wdXRlUGFkZGluZygp
OworICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgaWYgKHBvaW50LnggPCBwYWRkaW5nLmxlZnQgKyByZWN0LmxlZnQpCisgICAg
ICAgICAgICByZXR1cm4gIm1hcmtlcnMiOworICAgICAgICBpZiAodGhpcy4kc2hvd0ZvbGRXaWRn
ZXRzICYmIHBvaW50LnggPiByZWN0LnJpZ2h0IC0gcGFkZGluZy5yaWdodCkKKyAgICAgICAgICAg
IHJldHVybiAiZm9sZFdpZGdldHMiOworICAgIH07CisKK30pLmNhbGwoR3V0dGVyLnByb3RvdHlw
ZSk7CisKK2V4cG9ydHMuR3V0dGVyID0gR3V0dGVyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNl
L2xheWVyL21hcmtlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Jh
bmdlJywgJ2FjZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgZG9tID0g
cmVxdWlyZSgiLi4vbGliL2RvbSIpOworCit2YXIgTWFya2VyID0gZnVuY3Rpb24ocGFyZW50RWwp
IHsKKyAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhp
cy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX21hcmtlci1sYXllciI7CisgICAg
cGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKK307CisKKyhmdW5jdGlvbigpIHsK
KworICAgIHRoaXMuJHBhZGRpbmcgPSAwOworCisgICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rp
b24ocGFkZGluZykgeworICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZzsKKyAgICB9Owor
ICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5z
ZXNzaW9uID0gc2Vzc2lvbjsKKyAgICB9OworICAgIAorICAgIHRoaXMuc2V0TWFya2VycyA9IGZ1
bmN0aW9uKG1hcmtlcnMpIHsKKyAgICAgICAgdGhpcy5tYXJrZXJzID0gbWFya2VyczsKKyAgICB9
OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdmFyIGNv
bmZpZyA9IGNvbmZpZyB8fCB0aGlzLmNvbmZpZzsKKyAgICAgICAgaWYgKCFjb25maWcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7CisKKworICAg
ICAgICB2YXIgaHRtbCA9IFtdOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5tYXJrZXJz
KSB7CisgICAgICAgICAgICB2YXIgbWFya2VyID0gdGhpcy5tYXJrZXJzW2tleV07CisKKyAgICAg
ICAgICAgIGlmICghbWFya2VyLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbWFya2VyLnVwZGF0
ZShodG1sLCB0aGlzLCB0aGlzLnNlc3Npb24sIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciByYW5nZSA9IG1hcmtlci5y
YW5nZS5jbGlwUm93cyhjb25maWcuZmlyc3RSb3csIGNvbmZpZy5sYXN0Um93KTsKKyAgICAgICAg
ICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIGNvbnRpbnVlOworCisgICAgICAgICAgICByYW5nZSA9
IHJhbmdlLnRvU2NyZWVuUmFuZ2UodGhpcy5zZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChtYXJr
ZXIucmVuZGVyZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJh
bmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHRoaXMu
JHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7Cisg
ICAgICAgICAgICAgICAgbWFya2VyLnJlbmRlcmVyKGh0bWwsIHJhbmdlLCBsZWZ0LCB0b3AsIGNv
bmZpZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlci50eXBlID09ICJmdWxsTGluZSIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlcihodG1sLCByYW5nZSwg
bWFya2VyLmNsYXp6LCBjb25maWcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5pc011
bHRpTGluZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09ICJ0ZXh0IikK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dE1hcmtlcihodG1sLCByYW5nZSwgbWFy
a2VyLmNsYXp6LCBjb25maWcpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenos
IGNvbmZpZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuZHJh
d1NpbmdsZUxpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiArICIgYWNlX3N0YXJ0
IiwgY29uZmlnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLmVsZW1l
bnQgPSBkb20uc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCwgaHRtbC5qb2luKCIiKSk7CisgICAg
fTsKKworICAgIHRoaXMuJGdldFRvcCA9IGZ1bmN0aW9uKHJvdywgbGF5ZXJDb25maWcpIHsKKyAg
ICAgICAgcmV0dXJuIChyb3cgLSBsYXllckNvbmZpZy5maXJzdFJvd1NjcmVlbikgKiBsYXllckNv
bmZpZy5saW5lSGVpZ2h0OworICAgIH07CisgICAgdGhpcy5kcmF3VGV4dE1hcmtlciA9IGZ1bmN0
aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgbGF5ZXJDb25maWcpIHsKKyAgICAgICAg
dmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKworICAgICAgICB2YXIgbGluZVJhbmdlID0gbmV3
IFJhbmdlKAorICAgICAgICAgICAgcm93LCByYW5nZS5zdGFydC5jb2x1bW4sCisgICAgICAgICAg
ICByb3csIHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHJvdykKKyAgICAgICAg
KTsKKyAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBsaW5l
UmFuZ2UsIGNsYXp6ICsgIiBhY2Vfc3RhcnQiLCBsYXllckNvbmZpZywgMSwgInRleHQiKTsKKyAg
ICAgICAgcm93ID0gcmFuZ2UuZW5kLnJvdzsKKyAgICAgICAgbGluZVJhbmdlID0gbmV3IFJhbmdl
KHJvdywgMCwgcm93LCByYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgdGhpcy5kcmF3U2luZ2xl
TGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZywg
MCwgInRleHQiKTsKKworICAgICAgICBmb3IgKHJvdyA9IHJhbmdlLnN0YXJ0LnJvdyArIDE7IHJv
dyA8IHJhbmdlLmVuZC5yb3c7IHJvdysrKSB7CisgICAgICAgICAgICBsaW5lUmFuZ2Uuc3RhcnQu
cm93ID0gcm93OworICAgICAgICAgICAgbGluZVJhbmdlLmVuZC5yb3cgPSByb3c7CisgICAgICAg
ICAgICBsaW5lUmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93
Q29sdW1uKHJvdyk7CisgICAgICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmlu
Z0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenosIGxheWVyQ29uZmlnLCAxLCAidGV4dCIpOworICAg
ICAgICB9CisgICAgfTsKKyAgICB0aGlzLmRyYXdNdWx0aUxpbmVNYXJrZXIgPSBmdW5jdGlvbihz
dHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgdHlwZSkgeworICAgICAgICB2YXIg
cGFkZGluZyA9IHRoaXMuJHBhZGRpbmc7CisgICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGlu
ZUhlaWdodDsKKyAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3cs
IGNvbmZpZyk7CisgICAgICAgIHZhciBsZWZ0ID0gcGFkZGluZyArIHJhbmdlLnN0YXJ0LmNvbHVt
biAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2go
CisgICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICIgYWNlX3N0YXJ0JyBzdHlsZT0n
IiwKKyAgICAgICAgICAgICJoZWlnaHQ6IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJy
aWdodDowOyIsCisgICAgICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAi
bGVmdDoiLCBsZWZ0LCAicHg7Jz48L2Rpdj4iCisgICAgICAgICk7CisgICAgICAgIHRvcCA9IHRo
aXMuJGdldFRvcChyYW5nZS5lbmQucm93LCBjb25maWcpOworICAgICAgICB2YXIgd2lkdGggPSBy
YW5nZS5lbmQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicgc3R5
bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAg
ICAid2lkdGg6Iiwgd2lkdGgsICJweDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsi
LAorICAgICAgICAgICAgImxlZnQ6IiwgcGFkZGluZywgInB4Oyc+PC9kaXY+IgorICAgICAgICAp
OworICAgICAgICBoZWlnaHQgPSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyAtIDEp
ICogY29uZmlnLmxpbmVIZWlnaHQ7CisgICAgICAgIGlmIChoZWlnaHQgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93ICsg
MSwgY29uZmlnKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCisgICAgICAgICAgICAi
PGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0eWxlPSciLAorICAgICAgICAgICAgImhlaWdodDoi
LCBoZWlnaHQsICJweDsiLAorICAgICAgICAgICAgInJpZ2h0OjA7IiwKKyAgICAgICAgICAgICJ0
b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OiIsIHBhZGRpbmcsICJweDsnPjwv
ZGl2PiIKKyAgICAgICAgKTsKKyAgICB9OworICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIg
PSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFMZW5n
dGgpIHsKKyAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICB2
YXIgd2lkdGggPSAocmFuZ2UuZW5kLmNvbHVtbiArIChleHRyYUxlbmd0aCB8fCAwKSAtIHJhbmdl
LnN0YXJ0LmNvbHVtbikgKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CisKKyAgICAgICAgdmFyIHRv
cCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CisgICAgICAgIHZhciBs
ZWZ0ID0gdGhpcy4kcGFkZGluZyArIHJhbmdlLnN0YXJ0LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0
ZXJXaWR0aDsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCisgICAgICAgICAgICAiPGRp
diBjbGFzcz0nIiwgY2xhenosICInIHN0eWxlPSciLAorICAgICAgICAgICAgImhlaWdodDoiLCBo
ZWlnaHQsICJweDsiLAorICAgICAgICAgICAgIndpZHRoOiIsIHdpZHRoLCAicHg7IiwKKyAgICAg
ICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OiIsIGxlZnQsInB4
Oyc+PC9kaXY+IgorICAgICAgICApOworICAgIH07CisKKyAgICB0aGlzLmRyYXdGdWxsTGluZU1h
cmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnKSB7Cisg
ICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOwor
ICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7CisgICAgICAgIGlmIChyYW5n
ZS5zdGFydC5yb3cgIT0gcmFuZ2UuZW5kLnJvdykKKyAgICAgICAgICAgIGhlaWdodCArPSB0aGlz
LiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKSAtIHRvcDsKKworICAgICAgICBzdHJpbmdC
dWlsZGVyLnB1c2goCisgICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0eWxl
PSciLAorICAgICAgICAgICAgImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAorICAgICAgICAgICAg
InRvcDoiLCB0b3AsICJweDsiLAorICAgICAgICAgICAgImxlZnQ6MDtyaWdodDowOyc+PC9kaXY+
IgorICAgICAgICApOworICAgIH0KKworfSkuY2FsbChNYXJrZXIucHJvdG90eXBlKTsKKworZXhw
b3J0cy5NYXJrZXIgPSBNYXJrZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGF5ZXIvdGV4
dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L2xpYi9kb20nLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvdXNlcmFnZW50JywgJ2FjZS9saWIv
ZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
Cit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGRvbSA9IHJlcXVpcmUoIi4u
L2xpYi9kb20iKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciB1c2Vy
YWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgRXZlbnRFbWl0dGVyID0g
cmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisKK3ZhciBUZXh0
ID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKKyAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNl
X3RleHQtbGF5ZXIiOworICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisK
KyAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9OworICAgIHRo
aXMuY2hlY2tGb3JTaXplQ2hhbmdlcygpOworICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlcygpOwor
fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOworCisgICAgdGhpcy5FT0ZfQ0hBUiA9ICJceEI2IjsgLy8iJnBhcmE7IjsKKyAgICB0aGlz
LkVPTF9DSEFSID0gIlx4QUMiOyAvLyImbm90OyI7CisgICAgdGhpcy5UQUJfQ0hBUiA9ICJcdTIx
OTIiOyAvLyImcmFycjsiICJcdTIxRTUiOworICAgIHRoaXMuU1BBQ0VfQ0hBUiA9ICJceEI3Ijsg
Ly8iJm1pZGRvdDsiOworICAgIHRoaXMuJHBhZGRpbmcgPSAwOworCisgICAgdGhpcy5zZXRQYWRk
aW5nID0gZnVuY3Rpb24ocGFkZGluZykgeworICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGlu
ZzsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnBhZGRpbmcgPSAiMCAiICsgcGFkZGluZyAr
ICJweCI7CisgICAgfTsKKworICAgIHRoaXMuZ2V0TGluZUhlaWdodCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHQgfHwgMTsKKyAgICB9Owor
CisgICAgdGhpcy5nZXRDaGFyYWN0ZXJXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCB8fCAxOworICAgIH07CisKKyAgICB0aGlzLmNo
ZWNrRm9yU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlz
LiRtZWFzdXJlU2l6ZXMoKTsKKyAgICAgICAgaWYgKHNpemUgJiYgKHRoaXMuJGNoYXJhY3RlclNp
emUud2lkdGggIT09IHNpemUud2lkdGggfHwgdGhpcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHQgIT09
IHNpemUuaGVpZ2h0KSkgeworICAgICAgICAgICAgdGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUuZm9u
dFdlaWdodCA9ICJib2xkIjsKKyAgICAgICAgICAgIHZhciBib2xkU2l6ZSA9IHRoaXMuJG1lYXN1
cmVTaXplcygpOworICAgICAgICAgICAgdGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUuZm9udFdlaWdo
dCA9ICIiOworICAgICAgICAgICAgdGhpcy4kY2hhcmFjdGVyU2l6ZSA9IHNpemU7CisgICAgICAg
ICAgICB0aGlzLmFsbG93Qm9sZEZvbnRzID0gYm9sZFNpemUgJiYgYm9sZFNpemUud2lkdGggPT09
IHNpemUud2lkdGggJiYgYm9sZFNpemUuaGVpZ2h0ID09PSBzaXplLmhlaWdodDsKKyAgICAgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZUNoYXJhY3RlclNpemUiLCB7ZGF0YTogc2l6ZX0pOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdl
c1RpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxmLmNoZWNr
Rm9yU2l6ZUNoYW5nZXMoKTsKKyAgICAgICAgfSwgNTAwKTsKKyAgICB9OworCisgICAgdGhpcy4k
Zm9udFN0eWxlcyA9IHsKKyAgICAgICAgZm9udEZhbWlseSA6IDEsCisgICAgICAgIGZvbnRTaXpl
IDogMSwKKyAgICAgICAgZm9udFdlaWdodCA6IDEsCisgICAgICAgIGZvbnRTdHlsZSA6IDEsCisg
ICAgICAgIGxpbmVIZWlnaHQgOiAxCisgICAgfTsKKworICAgIHRoaXMuJG1lYXN1cmVTaXplcyA9
IHVzZXJhZ2VudC5pc0lFIHx8IHVzZXJhZ2VudC5pc09sZEdlY2tvID8gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBuID0gMTAwMDsKKyAgICAgICAgaWYgKCF0aGlzLiRtZWFzdXJlTm9kZSkgewor
ICAgICAgICAgICAgdmFyIG1lYXN1cmVOb2RlID0gdGhpcy4kbWVhc3VyZU5vZGUgPSBkb20uY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB2YXIgc3R5bGUgPSBtZWFzdXJlTm9kZS5z
dHlsZTsKKworICAgICAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQgPSAiYXV0byI7
CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gKC1uICogNDApICArICJweCI7
CisKKyAgICAgICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICAgICAgICAg
IHN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0g
InZpc2libGUiOworICAgICAgICAgICAgc3R5bGUud2hpdGVTcGFjZSA9ICJub3dyYXAiOworICAg
ICAgICAgICAgbWVhc3VyZU5vZGUuaW5uZXJIVE1MID0gbGFuZy5zdHJpbmdSZXBlYXQoIlh5Iiwg
bik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5KSB7
CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChtZWFzdXJlTm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciBjb250YWluZXIgPSB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoIWRvbS5oYXNDc3NDbGFzcyhjb250YWluZXIsICJhY2VfZWRpdG9yIikpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlOworICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtZWFzdXJlTm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGgpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLiRtZWFz
dXJlTm9kZS5zdHlsZTsKKyAgICAgICAgdmFyIGNvbXB1dGVkU3R5bGUgPSBkb20uY29tcHV0ZWRT
dHlsZSh0aGlzLmVsZW1lbnQpOworICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuJGZvbnRT
dHlsZXMpCisgICAgICAgICAgICBzdHlsZVtwcm9wXSA9IGNvbXB1dGVkU3R5bGVbcHJvcF07CisK
KyAgICAgICAgdmFyIHNpemUgPSB7CisgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuJG1lYXN1cmVO
b2RlLm9mZnNldEhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoOiB0aGlzLiRtZWFzdXJlTm9kZS5v
ZmZzZXRXaWR0aCAvIChuICogMikKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHNpemUud2lkdGgg
PT0gMCB8fCBzaXplLmhlaWdodCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAg
ICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICghdGhpcy4kbWVhc3VyZU5vZGUpIHsKKyAgICAgICAgICAgIHZhciBtZWFzdXJlTm9kZSA9IHRo
aXMuJG1lYXN1cmVOb2RlID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAg
dmFyIHN0eWxlID0gbWVhc3VyZU5vZGUuc3R5bGU7CisKKyAgICAgICAgICAgIHN0eWxlLndpZHRo
ID0gc3R5bGUuaGVpZ2h0ID0gImF1dG8iOworICAgICAgICAgICAgc3R5bGUubGVmdCA9IHN0eWxl
LnRvcCA9IC0xMDAgKyAicHgiOworCisgICAgICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gImhp
ZGRlbiI7CisgICAgICAgICAgICBzdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CisgICAgICAgICAg
ICBzdHlsZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKKyAgICAgICAgICAgIHN0eWxlLndoaXRlU3Bh
Y2UgPSAibm93cmFwIjsKKworICAgICAgICAgICAgbWVhc3VyZU5vZGUuaW5uZXJIVE1MID0gIlgi
OworCisgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICYmICFkb20uaGFzQ3NzQ2xhc3MoY29udGFp
bmVyLCAiYWNlX2VkaXRvciIpKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5l
ci5wYXJlbnROb2RlOworCisgICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy4kbWVhc3VyZU5vZGUgPSBudWxsOworCisgICAgICAgICAgICBjb250
YWluZXIuYXBwZW5kQ2hpbGQobWVhc3VyZU5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHJlY3QgPSB0aGlzLiRtZWFzdXJlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAg
ICAgICB2YXIgc2l6ZSA9IHsKKyAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsCisgICAg
ICAgICAgICB3aWR0aDogcmVjdC53aWR0aAorICAgICAgICB9OworICAgICAgICBpZiAoc2l6ZS53
aWR0aCA9PSAwIHx8IHNpemUuaGVpZ2h0ID09IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9OworCisgICAgdGhpcy5zZXRTZXNzaW9uID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAg
ICAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCk7CisgICAgfTsKKworICAgIHRoaXMuc2hvd0lu
dmlzaWJsZXMgPSBmYWxzZTsKKyAgICB0aGlzLnNldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24o
c2hvd0ludmlzaWJsZXMpIHsKKyAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMgPT0gc2hv
d0ludmlzaWJsZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5z
aG93SW52aXNpYmxlcyA9IHNob3dJbnZpc2libGVzOworICAgICAgICB0aGlzLiRjb21wdXRlVGFi
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLmRpc3Bs
YXlJbmRlbnRHdWlkZXMgPSB0cnVlOworICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9
IGZ1bmN0aW9uKGRpc3BsYXkpIHsKKyAgICAgICAgaWYgKHRoaXMuZGlzcGxheUluZGVudEd1aWRl
cyA9PSBkaXNwbGF5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMu
ZGlzcGxheUluZGVudEd1aWRlcyA9IGRpc3BsYXk7CisgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHRoaXMuJHRhYlN0
cmluZ3MgPSBbXTsKKyAgICB0aGlzLm9uQ2hhbmdlVGFiU2l6ZSA9CisgICAgdGhpcy4kY29tcHV0
ZVRhYlN0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuc2Vz
c2lvbi5nZXRUYWJTaXplKCk7CisgICAgICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemU7CisgICAg
ICAgIHZhciB0YWJTdHIgPSB0aGlzLiR0YWJTdHJpbmdzID0gWzBdOworICAgICAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IHRhYlNpemUgKyAxOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNo
b3dJbnZpc2libGVzKSB7CisgICAgICAgICAgICAgICAgdGFiU3RyLnB1c2goIjxzcGFuIGNsYXNz
PSdhY2VfaW52aXNpYmxlJz4iCisgICAgICAgICAgICAgICAgICAgICsgdGhpcy5UQUJfQ0hBUgor
ICAgICAgICAgICAgICAgICAgICArIGxhbmcuc3RyaW5nUmVwZWF0KCJceGEwIiwgaSAtIDEpCisg
ICAgICAgICAgICAgICAgICAgICsgIjwvc3Bhbj4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdGFiU3RyLnB1c2gobGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCBpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZGlzcGxheUluZGVu
dEd1aWRlcykgeworICAgICAgICAgICAgdGhpcy4kaW5kZW50R3VpZGVSZSA9ICAvXHNcU3wgXHR8
XHQgfFxzJC87CisgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gImFjZV9pbmRlbnQtZ3VpZGUi
OworICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKKyAgICAgICAgICAgICAg
ICBjbGFzc05hbWUgKz0gIiBhY2VfaW52aXNpYmxlIjsKKyAgICAgICAgICAgICAgICB2YXIgc3Bh
Y2VDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQodGhpcy5TUEFDRV9DSEFSLCB0aGlzLnRhYlNp
emUpOworICAgICAgICAgICAgICAgIHZhciB0YWJDb250ZW50ID0gdGhpcy5UQUJfQ0hBUiArIGxh
bmcuc3RyaW5nUmVwZWF0KCJceGEwIiwgdGhpcy50YWJTaXplIC0gMSk7CisgICAgICAgICAgICB9
IGVsc2V7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNlQ29udGVudCA9IGxhbmcuc3RyaW5nUmVw
ZWF0KCJceGEwIiwgdGhpcy50YWJTaXplKTsKKyAgICAgICAgICAgICAgICB2YXIgdGFiQ29udGVu
dCA9IHNwYWNlQ29udGVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kdGFi
U3RyaW5nc1siICJdID0gIjxzcGFuIGNsYXNzPSciICsgY2xhc3NOYW1lICsgIic+IiArIHNwYWNl
Q29udGVudCArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIHRoaXMuJHRhYlN0cmluZ3NbIlx0Il0g
PSAiPHNwYW4gY2xhc3M9JyIgKyBjbGFzc05hbWUgKyAiJz4iICsgdGFiQ29udGVudCArICI8L3Nw
YW4+IjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLnVwZGF0ZUxpbmVzID0gZnVuY3Rp
b24oY29uZmlnLCBmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICBpZiAodGhpcy5jb25maWcu
bGFzdFJvdyAhPSBjb25maWcubGFzdFJvdyB8fAorICAgICAgICAgICAgdGhpcy5jb25maWcuZmly
c3RSb3cgIT0gY29uZmlnLmZpcnN0Um93KSB7CisgICAgICAgICAgICB0aGlzLnNjcm9sbExpbmVz
KGNvbmZpZyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7CisKKyAg
ICAgICAgdmFyIGZpcnN0ID0gTWF0aC5tYXgoZmlyc3RSb3csIGNvbmZpZy5maXJzdFJvdyk7Cisg
ICAgICAgIHZhciBsYXN0ID0gTWF0aC5taW4obGFzdFJvdywgY29uZmlnLmxhc3RSb3cpOworCisg
ICAgICAgIHZhciBsaW5lRWxlbWVudHMgPSB0aGlzLmVsZW1lbnQuY2hpbGROb2RlczsKKyAgICAg
ICAgdmFyIGxpbmVFbGVtZW50c0lkeCA9IDA7CisKKyAgICAgICAgZm9yICh2YXIgcm93ID0gY29u
ZmlnLmZpcnN0Um93OyByb3cgPCBmaXJzdDsgcm93KyspIHsKKyAgICAgICAgICAgIHZhciBmb2xk
TGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShyb3cpOworICAgICAgICAgICAgaWYgKGZv
bGRMaW5lKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmNvbnRhaW5zUm93KGZpcnN0
KSkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lRWxlbWVudHNJZHggKys7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgcm93ID0gZmlyc3Q7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRo
aXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9
IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAg
ICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93KzE7CisgICAgICAgICAgICAgICAgZm9sZExp
bmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOworICAgICAg
ICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDpJbmZp
bml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyb3cgPiBsYXN0KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2YXIgbGluZUVsZW1lbnQgPSBsaW5lRWxl
bWVudHNbbGluZUVsZW1lbnRzSWR4KytdOworICAgICAgICAgICAgaWYgKGxpbmVFbGVtZW50KSB7
CisgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgICAgICAgICB0aGlzLiRy
ZW5kZXJMaW5lKAorICAgICAgICAgICAgICAgICAgICBodG1sLCByb3csICF0aGlzLiR1c2VMaW5l
R3JvdXBzKCksIHJvdyA9PSBmb2xkU3RhcnQgPyBmb2xkTGluZSA6IGZhbHNlCisgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICBkb20uc2V0SW5uZXJIdG1sKGxpbmVFbGVtZW50LCBo
dG1sLmpvaW4oIiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJvdysrOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRoaXMuc2Nyb2xsTGluZXMgPSBmdW5jdGlvbihjb25maWcpIHsK
KyAgICAgICAgdmFyIG9sZENvbmZpZyA9IHRoaXMuY29uZmlnOworICAgICAgICB0aGlzLmNvbmZp
ZyA9IGNvbmZpZzsKKworICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRDb25maWcubGFzdFJv
dyA8IGNvbmZpZy5maXJzdFJvdykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25m
aWcpOworCisgICAgICAgIGlmIChjb25maWcubGFzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpOworCisgICAgICAgIHZhciBl
bCA9IHRoaXMuZWxlbWVudDsKKyAgICAgICAgaWYgKG9sZENvbmZpZy5maXJzdFJvdyA8IGNvbmZp
Zy5maXJzdFJvdykKKyAgICAgICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9s
ZGVkUm93Q291bnQob2xkQ29uZmlnLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cgLSAxKTsgcm93
PjA7IHJvdy0tKQorICAgICAgICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQp
OworCisgICAgICAgIGlmIChvbGRDb25maWcubGFzdFJvdyA+IGNvbmZpZy5sYXN0Um93KQorICAg
ICAgICAgICAgZm9yICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChjb25m
aWcubGFzdFJvdyArIDEsIG9sZENvbmZpZy5sYXN0Um93KTsgcm93PjA7IHJvdy0tKQorICAgICAg
ICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7CisKKyAgICAgICAgaWYgKGNv
bmZpZy5maXJzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykgeworICAgICAgICAgICAgdmFyIGZy
YWdtZW50ID0gdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChjb25maWcsIGNvbmZpZy5maXJzdFJv
dywgb2xkQ29uZmlnLmZpcnN0Um93IC0gMSk7CisgICAgICAgICAgICBpZiAoZWwuZmlyc3RDaGls
ZCkKKyAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIGVsLmZpcnN0Q2hp
bGQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGZy
YWdtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubGFzdFJvdyA+IG9sZENv
bmZpZy5sYXN0Um93KSB7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRyZW5kZXJM
aW5lc0ZyYWdtZW50KGNvbmZpZywgb2xkQ29uZmlnLmxhc3RSb3cgKyAxLCBjb25maWcubGFzdFJv
dyk7CisgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudCA9IGZ1bmN0aW9uKGNvbmZpZywg
Zmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy5lbGVtZW50
Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICB2YXIgcm93
ID0gZmlyc3RSb3c7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0
Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExp
bmUuc3RhcnQucm93IDogSW5maW5pdHk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xk
TGluZS5lbmQucm93KzE7CisgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24u
Z2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOworICAgICAgICAgICAgICAgIGZvbGRTdGFy
dCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKworICAgICAgICAgICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuJHJlbmRl
ckxpbmUoaHRtbCwgcm93LCBmYWxzZSwgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFs
c2UpOworICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7Cisg
ICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKSB7CisgICAgICAgICAgICAgICAg
Y29udGFpbmVyLmNsYXNzTmFtZSA9ICdhY2VfbGluZV9ncm91cCc7CisgICAgICAgICAgICAgICAg
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY29udGFpbmVyLmNoaWxkTm9kZXMKKyAgICAgICAg
ICAgICAgICB3aGlsZShsaW5lcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50
LmFwcGVuZENoaWxkKGxpbmVzWzBdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcm93
Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH07CisKKyAgICB0
aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB0aGlzLmNvbmZpZyA9IGNv
bmZpZzsKKworICAgICAgICB2YXIgaHRtbCA9IFtdOworICAgICAgICB2YXIgZmlyc3RSb3cgPSBj
b25maWcuZmlyc3RSb3csIGxhc3RSb3cgPSBjb25maWcubGFzdFJvdzsKKworICAgICAgICB2YXIg
cm93ID0gZmlyc3RSb3c7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRO
ZXh0Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9s
ZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICByb3cgPSBm
b2xkTGluZS5lbmQucm93KzE7CisgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Np
b24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOworICAgICAgICAgICAgICAgIGZvbGRT
dGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChyb3cgPiBsYXN0Um93KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKQorICAgICAgICAg
ICAgICAgIGh0bWwucHVzaCgiPGRpdiBjbGFzcz0nYWNlX2xpbmVfZ3JvdXAnPiIpCisKKyAgICAg
ICAgICAgIHRoaXMuJHJlbmRlckxpbmUoaHRtbCwgcm93LCBmYWxzZSwgcm93ID09IGZvbGRTdGFy
dCA/IGZvbGRMaW5lIDogZmFsc2UpOworCisgICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdy
b3VwcygpKQorICAgICAgICAgICAgICAgIGh0bWwucHVzaCgiPC9kaXY+Iik7IC8vIGVuZCB0aGUg
bGluZSBncm91cAorCisgICAgICAgICAgICByb3crKzsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LmVsZW1lbnQgPSBkb20uc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCwgaHRtbC5qb2luKCIiKSk7
CisgICAgfTsKKworICAgIHRoaXMuJHRleHRUb2tlbiA9IHsKKyAgICAgICAgInRleHQiOiB0cnVl
LAorICAgICAgICAicnBhcmVuIjogdHJ1ZSwKKyAgICAgICAgImxwYXJlbiI6IHRydWUKKyAgICB9
OworCisgICAgdGhpcy4kcmVuZGVyVG9rZW4gPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCBzY3Jl
ZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAg
ICAgIHZhciByZXBsYWNlUmVnID0gL1x0fCZ8PHwoICspfChbXHgwMC1ceDFmXHg4MC1ceGEwXHUx
NjgwXHUxODBFXHUyMDAwLVx1MjAwZlx1MjAyOFx1MjAyOVx1MjAyRlx1MjA1Rlx1MzAwMFx1RkVG
Rl0pfFtcdTExMDAtXHUxMTVGXHUxMUEzLVx1MTFBN1x1MTFGQS1cdTExRkZcdTIzMjktXHUyMzJB
XHUyRTgwLVx1MkU5OVx1MkU5Qi1cdTJFRjNcdTJGMDAtXHUyRkQ1XHUyRkYwLVx1MkZGQlx1MzAw
MC1cdTMwM0VcdTMwNDEtXHUzMDk2XHUzMDk5LVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUz
MThFXHUzMTkwLVx1MzFCQVx1MzFDMC1cdTMxRTNcdTMxRjAtXHUzMjFFXHUzMjIwLVx1MzI0N1x1
MzI1MC1cdTMyRkVcdTMzMDAtXHU0REJGXHU0RTAwLVx1QTQ4Q1x1QTQ5MC1cdUE0QzZcdUE5NjAt
XHVBOTdDXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkFG
Rlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZG
MDEtXHVGRjYwXHVGRkUwLVx1RkZFNl0vZzsKKyAgICAgICAgdmFyIHJlcGxhY2VGdW5jID0gZnVu
Y3Rpb24oYywgYSwgYiwgdGFiSWR4LCBpZHg0KSB7CisgICAgICAgICAgICBpZiAoYSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLnNob3dJbnZpc2libGVzID8KKyAgICAgICAgICAgICAg
ICAgICAgIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlJz4iICsgbGFuZy5zdHJpbmdSZXBlYXQo
c2VsZi5TUEFDRV9DSEFSLCBjLmxlbmd0aCkgKyAiPC9zcGFuPiIgOgorICAgICAgICAgICAgICAg
ICAgICBsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGMubGVuZ3RoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYyA9PSAiJiIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiYjMzg7IjsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAiPCIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IiYjNjA7IjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAiXHQiKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHRhYlNpemUgPSBzZWxmLnNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5D
b2x1bW4gKyB0YWJJZHgpOworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0YWJTaXpl
IC0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi4kdGFiU3RyaW5nc1t0YWJTaXplXTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAiXHUzMDAwIikgeworICAgICAgICAgICAgICAg
IHZhciBjbGFzc1RvVXNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/ICJhY2VfY2prIGFjZV9pbnZp
c2libGUiIDogImFjZV9jamsiOworICAgICAgICAgICAgICAgIHZhciBzcGFjZSA9IHNlbGYuc2hv
d0ludmlzaWJsZXMgPyBzZWxmLlNQQUNFX0NIQVIgOiAiIjsKKyAgICAgICAgICAgICAgICBzY3Jl
ZW5Db2x1bW4gKz0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxzcGFuIGNsYXNzPSciICsg
Y2xhc3NUb1VzZSArICInIHN0eWxlPSd3aWR0aDoiICsKKyAgICAgICAgICAgICAgICAgICAgKHNl
bGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgKworICAgICAgICAgICAgICAgICAgICAicHgn
PiIgKyBzcGFjZSArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYikgeworICAg
ICAgICAgICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUgYWNlX2ludmFs
aWQnPiIgKyBzZWxmLlNQQUNFX0NIQVIgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOworICAgICAgICAgICAgICAgIHJl
dHVybiAiPHNwYW4gY2xhc3M9J2FjZV9jamsnIHN0eWxlPSd3aWR0aDoiICsKKyAgICAgICAgICAg
ICAgICAgICAgKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgKworICAgICAgICAgICAg
ICAgICAgICAicHgnPiIgKyBjICsgIjwvc3Bhbj4iOworICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIHZhciBvdXRwdXQgPSB2YWx1ZS5yZXBsYWNlKHJlcGxhY2VSZWcsIHJlcGxh
Y2VGdW5jKTsKKworICAgICAgICBpZiAoIXRoaXMuJHRleHRUb2tlblt0b2tlbi50eXBlXSkgewor
ICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSAiYWNlXyIgKyB0b2tlbi50eXBlLnJlcGxhY2UoL1wu
L2csICIgYWNlXyIpOworICAgICAgICAgICAgdmFyIHN0eWxlID0gIiI7CisgICAgICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PSAiZm9sZCIpCisgICAgICAgICAgICAgICAgc3R5bGUgPSAiIHN0eWxl
PSd3aWR0aDoiICsgKHRva2VuLnZhbHVlLmxlbmd0aCAqIHRoaXMuY29uZmlnLmNoYXJhY3Rlcldp
ZHRoKSArICJweDsnICI7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIjxzcGFuIGNs
YXNzPSciLCBjbGFzc2VzLCAiJyIsIHN0eWxlLCAiPiIsIG91dHB1dCwgIjwvc3Bhbj4iKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChv
dXRwdXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzY3JlZW5Db2x1bW4gKyB2YWx1ZS5s
ZW5ndGg7CisgICAgfTsKKworICAgIHRoaXMucmVuZGVySW5kZW50R3VpZGUgPSBmdW5jdGlvbihz
dHJpbmdCdWlsZGVyLCB2YWx1ZSkgeworICAgICAgICB2YXIgY29scyA9IHZhbHVlLnNlYXJjaCh0
aGlzLiRpbmRlbnRHdWlkZVJlKTsKKyAgICAgICAgaWYgKGNvbHMgPD0gMCkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgaWYgKHZhbHVlWzBdID09ICIgIikgeworICAgICAgICAg
ICAgY29scyAtPSBjb2xzICUgdGhpcy50YWJTaXplOworICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuJHRhYlN0cmluZ3NbIiAiXSwgY29scy90aGlz
LnRhYlNpemUpKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHIoY29scyk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmFsdWVbMF0gPT0gIlx0IikgeworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuJHRhYlN0cmluZ3NbIlx0Il0sIGNvbHMp
KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHIoY29scyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH07CisKKyAgICB0aGlzLiRyZW5kZXJXcmFwcGVkTGlu
ZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHRva2Vucywgc3BsaXRzLCBvbmx5Q29udGVudHMp
IHsKKyAgICAgICAgdmFyIGNoYXJzID0gMDsKKyAgICAgICAgdmFyIHNwbGl0ID0gMDsKKyAgICAg
ICAgdmFyIHNwbGl0Q2hhcnMgPSBzcGxpdHNbMF07CisgICAgICAgIHZhciBzY3JlZW5Db2x1bW4g
PSAwOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpID09IDAgJiYgdGhpcy5kaXNwbGF5
SW5kZW50R3VpZGVzKSB7CisgICAgICAgICAgICAgICAgY2hhcnMgPSB2YWx1ZS5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJlbmRlckluZGVudEd1aWRlKHN0cmluZ0J1aWxk
ZXIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFycyAtPSB2YWx1ZS5sZW5ndGg7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaGFycyArIHZhbHVlLmxlbmd0aCA8IHNw
bGl0Q2hhcnMpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJU
b2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgY2hhcnMgKz0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoY2hhcnMgKyB2YWx1ZS5sZW5ndGggPj0gc3BsaXRDaGFycykg
eworICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbigK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCB2YWx1ZS5zdWJzdHJpbmcoMCwgc3BsaXRDaGFy
cyAtIGNoYXJzKQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhzcGxpdENoYXJzIC0gY2hhcnMpOworICAgICAgICAgICAg
ICAgICAgICBjaGFycyA9IHNwbGl0Q2hhcnM7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFv
bmx5Q29udGVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVz
aCgiPC9kaXY+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYWNl
X2xpbmUnIHN0eWxlPSdoZWlnaHQ6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbmZpZy5saW5lSGVpZ2h0LCAicHgnPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzcGxpdCArKzsKKyAg
ICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
c3BsaXRDaGFycyA9IHNwbGl0c1tzcGxpdF0gfHwgTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNoYXJzICs9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZQorICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0aGlzLiRyZW5kZXJTaW1wbGVMaW5lID0gZnVuY3Rpb24oc3RyaW5n
QnVpbGRlciwgdG9rZW5zKSB7CisgICAgICAgIHZhciBzY3JlZW5Db2x1bW4gPSAwOworICAgICAg
ICB2YXIgdG9rZW4gPSB0b2tlbnNbMF07CisgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVl
OworICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKQorICAgICAgICAgICAgdmFs
dWUgPSB0aGlzLnJlbmRlckluZGVudEd1aWRlKHN0cmluZ0J1aWxkZXIsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9r
ZW4oc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOworICAgICAgICBm
b3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdG9r
ZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAgICAg
ICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oc3RyaW5nQnVpbGRlciwgc2Ny
ZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLiRy
ZW5kZXJMaW5lID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcm93LCBvbmx5Q29udGVudHMsIGZv
bGRMaW5lKSB7CisgICAgICAgIGlmICghZm9sZExpbmUgJiYgZm9sZExpbmUgIT0gZmFsc2UpCisg
ICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShyb3cpOworCisg
ICAgICAgIGlmIChmb2xkTGluZSkKKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLiRnZXRG
b2xkTGluZVRva2Vucyhyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dmFyIHRva2VucyA9IHRoaXMuc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKworCisgICAgICAgIGlm
ICghb25seUNvbnRlbnRzKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCisgICAg
ICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OiIsIHRoaXMu
Y29uZmlnLmxpbmVIZWlnaHQsICJweCc+IgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh0b2tlbnMubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhp
cy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YShyb3cpOworICAgICAgICAgICAgaWYgKHNwbGl0cyAm
JiBzcGxpdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5l
KHN0cmluZ0J1aWxkZXIsIHRva2Vucywgc3BsaXRzLCBvbmx5Q29udGVudHMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUoc3RyaW5nQnVp
bGRlciwgdG9rZW5zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2li
bGVzKSB7CisgICAgICAgICAgICBpZiAoZm9sZExpbmUpCisgICAgICAgICAgICAgICAgcm93ID0g
Zm9sZExpbmUuZW5kLnJvdworCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCisgICAg
ICAgICAgICAgICAgIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlJz4iLAorICAgICAgICAgICAg
ICAgIHJvdyA9PSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxID8gdGhpcy5FT0ZfQ0hBUiA6
IHRoaXMuRU9MX0NIQVIsCisgICAgICAgICAgICAgICAgIjwvc3Bhbj4iCisgICAgICAgICAgICAp
OworICAgICAgICB9CisgICAgICAgIGlmICghb25seUNvbnRlbnRzKQorICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5wdXNoKCI8L2Rpdj4iKTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0Rm9sZExp
bmVUb2tlbnMgPSBmdW5jdGlvbihyb3csIGZvbGRMaW5lKSB7CisgICAgICAgIHZhciBzZXNzaW9u
ID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgcmVuZGVyVG9rZW5zID0gW107CisKKyAgICAg
ICAgZnVuY3Rpb24gYWRkVG9rZW5zKHRva2VucywgZnJvbSwgdG8pIHsKKyAgICAgICAgICAgIHZh
ciBpZHggPSAwLCBjb2wgPSAwOworICAgICAgICAgICAgd2hpbGUgKChjb2wgKyB0b2tlbnNbaWR4
XS52YWx1ZS5sZW5ndGgpIDwgZnJvbSkgeworICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNb
aWR4XS52YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWR4Kys7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaWR4ID09IHRva2Vucy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2wgIT0gZnJvbSkgeworICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2Vuc1tpZHhdLnZhbHVlLnN1YnN0cmluZyhmcm9tIC0g
Y29sKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gKHRvIC0gZnJvbSkpCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHRvIC0gZnJvbSk7
CisKKyAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IHRva2Vuc1tpZHhdLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2
YWx1ZQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgY29sID0gZnJvbSAr
IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBpZHggKz0gMTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgd2hpbGUgKGNvbCA8IHRvICYmIGlkeCA8IHRva2Vucy5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnNbaWR4XS52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAodmFsdWUubGVuZ3RoICsgY29sID4gdG8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyVG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9r
ZW5zW2lkeF0udHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5zdWJz
dHJpbmcoMCwgdG8gLSBjb2wpCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh0b2tlbnNb
aWR4XSk7CisgICAgICAgICAgICAgICAgY29sICs9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICBpZHggKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciB0
b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOworICAgICAgICBmb2xkTGluZS53YWxrKGZ1
bmN0aW9uKHBsYWNlaG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbiwgaXNOZXdSb3cpIHsK
KyAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAg
cmVuZGVyVG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZm9sZCIsCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwbGFjZWhvbGRlcgorICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNOZXdSb3cpCisg
ICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CisKKyAg
ICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgYWRk
VG9rZW5zKHRva2VucywgbGFzdENvbHVtbiwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwgZm9sZExpbmUuZW5kLnJvdywgdGhpcy5zZXNzaW9uLmdldExpbmUoZm9sZExpbmUuZW5k
LnJvdykubGVuZ3RoKTsKKworICAgICAgICByZXR1cm4gcmVuZGVyVG9rZW5zOworICAgIH07CisK
KyAgICB0aGlzLiR1c2VMaW5lR3JvdXBzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKTsKKyAgICB9OworCisgICAgdGhpcy5kZXN0cm95
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFu
Z2VzVGltZXIpOworICAgICAgICBpZiAodGhpcy4kbWVhc3VyZU5vZGUpCisgICAgICAgICAgICB0
aGlzLiRtZWFzdXJlTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJG1lYXN1cmVOb2Rl
KTsKKyAgICAgICAgZGVsZXRlIHRoaXMuJG1lYXN1cmVOb2RlOworICAgIH07CisKK30pLmNhbGwo
VGV4dC5wcm90b3R5cGUpOworCitleHBvcnRzLlRleHQgPSBUZXh0OworCit9KTsKKworYWNlLmRl
ZmluZSgnYWNlL2xheWVyL2N1cnNvcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9kb20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKKwordmFyIEN1cnNvciA9IGZ1bmN0
aW9uKHBhcmVudEVsKSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9jdXJzb3It
bGF5ZXIiOworICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisKKyAgICB0
aGlzLmlzVmlzaWJsZSA9IGZhbHNlOworICAgIHRoaXMuaXNCbGlua2luZyA9IHRydWU7CisgICAg
dGhpcy5ibGlua0ludGVydmFsID0gMTAwMDsKKyAgICB0aGlzLnNtb290aEJsaW5raW5nID0gZmFs
c2U7CisKKyAgICB0aGlzLmN1cnNvcnMgPSBbXTsKKyAgICB0aGlzLmN1cnNvciA9IHRoaXMuYWRk
Q3Vyc29yKCk7CisgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9oaWRkZW4t
Y3Vyc29ycyIpOworfTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcGFkZGluZyA9IDA7
CisgICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykgeworICAgICAgICB0aGlz
LiRwYWRkaW5nID0gcGFkZGluZzsKKyAgICB9OworCisgICAgdGhpcy5zZXRTZXNzaW9uID0gZnVu
Y3Rpb24oc2Vzc2lvbikgeworICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgIH07
CisKKyAgICB0aGlzLnNldEJsaW5raW5nID0gZnVuY3Rpb24oYmxpbmtpbmcpIHsKKyAgICAgICAg
aWYgKGJsaW5raW5nICE9IHRoaXMuaXNCbGlua2luZyl7CisgICAgICAgICAgICB0aGlzLmlzQmxp
bmtpbmcgPSBibGlua2luZzsKKyAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGhpcy5zZXRCbGlua0ludGVydmFsID0gZnVuY3Rpb24oYmxp
bmtJbnRlcnZhbCkgeworICAgICAgICBpZiAoYmxpbmtJbnRlcnZhbCAhPSB0aGlzLmJsaW5rSW50
ZXJ2YWwpeworICAgICAgICAgICAgdGhpcy5ibGlua0ludGVydmFsID0gYmxpbmtJbnRlcnZhbDsK
KyAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGhpcy5zZXRTbW9vdGhCbGlua2luZyA9IGZ1bmN0aW9uKHNtb290aEJsaW5raW5nKSB7Cisg
ICAgICAgIGlmIChzbW9vdGhCbGlua2luZyAhPSB0aGlzLnNtb290aEJsaW5raW5nKSB7CisgICAg
ICAgICAgICB0aGlzLnNtb290aEJsaW5raW5nID0gc21vb3RoQmxpbmtpbmc7CisgICAgICAgICAg
ICBpZiAoc21vb3RoQmxpbmtpbmcpCisgICAgICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRo
aXMuZWxlbWVudCwgImFjZV9zbW9vdGgtYmxpbmtpbmciKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290
aC1ibGlua2luZyIpOworICAgICAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0aGlzLmFkZEN1cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsLmNsYXNzTmFtZSA9
ICJhY2VfY3Vyc29yIjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsKTsKKyAg
ICAgICAgdGhpcy5jdXJzb3JzLnB1c2goZWwpOworICAgICAgICByZXR1cm4gZWw7CisgICAgfTsK
KworICAgIHRoaXMucmVtb3ZlQ3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz
LmN1cnNvcnMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5jdXJzb3Jz
LnBvcCgpOworICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7CisgICAg
ICAgICAgICByZXR1cm4gZWw7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5oaWRlQ3Vy
c29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CisgICAg
ICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfaGlkZGVuLWN1cnNvcnMiKTsK
KyAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICB9OworCisgICAgdGhpcy5zaG93Q3Vy
c29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAg
ICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIp
OworICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgIH07CisKKyAgICB0aGlzLnJlc3Rh
cnRUaW1lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2
YWxJZCk7CisgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7CisgICAgICAgIGlm
ICh0aGlzLnNtb290aEJsaW5raW5nKQorICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRo
aXMuZWxlbWVudCwgImFjZV9zbW9vdGgtYmxpbmtpbmciKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuY3Vyc29ycy5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAgdGhpcy5jdXJzb3JzW2ld
LnN0eWxlLm9wYWNpdHkgPSAiIjsKKworICAgICAgICBpZiAoIXRoaXMuaXNCbGlua2luZyB8fCAh
dGhpcy5ibGlua0ludGVydmFsIHx8ICF0aGlzLmlzVmlzaWJsZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAodGhpcy5zbW9vdGhCbGlua2luZykKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5l
bGVtZW50LCAiYWNlX3Ntb290aC1ibGlua2luZyIpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMp
KTsKKworICAgICAgICB2YXIgYmxpbmsgPSBmdW5jdGlvbigpeworICAgICAgICAgICAgdGhpcy50
aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSB0aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwLjYgKiB0aGlzLmJsaW5rSW50ZXJ2YWwpOworICAg
ICAgICB9LmJpbmQodGhpcyk7CisKKyAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2
YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jdXJzb3JzLmxl
bmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmN1cnNvcnNbaV0uc3R5bGUub3Bh
Y2l0eSA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxpbmsoKTsKKyAgICAgICAg
fS5iaW5kKHRoaXMpLCB0aGlzLmJsaW5rSW50ZXJ2YWwpOworCisgICAgICAgIGJsaW5rKCk7Cisg
ICAgfTsKKworICAgIHRoaXMuZ2V0UGl4ZWxQb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBv
blNjcmVlbikgeworICAgICAgICBpZiAoIXRoaXMuY29uZmlnIHx8ICF0aGlzLnNlc3Npb24pCisg
ICAgICAgICAgICByZXR1cm4ge2xlZnQgOiAwLCB0b3AgOiAwfTsKKworICAgICAgICBpZiAoIXBv
c2l0aW9uKQorICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdl
dEN1cnNvcigpOworICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3Jl
ZW5Qb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIHZhciBjdXJzb3JMZWZ0ID0gdGhpcy4kcGFk
ZGluZyArIHBvcy5jb2x1bW4gKiB0aGlzLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKyAgICAgICAg
dmFyIGN1cnNvclRvcCA9IChwb3Mucm93IC0gKG9uU2NyZWVuID8gdGhpcy5jb25maWcuZmlyc3RS
b3dTY3JlZW4gOiAwKSkgKgorICAgICAgICAgICAgdGhpcy5jb25maWcubGluZUhlaWdodDsKKwor
ICAgICAgICByZXR1cm4ge2xlZnQgOiBjdXJzb3JMZWZ0LCB0b3AgOiBjdXJzb3JUb3B9OworICAg
IH07CisKKyAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICB0aGlz
LmNvbmZpZyA9IGNvbmZpZzsKKworICAgICAgICB2YXIgc2VsZWN0aW9ucyA9IHRoaXMuc2Vzc2lv
bi4kc2VsZWN0aW9uTWFya2VyczsKKyAgICAgICAgdmFyIGkgPSAwLCBjdXJzb3JJbmRleCA9IDA7
CisKKyAgICAgICAgaWYgKHNlbGVjdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb25zLmxl
bmd0aCA9PT0gMCl7CisgICAgICAgICAgICBzZWxlY3Rpb25zID0gW3tjdXJzb3I6IG51bGx9XTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSBzZWxlY3Rpb25zLmxlbmd0aDsgaS0t
OyApIHsKKyAgICAgICAgICAgIHZhciBwaXhlbFBvcyA9IHRoaXMuZ2V0UGl4ZWxQb3NpdGlvbihz
ZWxlY3Rpb25zW2ldLmN1cnNvciwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoKHBpeGVsUG9zLnRv
cCA+IGNvbmZpZy5oZWlnaHQgKyBjb25maWcub2Zmc2V0IHx8CisgICAgICAgICAgICAgICAgIHBp
eGVsUG9zLnRvcCA8IC1jb25maWcub2Zmc2V0KSAmJiBpID4gMSkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgc3R5bGUgPSAodGhp
cy5jdXJzb3JzW2N1cnNvckluZGV4KytdIHx8IHRoaXMuYWRkQ3Vyc29yKCkpLnN0eWxlOworCisg
ICAgICAgICAgICBzdHlsZS5sZWZ0ID0gcGl4ZWxQb3MubGVmdCArICJweCI7CisgICAgICAgICAg
ICBzdHlsZS50b3AgPSBwaXhlbFBvcy50b3AgKyAicHgiOworICAgICAgICAgICAgc3R5bGUud2lk
dGggPSBjb25maWcuY2hhcmFjdGVyV2lkdGggKyAicHgiOworICAgICAgICAgICAgc3R5bGUuaGVp
Z2h0ID0gY29uZmlnLmxpbmVIZWlnaHQgKyAicHgiOworICAgICAgICB9CisgICAgICAgIHdoaWxl
ICh0aGlzLmN1cnNvcnMubGVuZ3RoID4gY3Vyc29ySW5kZXgpCisgICAgICAgICAgICB0aGlzLnJl
bW92ZUN1cnNvcigpOworCisgICAgICAgIHZhciBvdmVyd3JpdGUgPSB0aGlzLnNlc3Npb24uZ2V0
T3ZlcndyaXRlKCk7CisgICAgICAgIHRoaXMuJHNldE92ZXJ3cml0ZShvdmVyd3JpdGUpOworICAg
ICAgICB0aGlzLiRwaXhlbFBvcyA9IHBpeGVsUG9zOworICAgICAgICB0aGlzLnJlc3RhcnRUaW1l
cigpOworICAgIH07CisKKyAgICB0aGlzLiRzZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3Jp
dGUpIHsKKyAgICAgICAgaWYgKG92ZXJ3cml0ZSAhPSB0aGlzLm92ZXJ3cml0ZSkgeworICAgICAg
ICAgICAgdGhpcy5vdmVyd3JpdGUgPSBvdmVyd3JpdGU7CisgICAgICAgICAgICBpZiAob3Zlcndy
aXRlKQorICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vf
b3ZlcndyaXRlLWN1cnNvcnMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBk
b20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX292ZXJ3cml0ZS1jdXJzb3JzIik7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTsKKyAgICAgICAgY2xlYXJUaW1l
b3V0KHRoaXMudGltZW91dElkKTsKKyAgICB9OworCit9KS5jYWxsKEN1cnNvci5wcm90b3R5cGUp
OworCitleHBvcnRzLkN1cnNvciA9IEN1cnNvcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9z
Y3JvbGxiYXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29w
JywgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVy
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSBy
ZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKK3Zh
ciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVx
dWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBTY3JvbGxCYXIg
PSBmdW5jdGlvbihwYXJlbnQpIHsKKyAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2Vfc2Nyb2xsYmFyIjsK
KworICAgIHRoaXMuaW5uZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5p
bm5lci5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGJhci1pbm5lciI7CisgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpOworCisgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMu
ZWxlbWVudCk7CisgICAgdGhpcy53aWR0aCA9IGRvbS5zY3JvbGxiYXJXaWR0aChwYXJlbnQub3du
ZXJEb2N1bWVudCk7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gKHRoaXMud2lkdGgg
fHwgMTUpICsgNSArICJweCI7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0aGlzLmVsZW1lbnQs
ICJzY3JvbGwiLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpOworfTsKKworKGZ1bmN0aW9uKCkg
eworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLm9uU2Ny
b2xsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5za2lwRXZlbnQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcDsKKyAgICAgICAg
ICAgIHRoaXMuX2VtaXQoInNjcm9sbCIsIHtkYXRhOiB0aGlzLnNjcm9sbFRvcH0pOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuc2tpcEV2ZW50ID0gZmFsc2U7CisgICAgfTsKKyAgICB0aGlzLmdl
dFdpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLndpZHRoOworICAgIH07
CisgICAgdGhpcy5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHsKKyAgICAgICAgdGhpcy5l
bGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfTsKKyAgICB0aGlzLnNl
dElubmVySGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7CisgICAgICAgIHRoaXMuaW5uZXIuc3R5
bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIHRoaXMuc2V0U2Nyb2xsVG9w
ID0gZnVuY3Rpb24oc2Nyb2xsVG9wKSB7CisgICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCAhPSBz
Y3JvbGxUb3ApIHsKKyAgICAgICAgICAgIHRoaXMuc2tpcEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsK
KyAgICAgICAgfQorICAgIH07CisKK30pLmNhbGwoU2Nyb2xsQmFyLnByb3RvdHlwZSk7CisKK2V4
cG9ydHMuU2Nyb2xsQmFyID0gU2Nyb2xsQmFyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9yZW5k
ZXJsb29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2ZW50
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBldmVudCA9
IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7CisKKwordmFyIFJlbmRlckxvb3AgPSBmdW5jdGlvbihv
blJlbmRlciwgd2luKSB7CisgICAgdGhpcy5vblJlbmRlciA9IG9uUmVuZGVyOworICAgIHRoaXMu
cGVuZGluZyA9IGZhbHNlOworICAgIHRoaXMuY2hhbmdlcyA9IDA7CisgICAgdGhpcy53aW5kb3cg
PSB3aW4gfHwgd2luZG93OworfTsKKworKGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLnNjaGVk
dWxlID0gZnVuY3Rpb24oY2hhbmdlKSB7CisgICAgICAgIHRoaXMuY2hhbmdlcyA9IHRoaXMuY2hh
bmdlcyB8IGNoYW5nZTsKKyAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcpIHsKKyAgICAgICAgICAg
IHRoaXMucGVuZGluZyA9IHRydWU7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAg
ICAgICAgICAgZXZlbnQubmV4dEZyYW1lKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIF9z
ZWxmLnBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB2YXIgY2hhbmdlczsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoY2hhbmdlcyA9IF9zZWxmLmNoYW5nZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3NlbGYuY2hhbmdlcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIF9zZWxmLm9u
UmVuZGVyKGNoYW5nZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIHRoaXMu
d2luZG93KTsKKyAgICAgICAgfQorICAgIH07CisKK30pLmNhbGwoUmVuZGVyTG9vcC5wcm90b3R5
cGUpOworCitleHBvcnRzLlJlbmRlckxvb3AgPSBSZW5kZXJMb29wOworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9tdWx0aV9zZWxlY3QnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9yYW5nZV9saXN0JywgJ2FjZS9yYW5nZScsICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb3Vz
ZS9tdWx0aV9zZWxlY3RfaGFuZGxlcicsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvbGFuZycs
ICdhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzJywgJ2FjZS9zZWFyY2gnLCAnYWNl
L2VkaXRfc2Vzc2lvbicsICdhY2UvZWRpdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCit2YXIgUmFuZ2VMaXN0ID0gcmVxdWlyZSgiLi9yYW5nZV9saXN0IikuUmFu
Z2VMaXN0OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIFNlbGVj
dGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwordmFyIG9uTW91c2VEb3du
ID0gcmVxdWlyZSgiLi9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIpLm9uTW91c2VEb3duOwor
dmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgi
Li9saWIvbGFuZyIpOwordmFyIGNvbW1hbmRzID0gcmVxdWlyZSgiLi9jb21tYW5kcy9tdWx0aV9z
ZWxlY3RfY29tbWFuZHMiKTsKK2V4cG9ydHMuY29tbWFuZHMgPSBjb21tYW5kcy5kZWZhdWx0Q29t
bWFuZHMuY29uY2F0KGNvbW1hbmRzLm11bHRpU2VsZWN0Q29tbWFuZHMpOwordmFyIFNlYXJjaCA9
IHJlcXVpcmUoIi4vc2VhcmNoIikuU2VhcmNoOwordmFyIHNlYXJjaCA9IG5ldyBTZWFyY2goKTsK
KworZnVuY3Rpb24gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcikgeworICAgIHNlYXJjaC4kb3B0
aW9ucy53cmFwID0gdHJ1ZTsKKyAgICBzZWFyY2guJG9wdGlvbnMubmVlZGxlID0gbmVlZGxlOwor
ICAgIHNlYXJjaC4kb3B0aW9ucy5iYWNrd2FyZHMgPSBkaXIgPT0gLTE7CisgICAgcmV0dXJuIHNl
YXJjaC5maW5kKHNlc3Npb24pOworfQordmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0
X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLmdldFNlbGVj
dGlvbk1hcmtlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlv
bk1hcmtlcnM7CisgICAgfTsKK30pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKKyhmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnJhbmdlcyA9IG51bGw7CisgICAgdGhpcy5yYW5nZUxpc3QgPSBu
dWxsOworICAgIHRoaXMuYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgJGJsb2NrQ2hhbmdlRXZl
bnRzKSB7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlICYmIHRoaXMucmFuZ2VDb3VudCA9PSAwKSB7
CisgICAgICAgICAgICB2YXIgb2xkUmFuZ2UgPSB0aGlzLnRvT3JpZW50ZWRSYW5nZSgpOworICAg
ICAgICAgICAgaWYgKHJhbmdlLmludGVyc2VjdHMob2xkUmFuZ2UpKQorICAgICAgICAgICAgICAg
IHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5n
ZSk7CisKKyAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7CisgICAgICAg
ICAgICB0aGlzLiRvbkFkZFJhbmdlKG9sZFJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghcmFuZ2UuY3Vyc29yKQorICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2UuZW5kOwor
CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QuYWRkKHJhbmdlKTsKKworICAg
ICAgICB0aGlzLiRvbkFkZFJhbmdlKHJhbmdlKTsKKworICAgICAgICBpZiAocmVtb3ZlZC5sZW5n
dGgpCisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQpOworCisgICAgICAg
IGlmICh0aGlzLnJhbmdlQ291bnQgPiAxICYmICF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9lbWl0KCJtdWx0aVNlbGVjdCIpOworICAgICAgICAgICAgdGhpcy5p
bk11bHRpU2VsZWN0TW9kZSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uJHVuZG9T
ZWxlY3QgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmF0dGFjaCh0aGlzLnNl
c3Npb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICRibG9ja0NoYW5nZUV2ZW50cyB8
fCB0aGlzLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKKyAgICB9OworCisgICAgdGhpcy50b1Np
bmdsZVJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmFuZ2UgPSByYW5nZSB8fCB0
aGlzLnJhbmdlc1swXTsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5yZW1v
dmVBbGwoKTsKKyAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy4k
b25SZW1vdmVSYW5nZShyZW1vdmVkKTsKKworICAgICAgICByYW5nZSAmJiB0aGlzLmZyb21Pcmll
bnRlZFJhbmdlKHJhbmdlKTsKKyAgICB9OworICAgIHRoaXMuc3Vic3RyYWN0UG9pbnQgPSBmdW5j
dGlvbihwb3MpIHsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5zdWJzdHJh
Y3RQb2ludChwb3MpOworICAgICAgICBpZiAocmVtb3ZlZCkgeworICAgICAgICAgICAgdGhpcy4k
b25SZW1vdmVSYW5nZShyZW1vdmVkKTsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVkWzBdOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5tZXJnZSgpOwor
ICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJh
bmdlKHJlbW92ZWQpOworICAgICAgICBlbHNlIGlmKHRoaXMucmFuZ2VzWzBdKQorICAgICAgICAg
ICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSh0aGlzLnJhbmdlc1swXSk7CisgICAgfTsKKworICAg
IHRoaXMuJG9uQWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB0aGlzLnJhbmdl
Q291bnQgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMubGVuZ3RoOworICAgICAgICB0aGlzLnJhbmdl
cy51bnNoaWZ0KHJhbmdlKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiYWRkUmFuZ2UiLCB7cmFuZ2U6
IHJhbmdlfSk7CisgICAgfTsKKworICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbihy
ZW1vdmVkKSB7CisgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMucmFuZ2VMaXN0LnJhbmdl
cy5sZW5ndGg7CisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPT0gMSAmJiB0aGlzLmluTXVs
dGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gdGhpcy5yYW5nZUxp
c3QucmFuZ2VzLnBvcCgpOworICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGxhc3RSYW5nZSk7Cisg
ICAgICAgICAgICB0aGlzLnJhbmdlQ291bnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgZm9y
ICh2YXIgaSA9IHJlbW92ZWQubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5yYW5nZXMuaW5kZXhPZihyZW1vdmVkW2ldKTsKKyAgICAgICAgICAgIHRoaXMucmFu
Z2VzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9lbWl0KCJy
ZW1vdmVSYW5nZSIsIHtyYW5nZXM6IHJlbW92ZWR9KTsKKworICAgICAgICBpZiAodGhpcy5yYW5n
ZUNvdW50ID09IDAgJiYgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSkgeworICAgICAgICAgICAgdGhp
cy5pbk11bHRpU2VsZWN0TW9kZSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fZW1pdCgic2lu
Z2xlU2VsZWN0Iik7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uJHVuZG9TZWxlY3QgPSB0cnVl
OworICAgICAgICAgICAgdGhpcy5yYW5nZUxpc3QuZGV0YWNoKHRoaXMuc2Vzc2lvbik7CisgICAg
ICAgIH0KKworICAgICAgICBsYXN0UmFuZ2UgPSBsYXN0UmFuZ2UgfHwgdGhpcy5yYW5nZXNbMF07
CisgICAgICAgIGlmIChsYXN0UmFuZ2UgJiYgIWxhc3RSYW5nZS5pc0VxdWFsKHRoaXMuZ2V0UmFu
Z2UoKSkpCisgICAgICAgICAgICB0aGlzLmZyb21PcmllbnRlZFJhbmdlKGxhc3RSYW5nZSk7Cisg
ICAgfTsKKyAgICB0aGlzLiRpbml0UmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh0aGlzLnJhbmdlTGlzdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnJh
bmdlTGlzdCA9IG5ldyBSYW5nZUxpc3QoKTsKKyAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTsKKyAg
ICAgICAgdGhpcy5yYW5nZUNvdW50ID0gMDsKKyAgICB9OworICAgIHRoaXMuZ2V0QWxsUmFuZ2Vz
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJhbmdlTGlzdC5yYW5nZXMuY29u
Y2F0KCk7CisgICAgfTsKKworICAgIHRoaXMuc3BsaXRJbnRvTGluZXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxKSB7CisgICAgICAgICAgICB2YXIgcmFu
Z2VzID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzOworICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9
IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5n
ZS5mcm9tUG9pbnRzKHJhbmdlc1swXS5zdGFydCwgbGFzdFJhbmdlLmVuZCk7CisKKyAgICAgICAg
ICAgIHRoaXMudG9TaW5nbGVSYW5nZSgpOworICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25S
YW5nZShyYW5nZSwgbGFzdFJhbmdlLmN1cnNvciA9PSBsYXN0UmFuZ2Uuc3RhcnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpOworICAg
ICAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gdGhpcy5pc0JhY2t3YXJkcygpOworICAgICAgICAg
ICAgdmFyIHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgdmFyIGVuZFJv
dyA9IHJhbmdlLmVuZC5yb3c7CisgICAgICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93KSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzQmFja3dhcmRzKQorICAgICAgICAgICAgICAgICAgICB2
YXIgc3RhcnQgPSByYW5nZS5lbmQsIGVuZCA9IHJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQsIGVuZCA9
IHJhbmdlLmVuZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aGlzLmFkZFJh
bmdlKFJhbmdlLmZyb21Qb2ludHMoZW5kLCBlbmQpKTsKKyAgICAgICAgICAgICAgICB0aGlzLmFk
ZFJhbmdlKFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOwor
ICAgICAgICAgICAgdmFyIHIgPSB0aGlzLmdldExpbmVSYW5nZShzdGFydFJvdywgdHJ1ZSk7Cisg
ICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAg
ICAgIHJlY3RTZWwucHVzaChyKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93
ICsgMTsgaSA8IGVuZFJvdzsgaSsrKQorICAgICAgICAgICAgICAgIHJlY3RTZWwucHVzaCh0aGlz
LmdldExpbmVSYW5nZShpLCB0cnVlKSk7CisKKyAgICAgICAgICAgIHIgPSB0aGlzLmdldExpbmVS
YW5nZShlbmRSb3csIHRydWUpOworICAgICAgICAgICAgci5lbmQuY29sdW1uID0gcmFuZ2UuZW5k
LmNvbHVtbjsKKyAgICAgICAgICAgIHJlY3RTZWwucHVzaChyKTsKKworICAgICAgICAgICAgcmVj
dFNlbC5mb3JFYWNoKHRoaXMuYWRkUmFuZ2UsIHRoaXMpOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0aGlzLnRvZ2dsZUJsb2NrU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5yYW5nZUNvdW50ID4gMSkgeworICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFu
Z2VMaXN0LnJhbmdlczsKKyAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSByYW5nZXNbcmFuZ2Vz
Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhy
YW5nZXNbMF0uc3RhcnQsIGxhc3RSYW5nZS5lbmQpOworCisgICAgICAgICAgICB0aGlzLnRvU2lu
Z2xlUmFuZ2UoKTsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIGxh
c3RSYW5nZS5jdXJzb3IgPT0gbGFzdFJhbmdlLnN0YXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0
aW9uKHRoaXMuc2VsZWN0aW9uTGVhZCk7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5z
ZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnNlbGVjdGlvbkFuY2hvcik7CisK
KyAgICAgICAgICAgIHZhciByZWN0U2VsID0gdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2soY3Vy
c29yLCBhbmNob3IpOworICAgICAgICAgICAgcmVjdFNlbC5mb3JFYWNoKHRoaXMuYWRkUmFuZ2Us
IHRoaXMpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9j
ayA9IGZ1bmN0aW9uKHNjcmVlbkN1cnNvciwgc2NyZWVuQW5jaG9yLCBpbmNsdWRlRW1wdHlMaW5l
cykgeworICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOworCisgICAgICAgIHZhciB4QmFja3dhcmRz
ID0gc2NyZWVuQ3Vyc29yLmNvbHVtbiA8IHNjcmVlbkFuY2hvci5jb2x1bW47CisgICAgICAgIGlm
ICh4QmFja3dhcmRzKSB7CisgICAgICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBzY3JlZW5DdXJz
b3IuY29sdW1uOworICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1
bW47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBzY3Jl
ZW5BbmNob3IuY29sdW1uOworICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNjcmVlbkN1cnNv
ci5jb2x1bW47CisgICAgICAgIH0KKworICAgICAgICB2YXIgeUJhY2t3YXJkcyA9IHNjcmVlbkN1
cnNvci5yb3cgPCBzY3JlZW5BbmNob3Iucm93OworICAgICAgICBpZiAoeUJhY2t3YXJkcykgewor
ICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQ3Vyc29yLnJvdzsKKyAgICAgICAgICAg
IHZhciBlbmRSb3cgPSBzY3JlZW5BbmNob3Iucm93OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQW5jaG9yLnJvdzsKKyAgICAgICAgICAgIHZhciBl
bmRSb3cgPSBzY3JlZW5DdXJzb3Iucm93OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXJ0
Q29sdW1uIDwgMCkKKyAgICAgICAgICAgIHN0YXJ0Q29sdW1uID0gMDsKKyAgICAgICAgaWYgKHN0
YXJ0Um93IDwgMCkKKyAgICAgICAgICAgIHN0YXJ0Um93ID0gMDsKKworICAgICAgICBpZiAoc3Rh
cnRSb3cgPT0gZW5kUm93KQorICAgICAgICAgICAgaW5jbHVkZUVtcHR5TGluZXMgPSB0cnVlOwor
CisgICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPD0gZW5kUm93OyByb3crKykg
eworICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cygKKyAgICAgICAgICAg
ICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgc3RhcnRDb2x1
bW4pLAorICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRp
b24ocm93LCBlbmRDb2x1bW4pCisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHJhbmdl
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChkb2NFbmQgJiYgaXNTYW1lUG9pbnQo
cmFuZ2UuZW5kLCBkb2NFbmQpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB2YXIgZG9jRW5kID0gcmFuZ2UuZW5kOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmFuZ2UuY3Vyc29yID0geEJhY2t3YXJkcyA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOwor
ICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh5QmFja3dhcmRzKQorICAgICAgICAgICAgcmVjdFNlbC5yZXZlcnNlKCk7CisKKyAgICAgICAg
aWYgKCFpbmNsdWRlRW1wdHlMaW5lcykgeworICAgICAgICAgICAgdmFyIGVuZCA9IHJlY3RTZWwu
bGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIHdoaWxlIChyZWN0U2VsW2VuZF0uaXNFbXB0eSgpICYm
IGVuZCA+IDApCisgICAgICAgICAgICAgICAgZW5kLS07CisgICAgICAgICAgICBpZiAoZW5kID4g
MCkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHJlY3RTZWxbc3RhcnRdLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQr
KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBlbmQ7IGkgPj0gc3Rh
cnQ7IGktLSkgeworICAgICAgICAgICAgICAgIGlmIChyZWN0U2VsW2ldLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVjdFNlbC5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVjdFNlbDsKKyAgICB9OworfSkuY2FsbChTZWxl
Y3Rpb24ucHJvdG90eXBlKTsKK3ZhciBFZGl0b3IgPSByZXF1aXJlKCIuL2VkaXRvciIpLkVkaXRv
cjsKKyhmdW5jdGlvbigpIHsKKyAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbk1hcmtlcnMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOworICAgIH07CisgICAgdGhpcy5hZGRT
ZWxlY3Rpb25NYXJrZXIgPSBmdW5jdGlvbihvcmllbnRlZFJhbmdlKSB7CisgICAgICAgIGlmICgh
b3JpZW50ZWRSYW5nZS5jdXJzb3IpCisgICAgICAgICAgICBvcmllbnRlZFJhbmdlLmN1cnNvciA9
IG9yaWVudGVkUmFuZ2UuZW5kOworCisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0U2VsZWN0
aW9uU3R5bGUoKTsKKyAgICAgICAgb3JpZW50ZWRSYW5nZS5tYXJrZXIgPSB0aGlzLnNlc3Npb24u
YWRkTWFya2VyKG9yaWVudGVkUmFuZ2UsICJhY2Vfc2VsZWN0aW9uIiwgc3R5bGUpOworCisgICAg
ICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5wdXNoKG9yaWVudGVkUmFuZ2UpOwor
ICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQgPSB0aGlzLnNlc3Npb24u
JHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RoOworICAgICAgICByZXR1cm4gb3JpZW50ZWRSYW5nZTsK
KyAgICB9OworICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VyID0gZnVuY3Rpb24ocmFuZ2Up
IHsKKyAgICAgICAgaWYgKCFyYW5nZS5tYXJrZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTsKKyAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmluZGV4T2YocmFuZ2UpOwor
ICAgICAgICBpZiAoaW5kZXggIT0gLTEpCisgICAgICAgICAgICB0aGlzLnNlc3Npb24uJHNlbGVj
dGlvbk1hcmtlcnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVj
dGlvbk1hcmtlckNvdW50ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmxlbmd0aDsK
KyAgICB9OworCisgICAgdGhpcy5yZW1vdmVTZWxlY3Rpb25NYXJrZXJzID0gZnVuY3Rpb24ocmFu
Z2VzKSB7CisgICAgICAgIHZhciBtYXJrZXJMaXN0ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25N
YXJrZXJzOworICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOyApIHsKKyAg
ICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmICghcmFuZ2Uu
bWFya2VyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGhpcy5zZXNz
aW9uLnJlbW92ZU1hcmtlcihyYW5nZS5tYXJrZXIpOworICAgICAgICAgICAgdmFyIGluZGV4ID0g
bWFya2VyTGlzdC5pbmRleE9mKHJhbmdlKTsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkK
KyAgICAgICAgICAgICAgICBtYXJrZXJMaXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50ID0gbWFya2VyTGlzdC5s
ZW5ndGg7CisgICAgfTsKKworICAgIHRoaXMuJG9uQWRkUmFuZ2UgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIHRoaXMuYWRkU2VsZWN0aW9uTWFya2VyKGUucmFuZ2UpOworICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tN
YXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhlLnJhbmdlcyk7CisgICAg
ICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
dXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy4kb25NdWx0aVNlbGVjdCA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSB0cnVlOwor
CisgICAgICAgIHRoaXMuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIpOworICAgICAgICB0aGlz
LmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRzLmtleWJvYXJkSGFuZGxlcik7
CisgICAgICAgIHRoaXMuY29tbWFuZHMub24oImV4ZWMiLCB0aGlzLiRvbk11bHRpU2VsZWN0RXhl
Yyk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOworICAgIH07CisKKyAgICB0aGlzLiRvblNp
bmdsZVNlbGVjdCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5tdWx0
aVNlbGVjdC5pblZpcnR1YWxNb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlz
LmluTXVsdGlTZWxlY3RNb2RlID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy51bnNldFN0eWxlKCJh
Y2VfbXVsdGlzZWxlY3QiKTsKKyAgICAgICAgdGhpcy5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJk
SGFuZGxlcihjb21tYW5kcy5rZXlib2FyZEhhbmRsZXIpOworCisgICAgICAgIHRoaXMuY29tbWFu
ZHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXhlYyIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci51cGRhdGVCYWNrTWFya2VycygpOworICAgIH07CisKKyAgICB0aGlzLiRvbk11bHRpU2Vs
ZWN0RXhlYyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGNvbW1hbmQgPSBlLmNvbW1hbmQ7
CisgICAgICAgIHZhciBlZGl0b3IgPSBlLmVkaXRvcjsKKyAgICAgICAgaWYgKCFlZGl0b3IubXVs
dGlTZWxlY3QpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghY29tbWFuZC5tdWx0
aVNlbGVjdEFjdGlvbikgeworICAgICAgICAgICAgY29tbWFuZC5leGVjKGVkaXRvciwgZS5hcmdz
IHx8IHt9KTsKKyAgICAgICAgICAgIGVkaXRvci5tdWx0aVNlbGVjdC5hZGRSYW5nZShlZGl0b3Iu
bXVsdGlTZWxlY3QudG9PcmllbnRlZFJhbmdlKCkpOworICAgICAgICAgICAgZWRpdG9yLm11bHRp
U2VsZWN0Lm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb21t
YW5kLm11bHRpU2VsZWN0QWN0aW9uID09ICJmb3JFYWNoIikgeworICAgICAgICAgICAgZWRpdG9y
LmZvckVhY2hTZWxlY3Rpb24oY29tbWFuZCwgZS5hcmdzKTsKKyAgICAgICAgfSBlbHNlIGlmIChj
b21tYW5kLm11bHRpU2VsZWN0QWN0aW9uID09ICJzaW5nbGUiKSB7CisgICAgICAgICAgICBlZGl0
b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpOworICAgICAgICAgICAgY29tbWFuZC5leGVjKGVkaXRv
ciwgZS5hcmdzIHx8IHt9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbW1hbmQu
bXVsdGlTZWxlY3RBY3Rpb24oZWRpdG9yLCBlLmFyZ3MgfHwge30pOworICAgICAgICB9CisgICAg
ICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9OyAKKyAgICB0aGlzLmZvckVhY2hTZWxlY3Rp
b24gPSBmdW5jdGlvbihjbWQsIGFyZ3MpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5WaXJ0dWFsU2Vs
ZWN0aW9uTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2Vzc2lvbiA9
IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uOwor
ICAgICAgICB2YXIgcmFuZ2VMaXN0ID0gc2VsZWN0aW9uLnJhbmdlTGlzdDsKKworICAgICAgICB2
YXIgcmVnID0gc2VsZWN0aW9uLl9ldmVudFJlZ2lzdHJ5OworICAgICAgICBzZWxlY3Rpb24uX2V2
ZW50UmVnaXN0cnkgPSB7fTsKKworICAgICAgICB2YXIgdG1wU2VsID0gbmV3IFNlbGVjdGlvbihz
ZXNzaW9uKTsKKyAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gdHJ1ZTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IHJhbmdlTGlzdC5yYW5nZXMubGVuZ3RoOyBpLS07KSB7CisgICAg
ICAgICAgICB0bXBTZWwuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2VMaXN0LnJhbmdlc1tpXSk7Cisg
ICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24uc2VsZWN0aW9uID0gdG1wU2VsOwor
ICAgICAgICAgICAgY21kLmV4ZWModGhpcywgYXJncyB8fCB7fSk7CisgICAgICAgICAgICB0bXBT
ZWwudG9PcmllbnRlZFJhbmdlKHJhbmdlTGlzdC5yYW5nZXNbaV0pOworICAgICAgICB9CisgICAg
ICAgIHRtcFNlbC5kZXRhY2goKTsKKworICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24u
c2VsZWN0aW9uID0gc2VsZWN0aW9uOworICAgICAgICB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1v
ZGUgPSBmYWxzZTsKKyAgICAgICAgc2VsZWN0aW9uLl9ldmVudFJlZ2lzdHJ5ID0gcmVnOworICAg
ICAgICBzZWxlY3Rpb24ubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpOworCisgICAgICAgIHRoaXMu
b25DdXJzb3JDaGFuZ2UoKTsKKyAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpOworICAg
IH07CisgICAgdGhpcy5leGl0TXVsdGlTZWxlY3RNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMubXVsdGlTZWxlY3QudG9TaW5nbGVSYW5nZSgpOworICAgIH07CisKKyAgICB0
aGlzLmdldENvcHlUZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciB0ZXh0ID0gIiI7Cisg
ICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7CisgICAgICAgICAgICB2YXIgcmFu
Z2VzID0gdGhpcy5tdWx0aVNlbGVjdC5yYW5nZUxpc3QucmFuZ2VzOworICAgICAgICAgICAgdGV4
dCA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICB0ZXh0LnB1c2godGhpcy5zZXNzaW9uLmdldFRleHRSYW5n
ZShyYW5nZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHQgPSB0ZXh0Lmpv
aW4odGhpcy5zZXNzaW9uLmdldERvY3VtZW50KCkuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdl
KCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgfTsKKyAgICB0aGlz
Lm9uUGFzdGUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIGlmICh0aGlzLiRyZWFkT25seSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9lbWl0KCJwYXN0ZSIsIHRleHQp
OworICAgICAgICBpZiAoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpCisgICAgICAgICAgICByZXR1
cm4gdGhpcy5pbnNlcnQodGV4dCk7CisKKyAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgv
XHJcbnxccnxcbi8pOworICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2VM
aXN0LnJhbmdlczsKKworICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gcmFuZ2VzLmxlbmd0aCB8
fCAobGluZXMubGVuZ3RoIDw9IDIgfHwgIWxpbmVzWzFdKSkKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsIHRoaXMsIHRleHQpOworCisgICAgICAg
IGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICAgICAgdmFyIHJh
bmdlID0gcmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisKKyAgICAgICAgICAgIHRo
aXMuc2Vzc2lvbi5pbnNlcnQocmFuZ2Uuc3RhcnQsIGxpbmVzW2ldKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5maW5kQWxsID0gZnVuY3Rpb24obmVlZGxlLCBvcHRpb25zLCBhZGRpdGl2
ZSkgeworICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgICAgb3B0aW9ucy5u
ZWVkbGUgPSBuZWVkbGUgfHwgb3B0aW9ucy5uZWVkbGU7CisgICAgICAgIHRoaXMuJHNlYXJjaC5z
ZXQob3B0aW9ucyk7CisKKyAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxs
KHRoaXMuc2Vzc2lvbik7CisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7CisgICAgICAg
IHZhciBzZWxlY3Rpb24gPSB0aGlzLm11bHRpU2VsZWN0OworCisgICAgICAgIGlmICghYWRkaXRp
dmUpCisgICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZShyYW5nZXNbMF0pOworCisg
ICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgICAgIHNl
bGVjdGlvbi5hZGRSYW5nZShyYW5nZXNbaV0sIHRydWUpOworCisgICAgICAgIHRoaXMuJGJsb2Nr
U2Nyb2xsaW5nIC09IDE7CisKKyAgICAgICAgcmV0dXJuIHJhbmdlcy5sZW5ndGg7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdE1vcmVMaW5lcyA9IGZ1bmN0aW9uKGRpciwgc2tpcCkgeworICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAgICAg
dmFyIGlzQmFja3dhcmRzID0gcmFuZ2UuY3Vyc29yID09IHJhbmdlLmVuZDsKKworICAgICAgICB2
YXIgc2NyZWVuTGVhZCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocmFu
Z2UuY3Vyc29yKTsKKyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uKQor
ICAgICAgICAgICAgc2NyZWVuTGVhZC5jb2x1bW4gPSB0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENv
bHVtbjsKKworICAgICAgICB2YXIgbGVhZCA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50
UG9zaXRpb24oc2NyZWVuTGVhZC5yb3cgKyBkaXIsIHNjcmVlbkxlYWQuY29sdW1uKTsKKworICAg
ICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdmFyIHNjcmVlbkFuY2hv
ciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oaXNCYWNrd2FyZHMgPyBy
YW5nZS5lbmQgOiByYW5nZS5zdGFydCk7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5z
ZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5BbmNob3Iucm93ICsgZGlyLCBz
Y3JlZW5BbmNob3IuY29sdW1uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBh
bmNob3IgPSBsZWFkOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQmFja3dhcmRzKSB7Cisg
ICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7
CisgICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBuZXdSYW5nZS5zdGFydDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYW5j
aG9yLCBsZWFkKTsKKyAgICAgICAgICAgIG5ld1JhbmdlLmN1cnNvciA9IG5ld1JhbmdlLmVuZDsK
KyAgICAgICAgfQorCisgICAgICAgIG5ld1JhbmdlLmRlc2lyZWRDb2x1bW4gPSBzY3JlZW5MZWFk
LmNvbHVtbjsKKyAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkg
eworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKHNraXApCisgICAgICAgICAgICAgICAgdmFyIHRvUmVt
b3ZlID0gcmFuZ2UuY3Vyc29yOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24u
YWRkUmFuZ2UobmV3UmFuZ2UpOworICAgICAgICBpZiAodG9SZW1vdmUpCisgICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zdWJzdHJhY3RQb2ludCh0b1JlbW92ZSk7CisgICAgfTsKKyAgICB0aGlz
LnRyYW5zcG9zZVNlbGVjdGlvbnMgPSBmdW5jdGlvbihkaXIpIHsKKyAgICAgICAgdmFyIHNlc3Np
b24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0
OworICAgICAgICB2YXIgYWxsID0gc2VsLnJhbmdlczsKKworICAgICAgICBmb3IgKHZhciBpID0g
YWxsLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTsKKyAg
ICAgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG1w
ID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1
bW4pOworICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHRtcC5zdGFydC5yb3c7Cisg
ICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjsKKyAg
ICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gdG1wLmVuZC5yb3c7CisgICAgICAgICAgICAg
ICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRtcC5lbmQuY29sdW1uOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHNlbC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7CisKKyAgICAgICAg
dmFyIHdvcmRzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkg
eworICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOworICAgICAgICAgICAgd29yZHMudW5z
aGlmdChzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRpciA8IDApCisgICAgICAgICAgICB3b3Jkcy51bnNoaWZ0KHdvcmRzLnBvcCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgd29yZHMucHVzaCh3b3Jkcy5zaGlmdCgpKTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciBy
YW5nZSA9IGFsbFtpXTsKKyAgICAgICAgICAgIHZhciB0bXAgPSByYW5nZS5jbG9uZSgpOworICAg
ICAgICAgICAgc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB3b3Jkc1tpXSk7CisgICAgICAgICAgICBy
YW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93OworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQu
Y29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5z
ZWxlY3RNb3JlID0gZnVuY3Rpb24oZGlyLCBza2lwKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0g
dGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgc2VsID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsKKwor
ICAgICAgICB2YXIgcmFuZ2UgPSBzZWwudG9PcmllbnRlZFJhbmdlKCk7CisgICAgICAgIGlmIChy
YW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0V29y
ZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAg
IHJhbmdlLmN1cnNvciA9IHJhbmdlLmVuZDsKKyAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3Qu
YWRkUmFuZ2UocmFuZ2UpOworICAgICAgICB9CisgICAgICAgIHZhciBuZWVkbGUgPSBzZXNzaW9u
LmdldFRleHRSYW5nZShyYW5nZSk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gZmluZChzZXNz
aW9uLCBuZWVkbGUsIGRpcik7CisgICAgICAgIGlmIChuZXdSYW5nZSkgeworICAgICAgICAgICAg
bmV3UmFuZ2UuY3Vyc29yID0gZGlyID09IC0xID8gbmV3UmFuZ2Uuc3RhcnQgOiBuZXdSYW5nZS5l
bmQ7CisgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LmFkZFJhbmdlKG5ld1JhbmdlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc2tpcCkKKyAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3Qu
c3Vic3RyYWN0UG9pbnQocmFuZ2UuY3Vyc29yKTsKKyAgICB9OworICAgIHRoaXMuYWxpZ25DdXJz
b3JzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwor
ICAgICAgICB2YXIgc2VsID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsKKyAgICAgICAgdmFyIHJhbmdl
cyA9IHNlbC5yYW5nZXM7CisKKyAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOworICAgICAgICAgICAg
dmFyIGZyID0gcmFuZ2Uuc3RhcnQucm93LCBsciA9IHJhbmdlLmVuZC5yb3c7CisgICAgICAgICAg
ICB2YXIgbGluZXMgPSB0aGlzLnNlc3Npb24uZG9jLnJlbW92ZUxpbmVzKGZyLCBscik7CisgICAg
ICAgICAgICBsaW5lcyA9IHRoaXMuJHJlQWxpZ25UZXh0KGxpbmVzKTsKKyAgICAgICAgICAgIHRo
aXMuc2Vzc2lvbi5kb2MuaW5zZXJ0TGluZXMoZnIsIGxpbmVzKTsKKyAgICAgICAgICAgIHJhbmdl
LnN0YXJ0LmNvbHVtbiA9IDA7CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gbGluZXNb
bGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoOworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0
UmFuZ2UocmFuZ2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHJvdyA9IC0x
OworICAgICAgICAgICAgdmFyIHNhbWVSb3dSYW5nZXMgPSByYW5nZXMuZmlsdGVyKGZ1bmN0aW9u
KHIpIHsKKyAgICAgICAgICAgICAgICBpZiAoci5jdXJzb3Iucm93ID09IHJvdykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcm93ID0gci5jdXJzb3Iu
cm93OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzZWwuJG9uUmVtb3ZlUmFuZ2Uoc2Ft
ZVJvd1Jhbmdlcyk7CisKKyAgICAgICAgICAgIHZhciBtYXhDb2wgPSAwOworICAgICAgICAgICAg
dmFyIG1pblNwYWNlID0gSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgc3BhY2VPZmZzZXRzID0g
cmFuZ2VzLm1hcChmdW5jdGlvbihyKSB7CisgICAgICAgICAgICAgICAgdmFyIHAgPSByLmN1cnNv
cjsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwLnJvdyk7Cisg
ICAgICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0ID0gbGluZS5zdWJzdHIocC5jb2x1bW4pLnNl
YXJjaCgvXFMvZyk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ID09IC0xKQorICAg
ICAgICAgICAgICAgICAgICBzcGFjZU9mZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAo
cC5jb2x1bW4gPiBtYXhDb2wpCisgICAgICAgICAgICAgICAgICAgIG1heENvbCA9IHAuY29sdW1u
OworICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA8IG1pblNwYWNlKQorICAgICAgICAg
ICAgICAgICAgICBtaW5TcGFjZSA9IHNwYWNlT2Zmc2V0OworICAgICAgICAgICAgICAgIHJldHVy
biBzcGFjZU9mZnNldDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmFuZ2VzLmZvckVh
Y2goZnVuY3Rpb24ociwgaSkgeworICAgICAgICAgICAgICAgIHZhciBwID0gci5jdXJzb3I7Cisg
ICAgICAgICAgICAgICAgdmFyIGwgPSBtYXhDb2wgLSBwLmNvbHVtbjsKKyAgICAgICAgICAgICAg
ICB2YXIgZCA9IHNwYWNlT2Zmc2V0c1tpXSAtIG1pblNwYWNlOworICAgICAgICAgICAgICAgIGlm
IChsID4gZCkKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQocCwgbGFuZy5zdHJp
bmdSZXBlYXQoIiAiLCBsIC0gZCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHAucm93LCBwLmNvbHVtbiwgcC5yb3cs
IHAuY29sdW1uIC0gbCArIGQpKTsKKworICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uID0g
ci5lbmQuY29sdW1uID0gbWF4Q29sOworICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ID0gci5l
bmQucm93ID0gcC5yb3c7CisgICAgICAgICAgICAgICAgci5jdXJzb3IgPSByLmVuZDsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgc2VsLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlc1swXSk7
CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICAgICAg
dGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRoaXMuJHJlQWxpZ25UZXh0ID0gZnVuY3Rpb24obGluZXMpIHsKKyAgICAgICAgdmFyIGlz
TGVmdEFsaWduZWQgPSB0cnVlLCBpc1JpZ2h0QWxpZ25lZCA9IHRydWU7CisgICAgICAgIHZhciBz
dGFydFcsIHRleHRXLCBlbmRXOworCisgICAgICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24o
bGluZSkgeworICAgICAgICAgICAgdmFyIG0gPSBsaW5lLm1hdGNoKC8oXHMqKSguKj8pKFxzKiko
Wz06XS4qKS8pOworICAgICAgICAgICAgaWYgKCFtKQorICAgICAgICAgICAgICAgIHJldHVybiBb
bGluZV07CisKKyAgICAgICAgICAgIGlmIChzdGFydFcgPT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgIHN0YXJ0VyA9IG1bMV0ubGVuZ3RoOworICAgICAgICAgICAgICAgIHRleHRXID0gbVsyXS5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgZW5kVyA9IG1bM10ubGVuZ3RoOworICAgICAgICAgICAg
ICAgIHJldHVybiBtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhcnRXICsg
dGV4dFcgKyBlbmRXICE9IG1bMV0ubGVuZ3RoICsgbVsyXS5sZW5ndGggKyBtWzNdLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICBpc1JpZ2h0QWxpZ25lZCA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KHN0YXJ0VyAhPSBtWzFdLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBpc0xlZnRBbGlnbmVkID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChzdGFydFcgPiBtWzFdLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICBzdGFydFcgPSBtWzFdLmxlbmd0aDsKKyAgICAgICAgICAgIGlmICh0ZXh0VyA8IG1b
Ml0ubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRleHRXID0gbVsyXS5sZW5ndGg7CisgICAgICAg
ICAgICBpZiAoZW5kVyA+IG1bM10ubGVuZ3RoKQorICAgICAgICAgICAgICAgIGVuZFcgPSBtWzNd
Lmxlbmd0aDsKKworICAgICAgICAgICAgcmV0dXJuIG07CisgICAgICAgIH0pLm1hcChpc0xlZnRB
bGlnbmVkID8gaXNSaWdodEFsaWduZWQgPyBhbGlnblJpZ2h0IDogYWxpZ25MZWZ0IDogdW5BbGln
bik7CisKKyAgICAgICAgZnVuY3Rpb24gc3BhY2VzKG4pIHsKKyAgICAgICAgICAgIHJldHVybiBs
YW5nLnN0cmluZ1JlcGVhdCgiICIsIG4pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
YWxpZ25MZWZ0KG0pIHsKKyAgICAgICAgICAgIHJldHVybiAhbVsyXSA/IG1bMF0gOiBzcGFjZXMo
c3RhcnRXKSArIG1bMl0KKyAgICAgICAgICAgICAgICArIHNwYWNlcyh0ZXh0VyAtIG1bMl0ubGVu
Z3RoICsgZW5kVykKKyAgICAgICAgICAgICAgICArIG1bNF0ucmVwbGFjZSgvXihbPTpdKVxzKy8s
ICIkMSAiKQorICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGFsaWduUmlnaHQobSkgeworICAg
ICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcgKyB0ZXh0VyAtIG1b
Ml0ubGVuZ3RoKSArIG1bMl0KKyAgICAgICAgICAgICAgICArIHNwYWNlcyhlbmRXLCAiICIpCisg
ICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCAiJDEgIikKKyAgICAg
ICAgfQorICAgICAgICBmdW5jdGlvbiB1bkFsaWduKG0pIHsKKyAgICAgICAgICAgIHJldHVybiAh
bVsyXSA/IG1bMF0gOiBzcGFjZXMoc3RhcnRXKSArIG1bMl0KKyAgICAgICAgICAgICAgICArIHNw
YWNlcyhlbmRXKQorICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywg
IiQxICIpCisgICAgICAgIH0KKyAgICB9Cit9KS5jYWxsKEVkaXRvci5wcm90b3R5cGUpOworCisK
K2Z1bmN0aW9uIGlzU2FtZVBvaW50KHAxLCBwMikgeworICAgIHJldHVybiBwMS5yb3cgPT0gcDIu
cm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47Cit9CitleHBvcnRzLm9uU2Vzc2lvbkNoYW5n
ZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIgc2Vzc2lvbiA9IGUuc2Vzc2lvbjsKKyAgICBpZiAo
IXNlc3Npb24ubXVsdGlTZWxlY3QpIHsKKyAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vy
cyA9IFtdOworICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi4kaW5pdFJhbmdlTGlzdCgpOworICAg
ICAgICBzZXNzaW9uLm11bHRpU2VsZWN0ID0gc2Vzc2lvbi5zZWxlY3Rpb247CisgICAgfQorICAg
IHRoaXMubXVsdGlTZWxlY3QgPSBzZXNzaW9uLm11bHRpU2VsZWN0OworCisgICAgdmFyIG9sZFNl
c3Npb24gPSBlLm9sZFNlc3Npb247CisgICAgaWYgKG9sZFNlc3Npb24pIHsKKyAgICAgICAgaWYg
KG9sZFNlc3Npb24ubXVsdGlTZWxlY3QgJiYgb2xkU2Vzc2lvbi5tdWx0aVNlbGVjdC5lZGl0b3Ig
PT0gdGhpcykKKyAgICAgICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QuZWRpdG9yID0gbnVs
bDsKKworICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFk
ZFJhbmdlIiwgdGhpcy4kb25BZGRSYW5nZSk7CisgICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVtb3ZlUmFuZ2UiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTsK
KyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtdWx0aVNl
bGVjdCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpOworICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNpbmdsZVNlbGVjdCIsIHRoaXMuJG9uU2luZ2xlU2VsZWN0
KTsKKyAgICB9CisKKyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJhZGRSYW5nZSIsIHRoaXMu
JG9uQWRkUmFuZ2UpOworICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oInJlbW92ZVJhbmdlIiwg
dGhpcy4kb25SZW1vdmVSYW5nZSk7CisgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigibXVsdGlT
ZWxlY3QiLCB0aGlzLiRvbk11bHRpU2VsZWN0KTsKKyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9u
KCJzaW5nbGVTZWxlY3QiLCB0aGlzLiRvblNpbmdsZVNlbGVjdCk7CisKKyAgICBpZiAodGhpcy5p
bk11bHRpU2VsZWN0TW9kZSAhPSBzZXNzaW9uLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkg
eworICAgICAgICBpZiAoc2Vzc2lvbi5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpCisgICAg
ICAgICAgICB0aGlzLiRvbk11bHRpU2VsZWN0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRoaXMuJG9uU2luZ2xlU2VsZWN0KCk7CisgICAgfQorfTsKK2Z1bmN0aW9uIE11bHRpU2VsZWN0
KGVkaXRvcikgeworICAgIGVkaXRvci4kb25BZGRSYW5nZSA9IGVkaXRvci4kb25BZGRSYW5nZS5i
aW5kKGVkaXRvcik7CisgICAgZWRpdG9yLiRvblJlbW92ZVJhbmdlID0gZWRpdG9yLiRvblJlbW92
ZVJhbmdlLmJpbmQoZWRpdG9yKTsKKyAgICBlZGl0b3IuJG9uTXVsdGlTZWxlY3QgPSBlZGl0b3Iu
JG9uTXVsdGlTZWxlY3QuYmluZChlZGl0b3IpOworICAgIGVkaXRvci4kb25TaW5nbGVTZWxlY3Qg
PSBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0LmJpbmQoZWRpdG9yKTsKKworICAgIGV4cG9ydHMub25T
ZXNzaW9uQ2hhbmdlLmNhbGwoZWRpdG9yLCBlZGl0b3IpOworICAgIGVkaXRvci5vbigiY2hhbmdl
U2Vzc2lvbiIsIGV4cG9ydHMub25TZXNzaW9uQ2hhbmdlLmJpbmQoZWRpdG9yKSk7CisKKyAgICBl
ZGl0b3Iub24oIm1vdXNlZG93biIsIG9uTW91c2VEb3duKTsKKyAgICBlZGl0b3IuY29tbWFuZHMu
YWRkQ29tbWFuZHMoY29tbWFuZHMuZGVmYXVsdENvbW1hbmRzKTsKKworICAgIGFkZEFsdEN1cnNv
ckxpc3RlbmVycyhlZGl0b3IpOworfQorCitmdW5jdGlvbiBhZGRBbHRDdXJzb3JMaXN0ZW5lcnMo
ZWRpdG9yKXsKKyAgICB2YXIgZWwgPSBlZGl0b3IudGV4dElucHV0LmdldEVsZW1lbnQoKTsKKyAg
ICB2YXIgYWx0Q3Vyc29yID0gZmFsc2U7CisgICAgdmFyIGNvbnRlbnRFbCA9IGVkaXRvci5yZW5k
ZXJlci5jb250ZW50OworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxOCAmJiAhKGUuY3RybEtleSB8fCBl
LnNoaWZ0S2V5IHx8IGUubWV0YUtleSkpIHsKKyAgICAgICAgICAgIGlmICghYWx0Q3Vyc29yKSB7
CisgICAgICAgICAgICAgICAgY29udGVudEVsLnN0eWxlLmN1cnNvciA9ICJjcm9zc2hhaXIiOwor
ICAgICAgICAgICAgICAgIGFsdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoYWx0Q3Vyc29yKSB7CisgICAgICAgICAgICBjb250ZW50RWwuc3R5bGUuY3Vy
c29yID0gIiI7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVs
LCAia2V5dXAiLCByZXNldCk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZWwsICJibHVyIiwgcmVz
ZXQpOworICAgIGZ1bmN0aW9uIHJlc2V0KCkgeworICAgICAgICBpZiAoYWx0Q3Vyc29yKSB7Cisg
ICAgICAgICAgICBjb250ZW50RWwuc3R5bGUuY3Vyc29yID0gIiI7CisgICAgICAgICAgICBhbHRD
dXJzb3IgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworZXhwb3J0cy5NdWx0aVNlbGVj
dCA9IE11bHRpU2VsZWN0OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3JhbmdlX2xpc3QnLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKKwordmFyIFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMucmFuZ2VzID0gW107Cit9OworCisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jb21wYXJlUG9p
bnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CisgICAgICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cg
fHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOworICAgIH07CisKKyAgICB0aGlzLnBvaW50SW5kZXgg
PSBmdW5jdGlvbihwb3MsIHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJh
bmdlczsKKworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwOyBpIDwgbGlzdC5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlzdFtpXTsKKyAgICAgICAg
ICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5lbmQpOworCisgICAg
ICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChjbXAgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAg
IGNtcCA9IHRoaXMuY29tcGFyZVBvaW50cyhwb3MsIHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAg
IGlmIChjbXAgPj0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKworICAgICAgICAgICAg
cmV0dXJuIC1pLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC1pIC0gMTsKKyAgICB9Owor
CisgICAgdGhpcy5hZGQgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgc3RhcnRJbmRl
eCA9IHRoaXMucG9pbnRJbmRleChyYW5nZS5zdGFydCk7CisgICAgICAgIGlmIChzdGFydEluZGV4
IDwgMCkKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7CisKKyAgICAg
ICAgdmFyIGVuZEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHJhbmdlLmVuZCwgc3RhcnRJbmRleCk7
CisKKyAgICAgICAgaWYgKGVuZEluZGV4IDwgMCkKKyAgICAgICAgICAgIGVuZEluZGV4ID0gLWVu
ZEluZGV4IC0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5kSW5kZXgrKzsKKworICAg
ICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3Rh
cnRJbmRleCwgcmFuZ2UpOworICAgIH07CisKKyAgICB0aGlzLmFkZExpc3QgPSBmdW5jdGlvbihs
aXN0KSB7CisgICAgICAgIHZhciByZW1vdmVkID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBs
aXN0Lmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHJlbW92ZWQucHVzaC5jYWxsKHJlbW92
ZWQsIHRoaXMuYWRkKGxpc3RbaV0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVtb3Zl
ZDsKKyAgICB9OworCisgICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgewor
ICAgICAgICB2YXIgaSA9IHRoaXMucG9pbnRJbmRleChwb3MpOworCisgICAgICAgIGlmIChpID49
IDApCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKGksIDEpOworICAgIH07
CisgICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVtb3ZlZCA9IFtd
OworICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOworICAgICAgICB2YXIgbmV4dCA9IGxp
c3RbMF0sIHJhbmdlOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHJhbmdlID0gbmV4dDsKKyAgICAgICAgICAgIG5leHQgPSBsaXN0
W2ldOworICAgICAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVBvaW50cyhyYW5nZS5lbmQs
IG5leHQuc3RhcnQpOworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjbXAgPT0gMCAmJiAhKHJhbmdlLmlzRW1wdHko
KSB8fCBuZXh0LmlzRW1wdHkoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGlmICh0aGlzLmNvbXBhcmVQb2ludHMocmFuZ2UuZW5kLCBuZXh0LmVuZCkgPCAwKSB7
CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IG5leHQuZW5kLnJvdzsKKyAgICAgICAg
ICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gbmV4dC5lbmQuY29sdW1uOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIHJlbW92ZWQu
cHVzaChuZXh0KTsKKyAgICAgICAgICAgIG5leHQgPSByYW5nZTsKKyAgICAgICAgICAgIGktLTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW1vdmVkOworICAgIH07CisKKyAgICB0aGlz
LmNvbnRhaW5zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cG9pbnRJbmRleCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSkgPj0gMDsKKyAgICB9OworCisg
ICAgdGhpcy5jb250YWluc1BvaW50ID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnBvaW50SW5kZXgocG9zKSA+PSAwOworICAgIH07CisKKyAgICB0aGlzLnJhbmdlQXRQb2lu
dCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICB2YXIgaSA9IHRoaXMucG9pbnRJbmRleChwb3Mp
OworICAgICAgICBpZiAoaSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzW2ld
OworICAgIH07CisKKworICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihzdGFydFJvdywgZW5k
Um93KSB7CisgICAgICAgIHZhciBsaXN0ID0gdGhpcy5yYW5nZXM7CisgICAgICAgIGlmIChsaXN0
WzBdLnN0YXJ0LnJvdyA+IGVuZFJvdyB8fCBsaXN0W2xpc3QubGVuZ3RoIC0gMV0uc3RhcnQucm93
IDwgc3RhcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gW107CisKKyAgICAgICAgdmFyIHN0YXJ0
SW5kZXggPSB0aGlzLnBvaW50SW5kZXgoe3Jvdzogc3RhcnRSb3csIGNvbHVtbjogMH0pOworICAg
ICAgICBpZiAoc3RhcnRJbmRleCA8IDApCisgICAgICAgICAgICBzdGFydEluZGV4ID0gLXN0YXJ0
SW5kZXggLSAxOworICAgICAgICB2YXIgZW5kSW5kZXggPSB0aGlzLnBvaW50SW5kZXgoe3Jvdzog
ZW5kUm93LCBjb2x1bW46IDB9LCBzdGFydEluZGV4KTsKKyAgICAgICAgaWYgKGVuZEluZGV4IDwg
MCkKKyAgICAgICAgICAgIGVuZEluZGV4ID0gLWVuZEluZGV4IC0gMTsKKworICAgICAgICB2YXIg
Y2xpcHBlZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGVuZElu
ZGV4OyBpKyspIHsKKyAgICAgICAgICAgIGNsaXBwZWQucHVzaChsaXN0W2ldKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gY2xpcHBlZDsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVBbGwg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZSgwLCB0aGlz
LnJhbmdlcy5sZW5ndGgpOworICAgIH07CisKKyAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKHNl
c3Npb24pIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHRoaXMuZGV0
YWNoKCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgICAgICAgdGhpcy5v
bkNoYW5nZSA9IHRoaXMuJG9uQ2hhbmdlLmJpbmQodGhpcyk7CisKKyAgICAgICAgdGhpcy5zZXNz
aW9uLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsKKyAgICB9OworCisgICAgdGhpcy5kZXRh
Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24pCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVMaXN0ZW5lcignY2hhbmdlJywg
dGhpcy5vbkNoYW5nZSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IG51bGw7CisgICAgfTsKKwor
ICAgIHRoaXMuJG9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgY2hhbmdlUmFu
Z2UgPSBlLmRhdGEucmFuZ2U7CisgICAgICAgIGlmIChlLmRhdGEuYWN0aW9uWzBdID09ICJpIil7
CisgICAgICAgICAgICB2YXIgc3RhcnQgPSBjaGFuZ2VSYW5nZS5zdGFydDsKKyAgICAgICAgICAg
IHZhciBlbmQgPSBjaGFuZ2VSYW5nZS5lbmQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgZW5kID0gY2hhbmdlUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSBj
aGFuZ2VSYW5nZS5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHN0YXJ0Um93ID0gc3RhcnQu
cm93OworICAgICAgICB2YXIgZW5kUm93ID0gZW5kLnJvdzsKKyAgICAgICAgdmFyIGxpbmVEaWYg
PSBlbmRSb3cgLSBzdGFydFJvdzsKKworICAgICAgICB2YXIgY29sRGlmZiA9IC1zdGFydC5jb2x1
bW4gKyBlbmQuY29sdW1uOworICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5yYW5nZXM7CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSByYW5nZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmIChyLmVuZC5yb3cg
PCBzdGFydFJvdykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChy
LnN0YXJ0LnJvdyA+IHN0YXJ0Um93KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBpZiAoci5zdGFydC5yb3cgPT0gc3RhcnRSb3cgJiYgci5zdGFydC5jb2x1bW4gPj0gc3Rh
cnQuY29sdW1uICkgeworICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uICs9IGNvbERpZmY7
CisgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChyLmVuZC5yb3cgPT0gc3RhcnRSb3cgJiYgci5lbmQuY29sdW1uID49
ICBzdGFydC5jb2x1bW4pIHsKKyAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gKz0gY29sRGlm
ZjsKKyAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lRGlmICE9IDAgJiYgaSA8IG4pIHsKKyAgICAg
ICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHIgPSByYW5n
ZXNbaV07CisgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjsKKyAgICAgICAg
ICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK30pLmNhbGwoUmFuZ2VMaXN0LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuUmFuZ2VM
aXN0ID0gUmFuZ2VMaXN0OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9tdWx0aV9zZWxl
Y3RfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9l
dmVudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwordmFyIGV2ZW50
ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CitmdW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIp
IHsKKyAgICByZXR1cm4gcDEucm93ID09IHAyLnJvdyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1u
OworfQorCitmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CisgICAgdmFyIGV2ID0gZS5kb21FdmVu
dDsKKyAgICB2YXIgYWx0ID0gZXYuYWx0S2V5OworICAgIHZhciBzaGlmdCA9IGV2LnNoaWZ0S2V5
OworICAgIHZhciBjdHJsID0gZS5nZXRBY2NlbEtleSgpOworICAgIHZhciBidXR0b24gPSBlLmdl
dEJ1dHRvbigpOworCisgICAgaWYgKGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlICYmIGJ1dHRv
biA9PSAyKSB7CisgICAgICAgIGUuZWRpdG9yLnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUuZG9t
RXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghY3RybCAmJiAh
YWx0KSB7CisgICAgICAgIGlmIChidXR0b24gPT0gMCAmJiBlLmVkaXRvci5pbk11bHRpU2VsZWN0
TW9kZSkKKyAgICAgICAgICAgIGUuZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBlZGl0b3IgPSBlLmVkaXRvcjsKKyAgICB2YXIg
c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjsKKyAgICB2YXIgaXNNdWx0aVNlbGVjdCA9IGVk
aXRvci5pbk11bHRpU2VsZWN0TW9kZTsKKyAgICB2YXIgcG9zID0gZS5nZXREb2N1bWVudFBvc2l0
aW9uKCk7CisgICAgdmFyIGN1cnNvciA9IHNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKKyAgICB2YXIg
aW5TZWxlY3Rpb24gPSBlLmluU2VsZWN0aW9uKCkgfHwgKHNlbGVjdGlvbi5pc0VtcHR5KCkgJiYg
aXNTYW1lUG9pbnQocG9zLCBjdXJzb3IpKTsKKworCisgICAgdmFyIG1vdXNlWCA9IGUueCwgbW91
c2VZID0gZS55OworICAgIHZhciBvbk1vdXNlU2VsZWN0aW9uID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICBtb3VzZVggPSBlLmNsaWVudFg7CisgICAgICAgIG1vdXNlWSA9IGUuY2xpZW50WTsKKyAg
ICB9OworCisgICAgdmFyIGJsb2NrU2VsZWN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBu
ZXdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVzKG1vdXNl
WCwgbW91c2VZKTsKKyAgICAgICAgdmFyIGN1cnNvciA9IHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVu
dFBvc2l0aW9uKG5ld0N1cnNvci5yb3csIG5ld0N1cnNvci5jb2x1bW4pOworCisgICAgICAgIGlm
IChpc1NhbWVQb2ludChzY3JlZW5DdXJzb3IsIG5ld0N1cnNvcikKKyAgICAgICAgICAgICYmIGlz
U2FtZVBvaW50KGN1cnNvciwgc2VsZWN0aW9uLnNlbGVjdGlvbkxlYWQpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBzY3JlZW5DdXJzb3IgPSBuZXdDdXJzb3I7CisKKyAgICAgICAgZWRp
dG9yLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihjdXJzb3IpOworICAgICAgICBlZGl0
b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIGVkaXRvci5yZW5kZXJlci5z
Y3JvbGxDdXJzb3JJbnRvVmlldygpOworCisgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25N
YXJrZXJzKHJlY3RTZWwpOworICAgICAgICByZWN0U2VsID0gc2VsZWN0aW9uLnJlY3Rhbmd1bGFy
UmFuZ2VCbG9jayhzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvcik7CisgICAgICAgIHJlY3RTZWwu
Zm9yRWFjaChlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyLCBlZGl0b3IpOworICAgICAgICBlZGl0
b3IudXBkYXRlU2VsZWN0aW9uTWFya2VycygpOworICAgIH07CisgICAgCisgICAgdmFyIHNlc3Np
b24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICB2YXIgc2NyZWVuQW5jaG9yID0gZWRpdG9yLnJlbmRl
cmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3VzZVgsIG1vdXNlWSk7CisgICAgdmFyIHNj
cmVlbkN1cnNvciA9IHNjcmVlbkFuY2hvcjsKKworICAgIAorCisgICAgaWYgKGN0cmwgJiYgIXNo
aWZ0ICYmICFhbHQgJiYgYnV0dG9uID09IDApIHsKKyAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0
ICYmIGluU2VsZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOyAvLyBkcmFnZ2luZworCisgICAg
ICAgIGlmICghaXNNdWx0aVNlbGVjdCkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0
aW9uLnRvT3JpZW50ZWRSYW5nZSgpOworICAgICAgICAgICAgZWRpdG9yLmFkZFNlbGVjdGlvbk1h
cmtlcihyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgb2xkUmFuZ2UgPSBzZWxlY3Rp
b24ucmFuZ2VMaXN0LnJhbmdlQXRQb2ludChwb3MpOworCisgICAgICAgIGV2ZW50LmNhcHR1cmUo
ZWRpdG9yLmNvbnRhaW5lciwgZnVuY3Rpb24oKXt9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHZhciB0bXBTZWwgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CisKKyAgICAgICAgICAg
IGlmIChvbGRSYW5nZSAmJiB0bXBTZWwuaXNFbXB0eSgpICYmIGlzU2FtZVBvaW50KG9sZFJhbmdl
LmN1cnNvciwgdG1wU2VsLmN1cnNvcikpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnN1YnN0
cmFjdFBvaW50KHRtcFNlbC5jdXJzb3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxl
Y3Rpb25NYXJrZXIocmFuZ2UpOworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFu
Z2UocmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24u
YWRkUmFuZ2UodG1wU2VsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICB9IGVs
c2UgaWYgKCFzaGlmdCAmJiBhbHQgJiYgYnV0dG9uID09IDApIHsKKyAgICAgICAgZS5zdG9wKCk7
CisKKyAgICAgICAgaWYgKGlzTXVsdGlTZWxlY3QgJiYgIWN0cmwpCisgICAgICAgICAgICBzZWxl
Y3Rpb24udG9TaW5nbGVSYW5nZSgpOworICAgICAgICBlbHNlIGlmICghaXNNdWx0aVNlbGVjdCAm
JiBjdHJsKQorICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKCk7CisKKyAgICAgICAgc2Vs
ZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CisgICAgICAgIHNlbGVjdGlvbi5jbGVh
clNlbGVjdGlvbigpOworCisgICAgICAgIHZhciByZWN0U2VsID0gW107CisKKyAgICAgICAgdmFy
IG9uTW91c2VTZWxlY3Rpb25FbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBjbGVhcklu
dGVydmFsKHRpbWVySWQpOworICAgICAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtl
cnMocmVjdFNlbCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RTZWwubGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJlY3RTZWxbaV0p
OworICAgICAgICB9OworCisgICAgICAgIHZhciBvblNlbGVjdGlvbkludGVydmFsID0gYmxvY2tT
ZWxlY3Q7CisKKyAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBvbk1vdXNl
U2VsZWN0aW9uLCBvbk1vdXNlU2VsZWN0aW9uRW5kKTsKKyAgICAgICAgdmFyIHRpbWVySWQgPSBz
ZXRJbnRlcnZhbChmdW5jdGlvbigpIHtvblNlbGVjdGlvbkludGVydmFsKCk7fSwgMjApOworCisg
ICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfQorfQorCisKK2V4cG9ydHMu
b25Nb3VzZURvd24gPSBvbk1vdXNlRG93bjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9jb21t
YW5kcy9tdWx0aV9zZWxlY3RfY29tbWFuZHMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CitleHBvcnRzLmRlZmF1bHRDb21tYW5kcyA9IFt7CisgICAgbmFtZTog
ImFkZEN1cnNvckFib3ZlIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNl
bGVjdE1vcmVMaW5lcygtMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVVwIiwg
bWFjOiAiQ3RybC1BbHQtVXAifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6
ICJhZGRDdXJzb3JCZWxvdyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5z
ZWxlY3RNb3JlTGluZXMoMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LURvd24i
LCBtYWM6ICJDdHJsLUFsdC1Eb3duIn0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBu
YW1lOiAiYWRkQ3Vyc29yQWJvdmVTa2lwQ3VycmVudCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlTGluZXMoLTEsIHRydWUpOyB9LAorICAgIGJpbmRLZXk6
IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1VcCIsIG1hYzogIkN0cmwtQWx0LVNoaWZ0LVVwIn0sCisg
ICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiYWRkQ3Vyc29yQmVsb3dTa2lwQ3Vy
cmVudCIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlTGlu
ZXMoMSwgdHJ1ZSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVNoaWZ0LURvd24i
LCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1Eb3duIn0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsK
KyAgICBuYW1lOiAic2VsZWN0TW9yZUJlZm9yZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci5zZWxlY3RNb3JlKC0xKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1B
bHQtTGVmdCIsIG1hYzogIkN0cmwtQWx0LUxlZnQifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3RNb3JlQWZ0ZXIiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgxKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1B
bHQtUmlnaHQiLCBtYWM6ICJDdHJsLUFsdC1SaWdodCJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogInNlbGVjdE5leHRCZWZvcmUiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgtMSwgdHJ1ZSk7IH0sCisgICAgYmluZEtleToge3dp
bjogIkN0cmwtQWx0LVNoaWZ0LUxlZnQiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1MZWZ0In0sCisg
ICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0TmV4dEFmdGVyIiwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoMSwgdHJ1ZSk7IH0s
CisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVNoaWZ0LVJpZ2h0IiwgbWFjOiAiQ3RybC1B
bHQtU2hpZnQtUmlnaHQifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJz
cGxpdEludG9MaW5lcyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tdWx0
aVNlbGVjdC5zcGxpdEludG9MaW5lcygpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFs
dC1MIiwgbWFjOiAiQ3RybC1BbHQtTCJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAg
bmFtZTogImFsaWduQ3Vyc29ycyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5hbGlnbkN1cnNvcnMoKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtQSIsIG1h
YzogIkN0cmwtQWx0LUEifQorfV07CitleHBvcnRzLm11bHRpU2VsZWN0Q29tbWFuZHMgPSBbewor
ICAgIG5hbWU6ICJzaW5nbGVTZWxlY3Rpb24iLAorICAgIGJpbmRLZXk6ICJlc2MiLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpOyB9LAor
ICAgIHJlYWRvbmx5OiB0cnVlLAorICAgIGlzQXZhaWxhYmxlOiBmdW5jdGlvbihlZGl0b3IpIHty
ZXR1cm4gZWRpdG9yICYmIGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZX0KK31dOworCit2YXIgSGFz
aEhhbmRsZXIgPSByZXF1aXJlKCIuLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxl
cjsKK2V4cG9ydHMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IEhhc2hIYW5kbGVyKGV4cG9ydHMubXVs
dGlTZWxlY3RDb21tYW5kcyk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uvd29ya2VyL3dvcmtl
cl9jbGllbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29w
JywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29w
Iik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5F
dmVudEVtaXR0ZXI7Cit2YXIgY29uZmlnID0gcmVxdWlyZSgiLi4vY29uZmlnIik7CisKK3ZhciBX
b3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1l
KSB7CisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5lciA9IHRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0
aGlzKTsKKyAgICB0aGlzLm9uTWVzc2FnZSA9IHRoaXMub25NZXNzYWdlLmJpbmQodGhpcyk7Cisg
ICAgdGhpcy5vbkVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcyk7CisKKyAgICB2YXIgd29y
a2VyVXJsOworICAgIGlmIChjb25maWcuZ2V0KCJwYWNrYWdlZCIpKSB7CisgICAgICAgIHdvcmtl
clVybCA9IGNvbmZpZy5tb2R1bGVVcmwobW9kLCAid29ya2VyIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdmFyIG5vcm1hbGl6ZVBhdGggPSB0aGlzLiRub3JtYWxpemVQYXRoOworICAgICAgICBp
ZiAodHlwZW9mIHJlcXVpcmUuc3VwcG9ydHMgIT09ICJ1bmRlZmluZWQiICYmIHJlcXVpcmUuc3Vw
cG9ydHMuaW5kZXhPZigidWNqczItcGluZi0wIikgPj0gMCkgeworICAgICAgICAgICAgd29ya2Vy
VXJsID0gcmVxdWlyZS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyX3NvdXJjZW1pbnQiKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlLm5hbWVUb1VybCAmJiAh
cmVxdWlyZS50b1VybCkKKyAgICAgICAgICAgICAgICByZXF1aXJlLnRvVXJsID0gcmVxdWlyZS5u
YW1lVG9Vcmw7CisgICAgICAgICAgICB3b3JrZXJVcmwgPSBub3JtYWxpemVQYXRoKHJlcXVpcmUu
dG9VcmwoImFjZS93b3JrZXIvd29ya2VyIiwgbnVsbCwgIl8iKSk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgdGxucyA9IHt9OworICAgICAgICB0b3BMZXZlbE5hbWVzcGFjZXMuZm9yRWFjaChm
dW5jdGlvbihucykgeworICAgICAgICAgICAgdGxuc1tuc10gPSBub3JtYWxpemVQYXRoKHJlcXVp
cmUudG9VcmwobnMsIG51bGwsICJfIikucmVwbGFjZSgvLmpzKFw/LiopPyQvLCAiIikpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICB0aGlzLiR3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVy
bCk7CisgICAgdGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHsKKyAgICAgICAgaW5pdCA6IHRydWUs
CisgICAgICAgIHRsbnM6IHRsbnMsCisgICAgICAgIG1vZHVsZTogbW9kLAorICAgICAgICBjbGFz
c25hbWU6IGNsYXNzbmFtZQorICAgIH0pOworCisgICAgdGhpcy5jYWxsYmFja0lkID0gMTsKKyAg
ICB0aGlzLmNhbGxiYWNrcyA9IHt9OworCisgICAgdGhpcy4kd29ya2VyLm9uZXJyb3IgPSB0aGlz
Lm9uRXJyb3I7CisgICAgdGhpcy4kd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMub25NZXNzYWdlOwor
fTsKKworKGZ1bmN0aW9uKCl7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRl
cik7CisKKyAgICB0aGlzLm9uRXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHdpbmRvdy5j
b25zb2xlICYmIGNvbnNvbGUubG9nICYmIGNvbnNvbGUubG9nKGUpOworICAgICAgICB0aHJvdyBl
OworICAgIH07CisKKyAgICB0aGlzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
dmFyIG1zZyA9IGUuZGF0YTsKKyAgICAgICAgc3dpdGNoKG1zZy50eXBlKSB7CisgICAgICAgICAg
ICBjYXNlICJsb2ciOgorICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUu
bG9nICYmIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIG1zZy5kYXRhKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAiZXZlbnQiOgorICAgICAgICAgICAgICAg
IHRoaXMuX2VtaXQobXNnLm5hbWUsIHtkYXRhOiBtc2cuZGF0YX0pOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlICJjYWxsIjoKKyAgICAgICAgICAgICAgICB2YXIg
Y2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1ttc2cuaWRdOworICAgICAgICAgICAgICAgIGlmIChj
YWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhtc2cuZGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1ttc2cuaWRdOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0aGlzLiRub3JtYWxpemVQYXRoID0gZnVuY3Rpb24ocGF0aCkgeworICAgICAgICBpZiAoIWxv
Y2F0aW9uLmhvc3QpIC8vIG5lZWRlZCBmb3IgZmlsZTovLyBwcm90b2NvbAorICAgICAgICAgICAg
cmV0dXJuIHBhdGg7CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15bYS16XSs6XC9cL1te
XC9dKy8sICIiKTsgLy8gUmVtb3ZlIGRvbWFpbiBuYW1lIGFuZCByZWJ1aWxkIGl0CisgICAgICAg
IHBhdGggPSBsb2NhdGlvbi5wcm90b2NvbCArICIvLyIgKyBsb2NhdGlvbi5ob3N0CisgICAgICAg
ICAgICArIChwYXRoLmNoYXJBdCgwKSA9PSAiLyIgPyAiIiA6IGxvY2F0aW9uLnBhdGhuYW1lLnJl
cGxhY2UoL1wvW15cL10qJC8sICIiKSkKKyAgICAgICAgICAgICsgIi8iICsgcGF0aC5yZXBsYWNl
KC9eW1wvXSsvLCAiIik7CisgICAgICAgIHJldHVybiBwYXRoOworICAgIH07CisKKyAgICB0aGlz
LnRlcm1pbmF0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUi
LCB7fSk7CisgICAgICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKTsKKyAgICAgICAgdGhpcy4k
d29ya2VyID0gbnVsbDsKKyAgICAgICAgdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNo
YW5nZSIsIHRoaXMuY2hhbmdlTGlzdGVuZXIpOworICAgICAgICB0aGlzLiRkb2MgPSBudWxsOwor
ICAgIH07CisKKyAgICB0aGlzLnNlbmQgPSBmdW5jdGlvbihjbWQsIGFyZ3MpIHsKKyAgICAgICAg
dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiBjbWQsIGFyZ3M6IGFyZ3N9KTsKKyAg
ICB9OworCisgICAgdGhpcy5jYWxsID0gZnVuY3Rpb24oY21kLCBhcmdzLCBjYWxsYmFjaykgewor
ICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuY2FsbGJh
Y2tJZCsrOworICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7CisgICAg
ICAgICAgICBhcmdzLnB1c2goaWQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2VuZChjbWQs
IGFyZ3MpOworICAgIH07CisKKyAgICB0aGlzLmVtaXQgPSBmdW5jdGlvbihldmVudCwgZGF0YSkg
eworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtl
dmVudDogZXZlbnQsIGRhdGE6IHtkYXRhOiBkYXRhLmRhdGF9fSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2F0Y2goZXgpIHt9CisgICAgfTsKKworICAgIHRoaXMuYXR0YWNoVG9Eb2N1bWVudCA9IGZ1
bmN0aW9uKGRvYykgeworICAgICAgICBpZih0aGlzLiRkb2MpCisgICAgICAgICAgICB0aGlzLnRl
cm1pbmF0ZSgpOworCisgICAgICAgIHRoaXMuJGRvYyA9IGRvYzsKKyAgICAgICAgdGhpcy5jYWxs
KCJzZXRWYWx1ZSIsIFtkb2MuZ2V0VmFsdWUoKV0pOworICAgICAgICBkb2Mub24oImNoYW5nZSIs
IHRoaXMuY2hhbmdlTGlzdGVuZXIpOworICAgIH07CisKKyAgICB0aGlzLmNoYW5nZUxpc3RlbmVy
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBlLnJhbmdlID0geworICAgICAgICAgICAgc3RhcnQ6
IGUuZGF0YS5yYW5nZS5zdGFydCwKKyAgICAgICAgICAgIGVuZDogZS5kYXRhLnJhbmdlLmVuZAor
ICAgICAgICB9OworICAgICAgICB0aGlzLmVtaXQoImNoYW5nZSIsIGUpOworICAgIH07CisKK30p
LmNhbGwoV29ya2VyQ2xpZW50LnByb3RvdHlwZSk7CisKKwordmFyIFVJV29ya2VyQ2xpZW50ID0g
ZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNsYXNzbmFtZSkgeworICAgIHRoaXMu
Y2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7CisgICAgdGhp
cy5jYWxsYmFja0lkID0gMTsKKyAgICB0aGlzLmNhbGxiYWNrcyA9IHt9OworICAgIHRoaXMubWVz
c2FnZUJ1ZmZlciA9IFtdOworCisgICAgdmFyIG1haW4gPSBudWxsOworICAgIHZhciBzZW5kZXIg
PSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlcik7CisgICAgdmFyIF9zZWxmID0gdGhpczsKKwor
ICAgIHRoaXMuJHdvcmtlciA9IHt9CisgICAgdGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICBfc2VsZi5tZXNzYWdlQnVmZmVyLnB1c2goZSk7CisgICAgICAg
IG1haW4gJiYgc2V0VGltZW91dChwcm9jZXNzTmV4dCk7CisgICAgfTsKKworICAgIHZhciBwcm9j
ZXNzTmV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbXNnID0gX3NlbGYubWVzc2FnZUJ1
ZmZlci5zaGlmdCgpOworICAgICAgICBpZiAobXNnLmNvbW1hbmQpCisgICAgICAgICAgICBtYWlu
W21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CisgICAgICAgIGVsc2UgaWYgKG1z
Zy5ldmVudCkKKyAgICAgICAgICAgIHNlbmRlci5fZW1pdChtc2cuZXZlbnQsIG1zZy5kYXRhKTsK
KyAgICB9OworCisgICAgc2VuZGVyLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CisgICAg
ICAgIF9zZWxmLm9uTWVzc2FnZSh7ZGF0YTogbXNnfSk7CisgICAgfTsKKyAgICBzZW5kZXIuY2Fs
bGJhY2sgPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFja0lkKSB7CisgICAgICAgIHRoaXMucG9zdE1l
c3NhZ2Uoe3R5cGU6ICJjYWxsIiwgaWQ6IGNhbGxiYWNrSWQsIGRhdGE6IGRhdGF9KTsKKyAgICB9
OworICAgIHNlbmRlci5lbWl0ID0gZnVuY3Rpb24obmFtZSwgZGF0YSkgeworICAgICAgICB0aGlz
LnBvc3RNZXNzYWdlKHt0eXBlOiAiZXZlbnQiLCBuYW1lOiBuYW1lLCBkYXRhOiBkYXRhfSk7Cisg
ICAgfTsKKworICAgIHJlcXVpcmUoW21vZF0sIGZ1bmN0aW9uKE1haW4pIHsKKyAgICAgICAgbWFp
biA9IG5ldyBNYWluW2NsYXNzbmFtZV0oc2VuZGVyKTsKKyAgICAgICAgd2hpbGUgKF9zZWxmLm1l
c3NhZ2VCdWZmZXIubGVuZ3RoKQorICAgICAgICAgICAgcHJvY2Vzc05leHQoKTsKKyAgICB9KTsK
K307CisKK1VJV29ya2VyQ2xpZW50LnByb3RvdHlwZSA9IFdvcmtlckNsaWVudC5wcm90b3R5cGU7
CisKK2V4cG9ydHMuVUlXb3JrZXJDbGllbnQgPSBVSVdvcmtlckNsaWVudDsKK2V4cG9ydHMuV29y
a2VyQ2xpZW50ID0gV29ya2VyQ2xpZW50OworCit9KTsKK2FjZS5kZWZpbmUoJ2FjZS9wbGFjZWhv
bGRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJywgJ2Fj
ZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvbGliL29vcCddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFu
Z2U7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2
ZW50RW1pdHRlcjsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKKwordmFyIFBsYWNl
SG9sZGVyID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGVuZ3RoLCBwb3MsIG90aGVycywgbWFpbkNsYXNz
LCBvdGhlcnNDbGFzcykgeworICAgIHZhciBfc2VsZiA9IHRoaXM7CisgICAgdGhpcy5sZW5ndGgg
PSBsZW5ndGg7CisgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgICB0aGlzLmRvYyA9IHNl
c3Npb24uZ2V0RG9jdW1lbnQoKTsKKyAgICB0aGlzLm1haW5DbGFzcyA9IG1haW5DbGFzczsKKyAg
ICB0aGlzLm90aGVyc0NsYXNzID0gb3RoZXJzQ2xhc3M7CisgICAgdGhpcy4kb25VcGRhdGUgPSB0
aGlzLm9uVXBkYXRlLmJpbmQodGhpcyk7CisgICAgdGhpcy5kb2Mub24oImNoYW5nZSIsIHRoaXMu
JG9uVXBkYXRlKTsKKyAgICB0aGlzLiRvdGhlcnMgPSBvdGhlcnM7CisgICAgCisgICAgdGhpcy4k
b25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIF9zZWxmLm9uQ3Vyc29yQ2hhbmdlKCk7CisgICAgICAgIH0pOwor
ICAgIH07CisgICAgCisgICAgdGhpcy4kcG9zID0gcG9zOworICAgIHZhciB1bmRvU3RhY2sgPSBz
ZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9TdGFjayB8fCBzZXNzaW9uLmdldFVuZG9NYW5h
Z2VyKCkuJHVuZG9zdGFjayB8fCB7bGVuZ3RoOiAtMX07CisgICAgdGhpcy4kdW5kb1N0YWNrRGVw
dGggPSAgdW5kb1N0YWNrLmxlbmd0aDsKKyAgICB0aGlzLnNldHVwKCk7CisKKyAgICBzZXNzaW9u
LnNlbGVjdGlvbi5vbigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOworfTsK
KworKGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIp
OworICAgIHRoaXMuc2V0dXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIF9zZWxmID0gdGhp
czsKKyAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRo
aXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuJHBvczsKKworICAgICAgICB0aGlz
LnBvcyA9IGRvYy5jcmVhdGVBbmNob3IocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAgIHRo
aXMubWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UocG9zLnJvdywgcG9zLmNv
bHVtbiwgcG9zLnJvdywgcG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoKSwgdGhpcy5tYWluQ2xhc3Ms
IG51bGwsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5wb3Mub24oImNoYW5nZSIsIGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihfc2VsZi5tYXJrZXJJZCk7
CisgICAgICAgICAgICBfc2VsZi5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5n
ZShldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbiwgZXZlbnQudmFsdWUucm93LCBl
dmVudC52YWx1ZS5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYubWFpbkNsYXNzLCBudWxsLCBm
YWxzZSk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLm90aGVycyA9IFtdOworICAgICAgICB0
aGlzLiRvdGhlcnMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikgeworICAgICAgICAgICAgdmFyIGFu
Y2hvciA9IGRvYy5jcmVhdGVBbmNob3Iob3RoZXIucm93LCBvdGhlci5jb2x1bW4pOworICAgICAg
ICAgICAgX3NlbGYub3RoZXJzLnB1c2goYW5jaG9yKTsKKyAgICAgICAgfSk7CisgICAgICAgIHNl
c3Npb24uc2V0VW5kb1NlbGVjdChmYWxzZSk7CisgICAgfTsKKyAgICB0aGlzLnNob3dPdGhlck1h
cmtlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYodGhpcy5vdGhlcnNBY3RpdmUpIHJldHVy
bjsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBfc2Vs
ZiA9IHRoaXM7CisgICAgICAgIHRoaXMub3RoZXJzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihhbmNob3IpIHsKKyAgICAgICAgICAgIGFuY2hvci5t
YXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShhbmNob3Iucm93LCBhbmNob3Iu
Y29sdW1uLCBhbmNob3Iucm93LCBhbmNob3IuY29sdW1uK19zZWxmLmxlbmd0aCksIF9zZWxmLm90
aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICBhbmNob3Iub24oImNoYW5nZSIs
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIo
YW5jaG9yLm1hcmtlcklkKTsKKyAgICAgICAgICAgICAgICBhbmNob3IubWFya2VySWQgPSBzZXNz
aW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UoZXZlbnQudmFsdWUucm93LCBldmVudC52YWx1ZS5jb2x1
bW4sIGV2ZW50LnZhbHVlLnJvdywgZXZlbnQudmFsdWUuY29sdW1uK19zZWxmLmxlbmd0aCksIF9z
ZWxmLm90aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYoIXRoaXMub3RoZXJzQWN0aXZlKSByZXR1cm47CisgICAgICAgIHRoaXMub3RoZXJz
QWN0aXZlID0gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vdGhlcnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhp
cy5vdGhlcnNbaV0ubWFya2VySWQpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLm9uVXBk
YXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gZXZlbnQuZGF0YTsK
KyAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIGlmKHJhbmdlLnN0YXJ0
LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdykgcmV0dXJuOworICAgICAgICBpZihyYW5nZS5zdGFydC5y
b3cgIT09IHRoaXMucG9zLnJvdykgcmV0dXJuOworICAgICAgICBpZiAodGhpcy4kdXBkYXRpbmcp
IHJldHVybjsKKyAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSB0cnVlOworICAgICAgICB2YXIgbGVu
Z3RoRGlmZiA9IGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiID8gcmFuZ2UuZW5kLmNvbHVt
biAtIHJhbmdlLnN0YXJ0LmNvbHVtbiA6IHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHJhbmdlLmVuZC5j
b2x1bW47CisgICAgICAgIAorICAgICAgICBpZihyYW5nZS5zdGFydC5jb2x1bW4gPj0gdGhpcy5w
b3MuY29sdW1uICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1bW4gKyB0aGlz
Lmxlbmd0aCArIDEpIHsKKyAgICAgICAgICAgIHZhciBkaXN0YW5jZUZyb21TdGFydCA9IHJhbmdl
LnN0YXJ0LmNvbHVtbiAtIHRoaXMucG9zLmNvbHVtbjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3Ro
ICs9IGxlbmd0aERpZmY7CisgICAgICAgICAgICBpZighdGhpcy5zZXNzaW9uLiRmcm9tVW5kbykg
eworICAgICAgICAgICAgICAgIGlmKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm90aGVycy5sZW5ndGggLSAxOyBp
ID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhp
cy5vdGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9zID0ge3Jvdzog
b3RoZXJQb3Mucm93LCBjb2x1bW46IG90aGVyUG9zLmNvbHVtbiArIGRpc3RhbmNlRnJvbVN0YXJ0
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyUG9zLnJvdyA9PT0gcmFuZ2Uuc3Rh
cnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyUG9zLmNvbHVtbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0aERpZmY7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnQobmV3UG9zLCBkZWx0YS50ZXh0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZihkZWx0YS5hY3Rp
b24gPT09ICJyZW1vdmVUZXh0IikgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
dGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBvdGhlclBvcyA9IHRoaXMub3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90aGVyUG9zLnJvdywgY29sdW1uOiBvdGhlclBvcy5j
b2x1bW4gKyBkaXN0YW5jZUZyb21TdGFydH07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihv
dGhlclBvcy5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBv
dGhlclBvcy5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zLmNvbHVt
biArPSBsZW5ndGhEaWZmOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MucmVtb3Zl
KG5ldyBSYW5nZShuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uLCBuZXdQb3Mucm93LCBuZXdQb3Mu
Y29sdW1uIC0gbGVuZ3RoRGlmZikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5w
b3MuY29sdW1uICYmIGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnBvcy5zZXRQb3NpdGlvbih0aGlzLnBvcy5yb3csIHRoaXMucG9zLmNvbHVtbiAtIGxl
bmd0aERpZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLm90aGVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBvdGhlciA9IHRoaXMub3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBuZXdQb3MgPSB7cm93OiBvdGhlci5yb3csIGNvbHVtbjogb3RoZXIuY29sdW1uIC0gbGVuZ3Ro
RGlmZn07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYob3RoZXIucm93ID09PSByYW5n
ZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDwgb3RoZXIuY29sdW1uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0aERpZmY7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuc2V0UG9zaXRpb24obmV3UG9zLnJvdywg
bmV3UG9zLmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0uYmluZCh0aGlzKSwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID09PSB0aGlzLnBvcy5jb2x1bW4gJiYgZGVs
dGEuYWN0aW9uID09PSAicmVtb3ZlVGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgb3RoZXIgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZihvdGhlci5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiByYW5nZS5zdGFydC5jb2x1
bW4gPCBvdGhlci5jb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ro
ZXIuc2V0UG9zaXRpb24ob3RoZXIucm93LCBvdGhlci5jb2x1bW4gLSBsZW5ndGhEaWZmKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5wb3MuX2VtaXQoImNoYW5nZSIsIHt2YWx1
ZTogdGhpcy5wb3N9KTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vdGhl
cnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0aGlzLm90aGVyc1tpXS5fZW1pdCgi
Y2hhbmdlIiwge3ZhbHVlOiB0aGlzLm90aGVyc1tpXX0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHRoaXMuJHVwZGF0aW5nID0gZmFsc2U7CisgICAgfTsKKworICAgIHRoaXMu
b25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAodGhpcy4kdXBk
YXRpbmcpIHJldHVybjsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24u
Z2V0Q3Vyc29yKCk7CisgICAgICAgIGlmKHBvcy5yb3cgPT09IHRoaXMucG9zLnJvdyAmJiBwb3Mu
Y29sdW1uID49IHRoaXMucG9zLmNvbHVtbiAmJiBwb3MuY29sdW1uIDw9IHRoaXMucG9zLmNvbHVt
biArIHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLnNob3dPdGhlck1hcmtlcnMoKTsK
KyAgICAgICAgICAgIHRoaXMuX2VtaXQoImN1cnNvckVudGVyIiwgZXZlbnQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzKCk7CisgICAgICAgICAg
ICB0aGlzLl9lbWl0KCJjdXJzb3JMZWF2ZSIsIGV2ZW50KTsKKyAgICAgICAgfQorICAgIH07ICAg
IAorICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5y
ZW1vdmVNYXJrZXIodGhpcy5tYXJrZXJJZCk7CisgICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2Vy
cygpOworICAgICAgICB0aGlzLmRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlz
LiRvblVwZGF0ZSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOworICAgICAgICB0
aGlzLnBvcy5kZXRhY2goKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVy
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy5vdGhlcnNbaV0uZGV0YWNoKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVuZG9TZWxlY3QodHJ1ZSk7CisgICAg
fTsKKyAgICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZih0aGlzLiR1bmRv
U3RhY2tEZXB0aCA9PT0gLTEpCisgICAgICAgICAgICB0aHJvdyBFcnJvcigiQ2FuY2VsaW5nIHBs
YWNlaG9sZGVycyBvbmx5IHN1cHBvcnRlZCB3aXRoIHVuZG8gbWFuYWdlciBhdHRhY2hlZCB0byBz
ZXNzaW9uLiIpOworICAgICAgICB2YXIgdW5kb01hbmFnZXIgPSB0aGlzLnNlc3Npb24uZ2V0VW5k
b01hbmFnZXIoKTsKKyAgICAgICAgdmFyIHVuZG9zUmVxdWlyZWQgPSAodW5kb01hbmFnZXIuJHVu
ZG9TdGFjayB8fCB1bmRvTWFuYWdlci4kdW5kb3N0YWNrKS5sZW5ndGggLSB0aGlzLiR1bmRvU3Rh
Y2tEZXB0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmRvc1JlcXVpcmVkOyBpKysp
IHsKKyAgICAgICAgICAgIHVuZG9NYW5hZ2VyLnVuZG8odHJ1ZSk7CisgICAgICAgIH0KKyAgICB9
OworfSkuY2FsbChQbGFjZUhvbGRlci5wcm90b3R5cGUpOworCisKK2V4cG9ydHMuUGxhY2VIb2xk
ZXIgPSBQbGFjZUhvbGRlcjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2Zv
bGRfbW9kZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJl
cXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9s
ZE1vZGUgPSBmdW5jdGlvbigpIHt9OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRp
bmdTdGFydE1hcmtlciA9IG51bGw7CisgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG51bGw7
CisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCBy
b3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAg
aWYgKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1
cm4gInN0YXJ0IjsKKyAgICAgICAgaWYgKGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIgorICAg
ICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIKKyAgICAgICAgICAgICAgICAm
JiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4g
ImVuZCI7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkV2lk
Z2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgdGhpcy5pbmRlbnRhdGlvbkJsb2NrID0gZnVuY3Rp
b24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIHJlID0gL1xTLzsKKyAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIHN0YXJ0TGV2
ZWwgPSBsaW5lLnNlYXJjaChyZSk7CisgICAgICAgIGlmIChzdGFydExldmVsID09IC0xKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydENvbHVtbiA9IGNvbHVtbiB8fCBs
aW5lLmxlbmd0aDsKKyAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7Cisg
ICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKKyAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKKwor
ICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKKyAgICAgICAgICAgIHZhciBsZXZlbCA9
IHNlc3Npb24uZ2V0TGluZShyb3cpLnNlYXJjaChyZSk7CisKKyAgICAgICAgICAgIGlmIChsZXZl
bCA9PSAtMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGxl
dmVsIDw9IHN0YXJ0TGV2ZWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGVuZFJvdyA9IHJvdzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJv
dykgeworICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cp
Lmxlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29s
dW1uLCBlbmRSb3csIGVuZENvbHVtbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5v
cGVuaW5nQnJhY2tldEJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgYnJhY2tldCwgcm93LCBjb2x1
bW4sIHR5cGVSZSkgeworICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogY29s
dW1uICsgMX07CisgICAgICAgIHZhciBlbmQgPSBzZXNzaW9uLiRmaW5kQ2xvc2luZ0JyYWNrZXQo
YnJhY2tldCwgc3RhcnQsIHR5cGVSZSk7CisgICAgICAgIGlmICghZW5kKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBmdyA9IHNlc3Npb24uZm9sZFdpZGdldHNbZW5kLnJvd107
CisgICAgICAgIGlmIChmdyA9PSBudWxsKQorICAgICAgICAgICAgZncgPSB0aGlzLmdldEZvbGRX
aWRnZXQoc2Vzc2lvbiwgZW5kLnJvdyk7CisKKyAgICAgICAgaWYgKGZ3ID09ICJzdGFydCIgJiYg
ZW5kLnJvdyA+IHN0YXJ0LnJvdykgeworICAgICAgICAgICAgZW5kLnJvdyAtLTsKKyAgICAgICAg
ICAgIGVuZC5jb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kLnJvdykubGVuZ3RoOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOworICAgIH07
CisKKyAgICB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFj
a2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7CisgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3cs
IGNvbHVtbjogY29sdW1ufTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gc2Vzc2lvbi4kZmluZE9wZW5p
bmdCcmFja2V0KGJyYWNrZXQsIGVuZCk7CisKKyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzdGFydC5jb2x1bW4rKzsKKyAgICAgICAgZW5kLmNvbHVt
bi0tOworCisgICAgICAgIHJldHVybiAgUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgZW5kKTsKKyAg
ICB9OworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKKzsKKyAgICAgICAgICAg
IChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBhY2UucmVxdWlyZShbImFjZS9hY2UiXSwg
ZnVuY3Rpb24oYSkgeworICAgICAgICAgICAgICAgICAgICBhICYmIGEuY29uZmlnLmluaXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuYWNlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgd2luZG93LmFjZSA9IHt9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkg
aW4gYSkgaWYgKGEuaGFzT3duUHJvcGVydHkoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFjZVtrZXldID0gYVtrZXldOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSko
KTsKKyAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2dG9vbHMuY3NzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2dG9vbHMuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBkNjU0NjEzMGI3OTVhNzliNWZjNjBhZGM4NDgyOWQ0ZTJkYTUyNWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2VkZXZ0
b29scy5jc3MKQEAgLTAsMCArMSw3IEBACisuYWNlX2VkaXRvciAqIHsKKyAgICAtd2Via2l0LWJv
eC1zaXppbmc6IGNvbnRlbnQtYm94OworfQorCisuYWNlLWVkaXRvci1jb250YWluZXIgeworICAg
IGhlaWdodDogMTAwJTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfY3NzLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEyYWUxMmViOTc0ODI3MTFlMzAxNjU5OTgwYTNjODAyNmNjMTVkN2QKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5q
cwpAQCAtMCwwICsxLDc1MSBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgor
ICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgQWpheC5vcmcgQi5WLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBu
b3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBC
LlYuIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2NzcycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcsICdh
Y2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUv
bWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcsICdhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQnLCAnYWNl
L21vZGUvYmVoYXZpb3VyL2NzcycsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4v
bGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKK3ZhciBU
b2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Cit2YXIgQ3NzSGln
aGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGln
aHRSdWxlczsKK3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdf
YnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwordmFyIFdvcmtlckNsaWVudCA9
IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwordmFyIENz
c0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKK3Zh
ciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsK
KwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcgVG9r
ZW5pemVyKG5ldyBDc3NIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCksICJpIik7CisgICAgdGhp
cy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOworICAgIHRoaXMuJGJlaGF2
aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBD
U3R5bGVGb2xkTW9kZSgpOworfTsKK29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhm
dW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gImNTdHlsZSI7CisKKyAgICB0
aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgeworICAg
ICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworICAgICAgICB2YXIgdG9r
ZW5zID0gdGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsK
KyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlw
ZSA9PSAiY29tbWVudCIpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKKyAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGluZGVudDsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBm
dW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRl
bnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0
ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgeworICAgICAgICB0aGlzLiRvdXRkZW50
LmF1dG9PdXRkZW50KGRvYywgcm93KTsKKyAgICB9OworCisgICAgdGhpcy5jcmVhdGVXb3JrZXIg
PSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xp
ZW50KFsiYWNlIl0sICJhY2UvbW9kZS9jc3Nfd29ya2VyIiwgIldvcmtlciIpOworICAgICAgICB3
b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOworCisgICAgICAg
IHdvcmtlci5vbigiY3NzbGludCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIHNlc3Npb24u
c2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgd29ya2VyLm9u
KCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5v
dGF0aW9ucygpOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gd29ya2VyOworICAgIH07
CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworCit9
KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywg
J2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIg
bGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0g
cmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKK3Zh
ciBzdXBwb3J0VHlwZSA9IGV4cG9ydHMuc3VwcG9ydFR5cGUgPSAiYW5pbWF0aW9uLWZpbGwtbW9k
ZXxhbGlnbm1lbnQtYWRqdXN0fGFsaWdubWVudC1iYXNlbGluZXxhbmltYXRpb24tZGVsYXl8YW5p
bWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWl0ZXJhdGlvbi1j
b3VudHxhbmltYXRpb24tbmFtZXxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tdGltaW5n
LWZ1bmN0aW9ufGFuaW1hdGlvbnxhcHBlYXJhbmNlfGF6aW11dGh8YmFja2ZhY2UtdmlzaWJpbGl0
eXxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1icmVha3xiYWNrZ3JvdW5kLWNsaXB8
YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtb3JpZ2lufGJhY2tn
cm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1zaXplfGJhY2tncm91
bmR8YmFzZWxpbmUtc2hpZnR8YmluZGluZ3xibGVlZHxib29rbWFyay1sYWJlbHxib29rbWFyay1s
ZXZlbHxib29rbWFyay1zdGF0ZXxib29rbWFyay10YXJnZXR8Ym9yZGVyLWJvdHRvbXxib3JkZXIt
Ym90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdo
dC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1j
b2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9y
ZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxi
b3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxl
ZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9y
ZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9y
ZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3Jk
ZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5
bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym9yZGVyfGJvdHRvbXxib3gtYWxpZ258
Ym94LWRlY29yYXRpb24tYnJlYWt8Ym94LWRpcmVjdGlvbnxib3gtZmxleC1ncm91cHxib3gtZmxl
eHxib3gtbGluZXN8Ym94LW9yZGluYWwtZ3JvdXB8Ym94LW9yaWVudHxib3gtcGFja3xib3gtc2hh
ZG93fGJveC1zaXppbmd8YnJlYWstYWZ0ZXJ8YnJlYWstYmVmb3JlfGJyZWFrLWluc2lkZXxjYXB0
aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvci1wcm9maWxlfGNvbG9yfGNvbHVtbi1jb3VudHxjb2x1
bW4tZmlsbHxjb2x1bW4tZ2FwfGNvbHVtbi1ydWxlfGNvbHVtbi1ydWxlLWNvbG9yfGNvbHVtbi1y
dWxlLXN0eWxlfGNvbHVtbi1ydWxlLXdpZHRofGNvbHVtbi1zcGFufGNvbHVtbi13aWR0aHxjb2x1
bW5zfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjcm9wfGN1ZS1hZnRl
cnxjdWUtYmVmb3JlfGN1ZXxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZG9taW5hbnQtYmFzZWxp
bmV8ZHJvcC1pbml0aWFsLWFmdGVyLWFkanVzdHxkcm9wLWluaXRpYWwtYWZ0ZXItYWxpZ258ZHJv
cC1pbml0aWFsLWJlZm9yZS1hZGp1c3R8ZHJvcC1pbml0aWFsLWJlZm9yZS1hbGlnbnxkcm9wLWlu
aXRpYWwtc2l6ZXxkcm9wLWluaXRpYWwtdmFsdWV8ZWxldmF0aW9ufGVtcHR5LWNlbGxzfGZpdHxm
aXQtcG9zaXRpb258ZmxvYXQtb2Zmc2V0fGZsb2F0fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZXxmb250
LXNpemUtYWRqdXN0fGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdl
aWdodHxmb250fGdyaWQtY29sdW1uc3xncmlkLXJvd3N8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWln
aHR8aHlwaGVuYXRlLWFmdGVyfGh5cGhlbmF0ZS1iZWZvcmV8aHlwaGVuYXRlLWNoYXJhY3Rlcnxo
eXBoZW5hdGUtbGluZXN8aHlwaGVuYXRlLXJlc291cmNlfGh5cGhlbnN8aWNvbnxpbWFnZS1vcmll
bnRhdGlvbnxpbWFnZS1yZW5kZXJpbmd8aW1hZ2UtcmVzb2x1dGlvbnxpbmxpbmUtYm94LWFsaWdu
fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGluZS1zdGFja2luZy1ydWJ5fGxpbmUt
c3RhY2tpbmctc2hpZnR8bGluZS1zdGFja2luZy1zdHJhdGVneXxsaW5lLXN0YWNraW5nfGxpc3Qt
c3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHls
ZXxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1hcmdp
bnxtYXJrLWFmdGVyfG1hcmstYmVmb3JlfG1hcmt8bWFya3N8bWFycXVlZS1kaXJlY3Rpb258bWFy
cXVlZS1wbGF5LWNvdW50fG1hcnF1ZWUtc3BlZWR8bWFycXVlZS1zdHlsZXxtYXgtaGVpZ2h0fG1h
eC13aWR0aHxtaW4taGVpZ2h0fG1pbi13aWR0aHxtb3ZlLXRvfG5hdi1kb3dufG5hdi1pbmRleHxu
YXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91
dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93
LXN0eWxlfG92ZXJmbG93LXh8b3ZlcmZsb3cteXxvdmVyZmxvd3xwYWRkaW5nLWJvdHRvbXxwYWRk
aW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0
ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZS1wb2xpY3l8cGFnZXxw
YXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGVyc3BlY3RpdmUtb3JpZ2lufHBlcnNwZWN0
aXZlfHBob25lbWVzfHBpdGNoLXJhbmdlfHBpdGNofHBsYXktZHVyaW5nfHBvc2l0aW9ufHByZXNl
bnRhdGlvbi1sZXZlbHxwdW5jdHVhdGlvbi10cmltfHF1b3Rlc3xyZW5kZXJpbmctaW50ZW50fHJl
c2l6ZXxyZXN0LWFmdGVyfHJlc3QtYmVmb3JlfHJlc3R8cmljaG5lc3N8cmlnaHR8cm90YXRpb24t
cG9pbnR8cm90YXRpb258cnVieS1hbGlnbnxydWJ5LW92ZXJoYW5nfHJ1YnktcG9zaXRpb258cnVi
eS1zcGFufHNpemV8c3BlYWstaGVhZGVyfHNwZWFrLW51bWVyYWx8c3BlYWstcHVuY3R1YXRpb258
c3BlYWt8c3BlZWNoLXJhdGV8c3RyZXNzfHN0cmluZy1zZXR8dGFibGUtbGF5b3V0fHRhcmdldC1u
YW1lfHRhcmdldC1uZXd8dGFyZ2V0LXBvc2l0aW9ufHRhcmdldHx0ZXh0LWFsaWduLWxhc3R8dGV4
dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1lbXBoYXNpc3x0ZXh0LWhlaWdodHx0ZXh0LWlu
ZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdXRsaW5lfHRleHQtc2hhZG93fHRleHQtdHJhbnNmb3Jt
fHRleHQtd3JhcHx0b3B8dHJhbnNmb3JtLW9yaWdpbnx0cmFuc2Zvcm0tc3R5bGV8dHJhbnNmb3Jt
fHRyYW5zaXRpb24tZGVsYXl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5
fHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHRyYW5zaXRpb258dW5pY29kZS1iaWRpfHZlcnRp
Y2FsLWFsaWdufHZpc2liaWxpdHl8dm9pY2UtYmFsYW5jZXx2b2ljZS1kdXJhdGlvbnx2b2ljZS1m
YW1pbHl8dm9pY2UtcGl0Y2gtcmFuZ2V8dm9pY2UtcGl0Y2h8dm9pY2UtcmF0ZXx2b2ljZS1zdHJl
c3N8dm9pY2Utdm9sdW1lfHZvbHVtZXx3aGl0ZS1zcGFjZS1jb2xsYXBzZXx3aGl0ZS1zcGFjZXx3
aWRvd3N8d2lkdGh8d29yZC1icmVha3x3b3JkLXNwYWNpbmd8d29yZC13cmFwfHotaW5kZXgiOwor
dmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2Jh
fHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwordmFyIHN1cHBvcnRDb25zdGFudCA9IGV4cG9y
dHMuc3VwcG9ydENvbnN0YW50ID0gImFic29sdXRlfGFmdGVyLWVkZ2V8YWZ0ZXJ8YWxsLXNjcm9s
bHxhbGx8YWxwaGFiZXRpY3xhbHdheXN8YW50aWFsaWFzZWR8YXJtZW5pYW58YXV0b3xhdm9pZC1j
b2x1bW58YXZvaWQtcGFnZXxhdm9pZHxiYWxhbmNlfGJhc2VsaW5lfGJlZm9yZS1lZGdlfGJlZm9y
ZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrLWxpbmUtaGVpZ2h0fGJsb2NrfGJvbGR8Ym9sZGVy
fGJvcmRlci1ib3h8Ym90aHxib3R0b218Ym94fGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxp
emV8Y2Fwcy1oZWlnaHR8Y2FwdGlvbnxjZW50ZXJ8Y2VudHJhbHxjaGFyfGNpcmNsZXxjamstaWRl
b2dyYXBoaWN8Y2xvbmV8Y2xvc2UtcXVvdGV8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb2x1bW58Y29u
c2lkZXItc2hpZnRzfGNvbnRhaW58Y29udGVudC1ib3h8Y292ZXJ8Y3Jvc3NoYWlyfGN1YmljLWJl
emllcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVk
fGRpc2N8ZGlzcmVnYXJkLXNoaWZ0c3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxl
dHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxl
YXNlLWlufGVhc2UtaW4tb3V0fGVhc2Utb3V0fGVhc2V8ZWxsaXBzaXN8ZW5kfGV4Y2x1ZGUtcnVi
eXxmaWxsfGZpeGVkfGdlb3JnaWFufGdseXBoc3xncmlkLWhlaWdodHxncm9vdmV8aGFuZHxoYW5n
aW5nfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFs
fGljb258aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRo
ZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoaWN8aW5hY3RpdmV8aW5jbHVkZS1ydWJ5fGlu
aGVyaXR8aW5pdGlhbHxpbmxpbmUtYmxvY2t8aW5saW5lLWJveHxpbmxpbmUtbGluZS1oZWlnaHR8
aW5saW5lLXRhYmxlfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdv
cmR8aW52ZXJ0fGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxs
fGxhc3R8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaW5lYXJ8bGlz
dC1pdGVtfGxvY2FsfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxv
d2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWF0aGVtYXRpY2FsfG1heC1oZWlnaHR8bWF4
LXNpemV8bWVkaXVtfG1lbnV8bWVzc2FnZS1ib3h8bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVz
aXplfG5ld3NwYXBlcnxuby1jaGFuZ2V8bm8tY2xvc2UtcXVvdGV8bm8tZHJvcHxuby1vcGVuLXF1
b3RlfG5vLXJlcGVhdHxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8bnctcmVzaXplfG9i
bGlxdWV8b3Blbi1xdW90ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwYWRkaW5nLWJveHxwYWdl
fHBvaW50ZXJ8cHJlLWxpbmV8cHJlLXdyYXB8cHJlfHByZXNlcnZlLTNkfHByb2dyZXNzfHJlbGF0
aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyZXBsYWNlZHxyZXNldC1zaXplfHJpZGdlfHJp
Z2h0fHJvdW5kfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJh
dGV8c2xpY2V8c21hbGwtY2Fwc3xzbWFsbC1jYXB0aW9ufHNvbGlkfHNwYWNlfHNxdWFyZXxzdGFy
dHxzdGF0aWN8c3RhdHVzLWJhcnxzdGVwLWVuZHxzdGVwLXN0YXJ0fHN0ZXBzfHN0cmV0Y2h8c3Ry
aWN0fHN1YnxzdXBlcnxzdy1yZXNpemV8dGFibGUtY2FwdGlvbnx0YWJsZS1jZWxsfHRhYmxlLWNv
bHVtbi1ncm91cHx0YWJsZS1jb2x1bW58dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1n
cm91cHx0YWJsZS1yb3ctZ3JvdXB8dGFibGUtcm93fHRhYmxlfHRiLXJsfHRleHQtYWZ0ZXItZWRn
ZXx0ZXh0LWJlZm9yZS1lZGdlfHRleHQtYm90dG9tfHRleHQtc2l6ZXx0ZXh0LXRvcHx0ZXh0fHRo
aWNrfHRoaW58dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVw
cGVyLXJvbWFufHVwcGVyY2FzZXx1c2Utc2NyaXB0fHZlcnRpY2FsLWlkZW9ncmFwaGljfHZlcnRp
Y2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8ei1pbmRleHx6ZXJvIjsK
K3ZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3Ig
PSAiYXF1YXxibGFja3xibHVlfGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfG1hcm9vbnxuYXZ5fG9s
aXZlfG9yYW5nZXxwdXJwbGV8cmVkfHNpbHZlcnx0ZWFsfHdoaXRlfHllbGxvdyI7Cit2YXIgc3Vw
cG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFs
fGNlbnR1cnl8Y29taWN8Y291cmllcnxnYXJhbW9uZHxnZW9yZ2lhfGhlbHZldGljYXxpbXBhY3R8
bHVjaWRhfHN5bWJvbHxzeXN0ZW18dGFob21hfHRpbWVzfHRyZWJ1Y2hldHx1dG9waWF8dmVyZGFu
YXx3ZWJkaW5nc3xzYW5zLXNlcmlmfHNlcmlmfG1vbm9zcGFjZSI7CisKK3ZhciBudW1SZSA9IGV4
cG9ydHMubnVtUmUgPSAiXFwtPyg/Oig/OlswLTldKyl8KD86WzAtOV0qXFwuWzAtOV0rKSkiOwor
dmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIo
YWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0
aW9uKVxcYiI7Cit2YXIgcHNldWRvQ2xhc3NlcyAgPSBleHBvcnRzLnBzZXVkb0NsYXNzZXMgPSAg
Iig6KVxcYihhY3RpdmV8Y2hlY2tlZHxkaXNhYmxlZHxlbXB0eXxlbmFibGVkfGZpcnN0LWNoaWxk
fGZpcnN0LW9mLXR5cGV8Zm9jdXN8aG92ZXJ8aW5kZXRlcm1pbmF0ZXxpbnZhbGlkfGxhc3QtY2hp
bGR8bGFzdC1vZi10eXBlfGxpbmt8bm90fG50aC1jaGlsZHxudGgtbGFzdC1jaGlsZHxudGgtbGFz
dC1vZi10eXBlfG50aC1vZi10eXBlfG9ubHktY2hpbGR8b25seS1vZi10eXBlfHJlcXVpcmVkfHJv
b3R8dGFyZ2V0fHZhbGlkfHZpc2l0ZWQpXFxiIjsKKwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0g
ZnVuY3Rpb24oKSB7CisKKyAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29y
ZE1hcHBlcih7CisgICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAor
ICAgICAgICAic3VwcG9ydC5jb25zdGFudCI6IHN1cHBvcnRDb25zdGFudCwKKyAgICAgICAgInN1
cHBvcnQudHlwZSI6IHN1cHBvcnRUeXBlLAorICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xv
ciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAorICAgICAgICAic3VwcG9ydC5jb25zdGFudC5mb250
cyI6IHN1cHBvcnRDb25zdGFudEZvbnRzCisgICAgfSwgInRleHQiLCB0cnVlKTsKKworICAgIHZh
ciBiYXNlX3J1bGVzZXQgPSBbCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1l
bnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIs
CisgICAgICAgICAgICBuZXh0IDogInJ1bGVzZXRfY29tbWVudCIKKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgIHJl
Z2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAg
ICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgorICAgICAgICB9
LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0s
CisgICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8Y218ZGVnfGVtfGV4fGZy
fGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18c3x0dXJufHZofHZtfHZ3
fCUpIgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmlj
IiwKKyAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKKyAgICAgICAgfSwgeworICAgICAgICAgICAg
dG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsICAvLyBoZXg2IGNvbG9yCisgICAgICAgICAgICBy
ZWdleCA6ICIjW2EtZjAtOV17Nn0iCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDog
ImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgzIGNvbG9yCisgICAgICAgICAgICByZWdleCA6ICIj
W2EtZjAtOV17M30iCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVh
dGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWVsZW1lbnQuY3NzIl0s
CisgICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5h
bWUucHNldWRvLWNsYXNzLmNzcyJdLAorICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2Vz
CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKKyAgICAg
ICAgICAgIHJlZ2V4IDogIlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIgorICAgICAgICB9
CisgICAgICBdOworCisgICAgdmFyIHJ1bGVzZXQgPSBsYW5nLmNvcHlBcnJheShiYXNlX3J1bGVz
ZXQpOworICAgIHJ1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJl
biIsCisgICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgInN0YXJ0IgorICAg
IH0pOworCisgICAgdmFyIG1lZGlhX3J1bGVzZXQgPSBsYW5nLmNvcHlBcnJheSggYmFzZV9ydWxl
c2V0ICk7CisgICAgbWVkaWFfcnVsZXNldC51bnNoaWZ0KHsKKyAgICAgICAgdG9rZW4gOiAicGFy
ZW4ucnBhcmVuIiwKKyAgICAgICAgcmVnZXggOiAiXFx9IiwKKyAgICAgICAgbmV4dDogICAibWVk
aWEiCisgICAgfSk7CisKKyAgICB2YXIgYmFzZV9jb21tZW50ID0gW3sKKyAgICAgICAgICB0b2tl
biA6ICJjb21tZW50IiwgLy8gY29tbWVudCBzcGFubmluZyB3aG9sZSBsaW5lCisgICAgICAgICAg
cmVnZXggOiAiLisiCisgICAgfV07CisKKyAgICB2YXIgY29tbWVudCA9IGxhbmcuY29weUFycmF5
KGJhc2VfY29tbWVudCk7CisgICAgY29tbWVudC51bnNoaWZ0KHsKKyAgICAgICAgICB0b2tlbiA6
ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CisgICAgICAgICAgcmVnZXggOiAiLio/XFwq
XFwvIiwKKyAgICAgICAgICBuZXh0IDogInN0YXJ0IgorICAgIH0pOworCisgICAgdmFyIG1lZGlh
X2NvbW1lbnQgPSBsYW5nLmNvcHlBcnJheShiYXNlX2NvbW1lbnQpOworICAgIG1lZGlhX2NvbW1l
bnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29t
bWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJt
ZWRpYSIKKyAgICB9KTsKKworICAgIHZhciBydWxlc2V0X2NvbW1lbnQgPSBsYW5nLmNvcHlBcnJh
eShiYXNlX2NvbW1lbnQpOworICAgIHJ1bGVzZXRfY29tbWVudC51bnNoaWZ0KHsKKyAgICAgICAg
ICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CisgICAgICAgICAgcmVnZXgg
OiAiLio/XFwqXFwvIiwKKyAgICAgICAgICBuZXh0IDogInJ1bGVzZXQiCisgICAgfSk7CisKKyAg
ICB0aGlzLiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFt7CisgICAgICAgICAgICB0b2tl
biA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6
ICJcXC9cXCoiLAorICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgorICAgICAgICB9LCB7Cisg
ICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICByZWdleDogIlxc
eyIsCisgICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIHRva2VuOiAic3RyaW5nIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiQC4qP3siLAorICAgICAg
ICAgICAgbmV4dDogICJtZWRpYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogImtl
eXdvcmQiLAorICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCisgICAgICAgIH0sewor
ICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCisgICAgICAgICAgICByZWdleDogIlxcLlth
LXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAg
IHRva2VuOiAiY29uc3RhbnQiLAorICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKKyAg
ICAgICAgfV0sCisKKyAgICAgICAgIm1lZGlhIiA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAi
Y29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwv
XFwqIiwKKyAgICAgICAgICAgIG5leHQgOiAibWVkaWFfY29tbWVudCIKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJc
XHsiLAorICAgICAgICAgICAgbmV4dDogICJtZWRpYV9ydWxlc2V0IgorICAgICAgICB9LHsKKyAg
ICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKKyAg
ICAgICAgICAgIG5leHQ6ICAic3RhcnQiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46
ICJrZXl3b3JkIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9
LHsKKyAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJc
XC5bYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIs
CisgICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAg
ICAgICB0b2tlbjogImNvbnN0YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsi
CisgICAgICAgIH1dLAorCisgICAgICAgICJjb21tZW50IiA6IGNvbW1lbnQsCisKKyAgICAgICAg
InJ1bGVzZXQiIDogcnVsZXNldCwKKyAgICAgICAgInJ1bGVzZXRfY29tbWVudCIgOiBydWxlc2V0
X2NvbW1lbnQsCisKKyAgICAgICAgIm1lZGlhX3J1bGVzZXQiIDogbWVkaWFfcnVsZXNldCwKKyAg
ICAgICAgIm1lZGlhX2NvbW1lbnQiIDogbWVkaWFfY29tbWVudAorICAgIH07Cit9OworCitvb3Au
aW5oZXJpdHMoQ3NzSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK2V4cG9y
dHMuQ3NzSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKKworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwor
Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OworCisoZnVuY3Rpb24o
KSB7CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7Cisg
ICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CisgICAgfTsKKworICAg
IHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgeworICAgICAgICB2YXIgbGlu
ZSA9IGRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14o
XHMqXH0pLyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CisKKyAgICAgICAgdmFy
IGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKKyAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRv
Yy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKKworICAg
ICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJu
IDA7CisKKyAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShv
cGVuQnJhY2VQb3Mucm93KSk7CisgICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAs
IHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOworICAgIH07CisKKyAgICB0aGlzLiRnZXRJbmRlbnQg
PSBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMr
KS8pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAiIjsKKyAgICB9OworCit9KS5jYWxsKE1hdGNo
aW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRl
bnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9i
ZWhhdmlvdXIvY3NzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGli
L29vcCcsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScs
ICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCZWhhdmlv
dXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgQ3N0eWxlQmVoYXZp
b3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVy
YXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKKwor
dmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKworICAgIHRoaXMuaW5oZXJpdChDc3R5
bGVCZWhhdmlvdXIpOworCisgICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYg
KHRleHQgPT09ICc6JykgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJz
b3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0
b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CisgICAgICAgICAgICB2YXIg
dG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIGlmICh0b2tl
biAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9
IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAg
ICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJz
b3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzonKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
bGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikubWF0Y2goL15ccyo7LykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJzo7JywK
KyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOworCisgICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRl
LCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5p
c011bHRpTGluZSgpICYmIHNlbGVjdGVkID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFy
IHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5j
b2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgeworICAgICAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJh
bmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgi
c2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT09ICc7JykgeworICAgICAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgeworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCisgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9KTsKKworfQorb29wLmluaGVyaXRzKENzc0JlaGF2aW91ciwg
Q3N0eWxlQmVoYXZpb3VyKTsKKworZXhwb3J0cy5Dc3NCZWhhdmlvdXIgPSBDc3NCZWhhdmlvdXI7
Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZp
b3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xp
Yi9vb3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlv
dXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIiku
VG9rZW5JdGVyYXRvcjsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKKwor
dmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CisgICAgWyJ0ZXh0IiwgInBhcmVuLnJwYXJlbiIs
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwordmFyIFNBRkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMg
PQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAi
Y29tbWVudCJdOworCisKK3ZhciBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgYXV0b0lu
c2VydGVkUm93ID0gLTE7Cit2YXIgYXV0b0luc2VydGVkTGluZUVuZCA9ICIiOwordmFyIG1heWJl
SW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgbWF5YmVJbnNlcnRlZFJvdyA9IC0xOwordmFyIG1h
eWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkTGluZUVuZCA9ICIi
OworCit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworICAgIAorICAgIENzdHls
ZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24pIHsK
KyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAg
ICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBj
dXJzb3IuY29sdW1uKTsKKyAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRv
ci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpIHsK
KyAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBj
dXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAoIXRoaXMuJG1h
dGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVf
SU5TRVJUX0lOX1RPS0VOUykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgIHJldHVybiBpdGVy
YXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fAorICAgICAgICAgICAg
dGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQi
LCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJl
aGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0b2tlbiwgdHlwZXMpIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tlbikgPiAtMTsKKyAgICB9
OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0ID0gZnVuY3Rpb24o
ZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3Iu
Z2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRM
aW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5n
KGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVuZFswXSkpCisgICAgICAgICAgICBhdXRv
SW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIGF1dG9JbnNlcnRlZFJvdyA9IGN1cnNvci5y
b3c7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBicmFja2V0ICsgbGluZS5zdWJzdHIo
Y3Vyc29yLmNvbHVtbik7CisgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNrZXRzKys7CisgICAgfTsK
KyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQgPSBmdW5jdGlvbihl
ZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5n
ZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExp
bmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhpcy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5n
KGN1cnNvciwgbGluZSkpCisgICAgICAgICAgICBtYXliZUluc2VydGVkQnJhY2tldHMgPSAwOwor
ICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKKyAgICAgICAgbWF5YmVJbnNl
cnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pICsgYnJhY2tldDsK
KyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1u
KTsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBD
c3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oY3Vyc29yLCBs
aW5lLCBicmFja2V0KSB7CisgICAgICAgIHJldHVybiBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA+IDAg
JiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1dG9JbnNlcnRlZFJvdyAmJgorICAgICAg
ICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGluZUVuZFswXSAmJgorICAgICAgICAgICAg
bGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1dG9JbnNlcnRlZExpbmVFbmQ7CisgICAg
fTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1
bmN0aW9uKGN1cnNvciwgbGluZSkgeworICAgICAgICByZXR1cm4gbWF5YmVJbnNlcnRlZEJyYWNr
ZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gbWF5YmVJbnNlcnRlZFJvdyAm
JgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IG1heWJlSW5zZXJ0
ZWRMaW5lRW5kICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSA9
PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZp
b3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYXV0b0lu
c2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3RyKDEpOworICAgICAgICBh
dXRvSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3Vy
LmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbWF5YmVJ
bnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IC0xOworICAg
IH07CisKKyAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9
IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICh0ZXh0ID09ICd7JykgeworICAg
ICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAg
ICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlv
bik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAieyIg
JiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snICsgc2VsZWN0ZWQgKyAnfScs
CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9u
KGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoL1tcXVx9XCldLy50ZXN0
KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIn0iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7fScsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChlZGl0b3IsIHNlc3Npb24sICJ7Iik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAneycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgeworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9
IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNo
aW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2NvbHVtbjogY3Vyc29yLmNv
bHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGlu
ZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNv
ciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBv
cEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiXG4iIHx8IHRl
eHQgPT0gIlxyXG4iKSB7CisgICAgICAgICAgICB2YXIgY2xvc2luZyA9ICIiOworICAgICAgICAg
ICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGlu
ZSkpIHsKKyAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoIn0iLCBt
YXliZUluc2VydGVkQnJhY2tldHMpOworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5j
bGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVt
biArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScgfHwgY2xvc2luZyAhPT0g
IiIpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gc2Vzc2lvbi5maW5kTWF0
Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbn0sICd9
Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MpCisgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLmdl
dE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0cmluZygwLCBjdXJzb3IuY29sdW1uKSwg
c2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgdmFyIG5leHRfaW5kZW50
ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVu
dCArIGNsb3NpbmcsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5s
ZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImJyYWNlcyIsICJkZWxldGlv
biIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7Cisg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7Cisg
ICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAneycpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cp
OworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5j
b2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIg
PT0gJ30nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAg
ICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9
PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0
b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcgKyBzZWxlY3RlZCArICcpJywKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9y
LCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRv
SW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAorICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5k
b2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5l
LnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAg
ICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9
IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4g
KyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09
IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRv
SW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgicGFyZW5z
IiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwg
cmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdl
KHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09
ICcoJykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdl
LnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmco
cmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAg
ICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5j
b2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJpbnNlcnRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAg
ICAgIGlmICh0ZXh0ID09ICdbJykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRv
ci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lv
bi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQg
IT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbJyArIHNlbGVjdGVk
ICsgJ10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUlu
c2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZp
b3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiXSIpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbXScsCisgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykgeworICAgICAgICAgICAgdmFy
IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGxp
bmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAgICAgdmFyIHJp
Z2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAx
KTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCddJywge2NvbHVtbjog
Y3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAgICAgIGlm
IChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9z
aW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVo
YXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRo
aXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24u
ZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUo
KSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5k
b2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9
IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVt
biArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnXScpIHsKKyAgICAgICAgICAg
ICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5n
X2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwg
c2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIp
IHsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CisgICAgICAgICAgICB2YXIgc2VsZWN0
aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0
ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGlm
IChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBzZWxlY3RlZCAhPSAnIicg
JiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1
b3RlLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9
IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHZhciBsaW5lID0g
c2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgbGVm
dENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1cnNvci5jb2x1bW4pOwor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIg
dG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOworICAgICAgICAgICAgICAgIHZhciBxdW90ZXBv
cyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBvcGVuIHF1b3RlLgorCisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbnMubGVuZ3RoOyB4KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbeF07CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAg
cXVvdGVwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdW90ZXBvcyA8
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IHRva2VuLnZhbHVlLmluZGV4
T2YocXVvdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNlbGVjdGlvbi5zdGFydC5jb2x1bW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNbeF0udmFsdWUubGVuZ3RoOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IChxdW90ZXBvcyA8IDAg
JiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0b2tlbi50eXBlICE9PSAic3RyaW5nIiB8
fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRva2VuLnZhbHVlLmxlbmd0aCtjb2wtMSkg
JiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUpID09PSB0b2tlbi52YWx1ZS5sZW5ndGgt
MSkpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNzdHlsZUJlaGF2aW91ci5pc1NhbmVJ
bnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQ6IHF1b3RlICsgcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNv
bHVtbiArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
WzEsIDFdCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3Rh
dGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0
ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdl
LmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxlY3RlZCA9PSAiJyIpKSB7
CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQu
cm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5z
dGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAgIGlm
IChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29s
dW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSk7CisKK307CisKK29vcC5pbmhlcml0cyhDc3R5bGVCZWhhdmlvdXIsIEJl
aGF2aW91cik7CisKK2V4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0eWxlQmVoYXZpb3VyOwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2UnLCAnYWNlL21v
ZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBSYW5nZSA9
IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWly
ZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xk
TW9kZSA9IGZ1bmN0aW9uKCkge307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9k
ZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhc
e3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87CisgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9
IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLzsKKworICAgIHRoaXMuZ2V0Rm9sZFdp
ZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKKyAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGlu
ZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgewor
ICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKKworICAgICAgICAgICAgaWYgKG1hdGNo
WzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vz
c2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdl
dENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJtYXJrYmVnaW5lbmQiKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5n
U3RvcE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBt
YXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKG1hdGNoWzFd
KQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lv
biwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENv
bW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxs
KEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ODNhYWZjMDdl
ZDliMjgxODQxNjY2NGQwODUzMzlkMDU2ZWU5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2h0bWwuanMKQEAgLTAsMCArMSwx
ODg2IEBACisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4
Lm9yZyBCLlYuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKKyAqICAg
ICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiog
Ki8KKworYWNlLmRlZmluZSgnYWNlL21vZGUvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvbW9kZS9qYXZh
c2NyaXB0JywgJ2FjZS9tb2RlL2NzcycsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2h0bWxf
aGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9odG1sJywgJ2FjZS9tb2RlL2Zv
bGRpbmcvaHRtbCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVxdWlyZSgi
Li90ZXh0IikuTW9kZTsKK3ZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlw
dCIpLk1vZGU7Cit2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKK3ZhciBUb2tl
bml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Cit2YXIgSHRtbEhpZ2hs
aWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGln
aHRSdWxlczsKK3ZhciBIdG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvaHRtbCIp
Lkh0bWxCZWhhdmlvdXI7Cit2YXIgSHRtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2h0
bWwiKS5Gb2xkTW9kZTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgaGlnaGxp
Z2h0ZXIgPSBuZXcgSHRtbEhpZ2hsaWdodFJ1bGVzKCk7CisgICAgdGhpcy4kdG9rZW5pemVyID0g
bmV3IFRva2VuaXplcihoaWdobGlnaHRlci5nZXRSdWxlcygpKTsKKyAgICB0aGlzLiRiZWhhdmlv
dXIgPSBuZXcgSHRtbEJlaGF2aW91cigpOworICAgIAorICAgIHRoaXMuJGVtYmVkcyA9IGhpZ2hs
aWdodGVyLmdldEVtYmVkcygpOworICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CisgICAg
ICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKKyAgICAgICAgImNzcy0iOiBDc3NNb2RlCisgICAg
fSk7CisgICAgCisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgSHRtbEZvbGRNb2RlKCk7Cit9
Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgeworCisgICAg
CisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFy
dFJvdywgZW5kUm93KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH07CisKKyAgICB0aGlzLmdl
dE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgeworICAgICAgICBy
ZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0
ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKKworfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9
IE1vZGU7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvamF2YXNjcmlwdCcsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcs
ICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywg
J2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCAnYWNlL3JhbmdlJywgJ2FjZS93b3Jr
ZXIvd29ya2VyX2NsaWVudCcsICdhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS9tb2Rl
L2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
CisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1
aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXpl
ciIpLlRva2VuaXplcjsKK3ZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIu
L2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwor
dmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRk
ZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5n
ZSIpLlJhbmdlOwordmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJf
Y2xpZW50IikuV29ya2VyQ2xpZW50OwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4v
YmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKK3ZhciBDU3R5bGVGb2xkTW9kZSA9
IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIE1vZGUgPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBKYXZhU2Ny
aXB0SGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpKTsKKyAgICB0aGlzLiRvdXRkZW50ID0gbmV3
IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHls
ZUJlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2Rl
KCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgewor
CisKKyAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0
YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAgdmFyIG91dGRlbnQgPSB0cnVlOworICAgICAgICB2
YXIgcmUgPSAvXihccyopXC9cLy87CisKKyAgICAgICAgZm9yICh2YXIgaT1zdGFydFJvdzsgaTw9
IGVuZFJvdzsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXJlLnRlc3QoZG9jLmdldExpbmUoaSkp
KSB7CisgICAgICAgICAgICAgICAgb3V0ZGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG91dGRlbnQpIHsK
KyAgICAgICAgICAgIHZhciBkZWxldGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBlbmRSb3c7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKGkpOworICAgICAg
ICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChyZSk7CisgICAgICAgICAgICAgICAgZGVsZXRl
UmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93
ID0gaTsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbVswXS5sZW5n
dGg7CisgICAgICAgICAgICAgICAgZG9jLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIG1bMV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9jLmlu
ZGVudFJvd3Moc3RhcnRSb3csIGVuZFJvdywgIi8vIik7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsK
KyAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKworICAgICAgICB2
YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0
YXRlKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOworICAgICAg
ICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOworCisgICAgICAgIGlmICh0b2tl
bnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7
CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAg
ICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtc
KFxbXSlccyokLyk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBp
bmRlbnQgKz0gdGFiOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09
ICJkb2Mtc3RhcnQiKSB7CisgICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBz
dGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwv
PylcKi8pOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICB9OworCisgICAgdGhpcy5j
aGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKKyAgICB9OworCisg
ICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgeworICAgICAg
ICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKKyAgICB9OworICAgIAorICAg
IHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29y
a2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3Jr
ZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOworICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVu
dChzZXNzaW9uLmdldERvY3VtZW50KCkpOworCisgICAgICAgIHdvcmtlci5vbigianNsaW50Iiwg
ZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhy
ZXN1bHRzLmRhdGEpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHdvcmtlci5vbigi
dGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3Rh
dGlvbnMoKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gd29ya2VyOwor
ICAgIH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2Rl
OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVz
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
bW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvdGV4dF9oaWdobGln
aHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVs
ZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRI
aWdobGlnaHRSdWxlczsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRf
aGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOworCit2YXIgSmF2YVNjcmlwdEhp
Z2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlz
LmNyZWF0ZUtleXdvcmRNYXBwZXIoeworICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgorICAg
ICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2Jq
ZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKKyAgICAgICAgICAg
ICJOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgLy8gRTRYCisgICAgICAgICAgICAiQXJyYXlCdWZmZXJ8Rmxv
YXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIg
ICArCisgICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50
OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAiRXJyb3J8
RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRl
cmF0aW9ufCIgICArIC8vIEVycm9ycworICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJv
cnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor
ICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29k
ZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rp
b25zCisgICAgICAgICAgICAiaXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHwiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAiSlNPTnxN
YXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIC8vIE90aGVyCisgICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90
eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8v
IFBzZXVkbworICAgICAgICAia2V5d29yZCI6CisgICAgICAgICAgICAiY29uc3R8eWllbGR8aW1w
b3J0fGdldHxzZXR8IiArCisgICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxk
ZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKworICAgICAgICAg
ICAgImlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxs
ZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8IiArCisgICAgICAgICAgICAiX19wYXJlbnRfX3xf
X2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKworICAgICAgICAgICAg
ImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1Ymxp
Y3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKKyAgICAgICAgInN0b3JhZ2Uu
dHlwZSI6CisgICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCisgICAgICAgICJj
b25zdGFudC5sYW5ndWFnZSI6CisgICAgICAgICAgICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZp
bmVkIiwKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgorICAgICAgICAgICAgImFsZXJ0IiwK
KyAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iOiAidHJ1ZXxmYWxzZSIKKyAgICB9
LCAiaWRlbnRpZmllciIpOworICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5h
bGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7Cisg
ICAgdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxc
ZFxcJF9cdTAwYTEtXHVmZmZmXSpcXGIiOworCisgICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86
eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKKyAgICAgICAgInVbMC05YS1mQS1GXXs0fXwiICsg
Ly8gdW5pY29kZQorICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKKyAgICAgICAg
IjNbMC02XVswLTddP3wiICsgLy8gb2N0CisgICAgICAgICIzN1swLTddP3wiICsgLy8gb2N0Cisg
ICAgICAgICJbNC03XVswLTddP3wiICsgLy9vY3QKKyAgICAgICAgIi4pIjsKKworICAgIHRoaXMu
JHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogWworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogImNvbW1lbnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8u
KiQvCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVz
LmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAg
ICAgIHJlZ2V4IDogL1wvXCovLAorICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAg
ICAgICAgICAgIHJlZ2V4IDogIicoPz0uKSIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0
cmluZyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmci
LAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCisgICAgICAgICAgICAgICAgbmV4
dCAgOiAicXFzdHJpbmciCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLzBb
eFhdWzAtOWEtZkEtRl0rXGIvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9r
ZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CisgICAgICAgICAgICAgICAgcmVnZXgg
OiAvWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/XGQrKT8pP1xiLworICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAi
c3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24i
LAorICAgICAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5h
bWUuZnVuY3Rpb24iLCAidGV4dCIsImtleXdvcmQub3BlcmF0b3IiCisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLiko
cHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKKyAgICAgICAg
ICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBl
IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQi
LAorICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3Jh
Z2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRl
bnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAg
ICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5u
YW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3Jh
Z2UudHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmll
clJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAg
ICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIs
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwK
KyAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCisgICAgICAg
ICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlv
biIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmll
clJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKykoXFx3KykoXFxzKikoXFwoKSIs
CisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0
b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFy
ZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAi
KGZ1bmN0aW9uKShcXHMrKSgiICsgaWRlbnRpZmllclJlICsgIikoXFxzKikoXFwoKSIsCisgICAg
ICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5u
YW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAg
ICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4i
CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50
aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAg
ICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0
ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxz
KikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKKyAgICAgICAg
ICAgICAgICBuZXh0IDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rp
b24iXSwKKyAgICAgICAgICAgICAgICByZWdleCA6IC8oXC4pKHMoPzpoKD86aWZ0fG93KD86TW9k
KD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5l
cyk/fFl8VG8pP3x0KD86b3B6enp6fHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4
dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJl
KD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxT
ZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8
Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29u
ZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxh
dmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIo
PzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIo
PzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hl
ZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2Up
fFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/
Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxk
KD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRh
aW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86
byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8p
fHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2
YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8
VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86
bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxv
KD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlu
a3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxv
Ynxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxl
KD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2Uo
PzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86
aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVh
cnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlz
ZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFy
fEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxv
dyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgp
KXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJh
dG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZG9tIl0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAv
KFwuKShzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18
QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1l
ZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRB
U2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRl
KSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3Blbnxk
ZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdy
aXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpD
aGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxn
ZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZSl8QnlJZCl8QXR0cmli
dXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLworICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmNvbnN0YW50
Il0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86eXN0ZW1MYW5ndWFnZXxjcig/
OmlwdHN8b2xsYmFyc3xlZW4oPzpYfFl8VG9wfExlZnQpKXx0KD86eWxlKD86U2hlZXRzKT98YXR1
cyg/OlRleHR8YmFyKT8pfGlibGluZyg/OkJlbG93fEFib3ZlKXxvdXJjZXx1ZmZpeGVzfGUoPzpj
dXJpdHkoPzpQb2xpY3kpP3xsKD86ZWN0aW9ufGYpKSl8aCg/OmlzdG9yeXxvc3QoPzpuYW1lKT98
YXMoPzpofEZvY3VzKSl8eXxYKD86TUxEb2N1bWVudHxTTERvY3VtZW50KXxuKD86ZXh0fGFtZSg/
OnNwYWNlKD86c3xVUkkpfFByb3ApKXxNKD86SU5fVkFMVUV8QVhfVkFMVUUpfGMoPzpoYXJhY3Rl
clNldHxvKD86big/OnN0cnVjdG9yfHRyb2xsZXJzKXxva2llRW5hYmxlZHxsb3JEZXB0aHxtcCg/
Om9uZW50c3xsZXRlKSl8dXJyZW50fHB1Q2xhc3N8bCg/OmkoPzpwKD86Ym9hcmREYXRhKT98ZW50
SW5mb3JtYXRpb24pfG9zZWR8YXNzZXMpfGFsbGUoPzplfHIpfHJ5cHRvKXx0KD86byg/Om9sYmFy
fHApfGV4dCg/OlRyYW5zZm9ybXxJbmRlbnR8RGVjb3JhdGlvbnxBbGlnbil8YWdzKXxTUVJUKD86
MV8yfDIpfGkoPzpuKD86bmVyKD86SGVpZ2h0fFdpZHRoKXxwdXQpfGRzfGdub3JlQ2FzZSl8eklu
ZGV4fG8oPzpzY3B1fG4oPzpyZWFkeXN0YXRlY2hhbmdlfExpbmUpfHV0ZXIoPzpIZWlnaHR8V2lk
dGgpfHAoPzpzUHJvZmlsZXxlbmVyKXxmZnNjcmVlbkJ1ZmZlcmluZyl8TkVHQVRJVkVfSU5GSU5J
VFl8ZCg/OmkoPzpzcGxheXxhbG9nKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0fEFyZ3VtZW50cyl8
cmVjdG9yaWVzKXxlKD86c2NyaXB0aW9ufGZhdWx0KD86U3RhdHVzfENoKD86ZWNrZWR8YXJzZXQp
fFZpZXcpKSl8dSg/OnNlcig/OlByb2ZpbGV8TGFuZ3VhZ2V8QWdlbnQpfG4oPzppcXVlSUR8ZGVm
aW5lZCl8cGRhdGVJbnRlcnZhbCl8X2NvbnRlbnR8cCg/Oml4ZWxEZXB0aHxvcnR8ZXJzb25hbGJh
cnxrY3MxMXxsKD86dWdpbnN8YXRmb3JtKXxhKD86dGhuYW1lfGRkaW5nKD86UmlnaHR8Qm90dG9t
fFRvcHxMZWZ0KXxyZW50KD86V2luZG93fExheWVyKT98Z2UoPzpYKD86T2Zmc2V0KT98WSg/Ok9m
ZnNldCk/KSl8cig/Om8oPzp0byg/OmNvbHx0eXBlKXxkdWN0KD86U3ViKT98bXB0ZXIpfGUoPzp2
aW91c3xmaXgpKSl8ZSg/Om4oPzpjb2Rpbmd8YWJsZWRQbHVnaW4pfHgoPzp0ZXJuYWx8cGFuZG8p
fG1iZWRzKXx2KD86aXNpYmlsaXR5fGVuZG9yKD86U3ViKT98TGlua2NvbG9yKXxVUkxVbmVuY29k
ZWR8UCg/Okl8T1NJVElWRV9JTkZJTklUWSl8Zig/OmlsZW5hbWV8byg/Om50KD86U2l6ZXxGYW1p
bHl8V2VpZ2h0KXxybU5hbWUpfHJhbWUoPzpzfEVsZW1lbnQpfGdDb2xvcil8RXx3aGl0ZVNwYWNl
fGwoPzppKD86c3RTdHlsZVR5cGV8big/OmVIZWlnaHR8a0NvbG9yKSl8byg/OmNhKD86dGlvbig/
OmJhcik/fGxOYW1lKXx3c3JjKXxlKD86bmd0aHxmdCg/OkNvbnRleHQpPyl8YSg/OnN0KD86TSg/
Om9kaWZpZWR8YXRjaCl8SW5kZXh8UGFyZW4pfHllcig/OnN8WCl8bmd1YWdlKSl8YSg/OnBwKD86
TWlub3JWZXJzaW9ufE5hbWV8Q28oPzpkZU5hbWV8cmUpfFZlcnNpb24pfHZhaWwoPzpIZWlnaHR8
VG9wfFdpZHRofExlZnQpfGxsfHIoPzppdHl8Z3VtZW50cyl8TGlua2NvbG9yfGJvdmUpfHIoPzpp
Z2h0KD86Q29udGV4dCk/fGUoPzpzcG9uc2UoPzpYTUx8VGV4dCl8YWR5U3RhdGUpKXxnbG9iYWx8
eHxtKD86aW1lVHlwZXN8dWx0aWxpbmV8ZW51YmFyfGFyZ2luKD86UmlnaHR8Qm90dG9tfFRvcHxM
ZWZ0KSl8TCg/Ok4oPzoxMHwyKXxPRyg/OjEwRXwyRSkpfGIoPzpvKD86dHRvbXxyZGVyKD86V2lk
dGh8UmlnaHRXaWR0aHxCb3R0b21XaWR0aHxTdHlsZXxDb2xvcnxUb3BXaWR0aHxMZWZ0V2lkdGgp
KXx1ZmZlckRlcHRofGVsb3d8YWNrZ3JvdW5kKD86Q29sb3J8SW1hZ2UpKSlcYi8KKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0
dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogLyhjb25zb2xlKShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRp
bWVFbmR8YXNzZXJ0KVxiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDoga2V5d29yZE1hcHBlciwKKyAgICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXJSZQor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0
b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8WyEkJSYqK1wtfl18PT09fD09
fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcfFx8fFw/XDp8XCo9fCU9
fFwrPXxcLT18Jj18XF49LywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2Vk
IgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9u
Lm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cP3xcOnxcLHxcO3xcLi8sCisg
ICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgICAg
IHJlZ2V4IDogL1tcWyh7XS8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dl
ZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFy
ZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcXSl9XS8KKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKKyAgICAgICAgICAg
ICAgICByZWdleCA6IC9cLz0/LywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxv
d2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIs
CisgICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCisgICAgICAgICAgICB9CisgICAgICAg
IF0sCisgICAgICAgICJyZWdleF9hbGxvd2VkIjogWworICAgICAgICAgICAgRG9jQ29tbWVudEhp
Z2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAor
ICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCisgICAgICAgICAgICAgICAgbmV4dCA6
ICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiAiY29tbWVudCIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiok
IgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4
cCIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAorICAgICAgICAgICAgICAgIG5leHQ6
ICJyZWdleCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4
dCIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKKyAgICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIs
CisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBd
LAorICAgICAgICAicmVnZXgiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9r
ZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJc
XFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiAiL1xcdyoiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIsCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZCIsCisgICAgICAg
ICAgICAgICAgcmVnZXg6IC9ce1xkKyw/KD86XGQrKT99WysqXXxbKyokXj9dWysqXXxbJF5dWz9d
fFw/ezMsfS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25z
dGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFd
fFwpfHtcZCssPyg/OlxkKyk/fXx7LFxkK318WysqXVw/fFsoKSReKyo/XS8KKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5kZWxpbWl0
ZXIiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4OiAvXFtcXj8vLAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFy
YWN0ZXJfY2xhc3MiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAi
ZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4
dDogInN0YXJ0IgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tl
bjogInN0cmluZy5yZWdleHAiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJy
ZWdleF9jaGFyYWN0ZXJfY2xhc3MiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6
ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIs
CisgICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVn
ZXgiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQu
bGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDogIi0iCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAg
cmVnZXg6ICIkIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNo
dGVyY2xhc3MiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJmdW5jdGlvbl9h
cmd1bWVudHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJp
YWJsZS5wYXJhbWV0ZXIiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJh
dG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIiwKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAg
ICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKKyAgICAgICAgICAgICAg
ICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJjb21t
ZW50X3JlZ2V4X2FsbG93ZWQiIDogWworICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCBy
ZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInJlZ2V4X2FsbG93ZWQifSwKKyAgICAgICAgICAgIHtk
ZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50IiA6
IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4
dCA6ICJzdGFydCJ9LAorICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50In0KKyAg
ICAgICAgXSwKKyAgICAgICAgInFxc3RyaW5nIiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4IDogZXNjYXBlZFJlCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
dG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCisgICAg
ICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciLAorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAnInwk
JywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAg
ICAgICBdLAorICAgICAgICAicXN0cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAg
ICByZWdleCA6IGVzY2FwZWRSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAg
ICAgICAgICAgIG5leHQgIDogInFzdHJpbmciLAorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwK
KyAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAg
ICBdCisgICAgfTsKKworICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVs
ZXMsICJkb2MtIiwKKyAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVs
ZSgic3RhcnQiKSBdKTsKK307CisKK29vcC5pbmhlcml0cyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVs
ZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK2V4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1
bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9t
b2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMn
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJl
cXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIu
L3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOworCit2YXIgRG9jQ29t
bWVudEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRydWxlcyA9IHsK
KyAgICAgICAgInN0YXJ0IiA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2Mu
dGFnIiwKKyAgICAgICAgICAgIHJlZ2V4IDogIkBbXFx3XFxkX10rIiAvLyBUT0RPOiBmaXggZW1h
aWwgYWRkcmVzc2VzCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQu
ZG9jLnRhZyIsCisgICAgICAgICAgICByZWdleCA6ICJcXGJUT0RPXFxiIgorICAgICAgICB9LCB7
CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiCisgICAgICAgIH1dCisg
ICAgfTsKK307CisKK29vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRI
aWdobGlnaHRSdWxlcyk7CisKK0RvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUg
PSBmdW5jdGlvbihzdGFydCkgeworICAgIHJldHVybiB7CisgICAgICAgIHRva2VuIDogImNvbW1l
bnQuZG9jIiwgLy8gZG9jIGNvbW1lbnQKKyAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIs
CisgICAgICAgIG5leHQgIDogc3RhcnQKKyAgICB9OworfTsKKworRG9jQ29tbWVudEhpZ2hsaWdo
dFJ1bGVzLmdldEVuZFJ1bGUgPSBmdW5jdGlvbiAoc3RhcnQpIHsKKyAgICByZXR1cm4geworICAg
ICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICBy
ZWdleCA6ICJcXCpcXC8iLAorICAgICAgICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKKwor
ZXhwb3J0cy5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVs
ZXM7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgi
Li4vcmFuZ2UiKS5SYW5nZTsKKwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24o
KSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlv
bihsaW5lLCBpbnB1dCkgeworICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5w
dXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cp
IHsKKyAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0
Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVy
biAwOworCisgICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZh
ciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVt
bjogY29sdW1ufSk7CisKKyAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9z
LnJvdyA9PSByb3cpIHJldHVybiAwOworCisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJ
bmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFj
ZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisg
ICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2gg
PSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAg
fTsKKworfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRz
Lk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNl
LmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS90
b2tlbl9pdGVyYXRvcicsICdhY2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3Zh
ciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgVG9r
ZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRv
cjsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKKwordmFyIFNBRkVfSU5T
RVJUX0lOX1RPS0VOUyA9CisgICAgWyJ0ZXh0IiwgInBhcmVuLnJwYXJlbiIsICJwdW5jdHVhdGlv
bi5vcGVyYXRvciJdOwordmFyIFNBRkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMgPQorICAgIFsidGV4
dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiY29tbWVudCJdOwor
CisKK3ZhciBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgYXV0b0luc2VydGVkUm93ID0g
LTE7Cit2YXIgYXV0b0luc2VydGVkTGluZUVuZCA9ICIiOwordmFyIG1heWJlSW5zZXJ0ZWRCcmFj
a2V0cyA9IDA7Cit2YXIgbWF5YmVJbnNlcnRlZFJvdyA9IC0xOwordmFyIG1heWJlSW5zZXJ0ZWRM
aW5lU3RhcnQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkTGluZUVuZCA9ICIiOworCit2YXIgQ3N0
eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5p
c1NhbmVJbnNlcnRpb24gPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24pIHsKKyAgICAgICAgdmFy
IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgaXRlcmF0
b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1u
KTsKKyAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpIHsKKyAgICAgICAgICAg
IHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBj
dXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBl
KGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RP
S0VOUykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CisgICAgICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJy
ZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fAorICAgICAgICAgICAgdGhpcy4kbWF0Y2hU
b2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VS
VF9CRUZPUkVfVE9LRU5TKTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci4kbWF0
Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0b2tlbiwgdHlwZXMpIHsKKyAgICAgICAgcmV0dXJuIHR5
cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tlbikgPiAtMTsKKyAgICB9OworICAgIAorICAg
IENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNz
aW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICBpZiAoIXRoaXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGlu
ZSwgYXV0b0luc2VydGVkTGluZUVuZFswXSkpCisgICAgICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFj
a2V0cyA9IDA7CisgICAgICAgIGF1dG9JbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAg
IGF1dG9JbnNlcnRlZExpbmVFbmQgPSBicmFja2V0ICsgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVt
bik7CisgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNrZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBD
c3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Np
b24sIGJyYWNrZXQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3Np
dGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJv
dyk7CisgICAgICAgIGlmICghdGhpcy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGlu
ZSkpCisgICAgICAgICAgICBtYXliZUluc2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBtYXli
ZUluc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVTdGFy
dCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pICsgYnJhY2tldDsKKyAgICAgICAgbWF5
YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKTsKKyAgICAgICAg
bWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlv
dXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oY3Vyc29yLCBsaW5lLCBicmFja2V0
KSB7CisgICAgICAgIHJldHVybiBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAg
ICAgIGN1cnNvci5yb3cgPT09IGF1dG9JbnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgYnJhY2tl
dCA9PT0gYXV0b0luc2VydGVkTGluZUVuZFswXSAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIo
Y3Vyc29yLmNvbHVtbikgPT09IGF1dG9JbnNlcnRlZExpbmVFbmQ7CisgICAgfTsKKyAgICAKKyAg
ICBDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNv
ciwgbGluZSkgeworICAgICAgICByZXR1cm4gbWF5YmVJbnNlcnRlZEJyYWNrZXRzID4gMCAmJgor
ICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gbWF5YmVJbnNlcnRlZFJvdyAmJgorICAgICAgICAg
ICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IG1heWJlSW5zZXJ0ZWRMaW5lRW5kICYm
CisgICAgICAgICAgICBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSA9PSBtYXliZUluc2Vy
dGVkTGluZVN0YXJ0OworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9J
bnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYXV0b0luc2VydGVkTGluZUVu
ZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3RyKDEpOworICAgICAgICBhdXRvSW5zZXJ0ZWRC
cmFja2V0cy0tOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJ
bnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNr
ZXRzID0gMDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IC0xOworICAgIH07CisKKyAgICB0
aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRD
dXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUo
Y3Vyc29yLnJvdyk7CisgICAgICAgIGlmICh0ZXh0ID09ICd7JykgeworICAgICAgICAgICAgdmFy
IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFy
IHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAieyIgJiYgZWRpdG9yLmdl
dFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dDogJ3snICsgc2VsZWN0ZWQgKyAnfScsCisgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vz
c2lvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoL1tcXVx9XCldLy50ZXN0KGxpbmVbY3Vyc29y
LmNvbHVtbl0pKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRB
dXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIn0iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7fScsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91
ci5yZWNvcmRNYXliZUluc2VydChlZGl0b3IsIHNlc3Npb24sICJ7Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAneycsCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
ICh0ZXh0ID09ICd9JykgeworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChy
aWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lv
bi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJv
dzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAm
JiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRl
ZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBb
MSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4i
KSB7CisgICAgICAgICAgICB2YXIgY2xvc2luZyA9ICIiOworICAgICAgICAgICAgaWYgKENzdHls
ZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpIHsKKyAgICAg
ICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoIn0iLCBtYXliZUluc2VydGVk
QnJhY2tldHMpOworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5z
ZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFy
ID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAg
ICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScgfHwgY2xvc2luZyAhPT0gIiIpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0
KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbn0sICd9Jyk7CisgICAgICAg
ICAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKworICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLmdldE5leHRMaW5lSW5k
ZW50KHN0YXRlLCBsaW5lLnN1YnN0cmluZygwLCBjdXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRU
YWJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0
SW5kZW50KGxpbmUpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCArIGNsb3Npbmcs
CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGlu
ZGVudC5sZW5ndGhdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImJyYWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9u
IChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBz
ZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICgh
cmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAneycpIHsKKyAgICAgICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAg
ICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdl
LmVuZC5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7Cisg
ICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVy
biByYW5nZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF5YmVJbnNl
cnRlZEJyYWNrZXRzLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAg
IHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24s
IGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rp
b24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJl
aGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAnKCcgKyBzZWxlY3RlZCArICcpJywKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVs
c2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkg
eworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRv
ciwgc2Vzc2lvbiwgIikiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnKCknLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAx
XQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
dGV4dCA9PSAnKScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShj
dXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhj
dXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRD
aGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZp
bmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1
cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0
eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7
CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9z
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFd
CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImRlbGV0aW9u
IiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAg
ICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICcoJykgeworICAg
ICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7
CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQu
Y29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmln
aHRDaGFyID09ICcpJykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAo
c3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0
ID09ICdbJykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rp
b25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4
dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIGVk
aXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbJyArIHNlbGVjdGVkICsgJ10nLAorICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0
b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1
dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiXSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbXScsCisgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVk
aXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9u
LmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxp
bmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAg
ICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5n
ID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCddJywge2NvbHVtbjogY3Vyc29yLmNvbHVt
biArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZyAh
PT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwg
bGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1
dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFj
a2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Np
b24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3Rl
ZCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShy
YW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAg
ICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5l
bmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAi
aW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4
dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKKyAgICAgICAg
ICAgIHZhciBxdW90ZSA9IHRleHQ7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9y
LmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9u
LmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAh
PT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBzZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdl
dFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAorICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRD
dXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2Mu
Z2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5l
LnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vz
c2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICAgICAgdmFy
IGNvbCA9IDAsIHRva2VuOworICAgICAgICAgICAgICAgIHZhciBxdW90ZXBvcyA9IC0xOyAvLyBU
cmFjayB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBvcGVuIHF1b3RlLgorCisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbnMubGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSB0b2tlbnNbeF07CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tl
bi50eXBlID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSAt
MTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdW90ZXBvcyA8IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IHRva2VuLnZhbHVlLmluZGV4T2YocXVvdGUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgodG9rZW4udmFs
dWUubGVuZ3RoICsgY29sKSA+IHNlbGVjdGlvbi5zdGFydC5jb2x1bW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGNvbCArPSB0b2tlbnNbeF0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IChxdW90ZXBvcyA8IDAgJiYgdG9rZW4udHlw
ZSAhPT0gImNvbW1lbnQiICYmICh0b2tlbi50eXBlICE9PSAic3RyaW5nIiB8fCAoKHNlbGVjdGlv
bi5zdGFydC5jb2x1bW4gIT09IHRva2VuLnZhbHVlLmxlbmd0aCtjb2wtMSkgJiYgdG9rZW4udmFs
dWUubGFzdEluZGV4T2YocXVvdGUpID09PSB0b2tlbi52YWx1ZS5sZW5ndGgtMSkpKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIUNzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRp
dG9yLCBzZXNzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3Rl
ICsgcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLDFdCisgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0
b2tlbi50eXBlID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHRD
aGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6
ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFk
ZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwg
ZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9u
LmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5l
KCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxlY3RlZCA9PSAiJyIpKSB7CisgICAgICAgICAg
ICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAg
ICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4g
KyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIg
PT0gc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSk7CisKK307CisKK29vcC5pbmhlcml0cyhDc3R5bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7CisK
K2V4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0eWxlQmVoYXZpb3VyOworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2UnLCAnYWNlL21vZGUvZm9sZGluZy9m
b2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4u
Ly4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21v
ZGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0
aW9uKCkge307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5j
dGlvbigpIHsKKworICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhce3xcWylbXlx9XF1d
KiR8XlxzKihcL1wqKS87CisgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XSoo
XH18XF0pfF5bXHNcKl0qKFwqXC8pLzsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0g
ZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBz
ZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlz
LmZvbGRpbmdTdGFydE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAg
dmFyIGkgPSBtYXRjaC5pbmRleDsKKworICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hb
MV0sIHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xk
UmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChmb2xkU3R5bGUgIT09ICJtYXJrYmVnaW5lbmQiKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7
CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCAr
IG1hdGNoWzBdLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0s
IHJvdywgaSk7CisKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFu
Z2Uocm93LCBpLCAtMSk7CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnBy
b3RvdHlwZSk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3MnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAn
YWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2Rl
L21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2Fj
ZS9tb2RlL2JlaGF2aW91ci9jc3MnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4u
L2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2YXIg
VG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIENzc0hp
Z2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxp
Z2h0UnVsZXM7Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5n
X2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKK3ZhciBXb3JrZXJDbGllbnQg
PSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBD
c3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7Cit2
YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7
CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRv
a2VuaXplcihuZXcgQ3NzSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpLCAiaSIpOworICAgIHRo
aXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKKyAgICB0aGlzLiRiZWhh
dmlvdXIgPSBuZXcgQ3NzQmVoYXZpb3VyKCk7CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcg
Q1N0eWxlRm9sZE1vZGUoKTsKK307Citvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOworCiso
ZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOworCisgICAg
dGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAg
ICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICAgICAgdmFyIHRv
a2VucyA9IHRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7
CisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5
cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CisgICAgICAg
IGlmIChtYXRjaCkgeworICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0g
ZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRk
ZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091
dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVu
dC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlV29ya2Vy
ID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNs
aWVudChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKKyAgICAgICAg
d29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAg
ICB3b3JrZXIub24oImNzc2xpbnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZXNzaW9u
LnNldEFubm90YXRpb25zKGUuZGF0YSk7CisgICAgICAgIH0pOworCisgICAgICAgIHdvcmtlci5v
bigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9
OworCit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKKwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycs
ICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFy
IGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9
IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2
YXIgc3VwcG9ydFR5cGUgPSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFuaW1hdGlvbi1maWxsLW1v
ZGV8YWxpZ25tZW50LWFkanVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFu
aW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24t
Y291bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWlu
Zy1mdW5jdGlvbnxhbmltYXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxp
dHl8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlw
fGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNr
Z3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3Jv
dW5kfGJhc2VsaW5lLXNoaWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmst
bGV2ZWx8Ym9va21hcmstc3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVy
LWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmln
aHQtcmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXIt
Y29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJv
cmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8
Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1s
ZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJv
cmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJv
cmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9y
ZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0
eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdu
fGJveC1kZWNvcmF0aW9uLWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZs
ZXh8Ym94LWxpbmVzfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNo
YWRvd3xib3gtc2l6aW5nfGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2Fw
dGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29s
dW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4t
cnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29s
dW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0
ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2Vs
aW5lfGRyb3AtaW5pdGlhbC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRy
b3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1p
bml0aWFsLXNpemV8ZHJvcC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8
Zml0LXBvc2l0aW9ufGZsb2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9u
dC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13
ZWlnaHR8Zm9udHxncmlkLWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVp
Z2h0fGh5cGhlbmF0ZS1hZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8
aHlwaGVuYXRlLWxpbmVzfGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3Jp
ZW50YXRpb258aW1hZ2UtcmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGln
bnxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5l
LXN0YWNraW5nLXNoaWZ0fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0
LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5
bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJn
aW58bWFyay1hZnRlcnxtYXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1h
cnF1ZWUtcGxheS1jb3VudHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxt
YXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8
bmF2LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxv
dXRsaW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxv
dy1zdHlsZXxvdmVyZmxvdy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFk
ZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFm
dGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8
cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVj
dGl2ZXxwaG9uZW1lc3xwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVz
ZW50YXRpb24tbGV2ZWx8cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxy
ZXNpemV8cmVzdC1hZnRlcnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9u
LXBvaW50fHJvdGF0aW9ufHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1
Ynktc3BhbnxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9u
fHNwZWFrfHNwZWVjaC1yYXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQt
bmFtZXx0YXJnZXQtbmV3fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRl
eHQtYWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1p
bmRlbnR8dGV4dC1qdXN0aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9y
bXx0ZXh0LXdyYXB8dG9wfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9y
bXx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0
eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0
aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2Ut
ZmFtaWx5fHZvaWNlLXBpdGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3Ry
ZXNzfHZvaWNlLXZvbHVtZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8
d2lkb3dzfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsK
K3ZhciBzdXBwb3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdi
YXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIjsKK3ZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBv
cnRzLnN1cHBvcnRDb25zdGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3Jv
bGx8YWxsfGFscGhhYmV0aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQt
Y29sdW1ufGF2b2lkLXBhZ2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZv
cmV8YmVsb3d8YmlkaS1vdmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRl
cnxib3JkZXItYm94fGJvdGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFs
aXplfGNhcHMtaGVpZ2h0fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlk
ZW9ncmFwaGljfGNsb25lfGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNv
bnNpZGVyLXNoaWZ0c3xjb250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1i
ZXppZXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxl
ZHxkaXNjfGRpc3JlZ2FyZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1s
ZXR0ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8
ZWFzZS1pbnxlYXNlLWluLW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1
Ynl8ZmlsbHxmaXhlZHxnZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFu
Z2luZ3xoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRh
bHxpY29ufGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50
aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxp
bmhlcml0fGluaXRpYWx8aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0
fGlubGluZS10YWJsZXxpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13
b3JkfGludmVydHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFs
bHxsYXN0fGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxp
c3QtaXRlbXxsb2NhbHxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxs
b3dlci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1h
eC1zaXplfG1lZGl1bXxtZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJl
c2l6ZXxuZXdzcGFwZXJ8bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1x
dW90ZXxuby1yZXBlYXR8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxv
YmxpcXVlfG9wZW4tcXVvdGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFn
ZXxwb2ludGVyfHByZS1saW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxh
dGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxy
aWdodHxyb3VuZHxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFy
YXRlfHNsaWNlfHNtYWxsLWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3Rh
cnR8c3RhdGljfHN0YXR1cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0
cmljdHxzdWJ8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1j
b2x1bW4tZ3JvdXB8dGFibGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXIt
Z3JvdXB8dGFibGUtcm93LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVk
Z2V8dGV4dC1iZWZvcmUtZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0
aGlja3x0aGlufHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1
cHBlci1yb21hbnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0
aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyI7
Cit2YXIgc3VwcG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9y
ID0gImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxv
bGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciOwordmFyIHN1
cHBvcnRDb25zdGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlh
bHxjZW50dXJ5fGNvbWljfGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0
fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRh
bmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOworCit2YXIgbnVtUmUgPSBl
eHBvcnRzLm51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsK
K3ZhciBwc2V1ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxi
KGFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVj
dGlvbilcXGIiOwordmFyIHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0g
ICIoOilcXGIoYWN0aXZlfGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGls
ZHxmaXJzdC1vZi10eXBlfGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNo
aWxkfGxhc3Qtb2YtdHlwZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxh
c3Qtb2YtdHlwZXxudGgtb2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxy
b290fHRhcmdldHx2YWxpZHx2aXNpdGVkKVxcYiI7CisKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9
IGZ1bmN0aW9uKCkgeworCisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdv
cmRNYXBwZXIoeworICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwK
KyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCisgICAgICAgICJz
dXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29s
b3IiOiBzdXBwb3J0Q29uc3RhbnRDb2xvciwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9u
dHMiOiBzdXBwb3J0Q29uc3RhbnRGb250cworICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CisKKyAgICB2
YXIgYmFzZV9ydWxlc2V0ID0gWworICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21t
ZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoi
LAorICAgICAgICAgICAgbmV4dCA6ICJydWxlc2V0X2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAgICBy
ZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJworICAgICAgICB9LCB7
CisgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAg
ICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKKyAgICAgICAg
fSwgeworICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJd
LAorICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxm
cnxnZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2
d3wlKSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJp
YyIsCisgICAgICAgICAgICByZWdleCA6IG51bVJlCisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
IHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgorICAgICAgICAgICAg
cmVnZXggOiAiI1thLWYwLTldezZ9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAi
I1thLWYwLTldezN9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1
YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJd
LAorICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cworICAgICAgICB9LCB7CisgICAg
ICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1u
YW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3Nl
cworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCisgICAg
ICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKKyAgICAgICAg
fQorICAgICAgXTsKKworICAgIHZhciBydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9ydWxl
c2V0KTsKKyAgICBydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFy
ZW4iLAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJzdGFydCIKKyAg
ICB9KTsKKworICAgIHZhciBtZWRpYV9ydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoIGJhc2VfcnVs
ZXNldCApOworICAgIG1lZGlhX3J1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBh
cmVuLnJwYXJlbiIsCisgICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgIm1l
ZGlhIgorICAgIH0pOworCisgICAgdmFyIGJhc2VfY29tbWVudCA9IFt7CisgICAgICAgICAgdG9r
ZW4gOiAiY29tbWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQorICAgICAgICAg
IHJlZ2V4IDogIi4rIgorICAgIH1dOworCisgICAgdmFyIGNvbW1lbnQgPSBsYW5nLmNvcHlBcnJh
eShiYXNlX2NvbW1lbnQpOworICAgIGNvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xc
KlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJzdGFydCIKKyAgICB9KTsKKworICAgIHZhciBtZWRp
YV9jb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKKyAgICBtZWRpYV9jb21t
ZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNv
bW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAi
bWVkaWEiCisgICAgfSk7CisKKyAgICB2YXIgcnVsZXNldF9jb21tZW50ID0gbGFuZy5jb3B5QXJy
YXkoYmFzZV9jb21tZW50KTsKKyAgICBydWxlc2V0X2NvbW1lbnQudW5zaGlmdCh7CisgICAgICAg
ICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4
IDogIi4qP1xcKlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJydWxlc2V0IgorICAgIH0pOworCisg
ICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9r
ZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXgg
OiAiXFwvXFwqIiwKKyAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJc
XHsiLAorICAgICAgICAgICAgbmV4dDogICJydWxlc2V0IgorICAgICAgICB9LCB7CisgICAgICAg
ICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIkAuKj97IiwKKyAgICAg
ICAgICAgIG5leHQ6ICAibWVkaWEiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJr
ZXl3b3JkIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9LHsK
KyAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJcXC5b
YS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisg
ICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAg
ICB0b2tlbjogImNvbnN0YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCisg
ICAgICAgIH1dLAorCisgICAgICAgICJtZWRpYSIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDog
ImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxc
L1xcKiIsCisgICAgICAgICAgICBuZXh0IDogIm1lZGlhX2NvbW1lbnQiCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAi
XFx7IiwKKyAgICAgICAgICAgIG5leHQ6ICAibWVkaWFfcnVsZXNldCIKKyAgICAgICAgfSx7Cisg
ICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIlxcfSIsCisg
ICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2Vu
OiAia2V5d29yZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAg
fSx7CisgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAi
XFwuW2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmci
LAorICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAg
ICAgICAgdG9rZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10r
IgorICAgICAgICB9XSwKKworICAgICAgICAiY29tbWVudCIgOiBjb21tZW50LAorCisgICAgICAg
ICJydWxlc2V0IiA6IHJ1bGVzZXQsCisgICAgICAgICJydWxlc2V0X2NvbW1lbnQiIDogcnVsZXNl
dF9jb21tZW50LAorCisgICAgICAgICJtZWRpYV9ydWxlc2V0IiA6IG1lZGlhX3J1bGVzZXQsCisg
ICAgICAgICJtZWRpYV9jb21tZW50IiA6IG1lZGlhX2NvbW1lbnQKKyAgICB9OworfTsKKworb29w
LmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBv
cnRzLkNzc0hpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS9iZWhhdmlvdXIvY3NzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAnYWNlL21vZGUv
YmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9v
b3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7
Cit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlv
dXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIiku
VG9rZW5JdGVyYXRvcjsKKwordmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKworICAg
IHRoaXMuaW5oZXJpdChDc3R5bGVCZWhhdmlvdXIpOworCisgICAgdGhpcy5hZGQoImNvbG9uIiwg
Imluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRl
eHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT09ICc6JykgeworICAgICAgICAgICAgdmFyIGN1cnNv
ciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9y
ID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7
CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUn
KSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNv
ci5yb3cpOworICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhj
dXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJp
Z2h0Q2hhciA9PT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikubWF0Y2goL15c
cyo7LykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dDogJzo7JywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwg
MV0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9u
IiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAg
ICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09PSAnOicpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cp
OworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5j
b2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIg
PT09ICc7JykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7
CisKKyAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT09
ICc7JykgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlv
bigpOworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5j
b2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09
ICc7JykgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgdGV4
dDogJycsCisgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworfQorb29wLmluaGVy
aXRzKENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKKworZXhwb3J0cy5Dc3NCZWhhdmlv
dXIgPSBDc3NCZWhhdmlvdXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvaHRtbF9oaWdo
bGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
b29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2Fj
ZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3htbF91dGlsJywg
J2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIg
bGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Cit2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSBy
ZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKK3ZhciBK
YXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0
X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwordmFyIHhtbFV0aWwgPSByZXF1aXJl
KCIuL3htbF91dGlsIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0
X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIHRhZ01hcCA9IGxh
bmcuY3JlYXRlTWFwKHsKKyAgICBhICAgICAgICAgICA6ICdhbmNob3InLAorICAgIGJ1dHRvbiAg
ICAgIDogJ2Zvcm0nLAorICAgIGZvcm0gICAgICAgIDogJ2Zvcm0nLAorICAgIGltZyAgICAgICAg
IDogJ2ltYWdlJywKKyAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKKyAgICBsYWJlbCAgICAgICA6
ICdmb3JtJywKKyAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAorICAgIHNlbGVjdCAgICAgIDog
J2Zvcm0nLAorICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAorICAgIHN0eWxlICAgICAgIDogJ3N0
eWxlJywKKyAgICB0YWJsZSAgICAgICA6ICd0YWJsZScsCisgICAgdGJvZHkgICAgICAgOiAndGFi
bGUnLAorICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKKyAgICB0Zm9vdCAgICAgICA6ICd0YWJs
ZScsCisgICAgdGggICAgICAgICAgOiAndGFibGUnLAorICAgIHRyICAgICAgICAgIDogJ3RhYmxl
JworfSk7CisKK3ZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LiRydWxlcyA9IHsKKyAgICAgICAgc3RhcnQgOiBbeworICAgICAgICAgICAgdG9rZW4gOiAidGV4
dCIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLAorICAgICAgICAgICAg
bmV4dCA6ICJjZGF0YSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAieG1sLXBl
IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIjxcXD8uKj9cXD8+IgorICAgICAgICB9LCB7CisgICAg
ICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIjxcXCEtLSIs
CisgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
IHRva2VuIDogInhtbC1wZSIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhLio/PiIKKyAgICAg
ICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAibWV0YS50YWciLAorICAgICAgICAgICAgcmVn
ZXggOiAiPCg/PXNjcmlwdFxcYikiLAorICAgICAgICAgICAgbmV4dCA6ICJzY3JpcHQiCisgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKKyAgICAgICAgICAgIHJl
Z2V4IDogIjwoPz1zdHlsZVxcYikiLAorICAgICAgICAgICAgbmV4dCA6ICJzdHlsZSIKKyAgICAg
ICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAibWV0YS50YWciLCAvLyBvcGVuaW5nIHRhZwor
ICAgICAgICAgICAgcmVnZXggOiAiPFxcLz8iLAorICAgICAgICAgICAgbmV4dCA6ICJ0YWciCisg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAgICAgICAgICAgcmVn
ZXggOiAiXFxzKyIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQu
Y2hhcmFjdGVyLmVudGl0eSIsCisgICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/
OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKKyAgICAgICAgfV0s
CisgICAgCisgICAgICAgIGNkYXRhIDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwK
KyAgICAgICAgICAgIHJlZ2V4IDogIlxcXVxcXT4iLAorICAgICAgICAgICAgbmV4dCA6ICJzdGFy
dCIKKyAgICAgICAgfSBdLAorCisgICAgICAgIGNvbW1lbnQgOiBbIHsKKyAgICAgICAgICAgIHRv
a2VuIDogImNvbW1lbnQiLAorICAgICAgICAgICAgcmVnZXggOiAiLio/LS0+IiwKKyAgICAgICAg
ICAgIG5leHQgOiAic3RhcnQiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGRlZmF1bHRUb2tl
biA6ICJjb21tZW50IgorICAgICAgICB9IF0KKyAgICB9OworICAgIAorICAgIHhtbFV0aWwudGFn
KHRoaXMuJHJ1bGVzLCAidGFnIiwgInN0YXJ0IiwgdGFnTWFwKTsKKyAgICB4bWxVdGlsLnRhZyh0
aGlzLiRydWxlcywgInN0eWxlIiwgImNzcy1zdGFydCIsIHRhZ01hcCk7CisgICAgeG1sVXRpbC50
YWcodGhpcy4kcnVsZXMsICJzY3JpcHQiLCAianMtc3RhcnQiLCB0YWdNYXApOworICAgIAorICAg
IHRoaXMuZW1iZWRSdWxlcyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsICJqcy0iLCBbeworICAg
ICAgICB0b2tlbjogImNvbW1lbnQiLAorICAgICAgICByZWdleDogIlxcL1xcLy4qKD89PFxcL3Nj
cmlwdD4pIiwKKyAgICAgICAgbmV4dDogInRhZyIKKyAgICB9LCB7CisgICAgICAgIHRva2VuOiAi
bWV0YS50YWciLAorICAgICAgICByZWdleDogIjxcXC8oPz1zY3JpcHQpIiwKKyAgICAgICAgbmV4
dDogInRhZyIKKyAgICB9XSk7CisgICAgCisgICAgdGhpcy5lbWJlZFJ1bGVzKENzc0hpZ2hsaWdo
dFJ1bGVzLCAiY3NzLSIsIFt7CisgICAgICAgIHRva2VuOiAibWV0YS50YWciLAorICAgICAgICBy
ZWdleDogIjxcXC8oPz1zdHlsZSkiLAorICAgICAgICBuZXh0OiAidGFnIgorICAgIH1dKTsKK307
CisKK29vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7
CisKK2V4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOworfSk7
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL3htbF91dGlsJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitm
dW5jdGlvbiBzdHJpbmcoc3RhdGUpIHsKKyAgICByZXR1cm4gW3sKKyAgICAgICAgdG9rZW4gOiAi
c3RyaW5nIiwKKyAgICAgICAgcmVnZXggOiAnIicsCisgICAgICAgIG5leHQgOiBzdGF0ZSArICJf
cXFzdHJpbmciCisgICAgfSwgeworICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICBy
ZWdleCA6ICInIiwKKyAgICAgICAgbmV4dCA6IHN0YXRlICsgIl9xc3RyaW5nIgorICAgIH1dOwor
fQorCitmdW5jdGlvbiBtdWx0aUxpbmVTdHJpbmcocXVvdGUsIHN0YXRlKSB7CisgICAgcmV0dXJu
IFsKKyAgICAgICAge3Rva2VuIDogInN0cmluZyIsIHJlZ2V4IDogcXVvdGUsIG5leHQgOiBzdGF0
ZX0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVz
Y2FwZSIsCisgICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZB
LUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIgCisgICAgICAgIH0sCisgICAgICAgIHtk
ZWZhdWx0VG9rZW4gOiAic3RyaW5nIn0KKyAgICBdOworfQorCitleHBvcnRzLnRhZyA9IGZ1bmN0
aW9uKHN0YXRlcywgbmFtZSwgbmV4dFN0YXRlLCB0YWdNYXApIHsKKyAgICBzdGF0ZXNbbmFtZV0g
PSBbeworICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgcmVnZXggOiAiXFxzKyIKKyAg
ICB9LCB7CisgICAgICAgIAorICAgIHRva2VuIDogIXRhZ01hcCA/ICJtZXRhLnRhZy50YWctbmFt
ZSIgOiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRhZ01hcFt2YWx1ZV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuICJtZXRhLnRhZy50YWctbmFtZS4iICsgdGFnTWFwW3ZhbHVl
XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gIm1ldGEudGFnLnRh
Zy1uYW1lIjsKKyAgICAgICAgfSwKKyAgICAgICAgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIiwK
KyAgICAgICAgbmV4dCA6IG5hbWUgKyAiX2VtYmVkX2F0dHJpYnV0ZV9saXN0IiAKKyAgICB9LCB7
CisgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICByZWdleDogIiIsCisgICAgICAgIG5l
eHQgOiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIKKyAgICB9XTsKKworICAgIHN0YXRl
c1tuYW1lICsgIl9xc3RyaW5nIl0gPSBtdWx0aUxpbmVTdHJpbmcoIiciLCBuYW1lICsgIl9lbWJl
ZF9hdHRyaWJ1dGVfbGlzdCIpOworICAgIHN0YXRlc1tuYW1lICsgIl9xcXN0cmluZyJdID0gbXVs
dGlMaW5lU3RyaW5nKCJcIiIsIG5hbWUgKyAiX2VtYmVkX2F0dHJpYnV0ZV9saXN0Iik7CisgICAg
CisgICAgc3RhdGVzW25hbWUgKyAiX2VtYmVkX2F0dHJpYnV0ZV9saXN0Il0gPSBbeworICAgICAg
ICB0b2tlbiA6ICJtZXRhLnRhZy5yIiwKKyAgICAgICAgcmVnZXggOiAiLz8+IiwKKyAgICAgICAg
bmV4dCA6IG5leHRTdGF0ZQorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVy
YXRvciIsCisgICAgICAgIHJlZ2V4IDogIj0iCisgICAgfSwgeworICAgICAgICB0b2tlbiA6ICJl
bnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUiLAorICAgICAgICByZWdleCA6ICJbLV9hLXpBLVow
LTk6XSsiCisgICAgfSwgeworICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8g
ZmxvYXQKKyAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsr
LV0/XFxkKyk/KT9cXGIiCisgICAgfSwgeworICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAg
ICAgcmVnZXggOiAiXFxzKyIKKyAgICB9XS5jb25jYXQoc3RyaW5nKG5hbWUpKTsKK307CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyL3ht
bCcsICdhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWly
ZSgiLi4vLi4vbGliL29vcCIpOwordmFyIFhtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2
aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7Cit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgi
Li9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUo
Ii4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciB2b2lkRWxlbWVudHMg
PSBbJ2FyZWEnLCAnYmFzZScsICdicicsICdjb2wnLCAnY29tbWFuZCcsICdlbWJlZCcsICdocics
ICdpbWcnLCAnaW5wdXQnLCAna2V5Z2VuJywgJ2xpbmsnLCAnbWV0YScsICdwYXJhbScsICdzb3Vy
Y2UnLCAndHJhY2snLCAnd2JyJ107CisKK2Z1bmN0aW9uIGhhc1R5cGUodG9rZW4sIHR5cGUpIHsK
KyAgICB2YXIgaGFzVHlwZSA9IHRydWU7CisgICAgdmFyIHR5cGVMaXN0ID0gdG9rZW4udHlwZS5z
cGxpdCgnLicpOworICAgIHZhciBuZWVkbGVMaXN0ID0gdHlwZS5zcGxpdCgnLicpOworICAgIG5l
ZWRsZUxpc3QuZm9yRWFjaChmdW5jdGlvbihuZWVkbGUpeworICAgICAgICBpZiAodHlwZUxpc3Qu
aW5kZXhPZihuZWVkbGUpID09IC0xKSB7CisgICAgICAgICAgICBoYXNUeXBlID0gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4g
aGFzVHlwZTsKK30KKwordmFyIEh0bWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0
aGlzLmluaGVyaXQoWG1sQmVoYXZpb3VyKTsgLy8gR2V0IHhtbCBiZWhhdmlvdXIKKyAgICAKKyAg
ICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBh
Y3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnPicp
IHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigp
OworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwg
cG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOworICAgICAgICAgICAgdmFyIHRva2VuID0g
aXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICB2YXIgYXRDdXJzb3IgPSBm
YWxzZTsKKyAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRh
ZycpICYmICEoaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSAmJiB0b2tlbi52YWx1ZS5tYXRjaCgnLycp
KSl7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0
ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYm
IChoYXNUeXBlKHRva2VuLCAnc3RyaW5nJykgfHwgaGFzVHlwZSh0b2tlbiwgJ2tleXdvcmQub3Bl
cmF0b3InKSB8fCBoYXNUeXBlKHRva2VuLCAnZW50aXR5LmF0dHJpYnV0ZS1uYW1lJykgfHwgaGFz
VHlwZSh0b2tlbiwgJ3RleHQnKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBhdEN1cnNvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRv
a2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWctbmFtZScpIHx8IGl0ZXJhdG9yLnN0ZXBC
YWNrd2FyZCgpLnZhbHVlLm1hdGNoKCcvJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdG9rZW4udmFsdWU7CisgICAg
ICAgICAgICBpZiAoYXRDdXJzb3IpeworICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZWxl
bWVudC5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW4uc3RhcnQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHZvaWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpICE9
PSAtMSl7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgIHRleHQ6ICc+JyArICc8LycgKyBlbGVtZW50ICsg
Jz4nLAorICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0pOworfQorb29wLmluaGVyaXRzKEh0bWxCZWhhdmlvdXIsIFhtbEJlaGF2
aW91cik7CisKK2V4cG9ydHMuSHRtbEJlaGF2aW91ciA9IEh0bWxCZWhhdmlvdXI7Cit9KTsKKwor
YWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL3htbCcsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9t
b2RlL2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9s
aWIvb29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZp
b3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVo
YXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRv
ciIpLlRva2VuSXRlcmF0b3I7CisKK2Z1bmN0aW9uIGhhc1R5cGUodG9rZW4sIHR5cGUpIHsKKyAg
ICB2YXIgaGFzVHlwZSA9IHRydWU7CisgICAgdmFyIHR5cGVMaXN0ID0gdG9rZW4udHlwZS5zcGxp
dCgnLicpOworICAgIHZhciBuZWVkbGVMaXN0ID0gdHlwZS5zcGxpdCgnLicpOworICAgIG5lZWRs
ZUxpc3QuZm9yRWFjaChmdW5jdGlvbihuZWVkbGUpeworICAgICAgICBpZiAodHlwZUxpc3QuaW5k
ZXhPZihuZWVkbGUpID09IC0xKSB7CisgICAgICAgICAgICBoYXNUeXBlID0gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gaGFz
VHlwZTsKK30KKwordmFyIFhtbEJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICB0
aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyLCBbInN0cmluZ19kcXVvdGVzIl0pOyAvLyBHZXQg
c3RyaW5nIGJlaGF2aW91cgorICAgIAorICAgIHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsICJpbnNl
cnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7
CisgICAgICAgIGlmICh0ZXh0ID09ICc+JykgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0g
ZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBu
ZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7
CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAg
ICAgICAgICAgIHZhciBhdEN1cnNvciA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCF0b2tlbiB8
fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnJykgJiYgIShoYXNUeXBlKHRva2VuLCAndGV4dCcp
ICYmIHRva2VuLnZhbHVlLm1hdGNoKCcvJykpKXsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAg
ICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgKGhhc1R5cGUodG9rZW4sICdzdHJpbmcnKSB8fCBo
YXNUeXBlKHRva2VuLCAna2V5d29yZC5vcGVyYXRvcicpIHx8IGhhc1R5cGUodG9rZW4sICdlbnRp
dHkuYXR0cmlidXRlLW5hbWUnKSB8fCBoYXNUeXBlKHRva2VuLCAndGV4dCcpKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF0Q3Vyc29yID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRh
Zy1uYW1lJykgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkudmFsdWUubWF0Y2goJy8nKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRh
ZyA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgaWYgKGF0Q3Vyc29yKXsKKyAgICAgICAgICAg
ICAgICB2YXIgdGFnID0gdGFnLnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbi5z
dGFydCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICB0ZXh0OiAnPicgKyAnPC8nICsgdGFnICsgJz4nLAorICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiBbMSwgMV0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhp
cy5hZGQoJ2F1dG9pbmRlbnQnLCAnaW5zZXJ0aW9uJywgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24s
IGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSAiXG4iKSB7Cisg
ICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFycyA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1
cnNvci5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXJzID09ICc8LycpIHsK
KyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZG9j
LmdldExpbmUoY3Vyc29yLnJvdykpICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoc2Vzc2lvbi5kb2MuZ2V0
TGluZShjdXJzb3Iucm93KSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAnXG4nICsgaW5kZW50ICsgJ1xuJyArIG5leHRfaW5kZW50LAorICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQu
bGVuZ3RoXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOworICAgIAorfQorb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKKwor
ZXhwb3J0cy5YbWxCZWhhdmlvdXIgPSBYbWxCZWhhdmlvdXI7Cit9KTsKKworYWNlLmRlZmluZSgn
YWNlL21vZGUvZm9sZGluZy9odG1sJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9mb2xkaW5nL21peGVkJywgJ2FjZS9tb2RlL2ZvbGRp
bmcveG1sJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7
Cit2YXIgTWl4ZWRGb2xkTW9kZSA9IHJlcXVpcmUoIi4vbWl4ZWQiKS5Gb2xkTW9kZTsKK3ZhciBY
bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7Cit2YXIgQ1N0eWxlRm9sZE1v
ZGUgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkZvbGRNb2RlOworCit2YXIgRm9sZE1vZGUgPSBleHBv
cnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgTWl4ZWRGb2xkTW9kZS5jYWxsKHRoaXMs
IG5ldyBYbWxGb2xkTW9kZSh7CisgICAgICAgICJhcmVhIjogMSwKKyAgICAgICAgImJhc2UiOiAx
LAorICAgICAgICAiYnIiOiAxLAorICAgICAgICAiY29sIjogMSwKKyAgICAgICAgImNvbW1hbmQi
OiAxLAorICAgICAgICAiZW1iZWQiOiAxLAorICAgICAgICAiaHIiOiAxLAorICAgICAgICAiaW1n
IjogMSwKKyAgICAgICAgImlucHV0IjogMSwKKyAgICAgICAgImtleWdlbiI6IDEsCisgICAgICAg
ICJsaW5rIjogMSwKKyAgICAgICAgIm1ldGEiOiAxLAorICAgICAgICAicGFyYW0iOiAxLAorICAg
ICAgICAic291cmNlIjogMSwKKyAgICAgICAgInRyYWNrIjogMSwKKyAgICAgICAgIndiciI6IDEs
CisgICAgICAgICJsaSI6IDEsCisgICAgICAgICJkdCI6IDEsCisgICAgICAgICJkZCI6IDEsCisg
ICAgICAgICJwIjogMSwKKyAgICAgICAgInJ0IjogMSwKKyAgICAgICAgInJwIjogMSwKKyAgICAg
ICAgIm9wdGdyb3VwIjogMSwKKyAgICAgICAgIm9wdGlvbiI6IDEsCisgICAgICAgICJjb2xncm91
cCI6IDEsCisgICAgICAgICJ0ZCI6IDEsCisgICAgICAgICJ0aCI6IDEKKyAgICB9KSwgeworICAg
ICAgICAianMtIjogbmV3IENTdHlsZUZvbGRNb2RlKCksCisgICAgICAgICJjc3MtIjogbmV3IENT
dHlsZUZvbGRNb2RlKCkKKyAgICB9KTsKK307CisKK29vcC5pbmhlcml0cyhGb2xkTW9kZSwgTWl4
ZWRGb2xkTW9kZSk7CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL21peGVk
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
bW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwordmFyIEJhc2VG
b2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9k
ZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihkZWZhdWx0TW9kZSwgc3ViTW9kZXMpIHsK
KyAgICB0aGlzLmRlZmF1bHRNb2RlID0gZGVmYXVsdE1vZGU7CisgICAgdGhpcy5zdWJNb2RlcyA9
IHN1Yk1vZGVzOworfTsKK29vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKKwor
KGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLiRnZXRNb2RlID0gZnVuY3Rpb24oc3RhdGUpIHsK
KyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3ViTW9kZXMpIHsKKyAgICAgICAgICAgIGlm
IChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c3ViTW9kZXNba2V5XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Owor
ICAgIAorICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0
eWxlLCByb3cpIHsKKyAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHN0YXRlKTsKKyAg
ICAgICAgcmV0dXJuIChtb2RlID8gbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHls
ZSwgcm93KSA6ICIiKTsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rp
b24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAg
ICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSksIHNlc3Npb24sIGZvbGRT
dHlsZSwgcm93KSB8fAorICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRl
KHJvdyksIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB8fAorICAgICAgICAgICAgdGhpcy5kZWZh
dWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQorICAgICAgICAp
OworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShz
ZXNzaW9uLmdldFN0YXRlKHJvdy0xKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1vZGUgfHwg
IW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCisgICAgICAgICAg
ICBtb2RlID0gdGhpcy4kZ2V0TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdykpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0
eWxlLCByb3cpKQorICAgICAgICAgICAgbW9kZSA9IHRoaXMuZGVmYXVsdE1vZGU7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgZm9sZFN0
eWxlLCByb3cpOworICAgIH07CisKK30pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKKworfSk7
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcveG1sJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL3Jhbmdl
JywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWly
ZSgiLi4vLi4vbGliL29vcCIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIp
OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBCYXNlRm9s
ZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwordmFyIFRva2VuSXRlcmF0
b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisKK3Zh
ciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbih2b2lkRWxlbWVudHMpIHsK
KyAgICBCYXNlRm9sZE1vZGUuY2FsbCh0aGlzKTsKKyAgICB0aGlzLnZvaWRFbGVtZW50cyA9IHZv
aWRFbGVtZW50cyB8fCB7fTsKK307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9k
ZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9u
KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRG
aXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOworCisgICAgICAgIGlmICh0YWcuY2xvc2luZykK
KyAgICAgICAgICAgIHJldHVybiBmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIgPyAiZW5kIiA6
ICIiOworCisgICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGhpcy52b2lkRWxlbWVudHNbdGFn
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAg
ICAgaWYgKHRhZy5zZWxmQ2xvc2luZykKKyAgICAgICAgICAgIHJldHVybiAiIjsKKworICAgICAg
ICBpZiAodGFnLnZhbHVlLmluZGV4T2YoIi8iICsgdGFnLnRhZ05hbWUpICE9PSAtMSkKKyAgICAg
ICAgICAgIHJldHVybiAiIjsKKworICAgICAgICByZXR1cm4gInN0YXJ0IjsKKyAgICB9OworICAg
IAorICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7
CisgICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOworICAgICAgICB2
YXIgdmFsdWUgPSAiIjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAg
IGlmICh0b2tlbi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDApCisgICAgICAgICAgICAg
ICAgdmFsdWUgKz0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdmFsdWUgKz0gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0b2tlbi52YWx1ZS5sZW5ndGgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VUYWcodmFsdWUp
OworICAgIH07CisKKyAgICB0aGlzLnRhZ1JlID0gL14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAt
OTohXSopXHMqKFwvPyk+PykvOworICAgIHRoaXMuX3BhcnNlVGFnID0gZnVuY3Rpb24odGFnKSB7
CisgICAgICAgIAorICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnRhZ1JlLmV4ZWModGFnKTsKKyAg
ICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFnUmUubGFzdEluZGV4IHx8IDA7CisgICAgICAgIHRo
aXMudGFnUmUubGFzdEluZGV4ID0gMDsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
dmFsdWU6IHRhZywKKyAgICAgICAgICAgIG1hdGNoOiBtYXRjaCA/IG1hdGNoWzJdIDogIiIsCisg
ICAgICAgICAgICBjbG9zaW5nOiBtYXRjaCA/ICEhbWF0Y2hbM10gOiBmYWxzZSwKKyAgICAgICAg
ICAgIHNlbGZDbG9zaW5nOiBtYXRjaCA/ICEhbWF0Y2hbNV0gfHwgbWF0Y2hbMl0gPT0gIi8+IiA6
IGZhbHNlLAorICAgICAgICAgICAgdGFnTmFtZTogbWF0Y2ggPyBtYXRjaFs0XSA6ICIiLAorICAg
ICAgICAgICAgY29sdW1uOiBtYXRjaFsxXSA/IGNvbHVtbiArIG1hdGNoWzFdLmxlbmd0aCA6IGNv
bHVtbgorICAgICAgICB9OworICAgIH07CisgICAgdGhpcy5fcmVhZFRhZ0ZvcndhcmQgPSBmdW5j
dGlvbihpdGVyYXRvcikgeworICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgCisgICAgICAgIHZhciB2YWx1ZSA9ICIiOworICAgICAgICB2YXIgc3RhcnQ7
CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZS5pbmRl
eE9mKCJtZXRhLnRhZyIpID09PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydCkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKQorICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSAr
PSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiPiIpICE9
PSAtMSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gdGhpcy5fcGFyc2VUYWcodmFs
dWUpOworICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAg
ICAgICAgICAgdGFnLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogaXRlcmF0
b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46
IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBG
b3J3YXJkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3Rl
cEZvcndhcmQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAg
IAorICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAg
ICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICBpZiAo
IXRva2VuKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAKKyAgICAgICAg
dmFyIHZhbHVlID0gIiI7CisgICAgICAgIHZhciBlbmQ7CisKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZigibWV0YS50YWciKSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgIGlmICghZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJvdzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNv
bHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWUgKyB2YWx1
ZTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiPCIpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgdGFnID0gdGhpcy5fcGFyc2VUYWcodmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICB0YWcuZW5kID0gZW5kOworICAgICAgICAgICAgICAgICAgICB0YWcuc3Rh
cnQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRU
b2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRD
dXJyZW50VG9rZW5Db2x1bW4oKQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRhZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hp
bGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9OworICAgIAorICAgIHRoaXMuX3BvcCA9IGZ1bmN0aW9uKHN0YWNr
LCB0YWcpIHsKKyAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgCisg
ICAgICAgICAgICB2YXIgdG9wID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOworICAgICAgICAgICAg
aWYgKCF0YWcgfHwgdG9wLnRhZ05hbWUgPT0gdGFnLnRhZ05hbWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhY2sucG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLnZvaWRFbGVtZW50c1t0YWcudGFnTmFtZV0pIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZvaWRFbGVtZW50
c1t0b3AudGFnTmFtZV0pIHsKKyAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAg
IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCBy
b3cpIHsKKyAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vz
c2lvbiwgcm93KTsKKyAgICAgICAgCisgICAgICAgIGlmICghZmlyc3RUYWcubWF0Y2gpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHZhciBpc0JhY2t3YXJkID0g
Zmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKKyAgICAgICAgdmFyIHN0
YWNrID0gW107CisgICAgICAgIHZhciB0YWc7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzQmFj
a3dhcmQpIHsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNl
c3Npb24sIHJvdywgZmlyc3RUYWcuY29sdW1uKTsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IHsK
KyAgICAgICAgICAgICAgICByb3c6IHJvdywKKyAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0
VGFnLmNvbHVtbiArIGZpcnN0VGFnLnRhZ05hbWUubGVuZ3RoICsgMgorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnRm9yd2FyZChpdGVyYXRvcikp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWcu
c3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHRhZy5jbG9z
aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIHRhZy5zdGFydCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
dGFjay5wdXNoKHRhZykKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5J
dGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmNvbHVtbiArIGZpcnN0VGFnLm1hdGNoLmxl
bmd0aCk7CisgICAgICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgICAgIHJvdzogcm93
LAorICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuY29sdW1uCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0Jh
Y2t3YXJkKGl0ZXJhdG9yKSkgeworICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3Npbmcp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChz
dGFjaywgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1l
Lmxlbmd0aCArIDI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBv
aW50cyh0YWcuc3RhcnQsIGVuZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNr
LnB1c2godGFnKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9q
YXZhc2NyaXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9k
ZV9qYXZhc2NyaXB0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NWU4NGQ2ZDE5OWM3YTQ2NTc4YTkxOWVhY2Y2
NjRmODRhOThiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2FjZS9tb2RlX2phdmFzY3JpcHQuanMKQEAgLTAsMCArMSw4OTYgQEAKKy8qICoq
KioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
U0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS90ZXh0JywgJ2FjZS90b2tlbml6ZXInLCAnYWNl
L21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvbWF0Y2hpbmdfYnJh
Y2Vfb3V0ZGVudCcsICdhY2UvcmFuZ2UnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2Fj
ZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUo
Ii4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2
YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIEph
dmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRf
cnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRl
bnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0
ZGVudDsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgV29ya2Vy
Q2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7
Cit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0
eWxlQmVoYXZpb3VyOwordmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2Nz
dHlsZSIpLkZvbGRNb2RlOworCit2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRv
a2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcygpLmdl
dFJ1bGVzKCkpOworICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQo
KTsKKyAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CisgICAgdGhp
cy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKK307Citvb3AuaW5oZXJpdHMo
TW9kZSwgVGV4dE1vZGUpOworCisoZnVuY3Rpb24oKSB7CisKKworICAgIHRoaXMudG9nZ2xlQ29t
bWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVuZFJvdykgeworICAg
ICAgICB2YXIgb3V0ZGVudCA9IHRydWU7CisgICAgICAgIHZhciByZSA9IC9eKFxzKilcL1wvLzsK
KworICAgICAgICBmb3IgKHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspIHsKKyAgICAg
ICAgICAgIGlmICghcmUudGVzdChkb2MuZ2V0TGluZShpKSkpIHsKKyAgICAgICAgICAgICAgICBv
dXRkZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAob3V0ZGVudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0
ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApOworICAgICAgICAgICAgZm9yICh2YXIgaT1z
dGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHZhciBsaW5lID0gZG9jLmdldExpbmUoaSk7CisgICAgICAgICAgICAgICAgdmFyIG0gPSBsaW5l
Lm1hdGNoKHJlKTsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5yb3cgPSBpOwor
ICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOworICAgICAgICAgICAgICAg
IGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBtWzBdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBk
b2MucmVwbGFjZShkZWxldGVSYW5nZSwgbVsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkb2MuaW5kZW50Um93cyhzdGFydFJvdywgZW5k
Um93LCAiLy8iKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmdldE5leHRMaW5lSW5k
ZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgeworICAgICAgICB2YXIgaW5kZW50ID0g
dGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhp
cy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOworICAgICAgICB2YXIgdG9r
ZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CisgICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2Vu
aXplZExpbmUuc3RhdGU7CisKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rv
a2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKKyAgICAgICAgICAgIHJldHVybiBp
bmRlbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQi
IHx8IHN0YXRlID09ICJyZWdleF9hbGxvd2VkIikgeworICAgICAgICAgICAgdmFyIG1hdGNoID0g
bGluZS5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKlw6fFtce1woXFtdKVxzKiQvKTsKKyAgICAgICAg
ICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKKyAgICAg
ICAgICAgIGlmIChlbmRTdGF0ZSA9PSAic3RhcnQiIHx8IHN0YXRlID09ICJyZWdleF9hbGxvd2Vk
IikgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CisgICAgICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW5kZW50ICs9ICIgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaW5kZW50ICs9ICIqICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gaW5kZW50OworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9u
KHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVj
a091dGRlbnQobGluZSwgaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRkZW50ID0g
ZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091
dGRlbnQoZG9jLCByb3cpOworICAgIH07CisgICAgCisgICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBm
dW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50
KFsiYWNlIl0sICJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsICJKYXZhU2NyaXB0V29ya2Vy
Iik7CisgICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQo
KSk7CisKKyAgICAgICAgd29ya2VyLm9uKCJqc2xpbnQiLCBmdW5jdGlvbihyZXN1bHRzKSB7Cisg
ICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKHJlc3VsdHMuZGF0YSk7CisgICAgICAg
IH0pOworICAgICAgICAKKyAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOworICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB3b3JrZXI7CisgICAgfTsKKworfSkuY2FsbChNb2Rl
LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7Cit9KTsKKworYWNlLmRlZmluZSgn
YWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hs
aWdodF9ydWxlcycsICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGli
L29vcCIpOwordmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2Nv
bW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwordmFyIFRl
eHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0
SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlv
bigpIHsKKyAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7
CisgICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6CisgICAgICAgICAgICAiQXJyYXl8Qm9vbGVh
bnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94
eXwiICArIC8vIENvbnN0cnVjdG9ycworICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8
WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAv
LyBFNFgKKyAgICAgICAgICAgICJBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5
fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8IiAgICsKKyAgICAgICAgICAgICJVaW50
MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAg
ICAgICAgICAgICAgICsKKyAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJv
cnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3Jz
CisgICAgICAgICAgICAiU3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAiZGVjb2RlVVJJ
fGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNG
aW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKKyAgICAgICAgICAgICJpc05h
TnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsKKyAgICAgICAgICAgICJKU09OfE1hdGh8IiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gT3RoZXIK
KyAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCisgICAgICAgICJrZXl3
b3JkIjoKKyAgICAgICAgICAgICJjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldHwiICsKKyAgICAg
ICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8
ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCisgICAgICAgICAgICAiaWZ8aW58aW5zdGFuY2VvZnxu
ZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1
Z2dlcnwiICsKKyAgICAgICAgICAgICJfX3BhcmVudF9ffF9fY291bnRfX3xlc2NhcGV8dW5lc2Nh
cGV8d2l0aHxfX3Byb3RvX198IiArCisgICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1
cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHBy
b3RlY3RlZHxzdGF0aWMiLAorICAgICAgICAic3RvcmFnZS50eXBlIjoKKyAgICAgICAgICAgICJj
b25zdHxsZXR8dmFyfGZ1bmN0aW9uIiwKKyAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKKyAg
ICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAorICAgICAgICAic3VwcG9y
dC5mdW5jdGlvbiI6CisgICAgICAgICAgICAiYWxlcnQiLAorICAgICAgICAiY29uc3RhbnQubGFu
Z3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgorICAgIH0sICJpZGVudGlmaWVyIik7CisgICAg
dmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1
cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKKyAgICB2YXIgaWRlbnRpZmllclJlID0g
IlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxc
YiI7CisKKyAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8v
IGhleAorICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCisgICAgICAgICJb
MC0yXVswLTddezAsMn18IiArIC8vIG9jdAorICAgICAgICAiM1swLTZdWzAtN10/fCIgKyAvLyBv
Y3QKKyAgICAgICAgIjM3WzAtN10/fCIgKyAvLyBvY3QKKyAgICAgICAgIls0LTddWzAtN10/fCIg
KyAvL29jdAorICAgICAgICAiLikiOworCisgICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJz
dGFydCIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVu
dCIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAvXC9cLy4qJC8KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3Rh
cnQiKSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50Iiwg
Ly8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCisg
ICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/
PS4pIiwKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAnIig/PS4pJywKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKKyAgICAg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwg
Ly8gaGV4CisgICAgICAgICAgICAgICAgcmVnZXggOiAvMFt4WF1bMC05YS1mQS1GXStcYi8KKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmlj
IiwgLy8gZmxvYXQKKyAgICAgICAgICAgICAgICByZWdleCA6IC9bKy1dP1xkKyg/Oig/OlwuXGQq
KT8oPzpbZUVdWystXT9cZCspPyk/XGIvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1
YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCisgICAgICAgICAgICAgICAgICAg
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwi
a2V5d29yZC5vcGVyYXRvciIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJl
Z2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlk
ZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlv
bl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBb
CisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0
b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCisgICAgICAgICAgICAgICAgICAg
ICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFy
ZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAi
KCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0p
KFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVu
Y3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogWworICAgICAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIs
ICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwKKyAgICAgICAgICAg
ICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyop
KGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25f
YXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWwor
ICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9y
IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAgICAi
a2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2Uu
dHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBh
cmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBp
ZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyop
KGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0
OiAiZnVuY3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAi
ZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBp
ZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVu
Y3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogWworICAgICAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIs
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0
b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFxzKikoOiko
XFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5j
dGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiBbCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwg
InRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
ICAgcmVnZXggOiAiKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAg
ICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/
OiIgKyBrd0JlZm9yZVJlICsgIilcXGIiLAorICAgICAgICAgICAgICAgIG5leHQgOiAicmVnZXhf
YWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVu
Y3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiJdLAorICAgICAgICAgICAgICAg
IHJlZ2V4IDogLyhcLikocyg/OmgoPzppZnR8b3coPzpNb2QoPzplbGVzc0RpYWxvZ3xhbERpYWxv
Zyl8SGVscCkpfGNyb2xsKD86WHxCeSg/OlBhZ2VzfExpbmVzKT98WXxUbyk/fHQoPzpvcHp6enp8
cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/
OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVy
KXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMp
fFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0o
PzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFy
KXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgo
PzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/
OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xh
KD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkp
fHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNl
KXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxp
KD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1
cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0
ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJl
ZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNl
KSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/
OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3Rh
dGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxT
aXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3
YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9m
KXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8
Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8
dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFu
ZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8
b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98
RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8
SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9u
c2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJv
dmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJk
ZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlv
bi5kb20iXSwKKyAgICAgICAgICAgICAgICByZWdleCA6IC8oXC4pKHMoPzp1Yig/OnN0cmluZ0Rh
dGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxl
Y3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86
c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/Okhl
YWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxF
KD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQo
PzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFw
dGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVu
ZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1l
ZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50
KD86c0J5KD86TmFtZXxUYWdOYW1lKXxCeUlkKXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGJsdXIpXGIo
Pz1cKCkvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0
dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuY29uc3RhbnQiXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IC8oXC4pKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8
WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5n
KD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzpl
Y3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpN
TERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkp
fE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8
dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8
cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nl
cyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfElu
ZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpI
ZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5
c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIp
fGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2co
PzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRp
b258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJv
ZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxf
Y29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZv
cm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5k
b3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86
Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNv
ZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8
ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklO
SVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFt
ZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxu
KD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUo
PzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQ
YXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/
OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/
Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNw
b25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGlu
ZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9H
KD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdp
ZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tn
cm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3Vw
cG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNv
bGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dGltZUVuZHxhc3NlcnQpXGIvCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAg
cmVnZXggOiAvLS18XCtcK3xbISQlJiorXC1+XXw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+
PXw+Pj49fDw+fDx8PnwhfCYmfFx8XHx8XD9cOnxcKj18JT18XCs9fFwtPXwmPXxcXj0vLAorICAg
ICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4IDogL1w/fFw6fFwsfFw7fFwuLywKKyAgICAgICAgICAgICAgICBuZXh0ICA6
ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKKyAg
ICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCisgICAgICAgICAgICAgICAg
cmVnZXggOiAvW1xdKX1dLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvPT8vLAor
ICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwKKyAgICAgICAgICAgICAgICByZWdl
eDogL14jIS4qJC8KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgInJlZ2V4X2Fs
bG93ZWQiOiBbCisgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRS
dWxlKCJkb2Mtc3RhcnQiKSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICAgICAgcmVnZXgg
OiAiXFwvXFwqIiwKKyAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnRfcmVnZXhfYWxsb3dl
ZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwK
KyAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKKyAgICAgICAgICAgICAgICBy
ZWdleDogIlxcLyIsCisgICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IiwKKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6ICJcXHMrIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAi
ZW1wdHkiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKKyAgICAgICAgICAgICAgICBuZXh0
OiAic3RhcnQiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleCI6IFsK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5rZXl3b3JkLm9w
ZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18
eFtcXGRhLWZBLUZdezJ9fC4pIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuOiAic3RyaW5nLnJlZ2V4cCIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIvXFx3KiIsCisg
ICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1x7XGQr
LD8oPzpcZCspP31bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LworICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIs
CisgICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8e1xkKyw/KD86XGQrKT99fHss
XGQrfXxbKypdXD98WygpJF4rKj9dLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCisgICAgICAgICAgICAgICAg
cmVnZXg6IC9cfC8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNv
bnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9cW1xePy8s
CisgICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAg
ICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6
IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5rZXl3b3Jk
Lm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17
NH18eFtcXGRhLWZBLUZdezJ9fC4pIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdl
eDogIl0iLAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIsCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAg
ICAgICAgICAgICAgIHJlZ2V4OiAiLSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbjogImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAg
ICAgICAgIG5leHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIKKyAgICAgICAgICAg
IH0KKyAgICAgICAgXSwKKyAgICAgICAgImZ1bmN0aW9uX2FyZ3VtZW50cyI6IFsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCisgICAg
ICAgICAgICAgICAgcmVnZXg6IGlkZW50aWZpZXJSZQorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAiWywgXSsiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
OiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAg
ICAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImNvbW1lbnRfcmVnZXhfYWxsb3dlZCIgOiBb
CisgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQg
OiAicmVnZXhfYWxsb3dlZCJ9LAorICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50
In0KKyAgICAgICAgXSwKKyAgICAgICAgImNvbW1lbnQiIDogWworICAgICAgICAgICAge3Rva2Vu
IDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInN0YXJ0In0sCisgICAgICAg
ICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQifQorICAgICAgICBdLAorICAgICAgICAicXFz
dHJpbmciIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0
YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKKyAgICAgICAgICAgICAgICBuZXh0ICA6ICJx
cXN0cmluZyIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICcifCQnLAorICAgICAgICAgICAgICAgIG5l
eHQgIDogInN0YXJ0IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
VG9rZW46ICJzdHJpbmciCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJxc3Ry
aW5nIiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFu
dC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0
cmluZyIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAorICAgICAgICAgICAgICAgIG5leHQg
IDogInN0YXJ0IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0VG9r
ZW46ICJzdHJpbmciCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9OworCisgICAgdGhp
cy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAorICAgICAgICBb
IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOworfTsKKwor
b29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVz
KTsKKworZXhwb3J0cy5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxp
Z2h0UnVsZXM7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxp
Z2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwor
dmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMi
KS5UZXh0SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBm
dW5jdGlvbigpIHsKKworICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogWyB7
CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAorICAgICAgICAgICAgcmVn
ZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKKyAgICAgICAg
fSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKKyAgICAgICAgICAg
IHJlZ2V4IDogIlxcYlRPRE9cXGIiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGRlZmF1bHRU
b2tlbiA6ICJjb21tZW50LmRvYyIKKyAgICAgICAgfV0KKyAgICB9OworfTsKKworb29wLmluaGVy
aXRzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKKworRG9j
Q29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVu
dAorICAgICAgICByZWdleCA6ICJcXC9cXCooPz1cXCopIiwKKyAgICAgICAgbmV4dCAgOiBzdGFy
dAorICAgIH07Cit9OworCitEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1
bmN0aW9uIChzdGFydCkgeworICAgIHJldHVybiB7CisgICAgICAgIHRva2VuIDogImNvbW1lbnQu
ZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CisgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCisgICAg
ICAgIG5leHQgIDogc3RhcnQKKyAgICB9OworfTsKKworCitleHBvcnRzLkRvY0NvbW1lbnRIaWdo
bGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKKworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOworCit2
YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OworCisoZnVuY3Rpb24oKSB7
CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CisgICAg
ICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CisgICAgfTsKKworICAgIHRo
aXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgeworICAgICAgICB2YXIgbGluZSA9
IGRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMq
XH0pLyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CisKKyAgICAgICAgdmFyIGNv
bHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKKyAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5m
aW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKKworICAgICAg
ICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7
CisKKyAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVu
QnJhY2VQb3Mucm93KSk7CisgICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJv
dywgY29sdW1uLTEpLCBpbmRlbnQpOworICAgIH07CisKKyAgICB0aGlzLiRnZXRJbmRlbnQgPSBm
dW5jdGlvbihsaW5lKSB7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMrKS8p
OworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAiIjsKKyAgICB9OworCit9KS5jYWxsKE1hdGNoaW5n
QnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQg
PSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9iZWhh
dmlvdXIvY3N0eWxlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGli
L29vcCcsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJywgJ2FjZS9s
aWIvbGFuZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
b29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwordmFyIEJlaGF2aW91ciA9IHJlcXVpcmUo
Ii4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgi
Li4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwordmFyIGxhbmcgPSByZXF1aXJl
KCIuLi8uLi9saWIvbGFuZyIpOworCit2YXIgU0FGRV9JTlNFUlRfSU5fVE9LRU5TID0KKyAgICBb
InRleHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIl07Cit2YXIgU0FG
RV9JTlNFUlRfQkVGT1JFX1RPS0VOUyA9CisgICAgWyJ0ZXh0IiwgInBhcmVuLnJwYXJlbiIsICJw
dW5jdHVhdGlvbi5vcGVyYXRvciIsICJjb21tZW50Il07CisKKwordmFyIGF1dG9JbnNlcnRlZEJy
YWNrZXRzID0gMDsKK3ZhciBhdXRvSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBhdXRvSW5zZXJ0ZWRM
aW5lRW5kID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKK3ZhciBtYXliZUlu
c2VydGVkUm93ID0gLTE7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVTdGFydCA9ICIiOwordmFyIG1h
eWJlSW5zZXJ0ZWRMaW5lRW5kID0gIiI7CisKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSBmdW5jdGlv
biAoKSB7CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbiA9IGZ1bmN0
aW9uKGVkaXRvciwgc2Vzc2lvbikgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1
cnNvclBvc2l0aW9uKCk7CisgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9y
KHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICBpZiAoIXRoaXMu
JG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FG
RV9JTlNFUlRfSU5fVE9LRU5TKSkgeworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yMiA9IG5ldyBU
b2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAg
ICAgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IyLmdldEN1cnJlbnRU
b2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfSU5fVE9LRU5TKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQo
KTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpICE9PSBjdXJz
b3Iucm93IHx8CisgICAgICAgICAgICB0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRD
dXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMpOworICAg
IH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLiRtYXRjaFRva2VuVHlwZSA9IGZ1bmN0aW9u
KHRva2VuLCB0eXBlcykgeworICAgICAgICByZXR1cm4gdHlwZXMuaW5kZXhPZih0b2tlbi50eXBl
IHx8IHRva2VuKSA+IC0xOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29y
ZEF1dG9JbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhp
cy5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCBhdXRvSW5zZXJ0ZWRMaW5lRW5k
WzBdKSkKKyAgICAgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgYXV0
b0luc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKKyAgICAgICAgYXV0b0luc2VydGVkTGluZUVuZCA9
IGJyYWNrZXQgKyBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgYXV0b0luc2Vy
dGVkQnJhY2tldHMrKzsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRN
YXliZUluc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbiwgYnJhY2tldCkgeworICAgICAg
ICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgaWYgKCF0aGlz
LmlzTWF5YmVJbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lKSkKKyAgICAgICAgICAgIG1heWJl
SW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iu
cm93OworICAgICAgICBtYXliZUluc2VydGVkTGluZVN0YXJ0ID0gbGluZS5zdWJzdHIoMCwgY3Vy
c29yLmNvbHVtbikgKyBicmFja2V0OworICAgICAgICBtYXliZUluc2VydGVkTGluZUVuZCA9IGxp
bmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOworICAgICAgICBtYXliZUluc2VydGVkQnJhY2tldHMr
KzsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3Np
bmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUsIGJyYWNrZXQpIHsKKyAgICAgICAgcmV0dXJuIGF1
dG9JbnNlcnRlZEJyYWNrZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gYXV0
b0luc2VydGVkUm93ICYmCisgICAgICAgICAgICBicmFja2V0ID09PSBhdXRvSW5zZXJ0ZWRMaW5l
RW5kWzBdICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKSA9PT0gYXV0
b0luc2VydGVkTGluZUVuZDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5pc01h
eWJlSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oY3Vyc29yLCBsaW5lKSB7CisgICAgICAgIHJl
dHVybiBtYXliZUluc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAgICAgICBjdXJzb3Iucm93
ID09PSBtYXliZUluc2VydGVkUm93ICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0cihjdXJzb3Iu
Y29sdW1uKSA9PT0gbWF5YmVJbnNlcnRlZExpbmVFbmQgJiYKKyAgICAgICAgICAgIGxpbmUuc3Vi
c3RyKDAsIGN1cnNvci5jb2x1bW4pID09IG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQ7CisgICAgfTsK
KyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYXV0b0luc2VydGVkTGluZUVu
ZC5zdWJzdHIoMSk7CisgICAgICAgIGF1dG9JbnNlcnRlZEJyYWNrZXRzLS07CisgICAgfTsKKyAg
ICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBtYXliZUluc2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBtYXli
ZUluc2VydGVkUm93ID0gLTE7CisgICAgfTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiaW5z
ZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkg
eworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
aWYgKHRleHQgPT0gJ3snKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdl
dFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRv
Yy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0g
IiIgJiYgc2VsZWN0ZWQgIT09ICJ7IiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAneycgKyBzZWxlY3RlZCArICd9JywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBm
YWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJl
aGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAg
ICAgIGlmICgvW1xdXH1cKV0vLnRlc3QobGluZVtjdXJzb3IuY29sdW1uXSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNz
aW9uLCAifSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJ3t9JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
WzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0KGVk
aXRvciwgc2Vzc2lvbiwgInsiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gJ30nKSB7CisgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vy
c29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQo
J30nLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1
dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgeworICAgICAgICAgICAgICAg
ICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmICh0ZXh0ID09ICJcbiIgfHwgdGV4dCA9PSAiXHJcbiIpIHsKKyAgICAgICAgICAgIHZhciBj
bG9zaW5nID0gIiI7CisgICAgICAgICAgICBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNl
cnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lKSkgeworICAgICAgICAgICAgICAgIGNsb3NpbmcgPSBs
YW5nLnN0cmluZ1JlcGVhdCgifSIsIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyk7CisgICAgICAgICAg
ICAgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJz
b3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09ICd9JyB8fCBjbG9zaW5nICE9PSAiIikgeworICAgICAgICAgICAgICAgIHZhciBvcGVuQnJh
Y2VQb3MgPSBzZXNzaW9uLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzogY3Vyc29yLnJvdywgY29s
dW1uOiBjdXJzb3IuY29sdW1ufSwgJ30nKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9wZW5CcmFj
ZVBvcykKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICAg
ICAgdmFyIGluZGVudCA9IHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoc3RhdGUsIGxpbmUuc3Vic3Ry
aW5nKDAsIGN1cnNvci5jb2x1bW4pLCBzZXNzaW9uLmdldFRhYlN0cmluZygpKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnXG4nICsgaW5k
ZW50ICsgJ1xuJyArIG5leHRfaW5kZW50ICsgY2xvc2luZywKKyAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxlbmd0aF0KKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlz
LmFkZCgiYnJhY2VzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRv
ciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2Mu
Z2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYm
IHNlbGVjdGVkID09ICd7JykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5n
ZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGlu
ZS5zdWJzdHJpbmcocmFuZ2UuZW5kLmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbiArIDEpOworICAg
ICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5l
bmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXliZUluc2VydGVkQnJhY2tldHMtLTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJp
bnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0
KSB7CisgICAgICAgIGlmICh0ZXh0ID09ICcoJykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlv
biA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAo
c2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcoJyAr
IHNlbGVjdGVkICsgJyknLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3Vy
LmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgQ3N0
eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiKSIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcoKScsCisg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICcpJykgeworICAgICAg
ICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICAg
ICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5j
b2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJyknKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCcpJywg
e2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAgICAg
ICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5z
ZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Q3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFj
dGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBz
ZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVs
dGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJygnKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdo
dENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFy
dC5jb2x1bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJyknKSB7CisgICAg
ICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiBy
YW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQo
ImJyYWNrZXRzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJ1snKSB7CisgICAgICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAg
ICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKKyAg
ICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJz
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJ1snICsgc2VsZWN0ZWQgKyAnXScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChD
c3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAg
ICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Np
b24sICJdIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dDogJ1tdJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0g
J10nKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9u
KCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJv
dyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNv
bHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAn
XScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3Blbmlu
Z0JyYWNrZXQoJ10nLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93
fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2
aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgeworICAgICAg
ICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoImJyYWNrZXRzIiwgImRlbGV0aW9uIiwgZnVu
Y3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAg
dmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAg
aWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICdbJykgeworICAgICAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1u
ICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09ICddJykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAo
c3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0
ID09ICciJyB8fCB0ZXh0ID09ICInIikgeworICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsK
KyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsK
KyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxl
Y3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0g
IiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0
OiBxdW90ZSArIHNlbGVjdGVkICsgcXVvdGUsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAg
ICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwor
ICAgICAgICAgICAgICAgIHZhciBsZWZ0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1
bW4tMSwgY3Vyc29yLmNvbHVtbik7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRDaGFyID09ICdc
XCcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2VucyhzZWxlY3Rp
b24uc3RhcnQucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgY29sID0gMCwgdG9rZW47CisgICAg
ICAgICAgICAgICAgdmFyIHF1b3RlcG9zID0gLTE7IC8vIFRyYWNrIHdoZXRoZXIgd2UncmUgaW5z
aWRlIGFuIG9wZW4gcXVvdGUuCisKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8
IHRva2Vucy5sZW5ndGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vu
c1t4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gInN0cmluZyIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IC0xOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHF1b3RlcG9zIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3Rl
cG9zID0gdG9rZW4udmFsdWUuaW5kZXhPZihxdW90ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCh0b2tlbi52YWx1ZS5sZW5ndGggKyBjb2wpID4gc2Vs
ZWN0aW9uLnN0YXJ0LmNvbHVtbikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29sICs9IHRva2Vuc1t4
XS52YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
dG9rZW4gfHwgKHF1b3RlcG9zIDwgMCAmJiB0b2tlbi50eXBlICE9PSAiY29tbWVudCIgJiYgKHRv
a2VuLnR5cGUgIT09ICJzdHJpbmciIHx8ICgoc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiAhPT0gdG9r
ZW4udmFsdWUubGVuZ3RoK2NvbC0xKSAmJiB0b2tlbi52YWx1ZS5sYXN0SW5kZXhPZihxdW90ZSkg
PT09IHRva2VuLnZhbHVlLmxlbmd0aC0xKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Q3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICJzdHJpbmci
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhj
dXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChyaWdodENoYXIgPT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJk
ZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdl
KSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5n
ZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyIn
IHx8IHNlbGVjdGVkID09ICInIikpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5k
b2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9
IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVt
biArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgeworICAgICAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFu
Z2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworfTsKKworb29wLmluaGVy
aXRzKENzdHlsZUJlaGF2aW91ciwgQmVoYXZpb3VyKTsKKworZXhwb3J0cy5Dc3R5bGVCZWhhdmlv
dXIgPSBDc3R5bGVCZWhhdmlvdXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGlu
Zy9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29w
JywgJ2FjZS9yYW5nZScsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4v
bGliL29vcCIpOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKK3Zh
ciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOworCit2YXIg
Rm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKK29vcC5pbmhlcml0
cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5m
b2xkaW5nU3RhcnRNYXJrZXIgPSAvKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLzsKKyAgICB0
aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykv
OworCisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xk
U3R5bGUsIHJvdykgeworICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwor
ICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsK
KyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4Owor
CisgICAgICAgICAgICBpZiAobWF0Y2hbMV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
b3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKKworICAgICAg
ICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFsw
XS5sZW5ndGgsIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvbGRTdHlsZSAhPT0gIm1h
cmtiZWdpbmVuZCIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIG1hdGNoID0g
bGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7
CisgICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOworCisg
ICAgICAgICAgICBpZiAobWF0Y2hbMV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xv
c2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKKyAgICAg
ICAgfQorICAgIH07CisKK30pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKKworfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0
bWF0ZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL3RoZW1lX3Rl
eHRtYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZjY3ZmE0MTE3MGIxZTkzYjM1YzYyZDVhYmI0ODQxMTYy
MWExZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcwpAQCAtMCwwICsxLDE2MyBAQAorLyogKioqKiogQkVH
SU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNl
bnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICog
ICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKK2FjZS5kZWZpbmUoJ2Fj
ZS90aGVtZS90ZXh0bWF0ZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9kb20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworZXhw
b3J0cy5pc0RhcmsgPSBmYWxzZTsKK2V4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLXRtIjsKK2V4cG9y
dHMuY3NzVGV4dCA9ICIuYWNlLXRtIC5hY2VfZ3V0dGVyIHtcCitiYWNrZ3JvdW5kOiAjZjBmMGYw
O1wKK2NvbG9yOiAjMzMzO1wKK31cCisuYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcCit3aWR0
aDogMXB4O1wKK2JhY2tncm91bmQ6ICNlOGU4ZTg7XAorfVwKKy5hY2UtdG0gLmFjZV9mb2xkIHtc
CitiYWNrZ3JvdW5kLWNvbG9yOiAjNkI3MkU2O1wKK31cCisuYWNlLXRtIC5hY2Vfc2Nyb2xsZXIg
e1wKK2JhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XAorfVwKKy5hY2UtdG0gLmFjZV9jdXJzb3Ig
e1wKK2JvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7XAorfVwKKy5hY2UtdG0gLmFjZV9vdmVy
d3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XAorYm9yZGVyLWxlZnQ6IDBweDtcCitib3JkZXIt
Ym90dG9tOiAxcHggc29saWQgYmxhY2s7XAorfVwKKy5hY2UtdG0gLmFjZV9pbnZpc2libGUge1wK
K2NvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7XAorfVwKKy5hY2UtdG0gLmFjZV9zdG9yYWdlLFwK
Ky5hY2UtdG0gLmFjZV9rZXl3b3JkIHtcCitjb2xvcjogYmx1ZTtcCit9XAorLmFjZS10bSAuYWNl
X2NvbnN0YW50IHtcCitjb2xvcjogcmdiKDE5NywgNiwgMTEpO1wKK31cCisuYWNlLXRtIC5hY2Vf
Y29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKK2NvbG9yOiByZ2IoODgsIDcyLCAyNDYpO1wKK31cCisu
YWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCitjb2xvcjogcmdiKDg4LCA5Miwg
MjQ2KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHtcCitjb2xvcjog
cmdiKDYsIDE1MCwgMTQpO1wKK31cCisuYWNlLXRtIC5hY2VfaW52YWxpZCB7XAorYmFja2dyb3Vu
ZC1jb2xvcjogcmdiYSgyNTUsIDAsIDAsIDAuMSk7XAorY29sb3I6IHJlZDtcCit9XAorLmFjZS10
bSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCitjb2xvcjogcmdiKDYwLCA3NiwgMTE0KTtc
Cit9XAorLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCitjb2xvcjogcmdiKDYs
IDE1MCwgMTQpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcCisuYWNlLXRt
IC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3Mge1wKK2NvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XAor
fVwKKy5hY2UtdG0gLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XAorY29sb3I6IHJnYigxMDQs
IDExOCwgMTM1KTtcCit9XAorLmFjZS10bSAuYWNlX3N0cmluZyB7XAorY29sb3I6IHJnYigzLCAx
MDYsIDcpO1wKK31cCisuYWNlLXRtIC5hY2VfY29tbWVudCB7XAorY29sb3I6IHJnYig3NiwgMTM2
LCAxMDcpO1wKK31cCisuYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcCitjb2xvcjogcmdi
KDAsIDEwMiwgMjU1KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFn
IHtcCitjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO1wKK31cCisuYWNlLXRtIC5hY2VfY29uc3Rh
bnQuYWNlX251bWVyaWMge1wKK2NvbG9yOiByZ2IoMCwgMCwgMjA1KTtcCit9XAorLmFjZS10bSAu
YWNlX3ZhcmlhYmxlIHtcCitjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7XAorfVwKKy5hY2UtdG0g
LmFjZV94bWwtcGUge1wKK2NvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTtcCit9XAorLmFjZS10bSAu
YWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24ge1wKK2NvbG9yOiAjMDAwMEEyO1wKK31c
CisuYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHtcCitjb2xvcjogcmdiKDEyLCA3LCAy
NTUpO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9saXN0IHtcCitjb2xvcjpyZ2IoMTg1
LCA2LCAxNDQpO1wKK31cCisuYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHtcCitjb2xvcjpyZ2Io
MCwgMjIsIDE0Mik7XAorfVwKKy5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtcCitjb2xv
cjogcmdiKDI1NSwgMCwgMClcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3Nl
bGVjdGlvbiB7XAorYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKK31cCisuYWNlLXRt
LmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKK2JveC1zaGFkb3c6
IDAgMCAzcHggMHB4IHdoaXRlO1wKK2JvcmRlci1yYWRpdXM6IDJweDtcCit9XAorLmFjZS10bSAu
YWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKK2JhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwg
MCk7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7XAorYmFja2dy
b3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVy
IC5hY2VfYnJhY2tldCB7XAorbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKK2JvcmRlcjogMXB4IHNv
bGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAu
YWNlX2FjdGl2ZS1saW5lIHtcCitiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1wKK31c
CisuYWNlLXRtIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCitiYWNrZ3JvdW5kLWNvbG9yIDog
I2RjZGNkYztcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdv
cmQge1wKK2JhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCitib3JkZXI6IDFweCBzb2xp
ZCByZ2IoMjAwLCAyMDAsIDI1MCk7XAorfVwKKy5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1wK
K2JhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9C
d0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVwiKSByaWdodCByZXBlYXQteTtcCit9XAor
IjsKKwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKK2RvbS5pbXBvcnRDc3NTdHJp
bmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKK30pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCmluZGV4IDVmYmQ0MWVmMTA3NTNhZjI0Y2U2NzExMmYzY2EwZmVjMDMxOGM5
YWEuLmVjZTNiYWU0YjdiN2JkNjYzYjU5ZTI1MTNkZGNmYmEwNjRjNzAxMDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKQEAgLTg0NSw2ICs4NDUsNyBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfcHJvZmlsZXNfanMnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9v
bHNfYXVkaXRzX2pzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29u
Y2F0ZW5hdGVkX2RldnRvb2xzX2NvZGVtaXJyb3JfanMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfYWNlX2VkaXRvcl9qcycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9oZWFwX3Nu
YXBzaG90X3dvcmtlcl9qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2NvbmNhdGVuYXRlZF9zY3JpcHRfZm9ybWF0dGVyX3dvcmtlcl9qcycsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19jc3MnXSwKQEAg
LTkzMyw2ICs5MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdj
b25jYXRlbmF0ZWRfZGV2dG9vbHNfcHJvZmlsZXNfanMnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfYXVkaXRzX2pzJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2Nv
ZGVtaXJyb3JfanMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25j
YXRlbmF0ZWRfZGV2dG9vbHNfYWNlX2VkaXRvcl9qcycsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9oZWFwX3NuYXBzaG90X3dvcmtlcl9qcycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9zY3JpcHRf
Zm9ybWF0dGVyX3dvcmtlcl9qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19jc3MnXSwKQEAgLTk1MCw2ICs5NTIsNyBAQAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVj
dG9yL1Byb2ZpbGVzUGFuZWwuanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBS
T0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0F1ZGl0c1BhbmVsLmpzJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9D
b2RlTWlycm9yVGV4dEVkaXRvci5qcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvQWNlVGV4dEVkaXRvci5qcycsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0
b3IvSGVhcFNuYXBzaG90V29ya2VyLmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIu
anMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJj
ZXMvaW5zcGVjdG9yL2RldlRvb2xzLmNzcycsCkBAIC0xMTg2LDYgKzExODksMjIgQEAKICAgICAg
ICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjb25jYXRlbmF0ZWRfZGV2dG9v
bHNfYWNlX2VkaXRvcl9qcycsCisgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAor
ICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7CisgICAgICAgICAgICAgICAgICAgICAg
ICAnYWN0aW9uX25hbWUnOiAnY29uY2F0ZW5hdGVfZGV2dG9vbHNfYWNlX2VkaXRvcl9qcycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnc2NyaXB0X25hbWUnOiAnc2NyaXB0cy9pbmxpbmVfanNf
aW1wb3J0cy5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRfZmlsZSc6ICcuLi8u
Li9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICc8QChfc2NyaXB0X25hbWUpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAod2Vi
aW5zcGVjdG9yX2FjZV9lZGl0b3JfanNfZmlsZXMpJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3BhdGgnOiAnLi4vLi4vV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRz
JzogWyc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0FjZVRleHRFZGl0b3IuanMn
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbicsICc8QChfc2Ny
aXB0X25hbWUpJywgJzxAKF9pbnB1dF9maWxlKScsICc8QChfc2VhcmNoX3BhdGgpJywgJzxAKF9v
dXRwdXRzKScsICd0cnVlJ10sCisgICAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25h
bWUnOiAnY29uY2F0ZW5hdGVkX2hlYXBfc25hcHNob3Rfd29ya2VyX2pzJywKICAgICAgICAgICAg
ICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzog
W3sK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191174</attachid>
            <date>2013-03-04 01:29:56 -0800</date>
            <delta_ts>2013-03-04 01:48:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111191-20130304132603.patch</filename>
            <type>text/plain</type>
            <size>698422</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkwMzkxMjQxNWM5ZjMw
YzhjMzA4YTkwMDcyZWVjNGNlZWE1MDU3MC4uMTU1MDdlN2RjMGRkZDVhM2MwN2FiZDI2NTlmYjRi
NWRhMDZiY2E2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEzLTAzLTAxICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhZGQgQWNlIGVkaXRvciBleHBlcmltZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkIEFj
ZSB0ZXh0IGVkaXRvciBleHBlcmltZW50LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qczogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeHBlcmltZW50c1NldHRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzczogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qczogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qczogQWRkZWQuCisK
IDIwMTMtMDMtMDQgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlm
IGluc3BlY3RvcidzIHNvdXJjZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggN2JiODcxYjljM2RkZjAzNTNjMDYyMDFhMDQ0OGE4MmQ5MDUwOWIwYS4u
NzM1YjIwZjY2M2Q5ODk3ODY2NGFhYWUxNDJmMTFmNzExNTYzOGE3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMy0wMSAgQW5kcmV5IEx1c2huaWtv
diAgPGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYWRk
IEFjZSBlZGl0b3IgZXhwZXJpbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRhcmdldCB0byBjb25jYXRlbmF0ZSBqcyBmaWxlcyBmb3IgQWNl
IFRleHQgRWRpdG9yLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKwogMjAxMy0wMy0wNCAgQW5k
cmV5IEx1c2huaWtvdiAgPGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogYWRkIHJ1bnRpbWUgZmxhZyB0byBkZXRlcm1pbmUgaWYgaW5zcGVjdG9yJ3Mgc291
cmNlIGZpbGVzIHdlcmUgZmxhdHRlbmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDUzMTIxZGYwYWUy
Njg0MjMxN2RhYTllNDdjMjIxMmJiMTQxYzA3MzUuLmE3MWZlNDc0ZmEzNzRjMjU0MTkyZGU0Mjlm
NjE4NDc2ODJhMGEyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU0MzQsNiArNTQzNCwxMSBAQAog
ICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rvcl9zdGFuZGFsb25lX2ZpbGVzKScsCiAgICAgICAg
IF0sCiAgICAgICAgICd3ZWJpbnNwZWN0b3Jfc3RhbmRhbG9uZV9maWxlcyc6IFsKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5jc3MnLAorICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfY3NzLmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2h0bWwuanMnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2YXNjcmlwdC5qcycsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzUGFuZWwuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL2JyZWFkY3J1bWJMaXN0LmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9idWlsZFN5c3RlbU9ubHkuanMnLApAQCAtNTU2Niw2ICs1NTcxLDExIEBACiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9jbS94bWwuanMnLAogICAgICAgICBdLAog
CisgICAgICAgICd3ZWJpbnNwZWN0b3JfYWNlX2VkaXRvcl9qc19maWxlcyc6IFsKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcycsCisgICAgICAgIF0sCisKICAgICAgICAg
J3dlYmluc3BlY3Rvcl9tb2R1bGVzX2pzX2ZpbGVzJzogWwogICAgICAgICAgICAgJzxAKHdlYmlu
c3BlY3Rvcl9lbGVtZW50c19qc19maWxlcyknLAogICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rv
cl9yZXNvdXJjZXNfanNfZmlsZXMpJywKQEAgLTU1NzUsNiArNTU4NSw3IEBACiAgICAgICAgICAg
ICAnPEAod2ViaW5zcGVjdG9yX3Byb2ZpbGVzX2pzX2ZpbGVzKScsCiAgICAgICAgICAgICAnPEAo
d2ViaW5zcGVjdG9yX2F1ZGl0c19qc19maWxlcyknLAogICAgICAgICAgICAgJzxAKHdlYmluc3Bl
Y3Rvcl9jb2RlbWlycm9yX2pzX2ZpbGVzKScsCisgICAgICAgICAgICAnPEAod2ViaW5zcGVjdG9y
X2FjZV9lZGl0b3JfanNfZmlsZXMpJywKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rv
cl91Z2xpZnlqc19maWxlcyc6IFsKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Vn
bGlmeUpTL3BhcnNlLWpzLmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDU0MjJlZjczNjJkOThmMTJm
YmI2ODJlMTg0M2ZkNGIyODVhNmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCkBAIC0wLDAgKzEsMzc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9y
dFNjcmlwdCgiYWNlL2FjZS5qcyIpOworCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3J9CisgKiBAcGFyYW0gez9zdHJpbmd9IHVybAorICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckRlbGVnYXRlfSBkZWxlZ2F0ZQorICovCisKK1dlYkluc3BlY3Rvci5BY2VU
ZXh0RWRpdG9yID0gZnVuY3Rpb24odXJsLCBkZWxlZ2F0ZSkKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5jYWxsKHRoaXMpOworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgdGhp
cy5fdXJsID0gdXJsOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlLWVkaXRvci1j
b250YWluZXIiOworCisgICAgdmFyIHByZWZpeCA9IHdpbmRvdy5mbGF0dGVuSW1wb3J0cyA/ICIi
IDogImFjZS8iOworICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2Ny
aXB0IiwgcHJlZml4ICsgIm1vZGVfamF2YXNjcmlwdC5qcyIpOworICAgIGFjZS5jb25maWcuc2V0
TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4ICsgIm1vZGVfY3NzLmpzIik7
CisgICAgYWNlLmNvbmZpZy5zZXRNb2R1bGVVcmwoImFjZS9tb2RlL2phdmFzY3JpcHQiLCBwcmVm
aXggKyAibW9kZV9odG1sLmpzIik7CisgICAgYWNlLmNvbmZpZy5zZXRNb2R1bGVVcmwoImFjZS90
aGVtZS90ZXh0bWF0ZSIsIHByZWZpeCArICJ0aGVtZV90ZXh0bWF0ZS5qcyIpOworICAgIHRoaXMu
X2FjZUVkaXRvciA9IHdpbmRvdy5hY2UuZWRpdCh0aGlzLmVsZW1lbnQpOworCisgICAgdGhpcy5f
YWNlRWRpdG9yLnNldFNob3dGb2xkV2lkZ2V0cyhmYWxzZSk7CisgICAgdGhpcy5fYWNlRWRpdG9y
Lm9uKCJndXR0ZXJjbGljayIsIHRoaXMuX2d1dHRlckNsaWNrLmJpbmQodGhpcykpOworICAgIHRo
aXMuX2FjZUVkaXRvci5vbigiY2hhbmdlIiwgdGhpcy5fb25UZXh0Q2hhbmdlLmJpbmQodGhpcykp
OworICAgIHRoaXMuX2FjZUVkaXRvci5zZXRIaWdobGlnaHRBY3RpdmVMaW5lKGZhbHNlKTsKKyAg
ICB0aGlzLl9hY2VFZGl0b3Iuc2Vzc2lvbi5zZXRVc2VXb3JrZXIoZmFsc2UpOworICAgIHRoaXMu
cmVnaXN0ZXJSZXF1aXJlZENTUygiYWNlL2FjZWRldnRvb2xzLmNzcyIpOworfQorCitXZWJJbnNw
ZWN0b3IuQWNlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CisKKyAgICBfb25UZXh0Q2hhbmdlOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVGV4dENoYW5n
ZWQobnVsbCwgbnVsbCk7CisgICAgfSwKKworICAgIF9ndXR0ZXJDbGljazogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICB2YXIgbGluZU51bWJlciA9IHBhcnNlSW50KGV2ZW50LmRvbUV2
ZW50LnRhcmdldC50ZXh0Q29udGVudCkgLSAxOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5FdmVudHMuR3V0dGVyQ2xpY2ssIHsg
bGluZU51bWJlcjogbGluZU51bWJlciwgZXZlbnQ6IGV2ZW50LmRvbUV2ZW50IH0pOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWltZVR5cGUKKyAgICAgKi8KKyAg
ICBzZXQgbWltZVR5cGUobWltZVR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gobWltZVR5cGUp
IHsKKyAgICAgICAgY2FzZSAidGV4dC9odG1sIjoKKyAgICAgICAgICAgIHRoaXMuX2FjZUVkaXRv
ci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvaHRtbCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgInRleHQvY3NzIjoKKyAgICAgICAgICAgIHRoaXMuX2FjZUVkaXRv
ci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvY3NzIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAidGV4dC9qYXZhc2NyaXB0IjoKKyAgICAgICAgICAgIHRoaXMuX2Fj
ZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvamF2YXNjcmlwdCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtib29sZWFufSByZWFkT25seQorICAgICAqLworICAgIHNldFJlYWRPbmx5OiBmdW5jdGlv
bihyZWFkT25seSkKKyAgICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5zZXRSZWFkT25seShy
ZWFkT25seSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Cisg
ICAgICovCisgICAgcmVhZE9ubHk6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9hY2VFZGl0b3IuZ2V0UmVhZE9ubHkoKTsKKyAgICB9LAorCisgICAgZm9jdXM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5mb2N1cygpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQorICAgICAqLworICAgIGRlZmF1bHRG
b2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxl
bWVudC5maXJzdENoaWxkOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gcmVnZXgKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MKKyAgICAgKiBAcmV0dXJu
IHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5IaWdobGlnaHREZXNjcmlwdG9yfQor
ICAgICAqLworICAgIGhpZ2hsaWdodFJlZ2V4OiBmdW5jdGlvbihyZWdleCwgY3NzQ2xhc3MpCisg
ICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodFJlZ2V4IG5vdCBp
bXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCisg
ICAgICovCisgICAgaGlnaGxpZ2h0UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCBjc3NDbGFzcykKKyAg
ICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuaGlnaGxpZ2h0UmFuZ2Ugbm90IGlt
cGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0gaGlnaGxpZ2h0RGVz
Y3JpcHRvcgorICAgICAqLworICAgIHJlbW92ZUhpZ2hsaWdodDogZnVuY3Rpb24oaGlnaGxpZ2h0
RGVzY3JpcHRvcikKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmVtb3Zl
SGlnaGxpZ2h0IG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIHJldmVhbExpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLnNjcm9sbFRvTGluZShs
aW5lTnVtYmVyLCBmYWxzZSwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZAor
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uZGl0aW9uYWwKKyAgICAgKi8KKyAgICBhZGRCcmVh
a3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkaXNhYmxlZCwgY29uZGl0aW9uYWwpCisgICAg
eworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLnNldEJyZWFrcG9pbnQobGlu
ZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICovCisgICAgcmVtb3ZlQnJlYWtwb2lu
dDogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5n
ZXRTZXNzaW9uKCkuY2xlYXJCcmVha3BvaW50KGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIHNldEV4
ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLnNldEV4ZWN1dGlvbkxpbmUgbm90IGltcGxlbWVudGVkIik7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFu
Z2UKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgY29weVJhbmdlOiBmdW5j
dGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuY29weVJh
bmdlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfSwKKworICAg
IGNsZWFyRXhlY3V0aW9uTGluZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5s
b2coImFjZUVkaXRvci5jbGVhckV4ZWN1dGlvbkxpbmUgbm90IGltcGxlbWVudGVkIik7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICog
QHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgICAgICovCisgICAgYWRkRGVjb3JhdGlvbjogZnVu
Y3Rpb24obGluZU51bWJlciwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJh
Y2VFZGl0b3IuYWRkRGVjb3JhdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge0Vs
ZW1lbnR9IGVsZW1lbnQKKyAgICAgKi8KKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBlbGVtZW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRv
ci5yZW1vdmVEZWNvcmF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICovCisg
ICAgbWFya0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIGNv
bnNvbGUubG9nKCJhY2VFZGl0b3IubWFya0FuZFJldmVhbFJhbmdlIG5vdCBpbXBsZW1lbnRlZCIp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgor
ICAgICAqLworICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgewor
ICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodExpbmUgbm90IGltcGxlbWVu
dGVkIik7CisgICAgfSwKKworICAgIGNsZWFyTGluZUhpZ2hsaWdodDogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IuY2xlYXJMaW5lSGlnaGxpZ2h0IG5vdCBpbXBs
ZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48RWxl
bWVudD59CisgICAgICovCisgICAgZWxlbWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3I6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbXTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcn0gdGV4dEVkaXRvcgorICAg
ICAqLworICAgIGluaGVyaXRTY3JvbGxQb3NpdGlvbnM6IGZ1bmN0aW9uKHRleHRFZGl0b3IpCisg
ICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmluaGVyaXRTY3JvbGxQb3NpdGlv
bnMgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rp
b24oKSB7IH0sCisKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpIHsgfSwKKworICAgIG9uUmVz
aXplOiBmdW5jdGlvbigpIHsgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRSYW5nZX0gcmFuZ2UKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAorICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAgICovCisgICAgZWRpdFJhbmdl
OiBmdW5jdGlvbihyYW5nZSwgdGV4dCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VF
ZGl0b3IuZWRpdFJhbmdlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIHNjcm9sbFRvTGlu
ZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5z
Y3JvbGxUb0xpbmUobGluZU51bWJlciwgZmFsc2UsIHRydWUpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQorICAgICAqLworICAgIHNl
bGVjdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRv
ci5zZWxlY3Rpb24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2U/fQorICAgICAqLworICAgIGxhc3RTZWxl
Y3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iu
bGFzdFNlbGVjdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKKyAgICAgKi8KKyAg
ICBzZXRTZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKKyAgICB7CisgICAgICAgIGNvbnNv
bGUubG9nKCJhY2VFZGl0b3Iuc2V0U2VsZWN0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAorICAgICAqLworICAgIHNl
dFRleHQ6IGZ1bmN0aW9uKHRleHQpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0
U2Vzc2lvbigpLnNldFZhbHVlKHRleHQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgdGV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KKyAg
ICAgKi8KKyAgICByYW5nZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2co
ImFjZUVkaXRvci5yYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9
CisgICAgICovCisgICAgbGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExpbmUobGluZU51bWJlcik7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAg
ICBnZXQgbGluZXNDb3VudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjZUVkaXRvci5nZXRT
ZXNzaW9uKCkuZ2V0TGVuZ3RoKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcGFyYW0g
e09iamVjdD99IHZhbHVlCisgICAgICovCisgICAgc2V0QXR0cmlidXRlOiBmdW5jdGlvbihsaW5l
LCBuYW1lLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iuc2V0
QXR0cmlidXRlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICog
QHJldHVybiB7T2JqZWN0fG51bGx9IHZhbHVlCisgICAgICovCisgICAgZ2V0QXR0cmlidXRlOiBm
dW5jdGlvbihsaW5lLCBuYW1lKQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRv
ci5nZXRBdHRyaWJ1dGUgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAg
ICAgKi8KKyAgICByZW1vdmVBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIG5hbWUpCisgICAgewor
ICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnJlbW92ZUF0dHJpYnV0ZSBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICB9LAorCisgICAgd2FzU2hvd246IGZ1bmN0aW9uKCkgeyB9LAorCisgICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IGFkNjk4NWRhMzI2ZWIx
NzA1MTJlODEzZDc0NjhlMDc1Y2E0YmU2NGUuLmM2OTRiODk4ODIzOTc4ZjBlN2VhZjg2MjdjMGE4
YTIyNDRmZDZkZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2V0dGluZ3MuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
ZXR0aW5ncy5qcwpAQCAtMjEwLDYgKzIxMCw3IEBAIFdlYkluc3BlY3Rvci5FeHBlcmltZW50c1Nl
dHRpbmdzID0gZnVuY3Rpb24oKQogICAgIHRoaXMuY2FudmFzSW5zcGVjdGlvbiA9IHRoaXMuX2Ny
ZWF0ZUV4cGVyaW1lbnQoImNhbnZhc0luc3BlY3Rpb24gIiwgIkNhbnZhcyBpbnNwZWN0aW9uIik7
CiAgICAgdGhpcy5zYXNzID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgic2FzcyIsICJTdXBwb3J0
IGZvciBTYXNzIik7CiAgICAgdGhpcy5jb2RlbWlycm9yID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVu
dCgiY29kZW1pcnJvciIsICJVc2UgQ29kZU1pcnJvciBlZGl0b3IiKTsKKyAgICB0aGlzLmFjZVRl
eHRFZGl0b3IgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJhY2VUZXh0RWRpdG9yIiwgIlVzZSBB
Y2UgZWRpdG9yIik7CiAgICAgdGhpcy5jc3NSZWdpb25zID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVu
dCgiY3NzUmVnaW9ucyIsICJDU1MgUmVnaW9ucyBTdXBwb3J0Iik7CiAgICAgdGhpcy5zaG93T3Zl
cnJpZGVzSW5EcmF3ZXIgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJzaG93T3ZlcnJpZGVzSW5E
cmF3ZXIiLCAiU2hvdyBPdmVycmlkZXMgaW4gZHJhd2VyIik7CiAgICAgdGhpcy5maWxlU3lzdGVt
UHJvamVjdCA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImZpbGVTeXN0ZW1Qcm9qZWN0IiwgIkZp
bGUgc3lzdGVtIGZvbGRlcnMgaW4gU291cmNlcyBQYW5lbCIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggZjk2ZjI3NzM1Mjdi
NTRkN2FjZjJmYTlkMmI3ZmMxNmNkN2U2M2Q3Yi4uMjFiNTRlMjc2MTdhZmQ3MTZlNmZhNTU1M2Yz
M2ZiMjUyNjBkMWRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC00Niw2ICs0Niw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZSA9IGZ1bmN0aW9uKGNvbnRlbnRQcm92aWRlcikKICAgICBpZiAoV2ViSW5zcGVjdG9yLmV4
cGVyaW1lbnRzU2V0dGluZ3MuY29kZW1pcnJvci5pc0VuYWJsZWQoKSkgewogICAgICAgICBsb2Fk
U2NyaXB0KCJDb2RlTWlycm9yVGV4dEVkaXRvci5qcyIpOwogICAgICAgICB0aGlzLl90ZXh0RWRp
dG9yID0gbmV3IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvcih0aGlzLl91cmwsIHRl
eHRFZGl0b3JEZWxlZ2F0ZSk7CisgICAgfSBlbHNlIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVu
dHNTZXR0aW5ncy5hY2VUZXh0RWRpdG9yLmlzRW5hYmxlZCgpKSB7CisgICAgICAgIGxvYWRTY3Jp
cHQoIkFjZVRleHRFZGl0b3IuanMiKTsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBX
ZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRvcih0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9y
LkRlZmF1bHRUZXh0RWRpdG9yKHRoaXMuX3VybCwgdGV4dEVkaXRvckRlbGVnYXRlKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE5ZDFiMDAzOWYzMjEzZGY1ZWIxNjA2NDRjMGU2NGI4YTg3MGYxNzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMKQEAgLTAs
MCArMSwxNDQ2OCBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx
MCwgQWpheC5vcmcgQi5WLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhl
CisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NL
ICoqKioqICovCisKKyhmdW5jdGlvbigpIHsKKwordmFyIEFDRV9OQU1FU1BBQ0UgPSAiYWNlIjsK
KwordmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpczsKK30pKCk7CisK
KworaWYgKCFBQ0VfTkFNRVNQQUNFICYmIHR5cGVvZiByZXF1aXJlanMgIT09ICJ1bmRlZmluZWQi
KQorICAgIHJldHVybjsKKworCit2YXIgX2RlZmluZSA9IGZ1bmN0aW9uKG1vZHVsZSwgZGVwcywg
cGF5bG9hZCkgeworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAnc3RyaW5nJykgeworICAgICAg
ICBpZiAoX2RlZmluZS5vcmlnaW5hbCkKKyAgICAgICAgICAgIF9kZWZpbmUub3JpZ2luYWwuYXBw
bHkod2luZG93LCBhcmd1bWVudHMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoJ2Ryb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuXCd0IGEgc3RyaW5n
LicpOworICAgICAgICAgICAgY29uc29sZS50cmFjZSgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKQorICAgICAgICBw
YXlsb2FkID0gZGVwczsKKworICAgIGlmICghX2RlZmluZS5tb2R1bGVzKQorICAgICAgICBfZGVm
aW5lLm1vZHVsZXMgPSB7fTsKKworICAgIF9kZWZpbmUubW9kdWxlc1ttb2R1bGVdID0gcGF5bG9h
ZDsKK307Cit2YXIgX3JlcXVpcmUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlLCBjYWxsYmFj
aykgeworICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobW9kdWxlKSA9PT0g
IltvYmplY3QgQXJyYXldIikgeworICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gbW9kdWxlLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGRlcCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlW2ldKTsKKyAgICAgICAgICAgIGlm
ICghZGVwICYmIF9yZXF1aXJlLm9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHJldHVybiBfcmVx
dWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBwYXJh
bXMucHVzaChkZXApOworICAgICAgICB9CisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnc3RyaW5nJykgeworICAgICAgICB2YXIgcGF5
bG9hZCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlKTsKKyAgICAgICAgaWYgKCFwYXlsb2FkICYm
IF9yZXF1aXJlLm9yaWdpbmFsKQorICAgICAgICAgICAgcmV0dXJuIF9yZXF1aXJlLm9yaWdpbmFs
LmFwcGx5KHdpbmRvdywgYXJndW1lbnRzKTsKKworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGF5bG9h
ZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfcmVxdWlyZS5vcmlnaW5hbCkKKyAg
ICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3VtZW50
cyk7CisgICAgfQorfTsKKwordmFyIG5vcm1hbGl6ZU1vZHVsZSA9IGZ1bmN0aW9uKHBhcmVudElk
LCBtb2R1bGVOYW1lKSB7CisgICAgaWYgKG1vZHVsZU5hbWUuaW5kZXhPZigiISIpICE9PSAtMSkg
eworICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOworICAgICAgICBy
ZXR1cm4gbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgbm9ybWFs
aXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMV0pOworICAgIH0KKyAgICBpZiAobW9kdWxlTmFt
ZS5jaGFyQXQoMCkgPT0gIi4iKSB7CisgICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQo
Ii8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOworICAgICAgICBtb2R1bGVOYW1lID0gYmFzZSAr
ICIvIiArIG1vZHVsZU5hbWU7CisKKyAgICAgICAgd2hpbGUobW9kdWxlTmFtZS5pbmRleE9mKCIu
IikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUpIHsKKyAgICAgICAgICAgIHZhciBw
cmV2aW91cyA9IG1vZHVsZU5hbWU7CisgICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFt
ZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1vZHVsZU5hbWU7Cit9OwordmFyIGxvb2t1
cCA9IGZ1bmN0aW9uKHBhcmVudElkLCBtb2R1bGVOYW1lKSB7CisKKyAgICBtb2R1bGVOYW1lID0g
bm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBtb2R1bGVOYW1lKTsKKworICAgIHZhciBtb2R1bGUg
PSBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV07CisgICAgaWYgKCFtb2R1bGUpIHsKKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdmdW5j
dGlvbicpIHsKKyAgICAgICAgdmFyIGV4cG9ydHMgPSB7fTsKKyAgICAgICAgdmFyIG1vZCA9IHsK
KyAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLAorICAgICAgICAgICAgdXJpOiAnJywKKyAgICAg
ICAgICAgIGV4cG9ydHM6IGV4cG9ydHMsCisgICAgICAgICAgICBwYWNrYWdlZDogdHJ1ZQorICAg
ICAgICB9OworCisgICAgICAgIHZhciByZXEgPSBmdW5jdGlvbihtb2R1bGUsIGNhbGxiYWNrKSB7
CisgICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUobW9kdWxlTmFtZSwgbW9kdWxlLCBjYWxsYmFj
ayk7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIHJldHVyblZhbHVlID0gbW9kdWxlKHJlcSwg
ZXhwb3J0cywgbW9kKTsKKyAgICAgICAgZXhwb3J0cyA9IHJldHVyblZhbHVlIHx8IG1vZC5leHBv
cnRzOworICAgICAgICBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBleHBvcnRzOworICAg
ICAgICByZXR1cm4gZXhwb3J0czsKKyAgICB9CisKKyAgICByZXR1cm4gbW9kdWxlOworfTsKKwor
ZnVuY3Rpb24gZXhwb3J0QWNlKG5zKSB7CisgICAgdmFyIHJlcXVpcmUgPSBmdW5jdGlvbihtb2R1
bGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiBfcmVxdWlyZSgiIiwgbW9kdWxlLCBjYWxs
YmFjayk7CisgICAgfTsgICAgCisKKyAgICB2YXIgcm9vdCA9IGdsb2JhbDsKKyAgICBpZiAobnMp
IHsKKyAgICAgICAgaWYgKCFnbG9iYWxbbnNdKQorICAgICAgICAgICAgZ2xvYmFsW25zXSA9IHt9
OworICAgICAgICByb290ID0gZ2xvYmFsW25zXTsKKyAgICB9CisKKyAgICBpZiAoIXJvb3QuZGVm
aW5lIHx8ICFyb290LmRlZmluZS5wYWNrYWdlZCkgeworICAgICAgICBfZGVmaW5lLm9yaWdpbmFs
ID0gcm9vdC5kZWZpbmU7CisgICAgICAgIHJvb3QuZGVmaW5lID0gX2RlZmluZTsKKyAgICAgICAg
cm9vdC5kZWZpbmUucGFja2FnZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghcm9vdC5yZXF1
aXJlIHx8ICFyb290LnJlcXVpcmUucGFja2FnZWQpIHsKKyAgICAgICAgX3JlcXVpcmUub3JpZ2lu
YWwgPSByb290LnJlcXVpcmU7CisgICAgICAgIHJvb3QucmVxdWlyZSA9IHJlcXVpcmU7CisgICAg
ICAgIHJvb3QucmVxdWlyZS5wYWNrYWdlZCA9IHRydWU7CisgICAgfQorfQorCitleHBvcnRBY2Uo
QUNFX05BTUVTUEFDRSk7CisKK30pKCk7CisKK2FjZS5kZWZpbmUoJ2FjZS9hY2UnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZml4b2xkYnJvd3NlcnMnLCAnYWNl
L2xpYi9kb20nLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvZWRpdG9yJywgJ2FjZS9lZGl0X3Nlc3Np
b24nLCAnYWNlL3VuZG9tYW5hZ2VyJywgJ2FjZS92aXJ0dWFsX3JlbmRlcmVyJywgJ2FjZS9tdWx0
aV9zZWxlY3QnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2FjZS9rZXlib2FyZC9oYXNo
X2hhbmRsZXInLCAnYWNlL3BsYWNlaG9sZGVyJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2Rl
JywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KworcmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsKKwordmFyIGRvbSA9IHJlcXVpcmUo
Ii4vbGliL2RvbSIpOwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKKwordmFy
IEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwordmFyIEVkaXRTZXNzaW9uID0g
cmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKK3ZhciBVbmRvTWFuYWdlciA9
IHJlcXVpcmUoIi4vdW5kb21hbmFnZXIiKS5VbmRvTWFuYWdlcjsKK3ZhciBSZW5kZXJlciA9IHJl
cXVpcmUoIi4vdmlydHVhbF9yZW5kZXJlciIpLlZpcnR1YWxSZW5kZXJlcjsKK3ZhciBNdWx0aVNl
bGVjdCA9IHJlcXVpcmUoIi4vbXVsdGlfc2VsZWN0IikuTXVsdGlTZWxlY3Q7CityZXF1aXJlKCIu
L3dvcmtlci93b3JrZXJfY2xpZW50Iik7CityZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxl
ciIpOworcmVxdWlyZSgiLi9wbGFjZWhvbGRlciIpOworcmVxdWlyZSgiLi9tb2RlL2ZvbGRpbmcv
Zm9sZF9tb2RlIik7CitleHBvcnRzLmNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7CitleHBv
cnRzLnJlcXVpcmUgPSByZXF1aXJlOworZXhwb3J0cy5lZGl0ID0gZnVuY3Rpb24oZWwpIHsKKyAg
ICBpZiAodHlwZW9mKGVsKSA9PSAic3RyaW5nIikgeworICAgICAgICB2YXIgX2lkID0gZWw7Cisg
ICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9pZCk7CisgICAgICAgIGlm
ICghZWwpCisgICAgICAgICAgICB0aHJvdyAiYWNlLmVkaXQgY2FuJ3QgZmluZCBkaXYgIyIgKyBf
aWQ7CisgICAgfQorCisgICAgaWYgKGVsLmVudiAmJiBlbC5lbnYuZWRpdG9yIGluc3RhbmNlb2Yg
RWRpdG9yKQorICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjsKKworICAgIHZhciBkb2MgPSBl
eHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uKGRvbS5nZXRJbm5lclRleHQoZWwpKTsKKyAgICBlbC5p
bm5lckhUTUwgPSAnJzsKKworICAgIHZhciBlZGl0b3IgPSBuZXcgRWRpdG9yKG5ldyBSZW5kZXJl
cihlbCkpOworICAgIG5ldyBNdWx0aVNlbGVjdChlZGl0b3IpOworICAgIGVkaXRvci5zZXRTZXNz
aW9uKGRvYyk7CisKKyAgICB2YXIgZW52ID0geworICAgICAgICBkb2N1bWVudDogZG9jLAorICAg
ICAgICBlZGl0b3I6IGVkaXRvciwKKyAgICAgICAgb25SZXNpemU6IGVkaXRvci5yZXNpemUuYmlu
ZChlZGl0b3IpCisgICAgfTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih3aW5kb3csICJyZXNpemUi
LCBlbnYub25SZXNpemUpOworICAgIGVsLmVudiA9IGVkaXRvci5lbnYgPSBlbnY7CisgICAgcmV0
dXJuIGVkaXRvcjsKK307CitleHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4
dCwgbW9kZSkgeworICAgIHZhciBkb2MgPSBuZXcgRWRpdFNlc3Npb24odGV4dCwgZG9jKTsKKyAg
ICBkb2Muc2V0VW5kb01hbmFnZXIobmV3IFVuZG9NYW5hZ2VyKCkpOworICAgIHJldHVybiBkb2M7
Cit9CitleHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247CitleHBvcnRzLlVuZG9NYW5h
Z2VyID0gVW5kb01hbmFnZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9maXhvbGRicm93
c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9yZWdleHAn
LCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCityZXF1aXJlKCIuL3JlZ2V4cCIpOworcmVxdWlyZSgiLi9lczUtc2hpbSIpOworCit9
KTsKKyAKK2FjZS5kZWZpbmUoJ2FjZS9saWIvcmVnZXhwJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICAg
IHZhciByZWFsID0geworICAgICAgICAgICAgZXhlYzogUmVnRXhwLnByb3RvdHlwZS5leGVjLAor
ICAgICAgICAgICAgdGVzdDogUmVnRXhwLnByb3RvdHlwZS50ZXN0LAorICAgICAgICAgICAgbWF0
Y2g6IFN0cmluZy5wcm90b3R5cGUubWF0Y2gsCisgICAgICAgICAgICByZXBsYWNlOiBTdHJpbmcu
cHJvdG90eXBlLnJlcGxhY2UsCisgICAgICAgICAgICBzcGxpdDogU3RyaW5nLnByb3RvdHlwZS5z
cGxpdAorICAgICAgICB9LAorICAgICAgICBjb21wbGlhbnRFeGVjTnBjZyA9IHJlYWwuZXhlYy5j
YWxsKC8oKT8/LywgIiIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5kbGlu
ZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHMKKyAgICAgICAgY29tcGxpYW50
TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHggPSAv
Xi9nOworICAgICAgICAgICAgcmVhbC50ZXN0LmNhbGwoeCwgIiIpOworICAgICAgICAgICAgcmV0
dXJuICF4Lmxhc3RJbmRleDsKKyAgICAgICAgfSgpOworCisgICAgaWYgKGNvbXBsaWFudExhc3RJ
bmRleEluY3JlbWVudCAmJiBjb21wbGlhbnRFeGVjTnBjZykKKyAgICAgICAgcmV0dXJuOworICAg
IFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHsKKyAgICAgICAgdmFyIG1h
dGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCisgICAgICAgICAgICBuYW1l
LCByMjsKKyAgICAgICAgaWYgKCB0eXBlb2Yoc3RyKSA9PSAnc3RyaW5nJyAmJiBtYXRjaCkgewor
ICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxICYm
IGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAo
dGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5hdGl2ZUZsYWdzKHRoaXMpLCAiZyIs
ICIiKSk7CisgICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNlLmNhbGwoc3RyLnNsaWNlKG1hdGNo
LmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlz
Ll94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbaSAtIDFdOworICAgICAg
ICAgICAgICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFt
ZV0gPSBtYXRjaFtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiB0aGlzLmdsb2JhbCAmJiAh
bWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA+IG1hdGNoLmluZGV4KSkKKyAgICAg
ICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
YXRjaDsKKyAgICB9OworICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50KSB7Cisg
ICAgICAgIFJlZ0V4cC5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uIChzdHIpIHsKKyAgICAgICAg
ICAgIHZhciBtYXRjaCA9IHJlYWwuZXhlYy5jYWxsKHRoaXMsIHN0cik7CisgICAgICAgICAgICBp
ZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0
SW5kZXggPiBtYXRjaC5pbmRleCkpCisgICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsK
KyAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOworICAgICAgICB9OworICAgIH0KKworICAgIGZ1
bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgeworICAgICAgICByZXR1cm4gKHJlZ2V4Lmds
b2JhbCAgICAgPyAiZyIgOiAiIikgKworICAgICAgICAgICAgICAgKHJlZ2V4Lmlnbm9yZUNhc2Ug
PyAiaSIgOiAiIikgKworICAgICAgICAgICAgICAgKHJlZ2V4Lm11bHRpbGluZSAgPyAibSIgOiAi
IikgKworICAgICAgICAgICAgICAgKHJlZ2V4LmV4dGVuZGVkICAgPyAieCIgOiAiIikgKyAvLyBQ
cm9wb3NlZCBmb3IgRVM0OyBpbmNsdWRlZCBpbiBBUzMKKyAgICAgICAgICAgICAgIChyZWdleC5z
dGlja3kgICAgID8gInkiIDogIiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluZGV4T2YgKGFy
cmF5LCBpdGVtLCBmcm9tKSB7CisgICAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikg
Ly8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2YWlsYWJsZQorICAgICAgICAgICAg
cmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSwgZnJvbSk7CisgICAgICAgIGZvciAodmFyIGkgPSBm
cm9tIHx8IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGFycmF5
W2ldID09PSBpdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGliL2VzNS1z
aGltJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworZnVuY3Rpb24gRW1wdHkoKSB7fQorCitpZiAoIUZ1bmN0
aW9uLnByb3RvdHlwZS5iaW5kKSB7CisgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5j
dGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCisgICAgICAgIHZhciB0YXJnZXQgPSB0
aGlzOworICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQg
b24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOworICAgICAgICB9CisgICAgICAgIHZhciBhcmdz
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKKyAgICAgICAg
dmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5j
ZW9mIGJvdW5kKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5
KAorICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICBhcmdzLmNv
bmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGFyZ2V0LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICB0aGF0LAorICAgICAgICAgICAg
ICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAgICAg
ICAgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgIH07CisgICAgICAgIGlmKHRhcmdldC5w
cm90b3R5cGUpIHsKKyAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5
cGU7CisgICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKKyAgICAgICAg
ICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJv
dW5kOworICAgIH07Cit9Cit2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwordmFy
IHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5wcm90b3R5cGU7Cit2YXIgcHJvdG90eXBlT2ZPYmpl
Y3QgPSBPYmplY3QucHJvdG90eXBlOwordmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGlj
ZTsKK3ZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcp
OwordmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkp
OwordmFyIGRlZmluZUdldHRlcjsKK3ZhciBkZWZpbmVTZXR0ZXI7Cit2YXIgbG9va3VwR2V0dGVy
OwordmFyIGxvb2t1cFNldHRlcjsKK3ZhciBzdXBwb3J0c0FjY2Vzc29yczsKK2lmICgoc3VwcG9y
dHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIp
KSkgeworICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2Rl
ZmluZUdldHRlcl9fKTsKKyAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZP
YmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CisgICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHBy
b3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOworICAgIGxvb2t1cFNldHRlciA9IGNh
bGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKK30KK2lmIChbMSwy
XS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKKyAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJ
RSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CisgICAgICAgIGZ1bmN0aW9uIG1h
a2VBcnJheShsKSB7CisgICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOworICAgICAg
ICAgICAgYVswXSA9IGFbMV0gPSAwOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKKyAgICAgICAgCisgICAgICAg
IGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CisgICAgICAgIGFycmF5
LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CisKKyAgICAgICAgbGVuZ3RoQmVm
b3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CisgICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAiWFhY
Iik7IC8vIGFkZCBvbmUgZWxlbWVudAorCisgICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0gYXJy
YXkubGVuZ3RoCisKKyAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3Ro
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVu
dGF0aW9uIHdpdGhvdXQgYnVncworICAgICAgICB9CisgICAgfSgpKSB7Ly9JRSA2LzcKKyAgICAg
ICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CisgICAgICAgIEFy
cmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKKyAg
ICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVy
biBbXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5
X3NwbGljZS5hcHBseSh0aGlzLCBbCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lk
IDAgPyAwIDogc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lk
IDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAorICAgICAgICAgICAgICAg
IF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSkpCisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgfSBlbHNlIHsvL0lFOAorICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNl
ID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0g
dGhpcy5sZW5ndGg7CisgICAgICAgICAgICBpZiAocG9zID4gMCkgeworICAgICAgICAgICAgICAg
IGlmIChwb3MgPiBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAocG9zID09IHZvaWQgMCkgeworICAgICAgICAgICAgICAgIHBv
cyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgICAgICAg
ICBwb3MgPSBNYXRoLm1heChsZW5ndGggKyBwb3MsIDApOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIShwb3MrcmVtb3ZlQ291bnQgPCBsZW5ndGgpKQorICAgICAgICAgICAgICAg
IHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOworCisgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9
IHRoaXMuc2xpY2UocG9zLCBwb3MrcmVtb3ZlQ291bnQpOworICAgICAgICAgICAgdmFyIGluc2Vy
dCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKKyAgICAgICAgICAgIHZhciBhZGQgPSBpbnNl
cnQubGVuZ3RoOyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBvcyA9PT0gbGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFkZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnB1
c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVDb3Vu
dCwgbGVuZ3RoIC0gcG9zKTsKKyAgICAgICAgICAgICAgICB2YXIgdGFpbE9sZFBvcyA9IHBvcyAr
IHJlbW92ZTsKKyAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3MgKyBh
ZGQgLSByZW1vdmU7CisgICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAtIHRh
aWxPbGRQb3M7CisgICAgICAgICAgICAgICAgdmFyIGxlbmd0aEFmdGVyUmVtb3ZlID0gbGVuZ3Ro
IC0gcmVtb3ZlOworCisgICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xkUG9z
KSB7IC8vIGNhc2UgQQorICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRh
aWxDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3Mr
aV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRhaWxOZXdQb3MgPiB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQgor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFkZCA9
PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCisKKyAgICAgICAgICAgICAgICBpZiAoYWRkICYmIHBv
cyA9PT0gbGVuZ3RoQWZ0ZXJSZW1vdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5n
dGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92
ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGFkZDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3BvcytpXSA9
IGluc2VydFtpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW1vdmVkOworICAgICAgICB9OworICAg
IH0KK30KK2lmICghQXJyYXkuaXNBcnJheSkgeworICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlv
biBpc0FycmF5KG9iaikgeworICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmpl
Y3QgQXJyYXldIjsKKyAgICB9OworfQordmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCisg
ICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3Ry
aW5nKTsKKworaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgeworICAgIEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKKyAgICAg
ICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9IHNwbGl0
U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAg
ICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAgICAg
ICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAorICAgICAgICAgICAgaSA9IC0xLAorICAgICAg
ICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJpbmco
ZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKCsr
aSA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAg
ICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLm1hcCkgeworICAgIEFy
cmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CisgICAg
ICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxp
dFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAg
ICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAg
ICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHJlc3VsdCA9
IEFycmF5KGxlbmd0aCksCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKyAgICAg
ICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgaWYgKGkgaW4gc2VsZikKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4u
Y2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKKyAg
ICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGZ1biAvKiwgdGhpc3Ag
Ki8pIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAg
c2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmdd
IiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgICAg
ICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAg
ICAgICAgIHJlc3VsdCA9IFtdLAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICB0aGlz
cCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0
IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBp
cyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAg
ICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKKyAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwo
dGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5w
dXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUu
ZXZlcnkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4g
LyosIHRoaXNwICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAg
ICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmpl
Y3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAg
ICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwK
KyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworICAgICAgICBpZiAoX3RvU3RyaW5n
KGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBp
biBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewor
ICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICov
KSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNl
bGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIg
PworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAg
IHRoaXNwID0gYXJndW1lbnRzWzFdOworICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltv
YmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4g
KyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1
bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKKyAgICBBcnJheS5w
cm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7Cisg
ICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBz
cGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAg
ICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisg
ICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKyAgICAgICAgaWYgKF90b1N0
cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisgICAg
ICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlh
bCB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2YXIg
cmVzdWx0OworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmW2krK107CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkg
d2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9
CitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgeworICAgIEFycmF5LnByb3RvdHlw
ZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7
CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYg
PSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwor
ICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3Qs
CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKyAgICAgICAgaWYgKF90
b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBu
byBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmVzdWx0LCBpID0g
bGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAgICAg
ICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZG8geworICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJy
YXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBpZiAoaSBpbiB0aGlzKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9p
ZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKGktLSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQoraWYg
KCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCAoWzAsIDFdLmluZGV4T2YoMSwgMikgIT0gLTEp
KSB7CisgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdo
dCAvKiwgZnJvbUluZGV4ICovICkgeworICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYm
IF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAg
dGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAgICAg
ICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgp
IHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpID0g
MDsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpID0g
dG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CisgICAgICAgIH0KKyAgICAgICAgaSA9IGkgPj0gMCA/
IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmxhc3RJ
bmRleE9mIHx8IChbMCwgMV0ubGFzdEluZGV4T2YoMCwgLTMpICE9IC0xKSkgeworICAgIEFycmF5
LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAvKiwg
ZnJvbUluZGV4ICovKSB7CisgICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3Ry
aW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNw
bGl0KCIiKSA6CisgICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBs
ZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHZhciBpID0gbGVuZ3RoIC0g
MTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpID0g
TWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpOworICAgICAgICB9CisgICAgICAg
IGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CisgICAgICAgIGZvciAoOyBp
ID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNl
bGZbaV0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmdldFByb3Rv
dHlwZU9mKSB7CisgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90
eXBlT2Yob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKKyAg
ICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CisgICAgICAgICAgICBvYmplY3QuY29uc3Ry
dWN0b3IucHJvdG90eXBlIDoKKyAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CisgICAgICAg
ICk7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewor
ICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
IGNhbGxlZCBvbiBhICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAi
OworICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgeworICAgICAgICBpZiAoKHR5cGVv
ZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBv
YmplY3QgPT09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05f
T0JKRUNUICsgb2JqZWN0KTsKKyAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNl
dHRlcjsKKyAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3Vy
YWJsZTogdHJ1ZSB9OworICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKKyAgICAgICAg
ICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOworICAgICAgICAgICAgb2JqZWN0
Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OworCisgICAgICAgICAgICB2YXIgZ2V0dGVy
ID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOworICAgICAgICAgICAgdmFyIHNldHRl
ciA9IGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG9iamVjdC5f
X3Byb3RvX18gPSBwcm90b3R5cGU7CisKKyAgICAgICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0dGVy
KSB7CisgICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0ZXI7
CisgICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07CisgICAgICAg
IHJldHVybiBkZXNjcmlwdG9yOworICAgIH07Cit9CitpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzKSB7CisgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgeworICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2Jq
ZWN0KTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuY3JlYXRlKSB7CisgICAgdmFyIGNyZWF0ZUVt
cHR5OworICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgeworICAg
ICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7ICJf
X3Byb3RvX18iOiBudWxsIH07CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Jl
YXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgaW4gZW1wdHkpCisgICAgICAgICAgICAgICAgZW1wdHlbaV0g
PSBudWxsOworICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQorICAgICAgICAgICAgZW1w
dHkuaGFzT3duUHJvcGVydHkgPQorICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1lcmFi
bGUgPQorICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CisgICAgICAgICAgICBlbXB0
eS50b0xvY2FsZVN0cmluZyA9CisgICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CisgICAgICAg
ICAgICBlbXB0eS52YWx1ZU9mID0KKyAgICAgICAgICAgIGVtcHR5Ll9fcHJvdG9fXyA9IG51bGw7
CisgICAgICAgICAgICByZXR1cm4gZW1wdHk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBPYmpl
Y3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgeworICAg
ICAgICB2YXIgb2JqZWN0OworICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7CisgICAg
ICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBl
KSsiXSAhPSAnb2JqZWN0JyIpOworICAgICAgICAgICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAoKSB7
fTsKKyAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICAgICAg
b2JqZWN0ID0gbmV3IFR5cGUoKTsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90
b3R5cGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkKKyAg
ICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcyk7Cisg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworZnVuY3Rpb24gZG9lc0RlZmluZVBy
b3BlcnR5V29yayhvYmplY3QpIHsKKyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGluZWwi
IGluIG9iamVjdDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICB9Cit9CitpZiAoT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KSB7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVj
dCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOworICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdv
cmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKKyAgICAgICAgZG9l
c0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CisgICAg
aWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NP
bkRvbSkgeworICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZp
bmVQcm9wZXJ0eTsKKyAgICB9Cit9CisKK2lmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRl
ZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRP
UiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKKyAgICB2YXIg
RVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24g
bm9uLW9iamVjdDogIgorICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAiZ2V0
dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CisKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHBy
b3BlcnR5LCBkZXNjcmlwdG9yKSB7CisgICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2Jq
ZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkK
KyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsg
b2JqZWN0KTsKKyAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0
eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKQor
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9S
ICsgZGVzY3JpcHRvcik7CisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7Cisg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZh
bGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKKyAgICAg
ICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CisKKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmpl
Y3QsIHByb3BlcnR5KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHByb3Rv
dHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9f
XyA9IHByb3RvdHlwZU9mT2JqZWN0OworICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJv
cGVydHldOworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZh
bHVlOworICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNj
cmlwdG9yLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CisgICAgICAgICAgICBpZiAob3du
cyhkZXNjcmlwdG9yLCAiZ2V0IikpCisgICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVj
dCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKKyAgICAgICAgICAgIGlmIChvd25zKGRlc2Ny
aXB0b3IsICJzZXQiKSkKKyAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBwcm9w
ZXJ0eSwgZGVzY3JpcHRvci5zZXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgeworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHBy
b3BlcnRpZXMpIHsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewor
ICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQorICAgICAgICAgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3By
b3BlcnR5XSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQor
aWYgKCFPYmplY3Quc2VhbCkgeworICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZnJl
ZXplKSB7CisgICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsKKyAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQordHJ5IHsKKyAgICBPYmplY3QuZnJlZXpl
KGZ1bmN0aW9uICgpIHt9KTsKK30gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgIE9iamVjdC5mcmVl
emUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gZnJlZXplKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT0g
ImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9KShPYmplY3QuZnJlZXplKTsKK30KK2lm
ICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNp
b25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmlzU2VhbGVkKSB7CisgICAgT2JqZWN0
LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuaXNGcm96ZW4pIHsKKyAgICBPYmplY3QuaXNG
cm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07Cit9CitpZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKKyAgICBPYmplY3QuaXNF
eHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkgeworICAgICAgICBpZiAo
T2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKKyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZSA9ICcn
OworICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CisgICAgICAgICAgICBuYW1l
ICs9ICc/JzsKKyAgICAgICAgfQorICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOworICAgICAg
ICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7CisgICAgICAgIGRlbGV0ZSBv
YmplY3RbbmFtZV07CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9OworfQoraWYg
KCFPYmplY3Qua2V5cykgeworICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsCisgICAgICAg
IGRvbnRFbnVtcyA9IFsKKyAgICAgICAgICAgICJ0b1N0cmluZyIsCisgICAgICAgICAgICAidG9M
b2NhbGVTdHJpbmciLAorICAgICAgICAgICAgInZhbHVlT2YiLAorICAgICAgICAgICAgImhhc093
blByb3BlcnR5IiwKKyAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0eUlzRW51bWVyYWJsZSIsCisgICAgICAgICAgICAiY29uc3RydWN0b3IiCisgICAgICAg
IF0sCisgICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CisKKyAgICBm
b3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7CisgICAgICAgIGhhc0RvbnRFbnVt
QnVnID0gZmFsc2U7CisgICAgfQorCisgICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9i
amVjdCkgeworCisgICAgICAgIGlmICgKKyAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICJv
YmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKKyAgICAgICAgICAgIG9i
amVjdCA9PT0gbnVsbAorICAgICAgICApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBrZXlzID0gW107CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7
CisgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUpKSB7CisgICAgICAgICAgICAgICAg
a2V5cy5wdXNoKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KGhhc0RvbnRFbnVtQnVnKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkb250
RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRvbnRFbnVt
ID0gZG9udEVudW1zW2ldOworICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9udEVu
dW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkb250RW51bSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBrZXlz
OworICAgIH07CisKK30KK2lmICghRGF0ZS5ub3cpIHsKKyAgICBEYXRlLm5vdyA9IGZ1bmN0aW9u
IG5vdygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgIH07Cit9
CitpZigiMCIuc3BsaXQodm9pZCAwLCAwKS5sZW5ndGgpIHsKKyAgICB2YXIgc3RyaW5nX3NwbGl0
ID0gU3RyaW5nLnByb3RvdHlwZS5zcGxpdDsKKyAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0ID0g
ZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCkgeworICAgICAgICBpZihzZXBhcmF0b3IgPT09IHZv
aWQgMCAmJiBsaW1pdCA9PT0gMClyZXR1cm4gW107CisgICAgICAgIHJldHVybiBzdHJpbmdfc3Bs
aXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9Cit9CitpZigiIi5zdWJzdHIgJiYgIjBi
Ii5zdWJzdHIoLTEpICE9PSAiYiIpIHsKKyAgICB2YXIgc3RyaW5nX3N1YnN0ciA9IFN0cmluZy5w
cm90b3R5cGUuc3Vic3RyOworICAgIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyID0gZnVuY3Rpb24o
c3RhcnQsIGxlbmd0aCkgeworICAgICAgICByZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKAorICAg
ICAgICAgICAgdGhpcywKKyAgICAgICAgICAgIHN0YXJ0IDwgMCA/IChzdGFydCA9IHRoaXMubGVu
Z3RoICsgc3RhcnQpIDwgMCA/IDAgOiBzdGFydCA6IHN0YXJ0LAorICAgICAgICAgICAgbGVuZ3Ro
CisgICAgICAgICk7CisgICAgfQorfQordmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgy
MFx4QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKKyAgICAiXHUyMDA0
XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUy
MDI4IiArCisgICAgIlx1MjAyOVx1RkVGRiI7CitpZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSB8
fCB3cy50cmltKCkpIHsKKyAgICB3cyA9ICJbIiArIHdzICsgIl0iOworICAgIHZhciB0cmltQmVn
aW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAorICAgICAgICB0cmlt
RW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7CisgICAgU3RyaW5nLnByb3Rv
dHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKKyAgICAgICAgaWYgKHRoaXMgPT09IHVuZGVm
aW5lZCB8fCB0aGlzID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJjYW4ndCBjb252ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBTdHJpbmcodGhpcykKKyAgICAgICAgICAgIC5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4
cCwgIiIpCisgICAgICAgICAgICAucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAgfTsK
K30KKworZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4gIT09
IG4pIHsgLy8gaXNOYU4KKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAwICYm
IG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8IC0x
KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwor
ZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKKyAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1
dDsKKyAgICByZXR1cm4gKAorICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAorICAgICAgICB0eXBl
ID09PSAidW5kZWZpbmVkIiB8fAorICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKKyAgICAg
ICAgdHlwZSA9PT0gIm51bWJlciIgfHwKKyAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKKyAgICAp
OworfQorCitmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZhciB2YWwsIHZhbHVl
T2YsIHRvU3RyaW5nOworICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKKyAgICAgICAgcmV0
dXJuIGlucHV0OworICAgIH0KKyAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKKyAgICBpZiAo
dHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgdmFsID0gdmFsdWVPZi5j
YWxsKGlucHV0KTsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAgICAg
IHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0
cmluZzsKKyAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAg
IHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFs
KSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCk7Cit9Cit2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgeworICAg
IGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVk
CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2Jq
ZWN0Iik7CisgICAgfQorICAgIHJldHVybiBPYmplY3Qobyk7Cit9OworCit9KTsKKworYWNlLmRl
ZmluZSgnYWNlL2xpYi9kb20nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBYSFRNTF9OUyA9ICJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKKworZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0g
ZnVuY3Rpb24odGFnLCBucykgeworICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMg
PworICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMgfHwgWEhUTUxfTlMsIHRh
ZykgOgorICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7Cit9OworCitleHBv
cnRzLnNldFRleHQgPSBmdW5jdGlvbihlbGVtLCB0ZXh0KSB7CisgICAgaWYgKGVsZW0uaW5uZXJU
ZXh0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgZWxlbS5pbm5lclRleHQgPSB0ZXh0OworICAg
IH0KKyAgICBpZiAoZWxlbS50ZXh0Q29udGVudCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIGVs
ZW0udGV4dENvbnRlbnQgPSB0ZXh0OworICAgIH0KK307CisKK2V4cG9ydHMuaGFzQ3NzQ2xhc3Mg
PSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNw
bGl0KC9ccysvZyk7CisgICAgcmV0dXJuIGNsYXNzZXMuaW5kZXhPZihuYW1lKSAhPT0gLTE7Cit9
OworZXhwb3J0cy5hZGRDc3NDbGFzcyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7CisgICAgaWYgKCFl
eHBvcnRzLmhhc0Nzc0NsYXNzKGVsLCBuYW1lKSkgeworICAgICAgICBlbC5jbGFzc05hbWUgKz0g
IiAiICsgbmFtZTsKKyAgICB9Cit9OworZXhwb3J0cy5yZW1vdmVDc3NDbGFzcyA9IGZ1bmN0aW9u
KGVsLCBuYW1lKSB7CisgICAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUuc3BsaXQoL1xzKy9n
KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB2YXIgaW5kZXggPSBjbGFzc2VzLmluZGV4
T2YobmFtZSk7CisgICAgICAgIGlmIChpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0KKyAg
ICBlbC5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oIiAiKTsKK307CisKK2V4cG9ydHMudG9nZ2xl
Q3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIHZhciBjbGFzc2VzID0gZWwuY2xh
c3NOYW1lLnNwbGl0KC9ccysvZyksIGFkZCA9IHRydWU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5hbWUpOworICAgICAgICBpZiAoaW5k
ZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFkZCA9
IGZhbHNlOworICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRleCwgMSk7CisgICAgfQorICAgIGlm
KGFkZCkKKyAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpOworCisgICAgZWwuY2xhc3NOYW1lID0g
Y2xhc3Nlcy5qb2luKCIgIik7CisgICAgcmV0dXJuIGFkZDsKK307CitleHBvcnRzLnNldENzc0Ns
YXNzID0gZnVuY3Rpb24obm9kZSwgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CisgICAgaWYgKGluY2x1
ZGUpIHsKKyAgICAgICAgZXhwb3J0cy5hZGRDc3NDbGFzcyhub2RlLCBjbGFzc05hbWUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1l
KTsKKyAgICB9Cit9OworCitleHBvcnRzLmhhc0Nzc1N0cmluZyA9IGZ1bmN0aW9uKGlkLCBkb2Mp
IHsKKyAgICB2YXIgaW5kZXggPSAwLCBzaGVldHM7CisgICAgZG9jID0gZG9jIHx8IGRvY3VtZW50
OworCisgICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0ICYmIChzaGVldHMgPSBkb2Muc3R5bGVT
aGVldHMpKSB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IHNoZWV0cy5sZW5ndGgpCisgICAgICAg
ICAgICBpZiAoc2hlZXRzW2luZGV4KytdLm93bmluZ0VsZW1lbnQuaWQgPT09IGlkKSByZXR1cm4g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKChzaGVldHMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InN0eWxlIikpKSB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IHNoZWV0cy5sZW5ndGgpCisgICAg
ICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLmlkID09PSBpZCkgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfTsKKworZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcgPSBm
dW5jdGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQsIGRvYykgeworICAgIGRvYyA9IGRv
YyB8fCBkb2N1bWVudDsKKyAgICBpZiAoaWQgJiYgZXhwb3J0cy5oYXNDc3NTdHJpbmcoaWQsIGRv
YykpCisgICAgICAgIHJldHVybiBudWxsOworICAgIAorICAgIHZhciBzdHlsZTsKKyAgICAKKyAg
ICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKKyAgICAgICAgc3R5bGUgPSBkb2MuY3JlYXRl
U3R5bGVTaGVldCgpOworICAgICAgICBzdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKKyAgICAgICAg
aWYgKGlkKQorICAgICAgICAgICAgc3R5bGUub3duaW5nRWxlbWVudC5pZCA9IGlkOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnROUworICAgICAgICAgICAg
PyBkb2MuY3JlYXRlRWxlbWVudE5TKFhIVE1MX05TLCAic3R5bGUiKQorICAgICAgICAgICAgOiBk
b2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKKworICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChk
b2MuY3JlYXRlVGV4dE5vZGUoY3NzVGV4dCkpOworICAgICAgICBpZiAoaWQpCisgICAgICAgICAg
ICBzdHlsZS5pZCA9IGlkOworCisgICAgICAgIHZhciBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgaGVhZC5h
cHBlbmRDaGlsZChzdHlsZSk7CisgICAgfQorfTsKKworZXhwb3J0cy5pbXBvcnRDc3NTdHlsc2hl
ZXQgPSBmdW5jdGlvbih1cmksIGRvYykgeworICAgIGlmIChkb2MuY3JlYXRlU3R5bGVTaGVldCkg
eworICAgICAgICBkb2MuY3JlYXRlU3R5bGVTaGVldCh1cmkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHZhciBsaW5rID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CisgICAgICAgIGxp
bmsucmVsID0gJ3N0eWxlc2hlZXQnOworICAgICAgICBsaW5rLmhyZWYgPSB1cmk7CisKKyAgICAg
ICAgdmFyIGhlYWQgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSB8fCBkb2Mu
ZG9jdW1lbnRFbGVtZW50OworICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspOworICAgIH0K
K307CisKK2V4cG9ydHMuZ2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBy
ZXR1cm4gKAorICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwg
InBhZGRpbmdMZWZ0IiksIDEwKSArCisgICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRT
dHlsZShlbGVtZW50LCAicGFkZGluZ1JpZ2h0IiksIDEwKSArIAorICAgICAgICBlbGVtZW50LmNs
aWVudFdpZHRoCisgICAgKTsKK307CisKK2V4cG9ydHMuZ2V0SW5uZXJIZWlnaHQgPSBmdW5jdGlv
bihlbGVtZW50KSB7CisgICAgcmV0dXJuICgKKyAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5jb21w
dXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nVG9wIiksIDEwKSArCisgICAgICAgIHBhcnNlSW50
KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCAicGFkZGluZ0JvdHRvbSIpLCAxMCkgKwor
ICAgICAgICBlbGVtZW50LmNsaWVudEhlaWdodAorICAgICk7Cit9OworCitpZiAod2luZG93LnBh
Z2VZT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHsKKyAgICBleHBvcnRzLmdldFBhZ2VTY3JvbGxUb3Ag
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDsKKyAgICB9
OworCisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0OworICAgIH07Cit9CitlbHNlIHsKKyAgICBleHBv
cnRzLmdldFBhZ2VTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50LmJvZHkuc2Nyb2xsVG9wOworICAgIH07CisKKyAgICBleHBvcnRzLmdldFBhZ2VTY3JvbGxM
ZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbExl
ZnQ7CisgICAgfTsKK30KKworaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKQorICAgIGV4cG9y
dHMuY29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CisgICAgICAgIGlm
IChzdHlsZSkKKyAgICAgICAgICAgIHJldHVybiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxl
bWVudCwgIiIpIHx8IHt9KVtzdHlsZV0gfHwgIiI7CisgICAgICAgIHJldHVybiB3aW5kb3cuZ2V0
Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIikgfHwge307CisgICAgfTsKK2Vsc2UKKyAgICBleHBv
cnRzLmNvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgICAgICBp
ZiAoc3R5bGUpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5jdXJyZW50U3R5bGVbc3R5bGVd
OworICAgICAgICByZXR1cm4gZWxlbWVudC5jdXJyZW50U3R5bGU7CisgICAgfTsKKworZXhwb3J0
cy5zY3JvbGxiYXJXaWR0aCA9IGZ1bmN0aW9uKGRvY3VtZW50KSB7CisgICAgdmFyIGlubmVyID0g
ZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJhY2VfaW5uZXIiKTsKKyAgICBpbm5lci5zdHlsZS53aWR0
aCA9ICIxMDAlIjsKKyAgICBpbm5lci5zdHlsZS5taW5XaWR0aCA9ICIwcHgiOworICAgIGlubmVy
LnN0eWxlLmhlaWdodCA9ICIyMDBweCI7CisgICAgaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJibG9j
ayI7CisKKyAgICB2YXIgb3V0ZXIgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoImFjZV9vdXRlciIp
OworICAgIHZhciBzdHlsZSA9IG91dGVyLnN0eWxlOworCisgICAgc3R5bGUucG9zaXRpb24gPSAi
YWJzb2x1dGUiOworICAgIHN0eWxlLmxlZnQgPSAiLTEwMDAwcHgiOworICAgIHN0eWxlLm92ZXJm
bG93ID0gImhpZGRlbiI7CisgICAgc3R5bGUud2lkdGggPSAiMjAwcHgiOworICAgIHN0eWxlLm1p
bldpZHRoID0gIjBweCI7CisgICAgc3R5bGUuaGVpZ2h0ID0gIjE1MHB4IjsKKyAgICBzdHlsZS5k
aXNwbGF5ID0gImJsb2NrIjsKKworICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTsKKworICAg
IHZhciBib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIGJvZHkuYXBwZW5kQ2hp
bGQob3V0ZXIpOworCisgICAgdmFyIG5vU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7CisK
KyAgICBzdHlsZS5vdmVyZmxvdyA9ICJzY3JvbGwiOworICAgIHZhciB3aXRoU2Nyb2xsYmFyID0g
aW5uZXIub2Zmc2V0V2lkdGg7CisKKyAgICBpZiAobm9TY3JvbGxiYXIgPT0gd2l0aFNjcm9sbGJh
cikgeworICAgICAgICB3aXRoU2Nyb2xsYmFyID0gb3V0ZXIuY2xpZW50V2lkdGg7CisgICAgfQor
CisgICAgYm9keS5yZW1vdmVDaGlsZChvdXRlcik7CisKKyAgICByZXR1cm4gbm9TY3JvbGxiYXIt
d2l0aFNjcm9sbGJhcjsKK307CitleHBvcnRzLnNldElubmVySHRtbCA9IGZ1bmN0aW9uKGVsLCBp
bm5lckh0bWwpIHsKKyAgICB2YXIgZWxlbWVudCA9IGVsLmNsb25lTm9kZShmYWxzZSk7Ly9kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBlbGVtZW50LmlubmVySFRNTCA9IGlubmVy
SHRtbDsKKyAgICBlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGVtZW50LCBlbCk7CisgICAg
cmV0dXJuIGVsZW1lbnQ7Cit9OworCitleHBvcnRzLnNldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVs
LCBpbm5lclRleHQpIHsKKyAgICB2YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50OworICAg
IGlmIChkb2N1bWVudC5ib2R5ICYmICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkKKyAg
ICAgICAgZWwudGV4dENvbnRlbnQgPSBpbm5lclRleHQ7CisgICAgZWxzZQorICAgICAgICBlbC5p
bm5lclRleHQgPSBpbm5lclRleHQ7CisKK307CisKK2V4cG9ydHMuZ2V0SW5uZXJUZXh0ID0gZnVu
Y3Rpb24oZWwpIHsKKyAgICB2YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50OworICAgIGlm
IChkb2N1bWVudC5ib2R5ICYmICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkKKyAgICAg
ICAgcmV0dXJuIGVsLnRleHRDb250ZW50OworICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBlbC5p
bm5lclRleHQgfHwgZWwudGV4dENvbnRlbnQgfHwgIiI7Cit9OworCitleHBvcnRzLmdldFBhcmVu
dFdpbmRvdyA9IGZ1bmN0aW9uKGRvY3VtZW50KSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmRlZmF1
bHRWaWV3IHx8IGRvY3VtZW50LnBhcmVudFdpbmRvdzsKK307CisKK30pOworCithY2UuZGVmaW5l
KCdhY2UvbGliL2V2ZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2Uv
bGliL2tleXMnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9kb20nXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGtleXMgPSByZXF1aXJlKCIuL2tl
eXMiKTsKK3ZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL3VzZXJhZ2VudCIpOwordmFyIGRvbSA9
IHJlcXVpcmUoIi4vZG9tIik7CisKK2V4cG9ydHMuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVt
LCB0eXBlLCBjYWxsYmFjaykgeworICAgIGlmIChlbGVtLmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAg
ICAgICAgcmV0dXJuIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2Up
OworICAgIH0KKyAgICBpZiAoZWxlbS5hdHRhY2hFdmVudCkgeworICAgICAgICB2YXIgd3JhcHBl
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2FsbGJhY2sod2luZG93LmV2ZW50KTsKKyAg
ICAgICAgfTsKKyAgICAgICAgY2FsbGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyOworICAgICAgICBl
bGVtLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwcGVyKTsKKyAgICB9Cit9OworCitleHBv
cnRzLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHsKKyAg
ICBpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBlbGVtLnJl
bW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9CisgICAgaWYg
KGVsZW0uZGV0YWNoRXZlbnQpIHsKKyAgICAgICAgZWxlbS5kZXRhY2hFdmVudCgib24iICsgdHlw
ZSwgY2FsbGJhY2suX3dyYXBwZXIgfHwgY2FsbGJhY2spOworICAgIH0KK307CitleHBvcnRzLnN0
b3BFdmVudCA9IGZ1bmN0aW9uKGUpIHsKKyAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihlKTsK
KyAgICBleHBvcnRzLnByZXZlbnREZWZhdWx0KGUpOworICAgIHJldHVybiBmYWxzZTsKK307CisK
K2V4cG9ydHMuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oZSkgeworICAgIGlmIChlLnN0b3BQ
cm9wYWdhdGlvbikKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICBlbHNlCisgICAg
ICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKK307CisKK2V4cG9ydHMucHJldmVudERlZmF1bHQg
PSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUucHJldmVudERlZmF1bHQpCisgICAgICAgIGUucHJl
dmVudERlZmF1bHQoKTsKKyAgICBlbHNlCisgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsK
K307CitleHBvcnRzLmdldEJ1dHRvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS50eXBlID09
ICJkYmxjbGljayIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChlLnR5cGUgPT0gImNvbnRl
eHRtZW51IiB8fCAoZS5jdHJsS2V5ICYmIHVzZXJhZ2VudC5pc01hYykpCisgICAgICAgIHJldHVy
biAyOworICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHJldHVybiBlLmJ1dHRv
bjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiB7MTowLCAyOjIsIDQ6MX1bZS5i
dXR0b25dOworICAgIH0KK307CisKK2lmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0Q2Fw
dHVyZSkgeworICAgIGV4cG9ydHMuY2FwdHVyZSA9IGZ1bmN0aW9uKGVsLCBldmVudEhhbmRsZXIs
IHJlbGVhc2VDYXB0dXJlSGFuZGxlcikgeworICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7Cisg
ICAgICAgIGZ1bmN0aW9uIG9uUmVsZWFzZUNhcHR1cmUoZSkgeworICAgICAgICAgICAgZXZlbnRI
YW5kbGVyKGUpOworCisgICAgICAgICAgICBpZiAoIWNhbGxlZCkgeworICAgICAgICAgICAgICAg
IGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKGUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVs
LCAibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgICAgIGV4cG9ydHMucmVtb3Zl
TGlzdGVuZXIoZWwsICJtb3VzZXVwIiwgb25SZWxlYXNlQ2FwdHVyZSk7CisgICAgICAgICAgICBl
eHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVsLCAibG9zZWNhcHR1cmUiLCBvblJlbGVhc2VDYXB0dXJl
KTsKKworICAgICAgICAgICAgZWwucmVsZWFzZUNhcHR1cmUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIpOwor
ICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibW91c2V1cCIsIG9uUmVsZWFzZUNhcHR1
cmUpOworICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibG9zZWNhcHR1cmUiLCBvblJl
bGVhc2VDYXB0dXJlKTsKKyAgICAgICAgZWwuc2V0Q2FwdHVyZSgpOworICAgIH07Cit9CitlbHNl
IHsKKyAgICBleHBvcnRzLmNhcHR1cmUgPSBmdW5jdGlvbihlbCwgZXZlbnRIYW5kbGVyLCByZWxl
YXNlQ2FwdHVyZUhhbmRsZXIpIHsKKyAgICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHsKKyAg
ICAgICAgICAgIGV2ZW50SGFuZGxlciAmJiBldmVudEhhbmRsZXIoZSk7CisgICAgICAgICAgICBy
ZWxlYXNlQ2FwdHVyZUhhbmRsZXIgJiYgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKGUpOworCisgICAg
ICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBldmVudEhh
bmRsZXIsIHRydWUpOworICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bW91c2V1cCIsIG9uTW91c2VVcCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZW1vdmUiLCBldmVudEhhbmRsZXIsIHRydWUpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZXVwIiwgb25Nb3VzZVVwLCB0cnVlKTsKKyAgICB9OworfQorCitleHBv
cnRzLmFkZE1vdXNlV2hlZWxMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykgeworICAg
IHZhciBmYWN0b3IgPSA4OworICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgaWYgKGUud2hlZWxEZWx0YSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpZiAoZS53
aGVlbERlbHRhWCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFggPSAt
ZS53aGVlbERlbHRhWCAvIGZhY3RvcjsKKyAgICAgICAgICAgICAgICBlLndoZWVsWSA9IC1lLndo
ZWVsRGVsdGFZIC8gZmFjdG9yOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBlLndoZWVsWCA9IDA7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRh
IC8gZmFjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgaWYgKGUuYXhpcyAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsKKyAg
ICAgICAgICAgICAgICBlLndoZWVsWCA9IChlLmRldGFpbCB8fCAwKSAqIDU7CisgICAgICAgICAg
ICAgICAgZS53aGVlbFkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBlLndoZWVsWCA9IDA7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAoZS5kZXRhaWwgfHwg
MCkgKiA1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKGUpOwor
ICAgIH07CisgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgIkRPTU1vdXNlU2Nyb2xsIiwgbGlz
dGVuZXIpOworICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZXdoZWVsIiwgbGlzdGVu
ZXIpOworfTsKKworZXhwb3J0cy5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyID0gZnVuY3Rpb24o
ZWwsIHRpbWVvdXRzLCBldmVudEhhbmRsZXIsIGNhbGxiYWNrTmFtZSkgeworICAgIHZhciBjbGlj
a3MgPSAwOworICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgdGltZXI7CisgICAgdmFyIGV2ZW50TmFt
ZXMgPSB7CisgICAgICAgIDI6ICJkYmxjbGljayIsCisgICAgICAgIDM6ICJ0cmlwbGVjbGljayIs
CisgICAgICAgIDQ6ICJxdWFkY2xpY2siCisgICAgfTsKKworICAgIGV4cG9ydHMuYWRkTGlzdGVu
ZXIoZWwsICJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChleHBvcnRzLmdl
dEJ1dHRvbihlKSAhPSAwKSB7CisgICAgICAgICAgICBjbGlja3MgPSAwOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmFyIGlzTmV3Q2xpY2sgPSBNYXRoLmFicyhlLmNsaWVudFggLSBz
dGFydFgpID4gNSB8fCBNYXRoLmFicyhlLmNsaWVudFkgLSBzdGFydFkpID4gNTsKKworICAgICAg
ICAgICAgaWYgKCF0aW1lciB8fCBpc05ld0NsaWNrKQorICAgICAgICAgICAgICAgIGNsaWNrcyA9
IDA7CisKKyAgICAgICAgICAgIGNsaWNrcyArPSAxOworCisgICAgICAgICAgICBpZiAodGltZXIp
CisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKQorICAgICAgICAgICAgdGltZXIg
PSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3RpbWVyID0gbnVsbH0sIHRpbWVvdXRzW2NsaWNrcyAt
IDFdIHx8IDYwMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsaWNrcyA9PSAxKSB7CisgICAg
ICAgICAgICBzdGFydFggPSBlLmNsaWVudFg7CisgICAgICAgICAgICBzdGFydFkgPSBlLmNsaWVu
dFk7CisgICAgICAgIH0KKworICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgibW91
c2Vkb3duIiwgZSk7CisKKyAgICAgICAgaWYgKGNsaWNrcyA+IDQpCisgICAgICAgICAgICBjbGlj
a3MgPSAwOworICAgICAgICBlbHNlIGlmIChjbGlja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7CisgICAg
fSk7CisKKyAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUpIHsKKyAgICAgICAgZXhwb3J0cy5hZGRM
aXN0ZW5lcihlbCwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgY2xpY2tz
ID0gMjsKKyAgICAgICAgICAgIGlmICh0aW1lcikKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVv
dXQodGltZXIpOworICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3Rp
bWVyID0gbnVsbH0sIHRpbWVvdXRzW2NsaWNrcyAtIDFdIHx8IDYwMCk7CisgICAgICAgICAgICBl
dmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgibW91c2Vkb3duIiwgZSk7CisgICAgICAgICAgICBl
dmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpOworICAgICAg
ICB9KTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFj
aywgZSwga2V5Q29kZSkgeworICAgIHZhciBoYXNoSWQgPSAwOworICAgIGlmICgodXNlcmFnZW50
LmlzT3BlcmEgJiYgISgiS2V5Ym9hcmRFdmVudCIgaW4gd2luZG93KSkgJiYgdXNlcmFnZW50Lmlz
TWFjKSB7CisgICAgICAgIGhhc2hJZCA9IDAgfCAoZS5tZXRhS2V5ID8gMSA6IDApIHwgKGUuYWx0
S2V5ID8gMiA6IDApCisgICAgICAgICAgICB8IChlLnNoaWZ0S2V5ID8gNCA6IDApIHwgKGUuY3Ry
bEtleSA/IDggOiAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBoYXNoSWQgPSAwIHwgKGUuY3Ry
bEtleSA/IDEgOiAwKSB8IChlLmFsdEtleSA/IDIgOiAwKQorICAgICAgICAgICAgfCAoZS5zaGlm
dEtleSA/IDQgOiAwKSB8IChlLm1ldGFLZXkgPyA4IDogMCk7CisgICAgfQorCisgICAgaWYgKGtl
eUNvZGUgaW4ga2V5cy5NT0RJRklFUl9LRVlTKSB7CisgICAgICAgIHN3aXRjaCAoa2V5cy5NT0RJ
RklFUl9LRVlTW2tleUNvZGVdKSB7CisgICAgICAgICAgICBjYXNlICJBbHQiOgorICAgICAgICAg
ICAgICAgIGhhc2hJZCA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlICJTaGlmdCI6CisgICAgICAgICAgICAgICAgaGFzaElkID0gNDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkN0cmwiOgorICAgICAgICAgICAgICAgIGhhc2hJ
ZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGhhc2hJZCA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAga2V5Q29kZSA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc2hJZCAmIDggJiYg
KGtleUNvZGUgPT0gOTEgfHwga2V5Q29kZSA9PSA5MykpIHsKKyAgICAgICAga2V5Q29kZSA9IDA7
CisgICAgfQorICAgIGlmICghaGFzaElkICYmICEoa2V5Q29kZSBpbiBrZXlzLkZVTkNUSU9OX0tF
WVMpICYmICEoa2V5Q29kZSBpbiBrZXlzLlBSSU5UQUJMRV9LRVlTKSkgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBjYWxsYmFjayhlLCBoYXNoSWQsIGtleUNvZGUp
OworfQorCitleHBvcnRzLmFkZENvbW1hbmRLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxs
YmFjaykgeworICAgIHZhciBhZGRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkTGlzdGVuZXI7CisgICAg
aWYgKHVzZXJhZ2VudC5pc09sZEdlY2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKCJLZXli
b2FyZEV2ZW50IiBpbiB3aW5kb3cpKSkgeworICAgICAgICB2YXIgbGFzdEtleURvd25LZXlDb2Rl
ID0gbnVsbDsKKyAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkg
eworICAgICAgICAgICAgbGFzdEtleURvd25LZXlDb2RlID0gZS5rZXlDb2RlOworICAgICAgICB9
KTsKKyAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlwcmVzcyIsIGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFzdEtl
eURvd25LZXlDb2RlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGxh
c3REb3duID0gbnVsbDsKKworICAgICAgICBhZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBmdW5j
dGlvbihlKSB7CisgICAgICAgICAgICBsYXN0RG93biA9IGUua2V5SWRlbnRpZmllciB8fCBlLmtl
eUNvZGU7CisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ss
IGUsIGUua2V5Q29kZSk7CisgICAgICAgIH0pOworICAgIH0KK307CisKK2lmICh3aW5kb3cucG9z
dE1lc3NhZ2UgJiYgIXVzZXJhZ2VudC5pc09sZElFKSB7CisgICAgdmFyIHBvc3RNZXNzYWdlSWQg
PSAxOworICAgIGV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7Cisg
ICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7CisgICAgICAgIHZhciBtZXNzYWdlTmFtZSA9ICJ6
ZXJvLXRpbWVvdXQtbWVzc2FnZS0iICsgcG9zdE1lc3NhZ2VJZDsKKyAgICAgICAgZXhwb3J0cy5h
ZGRMaXN0ZW5lcih3aW4sICJtZXNzYWdlIiwgZnVuY3Rpb24gbGlzdGVuZXIoZSkgeworICAgICAg
ICAgICAgaWYgKGUuZGF0YSA9PSBtZXNzYWdlTmFtZSkgeworICAgICAgICAgICAgICAgIGV4cG9y
dHMuc3RvcFByb3BhZ2F0aW9uKGUpOworICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTGlz
dGVuZXIod2luLCAibWVzc2FnZSIsIGxpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgd2luLnBvc3RNZXNzYWdl
KG1lc3NhZ2VOYW1lLCAiKiIpOworICAgIH07Cit9CisKKworZXhwb3J0cy5uZXh0RnJhbWUgPSB3
aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0
aW9uRnJhbWUgfHwKKyAgICB3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAgICB3
aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93LndlYmtpdFJlcXVl
c3RBbmltYXRpb25GcmFtZTsKKworaWYgKGV4cG9ydHMubmV4dEZyYW1lKQorICAgIGV4cG9ydHMu
bmV4dEZyYW1lID0gZXhwb3J0cy5uZXh0RnJhbWUuYmluZCh3aW5kb3cpOworZWxzZQorICAgIGV4
cG9ydHMubmV4dEZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgc2V0VGltZW91
dChjYWxsYmFjaywgMTcpOworICAgIH07Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9rZXlz
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCddLCBmdW5j
dGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgi
Li9vb3AiKTsKK3ZhciBLZXlzID0gKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXQgPSB7CisgICAg
ICAgIE1PRElGSUVSX0tFWVM6IHsKKyAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0cmwn
LCAxODogJ0FsdCcsIDIyNDogJ01ldGEnCisgICAgICAgIH0sCisKKyAgICAgICAgS0VZX01PRFM6
IHsKKyAgICAgICAgICAgICJjdHJsIjogMSwgImFsdCI6IDIsICJvcHRpb24iIDogMiwKKyAgICAg
ICAgICAgICJzaGlmdCI6IDQsICJtZXRhIjogOCwgImNvbW1hbmQiOiA4CisgICAgICAgIH0sCisK
KyAgICAgICAgRlVOQ1RJT05fS0VZUyA6IHsKKyAgICAgICAgICAgIDggIDogIkJhY2tzcGFjZSIs
CisgICAgICAgICAgICA5ICA6ICJUYWIiLAorICAgICAgICAgICAgMTMgOiAiUmV0dXJuIiwKKyAg
ICAgICAgICAgIDE5IDogIlBhdXNlIiwKKyAgICAgICAgICAgIDI3IDogIkVzYyIsCisgICAgICAg
ICAgICAzMiA6ICJTcGFjZSIsCisgICAgICAgICAgICAzMyA6ICJQYWdlVXAiLAorICAgICAgICAg
ICAgMzQgOiAiUGFnZURvd24iLAorICAgICAgICAgICAgMzUgOiAiRW5kIiwKKyAgICAgICAgICAg
IDM2IDogIkhvbWUiLAorICAgICAgICAgICAgMzcgOiAiTGVmdCIsCisgICAgICAgICAgICAzOCA6
ICJVcCIsCisgICAgICAgICAgICAzOSA6ICJSaWdodCIsCisgICAgICAgICAgICA0MCA6ICJEb3du
IiwKKyAgICAgICAgICAgIDQ0IDogIlByaW50IiwKKyAgICAgICAgICAgIDQ1IDogIkluc2VydCIs
CisgICAgICAgICAgICA0NiA6ICJEZWxldGUiLAorICAgICAgICAgICAgOTYgOiAiTnVtcGFkMCIs
CisgICAgICAgICAgICA5NyA6ICJOdW1wYWQxIiwKKyAgICAgICAgICAgIDk4IDogIk51bXBhZDIi
LAorICAgICAgICAgICAgOTkgOiAiTnVtcGFkMyIsCisgICAgICAgICAgICAxMDA6ICJOdW1wYWQ0
IiwKKyAgICAgICAgICAgIDEwMTogIk51bXBhZDUiLAorICAgICAgICAgICAgMTAyOiAiTnVtcGFk
NiIsCisgICAgICAgICAgICAxMDM6ICJOdW1wYWQ3IiwKKyAgICAgICAgICAgIDEwNDogIk51bXBh
ZDgiLAorICAgICAgICAgICAgMTA1OiAiTnVtcGFkOSIsCisgICAgICAgICAgICAxMTI6ICJGMSIs
CisgICAgICAgICAgICAxMTM6ICJGMiIsCisgICAgICAgICAgICAxMTQ6ICJGMyIsCisgICAgICAg
ICAgICAxMTU6ICJGNCIsCisgICAgICAgICAgICAxMTY6ICJGNSIsCisgICAgICAgICAgICAxMTc6
ICJGNiIsCisgICAgICAgICAgICAxMTg6ICJGNyIsCisgICAgICAgICAgICAxMTk6ICJGOCIsCisg
ICAgICAgICAgICAxMjA6ICJGOSIsCisgICAgICAgICAgICAxMjE6ICJGMTAiLAorICAgICAgICAg
ICAgMTIyOiAiRjExIiwKKyAgICAgICAgICAgIDEyMzogIkYxMiIsCisgICAgICAgICAgICAxNDQ6
ICJOdW1sb2NrIiwKKyAgICAgICAgICAgIDE0NTogIlNjcm9sbGxvY2siCisgICAgICAgIH0sCisK
KyAgICAgICAgUFJJTlRBQkxFX0tFWVM6IHsKKyAgICAgICAgICAgMzI6ICcgJywgIDQ4OiAnMCcs
ICA0OTogJzEnLCAgNTA6ICcyJywgIDUxOiAnMycsICA1MjogJzQnLCA1MzogICc1JywKKyAgICAg
ICAgICAgNTQ6ICc2JywgIDU1OiAnNycsICA1NjogJzgnLCAgNTc6ICc5JywgIDU5OiAnOycsICA2
MTogJz0nLCA2NTogICdhJywKKyAgICAgICAgICAgNjY6ICdiJywgIDY3OiAnYycsICA2ODogJ2Qn
LCAgNjk6ICdlJywgIDcwOiAnZicsICA3MTogJ2cnLCA3MjogICdoJywKKyAgICAgICAgICAgNzM6
ICdpJywgIDc0OiAnaicsICA3NTogJ2snLCAgNzY6ICdsJywgIDc3OiAnbScsICA3ODogJ24nLCA3
OTogICdvJywKKyAgICAgICAgICAgODA6ICdwJywgIDgxOiAncScsICA4MjogJ3InLCAgODM6ICdz
JywgIDg0OiAndCcsICA4NTogJ3UnLCA4NjogICd2JywKKyAgICAgICAgICAgODc6ICd3JywgIDg4
OiAneCcsICA4OTogJ3knLCAgOTA6ICd6JywgMTA3OiAnKycsIDEwOTogJy0nLCAxMTA6ICcuJywK
KyAgICAgICAgICAxODg6ICcsJywgMTkwOiAnLicsIDE5MTogJy8nLCAxOTI6ICdgJywgMjE5OiAn
WycsIDIyMDogJ1xcJywKKyAgICAgICAgICAyMjE6ICddJywgMjIyOiAnXCcnCisgICAgICAgIH0K
KyAgICB9OworICAgIGZvciAodmFyIGkgaW4gcmV0LkZVTkNUSU9OX0tFWVMpIHsKKyAgICAgICAg
dmFyIG5hbWUgPSByZXQuRlVOQ1RJT05fS0VZU1tpXS50b0xvd2VyQ2FzZSgpOworICAgICAgICBy
ZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7CisgICAgfQorICAgIG9vcC5taXhpbihyZXQsIHJl
dC5NT0RJRklFUl9LRVlTKTsKKyAgICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tFWVMp
OworICAgIG9vcC5taXhpbihyZXQsIHJldC5GVU5DVElPTl9LRVlTKTsKKyAgICByZXQuZW50ZXIg
PSByZXRbInJldHVybiJdOworICAgIHJldC5lc2NhcGUgPSByZXQuZXNjOworICAgIHJldC5kZWwg
PSByZXRbImRlbGV0ZSJdOworICAgIHJldFsxNzNdID0gJy0nOworCisgICAgcmV0dXJuIHJldDsK
K30pKCk7Citvb3AubWl4aW4oZXhwb3J0cywgS2V5cyk7CisKK2V4cG9ydHMua2V5Q29kZVRvU3Ry
aW5nID0gZnVuY3Rpb24oa2V5Q29kZSkgeworICAgIHJldHVybiAoS2V5c1trZXlDb2RlXSB8fCBT
dHJpbmcuZnJvbUNoYXJDb2RlKGtleUNvZGUpKS50b0xvd2VyQ2FzZSgpOworfQorCit9KTsKKwor
YWNlLmRlZmluZSgnYWNlL2xpYi9vb3AnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9ydHMuaW5o
ZXJpdHMgPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRlbXBDdG9yID0gZnVuY3Rpb24oKSB7fTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oY3Rvciwgc3VwZXJDdG9yKSB7CisgICAgICAgIHRlbXBDdG9y
LnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7CisgICAgICAgIGN0b3Iuc3VwZXJfID0g
c3VwZXJDdG9yLnByb3RvdHlwZTsKKyAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgdGVtcEN0
b3IoKTsKKyAgICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yOworICAgIH07
Cit9KCkpOworCitleHBvcnRzLm1peGluID0gZnVuY3Rpb24ob2JqLCBtaXhpbikgeworICAgIGZv
ciAodmFyIGtleSBpbiBtaXhpbikgeworICAgICAgICBvYmpba2V5XSA9IG1peGluW2tleV07Cisg
ICAgfQorfTsKKworZXhwb3J0cy5pbXBsZW1lbnQgPSBmdW5jdGlvbihwcm90bywgbWl4aW4pIHsK
KyAgICBleHBvcnRzLm1peGluKHByb3RvLCBtaXhpbik7Cit9OworCit9KTsKKworYWNlLmRlZmlu
ZSgnYWNlL2xpYi91c2VyYWdlbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworZXhwb3J0cy5PUyA9IHsKKyAg
ICBMSU5VWDogIkxJTlVYIiwKKyAgICBNQUM6ICJNQUMiLAorICAgIFdJTkRPV1M6ICJXSU5ET1dT
IgorfTsKK2V4cG9ydHMuZ2V0T1MgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXhwb3J0cy5pc01h
YykgeworICAgICAgICByZXR1cm4gZXhwb3J0cy5PUy5NQUM7CisgICAgfSBlbHNlIGlmIChleHBv
cnRzLmlzTGludXgpIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuTElOVVg7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuV0lORE9XUzsKKyAgICB9Cit9OworaWYg
KHR5cGVvZiBuYXZpZ2F0b3IgIT0gIm9iamVjdCIpCisgICAgcmV0dXJuOworCit2YXIgb3MgPSAo
bmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFsib3RoZXIiXSlb
MF0udG9Mb3dlckNhc2UoKTsKK3ZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CitleHBvcnRz
LmlzV2luID0gKG9zID09ICJ3aW4iKTsKK2V4cG9ydHMuaXNNYWMgPSAob3MgPT0gIm1hYyIpOwor
ZXhwb3J0cy5pc0xpbnV4ID0gKG9zID09ICJsaW51eCIpOworZXhwb3J0cy5pc0lFID0gCisgICAg
KG5hdmlnYXRvci5hcHBOYW1lID09ICJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiIHx8IG5h
dmlnYXRvci5hcHBOYW1lLmluZGV4T2YoIk1TQXBwSG9zdCIpID49IDApCisgICAgJiYgcGFyc2VG
bG9hdChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFIChbMC05XStbXC4wLTldKykvKVsx
XSk7CisgICAgCitleHBvcnRzLmlzT2xkSUUgPSBleHBvcnRzLmlzSUUgJiYgZXhwb3J0cy5pc0lF
IDwgOTsKK2V4cG9ydHMuaXNHZWNrbyA9IGV4cG9ydHMuaXNNb3ppbGxhID0gd2luZG93LmNvbnRy
b2xsZXJzICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gIkdlY2tvIjsKK2V4cG9ydHMu
aXNPbGRHZWNrbyA9IGV4cG9ydHMuaXNHZWNrbyAmJiBwYXJzZUludCgobmF2aWdhdG9yLnVzZXJB
Z2VudC5tYXRjaCgvcnZcOihcZCspLyl8fFtdKVsxXSwgMTApIDwgNDsKK2V4cG9ydHMuaXNPcGVy
YSA9IHdpbmRvdy5vcGVyYSAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93
Lm9wZXJhKSA9PSAiW29iamVjdCBPcGVyYV0iOworZXhwb3J0cy5pc1dlYktpdCA9IHBhcnNlRmxv
YXQodWEuc3BsaXQoIldlYktpdC8iKVsxXSkgfHwgdW5kZWZpbmVkOworCitleHBvcnRzLmlzQ2hy
b21lID0gcGFyc2VGbG9hdCh1YS5zcGxpdCgiIENocm9tZS8iKVsxXSkgfHwgdW5kZWZpbmVkOwor
CitleHBvcnRzLmlzQUlSID0gdWEuaW5kZXhPZigiQWRvYmVBSVIiKSA+PSAwOworCitleHBvcnRz
LmlzSVBhZCA9IHVhLmluZGV4T2YoImlQYWQiKSA+PSAwOworCitleHBvcnRzLmlzVG91Y2hQYWQg
PSB1YS5pbmRleE9mKCJUb3VjaFBhZCIpID49IDA7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uv
ZWRpdG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2ZpeG9s
ZGJyb3dzZXJzJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL3VzZXJh
Z2VudCcsICdhY2Uva2V5Ym9hcmQvdGV4dGlucHV0JywgJ2FjZS9tb3VzZS9tb3VzZV9oYW5kbGVy
JywgJ2FjZS9tb3VzZS9mb2xkX2hhbmRsZXInLCAnYWNlL2tleWJvYXJkL2tleWJpbmRpbmcnLCAn
YWNlL2VkaXRfc2Vzc2lvbicsICdhY2Uvc2VhcmNoJywgJ2FjZS9yYW5nZScsICdhY2UvbGliL2V2
ZW50X2VtaXR0ZXInLCAnYWNlL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlcicsICdhY2UvY29tbWFu
ZHMvZGVmYXVsdF9jb21tYW5kcycsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3JlcXVpcmUoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7CisK
K3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9s
aWIvbGFuZyIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2VudCIpOwor
dmFyIFRleHRJbnB1dCA9IHJlcXVpcmUoIi4va2V5Ym9hcmQvdGV4dGlucHV0IikuVGV4dElucHV0
OwordmFyIE1vdXNlSGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvbW91c2VfaGFuZGxlciIpLk1v
dXNlSGFuZGxlcjsKK3ZhciBGb2xkSGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvZm9sZF9oYW5k
bGVyIikuRm9sZEhhbmRsZXI7Cit2YXIgS2V5QmluZGluZyA9IHJlcXVpcmUoIi4va2V5Ym9hcmQv
a2V5YmluZGluZyIpLktleUJpbmRpbmc7Cit2YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2Vk
aXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uOwordmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2VhcmNo
IikuU2VhcmNoOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIEV2
ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7
Cit2YXIgQ29tbWFuZE1hbmFnZXIgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdl
ciIpLkNvbW1hbmRNYW5hZ2VyOwordmFyIGRlZmF1bHRDb21tYW5kcyA9IHJlcXVpcmUoIi4vY29t
bWFuZHMvZGVmYXVsdF9jb21tYW5kcyIpLmNvbW1hbmRzOwordmFyIGNvbmZpZyA9IHJlcXVpcmUo
Ii4vY29uZmlnIik7Cit2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsK
KyAgICB2YXIgY29udGFpbmVyID0gcmVuZGVyZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpOworICAg
IHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOworICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJl
cjsKKworICAgIHRoaXMuY29tbWFuZHMgPSBuZXcgQ29tbWFuZE1hbmFnZXIodXNlcmFnZW50Lmlz
TWFjID8gIm1hYyIgOiAid2luIiwgZGVmYXVsdENvbW1hbmRzKTsKKyAgICB0aGlzLnRleHRJbnB1
dCAgPSBuZXcgVGV4dElucHV0KHJlbmRlcmVyLmdldFRleHRBcmVhQ29udGFpbmVyKCksIHRoaXMp
OworICAgIHRoaXMucmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5nZXRFbGVtZW50
KCk7CisgICAgdGhpcy5rZXlCaW5kaW5nID0gbmV3IEtleUJpbmRpbmcodGhpcyk7CisgICAgdGhp
cy4kbW91c2VIYW5kbGVyID0gbmV3IE1vdXNlSGFuZGxlcih0aGlzKTsKKyAgICBuZXcgRm9sZEhh
bmRsZXIodGhpcyk7CisKKyAgICB0aGlzLiRibG9ja1Njcm9sbGluZyA9IDA7CisgICAgdGhpcy4k
c2VhcmNoID0gbmV3IFNlYXJjaCgpLnNldCh7CisgICAgICAgIHdyYXA6IHRydWUKKyAgICB9KTsK
KworICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbigiIikpOwor
fTsKKworKGZ1bmN0aW9uKCl7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRl
cik7CisgICAgdGhpcy5zZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrZXlib2FyZEhhbmRs
ZXIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBrZXlib2FyZEhhbmRsZXIgPT0gInN0cmluZyIgJiYg
a2V5Ym9hcmRIYW5kbGVyKSB7CisgICAgICAgICAgICB0aGlzLiRrZXliaW5kaW5nSWQgPSBrZXli
b2FyZEhhbmRsZXI7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICAgICAg
Y29uZmlnLmxvYWRNb2R1bGUoWyJrZXliaW5kaW5nIiwga2V5Ym9hcmRIYW5kbGVyXSwgZnVuY3Rp
b24obW9kdWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKF9zZWxmLiRrZXliaW5kaW5nSWQgPT0g
a2V5Ym9hcmRIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICBfc2VsZi5rZXlCaW5kaW5nLnNl
dEtleWJvYXJkSGFuZGxlcihtb2R1bGUgJiYgbW9kdWxlLmhhbmRsZXIpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy4ka2V5YmluZGlu
Z0lkOworICAgICAgICAgICAgdGhpcy5rZXlCaW5kaW5nLnNldEtleWJvYXJkSGFuZGxlcihrZXli
b2FyZEhhbmRsZXIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldEtleWJvYXJkSGFu
ZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdldEtl
eWJvYXJkSGFuZGxlcigpOworICAgIH07CisgICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24o
c2Vzc2lvbikgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09IHNlc3Npb24pCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikgeworICAgICAgICAgICAg
dmFyIG9sZFNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgICAgICB0aGlzLnNlc3Npb24u
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7Cisg
ICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlTW9kZSIs
IHRoaXMuJG9uQ2hhbmdlTW9kZSk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZl
bnRMaXN0ZW5lcigidG9rZW5pemVyVXBkYXRlIiwgdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpOwor
ICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVRhYlNp
emUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJl
bW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBMaW1pdCIsIHRoaXMuJG9uQ2hhbmdlV3JhcExp
bWl0KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFu
Z2VXcmFwTW9kZSIsIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOworICAgICAgICAgICAgdGhpcy5z
ZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9uQ2hhbmdlRm9sZCIsIHRoaXMuJG9uQ2hhbmdl
Rm9sZCk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hh
bmdlRnJvbnRNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKTsKKyAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VCYWNrTWFya2VyIiwgdGhp
cy4kb25DaGFuZ2VCYWNrTWFya2VyKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVF
dmVudExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50
KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VB
bm5vdGF0aW9uIiwgdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKTsKKyAgICAgICAgICAgIHRoaXMu
c2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUiLCB0aGlzLiRvbkN1
cnNvckNoYW5nZSk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiY2hhbmdlU2Nyb2xsVG9wIiwgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpOworICAgICAgICAg
ICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUxlZnRUb3AiLCB0aGlz
LiRvblNjcm9sbExlZnRDaGFuZ2UpOworCisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhp
cy5zZXNzaW9uLmdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUV2
ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKyAgICAg
ICAgICAgIHNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLCB0
aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNlc3Np
b24gPSBzZXNzaW9uOworCisgICAgICAgIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UgPSB0aGlzLm9u
RG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3Rl
bmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKTsKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci5zZXRTZXNzaW9uKHNlc3Npb24pOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSA9
IHRoaXMub25DaGFuZ2VNb2RlLmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRM
aXN0ZW5lcigiY2hhbmdlTW9kZSIsIHRoaXMuJG9uQ2hhbmdlTW9kZSk7CisKKyAgICAgICAgdGhp
cy4kb25Ub2tlbml6ZXJVcGRhdGUgPSB0aGlzLm9uVG9rZW5pemVyVXBkYXRlLmJpbmQodGhpcyk7
CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigidG9rZW5pemVyVXBkYXRlIiwgdGhp
cy4kb25Ub2tlbml6ZXJVcGRhdGUpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZSA9
IHRoaXMucmVuZGVyZXIub25DaGFuZ2VUYWJTaXplLmJpbmQodGhpcy5yZW5kZXJlcik7CisgICAg
ICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlVGFiU2l6ZSIsIHRoaXMuJG9uQ2hh
bmdlVGFiU2l6ZSk7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQgPSB0aGlzLm9u
Q2hhbmdlV3JhcExpbWl0LmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0
ZW5lcigiY2hhbmdlV3JhcExpbWl0IiwgdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpOworCisgICAg
ICAgIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUgPSB0aGlzLm9uQ2hhbmdlV3JhcE1vZGUuYmluZCh0
aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VXcmFwTW9kZSIs
IHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlRm9sZCA9
IHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRM
aXN0ZW5lcigiY2hhbmdlRm9sZCIsIHRoaXMuJG9uQ2hhbmdlRm9sZCk7CisKKyAgICAgICAgdGhp
cy4kb25DaGFuZ2VGcm9udE1hcmtlciA9IHRoaXMub25DaGFuZ2VGcm9udE1hcmtlci5iaW5kKHRo
aXMpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlRnJvbnRN
YXJrZXIiLCB0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKTsKKworICAgICAgICB0aGlzLiRvbkNo
YW5nZUJhY2tNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlQmFja01hcmtlci5iaW5kKHRoaXMpOworICAg
ICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsIHRo
aXMuJG9uQ2hhbmdlQmFja01hcmtlcik7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VCcmVha3Bv
aW50ID0gdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5z
ZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUJyZWFrcG9pbnQiLCB0aGlzLiRvbkNoYW5n
ZUJyZWFrcG9pbnQpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbiA9IHRoaXMu
b25DaGFuZ2VBbm5vdGF0aW9uLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRF
dmVudExpc3RlbmVyKCJjaGFuZ2VBbm5vdGF0aW9uIiwgdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9u
KTsKKworICAgICAgICB0aGlzLiRvbkN1cnNvckNoYW5nZSA9IHRoaXMub25DdXJzb3JDaGFuZ2Uu
YmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5n
ZU92ZXJ3cml0ZSIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKworICAgICAgICB0aGlzLiRvblNj
cm9sbFRvcENoYW5nZSA9IHRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAg
ICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9sbFRvcCIsIHRoaXMu
JG9uU2Nyb2xsVG9wQ2hhbmdlKTsKKworICAgICAgICB0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2Ug
PSB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNlc3Np
b24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsTGVmdCIsIHRoaXMuJG9uU2Nyb2xsTGVm
dENoYW5nZSk7CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLmdldFNlbGVjdGlv
bigpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VDdXJz
b3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisKKyAgICAgICAgdGhpcy4kb25TZWxlY3Rpb25D
aGFuZ2UgPSB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMu
c2VsZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMuJG9uU2Vs
ZWN0aW9uQ2hhbmdlKTsKKworICAgICAgICB0aGlzLm9uQ2hhbmdlTW9kZSgpOworCisgICAgICAg
IHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7CisgICAgICAgIHRoaXMub25DdXJzb3JDaGFuZ2Uo
KTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKworICAgICAgICB0aGlzLm9u
U2Nyb2xsVG9wQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlKCk7Cisg
ICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgdGhpcy5vbkNoYW5nZUZy
b250TWFya2VyKCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VCYWNrTWFya2VyKCk7CisgICAgICAg
IHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VBbm5vdGF0
aW9uKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMucmVu
ZGVyZXIuYWRqdXN0V3JhcExpbWl0KCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVs
bCgpOworCisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlc3Npb24iLCB7CisgICAgICAgICAg
ICBzZXNzaW9uOiBzZXNzaW9uLAorICAgICAgICAgICAgb2xkU2Vzc2lvbjogb2xkU2Vzc2lvbgor
ICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uOworICAgIH07CisgICAgdGhpcy5zZXRWYWx1ZSA9
IGZ1bmN0aW9uKHZhbCwgY3Vyc29yUG9zKSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5kb2Muc2V0
VmFsdWUodmFsKTsKKworICAgICAgICBpZiAoIWN1cnNvclBvcykKKyAgICAgICAgICAgIHRoaXMu
c2VsZWN0QWxsKCk7CisgICAgICAgIGVsc2UgaWYgKGN1cnNvclBvcyA9PSAxKQorICAgICAgICAg
ICAgdGhpcy5uYXZpZ2F0ZUZpbGVFbmQoKTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09
IC0xKQorICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydCgpOworCisgICAgICAgIHJl
dHVybiB2YWw7CisgICAgfTsKKyAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0VmFsdWUoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0
U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbjsK
KyAgICB9OworICAgIHRoaXMucmVzaXplID0gZnVuY3Rpb24oZm9yY2UpIHsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci5vblJlc2l6ZShmb3JjZSk7CisgICAgfTsKKyAgICB0aGlzLnNldFRoZW1lID0g
ZnVuY3Rpb24odGhlbWUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRUaGVtZSh0aGVtZSk7
CisgICAgfTsKKyAgICB0aGlzLmdldFRoZW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLnJlbmRlcmVyLmdldFRoZW1lKCk7CisgICAgfTsKKyAgICB0aGlzLnNldFN0eWxlID0g
ZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdHlsZSk7
CisgICAgfTsKKyAgICB0aGlzLnVuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgeworICAgICAg
ICB0aGlzLnJlbmRlcmVyLnVuc2V0U3R5bGUoc3R5bGUpOworICAgIH07CisgICAgdGhpcy5zZXRG
b250U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBzaXplID09ICJu
dW1iZXIiKQorICAgICAgICAgICAgc2l6ZSA9IHNpemUgKyAicHgiOworICAgICAgICB0aGlzLmNv
bnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IHNpemU7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBk
YXRlRm9udFNpemUoKTsKKyAgICB9OworCisgICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCkg
eworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlc3Npb24uJGJy
YWNrZXRIaWdobGlnaHQpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxp
Z2h0ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRQZW5k
aW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOworICAgICAgICB0aGlzLiRoaWdobGlnaHRQZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFBlbmRp
bmcgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIHBvcyA9IHNlbGYuc2Vzc2lvbi5maW5kTWF0
Y2hpbmdCcmFja2V0KHNlbGYuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7CisgICAgICAgICAgICBpZiAo
cG9zKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHBvcy5yb3csIHBv
cy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4rMSk7CisgICAgICAgICAgICAgICAgc2VsZi5z
ZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gc2VsZi5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwg
ImFjZV9icmFja2V0IiwgInRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgNTApOwor
ICAgIH07CisgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgX3NlbGYg
PSB0aGlzOworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgX3Nl
bGYudGV4dElucHV0LmZvY3VzKCk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLnRleHRJbnB1
dC5mb2N1cygpOworICAgIH07CisgICAgdGhpcy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCgpOworICAgIH07CisgICAgdGhp
cy5ibHVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMudGV4dElucHV0LmJsdXIoKTsKKyAg
ICB9OworICAgIHRoaXMub25Gb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy4k
aXNGb2N1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRpc0ZvY3VzZWQg
PSB0cnVlOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTsKKyAgICAgICAgdGhp
cy5yZW5kZXJlci52aXN1YWxpemVGb2N1cygpOworICAgICAgICB0aGlzLl9lbWl0KCJmb2N1cyIp
OworICAgIH07CisgICAgdGhpcy5vbkJsdXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0
aGlzLiRpc0ZvY3VzZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGlzRm9j
dXNlZCA9IGZhbHNlOworICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDdXJzb3IoKTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci52aXN1YWxpemVCbHVyKCk7CisgICAgICAgIHRoaXMuX2VtaXQoImJs
dXIiKTsKKyAgICB9OworCisgICAgdGhpcy4kY3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlzLm9u
RG9jdW1lbnRDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkZWx0YSA9IGUuZGF0
YTsKKyAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZhciBsYXN0Um93
OworCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJiBkZWx0
YS5hY3Rpb24gIT0gImluc2VydExpbmVzIiAmJiBkZWx0YS5hY3Rpb24gIT0gInJlbW92ZUxpbmVz
IikKKyAgICAgICAgICAgIGxhc3RSb3cgPSByYW5nZS5lbmQucm93OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBsYXN0Um93ID0gSW5maW5pdHk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBk
YXRlTGluZXMocmFuZ2Uuc3RhcnQucm93LCBsYXN0Um93KTsKKworICAgICAgICB0aGlzLl9lbWl0
KCJjaGFuZ2UiLCBlKTsKKyAgICAgICAgdGhpcy4kY3Vyc29yQ2hhbmdlKCk7CisgICAgfTsKKwor
ICAgIHRoaXMub25Ub2tlbml6ZXJVcGRhdGUgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBy
b3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJvd3MuZmly
c3QsIHJvd3MubGFzdCk7CisgICAgfTsKKworCisgICAgdGhpcy5vblNjcm9sbFRvcENoYW5nZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWSh0aGlzLnNlc3Np
b24uZ2V0U2Nyb2xsVG9wKCkpOworICAgIH07CisgICAgCisgICAgdGhpcy5vblNjcm9sbExlZnRD
aGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1godGhp
cy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSk7CisgICAgfTsKKyAgICB0aGlzLm9uQ3Vyc29yQ2hh
bmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOworCisgICAg
ICAgIGlmICghdGhpcy4kYmxvY2tTY3JvbGxpbmcpIHsKKyAgICAgICAgICAgIHRoaXMucmVuZGVy
ZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuJGhp
Z2hsaWdodEJyYWNrZXRzKCk7CisgICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxp
bmUoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgfTsKKwor
ICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oKTsKKworICAgICAgICB2YXIgaGlnaGxp
Z2h0OworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSkgeworICAgICAgICAg
ICAgaWYgKCh0aGlzLiRzZWxlY3Rpb25TdHlsZSAhPSAibGluZSIgfHwgIXRoaXMuc2VsZWN0aW9u
LmlzTXVsdGlMaW5lKCkpKQorICAgICAgICAgICAgICAgIGhpZ2hsaWdodCA9IHRoaXMuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXNzaW9uLiRoaWdobGln
aHRMaW5lTWFya2VyICYmICFoaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHNlc3Npb24ucmVtb3Zl
TWFya2VyKHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpOworICAgICAgICAgICAgc2Vz
c2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAoIXNl
c3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBz
ZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gc2Vzc2lvbi5oaWdobGlnaHRMaW5lcyhoaWdo
bGlnaHQucm93LCBoaWdobGlnaHQucm93LCAiYWNlX2FjdGl2ZS1saW5lIik7CisgICAgICAgIH0g
ZWxzZSBpZiAoaGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5l
TWFya2VyLnN0YXJ0LnJvdyA9IGhpZ2hsaWdodC5yb3c7CisgICAgICAgICAgICBzZXNzaW9uLiRo
aWdobGlnaHRMaW5lTWFya2VyLmVuZC5yb3cgPSBoaWdobGlnaHQucm93OworICAgICAgICAgICAg
c2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBz
ZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIGlmIChzZXNzaW9uLiRzZWxlY3Rpb25N
YXJrZXIpIHsKKyAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJHNlbGVj
dGlvbk1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vy
ID0gbnVsbDsKKworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICAgICAg
ICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUoKTsKKyAgICAgICAgICAgIHNl
c3Npb24uJHNlbGVjdGlvbk1hcmtlciA9IHNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNlX3Nl
bGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJHVw
ZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByZSA9
IHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCAmJiB0aGlzLiRnZXRTZWxlY3Rpb25IaWdoTGln
aHRSZWdleHAoKQorICAgICAgICB0aGlzLnNlc3Npb24uaGlnaGxpZ2h0KHJlKTsKKyAgICAgICAg
CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgIH07CisKKyAgICB0
aGlzLiRnZXRTZWxlY3Rpb25IaWdoTGlnaHRSZWdleHAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRo
aXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0VtcHR5KCkg
fHwgc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIHN0YXJ0T3V0ZXIgPSBzZWxlY3Rpb24uc3RhcnQuY29sdW1uIC0gMTsKKyAgICAgICAg
dmFyIGVuZE91dGVyID0gc2VsZWN0aW9uLmVuZC5jb2x1bW4gKyAxOworICAgICAgICB2YXIgbGlu
ZSA9IHNlc3Npb24uZ2V0TGluZShzZWxlY3Rpb24uc3RhcnQucm93KTsKKyAgICAgICAgdmFyIGxp
bmVDb2xzID0gbGluZS5sZW5ndGg7CisgICAgICAgIHZhciBuZWVkbGUgPSBsaW5lLnN1YnN0cmlu
ZyhNYXRoLm1heChzdGFydE91dGVyLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hdGgubWluKGVuZE91dGVyLCBsaW5lQ29scykpOworICAgICAgICBpZiAoKHN0YXJ0
T3V0ZXIgPj0gMCAmJiAvXltcd1xkXS8udGVzdChuZWVkbGUpKSB8fAorICAgICAgICAgICAgKGVu
ZE91dGVyIDw9IGxpbmVDb2xzICYmIC9bXHdcZF0kLy50ZXN0KG5lZWRsZSkpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG5lZWRsZSA9IGxpbmUuc3Vic3RyaW5nKHNlbGVjdGlvbi5z
dGFydC5jb2x1bW4sIHNlbGVjdGlvbi5lbmQuY29sdW1uKTsKKyAgICAgICAgaWYgKCEvXltcd1xk
XSskLy50ZXN0KG5lZWRsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHJl
ID0gdGhpcy4kc2VhcmNoLiRhc3NlbWJsZVJlZ0V4cCh7CisgICAgICAgICAgICB3aG9sZVdvcmQ6
IHRydWUsCisgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0cnVlLAorICAgICAgICAgICAgbmVl
ZGxlOiBuZWVkbGUKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlOworICAgIH07CisK
KworICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGlzLnJlbmRlcmVyLnVwZGF0ZUZyb250TWFya2VycygpOworICAgIH07CisKKyAgICB0aGlzLm9u
Q2hhbmdlQmFja01hcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKworCisgICAgdGhpcy5vbkNoYW5nZUJyZWFrcG9p
bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCcmVha3BvaW50
cygpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEFubm90YXRpb25zKHRoaXMuc2Vzc2lvbi5nZXRB
bm5vdGF0aW9ucygpKTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdlTW9kZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKTsKKyAgICB9OworCisK
KyAgICB0aGlzLm9uQ2hhbmdlV3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
cmVuZGVyZXIudXBkYXRlRnVsbCgpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlV3JhcE1v
ZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTsK
KyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIudXBkYXRlRnVsbCgpOworICAgIH07CisKKyAgICB0aGlzLmdldENvcHlUZXh0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciB0ZXh0ID0gIiI7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rp
b24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFu
Z2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKKworICAgICAgICB0aGlzLl9lbWl0KCJjb3B5
IiwgdGV4dCk7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisgICAgdGhpcy5vbkNvcHkg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jb21tYW5kcy5leGVjKCJjb3B5IiwgdGhpcyk7
CisgICAgfTsKKyAgICB0aGlzLm9uQ3V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY29t
bWFuZHMuZXhlYygiY3V0IiwgdGhpcyk7CisgICAgfTsKKyAgICB0aGlzLm9uUGFzdGUgPSBmdW5j
dGlvbih0ZXh0KSB7CisgICAgICAgIGlmICh0aGlzLiRyZWFkT25seSkgCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRoaXMuX2VtaXQoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIHRoaXMu
aW5zZXJ0KHRleHQpOworICAgIH07CisKKworICAgIHRoaXMuZXhlY0NvbW1hbmQgPSBmdW5jdGlv
bihjb21tYW5kLCBhcmdzKSB7CisgICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhjb21tYW5kLCB0
aGlzLCBhcmdzKTsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24odGV4dCkgewor
ICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIG1vZGUgPSBz
ZXNzaW9uLmdldE1vZGUoKTsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKKworICAgICAgICBpZiAodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Cisg
ICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbW9kZS50cmFuc2Zvcm1BY3Rpb24oc2Vzc2lvbi5n
ZXRTdGF0ZShjdXJzb3Iucm93KSwgJ2luc2VydGlvbicsIHRoaXMsIHNlc3Npb24sIHRleHQpOwor
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdHJhbnNm
b3JtLnRleHQ7CisgICAgICAgIH0KKworICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcdCIs
IHRoaXMuc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rp
b24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjdXJzb3IgPSB0aGlzLnNlc3Npb24ucmVtb3Zl
KHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0
aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5zZXNzaW9uLmdldE92ZXJ3
cml0ZSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UuZnJvbVBvaW50cyhj
dXJzb3IsIGN1cnNvcik7CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICs9IHRleHQubGVu
Z3RoOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAgICAgdmFyIHN0YXJ0ID0g
Y3Vyc29yLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmVTdGF0ZSA9IHNlc3Npb24uZ2V0U3RhdGUo
Y3Vyc29yLnJvdyk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICB2YXIgc2hvdWxkT3V0ZGVudCA9IG1vZGUuY2hlY2tPdXRkZW50KGxpbmVT
dGF0ZSwgbGluZSwgdGV4dCk7CisgICAgICAgIHZhciBlbmQgPSBzZXNzaW9uLmluc2VydChjdXJz
b3IsIHRleHQpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtLnNlbGVjdGlv
bikgeworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybS5zZWxlY3Rpb24ubGVuZ3RoID09IDIpIHsg
Ly8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGNvbHVtbgorICAgICAgICAgICAg
ICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKAorICAgICAgICAgICAgICAgICAg
ICBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgc3RhcnQgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzBdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLnJvdywgc3RhcnQgKyB0cmFuc2Zv
cm0uc2VsZWN0aW9uWzFdKSk7CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBUcmFuc2Zvcm0gcmVs
YXRpdmUgdG8gdGhlIGN1cnJlbnQgcm93LgorICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9u
LnNldFNlbGVjdGlvblJhbmdlKAorICAgICAgICAgICAgICAgICAgICBuZXcgUmFuZ2UoY3Vyc29y
LnJvdyArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cmFuc2Zvcm0uc2VsZWN0aW9uWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3Vyc29yLnJvdyArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMl0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2VsZWN0aW9uWzNdKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHNlc3Npb24uZ2V0RG9jdW1lbnQoKS5pc05ld0xpbmUodGV4
dCkpIHsKKyAgICAgICAgICAgIHZhciBsaW5lSW5kZW50ID0gbW9kZS5nZXROZXh0TGluZUluZGVu
dChsaW5lU3RhdGUsIGxpbmUuc2xpY2UoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFi
U3RyaW5nKCkpOworCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhjdXJzb3Iucm93KzEs
IDApOworCisgICAgICAgICAgICB2YXIgc2l6ZSA9IHNlc3Npb24uZ2V0VGFiU2l6ZSgpOworICAg
ICAgICAgICAgdmFyIG1pbkluZGVudCA9IE51bWJlci5NQVhfVkFMVUU7CisKKyAgICAgICAgICAg
IGZvciAodmFyIHJvdyA9IGN1cnNvci5yb3cgKyAxOyByb3cgPD0gZW5kLnJvdzsgKytyb3cpIHsK
KyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gMDsKKworICAgICAgICAgICAgICAgIGxpbmUg
PSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxpbmUubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJB
dChpKSA9PSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9IHNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUuY2hhckF0KGkpID09ICcgJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAxOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoL1te
XHNdLy50ZXN0KGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBtaW5JbmRlbnQgPSBNYXRoLm1p
bihpbmRlbnQsIG1pbkluZGVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dmFyIHJvdyA9IGN1cnNvci5yb3cgKyAxOyByb3cgPD0gZW5kLnJvdzsgKytyb3cpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgb3V0ZGVudCA9IG1pbkluZGVudDsKKworICAgICAgICAgICAgICAgIGxp
bmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxpbmUubGVuZ3RoICYmIG91dGRlbnQgPiAwOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaW5lLmNoYXJBdChpKSA9PSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0ZGVudCAtPSBzaXplOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsaW5lLmNoYXJB
dChpKSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkZW50IC09IDE7CisgICAg
ICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHJvdywgMCwgcm93LCBpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3MoY3Vyc29yLnJvdyAr
IDEsIGVuZC5yb3csIGxpbmVJbmRlbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRP
dXRkZW50KQorICAgICAgICAgICAgbW9kZS5hdXRvT3V0ZGVudChsaW5lU3RhdGUsIHNlc3Npb24s
IGN1cnNvci5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uVGV4dElucHV0ID0gZnVuY3Rpb24o
dGV4dCkgeworICAgICAgICB0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQodGV4dCk7CisgICAg
fTsKKworICAgIHRoaXMub25Db21tYW5kS2V5ID0gZnVuY3Rpb24oZSwgaGFzaElkLCBrZXlDb2Rl
KSB7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoZSwgaGFzaElkLCBrZXlD
b2RlKTsKKyAgICB9OworICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRl
KSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRPdmVyd3JpdGUob3ZlcndyaXRlKTsKKyAgICB9
OworICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7CisgICAgfTsKKyAgICB0aGlzLnRvZ2dsZU92ZXJ3
cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlc3Npb24udG9nZ2xlT3ZlcndyaXRl
KCk7CisgICAgfTsKKyAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3BlZWQpIHsK
KyAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyLnNldFNjcm9sbFNwZWVkKHNwZWVkKTsKKyAgICB9
OworICAgIHRoaXMuZ2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJG1vdXNlSGFuZGxlci5nZXRTY3JvbGxTcGVlZCgpOworICAgIH07CisgICAgdGhpcy5z
ZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVsYXkpIHsKKyAgICAgICAgdGhpcy4kbW91c2VI
YW5kbGVyLnNldERyYWdEZWxheShkcmFnRGVsYXkpOworICAgIH07CisgICAgdGhpcy5nZXREcmFn
RGVsYXkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG1vdXNlSGFuZGxlci5n
ZXREcmFnRGVsYXkoKTsKKyAgICB9OworCisgICAgdGhpcy4kc2VsZWN0aW9uU3R5bGUgPSAibGlu
ZSI7CisgICAgdGhpcy5zZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7CisgICAg
ICAgIGlmICh0aGlzLiRzZWxlY3Rpb25TdHlsZSA9PSBzdHlsZSkgcmV0dXJuOworCisgICAgICAg
IHRoaXMuJHNlbGVjdGlvblN0eWxlID0gc3R5bGU7CisgICAgICAgIHRoaXMub25TZWxlY3Rpb25D
aGFuZ2UoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uU3R5bGUiLCB7ZGF0
YTogc3R5bGV9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvblN0eWxlOworICAgIH07CisKKyAg
ICB0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lID0gdHJ1ZTsKKyAgICB0aGlzLnNldEhpZ2hsaWdo
dEFjdGl2ZUxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAgICAgICAgaWYgKHRo
aXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBzaG91bGRIaWdo
bGlnaHQ7CisgICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKKyAgICB9
OworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZTsKKyAgICB9OworCisgICAgdGhpcy4k
aGlnaGxpZ2h0R3V0dGVyTGluZSA9IHRydWU7CisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJM
aW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRoaWdo
bGlnaHRHdXR0ZXJMaW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEhpZ2hsaWdodEd1dHRlckxpbmUoc2hvdWxkSGln
aGxpZ2h0KTsKKyAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IHNob3VsZEhpZ2hs
aWdodDsKKyAgICB9OworCisgICAgdGhpcy5nZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lOworICAgIH07
CisKKyAgICB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPSB0cnVlOworICAgIHRoaXMuc2V0
SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAg
ICAgIGlmICh0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPT0gc2hvdWxkSGlnaGxpZ2h0KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29y
ZCA9IHNob3VsZEhpZ2hsaWdodDsKKyAgICAgICAgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UoKTsK
KyAgICB9OworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ7CisgICAgfTsKKwor
ICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbihzaG91bGRBbmltYXRlKXsKKyAg
ICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRlZFNjcm9sbChzaG91bGRBbmltYXRlKTsKKyAg
ICB9OworCisgICAgdGhpcy5nZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKCl7CisgICAgICAg
IHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEFuaW1hdGVkU2Nyb2xsKCk7CisgICAgfTsKKyAgICB0
aGlzLnNldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oc2hvd0ludmlzaWJsZXMpIHsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcyk7CisgICAg
fTsKKyAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dJbnZpc2libGVzKCk7CisgICAgfTsKKworICAgIHRo
aXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKGRpc3BsYXkpOworICAgIH07CisK
KyAgICB0aGlzLmdldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RGlzcGxheUluZGVudEd1aWRlcygpOworICAgIH07Cisg
ICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTaG93UHJpbnRNYXJnaW4oc2hvd1ByaW50TWFyZ2lu
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dQcmludE1hcmdpbigpOworICAgIH07
CisgICAgdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdp
bikgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByaW50TWFyZ2luQ29sdW1uKHNob3dQcmlu
dE1hcmdpbik7CisgICAgfTsKKyAgICB0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFByaW50TWFyZ2luQ29sdW1u
KCk7CisgICAgfTsKKworICAgIHRoaXMuJHJlYWRPbmx5ID0gZmFsc2U7CisgICAgdGhpcy5zZXRS
ZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAgICAgIHRoaXMuJHJlYWRPbmx5ID0g
cmVhZE9ubHk7CisgICAgICAgIHRoaXMudGV4dElucHV0LnNldFJlYWRPbmx5KHJlYWRPbmx5KTsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoIXJlYWRPbmx5
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0UmVhZE9ubHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJHJlYWRPbmx5OworICAgIH07CisKKyAgICB0aGlzLiRtb2RlQmVoYXZpb3Vy
cyA9IHRydWU7CisgICAgdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFi
bGVkKSB7CisgICAgICAgIHRoaXMuJG1vZGVCZWhhdmlvdXJzID0gZW5hYmxlZDsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLiRtb2RlQmVoYXZpb3VyczsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZVdyYXBC
ZWhhdmlvdXJzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1
bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9IGVu
YWJsZWQ7CisgICAgfTsKKyAgICB0aGlzLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VyczsKKyAgICB9
OworICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAgICAg
ICB2YXIgZ3V0dGVyID0gdGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXI7CisgICAgICAgIGlmIChn
dXR0ZXIuZ2V0U2hvd0ZvbGRXaWRnZXRzKCkgPT0gc2hvdykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5zZXRTaG93Rm9sZFdpZGdldHMo
c2hvdyk7CisgICAgICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9IHNob3c7CisgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlRnVsbCgpOworICAgIH07CisgICAgdGhpcy5nZXRTaG93Rm9sZFdp
ZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuJGd1dHRl
ckxheWVyLmdldFNob3dGb2xkV2lkZ2V0cygpOworICAgIH07CisKKyAgICB0aGlzLnNldEZhZGVG
b2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRG
YWRlRm9sZFdpZGdldHMoc2hvdyk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0RmFkZUZvbGRXaWRn
ZXRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZhZGVG
b2xkV2lkZ2V0cygpOworICAgIH07CisgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihkaXIpIHsK
KyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSl7CisgICAgICAgICAgICBpZiAo
ZGlyID09ICJsZWZ0IikKKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMZWZ0
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2Vs
ZWN0UmlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkg
eworICAgICAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgICAgICB2
YXIgc3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAg
ICB2YXIgbmV3X3JhbmdlID0gc2Vzc2lvbi5nZXRNb2RlKCkudHJhbnNmb3JtQWN0aW9uKHN0YXRl
LCAnZGVsZXRpb24nLCB0aGlzLCBzZXNzaW9uLCByYW5nZSk7CisgICAgICAgICAgICBpZiAobmV3
X3JhbmdlKQorICAgICAgICAgICAgICAgIHJhbmdlID0gbmV3X3JhbmdlOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAgIHRoaXMuY2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlV29yZFJpZ2h0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkUmlnaHQoKTsKKworICAgICAgICB0aGlzLnNlc3Npb24u
cmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlV29yZExlZnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRoaXMu
c2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92
ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9u
KCk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZVRvTGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlzLnNl
bGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQoKTsKKworICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3Zl
KHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24o
KTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlVG9MaW5lRW5kID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlzLnNlbGVj
dGlvbi5zZWxlY3RMaW5lRW5kKCk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxl
Y3Rpb25SYW5nZSgpOworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uID09IHJhbmdlLmVu
ZC5jb2x1bW4gJiYgcmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpIHsKKyAgICAgICAg
ICAgIHJhbmdlLmVuZC5jb2x1bW4gPSAwOworICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdysrOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAg
IHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMuc3BsaXRMaW5lID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7Cisg
ICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB0aGlzLmluc2Vy
dCgiXG4iKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihjdXJzb3IpOworICAg
IH07CisgICAgdGhpcy50cmFuc3Bvc2VMZXR0ZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOwor
ICAgICAgICB2YXIgY29sdW1uID0gY3Vyc29yLmNvbHVtbjsKKyAgICAgICAgaWYgKGNvbHVtbiA9
PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vz
c2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICB2YXIgc3dhcCwgcmFuZ2U7CisgICAg
ICAgIGlmIChjb2x1bW4gPCBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgc3dhcCA9IGxpbmUu
Y2hhckF0KGNvbHVtbikgKyBsaW5lLmNoYXJBdChjb2x1bW4tMSk7CisgICAgICAgICAgICByYW5n
ZSA9IG5ldyBSYW5nZShjdXJzb3Iucm93LCBjb2x1bW4tMSwgY3Vyc29yLnJvdywgY29sdW1uKzEp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3dhcCA9IGxpbmUuY2hh
ckF0KGNvbHVtbi0xKSArIGxpbmUuY2hhckF0KGNvbHVtbi0yKTsKKyAgICAgICAgICAgIHJhbmdl
ID0gbmV3IFJhbmdlKGN1cnNvci5yb3csIGNvbHVtbi0yLCBjdXJzb3Iucm93LCBjb2x1bW4pOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCBzd2FwKTsKKyAg
ICB9OworICAgIHRoaXMudG9Mb3dlckNhc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG9y
aWdpbmFsUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIGlmICh0aGlz
LnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVj
dFdvcmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UoKTsKKyAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdl
KHJhbmdlKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9Mb3dl
ckNhc2UoKSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdp
bmFsUmFuZ2UpOworICAgIH07CisgICAgdGhpcy50b1VwcGVyQ2FzZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAg
ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhpcy5z
ZWxlY3Rpb24uc2VsZWN0V29yZCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lv
bi5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5n
ZSwgdGV4dC50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0
aW9uUmFuZ2Uob3JpZ2luYWxSYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLmluZGVudCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFy
IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworCisgICAgICAgIGlmIChyYW5nZS5z
dGFydC5yb3cgPCByYW5nZS5lbmQucm93IHx8IHJhbmdlLnN0YXJ0LmNvbHVtbiA8IHJhbmdlLmVu
ZC5jb2x1bW4pIHsKKyAgICAgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dz
KCk7CisgICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJzdCwgcm93cy5sYXN0
LCAiXHQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBpbmRlbnRTdHJpbmc7
CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSkgeworICAg
ICAgICAgICAgICAgIHZhciBzaXplICAgICAgICA9IHNlc3Npb24uZ2V0VGFiU2l6ZSgpLAorICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgY29sdW1uICAgICAgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3Jl
ZW5Db2x1bW4ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pLAorICAgICAgICAgICAgICAg
ICAgICBjb3VudCAgICAgICA9IChzaXplIC0gY29sdW1uICUgc2l6ZSk7CisKKyAgICAgICAgICAg
ICAgICBpbmRlbnRTdHJpbmcgPSBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIGNvdW50KTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGluZGVudFN0cmluZyA9ICJcdCI7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZW50U3RyaW5nKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5ibG9ja0luZGVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93
cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB0aGlzLnNlc3Npb24uaW5kZW50
Um93cyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsICJcdCIpOworICAgIH07CisgICAgdGhpcy5ibG9j
a091dGRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vz
c2lvbi5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLm91dGRlbnRSb3dzKHNl
bGVjdGlvbi5nZXRSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMuc29ydExpbmVzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CisgICAg
ICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIHZhciBsaW5lcyA9IFtd
OworICAgICAgICBmb3IgKGkgPSByb3dzLmZpcnN0OyBpIDw9IHJvd3MubGFzdDsgaSsrKQorICAg
ICAgICAgICAgbGluZXMucHVzaChzZXNzaW9uLmdldExpbmUoaSkpOworCisgICAgICAgIGxpbmVz
LnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA8
IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNh
c2UoKSA+IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAs
IDAsIDApOworICAgICAgICBmb3IgKHZhciBpID0gcm93cy5maXJzdDsgaSA8PSByb3dzLmxhc3Q7
IGkrKykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoaSk7CisgICAg
ICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5yb3cgPSBpOworICAgICAgICAgICAgZGVsZXRlUmFu
Z2UuZW5kLnJvdyA9IGk7CisgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbGlu
ZS5sZW5ndGg7CisgICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIGxpbmVz
W2ktcm93cy5maXJzdF0pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnRvZ2dsZUNvbW1l
bnRMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNlc3Npb24u
Z2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyk7CisgICAgICAgIHZhciByb3dz
ID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRNb2Rl
KCkudG9nZ2xlQ29tbWVudExpbmVzKHN0YXRlLCB0aGlzLnNlc3Npb24sIHJvd3MuZmlyc3QsIHJv
d3MubGFzdCk7CisgICAgfTsKKyAgICB0aGlzLmdldE51bWJlckF0ID0gZnVuY3Rpb24oIHJvdywg
Y29sdW1uICkgeworICAgICAgICB2YXIgX251bWJlclJ4ID0gL1tcLV0/WzAtOV0rKD86XC5bMC05
XSspPy9nCisgICAgICAgIF9udW1iZXJSeC5sYXN0SW5kZXggPSAwCisKKyAgICAgICAgdmFyIHMg
PSB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpCisgICAgICAgIHdoaWxlKF9udW1iZXJSeC5sYXN0
SW5kZXggPCBjb2x1bW4gLSAxICl7CisgICAgICAgICAgICB2YXIgbSA9IF9udW1iZXJSeC5leGVj
KHMpCisgICAgICAgICAgICBpZihtLmluZGV4IDw9IGNvbHVtbiAmJiBtLmluZGV4K21bMF0ubGVu
Z3RoID49IGNvbHVtbil7CisgICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWU6IG1bMF0sCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtLmlu
ZGV4LAorICAgICAgICAgICAgICAgICAgICBlbmQ6IG0uaW5kZXgrbVswXS5sZW5ndGgKKworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICB0aGlzLm1v
ZGlmeU51bWJlciA9IGZ1bmN0aW9uKGFtb3VudCkgeworICAgICAgICB2YXIgcm93ID0gdGhpcy5z
ZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5zZWxl
Y3Rpb24uZ2V0Q3Vyc29yKCkuY29sdW1uOworICAgICAgICB2YXIgY2hhclJhbmdlID0gbmV3IFJh
bmdlKHJvdywgY29sdW1uLTEsIHJvdywgY29sdW1uKTsKKworICAgICAgICB2YXIgYyA9IHRoaXMu
c2Vzc2lvbi5nZXRUZXh0UmFuZ2UoY2hhclJhbmdlKTsKKyAgICAgICAgaWYgKCFpc05hTihwYXJz
ZUZsb2F0KGMpKSAmJiBpc0Zpbml0ZShjKSkgeworICAgICAgICAgICAgdmFyIG5yID0gdGhpcy5n
ZXROdW1iZXJBdChyb3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAobnIpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZnAgPSBuci52YWx1ZS5pbmRleE9mKCIuIikgPj0gMCA/IG5yLnN0YXJ0ICsg
bnIudmFsdWUuaW5kZXhPZigiLiIpICsgMSA6IG5yLmVuZDsKKyAgICAgICAgICAgICAgICB2YXIg
ZGVjaW1hbHMgPSBuci5zdGFydCArIG5yLnZhbHVlLmxlbmd0aCAtIGZwOworCisgICAgICAgICAg
ICAgICAgdmFyIHQgPSBwYXJzZUZsb2F0KG5yLnZhbHVlKTsKKyAgICAgICAgICAgICAgICB0ICo9
IE1hdGgucG93KDEwLCBkZWNpbWFscyk7CisgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAg
ICAgICBpZihmcCAhPT0gbnIuZW5kICYmIGNvbHVtbiA8IGZwKXsKKyAgICAgICAgICAgICAgICAg
ICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4gLSAxKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhbW91bnQgKj0gTWF0aC5wb3co
MTAsIG5yLmVuZCAtIGNvbHVtbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHQgKz0gYW1vdW50OworICAgICAgICAgICAgICAgIHQgLz0gTWF0
aC5wb3coMTAsIGRlY2ltYWxzKTsKKyAgICAgICAgICAgICAgICB2YXIgbm5yID0gdC50b0ZpeGVk
KGRlY2ltYWxzKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJhbmdlID0gbmV3IFJhbmdl
KHJvdywgbnIuc3RhcnQsIHJvdywgbnIuZW5kKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNlc3Np
b24ucmVwbGFjZShyZXBsYWNlUmFuZ2UsIG5ucik7CisgICAgICAgICAgICAgICAgdGhpcy5tb3Zl
Q3Vyc29yVG8ocm93LCBNYXRoLm1heChuci5zdGFydCArMSwgY29sdW1uICsgbm5yLmxlbmd0aCAt
IG5yLnZhbHVlLmxlbmd0aCkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvd3MgPSB0
aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdmFyIHJhbmdlOworICAgICAgICBpZiAo
cm93cy5maXJzdCA9PT0gMCB8fCByb3dzLmxhc3QrMSA8IHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKHJvd3MuZmlyc3QsIDAsIHJvd3MubGFz
dCsxLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoCisg
ICAgICAgICAgICAgICAgcm93cy5maXJzdC0xLCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dzLmZp
cnN0LTEpLmxlbmd0aCwKKyAgICAgICAgICAgICAgICByb3dzLmxhc3QsIHRoaXMuc2Vzc2lvbi5n
ZXRMaW5lKHJvd3MubGFzdCkubGVuZ3RoCisgICAgICAgICAgICApOworICAgICAgICB0aGlzLnNl
c3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAg
IH07CisKKyAgICB0aGlzLmR1cGxpY2F0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgc2VsID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIHZhciBkb2MgPSB0aGlzLnNlc3Np
b247CisgICAgICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZSgpOworICAgICAgICBpZiAocmFu
Z2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93Owor
ICAgICAgICAgICAgZG9jLmR1cGxpY2F0ZUxpbmVzKHJvdywgcm93KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhciByZXZlcnNlID0gc2VsLmlzQmFja3dhcmRzKCkKKyAgICAgICAg
ICAgIHZhciBwb2ludCA9IHNlbC5pc0JhY2t3YXJkcygpID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5l
bmQ7CisgICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBkb2MuaW5zZXJ0KHBvaW50LCBkb2MuZ2V0
VGV4dFJhbmdlKHJhbmdlKSwgZmFsc2UpOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBwb2lu
dDsKKyAgICAgICAgICAgIHJhbmdlLmVuZCA9IGVuZFBvaW50OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzZWwuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJldmVyc2UpCisgICAgICAgIH0K
KyAgICB9OworICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnNlc3Npb24ubW92ZUxpbmVzRG93bihmaXJzdFJvdywgbGFzdFJvdyk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgdGhpcy5tb3ZlTGluZXNVcCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ubW92ZUxpbmVzVXAoZmlyc3RSb3csIGxhc3RS
b3cpOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMubW92ZVRleHQgPSBmdW5jdGlvbihy
YW5nZSwgdG9Qb3NpdGlvbikgeworICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLm1vdmVUZXh0
KHJhbmdlLCB0b1Bvc2l0aW9uKTsKKyAgICB9OworICAgIHRoaXMuY29weUxpbmVzVXAgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUxpbmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0
Um93KSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uZHVwbGljYXRlTGluZXMoZmlyc3RSb3cs
IGxhc3RSb3cpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgdGhpcy5jb3B5TGluZXNEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVM
aW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuc2Vzc2lvbi5kdXBsaWNhdGVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIH0p
OworICAgIH07CisgICAgdGhpcy4kbW92ZUxpbmVzID0gZnVuY3Rpb24obW92ZXIpIHsKKyAgICAg
ICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdmFyIHNlbGVj
dGlvbiA9IHRoaXMuc2VsZWN0aW9uOworICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc011bHRpTGlu
ZSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAg
ICAgICAgICAgIHZhciByZXZlcnNlID0gc2VsZWN0aW9uLmlzQmFja3dhcmRzKCk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgbGluZXNNb3ZlZCA9IG1vdmVyLmNhbGwodGhpcywgcm93cy5maXJz
dCwgcm93cy5sYXN0KTsKKworICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHJhbmdl
LnN0YXJ0LnJvdyArPSBsaW5lc01vdmVkOworICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyArPSBs
aW5lc01vdmVkOworICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdl
LCByZXZlcnNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlbGVj
dGlvbi5zZXRTZWxlY3Rpb25BbmNob3Iocm93cy5sYXN0K2xpbmVzTW92ZWQrMSwgMCk7CisgICAg
ICAgICAgICBzZWxlY3Rpb24uJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhyb3dzLmZpcnN0K2xpbmVzTW92ZWQsIDApOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuJGdldFNlbGVjdGVk
Um93cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlv
blJhbmdlKCkuY29sbGFwc2VSb3dzKCk7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGZpcnN0OiByYW5nZS5zdGFydC5yb3csCisgICAgICAgICAgICBsYXN0OiByYW5nZS5lbmQucm93
CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVu
Y3Rpb24odGV4dCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbih0aGlz
LmdldEN1cnNvclBvc2l0aW9uKCkpOworICAgIH07CisKKyAgICB0aGlzLm9uQ29tcG9zaXRpb25V
cGRhdGUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29tcG9z
aXRpb25UZXh0KHRleHQpOworICAgIH07CisKKyAgICB0aGlzLm9uQ29tcG9zaXRpb25FbmQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpcnN0VmlzaWJsZVJvdygpOworICAgIH07CisgICAg
dGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpOworICAgIH07CisgICAgdGhpcy5pc1Jvd1Zp
c2libGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5nZXRG
aXJzdFZpc2libGVSb3coKSAmJiByb3cgPD0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpKTsKKyAg
ICB9OworICAgIHRoaXMuaXNSb3dGdWxseVZpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAg
ICAgcmV0dXJuIChyb3cgPj0gdGhpcy5yZW5kZXJlci5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygp
ICYmIHJvdyA8PSB0aGlzLnJlbmRlcmVyLmdldExhc3RGdWxseVZpc2libGVSb3coKSk7CisgICAg
fTsKKyAgICB0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCkgLSB0aGlzLnJlbmRlcmVy
LmdldFNjcm9sbFRvcFJvdygpICsgMTsKKyAgICB9OworCisgICAgdGhpcy4kbW92ZUJ5UGFnZSA9
IGZ1bmN0aW9uKGRpciwgc2VsZWN0KSB7CisgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVu
ZGVyZXI7CisgICAgICAgIHZhciBjb25maWcgPSB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnOwor
ICAgICAgICB2YXIgcm93cyA9IGRpciAqIE1hdGguZmxvb3IoY29uZmlnLmhlaWdodCAvIGNvbmZp
Zy5saW5lSGVpZ2h0KTsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrOworICAgICAg
ICBpZiAoc2VsZWN0ID09IHRydWUpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLiRtb3Zl
U2VsZWN0aW9uKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnko
cm93cywgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3QgPT0g
ZmFsc2UpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShyb3dzLCAw
KTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmctLTsKKworICAgICAgICB2YXIgc2Nyb2xs
VG9wID0gcmVuZGVyZXIuc2Nyb2xsVG9wOworCisgICAgICAgIHJlbmRlcmVyLnNjcm9sbEJ5KDAs
IHJvd3MgKiBjb25maWcubGluZUhlaWdodCk7CisgICAgICAgIGlmIChzZWxlY3QgIT0gbnVsbCkK
KyAgICAgICAgICAgIHJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7CisK
KyAgICAgICAgcmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOworICAgIH07Cisg
ICAgdGhpcy5zZWxlY3RQYWdlRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3Zl
QnlQYWdlKDEsIHRydWUpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RQYWdlVXAgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgdHJ1ZSk7CisgICAgfTsKKyAgICB0
aGlzLmdvdG9QYWdlRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgIHRoaXMuJG1vdmVCeVBhZ2Uo
MSwgZmFsc2UpOworICAgIH07CisgICAgdGhpcy5nb3RvUGFnZVVwID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoLTEsIGZhbHNlKTsKKyAgICB9OworICAgIHRoaXMuc2Ny
b2xsUGFnZURvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxKTsK
KyAgICB9OworICAgIHRoaXMuc2Nyb2xsUGFnZVVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMuJG1vdmVCeVBhZ2UoLTEpOworICAgIH07CisgICAgdGhpcy5zY3JvbGxUb1JvdyA9IGZ1bmN0
aW9uKHJvdykgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvUm93KHJvdyk7CisgICAg
fTsKKyAgICB0aGlzLnNjcm9sbFRvTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGNlbnRlciwgYW5pbWF0
ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb0xpbmUobGluZSwg
Y2VudGVyLCBhbmltYXRlLCBjYWxsYmFjayk7CisgICAgfTsKKyAgICB0aGlzLmNlbnRlclNlbGVj
dGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlv
blJhbmdlKCk7CisgICAgICAgIHZhciBwb3MgPSB7CisgICAgICAgICAgICByb3c6IE1hdGguZmxv
b3IocmFuZ2Uuc3RhcnQucm93ICsgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cpIC8g
MiksCisgICAgICAgICAgICBjb2x1bW46IE1hdGguZmxvb3IocmFuZ2Uuc3RhcnQuY29sdW1uICsg
KHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4pIC8gMikKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLnJlbmRlcmVyLmFsaWduQ3Vyc29yKHBvcywgMC41KTsKKyAgICB9OworICAg
IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuc2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgIH07CisgICAgdGhpcy5nZXRDdXJzb3JQb3Np
dGlvblNjcmVlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmRv
Y3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpOworICAgIH07
CisgICAgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0QWxs
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7CisgICAg
ICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpOworICAgICAgICB0aGlzLiRibG9ja1Njcm9s
bGluZyAtPSAxOworICAgIH07CisgICAgdGhpcy5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAg
dGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0aGlz
LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOworICAgIH07CisgICAgdGhpcy5t
b3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICB0aGlzLnNlbGVj
dGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgIH07CisgICAgdGhpcy5qdW1wVG9N
YXRjaGluZyA9IGZ1bmN0aW9uKHNlbGVjdCkgeworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5n
ZXRDdXJzb3JQb3NpdGlvbigpOworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2Vzc2lvbi5n
ZXRCcmFja2V0UmFuZ2UoY3Vyc29yKTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAg
ICAgcmFuZ2UgPSB0aGlzLmZpbmQoeworICAgICAgICAgICAgICAgIG5lZWRsZTogL1t7fSgpXFtc
XV0vZywKKyAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOnRydWUsCisgICAgICAgICAgICAg
ICAgc3RhcnQ6IHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbiAtIDF9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgdmFyIHBvcyA9IHJhbmdlLnN0YXJ0OworICAgICAgICAgICAg
aWYgKHBvcy5yb3cgPT0gY3Vyc29yLnJvdyAmJiBNYXRoLmFicyhwb3MuY29sdW1uIC0gY3Vyc29y
LmNvbHVtbikgPCAyKQorICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEJy
YWNrZXRSYW5nZShwb3MpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwb3MgPSByYW5n
ZSAmJiByYW5nZS5jdXJzb3IgfHwgcG9zOworICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAg
ICBpZiAoc2VsZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLmlzRXF1
YWwodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5j
bGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0VG8ocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3Mucm93LCBwb3MuY29sdW1uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nb3RvTGluZSA9IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbiwgYW5pbWF0ZSkgeworICAgICAgICB0aGlzLnNlbGVjdGlv
bi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xkKHtyb3c6IGxp
bmVOdW1iZXIgLSAxLCBjb2x1bW46IGNvbHVtbiB8fCAwfSk7CisKKyAgICAgICAgdGhpcy4kYmxv
Y2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGluZU51bWJlciAt
IDEsIGNvbHVtbiB8fCAwKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKwor
ICAgICAgICBpZiAoIXRoaXMuaXNSb3dGdWxseVZpc2libGUobGluZU51bWJlciAtIDEpKQorICAg
ICAgICAgICAgdGhpcy5zY3JvbGxUb0xpbmUobGluZU51bWJlciAtIDEsIHRydWUsIGFuaW1hdGUp
OworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsK
KyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JU
byhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlVXAgPSBmdW5jdGlvbih0
aW1lcykgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JC
eSgtdGltZXMsIDApOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZURvd24gPSBmdW5jdGlvbih0
aW1lcykgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JC
eSh0aW1lcywgMCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGVmdCA9IGZ1bmN0aW9uKHRp
bWVzKSB7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7
CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpbWVzID0gdGltZXMgfHwg
MTsKKyAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z
ZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlUmln
aHQgPSBmdW5jdGlvbih0aW1lcykgeworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuZ2V0U2VsZWN0aW9u
UmFuZ2UoKS5lbmQ7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVj
dGlvbkVuZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aW1lcyA9
IHRpbWVzIHx8IDE7CisgICAgICAgICAgICB3aGlsZSAodGltZXMtLSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMu
bmF2aWdhdGVMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24u
bW92ZUN1cnNvckxpbmVTdGFydCgpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGluZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpOworICAgICAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CisgICAg
ICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlRW5kKCk7CisgICAgICAgIHRoaXMuY2xl
YXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNj
cm9sbFRvcCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDsKKyAg
ICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVTdGFydCgpOworICAgICAgICB0aGlz
LmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGlu
ZyhzY3JvbGxUb3ApOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVdvcmRSaWdodCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7Cisg
ICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdhdGVX
b3JkTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29y
V29yZExlZnQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07CisgICAg
dGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHsKKyAgICAgICAg
aWYgKG9wdGlvbnMpCisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOworCisg
ICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7CisgICAg
ICAgIHZhciByZXBsYWNlZCA9IDA7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICBy
ZXR1cm4gcmVwbGFjZWQ7CisKKyAgICAgICAgaWYgKHRoaXMuJHRyeVJlcGxhY2UocmFuZ2UsIHJl
cGxhY2VtZW50KSkgeworICAgICAgICAgICAgcmVwbGFjZWQgPSAxOworICAgICAgICB9CisgICAg
ICAgIGlmIChyYW5nZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0
U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxT
ZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXBsYWNlZDsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZUFsbCA9IGZ1
bmN0aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zKSB7Cisg
ICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7CisgICAg
ICAgIHZhciByZXBsYWNlZCA9IDA7CisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiByZXBsYWNlZDsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAr
PSAxOworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7
CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24u
bW92ZUN1cnNvclRvKDAsIDApOworCisgICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3Ro
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmKHRoaXMuJHRyeVJlcGxhY2UocmFu
Z2VzW2ldLCByZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlZCsrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0
aW9uUmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsK
KworICAgICAgICByZXR1cm4gcmVwbGFjZWQ7CisgICAgfTsKKworICAgIHRoaXMuJHRyeVJlcGxh
Y2UgPSBmdW5jdGlvbihyYW5nZSwgcmVwbGFjZW1lbnQpIHsKKyAgICAgICAgdmFyIGlucHV0ID0g
dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIHJlcGxhY2VtZW50ID0g
dGhpcy4kc2VhcmNoLnJlcGxhY2UoaW5wdXQsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYgKHJl
cGxhY2VtZW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICByYW5nZS5lbmQgPSB0aGlzLnNlc3Np
b24ucmVwbGFjZShyYW5nZSwgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFNlYXJjaE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJHNlYXJjaC5nZXRPcHRpb25zKCk7CisgICAgfTsKKyAgICB0aGlz
LmZpbmQgPSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFuaW1hdGUpIHsKKyAgICAgICAgaWYg
KCFvcHRpb25zKQorICAgICAgICAgICAgb3B0aW9ucyA9IHt9OworCisgICAgICAgIGlmICh0eXBl
b2YgbmVlZGxlID09ICJzdHJpbmciIHx8IG5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cCkKKyAgICAg
ICAgICAgIG9wdGlvbnMubmVlZGxlID0gbmVlZGxlOworICAgICAgICBlbHNlIGlmICh0eXBlb2Yg
bmVlZGxlID09ICJvYmplY3QiKQorICAgICAgICAgICAgb29wLm1peGluKG9wdGlvbnMsIG5lZWRs
ZSk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAg
ICAgICAgaWYgKG9wdGlvbnMubmVlZGxlID09IG51bGwpIHsKKyAgICAgICAgICAgIG5lZWRsZSA9
IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpCisgICAgICAgICAgICAgICAgfHwgdGhp
cy4kc2VhcmNoLiRvcHRpb25zLm5lZWRsZTsKKyAgICAgICAgICAgIGlmICghbmVlZGxlKSB7Cisg
ICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0
YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBuZWVkbGUgPSB0
aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuJHNlYXJjaC5zZXQoe25lZWRsZTogbmVlZGxlfSk7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOworICAgICAgICBpZiAoIW9wdGlvbnMuc3Rh
cnQpCisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KHtzdGFydDogcmFuZ2V9KTsKKworICAg
ICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOworICAg
ICAgICBpZiAob3B0aW9ucy5wcmV2ZW50U2Nyb2xsKQorICAgICAgICAgICAgcmV0dXJuIG5ld1Jh
bmdlOworICAgICAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMucmV2ZWFsUmFu
Z2UobmV3UmFuZ2UsIGFuaW1hdGUpOworICAgICAgICAgICAgcmV0dXJuIG5ld1JhbmdlOworICAg
ICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLmJhY2t3YXJkcykKKyAgICAgICAgICAgIHJhbmdl
LnN0YXJ0ID0gcmFuZ2UuZW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICByYW5nZS5lbmQg
PSByYW5nZS5zdGFydDsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UpOwor
ICAgIH07CisgICAgdGhpcy5maW5kTmV4dCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHsK
KyAgICAgICAgdGhpcy5maW5kKHtza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiBmYWxzZX0s
IG9wdGlvbnMsIGFuaW1hdGUpOworICAgIH07CisgICAgdGhpcy5maW5kUHJldmlvdXMgPSBmdW5j
dGlvbihvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuZmluZChvcHRpb25zLCB7c2tp
cEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogdHJ1ZX0sIGFuaW1hdGUpOworICAgIH07CisKKyAg
ICB0aGlzLnJldmVhbFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsIGFuaW1hdGUpIHsKKyAgICAgICAg
dGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZChy
YW5nZSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsK
KyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKworICAgICAgICB2YXIgc2Nyb2xs
VG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Ny
b2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTsKKyAgICAg
ICAgaWYgKGFuaW1hdGUgIT0gZmFsc2UpCisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1h
dGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrOworICAgICAgICB0aGlzLnNlc3Np
b24uZ2V0VW5kb01hbmFnZXIoKS51bmRvKCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5n
LS07CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41
KTsKKyAgICB9OworICAgIHRoaXMucmVkbyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRi
bG9ja1Njcm9sbGluZysrOworICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5y
ZWRvKCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07CisgICAgICAgIHRoaXMucmVu
ZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsKKyAgICB9OworICAgIHRoaXMu
ZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTsK
KyAgICB9OworCit9KS5jYWxsKEVkaXRvci5wcm90b3R5cGUpOworCisKK2V4cG9ydHMuRWRpdG9y
ID0gRWRpdG9yOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvbGFuZycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKworZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAg
cmV0dXJuIHN0cmluZy5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpOworfTsKKworZXhwb3J0
cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkgeworICAgIHZhciByZXN1
bHQgPSAnJzsKKyAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgIGlmIChjb3VudCAmIDEp
CisgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nOworCisgICAgICAgIGlmIChjb3VudCA+Pj0g
MSkKKyAgICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9OworCit2YXIgdHJpbUJlZ2luUmVnZXhwID0gL15cc1xzKi87Cit2YXIgdHJpbUVuZFJl
Z2V4cCA9IC9cc1xzKiQvOworCitleHBvcnRzLnN0cmluZ1RyaW1MZWZ0ID0gZnVuY3Rpb24gKHN0
cmluZykgeworICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICcnKTsK
K307CisKK2V4cG9ydHMuc3RyaW5nVHJpbVJpZ2h0ID0gZnVuY3Rpb24gKHN0cmluZykgeworICAg
IHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cit9OworCitleHBvcnRz
LmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgY29weSA9IHt9OworICAgIGZv
ciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CisgICAg
fQorICAgIHJldHVybiBjb3B5OworfTsKKworZXhwb3J0cy5jb3B5QXJyYXkgPSBmdW5jdGlvbihh
cnJheSl7CisgICAgdmFyIGNvcHkgPSBbXTsKKyAgICBmb3IgKHZhciBpPTAsIGw9YXJyYXkubGVu
Z3RoOyBpPGw7IGkrKykgeworICAgICAgICBpZiAoYXJyYXlbaV0gJiYgdHlwZW9mIGFycmF5W2ld
ID09ICJvYmplY3QiKQorICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdCggYXJy
YXlbaV0gKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGNvcHlbaV0gPSBhcnJheVtpXTsK
KyAgICB9CisgICAgcmV0dXJuIGNvcHk7Cit9OworCitleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rp
b24gKG9iaikgeworICAgIGlmICh0eXBlb2Ygb2JqICE9ICJvYmplY3QiKSB7CisgICAgICAgIHJl
dHVybiBvYmo7CisgICAgfQorICAgIAorICAgIHZhciBjb3B5ID0gb2JqLmNvbnN0cnVjdG9yKCk7
CisgICAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAgICAgICBpZiAodHlwZW9mIG9ialtrZXld
ID09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBjb3B5W2tleV0gPSB0aGlzLmRlZXBDb3B5KG9i
altrZXldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvcHlba2V5XSA9IG9ialtr
ZXldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3B5OworfTsKKworZXhwb3J0cy5h
cnJheVRvTWFwID0gZnVuY3Rpb24oYXJyKSB7CisgICAgdmFyIG1hcCA9IHt9OworICAgIGZvciAo
dmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbWFwW2FycltpXV0gPSAxOwor
ICAgIH0KKyAgICByZXR1cm4gbWFwOworCit9OworCitleHBvcnRzLmNyZWF0ZU1hcCA9IGZ1bmN0
aW9uKHByb3BzKSB7CisgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgZm9y
ICh2YXIgaSBpbiBwcm9wcykgeworICAgICAgICBtYXBbaV0gPSBwcm9wc1tpXTsKKyAgICB9Cisg
ICAgcmV0dXJuIG1hcDsKK307CitleHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJyYXks
IHZhbHVlKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgaWYgKHZhbHVlID09PSBhcnJheVtpXSkgeworICAgICAgYXJyYXkuc3BsaWNlKGksIDEpOwor
ICAgIH0KKyAgfQorfTsKKworZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHIpIHsK
KyAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEn
KTsKK307CisKK2V4cG9ydHMuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHN0cikgeworICAgIHJldHVy
biBzdHIucmVwbGFjZSgvJi9nLCAiJiMzODsiKS5yZXBsYWNlKC8iL2csICImIzM0OyIpLnJlcGxh
Y2UoLycvZywgIiYjMzk7IikucmVwbGFjZSgvPC9nLCAiJiM2MDsiKTsKK307CisKK2V4cG9ydHMu
Z2V0TWF0Y2hPZmZzZXRzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdFeHApIHsKKyAgICB2YXIgbWF0
Y2hlcyA9IFtdOworCisgICAgc3RyaW5nLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihzdHIpIHsK
KyAgICAgICAgbWF0Y2hlcy5wdXNoKHsKKyAgICAgICAgICAgIG9mZnNldDogYXJndW1lbnRzW2Fy
Z3VtZW50cy5sZW5ndGgtMl0sCisgICAgICAgICAgICBsZW5ndGg6IHN0ci5sZW5ndGgKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gbWF0Y2hlczsKK307CitleHBvcnRzLmRlZmVy
cmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikgeworCisgICAgdmFyIHRpbWVyID0gbnVsbDsKKyAgICB2
YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAgICAg
ICBmY24oKTsKKyAgICB9OworCisgICAgdmFyIGRlZmVycmVkID0gZnVuY3Rpb24odGltZW91dCkg
eworICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKKyAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0
KGNhbGxiYWNrLCB0aW1lb3V0IHx8IDApOworICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAg
fTsKKworICAgIGRlZmVycmVkLnNjaGVkdWxlID0gZGVmZXJyZWQ7CisKKyAgICBkZWZlcnJlZC5j
YWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY2FuY2VsKCk7CisgICAgICAgIGZjbigp
OworICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfTsKKworICAgIGRlZmVycmVkLmNhbmNl
bCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOworICAgICAgICB0
aW1lciA9IG51bGw7CisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9OworCisgICAgcmV0
dXJuIGRlZmVycmVkOworfTsKKworCitleHBvcnRzLmRlbGF5ZWRDYWxsID0gZnVuY3Rpb24oZmNu
LCBkZWZhdWx0VGltZW91dCkgeworICAgIHZhciB0aW1lciA9IG51bGw7CisgICAgdmFyIGNhbGxi
YWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRpbWVyID0gbnVsbDsKKyAgICAgICAgZmNuKCk7
CisgICAgfTsKKworICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKKyAgICAgICAg
dGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0
KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKKyAgICB9OworCisgICAgX3Nl
bGYuZGVsYXkgPSBfc2VsZjsKKyAgICBfc2VsZi5zY2hlZHVsZSA9IGZ1bmN0aW9uKHRpbWVvdXQp
IHsKKyAgICAgICAgaWYgKHRpbWVyID09IG51bGwpCisgICAgICAgICAgICB0aW1lciA9IHNldFRp
bWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CisgICAgfTsKKworICAgIF9zZWxmLmNhbGwg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jYW5jZWwoKTsKKyAgICAgICAgZmNuKCk7Cisg
ICAgfTsKKworICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aW1lciAm
JiBjbGVhclRpbWVvdXQodGltZXIpOworICAgICAgICB0aW1lciA9IG51bGw7CisgICAgfTsKKwor
ICAgIF9zZWxmLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGltZXI7
CisgICAgfTsKKworICAgIHJldHVybiBfc2VsZjsKK307Cit9KTsKKworYWNlLmRlZmluZSgnYWNl
L2tleWJvYXJkL3RleHRpbnB1dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAn
YWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbGliL2RvbScsICdhY2Uv
bGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVxdWly
ZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsK
K3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBCUk9LRU5fU0VUREFUQSA9
IHVzZXJhZ2VudC5pc0Nocm9tZSA8IDE4OworCit2YXIgVGV4dElucHV0ID0gZnVuY3Rpb24ocGFy
ZW50Tm9kZSwgaG9zdCkgeworICAgIHZhciB0ZXh0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoInRleHRh
cmVhIik7CisgICAgdGV4dC5jbGFzc05hbWUgPSAiYWNlX3RleHQtaW5wdXQiOworICAgIGlmICh1
c2VyYWdlbnQuaXNUb3VjaFBhZCkKKyAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoIngtcGFsbS1k
aXNhYmxlLWF1dG8tY2FwIiwgdHJ1ZSk7CisKKyAgICB0ZXh0LndyYXAgPSAib2ZmIjsKKyAgICB0
ZXh0LmF1dG9jb3JyZWN0ID0gIm9mZiI7CisgICAgdGV4dC5hdXRvY2FwaXRhbGl6ZSA9ICJvZmYi
OworICAgIHRleHQuc3BlbGxjaGVjayA9IGZhbHNlOworCisgICAgdGV4dC5zdHlsZS5ib3R0b20g
PSAiMjAwMGVtIjsKKyAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnROb2Rl
LmZpcnN0Q2hpbGQpOworCisgICAgdmFyIFBMQUNFSE9MREVSID0gIlx4MDFceDAxIjsKKworICAg
IHZhciBjdXQgPSBmYWxzZTsKKyAgICB2YXIgY29waWVkID0gZmFsc2U7CisgICAgdmFyIHBhc3Rl
ZCA9IGZhbHNlOworICAgIHZhciBpbkNvbXBvc3Rpb24gPSBmYWxzZTsKKyAgICB2YXIgdGVtcFN0
eWxlID0gJyc7CisgICAgdmFyIGlzU2VsZWN0aW9uRW1wdHkgPSB0cnVlOworICAgIHRyeSB7IHZh
ciBpc0ZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0ZXh0OyB9IGNhdGNoKGUp
IHt9CisgICAgCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImJsdXIiLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgaG9zdC5vbkJsdXIoKTsKKyAgICAgICAgaXNGb2N1c2VkID0gZmFsc2U7Cisg
ICAgfSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImZvY3VzIiwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlzRm9jdXNlZCA9IHRydWU7CisgICAgICAgIGhvc3Qub25Gb2N1cygpOworICAg
ICAgICByZXNldFNlbGVjdGlvbigpOworICAgIH0pOworICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlv
bigpIHsgdGV4dC5mb2N1cygpOyB9OworICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkgeyB0ZXh0
LmJsdXIoKTsgfTsKKyAgICB0aGlzLmlzRm9jdXNlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gaXNGb2N1c2VkOworICAgIH07CisgICAgdmFyIHN5bmNTZWxlY3Rpb24gPSBsYW5nLmRl
bGF5ZWRDYWxsKGZ1bmN0aW9uKCkgeworICAgICAgICBpc0ZvY3VzZWQgJiYgcmVzZXRTZWxlY3Rp
b24oaXNTZWxlY3Rpb25FbXB0eSk7CisgICAgfSk7CisgICAgdmFyIHN5bmNWYWx1ZSA9IGxhbmcu
ZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7CisgICAgICAgICBpZiAoIWluQ29tcG9zdGlvbikgewor
ICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFBMQUNFSE9MREVSOworICAgICAgICAgICAgaXNGb2N1
c2VkICYmIHJlc2V0U2VsZWN0aW9uKCk7CisgICAgICAgICB9CisgICAgfSk7CisKKyAgICBmdW5j
dGlvbiByZXNldFNlbGVjdGlvbihpc0VtcHR5KSB7CisgICAgICAgIGlmIChpbkNvbXBvc3Rpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IGlzRW1w
dHkgPyAyIDogMTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IDI7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpOworICAgICAgICB9IGNhdGNoKGUpe30KKyAgICB9CisKKyAgICBmdW5jdGlvbiBy
ZXNldFZhbHVlKCkgeworICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7CisgICAgICAgIGlmICh1c2Vy
YWdlbnQuaXNXZWJLaXQpCisgICAgICAgICAgICBzeW5jVmFsdWUuc2NoZWR1bGUoKTsKKyAgICB9
CisKKyAgICB1c2VyYWdlbnQuaXNXZWJLaXQgfHwgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdjaGFu
Z2VTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGhvc3Quc2VsZWN0aW9uLmlz
RW1wdHkoKSAhPSBpc1NlbGVjdGlvbkVtcHR5KSB7CisgICAgICAgICAgICBpc1NlbGVjdGlvbkVt
cHR5ID0gIWlzU2VsZWN0aW9uRW1wdHk7CisgICAgICAgICAgICBzeW5jU2VsZWN0aW9uLnNjaGVk
dWxlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHJlc2V0VmFsdWUoKTsKKyAgICBpZiAo
aXNGb2N1c2VkKQorICAgICAgICBob3N0Lm9uRm9jdXMoKTsKKworCisgICAgdmFyIGlzQWxsU2Vs
ZWN0ZWQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHJldHVybiB0ZXh0LnNlbGVjdGlvblN0
YXJ0ID09PSAwICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSB0ZXh0LnZhbHVlLmxlbmd0aDsKKyAg
ICB9OworICAgIGlmICghdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSAmJiB0ZXh0LmNyZWF0ZVRleHRS
YW5nZSkgeworICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24oc2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5j
cmVhdGVUZXh0UmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOworICAg
ICAgICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzZWxlY3Rpb25TdGFydCk7Cisg
ICAgICAgICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBzZWxlY3Rpb25FbmQpOworICAg
ICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7CisgICAgICAgIH07CisgICAgICAgIGlzQWxsU2VsZWN0
ZWQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IHZhciByYW5nZSA9IHRleHQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK
KyAgICAgICAgICAgIH1jYXRjaChlKSB7fQorICAgICAgICAgICAgaWYgKCFyYW5nZSB8fCByYW5n
ZS5wYXJlbnRFbGVtZW50KCkgIT0gdGV4dCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IHJldHVybiByYW5nZS50ZXh0ID09IHRleHQudmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKHVzZXJhZ2VudC5pc09sZElFKSB7CisgICAgICAgIHZhciBpblByb3BlcnR5Q2hhbmdlID0g
ZmFsc2U7CisgICAgICAgIHZhciBvblByb3BlcnR5Q2hhbmdlID0gZnVuY3Rpb24oZSl7CisgICAg
ICAgICAgICBpZiAoaW5Qcm9wZXJ0eUNoYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB2YXIgZGF0YSA9IHRleHQudmFsdWU7CisgICAgICAgICAgICBpZiAoaW5Db21w
b3N0aW9uIHx8ICFkYXRhIHx8IGRhdGEgPT0gUExBQ0VIT0xERVIpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGUgJiYgZGF0YSA9PSBQTEFDRUhPTERFUlswXSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3luY1Byb3BlcnR5LnNjaGVkdWxlKCk7CisKKyAgICAgICAg
ICAgIHNlbmRUZXh0KGRhdGEpOworICAgICAgICAgICAgaW5Qcm9wZXJ0eUNoYW5nZSA9IHRydWU7
CisgICAgICAgICAgICByZXNldFZhbHVlKCk7CisgICAgICAgICAgICBpblByb3BlcnR5Q2hhbmdl
ID0gZmFsc2U7CisgICAgICAgIH07CisgICAgICAgIHZhciBzeW5jUHJvcGVydHkgPSBsYW5nLmRl
bGF5ZWRDYWxsKG9uUHJvcGVydHlDaGFuZ2UpOworICAgICAgICBldmVudC5hZGRMaXN0ZW5lcih0
ZXh0LCAicHJvcGVydHljaGFuZ2UiLCBvblByb3BlcnR5Q2hhbmdlKTsKKworICAgICAgICB2YXIg
a2V5dGFibGUgPSB7IDEzOjEsIDI3OjEgfTsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4
dCwgImtleXVwIiwgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChpbkNvbXBvc3Rpb24g
JiYgKCF0ZXh0LnZhbHVlIHx8IGtleXRhYmxlW2Uua2V5Q29kZV0pKQorICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQob25Db21wb3NpdGlvbkVuZCwgMCk7CisgICAgICAgICAgICBpZiAoKHRleHQu
dmFsdWUuY2hhckNvZGVBdCgwKXx8MCkgPCAxMjkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbkNvbXBvc3Rpb24gPyBvbkNvbXBvc2l0aW9u
VXBkYXRlKCkgOiBvbkNvbXBvc2l0aW9uU3RhcnQoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgdmFyIG9uU2VsZWN0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoY3V0KSB7CisgICAg
ICAgICAgICBjdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29waWVkKSB7CisgICAgICAgICAgICBjb3BpZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNBbGxTZWxlY3RlZCh0ZXh0KSkg
eworICAgICAgICAgICAgaG9zdC5zZWxlY3RBbGwoKTsKKyAgICAgICAgICAgIHJlc2V0U2VsZWN0
aW9uKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIHNlbmRUZXh0ID0gZnVuY3Rpb24o
ZGF0YSkgeworICAgICAgICBpZiAocGFzdGVkKSB7CisgICAgICAgICAgICByZXNldFNlbGVjdGlv
bigpOworICAgICAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblBhc3Rl
KGRhdGEpOworICAgICAgICAgICAgcGFzdGVkID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAo
ZGF0YSA9PSBQTEFDRUhPTERFUlswXSkgeworICAgICAgICAgICAgaG9zdC5leGVjQ29tbWFuZCgi
ZGVsIiwge3NvdXJjZTogImFjZSJ9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
IChkYXRhLnN1YnN0cmluZygwLCAyKSA9PSBQTEFDRUhPTERFUikKKyAgICAgICAgICAgICAgICBk
YXRhID0gZGF0YS5zdWJzdHIoMik7CisgICAgICAgICAgICBlbHNlIGlmIChkYXRhWzBdID09IFBM
QUNFSE9MREVSWzBdKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cigxKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PSBQTEFDRUhPTERFUlsw
XSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCAtMSk7CisgICAgICAgICAg
ICBpZiAoZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09IFBMQUNFSE9MREVSWzBdKQorICAgICAgICAg
ICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGRhdGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgdmFyIG9uSW5wdXQgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IGlmIChpbkNvbXBvc3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBkYXRh
ID0gdGV4dC52YWx1ZTsKKyAgICAgICAgcmVzZXRWYWx1ZSgpOworCisgICAgICAgIHNlbmRUZXh0
KGRhdGEpOworICAgIH07CisKKyAgICB2YXIgb25DdXQgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IHZhciBkYXRhID0gaG9zdC5nZXRDb3B5VGV4dCgpOworICAgICAgICBpZiAoIWRhdGEpIHsKKyAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEg
fHwgd2luZG93LmNsaXBib2FyZERhdGE7CisKKyAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgJiYg
IUJST0tFTl9TRVREQVRBKSB7CisgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gY2xpcGJvYXJk
RGF0YS5zZXREYXRhKCJUZXh0IiwgZGF0YSk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydGVkKSB7
CisgICAgICAgICAgICAgICAgaG9zdC5vbkN1dCgpOworICAgICAgICAgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIGN1dCA9IHRydWU7CisgICAgICAgICAgICB0ZXh0
LnZhbHVlID0gZGF0YTsKKyAgICAgICAgICAgIHRleHQuc2VsZWN0KCk7CisgICAgICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgY3V0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgcmVzZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9u
KCk7CisgICAgICAgICAgICAgICAgaG9zdC5vbkN1dCgpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdmFyIG9uQ29weSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
dmFyIGRhdGEgPSBob3N0LmdldENvcHlUZXh0KCk7CisgICAgICAgIGlmICghZGF0YSkgeworICAg
ICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8
fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKKyAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgJiYgIUJS
T0tFTl9TRVREQVRBKSB7CisgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gY2xpcGJvYXJkRGF0
YS5zZXREYXRhKCJUZXh0IiwgZGF0YSk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydGVkKSB7Cisg
ICAgICAgICAgICAgICAgaG9zdC5vbkNvcHkoKTsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdChlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1
cHBvcnRlZCkgeworICAgICAgICAgICAgY29waWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRleHQu
dmFsdWUgPSBkYXRhOworICAgICAgICAgICAgdGV4dC5zZWxlY3QoKTsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBjb3BpZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICByZXNldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgcmVzZXRTZWxlY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBob3N0Lm9uQ29weSgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIG9uUGFzdGUgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIHZhciBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9h
cmREYXRhOworCisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhKSB7CisgICAgICAgICAgICB2YXIg
ZGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpOworICAgICAgICAgICAgaWYgKGRh
dGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblBhc3RlKGRhdGEpOworICAgICAgICAgICAgaWYg
KHVzZXJhZ2VudC5pc0lFKQorICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzZXRTZWxlY3Rp
b24pOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0LnZhbHVlID0gIiI7CisgICAgICAgICAgICBw
YXN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAgIGV2ZW50LmFkZENvbW1hbmRL
ZXlMaXN0ZW5lcih0ZXh0LCBob3N0Lm9uQ29tbWFuZEtleS5iaW5kKGhvc3QpKTsKKworICAgIGV2
ZW50LmFkZExpc3RlbmVyKHRleHQsICJzZWxlY3QiLCBvblNlbGVjdCk7CisKKyAgICBldmVudC5h
ZGRMaXN0ZW5lcih0ZXh0LCAiaW5wdXQiLCBvbklucHV0KTsKKworICAgIGV2ZW50LmFkZExpc3Rl
bmVyKHRleHQsICJjdXQiLCBvbkN1dCk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImNv
cHkiLCBvbkNvcHkpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJwYXN0ZSIsIG9uUGFz
dGUpOworICAgIGlmICghKCdvbmN1dCcgaW4gdGV4dCkgfHwgISgnb25jb3B5JyBpbiB0ZXh0KSB8
fCAhKCdvbnBhc3RlJyBpbiB0ZXh0KSl7CisgICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHBhcmVu
dE5vZGUsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgaWYgKCh1c2VyYWdl
bnQuaXNNYWMgJiYgIWUubWV0YUtleSkgfHwgIWUuY3RybEtleSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIDY3OgorICAgICAgICAgICAgICAgICAgICBvbkNvcHkoZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgODY6CisgICAgICAgICAgICAgICAgICAg
IG9uUGFzdGUoZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgODg6CisgICAgICAgICAgICAgICAgICAgIG9uQ3V0KGUpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIHZhciBv
bkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGluQ29tcG9zdGlvbiA9
IHRydWU7CisgICAgICAgIGhvc3Qub25Db21wb3NpdGlvblN0YXJ0KCk7CisgICAgICAgIHNldFRp
bWVvdXQob25Db21wb3NpdGlvblVwZGF0ZSwgMCk7CisgICAgfTsKKworICAgIHZhciBvbkNvbXBv
c2l0aW9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghaW5Db21wb3N0aW9uKSBy
ZXR1cm47CisgICAgICAgIGhvc3Qub25Db21wb3NpdGlvblVwZGF0ZSh0ZXh0LnZhbHVlKTsKKyAg
ICB9OworCisgICAgdmFyIG9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IGluQ29tcG9zdGlvbiA9IGZhbHNlOworICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25FbmQoKTsK
KyAgICB9OworCisgICAgdmFyIHN5bmNDb21wb3NpdGlvbiA9IGxhbmcuZGVsYXllZENhbGwob25D
b21wb3NpdGlvblVwZGF0ZSwgNTApOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImNv
bXBvc2l0aW9uc3RhcnQiLCBvbkNvbXBvc2l0aW9uU3RhcnQpOworICAgIGV2ZW50LmFkZExpc3Rl
bmVyKHRleHQsIHVzZXJhZ2VudC5pc0dlY2tvID8gInRleHQiIDogImtleXVwIiwgZnVuY3Rpb24o
KXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKX0pOworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRl
eHQsICJjb21wb3NpdGlvbmVuZCIsIG9uQ29tcG9zaXRpb25FbmQpOworCisgICAgdGhpcy5nZXRF
bGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisKKyAg
ICB0aGlzLnNldFJlYWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKKyAgICAgICB0ZXh0LnJl
YWRPbmx5ID0gcmVhZE9ubHk7CisgICAgfTsKKworICAgIHRoaXMub25Db250ZXh0TWVudSA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCF0ZW1wU3R5bGUpCisgICAgICAgICAgICB0ZW1wU3R5
bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7CisKKyAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0g
InotaW5kZXg6MTAwMDAwOyIgKyAodXNlcmFnZW50LmlzSUUgPyAib3BhY2l0eTowLjE7IiA6ICIi
KTsKKworICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpOwor
ICAgICAgICBob3N0Ll9lbWl0KCJuYXRpdmVjb250ZXh0bWVudSIsIHt0YXJnZXQ6IGhvc3R9KTsK
KyAgICAgICAgdmFyIHJlY3QgPSBob3N0LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICB0ZXh0LnN0
eWxlLmxlZnQgPSBlLmNsaWVudFggLSByZWN0LmxlZnQgLSAyICsgInB4IjsKKyAgICAgICAgICAg
IHRleHQuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gcmVjdC50b3AgLSAyICsgInB4IjsKKyAgICAg
ICAgfTsKKyAgICAgICAgbW92ZShlKTsKKworICAgICAgICBpZiAoZS50eXBlICE9ICJtb3VzZWRv
d24iKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRr
ZWVwVGV4dEFyZWFBdEN1cnNvcikKKyAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0
QXJlYUF0Q3Vyc29yID0gbnVsbDsKKyAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dpbikKKyAgICAg
ICAgICAgIGV2ZW50LmNhcHR1cmUoaG9zdC5jb250YWluZXIsIG1vdmUsIG9uQ29udGV4dE1lbnVD
bG9zZSk7CisgICAgfTsKKworICAgIHRoaXMub25Db250ZXh0TWVudUNsb3NlID0gb25Db250ZXh0
TWVudUNsb3NlOworICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnVDbG9zZSgpIHsKKyAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGVtcFN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gdGVtcFN0eWxlOworICAgICAgICAg
ICAgICAgIHRlbXBTdHlsZSA9ICcnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhv
c3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7CisgICAgICAg
ICAgICAgICAgaG9zdC5yZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwgMCk7CisgICAgfQorICAgIGlmICghdXNlcmFnZW50LmlzR2Vja28p
IHsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImNvbnRleHRtZW51IiwgZnVuY3Rp
b24oZSkgeworICAgICAgICAgICAgaG9zdC50ZXh0SW5wdXQub25Db250ZXh0TWVudShlKTsKKyAg
ICAgICAgICAgIG9uQ29udGV4dE1lbnVDbG9zZSgpOworICAgICAgICB9KTsKKyAgICB9Cit9Owor
CitleHBvcnRzLlRleHRJbnB1dCA9IFRleHRJbnB1dDsKK30pOworCithY2UuZGVmaW5lKCdhY2Uv
bW91c2UvbW91c2VfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAn
YWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbW91c2UvZGVmYXVsdF9o
YW5kbGVycycsICdhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsICdhY2UvbW91c2Uv
bW91c2VfZXZlbnQnLCAnYWNlL21vdXNlL2RyYWdkcm9wJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIp
OwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBEZWZh
dWx0SGFuZGxlcnMgPSByZXF1aXJlKCIuL2RlZmF1bHRfaGFuZGxlcnMiKS5EZWZhdWx0SGFuZGxl
cnM7Cit2YXIgRGVmYXVsdEd1dHRlckhhbmRsZXIgPSByZXF1aXJlKCIuL2RlZmF1bHRfZ3V0dGVy
X2hhbmRsZXIiKS5HdXR0ZXJIYW5kbGVyOwordmFyIE1vdXNlRXZlbnQgPSByZXF1aXJlKCIuL21v
dXNlX2V2ZW50IikuTW91c2VFdmVudDsKK3ZhciBEcmFnZHJvcEhhbmRsZXIgPSByZXF1aXJlKCIu
L2RyYWdkcm9wIikuRHJhZ2Ryb3BIYW5kbGVyOworCit2YXIgTW91c2VIYW5kbGVyID0gZnVuY3Rp
b24oZWRpdG9yKSB7CisgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKyAgICBuZXcgRGVmYXVs
dEhhbmRsZXJzKHRoaXMpOworICAgIG5ldyBEZWZhdWx0R3V0dGVySGFuZGxlcih0aGlzKTsKKyAg
ICBuZXcgRHJhZ2Ryb3BIYW5kbGVyKHRoaXMpOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIoZWRp
dG9yLmNvbnRhaW5lciwgIm1vdXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZWRpdG9y
LmZvY3VzKCk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICB9
KTsKKworICAgIHZhciBtb3VzZVRhcmdldCA9IGVkaXRvci5yZW5kZXJlci5nZXRNb3VzZUV2ZW50
VGFyZ2V0KCk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJjbGljayIsIHRo
aXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImNsaWNrIikpOworICAgIGV2ZW50LmFkZExpc3Rl
bmVyKG1vdXNlVGFyZ2V0LCAibW91c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMs
ICJtb3VzZW1vdmUiKSk7CisgICAgZXZlbnQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcihtb3Vz
ZVRhcmdldCwgWzMwMCwgMzAwLCAyNTBdLCB0aGlzLCAib25Nb3VzZUV2ZW50Iik7CisgICAgZXZl
bnQuYWRkTW91c2VXaGVlbExpc3RlbmVyKGVkaXRvci5jb250YWluZXIsIHRoaXMub25Nb3VzZVdo
ZWVsLmJpbmQodGhpcywgIm1vdXNld2hlZWwiKSk7CisKKyAgICB2YXIgZ3V0dGVyRWwgPSBlZGl0
b3IucmVuZGVyZXIuJGd1dHRlcjsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgIm1v
dXNlZG93biIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcm1vdXNlZG93biIp
KTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgImNsaWNrIiwgdGhpcy5vbk1vdXNl
RXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVyY2xpY2siKSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIo
Z3V0dGVyRWwsICJkYmxjbGljayIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1dHRl
cmRibGNsaWNrIikpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAibW91c2Vtb3Zl
IiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVybW91c2Vtb3ZlIikpOworfTsK
KworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSAxOworICAgIHRoaXMu
c2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbihzcGVlZCkgeworICAgICAgICB0aGlzLiRzY3JvbGxT
cGVlZCA9IHNwZWVkOworICAgIH07CisKKyAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxTcGVlZDsKKyAgICB9OworCisgICAg
dGhpcy5vbk1vdXNlRXZlbnQgPSBmdW5jdGlvbihuYW1lLCBlKSB7CisgICAgICAgIHRoaXMuZWRp
dG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7CisgICAgfTsK
KworICAgIHRoaXMuJGRyYWdEZWxheSA9IDI1MDsKKyAgICB0aGlzLnNldERyYWdEZWxheSA9IGZ1
bmN0aW9uKGRyYWdEZWxheSkgeworICAgICAgICB0aGlzLiRkcmFnRGVsYXkgPSBkcmFnRGVsYXk7
CisgICAgfTsKKworICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLiRkcmFnRGVsYXk7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZU1vdmUg
PSBmdW5jdGlvbihuYW1lLCBlKSB7CisgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRv
ci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7
CisgICAgICAgIGlmICghbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2
ZW50KGUsIHRoaXMuZWRpdG9yKSk7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZVdoZWVsID0g
ZnVuY3Rpb24obmFtZSwgZSkgeworICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2
ZW50KGUsIHRoaXMuZWRpdG9yKTsKKyAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IHRoaXMuJHNj
cm9sbFNwZWVkICogMjsKKyAgICAgICAgbW91c2VFdmVudC53aGVlbFggPSBlLndoZWVsWDsKKyAg
ICAgICAgbW91c2VFdmVudC53aGVlbFkgPSBlLndoZWVsWTsKKworICAgICAgICB0aGlzLmVkaXRv
ci5fZW1pdChuYW1lLCBtb3VzZUV2ZW50KTsKKyAgICB9OworCisgICAgdGhpcy5zZXRTdGF0ZSA9
IGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICB9Owor
CisgICAgdGhpcy5jYXB0dXJlTW91c2UgPSBmdW5jdGlvbihldiwgc3RhdGUpIHsKKyAgICAgICAg
aWYgKHN0YXRlKQorICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7CisKKyAgICAgICAg
dGhpcy54ID0gZXYueDsKKyAgICAgICAgdGhpcy55ID0gZXYueTsKKyAgICAgICAgCisgICAgICAg
IHRoaXMuaXNNb3VzZVByZXNzZWQgPSB0cnVlOworICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlz
LmVkaXRvci5yZW5kZXJlcjsKKyAgICAgICAgaWYgKHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1
cnNvcikKKyAgICAgICAgICAgIHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IG51bGw7
CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgb25Nb3VzZU1vdmUgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZWxmLnggPSBlLmNsaWVudFg7CisgICAgICAgICAg
ICBzZWxmLnkgPSBlLmNsaWVudFk7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIG9uQ2FwdHVy
ZUVuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7
CisgICAgICAgICAgICBzZWxmW3NlbGYuc3RhdGUgKyAiRW5kIl0gJiYgc2VsZltzZWxmLnN0YXRl
ICsgIkVuZCJdKGUpOworICAgICAgICAgICAgc2VsZi4kY2xpY2tTZWxlY3Rpb24gPSBudWxsOwor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7
CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYuaXNNb3VzZVByZXNzZWQgPSBmYWxzZTsKKyAgICAg
ICAgfTsKKworICAgICAgICB2YXIgb25DYXB0dXJlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZV0gJiYgc2VsZltzZWxmLnN0YXRlXSgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUgJiYgZXYuZG9tRXZl
bnQudHlwZSA9PSAiZGJsY2xpY2siKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUludGVydmFsKCk7CisgICAgICAgICAgICAg
ICAgb25DYXB0dXJlRW5kKGV2LmRvbUV2ZW50KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnQuY2FwdHVyZSh0aGlzLmVkaXRv
ci5jb250YWluZXIsIG9uTW91c2VNb3ZlLCBvbkNhcHR1cmVFbmQpOworICAgICAgICB2YXIgdGlt
ZXJJZCA9IHNldEludGVydmFsKG9uQ2FwdHVyZUludGVydmFsLCAyMCk7CisgICAgfTsKK30pLmNh
bGwoTW91c2VIYW5kbGVyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW91c2VIYW5kbGVyID0gTW91
c2VIYW5kbGVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJz
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdhY2Uv
bGliL3VzZXJhZ2VudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
Cit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVp
cmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKKwordmFyIERSQUdfT0ZGU0VUID0gNTsgLy8gcGl4ZWxz
CisKK2Z1bmN0aW9uIERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHsKKyAgICBtb3VzZUhh
bmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDsKKworICAgIHZhciBlZGl0b3IgPSBtb3VzZUhh
bmRsZXIuZWRpdG9yOworICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigibW91c2Vkb3duIiwg
dGhpcy5vbk1vdXNlRG93bi5iaW5kKG1vdXNlSGFuZGxlcikpOworICAgIGVkaXRvci5zZXREZWZh
dWx0SGFuZGxlcigiZGJsY2xpY2siLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZChtb3VzZUhhbmRs
ZXIpKTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoInRyaXBsZWNsaWNrIiwgdGhpcy5v
blRyaXBsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7CisgICAgZWRpdG9yLnNldERlZmF1bHRI
YW5kbGVyKCJxdWFkY2xpY2siLCB0aGlzLm9uUXVhZENsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7
CisgICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZXdoZWVsIiwgdGhpcy5vbk1vdXNl
V2hlZWwuYmluZChtb3VzZUhhbmRsZXIpKTsKKworICAgIHZhciBleHBvcnRzID0gWyJzZWxlY3Qi
LCAic3RhcnRTZWxlY3QiLCAiZHJhZyIsICJkcmFnRW5kIiwgImRyYWdXYWl0IiwKKyAgICAgICAg
ImRyYWdXYWl0RW5kIiwgInN0YXJ0RHJhZyIsICJmb2N1c1dhaXQiXTsKKworICAgIGV4cG9ydHMu
Zm9yRWFjaChmdW5jdGlvbih4KSB7CisgICAgICAgIG1vdXNlSGFuZGxlclt4XSA9IHRoaXNbeF07
CisgICAgfSwgdGhpcyk7CisKKyAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlMaW5lcyA9IHRoaXMu
ZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRMaW5lUmFuZ2UiKTsKKyAg
ICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmlu
ZChtb3VzZUhhbmRsZXIsICJnZXRXb3JkUmFuZ2UiKTsKKworICAgIG1vdXNlSGFuZGxlci4kZm9j
dXNXYWl0VGltb3V0ID0gMjUwOworfQorCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLm9uTW91
c2VEb3duID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIGluU2VsZWN0aW9uID0gZXYuaW5T
ZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsK
KyAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGV2OworICAgICAgICB2YXIgZWRpdG9yID0g
dGhpcy5lZGl0b3I7CisKKyAgICAgICAgdmFyIGJ1dHRvbiA9IGV2LmdldEJ1dHRvbigpOworICAg
ICAgICBpZiAoYnV0dG9uICE9PSAwKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2Ug
PSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb25F
bXB0eSA9IHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKTsKKworICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbkVtcHR5KSB7CisgICAgICAgICAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9u
KHBvcyk7CisgICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWRpdG9yLnRleHRJbnB1dC5vbkNvbnRleHRN
ZW51KGV2LmRvbUV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsgLy8gc3RvcHBpbmcgZXZlbnQg
aGVyZSBicmVha3MgY29udGV4dG1lbnUgb24gZmYgbWFjCisgICAgICAgIH0KKyAgICAgICAgaWYg
KGluU2VsZWN0aW9uICYmICFlZGl0b3IuaXNGb2N1c2VkKCkpIHsKKyAgICAgICAgICAgIGVkaXRv
ci5mb2N1cygpOworICAgICAgICAgICAgaWYgKHRoaXMuJGZvY3VzV2FpdFRpbW91dCAmJiAhdGhp
cy4kY2xpY2tTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJmb2N1
c1dhaXQiKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWluU2VsZWN0aW9uIHx8IHRoaXMuJGNsaWNrU2VsZWN0aW9u
IHx8IGV2LmdldFNoaWZ0S2V5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QocG9z
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpblNlbGVjdGlvbikgeworICAgICAgICAgICAgdGhpcy5t
b3VzZWRvd25FdmVudC50aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKyAgICAgICAgICAg
IHRoaXMuc2V0U3RhdGUoImRyYWdXYWl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmNh
cHR1cmVNb3VzZShldik7CisgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpOworICAg
IH07CisKKyAgICB0aGlzLnN0YXJ0U2VsZWN0ID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHBv
cyA9IHBvcyB8fCB0aGlzLmVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0
aGlzLngsIHRoaXMueSk7CisgICAgICAgIGlmICh0aGlzLm1vdXNlZG93bkV2ZW50LmdldFNoaWZ0
S2V5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0
aW9uKHBvcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXRoaXMuJGNsaWNrU2VsZWN0
aW9uKSB7CisgICAgICAgICAgICB0aGlzLmVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3Mp
OworICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7CisgICAgfTsKKworICAg
IHRoaXMuc2VsZWN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhbmNob3IsIGVkaXRvciA9
IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVl
blRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKKworICAgICAgICBpZiAodGhpcy4k
Y2xpY2tTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLiRjbGlja1NlbGVj
dGlvbi5jb21wYXJlUG9pbnQoY3Vyc29yKTsKKworICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkg
eworICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAgICBhbmNob3Ig
PSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0aGlz
LiRjbGlja1NlbGVjdGlvbiwgY3Vyc29yKTsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmll
bnRlZFJhbmdlLmN1cnNvcjsKKyAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJhbmdl
LmFuY2hvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0
U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOworICAgICAgICB9Cisg
ICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpOworCisgICAg
ICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOworICAgIH07CisKKyAg
ICB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5ID0gZnVuY3Rpb24odW5pdE5hbWUpIHsKKyAgICAgICAg
dmFyIGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpOwor
ICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uW3VuaXROYW1lXShjdXJzb3Iucm93
LCBjdXJzb3IuY29sdW1uKTsKKworICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsK
KyAgICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQ
b2ludChyYW5nZS5zdGFydCk7CisgICAgICAgICAgICB2YXIgY21wRW5kID0gdGhpcy4kY2xpY2tT
ZWxlY3Rpb24uY29tcGFyZVBvaW50KHJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChjbXBT
dGFydCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkgeworICAgICAgICAgICAgICAgIGFuY2hvciA9IHRo
aXMuJGNsaWNrU2VsZWN0aW9uLmVuZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJv
dyAhPSBjdXJzb3Iucm93IHx8IHJhbmdlLmVuZC5jb2x1bW4gIT0gY3Vyc29yLmNvbHVtbikKKyAg
ICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNtcEVuZCA9PSAxICYmIGNtcFN0YXJ0ID49IDApIHsKKyAgICAgICAgICAgICAgICBh
bmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKKyAgICAgICAgICAgICAgICBpZiAo
cmFuZ2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9IGN1
cnNvci5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5kID09IDEpIHsKKyAg
ICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICAgICAgYW5jaG9y
ID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rp
b24sIGN1cnNvcik7CisgICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJz
b3I7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hv
cihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBlZGl0b3Iu
c2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKKworICAgICAgICBlZGl0b3IucmVu
ZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworCisgICAgdGhpcy5zdGFydERy
YWcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAg
ICAgICB0aGlzLnNldFN0YXRlKCJkcmFnIik7CisgICAgICAgIHRoaXMuZHJhZ1JhbmdlID0gZWRp
dG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIHZhciBzdHlsZSA9IGVkaXRvci5nZXRT
ZWxlY3Rpb25TdHlsZSgpOworICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25NYXJrZXIgPSBlZGl0
b3Iuc2Vzc2lvbi5hZGRNYXJrZXIodGhpcy5kcmFnUmFuZ2UsICJhY2Vfc2VsZWN0aW9uIiwgc3R5
bGUpOworICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgZG9tLmFkZENz
c0NsYXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dpbmciKTsKKyAgICAgICAgaWYgKCF0
aGlzLiRkcmFnS2V5YmluZGluZykgeworICAgICAgICAgICAgdGhpcy4kZHJhZ0tleWJpbmRpbmcg
PSB7CisgICAgICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmQ6IGZ1bmN0aW9uKGRhdGEsIGhhc2hJ
ZCwga2V5U3RyaW5nLCBrZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXlTdHJp
bmcgPT0gImVzYyIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2NvbW1hbmQ6IHRo
aXMuY29tbWFuZH07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjb21tYW5k
OiB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBlZGl0b3IuJG1vdXNlSGFuZGxlcjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0N1cnNvciA9IG51bGw7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmRyYWdFbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
c3RhcnRTZWxlY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLmFk
ZEtleWJvYXJkSGFuZGxlcih0aGlzLiRkcmFnS2V5YmluZGluZyk7CisgICAgfTsKKworICAgIHRo
aXMuZm9jdXNXYWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNE
aXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhp
cy54LCB0aGlzLnkpOworICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7
CisKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHx0aW1lIC0gdGhpcy5tb3Vz
ZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNXYWl0VGltb3V0KQorICAgICAgICAgICAgdGhp
cy5zdGFydFNlbGVjdCgpOworICAgIH07CisKKyAgICB0aGlzLmRyYWdXYWl0ID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5tb3VzZWRvd25F
dmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTsKKyAgICAgICAg
dmFyIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgZWRpdG9yID0g
dGhpcy5lZGl0b3I7CisKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQpIHsKKyAg
ICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1bWVu
dFBvc2l0aW9uKCkpOworICAgICAgICB9IGVsc2UgaWYgKHRpbWUgLSB0aGlzLm1vdXNlZG93bkV2
ZW50LnRpbWUgPiBlZGl0b3IuZ2V0RHJhZ0RlbGF5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc3Rh
cnREcmFnKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5kcmFnV2FpdEVuZCA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudC5kb21FdmVudCA9IGU7Cisg
ICAgICAgIHRoaXMuc3RhcnRTZWxlY3QoKTsKKyAgICB9OworCisgICAgdGhpcy5kcmFnID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdGhp
cy5kcmFnQ3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRo
aXMueCwgdGhpcy55KTsKKyAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHRoaXMu
ZHJhZ0N1cnNvcik7CisgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmll
dygpOworICAgIH07CisKKyAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdmFyIGRyYWdDdXJzb3IgPSB0aGlz
LmRyYWdDdXJzb3I7CisgICAgICAgIHZhciBkcmFnUmFuZ2UgPSB0aGlzLmRyYWdSYW5nZTsKKyAg
ICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dpbmci
KTsKKyAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuZHJhZ1NlbGVjdGlv
bk1hcmtlcik7CisgICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxl
cih0aGlzLiRkcmFnS2V5YmluZGluZyk7CisKKyAgICAgICAgaWYgKCFkcmFnQ3Vyc29yKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOworICAg
ICAgICBpZiAoZSAmJiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5KSkgeworICAgICAgICAgICAgdmFy
IHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IGRy
YWdSYW5nZTsKKyAgICAgICAgICAgIG5ld1JhbmdlLmVuZCA9IHNlc3Npb24uaW5zZXJ0KGRyYWdD
dXJzb3IsIHNlc3Npb24uZ2V0VGV4dFJhbmdlKGRyYWdSYW5nZSkpOworICAgICAgICAgICAgbmV3
UmFuZ2Uuc3RhcnQgPSBkcmFnQ3Vyc29yOworICAgICAgICB9IGVsc2UgaWYgKGRyYWdSYW5nZS5j
b250YWlucyhkcmFnQ3Vyc29yLnJvdywgZHJhZ0N1cnNvci5jb2x1bW4pKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBl
ZGl0b3IubW92ZVRleHQoZHJhZ1JhbmdlLCBkcmFnQ3Vyc29yKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghbmV3UmFuZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZWRpdG9y
LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXdSYW5nZSk7CisgICAgfTsKKworICAgIHRo
aXMub25Eb3VibGVDbGljayA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgIHZhciBwb3MgPSBldi5n
ZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsK
KyAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKworICAgICAgICB2YXIgcmFu
Z2UgPSBzZXNzaW9uLmdldEJyYWNrZXRSYW5nZShwb3MpOworICAgICAgICBpZiAocmFuZ2UpIHsK
KyAgICAgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5zdGFydC5jb2x1bW4tLTsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IHJhbmdlOwor
ICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxl
Y3Rpb24uZ2V0V29yZFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICB0aGlzLnNl
dFN0YXRlKCJzZWxlY3RCeVdvcmRzIik7CisgICAgfTsKKworICAgIHRoaXMub25UcmlwbGVDbGlj
ayA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBvc2l0
aW9uKCk7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworICAgICAgICB0aGlz
LnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIik7CisgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9u
ID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocG9zLnJvdyk7CisgICAgfTsKKworICAg
IHRoaXMub25RdWFkQ2xpY2sgPSBmdW5jdGlvbihldikgeworICAgICAgICB2YXIgZWRpdG9yID0g
dGhpcy5lZGl0b3I7CisKKyAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpOworICAgICAgICB0aGlz
LiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB0
aGlzLnNldFN0YXRlKCJudWxsIik7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZVdoZWVsID0g
ZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgaWYgKGV2LmdldFNoaWZ0S2V5KCkgfHwgZXYuZ2V0QWNj
ZWxLZXkoKSl7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVk
aXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgaXNTY3JvbGFibGUgPSBlZGl0b3IucmVu
ZGVyZXIuaXNTY3JvbGxhYmxlQnkoZXYud2hlZWxYICogZXYuc3BlZWQsIGV2LndoZWVsWSAqIGV2
LnNwZWVkKTsKKyAgICAgICAgaWYgKGlzU2Nyb2xhYmxlKSB7CisgICAgICAgICAgICB0aGlzLiRw
YXNzU2Nyb2xsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLiRwYXNzU2Nyb2xsRXZlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAoIXRoaXMuJHNjcm9sbFN0b3BUaW1lb3V0KSB7CisgICAgICAgICAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMuJHNjcm9sbFN0b3BUaW1lb3V0
ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4kcGFz
c1Njcm9sbEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4kc2Nyb2xsU3Rv
cFRpbWVvdXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0sIDIwMCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQnkoZXYud2hlZWxY
ICogZXYuc3BlZWQsIGV2LndoZWVsWSAqIGV2LnNwZWVkKTsKKyAgICAgICAgcmV0dXJuIGV2LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgfTsKKworfSkuY2FsbChEZWZhdWx0SGFuZGxlcnMucHJvdG90
eXBlKTsKKworZXhwb3J0cy5EZWZhdWx0SGFuZGxlcnMgPSBEZWZhdWx0SGFuZGxlcnM7CisKK2Z1
bmN0aW9uIGNhbGNEaXN0YW5jZShheCwgYXksIGJ4LCBieSkgeworICAgIHJldHVybiBNYXRoLnNx
cnQoTWF0aC5wb3coYnggLSBheCwgMikgKyBNYXRoLnBvdyhieSAtIGF5LCAyKSk7Cit9CisKK2Z1
bmN0aW9uIGNhbGNSYW5nZU9yaWVudGF0aW9uKHJhbmdlLCBjdXJzb3IpIHsKKyAgICBpZiAocmFu
Z2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpCisgICAgICAgIHZhciBjbXAgPSAyICogY3Vy
c29yLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW47CisgICAg
ZWxzZQorICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5yb3cgLSByYW5nZS5zdGFydC5yb3cg
LSByYW5nZS5lbmQucm93OworCisgICAgaWYgKGNtcCA8IDApCisgICAgICAgIHJldHVybiB7Y3Vy
c29yOiByYW5nZS5zdGFydCwgYW5jaG9yOiByYW5nZS5lbmR9OworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIHtjdXJzb3I6IHJhbmdlLmVuZCwgYW5jaG9yOiByYW5nZS5zdGFydH07Cit9CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVu
dCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwordmFyIGRvbSA9IHJl
cXVpcmUoIi4uL2xpYi9kb20iKTsKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIp
OworCitmdW5jdGlvbiBHdXR0ZXJIYW5kbGVyKG1vdXNlSGFuZGxlcikgeworICAgIHZhciBlZGl0
b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9yOworICAgIHZhciBndXR0ZXIgPSBlZGl0b3IucmVuZGVy
ZXIuJGd1dHRlckxheWVyOworCisgICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0SGFu
ZGxlcigiZ3V0dGVybW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIWVkaXRv
ci5pc0ZvY3VzZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGd1dHRlclJl
Z2lvbiA9IGd1dHRlci5nZXRSZWdpb24oZSk7CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9
PSAiZm9sZFdpZGdldHMiKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByb3cg
PSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2Vzc2lvbi5zZWxlY3Rpb247CisKKyAgICAgICAgaWYgKGUuZ2V0U2hpZnRLZXkoKSkK
KyAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RUbyhyb3csIDApOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChlLmRvbUV2ZW50LmRldGFpbCA9PSAyKSB7CisgICAgICAgICAgICAg
ICAgZWRpdG9yLnNlbGVjdEFsbCgpOworICAgICAgICAgICAgICAgIHJldHVybiBlLnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3VzZUhhbmRsZXIuJGNsaWNr
U2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uocm93KTsKKyAgICAgICAg
fQorICAgICAgICBtb3VzZUhhbmRsZXIuY2FwdHVyZU1vdXNlKGUsICJzZWxlY3RCeUxpbmVzIik7
CisgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfSk7CisKKworICAgIHZh
ciB0b29sdGlwVGltZW91dCwgbW91c2VFdmVudCwgdG9vbHRpcCwgdG9vbHRpcEFubm90YXRpb247
CisgICAgZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCgpIHsKKyAgICAgICAgdG9vbHRpcCA9IGRvbS5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAiYWNlX2d1
dHRlci10b29sdGlwIjsKKyAgICAgICAgdG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwor
ICAgICAgICBlZGl0b3IuY29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNob3dUb29sdGlwKCkgeworICAgICAgICBpZiAoIXRvb2x0aXApIHsKKyAg
ICAgICAgICAgIGNyZWF0ZVRvb2x0aXAoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm93ID0g
bW91c2VFdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OworICAgICAgICB2YXIgYW5ub3Rh
dGlvbiA9IGd1dHRlci4kYW5ub3RhdGlvbnNbcm93XTsKKyAgICAgICAgaWYgKCFhbm5vdGF0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CisKKyAgICAgICAgdmFyIG1heFJv
dyA9IGVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICBpZiAocm93ID09IG1heFJv
dykgeworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IGVkaXRvci5yZW5kZXJlci5waXhlbFRv
U2NyZWVuQ29vcmRpbmF0ZXMoMCwgbW91c2VFdmVudC55KS5yb3c7CisgICAgICAgICAgICB2YXIg
cG9zID0gbW91c2VFdmVudC4kcG9zOworICAgICAgICAgICAgaWYgKHNjcmVlblJvdyA+IGVkaXRv
ci5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cocG9zLnJvdywgcG9zLmNvbHVtbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9vbHRpcEFubm90YXRpb24gPT0gYW5ub3RhdGlvbikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdG9vbHRpcEFubm90YXRpb24gPSBhbm5vdGF0aW9uLnRleHQuam9pbigiPGJyLz4i
KTsKKworICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgICB0
b29sdGlwLmlubmVySFRNTCA9IHRvb2x0aXBBbm5vdGF0aW9uOworICAgICAgICBlZGl0b3Iub24o
Im1vdXNld2hlZWwiLCBoaWRlVG9vbHRpcCk7CisKKyAgICAgICAgbW92ZVRvb2x0aXAobW91c2VF
dmVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaGlkZVRvb2x0aXAoKSB7CisgICAgICAgIGlm
ICh0b29sdGlwVGltZW91dCkKKyAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gY2xlYXJUaW1l
b3V0KHRvb2x0aXBUaW1lb3V0KTsKKyAgICAgICAgaWYgKHRvb2x0aXBBbm5vdGF0aW9uKSB7Cisg
ICAgICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAgICB0
b29sdGlwQW5ub3RhdGlvbiA9IG51bGw7CisgICAgICAgICAgICBlZGl0b3IucmVtb3ZlRXZlbnRM
aXN0ZW5lcigibW91c2V3aGVlbCIsIGhpZGVUb29sdGlwKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIG1vdmVUb29sdGlwKGUpIHsKKyAgICAgICAgdmFyIHJlY3QgPSBlZGl0b3Iu
cmVuZGVyZXIuJGd1dHRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgdG9vbHRp
cC5zdHlsZS5sZWZ0ID0gZS54ICsgMTUgKyAicHgiOworICAgICAgICBpZiAoZS55ICsgMyAqIGVk
aXRvci5yZW5kZXJlci5saW5lSGVpZ2h0ICsgMTUgPCByZWN0LmJvdHRvbSkgeworICAgICAgICAg
ICAgdG9vbHRpcC5zdHlsZS5ib3R0b20gPSAgIiI7CisgICAgICAgICAgICB0b29sdGlwLnN0eWxl
LnRvcCA9ICBlLnkgKyAxNSArICJweCI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
b29sdGlwLnN0eWxlLnRvcCA9ICAiIjsKKyAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUuYm90dG9t
ID0gcmVjdC5ib3R0b20gLSBlLnkgKyA1ICsgInB4IjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImd1dHRlcm1vdXNlbW92ZSIs
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IGUuZG9tRXZlbnQudGFyZ2V0IHx8
IGUuZG9tRXZlbnQuc3JjRWxlbWVudDsKKyAgICAgICAgaWYgKGRvbS5oYXNDc3NDbGFzcyh0YXJn
ZXQsICJhY2VfZm9sZC13aWRnZXQiKSkKKyAgICAgICAgICAgIHJldHVybiBoaWRlVG9vbHRpcCgp
OworCisgICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikKKyAgICAgICAgICAgIG1vdmVUb29s
dGlwKGUpOworCisgICAgICAgIG1vdXNlRXZlbnQgPSBlOworICAgICAgICBpZiAodG9vbHRpcFRp
bWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gbnVsbDsK
KyAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50ICYmICFtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNz
ZWQpCisgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAoKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBoaWRlVG9vbHRpcCgpOworICAgICAgICB9LCA1MCk7CisgICAgfSk7CisK
KyAgICBldmVudC5hZGRMaXN0ZW5lcihlZGl0b3IucmVuZGVyZXIuJGd1dHRlciwgIm1vdXNlb3V0
IiwgZnVuY3Rpb24oZSkgeworICAgICAgICBtb3VzZUV2ZW50ID0gbnVsbDsKKyAgICAgICAgaWYg
KCF0b29sdGlwQW5ub3RhdGlvbiB8fCB0b29sdGlwVGltZW91dCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBoaWRlVG9vbHRp
cCgpOworICAgICAgICB9LCA1MCk7CisgICAgfSk7CisKK30KKworZXhwb3J0cy5HdXR0ZXJIYW5k
bGVyID0gR3V0dGVySGFuZGxlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9tb3Vz
ZV9ldmVudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9ldmVu
dCcsICdhY2UvbGliL3VzZXJhZ2VudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKK3ZhciB1c2Vy
YWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgTW91c2VFdmVudCA9IGV4
cG9ydHMuTW91c2VFdmVudCA9IGZ1bmN0aW9uKGRvbUV2ZW50LCBlZGl0b3IpIHsKKyAgICB0aGlz
LmRvbUV2ZW50ID0gZG9tRXZlbnQ7CisgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgICAgCisg
ICAgdGhpcy54ID0gdGhpcy5jbGllbnRYID0gZG9tRXZlbnQuY2xpZW50WDsKKyAgICB0aGlzLnkg
PSB0aGlzLmNsaWVudFkgPSBkb21FdmVudC5jbGllbnRZOworCisgICAgdGhpcy4kcG9zID0gbnVs
bDsKKyAgICB0aGlzLiRpblNlbGVjdGlvbiA9IG51bGw7CisgICAgCisgICAgdGhpcy5wcm9wYWdh
dGlvblN0b3BwZWQgPSBmYWxzZTsKKyAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsK
K307CisKKyhmdW5jdGlvbigpIHsgIAorICAgIAorICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbih0aGlzLmRvbUV2ZW50
KTsKKyAgICAgICAgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOworICAgIH07CisgICAg
CisgICAgdGhpcy5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KTsKKyAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVu
dGVkID0gdHJ1ZTsKKyAgICB9OworICAgIAorICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB0aGlzLnByZXZlbnREZWZh
dWx0KCk7CisgICAgfTsKKyAgICB0aGlzLmdldERvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHRoaXMuJHBvcykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiRwb3M7
CisgICAgICAgIAorICAgICAgICB0aGlzLiRwb3MgPSB0aGlzLmVkaXRvci5yZW5kZXJlci5zY3Jl
ZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLmNsaWVudFgsIHRoaXMuY2xpZW50WSk7CisgICAgICAg
IHJldHVybiB0aGlzLiRwb3M7CisgICAgfTsKKyAgICB0aGlzLmluU2VsZWN0aW9uID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh0aGlzLiRpblNlbGVjdGlvbiAhPT0gbnVsbCkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLiRpblNlbGVjdGlvbjsKKyAgICAgICAgICAgIAorICAgICAgICB2YXIg
ZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIAorICAgICAgICBpZiAoZWRpdG9yLmdldFJl
YWRPbmx5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBl
ZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5n
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBmYWxzZTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmdldERv
Y3VtZW50UG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IHNl
bGVjdGlvblJhbmdlLmNvbnRhaW5zKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLiRpblNlbGVjdGlvbjsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0QnV0dG9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBldmVudC5n
ZXRCdXR0b24odGhpcy5kb21FdmVudCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNoaWZ0S2V5ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvbUV2ZW50LnNoaWZ0S2V5OworICAg
IH07CisgICAgCisgICAgdGhpcy5nZXRBY2NlbEtleSA9IHVzZXJhZ2VudC5pc01hYworICAgICAg
ICA/IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FdmVudC5tZXRhS2V5OyB9CisgICAgICAg
IDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUV2ZW50LmN0cmxLZXk7IH07CisgICAgCit9
KS5jYWxsKE1vdXNlRXZlbnQucHJvdG90eXBlKTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9t
b3VzZS9kcmFnZHJvcCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9ldmVudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
ZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKKwordmFyIERyYWdkcm9wSGFuZGxlciA9
IGZ1bmN0aW9uKG1vdXNlSGFuZGxlcikgeworICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRsZXIu
ZWRpdG9yOworICAgIHZhciBkcmFnU2VsZWN0aW9uTWFya2VyLCB4LCB5OworICAgIHZhciB0aW1l
cklkLCByYW5nZSwgaXNCYWNrd2FyZHM7CisgICAgdmFyIGRyYWdDdXJzb3IsIGNvdW50ZXIgPSAw
OworCisgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjsKKyAgICBldmVudC5h
ZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdlbnRlciIsIGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjb3VudGVyKys7CisgICAgICAgIGlmICghZHJhZ1NlbGVjdGlvbk1hcmtlcikgeworICAgICAg
ICAgICAgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIGlz
QmFja3dhcmRzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpOworICAgICAgICAgICAg
dmFyIHN0eWxlID0gZWRpdG9yLmdldFNlbGVjdGlvblN0eWxlKCk7CisgICAgICAgICAgICBkcmFn
U2VsZWN0aW9uTWFya2VyID0gZWRpdG9yLnNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNlX3Nl
bGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwor
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsKKyAgICAgICAgICAgIHRpbWVySWQg
PSBzZXRJbnRlcnZhbChvbkRyYWdJbnRlcnZhbCwgMjApOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICB9KTsKKworICAgIGV2ZW50LmFkZExp
c3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ292ZXIiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlm
IChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgeCA9
IGUuY2xpZW50WDsKKyAgICAgICAgeSA9IGUuY2xpZW50WTsKKyAgICAgICAgcmV0dXJuIGV2ZW50
LnByZXZlbnREZWZhdWx0KGUpOworICAgIH0pOworICAgIAorICAgIHZhciBvbkRyYWdJbnRlcnZh
bCA9ICBmdW5jdGlvbigpIHsKKyAgICAgICAgZHJhZ0N1cnNvciA9IGVkaXRvci5yZW5kZXJlci5z
Y3JlZW5Ub1RleHRDb29yZGluYXRlcyh4LCB5KTsKKyAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JU
b1Bvc2l0aW9uKGRyYWdDdXJzb3IpOworICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vy
c29ySW50b1ZpZXcoKTsKKyAgICB9OworICAgIAorICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNl
VGFyZ2V0LCAiZHJhZ2xlYXZlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZWRpdG9yLmdl
dFJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvdW50ZXItLTsKKyAg
ICAgICAgaWYgKGNvdW50ZXIgPiAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjbGVh
ckludGVydmFsKHRpbWVySWQpOworICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIo
ZHJhZ1NlbGVjdGlvbk1hcmtlcik7CisgICAgICAgIGRyYWdTZWxlY3Rpb25NYXJrZXIgPSBudWxs
OworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBpc0Jh
Y2t3YXJkcyk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICB9
KTsKKyAgICAKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyb3AiLCBmdW5j
dGlvbihlKSB7CisgICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY291bnRlciA9IDA7CisgICAgICAgIGNsZWFySW50ZXJ2YWwodGlt
ZXJJZCk7CisgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZU1hcmtlcihkcmFnU2VsZWN0aW9u
TWFya2VyKTsKKyAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IG51bGw7CisKKyAgICAgICAg
cmFuZ2UuZW5kID0gZWRpdG9yLnNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIGUuZGF0YVRyYW5z
ZmVyLmdldERhdGEoJ1RleHQnKSk7CisgICAgICAgIHJhbmdlLnN0YXJ0ID0gZHJhZ0N1cnNvcjsK
KyAgICAgICAgZWRpdG9yLmZvY3VzKCk7CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQo
ZSk7CisgICAgfSk7CisKK307CisKK2V4cG9ydHMuRHJhZ2Ryb3BIYW5kbGVyID0gRHJhZ2Ryb3BI
YW5kbGVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9mb2xkX2hhbmRsZXInLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisKK2Z1bmN0aW9uIEZvbGRIYW5kbGVyKGVkaXRvcikgeworCisgICAgZWRp
dG9yLm9uKCJjbGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gZS5n
ZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Np
b247CisgICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBw
b3NpdGlvbi5jb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgaWYg
KGUuZ2V0QWNjZWxLZXkoKSkKKyAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9s
ZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRGb2xk
KGZvbGQpOworCisgICAgICAgICAgICBlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0pOworCisg
ICAgZWRpdG9yLm9uKCJndXR0ZXJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlm
ICghZWRpdG9yLmlzRm9jdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIg
Z3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdpb24oZSk7
CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSAiZm9sZFdpZGdldHMiKSB7CisgICAgICAg
ICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OworICAgICAgICAgICAg
dmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uLmZv
bGRXaWRnZXRzICYmIHNlc3Npb24uZm9sZFdpZGdldHNbcm93XSkKKyAgICAgICAgICAgICAgICBl
ZGl0b3Iuc2Vzc2lvbi5vbkZvbGRXaWRnZXRDbGljayhyb3csIGUpOworICAgICAgICAgICAgZS5z
dG9wKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGVkaXRvci5vbigiZ3V0dGVyZGJsY2xp
Y2siLCBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBlZGl0b3IucmVu
ZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihlKTsKKworICAgICAgICBpZiAoZ3V0dGVyUmVn
aW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERvY3Vt
ZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNz
aW9uOworICAgICAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0czsKKyAgICAgICAg
ICAgIGlmICghZncgfHwgZndbcm93XSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHZhciBpID0gcm93IC0gMSwgZmlyc3RSYW5nZTsKKyAgICAgICAgICAgIHdoaWxlIChp
ID49IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgYyA9IGZ3W2ldOworICAgICAgICAgICAgICAg
IGlmIChjID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGMgPSBmd1tpXSA9IHNlc3Npb24u
Z2V0Rm9sZFdpZGdldCgpOworCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gInN0YXJ0Iikgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldEZvbGRXaWRnZXRSYW5n
ZShpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJhbmdlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA+PSByb3cpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmFuZ2UgPSBm
aXJzdFJhbmdlOworCisgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAgIHZhciBmb2xkID0gc2Vz
c2lvbi5nZXRGb2xkQXQocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIDEpOworCisg
ICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5y
ZW1vdmVGb2xkKGZvbGQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOworICAgICAgICAgICAgICAgICAg
ICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uuc3RhcnQu
cm93LCBjb2x1bW46IDB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitleHBvcnRzLkZvbGRI
YW5kbGVyID0gRm9sZEhhbmRsZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uva2V5Ym9hcmQv
a2V5YmluZGluZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9r
ZXlzJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIGtleVV0aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKK3ZhciBldmVu
dCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworCit2YXIgS2V5QmluZGluZyA9IGZ1bmN0aW9u
KGVkaXRvcikgeworICAgIHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKKyAgICB0aGlzLiRkYXRhID0g
eyB9OworICAgIHRoaXMuJGhhbmRsZXJzID0gW107CisgICAgdGhpcy5zZXREZWZhdWx0SGFuZGxl
cihlZGl0b3IuY29tbWFuZHMpOworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2V0RGVm
YXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJk
SGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7CisgICAgICAgIHRoaXMuJGRlZmF1bHRIYW5k
bGVyID0ga2I7CisgICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAwKTsKKyAgICAg
ICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRoaXMuJGVkaXRvcn07CisgICAgfTsKKworICAgIHRo
aXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKKyAgICAgICAgaWYgKHRoaXMu
JGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxlbmd0aCAtIDFdID09IGtiKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHdoaWxlICh0aGlzLiRoYW5kbGVyc1sxXSkKKyAgICAgICAgICAg
IHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGhhbmRsZXJzWzFdKTsKKworICAgICAg
ICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihrYiwgMSk7CisgICAgfTsKKworICAgIHRoaXMuYWRk
S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IsIHBvcykgeworICAgICAgICBpZiAoIWtiKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4
T2Yoa2IpOworICAgICAgICBpZiAoaSAhPSAtMSkKKyAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJz
LnNwbGljZShpLCAxKTsKKworICAgICAgICBpZiAocG9zID09IHVuZGVmaW5lZCkKKyAgICAgICAg
ICAgIHRoaXMuJGhhbmRsZXJzLnB1c2goa2IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
aGlzLiRoYW5kbGVycy5zcGxpY2UocG9zLCAwLCBrYik7CisKKyAgICAgICAgaWYgKGkgPT0gLTEg
JiYga2IuYXR0YWNoKQorICAgICAgICAgICAga2IuYXR0YWNoKHRoaXMuJGVkaXRvcik7CisgICAg
fTsKKworICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKKyAg
ICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKKyAgICAgICAgaWYgKGkg
PT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRoaXMuJGhhbmRsZXJz
LnNwbGljZShpLCAxKTsKKyAgICAgICAga2IuZGV0YWNoICYmIGtiLmRldGFjaCh0aGlzLiRlZGl0
b3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5nZXRLZXlib2Fy
ZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZXJzW3Ro
aXMuJGhhbmRsZXJzLmxlbmd0aCAtIDFdOworICAgIH07CisKKyAgICB0aGlzLiRjYWxsS2V5Ym9h
cmRIYW5kbGVycyA9IGZ1bmN0aW9uIChoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSkgewor
ICAgICAgICB2YXIgdG9FeGVjdXRlOworICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICB2YXIgY29tbWFuZHMgPSB0aGlzLiRlZGl0b3IuY29tbWFuZHM7CisKKyAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgdG9F
eGVjdXRlID0gdGhpcy4kaGFuZGxlcnNbaV0uaGFuZGxlS2V5Ym9hcmQoCisgICAgICAgICAgICAg
ICAgdGhpcy4kZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUKKyAgICAgICAgICAg
ICk7CisgICAgICAgICAgICBpZiAoIXRvRXhlY3V0ZSB8fCAhdG9FeGVjdXRlLmNvbW1hbmQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodG9FeGVjdXRlLmNvbW1h
bmQgPT0gIm51bGwiKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRvRXhlY3V0ZS5wYXNz
RXZlbnQgIT0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IGNvbW1hbmRzLmV4ZWModG9FeGVjdXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwgdG9F
eGVjdXRlLmFyZ3MsIGUpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xKQorICAgICAgICAgICAgICAgIGV2
ZW50LnN0b3BFdmVudChlKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH07CisK
KyAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkgewor
ICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7
CisgICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBr
ZXlDb2RlLCBlKTsKKyAgICB9OworCisgICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRl
eHQpIHsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygt
MSwgdGV4dCk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHRoaXMuJGVkaXRv
ci5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLiRlZGl0b3IsIHRleHQpOworICAg
IH07CisKK30pLmNhbGwoS2V5QmluZGluZy5wcm90b3R5cGUpOworCitleHBvcnRzLktleUJpbmRp
bmcgPSBLZXlCaW5kaW5nOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24nLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9jb25maWcnLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9saWIvZXZlbnRfZW1pdHRl
cicsICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3JhbmdlJywgJ2FjZS9k
b2N1bWVudCcsICdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCAnYWNlL3NlYXJjaF9oaWdobGln
aHQnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgJ2FjZS9lZGl0X3Nlc3Npb24vYnJhY2tl
dF9tYXRjaCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
Y29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9v
b3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwordmFyIG5ldCA9IHJlcXVp
cmUoIi4vbGliL25ldCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50
X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cit2YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgiLi9zZWxl
Y3Rpb24iKS5TZWxlY3Rpb247Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL21vZGUvdGV4dCIp
Lk1vZGU7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgRG9jdW1l
bnQgPSByZXF1aXJlKCIuL2RvY3VtZW50IikuRG9jdW1lbnQ7Cit2YXIgQmFja2dyb3VuZFRva2Vu
aXplciA9IHJlcXVpcmUoIi4vYmFja2dyb3VuZF90b2tlbml6ZXIiKS5CYWNrZ3JvdW5kVG9rZW5p
emVyOwordmFyIFNlYXJjaEhpZ2hsaWdodCA9IHJlcXVpcmUoIi4vc2VhcmNoX2hpZ2hsaWdodCIp
LlNlYXJjaEhpZ2hsaWdodDsKKwordmFyIEVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9k
ZSkgeworICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgdGhpcy4kZGVjb3JhdGlvbnMg
PSBbXTsKKyAgICB0aGlzLiRmcm9udE1hcmtlcnMgPSB7fTsKKyAgICB0aGlzLiRiYWNrTWFya2Vy
cyA9IHt9OworICAgIHRoaXMuJG1hcmtlcklkID0gMTsKKyAgICB0aGlzLiR1bmRvU2VsZWN0ID0g
dHJ1ZTsKKyAgICAKKyAgICB0aGlzLiRmb2xkRGF0YSA9IFtdOworICAgIHRoaXMuJGZvbGREYXRh
LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdHIgPSAiIjsKKyAgICAgICAg
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGRMaW5lKSB7CisgICAgICAgICAgICBzdHIgKz0gIlxu
IiArIGZvbGRMaW5lLnRvU3RyaW5nKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gc3Ry
OworICAgIH0KKyAgICB0aGlzLm9uKCJjaGFuZ2VGb2xkIiwgdGhpcy5vbkNoYW5nZUZvbGQuYmlu
ZCh0aGlzKSk7CisgICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7
CisgICAgCisgICAgaWYgKHR5cGVvZiB0ZXh0ICE9ICJvYmplY3QiIHx8ICF0ZXh0LmdldExpbmUp
CisgICAgICAgIHRleHQgPSBuZXcgRG9jdW1lbnQodGV4dCk7CisKKyAgICB0aGlzLnNldERvY3Vt
ZW50KHRleHQpOworCisgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMpOwor
ICAgIHRoaXMuc2V0TW9kZShtb2RlKTsKK307CisKKworKGZ1bmN0aW9uKCkgeworCisgICAgb29w
LmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBm
dW5jdGlvbihkb2MpIHsKKyAgICAgICAgaWYgKHRoaXMuZG9jKQorICAgICAgICAgICAgdGhpcy5k
b2MucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKKworICAgICAgICB0
aGlzLmRvYyA9IGRvYzsKKyAgICAgICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7
CisKKyAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCisgICAgICAgICAgICB0aGlzLmJnVG9r
ZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAgICAgdGhpcy5y
ZXNldENhY2hlcygpOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5kb2M7CisgICAgfTsKKyAgICB0aGlzLiRyZXNldFJvd0Nh
Y2hlID0gZnVuY3Rpb24oZG9jUm93KSB7CisgICAgICAgIGlmICghZG9jUm93KSB7CisgICAgICAg
ICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtdOworICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93
Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9jUm93KSAr
IDE7CisgICAgICAgIHZhciBsID0gdGhpcy4kZG9jUm93Q2FjaGUubGVuZ3RoOworICAgICAgICB0
aGlzLiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7CisgICAgICAgIHRoaXMuJHNjcmVlblJvd0Nh
Y2hlLnNwbGljZShpLCBsKTsKKworICAgIH07CisKKyAgICB0aGlzLiRnZXRSb3dDYWNoZUluZGV4
ID0gZnVuY3Rpb24oY2FjaGVBcnJheSwgdmFsKSB7CisgICAgICAgIHZhciBsb3cgPSAwOworICAg
ICAgICB2YXIgaGkgPSBjYWNoZUFycmF5Lmxlbmd0aCAtIDE7CisKKyAgICAgICAgd2hpbGUgKGxv
dyA8PSBoaSkgeworICAgICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaSkgPj4gMTsKKyAgICAg
ICAgICAgIHZhciBjID0gY2FjaGVBcnJheVttaWRdOworCisgICAgICAgICAgICBpZiAodmFsID4g
YykKKyAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAo
dmFsIDwgYykKKyAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDE7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBsb3cgLTE7CisgICAgfTsKKworICAgIHRoaXMucmVzZXRDYWNoZXMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICB0aGlzLiR3cmFwRGF0YSA9
IFtdOworICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZSA9IFtdOworICAgICAgICB0aGlzLiRy
ZXNldFJvd0NhY2hlKDApOworICAgICAgICBpZiAodGhpcy5iZ1Rva2VuaXplcikKKyAgICAgICAg
ICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7CisgICAgfTsKKworICAgIHRoaXMub25DaGFu
Z2VGb2xkID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZm9sZCA9IGUuZGF0YTsKKyAgICAg
ICAgdGhpcy4kcmVzZXRSb3dDYWNoZShmb2xkLnN0YXJ0LnJvdyk7CisgICAgfTsKKworICAgIHRo
aXMub25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkZWx0YSA9IGUuZGF0YTsK
KyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworCisgICAgICAgIHRoaXMuJHJlc2V0Um93
Q2FjaGUoZGVsdGEucmFuZ2Uuc3RhcnQucm93KTsKKworICAgICAgICB2YXIgcmVtb3ZlZEZvbGRz
ID0gdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7CisgICAgICAgIGlmICghdGhp
cy4kZnJvbVVuZG8gJiYgdGhpcy4kdW5kb01hbmFnZXIgJiYgIWRlbHRhLmlnbm9yZSkgeworICAg
ICAgICAgICAgdGhpcy4kZGVsdGFzRG9jLnB1c2goZGVsdGEpOworICAgICAgICAgICAgaWYgKHJl
bW92ZWRGb2xkcyAmJiByZW1vdmVkRm9sZHMubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLiRkZWx0YXNGb2xkLnB1c2goeworICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICJy
ZW1vdmVGb2xkcyIsCisgICAgICAgICAgICAgICAgICAgIGZvbGRzOiAgcmVtb3ZlZEZvbGRzCisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJGlu
Zm9ybVVuZG9NYW5hZ2VyLnNjaGVkdWxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmJn
VG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShkZWx0YSk7CisgICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZSIsIGUpOworICAgIH07CisgICAgdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHRleHQpIHsK
KyAgICAgICAgdGhpcy5kb2Muc2V0VmFsdWUodGV4dCk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9u
Lm1vdmVDdXJzb3JUbygwLCAwKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rp
b24oKTsKKworICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOworICAgICAgICB0aGlzLiRk
ZWx0YXMgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107CisgICAgICAgIHRoaXMu
JGRlbHRhc0ZvbGQgPSBbXTsKKyAgICAgICAgdGhpcy5nZXRVbmRvTWFuYWdlcigpLnJlc2V0KCk7
CisgICAgfTsKKyAgICB0aGlzLmdldFZhbHVlID0KKyAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpOworICAgIH07CisgICAg
dGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vs
ZWN0aW9uOworICAgIH07CisgICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgeworICAg
ICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpOworICAgIH07CisgICAg
dGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYmdU
b2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldFRva2VuQXQgPSBm
dW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rva2Vu
aXplci5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFyIHRva2VuLCBjID0gMDsKKyAgICAgICAg
aWYgKGNvbHVtbiA9PSBudWxsKSB7CisgICAgICAgICAgICBpID0gdG9rZW5zLmxlbmd0aCAtIDE7
CisgICAgICAgICAgICBjID0gdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBjICs9IHRva2Vuc1tpXS52YWx1ZS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgaWYgKGMgPj0gY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAg
ICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB0b2tlbi5p
bmRleCA9IGk7CisgICAgICAgIHRva2VuLnN0YXJ0ID0gYyAtIHRva2VuLnZhbHVlLmxlbmd0aDsK
KyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH07CisgICAgdGhpcy5zZXRVbmRvTWFuYWdlciA9
IGZ1bmN0aW9uKHVuZG9NYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuJHVuZG9NYW5hZ2VyID0gdW5k
b01hbmFnZXI7CisgICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0
YXNEb2MgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdOworCisgICAgICAgIGlm
ICh0aGlzLiRpbmZvcm1VbmRvTWFuYWdlcikKKyAgICAgICAgICAgIHRoaXMuJGluZm9ybVVuZG9N
YW5hZ2VyLmNhbmNlbCgpOworCisgICAgICAgIGlmICh1bmRvTWFuYWdlcikgeworICAgICAgICAg
ICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgICB0aGlzLiRzeW5jSW5mb3JtVW5kb01h
bmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzZWxmLiRpbmZvcm1VbmRvTWFu
YWdlci5jYW5jZWwoKTsKKworICAgICAgICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXNGb2xkLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXMucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cDogImZvbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsdGFzOiBzZWxmLiRkZWx0YXNGb2xkCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNGb2xkID0gW107CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0RvYy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAg
Z3JvdXA6ICJkb2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFzOiBzZWxmLiRkZWx0
YXNEb2MKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
JGRlbHRhc0RvYyA9IFtdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICB1bmRvTWFu
YWdlci5leGVjdXRlKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogImFjZXVwZGF0
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbc2VsZi4kZGVsdGFzLCBzZWxmXQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBzZWxmLiRkZWx0YXMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
JGluZm9ybVVuZG9NYW5hZ2VyID0KKyAgICAgICAgICAgICAgICBsYW5nLmRlZmVycmVkQ2FsbCh0
aGlzLiRzeW5jSW5mb3JtVW5kb01hbmFnZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRo
aXMuJGRlZmF1bHRVbmRvTWFuYWdlciA9IHsKKyAgICAgICAgdW5kbzogZnVuY3Rpb24oKSB7fSwK
KyAgICAgICAgcmVkbzogZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkg
e30KKyAgICB9OworICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJHVuZG9NYW5hZ2VyIHx8IHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlcjsK
KyAgICB9OworICAgIHRoaXMuZ2V0VGFiU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh0aGlzLmdldFVzZVNvZnRUYWJzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBsYW5nLnN0cmlu
Z1JlcGVhdCgiICIsIHRoaXMuZ2V0VGFiU2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiAiXHQiOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHVzZVNv
ZnRUYWJzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24odXNlU29m
dFRhYnMpIHsKKyAgICAgICAgaWYgKHRoaXMuJHVzZVNvZnRUYWJzID09PSB1c2VTb2Z0VGFicykg
cmV0dXJuOworCisgICAgICAgIHRoaXMuJHVzZVNvZnRUYWJzID0gdXNlU29mdFRhYnM7CisgICAg
fTsKKyAgICB0aGlzLmdldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLiR1c2VTb2Z0VGFiczsKKyAgICB9OworCisgICAgdGhpcy4kdGFiU2l6ZSA9IDQ7Cisg
ICAgdGhpcy5zZXRUYWJTaXplID0gZnVuY3Rpb24odGFiU2l6ZSkgeworICAgICAgICBpZiAoaXNO
YU4odGFiU2l6ZSkgfHwgdGhpcy4kdGFiU2l6ZSA9PT0gdGFiU2l6ZSkgcmV0dXJuOworCisgICAg
ICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUg
PSBbXTsKKyAgICAgICAgdGhpcy4kdGFiU2l6ZSA9IHRhYlNpemU7CisgICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZVRhYlNpemUiKTsKKyAgICB9OworICAgIHRoaXMuZ2V0VGFiU2l6ZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kdGFiU2l6ZTsKKyAgICB9OworICAgIHRoaXMu
aXNUYWJTdG9wID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHVz
ZVNvZnRUYWJzICYmIChwb3NpdGlvbi5jb2x1bW4gJSB0aGlzLiR0YWJTaXplID09IDApOworICAg
IH07CisKKyAgICB0aGlzLiRvdmVyd3JpdGUgPSBmYWxzZTsKKyAgICB0aGlzLnNldE92ZXJ3cml0
ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICBpZiAodGhpcy4kb3ZlcndyaXRlID09
IG92ZXJ3cml0ZSkgcmV0dXJuOworCisgICAgICAgIHRoaXMuJG92ZXJ3cml0ZSA9IG92ZXJ3cml0
ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlT3ZlcndyaXRlIik7CisgICAgfTsKKyAgICB0
aGlzLmdldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3Zl
cndyaXRlOworICAgIH07CisgICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSk7CisgICAgfTsKKyAg
ICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewor
ICAgICAgICBpZiAoIXRoaXMuJGRlY29yYXRpb25zW3Jvd10pCisgICAgICAgICAgICB0aGlzLiRk
ZWNvcmF0aW9uc1tyb3ddID0gIiI7CisgICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gKz0g
IiAiICsgY2xhc3NOYW1lOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwg
e30pOworICAgIH07CisgICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24o
cm93LCBjbGFzc05hbWUpIHsKKyAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICh0aGlz
LiRkZWNvcmF0aW9uc1tyb3ddIHx8ICIiKS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZSwgIiIpOwor
ICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07CisgICAg
dGhpcy5nZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
YnJlYWtwb2ludHM7CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFrcG9pbnRzID0gZnVuY3Rpb24o
cm93cykgeworICAgICAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpPTA7IGk8cm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2lu
dHNbcm93c1tpXV0gPSAiYWNlX2JyZWFrcG9pbnQiOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmNsZWFyQnJl
YWtwb2ludHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsK
KyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAg
IHRoaXMuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7CisgICAgICAg
IGlmIChjbGFzc05hbWUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJh
Y2VfYnJlYWtwb2ludCI7CisgICAgICAgIGlmIChjbGFzc05hbWUpCisgICAgICAgICAgICB0aGlz
LiRicmVha3BvaW50c1tyb3ddID0gY2xhc3NOYW1lOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hh
bmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuY2xlYXJCcmVha3BvaW50ID0g
ZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGRlbGV0ZSB0aGlzLiRicmVha3BvaW50c1tyb3ddOwor
ICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07CisgICAg
dGhpcy5hZGRNYXJrZXIgPSBmdW5jdGlvbihyYW5nZSwgY2xhenosIHR5cGUsIGluRnJvbnQpIHsK
KyAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKzsKKworICAgICAgICB2YXIgbWFya2Vy
ID0geworICAgICAgICAgICAgcmFuZ2UgOiByYW5nZSwKKyAgICAgICAgICAgIHR5cGUgOiB0eXBl
IHx8ICJsaW5lIiwKKyAgICAgICAgICAgIHJlbmRlcmVyOiB0eXBlb2YgdHlwZSA9PSAiZnVuY3Rp
b24iID8gdHlwZSA6IG51bGwsCisgICAgICAgICAgICBjbGF6eiA6IGNsYXp6LAorICAgICAgICAg
ICAgaW5Gcm9udDogISFpbkZyb250LAorICAgICAgICAgICAgaWQ6IGlkCisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaW5Gcm9udCkgeworICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lk
XSA9IG1hcmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9IG1h
cmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH07CisgICAgdGhpcy5hZGREeW5hbWljTWFy
a2VyID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7CisgICAgICAgIGlmICghbWFya2VyLnVw
ZGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2Vy
SWQrKzsKKyAgICAgICAgbWFya2VyLmlkID0gaWQ7CisgICAgICAgIG1hcmtlci5pbkZyb250ID0g
ISFpbkZyb250OworCisgICAgICAgIGlmIChpbkZyb250KSB7CisgICAgICAgICAgICB0aGlzLiRm
cm9udE1hcmtlcnNbaWRdID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
RnJvbnRNYXJrZXIiKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy4kYmFja01h
cmtlcnNbaWRdID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQmFja01h
cmtlciIpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWFya2VyOworICAgIH07CisgICAg
dGhpcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJJZCkgeworICAgICAgICB2YXIgbWFy
a2VyID0gdGhpcy4kZnJvbnRNYXJrZXJzW21hcmtlcklkXSB8fCB0aGlzLiRiYWNrTWFya2Vyc1tt
YXJrZXJJZF07CisgICAgICAgIGlmICghbWFya2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBtYXJrZXJzID0gbWFya2VyLmluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMg
OiB0aGlzLiRiYWNrTWFya2VyczsKKyAgICAgICAgaWYgKG1hcmtlcikgeworICAgICAgICAgICAg
ZGVsZXRlIChtYXJrZXJzW21hcmtlcklkXSk7CisgICAgICAgICAgICB0aGlzLl9lbWl0KG1hcmtl
ci5pbkZyb250ID8gImNoYW5nZUZyb250TWFya2VyIiA6ICJjaGFuZ2VCYWNrTWFya2VyIik7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJvbnQp
IHsKKyAgICAgICAgcmV0dXJuIGluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRi
YWNrTWFya2VyczsKKyAgICB9OworCisgICAgdGhpcy5oaWdobGlnaHQgPSBmdW5jdGlvbihyZSkg
eworICAgICAgICBpZiAoIXRoaXMuJHNlYXJjaEhpZ2hsaWdodCkgeworICAgICAgICAgICAgdmFy
IGhpZ2hsaWdodCA9IG5ldyBTZWFyY2hIaWdobGlnaHQobnVsbCwgImFjZV9zZWxlY3RlZC13b3Jk
IiwgInRleHQiKTsKKyAgICAgICAgICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodCA9IHRoaXMuYWRk
RHluYW1pY01hcmtlcihoaWdobGlnaHQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuJHNlYXJj
aEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOworICAgIH0KKyAgICB0aGlzLmhpZ2hsaWdodExpbmVz
ID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgY2xhenosIGluRnJvbnQpIHsKKyAgICAgICAg
aWYgKHR5cGVvZiBlbmRSb3cgIT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIGNsYXp6ID0gZW5k
Um93OworICAgICAgICAgICAgZW5kUm93ID0gc3RhcnRSb3c7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFjbGF6eikKKyAgICAgICAgICAgIGNsYXp6ID0gImFjZV9zdGVwIjsKKyAgICAgICAgCisg
ICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgMCwgZW5kUm93LCBJbmZpbml0
eSk7CisgICAgICAgIAorICAgICAgICB2YXIgaWQgPSB0aGlzLmFkZE1hcmtlcihyYW5nZSwgY2xh
enosICJmdWxsTGluZSIsIGluRnJvbnQpOworICAgICAgICByYW5nZS5pZCA9IGlkOworICAgICAg
ICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rp
b24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9u
czsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIsIHt9KTsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJGFubm90YXRpb25zIHx8IFtdOworICAgIH07CisgICAgdGhpcy5jbGVhckFubm90YXRpb25z
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGFubm90YXRpb25zID0ge307CisgICAgICAg
IHRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLiRk
ZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0
Lm1hdGNoKC9eLio/KFxyP1xuKS9tKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAg
ICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiXG4iOworICAgICAgICB9CisgICAgfTsKKyAgICB0
aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBs
aW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CisKKyAgICAgICAgdmFyIGluVG9rZW4gPSBmYWxzZTsK
KyAgICAgICAgaWYgKGNvbHVtbiA+IDApCisgICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNo
YXJBdChjb2x1bW4gLSAxKS5tYXRjaCh0aGlzLnRva2VuUmUpOworCisgICAgICAgIGlmICghaW5U
b2tlbikKKyAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0Y2go
dGhpcy50b2tlblJlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpblRva2VuKQorICAgICAgICAg
ICAgdmFyIHJlID0gdGhpcy50b2tlblJlOworICAgICAgICBlbHNlIGlmICgvXlxzKyQvLnRlc3Qo
bGluZS5zbGljZShjb2x1bW4tMSwgY29sdW1uKzEpKSkKKyAgICAgICAgICAgIHZhciByZSA9IC9c
cy87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhciByZSA9IHRoaXMubm9uVG9rZW5SZTsK
KworICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47CisgICAgICAgIGlmIChzdGFydCA+IDApIHsK
KyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzdGFydC0tOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1h
dGNoKHJlKSk7CisgICAgICAgICAgICBzdGFydCsrOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGVuZCA9IGNvbHVtbjsKKyAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUu
Y2hhckF0KGVuZCkubWF0Y2gocmUpKSB7CisgICAgICAgICAgICBlbmQrKzsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpOworICAgIH07
CisgICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAg
ICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTsKKyAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpOworCisgICAgICAg
IHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFuZ2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXHRdLykp
IHsKKyAgICAgICAgICAgIHdvcmRSYW5nZS5lbmQuY29sdW1uICs9IDE7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHdvcmRSYW5nZTsKKyAgICB9OworICAgIHRoaXMuc2V0TmV3TGluZU1vZGUg
PSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgeworICAgICAgICB0aGlzLmRvYy5zZXROZXdMaW5lTW9k
ZShuZXdMaW5lTW9kZSk7CisgICAgfTsKKyAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXROZXdMaW5lTW9kZSgpOworICAgIH07
CisKKyAgICB0aGlzLiR1c2VXb3JrZXIgPSB0cnVlOworICAgIHRoaXMuc2V0VXNlV29ya2VyID0g
ZnVuY3Rpb24odXNlV29ya2VyKSB7CisgICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIgPT0gdXNl
V29ya2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJHVzZVdvcmtlciA9
IHVzZVdvcmtlcjsKKworICAgICAgICB0aGlzLiRzdG9wV29ya2VyKCk7CisgICAgICAgIGlmICh1
c2VXb3JrZXIpCisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOworICAgIH07CisgICAg
dGhpcy5nZXRVc2VXb3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHVz
ZVdvcmtlcjsKKyAgICB9OworICAgIHRoaXMub25SZWxvYWRUb2tlbml6ZXIgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIHZhciByb3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLmJnVG9rZW5pemVy
LnN0YXJ0KHJvd3MuZmlyc3QpOworICAgICAgICB0aGlzLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUi
LCBlKTsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZXMgPSB7fTsKKyAgICB0aGlzLiRtb2RlID0g
bnVsbDsKKyAgICB0aGlzLiRtb2RlSWQgPSBudWxsOworICAgIHRoaXMuc2V0TW9kZSA9IGZ1bmN0
aW9uKG1vZGUpIHsKKyAgICAgICAgaWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09ICJvYmplY3Qi
KSB7CisgICAgICAgICAgICBpZiAobW9kZS5nZXRUb2tlbml6ZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZShtb2RlKTsKKyAgICAgICAgICAgIHZhciBvcHRpb25z
ID0gbW9kZTsKKyAgICAgICAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcGF0aCA9IG1vZGUgfHwgImFjZS9tb2RlL3RleHQiOworICAg
ICAgICB9CisgICAgICAgIGlmICghdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSkKKyAgICAg
ICAgICAgIHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0gPSBuZXcgVGV4dE1vZGUoKTsKKwor
ICAgICAgICBpZiAodGhpcy4kbW9kZXNbcGF0aF0gJiYgIW9wdGlvbnMpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhdKTsKKyAgICAgICAgdGhp
cy4kbW9kZUlkID0gcGF0aDsKKyAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWyJtb2RlIiwgcGF0
aF0sIGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2RlSWQgIT09IHBhdGgp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVzW3Bh
dGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvbkNoYW5nZU1v
ZGUodGhpcy4kbW9kZXNbcGF0aF0pOworICAgICAgICAgICAgaWYgKG0gJiYgbS5Nb2RlKSB7Cisg
ICAgICAgICAgICAgICAgbSA9IG5ldyBtLk1vZGUob3B0aW9ucyk7CisgICAgICAgICAgICAgICAg
aWYgKCFvcHRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3BhdGhdID0g
bTsKKyAgICAgICAgICAgICAgICAgICAgbS4kaWQgPSBwYXRoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUobSkKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKCF0aGlzLiRtb2RlKQorICAgICAgICAg
ICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0sIHRydWUp
OworICAgIH07CisKKyAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihtb2RlLCAkaXNQ
bGFjZWhvbGRlcikgeworICAgICAgICBpZiAodGhpcy4kbW9kZSA9PT0gbW9kZSkgcmV0dXJuOwor
ICAgICAgICB0aGlzLiRtb2RlID0gbW9kZTsKKworICAgICAgICB0aGlzLiRzdG9wV29ya2VyKCk7
CisKKyAgICAgICAgaWYgKHRoaXMuJHVzZVdvcmtlcikKKyAgICAgICAgICAgIHRoaXMuJHN0YXJ0
V29ya2VyKCk7CisKKyAgICAgICAgdmFyIHRva2VuaXplciA9IG1vZGUuZ2V0VG9rZW5pemVyKCk7
CisKKyAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgdmFyIG9uUmVsb2FkVG9rZW5pemVyID0gdGhpcy5vblJlbG9hZFRva2Vu
aXplci5iaW5kKHRoaXMpOworICAgICAgICAgICAgdG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIo
InVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
dGhpcy5iZ1Rva2VuaXplcikgeworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG5ldyBC
YWNrZ3JvdW5kVG9rZW5pemVyKHRva2VuaXplcik7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0
aGlzOworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1cGRh
dGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgX3NlbGYuX2VtaXQoInRva2VuaXpl
clVwZGF0ZSIsIGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLmJnVG9rZW5pemVyLnNldFRva2VuaXplcih0b2tlbml6ZXIpOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50
KCkpOworCisgICAgICAgIHRoaXMudG9rZW5SZSA9IG1vZGUudG9rZW5SZTsKKyAgICAgICAgdGhp
cy5ub25Ub2tlblJlID0gbW9kZS5ub25Ub2tlblJlOworCisKKyAgICAgICAgaWYgKCEkaXNQbGFj
ZWhvbGRlcikgeworICAgICAgICAgICAgdGhpcy4kbW9kZUlkID0gbW9kZS4kaWQ7CisgICAgICAg
ICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1bGVzKTsKKyAgICAgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3Rh
cnQoMCk7CisgICAgICAgIH0KKyAgICB9OworCisKKyAgICB0aGlzLiRzdG9wV29ya2VyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLiR3b3JrZXIpCisgICAgICAgICAgICB0aGlzLiR3
b3JrZXIudGVybWluYXRlKCk7CisKKyAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKKyAgICB9
OworCisKKyAgICB0aGlzLiRzdGFydFdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
dHlwZW9mIFdvcmtlciAhPT0gInVuZGVmaW5lZCIgJiYgIXJlcXVpcmUubm9Xb3JrZXIpIHsKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4kbW9k
ZS5jcmVhdGVXb3JrZXIodGhpcyk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coIkNvdWxkIG5vdCBsb2FkIHdvcmtlciIpOworICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGhpcy4kd29ya2VyID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTsKKyAgICB9OworCisgICAgdGhpcy4kc2Ny
b2xsVG9wID0gMDsKKyAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkg
eworICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbFRvcCkp
OworICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2VTY3JvbGxUb3AiLCBzY3JvbGxUb3ApOworICAgIH07CisgICAg
dGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNj
cm9sbFRvcDsKKyAgICB9OworCisgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IDA7CisgICAgdGhpcy5z
ZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkgeworICAgICAgICBzY3JvbGxMZWZ0
ID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KSk7CisgICAgICAgIGlmICh0aGlz
LiRzY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRoaXMuJHNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VTY3JvbGxMZWZ0Iiwgc2Nyb2xsTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9s
bExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbExlZnQ7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFNjcmVlbldpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMuJGNvbXB1dGVXaWR0aCgpOworICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5XaWR0aDsKKyAg
ICB9OworCisgICAgdGhpcy4kY29tcHV0ZVdpZHRoID0gZnVuY3Rpb24oZm9yY2UpIHsKKyAgICAg
ICAgaWYgKHRoaXMuJG1vZGlmaWVkIHx8IGZvcmNlKSB7CisgICAgICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPSB0aGlzLiR3cmFwTGltaXQ7CisK
KyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7CisgICAgICAg
ICAgICB2YXIgY2FjaGUgPSB0aGlzLiRyb3dMZW5ndGhDYWNoZTsKKyAgICAgICAgICAgIHZhciBs
b25nZXN0U2NyZWVuTGluZSA9IDA7CisgICAgICAgICAgICB2YXIgZm9sZEluZGV4ID0gMDsKKyAg
ICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuJGZvbGREYXRhW2ZvbGRJbmRleF07CisgICAg
ICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJ
bmZpbml0eTsKKyAgICAgICAgICAgIHZhciBsZW4gPSBsaW5lcy5sZW5ndGg7CisKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
aSA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgICAgICBpID0gZm9sZExpbmUuZW5kLnJv
dyArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IGxlbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuJGZv
bGREYXRhW2ZvbGRJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9s
ZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5lc1tpXSlbMF07
CisKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPiBsb25nZXN0U2NyZWVuTGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgbG9uZ2VzdFNjcmVlbkxpbmUgPSBjYWNoZVtpXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2NyZWVuV2lkdGggPSBsb25nZXN0U2NyZWVuTGluZTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdl
dExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZG9jLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICB9OworICAgIHRoaXMuZ2V0
TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMZW5ndGgo
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFRleHRSYW5nZShyYW5nZSB8fCB0aGlzLnNlbGVjdGlv
bi5nZXRSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24ocG9zaXRp
b24sIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmluc2VydChwb3NpdGlvbiwgdGV4
dCk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOworICAgIH07CisgICAgdGhpcy51bmRvQ2hh
bmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgeworICAgICAgICBpZiAoIWRlbHRh
cy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kZnJvbVVuZG8g
PSB0cnVlOworICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7CisgICAgICAgIGZvciAo
dmFyIGkgPSBkZWx0YXMubGVuZ3RoIC0gMTsgaSAhPSAtMTsgaS0tKSB7CisgICAgICAgICAgICB2
YXIgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3JvdXAgPT0gImRv
YyIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZXZlcnREZWx0YXMoZGVsdGEuZGVsdGFz
KTsKKyAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID0KKyAgICAgICAgICAgICAgICAgICAg
dGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIHRydWUsIGxhc3RVbmRvUmFuZ2Up
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWx0YS5kZWx0YXMuZm9y
RWFjaChmdW5jdGlvbihmb2xkRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRG
b2xkcyhmb2xkRGVsdGEuZm9sZHMpOworICAgICAgICAgICAgICAgIH0sIHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7CisgICAg
ICAgIGxhc3RVbmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgJiYKKyAg
ICAgICAgICAgICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgcmV0dXJuIGxhc3RVbmRvUmFu
Z2U7CisgICAgfTsKKyAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250
U2VsZWN0KSB7CisgICAgICAgIGlmICghZGVsdGFzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7CisgICAgICAgIHZhciBsYXN0VW5k
b1JhbmdlID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKKyAgICAgICAgICAg
IGlmIChkZWx0YS5ncm91cCA9PSAiZG9jIikgeworICAgICAgICAgICAgICAgIHRoaXMuZG9jLmFw
cGx5RGVsdGFzKGRlbHRhLmRlbHRhcyk7CisgICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5nZSA9
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZGVsdGEuZGVsdGFz
LCBmYWxzZSwgbGFzdFVuZG9SYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKKyAgICAgICAgbGFzdFVuZG9SYW5nZSAmJgorICAg
ICAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCAmJgorICAgICAgICAgICAgIWRvbnRTZWxlY3QgJiYK
KyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGxhc3RVbmRvUmFu
Z2UpOworICAgICAgICByZXR1cm4gbGFzdFVuZG9SYW5nZTsKKyAgICB9OworICAgIHRoaXMuc2V0
VW5kb1NlbGVjdCA9IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAgICB0aGlzLiR1bmRvU2VsZWN0
ID0gZW5hYmxlOworICAgIH07CisKKyAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uID0gZnVuY3Rp
b24oZGVsdGFzLCBpc1VuZG8sIGxhc3RVbmRvUmFuZ2UpIHsKKyAgICAgICAgZnVuY3Rpb24gaXNJ
bnNlcnQoZGVsdGEpIHsKKyAgICAgICAgICAgIHZhciBpbnNlcnQgPQorICAgICAgICAgICAgICAg
IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJpbnNlcnRM
aW5lcyI7CisgICAgICAgICAgICByZXR1cm4gaXNVbmRvID8gIWluc2VydCA6IGluc2VydDsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1swXTsKKyAgICAgICAgdmFyIHJh
bmdlLCBwb2ludDsKKyAgICAgICAgdmFyIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7CisgICAg
ICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gZGVsdGEucmFu
Z2UuY2xvbmUoKTsKKyAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5y
YW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgbGFzdERlbHRhSXNJ
bnNlcnQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
ZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTsKKyAg
ICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKKyAgICAgICAgICAgICAgICBwb2ludCA9
IGRlbHRhLnJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBv
aW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zZXRTdGFydChkZWx0YS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2UuZW5kOworICAgICAgICAgICAgICAgIGlmIChy
YW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJhbmdlLnNldEVuZChkZWx0YS5yYW5nZS5lbmQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7Cisg
ICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1bW4p
ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLnN0
YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNl
cnQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGFzdFVu
ZG9SYW5nZSAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgY21wID0gbGFzdFVuZG9SYW5nZS5j
b21wYXJlUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobGFzdFVuZG9SYW5nZS5zdGFydCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChs
YXN0VW5kb1JhbmdlLmVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwg
dGV4dCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVwbGFjZShyYW5nZSwgdGV4dCk7Cisg
ICAgfTsKKyAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24oZnJvbVJhbmdlLCB0b1Bvc2l0aW9u
KSB7CisgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRUZXh0UmFuZ2UoZnJvbVJhbmdlKTsKKyAg
ICAgICAgdGhpcy5yZW1vdmUoZnJvbVJhbmdlKTsKKworICAgICAgICB2YXIgdG9Sb3cgPSB0b1Bv
c2l0aW9uLnJvdzsKKyAgICAgICAgdmFyIHRvQ29sdW1uID0gdG9Qb3NpdGlvbi5jb2x1bW47Cisg
ICAgICAgIGlmICghZnJvbVJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgZnJvbVJhbmdlLnN0YXJ0LnJv
dyA9PSB0b1JvdyAmJgorICAgICAgICAgICAgZnJvbVJhbmdlLmVuZC5jb2x1bW4gPCB0b0NvbHVt
bikKKyAgICAgICAgICAgIHRvQ29sdW1uIC09IHRleHQubGVuZ3RoOworCisgICAgICAgIGlmIChm
cm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBmcm9tUmFuZ2UuZW5kLnJvdyA8IHRvUm93KSB7Cisg
ICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy4kc3BsaXQodGV4dCk7CisgICAgICAgICAg
ICB0b1JvdyAtPSBsaW5lcy5sZW5ndGggLSAxOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGVu
ZFJvdyA9IHRvUm93ICsgZnJvbVJhbmdlLmVuZC5yb3cgLSBmcm9tUmFuZ2Uuc3RhcnQucm93Owor
ICAgICAgICB2YXIgZW5kQ29sdW1uID0gZnJvbVJhbmdlLmlzTXVsdGlMaW5lKCkgPworICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbVJhbmdlLmVuZC5jb2x1bW4gOgorICAgICAgICAgICAgICAg
ICAgICAgICAgdG9Db2x1bW4gKyBmcm9tUmFuZ2UuZW5kLmNvbHVtbiAtIGZyb21SYW5nZS5zdGFy
dC5jb2x1bW47CisKKyAgICAgICAgdmFyIHRvUmFuZ2UgPSBuZXcgUmFuZ2UodG9Sb3csIHRvQ29s
dW1uLCBlbmRSb3csIGVuZENvbHVtbik7CisKKyAgICAgICAgdGhpcy5pbnNlcnQodG9SYW5nZS5z
dGFydCwgdGV4dCk7CisKKyAgICAgICAgcmV0dXJuIHRvUmFuZ2U7CisgICAgfTsKKyAgICB0aGlz
LmluZGVudFJvd3MgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBpbmRlbnRTdHJpbmcpIHsK
KyAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnJlcGxhY2UoL1x0L2csIHRoaXMu
Z2V0VGFiU3RyaW5nKCkpOworICAgICAgICBmb3IgKHZhciByb3c9c3RhcnRSb3c7IHJvdzw9ZW5k
Um93OyByb3crKykKKyAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IHJvdywgY29sdW1uOjB9
LCBpbmRlbnRTdHJpbmcpOworICAgIH07CisgICAgdGhpcy5vdXRkZW50Um93cyA9IGZ1bmN0aW9u
IChyYW5nZSkgeworICAgICAgICB2YXIgcm93UmFuZ2UgPSByYW5nZS5jb2xsYXBzZVJvd3MoKTsK
KyAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApOworICAgICAg
ICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpOworCisgICAgICAgIGZvciAodmFyIGkgPSBy
b3dSYW5nZS5zdGFydC5yb3c7IGkgPD0gcm93UmFuZ2UuZW5kLnJvdzsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShpKTsKKworICAgICAgICAgICAgZGVsZXRlUmFu
Z2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opCisgICAgICAgICAgICAg
ICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0gJ1x0Jykgewor
ICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IGo7CisgICAgICAgICAg
ICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGogKyAxOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSAwOworICAgICAg
ICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5yZW1vdmUoZGVsZXRlUmFuZ2UpOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0aGlzLm1vdmVMaW5lc1VwID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAg
ICAgaWYgKGZpcnN0Um93IDw9IDApIHJldHVybiAwOworCisgICAgICAgIHZhciByZW1vdmVkID0g
dGhpcy5kb2MucmVtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB0aGlzLmRv
Yy5pbnNlcnRMaW5lcyhmaXJzdFJvdyAtIDEsIHJlbW92ZWQpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfTsKKyAgICB0aGlzLm1vdmVMaW5lc0Rvd24gPSBmdW5jdGlvbihmaXJzdFJvdywgbGFz
dFJvdykgeworICAgICAgICBpZiAobGFzdFJvdyA+PSB0aGlzLmRvYy5nZXRMZW5ndGgoKS0xKSBy
ZXR1cm4gMDsKKworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuZG9jLnJlbW92ZUxpbmVzKGZp
cnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TGluZXMoZmlyc3RSb3cr
MSwgcmVtb3ZlZCk7CisgICAgICAgIHJldHVybiAxOworICAgIH07CisgICAgdGhpcy5kdXBsaWNh
dGVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBmaXJz
dFJvdyA9IHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50KGZpcnN0Um93KTsKKyAgICAgICAgdmFyIGxh
c3RSb3cgPSB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudChsYXN0Um93KTsKKworICAgICAgICB2YXIg
bGluZXMgPSB0aGlzLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhpcy5k
b2MuaW5zZXJ0TGluZXMoZmlyc3RSb3csIGxpbmVzKTsKKworICAgICAgICB2YXIgYWRkZWRSb3dz
ID0gbGFzdFJvdyAtIGZpcnN0Um93ICsgMTsKKyAgICAgICAgcmV0dXJuIGFkZGVkUm93czsKKyAg
ICB9OworCisKKyAgICB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdykgewor
ICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93LCB0aGlzLmRvYy5nZXRMZW5n
dGgoKS0xKSk7CisgICAgfTsKKworICAgIHRoaXMuJGNsaXBDb2x1bW5Ub1JvdyA9IGZ1bmN0aW9u
KHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmIChjb2x1bW4gPCAwKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVu
Z3RoLCBjb2x1bW4pOworICAgIH07CisKKworICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1l
bnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgw
LCBjb2x1bW4pOworCisgICAgICAgIGlmIChyb3cgPCAwKSB7CisgICAgICAgICAgICByb3cgPSAw
OworICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChyb3cgPj0g
bGVuKSB7CisgICAgICAgICAgICAgICAgcm93ID0gbGVuIC0gMTsKKyAgICAgICAgICAgICAgICBj
b2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKGxlbi0xKS5sZW5ndGg7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUo
cm93KS5sZW5ndGgsIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICBjb2x1bW46IGNv
bHVtbgorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50
ID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8IDApIHsK
KyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IDA7CisgICAgICAgICAgICByYW5nZS5zdGFy
dC5jb2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQu
Y29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KAorICAgICAgICAgICAgICAgIHJhbmdlLnN0
YXJ0LnJvdywKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4KKyAgICAgICAgICAg
ICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbGVuID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkg
LSAxOworICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA+IGxlbikgeworICAgICAgICAgICAgcmFu
Z2UuZW5kLnJvdyA9IGxlbjsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLmRv
Yy5nZXRMaW5lKGxlbikubGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFu
Z2UuZW5kLmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAgICBy
YW5nZS5lbmQucm93LAorICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4KKyAgICAgICAg
ICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIH07CisgICAgdGhp
cy4kd3JhcExpbWl0ID0gODA7CisgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSBmYWxzZTsKKyAgICB0
aGlzLiR3cmFwTGltaXRSYW5nZSA9IHsKKyAgICAgICAgbWluIDogbnVsbCwKKyAgICAgICAgbWF4
IDogbnVsbAorICAgIH07CisgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKHVzZVdy
YXBNb2RlKSB7CisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAhPSB0aGlzLiR1c2VXcmFwTW9kZSkg
eworICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSB1c2VXcmFwTW9kZTsKKyAgICAgICAg
ICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuJHJlc2V0Um93Q2Fj
aGUoMCk7CisgICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLiR3cmFwRGF0
YSA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEucHVzaChbXSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIGxlbiAtIDEp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTW9k
ZSIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFVzZVdyYXBNb2RlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VXcmFwTW9kZTsKKyAgICB9OworICAgIHRo
aXMuc2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbihtaW4sIG1heCkgeworICAgICAgICBpZiAo
dGhpcy4kd3JhcExpbWl0UmFuZ2UubWluICE9PSBtaW4gfHwgdGhpcy4kd3JhcExpbWl0UmFuZ2Uu
bWF4ICE9PSBtYXgpIHsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiA9IG1p
bjsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCA9IG1heDsKKyAgICAgICAg
ICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5n
ZVdyYXBNb2RlIik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuYWRqdXN0V3JhcExpbWl0
ID0gZnVuY3Rpb24oZGVzaXJlZExpbWl0KSB7CisgICAgICAgIHZhciB3cmFwTGltaXQgPSB0aGlz
LiRjb25zdHJhaW5XcmFwTGltaXQoZGVzaXJlZExpbWl0KTsKKyAgICAgICAgaWYgKHdyYXBMaW1p
dCAhPSB0aGlzLiR3cmFwTGltaXQgJiYgd3JhcExpbWl0ID4gMCkgeworICAgICAgICAgICAgdGhp
cy4kd3JhcExpbWl0ID0gd3JhcExpbWl0OworICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0
cnVlOworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoMCwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpOworICAgICAg
ICAgICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlV3JhcExpbWl0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAg
IHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdCA9IGZ1bmN0aW9uKHdyYXBMaW1pdCkgeworICAgICAg
ICB2YXIgbWluID0gdGhpcy4kd3JhcExpbWl0UmFuZ2UubWluOworICAgICAgICBpZiAobWluKQor
ICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpOworCisgICAg
ICAgIHZhciBtYXggPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXg7CisgICAgICAgIGlmIChtYXgp
CisgICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1pbihtYXgsIHdyYXBMaW1pdCk7CisgICAg
ICAgIHJldHVybiBNYXRoLm1heCgxLCB3cmFwTGltaXQpOworICAgIH07CisgICAgdGhpcy5nZXRX
cmFwTGltaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXBMaW1pdDsK
KyAgICB9OworICAgIHRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIG1pbiA6IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiwK
KyAgICAgICAgICAgIG1heCA6IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heAorICAgICAgICB9Owor
ICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZSA9IGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgdmFyIHVzZVdyYXBNb2RlID0gdGhpcy4kdXNlV3JhcE1vZGU7CisgICAg
ICAgIHZhciBsZW47CisgICAgICAgIHZhciBhY3Rpb24gPSBlLmRhdGEuYWN0aW9uOworICAgICAg
ICB2YXIgZmlyc3RSb3cgPSBlLmRhdGEucmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGFz
dFJvdyA9IGUuZGF0YS5yYW5nZS5lbmQucm93OworICAgICAgICB2YXIgc3RhcnQgPSBlLmRhdGEu
cmFuZ2Uuc3RhcnQ7CisgICAgICAgIHZhciBlbmQgPSBlLmRhdGEucmFuZ2UuZW5kOworICAgICAg
ICB2YXIgcmVtb3ZlZEZvbGRzID0gbnVsbDsKKworICAgICAgICBpZiAoYWN0aW9uLmluZGV4T2Yo
IkxpbmVzIikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImluc2VydExpbmVz
IikgeworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdyArIChlLmRhdGEubGluZXMu
bGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdFJvdyA9
IGZpcnN0Um93OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gZS5kYXRhLmxpbmVz
ID8gZS5kYXRhLmxpbmVzLmxlbmd0aCA6IGxhc3RSb3cgLSBmaXJzdFJvdzsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGxlbiA9IGxhc3RSb3cgLSBmaXJzdFJvdzsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsZW4gIT0gMCkgeworICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9m
KCJyZW1vdmUiKSAhPSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXNbdXNlV3JhcE1vZGUgPyAi
JHdyYXBEYXRhIiA6ICIkcm93TGVuZ3RoQ2FjaGUiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7CisK
KyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAg
ICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZS5kYXRhLnJhbmdl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xkcyk7CisKKyAg
ICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGVuZC5yb3cpOwor
ICAgICAgICAgICAgICAgIHZhciBpZHggPSAwOworICAgICAgICAgICAgICAgIGlmIChmb2xkTGlu
ZSkgeworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhlbmQucm93
LCBlbmQuY29sdW1uLCBzdGFydC5jb2x1bW4gLSBlbmQuY29sdW1uKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuc2hpZnRSb3coLWxlbik7CisKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lQmVmb3JlID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmb2xkTGluZUJlZm9yZSAmJiBmb2xkTGluZUJlZm9yZSAhPT0gZm9sZExp
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lQmVmb3JlLm1lcmdlKGZvbGRM
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmVCZWZvcmU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gZm9sZExp
bmVzLmluZGV4T2YoZm9sZExpbmUpICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGlkeDsgaWR4IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZExpbmVzW2lkeF07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPj0gZW5kLnJvdykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3coLWxlbik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsYXN0Um93ID0gZmly
c3RSb3c7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBhcmdzOwor
ICAgICAgICAgICAgICAgIGlmICh1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgICAgICAgICBh
cmdzID0gW2ZpcnN0Um93LCAwXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKFtdKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4k
d3JhcERhdGEuc3BsaWNlLmFwcGx5KHRoaXMuJHdyYXBEYXRhLCBhcmdzKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXJncy51bnNoaWZ0KGZpcnN0Um93LCAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUuc3BsaWNlLmFwcGx5KHRoaXMuJHJvd0xlbmd0
aENhY2hlLCBhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGZv
bGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9
IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAgICAgICAgIHZhciBpZHggPSAw
OworICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgY21wID0gZm9sZExpbmUucmFuZ2UuY29tcGFyZUluc2lkZShzdGFydC5yb3csIHN0YXJ0LmNv
bHVtbikKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb2xkTGluZSA9IGZvbGRMaW5lLnNwbGl0KHN0YXJ0LnJvdywgc3RhcnQuY29s
dW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0Um93LCAwLCBlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1u
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIChj
bXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNo
YXJzKGZpcnN0Um93LCAwLCBlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gZm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUp
ICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGlkeDsgaWR4
IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZv
bGRMaW5lID0gZm9sZExpbmVzW2lkeF07CisgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkTGlu
ZS5zdGFydC5yb3cgPj0gZmlyc3RSb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRM
aW5lLnNoaWZ0Um93KGxlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW4gPSBN
YXRoLmFicyhlLmRhdGEucmFuZ2Uuc3RhcnQuY29sdW1uIC0gZS5kYXRhLnJhbmdlLmVuZC5jb2x1
bW4pOworICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJyZW1vdmUiKSAhPSAtMSkgewor
ICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0
YS5yYW5nZSk7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMp
OworCisgICAgICAgICAgICAgICAgbGVuID0gLWxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAg
ICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hh
cnMoZmlyc3RSb3csIHN0YXJ0LmNvbHVtbiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAmJiB0aGlzLiR3cmFwRGF0YS5sZW5ndGggIT0g
dGhpcy5kb2MuZ2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImRvYy5n
ZXRMZW5ndGgoKSBhbmQgJHdyYXBEYXRhLmxlbmd0aCBoYXZlIHRvIGJlIHRoZSBzYW1lISIpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgdGhpcy4k
dXBkYXRlV3JhcERhdGEoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShmaXJzdFJvdywgbGFzdFJvdyk7CisKKyAg
ICAgICAgcmV0dXJuIHJlbW92ZWRGb2xkczsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlUm93
TGVuZ3RoQ2FjaGUgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgYikgeworICAgICAgICB0
aGlzLiRyb3dMZW5ndGhDYWNoZVtmaXJzdFJvd10gPSBudWxsOworICAgICAgICB0aGlzLiRyb3dM
ZW5ndGhDYWNoZVtsYXN0Um93XSA9IG51bGw7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0ZVdy
YXBEYXRhID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGxpbmVz
ID0gdGhpcy5kb2MuZ2V0QWxsTGluZXMoKTsKKyAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLmdl
dFRhYlNpemUoKTsKKyAgICAgICAgdmFyIHdyYXBEYXRhID0gdGhpcy4kd3JhcERhdGE7CisgICAg
ICAgIHZhciB3cmFwTGltaXQgPSB0aGlzLiR3cmFwTGltaXQ7CisgICAgICAgIHZhciB0b2tlbnM7
CisgICAgICAgIHZhciBmb2xkTGluZTsKKworICAgICAgICB2YXIgcm93ID0gZmlyc3RSb3c7Cisg
ICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihsYXN0Um93LCBsaW5lcy5sZW5ndGggLSAxKTsKKyAg
ICAgICAgd2hpbGUgKHJvdyA8PSBsYXN0Um93KSB7CisgICAgICAgICAgICBmb2xkTGluZSA9IHRo
aXMuZ2V0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICBpZiAoIWZvbGRMaW5l
KSB7CisgICAgICAgICAgICAgICAgdG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucyhsYW5n
LnN0cmluZ1RyaW1SaWdodChsaW5lc1tyb3ddKSk7CisgICAgICAgICAgICAgICAgd3JhcERhdGFb
cm93XSA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXpl
KTsKKyAgICAgICAgICAgICAgICByb3cgKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHRva2VucyA9IFtdOworICAgICAgICAgICAgICAgIGZvbGRMaW5lLndhbGsoZnVu
Y3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgd2Fsa1Rva2VuczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fs
a1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLCB0b2tlbnMubGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zWzBdID0gUExBQ0VIT0xERVJfU1RBUlQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YWxrVG9r
ZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtU
b2tlbnNbaV0gPSBQTEFDRUhPTERFUl9CT0RZOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW3Jvd10uc3Vic3RyaW5nKGxhc3RDb2x1bW4sIGNv
bHVtbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5sZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5z
ID0gdG9rZW5zLmNvbmNhdCh3YWxrVG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfS5iaW5k
KHRoaXMpLAorICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5lbmQucm93LAorICAgICAgICAg
ICAgICAgICAgICBsaW5lc1tmb2xkTGluZS5lbmQucm93XS5sZW5ndGggKyAxCisgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCAhPSAwICYmIHRv
a2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPj0gU1BBQ0UpCisgICAgICAgICAgICAgICAgICAgIHRv
a2Vucy5wb3AoKTsKKworICAgICAgICAgICAgICAgIHdyYXBEYXRhW2ZvbGRMaW5lLnN0YXJ0LnJv
d10KKyAgICAgICAgICAgICAgICAgICAgPSB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyh0b2tlbnMs
IHdyYXBMaW1pdCwgdGFiU2l6ZSk7CisgICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5k
LnJvdyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHZhciBDSEFS
ID0gMSwKKyAgICAgICAgQ0hBUl9FWFQgPSAyLAorICAgICAgICBQTEFDRUhPTERFUl9TVEFSVCA9
IDMsCisgICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCwKKyAgICAgICAgUFVOQ1RVQVRJT04g
PSA5LAorICAgICAgICBTUEFDRSA9IDEwLAorICAgICAgICBUQUIgPSAxMSwKKyAgICAgICAgVEFC
X1NQQUNFID0gMTI7CisKKworICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVuY3Rpb24o
dG9rZW5zLCB3cmFwTGltaXQpIHsKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMCkgewor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNwbGl0cyA9
IFtdOworICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7CisgICAgICAg
IHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwOworCisgICAgICAgIGZ1bmN0aW9u
IGFkZFNwbGl0KHNjcmVlblBvcykgeworICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9IHRva2Vu
cy5zbGljZShsYXN0U3BsaXQsIHNjcmVlblBvcyk7CisgICAgICAgICAgICB2YXIgbGVuID0gZGlz
cGxheWVkLmxlbmd0aDsKKyAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKCIiKS4KKyAgICAgICAg
ICAgICAgICByZXBsYWNlKC8xMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
bGVuIC09IDE7CisgICAgICAgICAgICAgICAgfSkuCisgICAgICAgICAgICAgICAgcmVwbGFjZSgv
Mi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDE7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGxhc3REb2NTcGxpdCArPSBsZW47CisgICAgICAg
ICAgICBzcGxpdHMucHVzaChsYXN0RG9jU3BsaXQpOworICAgICAgICAgICAgbGFzdFNwbGl0ID0g
c2NyZWVuUG9zOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5ndGggLSBs
YXN0U3BsaXQgPiB3cmFwTGltaXQpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RTcGxp
dCArIHdyYXBMaW1pdDsKKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7
CisgICAgICAgICAgICAgICAgd2hpbGUgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3BsaXQgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NUQVJU
CisgICAgICAgICAgICAgICAgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9CT0RZKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0ICE9IGxhc3RT
cGxpdCAtIDE7IHNwbGl0LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxp
dF0gPT0gUExBQ0VIT0xERVJfU1RBUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChzcGxpdCA+IGxhc3RTcGxpdCkgeworICAgICAgICAgICAgICAgICAgICBhZGRTcGxp
dChzcGxpdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNwbGl0OyBzcGxpdCA8IHRva2Vucy5sZW5ndGg7IHNwbGl0KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gIT0gUExBQ0VIT0xERVJfQk9E
WSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHNwbGl0ID09IHRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAvLyBCcmVha3MgdGhlIHdoaWxlLWxvb3AuCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBtaW5TcGxpdCA9IE1hdGgubWF4KHNwbGl0IC0g
MTAsIGxhc3RTcGxpdCAtIDEpOworICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQg
JiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7CisgICAgICAgICAgICAgICAg
c3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5T
cGxpdCAmJiB0b2tlbnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7CisgICAgICAgICAgICAgICAg
c3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BsaXQgPiBtaW5TcGxp
dCkgeworICAgICAgICAgICAgICAgIGFkZFNwbGl0KCsrc3BsaXQpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3BsaXQgPSBsYXN0U3BsaXQg
KyB3cmFwTGltaXQ7CisgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNwbGl0czsKKyAgICB9OworICAgIHRoaXMuJGdldERpc3BsYXlUb2tlbnMg
PSBmdW5jdGlvbihzdHIsIG9mZnNldCkgeworICAgICAgICB2YXIgYXJyID0gW107CisgICAgICAg
IHZhciB0YWJTaXplOworICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKKworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGMg
PSBzdHIuY2hhckNvZGVBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09IDkpIHsKKyAgICAgICAg
ICAgICAgICB0YWJTaXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGggKyBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgbiA9IDE7IG4gPCB0YWJTaXplOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXJy
LnB1c2goVEFCX1NQQUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChjID09IDMyKSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goU1BB
Q0UpOworICAgICAgICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAoYyA+IDU3
ICYmIGMgPCA2NCkpIHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxX
aWR0aChjKSkgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhUKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjsKKyAgICB9OworICAgIHRo
aXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1bW4s
IHNjcmVlbkNvbHVtbikgeworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDApCisgICAg
ICAgICAgICByZXR1cm4gWzAsIDBdOworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IG51
bGwpCisgICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTsKKyAgICAgICAgc2Ny
ZWVuQ29sdW1uID0gc2NyZWVuQ29sdW1uIHx8IDA7CisKKyAgICAgICAgdmFyIGMsIGNvbHVtbjsK
KyAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykg
eworICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7CisgICAgICAgICAgICBp
ZiAoYyA9PSA5KSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2Ny
ZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAgICAgICAgICAgICAgICBz
Y3JlZW5Db2x1bW4gKz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2NyZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NyZWVu
Q29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29s
dW1uXTsKKyAgICB9OworICAgIHRoaXMuZ2V0Um93TGVuZ3RoID0gZnVuY3Rpb24ocm93KSB7Cisg
ICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUgfHwgIXRoaXMuJHdyYXBEYXRhW3Jvd10pIHsK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7Cisg
ICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3cs
IE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVu
Q29sdW1uKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVu
dExhc3RSb3dDb2x1bW4gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAgICAgICB2
YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1u
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5Sb3cp
OworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbiA9IGZ1
bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlz
LmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1bW4pOworICAgICAgICByZXR1cm4g
dGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZBTFVF
IC8gMTApOworICAgIH07CisgICAgdGhpcy5nZXRSb3dTcGxpdERhdGEgPSBmdW5jdGlvbihyb3cp
IHsKKyAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgcmV0dXJu
IHVuZGVmaW5lZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiR3
cmFwRGF0YVtyb3ddOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVlblRhYlNp
emUgPSBmdW5jdGlvbihzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRhYlNp
emUgLSBzY3JlZW5Db2x1bW4gJSB0aGlzLiR0YWJTaXplOworICAgIH07CisKKworICAgIHRoaXMu
c2NyZWVuVG9Eb2N1bWVudFJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3cs
IHNjcmVlbkNvbHVtbikucm93OworICAgIH07CisKKworICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVu
dENvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVt
bikuY29sdW1uOworICAgIH07CisgICAgdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24gPSBm
dW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICBpZiAoc2NyZWVuUm93
IDwgMCkKKyAgICAgICAgICAgIHJldHVybiB7cm93OiAwLCBjb2x1bW46IDB9OworCisgICAgICAg
IHZhciBsaW5lOworICAgICAgICB2YXIgZG9jUm93ID0gMDsKKyAgICAgICAgdmFyIGRvY0NvbHVt
biA9IDA7CisgICAgICAgIHZhciBjb2x1bW47CisgICAgICAgIHZhciByb3cgPSAwOworICAgICAg
ICB2YXIgcm93TGVuZ3RoID0gMDsKKworICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRzY3Jl
ZW5Sb3dDYWNoZTsKKyAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHJvd0Nh
Y2hlLCBzY3JlZW5Sb3cpOworICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKKyAgICAg
ICAgaWYgKGwgJiYgaSA+PSAwKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVbaV07
CisgICAgICAgICAgICB2YXIgZG9jUm93ID0gdGhpcy4kZG9jUm93Q2FjaGVbaV07CisgICAgICAg
ICAgICB2YXIgZG9DYWNoZSA9IHNjcmVlblJvdyA+IHJvd0NhY2hlW2wgLSAxXTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkb0NhY2hlID0gIWw7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgbWF4Um93ID0gdGhpcy5nZXRMZW5ndGgoKSAtIDE7CisgICAgICAgIHZhciBmb2xk
TGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1Jvdyk7CisgICAgICAgIHZhciBmb2xkU3Rh
cnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAg
IHdoaWxlIChyb3cgPD0gc2NyZWVuUm93KSB7CisgICAgICAgICAgICByb3dMZW5ndGggPSB0aGlz
LmdldFJvd0xlbmd0aChkb2NSb3cpOworICAgICAgICAgICAgaWYgKHJvdyArIHJvd0xlbmd0aCAt
IDEgPj0gc2NyZWVuUm93IHx8IGRvY1JvdyA+PSBtYXhSb3cpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcm93ICs9IHJvd0xl
bmd0aDsKKyAgICAgICAgICAgICAgICBkb2NSb3crKzsKKyAgICAgICAgICAgICAgICBpZiAoZG9j
Um93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGRvY1JvdyA9IGZvbGRMaW5l
LmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldE5leHRG
b2xkTGluZShkb2NSb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFN0YXJ0
ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb0Nh
Y2hlKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUucHVzaChkb2NSb3cpOwor
ICAgICAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2gocm93KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkTGluZSAmJiBmb2xkTGluZS5zdGFy
dC5yb3cgPD0gZG9jUm93KSB7CisgICAgICAgICAgICBsaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxh
eUxpbmUoZm9sZExpbmUpOworICAgICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuc3RhcnQucm93
OworICAgICAgICB9IGVsc2UgaWYgKHJvdyArIHJvd0xlbmd0aCA8PSBzY3JlZW5Sb3cgfHwgZG9j
Um93ID4gbWF4Um93KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHJv
dzogbWF4Um93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRMaW5lKG1heFJvdyku
bGVuZ3RoCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5l
ID0gdGhpcy5nZXRMaW5lKGRvY1Jvdyk7CisgICAgICAgICAgICBmb2xkTGluZSA9IG51bGw7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAg
IHZhciBzcGxpdHMgPSB0aGlzLiR3cmFwRGF0YVtkb2NSb3ddOworICAgICAgICAgICAgaWYgKHNw
bGl0cykgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNwbGl0c1tzY3JlZW5Sb3cgLSByb3dd
OworICAgICAgICAgICAgICAgIGlmKHNjcmVlblJvdyA+IHJvdyAmJiBzcGxpdHMubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvY0NvbHVtbiA9IHNwbGl0c1tzY3JlZW5Sb3cgLSByb3cg
LSAxXSB8fCBzcGxpdHNbc3BsaXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgICAgICBs
aW5lID0gbGluZS5zdWJzdHJpbmcoZG9jQ29sdW1uKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkb2NDb2x1bW4gKz0gdGhpcy4kZ2V0U3Ry
aW5nU2NyZWVuV2lkdGgobGluZSwgc2NyZWVuQ29sdW1uKVsxXTsKKyAgICAgICAgaWYgKHRoaXMu
JHVzZVdyYXBNb2RlICYmIGRvY0NvbHVtbiA+PSBjb2x1bW4pCisgICAgICAgICAgICBkb2NDb2x1
bW4gPSBjb2x1bW4gLSAxOworCisgICAgICAgIGlmIChmb2xkTGluZSkKKyAgICAgICAgICAgIHJl
dHVybiBmb2xkTGluZS5pZHhUb1Bvc2l0aW9uKGRvY0NvbHVtbik7CisKKyAgICAgICAgcmV0dXJu
IHtyb3c6IGRvY1JvdywgY29sdW1uOiBkb2NDb2x1bW59OworICAgIH07CisgICAgdGhpcy5kb2N1
bWVudFRvU2NyZWVuUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAg
ICAgICBpZiAodHlwZW9mIGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICB2
YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cu
Y29sdW1uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0
aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7CisKKyAgICAgICAgZG9jUm93ID0gcG9z
LnJvdzsKKyAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjsKKworICAgICAgICB2YXIgc2Ny
ZWVuUm93ID0gMDsKKyAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7CisgICAgICAgIHZh
ciBmb2xkID0gbnVsbDsKKyAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1JvdywgZG9j
Q29sdW1uLCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGRvY1JvdyA9IGZv
bGQuc3RhcnQucm93OworICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47
CisgICAgICAgIH0KKworICAgICAgICB2YXIgcm93RW5kLCByb3cgPSAwOworCisKKyAgICAgICAg
dmFyIHJvd0NhY2hlID0gdGhpcy4kZG9jUm93Q2FjaGU7CisgICAgICAgIHZhciBpID0gdGhpcy4k
Z2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgZG9jUm93KTsKKyAgICAgICAgdmFyIGwgPSByb3dD
YWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkgeworICAgICAgICAgICAgdmFy
IHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuJHNj
cmVlblJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cgPiByb3dD
YWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9DYWNoZSA9
ICFsOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9s
ZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5z
dGFydC5yb3cgOkluZmluaXR5OworCisgICAgICAgIHdoaWxlIChyb3cgPCBkb2NSb3cpIHsKKyAg
ICAgICAgICAgIGlmIChyb3cgPj0gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93RW5k
ID0gZm9sZExpbmUuZW5kLnJvdyArIDE7CisgICAgICAgICAgICAgICAgaWYgKHJvd0VuZCA+IGRv
Y1JvdykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9sZExp
bmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShyb3dFbmQsIGZvbGRMaW5lKTsKKyAgICAgICAgICAg
ICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJvd0Vu
ZCA9IHJvdyArIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjcmVlblJvdyArPSB0
aGlzLmdldFJvd0xlbmd0aChyb3cpOworICAgICAgICAgICAgcm93ID0gcm93RW5kOworCisgICAg
ICAgICAgICBpZiAoZG9DYWNoZSkgeworICAgICAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hl
LnB1c2gocm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHNj
cmVlblJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRleHRMaW5l
ID0gIiI7CisgICAgICAgIGlmIChmb2xkTGluZSAmJiByb3cgPj0gZm9sZFN0YXJ0KSB7CisgICAg
ICAgICAgICB0ZXh0TGluZSA9IHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGZvbGRMaW5lLCBkb2NS
b3csIGRvY0NvbHVtbik7CisgICAgICAgICAgICBmb2xkU3RhcnRSb3cgPSBmb2xkTGluZS5zdGFy
dC5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRoaXMuZ2V0
TGluZShkb2NSb3cpLnN1YnN0cmluZygwLCBkb2NDb2x1bW4pOworICAgICAgICAgICAgZm9sZFN0
YXJ0Um93ID0gZG9jUm93OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9k
ZSkgeworICAgICAgICAgICAgdmFyIHdyYXBSb3cgPSB0aGlzLiR3cmFwRGF0YVtmb2xkU3RhcnRS
b3ddOworICAgICAgICAgICAgdmFyIHNjcmVlblJvd09mZnNldCA9IDA7CisgICAgICAgICAgICB3
aGlsZSAodGV4dExpbmUubGVuZ3RoID49IHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0XSkgeworICAg
ICAgICAgICAgICAgIHNjcmVlblJvdyArKzsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dPZmZz
ZXQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRMaW5lID0gdGV4dExpbmUuc3Vi
c3RyaW5nKAorICAgICAgICAgICAgICAgIHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0IC0gMV0gfHwg
MCwgdGV4dExpbmUubGVuZ3RoCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHJvdzogc2NyZWVuUm93LAorICAgICAgICAgICAgY29sdW1u
OiB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0ZXh0TGluZSlbMF0KKyAgICAgICAgfTsKKyAg
ICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbiA9IGZ1bmN0aW9uKHJvdywgZG9j
Q29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihy
b3csIGRvY0NvbHVtbikuY29sdW1uOworICAgIH07CisgICAgdGhpcy5kb2N1bWVudFRvU2NyZWVu
Um93ID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGRvY1JvdywgZG9jQ29sdW1uKS5yb3c7CisgICAgfTsK
KyAgICB0aGlzLmdldFNjcmVlbkxlbmd0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Ny
ZWVuUm93cyA9IDA7CisgICAgICAgIHZhciBmb2xkID0gbnVsbDsKKyAgICAgICAgaWYgKCF0aGlz
LiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgc2NyZWVuUm93cyA9IHRoaXMuZ2V0TGVuZ3Ro
KCk7CisgICAgICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBmb2xkID0gZm9sZERhdGFbaV07CisgICAgICAgICAgICAgICAgc2NyZWVuUm93cyAt
PSBmb2xkLmVuZC5yb3cgLSBmb2xkLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kd3JhcERhdGEubGVuZ3Ro
OworICAgICAgICAgICAgdmFyIHJvdyA9IDAsIGkgPSAwOworICAgICAgICAgICAgdmFyIGZvbGQg
PSB0aGlzLiRmb2xkRGF0YVtpKytdOworICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGQg
PyBmb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisKKyAgICAgICAgICAgIHdoaWxlIChyb3cgPCBs
YXN0Um93KSB7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93cyArPSB0aGlzLiR3cmFwRGF0YVty
b3ddLmxlbmd0aCArIDE7CisgICAgICAgICAgICAgICAgcm93ICsrOworICAgICAgICAgICAgICAg
IGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gZm9sZC5l
bmQucm93KzE7CisgICAgICAgICAgICAgICAgICAgIGZvbGQgPSB0aGlzLiRmb2xkRGF0YVtpKytd
OworICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkID9mb2xkLnN0YXJ0LnJvdyA6
SW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHNjcmVlblJvd3M7CisgICAgfTsKKyAgICBmdW5jdGlvbiBpc0Z1bGxX
aWR0aChjKSB7CisgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gYyA+PSAweDExMDAgJiYgYyA8PSAweDExNUYgfHwKKyAgICAg
ICAgICAgICAgIGMgPj0gMHgxMUEzICYmIGMgPD0gMHgxMUE3IHx8CisgICAgICAgICAgICAgICBj
ID49IDB4MTFGQSAmJiBjIDw9IDB4MTFGRiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDIzMjkg
JiYgYyA8PSAweDIzMkEgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyRTgwICYmIGMgPD0gMHgy
RTk5IHx8CisgICAgICAgICAgICAgICBjID49IDB4MkU5QiAmJiBjIDw9IDB4MkVGMyB8fAorICAg
ICAgICAgICAgICAgYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGRDUgfHwKKyAgICAgICAgICAgICAg
IGMgPj0gMHgyRkYwICYmIGMgPD0gMHgyRkZCIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzAw
MCAmJiBjIDw9IDB4MzAzRSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMwNDEgJiYgYyA8PSAw
eDMwOTYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMDk5ICYmIGMgPD0gMHgzMEZGIHx8Cisg
ICAgICAgICAgICAgICBjID49IDB4MzEwNSAmJiBjIDw9IDB4MzEyRCB8fAorICAgICAgICAgICAg
ICAgYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxOEUgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgz
MTkwICYmIGMgPD0gMHgzMUJBIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzFDMCAmJiBjIDw9
IDB4MzFFMyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMxRjAgJiYgYyA8PSAweDMyMUUgfHwK
KyAgICAgICAgICAgICAgIGMgPj0gMHgzMjIwICYmIGMgPD0gMHgzMjQ3IHx8CisgICAgICAgICAg
ICAgICBjID49IDB4MzI1MCAmJiBjIDw9IDB4MzJGRSB8fAorICAgICAgICAgICAgICAgYyA+PSAw
eDMzMDAgJiYgYyA8PSAweDREQkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHg0RTAwICYmIGMg
PD0gMHhBNDhDIHx8CisgICAgICAgICAgICAgICBjID49IDB4QTQ5MCAmJiBjIDw9IDB4QTRDNiB8
fAorICAgICAgICAgICAgICAgYyA+PSAweEE5NjAgJiYgYyA8PSAweEE5N0MgfHwKKyAgICAgICAg
ICAgICAgIGMgPj0gMHhBQzAwICYmIGMgPD0gMHhEN0EzIHx8CisgICAgICAgICAgICAgICBjID49
IDB4RDdCMCAmJiBjIDw9IDB4RDdDNiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEQ3Q0IgJiYg
YyA8PSAweEQ3RkIgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGOTAwICYmIGMgPD0gMHhGQUZG
IHx8CisgICAgICAgICAgICAgICBjID49IDB4RkUxMCAmJiBjIDw9IDB4RkUxOSB8fAorICAgICAg
ICAgICAgICAgYyA+PSAweEZFMzAgJiYgYyA8PSAweEZFNTIgfHwKKyAgICAgICAgICAgICAgIGMg
Pj0gMHhGRTU0ICYmIGMgPD0gMHhGRTY2IHx8CisgICAgICAgICAgICAgICBjID49IDB4RkU2OCAm
JiBjIDw9IDB4RkU2QiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZGMDEgJiYgYyA8PSAweEZG
NjAgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRkUwICYmIGMgPD0gMHhGRkU2OworICAgIH07
CisKK30pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKKworcmVxdWlyZSgiLi9lZGl0X3Nl
c3Npb24vZm9sZGluZyIpLkZvbGRpbmcuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworcmVx
dWlyZSgiLi9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIpLkJyYWNrZXRNYXRjaC5jYWxsKEVk
aXRTZXNzaW9uLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuRWRpdFNlc3Npb24gPSBFZGl0U2Vzc2lv
bjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvY29uZmlnJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9uZXQn
LCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworIm5vIHVzZSBzdHJpY3QiOworCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xh
bmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBuZXQgPSByZXF1aXJl
KCIuL2xpYi9uZXQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9l
bWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB0aGlzOworfSkoKTsKKwordmFyIG9wdGlvbnMgPSB7CisgICAgcGFja2FnZWQ6IGZh
bHNlLAorICAgIHdvcmtlclBhdGg6IG51bGwsCisgICAgbW9kZVBhdGg6IG51bGwsCisgICAgdGhl
bWVQYXRoOiBudWxsLAorICAgIGJhc2VQYXRoOiAiIiwKKyAgICBzdWZmaXg6ICIuanMiLAorICAg
ICRtb2R1bGVVcmxzOiB7fQorfTsKKworZXhwb3J0cy5nZXQgPSBmdW5jdGlvbihrZXkpIHsKKyAg
ICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkpOworCisgICAgcmV0dXJuIG9wdGlvbnNb
a2V5XTsKK307CisKK2V4cG9ydHMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgIGlm
ICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlVua25vd24gY29uZmlnIGtleTogIiArIGtleSk7CisKKyAgICBvcHRpb25zW2tleV0gPSB2YWx1
ZTsKK307CisKK2V4cG9ydHMuYWxsID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGxhbmcuY29w
eU9iamVjdChvcHRpb25zKTsKK307Citvb3AuaW1wbGVtZW50KGV4cG9ydHMsIEV2ZW50RW1pdHRl
cik7CisKK2V4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7Cisg
ICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0pCisgICAgICAgIHJldHVybiBvcHRpb25z
LiRtb2R1bGVVcmxzW25hbWVdOworCisgICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgiLyIpOwor
ICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudCB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSB8fCAi
IjsKKyAgICB2YXIgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnJlcGxhY2UoY29tcG9u
ZW50LCAiIikucmVwbGFjZSgvKF5bXC1fXSl8KFtcLV9dJCkvLCAiIik7CisKKyAgICBpZiAoIWJh
c2UgJiYgcGFydHMubGVuZ3RoID4gMSkKKyAgICAgICAgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0
aCAtIDJdOworICAgIHZhciBwYXRoID0gb3B0aW9uc1tjb21wb25lbnQgKyAiUGF0aCJdOworICAg
IGlmIChwYXRoID09IG51bGwpCisgICAgICAgIHBhdGggPSBvcHRpb25zLmJhc2VQYXRoOworICAg
IGlmIChwYXRoICYmIHBhdGguc2xpY2UoLTEpICE9ICIvIikKKyAgICAgICAgcGF0aCArPSAiLyI7
CisgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQgKyAiLSIgKyBiYXNlICsgdGhpcy5nZXQoInN1
ZmZpeCIpOworfTsKKworZXhwb3J0cy5zZXRNb2R1bGVVcmwgPSBmdW5jdGlvbihuYW1lLCBzdWJz
dCkgeworICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdID0gc3Vic3Q7Cit9Owor
CitleHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5jdGlvbihtb2R1bGVOYW1lLCBvbkxvYWQpIHsKKyAg
ICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOworICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZU5h
bWUpKSB7CisgICAgICAgIG1vZHVsZVR5cGUgPSBtb2R1bGVOYW1lWzBdOworICAgICAgICBtb2R1
bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgbW9kdWxl
ID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKKyAgICB9IGNhdGNoIChlKSB7fTsKKyAgICBpZiAobW9k
dWxlKQorICAgICAgICByZXR1cm4gb25Mb2FkKG1vZHVsZSk7CisKKyAgICB2YXIgYWZ0ZXJMb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlcXVpcmUoW21vZHVsZU5hbWVdLCBmdW5jdGlvbiht
b2R1bGUpIHsKKyAgICAgICAgICAgIGV4cG9ydHMuX2VtaXQoImxvYWQubW9kdWxlIiwge25hbWU6
IG1vZHVsZU5hbWUsIG1vZHVsZTogbW9kdWxlfSk7CisgICAgICAgICAgICBvbkxvYWQobW9kdWxl
KTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGlmICghZXhwb3J0cy5nZXQoInBhY2thZ2Vk
IikpCisgICAgICAgIHJldHVybiBhZnRlckxvYWQoKTsKKyAgICBuZXQubG9hZFNjcmlwdChleHBv
cnRzLm1vZHVsZVVybChtb2R1bGVOYW1lLCBtb2R1bGVUeXBlKSwgYWZ0ZXJMb2FkKTsKK307Citl
eHBvcnRzLmluaXQgPSBmdW5jdGlvbigpIHsKKyAgICBvcHRpb25zLnBhY2thZ2VkID0gcmVxdWly
ZS5wYWNrYWdlZCB8fCBtb2R1bGUucGFja2FnZWQgfHwgKGdsb2JhbC5kZWZpbmUgJiYgZGVmaW5l
LnBhY2thZ2VkKTsKKworICAgIGlmICghZ2xvYmFsLmRvY3VtZW50KQorICAgICAgICByZXR1cm4g
IiI7CisKKyAgICB2YXIgc2NyaXB0T3B0aW9ucyA9IHt9OworICAgIHZhciBzY3JpcHRVcmwgPSAi
IjsKKworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNj
cmlwdCIpOworICAgIGZvciAodmFyIGk9MDsgaTxzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworCisgICAgICAgIHZhciBzcmMgPSBzY3JpcHQu
c3JjIHx8IHNjcmlwdC5nZXRBdHRyaWJ1dGUoInNyYyIpOworICAgICAgICBpZiAoIXNyYykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gc2NyaXB0LmF0
dHJpYnV0ZXM7CisgICAgICAgIGZvciAodmFyIGo9MCwgbD1hdHRyaWJ1dGVzLmxlbmd0aDsgaiA8
IGw7IGorKykgeworICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2pdOworICAgICAg
ICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKCJkYXRhLWFjZS0iKSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2UoL15k
YXRhLWFjZS0vLCAiIikpXSA9IGF0dHIudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2YXIgbSA9IHNyYy5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wk
KS8pOworICAgICAgICBpZiAobSkKKyAgICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07CisgICAg
fQorCisgICAgaWYgKHNjcmlwdFVybCkgeworICAgICAgICBzY3JpcHRPcHRpb25zLmJhc2UgPSBz
Y3JpcHRPcHRpb25zLmJhc2UgfHwgc2NyaXB0VXJsOworICAgICAgICBzY3JpcHRPcHRpb25zLnBh
Y2thZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzY3JpcHRPcHRpb25zLmJhc2VQYXRoID0gc2Ny
aXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCA9IHNjcmlwdE9w
dGlvbnMud29ya2VyUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CisgICAgc2NyaXB0T3B0aW9u
cy5tb2RlUGF0aCA9IHNjcmlwdE9wdGlvbnMubW9kZVBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNl
OworICAgIHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoID0gc2NyaXB0T3B0aW9ucy50aGVtZVBhdGgg
fHwgc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIGRlbGV0ZSBzY3JpcHRPcHRpb25zLmJhc2U7CisK
KyAgICBmb3IgKHZhciBrZXkgaW4gc2NyaXB0T3B0aW9ucykKKyAgICAgICAgaWYgKHR5cGVvZiBz
Y3JpcHRPcHRpb25zW2tleV0gIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgZXhwb3J0cy5z
ZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pOworfTsKKworZnVuY3Rpb24gZGVIeXBoZW5hdGUo
c3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8tKC4pL2csIGZ1bmN0aW9uKG0sIG0xKSB7
IHJldHVybiBtMS50b1VwcGVyQ2FzZSgpOyB9KTsKK30KKworfSk7CithY2UuZGVmaW5lKCdhY2Uv
bGliL25ldCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi91c2Vy
YWdlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIHVz
ZXJhZ2VudCA9IHJlcXVpcmUoIi4vdXNlcmFnZW50Iik7CisKK2V4cG9ydHMuZ2V0ID0gZnVuY3Rp
b24gKHVybCwgY2FsbGJhY2spIHsKKyAgICB2YXIgeGhyID0gZXhwb3J0cy5jcmVhdGVYaHIoKTsK
KyAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQp
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsKK307CisKK3ZhciBwcm9nSWRzID0gWydNc3htbDIu
WE1MSFRUUCcsICdNaWNyb3NvZnQuWE1MSFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXTsKKwor
ZXhwb3J0cy5jcmVhdGVYaHIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgeGhyLCBpLCBwcm9nSWQ7
CisgICAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNbaV07
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2Jq
ZWN0KHByb2dJZCk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorCisgICAgICAgICAgICBp
ZiAoeGhyKSB7CisgICAgICAgICAgICAgICAgcHJvZ0lkcyA9IFtwcm9nSWRdOyAgLy8gc28gZmFz
dGVyIG5leHQgdGltZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCF4aHIpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJjcmVhdGVYaHIoKTogWE1MSHR0cFJlcXVlc3Qgbm90IGF2YWlsYWJsZSIpOworICAgIH0KKwor
ICAgIHJldHVybiB4aHI7Cit9OworCitleHBvcnRzLmxvYWRTY3JpcHQgPSBmdW5jdGlvbihwYXRo
LCBjYWxsYmFjaykgeworICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2hlYWQnKVswXTsKKyAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Njcmlw
dCcpOworCisgICAgcy5zcmMgPSBwYXRoOworICAgIGhlYWQuYXBwZW5kQ2hpbGQocyk7CisKKyAg
ICBpZiAodXNlcmFnZW50LmlzT2xkSUUpCisgICAgICAgIHMub25yZWFkeXN0YXRlY2hhbmdlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09ICdsb2FkZWQnICYm
IGNhbGxiYWNrKCk7CisgICAgICAgIH07CisgICAgZWxzZQorICAgICAgICBzLm9ubG9hZCA9IGNh
bGxiYWNrOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRlcics
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIEV2ZW50RW1pdHRlciA9IHt9OworCitFdmVudEVtaXR0
ZXIuX2VtaXQgPQorRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnRO
YW1lLCBlKSB7CisgICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkg
fHwge307CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJz
IHx8IHt9OworCisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnRO
YW1lXSB8fCBbXTsKKyAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFuZGxl
cnNbZXZlbnROYW1lXTsKKyAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRIYW5k
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZW9mIGUgIT0gIm9iamVjdCIgfHwg
IWUpCisgICAgICAgIGUgPSB7fTsKKworICAgIGlmICghZS50eXBlKQorICAgICAgICBlLnR5cGUg
PSBldmVudE5hbWU7CisgICAgCisgICAgaWYgKCFlLnN0b3BQcm9wYWdhdGlvbikgeworICAgICAg
ICBlLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5wcm9w
YWdhdGlvblN0b3BwZWQgPSB0cnVlOworICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBpZiAo
IWUucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgIGxpc3RlbmVyc1tpXShlKTsKKyAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9w
cGVkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChkZWZhdWx0SGFu
ZGxlciAmJiAhZS5kZWZhdWx0UHJldmVudGVkKQorICAgICAgICByZXR1cm4gZGVmYXVsdEhhbmRs
ZXIoZSk7Cit9OworCitFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihl
dmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5f
ZGVmYXVsdEhhbmRsZXJzIHx8IHt9OworICAgIAorICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxl
cnNbZXZlbnROYW1lXSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5k
bGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7CisgICAgICAgIAor
ICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7Cit9OworCitF
dmVudEVtaXR0ZXIub24gPQorRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlv
bihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMu
X2V2ZW50UmVnaXN0cnkgfHwge307CisKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRS
ZWdpc3RyeVtldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzKQorICAgICAgICBsaXN0ZW5l
cnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKKworICAgIGlmIChsaXN0
ZW5lcnMuaW5kZXhPZihjYWxsYmFjaykgPT0gLTEpCisgICAgICAgIGxpc3RlbmVycy5wdXNoKGNh
bGxiYWNrKTsKK307CisKK0V2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9CitFdmVudEVtaXR0
ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsK
KyAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTsKKwor
ICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CisgICAg
aWYgKCFsaXN0ZW5lcnMpCisgICAgICAgIHJldHVybjsKKworICAgIHZhciBpbmRleCA9IGxpc3Rl
bmVycy5pbmRleE9mKGNhbGxiYWNrKTsKKyAgICBpZiAoaW5kZXggIT09IC0xKQorICAgICAgICBs
aXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKK307CisKK0V2ZW50RW1pdHRlci5yZW1vdmVBbGxM
aXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKKyAgICBpZiAodGhpcy5fZXZlbnRSZWdp
c3RyeSkgdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107Cit9OworCitleHBvcnRz
LkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9z
ZWxlY3Rpb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29w
JywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3JhbmdlJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1
aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwordmFy
IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0
ZXI7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgU2VsZWN0aW9u
ID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAg
dGhpcy5kb2MgPSBzZXNzaW9uLmdldERvY3VtZW50KCk7CisKKyAgICB0aGlzLmNsZWFyU2VsZWN0
aW9uKCk7CisgICAgdGhpcy5sZWFkID0gdGhpcy5zZWxlY3Rpb25MZWFkID0gdGhpcy5kb2MuY3Jl
YXRlQW5jaG9yKDAsIDApOworICAgIHRoaXMuYW5jaG9yID0gdGhpcy5zZWxlY3Rpb25BbmNob3Ig
PSB0aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwgMCk7CisKKyAgICB2YXIgc2VsZiA9IHRoaXM7Cisg
ICAgdGhpcy5sZWFkLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIHNlbGYuX2Vt
aXQoImNoYW5nZUN1cnNvciIpOworICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpCisgICAgICAg
ICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICAgICAgaWYgKCFzZWxmLiRr
ZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdlICYmIGUub2xkLmNvbHVtbiAhPSBlLnZhbHVlLmNvbHVt
bikKKyAgICAgICAgICAgIHNlbGYuJGRlc2lyZWRDb2x1bW4gPSBudWxsOworICAgIH0pOworCisg
ICAgdGhpcy5zZWxlY3Rpb25BbmNob3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAoIXNlbGYuJGlzRW1wdHkpCisgICAgICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VTZWxl
Y3Rpb24iKTsKKyAgICB9KTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1l
bnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuICh0aGlzLiRpc0VtcHR5IHx8ICgKKyAgICAgICAgICAgIHRoaXMuYW5j
aG9yLnJvdyA9PSB0aGlzLmxlYWQucm93ICYmCisgICAgICAgICAgICB0aGlzLmFuY2hvci5jb2x1
bW4gPT0gdGhpcy5sZWFkLmNvbHVtbgorICAgICAgICApKTsKKyAgICB9OworICAgIHRoaXMuaXNN
dWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhp
cy5nZXRSYW5nZSgpLmlzTXVsdGlMaW5lKCk7CisgICAgfTsKKyAgICB0aGlzLmdldEN1cnNvciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7Cisg
ICAgfTsKKyAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1u
KSB7CisgICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKKworICAg
ICAgICBpZiAodGhpcy4kaXNFbXB0eSkgeworICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IGZh
bHNlOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2Vs
ZWN0aW9uTGVhZCgpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmFuY2hv
ci5nZXRQb3NpdGlvbigpOworICAgIH07CisgICAgdGhpcy5nZXRTZWxlY3Rpb25MZWFkID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsKKyAgICB9
OworICAgIHRoaXMuc2hpZnRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb2x1bW5zKSB7CisgICAgICAg
IGlmICh0aGlzLiRpc0VtcHR5KSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyh0aGlz
LmxlYWQucm93LCB0aGlzLmxlYWQuY29sdW1uICsgY29sdW1ucyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9u
QW5jaG9yKCk7CisgICAgICAgIHZhciBsZWFkID0gdGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk7CisK
KyAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gdGhpcy5pc0JhY2t3YXJkcygpOworCisgICAgICAg
IGlmICghaXNCYWNrd2FyZHMgfHwgYW5jaG9yLmNvbHVtbiAhPT0gMCkKKyAgICAgICAgICAgIHRo
aXMuc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4gKyBjb2x1bW5z
KTsKKworICAgICAgICBpZiAoaXNCYWNrd2FyZHMgfHwgbGVhZC5jb2x1bW4gIT09IDApIHsKKyAg
ICAgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGVhZC5yb3csIGxlYWQuY29sdW1uICsgY29sdW1ucyk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5pc0JhY2t3YXJkcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7CisgICAgICAg
IHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICByZXR1cm4gKGFuY2hvci5yb3cgPiBsZWFk
LnJvdyB8fCAoYW5jaG9yLnJvdyA9PSBsZWFkLnJvdyAmJiBhbmNob3IuY29sdW1uID4gbGVhZC5j
b2x1bW4pKTsKKyAgICB9OworICAgIHRoaXMuZ2V0UmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGFuY2hvciA9IHRoaXMuYW5jaG9yOworICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVh
ZDsKKworICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gUmFu
Z2UuZnJvbVBvaW50cyhsZWFkLCBsZWFkKTsKKworICAgICAgICBpZiAodGhpcy5pc0JhY2t3YXJk
cygpKSB7CisgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBhbmNob3Ip
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZy
b21Qb2ludHMoYW5jaG9yLCBsZWFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5jbGVh
clNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJGlzRW1wdHkpIHsK
KyAgICAgICAgICAgIHRoaXMuJGlzRW1wdHkgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fZW1p
dCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2VsZWN0
QWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy5kb2MuZ2V0TGVu
Z3RoKCkgLSAxOworICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcigwLCAwKTsKKyAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGFzdFJvdywgdGhpcy5kb2MuZ2V0TGluZShsYXN0Um93KS5s
ZW5ndGgpOworICAgIH07CisgICAgdGhpcy5zZXRSYW5nZSA9CisgICAgdGhpcy5zZXRTZWxlY3Rp
b25SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCByZXZlcnNlKSB7CisgICAgICAgIGlmIChyZXZlcnNl
KSB7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihyYW5nZS5lbmQucm93LCBy
YW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2Uuc3RhcnQu
cm93LCByYW5nZS5zdGFydC5jb2x1bW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dGhpcy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1
bW4pOworICAgICAgICAgICAgdGhpcy5zZWxlY3RUbyhyYW5nZS5lbmQucm93LCByYW5nZS5lbmQu
Y29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gbnVsbDsK
KyAgICB9OworCisgICAgdGhpcy4kbW92ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKG1vdmVyKSB7Cisg
ICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkK
KyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGxlYWQucm93LCBsZWFkLmNvbHVt
bik7CisKKyAgICAgICAgbW92ZXIuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
VG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9u
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4p
OworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0VG9Qb3NpdGlvbiA9IGZ1bmN0
aW9uKHBvcykgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIHRoaXMuc2VsZWN0VXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92
ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdERv
d24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVD
dXJzb3JEb3duKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0UmlnaHQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCk7CisgICAg
fTsKKyAgICB0aGlzLnNlbGVjdExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92
ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
TGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhp
cy5tb3ZlQ3Vyc29yTGluZVN0YXJ0KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0TGluZUVuZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNv
ckxpbmVFbmQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RGaWxlRW5kID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCk7Cisg
ICAgfTsKKyAgICB0aGlzLnNlbGVjdEZpbGVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVTdGFydCk7CisgICAgfTsKKyAg
ICB0aGlzLnNlbGVjdFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3Zl
U2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCk7CisgICAgfTsKKyAgICB0aGlzLnNl
bGVjdFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24o
dGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpOworICAgIH07CisgICAgdGhpcy5nZXRXb3JkUmFuZ2Ug
PSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJvdyB8fCB0aGlzLmxlYWQ7
CisgICAgICAgICAgICByb3cgPSBjdXJzb3Iucm93OworICAgICAgICAgICAgY29sdW1uID0gY3Vy
c29yLmNvbHVtbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFdv
cmRSYW5nZShyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFdvcmQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldFdvcmRSYW5n
ZSgpKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0QVdvcmQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yKCk7CisgICAgICAgIHZhciByYW5nZSA9IHRo
aXMuc2Vzc2lvbi5nZXRBV29yZFJhbmdlKGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAg
ICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsKKyAgICB9OworCisgICAgdGhpcy5n
ZXRMaW5lUmFuZ2UgPSBmdW5jdGlvbihyb3csIGV4Y2x1ZGVMYXN0Q2hhcikgeworICAgICAgICB2
YXIgcm93U3RhcnQgPSB0eXBlb2Ygcm93ID09ICJudW1iZXIiID8gcm93IDogdGhpcy5sZWFkLnJv
dzsKKyAgICAgICAgdmFyIHJvd0VuZDsKKworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNl
c3Npb24uZ2V0Rm9sZExpbmUocm93U3RhcnQpOworICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAg
ICAgICAgICAgIHJvd1N0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAgICAgcm93
RW5kID0gZm9sZExpbmUuZW5kLnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJv
d0VuZCA9IHJvd1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGlmIChleGNsdWRlTGFzdENoYXIp
CisgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJvd1N0YXJ0LCAwLCByb3dFbmQsIHRoaXMu
c2Vzc2lvbi5nZXRMaW5lKHJvd0VuZCkubGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kICsgMSwgMCk7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdExpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXRTZWxl
Y3Rpb25SYW5nZSh0aGlzLmdldExpbmVSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1
cnNvclVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KC0xLCAwKTsK
KyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckRvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yQnkoMSwgMCk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQuZ2V0UG9zaXRp
b24oKSwKKyAgICAgICAgICAgIGZvbGQ7CisKKyAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNlc3Np
b24uZ2V0Rm9sZEF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4sIC0xKSkgeworICAgICAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsK
KyAgICAgICAgfSBlbHNlIGlmIChjdXJzb3IuY29sdW1uID09IDApIHsKKyAgICAgICAgICAgIGlm
IChjdXJzb3Iucm93ID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGN1
cnNvci5yb3cgLSAxLCB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cgLSAxKS5sZW5ndGgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFy
IHRhYlNpemUgPSB0aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOworICAgICAgICAgICAgaWYgKHRo
aXMuc2Vzc2lvbi5pc1RhYlN0b3AoY3Vyc29yKSAmJiB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpLnNsaWNlKGN1cnNvci5jb2x1bW4tdGFiU2l6ZSwgY3Vyc29yLmNvbHVtbikuc3BsaXQoIiAi
KS5sZW5ndGgtMSA9PSB0YWJTaXplKQorICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5
KDAsIC10YWJTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLm1v
dmVDdXJzb3JCeSgwLCAtMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNv
clJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQuZ2V0
UG9zaXRpb24oKSwKKyAgICAgICAgICAgIGZvbGQ7CisgICAgICAgIGlmIChmb2xkID0gdGhpcy5z
ZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAxKSkgeworICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMubGVhZC5jb2x1bW4gPT0gdGhpcy5kb2Mu
Z2V0TGluZSh0aGlzLmxlYWQucm93KS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmxl
YWQucm93IDwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5tb3ZlQ3Vyc29yVG8odGhpcy5sZWFkLnJvdyArIDEsIDApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNl
c3Npb24uZ2V0VGFiU2l6ZSgpOworICAgICAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVhZDsK
KyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uaXNUYWJTdG9wKGN1cnNvcikgJiYgdGhpcy5k
b2MuZ2V0TGluZShjdXJzb3Iucm93KS5zbGljZShjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1u
K3RhYlNpemUpLnNwbGl0KCIgIikubGVuZ3RoLTEgPT0gdGFiU2l6ZSkKKyAgICAgICAgICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JCeSgwLCB0YWJTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCAxKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBy
b3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVt
bjsKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVu
Um93KHJvdywgY29sdW1uKTsKKyAgICAgICAgdmFyIGZpcnN0Q29sdW1uUG9zaXRpb24gPSB0aGlz
LnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgMCk7CisgICAgICAg
IHZhciBiZWZvcmVDdXJzb3IgPSB0aGlzLnNlc3Npb24uZ2V0RGlzcGxheUxpbmUoCisgICAgICAg
ICAgICByb3csIG51bGwsIGZpcnN0Q29sdW1uUG9zaXRpb24ucm93LAorICAgICAgICAgICAgZmly
c3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4KKyAgICAgICAgKTsKKworICAgICAgICB2YXIgbGVhZGlu
Z1NwYWNlID0gYmVmb3JlQ3Vyc29yLm1hdGNoKC9eXHMqLyk7CisgICAgICAgIGlmIChsZWFkaW5n
U3BhY2VbMF0ubGVuZ3RoICE9IGNvbHVtbiAmJiAhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0eWxl
TGluZVN0YXJ0KQorICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4gKz0gbGVh
ZGluZ1NwYWNlWzBdLmxlbmd0aDsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihm
aXJzdENvbHVtblBvc2l0aW9uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxpbmVFbmQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisgICAgICAgIHZh
ciBsaW5lRW5kID0gdGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9u
KGxlYWQucm93LCBsZWFkLmNvbHVtbik7CisgICAgICAgIGlmICh0aGlzLmxlYWQuY29sdW1uID09
IGxpbmVFbmQuY29sdW1uKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5n
ZXRMaW5lKGxpbmVFbmQucm93KTsKKyAgICAgICAgICAgIGlmIChsaW5lRW5kLmNvbHVtbiA9PSBs
aW5lLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gbGluZS5zZWFyY2go
L1xzKyQvKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dEVuZCA+IDApCisgICAgICAgICAgICAg
ICAgICAgIGxpbmVFbmQuY29sdW1uID0gdGV4dEVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxpbmVFbmQucm93LCBsaW5lRW5kLmNvbHVt
bik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JGaWxlRW5kID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByb3cgPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDE7CisgICAgICAgIHZhciBj
b2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAgICB0aGlzLm1vdmVD
dXJzb3JUbyhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JGaWxlU3Rh
cnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oMCwgMCk7CisgICAg
fTsKKyAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5s
ZWFkLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7Cisg
ICAgICAgIHZhciByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1uKTsKKworICAg
ICAgICB2YXIgbWF0Y2g7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRl
eCA9IDA7CisgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7CisgICAg
ICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7Cisg
ICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVu
ZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1hdGNoID0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhyaWdodE9m
Q3Vyc29yKSkgeworICAgICAgICAgICAgY29sdW1uICs9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJl
Lmxhc3RJbmRleDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRl
eCA9IDA7CisgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1u
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29sdW1uID49IGxpbmUubGVuZ3RoKSB7CisgICAg
ICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGxpbmUubGVuZ3RoKTsKKyAgICAgICAgICAg
IHRoaXMubW92ZUN1cnNvclJpZ2h0KCk7CisgICAgICAgICAgICBpZiAocm93IDwgdGhpcy5kb2Mu
Z2V0TGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcldvcmRSaWdo
dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaCA9
IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKKyAgICAgICAgICAg
IGNvbHVtbiArPSB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg7CisgICAgICAgICAgICB0
aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vy
c29yTG9uZ1dvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByb3cgPSB0aGlzLmxl
YWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKKyAgICAgICAg
dmFyIGZvbGQ7CisgICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3cs
IGNvbHVtbiwgLTEpKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0
LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIHN0ciA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkU3RyaW5nQXQocm93LCBj
b2x1bW4sIC0xKTsKKyAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7CisgICAgICAgICAgICBzdHIg
PSB0aGlzLmRvYy5nZXRMaW5lKHJvdykuc3Vic3RyaW5nKDAsIGNvbHVtbikKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2Uoc3RyKTsKKyAg
ICAgICAgdmFyIG1hdGNoOworICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5k
ZXggPSAwOworICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAg
ICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKGxlZnRPZkN1cnNv
cikpIHsKKyAgICAgICAgICAgIGNvbHVtbiAtPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0
SW5kZXg7CisgICAgICAgICAgICBsZWZ0T2ZDdXJzb3IgPSBsZWZ0T2ZDdXJzb3Iuc2xpY2UodGhp
cy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbHVt
biA8PSAwKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIDApOworICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCgpOworICAgICAgICAgICAgaWYgKHJvdyA+IDApCisg
ICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5S
ZS5leGVjKGxlZnRPZkN1cnNvcikpIHsKKyAgICAgICAgICAgIGNvbHVtbiAtPSB0aGlzLnNlc3Np
b24udG9rZW5SZS5sYXN0SW5kZXg7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5s
YXN0SW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93
LCBjb2x1bW4pOworICAgIH07CisKKyAgICB0aGlzLiRzaG9ydFdvcmRFbmRJbmRleCA9IGZ1bmN0
aW9uKHJpZ2h0T2ZDdXJzb3IpIHsKKyAgICAgICAgdmFyIG1hdGNoLCBpbmRleCA9IDAsIGNoOwor
ICAgICAgICB2YXIgd2hpdGVzcGFjZVJlID0gL1xzLzsKKyAgICAgICAgdmFyIHRva2VuUmUgPSB0
aGlzLnNlc3Npb24udG9rZW5SZTsKKworICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7Cisg
ICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNv
cikpIHsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJz
b3JbaW5kZXhdKSAmJiB3aGl0ZXNwYWNlUmUudGVzdChjaCkpCisgICAgICAgICAgICAgICAgaW5k
ZXggKys7CisKKyAgICAgICAgICAgIGlmIChpbmRleCA8PSAxKSB7CisgICAgICAgICAgICAgICAg
dG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gcmln
aHRPZkN1cnNvcltpbmRleF0pICYmICF0b2tlblJlLnRlc3QoY2gpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgg
Kys7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlUmUudGVzdChjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleC0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRl
c3QoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArKzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsKKworICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1u
ID0gdGhpcy5sZWFkLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5l
KHJvdyk7CisgICAgICAgIHZhciByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1u
KTsKKworICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1
bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVD
dXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CisKKyAgICAgICAgaWYgKGNv
bHVtbiA9PSBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmRvYy5nZXRM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGRvIHsgICAgCisgICAgICAgICAgICAgICAgcm93Kys7Cisg
ICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IHRoaXMuZG9jLmdldExpbmUocm93KQorICAg
ICAgICAgICAgfSB3aGlsZSAocm93IDwgbCAmJiAvXlxzKiQvLnRlc3QocmlnaHRPZkN1cnNvcikp
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghL15ccysvLnRlc3QocmlnaHRPZkN1cnNv
cikpCisgICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9ICIiCisgICAgICAgICAgICBjb2x1
bW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3Jk
RW5kSW5kZXgocmlnaHRPZkN1cnNvcik7CisKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93
LCBjb2x1bW4gKyBpbmRleCk7CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29y
ZExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7Cisg
ICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uOworCisgICAgICAgIHZhciBmb2xk
OworICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4s
IC0xKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0LnJv
dywgZm9sZC5zdGFydC5jb2x1bW4pOworCisgICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9u
LmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKTsKKyAgICAgICAgaWYgKGNvbHVtbiA9
PSAwKSB7CisgICAgICAgICAgICBkbyB7ICAgIAorICAgICAgICAgICAgICAgIHJvdy0tOworICAg
ICAgICAgICAgICAgIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgICAgICB9
IHdoaWxlIChyb3cgPiAwICYmIC9eXHMqJC8udGVzdChsaW5lKSkKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CisgICAgICAgICAgICBpZiAoIS9ccyskLy50
ZXN0KGxpbmUpKQorICAgICAgICAgICAgICAgIGxpbmUgPSAiIgorICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGxlZnRPZkN1cnNvciA9IGxhbmcuc3RyaW5nUmV2ZXJzZShsaW5lKTsKKyAgICAgICAg
dmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgobGVmdE9mQ3Vyc29yKTsKKworICAg
ICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4gLSBpbmRleCk7CisgICAg
fTsKKworICAgIHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpCisgICAgICAgICAgICB0aGlzLm1v
dmVDdXJzb3JMb25nV29yZFJpZ2h0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMu
bW92ZUN1cnNvclNob3J0V29yZFJpZ2h0KCk7CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNv
cldvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHNlbGVj
dExvbmdXb3JkcykKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0KCk7
CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JCeSA9IGZ1bmN0aW9uKHJvd3MsIGNoYXJzKSB7
CisgICAgICAgIHZhciBzY3JlZW5Qb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBv
c2l0aW9uKAorICAgICAgICAgICAgdGhpcy5sZWFkLnJvdywKKyAgICAgICAgICAgIHRoaXMubGVh
ZC5jb2x1bW4KKyAgICAgICAgKTsKKworICAgICAgICBpZiAoY2hhcnMgPT09IDApIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLiRkZXNpcmVkQ29sdW1uKQorICAgICAgICAgICAgICAgIHNjcmVlblBv
cy5jb2x1bW4gPSB0aGlzLiRkZXNpcmVkQ29sdW1uOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBzY3JlZW5Qb3MuY29sdW1uOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGRvY1BvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50
UG9zaXRpb24oc2NyZWVuUG9zLnJvdyArIHJvd3MsIHNjcmVlblBvcy5jb2x1bW4pOworICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JUbyhkb2NQb3Mucm93LCBkb2NQb3MuY29sdW1uICsgY2hhcnMsIGNo
YXJzID09PSAwKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24gPSBmdW5j
dGlvbihwb3NpdGlvbikgeworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3NpdGlvbi5yb3cs
IHBvc2l0aW9uLmNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uLCBrZWVwRGVzaXJlZENvbHVtbikgeworICAgICAgICB2YXIgZm9sZCA9
IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9s
ZCkgeworICAgICAgICAgICAgcm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICBjb2x1
bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuJGtlZXBE
ZXNpcmVkQ29sdW1uT25DaGFuZ2UgPSB0cnVlOworICAgICAgICB0aGlzLmxlYWQuc2V0UG9zaXRp
b24ocm93LCBjb2x1bW4pOworICAgICAgICB0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdl
ID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFrZWVwRGVzaXJlZENvbHVtbikKKyAgICAgICAgICAg
IHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBudWxsOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vyc29y
VG9TY3JlZW4gPSBmdW5jdGlvbihyb3csIGNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pIHsKKyAg
ICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93
LCBjb2x1bW4pOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3Mucm93LCBwb3MuY29sdW1u
LCBrZWVwRGVzaXJlZENvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLmxlYWQuZGV0YWNoKCk7CisgICAgICAgIHRoaXMuYW5jaG9yLmRl
dGFjaCgpOworICAgICAgICB0aGlzLnNlc3Npb24gPSB0aGlzLmRvYyA9IG51bGw7CisgICAgfQor
CisgICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAg
IHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJhbmdlLmN1cnNvciA9PSByYW5nZS5zdGFy
dCk7CisgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSByYW5nZS5kZXNpcmVkQ29sdW1uIHx8
IHRoaXMuJGRlc2lyZWRDb2x1bW47CisgICAgfQorCisgICAgdGhpcy50b09yaWVudGVkUmFuZ2Ug
PSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgciA9IHRoaXMuZ2V0UmFuZ2UoKTsKKyAg
ICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSByLnN0
YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHIuc3RhcnQucm93Owor
ICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHIuZW5kLmNvbHVtbjsKKyAgICAgICAgICAg
IHJhbmdlLmVuZC5yb3cgPSByLmVuZC5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByYW5nZSA9IHI7CisgICAgICAgIH0KKworICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlzLmlz
QmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKKyAgICAgICAgcmFuZ2UuZGVz
aXJlZENvbHVtbiA9IHRoaXMuJGRlc2lyZWRDb2x1bW47CisgICAgICAgIHJldHVybiByYW5nZTsK
KyAgICB9CisKK30pLmNhbGwoU2VsZWN0aW9uLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuU2VsZWN0
aW9uID0gU2VsZWN0aW9uOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9yYW5nZScsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7Cit2YXIgUmFuZ2UgPSBmdW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJv
dywgZW5kQ29sdW1uKSB7CisgICAgdGhpcy5zdGFydCA9IHsKKyAgICAgICAgcm93OiBzdGFydFJv
dywKKyAgICAgICAgY29sdW1uOiBzdGFydENvbHVtbgorICAgIH07CisKKyAgICB0aGlzLmVuZCA9
IHsKKyAgICAgICAgcm93OiBlbmRSb3csCisgICAgICAgIGNvbHVtbjogZW5kQ29sdW1uCisgICAg
fTsKK307CisKKyhmdW5jdGlvbigpIHsgCisgICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24ocmFu
Z2UpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJhbmdlLnN0YXJ0LnJvdyAm
JgorICAgICAgICAgICAgdGhpcy5lbmQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYKKyAgICAgICAg
ICAgIHRoaXMuc3RhcnQuY29sdW1uID09IHJhbmdlLnN0YXJ0LmNvbHVtbiAmJgorICAgICAgICAg
ICAgdGhpcy5lbmQuY29sdW1uID09IHJhbmdlLmVuZC5jb2x1bW4KKyAgICB9OyAKKyAgICB0aGlz
LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiArIHRo
aXMuc3RhcnQucm93ICsgIi8iICsgdGhpcy5zdGFydC5jb2x1bW4gKworICAgICAgICAgICAgIl0g
LT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOworICAg
IH07IAorCisgICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7CisgICAgfTsgCisgICAg
dGhpcy5jb21wYXJlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgY21wLAor
ICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAorICAgICAgICAgICAgc3RhcnQgPSByYW5nZS5z
dGFydDsKKworICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7
CisgICAgICAgIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJl
KHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0g
MCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7
CisgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiA0MjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OyAKKyAgICB0aGlzLmNvbXBhcmVQb2lu
dCA9IGZ1bmN0aW9uKHApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5j
b2x1bW4pOworICAgIH07IAorICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdl
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAm
JiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7CisgICAgfTsKKyAgICB0aGlzLmlu
dGVyc2VjdHMgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgY21wID0gdGhpcy5jb21w
YXJlUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8
fCBjbXAgPT0gMSk7CisgICAgfTsKKyAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29s
dW1uID09IGNvbHVtbjsKKyAgICB9OyAKKyAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3cs
IGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMu
c3RhcnQuY29sdW1uID09IGNvbHVtbjsKKyAgICB9OyAKKyAgICB0aGlzLnNldFN0YXJ0ID0gZnVu
Y3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIp
IHsKKyAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKKyAgICAgICAg
ICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuc3RhcnQucm93ID0gcm93OworICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4g
PSBjb2x1bW47CisgICAgICAgIH0KKyAgICB9OyAKKyAgICB0aGlzLnNldEVuZCA9IGZ1bmN0aW9u
KHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7Cisg
ICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSByb3cuY29sdW1uOworICAgICAgICAgICAgdGhp
cy5lbmQucm93ID0gcm93LnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
ZW5kLnJvdyA9IHJvdzsKKyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsKKyAg
ICAgICAgfQorICAgIH07IAorICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKKyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNv
bHVtbikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OyAKKyAgICB0aGlzLmluc2lkZVN0YXJ0
ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3cs
IGNvbHVtbikgPT0gMCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4p
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsgCisgICAgdGhpcy5pbnNpZGVFbmQgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1u
KSA9PSAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgdGhpcy5jb21wYXJlID0gZnVuY3Rpb24ocm93
LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAg
ICAgIGlmIChyb3cgPT09IHRoaXMuc3RhcnQucm93KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uID8gLTEgOiAoY29sdW1uID4gdGhpcy5lbmQuY29s
dW1uID8gMSA6IDApOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
b3cgPCB0aGlzLnN0YXJ0LnJvdykKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBp
ZiAocm93ID4gdGhpcy5lbmQucm93KQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAg
aWYgKHRoaXMuc3RhcnQucm93ID09PSByb3cpCisgICAgICAgICAgICByZXR1cm4gY29sdW1uID49
IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xOworCisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cg
PT09IHJvdykKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1uID8g
MCA6IDE7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgICB0aGlzLmNvbXBhcmVTdGFy
dCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9
PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJl
KHJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5jb21wYXJlRW5kID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cg
JiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29s
dW1uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhp
cy5lbmQuY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09
IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewor
ICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykgeworICAgICAgICAgICAgdmFyIGVu
ZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IGxhc3RSb3crMSwKKyAgICAgICAgICAgICAgICBj
b2x1bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5z
dGFydC5yb3cgPiBsYXN0Um93KSB7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAgICAg
ICAgICAgICAgcm93OiBsYXN0Um93KzEsCisgICAgICAgICAgICAgICAgY29sdW1uOiAwCisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93IDwgZmly
c3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IHsKKyAgICAgICAgICAgICAgICByb3c6
IGZpcnN0Um93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykgeworICAgICAg
ICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LAorICAgICAg
ICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5l
bmQpOworICAgIH07CisgICAgdGhpcy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewor
ICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKKworICAgICAgICBp
ZiAoY21wID09IDApCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgZWxzZSBpZiAo
Y21wID09IC0xKQorICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNv
bHVtbn07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNv
bHVtbjogY29sdW1ufTsKKworICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8
fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOworICAgIH07CisKKyAgICB0aGlzLmlzRW1w
dHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PSB0aGlz
LmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gdGhpcy5lbmQuY29sdW1uKTsKKyAgICB9
OworICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICh0
aGlzLnN0YXJ0LnJvdyAhPT0gdGhpcy5lbmQucm93KTsKKyAgICB9OworICAgIHRoaXMuY2xvbmUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFy
dCwgdGhpcy5lbmQpOworICAgIH07CisgICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRo
aXMuZW5kLnJvdy0xKSwgMCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG5ldyBS
YW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgdGhpcy5lbmQucm93LCAwKQorICAgIH07CisgICAgdGhp
cy50b1NjcmVlblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgc2NyZWVu
UG9zU3RhcnQgPQorICAgICAgICAgICAgc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24o
dGhpcy5zdGFydCk7CisgICAgICAgIHZhciBzY3JlZW5Qb3NFbmQgPQorICAgICAgICAgICAgc2Vz
c2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOworCisgICAgICAgIHJldHVy
biBuZXcgUmFuZ2UoCisgICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0
YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0VuZC5j
b2x1bW4KKyAgICAgICAgKTsKKyAgICB9OworCit9KS5jYWxsKFJhbmdlLnByb3RvdHlwZSk7CitS
YW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgeworICAgIHJldHVybiBuZXcg
UmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOworfTsK
KworZXhwb3J0cy5SYW5nZSA9IFJhbmdlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL3Rl
eHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS90b2tlbml6ZXInLCAn
YWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2Fj
ZS91bmljb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Cit2YXIgVGV4
dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRI
aWdobGlnaHRSdWxlczsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ciIpLkJl
aGF2aW91cjsKK3ZhciB1bmljb2RlID0gcmVxdWlyZSgiLi4vdW5pY29kZSIpOworCit2YXIgTW9k
ZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3
IFRleHRIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCkpOworICAgIHRoaXMuJGJlaGF2aW91ciA9
IG5ldyBCZWhhdmlvdXIoKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMudG9rZW5S
ZSA9IG5ldyBSZWdFeHAoIl5bIgorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTAorICAgICAg
ICArIHVuaWNvZGUucGFja2FnZXMuTW4gKyB1bmljb2RlLnBhY2thZ2VzLk1jCisgICAgICAgICsg
dW5pY29kZS5wYWNrYWdlcy5OZAorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuUGMgKyAiXFwk
X10rIiwgImciCisgICAgKTsKKyAgICAKKyAgICB0aGlzLm5vblRva2VuUmUgPSBuZXcgUmVnRXhw
KCJeKD86W14iCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MCisgICAgICAgICsgdW5pY29k
ZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWMKKyAgICAgICAgKyB1bmljb2RlLnBh
Y2thZ2VzLk5kCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArICJcXCRfXXxcc10pKyIs
ICJnIgorICAgICk7CisKKyAgICB0aGlzLmdldFRva2VuaXplciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kdG9rZW5pemVyOworICAgIH07CisKKyAgICB0aGlzLnRvZ2dsZUNv
bW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAg
ICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5l
LCB0YWIpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0
ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9j
LCByb3cpIHsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkg
eworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAgICAgaWYg
KG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gIiI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1
bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIHRo
aXMuY3JlYXRlTW9kZURlbGVnYXRlcyA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7CisgICAgICAgIGlm
ICghdGhpcy4kZW1iZWRzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy4kbW9kZXMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRl
bWJlZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYXBwaW5nW3RoaXMuJGVtYmVk
c1tpXV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1dID0g
bmV3IG1hcHBpbmdbdGhpcy4kZW1iZWRzW2ldXSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2YXIgZGVsZWdhdGlvbnMgPSBbJ3RvZ2dsZUNvbW1lbnRMaW5l
cycsICdnZXROZXh0TGluZUluZGVudCcsICdjaGVja091dGRlbnQnLCAnYXV0b091dGRlbnQnLCAn
dHJhbnNmb3JtQWN0aW9uJ107CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxlZ2F0
aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgKGZ1bmN0aW9uKHNjb3BlKSB7CisgICAg
ICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBkZWxlZ2F0aW9uc1tpXTsKKyAgICAgICAgICAg
ICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gc2NvcGVbZnVuY3Rpb25OYW1lXTsKKyAgICAgICAgICAg
ICAgc2NvcGVbZGVsZWdhdGlvbnNbaV1dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBkZWZhdWx0
SGFuZGxlcik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKHRoaXMpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLiRkZWxlZ2F0b3IgPSBmdW5jdGlvbihtZXRob2Qs
IGFyZ3MsIGRlZmF1bHRIYW5kbGVyKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IGFyZ3NbMF07Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGVtYmVkcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1dKSBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHNwbGl0ID0gc3RhdGUuc3Bs
aXQodGhpcy4kZW1iZWRzW2ldKTsKKyAgICAgICAgICAgIGlmICghc3BsaXRbMF0gJiYgc3BsaXRb
MV0pIHsKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gc3BsaXRbMV07CisgICAgICAgICAgICAg
ICAgdmFyIG1vZGUgPSB0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1dOworICAgICAgICAgICAg
ICAgIHJldHVybiBtb2RlW21ldGhvZF0uYXBwbHkobW9kZSwgYXJncyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldCA9IGRlZmF1bHRIYW5kbGVyLmFwcGx5KHRoaXMs
IGFyZ3MpOworICAgICAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXIgPyByZXQgOiB1bmRlZmluZWQ7
CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnRyYW5zZm9ybUFjdGlvbiA9IGZ1bmN0aW9uKHN0YXRl
LCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcGFyYW0pIHsKKyAgICAgICAgaWYgKHRoaXMuJGJl
aGF2aW91cikgeworICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSB0aGlzLiRiZWhhdmlvdXIu
Z2V0QmVoYXZpb3VycygpOworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91cnMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldCA9IGJlaGF2aW91cnNba2V5XVthY3Rpb25dLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCit9KS5j
YWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvdG9rZW5pemVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBUb2tlbml6ZXIgPSBm
dW5jdGlvbihydWxlcywgZmxhZykgeworICAgIGZsYWcgPSBmbGFnID8gImciICsgZmxhZyA6ICJn
IjsKKyAgICB0aGlzLnN0YXRlcyA9IHJ1bGVzOworCisgICAgdGhpcy5yZWdFeHBzID0ge307Cisg
ICAgdGhpcy5tYXRjaE1hcHBpbmdzID0ge307CisgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3Rh
dGVzKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW2tleV07CisgICAgICAgIHZh
ciBydWxlUmVnRXhwcyA9IFtdOworICAgICAgICB2YXIgbWF0Y2hUb3RhbCA9IDA7CisgICAgICAg
IHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2tleV0gPSB7ZGVmYXVsdFRva2VuOiAi
dGV4dCJ9OworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVbaV07CisgICAgICAgICAgICBpZiAocnVs
ZS5kZWZhdWx0VG9rZW4pIHsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmRlZmF1bHRUb2tlbiA9
IHJ1bGUuZGVmYXVsdFRva2VuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApCisgICAg
ICAgICAgICAgICAgcnVsZS5yZWdleCA9IHJ1bGUucmVnZXgudG9TdHJpbmcoKS5zbGljZSgxLCAt
MSk7CisgICAgICAgICAgICB2YXIgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXg7CisgICAgICAg
ICAgICB2YXIgbWF0Y2hjb3VudCA9IG5ldyBSZWdFeHAoIig/OigiICsgYWRqdXN0ZWRyZWdleCAr
ICIpfCguKSkiKS5leGVjKCJhIikubGVuZ3RoIC0gMjsKKyAgICAgICAgICAgIGlmIChBcnJheS5p
c0FycmF5KHJ1bGUudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUudG9rZW4ubGVu
Z3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9rZW5b
MF07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50
b2tlbkFycmF5ID0gcnVsZS50b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9
IHRoaXMuJGFycmF5VG9rZW5zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG1hdGNoY291bnQgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKC9c
XFxkLy50ZXN0KHJ1bGUucmVnZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkcmVn
ZXggPSBydWxlLnJlZ2V4LnJlcGxhY2UoL1xcKFswLTldKykvZywgZnVuY3Rpb24gKG1hdGNoLCBk
aWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyAocGFyc2VJbnQo
ZGlnaXQsIDEwKSArIG1hdGNoVG90YWwgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3VudCA9
IDE7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkcmVnZXggPSB0aGlzLnJlbW92ZUNhcHR1
cmluZ0dyb3VwcyhydWxlLnJlZ2V4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCFydWxlLnNwbGl0UmVnZXgpCisgICAgICAgICAgICAgICAgICAgIHJ1bGUuc3BsaXRS
ZWdleCA9IHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAocnVsZS5yZWdleCwgZmxhZyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1hcHBpbmdbbWF0Y2hUb3RhbF0gPSBpOworICAgICAg
ICAgICAgbWF0Y2hUb3RhbCArPSBtYXRjaGNvdW50OworCisgICAgICAgICAgICBydWxlUmVnRXhw
cy5wdXNoKGFkanVzdGVkcmVnZXgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZWdFeHBz
W2tleV0gPSBuZXcgUmVnRXhwKCIoIiArIHJ1bGVSZWdFeHBzLmpvaW4oIil8KCIpICsgIil8KCQp
IiwgZmxhZyk7CisgICAgfQorfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGFycmF5VG9r
ZW5zID0gZnVuY3Rpb24oc3RyKSB7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgcmV0
dXJuIFtdOworICAgICAgICB2YXIgdmFsdWVzID0gc3RyLnNwbGl0KHRoaXMuc3BsaXRSZWdleCkK
KyAgICAgICAgdmFyIHRva2VucyA9IFtdOworICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLnRva2Vu
QXJyYXk7CisgICAgICAgIGlmICh0eXBlcy5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCAtIDIpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cuY29uc29sZSkKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmVycm9yKHR5cGVzLmxlbmd0aCAsIHZhbHVlcy5sZW5ndGggLSAyLCBzdHIsIHRoaXMuc3BsaXRS
ZWdleCk7CisgICAgICAgICAgICByZXR1cm4gW3t0eXBlOiAiZXJyb3IuaW52YWxpZCIsIHZhbHVl
OiBzdHJ9XTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2kgKyAxXSkgeworICAgICAgICAg
ICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZTogdHlwZXNbaV0sCisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaSArIDFdCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9rZW5zOworICAgIH07CisgICAgCisgICAgdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMg
PSBmdW5jdGlvbihzcmMpIHsKKyAgICAgICAgdmFyIHIgPSBzcmMucmVwbGFjZSgKKyAgICAgICAg
ICAgIC9cWyg/OlxcLnxbXlxdXSkqP1xdfFxcLnxcKFw/Wzo9IV18KFwoKS9nLAorICAgICAgICAg
ICAgZnVuY3Rpb24oeCwgeSkge3JldHVybiB5ID8gIig/OiIgOiB4O30KKyAgICAgICAgKTsKKyAg
ICAgICAgcmV0dXJuIHI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNyZWF0ZVNwbGl0dGVyUmVn
ZXhwID0gZnVuY3Rpb24oc3JjLCBmbGFnKSB7CisgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKC9c
KFw/PShbXigpXXxcXC4pKj9cKSQvLCAiIik7CisgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHNy
YywgZmxhZyk7CisgICAgfTsKKyAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihsaW5l
LCBzdGFydFN0YXRlKSB7CisgICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBzdGFydFN0
YXRlICE9ICJzdHJpbmciKSB7CisgICAgICAgICAgICB2YXIgc3RhY2sgPSBzdGFydFN0YXRlLnNs
aWNlKDApOworICAgICAgICAgICAgc3RhcnRTdGF0ZSA9IHN0YWNrWzBdOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHZhciBzdGFjayA9IFtdOworCisgICAgICAgIHZhciBjdXJyZW50U3Rh
dGUgPSBzdGFydFN0YXRlIHx8ICJzdGFydCI7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3Rh
dGVzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBp
bmdzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgIHZhciByZSA9IHRoaXMucmVnRXhwc1tjdXJyZW50
U3RhdGVdOworICAgICAgICByZS5sYXN0SW5kZXggPSAwOworCisgICAgICAgIHZhciBtYXRjaCwg
dG9rZW5zID0gW107CisgICAgICAgIHZhciBsYXN0SW5kZXggPSAwOworCisgICAgICAgIHZhciB0
b2tlbiA9IHt0eXBlOiBudWxsLCB2YWx1ZTogIiJ9OworCisgICAgICAgIHdoaWxlIChtYXRjaCA9
IHJlLmV4ZWMobGluZSkpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gbWFwcGluZy5kZWZhdWx0
VG9rZW47CisgICAgICAgICAgICB2YXIgcnVsZSA9IG51bGw7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSBtYXRjaFswXTsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IHJlLmxhc3RJbmRleDsKKwor
ICAgICAgICAgICAgaWYgKGluZGV4IC0gdmFsdWUubGVuZ3RoID4gbGFzdEluZGV4KSB7CisgICAg
ICAgICAgICAgICAgdmFyIHNraXBwZWQgPSBsaW5lLnN1YnN0cmluZyhsYXN0SW5kZXgsIGluZGV4
IC0gdmFsdWUubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHNraXBwZWQ7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiBza2lwcGVkfTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bWF0Y2gubGVuZ3RoLTI7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFtpICsgMV0g
PT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICBydWxlID0gc3RhdGVbbWFwcGluZ1tpXV07CisgICAgICAgICAgICAgICAgdHlwZSA9
IHR5cGVvZiBydWxlLnRva2VuID09ICJmdW5jdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgPyBy
dWxlLnRva2VuKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKQorICAgICAgICAgICAgICAgICAg
ICA6IHJ1bGUudG9rZW47CisKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29s
ZSAmJiBjb25zb2xlLmVycm9yICYmIGNvbnNvbGUuZXJyb3IoY3VycmVudFN0YXRlLCAiZG9lc24n
dCBleGlzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gInN0YXJ0
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVudFN0
YXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYXBwaW5n
ID0gdGhpcy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgICAgICAgICAgICAg
IGxhc3RJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICByZSA9IHRoaXMucmVnRXhw
c1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAgICAgICAgICByZS5sYXN0SW5kZXggPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgdHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCFydWxlIHx8
IHJ1bGUubWVyZ2UgIT09IGZhbHNlKSAmJiB0b2tlbi50eXBlID09PSB0eXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiB2YWx1ZX07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNo
KHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogbnVsbCwgdmFsdWU6
ICIifTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0
aDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godHlwZVtpXSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGFzdElu
ZGV4ID09IGxpbmUubGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBsYXN0SW5kZXggPSBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBl
KQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworCisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICB0b2tlbnMgOiB0b2tlbnMsCisgICAgICAgICAgICBzdGF0ZSA6IHN0YWNrLmxl
bmd0aCA/IHN0YWNrIDogY3VycmVudFN0YXRlCisgICAgICAgIH07CisgICAgfTsKKworfSkuY2Fs
bChUb2tlbml6ZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7
Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZyddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xp
Yi9sYW5nIik7CisKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKKworICAg
IHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRva2Vu
IDogImVtcHR5X2xpbmUiLAorICAgICAgICAgICAgcmVnZXggOiAnXiQnCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAgICAgICAgICAgcmVnZXggOiAiLisiCisg
ICAgICAgIH1dCisgICAgfTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuYWRkUnVs
ZXMgPSBmdW5jdGlvbihydWxlcywgcHJlZml4KSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiBy
dWxlcykgeworICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNba2V5XTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcnVsZSA9IHN0YXRlW2ldOworICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcHJlZml4ICsgcnVsZS5uZXh0OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3By
ZWZpeCArIGtleV0gPSBzdGF0ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmdldFJ1
bGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRydWxlczsKKyAgICB9Owor
CisgICAgdGhpcy5lbWJlZFJ1bGVzID0gZnVuY3Rpb24gKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgs
IGVzY2FwZVJ1bGVzLCBzdGF0ZXMsIGFwcGVuZCkgeworICAgICAgICB2YXIgZW1iZWRSdWxlcyA9
IG5ldyBIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCk7CisgICAgICAgIGlmIChzdGF0ZXMpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVzLmxlbmd0aDsgaSsrKQorICAg
ICAgICAgICAgICAgIHN0YXRlc1tpXSA9IHByZWZpeCArIHN0YXRlc1tpXTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHN0YXRlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIGVtYmVkUnVsZXMpCisgICAgICAgICAgICAgICAgc3RhdGVzLnB1c2gocHJlZml4ICsga2V5
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5hZGRSdWxlcyhlbWJlZFJ1bGVz
LCBwcmVmaXgpOworCisgICAgICAgIGlmIChlc2NhcGVSdWxlcykgeworICAgICAgICAgICAgdmFy
IGFkZFJ1bGVzID0gQXJyYXkucHJvdG90eXBlW2FwcGVuZCA/ICJwdXNoIiA6ICJ1bnNoaWZ0Il07
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykKKyAg
ICAgICAgICAgICAgICBhZGRSdWxlcy5hcHBseSh0aGlzLiRydWxlc1tzdGF0ZXNbaV1dLCBsYW5n
LmRlZXBDb3B5KGVzY2FwZVJ1bGVzKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMu
JGVtYmVkcykKKyAgICAgICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdOworICAgICAgICB0aGlzLiRl
bWJlZHMucHVzaChwcmVmaXgpOworICAgIH0KKworICAgIHRoaXMuZ2V0RW1iZWRzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRlbWJlZHM7CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLm5vcm1hbGl6ZVJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZCA9IDA7Cisg
ICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRydWxlcykgeworICAgICAgICAgICAgdmFyIHN0
YXRlID0gdGhpcy4kcnVsZXNba2V5XTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3RhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0YXRlW2ld
OworICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQgJiYgQXJyYXkuaXNBcnJheShydWxlLm5l
eHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZU5hbWUgPSBydWxlLnN0YXRlTmFt
ZSB8fCAoInN0YXRlIiArIGlkKyspOworICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tz
dGF0ZU5hbWVdID0gcnVsZS5uZXh0OworICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBz
dGF0ZU5hbWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydWxlLnJ1
bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXS5wdXNoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tyXS5wdXNoLmFwcGx5KHRoaXMuJHJ1bGVz
W3JdLCBydWxlLnJ1bGVzW3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNbcl0gPSBydWxlLnJ1bGVzW3Jd
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydWxlLmluY2x1ZGUgfHwgdHlwZW9m
IHJ1bGUgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaSwg
MV0uY29uY2F0KHRoaXMuJHJ1bGVzW3J1bGUuaW5jbHVkZSB8fCBydWxlXSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChydWxlLm5vRXNjYXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cyA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uKHgpIHtyZXR1cm4gIXgubmV4dDt9KTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3BsaWNlLmFwcGx5KHN0YXRlLCBhcmdzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5jcmVh
dGVLZXl3b3JkTWFwcGVyID0gZnVuY3Rpb24obWFwLCBkZWZhdWx0VG9rZW4sIGlnbm9yZUNhc2Us
IHNwbGl0Q2hhcikgeworICAgICAgICB2YXIga2V5d29yZHMgPSBPYmplY3QuY3JlYXRlKG51bGwp
OworICAgICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKSB7
CisgICAgICAgICAgICB2YXIgYSA9IG1hcFtjbGFzc05hbWVdOworICAgICAgICAgICAgaWYgKGln
bm9yZUNhc2UpCisgICAgICAgICAgICAgICAgYSA9IGEudG9Mb3dlckNhc2UoKTsKKyAgICAgICAg
ICAgIHZhciBsaXN0ID0gYS5zcGxpdChzcGxpdENoYXIgfHwgInwiKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOyApCisgICAgICAgICAgICAgICAga2V5d29yZHNb
bGlzdFtpXV0gPSBjbGFzc05hbWU7CisgICAgICAgIH0pOworICAgICAgICBtYXAgPSBudWxsOwor
ICAgICAgICByZXR1cm4gaWdub3JlQ2FzZQorICAgICAgICAgICAgPyBmdW5jdGlvbih2YWx1ZSkg
e3JldHVybiBrZXl3b3Jkc1t2YWx1ZS50b0xvd2VyQ2FzZSgpXSB8fCBkZWZhdWx0VG9rZW4gfQor
ICAgICAgICAgICAgOiBmdW5jdGlvbih2YWx1ZSkge3JldHVybiBrZXl3b3Jkc1t2YWx1ZV0gfHwg
ZGVmYXVsdFRva2VuIH07CisgICAgfQorCisgICAgdGhpcy5nZXRLZXl3b3JkcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy4ka2V5d29yZHM7CisgICAgfTsKKworfSkuY2FsbChU
ZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKKworZXhwb3J0cy5UZXh0SGlnaGxpZ2h0UnVs
ZXMgPSBUZXh0SGlnaGxpZ2h0UnVsZXM7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVo
YXZpb3VyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgQmVoYXZpb3VyID0gZnVuY3Rpb24oKSB7
CisgICB0aGlzLiRiZWhhdmlvdXJzID0ge307Cit9OworCisoZnVuY3Rpb24gKCkgeworCisgICAg
dGhpcy5hZGQgPSBmdW5jdGlvbiAobmFtZSwgYWN0aW9uLCBjYWxsYmFjaykgeworICAgICAgICBz
d2l0Y2ggKHVuZGVmaW5lZCkgeworICAgICAgICAgIGNhc2UgdGhpcy4kYmVoYXZpb3VyczoKKyAg
ICAgICAgICAgICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9OworICAgICAgICAgIGNhc2UgdGhpcy4k
YmVoYXZpb3Vyc1tuYW1lXToKKyAgICAgICAgICAgICAgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXSA9
IHt9OworICAgICAgICB9CisgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV1bYWN0aW9uXSA9
IGNhbGxiYWNrOworICAgIH0KKyAgICAKKyAgICB0aGlzLmFkZEJlaGF2aW91cnMgPSBmdW5jdGlv
biAoYmVoYXZpb3VycykgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gYmVoYXZpb3Vycykgewor
ICAgICAgICAgICAgZm9yICh2YXIgYWN0aW9uIGluIGJlaGF2aW91cnNba2V5XSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuYWRkKGtleSwgYWN0aW9uLCBiZWhhdmlvdXJzW2tleV1bYWN0aW9uXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGhpcy5yZW1vdmUg
PSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3VycyAmJiB0aGlz
LiRiZWhhdmlvdXJzW25hbWVdKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy4kYmVoYXZpb3Vy
c1tuYW1lXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLmluaGVyaXQgPSBmdW5j
dGlvbiAobW9kZSwgZmlsdGVyKSB7CisgICAgICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSBuZXcgbW9kZSgpLmdldEJlaGF2
aW91cnMoZmlsdGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBiZWhhdmlv
dXJzID0gbW9kZS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5hZGRCZWhhdmlvdXJzKGJlaGF2aW91cnMpOworICAgIH0KKyAgICAKKyAgICB0aGlzLmdldEJl
aGF2aW91cnMgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgICAgIGlmICghZmlsdGVyKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy4kYmVoYXZpb3VyczsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciByZXQgPSB7fQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
aWx0ZXIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3Vy
c1tmaWx0ZXJbaV1dKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFtmaWx0ZXJbaV1dID0gdGhp
cy4kYmVoYXZpb3Vyc1tmaWx0ZXJbaV1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKK30pLmNhbGwo
QmVoYXZpb3VyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuQmVoYXZpb3VyID0gQmVoYXZpb3VyOwor
fSk7CithY2UuZGVmaW5lKCdhY2UvdW5pY29kZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CitleHBvcnRzLnBh
Y2thZ2VzID0ge307CisKK2FkZFVuaWNvZGVQYWNrYWdlKHsKKyAgICBMOiAgIjAwNDEtMDA1QTAw
NjEtMDA3QTAwQUEwMEI1MDBCQTAwQzAtMDBENjAwRDgtMDBGNjAwRjgtMDJDMTAyQzYtMDJEMTAy
RTAtMDJFNDAyRUMwMkVFMDM3MC0wMzc0MDM3NjAzNzcwMzdBLTAzN0QwMzg2MDM4OC0wMzhBMDM4
QzAzOEUtMDNBMTAzQTMtMDNGNTAzRjctMDQ4MTA0OEEtMDUyNTA1MzEtMDU1NjA1NTkwNTYxLTA1
ODcwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkU1MDZF
NjA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3MkYwNzRELTA3QTUwN0IxMDdDQS0wN0VB
MDdGNDA3RjUwN0ZBMDgwMC0wODE1MDgxQTA4MjQwODI4MDkwNC0wOTM5MDkzRDA5NTAwOTU4LTA5
NjEwOTcxMDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIwMDlC
MjA5QjYtMDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBBMEYw
QTEwMEExMy0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVDMEE1
RTBBNzItMEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIzMEFC
NS0wQUI5MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0wQjMw
MEIzMjBCMzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4QTBC
OEUtMEI5MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEwQkFF
LTBCQjkwQkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5MEMz
RDBDNTgwQzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMwQ0I1
LTBDQjkwQ0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0wRDM5
MEQzRDBENjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBEQzAt
MERDNjBFMDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ2MEU4MTBFODIwRTg0MEU4NzBFODgwRThBMEU4
RDBFOTQtMEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAwRUIy
MEVCMzBFQkQwRUMwLTBFQzQwRUM2MEVEQzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0w
RjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEw
NzUtMTA4MTEwOEUxMEEwLTEwQzUxMEQwLTEwRkExMEZDMTEwMC0xMjQ4MTI0QS0xMjREMTI1MC0x
MjU2MTI1ODEyNUEtMTI1RDEyNjAtMTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEyQjgt
MTJCRTEyQzAxMkMyLTEyQzUxMkM4LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUExMzgw
LTEzOEYxM0EwLTEzRjQxNDAxLTE2NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAwLTE3
MEMxNzBFLTE3MTExNzIwLTE3MzExNzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3QjMx
N0Q3MTdEQzE4MjAtMTg3NzE4ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5NkQx
OTcwLTE5NzQxOTgwLTE5QUIxOUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQUE3MUIwNS0xQjMz
MUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFDNEYxQzVBLTFDN0QxQ0U5
LTFDRUMxQ0VFLTFDRjExRDAwLTFEQkYxRTAwLTFGMTUxRjE4LTFGMUQxRjIwLTFGNDUxRjQ4LTFG
NEQxRjUwLTFGNTcxRjU5MUY1QjFGNUQxRjVGLTFGN0QxRjgwLTFGQjQxRkI2LTFGQkMxRkJFMUZD
Mi0xRkM0MUZDNi0xRkNDMUZEMC0xRkQzMUZENi0xRkRCMUZFMC0xRkVDMUZGMi0xRkY0MUZGNi0x
RkZDMjA3MTIwN0YyMDkwLTIwOTQyMTAyMjEwNzIxMEEtMjExMzIxMTUyMTE5LTIxMUQyMTI0MjEy
NjIxMjgyMTJBLTIxMkQyMTJGLTIxMzkyMTNDLTIxM0YyMTQ1LTIxNDkyMTRFMjE4MzIxODQyQzAw
LTJDMkUyQzMwLTJDNUUyQzYwLTJDRTQyQ0VCLTJDRUUyRDAwLTJEMjUyRDMwLTJENjUyRDZGMkQ4
MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJFMkRDMC0yREM2MkRDOC0y
RENFMkREMC0yREQ2MkREOC0yRERFMkUyRjMwMDUzMDA2MzAzMS0zMDM1MzAzQjMwM0MzMDQxLTMw
OTYzMDlELTMwOUYzMEExLTMwRkEzMEZDLTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMxQjcz
MUYwLTMxRkYzNDAwLTREQjU0RTAwLTlGQ0JBMDAwLUE0OENBNEQwLUE0RkRBNTAwLUE2MENBNjEw
LUE2MUZBNjJBQTYyQkE2NDAtQTY1RkE2NjItQTY2RUE2N0YtQTY5N0E2QTAtQTZFNUE3MTctQTcx
RkE3MjItQTc4OEE3OEJBNzhDQTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIyQTg0
MC1BODczQTg4Mi1BOEIzQThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3Q0E5
ODQtQTlCMkE5Q0ZBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNzZBQTdBQUE4MC1B
QUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCLUFBRERBQkMwLUFCRTJBQzAwLUQ3
QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjAwLUZCMDZG
QjEzLUZCMTdGQjFERkIxRi1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0M0ZC
NDRGQjQ2LUZCQjFGQkQzLUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZFNzRG
RTc2LUZFRkNGRjIxLUZGM0FGRjQxLUZGNUFGRjY2LUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZGRkQy
LUZGRDdGRkRBLUZGREMiLAorICAgIExsOiAiMDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBERi0wMEY2
MDBGOC0wMEZGMDEwMTAxMDMwMTA1MDEwNzAxMDkwMTBCMDEwRDAxMEYwMTExMDExMzAxMTUwMTE3
MDExOTAxMUIwMTFEMDExRjAxMjEwMTIzMDEyNTAxMjcwMTI5MDEyQjAxMkQwMTJGMDEzMTAxMzMw
MTM1MDEzNzAxMzgwMTNBMDEzQzAxM0UwMTQwMDE0MjAxNDQwMTQ2MDE0ODAxNDkwMTRCMDE0RDAx
NEYwMTUxMDE1MzAxNTUwMTU3MDE1OTAxNUIwMTVEMDE1RjAxNjEwMTYzMDE2NTAxNjcwMTY5MDE2
QjAxNkQwMTZGMDE3MTAxNzMwMTc1MDE3NzAxN0EwMTdDMDE3RS0wMTgwMDE4MzAxODUwMTg4MDE4
QzAxOEQwMTkyMDE5NTAxOTktMDE5QjAxOUUwMUExMDFBMzAxQTUwMUE4MDFBQTAxQUIwMUFEMDFC
MDAxQjQwMUI2MDFCOTAxQkEwMUJELTAxQkYwMUM2MDFDOTAxQ0MwMUNFMDFEMDAxRDIwMUQ0MDFE
NjAxRDgwMURBMDFEQzAxREQwMURGMDFFMTAxRTMwMUU1MDFFNzAxRTkwMUVCMDFFRDAxRUYwMUYw
MDFGMzAxRjUwMUY5MDFGQjAxRkQwMUZGMDIwMTAyMDMwMjA1MDIwNzAyMDkwMjBCMDIwRDAyMEYw
MjExMDIxMzAyMTUwMjE3MDIxOTAyMUIwMjFEMDIxRjAyMjEwMjIzMDIyNTAyMjcwMjI5MDIyQjAy
MkQwMjJGMDIzMTAyMzMtMDIzOTAyM0MwMjNGMDI0MDAyNDIwMjQ3MDI0OTAyNEIwMjREMDI0Ri0w
MjkzMDI5NS0wMkFGMDM3MTAzNzMwMzc3MDM3Qi0wMzdEMDM5MDAzQUMtMDNDRTAzRDAwM0QxMDNE
NS0wM0Q3MDNEOTAzREIwM0REMDNERjAzRTEwM0UzMDNFNTAzRTcwM0U5MDNFQjAzRUQwM0VGLTAz
RjMwM0Y1MDNGODAzRkIwM0ZDMDQzMC0wNDVGMDQ2MTA0NjMwNDY1MDQ2NzA0NjkwNDZCMDQ2RDA0
NkYwNDcxMDQ3MzA0NzUwNDc3MDQ3OTA0N0IwNDdEMDQ3RjA0ODEwNDhCMDQ4RDA0OEYwNDkxMDQ5
MzA0OTUwNDk3MDQ5OTA0OUIwNDlEMDQ5RjA0QTEwNEEzMDRBNTA0QTcwNEE5MDRBQjA0QUQwNEFG
MDRCMTA0QjMwNEI1MDRCNzA0QjkwNEJCMDRCRDA0QkYwNEMyMDRDNDA0QzYwNEM4MDRDQTA0Q0Mw
NENFMDRDRjA0RDEwNEQzMDRENTA0RDcwNEQ5MDREQjA0REQwNERGMDRFMTA0RTMwNEU1MDRFNzA0
RTkwNEVCMDRFRDA0RUYwNEYxMDRGMzA0RjUwNEY3MDRGOTA0RkIwNEZEMDRGRjA1MDEwNTAzMDUw
NTA1MDcwNTA5MDUwQjA1MEQwNTBGMDUxMTA1MTMwNTE1MDUxNzA1MTkwNTFCMDUxRDA1MUYwNTIx
MDUyMzA1MjUwNTYxLTA1ODcxRDAwLTFEMkIxRDYyLTFENzcxRDc5LTFEOUExRTAxMUUwMzFFMDUx
RTA3MUUwOTFFMEIxRTBEMUUwRjFFMTExRTEzMUUxNTFFMTcxRTE5MUUxQjFFMUQxRTFGMUUyMTFF
MjMxRTI1MUUyNzFFMjkxRTJCMUUyRDFFMkYxRTMxMUUzMzFFMzUxRTM3MUUzOTFFM0IxRTNEMUUz
RjFFNDExRTQzMUU0NTFFNDcxRTQ5MUU0QjFFNEQxRTRGMUU1MTFFNTMxRTU1MUU1NzFFNTkxRTVC
MUU1RDFFNUYxRTYxMUU2MzFFNjUxRTY3MUU2OTFFNkIxRTZEMUU2RjFFNzExRTczMUU3NTFFNzcx
RTc5MUU3QjFFN0QxRTdGMUU4MTFFODMxRTg1MUU4NzFFODkxRThCMUU4RDFFOEYxRTkxMUU5MzFF
OTUtMUU5RDFFOUYxRUExMUVBMzFFQTUxRUE3MUVBOTFFQUIxRUFEMUVBRjFFQjExRUIzMUVCNTFF
QjcxRUI5MUVCQjFFQkQxRUJGMUVDMTFFQzMxRUM1MUVDNzFFQzkxRUNCMUVDRDFFQ0YxRUQxMUVE
MzFFRDUxRUQ3MUVEOTFFREIxRUREMUVERjFFRTExRUUzMUVFNTFFRTcxRUU5MUVFQjFFRUQxRUVG
MUVGMTFFRjMxRUY1MUVGNzFFRjkxRUZCMUVGRDFFRkYtMUYwNzFGMTAtMUYxNTFGMjAtMUYyNzFG
MzAtMUYzNzFGNDAtMUY0NTFGNTAtMUY1NzFGNjAtMUY2NzFGNzAtMUY3RDFGODAtMUY4NzFGOTAt
MUY5NzFGQTAtMUZBNzFGQjAtMUZCNDFGQjYxRkI3MUZCRTFGQzItMUZDNDFGQzYxRkM3MUZEMC0x
RkQzMUZENjFGRDcxRkUwLTFGRTcxRkYyLTFGRjQxRkY2MUZGNzIxMEEyMTBFMjEwRjIxMTMyMTJG
MjEzNDIxMzkyMTNDMjEzRDIxNDYtMjE0OTIxNEUyMTg0MkMzMC0yQzVFMkM2MTJDNjUyQzY2MkM2
ODJDNkEyQzZDMkM3MTJDNzMyQzc0MkM3Ni0yQzdDMkM4MTJDODMyQzg1MkM4NzJDODkyQzhCMkM4
RDJDOEYyQzkxMkM5MzJDOTUyQzk3MkM5OTJDOUIyQzlEMkM5RjJDQTEyQ0EzMkNBNTJDQTcyQ0E5
MkNBQjJDQUQyQ0FGMkNCMTJDQjMyQ0I1MkNCNzJDQjkyQ0JCMkNCRDJDQkYyQ0MxMkNDMzJDQzUy
Q0M3MkNDOTJDQ0IyQ0NEMkNDRjJDRDEyQ0QzMkNENTJDRDcyQ0Q5MkNEQjJDREQyQ0RGMkNFMTJD
RTMyQ0U0MkNFQzJDRUUyRDAwLTJEMjVBNjQxQTY0M0E2NDVBNjQ3QTY0OUE2NEJBNjREQTY0RkE2
NTFBNjUzQTY1NUE2NTdBNjU5QTY1QkE2NURBNjVGQTY2M0E2NjVBNjY3QTY2OUE2NkJBNjZEQTY4
MUE2ODNBNjg1QTY4N0E2ODlBNjhCQTY4REE2OEZBNjkxQTY5M0E2OTVBNjk3QTcyM0E3MjVBNzI3
QTcyOUE3MkJBNzJEQTcyRi1BNzMxQTczM0E3MzVBNzM3QTczOUE3M0JBNzNEQTczRkE3NDFBNzQz
QTc0NUE3NDdBNzQ5QTc0QkE3NERBNzRGQTc1MUE3NTNBNzU1QTc1N0E3NTlBNzVCQTc1REE3NUZB
NzYxQTc2M0E3NjVBNzY3QTc2OUE3NkJBNzZEQTc2RkE3NzEtQTc3OEE3N0FBNzdDQTc3RkE3ODFB
NzgzQTc4NUE3ODdBNzhDRkIwMC1GQjA2RkIxMy1GQjE3RkY0MS1GRjVBIiwKKyAgICBMdTogIjAw
NDEtMDA1QTAwQzAtMDBENjAwRDgtMDBERTAxMDAwMTAyMDEwNDAxMDYwMTA4MDEwQTAxMEMwMTBF
MDExMDAxMTIwMTE0MDExNjAxMTgwMTFBMDExQzAxMUUwMTIwMDEyMjAxMjQwMTI2MDEyODAxMkEw
MTJDMDEyRTAxMzAwMTMyMDEzNDAxMzYwMTM5MDEzQjAxM0QwMTNGMDE0MTAxNDMwMTQ1MDE0NzAx
NEEwMTRDMDE0RTAxNTAwMTUyMDE1NDAxNTYwMTU4MDE1QTAxNUMwMTVFMDE2MDAxNjIwMTY0MDE2
NjAxNjgwMTZBMDE2QzAxNkUwMTcwMDE3MjAxNzQwMTc2MDE3ODAxNzkwMTdCMDE3RDAxODEwMTgy
MDE4NDAxODYwMTg3MDE4OS0wMThCMDE4RS0wMTkxMDE5MzAxOTQwMTk2LTAxOTgwMTlDMDE5RDAx
OUYwMUEwMDFBMjAxQTQwMUE2MDFBNzAxQTkwMUFDMDFBRTAxQUYwMUIxLTAxQjMwMUI1MDFCNzAx
QjgwMUJDMDFDNDAxQzcwMUNBMDFDRDAxQ0YwMUQxMDFEMzAxRDUwMUQ3MDFEOTAxREIwMURFMDFF
MDAxRTIwMUU0MDFFNjAxRTgwMUVBMDFFQzAxRUUwMUYxMDFGNDAxRjYtMDFGODAxRkEwMUZDMDFG
RTAyMDAwMjAyMDIwNDAyMDYwMjA4MDIwQTAyMEMwMjBFMDIxMDAyMTIwMjE0MDIxNjAyMTgwMjFB
MDIxQzAyMUUwMjIwMDIyMjAyMjQwMjI2MDIyODAyMkEwMjJDMDIyRTAyMzAwMjMyMDIzQTAyM0Iw
MjNEMDIzRTAyNDEwMjQzLTAyNDYwMjQ4MDI0QTAyNEMwMjRFMDM3MDAzNzIwMzc2MDM4NjAzODgt
MDM4QTAzOEMwMzhFMDM4RjAzOTEtMDNBMTAzQTMtMDNBQjAzQ0YwM0QyLTAzRDQwM0Q4MDNEQTAz
REMwM0RFMDNFMDAzRTIwM0U0MDNFNjAzRTgwM0VBMDNFQzAzRUUwM0Y0MDNGNzAzRjkwM0ZBMDNG
RC0wNDJGMDQ2MDA0NjIwNDY0MDQ2NjA0NjgwNDZBMDQ2QzA0NkUwNDcwMDQ3MjA0NzQwNDc2MDQ3
ODA0N0EwNDdDMDQ3RTA0ODAwNDhBMDQ4QzA0OEUwNDkwMDQ5MjA0OTQwNDk2MDQ5ODA0OUEwNDlD
MDQ5RTA0QTAwNEEyMDRBNDA0QTYwNEE4MDRBQTA0QUMwNEFFMDRCMDA0QjIwNEI0MDRCNjA0Qjgw
NEJBMDRCQzA0QkUwNEMwMDRDMTA0QzMwNEM1MDRDNzA0QzkwNENCMDRDRDA0RDAwNEQyMDRENDA0
RDYwNEQ4MDREQTA0REMwNERFMDRFMDA0RTIwNEU0MDRFNjA0RTgwNEVBMDRFQzA0RUUwNEYwMDRG
MjA0RjQwNEY2MDRGODA0RkEwNEZDMDRGRTA1MDAwNTAyMDUwNDA1MDYwNTA4MDUwQTA1MEMwNTBF
MDUxMDA1MTIwNTE0MDUxNjA1MTgwNTFBMDUxQzA1MUUwNTIwMDUyMjA1MjQwNTMxLTA1NTYxMEEw
LTEwQzUxRTAwMUUwMjFFMDQxRTA2MUUwODFFMEExRTBDMUUwRTFFMTAxRTEyMUUxNDFFMTYxRTE4
MUUxQTFFMUMxRTFFMUUyMDFFMjIxRTI0MUUyNjFFMjgxRTJBMUUyQzFFMkUxRTMwMUUzMjFFMzQx
RTM2MUUzODFFM0ExRTNDMUUzRTFFNDAxRTQyMUU0NDFFNDYxRTQ4MUU0QTFFNEMxRTRFMUU1MDFF
NTIxRTU0MUU1NjFFNTgxRTVBMUU1QzFFNUUxRTYwMUU2MjFFNjQxRTY2MUU2ODFFNkExRTZDMUU2
RTFFNzAxRTcyMUU3NDFFNzYxRTc4MUU3QTFFN0MxRTdFMUU4MDFFODIxRTg0MUU4NjFFODgxRThB
MUU4QzFFOEUxRTkwMUU5MjFFOTQxRTlFMUVBMDFFQTIxRUE0MUVBNjFFQTgxRUFBMUVBQzFFQUUx
RUIwMUVCMjFFQjQxRUI2MUVCODFFQkExRUJDMUVCRTFFQzAxRUMyMUVDNDFFQzYxRUM4MUVDQTFF
Q0MxRUNFMUVEMDFFRDIxRUQ0MUVENjFFRDgxRURBMUVEQzFFREUxRUUwMUVFMjFFRTQxRUU2MUVF
ODFFRUExRUVDMUVFRTFFRjAxRUYyMUVGNDFFRjYxRUY4MUVGQTFFRkMxRUZFMUYwOC0xRjBGMUYx
OC0xRjFEMUYyOC0xRjJGMUYzOC0xRjNGMUY0OC0xRjREMUY1OTFGNUIxRjVEMUY1RjFGNjgtMUY2
RjFGQjgtMUZCQjFGQzgtMUZDQjFGRDgtMUZEQjFGRTgtMUZFQzFGRjgtMUZGQjIxMDIyMTA3MjEw
Qi0yMTBEMjExMC0yMTEyMjExNTIxMTktMjExRDIxMjQyMTI2MjEyODIxMkEtMjEyRDIxMzAtMjEz
MzIxM0UyMTNGMjE0NTIxODMyQzAwLTJDMkUyQzYwMkM2Mi0yQzY0MkM2NzJDNjkyQzZCMkM2RC0y
QzcwMkM3MjJDNzUyQzdFLTJDODAyQzgyMkM4NDJDODYyQzg4MkM4QTJDOEMyQzhFMkM5MDJDOTIy
Qzk0MkM5NjJDOTgyQzlBMkM5QzJDOUUyQ0EwMkNBMjJDQTQyQ0E2MkNBODJDQUEyQ0FDMkNBRTJD
QjAyQ0IyMkNCNDJDQjYyQ0I4MkNCQTJDQkMyQ0JFMkNDMDJDQzIyQ0M0MkNDNjJDQzgyQ0NBMkND
QzJDQ0UyQ0QwMkNEMjJDRDQyQ0Q2MkNEODJDREEyQ0RDMkNERTJDRTAyQ0UyMkNFQjJDRURBNjQw
QTY0MkE2NDRBNjQ2QTY0OEE2NEFBNjRDQTY0RUE2NTBBNjUyQTY1NEE2NTZBNjU4QTY1QUE2NUNB
NjVFQTY2MkE2NjRBNjY2QTY2OEE2NkFBNjZDQTY4MEE2ODJBNjg0QTY4NkE2ODhBNjhBQTY4Q0E2
OEVBNjkwQTY5MkE2OTRBNjk2QTcyMkE3MjRBNzI2QTcyOEE3MkFBNzJDQTcyRUE3MzJBNzM0QTcz
NkE3MzhBNzNBQTczQ0E3M0VBNzQwQTc0MkE3NDRBNzQ2QTc0OEE3NEFBNzRDQTc0RUE3NTBBNzUy
QTc1NEE3NTZBNzU4QTc1QUE3NUNBNzVFQTc2MEE3NjJBNzY0QTc2NkE3NjhBNzZBQTc2Q0E3NkVB
Nzc5QTc3QkE3N0RBNzdFQTc4MEE3ODJBNzg0QTc4NkE3OEJGRjIxLUZGM0EiLAorICAgIEx0OiAi
MDFDNTAxQzgwMUNCMDFGMjFGODgtMUY4RjFGOTgtMUY5RjFGQTgtMUZBRjFGQkMxRkNDMUZGQyIs
CisgICAgTG06ICIwMkIwLTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzQwMzdBMDU1
OTA2NDAwNkU1MDZFNjA3RjQwN0Y1MDdGQTA4MUEwODI0MDgyODA5NzEwRTQ2MEVDNjEwRkMxN0Q3
MTg0MzFBQTcxQzc4LTFDN0QxRDJDLTFENjExRDc4MUQ5Qi0xREJGMjA3MTIwN0YyMDkwLTIwOTQy
QzdEMkQ2RjJFMkYzMDA1MzAzMS0zMDM1MzAzQjMwOUQzMDlFMzBGQy0zMEZFQTAxNUE0RjgtQTRG
REE2MENBNjdGQTcxNy1BNzFGQTc3MEE3ODhBOUNGQUE3MEFBRERGRjcwRkY5RUZGOUYiLAorICAg
IExvOiAiMDFCQjAxQzAtMDFDMzAyOTQwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2M0YwNjQxLTA2
NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0wNzJG
MDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA4MDAtMDgxNTA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYx
MDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIwMDlCMjA5QjYt
MDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBBMEYwQTEwMEEx
My0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVDMEE1RTBBNzIt
MEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIzMEFCNS0wQUI5
MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0wQjMwMEIzMjBC
MzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4QTBCOEUtMEI5
MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEwQkFFLTBCQjkw
QkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5MEMzRDBDNTgw
QzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMwQ0I1LTBDQjkw
Q0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0wRDM5MEQzRDBE
NjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBEQzAtMERDNjBF
MDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ1MEU4MTBFODIwRTg0MEU4NzBFODgwRThBMEU4RDBFOTQt
MEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAwRUIyMEVCMzBF
QkQwRUMwLTBFQzQwRURDMEVERDBGMDAwRjQwLTBGNDcwRjQ5LTBGNkMwRjg4LTBGOEIxMDAwLTEw
MkExMDNGMTA1MC0xMDU1MTA1QS0xMDVEMTA2MTEwNjUxMDY2MTA2RS0xMDcwMTA3NS0xMDgxMTA4
RTEwRDAtMTBGQTExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYwLTEy
ODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJDOC0x
MkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0xNjZD
MTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMxMTc0
MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdEQzE4MjAtMTg0MjE4NDQtMTg3NzE4
ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5NkQxOTcwLTE5NzQxOTgwLTE5QUIx
OUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQjA1LTFCMzMxQjQ1LTFCNEIxQjgzLTFCQTAxQkFF
MUJBRjFDMDAtMUMyMzFDNEQtMUM0RjFDNUEtMUM3NzFDRTktMUNFQzFDRUUtMUNGMTIxMzUtMjEz
ODJEMzAtMkQ2NTJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJE
QzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTMwMDYzMDNDMzA0MS0zMDk2MzA5RjMw
QTEtMzBGQTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMxQjczMUYwLTMxRkYzNDAwLTREQjU0
RTAwLTlGQ0JBMDAwLUEwMTRBMDE2LUE0OENBNEQwLUE0RjdBNTAwLUE2MEJBNjEwLUE2MUZBNjJB
QTYyQkE2NkVBNkEwLUE2RTVBN0ZCLUE4MDFBODAzLUE4MDVBODA3LUE4MEFBODBDLUE4MjJBODQw
LUE4NzNBODgyLUE4QjNBOEYyLUE4RjdBOEZCQTkwQS1BOTI1QTkzMC1BOTQ2QTk2MC1BOTdDQTk4
NC1BOUIyQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTZGQUE3MS1BQTc2QUE3QUFB
ODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQkFBRENBQkMwLUFCRTJBQzAw
LUQ3QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjFERkIx
Ri1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0M0ZCNDRGQjQ2LUZCQjFGQkQz
LUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZFNzRGRTc2LUZFRkNGRjY2LUZG
NkZGRjcxLUZGOURGRkEwLUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZGRkQyLUZGRDdGRkRBLUZGREMi
LAorICAgIE06ICAiMDMwMC0wMzZGMDQ4My0wNDg5MDU5MS0wNUJEMDVCRjA1QzEwNUMyMDVDNDA1
QzUwNUM3MDYxMC0wNjFBMDY0Qi0wNjVFMDY3MDA2RDYtMDZEQzA2REUtMDZFNDA2RTcwNkU4MDZF
QS0wNkVEMDcxMTA3MzAtMDc0QTA3QTYtMDdCMDA3RUItMDdGMzA4MTYtMDgxOTA4MUItMDgyMzA4
MjUtMDgyNzA4MjktMDgyRDA5MDAtMDkwMzA5M0MwOTNFLTA5NEUwOTUxLTA5NTUwOTYyMDk2MzA5
ODEtMDk4MzA5QkMwOUJFLTA5QzQwOUM3MDlDODA5Q0ItMDlDRDA5RDcwOUUyMDlFMzBBMDEtMEEw
MzBBM0MwQTNFLTBBNDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3MTBBNzUwQTgxLTBBODMw
QUJDMEFCRS0wQUM1MEFDNy0wQUM5MEFDQi0wQUNEMEFFMjBBRTMwQjAxLTBCMDMwQjNDMEIzRS0w
QjQ0MEI0NzBCNDgwQjRCLTBCNEQwQjU2MEI1NzBCNjIwQjYzMEI4MjBCQkUtMEJDMjBCQzYtMEJD
ODBCQ0EtMEJDRDBCRDcwQzAxLTBDMDMwQzNFLTBDNDQwQzQ2LTBDNDgwQzRBLTBDNEQwQzU1MEM1
NjBDNjIwQzYzMEM4MjBDODMwQ0JDMENCRS0wQ0M0MENDNi0wQ0M4MENDQS0wQ0NEMENENTBDRDYw
Q0UyMENFMzBEMDIwRDAzMEQzRS0wRDQ0MEQ0Ni0wRDQ4MEQ0QS0wRDREMEQ1NzBENjIwRDYzMEQ4
MjBEODMwRENBMERDRi0wREQ0MERENjBERDgtMERERjBERjIwREYzMEUzMTBFMzQtMEUzQTBFNDct
MEU0RTBFQjEwRUI0LTBFQjkwRUJCMEVCQzBFQzgtMEVDRDBGMTgwRjE5MEYzNTBGMzcwRjM5MEYz
RTBGM0YwRjcxLTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJCLTEwM0UxMDU2
LTEwNTkxMDVFLTEwNjAxMDYyLTEwNjQxMDY3LTEwNkQxMDcxLTEwNzQxMDgyLTEwOEQxMDhGMTA5
QS0xMDlEMTM1RjE3MTItMTcxNDE3MzItMTczNDE3NTIxNzUzMTc3MjE3NzMxN0I2LTE3RDMxN0RE
MTgwQi0xODBEMThBOTE5MjAtMTkyQjE5MzAtMTkzQjE5QjAtMTlDMDE5QzgxOUM5MUExNy0xQTFC
MUE1NS0xQTVFMUE2MC0xQTdDMUE3RjFCMDAtMUIwNDFCMzQtMUI0NDFCNkItMUI3MzFCODAtMUI4
MjFCQTEtMUJBQTFDMjQtMUMzNzFDRDAtMUNEMjFDRDQtMUNFODFDRUQxQ0YyMURDMC0xREU2MURG
RC0xREZGMjBEMC0yMEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJGMzA5OTMwOUFBNjZGLUE2
NzJBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyMy1BODI3QTg4MEE4ODFBOEI0LUE4QzRB
OEUwLUE4RjFBOTI2LUE5MkRBOTQ3LUE5NTNBOTgwLUE5ODNBOUIzLUE5QzBBQTI5LUFBMzZBQTQz
QUE0Q0FBNERBQTdCQUFCMEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMxQUJFMy1BQkVBQUJF
Q0FCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2IiwKKyAgICBNbjogIjAzMDAtMDM2RjA0ODMtMDQ4
NzA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAw
NkQ2LTA2REMwNkRGLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAw
N0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDIwOTND
MDk0MS0wOTQ4MDk0RDA5NTEtMDk1NTA5NjIwOTYzMDk4MTA5QkMwOUMxLTA5QzQwOUNEMDlFMjA5
RTMwQTAxMEEwMjBBM0MwQTQxMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBB
ODEwQTgyMEFCQzBBQzEtMEFDNTBBQzcwQUM4MEFDRDBBRTIwQUUzMEIwMTBCM0MwQjNGMEI0MS0w
QjQ0MEI0RDBCNTYwQjYyMEI2MzBCODIwQkMwMEJDRDBDM0UtMEM0MDBDNDYtMEM0ODBDNEEtMEM0
RDBDNTUwQzU2MEM2MjBDNjMwQ0JDMENCRjBDQzYwQ0NDMENDRDBDRTIwQ0UzMEQ0MS0wRDQ0MEQ0
RDBENjIwRDYzMERDQTBERDItMERENDBERDYwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBFQjQt
MEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjcxLTBGN0UwRjgwLTBG
ODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJELTEwMzAxMDMyLTEwMzcxMDM5MTAz
QTEwM0QxMDNFMTA1ODEwNTkxMDVFLTEwNjAxMDcxLTEwNzQxMDgyMTA4NTEwODYxMDhEMTA5RDEz
NUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNy0xN0JEMTdDNjE3QzktMTdE
MzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTIyMTkyNzE5MjgxOTMyMTkzOS0xOTNCMUExNzFBMTgx
QTU2MUE1OC0xQTVFMUE2MDFBNjIxQTY1LTFBNkMxQTczLTFBN0MxQTdGMUIwMC0xQjAzMUIzNDFC
MzYtMUIzQTFCM0MxQjQyMUI2Qi0xQjczMUI4MDFCODExQkEyLTFCQTUxQkE4MUJBOTFDMkMtMUMz
MzFDMzYxQzM3MUNEMC0xQ0QyMUNENC0xQ0UwMUNFMi0xQ0U4MUNFRDFEQzAtMURFNjFERkQtMURG
RjIwRDAtMjBEQzIwRTEyMEU1LTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5
QUE2NkZBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyNUE4MjZBOEM0QThFMC1BOEYxQTky
Ni1BOTJEQTk0Ny1BOTUxQTk4MC1BOTgyQTlCM0E5QjYtQTlCOUE5QkNBQTI5LUFBMkVBQTMxQUEz
MkFBMzVBQTM2QUE0M0FBNENBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkU1QUJF
OEFCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2IiwKKyAgICBNYzogIjA5MDMwOTNFLTA5NDAwOTQ5
LTA5NEMwOTRFMDk4MjA5ODMwOUJFLTA5QzAwOUM3MDlDODA5Q0IwOUNDMDlENzBBMDMwQTNFLTBB
NDAwQTgzMEFCRS0wQUMwMEFDOTBBQ0IwQUNDMEIwMjBCMDMwQjNFMEI0MDBCNDcwQjQ4MEI0QjBC
NEMwQjU3MEJCRTBCQkYwQkMxMEJDMjBCQzYtMEJDODBCQ0EtMEJDQzBCRDcwQzAxLTBDMDMwQzQx
LTBDNDQwQzgyMEM4MzBDQkUwQ0MwLTBDQzQwQ0M3MENDODBDQ0EwQ0NCMENENTBDRDYwRDAyMEQw
MzBEM0UtMEQ0MDBENDYtMEQ0ODBENEEtMEQ0QzBENTcwRDgyMEQ4MzBEQ0YtMEREMTBERDgtMERE
RjBERjIwREYzMEYzRTBGM0YwRjdGMTAyQjEwMkMxMDMxMTAzODEwM0IxMDNDMTA1NjEwNTcxMDYy
LTEwNjQxMDY3LTEwNkQxMDgzMTA4NDEwODctMTA4QzEwOEYxMDlBLTEwOUMxN0I2MTdCRS0xN0M1
MTdDNzE3QzgxOTIzLTE5MjYxOTI5LTE5MkIxOTMwMTkzMTE5MzMtMTkzODE5QjAtMTlDMDE5Qzgx
OUM5MUExOS0xQTFCMUE1NTFBNTcxQTYxMUE2MzFBNjQxQTZELTFBNzIxQjA0MUIzNTFCM0IxQjNE
LTFCNDExQjQzMUI0NDFCODIxQkExMUJBNjFCQTcxQkFBMUMyNC0xQzJCMUMzNDFDMzUxQ0UxMUNG
MkE4MjNBODI0QTgyN0E4ODBBODgxQThCNC1BOEMzQTk1MkE5NTNBOTgzQTlCNEE5QjVBOUJBQTlC
QkE5QkQtQTlDMEFBMkZBQTMwQUEzM0FBMzRBQTREQUE3QkFCRTNBQkU0QUJFNkFCRTdBQkU5QUJF
QUFCRUMiLAorICAgIE1lOiAiMDQ4ODA0ODkwNkRFMjBERC0yMEUwMjBFMi0yMEU0QTY3MC1BNjcy
IiwKKyAgICBOOiAgIjAwMzAtMDAzOTAwQjIwMEIzMDBCOTAwQkMtMDBCRTA2NjAtMDY2OTA2RjAt
MDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjA5RjQtMDlGOTBBNjYtMEE2RjBBRTYtMEFF
RjBCNjYtMEI2RjBCRTYtMEJGMjBDNjYtMEM2RjBDNzgtMEM3RTBDRTYtMENFRjBENjYtMEQ3NTBF
NTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYzMzEwNDAtMTA0OTEwOTAtMTA5OTEzNjktMTM3QzE2RUUt
MTZGMDE3RTAtMTdFOTE3RjAtMTdGOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4
OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OTIwNzAyMDc0LTIw
NzkyMDgwLTIwODkyMTUwLTIxODIyMTg1LTIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3OTMy
Q0ZEMzAwNzMwMjEtMzAyOTMwMzgtMzAzQTMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMyODAt
MzI4OTMyQjEtMzJCRkE2MjAtQTYyOUE2RTYtQTZFRkE4MzAtQTgzNUE4RDAtQThEOUE5MDAtQTkw
OUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOSIsCisgICAgTmQ6ICIwMDMwLTAw
MzkwNjYwLTA2NjkwNkYwLTA2RjkwN0MwLTA3QzkwOTY2LTA5NkYwOUU2LTA5RUYwQTY2LTBBNkYw
QUU2LTBBRUYwQjY2LTBCNkYwQkU2LTBCRUYwQzY2LTBDNkYwQ0U2LTBDRUYwRDY2LTBENkYwRTUw
LTBFNTkwRUQwLTBFRDkwRjIwLTBGMjkxMDQwLTEwNDkxMDkwLTEwOTkxN0UwLTE3RTkxODEwLTE4
MTkxOTQ2LTE5NEYxOUQwLTE5REExQTgwLTFBODkxQTkwLTFBOTkxQjUwLTFCNTkxQkIwLTFCQjkx
QzQwLTFDNDkxQzUwLTFDNTlBNjIwLUE2MjlBOEQwLUE4RDlBOTAwLUE5MDlBOUQwLUE5RDlBQTUw
LUFBNTlBQkYwLUFCRjlGRjEwLUZGMTkiLAorICAgIE5sOiAiMTZFRS0xNkYwMjE2MC0yMTgyMjE4
NS0yMTg4MzAwNzMwMjEtMzAyOTMwMzgtMzAzQUE2RTYtQTZFRiIsCisgICAgTm86ICIwMEIyMDBC
MzAwQjkwMEJDLTAwQkUwOUY0LTA5RjkwQkYwLTBCRjIwQzc4LTBDN0UwRDcwLTBENzUwRjJBLTBG
MzMxMzY5LTEzN0MxN0YwLTE3RjkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTVGMjE4OTI0
NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYz
MjgwLTMyODkzMkIxLTMyQkZBODMwLUE4MzUiLAorICAgIFA6ICAiMDAyMS0wMDIzMDAyNS0wMDJB
MDAyQy0wMDJGMDAzQTAwM0IwMDNGMDA0MDAwNUItMDA1RDAwNUYwMDdCMDA3RDAwQTEwMEFCMDBC
NzAwQkIwMEJGMDM3RTAzODcwNTVBLTA1NUYwNTg5MDU4QTA1QkUwNUMwMDVDMzA1QzYwNUYzMDVG
NDA2MDkwNjBBMDYwQzA2MEQwNjFCMDYxRTA2MUYwNjZBLTA2NkQwNkQ0MDcwMC0wNzBEMDdGNy0w
N0Y5MDgzMC0wODNFMDk2NDA5NjUwOTcwMERGNDBFNEYwRTVBMEU1QjBGMDQtMEYxMjBGM0EtMEYz
RDBGODUwRkQwLTBGRDQxMDRBLTEwNEYxMEZCMTM2MS0xMzY4MTQwMDE2NkQxNjZFMTY5QjE2OUMx
NkVCLTE2RUQxNzM1MTczNjE3RDQtMTdENjE3RDgtMTdEQTE4MDAtMTgwQTE5NDQxOTQ1MTlERTE5
REYxQTFFMUExRjFBQTAtMUFBNjFBQTgtMUFBRDFCNUEtMUI2MDFDM0ItMUMzRjFDN0UxQzdGMUNE
MzIwMTAtMjAyNzIwMzAtMjA0MzIwNDUtMjA1MTIwNTMtMjA1RTIwN0QyMDdFMjA4RDIwOEUyMzI5
MjMyQTI3NjgtMjc3NTI3QzUyN0M2MjdFNi0yN0VGMjk4My0yOTk4MjlEOC0yOURCMjlGQzI5RkQy
Q0Y5LTJDRkMyQ0ZFMkNGRjJFMDAtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAwOC0zMDExMzAxNC0z
MDFGMzAzMDMwM0QzMEEwMzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdBODc0
LUE4NzdBOENFQThDRkE4RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1Qy1B
QTVGQUFERUFBREZBQkVCRkQzRUZEM0ZGRTEwLUZFMTlGRTMwLUZFNTJGRTU0LUZFNjFGRTYzRkU2
OEZFNkFGRTZCRkYwMS1GRjAzRkYwNS1GRjBBRkYwQy1GRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0It
RkYzREZGM0ZGRjVCRkY1REZGNUYtRkY2NSIsCisgICAgUGQ6ICIwMDJEMDU4QTA1QkUxNDAwMTgw
NjIwMTAtMjAxNTJFMTcyRTFBMzAxQzMwMzAzMEEwRkUzMUZFMzJGRTU4RkU2M0ZGMEQiLAorICAg
IFBzOiAiMDAyODAwNUIwMDdCMEYzQTBGM0MxNjlCMjAxQTIwMUUyMDQ1MjA3RDIwOEQyMzI5Mjc2
ODI3NkEyNzZDMjc2RTI3NzAyNzcyMjc3NDI3QzUyN0U2MjdFODI3RUEyN0VDMjdFRTI5ODMyOTg1
Mjk4NzI5ODkyOThCMjk4RDI5OEYyOTkxMjk5MzI5OTUyOTk3MjlEODI5REEyOUZDMkUyMjJFMjQy
RTI2MkUyODMwMDgzMDBBMzAwQzMwMEUzMDEwMzAxNDMwMTYzMDE4MzAxQTMwMURGRDNFRkUxN0ZF
MzVGRTM3RkUzOUZFM0JGRTNERkUzRkZFNDFGRTQzRkU0N0ZFNTlGRTVCRkU1REZGMDhGRjNCRkY1
QkZGNUZGRjYyIiwKKyAgICBQZTogIjAwMjkwMDVEMDA3RDBGM0IwRjNEMTY5QzIwNDYyMDdFMjA4
RTIzMkEyNzY5Mjc2QjI3NkQyNzZGMjc3MTI3NzMyNzc1MjdDNjI3RTcyN0U5MjdFQjI3RUQyN0VG
Mjk4NDI5ODYyOTg4Mjk4QTI5OEMyOThFMjk5MDI5OTIyOTk0Mjk5NjI5OTgyOUQ5MjlEQjI5RkQy
RTIzMkUyNTJFMjcyRTI5MzAwOTMwMEIzMDBEMzAwRjMwMTEzMDE1MzAxNzMwMTkzMDFCMzAxRTMw
MUZGRDNGRkUxOEZFMzZGRTM4RkUzQUZFM0NGRTNFRkU0MEZFNDJGRTQ0RkU0OEZFNUFGRTVDRkU1
RUZGMDlGRjNERkY1REZGNjBGRjYzIiwKKyAgICBQaTogIjAwQUIyMDE4MjAxQjIwMUMyMDFGMjAz
OTJFMDIyRTA0MkUwOTJFMEMyRTFDMkUyMCIsCisgICAgUGY6ICIwMEJCMjAxOTIwMUQyMDNBMkUw
MzJFMDUyRTBBMkUwRDJFMUQyRTIxIiwKKyAgICBQYzogIjAwNUYyMDNGMjA0MDIwNTRGRTMzRkUz
NEZFNEQtRkU0RkZGM0YiLAorICAgIFBvOiAiMDAyMS0wMDIzMDAyNS0wMDI3MDAyQTAwMkMwMDJF
MDAyRjAwM0EwMDNCMDAzRjAwNDAwMDVDMDBBMTAwQjcwMEJGMDM3RTAzODcwNTVBLTA1NUYwNTg5
MDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYxQjA2MUUwNjFGMDY2QS0wNjZE
MDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1MDk3MDBERjQwRTRGMEU1QTBF
NUIwRjA0LTBGMTIwRjg1MEZEMC0wRkQ0MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE2NkQxNjZFMTZF
Qi0xNkVEMTczNTE3MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MDUxODA3LTE4MEExOTQ0MTk0
NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdF
MUM3RjFDRDMyMDE2MjAxNzIwMjAtMjAyNzIwMzAtMjAzODIwM0ItMjAzRTIwNDEtMjA0MzIwNDct
MjA1MTIwNTMyMDU1LTIwNUUyQ0Y5LTJDRkMyQ0ZFMkNGRjJFMDAyRTAxMkUwNi0yRTA4MkUwQjJF
MEUtMkUxNjJFMTgyRTE5MkUxQjJFMUUyRTFGMkUyQS0yRTJFMkUzMDJFMzEzMDAxLTMwMDMzMDNE
MzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdBODc0LUE4NzdBOENFQThDRkE4
RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1Qy1BQTVGQUFERUFBREZBQkVC
RkUxMC1GRTE2RkUxOUZFMzBGRTQ1RkU0NkZFNDktRkU0Q0ZFNTAtRkU1MkZFNTQtRkU1N0ZFNUYt
RkU2MUZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZGMDUtRkYwN0ZGMEFGRjBDRkYwRUZGMEZGRjFBRkYx
QkZGMUZGRjIwRkYzQ0ZGNjFGRjY0RkY2NSIsCisgICAgUzogICIwMDI0MDAyQjAwM0MtMDAzRTAw
NUUwMDYwMDA3QzAwN0UwMEEyLTAwQTkwMEFDMDBBRS0wMEIxMDBCNDAwQjYwMEI4MDBENzAwRjcw
MkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MDNGNjA0
ODIwNjA2LTA2MDgwNjBCMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGMjA5RjMwOUZBMDlGQjBB
RjEwQjcwMEJGMy0wQkZBMEM3RjBDRjEwQ0YyMEQ3OTBFM0YwRjAxLTBGMDMwRjEzLTBGMTcwRjFB
LTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUx
MDlGMTM2MDEzOTAtMTM5OTE3REIxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMUZCRDFG
QkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMjA0NDIwNTIyMDdBLTIw
N0MyMDhBLTIwOEMyMEEwLTIwQjgyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjEx
ODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNDAtMjE0NDIxNEEtMjE0RDIxNEYy
MTkwLTIzMjgyMzJCLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI2Q0QyNkNG
LTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRCMjc0
RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyN0MwLTI3
QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0y
QjRDMkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZC
MzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMDlCMzA5QzMxOTAzMTkxMzE5Ni0zMTlG
MzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMw
MC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUE4MjgtQTgy
QkE4MzYtQTgzOUFBNzctQUE3OUZCMjlGREZDRkRGREZFNjJGRTY0LUZFNjZGRTY5RkYwNEZGMEJG
RjFDLUZGMUVGRjNFRkY0MEZGNUNGRjVFRkZFMC1GRkU2RkZFOC1GRkVFRkZGQ0ZGRkQiLAorICAg
IFNtOiAiMDAyQjAwM0MtMDAzRTAwN0MwMDdFMDBBQzAwQjEwMEQ3MDBGNzAzRjYwNjA2LTA2MDgy
MDQ0MjA1MjIwN0EtMjA3QzIwOEEtMjA4QzIxNDAtMjE0NDIxNEIyMTkwLTIxOTQyMTlBMjE5QjIx
QTAyMUEzMjFBNjIxQUUyMUNFMjFDRjIxRDIyMUQ0MjFGNC0yMkZGMjMwOC0yMzBCMjMyMDIzMjEy
MzdDMjM5Qi0yM0IzMjNEQy0yM0UxMjVCNzI1QzEyNUY4LTI1RkYyNjZGMjdDMC0yN0M0MjdDNy0y
N0NBMjdDQzI3RDAtMjdFNTI3RjAtMjdGRjI5MDAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5RkUt
MkFGRjJCMzAtMkI0NDJCNDctMkI0Q0ZCMjlGRTYyRkU2NC1GRTY2RkYwQkZGMUMtRkYxRUZGNUNG
RjVFRkZFMkZGRTktRkZFQyIsCisgICAgU2M6ICIwMDI0MDBBMi0wMEE1MDYwQjA5RjIwOUYzMDlG
QjBBRjEwQkY5MEUzRjE3REIyMEEwLTIwQjhBODM4RkRGQ0ZFNjlGRjA0RkZFMEZGRTFGRkU1RkZF
NiIsCisgICAgU2s6ICIwMDVFMDA2MDAwQTgwMEFGMDBCNDAwQjgwMkMyLTAyQzUwMkQyLTAyREYw
MkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFG
REQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMzA5QjMwOUNBNzAwLUE3MTZBNzIwQTcyMUE3ODlBNzhB
RkYzRUZGNDBGRkUzIiwKKyAgICBTbzogIjAwQTYwMEE3MDBBOTAwQUUwMEIwMDBCNjA0ODIwNjBF
MDYwRjA2RTkwNkZEMDZGRTA3RjYwOUZBMEI3MDBCRjMtMEJGODBCRkEwQzdGMENGMTBDRjIwRDc5
MEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZCRS0wRkM1MEZDNy0wRkND
MEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxOTQwMTlFMC0xOUZGMUI2MS0x
QjZBMUI3NC0xQjdDMjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFFLTIx
MjMyMTI1MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTRBMjE0QzIxNEQyMTRGMjE5NS0yMTk5MjE5Qy0y
MTlGMjFBMTIxQTIyMUE0MjFBNTIxQTctMjFBRDIxQUYtMjFDRDIxRDAyMUQxMjFEMzIxRDUtMjFG
MzIzMDAtMjMwNzIzMEMtMjMxRjIzMjItMjMyODIzMkItMjM3QjIzN0QtMjM5QTIzQjQtMjNEQjIz
RTItMjNFODI0MDAtMjQyNjI0NDAtMjQ0QTI0OUMtMjRFOTI1MDAtMjVCNjI1QjgtMjVDMDI1QzIt
MjVGNzI2MDAtMjY2RTI2NzAtMjZDRDI2Q0YtMjZFMTI2RTMyNkU4LTI2RkYyNzAxLTI3MDQyNzA2
LTI3MDkyNzBDLTI3MjcyNzI5LTI3NEIyNzREMjc0Ri0yNzUyMjc1Ni0yNzVFMjc2MS0yNzY3Mjc5
NDI3OTgtMjdBRjI3QjEtMjdCRTI4MDAtMjhGRjJCMDAtMkIyRjJCNDUyQjQ2MkI1MC0yQjU5MkNF
NS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEzMzAy
MDMwMzYzMDM3MzAzRTMwM0YzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMyMkEt
MzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAtQTRD
NkE4MjgtQTgyQkE4MzZBODM3QTgzOUFBNzctQUE3OUZERkRGRkU0RkZFOEZGRURGRkVFRkZGQ0ZG
RkQiLAorICAgIFo6ICAiMDAyMDAwQTAxNjgwMTgwRTIwMDAtMjAwQTIwMjgyMDI5MjAyRjIwNUYz
MDAwIiwKKyAgICBaczogIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDJGMjA1RjMwMDAiLAor
ICAgIFpsOiAiMjAyOCIsCisgICAgWnA6ICIyMDI5IiwKKyAgICBDOiAgIjAwMDAtMDAxRjAwN0Yt
MDA5RjAwQUQwMzc4MDM3OTAzN0YtMDM4MzAzOEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2
MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1RUYwNUY1LTA2MDUwNjFDMDYxRDA2MjAwNjVG
MDZERDA3MEUwNzBGMDc0QjA3NEMwN0IyLTA3QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5
M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5
QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURF
MDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEz
QTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1
MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNG
MEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIz
MTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBC
NjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJB
NS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJE
OC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUt
MEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENB
OTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBD
RjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1
RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBE
QzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0w
RTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgw
RUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgw
RjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYx
MjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEy
QzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1
LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2
RDE3NzExNzc0LTE3N0YxN0I0MTdCNTE3REUxN0RGMTdFQS0xN0VGMTdGQS0xN0ZGMTgwRjE4MUEt
MTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQtMTkxRjE5MkMtMTkyRjE5M0MtMTkz
RjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFGMTlDQS0xOUNGMTlEQi0xOUREMUEx
QzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYxQUFFLTFBRkYxQjRDLTFCNEYxQjdE
LTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRBLTFDNEMxQzgwLTFDQ0YxQ0YzLTFD
RkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcxRjRFMUY0RjFGNTgxRjVBMUY1QzFG
NUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFGRjExRkY1MUZGRjIwMEItMjAwRjIw
MkEtMjAyRTIwNjAtMjA2RjIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBGRjIx
OEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3MjcwMDI3
MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3QkYy
N0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJEMkYy
RDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3MkRE
RjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgzMTAw
LTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5RkND
LTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgtQTY5
RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThDREE4
REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5RkZB
QTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJFRUFC
RUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUY4RkZGQTJFRkEyRkZBNkVGQTZGRkFE
QS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJGRDQw
LUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZFNjdG
RTZDLUZFNkZGRTc1RkVGRC1GRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhGRkQ5RkZE
RC1GRkRGRkZFN0ZGRUYtRkZGQkZGRkVGRkZGIiwKKyAgICBDYzogIjAwMDAtMDAxRjAwN0YtMDA5
RiIsCisgICAgQ2Y6ICIwMEFEMDYwMC0wNjAzMDZERDA3MEYxN0I0MTdCNTIwMEItMjAwRjIwMkEt
MjAyRTIwNjAtMjA2NDIwNkEtMjA2RkZFRkZGRkY5LUZGRkIiLAorICAgIENvOiAiRTAwMC1GOEZG
IiwKKyAgICBDczogIkQ4MDAtREZGRiIsCisgICAgQ246ICIwMzc4MDM3OTAzN0YtMDM4MzAzOEIw
MzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1
RUYwNUY1LTA1RkYwNjA0MDYwNTA2MUMwNjFEMDYyMDA2NUYwNzBFMDc0QjA3NEMwN0IyLTA3QkYw
N0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4
MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlD
OTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBF
MEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRF
LTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEw
QUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAw
MEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEw
QjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBC
OTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0w
QkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMy
OTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAt
MEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0
MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBE
M0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0
MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0w
REYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4
RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVD
RTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0Qw
RkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4
OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVC
LTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcx
NS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2RDE3NzExNzc0LTE3N0YxN0RFMTdERjE3RUEtMTdF
RjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4QUYxOEY2LTE4RkYxOTFELTE5
MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5NzUtMTk3RjE5QUMtMTlBRjE5
Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4QS0xQThGMUE5QS0xQTlGMUFB
RS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0xQkZGMUMzOC0xQzNBMUM0QS0x
QzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcxRjFFMUYxRjFGNDYxRjQ3MUY0
RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFGRDQxRkQ1MUZEQzFGRjAxRkYx
MUZGNTFGRkYyMDY1LTIwNjkyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIwRkYy
MThBLTIxOEYyM0U5LTIzRkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3MDAy
NzA1MjcwQTI3MEIyNzI4Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAyN0JG
MjdDQjI3Q0QtMjdDRjJCNEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0yRDJG
MkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRENzJE
REYyRTMyLTJFN0YyRTlBMkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4MzEw
MC0zMTA0MzEyRS0zMTMwMzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJGOUZD
Qy05RkZGQTQ4RC1BNDhGQTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4LUE2
OUZBNkY4LUE2RkZBNzhELUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4Q0RB
OERBLUE4REZBOEZDLUE4RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1BOUZG
QUEzNy1BQTNGQUE0RUFBNEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFCRUVB
QkVGQUJGQS1BQkZGRDdBNC1EN0FGRDdDNy1EN0NBRDdGQy1EN0ZGRkEyRUZBMkZGQTZFRkE2RkZB
REEtRkFGRkZCMDctRkIxMkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQyRkQ0
MC1GRDRGRkQ5MEZEOTFGREM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNGRTY3
RkU2Qy1GRTZGRkU3NUZFRkRGRUZFRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4RkZE
OUZGREQtRkZERkZGRTdGRkVGLUZGRjhGRkZFRkZGRiIKK30pOworCitmdW5jdGlvbiBhZGRVbmlj
b2RlUGFja2FnZSAocGFjaykgeworICAgIHZhciBjb2RlUG9pbnQgPSAvXHd7NH0vZzsKKyAgICBm
b3IgKHZhciBuYW1lIGluIHBhY2spCisgICAgICAgIGV4cG9ydHMucGFja2FnZXNbbmFtZV0gPSBw
YWNrW25hbWVdLnJlcGxhY2UoY29kZVBvaW50LCAiXFx1JCYiKTsKK307CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvZG9jdW1lbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvcmFuZ2UnLCAnYWNl
L2FuY2hvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIg
b29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgi
Li9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBSYW5nZSA9IHJlcXVpcmUo
Ii4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hv
cjsKKwordmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dCkgeworICAgIHRoaXMuJGxpbmVzID0g
W107CisgICAgaWYgKHRleHQubGVuZ3RoID09IDApIHsKKyAgICAgICAgdGhpcy4kbGluZXMgPSBb
IiJdOworICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkgeworICAgICAgICB0aGlz
Lmluc2VydExpbmVzKDAsIHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuaW5zZXJ0
KHtyb3c6IDAsIGNvbHVtbjowfSwgdGV4dCk7CisgICAgfQorfTsKKworKGZ1bmN0aW9uKCkgewor
CisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0VmFs
dWUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgp
OworICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUo
bGVuLTEpLmxlbmd0aCkpOworICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0s
IHRleHQpOworICAgIH07CisgICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVy
KCkpOworICAgIH07CisgICAgdGhpcy5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgeworICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7CisgICAg
fTsKKyAgICBpZiAoImFhYSIuc3BsaXQoL2EvKS5sZW5ndGggPT0gMCkKKyAgICAgICAgdGhpcy4k
c3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNl
KC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOworICAgICAgICB9CisgICAgZWxzZQorICAg
ICAgICB0aGlzLiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7CisgICAgICAgIH07CisKKworIAorICAgIHRoaXMuJGRl
dGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBtYXRjaCA9IHRleHQu
bWF0Y2goL14uKj8oXHJcbnxccnxcbikvbSk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAg
ICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBtYXRjaFsxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHN3aXRj
aCAodGhpcy4kbmV3TGluZU1vZGUpIHsKKyAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKKyAgICAg
ICAgICAgIHJldHVybiAiXHJcbiI7CisKKyAgICAgICAgICBjYXNlICJ1bml4IjoKKyAgICAgICAg
ICAgIHJldHVybiAiXG4iOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLiRhdXRvTmV3TGluZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRhdXRv
TmV3TGluZSA9ICJcbiI7CisgICAgdGhpcy4kbmV3TGluZU1vZGUgPSAiYXV0byI7CisgICAgdGhp
cy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CisgICAgICAgIGlmICh0
aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTsKKyAgICB9OworICAgIHRo
aXMuZ2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG5l
d0xpbmVNb2RlOworICAgIH07CisgICAgdGhpcy5pc05ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7
CisgICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQg
PT0gIlxuIik7CisgICAgfTsKKyAgICB0aGlzLmdldExpbmUgPSBmdW5jdGlvbihyb3cpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CisgICAgfTsKKyAgICB0aGlzLmdl
dExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CisgICAgfTsKKyAgICB0aGlz
LmdldEFsbExpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdldExpbmVz
KDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOworICAgIH07CisgICAgdGhpcy5nZXRMZW5ndGggPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKKyAgICB9OworICAg
IHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgaWYgKHJhbmdl
LnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy4k
bGluZXNbcmFuZ2Uuc3RhcnQucm93XS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFu
Z2UuZW5kLmNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdysxLCByYW5nZS5lbmQucm93
LTEpOworICAgICAgICAgICAgbGluZXMudW5zaGlmdCgodGhpcy4kbGluZXNbcmFuZ2Uuc3RhcnQu
cm93XSB8fCAiIikuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbikpOworICAgICAgICAgICAg
bGluZXMucHVzaCgodGhpcy4kbGluZXNbcmFuZ2UuZW5kLnJvd10gfHwgIiIpLnN1YnN0cmluZygw
LCByYW5nZS5lbmQuY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gbGluZXMuam9pbih0aGlz
LmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy4k
Y2xpcFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAgICAgICAgdmFyIGxlbmd0aCA9
IHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7
CisgICAgICAgICAgICBwb3NpdGlvbi5yb3cgPSBNYXRoLm1heCgwLCBsZW5ndGggLSAxKTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IHRoaXMuZ2V0TGluZShsZW5ndGgtMSkubGVuZ3Ro
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB9OworICAgIHRoaXMu
aW5zZXJ0ID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHsKKyAgICAgICAgaWYgKCF0ZXh0IHx8
IHRleHQubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAg
ICAgIHBvc2l0aW9uID0gdGhpcy4kY2xpcFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgaWYg
KHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkKKyAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUo
dGV4dCk7CisKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kc3BsaXQodGV4dCk7CisgICAgICAg
IHZhciBmaXJzdExpbmUgPSBsaW5lcy5zcGxpY2UoMCwgMSlbMF07CisgICAgICAgIHZhciBsYXN0
TGluZSA9IGxpbmVzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGxpbmVzLnNwbGljZShsaW5lcy5sZW5n
dGggLSAxLCAxKVswXTsKKworICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5lKHBv
c2l0aW9uLCBmaXJzdExpbmUpOworICAgICAgICBpZiAobGFzdExpbmUgIT09IG51bGwpIHsKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnROZXdMaW5lKHBvc2l0aW9uKTsgLy8gdGVy
bWluYXRlIGZpcnN0IGxpbmUKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRMaW5l
cyhwb3NpdGlvbi5yb3csIGxpbmVzKTsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNl
cnRJbkxpbmUocG9zaXRpb24sIGxhc3RMaW5lIHx8ICIiKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcG9zaXRpb247CisgICAgfTsKKyAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24o
cm93LCBsaW5lcykgeworICAgICAgICBpZiAobGluZXMubGVuZ3RoID09IDApCisgICAgICAgICAg
ICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IDB9OworICAgICAgICBpZiAobGluZXMubGVuZ3Ro
ID4gMHhGRkZGKSB7CisgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnRMaW5lcyhyb3cs
IGxpbmVzLnNsaWNlKDB4RkZGRikpOworICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZSgw
LCAweEZGRkYpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFyZ3MgPSBbcm93LCAwXTsKKyAg
ICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIGxpbmVzKTsKKyAgICAgICAgdGhpcy4kbGluZXMu
c3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLCBhcmdzKTsKKworICAgICAgICB2YXIgcmFuZ2UgPSBu
ZXcgUmFuZ2Uocm93LCAwLCByb3cgKyBsaW5lcy5sZW5ndGgsIDApOworICAgICAgICB2YXIgZGVs
dGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRMaW5lcyIsCisgICAgICAgICAgICBy
YW5nZTogcmFuZ2UsCisgICAgICAgICAgICBsaW5lczogbGluZXMKKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICAgICAgcmV0dXJu
IGVuZCB8fCByYW5nZS5lbmQ7CisgICAgfTsKKyAgICB0aGlzLmluc2VydE5ld0xpbmUgPSBmdW5j
dGlvbihwb3NpdGlvbikgeworICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlvbihw
b3NpdGlvbik7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSB8
fCAiIjsKKworICAgICAgICB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddID0gbGluZS5zdWJzdHJp
bmcoMCwgcG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHBvc2l0
aW9uLnJvdyArIDEsIDAsIGxpbmUuc3Vic3RyaW5nKHBvc2l0aW9uLmNvbHVtbiwgbGluZS5sZW5n
dGgpKTsKKworICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgcm93IDogcG9zaXRpb24u
cm93ICsgMSwKKyAgICAgICAgICAgIGNvbHVtbiA6IDAKKyAgICAgICAgfTsKKworICAgICAgICB2
YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRUZXh0IiwKKyAgICAgICAg
ICAgIHJhbmdlOiBSYW5nZS5mcm9tUG9pbnRzKHBvc2l0aW9uLCBlbmQpLAorICAgICAgICAgICAg
dGV4dDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkKKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKworICAgICAgICByZXR1cm4gZW5k
OworICAgIH07CisgICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4
dCkgeworICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBw
b3NpdGlvbjsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10g
fHwgIiI7CisKKyAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3Ry
aW5nKDAsIHBvc2l0aW9uLmNvbHVtbikgKyB0ZXh0CisgICAgICAgICAgICAgICAgKyBsaW5lLnN1
YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4pOworCisgICAgICAgIHZhciBlbmQgPSB7CisgICAgICAg
ICAgICByb3cgOiBwb3NpdGlvbi5yb3csCisgICAgICAgICAgICBjb2x1bW4gOiBwb3NpdGlvbi5j
b2x1bW4gKyB0ZXh0Lmxlbmd0aAorICAgICAgICB9OworCisgICAgICAgIHZhciBkZWx0YSA9IHsK
KyAgICAgICAgICAgIGFjdGlvbjogImluc2VydFRleHQiLAorICAgICAgICAgICAgcmFuZ2U6IFJh
bmdlLmZyb21Qb2ludHMocG9zaXRpb24sIGVuZCksCisgICAgICAgICAgICB0ZXh0OiB0ZXh0Cisg
ICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7
CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rp
b24ocmFuZ2UpIHsKKyAgICAgICAgcmFuZ2Uuc3RhcnQgPSB0aGlzLiRjbGlwUG9zaXRpb24ocmFu
Z2Uuc3RhcnQpOworICAgICAgICByYW5nZS5lbmQgPSB0aGlzLiRjbGlwUG9zaXRpb24ocmFuZ2Uu
ZW5kKTsKKworICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJhbmdlLnN0YXJ0OworCisgICAgICAgIHZhciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsK
KyAgICAgICAgdmFyIGxhc3RSb3cgPSByYW5nZS5lbmQucm93OworCisgICAgICAgIGlmIChyYW5n
ZS5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAgICB2YXIgZmlyc3RGdWxsUm93ID0gcmFuZ2Uu
c3RhcnQuY29sdW1uID09IDAgPyBmaXJzdFJvdyA6IGZpcnN0Um93ICsgMTsKKyAgICAgICAgICAg
IHZhciBsYXN0RnVsbFJvdyA9IGxhc3RSb3cgLSAxOworCisgICAgICAgICAgICBpZiAocmFuZ2Uu
ZW5kLmNvbHVtbiA+IDApCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbkxpbmUobGFzdFJv
dywgMCwgcmFuZ2UuZW5kLmNvbHVtbik7CisKKyAgICAgICAgICAgIGlmIChsYXN0RnVsbFJvdyA+
PSBmaXJzdEZ1bGxSb3cpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhmaXJzdEZ1
bGxSb3csIGxhc3RGdWxsUm93KTsKKworICAgICAgICAgICAgaWYgKGZpcnN0RnVsbFJvdyAhPSBm
aXJzdFJvdykgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGZpcnN0Um93LCBy
YW5nZS5zdGFydC5jb2x1bW4sIHRoaXMuZ2V0TGluZShmaXJzdFJvdykubGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLnJlbW92ZU5ld0xpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucmVtb3Zl
SW5MaW5lKGZpcnN0Um93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKKyAgICB9OworICAgIHRoaXMu
cmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7Cisg
ICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgc3RhcnRDb2x1bW4sIHJvdywg
ZW5kQ29sdW1uKTsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAgICAg
ICAgdmFyIHJlbW92ZWQgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
KyAgICAgICAgdmFyIG5ld0xpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBs
aW5lLnN1YnN0cmluZyhlbmRDb2x1bW4sIGxpbmUubGVuZ3RoKTsKKyAgICAgICAgdGhpcy4kbGlu
ZXMuc3BsaWNlKHJvdywgMSwgbmV3TGluZSk7CisKKyAgICAgICAgdmFyIGRlbHRhID0geworICAg
ICAgICAgICAgYWN0aW9uOiAicmVtb3ZlVGV4dCIsCisgICAgICAgICAgICByYW5nZTogcmFuZ2Us
CisgICAgICAgICAgICB0ZXh0OiByZW1vdmVkCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiByYW5nZS5zdGFy
dDsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFz
dFJvdykgeworICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoZmlyc3RSb3csIDAsIGxhc3RS
b3cgKyAxLCAwKTsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLiRsaW5lcy5zcGxpY2UoZmly
c3RSb3csIGxhc3RSb3cgLSBmaXJzdFJvdyArIDEpOworCisgICAgICAgIHZhciBkZWx0YSA9IHsK
KyAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZUxpbmVzIiwKKyAgICAgICAgICAgIHJhbmdlOiBy
YW5nZSwKKyAgICAgICAgICAgIG5sOiB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSwKKyAgICAg
ICAgICAgIGxpbmVzOiByZW1vdmVkCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiByZW1vdmVkOworICAgIH07
CisgICAgdGhpcy5yZW1vdmVOZXdMaW5lID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHZhciBm
aXJzdExpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIHNlY29uZExpbmUgPSB0
aGlzLmdldExpbmUocm93KzEpOworCisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3cs
IGZpcnN0TGluZS5sZW5ndGgsIHJvdysxLCAwKTsKKyAgICAgICAgdmFyIGxpbmUgPSBmaXJzdExp
bmUgKyBzZWNvbmRMaW5lOworCisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShyb3csIDIsIGxp
bmUpOworCisgICAgICAgIHZhciBkZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlvbjogInJlbW92
ZVRleHQiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAgICAgICAgdGV4dDogdGhp
cy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZSA9IGZ1
bmN0aW9uKHJhbmdlLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwICYmIHJh
bmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKKyAgICAgICAg
aWYgKHRleHQgPT0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJu
IHJhbmdlLmVuZDsKKworICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7CisgICAgICAgIGlmICh0
ZXh0KSB7CisgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRl
eHQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5kID0gcmFuZ2Uu
c3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZW5kOworICAgIH07CisgICAgdGhp
cy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgeworICAgICAgICBmb3IgKHZhciBpPTA7
IGk8ZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNb
aV07CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnJhbmdl
LnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOworCisgICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9u
ID09ICJpbnNlcnRMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhyYW5n
ZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFj
dGlvbiA9PSAiaW5zZXJ0VGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFuZ2Uu
c3RhcnQsIGRlbHRhLnRleHQpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09
ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5nZS5z
dGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRh
LmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocmFu
Z2UpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnJldmVydERlbHRhcyA9IGZ1bmN0aW9u
KGRlbHRhcykgeworICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsgaS0t
KSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CisKKyAgICAgICAgICAgIHZh
ciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdl
LmVuZCk7CisKKyAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydExpbmVzIikK
KyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uu
ZW5kLnJvdyAtIDEpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNl
cnRUZXh0IikKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikKKyAgICAgICAgICAgICAg
ICB0aGlzLmluc2VydExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOworICAgICAg
ICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikKKyAgICAgICAgICAg
ICAgICB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgZGVsdGEudGV4dCk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93
KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGluZXMo
KTsKKyAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIo
KS5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBpbmRleCAtPSBsaW5lc1tpXS5sZW5n
dGggKyBuZXdsaW5lTGVuZ3RoOworICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCAr
IG5ld2xpbmVMZW5ndGh9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7cm93OiBsLTEsIGNv
bHVtbjogbGluZXNbbC0xXS5sZW5ndGh9OworICAgIH07CisgICAgdGhpcy5wb3NpdGlvblRvSW5k
ZXggPSBmdW5jdGlvbihwb3MsIHN0YXJ0Um93KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMu
JGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGluZXMoKTsKKyAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGgg
PSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CisgICAgICAgIHZhciBpbmRleCA9
IDA7CisgICAgICAgIHZhciByb3cgPSBNYXRoLm1pbihwb3Mucm93LCBsaW5lcy5sZW5ndGgpOwor
ICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQorICAgICAg
ICAgICAgaW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoOworCisgICAgICAgIHJldHVybiBpbmRleCAr
IG5ld2xpbmVMZW5ndGggKiBpICsgcG9zLmNvbHVtbjsKKyAgICB9OworCit9KS5jYWxsKERvY3Vt
ZW50LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvYW5jaG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIp
OwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVu
dEVtaXR0ZXI7CisKK3ZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywg
cm93LCBjb2x1bW4pIHsKKyAgICB0aGlzLmRvY3VtZW50ID0gZG9jOworICAgIAorICAgIGlmICh0
eXBlb2YgY29sdW1uID09ICJ1bmRlZmluZWQiKQorICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJv
dy5yb3csIHJvdy5jb2x1bW4pOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihy
b3csIGNvbHVtbik7CisKKyAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0
aGlzKTsKKyAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKK307CisKKyhmdW5j
dGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKworICAg
IHRoaXMuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGNs
aXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKKyAgICB9OworICAg
ICAgICAKKyAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmRvY3VtZW50OworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZhciByYW5nZSA9IGRl
bHRhLnJhbmdlOworICAgICAgICAgICAgCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0g
cmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA+IHRo
aXMucm93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGlmIChy
YW5nZS5zdGFydC5yb3cgPT0gdGhpcy5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uID4gdGhpcy5j
b2x1bW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgCisgICAgICAgIHZhciByb3cgPSB0aGlz
LnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uOworICAgICAgICAKKyAgICAg
ICAgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7CisgICAgICAgICAgICBpZiAo
cmFuZ2Uuc3RhcnQucm93ID09PSByb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDw9IGNvbHVtbikg
eworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT09IHJhbmdlLmVuZC5yb3cp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uICs9IHJhbmdlLmVuZC5jb2x1bW4gLSByYW5n
ZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gLT0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAg
ICAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy
YW5nZS5zdGFydC5yb3cgIT09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93IDwgcm93
KSB7CisgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5y
b3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09PSAi
aW5zZXJ0TGluZXMiKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJvdykg
eworICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlv
biA9PSAicmVtb3ZlVGV4dCIpIHsKKyAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0g
cm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IGNvbHVtbikgeworICAgICAgICAgICAgICAgIGlm
IChyYW5nZS5lbmQuY29sdW1uID49IGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u
ID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gKHJhbmdlLmVuZC5jb2x1bW4g
LSByYW5nZS5zdGFydC5jb2x1bW4pKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0
LnJvdyA8IHJvdykgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykg
eworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4gLSByYW5n
ZS5lbmQuY29sdW1uKSArIHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcm93IC09IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmVuZC5yb3cgPT0gcm93
KSB7CisgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5y
b3c7CisgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2Uu
ZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAgICAgICAgICAg
IGlmIChyYW5nZS5zdGFydC5yb3cgPD0gcm93KSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdl
LmVuZC5yb3cgPD0gcm93KQorICAgICAgICAgICAgICAgICAgICByb3cgLT0gcmFuZ2UuZW5kLnJv
dyAtIHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAgICAgICBjb2x1
bW4gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4sIHRydWUpOworICAgIH07CisKKyAg
ICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgeworICAg
ICAgICB2YXIgcG9zOworICAgICAgICBpZiAobm9DbGlwKSB7CisgICAgICAgICAgICBwb3MgPSB7
CisgICAgICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1
bW4KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBwb3MgPSB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHJvdywgY29sdW1uKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMucm93ID09IHBvcy5yb3cgJiYgdGhpcy5j
b2x1bW4gPT0gcG9zLmNvbHVtbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICB2YXIgb2xkID0geworICAgICAgICAgICAgcm93OiB0aGlzLnJvdywKKyAgICAgICAg
ICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHRo
aXMucm93ID0gcG9zLnJvdzsKKyAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOworICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7CisgICAgICAgICAgICBvbGQ6IG9sZCwKKyAgICAg
ICAgICAgIHZhbHVlOiBwb3MKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIHRoaXMuZGV0YWNo
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworICAgIH07CisgICAgdGhpcy4kY2xpcFBvc2l0
aW9uVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBwb3Mg
PSB7fTsKKyAgICAKKyAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgp
KSB7CisgICAgICAgICAgICBwb3Mucm93ID0gTWF0aC5tYXgoMCwgdGhpcy5kb2N1bWVudC5nZXRM
ZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgcG9zLmNvbHVtbiA9IHRoaXMuZG9jdW1lbnQuZ2V0
TGluZShwb3Mucm93KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocm93IDwg
MCkgeworICAgICAgICAgICAgcG9zLnJvdyA9IDA7CisgICAgICAgICAgICBwb3MuY29sdW1uID0g
MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7
CisgICAgICAgICAgICBwb3MuY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRMaW5l
KHBvcy5yb3cpLmxlbmd0aCwgTWF0aC5tYXgoMCwgY29sdW1uKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjb2x1bW4gPCAwKQorICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7
CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIAorfSkuY2Fs
bChBbmNob3IucHJvdG90eXBlKTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9iYWNrZ3JvdW5k
X3Rva2VuaXplcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBFdmVu
dEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwor
dmFyIE1BWF9MSU5FX0xFTkdUSCA9IDUwMDA7CisKK3ZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0g
ZnVuY3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHsKKyAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsK
KyAgICB0aGlzLmxpbmVzID0gW107CisgICAgdGhpcy5zdGF0ZXMgPSBbXTsKKyAgICB0aGlzLmN1
cnJlbnRMaW5lID0gMDsKKyAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjsKKworICAgIHZh
ciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuJHdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAoIXNlbGYucnVubmluZykgeyByZXR1cm47IH0KKworICAgICAgICB2YXIgd29ya2VyU3Rh
cnQgPSBuZXcgRGF0ZSgpOworICAgICAgICB2YXIgc3RhcnRMaW5lID0gc2VsZi5jdXJyZW50TGlu
ZTsKKyAgICAgICAgdmFyIGRvYyA9IHNlbGYuZG9jOworCisgICAgICAgIHZhciBwcm9jZXNzZWRM
aW5lcyA9IDA7CisKKyAgICAgICAgdmFyIGxlbiA9IGRvYy5nZXRMZW5ndGgoKTsKKyAgICAgICAg
d2hpbGUgKHNlbGYuY3VycmVudExpbmUgPCBsZW4pIHsKKyAgICAgICAgICAgIHNlbGYuJHRva2Vu
aXplUm93KHNlbGYuY3VycmVudExpbmUpOworICAgICAgICAgICAgd2hpbGUgKHNlbGYubGluZXNb
c2VsZi5jdXJyZW50TGluZV0pCisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TGluZSsrOwor
ICAgICAgICAgICAgcHJvY2Vzc2VkTGluZXMgKys7CisgICAgICAgICAgICBpZiAoKHByb2Nlc3Nl
ZExpbmVzICUgNSA9PSAwKSAmJiAobmV3IERhdGUoKSAtIHdvcmtlclN0YXJ0KSA+IDIwKSB7Cisg
ICAgICAgICAgICAgICAgc2VsZi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBzZWxmLmN1cnJl
bnRMaW5lLTEpOworICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IHNldFRpbWVvdXQoc2Vs
Zi4kd29ya2VyLCAyMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gZmFsc2U7CisKKyAgICAgICAgc2Vs
Zi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBsZW4gLSAxKTsKKyAgICB9OworfTsKKworKGZ1
bmN0aW9uKCl7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAg
dGhpcy5zZXRUb2tlbml6ZXIgPSBmdW5jdGlvbih0b2tlbml6ZXIpIHsKKyAgICAgICAgdGhpcy50
b2tlbml6ZXIgPSB0b2tlbml6ZXI7CisgICAgICAgIHRoaXMubGluZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5zdGF0ZXMgPSBbXTsKKworICAgICAgICB0aGlzLnN0YXJ0KDApOworICAgIH07CisgICAg
dGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykgeworICAgICAgICB0aGlzLmRvYyA9IGRv
YzsKKyAgICAgICAgdGhpcy5saW5lcyA9IFtdOworICAgICAgICB0aGlzLnN0YXRlcyA9IFtdOwor
CisgICAgICAgIHRoaXMuc3RvcCgpOworICAgIH07CisgICAgdGhpcy5maXJlVXBkYXRlRXZlbnQg
PSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgZGF0YSA9IHsKKyAg
ICAgICAgICAgIGZpcnN0OiBmaXJzdFJvdywKKyAgICAgICAgICAgIGxhc3Q6IGxhc3RSb3cKKyAg
ICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1pdCgidXBkYXRlIiwge2RhdGE6IGRhdGF9KTsKKyAg
ICB9OworICAgIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihzdGFydFJvdykgeworICAgICAgICB0aGlz
LmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3cgfHwgMCwgdGhpcy5jdXJyZW50TGluZSwg
dGhpcy5kb2MuZ2V0TGVuZ3RoKCkpOworICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSh0aGlzLmN1
cnJlbnRMaW5lLCB0aGlzLmxpbmVzLmxlbmd0aCk7CisgICAgICAgIHRoaXMuc3RhdGVzLnNwbGlj
ZSh0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLnN0YXRlcy5sZW5ndGgpOworCisgICAgICAgIHRoaXMu
c3RvcCgpOworICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwg
NzAwKTsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0
YSkgeworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAgdmFyIHN0YXJ0
Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGVuID0gcmFuZ2UuZW5kLnJvdyAt
IHN0YXJ0Um93OworCisgICAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMu
bGluZXNbc3RhcnRSb3ddID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24g
PT0gInJlbW92ZVRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7CisgICAg
ICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7CisgICAg
ICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTsKKyAg
ICAgICAgICAgIGFyZ3MudW5zaGlmdChzdGFydFJvdywgMSk7CisgICAgICAgICAgICB0aGlzLmxp
bmVzLnNwbGljZS5hcHBseSh0aGlzLmxpbmVzLCBhcmdzKTsKKyAgICAgICAgICAgIHRoaXMuc3Rh
dGVzLnNwbGljZS5hcHBseSh0aGlzLnN0YXRlcywgYXJncyk7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3csIHRoaXMuY3VycmVudExpbmUs
IHRoaXMuZG9jLmdldExlbmd0aCgpKTsKKworICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAgICAg
dGhpcy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7CisgICAgfTsKKyAg
ICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucnVubmluZykKKyAg
ICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJ1bm5pbmcpOworICAgICAgICB0aGlzLnJ1bm5p
bmcgPSBmYWxzZTsKKyAgICB9OworICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93KSB7
CisgICAgICAgIHJldHVybiB0aGlzLmxpbmVzW3Jvd10gfHwgdGhpcy4kdG9rZW5pemVSb3cocm93
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAg
aWYgKHRoaXMuY3VycmVudExpbmUgPT0gcm93KQorICAgICAgICAgICAgdGhpcy4kdG9rZW5pemVS
b3cocm93KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzW3Jvd10gfHwgInN0YXJ0IjsKKyAg
ICB9OworCisgICAgdGhpcy4kdG9rZW5pemVSb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAg
dmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBzdGF0ZSA9IHRo
aXMuc3RhdGVzW3JvdyAtIDFdOworCisgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IE1BWF9MSU5F
X0xFTkdUSCkgeworICAgICAgICAgICAgdmFyIG92ZXJmbG93ID0ge3ZhbHVlOiBsaW5lLnN1YnN0
cihNQVhfTElORV9MRU5HVEgpLCB0eXBlOiAidGV4dCJ9OworICAgICAgICAgICAgbGluZSA9IGxp
bmUuc2xpY2UoMCwgTUFYX0xJTkVfTEVOR1RIKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGF0
YSA9IHRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOworICAgICAgICBp
ZiAob3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIGRhdGEudG9rZW5zLnB1c2gob3ZlcmZsb3cpOwor
ICAgICAgICAgICAgZGF0YS5zdGF0ZSA9ICJzdGFydCI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodGhpcy5zdGF0ZXNbcm93XSArICIiICE9PSBkYXRhLnN0YXRlICsgIiIpIHsKKyAgICAgICAg
ICAgIHRoaXMuc3RhdGVzW3Jvd10gPSBkYXRhLnN0YXRlOworICAgICAgICAgICAgdGhpcy5saW5l
c1tyb3cgKyAxXSA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TGluZSA+IHJv
dyArIDEpCisgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7CisgICAg
ICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpIHsKKyAgICAgICAgICAgIHRo
aXMuY3VycmVudExpbmUgPSByb3cgKyAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXMubGluZXNbcm93XSA9IGRhdGEudG9rZW5zOworICAgIH07CisKK30pLmNhbGwoQmFja2dyb3Vu
ZFRva2VuaXplci5wcm90b3R5cGUpOworCitleHBvcnRzLkJhY2tncm91bmRUb2tlbml6ZXIgPSBC
YWNrZ3JvdW5kVG9rZW5pemVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9zZWFyY2hfaGlnaGxp
Z2h0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwordmFyIG9vcCA9
IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJh
bmdlOworCit2YXIgU2VhcmNoSGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmVnRXhwLCBjbGF6eiwgdHlw
ZSkgeworICAgIHRoaXMuc2V0UmVnZXhwKHJlZ0V4cCk7CisgICAgdGhpcy5jbGF6eiA9IGNsYXp6
OworICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgInRleHQiOworfTsKKworKGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuTUFYX1JBTkdFUyA9IDUwMDsKKyAgICAKKyAgICB0aGlzLnNldFJlZ2V4cCA9IGZ1
bmN0aW9uKHJlZ0V4cCkgeworICAgICAgICBpZiAodGhpcy5yZWdFeHArIiIgPT0gcmVnRXhwKyIi
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnJlZ0V4cCA9IHJlZ0V4cDsKKyAg
ICAgICAgdGhpcy5jYWNoZSA9IFtdOworICAgIH07CisKKyAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0
aW9uKGh0bWwsIG1hcmtlckxheWVyLCBzZXNzaW9uLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCF0
aGlzLnJlZ0V4cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHN0YXJ0ID0gY29u
ZmlnLmZpcnN0Um93LCBlbmQgPSBjb25maWcubGFzdFJvdzsKKworICAgICAgICBmb3IgKHZhciBp
ID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlz
LmNhY2hlW2ldOworICAgICAgICAgICAgaWYgKHJhbmdlcyA9PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgcmFuZ2VzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMoc2Vzc2lvbi5nZXRMaW5lKGkpLCB0
aGlzLnJlZ0V4cCk7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPiB0aGlzLk1B
WF9SQU5HRVMpCisgICAgICAgICAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zbGljZSgwLCB0
aGlzLk1BWF9SQU5HRVMpOworICAgICAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5tYXAoZnVu
Y3Rpb24obWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShpLCBt
YXRjaC5vZmZzZXQsIGksIG1hdGNoLm9mZnNldCArIG1hdGNoLmxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtpXSA9IHJhbmdlcy5sZW5ndGgg
PyByYW5nZXMgOiAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh2YXIgaiA9
IHJhbmdlcy5sZW5ndGg7IGogLS07ICkgeworICAgICAgICAgICAgICAgIG1hcmtlckxheWVyLmRy
YXdTaW5nbGVMaW5lTWFya2VyKAorICAgICAgICAgICAgICAgICAgICBodG1sLCByYW5nZXNbal0u
dG9TY3JlZW5SYW5nZShzZXNzaW9uKSwgdGhpcy5jbGF6eiwgY29uZmlnLAorICAgICAgICAgICAg
ICAgICAgICBudWxsLCB0aGlzLnR5cGUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChTZWFyY2hIaWdobGlnaHQucHJvdG90eXBl
KTsKKworZXhwb3J0cy5TZWFyY2hIaWdobGlnaHQgPSBTZWFyY2hIaWdobGlnaHQ7Cit9KTsKKwor
YWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUn
LCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIu
Li9yYW5nZSIpLlJhbmdlOwordmFyIEZvbGRMaW5lID0gcmVxdWlyZSgiLi9mb2xkX2xpbmUiKS5G
b2xkTGluZTsKK3ZhciBGb2xkID0gcmVxdWlyZSgiLi9mb2xkIikuRm9sZDsKK3ZhciBUb2tlbkl0
ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOworCitm
dW5jdGlvbiBGb2xkaW5nKCkgeworICAgIHRoaXMuZ2V0Rm9sZEF0ID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4sIHNpZGUpIHsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShy
b3cpOworICAgICAgICBpZiAoIWZvbGRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHM7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xkID0gZm9s
ZHNbaV07CisgICAgICAgICAgICBpZiAoZm9sZC5yYW5nZS5jb250YWlucyhyb3csIGNvbHVtbikp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2lkZSA9PSAxICYmIGZvbGQucmFuZ2UuaXNFbmQocm93
LCBjb2x1bW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2lkZSA9PSAtMSAmJiBmb2xkLnJhbmdlLmlzU3RhcnQocm93LCBjb2x1
bW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgdGhpcy5nZXRGb2xkc0luUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAg
ICAgICByYW5nZSA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0
YXJ0OworICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kOworICAgICAgICB2YXIgZm9sZExpbmVz
ID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIHZhciBmb3VuZEZvbGRzID0gW107CisKKyAgICAg
ICAgc3RhcnQuY29sdW1uICs9IDE7CisgICAgICAgIGVuZC5jb2x1bW4gLT0gMTsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgdmFyIGNtcCA9IGZvbGRMaW5lc1tpXS5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOworICAg
ICAgICAgICAgaWYgKGNtcCA9PSAyKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTIpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9s
ZExpbmVzW2ldLmZvbGRzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkcy5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZm9sZHNbal07CisgICAg
ICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOworICAgICAg
ICAgICAgICAgIGlmIChjbXAgPT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpZiAo
Y21wID09IDQyKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvdW5kRm9sZHM7CisgICAgfTsKKyAgICB0aGlz
LmdldEFsbEZvbGRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmb2xkcyA9IFtdOworICAg
ICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIAorICAgICAgICBm
dW5jdGlvbiBhZGRGb2xkKGZvbGQpIHsKKyAgICAgICAgICAgIGZvbGRzLnB1c2goZm9sZCk7Cisg
ICAgICAgICAgICBpZiAoIWZvbGQuc3ViRm9sZHMpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkLnN1
YkZvbGRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGFkZEZvbGQoZm9sZC5zdWJGb2xk
c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Zm9sZExpbmVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBm
b2xkTGluZXNbaV0uZm9sZHMubGVuZ3RoOyBqKyspCisgICAgICAgICAgICAgICAgYWRkRm9sZChm
b2xkTGluZXNbaV0uZm9sZHNbal0pOworCisgICAgICAgIHJldHVybiBmb2xkczsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0Rm9sZFN0cmluZ0F0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHRyaW0sIGZv
bGRMaW5lKSB7CisgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUgfHwgdGhpcy5nZXRGb2xkTGlu
ZShyb3cpOworICAgICAgICBpZiAoIWZvbGRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICAgICAgdmFyIGxhc3RGb2xkID0geworICAgICAgICAgICAgZW5kOiB7IGNvbHVtbjog
MCB9CisgICAgICAgIH07CisgICAgICAgIHZhciBzdHIsIGZvbGQ7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZm9sZExpbmUuZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZv
bGQgPSBmb2xkTGluZS5mb2xkc1tpXTsKKyAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkLnJhbmdl
LmNvbXBhcmVFbmQocm93LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewor
ICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLmdldExpbmUo
Zm9sZC5zdGFydC5yb3cpCisgICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcobGFzdEZvbGQu
ZW5kLmNvbHVtbiwgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY21wID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0Rm9s
ZCA9IGZvbGQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICBzdHIg
PSB0aGlzLmdldExpbmUoZm9sZC5zdGFydC5yb3cpLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQuY29s
dW1uKTsKKworICAgICAgICBpZiAodHJpbSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdHIu
c3Vic3RyaW5nKDAsIGNvbHVtbiAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pOworICAgICAgICBlbHNl
IGlmICh0cmltID09IDEpCisgICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZyhjb2x1bW4g
LSBsYXN0Rm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IHN0cjsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGRvY1Jvdywg
c3RhcnRGb2xkTGluZSkgeworICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsK
KyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICBpZiAoc3RhcnRGb2xkTGluZSkKKyAgICAgICAg
ICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpOworICAgICAgICBpZiAoaSA9
PSAtMSkKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0YS5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07Cisg
ICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdyAmJiBmb2xkTGluZS5l
bmQucm93ID49IGRvY1JvdykgeworICAgICAgICAgICAgICAgIHJldHVybiBmb2xkTGluZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZExpbmUuZW5kLnJvdyA+IGRvY1JvdykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgdGhpcy5nZXROZXh0Rm9sZExpbmUgPSBmdW5jdGlv
bihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4k
Zm9sZERhdGE7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUp
CisgICAgICAgICAgICBpID0gZm9sZERhdGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTsKKyAgICAg
ICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgZm9yIChpOyBpIDwg
Zm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGRE
YXRhW2ldOworICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRlZFJvd0Nv
dW50ID0gZnVuY3Rpb24oZmlyc3QsIGxhc3QpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhp
cy4kZm9sZERhdGEsIHJvd0NvdW50ID0gbGFzdC1maXJzdCsxOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExp
bmUgPSBmb2xkRGF0YVtpXSwKKyAgICAgICAgICAgICAgICBlbmQgPSBmb2xkTGluZS5lbmQucm93
LAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAg
ICAgaWYgKGVuZCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgaWYoc3RhcnQgPCBsYXN0KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0ID49IGZpcnN0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgcm93Q291bnQgLT0gbGFzdC1zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSAwOy8vaW4gb25lIGZvbGQKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgaWYoZW5kID49IGZpcnN0KXsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmlyc3Qp
IC8vZm9sZCBpbnNpZGUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0gIGVu
ZC1zdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJvd0Nv
dW50IC09ICBlbmQtZmlyc3QrMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcm93Q291bnQ7CisgICAgfTsKKworICAgIHRoaXMuJGFkZEZvbGRMaW5lID0gZnVuY3Rp
b24oZm9sZExpbmUpIHsKKyAgICAgICAgdGhpcy4kZm9sZERhdGEucHVzaChmb2xkTGluZSk7Cisg
ICAgICAgIHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAg
cmV0dXJuIGEuc3RhcnQucm93IC0gYi5zdGFydC5yb3c7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gZm9sZExpbmU7CisgICAgfTsKKyAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihwbGFj
ZWhvbGRlciwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7
CisgICAgICAgIHZhciBhZGRlZCA9IGZhbHNlOworICAgICAgICB2YXIgZm9sZDsKKyAgICAgICAg
CisgICAgICAgIGlmIChwbGFjZWhvbGRlciBpbnN0YW5jZW9mIEZvbGQpCisgICAgICAgICAgICBm
b2xkID0gcGxhY2Vob2xkZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbGQgPSBuZXcg
Rm9sZChyYW5nZSwgcGxhY2Vob2xkZXIpOworCisgICAgICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9j
dW1lbnQoZm9sZC5yYW5nZSk7CisKKyAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZC5zdGFydC5y
b3c7CisgICAgICAgIHZhciBzdGFydENvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAgICAg
ICB2YXIgZW5kUm93ID0gZm9sZC5lbmQucm93OworICAgICAgICB2YXIgZW5kQ29sdW1uID0gZm9s
ZC5lbmQuY29sdW1uOworICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93ICYmIGVuZENvbHVt
biAtIHN0YXJ0Q29sdW1uIDwgMikKKyAgICAgICAgICAgIHRocm93ICJUaGUgcmFuZ2UgaGFzIHRv
IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyB3aWR0aCI7CisKKyAgICAgICAgdmFyIHN0YXJ0Rm9s
ZCA9IHRoaXMuZ2V0Rm9sZEF0KHN0YXJ0Um93LCBzdGFydENvbHVtbiwgMSk7CisgICAgICAgIHZh
ciBlbmRGb2xkID0gdGhpcy5nZXRGb2xkQXQoZW5kUm93LCBlbmRDb2x1bW4sIC0xKTsKKyAgICAg
ICAgaWYgKHN0YXJ0Rm9sZCAmJiBlbmRGb2xkID09IHN0YXJ0Rm9sZCkKKyAgICAgICAgICAgIHJl
dHVybiBzdGFydEZvbGQuYWRkU3ViRm9sZChmb2xkKTsKKworICAgICAgICBpZiAoCisgICAgICAg
ICAgICAoc3RhcnRGb2xkICYmICFzdGFydEZvbGQucmFuZ2UuaXNTdGFydChzdGFydFJvdywgc3Rh
cnRDb2x1bW4pKQorICAgICAgICAgICAgfHwgKGVuZEZvbGQgJiYgIWVuZEZvbGQucmFuZ2UuaXNF
bmQoZW5kUm93LCBlbmRDb2x1bW4pKQorICAgICAgICApIHsKKyAgICAgICAgICAgIHRocm93ICJB
IGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZCIgKyBmb2xkLnJhbmdl
ICsgc3RhcnRGb2xkLnJhbmdlOworICAgICAgICB9CisgICAgICAgIHZhciBmb2xkcyA9IHRoaXMu
Z2V0Rm9sZHNJblJhbmdlKGZvbGQucmFuZ2UpOworICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhmb2xkcyk7CisgICAgICAgICAgICBm
b2xkLnN1YkZvbGRzID0gZm9sZHM7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUg
PSBmb2xkRGF0YVtpXTsKKyAgICAgICAgICAgIGlmIChlbmRSb3cgPT0gZm9sZExpbmUuc3RhcnQu
cm93KSB7CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTsKKyAgICAgICAg
ICAgICAgICBhZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGFydFJvdyA9PSBmb2xkTGluZS5lbmQucm93KSB7
CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTsKKyAgICAgICAgICAgICAg
ICBhZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFmb2xkLnNhbWVSb3cpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lTmV4dCA9IGZvbGREYXRhW2kgKyAxXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lTmV4dCAmJiBmb2xkTGluZU5leHQuc3RhcnQu
cm93ID09IGVuZFJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUubWVyZ2Uo
Zm9sZExpbmVOZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZW5kUm93IDw9IGZvbGRMaW5lLnN0
YXJ0LnJvdykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFhZGRlZCkKKyAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy4k
YWRkRm9sZExpbmUobmV3IEZvbGRMaW5lKHRoaXMuJGZvbGREYXRhLCBmb2xkKSk7CisKKyAgICAg
ICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERh
dGEoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShmb2xkTGluZS5zdGFydC5y
b3csIGZvbGRMaW5lLnN0YXJ0LnJvdyk7CisgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIsIHsgZGF0YTogZm9sZCB9KTsKKworICAg
ICAgICByZXR1cm4gZm9sZDsKKyAgICB9OworCisgICAgdGhpcy5hZGRGb2xkcyA9IGZ1bmN0aW9u
KGZvbGRzKSB7CisgICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAg
ICAgICAgdGhpcy5hZGRGb2xkKGZvbGQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisg
ICAgdGhpcy5yZW1vdmVGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAgICB2YXIgZm9sZExp
bmUgPSBmb2xkLmZvbGRMaW5lOworICAgICAgICB2YXIgc3RhcnRSb3cgPSBmb2xkTGluZS5zdGFy
dC5yb3c7CisgICAgICAgIHZhciBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93OworCisgICAgICAg
IHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAgICAgdmFyIGZvbGRzID0gZm9s
ZExpbmUuZm9sZHM7CisgICAgICAgIGlmIChmb2xkcy5sZW5ndGggPT0gMSkgeworICAgICAgICAg
ICAgZm9sZExpbmVzLnNwbGljZShmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSksIDEpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZvbGRMaW5lLnJhbmdlLmlzRW5kKGZvbGQuZW5kLnJv
dywgZm9sZC5lbmQuY29sdW1uKSkgeworICAgICAgICAgICAgZm9sZHMucG9wKCk7CisgICAgICAg
ICAgICBmb2xkTGluZS5lbmQucm93ID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLnJvdzsK
KyAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5jb2x1bW4gPSBmb2xkc1tmb2xkcy5sZW5ndGggLSAx
XS5lbmQuY29sdW1uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZvbGRMaW5lLnJhbmdl
LmlzU3RhcnQoZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKSkgeworICAgICAgICAg
ICAgZm9sZHMuc2hpZnQoKTsKKyAgICAgICAgICAgIGZvbGRMaW5lLnN0YXJ0LnJvdyA9IGZvbGRz
WzBdLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGZvbGRMaW5lLnN0YXJ0LmNvbHVtbiA9IGZvbGRz
WzBdLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChmb2xkLnNhbWVS
b3cpIHsKKyAgICAgICAgICAgIGZvbGRzLnNwbGljZShmb2xkcy5pbmRleE9mKGZvbGQpLCAxKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBuZXdGb2xkTGluZSA9
IGZvbGRMaW5lLnNwbGl0KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CisgICAg
ICAgICAgICBmb2xkcyA9IG5ld0ZvbGRMaW5lLmZvbGRzOworICAgICAgICAgICAgZm9sZHMuc2hp
ZnQoKTsKKyAgICAgICAgICAgIG5ld0ZvbGRMaW5lLnN0YXJ0LnJvdyA9IGZvbGRzWzBdLnN0YXJ0
LnJvdzsKKyAgICAgICAgICAgIG5ld0ZvbGRMaW5lLnN0YXJ0LmNvbHVtbiA9IGZvbGRzWzBdLnN0
YXJ0LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkK
KyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKHN0YXJ0Um93LCBlbmRSb3cpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShzdGFydFJv
dywgZW5kUm93KTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VGb2xkIiwgeyBkYXRhOiBmb2xkIH0pOworICAgIH07CisKKyAgICB0aGlz
LnJlbW92ZUZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsKKyAgICAgICAgdmFyIGNsb25lRm9sZHMg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgY2xvbmVGb2xkcy5wdXNoKGZvbGRzW2ldKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNsb25lRm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICB0aGlz
LnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZXhwYW5kRm9sZCA9IGZ1bmN0aW9uKGZv
bGQpIHsKKyAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpOworICAgICAgICBmb2xkLnN1YkZv
bGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5hZGRGb2xkKGZv
bGQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgZm9sZC5zdWJGb2xkcyA9IFtdOworICAg
IH07CisKKyAgICB0aGlzLmV4cGFuZEZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsKKyAgICAgICAg
Zm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICB0aGlzLmV4cGFuZEZv
bGQoZm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAgICB0aGlzLnVuZm9sZCA9
IGZ1bmN0aW9uKGxvY2F0aW9uLCBleHBhbmRJbm5lcikgeworICAgICAgICB2YXIgcmFuZ2UsIGZv
bGRzOworICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkKKyAgICAgICAgICAgIHJhbmdlID0g
bmV3IFJhbmdlKDAsIDAsIHRoaXMuZ2V0TGVuZ3RoKCksIDApOworICAgICAgICBlbHNlIGlmICh0
eXBlb2YgbG9jYXRpb24gPT0gIm51bWJlciIpCisgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5n
ZShsb2NhdGlvbiwgMCwgbG9jYXRpb24sIHRoaXMuZ2V0TGluZShsb2NhdGlvbikubGVuZ3RoKTsK
KyAgICAgICAgZWxzZSBpZiAoInJvdyIgaW4gbG9jYXRpb24pCisgICAgICAgICAgICByYW5nZSA9
IFJhbmdlLmZyb21Qb2ludHMobG9jYXRpb24sIGxvY2F0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmFuZ2UgPSBsb2NhdGlvbjsKKworICAgICAgICBmb2xkcyA9IHRoaXMuZ2V0Rm9s
ZHNJblJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKGV4cGFuZElubmVyKSB7CisgICAgICAgICAg
ICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHdoaWxlIChmb2xkcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGRz
KGZvbGRzKTsKKyAgICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKHJh
bmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5pc1Jvd0Zv
bGRlZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7CisgICAgICAgIHJldHVybiAh
IXRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRSb3cpOworICAgIH07CisKKyAgICB0
aGlzLmdldFJvd0ZvbGRFbmQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykgeworICAg
ICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93
KTsKKyAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuZW5kLnJvdyA6IGRvY1JvdzsK
KyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUgPSBmdW5jdGlvbihmb2xkTGlu
ZSwgZW5kUm93LCBlbmRDb2x1bW4sIHN0YXJ0Um93LCBzdGFydENvbHVtbikgeworICAgICAgICBp
ZiAoc3RhcnRSb3cgPT0gbnVsbCkgeworICAgICAgICAgICAgc3RhcnRSb3cgPSBmb2xkTGluZS5z
dGFydC5yb3c7CisgICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZW5kUm93ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVuZFJvdyA9IGZvbGRMaW5l
LmVuZC5yb3c7CisgICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmdldExpbmUoZW5kUm93KS5s
ZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOworICAgICAgICB2
YXIgdGV4dExpbmUgPSAiIjsKKworICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNl
aG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikgeworICAgICAgICAgICAgaWYgKHJvdyA8
IHN0YXJ0Um93KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyb3cgPT0gc3RhcnRSb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDwgc3Rh
cnRDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBsYXN0Q29sdW1uID0gTWF0aC5tYXgoc3RhcnRDb2x1bW4sIGxh
c3RDb2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9
IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBwbGFjZWhvbGRlcjsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dExpbmUgKz0gZG9jLmdldExpbmUo
cm93KS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfS5iaW5kKHRoaXMpLCBlbmRSb3csIGVuZENvbHVtbik7CisgICAgICAgIHJldHVybiB0ZXh0
TGluZTsKKyAgICB9OworCisgICAgdGhpcy5nZXREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKHJvdywg
ZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGRMaW5l
ID0gdGhpcy5nZXRGb2xkTGluZShyb3cpOworCisgICAgICAgIGlmICghZm9sZExpbmUpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lOworICAgICAgICAgICAgbGluZSA9IHRoaXMuZG9jLmdldExpbmUo
cm93KTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiB8fCAw
LCBlbmRDb2x1bW4gfHwgbGluZS5sZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKAorICAgICAgICAgICAgICAgIGZvbGRM
aW5lLCByb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0aGlzLiRjbG9uZUZvbGREYXRhID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBmZCA9IFtdOworICAgICAgICBmZCA9IHRoaXMuJGZvbGREYXRhLm1hcChmdW5jdGlvbihm
b2xkTGluZSkgeworICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHMubWFwKGZ1
bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5jbG9uZSgpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRMaW5lKGZkLCBmb2xkcyk7
CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBmZDsKKyAgICB9OworCisgICAgdGhpcy50
b2dnbGVGb2xkID0gZnVuY3Rpb24odHJ5VG9VbmZvbGQpIHsKKyAgICAgICAgdmFyIHNlbGVjdGlv
biA9IHRoaXMuc2VsZWN0aW9uOworICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFu
Z2UoKTsKKyAgICAgICAgdmFyIGZvbGQ7CisgICAgICAgIHZhciBicmFja2V0UG9zOworCisgICAg
ICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSByYW5n
ZS5zdGFydDsKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChjdXJzb3Iucm93LCBj
dXJzb3IuY29sdW1uKTsKKworICAgICAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYnJhY2tldFBvcyA9IHRoaXMuZmluZE1hdGNo
aW5nQnJhY2tldChjdXJzb3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmVQ
b2ludChicmFja2V0UG9zKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZCA9
IGJyYWNrZXRQb3M7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOworICAgICAgICAg
ICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICAgICAgcmFu
Z2UuZW5kLmNvbHVtbi0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGJyYWNrZXRQb3MgPSB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jv
dzogY3Vyc29yLnJvdywgY29sdW1uOiBjdXJzb3IuY29sdW1uICsgMX0pKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJhbmdlLmNvbXBhcmVQb2ludChicmFja2V0UG9zKSA9PSAxKQorICAgICAgICAg
ICAgICAgICAgICByYW5nZS5lbmQgPSBicmFja2V0UG9zOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOworCisgICAgICAg
ICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uKys7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0Q29tbWVudEZvbGRSYW5n
ZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKSB8fCByYW5nZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJh
bmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmICh0cnlUb1VuZm9sZCAmJiBmb2xkcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGRzKGZvbGRzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZm9sZHMu
bGVuZ3RoID09IDEgKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzWzBdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb2xkKQorICAgICAgICAgICAgZm9s
ZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsK
KworICAgICAgICBpZiAoZm9sZCAmJiBmb2xkLnJhbmdlLnRvU3RyaW5nKCkgPT0gcmFuZ2UudG9T
dHJpbmcoKSkgeworICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gIi4uLiI7
CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkgeworICAgICAgICAgICAgcGxhY2Vo
b2xkZXIgPSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBpZihwbGFjZWhv
bGRlci5sZW5ndGggPCA0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHBs
YWNlaG9sZGVyID0gcGxhY2Vob2xkZXIudHJpbSgpLnN1YnN0cmluZygwLCAyKSArICIuLiI7Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLmFkZEZvbGQocGxhY2Vob2xkZXIsIHJhbmdlKTsKKyAg
ICB9OworCisgICAgdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4sIGRpcikgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlz
LCByb3csIGNvbHVtbik7CisgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRU
b2tlbigpOworICAgICAgICBpZiAodG9rZW4gJiYgL15jb21tZW50fHN0cmluZy8udGVzdCh0b2tl
bi50eXBlKSkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKCk7CisgICAgICAg
ICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRva2VuLnR5cGUucmVwbGFjZSgvXC4uKi8sICJcXC4i
KSk7CisgICAgICAgICAgICBpZiAoZGlyICE9IDEpIHsKKyAgICAgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAg
ICAgICAgICAgICAgfSB3aGlsZSh0b2tlbiAmJiByZS50ZXN0KHRva2VuLnR5cGUpKTsKKyAgICAg
ICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW5Sb3coKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdl
dEN1cnJlbnRUb2tlbkNvbHVtbigpICsgMjsKKworICAgICAgICAgICAgaXRlcmF0b3IgPSBuZXcg
VG9rZW5JdGVyYXRvcih0aGlzLCByb3csIGNvbHVtbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChkaXIgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKKyAgICAgICAgICAgICAgICB9
IHdoaWxlKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworCisgICAgICAg
ICAgICByYW5nZS5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CisgICAg
ICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1u
KCkgKyB0b2tlbi52YWx1ZS5sZW5ndGggLSAyOworICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZm9sZEFsbCA9IGZ1bmN0aW9uKHN0YXJ0Um93
LCBlbmRSb3cpIHsKKyAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy5mb2xkV2lkZ2V0czsK
KyAgICAgICAgZW5kUm93ID0gZW5kUm93IHx8IHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodmFyIHJvdyA9IHN0YXJ0Um93IHx8IDA7IHJvdyA8IGVuZFJvdzsgcm93KyspIHsKKyAgICAg
ICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddID09IG51bGwpCisgICAgICAgICAgICAgICAgZm9s
ZFdpZGdldHNbcm93XSA9IHRoaXMuZ2V0Rm9sZFdpZGdldChyb3cpOworICAgICAgICAgICAgaWYg
KGZvbGRXaWRnZXRzW3Jvd10gIT0gInN0YXJ0IikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93KTsK
KyAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93IDw9IGVuZFJvdykgdHJ5IHsK
KyAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKKyAgICAgICAgICAg
IH0gY2F0Y2goZSkge30KKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdGhpcy4kZm9sZFN0
eWxlcyA9IHsKKyAgICAgICAgIm1hbnVhbCI6IDEsCisgICAgICAgICJtYXJrYmVnaW4iOiAxLAor
ICAgICAgICAibWFya2JlZ2luZW5kIjogMQorICAgIH07CisgICAgdGhpcy4kZm9sZFN0eWxlID0g
Im1hcmtiZWdpbiI7CisgICAgdGhpcy5zZXRGb2xkU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgewor
ICAgICAgICBpZiAoIXRoaXMuJGZvbGRTdHlsZXNbc3R5bGVdKQorICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJpbnZhbGlkIGZvbGQgc3R5bGU6ICIgKyBzdHlsZSArICJbIiArIE9iamVjdC5r
ZXlzKHRoaXMuJGZvbGRTdHlsZXMpLmpvaW4oIiwgIikgKyAiXSIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHRoaXMuJGZvbGRTdHlsZSA9PSBzdHlsZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLiRmb2xkU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgCisgICAgICAgIGlmIChz
dHlsZSA9PSAibWFudWFsIikKKyAgICAgICAgICAgIHRoaXMudW5mb2xkKCk7CisgICAgICAgIHZh
ciBtb2RlID0gdGhpcy4kZm9sZE1vZGU7CisgICAgICAgIHRoaXMuJHNldEZvbGRpbmcobnVsbCk7
CisgICAgICAgIHRoaXMuJHNldEZvbGRpbmcobW9kZSk7CisgICAgfTsKKyAgICB0aGlzLiRzZXRG
b2xkaW5nID0gZnVuY3Rpb24oZm9sZE1vZGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJGZvbGRNb2Rl
ID09IGZvbGRNb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IHRoaXMuJGZvbGRNb2RlID0gZm9sZE1vZGU7CisgICAgICAgIAorICAgICAgICB0aGlzLnJlbW92
ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZm9s
ZE1vZGUgfHwgdGhpcy4kZm9sZFN0eWxlID09ICJtYW51YWwiKSB7CisgICAgICAgICAgICB0aGlz
LmZvbGRXaWRnZXRzID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9IFtdOworICAgICAgICB0aGlzLmdldEZv
bGRXaWRnZXQgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0LmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRo
aXMuJGZvbGRTdHlsZSk7CisgICAgICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZm9sZE1v
ZGUuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHls
ZSk7CisgICAgICAgIAorICAgICAgICB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMudXBk
YXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbignY2hhbmdlJywgdGhp
cy4kdXBkYXRlRm9sZFdpZGdldHMpOworICAgICAgICAKKyAgICB9OworCisgICAgdGhpcy5vbkZv
bGRXaWRnZXRDbGljayA9IGZ1bmN0aW9uKHJvdywgZSkgeworICAgICAgICBlID0gZS5kb21FdmVu
dDsKKyAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTsKKyAgICAgICAg
dmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG9ubHlTdWJmb2xkcyA9
IGUuc2hpZnRLZXk7CisgICAgICAgIHZhciBhZGRTdWJmb2xkcyA9IG9ubHlTdWJmb2xkcyB8fCBl
LmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5OworICAgICAgICB2YXIgZm9sZDsKKwor
ICAgICAgICBpZiAodHlwZSA9PSAiZW5kIikKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZv
bGRBdChyb3csIDAsIC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9sZCA9IHRoaXMu
Z2V0Rm9sZEF0KHJvdywgbGluZS5sZW5ndGgsIDEpOworCisgICAgICAgIGlmIChmb2xkKSB7Cisg
ICAgICAgICAgICBpZiAoYWRkU3ViZm9sZHMpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVG
b2xkKGZvbGQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5k
Rm9sZChmb2xkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdyk7CisgICAgICAgIGlmIChyYW5n
ZSkgeworICAgICAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAg
ICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQu
Y29sdW1uLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZCAmJiByYW5nZS5pc0VxdWFsKGZv
bGQucmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFvbmx5U3ViZm9sZHMpCisgICAg
ICAgICAgICAgICAgdGhpcy5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisKKyAgICAgICAgICAgIGlm
IChhZGRTdWJmb2xkcykKKyAgICAgICAgICAgICAgICB0aGlzLmZvbGRBbGwocmFuZ2Uuc3RhcnQu
cm93ICsgMSwgcmFuZ2UuZW5kLnJvdyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoYWRkU3ViZm9sZHMpCisgICAgICAgICAgICAgICAgdGhpcy5mb2xkQWxsKHJvdyArIDEsIHRo
aXMuZ2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgKGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudCku
Y2xhc3NOYW1lICs9ICIgYWNlX2ludmFsaWQiCisgICAgICAgIH0KKyAgICB9OworICAgIAorICAg
IHRoaXMudXBkYXRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkZWx0
YSA9IGUuZGF0YTsKKyAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZh
ciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGxlbiA9IHJhbmdlLmVu
ZC5yb3cgLSBmaXJzdFJvdzsKKworICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAg
ICB0aGlzLmZvbGRXaWRnZXRzW2ZpcnN0Um93XSA9IG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAo
ZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IiB8fCBkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxp
bmVzIikgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZmlyc3RSb3csIGxl
biArIDEsIG51bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBB
cnJheShsZW4gKyAxKTsKKyAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7Cisg
ICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZS5hcHBseSh0aGlzLmZvbGRXaWRnZXRz
LCBhcmdzKTsKKyAgICAgICAgfQorICAgIH07CisKK30KKworZXhwb3J0cy5Gb2xkaW5nID0gRm9s
ZGluZzsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4v
cmFuZ2UiKS5SYW5nZTsKK2Z1bmN0aW9uIEZvbGRMaW5lKGZvbGREYXRhLCBmb2xkcykgeworICAg
IHRoaXMuZm9sZERhdGEgPSBmb2xkRGF0YTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShmb2xkcykp
IHsKKyAgICAgICAgdGhpcy5mb2xkcyA9IGZvbGRzOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
bGRzID0gdGhpcy5mb2xkcyA9IFsgZm9sZHMgXTsKKyAgICB9CisKKyAgICB2YXIgbGFzdCA9IGZv
bGRzW2ZvbGRzLmxlbmd0aCAtIDFdCisgICAgdGhpcy5yYW5nZSA9IG5ldyBSYW5nZShmb2xkc1sw
XS5zdGFydC5yb3csIGZvbGRzWzBdLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhc3QuZW5kLnJvdywgbGFzdC5lbmQuY29sdW1uKTsKKyAgICB0aGlzLnN0YXJ0ID0g
dGhpcy5yYW5nZS5zdGFydDsKKyAgICB0aGlzLmVuZCAgID0gdGhpcy5yYW5nZS5lbmQ7CisKKyAg
ICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICBmb2xkLnNldEZv
bGRMaW5lKHRoaXMpOworICAgIH0sIHRoaXMpOworfQorCisoZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5zaGlmdFJvdyA9IGZ1bmN0aW9uKHNoaWZ0KSB7CisgICAgICAgIHRoaXMuc3RhcnQucm93ICs9
IHNoaWZ0OworICAgICAgICB0aGlzLmVuZC5yb3cgKz0gc2hpZnQ7CisgICAgICAgIHRoaXMuZm9s
ZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICBmb2xkLnN0YXJ0LnJvdyAr
PSBzaGlmdDsKKyAgICAgICAgICAgIGZvbGQuZW5kLnJvdyArPSBzaGlmdDsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgdGhpcy5hZGRGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAgICBp
ZiAoZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICBpZiAoZm9sZC5zdGFydC5yb3cgPCB0aGlz
LnN0YXJ0Um93IHx8IGZvbGQuZW5kUm93ID4gdGhpcy5lbmRSb3cpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvdyAiQ2FuJ3QgYWRkIGEgZm9sZCB0byB0aGlzIEZvbGRMaW5lIGFzIGl0IGhhcyBubyBj
b25uZWN0aW9uIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZm9sZHMucHVzaChm
b2xkKTsKKyAgICAgICAgICAgIHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIC1hLnJhbmdlLmNvbXBhcmVFbmQoYi5zdGFydC5yb3csIGIuc3Rh
cnQuY29sdW1uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2Uu
Y29tcGFyZUVuZChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pID4gMCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGQuZW5kLnJvdzsKKyAgICAgICAgICAgICAg
ICB0aGlzLmVuZC5jb2x1bW4gPSAgZm9sZC5lbmQuY29sdW1uOworICAgICAgICAgICAgfSBlbHNl
IGlmICh0aGlzLnJhbmdlLmNvbXBhcmVTdGFydChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVt
bikgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJv
dzsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1u
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3RhcnQucm93ID09IHRo
aXMuZW5kLnJvdykgeworICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNoKGZvbGQpOworICAgICAg
ICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OworICAgICAgICAgICAgdGhpcy5lbmQu
Y29sdW1uID0gZm9sZC5lbmQuY29sdW1uOworICAgICAgICB9IGVsc2UgaWYgKGZvbGQuZW5kLnJv
dyA9PSB0aGlzLnN0YXJ0LnJvdykgeworICAgICAgICAgICAgdGhpcy5mb2xkcy51bnNoaWZ0KGZv
bGQpOworICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdzsKKyAgICAg
ICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0aHJvdyAiVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRSb3cg
dGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciOworICAgICAgICB9CisgICAgICAgIGZv
bGQuZm9sZExpbmUgPSB0aGlzOworICAgIH0KKworICAgIHRoaXMuY29udGFpbnNSb3cgPSBmdW5j
dGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHJvdyA+PSB0aGlzLnN0YXJ0LnJvdyAmJiByb3cg
PD0gdGhpcy5lbmQucm93OworICAgIH0KKworICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKGNhbGxi
YWNrLCBlbmRSb3csIGVuZENvbHVtbikgeworICAgICAgICB2YXIgbGFzdEVuZCA9IDAsCisgICAg
ICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHMsCisgICAgICAgICAgICBmb2xkLAorICAgICAgICAg
ICAgY29tcCwgc3RvcCwgaXNOZXdSb3cgPSB0cnVlOworCisgICAgICAgIGlmIChlbmRSb3cgPT0g
bnVsbCkgeworICAgICAgICAgICAgZW5kUm93ID0gdGhpcy5lbmQucm93OworICAgICAgICAgICAg
ZW5kQ29sdW1uID0gdGhpcy5lbmQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9sZCA9IGZv
bGRzW2ldOworCisgICAgICAgICAgICBjb21wID0gZm9sZC5yYW5nZS5jb21wYXJlU3RhcnQoZW5k
Um93LCBlbmRDb2x1bW4pOworICAgICAgICAgICAgaWYgKGNvbXAgPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNOZXdS
b3cpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3RvcCA9IGNhbGxiYWNrKG51bGwsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVt
biwgbGFzdEVuZCwgaXNOZXdSb3cpOworICAgICAgICAgICAgc3RvcCA9ICFzdG9wICYmIGNhbGxi
YWNrKGZvbGQucGxhY2Vob2xkZXIsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwg
bGFzdEVuZCk7CisgICAgICAgICAgICBpZiAoc3RvcCB8fCBjb21wID09IDApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc05ld1JvdyA9ICFm
b2xkLnNhbWVSb3c7CisgICAgICAgICAgICBsYXN0RW5kID0gZm9sZC5lbmQuY29sdW1uOworICAg
ICAgICB9CisgICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5k
LCBpc05ld1Jvdyk7CisgICAgfQorCisgICAgdGhpcy5nZXROZXh0Rm9sZFRvID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGQsIGNtcDsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb2xkID0g
dGhpcy5mb2xkc1tpXTsKKyAgICAgICAgICAgIGNtcCA9IGZvbGQucmFuZ2UuY29tcGFyZUVuZChy
b3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgZm9sZDogZm9sZCwKKyAgICAgICAgICAg
ICAgICAgICAga2luZDogImFmdGVyIgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGNtcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9sZDogZm9sZCwKKyAgICAgICAgICAgICAgICAgICAga2luZDogImluc2lk
ZSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdGhpcy5hZGRSZW1vdmVDaGFycyA9IGZ1bmN0aW9u
KHJvdywgY29sdW1uLCBsZW4pIHsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMuZ2V0TmV4dEZvbGRU
byhyb3csIGNvbHVtbiksCisgICAgICAgICAgICBmb2xkLCBmb2xkczsKKyAgICAgICAgaWYgKHJl
dCkgeworICAgICAgICAgICAgZm9sZCA9IHJldC5mb2xkOworICAgICAgICAgICAgaWYgKHJldC5r
aW5kID09ICJpbnNpZGUiCisgICAgICAgICAgICAgICAgJiYgZm9sZC5zdGFydC5jb2x1bW4gIT0g
Y29sdW1uCisgICAgICAgICAgICAgICAgJiYgZm9sZC5zdGFydC5yb3cgIT0gcm93KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xl
LmxvZyhyb3csIGNvbHVtbiwgZm9sZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3Rh
cnQucm93ID09IHJvdykgeworICAgICAgICAgICAgICAgIGZvbGRzID0gdGhpcy5mb2xkczsKKyAg
ICAgICAgICAgICAgICB2YXIgaSA9IGZvbGRzLmluZGV4T2YoZm9sZCk7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiAr
PSBsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaTsgaSA8IGZv
bGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgZm9sZC5zdGFydC5jb2x1bW4gKz0gbGVuOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvbGQu
ZW5kLmNvbHVtbiArPSBsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuZW5kLmNvbHVtbiArPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB0aGlzLnNwbGl0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIGZv
bGQgPSB0aGlzLmdldE5leHRGb2xkVG8ocm93LCBjb2x1bW4pLmZvbGQsCisgICAgICAgICAgICBm
b2xkcyA9IHRoaXMuZm9sZHM7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuZm9sZERhdGE7
CisKKyAgICAgICAgaWYgKCFmb2xkKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaSA9IGZvbGRzLmluZGV4T2YoZm9sZCk7CisgICAgICAgIHZhciBm
b2xkQmVmb3JlID0gZm9sZHNbaSAtIDFdOworICAgICAgICB0aGlzLmVuZC5yb3cgPSBmb2xkQmVm
b3JlLmVuZC5yb3c7CisgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGZvbGRCZWZvcmUuZW5kLmNv
bHVtbjsKKyAgICAgICAgZm9sZHMgPSBmb2xkcy5zcGxpY2UoaSwgZm9sZHMubGVuZ3RoIC0gaSk7
CisKKyAgICAgICAgdmFyIG5ld0ZvbGRMaW5lID0gbmV3IEZvbGRMaW5lKGZvbGREYXRhLCBmb2xk
cyk7CisgICAgICAgIGZvbGREYXRhLnNwbGljZShmb2xkRGF0YS5pbmRleE9mKHRoaXMpICsgMSwg
MCwgbmV3Rm9sZExpbmUpOworICAgICAgICByZXR1cm4gbmV3Rm9sZExpbmU7CisgICAgfQorCisg
ICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKGZvbGRMaW5lTmV4dCkgeworICAgICAgICB2YXIgZm9s
ZHMgPSBmb2xkTGluZU5leHQuZm9sZHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9s
ZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkc1tpXSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTsKKyAgICAgICAg
Zm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YoZm9sZExpbmVOZXh0KSwgMSk7CisgICAg
fQorCisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmV0ID0g
W3RoaXMucmFuZ2UudG9TdHJpbmcoKSArICI6IFsiIF07CisKKyAgICAgICAgdGhpcy5mb2xkcy5m
b3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHJldC5wdXNoKCIgICIgKyBmb2xk
LnRvU3RyaW5nKCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0LnB1c2goIl0iKQorICAgICAg
ICByZXR1cm4gcmV0LmpvaW4oIlxuIik7CisgICAgfQorCisgICAgdGhpcy5pZHhUb1Bvc2l0aW9u
ID0gZnVuY3Rpb24oaWR4KSB7CisgICAgICAgIHZhciBsYXN0Rm9sZEVuZENvbHVtbiA9IDA7Cisg
ICAgICAgIHZhciBmb2xkOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xk
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmZvbGRzW2ldOwor
CisgICAgICAgICAgICBpZHggLT0gZm9sZC5zdGFydC5jb2x1bW4gLSBsYXN0Rm9sZEVuZENvbHVt
bjsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgcm93OiBmb2xkLnN0YXJ0LnJvdywKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uOiBmb2xkLnN0YXJ0LmNvbHVtbiArIGlkeAorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlkeCAtPSBmb2xkLnBsYWNlaG9sZGVyLmxl
bmd0aDsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZvbGQuc3RhcnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3RGb2xkRW5kQ29s
dW1uID0gZm9sZC5lbmQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHJvdzogdGhpcy5lbmQucm93LAorICAgICAgICAgICAgY29sdW1uOiB0aGlzLmVu
ZC5jb2x1bW4gKyBpZHgKKyAgICAgICAgfTsKKyAgICB9Cit9KS5jYWxsKEZvbGRMaW5lLnByb3Rv
dHlwZSk7CisKK2V4cG9ydHMuRm9sZExpbmUgPSBGb2xkTGluZTsKK30pOworCithY2UuZGVmaW5l
KCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIEZvbGQgPSBleHBv
cnRzLkZvbGQgPSBmdW5jdGlvbihyYW5nZSwgcGxhY2Vob2xkZXIpIHsKKyAgICB0aGlzLmZvbGRM
aW5lID0gbnVsbDsKKyAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7CisgICAgdGhp
cy5yYW5nZSA9IHJhbmdlOworICAgIHRoaXMuc3RhcnQgPSByYW5nZS5zdGFydDsKKyAgICB0aGlz
LmVuZCA9IHJhbmdlLmVuZDsKKworICAgIHRoaXMuc2FtZVJvdyA9IHJhbmdlLnN0YXJ0LnJvdyA9
PSByYW5nZS5lbmQucm93OworICAgIHRoaXMuc3ViRm9sZHMgPSBbXTsKK307CisKKyhmdW5jdGlv
bigpIHsKKworICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
ICciJyArIHRoaXMucGxhY2Vob2xkZXIgKyAnIiAnICsgdGhpcy5yYW5nZS50b1N0cmluZygpOwor
ICAgIH07CisKKyAgICB0aGlzLnNldEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHsKKyAg
ICAgICAgdGhpcy5mb2xkTGluZSA9IGZvbGRMaW5lOworICAgICAgICB0aGlzLnN1YkZvbGRzLmZv
ckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgZm9sZC5zZXRGb2xkTGluZShmb2xk
TGluZSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2UuY2xvbmUoKTsKKyAgICAgICAgdmFy
IGZvbGQgPSBuZXcgRm9sZChyYW5nZSwgdGhpcy5wbGFjZWhvbGRlcik7CisgICAgICAgIHRoaXMu
c3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7CisgICAgICAgICAgICBmb2xkLnN1
YkZvbGRzLnB1c2goc3ViRm9sZC5jbG9uZSgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBmb2xkOworICAgIH07CisKKyAgICB0aGlzLmFkZFN1YkZvbGQgPSBmdW5jdGlvbihmb2xkKSB7
CisgICAgICAgIGlmICh0aGlzLnJhbmdlLmlzRXF1YWwoZm9sZCkpCisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKworICAgICAgICBpZiAoIXRoaXMucmFuZ2UuY29udGFpbnNSYW5nZShmb2xkKSkK
KyAgICAgICAgICAgIHRocm93ICJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3Rp
bmcgZm9sZCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZTsKKworICAgICAgICB2YXIgcm93ID0g
Zm9sZC5yYW5nZS5zdGFydC5yb3csIGNvbHVtbiA9IGZvbGQucmFuZ2Uuc3RhcnQuY29sdW1uOwor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgY21wID0gLTE7IGkgPCB0aGlzLnN1YkZvbGRzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBjbXAgPSB0aGlzLnN1YkZvbGRzW2ldLnJhbmdlLmNvbXBh
cmUocm93LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKGNtcCAhPSAxKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciBhZnRlclN0YXJ0ID0gdGhpcy5zdWJG
b2xkc1tpXTsKKworICAgICAgICBpZiAoY21wID09IDApCisgICAgICAgICAgICByZXR1cm4gYWZ0
ZXJTdGFydC5hZGRTdWJGb2xkKGZvbGQpOworICAgICAgICB2YXIgcm93ID0gZm9sZC5yYW5nZS5l
bmQucm93LCBjb2x1bW4gPSBmb2xkLnJhbmdlLmVuZC5jb2x1bW47CisgICAgICAgIGZvciAodmFy
IGogPSBpLCBjbXAgPSAtMTsgaiA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBqKyspIHsKKyAgICAg
ICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbal0ucmFuZ2UuY29tcGFyZShyb3csIGNvbHVtbik7
CisgICAgICAgICAgICBpZiAoY21wICE9IDEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGFmdGVyRW5kID0gdGhpcy5zdWJGb2xkc1tqXTsKKworICAgICAg
ICBpZiAoY21wID09IDApCisgICAgICAgICAgICB0aHJvdyAiQSBmb2xkIGNhbid0IGludGVyc2Vj
dCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9sZC5yYW5nZSArIHRoaXMucmFuZ2U7CisKKyAg
ICAgICAgdmFyIGNvbnN1bWVkRm9sZHMgPSB0aGlzLnN1YkZvbGRzLnNwbGljZShpLCBqIC0gaSwg
Zm9sZCk7CisgICAgICAgIGZvbGQuc2V0Rm9sZExpbmUodGhpcy5mb2xkTGluZSk7CisKKyAgICAg
ICAgcmV0dXJuIGZvbGQ7CisgICAgfTsKKworfSkuY2FsbChGb2xkLnByb3RvdHlwZSk7CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvdG9rZW5faXRlcmF0b3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFy
IFRva2VuSXRlcmF0b3IgPSBmdW5jdGlvbihzZXNzaW9uLCBpbml0aWFsUm93LCBpbml0aWFsQ29s
dW1uKSB7CisgICAgdGhpcy4kc2Vzc2lvbiA9IHNlc3Npb247CisgICAgdGhpcy4kcm93ID0gaW5p
dGlhbFJvdzsKKyAgICB0aGlzLiRyb3dUb2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhpbml0aWFs
Um93KTsKKworICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChpbml0aWFsUm93LCBp
bml0aWFsQ29sdW1uKTsKKyAgICB0aGlzLiR0b2tlbkluZGV4ID0gdG9rZW4gPyB0b2tlbi5pbmRl
eCA6IC0xOworfTsKKworKGZ1bmN0aW9uKCkgeyAKKyAgICB0aGlzLnN0ZXBCYWNrd2FyZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLiR0b2tlbkluZGV4IC09IDE7CisgICAgICAgIAorICAg
ICAgICB3aGlsZSAodGhpcy4kdG9rZW5JbmRleCA8IDApIHsKKyAgICAgICAgICAgIHRoaXMuJHJv
dyAtPSAxOworICAgICAgICAgICAgaWYgKHRoaXMuJHJvdyA8IDApIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLiRyb3cgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0gdGhp
cy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKKyAgICAgICAgICAgIHRoaXMuJHRva2Vu
SW5kZXggPSB0aGlzLiRyb3dUb2tlbnMubGVuZ3RoIC0gMTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07Cisg
ICAgfTsgICAKKyAgICB0aGlzLnN0ZXBGb3J3YXJkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciByb3dDb3VudCA9IHRoaXMuJHNlc3Npb24uZ2V0TGVuZ3RoKCk7CisgICAgICAgIHRoaXMuJHRv
a2VuSW5kZXggKz0gMTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0aGlzLiR0b2tlbkluZGV4
ID49IHRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuJHJvdyArPSAx
OworICAgICAgICAgICAgaWYgKHRoaXMuJHJvdyA+PSByb3dDb3VudCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuJHJvdyA9IHJvd0NvdW50IC0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0gdGhpcy4k
c2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKKyAgICAgICAgICAgIHRoaXMuJHRva2VuSW5k
ZXggPSAwOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuJHJv
d1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsKKyAgICB9OyAgICAgIAorICAgIHRoaXMuZ2V0Q3Vy
cmVudFRva2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9rZW5z
W3RoaXMuJHRva2VuSW5kZXhdOworICAgIH07ICAgICAgCisgICAgdGhpcy5nZXRDdXJyZW50VG9r
ZW5Sb3cgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyb3c7CisgICAgfTsg
ICAgIAorICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciByb3dUb2tlbnMgPSB0aGlzLiRyb3dUb2tlbnM7CisgICAgICAgIHZhciB0b2tlbklu
ZGV4ID0gdGhpcy4kdG9rZW5JbmRleDsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHJvd1Rva2Vuc1t0
b2tlbkluZGV4XS5zdGFydDsKKyAgICAgICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkKQorICAg
ICAgICAgICAgcmV0dXJuIGNvbHVtbjsKKyAgICAgICAgICAgIAorICAgICAgICBjb2x1bW4gPSAw
OworICAgICAgICB3aGlsZSAodG9rZW5JbmRleCA+IDApIHsKKyAgICAgICAgICAgIHRva2VuSW5k
ZXggLT0gMTsKKyAgICAgICAgICAgIGNvbHVtbiArPSByb3dUb2tlbnNbdG9rZW5JbmRleF0udmFs
dWUubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY29sdW1uOyAg
CisgICAgfTsKKyAgICAgICAgICAgIAorfSkuY2FsbChUb2tlbkl0ZXJhdG9yLnByb3RvdHlwZSk7
CisKK2V4cG9ydHMuVG9rZW5JdGVyYXRvciA9IFRva2VuSXRlcmF0b3I7Cit9KTsKKworYWNlLmRl
ZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL3JhbmdlJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBUb2tlbkl0ZXJhdG9yID0g
cmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwordmFyIFJhbmdlID0g
cmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKworCitmdW5jdGlvbiBCcmFja2V0TWF0Y2goKSB7
CisKKyAgICB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQgPSBmdW5jdGlvbihwb3NpdGlvbiwgY2hh
cikgeworICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IDApIHJldHVybiBudWxsOworCisg
ICAgICAgIHZhciBjaGFyQmVmb3JlQ3Vyc29yID0gY2hhciB8fCB0aGlzLmdldExpbmUocG9zaXRp
b24ucm93KS5jaGFyQXQocG9zaXRpb24uY29sdW1uLTEpOworICAgICAgICBpZiAoY2hhckJlZm9y
ZUN1cnNvciA9PSAiIikgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIG1hdGNoID0gY2hhckJl
Zm9yZUN1cnNvci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7CisgICAgICAgIGlmICgh
bWF0Y2gpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAobWF0Y2hbMV0p
CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG1hdGNoWzFdLCBw
b3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiRmaW5kT3Bl
bmluZ0JyYWNrZXQobWF0Y2hbMl0sIHBvc2l0aW9uKTsKKyAgICB9OworICAgIAorICAgIHRoaXMu
Z2V0QnJhY2tldFJhbmdlID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHZhciBsaW5lID0gdGhp
cy5nZXRMaW5lKHBvcy5yb3cpOworICAgICAgICB2YXIgYmVmb3JlID0gdHJ1ZSwgcmFuZ2U7CisK
KyAgICAgICAgdmFyIGNociA9IGxpbmUuY2hhckF0KHBvcy5jb2x1bW4tMSk7CisgICAgICAgIHZh
ciBtYXRjaCA9IGNociAmJiBjaHIubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pOworICAg
ICAgICBpZiAoIW1hdGNoKSB7CisgICAgICAgICAgICBjaHIgPSBsaW5lLmNoYXJBdChwb3MuY29s
dW1uKTsKKyAgICAgICAgICAgIHBvcyA9IHtyb3c6IHBvcy5yb3csIGNvbHVtbjogcG9zLmNvbHVt
biArIDF9OworICAgICAgICAgICAgbWF0Y2ggPSBjaHIgJiYgY2hyLm1hdGNoKC8oW1woXFtce10p
fChbXClcXVx9XSkvKTsKKyAgICAgICAgICAgIGJlZm9yZSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBp
ZiAobWF0Y2hbMV0pIHsKKyAgICAgICAgICAgIHZhciBicmFja2V0UG9zID0gdGhpcy4kZmluZENs
b3NpbmdCcmFja2V0KG1hdGNoWzFdLCBwb3MpOworICAgICAgICAgICAgaWYgKCFicmFja2V0UG9z
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmFuZ2UgPSBSYW5n
ZS5mcm9tUG9pbnRzKHBvcywgYnJhY2tldFBvcyk7CisgICAgICAgICAgICBpZiAoIWJlZm9yZSkg
eworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICBy
YW5nZS5zdGFydC5jb2x1bW4tLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJhbmdlLmN1
cnNvciA9IHJhbmdlLmVuZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBicmFj
a2V0UG9zID0gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3MpOworICAgICAg
ICAgICAgaWYgKCFicmFja2V0UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGJyYWNrZXRQb3MsIHBvcyk7CisgICAg
ICAgICAgICBpZiAoIWJlZm9yZSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVt
bisrOworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4tLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdlLnN0YXJ0OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKworICAgIHRoaXMuJGJyYWNrZXRz
ID0geworICAgICAgICAiKSI6ICIoIiwKKyAgICAgICAgIigiOiAiKSIsCisgICAgICAgICJdIjog
IlsiLAorICAgICAgICAiWyI6ICJdIiwKKyAgICAgICAgInsiOiAifSIsCisgICAgICAgICJ9Ijog
InsiCisgICAgfTsKKworICAgIHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJy
YWNrZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIG9wZW5CcmFja2V0ID0gdGhp
cy4kYnJhY2tldHNbYnJhY2tldF07CisgICAgICAgIHZhciBkZXB0aCA9IDE7CisKKyAgICAgICAg
dmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBwb3Np
dGlvbi5jb2x1bW4pOworICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9r
ZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iu
c3RlcEZvcndhcmQoKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgICBpZiAoIXR5cGVSZSl7CisgICAgICAgICAgICB0eXBlUmUgPSBu
ZXcgUmVnRXhwKAorICAgICAgICAgICAgICAgICIoXFwuPyIgKworICAgICAgICAgICAgICAgIHRv
a2VuLnR5cGUucmVwbGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCJycGFyZW4iLCAiLnBhcmVuIikK
KyAgICAgICAgICAgICAgICArICIpKyIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHZhbHVlSW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW5Db2x1bW4oKSAtIDI7CisgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAg
ICAgICAKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgCisgICAgICAgICAgICB3aGls
ZSAodmFsdWVJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIGNociA9IHZhbHVlLmNo
YXJBdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hyID09IG9wZW5CcmFja2V0
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoIC09IDE7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkZXB0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Jvdzog
aXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiB2YWx1ZUluZGV4ICsgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNociA9PSBicmFja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlcHRo
ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlSW5kZXggLT0g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4g
JiYgIXR5cGVSZS50ZXN0KHRva2VuLnR5cGUpKTsKKworICAgICAgICAgICAgaWYgKHRva2VuID09
IG51bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgdmFsdWVJbmRleCA9IHZhbHVl
Lmxlbmd0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH07CisKKyAgICB0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0
LCBwb3NpdGlvbiwgdHlwZVJlKSB7CisgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldCA9IHRoaXMu
JGJyYWNrZXRzW2JyYWNrZXRdOworICAgICAgICB2YXIgZGVwdGggPSAxOworCisgICAgICAgIHZh
ciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRp
b24uY29sdW1uKTsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2Vu
KCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0
ZXBGb3J3YXJkKCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKCF0eXBlUmUpeworICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cCgK
KyAgICAgICAgICAgICAgICAiKFxcLj8iICsKKyAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJl
cGxhY2UoIi4iLCAiXFwuIikucmVwbGFjZSgibHBhcmVuIiwgIi5wYXJlbiIpCisgICAgICAgICAg
ICAgICAgKyAiKSsiCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHZhciB2YWx1
ZUluZGV4ID0gcG9zaXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1u
KCk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKworICAgICAgICAgICAgdmFyIHZhbHVlID0g
dG9rZW4udmFsdWU7CisgICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7
CisgICAgICAgICAgICB3aGlsZSAodmFsdWVJbmRleCA8IHZhbHVlTGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNociA9IHZhbHVlLmNoYXJBdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hyID09IGNsb3NpbmdCcmFja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRl
cHRoIC09IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB2YWx1ZUluZGV4ICsgaXRl
cmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PSBicmFja2V0
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoICs9IDE7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHZhbHVlSW5kZXggKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7
CisgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkp
OworCisgICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgdmFsdWVJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH07Cit9CitleHBvcnRzLkJyYWNrZXRNYXRjaCA9IEJy
YWNrZXRNYXRjaDsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9zZWFyY2gnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL29vcCcsICdh
Y2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIv
b29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CisKK3ZhciBTZWFy
Y2ggPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRvcHRpb25zID0ge307Cit9OworCisoZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5zZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgIG9vcC5t
aXhpbih0aGlzLiRvcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICB0aGlzLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGxh
bmcuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKTsKKyAgICB9OworICAgIHRoaXMuc2V0T3B0aW9u
cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7
CisgICAgfTsKKyAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHZh
ciBpdGVyYXRvciA9IHRoaXMuJG1hdGNoSXRlcmF0b3Ioc2Vzc2lvbiwgdGhpcy4kb3B0aW9ucyk7
CisKKyAgICAgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB2YXIgZmlyc3RSYW5nZSA9IG51bGw7CisgICAgICAgIGl0ZXJhdG9yLmZvckVhY2go
ZnVuY3Rpb24ocmFuZ2UsIHJvdywgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoIXJhbmdlLnN0
YXJ0KSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHJhbmdlLm9mZnNldCArIChvZmZz
ZXQgfHwgMCk7CisgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG5ldyBSYW5nZShyb3csIGNv
bHVtbiwgcm93LCBjb2x1bW4rcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSByYW5nZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTsKKyAgICB9OworICAg
IHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIG9wdGlvbnMg
PSB0aGlzLiRvcHRpb25zOworICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKQorICAgICAgICAg
ICAgcmV0dXJuIFtdOworICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTsKKwor
ICAgICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlOworICAgICAgICB2YXIgbGluZXMgPSBy
YW5nZQorICAgICAgICAgICAgPyBzZXNzaW9uLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFu
Z2UuZW5kLnJvdykKKyAgICAgICAgICAgIDogc2Vzc2lvbi5kb2MuZ2V0QWxsTGluZXMoKTsKKwor
ICAgICAgICB2YXIgcmFuZ2VzID0gW107CisgICAgICAgIHZhciByZSA9IG9wdGlvbnMucmU7Cisg
ICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkgeworICAgICAgICAgICAgdmFyIGxlbiA9
IHJlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBtYXhSb3cgPSBsaW5lcy5sZW5ndGggLSBsZW47
CisgICAgICAgICAgICBmb3IgKHZhciByb3cgPSByZS5vZmZzZXQgfHwgMDsgcm93IDw9IG1heFJv
dzsgcm93KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisr
KQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZXNbcm93ICsgal0uc2VhcmNoKHJlW2pdKSA9
PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHZhciBzdGFydExpbmUgPSBsaW5lc1tyb3ddOworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gbGluZXNbcm93ICsgbGVuIC0gMV07CisgICAgICAgICAgICAgICAgdmFy
IHN0YXJ0SW5kZXggPSBzdGFydExpbmUubWF0Y2gocmVbMF0pWzBdLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7
CisKKyAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoCisgICAgICAgICAgICAg
ICAgICAgIHJvdywgc3RhcnRMaW5lLmxlbmd0aCAtIHN0YXJ0SW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4CisgICAgICAgICAgICAgICAgKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBs
YW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lc1tpXSwgcmUpOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgbWF0Y2ggPSBtYXRjaGVzW2pdOworICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVz
aChuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5n
dGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdlLnN0
YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1
bW47CisgICAgICAgICAgICB2YXIgaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoIC0gMTsKKyAgICAg
ICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRDb2x1
bW4gJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpCisgICAgICAgICAg
ICAgICAgaSsrOworCisgICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVuZC5j
b2x1bW4gPiBlbmRDb2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykK
KyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VzLnNsaWNlKGks
IGogKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByYW5nZXM7CisgICAgfTsKKyAg
ICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHsKKyAgICAgICAg
dmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zOworCisgICAgICAgIHZhciByZSA9IHRoaXMuJGFz
c2VtYmxlUmVnRXhwKG9wdGlvbnMpOworICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUp
CisgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisKKyAgICAgICAgaWYgKCFyZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGlucHV0KTsK
KyAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaFswXS5sZW5ndGggIT0gaW5wdXQubGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICByZXBsYWNlbWVudCA9
IGlucHV0LnJlcGxhY2UocmUsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYgKG9wdGlvbnMucHJl
c2VydmVDYXNlKSB7CisgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnNwbGl0
KCIiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIGlu
cHV0Lmxlbmd0aCk7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoID0gaW5wdXRbaV07
CisgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoLnRvTG93ZXJDYXNlKCkgIT0gY2gpCisgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2ldID0gcmVwbGFjZW1lbnRbaV0udG9VcHBlckNh
c2UoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50W2ldID0gcmVwbGFjZW1lbnRbaV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuam9pbigiIik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICB9OworCisgICAgdGhp
cy4kbWF0Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKKyAgICAgICAg
dmFyIHJlID0gdGhpcy4kYXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7CisgICAgICAgIGlmICghcmUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBj
YWxsYmFjaywgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHM7CisKKyAgICAgICAgaWYgKG9w
dGlvbnMuJGlzTXVsdGlMaW5lKSB7CisgICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3RoOwor
ICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlvbihsaW5lLCByb3csIG9mZnNl
dCkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbGluZS5zZWFyY2gocmVbMF0p
OworICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID09IC0xKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIGkp
OworICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5zZWFyY2gocmVbaV0pID09IC0xKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHZhciBlbmRJbmRleCA9IGxpbmUubWF0Y2gocmVbbGVuIC0gMV0pWzBdLmxlbmd0
aDsKKworICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0SW5k
ZXgsIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmUub2Zm
c2V0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LS07CisgICAg
ICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHJh
bmdlLnN0YXJ0LmNvbHVtbiArPSBvZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJh
Y2socmFuZ2UpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0gZWxzZSBpZiAoYmFja3dhcmRzKSB7CisgICAgICAgICAgICB2YXIgbWF0
Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKGxpbmUsIHJvdywgc3RhcnRJbmRleCkgeworICAgICAgICAg
ICAgICAgIHZhciBtYXRjaGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtYXRjaGVzLmxlbmd0aC0xOyBpID49IDA7IGktLSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG1hdGNoZXNbaV0sIHJvdywgc3RhcnRJ
bmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbWF0Y2hJdGVyYXRvciA9IGZ1
bmN0aW9uKGxpbmUsIHJvdywgc3RhcnRJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBtYXRj
aGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrKG1hdGNoZXNbaV0sIHJvdywgc3RhcnRJbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oX2NhbGxiYWNr
KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7CisgICAgICAgICAgICAg
ICAgc2VsZi4kbGluZUl0ZXJhdG9yKHNlc3Npb24sIG9wdGlvbnMpLmZvckVhY2gobWF0Y2hJdGVy
YXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMuJGFz
c2VtYmxlUmVnRXhwID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucy5u
ZWVkbGUgaW5zdGFuY2VvZiBSZWdFeHApCisgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9
IG9wdGlvbnMubmVlZGxlOworCisgICAgICAgIHZhciBuZWVkbGUgPSBvcHRpb25zLm5lZWRsZTsK
KworICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKQorICAgICAgICAgICAgcmV0dXJuIG9wdGlv
bnMucmUgPSBmYWxzZTsKKworICAgICAgICBpZiAoIW9wdGlvbnMucmVnRXhwKQorICAgICAgICAg
ICAgbmVlZGxlID0gbGFuZy5lc2NhcGVSZWdFeHAobmVlZGxlKTsKKworICAgICAgICBpZiAob3B0
aW9ucy53aG9sZVdvcmQpCisgICAgICAgICAgICBuZWVkbGUgPSAiXFxiIiArIG5lZWRsZSArICJc
XGIiOworCisgICAgICAgIHZhciBtb2RpZmllciA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICJn
IiA6ICJnaSI7CisKKyAgICAgICAgb3B0aW9ucy4kaXNNdWx0aUxpbmUgPSAvW1xuXHJdLy50ZXN0
KG5lZWRsZSk7CisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkKKyAgICAgICAgICAg
IHJldHVybiBvcHRpb25zLnJlID0gdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAobmVlZGxl
LCBtb2RpZmllcik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciByZSA9IG5ldyBS
ZWdFeHAobmVlZGxlLCBtb2RpZmllcik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAg
ICAgcmUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IHJl
OworICAgIH07CisKKyAgICB0aGlzLiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cCA9IGZ1bmN0aW9u
KG5lZWRsZSwgbW9kaWZpZXIpIHsKKyAgICAgICAgdmFyIHBhcnRzID0gbmVlZGxlLnJlcGxhY2Uo
L1xyXG58XHJ8XG4vZywgIiRcbl4iKS5zcGxpdCgiXG4iKTsKKyAgICAgICAgdmFyIHJlID0gW107
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHRyeSB7Cisg
ICAgICAgICAgICByZS5wdXNoKG5ldyBSZWdFeHAocGFydHNbaV0sIG1vZGlmaWVyKSk7CisgICAg
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJ0c1swXSA9PSAiIikgeworICAgICAgICAgICAgcmUuc2hpZnQoKTsKKyAg
ICAgICAgICAgIHJlLm9mZnNldCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZS5vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZTsKKyAgICB9OworCisg
ICAgdGhpcy4kbGluZUl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgeworICAg
ICAgICB2YXIgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHMgPT0gdHJ1ZTsKKyAgICAgICAg
dmFyIHNraXBDdXJyZW50ID0gb3B0aW9ucy5za2lwQ3VycmVudCAhPSBmYWxzZTsKKworICAgICAg
ICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlOworICAgICAgICB2YXIgc3RhcnQgPSBvcHRpb25z
LnN0YXJ0OworICAgICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgc3RhcnQgPSByYW5nZSA/
IHJhbmdlW2JhY2t3YXJkcyA/ICJlbmQiIDogInN0YXJ0Il0gOiBzZXNzaW9uLnNlbGVjdGlvbi5n
ZXRSYW5nZSgpOworICAgICAgICAgCisgICAgICAgIGlmIChzdGFydC5zdGFydCkKKyAgICAgICAg
ICAgIHN0YXJ0ID0gc3RhcnRbc2tpcEN1cnJlbnQgIT0gYmFja3dhcmRzID8gImVuZCIgOiAic3Rh
cnQiXTsKKworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZSA/IHJhbmdlLnN0YXJ0LnJvdyA6
IDA7CisgICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vzc2lv
bi5nZXRMZW5ndGgoKSAtIDE7CisKKyAgICAgICAgdmFyIGZvckVhY2ggPSBiYWNrd2FyZHMgPyBm
dW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5yb3c7
CisKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpLnN1YnN0
cmluZygwLCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhsaW5l
LCByb3cpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBm
b3IgKHJvdy0tOyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09IGZh
bHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBmb3Ig
KHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnQucm93OyByb3cgPj0gZmlyc3RSb3c7IHJv
dy0tKQorICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJv
dyksIHJvdykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
IDogZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3RhcnQu
cm93OworCisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KS5z
dWJzdHIoc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGluZSwg
cm93LCBzdGFydC5jb2x1bW4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgICAgICBmb3IgKHJvdyA9IHJvdysxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUocm93KSwgcm93KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChv
cHRpb25zLndyYXAgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydC5yb3c7IHJv
dyA8PSBsYXN0Um93OyByb3crKykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNl
c3Npb24uZ2V0TGluZShyb3cpLCByb3cpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB7Zm9yRWFjaDogZm9y
RWFjaH07CisgICAgfTsKKworfSkuY2FsbChTZWFyY2gucHJvdG90eXBlKTsKKworZXhwb3J0cy5T
ZWFyY2ggPSBTZWFyY2g7Cit9KTsKK2FjZS5kZWZpbmUoJ2FjZS9jb21tYW5kcy9jb21tYW5kX21h
bmFnZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywg
J2FjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJl
KCIuLi9saWIvb29wIik7Cit2YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuLi9rZXlib2FyZC9o
YXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxlcjsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIu
Li9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKKwordmFyIENvbW1hbmRNYW5hZ2Vy
ID0gZnVuY3Rpb24ocGxhdGZvcm0sIGNvbW1hbmRzKSB7CisgICAgdGhpcy5wbGF0Zm9ybSA9IHBs
YXRmb3JtOworICAgIHRoaXMuY29tbWFuZHMgPSB0aGlzLmJ5TmFtZSA9IHt9OworICAgIHRoaXMu
Y29tbW1hbmRLZXlCaW5kaW5nID0ge307CisKKyAgICB0aGlzLmFkZENvbW1hbmRzKGNvbW1hbmRz
KTsKKyAgICAKKyAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIiwgZnVuY3Rpb24oZSkg
eworICAgICAgICByZXR1cm4gZS5jb21tYW5kLmV4ZWMoZS5lZGl0b3IsIGUuYXJncyB8fCB7fSk7
CisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoQ29tbWFuZE1hbmFnZXIsIEhhc2hIYW5kbGVy
KTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOworCisgICAgdGhpcy5leGVjID0gZnVuY3Rpb24oY29tbWFuZCwgZWRpdG9yLCBhcmdzKSB7
CisgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpCisgICAgICAgICAgICBj
b21tYW5kID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXTsKKworICAgICAgICBpZiAoIWNvbW1hbmQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVkaXRvciAmJiBlZGl0
b3IuJHJlYWRPbmx5ICYmICFjb21tYW5kLnJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHZhciByZXR2YWx1ZSA9IHRoaXMuX2VtaXQoImV4ZWMiLCB7CisgICAg
ICAgICAgICBlZGl0b3I6IGVkaXRvciwKKyAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsCisg
ICAgICAgICAgICBhcmdzOiBhcmdzCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXR2
YWx1ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisgICAgfTsKKworICAgIHRoaXMudG9nZ2xl
UmVjb3JkaW5nID0gZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgIGlmICh0aGlzLiRpblJlcGxh
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlZGl0b3IgJiYgZWRpdG9yLl9lbWl0
KCJjaGFuZ2VTdGF0dXMiKTsKKyAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKSB7CisgICAgICAg
ICAgICB0aGlzLm1hY3JvLnBvcCgpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3Rl
bmVyKCJleGVjIiwgdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pOworCisgICAgICAgICAgICBpZiAo
IXRoaXMubWFjcm8ubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMubWFjcm8gPSB0aGlzLm9s
ZE1hY3JvOworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRpbmcgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuJGFkZENvbW1hbmRUb01hY3JvKSB7CisgICAgICAg
ICAgICB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm1hY3JvLnB1c2goW2UuY29tbWFuZCwgZS5hcmdzXSk7CisgICAgICAgICAgICB9
LmJpbmQodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm9sZE1hY3JvID0gdGhpcy5t
YWNybzsKKyAgICAgICAgdGhpcy5tYWNybyA9IFtdOworICAgICAgICB0aGlzLm9uKCJleGVjIiwg
dGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pOworICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRpbmcg
PSB0cnVlOworICAgIH07CisKKyAgICB0aGlzLnJlcGxheSA9IGZ1bmN0aW9uKGVkaXRvcikgewor
ICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkgfHwgIXRoaXMubWFjcm8pCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMudG9nZ2xlUmVjb3JkaW5nKGVkaXRvcik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHRoaXMuJGluUmVwbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMubWFjcm8uZm9yRWFj
aChmdW5jdGlvbih4KSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09ICJzdHJpbmci
KQorICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMoeCwgZWRpdG9yKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4WzBdLCBlZGl0b3IsIHhb
MV0pOworICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg
ICAgICB0aGlzLiRpblJlcGxheSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKworICAgIHRo
aXMudHJpbU1hY3JvID0gZnVuY3Rpb24obSkgeworICAgICAgICByZXR1cm4gbS5tYXAoZnVuY3Rp
b24oeCl7CisgICAgICAgICAgICBpZiAodHlwZW9mIHhbMF0gIT0gInN0cmluZyIpCisgICAgICAg
ICAgICAgICAgeFswXSA9IHhbMF0ubmFtZTsKKyAgICAgICAgICAgIGlmICgheFsxXSkKKyAgICAg
ICAgICAgICAgICB4ID0geFswXTsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9KTsK
KyAgICB9OworCit9KS5jYWxsKENvbW1hbmRNYW5hZ2VyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMu
Q29tbWFuZE1hbmFnZXIgPSBDb21tYW5kTWFuYWdlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIva2V5cyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIga2V5VXRpbCAgPSByZXF1aXJlKCIuLi9saWIva2V5cyIpOworCitmdW5jdGlvbiBI
YXNoSGFuZGxlcihjb25maWcsIHBsYXRmb3JtKSB7CisgICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRm
b3JtOworICAgIHRoaXMuY29tbWFuZHMgPSB7fTsKKyAgICB0aGlzLmNvbW1tYW5kS2V5QmluZGlu
ZyA9IHt9OworCisgICAgdGhpcy5hZGRDb21tYW5kcyhjb25maWcpOworfTsKKworKGZ1bmN0aW9u
KCkgeworCisgICAgdGhpcy5hZGRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgeworICAgICAg
ICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kLm5hbWVdKQorICAgICAgICAgICAgdGhpcy5yZW1v
dmVDb21tYW5kKGNvbW1hbmQpOworCisgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZC5uYW1l
XSA9IGNvbW1hbmQ7CisKKyAgICAgICAgaWYgKGNvbW1hbmQuYmluZEtleSkKKyAgICAgICAgICAg
IHRoaXMuX2J1aWxkS2V5SGFzaChjb21tYW5kKTsKKyAgICB9OworCisgICAgdGhpcy5yZW1vdmVD
b21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgeworICAgICAgICB2YXIgbmFtZSA9ICh0eXBlb2Yg
Y29tbWFuZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kIDogY29tbWFuZC5uYW1lKTsKKyAgICAgICAg
Y29tbWFuZCA9IHRoaXMuY29tbWFuZHNbbmFtZV07CisgICAgICAgIGRlbGV0ZSB0aGlzLmNvbW1h
bmRzW25hbWVdOworICAgICAgICB2YXIgY2tiID0gdGhpcy5jb21tbWFuZEtleUJpbmRpbmc7Cisg
ICAgICAgIGZvciAodmFyIGhhc2hJZCBpbiBja2IpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGtl
eSBpbiBja2JbaGFzaElkXSkgeworICAgICAgICAgICAgICAgIGlmIChja2JbaGFzaElkXVtrZXld
ID09IGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBja2JbaGFzaElkXVtrZXld
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuYmluZEtleSA9
IGZ1bmN0aW9uKGtleSwgY29tbWFuZCkgeworICAgICAgICBpZigha2V5KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT0gImZ1bmN0aW9uIikgeworICAg
ICAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtleGVjOiBjb21tYW5kLCBiaW5kS2V5OiBrZXksIG5h
bWU6IGtleX0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGNrYiA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOworICAgICAgICBrZXkuc3BsaXQoInwiKS5m
b3JFYWNoKGZ1bmN0aW9uKGtleVBhcnQpIHsKKyAgICAgICAgICAgIHZhciBiaW5kaW5nID0gdGhp
cy5wYXJzZUtleXMoa2V5UGFydCwgY29tbWFuZCk7CisgICAgICAgICAgICB2YXIgaGFzaElkID0g
YmluZGluZy5oYXNoSWQ7CisgICAgICAgICAgICAoY2tiW2hhc2hJZF0gfHwgKGNrYltoYXNoSWRd
ID0ge30pKVtiaW5kaW5nLmtleV0gPSBjb21tYW5kOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9
OworCisgICAgdGhpcy5hZGRDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7CisgICAgICAg
IGNvbW1hbmRzICYmIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUp
IHsKKyAgICAgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHNbbmFtZV07CisgICAgICAgICAg
ICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJzdHJpbmciKQorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmJpbmRLZXkoY29tbWFuZCwgbmFtZSk7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
Y29tbWFuZCA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICBjb21tYW5kID0geyBleGVj
OiBjb21tYW5kIH07CisKKyAgICAgICAgICAgIGlmICghY29tbWFuZC5uYW1lKQorICAgICAgICAg
ICAgICAgIGNvbW1hbmQubmFtZSA9IG5hbWU7CisKKyAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFu
ZChjb21tYW5kKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMucmVtb3Zl
Q29tbWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgeworICAgICAgICBPYmplY3Qua2V5cyhjb21t
YW5kcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUNv
bW1hbmQoY29tbWFuZHNbbmFtZV0pOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgICAg
dGhpcy5iaW5kS2V5cyA9IGZ1bmN0aW9uKGtleUxpc3QpIHsKKyAgICAgICAgT2JqZWN0LmtleXMo
a2V5TGlzdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIHRoaXMuYmluZEtl
eShrZXksIGtleUxpc3Rba2V5XSk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAgICB0
aGlzLl9idWlsZEtleUhhc2ggPSBmdW5jdGlvbihjb21tYW5kKSB7CisgICAgICAgIHZhciBiaW5k
aW5nID0gY29tbWFuZC5iaW5kS2V5OworICAgICAgICBpZiAoIWJpbmRpbmcpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBiaW5kaW5nID09ICJzdHJpbmci
ID8gYmluZGluZzogYmluZGluZ1t0aGlzLnBsYXRmb3JtXTsKKyAgICAgICAgdGhpcy5iaW5kS2V5
KGtleSwgY29tbWFuZCk7CisgICAgfTsKKyAgICB0aGlzLnBhcnNlS2V5cyA9IGZ1bmN0aW9uKGtl
eXMpIHsKKyAgICAgICAgdmFyIHBhcnRzID0ga2V5cy50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXC1c
K10oW1wtXCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHh9KTsKKyAgICAgICAgdmFy
IGtleSA9IHBhcnRzLnBvcCgpOworCisgICAgICAgIHZhciBrZXlDb2RlID0ga2V5VXRpbFtrZXld
OworICAgICAgICBpZiAoa2V5VXRpbC5GVU5DVElPTl9LRVlTW2tleUNvZGVdKQorICAgICAgICAg
ICAga2V5ID0ga2V5VXRpbC5GVU5DVElPTl9LRVlTW2tleUNvZGVdLnRvTG93ZXJDYXNlKCk7Cisg
ICAgICAgIGVsc2UgaWYgKCFwYXJ0cy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4ge2tleTog
a2V5LCBoYXNoSWQ6IC0xfTsKKyAgICAgICAgZWxzZSBpZiAocGFydHMubGVuZ3RoID09IDEgJiYg
cGFydHNbMF0gPT0gInNoaWZ0IikKKyAgICAgICAgICAgIHJldHVybiB7a2V5OiBrZXkudG9VcHBl
ckNhc2UoKSwgaGFzaElkOiAtMX07CisKKyAgICAgICAgdmFyIGhhc2hJZCA9IDA7CisgICAgICAg
IGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHZhciBtb2Rp
ZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dOworICAgICAgICAgICAgaWYgKG1vZGlm
aWVyID09IG51bGwpCisgICAgICAgICAgICAgICAgdGhyb3cgImludmFsaWQgbW9kaWZpZXIgIiAr
IHBhcnRzW2ldICsgIiBpbiAiICsga2V5czsKKyAgICAgICAgICAgIGhhc2hJZCB8PSBtb2RpZmll
cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2tleToga2V5LCBoYXNoSWQ6IGhhc2hJZH07
CisgICAgfTsKKworICAgIHRoaXMuZmluZEtleUNvbW1hbmQgPSBmdW5jdGlvbiBmaW5kS2V5Q29t
bWFuZChoYXNoSWQsIGtleVN0cmluZykgeworICAgICAgICB2YXIgY2ticiA9IHRoaXMuY29tbW1h
bmRLZXlCaW5kaW5nOworICAgICAgICByZXR1cm4gY2ticltoYXNoSWRdICYmIGNrYnJbaGFzaElk
XVtrZXlTdHJpbmddOworICAgIH07CisKKyAgICB0aGlzLmhhbmRsZUtleWJvYXJkID0gZnVuY3Rp
b24oZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIGNvbW1hbmQ6IHRoaXMuZmluZEtleUNvbW1hbmQoaGFzaElkLCBrZXlTdHJp
bmcpCisgICAgICAgIH07CisgICAgfTsKKworfSkuY2FsbChIYXNoSGFuZGxlci5wcm90b3R5cGUp
CisKK2V4cG9ydHMuSGFzaEhhbmRsZXIgPSBIYXNoSGFuZGxlcjsKK30pOworCithY2UuZGVmaW5l
KCdhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcycsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFu
ZyIpOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOworCitmdW5jdGlvbiBiaW5k
S2V5KHdpbiwgbWFjKSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgd2luOiB3aW4sCisgICAgICAg
IG1hYzogbWFjCisgICAgfTsKK30KKworZXhwb3J0cy5jb21tYW5kcyA9IFt7CisgICAgbmFtZTog
InNlbGVjdGFsbCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BIiwgIkNvbW1hbmQtQSIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0QWxsKCk7IH0sCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiY2VudGVyc2VsZWN0aW9uIiwKKyAg
ICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJDdHJsLUwiKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVl
Cit9LCB7CisgICAgbmFtZTogImdvdG9saW5lIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LUwiLCAiQ29tbWFuZC1MIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAg
IHZhciBsaW5lID0gcGFyc2VJbnQocHJvbXB0KCJFbnRlciBsaW5lIG51bWJlcjoiKSwgMTApOwor
ICAgICAgICBpZiAoIWlzTmFOKGxpbmUpKSB7CisgICAgICAgICAgICBlZGl0b3IuZ290b0xpbmUo
bGluZSk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAg
bmFtZTogImZvbGQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1MfEN0cmwtRjEiLCAiQ29t
bWFuZC1BbHQtTHxDb21tYW5kLUYxIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQoZmFsc2UpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogInVuZm9sZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0
LUx8Q3RybC1TaGlmdC1GMSIsICJDb21tYW5kLUFsdC1TaGlmdC1MfENvbW1hbmQtU2hpZnQtRjEi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9s
ZCh0cnVlKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJmb2xkYWxs
IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtMCIsICJDb21tYW5kLU9wdGlvbi0wIiksCisg
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLmZvbGRBbGwoKTsgfSwK
KyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJ1bmZvbGRhbGwiLAorICAgIGJp
bmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC0wIiwgIkNvbW1hbmQtT3B0aW9uLVNoaWZ0LTAiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udW5mb2xkKCk7IH0s
CisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZmluZG5leHQiLAorICAgIGJp
bmRLZXk6IGJpbmRLZXkoIkN0cmwtSyIsICJDb21tYW5kLUciKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLmZpbmROZXh0KCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30s
IHsKKyAgICBuYW1lOiAiZmluZHByZXZpb3VzIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LVNoaWZ0LUsiLCAiQ29tbWFuZC1TaGlmdC1HIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci5maW5kUHJldmlvdXMoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgewor
ICAgIG5hbWU6ICJmaW5kIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUYiLCAiQ29tbWFu
ZC1GIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgIGNvbmZpZy5sb2Fk
TW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsIGZ1bmN0aW9uKGUpIHtlLlNlYXJjaChlZGl0b3Ip
fSk7CisgICAgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJvdmVyd3Jp
dGUiLAorICAgIGJpbmRLZXk6ICJJbnNlcnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsK
KyAgICBuYW1lOiAic2VsZWN0dG9zdGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1T
aGlmdC1Ib21lIiwgIkNvbW1hbmQtU2hpZnQtVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVTdGFydCgpOyB9LAorICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAg
ICBuYW1lOiAiZ290b3N0YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUhvbWUiLCAi
Q29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLm5hdmlnYXRlRmlsZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R1cCIs
CisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVXAiLCAiU2hpZnQtVXAiKSwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFVwKCk7IH0s
CisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQor
fSwgeworICAgIG5hbWU6ICJnb2xpbmV1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiVXAiLCAi
VXB8Q3RybC1QIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5u
YXZpZ2F0ZVVwKGFyZ3MudGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFj
aCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9lbmQiLAor
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRW5kIiwgIkNvbW1hbmQtU2hpZnQtRG93
biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCku
c2VsZWN0RmlsZUVuZCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisg
ICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b2VuZCIsCisgICAgYmluZEtl
eTogYmluZEtleSgiQ3RybC1FbmQiLCAiQ29tbWFuZC1FbmR8Q29tbWFuZC1Eb3duIiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVFbmQoKTsgfSwKKyAg
ICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7
CisgICAgbmFtZTogInNlbGVjdGRvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LURv
d24iLCAiU2hpZnQtRG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0RG93bigpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAi
Zm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ29saW5lZG93
biIsCisgICAgYmluZEtleTogYmluZEtleSgiRG93biIsICJEb3dufEN0cmwtTiIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVEb3duKGFyZ3MudGlt
ZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0d29yZGxlZnQiLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIkN0cmwtU2hpZnQtTGVmdCIsICJPcHRpb24tU2hpZnQtTGVmdCIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZExlZnQo
KTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogImdvdG93b3JkbGVmdCIsCisgICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1MZWZ0IiwgIk9wdGlvbi1MZWZ0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci5uYXZpZ2F0ZVdvcmRMZWZ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R0
b2xpbmVzdGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LUxlZnQiLCAiQ29t
bWFuZC1TaGlmdC1MZWZ0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9s
aW5lc3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1MZWZ0fEhvbWUiLCAiQ29tbWFu
ZC1MZWZ0fEhvbWV8Q3RybC1BIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5uYXZpZ2F0ZUxpbmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFj
aCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0bGVmdCIsCisg
ICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtTGVmdCIsICJTaGlmdC1MZWZ0IiksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCk7
IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1
ZQorfSwgeworICAgIG5hbWU6ICJnb3RvbGVmdCIsCisgICAgYmluZEtleTogYmluZEtleSgiTGVm
dCIsICJMZWZ0fEN0cmwtQiIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBl
ZGl0b3IubmF2aWdhdGVMZWZ0KGFyZ3MudGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0
d29yZHJpZ2h0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVJpZ2h0IiwgIk9w
dGlvbi1TaGlmdC1SaWdodCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZFJpZ2h0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3Rv
d29yZHJpZ2h0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVJpZ2h0IiwgIk9wdGlvbi1S
aWdodCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVXb3Jk
UmlnaHQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRP
bmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHRvbGluZWVuZCIsCisgICAgYmluZEtl
eTogYmluZEtleSgiQWx0LVNoaWZ0LVJpZ2h0IiwgIkNvbW1hbmQtU2hpZnQtUmlnaHQiKSwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExp
bmVFbmQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRP
bmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9saW5lZW5kIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJBbHQtUmlnaHR8RW5kIiwgIkNvbW1hbmQtUmlnaHR8RW5kfEN0cmwtRSIpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lRW5kKCk7IH0sCisg
ICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3RyaWdodCIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQt
UmlnaHQiLCAiU2hpZnQtUmlnaHQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFJpZ2h0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3Rv
cmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlJpZ2h0IiwgIlJpZ2h0fEN0cmwtRiIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVSaWdodChh
cmdzLnRpbWVzKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJl
YWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHBhZ2Vkb3duIiwKKyAgICBiaW5k
S2V5OiAiU2hpZnQtUGFnZURvd24iLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3Iuc2VsZWN0UGFnZURvd24oKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5h
bWU6ICJwYWdlZG93biIsCisgICAgYmluZEtleTogYmluZEtleShudWxsLCAiT3B0aW9uLVBhZ2VE
b3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zY3JvbGxQYWdlRG93
bigpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9wYWdlZG93
biIsCisgICAgYmluZEtleTogYmluZEtleSgiUGFnZURvd24iLCAiUGFnZURvd258Q3RybC1WIiks
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nb3RvUGFnZURvd24oKTsgfSwK
KyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RwYWdldXAiLAorICAg
IGJpbmRLZXk6ICJTaGlmdC1QYWdlVXAiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3Iuc2VsZWN0UGFnZVVwKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBu
YW1lOiAicGFnZXVwIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJPcHRpb24tUGFnZVVw
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zY3JvbGxQYWdlVXAoKTsg
fSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvcGFnZXVwIiwKKyAg
ICBiaW5kS2V5OiAiUGFnZVVwIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9y
LmdvdG9QYWdlVXAoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJz
Y3JvbGx1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1VcCIsIG51bGwpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAtMiAqIGUucmVuZGVyZXIu
bGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAg
ICBuYW1lOiAic2Nyb2xsZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1Eb3duIiwg
bnVsbCksCisgICAgZXhlYzogZnVuY3Rpb24oZSkgeyBlLnJlbmRlcmVyLnNjcm9sbEJ5KDAsIDIg
KiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpOyB9LAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdGxpbmVzdGFydCIsCisgICAgYmluZEtleTogIlNo
aWZ0LUhvbWUiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0
aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RsaW5lZW5k
IiwKKyAgICBiaW5kS2V5OiAiU2hpZnQtRW5kIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Ip
IHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKTsgfSwKKyAgICBtdWx0aVNl
bGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFt
ZTogInRvZ2dsZXJlY29yZGluZyIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BbHQtRSIs
ICJDb21tYW5kLU9wdGlvbi1FIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5jb21tYW5kcy50b2dnbGVSZWNvcmRpbmcoZWRpdG9yKTsgfSwKKyAgICByZWFkT25seTogdHJ1
ZQorfSwgeworICAgIG5hbWU6ICJyZXBsYXltYWNybyIsCisgICAgYmluZEtleTogYmluZEtleSgi
Q3RybC1TaGlmdC1FIiwgIkNvbW1hbmQtU2hpZnQtRSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuY29tbWFuZHMucmVwbGF5KGVkaXRvcik7IH0sCisgICAgcmVhZE9ubHk6
IHRydWUKK30sIHsKKyAgICBuYW1lOiAianVtcHRvbWF0Y2hpbmciLAorICAgIGJpbmRLZXk6IGJp
bmRLZXkoIkN0cmwtUCIsICJDdHJsLVNoaWZ0LVAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmp1bXBUb01hdGNoaW5nKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R0
b21hdGNoaW5nIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVAiLCBudWxsKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmp1bXBUb01hdGNoaW5nKHRydWUp
OyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCAKK3sKKyAgICBuYW1lOiAiY3V0IiwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmdldFNl
bGVjdGlvblJhbmdlKCk7CisgICAgICAgIGVkaXRvci5fZW1pdCgiY3V0IiwgcmFuZ2UpOworCisg
ICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVk
aXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmVsaW5lIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLUQiLCAiQ29tbWFuZC1EIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5yZW1vdmVMaW5lcygpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIK
K30sIHsKKyAgICBuYW1lOiAiZHVwbGljYXRlU2VsZWN0aW9uIiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KCJDdHJsLVNoaWZ0LUQiLCAiQ29tbWFuZC1TaGlmdC1EIiksCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5kdXBsaWNhdGVTZWxlY3Rpb24oKTsgfSwKKyAgICBtdWx0aVNl
bGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInNvcnRsaW5lcyIsCisgICAg
YmluZEtleTogYmluZEtleSgiQ3RybC1BbHQtUyIsICJDb21tYW5kLUFsdC1TIiksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsgfSwKKyAgICBtdWx0aVNl
bGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInRvZ2dsZWNvbW1lbnQiLAor
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtLyIsICJDb21tYW5kLS8iKSwKKyAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZUNvbW1lbnRMaW5lcygpOyB9LAorICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAibW9kaWZ5TnVtYmVy
VXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVXAiLCAiQWx0LVNoaWZ0LVVw
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIoMSk7
IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJt
b2RpZnlOdW1iZXJEb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LURvd24i
LCAiQWx0LVNoaWZ0LURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9y
Lm1vZGlmeU51bWJlcigtMSk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgor
fSwgeworICAgIG5hbWU6ICJyZXBsYWNlIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUgi
LCAiQ29tbWFuZC1PcHRpb24tRiIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAg
ICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFyY2hib3giLCBmdW5jdGlvbihlKSB7
ZS5TZWFyY2goZWRpdG9yLCB0cnVlKX0pOworICAgIH0KK30sIHsKKyAgICBuYW1lOiAidW5kbyIs
CisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1aIiwgIkNvbW1hbmQtWiIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9Cit9LCB7CisgICAgbmFtZTogInJl
ZG8iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtWnxDdHJsLVkiLCAiQ29tbWFu
ZC1TaGlmdC1afENvbW1hbmQtWSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IucmVkbygpOyB9Cit9LCB7CisgICAgbmFtZTogImNvcHlsaW5lc3VwIiwKKyAgICBiaW5kS2V5
OiBiaW5kS2V5KCJBbHQtU2hpZnQtVXAiLCAiQ29tbWFuZC1PcHRpb24tVXAiKSwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7IH0KK30sIHsKKyAgICBu
YW1lOiAibW92ZWxpbmVzdXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1VcCIsICJPcHRp
b24tVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vdmVMaW5lc1Vw
KCk7IH0KK30sIHsKKyAgICBuYW1lOiAiY29weWxpbmVzZG93biIsCisgICAgYmluZEtleTogYmlu
ZEtleSgiQWx0LVNoaWZ0LURvd24iLCAiQ29tbWFuZC1PcHRpb24tRG93biIpLAorICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzRG93bigpOyB9Cit9LCB7CisgICAg
bmFtZTogIm1vdmVsaW5lc2Rvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1Eb3duIiwg
Ik9wdGlvbi1Eb3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb3Zl
TGluZXNEb3duKCk7IH0KK30sIHsKKyAgICBuYW1lOiAiZGVsIiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KCJEZWxldGUiLCAiRGVsZXRlfEN0cmwtRCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IucmVtb3ZlKCJyaWdodCIpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAi
Zm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiYmFja3NwYWNlIiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KAorICAgICAgICAiQ29tbWFuZC1CYWNrc3BhY2V8T3B0aW9uLUJhY2tzcGFjZXxTaGlmdC1C
YWNrc3BhY2V8QmFja3NwYWNlIiwKKyAgICAgICAgIkN0cmwtQmFja3NwYWNlfENvbW1hbmQtQmFj
a3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2V8Q3RybC1IIgorICAgICksCisgICAgZXhl
YzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoImxlZnQiKTsgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92ZXRvbGluZXN0
YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtQmFja3NwYWNlIiwgIkNvbW1hbmQtQmFj
a3NwYWNlIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVUb0xp
bmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAg
ICBuYW1lOiAicmVtb3ZldG9saW5lZW5kIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtRGVs
ZXRlIiwgIkN0cmwtSyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVt
b3ZlVG9MaW5lRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwg
eworICAgIG5hbWU6ICJyZW1vdmV3b3JkbGVmdCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3Ry
bC1CYWNrc3BhY2UiLCAiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRMZWZ0KCk7IH0sCisgICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmV3b3Jk
cmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRGVsZXRlIiwgIkFsdC1EZWxldGUi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRSaWdodCgp
OyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAi
b3V0ZGVudCIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVGFiIiwgIlNoaWZ0LVRhYiIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuYmxvY2tPdXRkZW50KCk7IH0s
CisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJpbmRl
bnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlRhYiIsICJUYWIiKSwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLmluZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIKK30seworICAgIG5hbWU6ICJibG9ja291dGRlbnQiLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkN0cmwtWyIsICJDdHJsLVsiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Ip
IHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9y
RWFjaCIKK30seworICAgIG5hbWU6ICJibG9ja2luZGVudCIsCisgICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1dIiwgIkN0cmwtXSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuYmxvY2tJbmRlbnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9
LCB7CisgICAgbmFtZTogImluc2VydHN0cmluZyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
LCBzdHIpIHsgZWRpdG9yLmluc2VydChzdHIpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAi
Zm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiaW5zZXJ0dGV4dCIsCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yLCBhcmdzKSB7CisgICAgICAgIGVkaXRvci5pbnNlcnQobGFuZy5zdHJpbmdSZXBl
YXQoYXJncy50ZXh0ICB8fCAiIiwgYXJncy50aW1lcyB8fCAxKSk7CisgICAgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInNwbGl0bGluZSIsCisg
ICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1PIiksCisgICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5zcGxpdExpbmUoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjog
ImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInRyYW5zcG9zZWxldHRlcnMiLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIkN0cmwtVCIsICJDdHJsLVQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLnRyYW5zcG9zZUxldHRlcnMoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVjdGlvbnMoMSk7IH0KK30s
IHsKKyAgICBuYW1lOiAidG91cHBlcmNhc2UiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwt
VSIsICJDdHJsLVUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvVXBw
ZXJDYXNlKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAg
IG5hbWU6ICJ0b2xvd2VyY2FzZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1V
IiwgIkN0cmwtU2hpZnQtVSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
dG9Mb3dlckNhc2UoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9XTsK
KworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS91bmRvbWFuYWdlcicsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cit2
YXIgVW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnJlc2V0KCk7Cit9OworCiso
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5leGVjdXRlID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAg
ICAgICB2YXIgZGVsdGFzID0gb3B0aW9ucy5hcmdzWzBdOworICAgICAgICB0aGlzLiRkb2MgID0g
b3B0aW9ucy5hcmdzWzFdOworICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YXMpOwor
ICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTsKKyAgICB9OworICAgIHRoaXMudW5kbyA9IGZ1
bmN0aW9uKGRvbnRTZWxlY3QpIHsKKyAgICAgICAgdmFyIGRlbHRhcyA9IHRoaXMuJHVuZG9TdGFj
ay5wb3AoKTsKKyAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7CisgICAgICAg
IGlmIChkZWx0YXMpIHsKKyAgICAgICAgICAgIHVuZG9TZWxlY3Rpb25SYW5nZSA9CisgICAgICAg
ICAgICAgICAgdGhpcy4kZG9jLnVuZG9DaGFuZ2VzKGRlbHRhcywgZG9udFNlbGVjdCk7CisgICAg
ICAgICAgICB0aGlzLiRyZWRvU3RhY2sucHVzaChkZWx0YXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB1bmRvU2VsZWN0aW9uUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlZG8gPSBmdW5j
dGlvbihkb250U2VsZWN0KSB7CisgICAgICAgIHZhciBkZWx0YXMgPSB0aGlzLiRyZWRvU3RhY2su
cG9wKCk7CisgICAgICAgIHZhciByZWRvU2VsZWN0aW9uUmFuZ2UgPSBudWxsOworICAgICAgICBp
ZiAoZGVsdGFzKSB7CisgICAgICAgICAgICByZWRvU2VsZWN0aW9uUmFuZ2UgPQorICAgICAgICAg
ICAgICAgIHRoaXMuJGRvYy5yZWRvQ2hhbmdlcyhkZWx0YXMsIGRvbnRTZWxlY3QpOworICAgICAg
ICAgICAgdGhpcy4kdW5kb1N0YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlOworICAgIH07CisgICAgdGhpcy5yZXNldCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLiR1bmRvU3RhY2sgPSBbXTsKKyAgICAgICAgdGhpcy4kcmVk
b1N0YWNrID0gW107CisgICAgfTsKKyAgICB0aGlzLmhhc1VuZG8gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJHVuZG9TdGFjay5sZW5ndGggPiAwOworICAgIH07CisgICAgdGhp
cy5oYXNSZWRvID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyZWRvU3RhY2su
bGVuZ3RoID4gMDsKKyAgICB9OworCit9KS5jYWxsKFVuZG9NYW5hZ2VyLnByb3RvdHlwZSk7CisK
K2V4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjsKK30pOworCithY2UuZGVmaW5lKCdh
Y2UvdmlydHVhbF9yZW5kZXJlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAn
YWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3Vz
ZXJhZ2VudCcsICdhY2UvY29uZmlnJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9sYXllci9ndXR0ZXIn
LCAnYWNlL2xheWVyL21hcmtlcicsICdhY2UvbGF5ZXIvdGV4dCcsICdhY2UvbGF5ZXIvY3Vyc29y
JywgJ2FjZS9zY3JvbGxiYXInLCAnYWNlL3JlbmRlcmxvb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0
dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3Ag
PSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsK
K3ZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVx
dWlyZSgiLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWci
KTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQiKTsKK3ZhciBHdXR0ZXJMYXllciA9IHJl
cXVpcmUoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyOwordmFyIE1hcmtlckxheWVyID0gcmVxdWly
ZSgiLi9sYXllci9tYXJrZXIiKS5NYXJrZXI7Cit2YXIgVGV4dExheWVyID0gcmVxdWlyZSgiLi9s
YXllci90ZXh0IikuVGV4dDsKK3ZhciBDdXJzb3JMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvY3Vy
c29yIikuQ3Vyc29yOwordmFyIFNjcm9sbEJhciA9IHJlcXVpcmUoIi4vc2Nyb2xsYmFyIikuU2Ny
b2xsQmFyOwordmFyIFJlbmRlckxvb3AgPSByZXF1aXJlKCIuL3JlbmRlcmxvb3AiKS5SZW5kZXJM
b29wOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5F
dmVudEVtaXR0ZXI7Cit2YXIgZWRpdG9yQ3NzID0gIi5hY2VfZWRpdG9yIHtcCitwb3NpdGlvbjog
cmVsYXRpdmU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCitmb250LWZhbWlseTogJ01vbmFjbycsICdN
ZW5sbycsICdVYnVudHUgTW9ubycsICdDb25zb2xhcycsICdzb3VyY2UtY29kZS1wcm8nLCBtb25v
c3BhY2U7XAorZm9udC1zaXplOiAxMnB4O1wKK2xpbmUtaGVpZ2h0OiBub3JtYWw7XAorfVwKKy5h
Y2Vfc2Nyb2xsZXIge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdzogaGlkZGVuO1wK
K3RvcDogMDtcCitib3R0b206IDA7XAorfVwKKy5hY2VfY29udGVudCB7XAorcG9zaXRpb246IGFi
c29sdXRlO1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1zaXpp
bmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCitjdXJzb3I6IHRleHQ7
XAorfVwKKy5hY2VfZ3V0dGVyIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorb3ZlcmZsb3cgOiBo
aWRkZW47XAord2lkdGg6IGF1dG87XAordG9wOiAwO1wKK2JvdHRvbTogMDtcCitsZWZ0OiAwO1wK
K2N1cnNvcjogZGVmYXVsdDtcCit6LWluZGV4OiA0O1wKK31cCisuYWNlX2d1dHRlci1hY3RpdmUt
bGluZSB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK2xlZnQ6IDA7XAorcmlnaHQ6IDA7XAorfVwK
Ky5hY2Vfc2Nyb2xsZXIuYWNlX3Njcm9sbC1sZWZ0IHtcCitib3gtc2hhZG93OiAxN3B4IDAgMTZw
eCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7XAorfVwKKy5hY2VfZ3V0dGVyLWNlbGwg
e1wKK3BhZGRpbmctbGVmdDogMTlweDtcCitwYWRkaW5nLXJpZ2h0OiA2cHg7XAorYmFja2dyb3Vu
ZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCit9XAorLmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ige1wK
K2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFC
QlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0
YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9h
VWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdllt
VTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZ
d0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRn
UEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVM
ekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpH
WTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNo
aGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0
WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpi
MjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZH
OXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2ts
dWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFVTTJPRVpEUVRRNFJUVTBNVEZGTVVFek0wVkZSVE0y
UlVZMU0wUkJNallpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UVVNMk9FWkRR
VFU0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBSQk1qWWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpF
WnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBCUXpZNFJrTkJNamhGTlRR
eE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3
TG1ScFpEcEJRelk0UmtOQk16aEZOVFF4TVVVeFFUTXpSVVZGTXpaRlJqVXpSRUV5TmlJdlBpQThM
M0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BE
OTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BrZ1h4YkFBQUFKYlNVUkJWSGphcEZOTmFCTkJGSDR6czV2
ZFpMUDVzUW1OcFQ4MlFZMjA5aGVoMWlvV2lzYURSY1NLRjBXS0owR1FucnpyeGFzSHNSNkVubHJ3
RDBUYWd4SmFiYVZFcEZZeExXbExTUzgyMnRyODdtNjZjY2ZkMkdLeVZoQTZNTXliZ2ZlOTcvdm1Q
VVFwaGQwc1pqdG85WEluOU9Pc3ZsdTJua3FSelZVKzZ2dmx6UGY4VzZiazhkeFEwTlBieEFBTGdD
Z2cySmthUXVoelFhdS9FbDB6Ym1VQTdVMEVzOHYyQ2lZbUtRSkhHTzFRSUNDTG9xaWxNaGttdXJE
QXlhcEtncUl0ZXppL1VTUmRKcUVZWTRENWpDeTAzaHQyeU1ra3ZMOTFqVFRYMTBxenl5dTJocnVQ
Uk43amdiSCtFT3NYY01MZ1lpVGhFZ0FNaEFCVzg1b3F5MURYZFJJZHZQMUFISjJhY1FYdkRJclZI
Y2RRTnJFS05ZU1ZNU1pHTWpFeklJQXdEWElvKzZHL0Z4Y0duemtDM1Qyb01oTGpyZTQ5c0JCK1JS
Y0hMcWRhZks2c1lkRS9HR0J3VTFWcEZOajBhTjhwSmJlK0JrWnlldlVydkxsNlhtbTBXOUl1VGMw
RHhyRE5BSmQ1b0V2SS9LUnNOQzNiUXlOalBPOXlRMVlIY2ZqMlF2ZlFjLzVUVWhKVEJjMmlNMFU3
QVdEUXRjMW5KSHZEL2NmTzJzN2phR2tpVEVmYS9FcDhjb0x1N3ptTm1oOCtkYzVsWkR1VWVGQUdV
TkEvT1k2SlZheXBRMHZqcjdYWWpVdkpNMzd2dCtqMXZ1VEs1RGdWZlZVb1RqVmUreTMvTHhNeFky
R2dVK0NTTHk0Y3Bmc1lvclJYdVhJT2kwVnQ0MGg2N3VaRlRkSW82bkxhWmN3VUpXQXp3TlMwdEJu
cXFLelFEbmpkRy9pUHlaeG80NkhhS1VwYnZZa2o4cVlSVFpzQmhnZStKSGhaeWgweDliOTVKcWpW
SmtUMDg0a1pJUHd1L21QV3FQZ2ZRNWpYaDIrOTJBeTdIZWRmQWd3QTZLRFdhZmI0dzNjQUFBQUFT
VVZPUks1Q1lJST1cIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCitiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKK31cCisuYWNlX2d1dHRlci1jZWxsLmFjZV93YXJu
aW5nIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZC
T1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBR1hSRldIUlRiMlow
ZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWha
RzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1F
MXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQw
aVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1
TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJ
Q0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5
OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEds
dmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1
WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxM
bU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpH
OWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21W
aGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0
Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZRVU0yT0VaRFFUZzRSVFUwTVRGRk1VRXpN
MFZGUlRNMlJVWTFNMFJCTWpZaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlFV
TTJPRVpEUVRrNFJUVTBNVEZGTVVFek0wVkZSVE0yUlVZMU0wUkJNallpUGlBOGVHMXdUVTA2UkdW
eWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwQlF6WTRSa05C
TmpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlOaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpS
RDBpZUcxd0xtUnBaRHBCUXpZNFJrTkJOemhGTlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5p
SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldW
MFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2Q3UGZJQUFBR21TVVJCVkhqYVl2ci8vejhE
SlppSmdVSUFOb0NSa1JFYjlnTGlTVkFhUXg0T1FNN0FBa3dkN1hVMi92Kysvck90dGRZR0VCOWRB
U0V2T015ZEdLZkg4R3YvcDRYVGt2UkJmTHhlUUFQKzFjVWhYb3B5dnpoUDdQL0lvU2o3ZzdNdzA5
Y05LTzZKMVFRMEw0Z0lDUEl2L3ZlZy84VytKZEZ2UU5MSFZzVzkvbm1uOXprN0IrY0NrRHdoTDdn
dDZrblNabng5L0x1Q0VPY3ZrSUFNUCtjdnRvOW5mcXlabW1VQWtzZm5CVXRiTTYwZ1gvMy9rZ3l2
My94U0ZPTDVEWlQrTDh2UCtZZmg1Y3ZmUHZwL3hVSHlRSFhHeUFZd2dwd0JqWllGVDNZMU9FbC9P
ZkNINGZmdjN3emM0aXdNdk5Jc0RKK2YvbUg0K3ZJUEF4c2I2MzFXVzBZbG42WnBRTFhkTUsvRFhH
RGZsaCtzSXYzN0VpdkQ1eC8vR2I3K1lXVDR5ODZzbDdCQ0NrU0QrWisrLzFka3ZzRlJsK0huRDFS
dmplNEY4d2hqTVhtR2o1OFlHZjV6c0RNd2NuQXdmUHZLY21sNjJEc1FEZWFEeE4rL1kwcXdscEVI
cXJkQjk0SVJOSURVZ2ZnZktKQ2hHSzRPaWtFVzNnVGlYVUI5NTBBU0xGQUY1NEFDOTRBMEc5UUFm
T25tRjlEQ0R6QUJGcVMwOElIWURJU2NkaWpPalFBQkJnQysvOWF3Qkg5Nmp3QUFBQUJKUlU1RXJr
SmdnZz09XCIpO1wKK2JhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XAorfVwKKy5hY2Vf
Z3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1h
Z2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFBQUFBQUFFRkJRVkpTVWw1ZVhtUmtaR3RyYTM5
L2Y0V0ZoWW1KaVpHUmthYW1wcnk4dk1QRHc4ek16TlhWMWR6YzNPVGs1T3JxNnZEdzhQLy8vd0FB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFrQUFCUUFM
QUFBQUFBUUFCQUFBQVV1SUNXT1pHbWVhQm1sNVhHd0ZDUVNCR3lYUlNBd3RxUUlpUnVpd0lNNUJv
WVZiRUZJeUdDUW9lSkdyVnB0SVFBN1wiKTtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2Vu
dGVyO1wKK31cCisuYWNlX2RhcmsgLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XAorYmFja2dy
b3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpT
QkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5UnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFB
QUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZU
ZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZi
V1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU15MWpNREV4SURZMkxq
RTBOVFkyTVN3Z01qQXhNaTh3TWk4d05pMHhORG8xTmpveU55QWdJQ0FnSUNBZ0lqNGdQSEprWmpw
U1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5
TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZk
WFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExq
QXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0
d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3
THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlR
V1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROaUFvVFdGamFXNTBiM05vS1NJZ2VHMXdUVTA2U1c1emRH
RnVZMlZKUkQwaWVHMXdMbWxwWkRwR1JUazVNVFZHUkVJeE5Ea3hNVVV4T1RjNVEwRkZSRVF5TVRO
R01qQkZReUlnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHUlRrNU1UVkdSVUl4
TkRreE1VVXhPVGM1UTBGRlJFUXlNVE5HTWpCRlF5SStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZi
U0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPa1pGT1RreE5VWkNRakUwT1RFeFJU
RTVOemxEUVVWRVJESXhNMFl5TUVWRElpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkds
a09rWkZPVGt4TlVaRFFqRTBPVEV4UlRFNU56bERRVVZFUkRJeE0wWXlNRVZESWk4K0lEd3ZjbVJt
T2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZ
V05yWlhRZ1pXNWtQU0p5SWo4K1NJRGtqQUFBQUoxSlJFRlVlTnBpL1AvL1B3TWxnSW1CUWtCN0E2
cXJxLytETUM1NUZrSUdLQ29xNHBWbnBGa2dUcDA2OWYvKy9mdi9yMXUzN3IrdHJlMS9rZzBBK3B0
bjl1elpZTGFSa1JIcEx2anc0Y05YV1ZsWmh1ZlBuek9jTzNlT2RBTzB0YlZQQWpIRG16ZHZHQTRm
UHN4SXNnR1NrcEptdjM3OVluajM3aDJEakl5TUNNa0czTGh4US9UMjdkc01hbXBxREhaMmRxL3BI
NDFEeHdDQUFBTUFGZGM2OGRVc0ZaZ0FBQUFBU1VWT1JLNUNZSUk9XCIpO1wKK31cCisuYWNlX3Nj
cm9sbGJhciB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK292ZXJmbG93LXg6IGhpZGRlbjtcCitv
dmVyZmxvdy15OiBzY3JvbGw7XAorcmlnaHQ6IDA7XAordG9wOiAwO1wKK2JvdHRvbTogMDtcCit9
XAorLmFjZV9zY3JvbGxiYXItaW5uZXIge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit3aWR0aDog
MXB4O1wKK2xlZnQ6IDA7XAorfVwKKy5hY2VfcHJpbnQtbWFyZ2luIHtcCitwb3NpdGlvbjogYWJz
b2x1dGU7XAoraGVpZ2h0OiAxMDAlO1wKK31cCisuYWNlX3RleHQtaW5wdXQge1wKK3Bvc2l0aW9u
OiBhYnNvbHV0ZTtcCit6LWluZGV4OiAwO1wKK3dpZHRoOiAwLjVlbTtcCitoZWlnaHQ6IDFlbTtc
CitvcGFjaXR5OiAwO1wKK2JhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wKKy1tb3otYXBwZWFyYW5j
ZTogbm9uZTtcCithcHBlYXJhbmNlOiBub25lO1wKK2JvcmRlcjogbm9uZTtcCityZXNpemU6IG5v
bmU7XAorb3V0bGluZTogbm9uZTtcCitvdmVyZmxvdzogaGlkZGVuO1wKK2ZvbnQ6IGluaGVyaXQ7
XAorfVwKKy5hY2VfdGV4dC1pbnB1dC5hY2VfY29tcG9zaXRpb24ge1wKK2JhY2tncm91bmQ6ICNm
OGY4Zjg7XAorY29sb3I6ICMxMTE7XAorei1pbmRleDogMTAwMDtcCitvcGFjaXR5OiAxO1wKK2Jv
cmRlcjogc29saWQgbGlnaHRncmF5IDFweDtcCittYXJnaW46IC0xcHg7XAorcGFkZGluZzogMCAx
cHg7XAorfVwKKy5hY2VfbGF5ZXIge1wKK3otaW5kZXg6IDE7XAorcG9zaXRpb246IGFic29sdXRl
O1wKK292ZXJmbG93OiBoaWRkZW47XAord2hpdGUtc3BhY2U6IG5vd3JhcDtcCitoZWlnaHQ6IDEw
MCU7XAord2lkdGg6IDEwMCU7XAorLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJr
aXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy8q
IHNldHRpbmcgcG9pbnRlci1ldmVudHM6IGF1dG87IG9uIG5vZGUgdW5kZXIgdGhlIG1vdXNlLCB3
aGljaCBjaGFuZ2VzXAorZHVyaW5nIHNjcm9sbCwgd2lsbCBicmVhayBtb3VzZSB3aGVlbCBzY3Jv
bGxpbmcgaW4gU2FmYXJpICovXAorcG9pbnRlci1ldmVudHM6IG5vbmU7XAorfVwKKy5hY2VfZ3V0
dGVyLWxheWVyIHtcCitwb3NpdGlvbjogcmVsYXRpdmU7XAord2lkdGg6IGF1dG87XAordGV4dC1h
bGlnbjogcmlnaHQ7XAorcG9pbnRlci1ldmVudHM6IGF1dG87XAorfVwKKy5hY2VfdGV4dC1sYXll
ciB7XAorY29sb3I6IGJsYWNrO1wKK2ZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcCit9XAorLmFj
ZV9jamsge1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCit0ZXh0LWFsaWduOiBjZW50ZXI7XAor
fVwKKy5hY2VfY3Vyc29yLWxheWVyIHtcCit6LWluZGV4OiA0O1wKK31cCisuYWNlX2N1cnNvciB7
XAorei1pbmRleDogNDtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorLW1vei1ib3gtc2l6aW5nOiBi
b3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5n
OiBib3JkZXItYm94O1wKK31cCisuYWNlX2hpZGRlbi1jdXJzb3JzIC5hY2VfY3Vyc29yIHtcCitv
cGFjaXR5OiAwLjI7XAorfVwKKy5hY2Vfc21vb3RoLWJsaW5raW5nIC5hY2VfY3Vyc29yIHtcCist
bW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFj
aXR5IDAuMThzO1wKKy1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorLW1zLXRyYW5zaXRp
b246IG9wYWNpdHkgMC4xOHM7XAordHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCit9XAorLmFj
ZV9jdXJzb3Jbc3R5bGUqPVwib3BhY2l0eTogMFwiXXtcCistbXMtZmlsdGVyOiBcInByb2dpZDpE
WEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTApXCI7XAorfVwKKy5hY2Vf
ZWRpdG9yLmFjZV9tdWx0aXNlbGVjdCAuYWNlX2N1cnNvciB7XAorYm9yZGVyLWxlZnQtd2lkdGg6
IDFweDtcCit9XAorLmFjZV9saW5lIHtcCit3aGl0ZS1zcGFjZTogbm93cmFwO1wKK31cCisuYWNl
X21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4
OiAzO1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XAorcG9zaXRpb246
IGFic29sdXRlO1wKK3otaW5kZXg6IDU7XAorfVwKKy5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJh
Y2tldCB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK3otaW5kZXg6IDY7XAorfVwKKy5hY2VfbWFy
a2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6LWlu
ZGV4OiAyO1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKK3Bv
c2l0aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4OiA0O1wKKy1tb3otYm94LXNpemluZzogYm9yZGVy
LWJveDtcCistd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9y
ZGVyLWJveDtcCit9XAorLmFjZV9saW5lIC5hY2VfZm9sZCB7XAorLW1vei1ib3gtc2l6aW5nOiBi
b3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5n
OiBib3JkZXItYm94O1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCitoZWlnaHQ6IDExcHg7XAor
bWFyZ2luLXRvcDogLTJweDtcCit2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wKK2JhY2tncm91bmQt
aW1hZ2U6XAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAw
JTBESUhEUiUwMCUwMCUwMCUxMSUwMCUwMCUwMCUwOSUwOCUwNiUwMCUwMCUwMCVENCVFOCVDNyUw
QyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQcm9maWxlJTAwJTAweCUwMSU4NVQlREZrJUQzUCUxNCVG
RSVEQWUlOUQlQjAlRTElOEIlM0FnJTExJTA5JTNFaCU5MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVB
NiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUyNCVFRH4lQjAlMDclRDklOEJvJTNBJUM1dyVGMSUwNyUz
RSVGOSUwNyUwQyVEOSU4M28lN0IlOTIlMEQlQzYlMTRhJUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5
RSU5QjRNJ1MlMDMlQjklRjclQkIlREYlRjklRUU5JyVFNyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJG
JTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0JTE0JURGJUYyJTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2
JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVGJUIzJUYzJTBFJTFFJUM2bHQlRUVvJURGJUFCJUZFYyVE
NSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVCRSU5NDUlQzQlMjIlRTFZJUEwaSU1QyVENHQlMTMlRTAl
RDYlODklRUYlOUQxNSVDMiVDRExzWCVBNyUwNCUwOSUxRmc4b2MlODElRTElOEMlOEQlMjMlOTZm
NDUlNDAlOUElMDklQzIlMDclQzVCJTNBSyVCOCU0MDglOThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0
JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJFUiUyRiVFNWRFJUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8l
QjAlQTglOTQlRTklOUIlQUQlRTclMTAlOERtJTlBJTE5TiVEMSU3QyU4QSVERSUxRjklN0RwJThD
JUU2JTAwJUQ1JUMxJTNGXyUxOCVCREElQjglOURwWDYlRTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYl
QkQlRTclRUV0aSU5OCVFRGUlOUElOTdZKSUxMiUyNSUxQyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAz
JTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVCMCU5RjQlQkY0M1klRjMlRTMlRURQJTk1JTA0JUVCMSVD
NSVGNSVGNktGJUY0JUJBJUJEJUQ3JURCJTkxJTkzJTA3JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUl
QkQlRjclRjVyJThBJUU1eSU5MiVGMCVFQiVCNCUxRSU4RCVENSVGNCU1QiU5MiUzQVYlREIlREIl
RTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUwM0hCJTgyJThFJTFDZCglRTAlOTFCJTBDYSU5QWMlQzQl
QUElRjhMJTE2JTE5JTIySiVBNCVEMml0VHklQjI4JUQ2JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUw
RSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVGNiVFMCVGQiU5RSVERCUyNSVENyU4RSVCQyUxNSU4NSVD
NSVCNyVBMyVEOFElRUQlQjUlODElRTklQkElQjIlMTMlOUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5
JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUlOEElRTUlQjFIJTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBT
JTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2JTEyWCUwQyVCQSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUx
NyVDMiU5NyVCRiVENCVDOCVDRSVERSVBRCUxMSVDQiU4MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVD
JTI1JUQyTCVEMiVFQmQlQjglQkYlOEElRjVCJUM2JTE4JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4
QTklRjIlREFQJTBCJyUwNnclODIlRUIlRTYlRTIlNUMlMkYlRDclMDclOUUlQkIlQ0MlNUQlRTEl
RkElQjklMDglQUQuciUyMyU4RSVDMiUxNyVGNUUlN0MhJUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVB
NyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVCQiVEMyU5MSVCQSVBMiVCMXolOTQlOEYlREInJUY2JTNE
JThFJUFBJTEzJTE5JUIyJUIxJUJFJUIxflYlMDglMkIlQjQlQTJjakolQjN0TyUwMCUwMyUyNW1O
JTk3JUYzJTA1JTkzJUVGJTExJTg0JTBCJTdDJTg4JUFFLSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8l
OTklMEMlNUUlOTclMENJJUFGSCVEOS4lQjAlM0IlOEYlRUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVG
MypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2JTVFJTE5JUMwJUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3
QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5RSVCNyU4MCU5MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUz
RVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUwRiVBQiVENSU5RiVDRiVBQSVENSVERCVFNyVFNCU3RiUw
QnglQTMlRkMlMDYlQTklMjMlMEElRDYlQzIlQTFfMiUwMCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIl
MTMlMDAlMDAlMEIlMTMlMDElMDAlOUElOUMlMTglMDAlMDAlMDAlQjVJREFUKCUxNSVBNSU5MSUz
RCUwRSUwMiElMTAlODVhYyVFMSUwNSVENiVDRSVENiVDNiVDRSVEMiVFOCVFRCVDRCVERSVDMCVD
NiVENk4uJUUwViVGOCUzRCU5Q2ElODkxWEglQzIlQkUlRDl5JTNGJTkwISVFNiU5QyVDMyVCRmsl
RTUlMDExJUM2LSVGNSVDOE4lMDQlREYlQkQlRkYlODklREZ0JTgzRE4lNjAlM0UlRjMlQUIlQTAl
REUlMUElNURnJUJFJTEwUSU5NyUxQiU0MCU5QyVBOG8lMTAlOEYlNUUlODI4JUI0JTFCJTYwJTg3
JUY2JTAyJTI2JTg1JTFDaCUxRSVDMSUyQiU1QmslRkYlODYlRUUlQjdqJTA5JTlBJURBJTlCJUFD
ZSVBMyVGOSVFQyVEQSE5JUI0JUQ1JUE2JTgxJTg2JTg2JTk4JUNDJTNDJTVCJTQwJUZBJTgxJUIz
JUU5JUNCJTIzJTk0JUMxNkF6byUwNSVENCVFMSVDMSU5NWElM0IlOEEnJUEwJUU4JUNDJTE3JTIy
JTg1JTFEJUJBJTAwJUEyJUZBJURDJTBBJTk0JUQxJUQxJThEJThCJTNBJTg0JTE3QiVDNyU2MCUx
QSUyNVolRkMlOEQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKSxcCit1cmwoXCJkYXRhOmlt
YWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAw
JTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJv
ZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUw
OSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQl
RUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBE
JUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5
JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUx
NCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVC
MyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUl
OTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTcl
MDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUsl
QjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIl
MkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThE
bSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4
JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSkl
MTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAl
OUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5
MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIl
QjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNI
QiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5
JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYl
RTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJB
JUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThB
JUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUx
MlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQl
MTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1
QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2
JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTcl
RjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIl
RDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5W
JTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3
QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIw
JTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1
RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUl
QjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYl
QUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMy
JUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlD
JTE4JTAwJTAwJTAwJTNBSURBVDglMTFjJUZDJUZGJUZGJTdGJTE4JTAzJTFBJTYwJTAxJUYyJTNG
JUEwJTg5MSU4MCUwNCVGRiUxMS0lRjglMTclOUJKJUUyJTA1JUIxWkQlODF2JTI2dCVFNyU4MCVG
OCVBMyU4MmglQTEyJTFBJTIwJUEzJTAxJTAyJTBGJTAxJUJBJTI1JTA2JTAwJTE5JUMwJTBEJUFF
RiVENSUzRVMlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCitiYWNrZ3JvdW5kLXJlcGVh
dDogbm8tcmVwZWF0LCByZXBlYXQteDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2Vu
dGVyLCB0b3AgbGVmdDtcCitjb2xvcjogdHJhbnNwYXJlbnQ7XAorYm9yZGVyOiAxcHggc29saWQg
YmxhY2s7XAorLW1vei1ib3JkZXItcmFkaXVzOiAycHg7XAorLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiAycHg7XAorYm9yZGVyLXJhZGl1czogMnB4O1wKK2N1cnNvcjogcG9pbnRlcjtcCitwb2ludGVy
LWV2ZW50czogYXV0bztcCit9XAorLmFjZV9kYXJrIC5hY2VfZm9sZCB7XAorfVwKKy5hY2VfZm9s
ZDpob3ZlcntcCitiYWNrZ3JvdW5kLWltYWdlOlwKK3VybChcImRhdGE6aW1hZ2UvcG5nLCU4OVBO
RyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMTElMDAlMDAlMDAlMDklMDgl
MDYlMDAlMDAlMDAlRDQlRTglQzclMEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUw
MHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFu
ZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3
JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVG
OCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTcl
RTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUw
MSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUx
RSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIy
JUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZn
OG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4
aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVC
MiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4l
RDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUz
JUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMl
MjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZ
JUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVF
MzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQl
RDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUx
Q2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUz
QiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUl
REQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlB
JTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1
RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkEl
QUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBx
JTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVG
OSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJG
JUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVG
MCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkEl
QTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0
JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0l
ODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVE
JTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVE
MXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTEl
M0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYl
Q0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAl
MDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAw
JTAwJUI1SURBVCglMTUlQTUlOTElM0QlMEUlMDIhJTEwJTg1YWMlRTElMDUlRDYlQ0UlRDYlQzYl
Q0UlRDIlRTglRUQlQ0QlREUlQzAlQzYlRDZOLiVFMFYlRjglM0QlOUNhJTg5MVhIJUMyJUJFJUQ5
eSUzRiU5MCElRTYlOUMlQzMlQkZrJUU1JTAxMSVDNi0lRjUlQzhOJTA0JURGJUJEJUZGJTg5JURG
dCU4M0ROJTYwJTNFJUYzJUFCJUEwJURFJTFBJTVEZyVCRSUxMFElOTclMUIlNDAlOUMlQThvJTEw
JThGJTVFJTgyOCVCNCUxQiU2MCU4NyVGNiUwMiUyNiU4NSUxQ2glMUUlQzElMkIlNUJrJUZGJTg2
JUVFJUI3aiUwOSU5QSVEQSU5QiVBQ2UlQTMlRjklRUMlREEhOSVCNCVENSVBNiU4MSU4NiU4NiU5
OCVDQyUzQyU1QiU0MCVGQSU4MSVCMyVFOSVDQiUyMyU5NCVDMTZBem8lMDUlRDQlRTElQzElOTVh
JTNCJThBJyVBMCVFOCVDQyUxNyUyMiU4NSUxRCVCQSUwMCVBMiVGQSVEQyUwQSU5NCVEMSVEMSU4
RCU4QiUzQSU4NCUxN0IlQzclNjAlMUElMjVaJUZDJThEJTAwJTAwJTAwJTAwSUVORCVBRUIlNjAl
ODJcIiksXAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAw
JTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUwMDclMDglMDYlMDAlMDAlMDAlQzQlREQlODBDJTAw
JTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZFJURB
ZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3
IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5
JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlFJTlC
NE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYl
MTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYlMTZK
JTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlB
JTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4
OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0
MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQlRTQn
JTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVB
OCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMlRTYl
MDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVF
NyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMlODkl
OUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1
JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVG
NyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVD
RCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVBQSVG
OEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4
JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3
JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjklRTUl
OUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMlOTcl
RkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMy
JTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUl
RDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThBOSVG
MiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVC
OSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3JURC
JUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0QlOEUl
QUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4lOTcl
RjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5OSUw
QyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAl
RTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVF
JTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNFViVB
QiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVB
MyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUw
MCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMDNJREFUOCUxMWMlRkMlRkYlRkYlN0Yl
M0UlMDMlMUElNjAlMDElRjIlM0YlQTMlODkxJTgwJTA0JUZGUSUyNiVGOHclQzAlQjQzJUExJURC
JTBDJUUyJThGJTBBJUEyJTg1JUNBaCU4MCU4QyUwNiUwOCUzQyUwNCVFOCU5NiUxOCUwMCVBM1Ml
MEQlQ0QlQ0YlRDglQzElOUQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCitiYWNrZ3Jv
dW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiBj
ZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcCit9XAorLmFjZV9lZGl0b3IuYWNlX2RyYWdnaW5nIC5h
Y2VfY29udGVudCB7XAorY3Vyc29yOiBtb3ZlO1wKK31cCisuYWNlX2d1dHRlci10b29sdGlwIHtc
CitiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1wKK2JhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGlu
ZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7
XAorYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJl
bnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAorYm9yZGVyOiAxcHggc29saWQgZ3JheTtcCitib3Jk
ZXItcmFkaXVzOiAxcHg7XAorYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4z
KTtcCitjb2xvcjogYmxhY2s7XAorZGlzcGxheTogaW5saW5lLWJsb2NrO1wKK21heC13aWR0aDog
NTAwcHg7XAorcGFkZGluZzogNHB4O1wKK3Bvc2l0aW9uOiBmaXhlZDtcCit6LWluZGV4OiAzMDA7
XAorLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9y
ZGVyLWJveDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2N1cnNvcjogZGVmYXVsdDtcCit3
aGl0ZS1zcGFjZTogcHJlLWxpbmU7XAord29yZC13cmFwOiBicmVhay13b3JkO1wKK2xpbmUtaGVp
Z2h0OiBub3JtYWw7XAorZm9udC1zdHlsZTogbm9ybWFsO1wKK2ZvbnQtd2VpZ2h0OiBub3JtYWw7
XAorbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcCit9XAorLmFjZV9mb2xkaW5nLWVuYWJsZWQgPiAu
YWNlX2d1dHRlci1jZWxsIHtcCitwYWRkaW5nLXJpZ2h0OiAxM3B4O1wKK31cCisuYWNlX2ZvbGQt
d2lkZ2V0IHtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gtc2l6
aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorbWFyZ2luOiAwIC0x
MnB4IDAgMXB4O1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCit3aWR0aDogMTFweDtcCit2ZXJ0
aWNhbC1hbGlnbjogdG9wO1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5n
LCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAlMDAl
MDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBZSU4QSVCMSUwRCUw
MDAlMEMlQzIlRjIlMkNLJTk2JUJDJUQwJThGOSU4MSU4OEglRTklRDAlMEUlOTYlQzAlMTAlOTIl
M0UlMDIlODAlNUUlODIlRTQlQTkqLSVFRXN3JUM4JUNDJTExJUVFJTk2dyVEOCVEQyVFOSpFaCUw
QyUxNTEoJTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6
IG5vLXJlcGVhdDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XAorYm9yZGVyLXJhZGl1
czogM3B4O1wKK2JvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1wKK31cCisuYWNlX2ZvbGQt
d2lkZ2V0LmFjZV9lbmQge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5n
LCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAlMDAl
MDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBbSVDNyVDMSUwOSUw
MDAlMDhDJUQxJThDJUVDRSVDOEUoJThFJUVDJTAyKSUxRVpKJUYxJUMxJyUwNCUwN0klRTElRTUl
RUUlQ0FMJUY1JUEyJTk5JTk5JTIyJUUyJUQ2JTFGVSVCNSVGRTAlRDl4JUE3JTI2V3o1JTBFJUQ1
JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorfVwKKy5hY2VfZm9sZC13aWRnZXQuYWNl
X2Nsb3NlZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5H
JTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwMyUwMCUwMCUwMCUwNiUwOCUw
NiUwMCUwMCUwMCUwNiVFNSUyNCUwQyUwMCUwMCUwMDlJREFUeCVEQTUlQ0ElQzElMDklMDAwJTA4
JTAzJUMwJUFDKiglM0UlMDQlQzElMEQlQkElQjElMjMlQTRVaCVFMCUyMCU4MSVDMCVDQyVGOCU4
MiU4MSVBQSVBMiVBQXJHZnIlODglMDglMTElMTElMUMlREQlN0QlRTAlRUUlNUIlRjYlRjYlQ0Il
QjglMDVRJTJGJUU5dGFpJUQ5JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorfVwKKy5h
Y2VfZm9sZC13aWRnZXQ6aG92ZXIge1wKK2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwg
MC4zKTtcCitiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorLW1v
ei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKKy13ZWJr
aXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCitib3gt
c2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKK31cCisuYWNlX2Zv
bGQtd2lkZ2V0OmFjdGl2ZSB7XAorYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQp
O1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XAorLW1vei1ib3gtc2hh
ZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKKy13ZWJraXQtYm94LXNo
YWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcCitib3gtc2hhZG93OiAw
IDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKK31cCisvKipcCisqIERhcmsgdmVy
c2lvbiBmb3IgZm9sZCB3aWRnZXRzXAorKi9cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldCB7
XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQUhrbEVRVlFJVzJQNC8vOC9B
em9HRVE3b0dDYUxMQWhXaVN3QjE0NkJBUUNTVFBZb2NxVDBBQUFBQUVsRlRrU3VRbUNDXCIpO1wK
K31cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcCitiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdDNEF4
akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09XCIpO1wKK31cCisuYWNlX2Rh
cmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUZD
QVlBQUFDQWNWYWlBQUFBSEVsRVFWUUlXMlA0Ly8rL0F4QXpnREFEbE9PQXpuSEFLZ1BXQXdBUmpp
OFVJRFRmUVFBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XAorfVwKKy5hY2VfZGFyayAuYWNlX2ZvbGQt
d2lkZ2V0OmhvdmVyIHtcCitib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjIpO1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcCit9
XAorLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcCistbW96LWJveC1zaGFkb3c6
IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorLXdlYmtpdC1ib3gtc2hhZG93
OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKK2JveC1zaGFkb3c6IDAgMXB4
IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorfVwKKy5hY2VfZm9sZC13aWRnZXQuYWNl
X2ludmFsaWQge1wKK2JhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7XAorYm9yZGVyLWNvbG9yOiAj
REU1NTU1O1wKK31cCisuYWNlX2ZhZGUtZm9sZC13aWRnZXRzIC5hY2VfZm9sZC13aWRnZXQge1wK
Ky1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XAorLXdlYmtpdC10cmFu
c2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCistby10cmFuc2l0aW9uOiBvcGFjaXR5
IDAuNHMgZWFzZSAwLjA1cztcCistbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4w
NXM7XAordHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XAorb3BhY2l0eTogMDtc
Cit9XAorLmFjZV9mYWRlLWZvbGQtd2lkZ2V0czpob3ZlciAuYWNlX2ZvbGQtd2lkZ2V0IHtcCist
bW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCistd2Via2l0LXRyYW5z
aXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCistby10cmFuc2l0aW9uOiBvcGFjaXR5
IDAuMDVzIGVhc2UgMC4wNXM7XAorLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAw
LjA1cztcCit0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAorb3BhY2l0eTox
O1wKK31cCisuYWNlX3VuZGVybGluZSB7XAordGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XAor
fVwKKy5hY2VfYm9sZCB7XAorZm9udC13ZWlnaHQ6IGJvbGQ7XAorfVwKKy5hY2Vfbm9ib2xkIC5h
Y2VfYm9sZCB7XAorZm9udC13ZWlnaHQ6IG5vcm1hbDtcCit9XAorLmFjZV9pdGFsaWMge1wKK2Zv
bnQtc3R5bGU6IGl0YWxpYztcCit9XAorIjsKKworZG9tLmltcG9ydENzc1N0cmluZyhlZGl0b3JD
c3MsICJhY2VfZWRpdG9yIik7CisKK3ZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250
YWluZXIsIHRoZW1lKSB7CisgICAgdmFyIF9zZWxmID0gdGhpczsKKworICAgIHRoaXMuY29udGFp
bmVyID0gY29udGFpbmVyIHx8IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLiRr
ZWVwVGV4dEFyZWFBdEN1cnNvciA9ICF1c2VyYWdlbnQuaXNJRTsKKworICAgIGRvbS5hZGRDc3ND
bGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9lZGl0b3IiKTsKKworICAgIHRoaXMuc2V0VGhlbWUo
dGhlbWUpOworCisgICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgIHRoaXMuJGd1dHRlci5jbGFzc05hbWUgPSAiYWNlX2d1dHRlciI7CisgICAgdGhpcy5jb250
YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyKTsKKworICAgIHRoaXMuc2Nyb2xsZXIgPSBk
b20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSAi
YWNlX3Njcm9sbGVyIjsKKyAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9s
bGVyKTsKKworICAgIHRoaXMuY29udGVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gImFjZV9jb250ZW50IjsKKyAgICB0aGlzLnNjcm9s
bGVyLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7CisKKyAgICB0aGlzLnNldEhpZ2hsaWdodEd1
dHRlckxpbmUodHJ1ZSk7CisgICAgdGhpcy4kZ3V0dGVyTGF5ZXIgPSBuZXcgR3V0dGVyTGF5ZXIo
dGhpcy4kZ3V0dGVyKTsKKyAgICB0aGlzLiRndXR0ZXJMYXllci5vbigiY2hhbmdlR3V0dGVyV2lk
dGgiLCB0aGlzLm9uR3V0dGVyUmVzaXplLmJpbmQodGhpcykpOworCisgICAgdGhpcy4kbWFya2Vy
QmFjayA9IG5ldyBNYXJrZXJMYXllcih0aGlzLmNvbnRlbnQpOworCisgICAgdmFyIHRleHRMYXll
ciA9IHRoaXMuJHRleHRMYXllciA9IG5ldyBUZXh0TGF5ZXIodGhpcy5jb250ZW50KTsKKyAgICB0
aGlzLmNhbnZhcyA9IHRleHRMYXllci5lbGVtZW50OworCisgICAgdGhpcy4kbWFya2VyRnJvbnQg
PSBuZXcgTWFya2VyTGF5ZXIodGhpcy5jb250ZW50KTsKKworICAgIHRoaXMuJGN1cnNvckxheWVy
ID0gbmV3IEN1cnNvckxheWVyKHRoaXMuY29udGVudCk7CisgICAgdGhpcy4kaG9yaXpTY3JvbGwg
PSBmYWxzZTsKKyAgICB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgPSBmYWxzZTsKKwor
ICAgIHRoaXMuJGFuaW1hdGVkU2Nyb2xsID0gZmFsc2U7CisKKyAgICB0aGlzLnNjcm9sbEJhciA9
IG5ldyBTY3JvbGxCYXIodGhpcy5jb250YWluZXIpOworICAgIHRoaXMuc2Nyb2xsQmFyLmFkZEV2
ZW50TGlzdGVuZXIoInNjcm9sbCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCFfc2VsZi4k
aW5TY3JvbGxBbmltYXRpb24pCisgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9sbFRv
cChlLmRhdGEpOworICAgIH0pOworCisgICAgdGhpcy5zY3JvbGxUb3AgPSAwOworICAgIHRoaXMu
c2Nyb2xsTGVmdCA9IDA7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0aGlzLnNjcm9sbGVyLCAi
c2Nyb2xsIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gX3NlbGYuc2Ny
b2xsZXIuc2Nyb2xsTGVmdDsKKyAgICAgICAgX3NlbGYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7
CisgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTsKKyAgICB9
KTsKKworICAgIHRoaXMuY3Vyc29yUG9zID0geworICAgICAgICByb3cgOiAwLAorICAgICAgICBj
b2x1bW4gOiAwCisgICAgfTsKKworICAgIHRoaXMuJHRleHRMYXllci5hZGRFdmVudExpc3RlbmVy
KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIF9zZWxmLnVwZGF0
ZUNoYXJhY3RlclNpemUoKTsKKyAgICAgICAgX3NlbGYub25SZXNpemUodHJ1ZSk7CisgICAgfSk7
CisKKyAgICB0aGlzLiRzaXplID0geworICAgICAgICB3aWR0aDogMCwKKyAgICAgICAgaGVpZ2h0
OiAwLAorICAgICAgICBzY3JvbGxlckhlaWdodDogMCwKKyAgICAgICAgc2Nyb2xsZXJXaWR0aDog
MAorICAgIH07CisKKyAgICB0aGlzLmxheWVyQ29uZmlnID0geworICAgICAgICB3aWR0aCA6IDEs
CisgICAgICAgIHBhZGRpbmcgOiAwLAorICAgICAgICBmaXJzdFJvdyA6IDAsCisgICAgICAgIGZp
cnN0Um93U2NyZWVuOiAwLAorICAgICAgICBsYXN0Um93IDogMCwKKyAgICAgICAgbGluZUhlaWdo
dCA6IDEsCisgICAgICAgIGNoYXJhY3RlcldpZHRoIDogMSwKKyAgICAgICAgbWluSGVpZ2h0IDog
MSwKKyAgICAgICAgbWF4SGVpZ2h0IDogMSwKKyAgICAgICAgb2Zmc2V0IDogMCwKKyAgICAgICAg
aGVpZ2h0IDogMQorICAgIH07CisKKyAgICB0aGlzLiRsb29wID0gbmV3IFJlbmRlckxvb3AoCisg
ICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMuYmluZCh0aGlzKSwKKyAgICAgICAgdGhpcy5jb250
YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldworICAgICk7CisgICAgdGhpcy4kbG9vcC5z
Y2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKworICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6
ZSgpOworICAgIHRoaXMuc2V0UGFkZGluZyg0KTsKK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnNob3dHdXR0ZXIgPSB0cnVlOworCisgICAgdGhpcy5DSEFOR0VfQ1VSU09SID0gMTsKKyAg
ICB0aGlzLkNIQU5HRV9NQVJLRVIgPSAyOworICAgIHRoaXMuQ0hBTkdFX0dVVFRFUiA9IDQ7Cisg
ICAgdGhpcy5DSEFOR0VfU0NST0xMID0gODsKKyAgICB0aGlzLkNIQU5HRV9MSU5FUyA9IDE2Owor
ICAgIHRoaXMuQ0hBTkdFX1RFWFQgPSAzMjsKKyAgICB0aGlzLkNIQU5HRV9TSVpFID0gNjQ7Cisg
ICAgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0sgPSAxMjg7CisgICAgdGhpcy5DSEFOR0VfTUFSS0VS
X0ZST05UID0gMjU2OworICAgIHRoaXMuQ0hBTkdFX0ZVTEwgPSA1MTI7CisgICAgdGhpcy5DSEFO
R0VfSF9TQ1JPTEwgPSAxMDI0OworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOworICAgIAorICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6ZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLmFsbG93Qm9sZEZvbnRzICE9IHRoaXMuJGFsbG93
Qm9sZEZvbnRzKSB7CisgICAgICAgICAgICB0aGlzLiRhbGxvd0JvbGRGb250cyA9IHRoaXMuJHRl
eHRMYXllci5hbGxvd0JvbGRGb250czsKKyAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoImFjZV9u
b2JvbGQiLCAhdGhpcy4kYWxsb3dCb2xkRm9udHMpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENoYXJhY3Rlcldp
ZHRoKCk7CisgICAgICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuJHRleHRMYXllci5nZXRMaW5l
SGVpZ2h0KCk7CisgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7CisgICAgfTsKKyAg
ICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHRoaXMuc2Vz
c2lvbiA9IHNlc3Npb247CisgICAgICAgIAorICAgICAgICB0aGlzLnNjcm9sbGVyLmNsYXNzTmFt
ZSA9ICJhY2Vfc2Nyb2xsZXIiOworICAgICAgICAKKyAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIu
c2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRTZXNzaW9u
KHNlc3Npb24pOworICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRTZXNzaW9uKHNlc3Npb24p
OworICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5zZXRTZXNzaW9uKHNlc3Npb24pOworICAgICAg
ICB0aGlzLiR0ZXh0TGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kbG9v
cC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICAgICAgCisgICAgfTsKKyAgICB0aGlz
LnVwZGF0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYg
KGxhc3RSb3cgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGxhc3RSb3cgPSBJbmZpbml0eTsK
KworICAgICAgICBpZiAoIXRoaXMuJGNoYW5nZWRMaW5lcykgeworICAgICAgICAgICAgdGhpcy4k
Y2hhbmdlZExpbmVzID0geworICAgICAgICAgICAgICAgIGZpcnN0Um93OiBmaXJzdFJvdywKKyAg
ICAgICAgICAgICAgICBsYXN0Um93OiBsYXN0Um93CisgICAgICAgICAgICB9OworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJz
dFJvdyA+IGZpcnN0Um93KQorICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5maXJz
dFJvdyA9IGZpcnN0Um93OworCisgICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmxh
c3RSb3cgPCBsYXN0Um93KQorICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0
Um93ID0gbGFzdFJvdzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMuJGNo
YW5nZWRMaW5lcy5maXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcubGFzdFJvdyB8fAorICAgICAg
ICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmZpcnN0
Um93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRo
aXMuQ0hBTkdFX0xJTkVTKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhU
IHwgdGhpcy5DSEFOR0VfTUFSS0VSKTsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLm9uQ2hhbmdl
VGFiU2l6ZSgpOworICAgIH07CisgICAgdGhpcy51cGRhdGVUZXh0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgfTsKKyAg
ICB0aGlzLnVwZGF0ZUZ1bGwgPSBmdW5jdGlvbihmb3JjZSkgeworICAgICAgICBpZiAoZm9yY2Up
eworICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyh0aGlzLkNIQU5HRV9GVUxMLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMudXBk
YXRlRm9udFNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLmNoZWNr
Rm9yU2l6ZUNoYW5nZXMoKTsKKyAgICB9OworICAgIHRoaXMub25SZXNpemUgPSBmdW5jdGlvbihm
b3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIGNoYW5nZXMg
PSB0aGlzLkNIQU5HRV9TSVpFOworICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJHNpemU7CisKKyAg
ICAgICAgaWYgKHRoaXMucmVzaXppbmcgPiAyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBlbHNlIGlmICh0aGlzLnJlc2l6aW5nID4gMSkKKyAgICAgICAgICAgIHRoaXMucmVzaXppbmcr
KzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5yZXNpemluZyA9IGZvcmNlID8gMSA6
IDA7CisgICAgICAgIGlmICghaGVpZ2h0KQorICAgICAgICAgICAgaGVpZ2h0ID0gZG9tLmdldElu
bmVySGVpZ2h0KHRoaXMuY29udGFpbmVyKTsKKworICAgICAgICBpZiAoaGVpZ2h0ICYmIChmb3Jj
ZSB8fCBzaXplLmhlaWdodCAhPSBoZWlnaHQpKSB7CisgICAgICAgICAgICBzaXplLmhlaWdodCA9
IGhlaWdodDsKKworICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCA9IHRoaXMuc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0SGVpZ2h0KHNp
emUuc2Nyb2xsZXJIZWlnaHQpOworCisgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLmdldFNjcm9sbFRv
cCgpKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX0ZV
TEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdpZHRoKQorICAg
ICAgICAgICAgd2lkdGggPSBkb20uZ2V0SW5uZXJXaWR0aCh0aGlzLmNvbnRhaW5lcik7CisKKyAg
ICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnJlc2l6aW5nID4gMSB8fCBzaXplLndp
ZHRoICE9IHdpZHRoKSkgeworICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHdpZHRoOworCisgICAg
ICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlzLnNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIu
b2Zmc2V0V2lkdGggOiAwOworICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5sZWZ0ID0g
Z3V0dGVyV2lkdGggKyAicHgiOworICAgICAgICAgICAgc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0
aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJXaWR0aCAtIHRoaXMuc2Nyb2xsQmFyLmdldFdpZHRoKCkp
OworICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5yaWdodCA9IHRoaXMuc2Nyb2xsQmFy
LmdldFdpZHRoKCkgKyAicHgiOworCisgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldFVz
ZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1c3RXcmFwTGltaXQoKSB8fCBmb3JjZSkKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX0ZVTEw7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZm9yY2UpCisgICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKGNo
YW5nZXMsIHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVk
dWxlKGNoYW5nZXMpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvcmNlKQorICAgICAgICAgICAg
ZGVsZXRlIHRoaXMucmVzaXppbmc7CisgICAgfTsKKworICAgIHRoaXMub25HdXR0ZXJSZXNpemUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHdpZHRoID0gdGhpcy4kc2l6ZS53aWR0aDsKKyAg
ICAgICAgdmFyIGd1dHRlcldpZHRoID0gdGhpcy5zaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVyLm9m
ZnNldFdpZHRoIDogMDsKKyAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5sZWZ0ID0gZ3V0dGVy
V2lkdGggKyAicHgiOworICAgICAgICB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggPSBNYXRoLm1h
eCgwLCB3aWR0aCAtIGd1dHRlcldpZHRoIC0gdGhpcy5zY3JvbGxCYXIuZ2V0V2lkdGgoKSk7CisK
KyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRqdXN0
V3JhcExpbWl0KCkpCisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdF
X0ZVTEwpOworICAgIH07CisgICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGF2YWlsYWJsZVdpZHRoID0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0g
dGhpcy4kcGFkZGluZyAqIDI7CisgICAgICAgIHZhciBsaW1pdCA9IE1hdGguZmxvb3IoYXZhaWxh
YmxlV2lkdGggLyB0aGlzLmNoYXJhY3RlcldpZHRoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vz
c2lvbi5hZGp1c3RXcmFwTGltaXQobGltaXQpOworICAgIH07CisgICAgdGhpcy5zZXRBbmltYXRl
ZFNjcm9sbCA9IGZ1bmN0aW9uKHNob3VsZEFuaW1hdGUpeworICAgICAgICB0aGlzLiRhbmltYXRl
ZFNjcm9sbCA9IHNob3VsZEFuaW1hdGU7CisgICAgfTsKKyAgICB0aGlzLmdldEFuaW1hdGVkU2Ny
b2xsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRhbmltYXRlZFNjcm9sbDsK
KyAgICB9OworICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNp
YmxlcykgeworICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLnNldFNob3dJbnZpc2libGVzKHNo
b3dJbnZpc2libGVzKSkKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFO
R0VfVEVYVCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0ZXh0TGF5ZXIuc2hvd0ludmlzaWJsZXM7CisgICAg
fTsKKworICAgIHRoaXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kdGV4dExheWVyLmRpc3BsYXlJbmRlbnRHdWlkZXM7CisgICAgfTsK
KyAgICAKKyAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5
KSB7CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhk
aXNwbGF5KSkKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVY
VCk7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSB0cnVlOworICAg
IHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Cisg
ICAgICAgIHRoaXMuJHNob3dQcmludE1hcmdpbiA9IHNob3dQcmludE1hcmdpbjsKKyAgICAgICAg
dGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd1ByaW50
TWFyZ2luID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzaG93UHJpbnRNYXJn
aW47CisgICAgfTsKKworICAgIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uID0gODA7CisgICAgdGhp
cy5zZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikgeworICAg
ICAgICB0aGlzLiRwcmludE1hcmdpbkNvbHVtbiA9IHNob3dQcmludE1hcmdpbjsKKyAgICAgICAg
dGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0UHJpbnRNYXJn
aW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHByaW50TWFyZ2lu
Q29sdW1uOworICAgIH07CisgICAgdGhpcy5nZXRTaG93R3V0dGVyID0gZnVuY3Rpb24oKXsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuc2hvd0d1dHRlcjsKKyAgICB9OworICAgIHRoaXMuc2V0U2hvd0d1
dHRlciA9IGZ1bmN0aW9uKHNob3cpeworICAgICAgICBpZih0aGlzLnNob3dHdXR0ZXIgPT09IHNo
b3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGd1dHRlci5zdHlsZS5kaXNw
bGF5ID0gc2hvdyA/ICJibG9jayIgOiAibm9uZSI7CisgICAgICAgIHRoaXMuc2hvd0d1dHRlciA9
IHNob3c7CisgICAgICAgIHRoaXMub25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworICAgIHRoaXMu
Z2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKXsKKyAgICAgICAgcmV0dXJuIGRvbS5oYXND
c3NDbGFzcyh0aGlzLiRndXR0ZXIsICJhY2VfZmFkZS1mb2xkLXdpZGdldHMiKTsKKyAgICB9Owor
CisgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7CisgICAgICAg
IGlmIChzaG93KQorICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuJGd1dHRlciwgImFj
ZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb20ucmVt
b3ZlQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7CisgICAg
fTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBmYWxzZTsKKyAgICB0aGlzLnNl
dEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAgICAg
ICAgaWYgKHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gc2hv
dWxkSGlnaGxpZ2h0OworCisgICAgICAgIGlmICghdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCkg
eworICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCA9IGRvbS5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuY2xhc3NO
YW1lID0gImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUiOworICAgICAgICAgICAgdGhpcy4kZ3V0dGVy
LmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHls
ZS5kaXNwbGF5ID0gc2hvdWxkSGlnaGxpZ2h0ID8gIiIgOiAibm9uZSI7CisgICAgICAgIGlmICh0
aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVHdXR0
ZXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVy
TGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0R3V0dGVy
TGluZTsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLnRvcCA9
IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3AgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNl
dCArICJweCI7CisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUuaGVpZ2h0
ID0gdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIAorICAg
IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhp
cy4kc2hvd1ByaW50TWFyZ2luICYmICF0aGlzLiRwcmludE1hcmdpbkVsKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy4kcHJpbnRNYXJnaW5FbCkgeworICAgICAgICAg
ICAgdmFyIGNvbnRhaW5lckVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg
ICAgY29udGFpbmVyRWwuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfcHJpbnQtbWFyZ2luLWxh
eWVyIjsKKyAgICAgICAgICAgIHRoaXMuJHByaW50TWFyZ2luRWwgPSBkb20uY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZSA9ICJh
Y2VfcHJpbnQtbWFyZ2luIjsKKyAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHRo
aXMuJHByaW50TWFyZ2luRWwpOworICAgICAgICAgICAgdGhpcy5jb250ZW50Lmluc2VydEJlZm9y
ZShjb250YWluZXJFbCwgdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHN0eWxlID0gdGhpcy4kcHJpbnRNYXJnaW5FbC5zdHlsZTsKKyAgICAgICAgc3R5
bGUubGVmdCA9ICgodGhpcy5jaGFyYWN0ZXJXaWR0aCAqIHRoaXMuJHByaW50TWFyZ2luQ29sdW1u
KSArIHRoaXMuJHBhZGRpbmcpICsgInB4IjsKKyAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9IHRo
aXMuJHNob3dQcmludE1hcmdpbiA/ICJ2aXNpYmxlIiA6ICJoaWRkZW4iOworICAgIH07CisgICAg
dGhpcy5nZXRDb250YWluZXJFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmNvbnRhaW5lcjsKKyAgICB9OworICAgIHRoaXMuZ2V0TW91c2VFdmVudFRhcmdldCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50OworICAgIH07CisgICAgdGhp
cy5nZXRUZXh0QXJlYUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5jb250YWluZXI7CisgICAgfTsKKyAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvciA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZpZzsK
KyAgICAgICAgdmFyIHBvc1RvcCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3A7Cisg
ICAgICAgIHZhciBwb3NMZWZ0ID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLmxlZnQ7Cisg
ICAgICAgIHBvc1RvcCAtPSBjb25maWcub2Zmc2V0OworCisgICAgICAgIGlmIChwb3NUb3AgPCAw
IHx8IHBvc1RvcCA+IGNvbmZpZy5oZWlnaHQgLSB0aGlzLmxpbmVIZWlnaHQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIHcgPSB0aGlzLmNoYXJhY3RlcldpZHRoOworICAgICAg
ICBpZiAodGhpcy4kY29tcG9zaXRpb24pIHsKKyAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnRl
eHRhcmVhLnZhbHVlLnJlcGxhY2UoL15ceDAxKy8sICIiKTsKKyAgICAgICAgICAgIHcgKj0gdGhp
cy5zZXNzaW9uLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh2YWwpWzBdOworICAgICAgICB9CisgICAg
ICAgIHBvc0xlZnQgLT0gdGhpcy5zY3JvbGxMZWZ0OworICAgICAgICBpZiAocG9zTGVmdCA+IHRo
aXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHcpCisgICAgICAgICAgICBwb3NMZWZ0ID0gdGhpcy4k
c2l6ZS5zY3JvbGxlcldpZHRoIC0gdzsKKworICAgICAgICBwb3NMZWZ0IC09IHRoaXMuc2Nyb2xs
QmFyLndpZHRoOworCisgICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gdGhpcy5s
aW5lSGVpZ2h0ICsgInB4IjsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS53aWR0aCA9IHcg
KyAicHgiOworICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLnJpZ2h0ID0gdGhpcy4kc2l6ZS5z
Y3JvbGxlcldpZHRoIC0gcG9zTGVmdCAtIHcgKyAicHgiOworICAgICAgICB0aGlzLnRleHRhcmVh
LnN0eWxlLmJvdHRvbSA9IHRoaXMuJHNpemUuaGVpZ2h0IC0gcG9zVG9wIC0gdGhpcy5saW5lSGVp
Z2h0ICsgInB4IjsKKyAgICB9OworICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93OworICAgIH07
CisgICAgdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyArICh0aGlzLmxheWVyQ29uZmlnLm9m
ZnNldCA9PT0gMCA/IDAgOiAxKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJs
ZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZmxpbnQgPSBNYXRoLmZsb29yKCh0aGlz
LmxheWVyQ29uZmlnLmhlaWdodCArIHRoaXMubGF5ZXJDb25maWcub2Zmc2V0KSAvIHRoaXMubGF5
ZXJDb25maWcubGluZUhlaWdodCk7CisgICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZp
cnN0Um93IC0gMSArIGZsaW50OworICAgIH07CisgICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5sYXN0Um93Owor
ICAgIH07CisKKyAgICB0aGlzLiRwYWRkaW5nID0gbnVsbDsKKyAgICB0aGlzLnNldFBhZGRpbmcg
PSBmdW5jdGlvbihwYWRkaW5nKSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOwor
ICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAgdGhp
cy4kY3Vyc29yTGF5ZXIuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAgdGhpcy4kbWFya2Vy
RnJvbnQuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRQ
YWRkaW5nKHBhZGRpbmcpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdF
X0ZVTEwpOworICAgICAgICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07CisgICAg
dGhpcy5nZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlOworICAgIH07CisgICAgdGhpcy5z
ZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHsKKyAg
ICAgICAgaWYgKHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSAhPSBhbHdheXNWaXNpYmxl
KSB7CisgICAgICAgICAgICB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgPSBhbHdheXNW
aXNpYmxlOworICAgICAgICAgICAgaWYgKCF0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUg
fHwgIXRoaXMuJGhvcml6U2Nyb2xsKQorICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1
bGUodGhpcy5DSEFOR0VfU0NST0xMKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiR1
cGRhdGVTY3JvbGxCYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0
SW5uZXJIZWlnaHQodGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQpOworICAgICAgICB0aGlzLnNj
cm9sbEJhci5zZXRTY3JvbGxUb3AodGhpcy5zY3JvbGxUb3ApOworICAgIH07CisKKyAgICB0aGlz
LiRyZW5kZXJDaGFuZ2VzID0gZnVuY3Rpb24oY2hhbmdlcywgZm9yY2UpIHsKKyAgICAgICAgaWYg
KCFmb3JjZSAmJiAoIWNoYW5nZXMgfHwgIXRoaXMuc2Vzc2lvbiB8fCAhdGhpcy5jb250YWluZXIu
b2Zmc2V0V2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX0ZVTEwgfHwKKyAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9T
SVpFIHx8CisgICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fAorICAgICAg
ICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8CisgICAgICAgICAgICBjaGFuZ2Vz
ICYgdGhpcy5DSEFOR0VfU0NST0xMCisgICAgICAgICkKKyAgICAgICAgICAgIHRoaXMuJGNvbXB1
dGVMYXllckNvbmZpZygpOworICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0hfU0NS
T0xMKSB7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9s
bExlZnQ7CisgICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsZXIuc2Nyb2xs
TGVmdDsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTsKKworICAgICAgICAg
ICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPT0gMCA/ICJhY2Vf
c2Nyb2xsZXIiIDogImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnQiOworICAgICAgICB9Cisg
ICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfRlVMTCkgeworICAgICAgICAgICAgdGhp
cy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKKyAgICAgICAgICAgIHRoaXMuJHVw
ZGF0ZVNjcm9sbEJhcigpOworICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlz
LmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAg
ICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAg
ICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAg
ICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAg
ICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAg
ICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgICAgICAgICAgdGhpcy4k
aGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0KCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZXMgJiB0
aGlzLkNIQU5HRV9TQ1JPTEwpIHsKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVNjcm9sbEJhcigp
OworICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMg
JiB0aGlzLkNIQU5HRV9MSU5FUykKKyAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBk
YXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRoaXMuJHRleHRMYXllci5zY3JvbGxMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTsKKworICAgICAg
ICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJM
YXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtYXJrZXJC
YWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1hcmtlckZy
b250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJGN1cnNvckxh
eWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0
QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYm
IHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCkgewor
ICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0
dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9MSU5FUykgeworICAgICAgICAgICAgaWYgKHRo
aXMuJHVwZGF0ZUxpbmVzKCkgfHwgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpICYmIHRo
aXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUo
dGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX1RFWFQgfHwgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikgeworICAg
ICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0
ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0NVUlNPUikgeworICAgICAgICAgICAgdGhpcy4kY3Vy
c29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4kbW92
ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxp
bmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFS
S0VSX0ZST05UKSkgeworICAgICAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMu
bGF5ZXJDb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5D
SEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spKSB7CisgICAgICAgICAgICB0
aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0laRSkKKyAgICAgICAgICAgIHRoaXMu
JHVwZGF0ZVNjcm9sbEJhcigpOworICAgIH07CisKKyAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25m
aWcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisK
KyAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuc2Nyb2xsVG9wICUgdGhpcy5saW5lSGVpZ2h0Owor
ICAgICAgICB2YXIgbWluSGVpZ2h0ID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCArIHRoaXMu
bGluZUhlaWdodDsKKworICAgICAgICB2YXIgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0
TGluZSgpOworCisgICAgICAgIHZhciBob3JpelNjcm9sbCA9IHRoaXMuJGhvcml6U2Nyb2xsQWx3
YXlzVmlzaWJsZSB8fCB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSBsb25nZXN0TGluZSA8IDA7
CisgICAgICAgIHZhciBob3JpelNjcm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAhPT0g
aG9yaXpTY3JvbGw7CisgICAgICAgIHRoaXMuJGhvcml6U2Nyb2xsID0gaG9yaXpTY3JvbGw7Cisg
ICAgICAgIGlmIChob3JpelNjcm9sbENoYW5nZWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xs
ZXIuc3R5bGUub3ZlcmZsb3dYID0gaG9yaXpTY3JvbGwgPyAic2Nyb2xsIiA6ICJoaWRkZW4iOwor
ICAgICAgICAgICAgaWYgKCFob3JpelNjcm9sbCkKKyAgICAgICAgICAgICAgICB0aGlzLnNlc3Np
b24uc2V0U2Nyb2xsTGVmdCgwKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbWF4SGVpZ2h0ID0g
dGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpICogdGhpcy5saW5lSGVpZ2h0OworICAgICAg
ICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuc2Ny
b2xsVG9wLCBtYXhIZWlnaHQgLSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSkpOworCisgICAg
ICAgIHZhciBsaW5lQ291bnQgPSBNYXRoLmNlaWwobWluSGVpZ2h0IC8gdGhpcy5saW5lSGVpZ2h0
KSAtIDE7CisgICAgICAgIHZhciBmaXJzdFJvdyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHRo
aXMuc2Nyb2xsVG9wIC0gb2Zmc2V0KSAvIHRoaXMubGluZUhlaWdodCkpOworICAgICAgICB2YXIg
bGFzdFJvdyA9IGZpcnN0Um93ICsgbGluZUNvdW50OworICAgICAgICB2YXIgZmlyc3RSb3dTY3Jl
ZW4sIGZpcnN0Um93SGVpZ2h0OworICAgICAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMubGluZUhl
aWdodDsKKyAgICAgICAgZmlyc3RSb3cgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3coZmly
c3RSb3csIDApOworICAgICAgICB2YXIgZm9sZExpbmUgPSBzZXNzaW9uLmdldEZvbGRMaW5lKGZp
cnN0Um93KTsKKyAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICBmaXJzdFJvdyA9
IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Um93U2NyZWVu
ID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KGZpcnN0Um93LCAwKTsKKyAgICAgICAgZmly
c3RSb3dIZWlnaHQgPSBzZXNzaW9uLmdldFJvd0xlbmd0aChmaXJzdFJvdykgKiBsaW5lSGVpZ2h0
OworCisgICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRS
b3cobGFzdFJvdywgMCksIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgbWluSGVp
Z2h0ID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCArIHNlc3Npb24uZ2V0Um93TGVuZ3RoKGxh
c3RSb3cpICogbGluZUhlaWdodCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJvd0hlaWdodDsKKworICAgICAgICBvZmZzZXQgPSB0aGlzLnNj
cm9sbFRvcCAtIGZpcnN0Um93U2NyZWVuICogbGluZUhlaWdodDsKKworICAgICAgICB0aGlzLmxh
eWVyQ29uZmlnID0geworICAgICAgICAgICAgd2lkdGggOiBsb25nZXN0TGluZSwKKyAgICAgICAg
ICAgIHBhZGRpbmcgOiB0aGlzLiRwYWRkaW5nLAorICAgICAgICAgICAgZmlyc3RSb3cgOiBmaXJz
dFJvdywKKyAgICAgICAgICAgIGZpcnN0Um93U2NyZWVuOiBmaXJzdFJvd1NjcmVlbiwKKyAgICAg
ICAgICAgIGxhc3RSb3cgOiBsYXN0Um93LAorICAgICAgICAgICAgbGluZUhlaWdodCA6IGxpbmVI
ZWlnaHQsCisgICAgICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IHRoaXMuY2hhcmFjdGVyV2lkdGgs
CisgICAgICAgICAgICBtaW5IZWlnaHQgOiBtaW5IZWlnaHQsCisgICAgICAgICAgICBtYXhIZWln
aHQgOiBtYXhIZWlnaHQsCisgICAgICAgICAgICBvZmZzZXQgOiBvZmZzZXQsCisgICAgICAgICAg
ICBoZWlnaHQgOiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0CisgICAgICAgIH07CisKKyAgICAg
ICAgdGhpcy4kZ3V0dGVyTGF5ZXIuZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSAoLW9mZnNldCkg
KyAicHgiOworICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wID0gKC1vZmZzZXQp
ICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gbG9uZ2VzdExpbmUg
KyAyICogdGhpcy4kcGFkZGluZyArICJweCI7CisgICAgICAgIHRoaXMuY29udGVudC5zdHlsZS5o
ZWlnaHQgPSBtaW5IZWlnaHQgKyAicHgiOworICAgICAgICBpZiAoaG9yaXpTY3JvbGxDaGFuZ2Vk
KQorICAgICAgICAgICAgdGhpcy5vblJlc2l6ZSh0cnVlKTsKKyAgICB9OworCisgICAgdGhpcy4k
dXBkYXRlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhpcy4k
Y2hhbmdlZExpbmVzLmZpcnN0Um93OworICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNoYW5n
ZWRMaW5lcy5sYXN0Um93OworICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsOworCisg
ICAgICAgIHZhciBsYXllckNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7CisKKyAgICAgICAgaWYg
KGZpcnN0Um93ID4gbGF5ZXJDb25maWcubGFzdFJvdyArIDEpIHsgcmV0dXJuOyB9CisgICAgICAg
IGlmIChsYXN0Um93IDwgbGF5ZXJDb25maWcuZmlyc3RSb3cpIHsgcmV0dXJuOyB9CisgICAgICAg
IGlmIChsYXN0Um93ID09PSBJbmZpbml0eSkgeworICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0d1
dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUobGF5ZXJDb25m
aWcpOworICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShsYXllckNvbmZpZyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kdGV4dExheWVyLnVw
ZGF0ZUxpbmVzKGxheWVyQ29uZmlnLCBmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisKKyAgICB0aGlzLiRnZXRMb25nZXN0TGluZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgY2hhckNvdW50ID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbldpZHRoKCk7
CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2hvd0ludmlzaWJsZXMpCisgICAgICAgICAg
ICBjaGFyQ291bnQgKz0gMTsKKworICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy4kc2l6ZS5z
Y3JvbGxlcldpZHRoIC0gMiAqIHRoaXMuJHBhZGRpbmcsIE1hdGgucm91bmQoY2hhckNvdW50ICog
dGhpcy5jaGFyYWN0ZXJXaWR0aCkpOworICAgIH07CisgICAgdGhpcy51cGRhdGVGcm9udE1hcmtl
cnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0TWFya2Vycyh0
aGlzLnNlc3Npb24uZ2V0TWFya2Vycyh0cnVlKSk7CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1
bGUodGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKTsKKyAgICB9OworICAgIHRoaXMudXBkYXRlQmFj
a01hcmtlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRNYXJr
ZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKCkpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVk
dWxlKHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKTsKKyAgICB9OworICAgIHRoaXMuYWRkR3V0dGVy
RGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXsKKyAgICAgICAgdGhpcy4kZ3V0
dGVyTGF5ZXIuYWRkR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7CisgICAgfTsKKyAg
ICB0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSl7
CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93LCBj
bGFzc05hbWUpOworICAgIH07CisgICAgdGhpcy51cGRhdGVCcmVha3BvaW50cyA9IGZ1bmN0aW9u
KHJvd3MpIHsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIp
OworICAgIH07CisgICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25z
KSB7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnNldEFubm90YXRpb25zKGFubm90YXRpb25z
KTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpOworICAg
IH07CisgICAgdGhpcy51cGRhdGVDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4k
bG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9DVVJTT1IpOworICAgIH07CisgICAgdGhpcy5oaWRl
Q3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmhpZGVDdXJz
b3IoKTsKKyAgICB9OworICAgIHRoaXMuc2hvd0N1cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLiRjdXJzb3JMYXllci5zaG93Q3Vyc29yKCk7CisgICAgfTsKKworICAgIHRoaXMuc2Ny
b2xsU2VsZWN0aW9uSW50b1ZpZXcgPSBmdW5jdGlvbihhbmNob3IsIGxlYWQsIG9mZnNldCkgewor
ICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGFuY2hvciwgb2Zmc2V0KTsKKyAgICAg
ICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyhsZWFkLCBvZmZzZXQpOworICAgIH07CisgICAg
dGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyA9IGZ1bmN0aW9uKGN1cnNvciwgb2Zmc2V0KSB7Cisg
ICAgICAgIGlmICh0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ID09PSAwKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBv
c2l0aW9uKGN1cnNvcik7CisKKyAgICAgICAgdmFyIGxlZnQgPSBwb3MubGVmdDsKKyAgICAgICAg
dmFyIHRvcCA9IHBvcy50b3A7CisKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wID4gdG9wKSB7
CisgICAgICAgICAgICBpZiAob2Zmc2V0KQorICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZzZXQg
KiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNl
dFNjcm9sbFRvcCh0b3ApOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsVG9wICsgdGhp
cy4kc2l6ZS5zY3JvbGxlckhlaWdodCA8IHRvcCArIHRoaXMubGluZUhlaWdodCkgeworICAgICAg
ICAgICAgaWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICB0b3AgKz0gb2Zmc2V0ICogdGhpcy4k
c2l6ZS5zY3JvbGxlckhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxU
b3AodG9wICsgdGhpcy5saW5lSGVpZ2h0IC0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKKwor
ICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+IGxlZnQpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0IDwg
dGhpcy4kcGFkZGluZyArIDIgKiB0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoKQorICAg
ICAgICAgICAgICAgIGxlZnQgPSAwOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9s
bExlZnQobGVmdCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCArIHRoaXMuJHNpemUu
c2Nyb2xsZXJXaWR0aCA8IGxlZnQgKyB0aGlzLmNoYXJhY3RlcldpZHRoKSB7CisgICAgICAgICAg
ICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLnJvdW5kKGxlZnQgKyB0aGlzLmNoYXJh
Y3RlcldpZHRoIC0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoKSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIHRoaXMuZ2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9sbExl
ZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxM
ZWZ0KCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9sbFRvcFJvdyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5zY3JvbGxUb3AgLyB0aGlzLmxpbmVIZWlnaHQ7CisgICAgfTsK
KyAgICB0aGlzLmdldFNjcm9sbEJvdHRvbVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGhpcy5zY3JvbGxUb3AgKyB0aGlzLiRzaXplLnNj
cm9sbGVySGVpZ2h0KSAvIHRoaXMubGluZUhlaWdodCkgLSAxKTsKKyAgICB9OworICAgIHRoaXMu
c2Nyb2xsVG9Sb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbFRvcChyb3cgKiB0aGlzLmxpbmVIZWlnaHQpOworICAgIH07CisKKyAgICB0aGlzLmFsaWdu
Q3Vyc29yID0gZnVuY3Rpb24oY3Vyc29yLCBhbGlnbm1lbnQpIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiBjdXJzb3IgPT0gIm51bWJlciIpCisgICAgICAgICAgICBjdXJzb3IgPSB7cm93OiBjdXJzb3Is
IGNvbHVtbjogMH07CisKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGN1cnNvckxheWVyLmdldFBp
eGVsUG9zaXRpb24oY3Vyc29yKTsKKyAgICAgICAgdmFyIGggPSB0aGlzLiRzaXplLnNjcm9sbGVy
SGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0OworICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zLnRvcCAt
IGggKiAoYWxpZ25tZW50IHx8IDApOworCisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxU
b3Aob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICB9OworCisgICAgdGhpcy5T
VEVQUyA9IDg7CisgICAgdGhpcy4kY2FsY1N0ZXBzID0gZnVuY3Rpb24oZnJvbVZhbHVlLCB0b1Zh
bHVlKXsKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgbCA9IHRoaXMuU1RFUFM7Cisg
ICAgICAgIHZhciBzdGVwcyA9IFtdOworCisgICAgICAgIHZhciBmdW5jICA9IGZ1bmN0aW9uKHQs
IHhfbWluLCBkeCkgeworICAgICAgICAgICAgcmV0dXJuIGR4ICogKE1hdGgucG93KHQgLSAxLCAz
KSArIDEpICsgeF9taW47CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7
ICsraSkKKyAgICAgICAgICAgIHN0ZXBzLnB1c2goZnVuYyhpIC8gdGhpcy5TVEVQUywgZnJvbVZh
bHVlLCB0b1ZhbHVlIC0gZnJvbVZhbHVlKSk7CisKKyAgICAgICAgcmV0dXJuIHN0ZXBzOworICAg
IH07CisgICAgdGhpcy5zY3JvbGxUb0xpbmUgPSBmdW5jdGlvbihsaW5lLCBjZW50ZXIsIGFuaW1h
dGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQ
aXhlbFBvc2l0aW9uKHtyb3c6IGxpbmUsIGNvbHVtbjogMH0pOworICAgICAgICB2YXIgb2Zmc2V0
ID0gcG9zLnRvcDsKKyAgICAgICAgaWYgKGNlbnRlcikKKyAgICAgICAgICAgIG9mZnNldCAtPSB0
aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IC8gMjsKKworICAgICAgICB2YXIgaW5pdGlhbFNjcm9s
bCA9IHRoaXMuc2Nyb2xsVG9wOworICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9m
ZnNldCk7CisgICAgICAgIGlmIChhbmltYXRlICE9PSBmYWxzZSkKKyAgICAgICAgICAgIHRoaXMu
YW5pbWF0ZVNjcm9sbGluZyhpbml0aWFsU2Nyb2xsLCBjYWxsYmFjayk7CisgICAgfTsKKworICAg
IHRoaXMuYW5pbWF0ZVNjcm9sbGluZyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgY2FsbGJhY2spIHsK
KyAgICAgICAgdmFyIHRvVmFsdWUgPSB0aGlzLnNjcm9sbFRvcDsKKyAgICAgICAgaWYgKHRoaXMu
JGFuaW1hdGVkU2Nyb2xsICYmIE1hdGguYWJzKGZyb21WYWx1ZSAtIHRvVmFsdWUpIDwgMTAwMDAw
KSB7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICAgICAgdmFyIHN0ZXBz
ID0gX3NlbGYuJGNhbGNTdGVwcyhmcm9tVmFsdWUsIHRvVmFsdWUpOworICAgICAgICAgICAgdGhp
cy4kaW5TY3JvbGxBbmltYXRpb24gPSB0cnVlOworCisgICAgICAgICAgICBjbGVhckludGVydmFs
KHRoaXMuJHRpbWVyKTsKKworICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Ao
c3RlcHMuc2hpZnQoKSk7CisgICAgICAgICAgICB0aGlzLiR0aW1lciA9IHNldEludGVydmFsKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmIChzdGVwcy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uJHNjcm9sbFRvcCA9IHRvVmFsdWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b1ZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gLTE7CisgICAgICAgICAgICAgICAg
ICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICB0b1ZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBfc2VsZi4kdGltZXIgPSBjbGVhckludGVydmFsKF9zZWxmLiR0aW1lcik7Cisg
ICAgICAgICAgICAgICAgICAgIF9zZWxmLiRpblNjcm9sbEFuaW1hdGlvbiA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5zY3Jv
bGxUb1kgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9w
ICE9PSBzY3JvbGxUb3ApIHsKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5D
SEFOR0VfU0NST0xMKTsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvWCA9IGZ1bmN0aW9uKHNjcm9sbExl
ZnQpIHsKKyAgICAgICAgaWYgKHNjcm9sbExlZnQgPCAwKQorICAgICAgICAgICAgc2Nyb2xsTGVm
dCA9IDA7CisKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkKKyAg
ICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgICAgIHRoaXMuJGxv
b3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfSF9TQ1JPTEwpOworICAgIH07CisgICAgdGhpcy5zY3Jv
bGxCeSA9IGZ1bmN0aW9uKGRlbHRhWCwgZGVsdGFZKSB7CisgICAgICAgIGRlbHRhWSAmJiB0aGlz
LnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIGRlbHRh
WSk7CisgICAgICAgIGRlbHRhWCAmJiB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh0aGlzLnNl
c3Npb24uZ2V0U2Nyb2xsTGVmdCgpICsgZGVsdGFYKTsKKyAgICB9OworICAgIHRoaXMuaXNTY3Jv
bGxhYmxlQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkgeworICAgICAgICBpZiAoZGVsdGFZ
IDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgPiAwKQorICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNjcm9s
bFRvcCgpICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCA8IHRoaXMubGF5ZXJDb25maWcubWF4
SGVpZ2h0KQorICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5waXhl
bFRvU2NyZWVuQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBjYW52
YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAg
IHZhciBvZmZzZXQgPSAoeCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhp
cy4kcGFkZGluZykgLyB0aGlzLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgcm93ID0gTWF0
aC5mbG9vcigoeSArIHRoaXMuc2Nyb2xsVG9wIC0gY2FudmFzUG9zLnRvcCkgLyB0aGlzLmxpbmVI
ZWlnaHQpOworICAgICAgICB2YXIgY29sID0gTWF0aC5yb3VuZChvZmZzZXQpOworCisgICAgICAg
IHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sLCBzaWRlOiBvZmZzZXQgLSBjb2wgPiAwID8g
MSA6IC0xfTsKKyAgICB9OworCisgICAgdGhpcy5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyA9IGZ1
bmN0aW9uKHgsIHkpIHsKKyAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAgICAgdmFyIGNvbCA9IE1hdGgucm91bmQoCisg
ICAgICAgICAgICAoeCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhpcy4k
cGFkZGluZykgLyB0aGlzLmNoYXJhY3RlcldpZHRoCisgICAgICAgICk7CisgICAgICAgIHZhciBy
b3cgPSBNYXRoLmZsb29yKAorICAgICAgICAgICAgKHkgKyB0aGlzLnNjcm9sbFRvcCAtIGNhbnZh
c1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0CisgICAgICAgICk7CisKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBNYXRoLm1heChjb2ws
IDApKTsKKyAgICB9OworICAgIHRoaXMudGV4dFRvU2NyZWVuQ29vcmRpbmF0ZXMgPSBmdW5jdGlv
bihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5zY3JvbGxlci5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5k
b2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBjb2x1bW4pOworCisgICAgICAgIHZhciB4ID0g
dGhpcy4kcGFkZGluZyArIE1hdGgucm91bmQocG9zLmNvbHVtbiAqIHRoaXMuY2hhcmFjdGVyV2lk
dGgpOworICAgICAgICB2YXIgeSA9IHBvcy5yb3cgKiB0aGlzLmxpbmVIZWlnaHQ7CisKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHBhZ2VYOiBjYW52YXNQb3MubGVmdCArIHggLSB0aGlz
LnNjcm9sbExlZnQsCisgICAgICAgICAgICBwYWdlWTogY2FudmFzUG9zLnRvcCArIHkgLSB0aGlz
LnNjcm9sbFRvcAorICAgICAgICB9OworICAgIH07CisgICAgdGhpcy52aXN1YWxpemVGb2N1cyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsICJh
Y2VfZm9jdXMiKTsKKyAgICB9OworICAgIHRoaXMudmlzdWFsaXplQmx1ciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsICJhY2VfZm9jdXMi
KTsKKyAgICB9OworICAgIHRoaXMuc2hvd0NvbXBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24p
IHsKKyAgICAgICAgaWYgKCF0aGlzLiRjb21wb3NpdGlvbikKKyAgICAgICAgICAgIHRoaXMuJGNv
bXBvc2l0aW9uID0geworICAgICAgICAgICAgICAgIGtlZXBUZXh0QXJlYUF0Q3Vyc29yOiB0aGlz
LiRrZWVwVGV4dEFyZWFBdEN1cnNvciwKKyAgICAgICAgICAgICAgICBjc3NUZXh0OiB0aGlzLnRl
eHRhcmVhLnN0eWxlLmNzc1RleHQKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgdGhpcy4ka2Vl
cFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOworICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy50
ZXh0YXJlYSwgImFjZV9jb21wb3NpdGlvbiIpOworICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxl
LmNzc1RleHQgPSAiIjsKKyAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAg
ICB9OworICAgIHRoaXMuc2V0Q29tcG9zaXRpb25UZXh0ID0gZnVuY3Rpb24odGV4dCkgeworICAg
ICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgIH07CisgICAgdGhpcy5oaWRl
Q29tcG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRjb21wb3NpdGlv
bikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhp
cy50ZXh0YXJlYSwgImFjZV9jb21wb3NpdGlvbiIpOworICAgICAgICB0aGlzLiRrZWVwVGV4dEFy
ZWFBdEN1cnNvciA9IHRoaXMuJGNvbXBvc2l0aW9uLmtlZXBUZXh0QXJlYUF0Q3Vyc29yOworICAg
ICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5jc3NU
ZXh0OworICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7CisgICAgfTsKKworICAgIHRo
aXMuX2xvYWRUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7CisgICAgICAgIAorICAg
IH07CisgICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7CisgICAgICAgIHZhciBf
c2VsZiA9IHRoaXM7CisgICAgICAgIHRoaXMuJHRoZW1lVmFsdWUgPSB0aGVtZTsKKyAgICAgICAg
X3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghdGhlbWUgfHwgdHlwZW9mIHRoZW1lID09ICJzdHJpbmciKSB7Cisg
ICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoZW1lIHx8ICJhY2UvdGhlbWUvdGV4dG1hdGUi
OworICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWyJ0aGVtZSIsIG1vZHVsZU5hbWVdLCBh
ZnRlckxvYWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWZ0ZXJMb2FkKHRoZW1l
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZCh0aGVtZSkgeworICAg
ICAgICAgICAgZG9tLmltcG9ydENzc1N0cmluZygKKyAgICAgICAgICAgICAgICB0aGVtZS5jc3NU
ZXh0LAorICAgICAgICAgICAgICAgIHRoZW1lLmNzc0NsYXNzLAorICAgICAgICAgICAgICAgIF9z
ZWxmLmNvbnRhaW5lci5vd25lckRvY3VtZW50CisgICAgICAgICAgICApOworCisgICAgICAgICAg
ICBpZiAoX3NlbGYudGhlbWUpCisgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKF9z
ZWxmLmNvbnRhaW5lciwgX3NlbGYudGhlbWUuY3NzQ2xhc3MpOworICAgICAgICAgICAgX3NlbGYu
JHRoZW1lID0gdGhlbWUuY3NzQ2xhc3M7CisKKyAgICAgICAgICAgIF9zZWxmLnRoZW1lID0gdGhl
bWU7CisgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCB0aGVtZS5j
c3NDbGFzcyk7CisgICAgICAgICAgICBkb20uc2V0Q3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCAi
YWNlX2RhcmsiLCB0aGVtZS5pc0RhcmspOworCisgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHRo
ZW1lLnBhZGRpbmcgfHwgNDsKKyAgICAgICAgICAgIGlmIChfc2VsZi4kcGFkZGluZyAmJiBwYWRk
aW5nICE9IF9zZWxmLiRwYWRkaW5nKQorICAgICAgICAgICAgICAgIF9zZWxmLnNldFBhZGRpbmco
cGFkZGluZyk7CisgICAgICAgICAgICBpZiAoX3NlbGYuJHNpemUpIHsKKyAgICAgICAgICAgICAg
ICBfc2VsZi4kc2l6ZS53aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgX3NlbGYub25SZXNpemUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgX3NlbGYuX2Rpc3Bh
dGNoRXZlbnQoJ3RoZW1lTG9hZGVkJyx7dGhlbWU6dGhlbWV9KTsKKyAgICAgICAgfQorICAgIH07
CisgICAgdGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
dGhlbWVWYWx1ZTsKKyAgICB9OworICAgIHRoaXMuc2V0U3R5bGUgPSBmdW5jdGlvbiBzZXRTdHls
ZShzdHlsZSwgaW5jbHVkZSkgeworICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5jb250YWlu
ZXIsIHN0eWxlLCBpbmNsdWRlICE9IGZhbHNlKTsKKyAgICB9OworICAgIHRoaXMudW5zZXRTdHls
ZSA9IGZ1bmN0aW9uIHVuc2V0U3R5bGUoc3R5bGUpIHsKKyAgICAgICAgZG9tLnJlbW92ZUNzc0Ns
YXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSk7CisgICAgfTsKKyAgICB0aGlzLmRlc3Ryb3kgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLmRlc3Ryb3koKTsKKyAgICAgICAg
dGhpcy4kY3Vyc29yTGF5ZXIuZGVzdHJveSgpOworICAgIH07CisKK30pLmNhbGwoVmlydHVhbFJl
bmRlcmVyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuVmlydHVhbFJlbmRlcmVyID0gVmlydHVhbFJl
bmRlcmVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9sYXllci9ndXR0ZXInLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIvb29wJywgJ2Fj
ZS9saWIvbGFuZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsK
K3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4u
L2xpYi9sYW5nIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2Vt
aXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisKK3ZhciBHdXR0ZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkg
eworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfZ3V0dGVyLWxheWVyIjsKKyAgICBw
YXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgIHRoaXMuc2V0U2hvd0ZvbGRX
aWRnZXRzKHRoaXMuJHNob3dGb2xkV2lkZ2V0cyk7CisgICAgCisgICAgdGhpcy5ndXR0ZXJXaWR0
aCA9IDA7CisKKyAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdOworICAgIHRoaXMuJHVwZGF0ZUFu
bm90YXRpb25zID0gdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMuYmluZCh0aGlzKTsKK307CisKKyhm
dW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKwor
ICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgaWYgKHRo
aXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVy
KCJjaGFuZ2UiLCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7CisgICAgICAgIHRoaXMuc2Vzc2lv
biA9IHNlc3Npb247CisgICAgICAgIHNlc3Npb24ub24oImNoYW5nZSIsIHRoaXMuJHVwZGF0ZUFu
bm90YXRpb25zKTsKKyAgICB9OworCisgICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVu
Y3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpCisgICAg
ICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVzZSBzZXNz
aW9uLmFkZEd1dHRlckRlY29yYXRpb24iKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEd1dHRl
ckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92ZUd1
dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSl7CisgICAgICAgIGlmICh3
aW5kb3cuY29uc29sZSkKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiAmJiBjb25zb2xlLndhcm4o
ImRlcHJlY2F0ZWQgdXNlIHNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiIpOworICAgICAg
ICB0aGlzLnNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7Cisg
ICAgfTsKKworICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykg
eworICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdCisgICAgICAgIHZhciByb3dJbmZvLCBy
b3c7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07CisgICAgICAg
ICAgICB2YXIgcm93ID0gYW5ub3RhdGlvbi5yb3c7CisgICAgICAgICAgICB2YXIgcm93SW5mbyA9
IHRoaXMuJGFubm90YXRpb25zW3Jvd107CisgICAgICAgICAgICBpZiAoIXJvd0luZm8pCisgICAg
ICAgICAgICAgICAgcm93SW5mbyA9IHRoaXMuJGFubm90YXRpb25zW3Jvd10gPSB7dGV4dDogW119
OworICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBhbm5vVGV4dCA9IGFubm90YXRpb24udGV4
dDsKKyAgICAgICAgICAgIGFubm9UZXh0ID0gYW5ub1RleHQgPyBsYW5nLmVzY2FwZUhUTUwoYW5u
b1RleHQpIDogYW5ub3RhdGlvbi5odG1sIHx8ICIiOworCisgICAgICAgICAgICBpZiAocm93SW5m
by50ZXh0LmluZGV4T2YoYW5ub1RleHQpID09PSAtMSkKKyAgICAgICAgICAgICAgICByb3dJbmZv
LnRleHQucHVzaChhbm5vVGV4dCk7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0gYW5ub3RhdGlv
bi50eXBlOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gImVycm9yIikKKyAgICAgICAgICAgICAg
ICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX2Vycm9yIjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gIndhcm5pbmciICYmIHJvd0luZm8uY2xhc3NOYW1lICE9ICIgYWNlX2Vycm9yIikK
KyAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX3dhcm5pbmciOworICAg
ICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW5mbyIgJiYgKCFyb3dJbmZvLmNsYXNzTmFtZSkp
CisgICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFjZV9pbmZvIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgIGlmICghdGhpcy4kYW5ub3RhdGlvbnMubGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZhciByYW5nZSA9
IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7Cisg
ICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93IC0gZmlyc3RSb3c7CisgICAgICAgIGlmIChs
ZW4gPT09IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRl
eHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7CisgICAgICAgICAgICB0aGlz
LiRhbm5vdGF0aW9ucy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTsKKyAgICAgICAg
ICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7CisgICAgICAgICAgICB0aGlzLiRhbm5vdGF0
aW9ucy5zcGxpY2UuYXBwbHkodGhpcy4kYW5ub3RhdGlvbnMsIGFyZ3MpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAgIHZh
ciBlbXB0eUFubm8gPSB7Y2xhc3NOYW1lOiAiIn07CisgICAgICAgIHZhciBodG1sID0gW107Cisg
ICAgICAgIHZhciBpID0gY29uZmlnLmZpcnN0Um93OworICAgICAgICB2YXIgbGFzdFJvdyA9IGNv
bmZpZy5sYXN0Um93OworICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9s
ZExpbmUoaSk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cg
OiBJbmZpbml0eTsKKyAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy4kc2hvd0ZvbGRXaWRn
ZXRzICYmIHRoaXMuc2Vzc2lvbi5mb2xkV2lkZ2V0czsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRz
ID0gdGhpcy5zZXNzaW9uLiRicmVha3BvaW50czsKKyAgICAgICAgdmFyIGRlY29yYXRpb25zID0g
dGhpcy5zZXNzaW9uLiRkZWNvcmF0aW9uczsKKyAgICAgICAgdmFyIGxhc3RMaW5lTnVtYmVyID0g
MDsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYoaSA+IGZvbGRTdGFy
dCkgeworICAgICAgICAgICAgICAgIGkgPSBmb2xkLmVuZC5yb3cgKyAxOworICAgICAgICAgICAg
ICAgIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGksIGZvbGQpOworICAgICAg
ICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93IDpJbmZpbml0eTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGkgPiBsYXN0Um93KQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IHRoaXMuJGFubm90YXRpb25z
W2ldIHx8IGVtcHR5QW5ubzsKKyAgICAgICAgICAgIGh0bWwucHVzaCgKKyAgICAgICAgICAgICAg
ICAiPGRpdiBjbGFzcz0nYWNlX2d1dHRlci1jZWxsICIsCisgICAgICAgICAgICAgICAgYnJlYWtw
b2ludHNbaV0gfHwgIiIsIGRlY29yYXRpb25zW2ldIHx8ICIiLCBhbm5vdGF0aW9uLmNsYXNzTmFt
ZSwKKyAgICAgICAgICAgICAgICAiJyBzdHlsZT0naGVpZ2h0OiIsIHRoaXMuc2Vzc2lvbi5nZXRS
b3dMZW5ndGgoaSkgKiBjb25maWcubGluZUhlaWdodCwgInB4Oyc+IiwgCisgICAgICAgICAgICAg
ICAgbGFzdExpbmVOdW1iZXIgPSBpICsgMQorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAg
aWYgKGZvbGRXaWRnZXRzKSB7CisgICAgICAgICAgICAgICAgdmFyIGMgPSBmb2xkV2lkZ2V0c1tp
XTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICBj
ID0gZm9sZFdpZGdldHNbaV0gPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFdpZGdldChpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYykKKyAgICAgICAgICAgICAgICAgICAgaHRtbC5wdXNoKAorICAgICAg
ICAgICAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPSdhY2VfZm9sZC13aWRnZXQgYWNlXyIsIGMs
CisgICAgICAgICAgICAgICAgICAgICAgICBjID09ICJzdGFydCIgJiYgaSA9PSBmb2xkU3RhcnQg
JiYgaSA8IGZvbGQuZW5kLnJvdyA/ICIgYWNlX2Nsb3NlZCIgOiAiIGFjZV9vcGVuIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICInIHN0eWxlPSdoZWlnaHQ6IiwgY29uZmlnLmxpbmVIZWlnaHQs
ICJweCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJz48L3NwYW4+IgorICAgICAgICAgICAg
ICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBodG1sLnB1c2goIjwvZGl2
PiIpOworCisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmVsZW1l
bnQgPSBkb20uc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCwgaHRtbC5qb2luKCIiKSk7CisgICAg
ICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBjb25maWcubWluSGVpZ2h0ICsgInB4IjsK
KyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlKQorICAgICAg
ICAgICAgbGFzdExpbmVOdW1iZXIgPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CisgICAgICAg
IAorICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSAoIiIgKyBsYXN0TGluZU51bWJlcikubGVuZ3Ro
ICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBh
ZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsKKyAgICAgICAgZ3V0dGVyV2lkdGggKz0g
cGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKKyAgICAgICAgaWYgKGd1dHRlcldpZHRoICE9
PSB0aGlzLmd1dHRlcldpZHRoKSB7CisgICAgICAgICAgICB0aGlzLmd1dHRlcldpZHRoID0gZ3V0
dGVyV2lkdGg7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBNYXRoLmNl
aWwodGhpcy5ndXR0ZXJXaWR0aCkgKyAicHgiOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hh
bmdlR3V0dGVyV2lkdGgiLCBndXR0ZXJXaWR0aCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFNob3dGb2xkV2lkZ2V0
cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgaWYgKHNob3cpCisgICAgICAgICAgICBkb20u
YWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2ZvbGRpbmctZW5hYmxlZCIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNl
X2ZvbGRpbmctZW5hYmxlZCIpOworCisgICAgICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9IHNo
b3c7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsOworICAgIH07CisgICAgCisgICAgdGhp
cy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHNob3dGb2xkV2lkZ2V0czsKKyAgICB9OworCisgICAgdGhpcy4kY29tcHV0ZVBhZGRpbmcgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCkKKyAgICAg
ICAgICAgIHJldHVybiB7bGVmdDogMCwgcmlnaHQ6IDB9OworICAgICAgICB2YXIgc3R5bGUgPSBk
b20uY29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgICAgIHRoaXMu
JHBhZGRpbmcgPSB7fQorICAgICAgICB0aGlzLiRwYWRkaW5nLmxlZnQgPSBwYXJzZUludChzdHls
ZS5wYWRkaW5nTGVmdCkgKyAxOworICAgICAgICB0aGlzLiRwYWRkaW5nLnJpZ2h0ID0gcGFyc2VJ
bnQoc3R5bGUucGFkZGluZ1JpZ2h0KTsgIAorICAgICAgICByZXR1cm4gdGhpcy4kcGFkZGluZzsK
KyAgICB9OworCisgICAgdGhpcy5nZXRSZWdpb24gPSBmdW5jdGlvbihwb2ludCkgeworICAgICAg
ICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsK
KyAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisgICAgICAgIGlmIChwb2ludC54IDwgcGFkZGluZy5sZWZ0ICsgcmVjdC5sZWZ0KQorICAgICAg
ICAgICAgcmV0dXJuICJtYXJrZXJzIjsKKyAgICAgICAgaWYgKHRoaXMuJHNob3dGb2xkV2lkZ2V0
cyAmJiBwb2ludC54ID4gcmVjdC5yaWdodCAtIHBhZGRpbmcucmlnaHQpCisgICAgICAgICAgICBy
ZXR1cm4gImZvbGRXaWRnZXRzIjsKKyAgICB9OworCit9KS5jYWxsKEd1dHRlci5wcm90b3R5cGUp
OworCitleHBvcnRzLkd1dHRlciA9IEd1dHRlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9s
YXllci9tYXJrZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5n
ZScsICdhY2UvbGliL2RvbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIGRvbSA9IHJl
cXVpcmUoIi4uL2xpYi9kb20iKTsKKwordmFyIE1hcmtlciA9IGZ1bmN0aW9uKHBhcmVudEVsKSB7
CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMu
ZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9tYXJrZXItbGF5ZXIiOworICAgIHBh
cmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7Cit9OworCisoZnVuY3Rpb24oKSB7CisK
KyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKworICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9u
KHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7CisgICAgfTsKKyAg
ICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHRoaXMuc2Vz
c2lvbiA9IHNlc3Npb247CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnNldE1hcmtlcnMgPSBmdW5j
dGlvbihtYXJrZXJzKSB7CisgICAgICAgIHRoaXMubWFya2VycyA9IG1hcmtlcnM7CisgICAgfTsK
KworICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAgIHZhciBjb25m
aWcgPSBjb25maWcgfHwgdGhpcy5jb25maWc7CisgICAgICAgIGlmICghY29uZmlnKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisKKyAgICAg
ICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubWFya2Vycykg
eworICAgICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vyc1trZXldOworCisgICAgICAg
ICAgICBpZiAoIW1hcmtlci5yYW5nZSkgeworICAgICAgICAgICAgICAgIG1hcmtlci51cGRhdGUo
aHRtbCwgdGhpcywgdGhpcy5zZXNzaW9uLCBjb25maWcpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBtYXJrZXIucmFu
Z2UuY2xpcFJvd3MoY29uZmlnLmZpcnN0Um93LCBjb25maWcubGFzdFJvdyk7CisgICAgICAgICAg
ICBpZiAocmFuZ2UuaXNFbXB0eSgpKSBjb250aW51ZTsKKworICAgICAgICAgICAgcmFuZ2UgPSBy
YW5nZS50b1NjcmVlblJhbmdlKHRoaXMuc2Vzc2lvbik7CisgICAgICAgICAgICBpZiAobWFya2Vy
LnJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChyYW5n
ZS5zdGFydC5yb3csIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLiRw
YWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworICAg
ICAgICAgICAgICAgIG1hcmtlci5yZW5kZXJlcihodG1sLCByYW5nZSwgbGVmdCwgdG9wLCBjb25m
aWcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSAiZnVsbExpbmUiKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5kcmF3RnVsbExpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1h
cmtlci5jbGF6eiwgY29uZmlnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNNdWx0
aUxpbmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSAidGV4dCIpCisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1RleHRNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtl
ci5jbGF6eiwgY29uZmlnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBj
b25maWcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRyYXdT
aW5nbGVMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenogKyAiIGFjZV9zdGFydCIs
IGNvbmZpZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5lbGVtZW50
ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOworICAgIH07
CisKKyAgICB0aGlzLiRnZXRUb3AgPSBmdW5jdGlvbihyb3csIGxheWVyQ29uZmlnKSB7CisgICAg
ICAgIHJldHVybiAocm93IC0gbGF5ZXJDb25maWcuZmlyc3RSb3dTY3JlZW4pICogbGF5ZXJDb25m
aWcubGluZUhlaWdodDsKKyAgICB9OworICAgIHRoaXMuZHJhd1RleHRNYXJrZXIgPSBmdW5jdGlv
bihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGxheWVyQ29uZmlnKSB7CisgICAgICAgIHZh
ciByb3cgPSByYW5nZS5zdGFydC5yb3c7CisKKyAgICAgICAgdmFyIGxpbmVSYW5nZSA9IG5ldyBS
YW5nZSgKKyAgICAgICAgICAgIHJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLAorICAgICAgICAgICAg
cm93LCB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihyb3cpCisgICAgICAgICk7
CisgICAgICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGluZVJh
bmdlLCBjbGF6eiArICIgYWNlX3N0YXJ0IiwgbGF5ZXJDb25maWcsIDEsICJ0ZXh0Iik7CisgICAg
ICAgIHJvdyA9IHJhbmdlLmVuZC5yb3c7CisgICAgICAgIGxpbmVSYW5nZSA9IG5ldyBSYW5nZShy
b3csIDAsIHJvdywgcmFuZ2UuZW5kLmNvbHVtbik7CisgICAgICAgIHRoaXMuZHJhd1NpbmdsZUxp
bmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGluZVJhbmdlLCBjbGF6eiwgbGF5ZXJDb25maWcsIDAs
ICJ0ZXh0Iik7CisKKyAgICAgICAgZm9yIChyb3cgPSByYW5nZS5zdGFydC5yb3cgKyAxOyByb3cg
PCByYW5nZS5lbmQucm93OyByb3crKykgeworICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0LnJv
dyA9IHJvdzsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5lbmQucm93ID0gcm93OworICAgICAgICAg
ICAgbGluZVJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0Nv
bHVtbihyb3cpOworICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihzdHJpbmdC
dWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZywgMSwgInRleHQiKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyID0gZnVuY3Rpb24oc3Ry
aW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIHR5cGUpIHsKKyAgICAgICAgdmFyIHBh
ZGRpbmcgPSB0aGlzLiRwYWRkaW5nOworICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVI
ZWlnaHQ7CisgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBj
b25maWcpOworICAgICAgICB2YXIgbGVmdCA9IHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4g
KiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAor
ICAgICAgICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiIGFjZV9zdGFydCcgc3R5bGU9JyIs
CisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAgICAicmln
aHQ6MDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsiLAorICAgICAgICAgICAgImxl
ZnQ6IiwgbGVmdCwgInB4Oyc+PC9kaXY+IgorICAgICAgICApOworICAgICAgICB0b3AgPSB0aGlz
LiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFyIHdpZHRoID0gcmFu
Z2UuZW5kLmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKworICAgICAgICBzdHJpbmdC
dWlsZGVyLnB1c2goCisgICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0eWxl
PSciLAorICAgICAgICAgICAgImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAorICAgICAgICAgICAg
IndpZHRoOiIsIHdpZHRoLCAicHg7IiwKKyAgICAgICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwK
KyAgICAgICAgICAgICJsZWZ0OiIsIHBhZGRpbmcsICJweDsnPjwvZGl2PiIKKyAgICAgICAgKTsK
KyAgICAgICAgaGVpZ2h0ID0gKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSAxKSAq
IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBpZiAoaGVpZ2h0IDwgMCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdyArIDEs
IGNvbmZpZyk7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAgICAgICAgIjxk
aXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAgICAgICJoZWlnaHQ6Iiwg
aGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJyaWdodDowOyIsCisgICAgICAgICAgICAidG9w
OiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDoiLCBwYWRkaW5nLCAicHg7Jz48L2Rp
dj4iCisgICAgICAgICk7CisgICAgfTsKKyAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyID0g
ZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVuZ3Ro
KSB7CisgICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDsKKyAgICAgICAgdmFy
IHdpZHRoID0gKHJhbmdlLmVuZC5jb2x1bW4gKyAoZXh0cmFMZW5ndGggfHwgMCkgLSByYW5nZS5z
dGFydC5jb2x1bW4pICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworCisgICAgICAgIHZhciB0b3Ag
PSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOworICAgICAgICB2YXIgbGVm
dCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVy
V2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAgICAgICAgIjxkaXYg
Y2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAgICAgICJoZWlnaHQ6IiwgaGVp
Z2h0LCAicHg7IiwKKyAgICAgICAgICAgICJ3aWR0aDoiLCB3aWR0aCwgInB4OyIsCisgICAgICAg
ICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDoiLCBsZWZ0LCJweDsn
PjwvZGl2PiIKKyAgICAgICAgKTsKKyAgICB9OworCisgICAgdGhpcy5kcmF3RnVsbExpbmVNYXJr
ZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZykgeworICAg
ICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAg
ICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBpZiAocmFuZ2Uu
c3RhcnQucm93ICE9IHJhbmdlLmVuZC5yb3cpCisgICAgICAgICAgICBoZWlnaHQgKz0gdGhpcy4k
Z2V0VG9wKHJhbmdlLmVuZC5yb3csIGNvbmZpZykgLSB0b3A7CisKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5wdXNoKAorICAgICAgICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0n
IiwKKyAgICAgICAgICAgICJoZWlnaHQ6IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJ0
b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OjA7cmlnaHQ6MDsnPjwvZGl2PiIK
KyAgICAgICAgKTsKKyAgICB9CisKK30pLmNhbGwoTWFya2VyLnByb3RvdHlwZSk7CisKK2V4cG9y
dHMuTWFya2VyID0gTWFya2VyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xheWVyL3RleHQn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9s
aWIvZG9tJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbGliL2V2
ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9s
aWIvZG9tIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Cit2YXIgdXNlcmFn
ZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJl
cXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgVGV4dCA9
IGZ1bmN0aW9uKHBhcmVudEVsKSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV90
ZXh0LWxheWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworCisg
ICAgdGhpcy4kY2hhcmFjdGVyU2l6ZSA9IHt3aWR0aDogMCwgaGVpZ2h0OiAwfTsKKyAgICB0aGlz
LmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKKyAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMoKTsKK307
CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVy
KTsKKworICAgIHRoaXMuRU9GX0NIQVIgPSAiXHhCNiI7IC8vIiZwYXJhOyI7CisgICAgdGhpcy5F
T0xfQ0hBUiA9ICJceEFDIjsgLy8iJm5vdDsiOworICAgIHRoaXMuVEFCX0NIQVIgPSAiXHUyMTky
IjsgLy8iJnJhcnI7IiAiXHUyMUU1IjsKKyAgICB0aGlzLlNQQUNFX0NIQVIgPSAiXHhCNyI7IC8v
IiZtaWRkb3Q7IjsKKyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKworICAgIHRoaXMuc2V0UGFkZGlu
ZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7
CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wYWRkaW5nID0gIjAgIiArIHBhZGRpbmcgKyAi
cHgiOworICAgIH07CisKKyAgICB0aGlzLmdldExpbmVIZWlnaHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJGNoYXJhY3RlclNpemUuaGVpZ2h0IHx8IDE7CisgICAgfTsKKwor
ICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJGNoYXJhY3RlclNpemUud2lkdGggfHwgMTsKKyAgICB9OworCisgICAgdGhpcy5jaGVj
a0ZvclNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzaXplID0gdGhpcy4k
bWVhc3VyZVNpemVzKCk7CisgICAgICAgIGlmIChzaXplICYmICh0aGlzLiRjaGFyYWN0ZXJTaXpl
LndpZHRoICE9PSBzaXplLndpZHRoIHx8IHRoaXMuJGNoYXJhY3RlclNpemUuaGVpZ2h0ICE9PSBz
aXplLmhlaWdodCkpIHsKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRX
ZWlnaHQgPSAiYm9sZCI7CisgICAgICAgICAgICB2YXIgYm9sZFNpemUgPSB0aGlzLiRtZWFzdXJl
U2l6ZXMoKTsKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQg
PSAiIjsKKyAgICAgICAgICAgIHRoaXMuJGNoYXJhY3RlclNpemUgPSBzaXplOworICAgICAgICAg
ICAgdGhpcy5hbGxvd0JvbGRGb250cyA9IGJvbGRTaXplICYmIGJvbGRTaXplLndpZHRoID09PSBz
aXplLndpZHRoICYmIGJvbGRTaXplLmhlaWdodCA9PT0gc2l6ZS5oZWlnaHQ7CisgICAgICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwge2RhdGE6IHNpemV9KTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNU
aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi5jaGVja0Zv
clNpemVDaGFuZ2VzKCk7CisgICAgICAgIH0sIDUwMCk7CisgICAgfTsKKworICAgIHRoaXMuJGZv
bnRTdHlsZXMgPSB7CisgICAgICAgIGZvbnRGYW1pbHkgOiAxLAorICAgICAgICBmb250U2l6ZSA6
IDEsCisgICAgICAgIGZvbnRXZWlnaHQgOiAxLAorICAgICAgICBmb250U3R5bGUgOiAxLAorICAg
ICAgICBsaW5lSGVpZ2h0IDogMQorICAgIH07CisKKyAgICB0aGlzLiRtZWFzdXJlU2l6ZXMgPSB1
c2VyYWdlbnQuaXNJRSB8fCB1c2VyYWdlbnQuaXNPbGRHZWNrbyA/IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgbiA9IDEwMDA7CisgICAgICAgIGlmICghdGhpcy4kbWVhc3VyZU5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBtZWFzdXJlTm9kZSA9IHRoaXMuJG1lYXN1cmVOb2RlID0gZG9tLmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdmFyIHN0eWxlID0gbWVhc3VyZU5vZGUuc3R5
bGU7CisKKyAgICAgICAgICAgIHN0eWxlLndpZHRoID0gc3R5bGUuaGVpZ2h0ID0gImF1dG8iOwor
ICAgICAgICAgICAgc3R5bGUubGVmdCA9IHN0eWxlLnRvcCA9ICgtbiAqIDQwKSAgKyAicHgiOwor
CisgICAgICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgICAgICAgICBz
dHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJ2
aXNpYmxlIjsKKyAgICAgICAgICAgIHN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsKKyAgICAg
ICAgICAgIG1lYXN1cmVOb2RlLmlubmVySFRNTCA9IGxhbmcuc3RyaW5nUmVwZWF0KCJYeSIsIG4p
OworCisgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQobWVhc3VyZU5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29udGFpbmVyID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAg
d2hpbGUgKCFkb20uaGFzQ3NzQ2xhc3MoY29udGFpbmVyLCAiYWNlX2VkaXRvciIpKQorICAgICAg
ICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTsKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobWVhc3VyZU5vZGUpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy4kbWVhc3Vy
ZU5vZGUuc3R5bGU7CisgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZG9tLmNvbXB1dGVkU3R5
bGUodGhpcy5lbGVtZW50KTsKKyAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLiRmb250U3R5
bGVzKQorICAgICAgICAgICAgc3R5bGVbcHJvcF0gPSBjb21wdXRlZFN0eWxlW3Byb3BdOworCisg
ICAgICAgIHZhciBzaXplID0geworICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLiRtZWFzdXJlTm9k
ZS5vZmZzZXRIZWlnaHQsCisgICAgICAgICAgICB3aWR0aDogdGhpcy4kbWVhc3VyZU5vZGUub2Zm
c2V0V2lkdGggLyAobiAqIDIpCisgICAgICAgIH07CisgICAgICAgIGlmIChzaXplLndpZHRoID09
IDAgfHwgc2l6ZS5oZWlnaHQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAg
ICAgIHJldHVybiBzaXplOworICAgIH0KKyAgICA6IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
IXRoaXMuJG1lYXN1cmVOb2RlKSB7CisgICAgICAgICAgICB2YXIgbWVhc3VyZU5vZGUgPSB0aGlz
LiRtZWFzdXJlTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHZh
ciBzdHlsZSA9IG1lYXN1cmVOb2RlLnN0eWxlOworCisgICAgICAgICAgICBzdHlsZS53aWR0aCA9
IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKKyAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBzdHlsZS50
b3AgPSAtMTAwICsgInB4IjsKKworICAgICAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRk
ZW4iOworICAgICAgICAgICAgc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOworICAgICAgICAgICAg
c3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAgICAgICAgICBzdHlsZS53aGl0ZVNwYWNl
ID0gIm5vd3JhcCI7CisKKyAgICAgICAgICAgIG1lYXN1cmVOb2RlLmlubmVySFRNTCA9ICJYIjsK
KworICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuZWxlbWVudC5wYXJlbnROb2RlOwor
ICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAmJiAhZG9tLmhhc0Nzc0NsYXNzKGNvbnRhaW5l
ciwgImFjZV9lZGl0b3IiKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIu
cGFyZW50Tm9kZTsKKworICAgICAgICAgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuJG1lYXN1cmVOb2RlID0gbnVsbDsKKworICAgICAgICAgICAgY29udGFp
bmVyLmFwcGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBy
ZWN0ID0gdGhpcy4kbWVhc3VyZU5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAg
ICAgdmFyIHNpemUgPSB7CisgICAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LAorICAgICAg
ICAgICAgd2lkdGg6IHJlY3Qud2lkdGgKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHNpemUud2lk
dGggPT0gMCB8fCBzaXplLmhlaWdodCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfTsKKworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1
bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgICAg
ICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpOworICAgIH07CisKKyAgICB0aGlzLnNob3dJbnZp
c2libGVzID0gZmFsc2U7CisgICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNo
b3dJbnZpc2libGVzKSB7CisgICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzID09IHNob3dJ
bnZpc2libGVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMuc2hv
d0ludmlzaWJsZXMgPSBzaG93SW52aXNpYmxlczsKKyAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0
cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5kaXNwbGF5
SW5kZW50R3VpZGVzID0gdHJ1ZTsKKyAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBm
dW5jdGlvbihkaXNwbGF5KSB7CisgICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMg
PT0gZGlzcGxheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLmRp
c3BsYXlJbmRlbnRHdWlkZXMgPSBkaXNwbGF5OworICAgICAgICB0aGlzLiRjb21wdXRlVGFiU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLiR0YWJTdHJp
bmdzID0gW107CisgICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPQorICAgIHRoaXMuJGNvbXB1dGVU
YWJTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNlc3Np
b24uZ2V0VGFiU2l6ZSgpOworICAgICAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplOworICAgICAg
ICB2YXIgdGFiU3RyID0gdGhpcy4kdGFiU3RyaW5ncyA9IFswXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDE7IGkgPCB0YWJTaXplICsgMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5zaG93
SW52aXNpYmxlcykgeworICAgICAgICAgICAgICAgIHRhYlN0ci5wdXNoKCI8c3BhbiBjbGFzcz0n
YWNlX2ludmlzaWJsZSc+IgorICAgICAgICAgICAgICAgICAgICArIHRoaXMuVEFCX0NIQVIKKyAg
ICAgICAgICAgICAgICAgICAgKyBsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGkgLSAxKQorICAg
ICAgICAgICAgICAgICAgICArICI8L3NwYW4+Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHRhYlN0ci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KCJceGEwIiwgaSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRH
dWlkZXMpIHsKKyAgICAgICAgICAgIHRoaXMuJGluZGVudEd1aWRlUmUgPSAgL1xzXFN8IFx0fFx0
IHxccyQvOworICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICJhY2VfaW5kZW50LWd1aWRlIjsK
KyAgICAgICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzKSB7CisgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lICs9ICIgYWNlX2ludmlzaWJsZSI7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNl
Q29udGVudCA9IGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuU1BBQ0VfQ0hBUiwgdGhpcy50YWJTaXpl
KTsKKyAgICAgICAgICAgICAgICB2YXIgdGFiQ29udGVudCA9IHRoaXMuVEFCX0NIQVIgKyBsYW5n
LnN0cmluZ1JlcGVhdCgiXHhhMCIsIHRoaXMudGFiU2l6ZSAtIDEpOworICAgICAgICAgICAgfSBl
bHNleworICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVh
dCgiXHhhMCIsIHRoaXMudGFiU2l6ZSk7CisgICAgICAgICAgICAgICAgdmFyIHRhYkNvbnRlbnQg
PSBzcGFjZUNvbnRlbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJHRhYlN0
cmluZ3NbIiAiXSA9ICI8c3BhbiBjbGFzcz0nIiArIGNsYXNzTmFtZSArICInPiIgKyBzcGFjZUNv
bnRlbnQgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyJcdCJdID0g
IjxzcGFuIGNsYXNzPSciICsgY2xhc3NOYW1lICsgIic+IiArIHRhYkNvbnRlbnQgKyAiPC9zcGFu
PiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy51cGRhdGVMaW5lcyA9IGZ1bmN0aW9u
KGNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxh
c3RSb3cgIT0gY29uZmlnLmxhc3RSb3cgfHwKKyAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpcnN0
Um93ICE9IGNvbmZpZy5maXJzdFJvdykgeworICAgICAgICAgICAgdGhpcy5zY3JvbGxMaW5lcyhj
b25maWcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisgICAg
ICAgIHZhciBmaXJzdCA9IE1hdGgubWF4KGZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cpOworICAg
ICAgICB2YXIgbGFzdCA9IE1hdGgubWluKGxhc3RSb3csIGNvbmZpZy5sYXN0Um93KTsKKworICAg
ICAgICB2YXIgbGluZUVsZW1lbnRzID0gdGhpcy5lbGVtZW50LmNoaWxkTm9kZXM7CisgICAgICAg
IHZhciBsaW5lRWxlbWVudHNJZHggPSAwOworCisgICAgICAgIGZvciAodmFyIHJvdyA9IGNvbmZp
Zy5maXJzdFJvdzsgcm93IDwgZmlyc3Q7IHJvdysrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExp
bmUgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUocm93KTsKKyAgICAgICAgICAgIGlmIChmb2xk
TGluZSkgeworICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZS5jb250YWluc1JvdyhmaXJzdCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmb2xkTGluZS5zdGFydC5yb3c7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZUVsZW1lbnRzSWR4ICsrOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIHJvdyA9IGZpcnN0OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlz
LnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBm
b2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAg
ICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRMaW5l
ID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAg
ICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5p
dHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocm93ID4gbGFzdCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgdmFyIGxpbmVFbGVtZW50ID0gbGluZUVsZW1l
bnRzW2xpbmVFbGVtZW50c0lkeCsrXTsKKyAgICAgICAgICAgIGlmIChsaW5lRWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIHZhciBodG1sID0gW107CisgICAgICAgICAgICAgICAgdGhpcy4kcmVu
ZGVyTGluZSgKKyAgICAgICAgICAgICAgICAgICAgaHRtbCwgcm93LCAhdGhpcy4kdXNlTGluZUdy
b3VwcygpLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZQorICAgICAgICAgICAg
ICAgICk7CisgICAgICAgICAgICAgICAgZG9tLnNldElubmVySHRtbChsaW5lRWxlbWVudCwgaHRt
bC5qb2luKCIiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3crKzsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0aGlzLnNjcm9sbExpbmVzID0gZnVuY3Rpb24oY29uZmlnKSB7Cisg
ICAgICAgIHZhciBvbGRDb25maWcgPSB0aGlzLmNvbmZpZzsKKyAgICAgICAgdGhpcy5jb25maWcg
PSBjb25maWc7CisKKyAgICAgICAgaWYgKCFvbGRDb25maWcgfHwgb2xkQ29uZmlnLmxhc3RSb3cg
PCBjb25maWcuZmlyc3RSb3cpCisgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29uZmln
KTsKKworICAgICAgICBpZiAoY29uZmlnLmxhc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cpCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29uZmlnKTsKKworICAgICAgICB2YXIgZWwg
PSB0aGlzLmVsZW1lbnQ7CisgICAgICAgIGlmIChvbGRDb25maWcuZmlyc3RSb3cgPCBjb25maWcu
Zmlyc3RSb3cpCisgICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5zZXNzaW9uLmdldEZvbGRl
ZFJvd0NvdW50KG9sZENvbmZpZy5maXJzdFJvdywgY29uZmlnLmZpcnN0Um93IC0gMSk7IHJvdz4w
OyByb3ctLSkKKyAgICAgICAgICAgICAgICBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTsK
KworICAgICAgICBpZiAob2xkQ29uZmlnLmxhc3RSb3cgPiBjb25maWcubGFzdFJvdykKKyAgICAg
ICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQoY29uZmln
Lmxhc3RSb3cgKyAxLCBvbGRDb25maWcubGFzdFJvdyk7IHJvdz4wOyByb3ctLSkKKyAgICAgICAg
ICAgICAgICBlbC5yZW1vdmVDaGlsZChlbC5sYXN0Q2hpbGQpOworCisgICAgICAgIGlmIChjb25m
aWcuZmlyc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29uZmlnLCBjb25maWcuZmlyc3RSb3cs
IG9sZENvbmZpZy5maXJzdFJvdyAtIDEpOworICAgICAgICAgICAgaWYgKGVsLmZpcnN0Q2hpbGQp
CisgICAgICAgICAgICAgICAgZWwuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBlbC5maXJzdENoaWxk
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChmcmFn
bWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLmxhc3RSb3cgPiBvbGRDb25m
aWcubGFzdFJvdykgeworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy4kcmVuZGVyTGlu
ZXNGcmFnbWVudChjb25maWcsIG9sZENvbmZpZy5sYXN0Um93ICsgMSwgY29uZmlnLmxhc3RSb3cp
OworICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQgPSBmdW5jdGlvbihjb25maWcsIGZp
cnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZWxlbWVudC5v
d25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgdmFyIHJvdyA9
IGZpcnN0Um93OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZv
bGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5l
LnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93ID0gZm9sZExp
bmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdl
dE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICBmb2xkU3RhcnQg
PSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3RSb3cpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisKKyAgICAgICAgICAgIHZhciBodG1sID0gW107CisgICAgICAgICAgICB0aGlzLiRyZW5kZXJM
aW5lKGh0bWwsIHJvdywgZmFsc2UsIHJvdyA9PSBmb2xkU3RhcnQgPyBmb2xkTGluZSA6IGZhbHNl
KTsKKyAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOworICAg
ICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5jbGFzc05hbWUgPSAnYWNlX2xpbmVfZ3JvdXAnOworICAgICAgICAgICAgICAgIGZy
YWdtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzCisgICAgICAgICAg
ICAgICAgd2hpbGUobGluZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5h
cHBlbmRDaGlsZChsaW5lc1swXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJvdysr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9OworCisgICAgdGhp
cy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdGhpcy5jb25maWcgPSBjb25m
aWc7CisKKyAgICAgICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gY29u
ZmlnLmZpcnN0Um93LCBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7CisKKyAgICAgICAgdmFyIHJv
dyA9IGZpcnN0Um93OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4
dEZvbGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRM
aW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93ID0gZm9s
ZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9u
LmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICBmb2xkU3Rh
cnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkKKyAgICAgICAgICAg
ICAgICBodG1sLnB1c2goIjxkaXYgY2xhc3M9J2FjZV9saW5lX2dyb3VwJz4iKQorCisgICAgICAg
ICAgICB0aGlzLiRyZW5kZXJMaW5lKGh0bWwsIHJvdywgZmFsc2UsIHJvdyA9PSBmb2xkU3RhcnQg
PyBmb2xkTGluZSA6IGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91
cHMoKSkKKyAgICAgICAgICAgICAgICBodG1sLnB1c2goIjwvZGl2PiIpOyAvLyBlbmQgdGhlIGxp
bmUgZ3JvdXAKKworICAgICAgICAgICAgcm93Kys7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5l
bGVtZW50ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOwor
ICAgIH07CisKKyAgICB0aGlzLiR0ZXh0VG9rZW4gPSB7CisgICAgICAgICJ0ZXh0IjogdHJ1ZSwK
KyAgICAgICAgInJwYXJlbiI6IHRydWUsCisgICAgICAgICJscGFyZW4iOiB0cnVlCisgICAgfTsK
KworICAgIHRoaXMuJHJlbmRlclRva2VuID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgc2NyZWVu
Q29sdW1uLCB0b2tlbiwgdmFsdWUpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAg
ICB2YXIgcmVwbGFjZVJlZyA9IC9cdHwmfDx8KCArKXwoW1x4MDAtXHgxZlx4ODAtXHhhMFx1MTY4
MFx1MTgwRVx1MjAwMC1cdTIwMGZcdTIwMjhcdTIwMjlcdTIwMkZcdTIwNUZcdTMwMDBcdUZFRkZd
KXxbXHUxMTAwLVx1MTE1Rlx1MTFBMy1cdTExQTdcdTExRkEtXHUxMUZGXHUyMzI5LVx1MjMyQVx1
MkU4MC1cdTJFOTlcdTJFOUItXHUyRUYzXHUyRjAwLVx1MkZENVx1MkZGMC1cdTJGRkJcdTMwMDAt
XHUzMDNFXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4
RVx1MzE5MC1cdTMxQkFcdTMxQzAtXHUzMUUzXHUzMUYwLVx1MzIxRVx1MzIyMC1cdTMyNDdcdTMy
NTAtXHUzMkZFXHUzMzAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0OTAtXHVBNEM2XHVBOTYwLVx1
QTk3Q1x1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBRkZc
dUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjZcdUZFNjgtXHVGRTZCXHVGRjAx
LVx1RkY2MFx1RkZFMC1cdUZGRTZdL2c7CisgICAgICAgIHZhciByZXBsYWNlRnVuYyA9IGZ1bmN0
aW9uKGMsIGEsIGIsIHRhYklkeCwgaWR4NCkgeworICAgICAgICAgICAgaWYgKGEpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5zaG93SW52aXNpYmxlcyA/CisgICAgICAgICAgICAgICAg
ICAgICI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+IiArIGxhbmcuc3RyaW5nUmVwZWF0KHNl
bGYuU1BBQ0VfQ0hBUiwgYy5sZW5ndGgpICsgIjwvc3Bhbj4iIDoKKyAgICAgICAgICAgICAgICAg
ICAgbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCBjLmxlbmd0aCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGMgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICImIzM4OyI7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIjwiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIm
IzYwOyI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIlx0IikgeworICAgICAgICAgICAg
ICAgIHZhciB0YWJTaXplID0gc2VsZi5zZXNzaW9uLmdldFNjcmVlblRhYlNpemUoc2NyZWVuQ29s
dW1uICsgdGFiSWR4KTsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gdGFiU2l6ZSAt
IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuJHRhYlN0cmluZ3NbdGFiU2l6ZV07Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIlx1MzAwMCIpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY2xhc3NUb1VzZSA9IHNlbGYuc2hvd0ludmlzaWJsZXMgPyAiYWNlX2NqayBhY2VfaW52aXNp
YmxlIiA6ICJhY2VfY2prIjsKKyAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBzZWxmLnNob3dJ
bnZpc2libGVzID8gc2VsZi5TUEFDRV9DSEFSIDogIiI7CisgICAgICAgICAgICAgICAgc2NyZWVu
Q29sdW1uICs9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0nIiArIGNs
YXNzVG9Vc2UgKyAiJyBzdHlsZT0nd2lkdGg6IiArCisgICAgICAgICAgICAgICAgICAgIChzZWxm
LmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCAqIDIpICsKKyAgICAgICAgICAgICAgICAgICAgInB4Jz4i
ICsgc3BhY2UgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGIpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlIGFjZV9pbnZhbGlk
Jz4iICsgc2VsZi5TUEFDRV9DSEFSICsgIjwvc3Bhbj4iOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIjxzcGFuIGNsYXNzPSdhY2VfY2prJyBzdHlsZT0nd2lkdGg6IiArCisgICAgICAgICAgICAg
ICAgICAgIChzZWxmLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCAqIDIpICsKKyAgICAgICAgICAgICAg
ICAgICAgInB4Jz4iICsgYyArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICB2YXIgb3V0cHV0ID0gdmFsdWUucmVwbGFjZShyZXBsYWNlUmVnLCByZXBsYWNl
RnVuYyk7CisKKyAgICAgICAgaWYgKCF0aGlzLiR0ZXh0VG9rZW5bdG9rZW4udHlwZV0pIHsKKyAg
ICAgICAgICAgIHZhciBjbGFzc2VzID0gImFjZV8iICsgdG9rZW4udHlwZS5yZXBsYWNlKC9cLi9n
LCAiIGFjZV8iKTsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9ICIiOworICAgICAgICAgICAgaWYg
KHRva2VuLnR5cGUgPT0gImZvbGQiKQorICAgICAgICAgICAgICAgIHN0eWxlID0gIiBzdHlsZT0n
d2lkdGg6IiArICh0b2tlbi52YWx1ZS5sZW5ndGggKiB0aGlzLmNvbmZpZy5jaGFyYWN0ZXJXaWR0
aCkgKyAicHg7JyAiOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCI8c3BhbiBjbGFz
cz0nIiwgY2xhc3NlcywgIiciLCBzdHlsZSwgIj4iLCBvdXRwdXQsICI8L3NwYW4+Iik7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gob3V0
cHV0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2NyZWVuQ29sdW1uICsgdmFsdWUubGVu
Z3RoOworICAgIH07CisKKyAgICB0aGlzLnJlbmRlckluZGVudEd1aWRlID0gZnVuY3Rpb24oc3Ry
aW5nQnVpbGRlciwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGNvbHMgPSB2YWx1ZS5zZWFyY2godGhp
cy4kaW5kZW50R3VpZGVSZSk7CisgICAgICAgIGlmIChjb2xzIDw9IDApCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZVswXSA9PSAiICIpIHsKKyAgICAgICAgICAg
IGNvbHMgLT0gY29scyAlIHRoaXMudGFiU2l6ZTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
cHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzWyIgIl0sIGNvbHMvdGhpcy50
YWJTaXplKSk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpOworICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlWzBdID09ICJcdCIpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzWyJcdCJdLCBjb2xzKSk7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUg
PSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRzKSB7
CisgICAgICAgIHZhciBjaGFycyA9IDA7CisgICAgICAgIHZhciBzcGxpdCA9IDA7CisgICAgICAg
IHZhciBzcGxpdENoYXJzID0gc3BsaXRzWzBdOworICAgICAgICB2YXIgc2NyZWVuQ29sdW1uID0g
MDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOworICAgICAgICAgICAgdmFyIHZhbHVl
ID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBpZiAoaSA9PSAwICYmIHRoaXMuZGlzcGxheUlu
ZGVudEd1aWRlcykgeworICAgICAgICAgICAgICAgIGNoYXJzID0gdmFsdWUubGVuZ3RoOworICAg
ICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWlsZGVy
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhcnMgLT0gdmFsdWUubGVuZ3RoOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hhcnMgKyB2YWx1ZS5sZW5ndGggPCBzcGxp
dENoYXJzKSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9r
ZW4oc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGNoYXJzICs9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGNoYXJzICsgdmFsdWUubGVuZ3RoID49IHNwbGl0Q2hhcnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiwgdmFsdWUuc3Vic3RyaW5nKDAsIHNwbGl0Q2hhcnMg
LSBjaGFycykKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3BsaXRDaGFycyAtIGNoYXJzKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hhcnMgPSBzcGxpdENoYXJzOworCisgICAgICAgICAgICAgICAgICAgIGlmICghb25s
eUNvbnRlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2go
IjwvZGl2PiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2FjZV9s
aW5lJyBzdHlsZT0naGVpZ2h0OiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b25maWcubGluZUhlaWdodCwgInB4Jz4iCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgKys7CisgICAg
ICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNw
bGl0Q2hhcnMgPSBzcGxpdHNbc3BsaXRdIHx8IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBjaGFycyArPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUKKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyU2ltcGxlTGluZSA9IGZ1bmN0aW9uKHN0cmluZ0J1
aWxkZXIsIHRva2VucykgeworICAgICAgICB2YXIgc2NyZWVuQ29sdW1uID0gMDsKKyAgICAgICAg
dmFyIHRva2VuID0gdG9rZW5zWzBdOworICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1ZTsK
KyAgICAgICAgaWYgKHRoaXMuZGlzcGxheUluZGVudEd1aWRlcykKKyAgICAgICAgICAgIHZhbHVl
ID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWlsZGVyLCB2YWx1ZSk7CisgICAgICAg
IGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2Vu
KHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRva2Vu
ID0gdG9rZW5zW2ldOworICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAg
ICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHN0cmluZ0J1aWxkZXIsIHNjcmVl
bkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy4kcmVu
ZGVyTGluZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJvdywgb25seUNvbnRlbnRzLCBmb2xk
TGluZSkgeworICAgICAgICBpZiAoIWZvbGRMaW5lICYmIGZvbGRMaW5lICE9IGZhbHNlKQorICAg
ICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUocm93KTsKKworICAg
ICAgICBpZiAoZm9sZExpbmUpCisgICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy4kZ2V0Rm9s
ZExpbmVUb2tlbnMocm93LCBmb2xkTGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZh
ciB0b2tlbnMgPSB0aGlzLnNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CisKKworICAgICAgICBpZiAo
IW9ubHlDb250ZW50cykgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAg
ICAgICAgICAgICI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hlaWdodDoiLCB0aGlzLmNv
bmZpZy5saW5lSGVpZ2h0LCAicHgnPiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMu
c2Vzc2lvbi5nZXRSb3dTcGxpdERhdGEocm93KTsKKyAgICAgICAgICAgIGlmIChzcGxpdHMgJiYg
c3BsaXRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aGlzLiRyZW5kZXJXcmFwcGVkTGluZShz
dHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRzKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLiRyZW5kZXJTaW1wbGVMaW5lKHN0cmluZ0J1aWxk
ZXIsIHRva2Vucyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxl
cykgeworICAgICAgICAgICAgaWYgKGZvbGRMaW5lKQorICAgICAgICAgICAgICAgIHJvdyA9IGZv
bGRMaW5lLmVuZC5yb3cKKworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAg
ICAgICAgICAgICI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+IiwKKyAgICAgICAgICAgICAg
ICByb3cgPT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSA/IHRoaXMuRU9GX0NIQVIgOiB0
aGlzLkVPTF9DSEFSLAorICAgICAgICAgICAgICAgICI8L3NwYW4+IgorICAgICAgICAgICAgKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIW9ubHlDb250ZW50cykKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIucHVzaCgiPC9kaXY+Iik7CisgICAgfTsKKworICAgIHRoaXMuJGdldEZvbGRMaW5l
VG9rZW5zID0gZnVuY3Rpb24ocm93LCBmb2xkTGluZSkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9
IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHJlbmRlclRva2VucyA9IFtdOworCisgICAgICAg
IGZ1bmN0aW9uIGFkZFRva2Vucyh0b2tlbnMsIGZyb20sIHRvKSB7CisgICAgICAgICAgICB2YXIg
aWR4ID0gMCwgY29sID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY29sICsgdG9rZW5zW2lkeF0u
dmFsdWUubGVuZ3RoKSA8IGZyb20pIHsKKyAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW2lk
eF0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAgICAg
ICAgaWYgKGlkeCA9PSB0b2tlbnMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sICE9IGZyb20pIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnNbaWR4XS52YWx1ZS5zdWJzdHJpbmcoZnJvbSAtIGNv
bCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+ICh0byAtIGZyb20pKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGZyb20pOwor
CisgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgICAg
ICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFs
dWUKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGNvbCA9IGZyb20gKyB2
YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWR4ICs9IDE7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHdoaWxlIChjb2wgPCB0byAmJiBpZHggPCB0b2tlbnMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2lkeF0udmFsdWU7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLmxlbmd0aCArIGNvbCA+IHRvKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlbmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vu
c1tpZHhdLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuc3Vic3Ry
aW5nKDAsIHRvIC0gY29sKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2godG9rZW5zW2lk
eF0pOworICAgICAgICAgICAgICAgIGNvbCArPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgaWR4ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgdG9r
ZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgZm9sZExpbmUud2FsayhmdW5j
dGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4sIGlzTmV3Um93KSB7Cisg
ICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJl
bmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogImZvbGQiLAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogcGxhY2Vob2xkZXIKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTmV3Um93KQorICAg
ICAgICAgICAgICAgICAgICB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOworCisgICAg
ICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGFkZFRv
a2Vucyh0b2tlbnMsIGxhc3RDb2x1bW4sIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sIGZvbGRMaW5lLmVuZC5yb3csIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZvbGRMaW5lLmVuZC5y
b3cpLmxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIHJlbmRlclRva2VuczsKKyAgICB9OworCisg
ICAgdGhpcy4kdXNlTGluZUdyb3VwcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCk7CisgICAgfTsKKworICAgIHRoaXMuZGVzdHJveSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBjbGVhckludGVydmFsKHRoaXMuJHBvbGxTaXplQ2hhbmdl
c1RpbWVyKTsKKyAgICAgICAgaWYgKHRoaXMuJG1lYXN1cmVOb2RlKQorICAgICAgICAgICAgdGhp
cy4kbWVhc3VyZU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRtZWFzdXJlTm9kZSk7
CisgICAgICAgIGRlbGV0ZSB0aGlzLiRtZWFzdXJlTm9kZTsKKyAgICB9OworCit9KS5jYWxsKFRl
eHQucHJvdG90eXBlKTsKKworZXhwb3J0cy5UZXh0ID0gVGV4dDsKKworfSk7CisKK2FjZS5kZWZp
bmUoJ2FjZS9sYXllci9jdXJzb3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CisKK3ZhciBDdXJzb3IgPSBmdW5jdGlv
bihwYXJlbnRFbCkgeworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfY3Vyc29yLWxh
eWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworCisgICAgdGhp
cy5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICB0aGlzLmlzQmxpbmtpbmcgPSB0cnVlOworICAgIHRo
aXMuYmxpbmtJbnRlcnZhbCA9IDEwMDA7CisgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IGZhbHNl
OworCisgICAgdGhpcy5jdXJzb3JzID0gW107CisgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmFkZEN1
cnNvcigpOworICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfaGlkZGVuLWN1
cnNvcnMiKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuJHBhZGRpbmcgPSAwOwor
ICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4k
cGFkZGluZyA9IHBhZGRpbmc7CisgICAgfTsKKworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0
aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgICB9Owor
CisgICAgdGhpcy5zZXRCbGlua2luZyA9IGZ1bmN0aW9uKGJsaW5raW5nKSB7CisgICAgICAgIGlm
IChibGlua2luZyAhPSB0aGlzLmlzQmxpbmtpbmcpeworICAgICAgICAgICAgdGhpcy5pc0JsaW5r
aW5nID0gYmxpbmtpbmc7CisgICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRoaXMuc2V0QmxpbmtJbnRlcnZhbCA9IGZ1bmN0aW9uKGJsaW5r
SW50ZXJ2YWwpIHsKKyAgICAgICAgaWYgKGJsaW5rSW50ZXJ2YWwgIT0gdGhpcy5ibGlua0ludGVy
dmFsKXsKKyAgICAgICAgICAgIHRoaXMuYmxpbmtJbnRlcnZhbCA9IGJsaW5rSW50ZXJ2YWw7Cisg
ICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMuc2V0U21vb3RoQmxpbmtpbmcgPSBmdW5jdGlvbihzbW9vdGhCbGlua2luZykgeworICAg
ICAgICBpZiAoc21vb3RoQmxpbmtpbmcgIT0gdGhpcy5zbW9vdGhCbGlua2luZykgeworICAgICAg
ICAgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IHNtb290aEJsaW5raW5nOworICAgICAgICAgICAg
aWYgKHNtb290aEJsaW5raW5nKQorICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlz
LmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9zbW9vdGgt
YmxpbmtpbmciKTsKKyAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGhpcy5hZGRDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbC5jbGFzc05hbWUgPSAi
YWNlX2N1cnNvciI7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7CisgICAg
ICAgIHRoaXMuY3Vyc29ycy5wdXNoKGVsKTsKKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07CisK
KyAgICB0aGlzLnJlbW92ZUN1cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5j
dXJzb3JzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuY3Vyc29ycy5w
b3AoKTsKKyAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOworICAgICAg
ICAgICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuaGlkZUN1cnNv
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOworICAgICAg
ICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7Cisg
ICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgfTsKKworICAgIHRoaXMuc2hvd0N1cnNv
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7CisgICAgICAg
IGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfaGlkZGVuLWN1cnNvcnMiKTsK
KyAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICB9OworCisgICAgdGhpcy5yZXN0YXJ0
VGltZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFs
SWQpOworICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpOworICAgICAgICBpZiAo
dGhpcy5zbW9vdGhCbGlua2luZykKKyAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlz
LmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CisgICAgICAgIGZvciAodmFyIGkgPSB0
aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tpXS5z
dHlsZS5vcGFjaXR5ID0gIiI7CisKKyAgICAgICAgaWYgKCF0aGlzLmlzQmxpbmtpbmcgfHwgIXRo
aXMuYmxpbmtJbnRlcnZhbCB8fCAhdGhpcy5pc1Zpc2libGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcpCisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxl
bWVudCwgImFjZV9zbW9vdGgtYmxpbmtpbmciKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7
CisKKyAgICAgICAgdmFyIGJsaW5rID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIHRoaXMudGlt
ZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5jdXJzb3JzLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5jdXJzb3JzW2ldLnN0eWxlLm9wYWNpdHkgPSAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0uYmluZCh0aGlzKSwgMC42ICogdGhpcy5ibGlua0ludGVydmFsKTsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpOworCisgICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFs
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY3Vyc29ycy5sZW5n
dGg7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JzW2ldLnN0eWxlLm9wYWNp
dHkgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsaW5rKCk7CisgICAgICAgIH0u
YmluZCh0aGlzKSwgdGhpcy5ibGlua0ludGVydmFsKTsKKworICAgICAgICBibGluaygpOworICAg
IH07CisKKyAgICB0aGlzLmdldFBpeGVsUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbiwgb25T
Y3JlZW4pIHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhdGhpcy5zZXNzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuIHtsZWZ0IDogMCwgdG9wIDogMH07CisKKyAgICAgICAgaWYgKCFwb3Np
dGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRD
dXJzb3IoKTsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVu
UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICB2YXIgY3Vyc29yTGVmdCA9IHRoaXMuJHBhZGRp
bmcgKyBwb3MuY29sdW1uICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGg7CisgICAgICAgIHZh
ciBjdXJzb3JUb3AgPSAocG9zLnJvdyAtIChvblNjcmVlbiA/IHRoaXMuY29uZmlnLmZpcnN0Um93
U2NyZWVuIDogMCkpICoKKyAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQ7CisKKyAg
ICAgICAgcmV0dXJuIHtsZWZ0IDogY3Vyc29yTGVmdCwgdG9wIDogY3Vyc29yVG9wfTsKKyAgICB9
OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdGhpcy5j
b25maWcgPSBjb25maWc7CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSB0aGlzLnNlc3Npb24u
JHNlbGVjdGlvbk1hcmtlcnM7CisgICAgICAgIHZhciBpID0gMCwgY3Vyc29ySW5kZXggPSAwOwor
CisgICAgICAgIGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5sZW5n
dGggPT09IDApeworICAgICAgICAgICAgc2VsZWN0aW9ucyA9IFt7Y3Vyc29yOiBudWxsfV07Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0aW9ucy5sZW5ndGg7IGktLTsg
KSB7CisgICAgICAgICAgICB2YXIgcGl4ZWxQb3MgPSB0aGlzLmdldFBpeGVsUG9zaXRpb24oc2Vs
ZWN0aW9uc1tpXS5jdXJzb3IsIHRydWUpOworICAgICAgICAgICAgaWYgKChwaXhlbFBvcy50b3Ag
PiBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm9mZnNldCB8fAorICAgICAgICAgICAgICAgICBwaXhl
bFBvcy50b3AgPCAtY29uZmlnLm9mZnNldCkgJiYgaSA+IDEpIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHN0eWxlID0gKHRoaXMu
Y3Vyc29yc1tjdXJzb3JJbmRleCsrXSB8fCB0aGlzLmFkZEN1cnNvcigpKS5zdHlsZTsKKworICAg
ICAgICAgICAgc3R5bGUubGVmdCA9IHBpeGVsUG9zLmxlZnQgKyAicHgiOworICAgICAgICAgICAg
c3R5bGUudG9wID0gcGl4ZWxQb3MudG9wICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLndpZHRo
ID0gY29uZmlnLmNoYXJhY3RlcldpZHRoICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLmhlaWdo
dCA9IGNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAo
dGhpcy5jdXJzb3JzLmxlbmd0aCA+IGN1cnNvckluZGV4KQorICAgICAgICAgICAgdGhpcy5yZW1v
dmVDdXJzb3IoKTsKKworICAgICAgICB2YXIgb3ZlcndyaXRlID0gdGhpcy5zZXNzaW9uLmdldE92
ZXJ3cml0ZSgpOworICAgICAgICB0aGlzLiRzZXRPdmVyd3JpdGUob3ZlcndyaXRlKTsKKyAgICAg
ICAgdGhpcy4kcGl4ZWxQb3MgPSBwaXhlbFBvczsKKyAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIo
KTsKKyAgICB9OworCisgICAgdGhpcy4kc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRl
KSB7CisgICAgICAgIGlmIChvdmVyd3JpdGUgIT0gdGhpcy5vdmVyd3JpdGUpIHsKKyAgICAgICAg
ICAgIHRoaXMub3ZlcndyaXRlID0gb3ZlcndyaXRlOworICAgICAgICAgICAgaWYgKG92ZXJ3cml0
ZSkKKyAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX292
ZXJ3cml0ZS1jdXJzb3JzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG9t
LnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9vdmVyd3JpdGUtY3Vyc29ycyIpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7CisgICAgICAgIGNsZWFyVGltZW91
dCh0aGlzLnRpbWVvdXRJZCk7CisgICAgfTsKKworfSkuY2FsbChDdXJzb3IucHJvdG90eXBlKTsK
KworZXhwb3J0cy5DdXJzb3IgPSBDdXJzb3I7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uvc2Ny
b2xsYmFyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcs
ICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcidd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVx
dWlyZSgiLi9saWIvb29wIik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7Cit2YXIg
ZXZlbnQgPSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVp
cmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cit2YXIgU2Nyb2xsQmFyID0g
ZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGJhciI7CisK
KyAgICB0aGlzLmlubmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuaW5u
ZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxiYXItaW5uZXIiOworICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLmlubmVyKTsKKworICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVs
ZW1lbnQpOworICAgIHRoaXMud2lkdGggPSBkb20uc2Nyb2xsYmFyV2lkdGgocGFyZW50Lm93bmVy
RG9jdW1lbnQpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9ICh0aGlzLndpZHRoIHx8
IDE1KSArIDUgKyAicHgiOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5lbGVtZW50LCAi
c2Nyb2xsIiwgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTsKK307CisKKyhmdW5jdGlvbigpIHsK
KyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5vblNjcm9s
bCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuc2tpcEV2ZW50KSB7CisgICAgICAg
ICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgICAg
ICB0aGlzLl9lbWl0KCJzY3JvbGwiLCB7ZGF0YTogdGhpcy5zY3JvbGxUb3B9KTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlOworICAgIH07CisgICAgdGhpcy5nZXRX
aWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy53aWR0aDsKKyAgICB9Owor
ICAgIHRoaXMuc2V0SGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7CisgICAgICAgIHRoaXMuZWxl
bWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH07CisgICAgdGhpcy5zZXRJ
bm5lckhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgeworICAgICAgICB0aGlzLmlubmVyLnN0eWxl
LmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfTsKKyAgICB0aGlzLnNldFNjcm9sbFRvcCA9
IGZ1bmN0aW9uKHNjcm9sbFRvcCkgeworICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT0gc2Ny
b2xsVG9wKSB7CisgICAgICAgICAgICB0aGlzLnNraXBFdmVudCA9IHRydWU7CisgICAgICAgICAg
ICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7Cisg
ICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKFNjcm9sbEJhci5wcm90b3R5cGUpOworCitleHBv
cnRzLlNjcm9sbEJhciA9IFNjcm9sbEJhcjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvcmVuZGVy
bG9vcCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9ldmVudCdd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgZXZlbnQgPSBy
ZXF1aXJlKCIuL2xpYi9ldmVudCIpOworCisKK3ZhciBSZW5kZXJMb29wID0gZnVuY3Rpb24ob25S
ZW5kZXIsIHdpbikgeworICAgIHRoaXMub25SZW5kZXIgPSBvblJlbmRlcjsKKyAgICB0aGlzLnBl
bmRpbmcgPSBmYWxzZTsKKyAgICB0aGlzLmNoYW5nZXMgPSAwOworICAgIHRoaXMud2luZG93ID0g
d2luIHx8IHdpbmRvdzsKK307CisKKyhmdW5jdGlvbigpIHsKKworCisgICAgdGhpcy5zY2hlZHVs
ZSA9IGZ1bmN0aW9uKGNoYW5nZSkgeworICAgICAgICB0aGlzLmNoYW5nZXMgPSB0aGlzLmNoYW5n
ZXMgfCBjaGFuZ2U7CisgICAgICAgIGlmICghdGhpcy5wZW5kaW5nKSB7CisgICAgICAgICAgICB0
aGlzLnBlbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAg
ICAgICAgIGV2ZW50Lm5leHRGcmFtZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBfc2Vs
Zi5wZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmFyIGNoYW5nZXM7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKGNoYW5nZXMgPSBfc2VsZi5jaGFuZ2VzKSB7CisgICAgICAgICAgICAg
ICAgICAgIF9zZWxmLmNoYW5nZXMgPSAwOworICAgICAgICAgICAgICAgICAgICBfc2VsZi5vblJl
bmRlcihjaGFuZ2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCB0aGlzLndp
bmRvdyk7CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKFJlbmRlckxvb3AucHJvdG90eXBl
KTsKKworZXhwb3J0cy5SZW5kZXJMb29wID0gUmVuZGVyTG9vcDsKK30pOworCithY2UuZGVmaW5l
KCdhY2UvbXVsdGlfc2VsZWN0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdh
Y2UvcmFuZ2VfbGlzdCcsICdhY2UvcmFuZ2UnLCAnYWNlL3NlbGVjdGlvbicsICdhY2UvbW91c2Uv
bXVsdGlfc2VsZWN0X2hhbmRsZXInLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcycsICdhY2Uvc2VhcmNoJywgJ2FjZS9l
ZGl0X3Nlc3Npb24nLCAnYWNlL2VkaXRvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKKwordmFyIFJhbmdlTGlzdCA9IHJlcXVpcmUoIi4vcmFuZ2VfbGlzdCIpLlJhbmdl
TGlzdDsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBTZWxlY3Rp
b24gPSByZXF1aXJlKCIuL3NlbGVjdGlvbiIpLlNlbGVjdGlvbjsKK3ZhciBvbk1vdXNlRG93biA9
IHJlcXVpcmUoIi4vbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXIiKS5vbk1vdXNlRG93bjsKK3Zh
ciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4v
bGliL2xhbmciKTsKK3ZhciBjb21tYW5kcyA9IHJlcXVpcmUoIi4vY29tbWFuZHMvbXVsdGlfc2Vs
ZWN0X2NvbW1hbmRzIik7CitleHBvcnRzLmNvbW1hbmRzID0gY29tbWFuZHMuZGVmYXVsdENvbW1h
bmRzLmNvbmNhdChjb21tYW5kcy5tdWx0aVNlbGVjdENvbW1hbmRzKTsKK3ZhciBTZWFyY2ggPSBy
ZXF1aXJlKCIuL3NlYXJjaCIpLlNlYXJjaDsKK3ZhciBzZWFyY2ggPSBuZXcgU2VhcmNoKCk7CisK
K2Z1bmN0aW9uIGZpbmQoc2Vzc2lvbiwgbmVlZGxlLCBkaXIpIHsKKyAgICBzZWFyY2guJG9wdGlv
bnMud3JhcCA9IHRydWU7CisgICAgc2VhcmNoLiRvcHRpb25zLm5lZWRsZSA9IG5lZWRsZTsKKyAg
ICBzZWFyY2guJG9wdGlvbnMuYmFja3dhcmRzID0gZGlyID09IC0xOworICAgIHJldHVybiBzZWFy
Y2guZmluZChzZXNzaW9uKTsKK30KK3ZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRpdF9z
ZXNzaW9uIikuRWRpdFNlc3Npb247CisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5nZXRTZWxlY3Rp
b25NYXJrZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzZWxlY3Rpb25N
YXJrZXJzOworICAgIH07Cit9KS5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CisoZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5yYW5nZXMgPSBudWxsOworICAgIHRoaXMucmFuZ2VMaXN0ID0gbnVs
bDsKKyAgICB0aGlzLmFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsICRibG9ja0NoYW5nZUV2ZW50
cykgeworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmICghdGhpcy5pbk11bHRpU2VsZWN0TW9kZSAmJiB0aGlzLnJhbmdlQ291bnQgPT0gMCkgewor
ICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGlmIChyYW5nZS5pbnRlcnNlY3RzKG9sZFJhbmdlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJGJsb2NrQ2hhbmdlRXZlbnRzIHx8IHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2Up
OworCisgICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hZGQob2xkUmFuZ2UpOworICAgICAgICAg
ICAgdGhpcy4kb25BZGRSYW5nZShvbGRSYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXJhbmdlLmN1cnNvcikKKyAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdlLmVuZDsKKwor
ICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LmFkZChyYW5nZSk7CisKKyAgICAg
ICAgdGhpcy4kb25BZGRSYW5nZShyYW5nZSk7CisKKyAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3Ro
KQorICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTsKKworICAgICAgICBp
ZiAodGhpcy5yYW5nZUNvdW50ID4gMSAmJiAhdGhpcy5pbk11bHRpU2VsZWN0TW9kZSkgeworICAg
ICAgICAgICAgdGhpcy5fZW1pdCgibXVsdGlTZWxlY3QiKTsKKyAgICAgICAgICAgIHRoaXMuaW5N
dWx0aVNlbGVjdE1vZGUgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRvU2Vs
ZWN0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNz
aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwg
dGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMudG9TaW5n
bGVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJhbmdlID0gcmFuZ2UgfHwgdGhp
cy5yYW5nZXNbMF07CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QucmVtb3Zl
QWxsKCk7CisgICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMuJG9u
UmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisKKyAgICAgICAgcmFuZ2UgJiYgdGhpcy5mcm9tT3JpZW50
ZWRSYW5nZShyYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLnN1YnN0cmFjdFBvaW50ID0gZnVuY3Rp
b24ocG9zKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3Quc3Vic3RyYWN0
UG9pbnQocG9zKTsKKyAgICAgICAgaWYgKHJlbW92ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuJG9u
UmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisgICAgICAgICAgICByZXR1cm4gcmVtb3ZlZFswXTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QubWVyZ2UoKTsKKyAg
ICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5n
ZShyZW1vdmVkKTsKKyAgICAgICAgZWxzZSBpZih0aGlzLnJhbmdlc1swXSkKKyAgICAgICAgICAg
IHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UodGhpcy5yYW5nZXNbMF0pOworICAgIH07CisKKyAgICB0
aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdGhpcy5yYW5nZUNv
dW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5yYW5nZXMu
dW5zaGlmdChyYW5nZSk7CisgICAgICAgIHRoaXMuX2VtaXQoImFkZFJhbmdlIiwge3JhbmdlOiBy
YW5nZX0pOworICAgIH07CisKKyAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24ocmVt
b3ZlZCkgeworICAgICAgICB0aGlzLnJhbmdlQ291bnQgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMu
bGVuZ3RoOworICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09IDEgJiYgdGhpcy5pbk11bHRp
U2VsZWN0TW9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHRoaXMucmFuZ2VMaXN0
LnJhbmdlcy5wb3AoKTsKKyAgICAgICAgICAgIHJlbW92ZWQucHVzaChsYXN0UmFuZ2UpOworICAg
ICAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
dmFyIGkgPSByZW1vdmVkLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9
IHRoaXMucmFuZ2VzLmluZGV4T2YocmVtb3ZlZFtpXSk7CisgICAgICAgICAgICB0aGlzLnJhbmdl
cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZW1pdCgicmVt
b3ZlUmFuZ2UiLCB7cmFuZ2VzOiByZW1vdmVkfSk7CisKKyAgICAgICAgaWYgKHRoaXMucmFuZ2VD
b3VudCA9PSAwICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
aW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoInNpbmds
ZVNlbGVjdCIpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pOworICAgICAg
ICB9CisKKyAgICAgICAgbGFzdFJhbmdlID0gbGFzdFJhbmdlIHx8IHRoaXMucmFuZ2VzWzBdOwor
ICAgICAgICBpZiAobGFzdFJhbmdlICYmICFsYXN0UmFuZ2UuaXNFcXVhbCh0aGlzLmdldFJhbmdl
KCkpKQorICAgICAgICAgICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShsYXN0UmFuZ2UpOworICAg
IH07CisgICAgdGhpcy4kaW5pdFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
dGhpcy5yYW5nZUxpc3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5yYW5n
ZUxpc3QgPSBuZXcgUmFuZ2VMaXN0KCk7CisgICAgICAgIHRoaXMucmFuZ2VzID0gW107CisgICAg
ICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7CisgICAgfTsKKyAgICB0aGlzLmdldEFsbFJhbmdlcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmNvbmNh
dCgpOworICAgIH07CisKKyAgICB0aGlzLnNwbGl0SW50b0xpbmVzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID4gMSkgeworICAgICAgICAgICAgdmFyIHJhbmdl
cyA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlczsKKyAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSBy
YW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2Uu
ZnJvbVBvaW50cyhyYW5nZXNbMF0uc3RhcnQsIGxhc3RSYW5nZS5lbmQpOworCisgICAgICAgICAg
ICB0aGlzLnRvU2luZ2xlUmFuZ2UoKTsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFu
Z2UocmFuZ2UsIGxhc3RSYW5nZS5jdXJzb3IgPT0gbGFzdFJhbmdlLnN0YXJ0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTsKKyAgICAg
ICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTsKKyAgICAgICAgICAg
IHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHZhciBlbmRSb3cg
PSByYW5nZS5lbmQucm93OworICAgICAgICAgICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdykgewor
ICAgICAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkcykKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHN0YXJ0ID0gcmFuZ2UuZW5kLCBlbmQgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LCBlbmQgPSBy
YW5nZS5lbmQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5n
ZShSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKSk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRS
YW5nZShSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBzdGFydCkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTsKKyAg
ICAgICAgICAgIHZhciByID0gdGhpcy5nZXRMaW5lUmFuZ2Uoc3RhcnRSb3csIHRydWUpOworICAg
ICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAg
ICByZWN0U2VsLnB1c2gocik7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyAr
IDE7IGkgPCBlbmRSb3c7IGkrKykKKyAgICAgICAgICAgICAgICByZWN0U2VsLnB1c2godGhpcy5n
ZXRMaW5lUmFuZ2UoaSwgdHJ1ZSkpOworCisgICAgICAgICAgICByID0gdGhpcy5nZXRMaW5lUmFu
Z2UoZW5kUm93LCB0cnVlKTsKKyAgICAgICAgICAgIHIuZW5kLmNvbHVtbiA9IHJhbmdlLmVuZC5j
b2x1bW47CisgICAgICAgICAgICByZWN0U2VsLnB1c2gocik7CisKKyAgICAgICAgICAgIHJlY3RT
ZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
dGhpcy50b2dnbGVCbG9ja1NlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRo
aXMucmFuZ2VDb3VudCA+IDEpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdl
TGlzdC5yYW5nZXM7CisgICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFu
Z2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgdGhpcy50b1Npbmds
ZVJhbmdlKCk7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0
UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlv
bih0aGlzLnNlbGVjdGlvbkxlYWQpOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc2Vz
c2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25BbmNob3IpOworCisg
ICAgICAgICAgICB2YXIgcmVjdFNlbCA9IHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKGN1cnNv
ciwgYW5jaG9yKTsKKyAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0
aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2sg
PSBmdW5jdGlvbihzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvciwgaW5jbHVkZUVtcHR5TGluZXMp
IHsKKyAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTsKKworICAgICAgICB2YXIgeEJhY2t3YXJkcyA9
IHNjcmVlbkN1cnNvci5jb2x1bW4gPCBzY3JlZW5BbmNob3IuY29sdW1uOworICAgICAgICBpZiAo
eEJhY2t3YXJkcykgeworICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVuQ3Vyc29y
LmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5BbmNob3IuY29sdW1u
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVu
QW5jaG9yLmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5DdXJzb3Iu
Y29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHlCYWNrd2FyZHMgPSBzY3JlZW5DdXJz
b3Iucm93IDwgc2NyZWVuQW5jaG9yLnJvdzsKKyAgICAgICAgaWYgKHlCYWNrd2FyZHMpIHsKKyAg
ICAgICAgICAgIHZhciBzdGFydFJvdyA9IHNjcmVlbkN1cnNvci5yb3c7CisgICAgICAgICAgICB2
YXIgZW5kUm93ID0gc2NyZWVuQW5jaG9yLnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBzdGFydFJvdyA9IHNjcmVlbkFuY2hvci5yb3c7CisgICAgICAgICAgICB2YXIgZW5k
Um93ID0gc2NyZWVuQ3Vyc29yLnJvdzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGFydENv
bHVtbiA8IDApCisgICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CisgICAgICAgIGlmIChzdGFy
dFJvdyA8IDApCisgICAgICAgICAgICBzdGFydFJvdyA9IDA7CisKKyAgICAgICAgaWYgKHN0YXJ0
Um93ID09IGVuZFJvdykKKyAgICAgICAgICAgIGluY2x1ZGVFbXB0eUxpbmVzID0gdHJ1ZTsKKwor
ICAgICAgICBmb3IgKHZhciByb3cgPSBzdGFydFJvdzsgcm93IDw9IGVuZFJvdzsgcm93KyspIHsK
KyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoCisgICAgICAgICAgICAg
ICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIHN0YXJ0Q29sdW1u
KSwKKyAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9u
KHJvdywgZW5kQ29sdW1uKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG9jRW5kICYmIGlzU2FtZVBvaW50KHJh
bmdlLmVuZCwgZG9jRW5kKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgdmFyIGRvY0VuZCA9IHJhbmdlLmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJhbmdlLmN1cnNvciA9IHhCYWNrd2FyZHMgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKKyAg
ICAgICAgICAgIHJlY3RTZWwucHVzaChyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
eUJhY2t3YXJkcykKKyAgICAgICAgICAgIHJlY3RTZWwucmV2ZXJzZSgpOworCisgICAgICAgIGlm
ICghaW5jbHVkZUVtcHR5TGluZXMpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSByZWN0U2VsLmxl
bmd0aCAtIDE7CisgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtlbmRdLmlzRW1wdHkoKSAmJiBl
bmQgPiAwKQorICAgICAgICAgICAgICAgIGVuZC0tOworICAgICAgICAgICAgaWYgKGVuZCA+IDAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHdoaWxl
IChyZWN0U2VsW3N0YXJ0XS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Kys7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBpID0gZW5kOyBpID49IHN0YXJ0
OyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAocmVjdFNlbFtpXS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHJlY3RTZWwuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlY3RTZWw7CisgICAgfTsKK30pLmNhbGwoU2VsZWN0
aW9uLnByb3RvdHlwZSk7Cit2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0b3I7
CisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25NYXJrZXJzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworICAgIHRoaXMuYWRkU2Vs
ZWN0aW9uTWFya2VyID0gZnVuY3Rpb24ob3JpZW50ZWRSYW5nZSkgeworICAgICAgICBpZiAoIW9y
aWVudGVkUmFuZ2UuY3Vyc29yKQorICAgICAgICAgICAgb3JpZW50ZWRSYW5nZS5jdXJzb3IgPSBv
cmllbnRlZFJhbmdlLmVuZDsKKworICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmdldFNlbGVjdGlv
blN0eWxlKCk7CisgICAgICAgIG9yaWVudGVkUmFuZ2UubWFya2VyID0gdGhpcy5zZXNzaW9uLmFk
ZE1hcmtlcihvcmllbnRlZFJhbmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKKworICAgICAg
ICB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMucHVzaChvcmllbnRlZFJhbmdlKTsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50ID0gdGhpcy5zZXNzaW9uLiRz
ZWxlY3Rpb25NYXJrZXJzLmxlbmd0aDsKKyAgICAgICAgcmV0dXJuIG9yaWVudGVkUmFuZ2U7Cisg
ICAgfTsKKyAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKHJhbmdlKSB7
CisgICAgICAgIGlmICghcmFuZ2UubWFya2VyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcik7CisgICAgICAgIHZhciBp
bmRleCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5pbmRleE9mKHJhbmdlKTsKKyAg
ICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRzZWxlY3Rp
b25NYXJrZXJzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rp
b25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7Cisg
ICAgfTsKKworICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKHJhbmdl
cykgeworICAgICAgICB2YXIgbWFya2VyTGlzdCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFy
a2VyczsKKyAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKSB7CisgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CisgICAgICAgICAgICBpZiAoIXJhbmdlLm1h
cmtlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IG1h
cmtlckxpc3QuaW5kZXhPZihyYW5nZSk7CisgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCisg
ICAgICAgICAgICAgICAgbWFya2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IG1hcmtlckxpc3QubGVu
Z3RoOworICAgIH07CisKKyAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKTsKKyAgICAgICAgdGhpcy5yZW5k
ZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFy
a2VycygpOworICAgIH07CisKKyAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24oZSkg
eworICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpOworICAgICAg
ICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0gdHJ1ZTsKKwor
ICAgICAgICB0aGlzLnNldFN0eWxlKCJhY2VfbXVsdGlzZWxlY3QiKTsKKyAgICAgICAgdGhpcy5r
ZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcihjb21tYW5kcy5rZXlib2FyZEhhbmRsZXIpOwor
ICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMp
OworCisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMu
cmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy4kb25TaW5n
bGVTZWxlY3QgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24ubXVsdGlT
ZWxlY3QuaW5WaXJ0dWFsTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5p
bk11bHRpU2VsZWN0TW9kZSA9IGZhbHNlOworCisgICAgICAgIHRoaXMudW5zZXRTdHlsZSgiYWNl
X211bHRpc2VsZWN0Iik7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhh
bmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKKworICAgICAgICB0aGlzLmNvbW1hbmRz
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImV4ZWMiLCB0aGlzLiRvbk11bHRpU2VsZWN0RXhlYyk7Cisg
ICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVuZGVy
ZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy4kb25NdWx0aVNlbGVj
dEV4ZWMgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gZS5jb21tYW5kOwor
ICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CisgICAgICAgIGlmICghZWRpdG9yLm11bHRp
U2VsZWN0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWNvbW1hbmQubXVsdGlT
ZWxlY3RBY3Rpb24pIHsKKyAgICAgICAgICAgIGNvbW1hbmQuZXhlYyhlZGl0b3IsIGUuYXJncyB8
fCB7fSk7CisgICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QuYWRkUmFuZ2UoZWRpdG9yLm11
bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTsKKyAgICAgICAgICAgIGVkaXRvci5tdWx0aVNl
bGVjdC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tbWFu
ZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSAiZm9yRWFjaCIpIHsKKyAgICAgICAgICAgIGVkaXRvci5m
b3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncyk7CisgICAgICAgIH0gZWxzZSBpZiAoY29t
bWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSAic2luZ2xlIikgeworICAgICAgICAgICAgZWRpdG9y
LmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKKyAgICAgICAgICAgIGNvbW1hbmQuZXhlYyhlZGl0b3Is
IGUuYXJncyB8fCB7fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb21tYW5kLm11
bHRpU2VsZWN0QWN0aW9uKGVkaXRvciwgZS5hcmdzIHx8IHt9KTsKKyAgICAgICAgfQorICAgICAg
ICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfTsgCisgICAgdGhpcy5mb3JFYWNoU2VsZWN0aW9u
ID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7CisgICAgICAgIGlmICh0aGlzLmluVmlydHVhbFNlbGVj
dGlvbk1vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0
aGlzLnNlc3Npb247CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbjsKKyAg
ICAgICAgdmFyIHJhbmdlTGlzdCA9IHNlbGVjdGlvbi5yYW5nZUxpc3Q7CisKKyAgICAgICAgdmFy
IHJlZyA9IHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeTsKKyAgICAgICAgc2VsZWN0aW9uLl9ldmVu
dFJlZ2lzdHJ5ID0ge307CisKKyAgICAgICAgdmFyIHRtcFNlbCA9IG5ldyBTZWxlY3Rpb24oc2Vz
c2lvbik7CisgICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7CisgICAg
ICAgIGZvciAodmFyIGkgPSByYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsgaS0tOykgeworICAgICAg
ICAgICAgdG1wU2VsLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlTGlzdC5yYW5nZXNbaV0pOworICAg
ICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLnNlbGVjdGlvbiA9IHRtcFNlbDsKKyAg
ICAgICAgICAgIGNtZC5leGVjKHRoaXMsIGFyZ3MgfHwge30pOworICAgICAgICAgICAgdG1wU2Vs
LnRvT3JpZW50ZWRSYW5nZShyYW5nZUxpc3QucmFuZ2VzW2ldKTsKKyAgICAgICAgfQorICAgICAg
ICB0bXBTZWwuZGV0YWNoKCk7CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLnNl
bGVjdGlvbiA9IHNlbGVjdGlvbjsKKyAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2Rl
ID0gZmFsc2U7CisgICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHJlZzsKKyAgICAg
ICAgc2VsZWN0aW9uLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKKworICAgICAgICB0aGlzLm9u
Q3Vyc29yQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICB9
OworICAgIHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB0aGlzLm11bHRpU2VsZWN0LnRvU2luZ2xlUmFuZ2UoKTsKKyAgICB9OworCisgICAgdGhp
cy5nZXRDb3B5VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGV4dCA9ICIiOworICAg
ICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSkgeworICAgICAgICAgICAgdmFyIHJhbmdl
cyA9IHRoaXMubXVsdGlTZWxlY3QucmFuZ2VMaXN0LnJhbmdlczsKKyAgICAgICAgICAgIHRleHQg
PSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgdGV4dC5wdXNoKHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2Uo
cmFuZ2VzW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5qb2lu
KHRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
dGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisgICAgdGhpcy5v
blBhc3RlID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZW1pdCgicGFzdGUiLCB0ZXh0KTsK
KyAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaW5zZXJ0KHRleHQpOworCisgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoL1xy
XG58XHJ8XG4vKTsKKyAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlTGlz
dC5yYW5nZXM7CisKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IHJhbmdlcy5sZW5ndGggfHwg
KGxpbmVzLmxlbmd0aCA8PSAyIHx8ICFsaW5lc1sxXSkpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLCB0ZXh0KTsKKworICAgICAgICBm
b3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciByYW5n
ZSA9IHJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworCisgICAgICAgICAgICB0aGlz
LnNlc3Npb24uaW5zZXJ0KHJhbmdlLnN0YXJ0LCBsaW5lc1tpXSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKG5lZWRsZSwgb3B0aW9ucywgYWRkaXRpdmUp
IHsKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgICAgICAgIG9wdGlvbnMubmVl
ZGxlID0gbmVlZGxlIHx8IG9wdGlvbnMubmVlZGxlOworICAgICAgICB0aGlzLiRzZWFyY2guc2V0
KG9wdGlvbnMpOworCisgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLiRzZWFyY2guZmluZEFsbCh0
aGlzLnNlc3Npb24pOworICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOworICAgICAgICB2
YXIgc2VsZWN0aW9uID0gdGhpcy5tdWx0aVNlbGVjdDsKKworICAgICAgICBpZiAoIWFkZGl0aXZl
KQorICAgICAgICAgICAgc2VsZWN0aW9uLnRvU2luZ2xlUmFuZ2UocmFuZ2VzWzBdKTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOyApCisgICAgICAgICAgICBzZWxl
Y3Rpb24uYWRkUmFuZ2UocmFuZ2VzW2ldLCB0cnVlKTsKKworICAgICAgICB0aGlzLiRibG9ja1Nj
cm9sbGluZyAtPSAxOworCisgICAgICAgIHJldHVybiByYW5nZXMubGVuZ3RoOworICAgIH07Cisg
ICAgdGhpcy5zZWxlY3RNb3JlTGluZXMgPSBmdW5jdGlvbihkaXIsIHNraXApIHsKKyAgICAgICAg
dmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CisgICAgICAgIHZh
ciBpc0JhY2t3YXJkcyA9IHJhbmdlLmN1cnNvciA9PSByYW5nZS5lbmQ7CisKKyAgICAgICAgdmFy
IHNjcmVlbkxlYWQgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHJhbmdl
LmN1cnNvcik7CisgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbikKKyAg
ICAgICAgICAgIHNjcmVlbkxlYWQuY29sdW1uID0gdGhpcy5zZWxlY3Rpb24uJGRlc2lyZWRDb2x1
bW47CisKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBv
c2l0aW9uKHNjcmVlbkxlYWQucm93ICsgZGlyLCBzY3JlZW5MZWFkLmNvbHVtbik7CisKKyAgICAg
ICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciBzY3JlZW5BbmNob3Ig
PSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGlzQmFja3dhcmRzID8gcmFu
Z2UuZW5kIDogcmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc2Vz
c2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuQW5jaG9yLnJvdyArIGRpciwgc2Ny
ZWVuQW5jaG9yLmNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYW5j
aG9yID0gbGVhZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0JhY2t3YXJkcykgeworICAg
ICAgICAgICAgdmFyIG5ld1JhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBhbmNob3IpOwor
ICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gbmV3UmFuZ2Uuc3RhcnQ7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGFuY2hv
ciwgbGVhZCk7CisgICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBuZXdSYW5nZS5lbmQ7Cisg
ICAgICAgIH0KKworICAgICAgICBuZXdSYW5nZS5kZXNpcmVkQ29sdW1uID0gc2NyZWVuTGVhZC5j
b2x1bW47CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpIHsK
KyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChza2lwKQorICAgICAgICAgICAgICAgIHZhciB0b1JlbW92
ZSA9IHJhbmdlLmN1cnNvcjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc2VsZWN0aW9uLmFk
ZFJhbmdlKG5ld1JhbmdlKTsKKyAgICAgICAgaWYgKHRvUmVtb3ZlKQorICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG9SZW1vdmUpOworICAgIH07CisgICAgdGhpcy50
cmFuc3Bvc2VTZWxlY3Rpb25zID0gZnVuY3Rpb24oZGlyKSB7CisgICAgICAgIHZhciBzZXNzaW9u
ID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgc2VsID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsK
KyAgICAgICAgdmFyIGFsbCA9IHNlbC5yYW5nZXM7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IGFs
bC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBhbGxbaV07CisgICAg
ICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRtcCA9
IHNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1u
KTsKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93OworICAg
ICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRtcC5zdGFydC5jb2x1bW47CisgICAg
ICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IHRtcC5lbmQucm93OworICAgICAgICAgICAgICAg
IHJhbmdlLmVuZC5jb2x1bW4gPSB0bXAuZW5kLmNvbHVtbjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBzZWwubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpOworCisgICAgICAgIHZh
ciB3b3JkcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHsK
KyAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTsKKyAgICAgICAgICAgIHdvcmRzLnVuc2hp
ZnQoc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkaXIgPCAwKQorICAgICAgICAgICAgd29yZHMudW5zaGlmdCh3b3Jkcy5wb3AoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHdvcmRzLnB1c2god29yZHMuc2hpZnQoKSk7CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFu
Z2UgPSBhbGxbaV07CisgICAgICAgICAgICB2YXIgdG1wID0gcmFuZ2UuY2xvbmUoKTsKKyAgICAg
ICAgICAgIHNlc3Npb24ucmVwbGFjZShyYW5nZSwgd29yZHNbaV0pOworICAgICAgICAgICAgcmFu
Z2Uuc3RhcnQucm93ID0gdG1wLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNv
bHVtbiA9IHRtcC5zdGFydC5jb2x1bW47CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2Vs
ZWN0TW9yZSA9IGZ1bmN0aW9uKGRpciwgc2tpcCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRo
aXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisKKyAg
ICAgICAgdmFyIHJhbmdlID0gc2VsLnRvT3JpZW50ZWRSYW5nZSgpOworICAgICAgICBpZiAocmFu
Z2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldFdvcmRS
YW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAgICBy
YW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LmFk
ZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmVlZGxlID0gc2Vzc2lvbi5n
ZXRUZXh0UmFuZ2UocmFuZ2UpOworCisgICAgICAgIHZhciBuZXdSYW5nZSA9IGZpbmQoc2Vzc2lv
biwgbmVlZGxlLCBkaXIpOworICAgICAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgICAgIG5l
d1JhbmdlLmN1cnNvciA9IGRpciA9PSAtMSA/IG5ld1JhbmdlLnN0YXJ0IDogbmV3UmFuZ2UuZW5k
OworICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShuZXdSYW5nZSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNraXApCisgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnN1
YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7CisgICAgfTsKKyAgICB0aGlzLmFsaWduQ3Vyc29y
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAg
ICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisgICAgICAgIHZhciByYW5nZXMg
PSBzZWwucmFuZ2VzOworCisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeworICAgICAgICAg
ICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICAgICAgICAgIHZh
ciBmciA9IHJhbmdlLnN0YXJ0LnJvdywgbHIgPSByYW5nZS5lbmQucm93OworICAgICAgICAgICAg
dmFyIGxpbmVzID0gdGhpcy5zZXNzaW9uLmRvYy5yZW1vdmVMaW5lcyhmciwgbHIpOworICAgICAg
ICAgICAgbGluZXMgPSB0aGlzLiRyZUFsaWduVGV4dChsaW5lcyk7CisgICAgICAgICAgICB0aGlz
LnNlc3Npb24uZG9jLmluc2VydExpbmVzKGZyLCBsaW5lcyk7CisgICAgICAgICAgICByYW5nZS5z
dGFydC5jb2x1bW4gPSAwOworICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmVzW2xp
bmVzLmxlbmd0aCAtIDFdLmxlbmd0aDsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJh
bmdlKHJhbmdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciByb3cgPSAtMTsK
KyAgICAgICAgICAgIHZhciBzYW1lUm93UmFuZ2VzID0gcmFuZ2VzLmZpbHRlcihmdW5jdGlvbihy
KSB7CisgICAgICAgICAgICAgICAgaWYgKHIuY3Vyc29yLnJvdyA9PSByb3cpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJvdyA9IHIuY3Vyc29yLnJv
dzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2VsLiRvblJlbW92ZVJhbmdlKHNhbWVS
b3dSYW5nZXMpOworCisgICAgICAgICAgICB2YXIgbWF4Q29sID0gMDsKKyAgICAgICAgICAgIHZh
ciBtaW5TcGFjZSA9IEluZmluaXR5OworICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0cyA9IHJh
bmdlcy5tYXAoZnVuY3Rpb24ocikgeworICAgICAgICAgICAgICAgIHZhciBwID0gci5jdXJzb3I7
CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocC5yb3cpOworICAg
ICAgICAgICAgICAgIHZhciBzcGFjZU9mZnNldCA9IGxpbmUuc3Vic3RyKHAuY29sdW1uKS5zZWFy
Y2goL1xTL2cpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA9PSAtMSkKKyAgICAg
ICAgICAgICAgICAgICAgc3BhY2VPZmZzZXQgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHAu
Y29sdW1uID4gbWF4Q29sKQorICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBwLmNvbHVtbjsK
KyAgICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPCBtaW5TcGFjZSkKKyAgICAgICAgICAg
ICAgICAgICAgbWluU3BhY2UgPSBzcGFjZU9mZnNldDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3BhY2VPZmZzZXQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJhbmdlcy5mb3JFYWNo
KGZ1bmN0aW9uKHIsIGkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOworICAg
ICAgICAgICAgICAgIHZhciBsID0gbWF4Q29sIC0gcC5jb2x1bW47CisgICAgICAgICAgICAgICAg
dmFyIGQgPSBzcGFjZU9mZnNldHNbaV0gLSBtaW5TcGFjZTsKKyAgICAgICAgICAgICAgICBpZiAo
bCA+IGQpCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uaW5zZXJ0KHAsIGxhbmcuc3RyaW5n
UmVwZWF0KCIgIiwgbCAtIGQpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShwLnJvdywgcC5jb2x1bW4sIHAucm93LCBw
LmNvbHVtbiAtIGwgKyBkKSk7CisKKyAgICAgICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiA9IHIu
ZW5kLmNvbHVtbiA9IG1heENvbDsKKyAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyA9IHIuZW5k
LnJvdyA9IHAucm93OworICAgICAgICAgICAgICAgIHIuY3Vyc29yID0gci5lbmQ7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbMF0pOwor
ICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0aGlzLiRyZUFsaWduVGV4dCA9IGZ1bmN0aW9uKGxpbmVzKSB7CisgICAgICAgIHZhciBpc0xl
ZnRBbGlnbmVkID0gdHJ1ZSwgaXNSaWdodEFsaWduZWQgPSB0cnVlOworICAgICAgICB2YXIgc3Rh
cnRXLCB0ZXh0VywgZW5kVzsKKworICAgICAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uKGxp
bmUpIHsKKyAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaCgvKFxzKikoLio/KShccyopKFs9
Ol0uKikvKTsKKyAgICAgICAgICAgIGlmICghbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW2xp
bmVdOworCisgICAgICAgICAgICBpZiAoc3RhcnRXID09IG51bGwpIHsKKyAgICAgICAgICAgICAg
ICBzdGFydFcgPSBtWzFdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVu
Z3RoOworICAgICAgICAgICAgICAgIGVuZFcgPSBtWzNdLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXJ0VyArIHRl
eHRXICsgZW5kVyAhPSBtWzFdLmxlbmd0aCArIG1bMl0ubGVuZ3RoICsgbVszXS5sZW5ndGgpCisg
ICAgICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChz
dGFydFcgIT0gbVsxXS5sZW5ndGgpCisgICAgICAgICAgICAgICAgaXNMZWZ0QWxpZ25lZCA9IGZh
bHNlOworCisgICAgICAgICAgICBpZiAoc3RhcnRXID4gbVsxXS5sZW5ndGgpCisgICAgICAgICAg
ICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7CisgICAgICAgICAgICBpZiAodGV4dFcgPCBtWzJd
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoOworICAgICAgICAg
ICAgaWYgKGVuZFcgPiBtWzNdLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBlbmRXID0gbVszXS5s
ZW5ndGg7CisKKyAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICB9KS5tYXAoaXNMZWZ0QWxp
Z25lZCA/IGlzUmlnaHRBbGlnbmVkID8gYWxpZ25SaWdodCA6IGFsaWduTGVmdCA6IHVuQWxpZ24p
OworCisgICAgICAgIGZ1bmN0aW9uIHNwYWNlcyhuKSB7CisgICAgICAgICAgICByZXR1cm4gbGFu
Zy5zdHJpbmdSZXBlYXQoIiAiLCBuKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGFs
aWduTGVmdChtKSB7CisgICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0
YXJ0VykgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBzcGFjZXModGV4dFcgLSBtWzJdLmxlbmd0
aCArIGVuZFcpCisgICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCAi
JDEgIikKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBhbGlnblJpZ2h0KG0pIHsKKyAgICAg
ICAgICAgIHJldHVybiAhbVsyXSA/IG1bMF0gOiBzcGFjZXMoc3RhcnRXICsgdGV4dFcgLSBtWzJd
Lmxlbmd0aCkgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBzcGFjZXMoZW5kVywgIiAiKQorICAg
ICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpCisgICAgICAg
IH0KKyAgICAgICAgZnVuY3Rpb24gdW5BbGlnbihtKSB7CisgICAgICAgICAgICByZXR1cm4gIW1b
Ml0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VykgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBzcGFj
ZXMoZW5kVykKKyAgICAgICAgICAgICAgICArIG1bNF0ucmVwbGFjZSgvXihbPTpdKVxzKy8sICIk
MSAiKQorICAgICAgICB9CisgICAgfQorfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKKworCitm
dW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIpIHsKKyAgICByZXR1cm4gcDEucm93ID09IHAyLnJv
dyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1uOworfQorZXhwb3J0cy5vblNlc3Npb25DaGFuZ2Ug
PSBmdW5jdGlvbihlKSB7CisgICAgdmFyIHNlc3Npb24gPSBlLnNlc3Npb247CisgICAgaWYgKCFz
ZXNzaW9uLm11bHRpU2VsZWN0KSB7CisgICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMg
PSBbXTsKKyAgICAgICAgc2Vzc2lvbi5zZWxlY3Rpb24uJGluaXRSYW5nZUxpc3QoKTsKKyAgICAg
ICAgc2Vzc2lvbi5tdWx0aVNlbGVjdCA9IHNlc3Npb24uc2VsZWN0aW9uOworICAgIH0KKyAgICB0
aGlzLm11bHRpU2VsZWN0ID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsKKworICAgIHZhciBvbGRTZXNz
aW9uID0gZS5vbGRTZXNzaW9uOworICAgIGlmIChvbGRTZXNzaW9uKSB7CisgICAgICAgIGlmIChv
bGRTZXNzaW9uLm11bHRpU2VsZWN0ICYmIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QuZWRpdG9yID09
IHRoaXMpCisgICAgICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0LmVkaXRvciA9IG51bGw7
CisKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhZGRS
YW5nZSIsIHRoaXMuJG9uQWRkUmFuZ2UpOworICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LnJl
bW92ZUV2ZW50TGlzdGVuZXIoInJlbW92ZVJhbmdlIiwgdGhpcy4kb25SZW1vdmVSYW5nZSk7Cisg
ICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibXVsdGlTZWxl
Y3QiLCB0aGlzLiRvbk11bHRpU2VsZWN0KTsKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5y
ZW1vdmVFdmVudExpc3RlbmVyKCJzaW5nbGVTZWxlY3QiLCB0aGlzLiRvblNpbmdsZVNlbGVjdCk7
CisgICAgfQorCisgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigiYWRkUmFuZ2UiLCB0aGlzLiRv
bkFkZFJhbmdlKTsKKyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJyZW1vdmVSYW5nZSIsIHRo
aXMuJG9uUmVtb3ZlUmFuZ2UpOworICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oIm11bHRpU2Vs
ZWN0IiwgdGhpcy4kb25NdWx0aVNlbGVjdCk7CisgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigi
c2luZ2xlU2VsZWN0IiwgdGhpcy4kb25TaW5nbGVTZWxlY3QpOworCisgICAgaWYgKHRoaXMuaW5N
dWx0aVNlbGVjdE1vZGUgIT0gc2Vzc2lvbi5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpIHsK
KyAgICAgICAgaWYgKHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAg
ICAgICAgdGhpcy4kb25NdWx0aVNlbGVjdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
aGlzLiRvblNpbmdsZVNlbGVjdCgpOworICAgIH0KK307CitmdW5jdGlvbiBNdWx0aVNlbGVjdChl
ZGl0b3IpIHsKKyAgICBlZGl0b3IuJG9uQWRkUmFuZ2UgPSBlZGl0b3IuJG9uQWRkUmFuZ2UuYmlu
ZChlZGl0b3IpOworICAgIGVkaXRvci4kb25SZW1vdmVSYW5nZSA9IGVkaXRvci4kb25SZW1vdmVS
YW5nZS5iaW5kKGVkaXRvcik7CisgICAgZWRpdG9yLiRvbk11bHRpU2VsZWN0ID0gZWRpdG9yLiRv
bk11bHRpU2VsZWN0LmJpbmQoZWRpdG9yKTsKKyAgICBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0ID0g
ZWRpdG9yLiRvblNpbmdsZVNlbGVjdC5iaW5kKGVkaXRvcik7CisKKyAgICBleHBvcnRzLm9uU2Vz
c2lvbkNoYW5nZS5jYWxsKGVkaXRvciwgZWRpdG9yKTsKKyAgICBlZGl0b3Iub24oImNoYW5nZVNl
c3Npb24iLCBleHBvcnRzLm9uU2Vzc2lvbkNoYW5nZS5iaW5kKGVkaXRvcikpOworCisgICAgZWRp
dG9yLm9uKCJtb3VzZWRvd24iLCBvbk1vdXNlRG93bik7CisgICAgZWRpdG9yLmNvbW1hbmRzLmFk
ZENvbW1hbmRzKGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcyk7CisKKyAgICBhZGRBbHRDdXJzb3JM
aXN0ZW5lcnMoZWRpdG9yKTsKK30KKworZnVuY3Rpb24gYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVk
aXRvcil7CisgICAgdmFyIGVsID0gZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCk7CisgICAg
dmFyIGFsdEN1cnNvciA9IGZhbHNlOworICAgIHZhciBjb250ZW50RWwgPSBlZGl0b3IucmVuZGVy
ZXIuY29udGVudDsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBmdW5jdGlv
bihlKSB7CisgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTggJiYgIShlLmN0cmxLZXkgfHwgZS5z
aGlmdEtleSB8fCBlLm1ldGFLZXkpKSB7CisgICAgICAgICAgICBpZiAoIWFsdEN1cnNvcikgewor
ICAgICAgICAgICAgICAgIGNvbnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiY3Jvc3NoYWlyIjsKKyAg
ICAgICAgICAgICAgICBhbHRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGFsdEN1cnNvcikgeworICAgICAgICAgICAgY29udGVudEVsLnN0eWxlLmN1cnNv
ciA9ICIiOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwg
ImtleXVwIiwgcmVzZXQpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCAiYmx1ciIsIHJlc2V0
KTsKKyAgICBmdW5jdGlvbiByZXNldCgpIHsKKyAgICAgICAgaWYgKGFsdEN1cnNvcikgeworICAg
ICAgICAgICAgY29udGVudEVsLnN0eWxlLmN1cnNvciA9ICIiOworICAgICAgICAgICAgYWx0Q3Vy
c29yID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2V4cG9ydHMuTXVsdGlTZWxlY3Qg
PSBNdWx0aVNlbGVjdDsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9yYW5nZV9saXN0JywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCisKK3ZhciBSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LnJhbmdlcyA9IFtdOworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29tcGFyZVBvaW50
cyA9IGZ1bmN0aW9uKHAxLCBwMikgeworICAgICAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8
IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKKyAgICB9OworCisgICAgdGhpcy5wb2ludEluZGV4ID0g
ZnVuY3Rpb24ocG9zLCBzdGFydEluZGV4KSB7CisgICAgICAgIHZhciBsaXN0ID0gdGhpcy5yYW5n
ZXM7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMDsgaSA8IGxpc3QubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IGxpc3RbaV07CisgICAgICAgICAg
ICB2YXIgY21wID0gdGhpcy5jb21wYXJlUG9pbnRzKHBvcywgcmFuZ2UuZW5kKTsKKworICAgICAg
ICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoY21wID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBj
bXAgPSB0aGlzLmNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5zdGFydCk7CisgICAgICAgICAgICBp
ZiAoY21wID49IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICAgICAgICAgIHJl
dHVybiAtaS0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtaSAtIDE7CisgICAgfTsKKwor
ICAgIHRoaXMuYWRkID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHN0YXJ0SW5kZXgg
PSB0aGlzLnBvaW50SW5kZXgocmFuZ2Uuc3RhcnQpOworICAgICAgICBpZiAoc3RhcnRJbmRleCA8
IDApCisgICAgICAgICAgICBzdGFydEluZGV4ID0gLXN0YXJ0SW5kZXggLSAxOworCisgICAgICAg
IHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleChyYW5nZS5lbmQsIHN0YXJ0SW5kZXgpOwor
CisgICAgICAgIGlmIChlbmRJbmRleCA8IDApCisgICAgICAgICAgICBlbmRJbmRleCA9IC1lbmRJ
bmRleCAtIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZEluZGV4Kys7CisKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShzdGFydEluZGV4LCBlbmRJbmRleCAtIHN0YXJ0
SW5kZXgsIHJhbmdlKTsKKyAgICB9OworCisgICAgdGhpcy5hZGRMaXN0ID0gZnVuY3Rpb24obGlz
dCkgeworICAgICAgICB2YXIgcmVtb3ZlZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gbGlz
dC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICByZW1vdmVkLnB1c2guY2FsbChyZW1vdmVk
LCB0aGlzLmFkZChsaXN0W2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbW92ZWQ7
CisgICAgfTsKKworICAgIHRoaXMuc3Vic3RyYWN0UG9pbnQgPSBmdW5jdGlvbihwb3MpIHsKKyAg
ICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9zKTsKKworICAgICAgICBpZiAoaSA+PSAw
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShpLCAxKTsKKyAgICB9Owor
ICAgIHRoaXMubWVyZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSBbXTsK
KyAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlczsKKyAgICAgICAgdmFyIG5leHQgPSBsaXN0
WzBdLCByYW5nZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICByYW5nZSA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gbGlzdFtp
XTsKKyAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmVQb2ludHMocmFuZ2UuZW5kLCBu
ZXh0LnN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBpZiAoY21wID09IDAgJiYgIShyYW5nZS5pc0VtcHR5KCkg
fHwgbmV4dC5pc0VtcHR5KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBpZiAodGhpcy5jb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5lbmQpIDwgMCkgewor
ICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBuZXh0LmVuZC5yb3c7CisgICAgICAgICAg
ICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IG5leHQuZW5kLmNvbHVtbjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICByZW1vdmVkLnB1
c2gobmV4dCk7CisgICAgICAgICAgICBuZXh0ID0gcmFuZ2U7CisgICAgICAgICAgICBpLS07Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICB9OworCisgICAgdGhpcy5j
b250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLnBv
aW50SW5kZXgoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pID49IDA7CisgICAgfTsKKworICAg
IHRoaXMuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICByZXR1cm4gdGhp
cy5wb2ludEluZGV4KHBvcykgPj0gMDsKKyAgICB9OworCisgICAgdGhpcy5yYW5nZUF0UG9pbnQg
PSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9zKTsK
KyAgICAgICAgaWYgKGkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlc1tpXTsK
KyAgICB9OworCisKKyAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJv
dykgeworICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOworICAgICAgICBpZiAobGlzdFsw
XS5zdGFydC5yb3cgPiBlbmRSb3cgfHwgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLnN0YXJ0LnJvdyA8
IHN0YXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIHZhciBzdGFydElu
ZGV4ID0gdGhpcy5wb2ludEluZGV4KHtyb3c6IHN0YXJ0Um93LCBjb2x1bW46IDB9KTsKKyAgICAg
ICAgaWYgKHN0YXJ0SW5kZXggPCAwKQorICAgICAgICAgICAgc3RhcnRJbmRleCA9IC1zdGFydElu
ZGV4IC0gMTsKKyAgICAgICAgdmFyIGVuZEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHtyb3c6IGVu
ZFJvdywgY29sdW1uOiAwfSwgc3RhcnRJbmRleCk7CisgICAgICAgIGlmIChlbmRJbmRleCA8IDAp
CisgICAgICAgICAgICBlbmRJbmRleCA9IC1lbmRJbmRleCAtIDE7CisKKyAgICAgICAgdmFyIGNs
aXBwZWQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRl
eDsgaSsrKSB7CisgICAgICAgICAgICBjbGlwcGVkLnB1c2gobGlzdFtpXSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGNsaXBwZWQ7CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlQWxsID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2UoMCwgdGhpcy5y
YW5nZXMubGVuZ3RoKTsKKyAgICB9OworCisgICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihzZXNz
aW9uKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24pCisgICAgICAgICAgICB0aGlzLmRldGFj
aCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgIHRoaXMub25D
aGFuZ2UgPSB0aGlzLiRvbkNoYW5nZS5iaW5kKHRoaXMpOworCisgICAgICAgIHRoaXMuc2Vzc2lv
bi5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMuZGV0YWNo
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5zZXNzaW9uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTGlzdGVuZXIoJ2NoYW5nZScsIHRo
aXMub25DaGFuZ2UpOworICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsOworICAgIH07CisKKyAg
ICB0aGlzLiRvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGNoYW5nZVJhbmdl
ID0gZS5kYXRhLnJhbmdlOworICAgICAgICBpZiAoZS5kYXRhLmFjdGlvblswXSA9PSAiaSIpewor
ICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY2hhbmdlUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB2
YXIgZW5kID0gY2hhbmdlUmFuZ2UuZW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dmFyIGVuZCA9IGNoYW5nZVJhbmdlLnN0YXJ0OworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY2hh
bmdlUmFuZ2UuZW5kOworICAgICAgICB9CisgICAgICAgIHZhciBzdGFydFJvdyA9IHN0YXJ0LnJv
dzsKKyAgICAgICAgdmFyIGVuZFJvdyA9IGVuZC5yb3c7CisgICAgICAgIHZhciBsaW5lRGlmID0g
ZW5kUm93IC0gc3RhcnRSb3c7CisKKyAgICAgICAgdmFyIGNvbERpZmYgPSAtc3RhcnQuY29sdW1u
ICsgZW5kLmNvbHVtbjsKKyAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IG47IGkrKykgeworICAg
ICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07CisgICAgICAgICAgICBpZiAoci5lbmQucm93IDwg
c3RhcnRSb3cpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoci5z
dGFydC5yb3cgPiBzdGFydFJvdykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgaWYgKHIuc3RhcnQucm93ID09IHN0YXJ0Um93ICYmIHIuc3RhcnQuY29sdW1uID49IHN0YXJ0
LmNvbHVtbiApIHsKKyAgICAgICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiArPSBjb2xEaWZmOwor
ICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoci5lbmQucm93ID09IHN0YXJ0Um93ICYmIHIuZW5kLmNvbHVtbiA+PSAg
c3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgci5lbmQuY29sdW1uICs9IGNvbERpZmY7
CisgICAgICAgICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobGluZURpZiAhPSAwICYmIGkgPCBuKSB7CisgICAgICAg
ICAgICBmb3IgKDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgICAgIHZhciByID0gcmFuZ2Vz
W2ldOworICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAg
ICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9KS5jYWxsKFJhbmdlTGlzdC5wcm90b3R5cGUpOworCitleHBvcnRzLlJhbmdlTGlz
dCA9IFJhbmdlTGlzdDsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvbXVsdGlfc2VsZWN0
X2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZl
bnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3ZhciBldmVudCA9
IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworZnVuY3Rpb24gaXNTYW1lUG9pbnQocDEsIHAyKSB7
CisgICAgcmV0dXJuIHAxLnJvdyA9PSBwMi5yb3cgJiYgcDEuY29sdW1uID09IHAyLmNvbHVtbjsK
K30KKworZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgeworICAgIHZhciBldiA9IGUuZG9tRXZlbnQ7
CisgICAgdmFyIGFsdCA9IGV2LmFsdEtleTsKKyAgICB2YXIgc2hpZnQgPSBldi5zaGlmdEtleTsK
KyAgICB2YXIgY3RybCA9IGUuZ2V0QWNjZWxLZXkoKTsKKyAgICB2YXIgYnV0dG9uID0gZS5nZXRC
dXR0b24oKTsKKworICAgIGlmIChlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSAmJiBidXR0b24g
PT0gMikgeworICAgICAgICBlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRvbUV2
ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWN0cmwgJiYgIWFs
dCkgeworICAgICAgICBpZiAoYnV0dG9uID09IDAgJiYgZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1v
ZGUpCisgICAgICAgICAgICBlLmVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CisgICAgdmFyIHNl
bGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247CisgICAgdmFyIGlzTXVsdGlTZWxlY3QgPSBlZGl0
b3IuaW5NdWx0aVNlbGVjdE1vZGU7CisgICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlv
bigpOworICAgIHZhciBjdXJzb3IgPSBzZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CisgICAgdmFyIGlu
U2VsZWN0aW9uID0gZS5pblNlbGVjdGlvbigpIHx8IChzZWxlY3Rpb24uaXNFbXB0eSgpICYmIGlz
U2FtZVBvaW50KHBvcywgY3Vyc29yKSk7CisKKworICAgIHZhciBtb3VzZVggPSBlLngsIG1vdXNl
WSA9IGUueTsKKyAgICB2YXIgb25Nb3VzZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgbW91c2VYID0gZS5jbGllbnRYOworICAgICAgICBtb3VzZVkgPSBlLmNsaWVudFk7CisgICAg
fTsKKworICAgIHZhciBibG9ja1NlbGVjdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbmV3
Q3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3VzZVgs
IG1vdXNlWSk7CisgICAgICAgIHZhciBjdXJzb3IgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQ
b3NpdGlvbihuZXdDdXJzb3Iucm93LCBuZXdDdXJzb3IuY29sdW1uKTsKKworICAgICAgICBpZiAo
aXNTYW1lUG9pbnQoc2NyZWVuQ3Vyc29yLCBuZXdDdXJzb3IpCisgICAgICAgICAgICAmJiBpc1Nh
bWVQb2ludChjdXJzb3IsIHNlbGVjdGlvbi5zZWxlY3Rpb25MZWFkKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc2NyZWVuQ3Vyc29yID0gbmV3Q3Vyc29yOworCisgICAgICAgIGVkaXRv
ci5zZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTsKKyAgICAgICAgZWRpdG9y
LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Ny
b2xsQ3Vyc29ySW50b1ZpZXcoKTsKKworICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFy
a2VycyhyZWN0U2VsKTsKKyAgICAgICAgcmVjdFNlbCA9IHNlbGVjdGlvbi5yZWN0YW5ndWxhclJh
bmdlQmxvY2soc2NyZWVuQ3Vyc29yLCBzY3JlZW5BbmNob3IpOworICAgICAgICByZWN0U2VsLmZv
ckVhY2goZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlciwgZWRpdG9yKTsKKyAgICAgICAgZWRpdG9y
LnVwZGF0ZVNlbGVjdGlvbk1hcmtlcnMoKTsKKyAgICB9OworICAgIAorICAgIHZhciBzZXNzaW9u
ID0gZWRpdG9yLnNlc3Npb247CisgICAgdmFyIHNjcmVlbkFuY2hvciA9IGVkaXRvci5yZW5kZXJl
ci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpOworICAgIHZhciBzY3Jl
ZW5DdXJzb3IgPSBzY3JlZW5BbmNob3I7CisKKyAgICAKKworICAgIGlmIChjdHJsICYmICFzaGlm
dCAmJiAhYWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgICAgIGlmICghaXNNdWx0aVNlbGVjdCAm
JiBpblNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsgLy8gZHJhZ2dpbmcKKworICAgICAg
ICBpZiAoIWlzTXVsdGlTZWxlY3QpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlv
bi50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAgICAgICAgIGVkaXRvci5hZGRTZWxlY3Rpb25NYXJr
ZXIocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG9sZFJhbmdlID0gc2VsZWN0aW9u
LnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocG9zKTsKKworICAgICAgICBldmVudC5jYXB0dXJlKGVk
aXRvci5jb250YWluZXIsIGZ1bmN0aW9uKCl7fSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgdG1wU2VsID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpOworCisgICAgICAgICAgICBp
ZiAob2xkUmFuZ2UgJiYgdG1wU2VsLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChvbGRSYW5nZS5j
dXJzb3IsIHRtcFNlbC5jdXJzb3IpKQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zdWJzdHJh
Y3RQb2ludCh0bXBTZWwuY3Vyc29yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0
aW9uTWFya2VyKHJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdl
KHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFk
ZFJhbmdlKHRtcFNlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgfSBlbHNl
IGlmICghc2hpZnQgJiYgYWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgICAgIGUuc3RvcCgpOwor
CisgICAgICAgIGlmIChpc011bHRpU2VsZWN0ICYmICFjdHJsKQorICAgICAgICAgICAgc2VsZWN0
aW9uLnRvU2luZ2xlUmFuZ2UoKTsKKyAgICAgICAgZWxzZSBpZiAoIWlzTXVsdGlTZWxlY3QgJiYg
Y3RybCkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSgpOworCisgICAgICAgIHNlbGVj
dGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICBzZWxlY3Rpb24uY2xlYXJT
ZWxlY3Rpb24oKTsKKworICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOworCisgICAgICAgIHZhciBv
bk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbCh0aW1lcklkKTsKKyAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJrZXJz
KHJlY3RTZWwpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0U2VsLmxlbmd0
aDsgaSsrKQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyZWN0U2VsW2ldKTsK
KyAgICAgICAgfTsKKworICAgICAgICB2YXIgb25TZWxlY3Rpb25JbnRlcnZhbCA9IGJsb2NrU2Vs
ZWN0OworCisgICAgICAgIGV2ZW50LmNhcHR1cmUoZWRpdG9yLmNvbnRhaW5lciwgb25Nb3VzZVNl
bGVjdGlvbiwgb25Nb3VzZVNlbGVjdGlvbkVuZCk7CisgICAgICAgIHZhciB0aW1lcklkID0gc2V0
SW50ZXJ2YWwoZnVuY3Rpb24oKSB7b25TZWxlY3Rpb25JbnRlcnZhbCgpO30sIDIwKTsKKworICAg
ICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK30KKworCitleHBvcnRzLm9u
TW91c2VEb3duID0gb25Nb3VzZURvd247CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvY29tbWFu
ZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworZXhwb3J0cy5kZWZhdWx0Q29tbWFuZHMgPSBbeworICAgIG5hbWU6ICJh
ZGRDdXJzb3JBYm92ZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxl
Y3RNb3JlTGluZXMoLTEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1VcCIsIG1h
YzogIkN0cmwtQWx0LVVwIn0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
YWRkQ3Vyc29yQmVsb3ciLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vs
ZWN0TW9yZUxpbmVzKDEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1Eb3duIiwg
bWFjOiAiQ3RybC1BbHQtRG93biJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFt
ZTogImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5OiB7
d2luOiAiQ3RybC1BbHQtU2hpZnQtVXAiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1VcCJ9LAorICAg
IHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImFkZEN1cnNvckJlbG93U2tpcEN1cnJl
bnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVz
KDEsIHRydWUpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1Eb3duIiwg
bWFjOiAiQ3RybC1BbHQtU2hpZnQtRG93biJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7Cisg
ICAgbmFtZTogInNlbGVjdE1vcmVCZWZvcmUiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3Iuc2VsZWN0TW9yZSgtMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0
LUxlZnQiLCBtYWM6ICJDdHJsLUFsdC1MZWZ0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsK
KyAgICBuYW1lOiAic2VsZWN0TW9yZUFmdGVyIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Ip
IHsgZWRpdG9yLnNlbGVjdE1vcmUoMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0
LVJpZ2h0IiwgbWFjOiAiQ3RybC1BbHQtUmlnaHQifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJzZWxlY3ROZXh0QmVmb3JlIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEsIHRydWUpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46
ICJDdHJsLUFsdC1TaGlmdC1MZWZ0IiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtTGVmdCJ9LAorICAg
IHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdE5leHRBZnRlciIsCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEsIHRydWUpOyB9LAor
ICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1SaWdodCIsIG1hYzogIkN0cmwtQWx0
LVNoaWZ0LVJpZ2h0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic3Bs
aXRJbnRvTGluZXMiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubXVsdGlT
ZWxlY3Quc3BsaXRJbnRvTGluZXMoKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQt
TCIsIG1hYzogIkN0cmwtQWx0LUwifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAgIG5h
bWU6ICJhbGlnbkN1cnNvcnMiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
YWxpZ25DdXJzb3JzKCk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUEiLCBtYWM6
ICJDdHJsLUFsdC1BIn0KK31dOworZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzID0gW3sKKyAg
ICBuYW1lOiAic2luZ2xlU2VsZWN0aW9uIiwKKyAgICBiaW5kS2V5OiAiZXNjIiwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsgfSwKKyAg
ICByZWFkb25seTogdHJ1ZSwKKyAgICBpc0F2YWlsYWJsZTogZnVuY3Rpb24oZWRpdG9yKSB7cmV0
dXJuIGVkaXRvciAmJiBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGV9Cit9XTsKKwordmFyIEhhc2hI
YW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7
CitleHBvcnRzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcihleHBvcnRzLm11bHRp
U2VsZWN0Q29tbWFuZHMpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3dvcmtlci93b3JrZXJf
Y2xpZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcs
ICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1aXJl
LCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIp
OwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZl
bnRFbWl0dGVyOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOworCit2YXIgV29y
a2VyQ2xpZW50ID0gZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNsYXNzbmFtZSkg
eworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhp
cyk7CisgICAgdGhpcy5vbk1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpOworICAg
IHRoaXMub25FcnJvciA9IHRoaXMub25FcnJvci5iaW5kKHRoaXMpOworCisgICAgdmFyIHdvcmtl
clVybDsKKyAgICBpZiAoY29uZmlnLmdldCgicGFja2FnZWQiKSkgeworICAgICAgICB3b3JrZXJV
cmwgPSBjb25maWcubW9kdWxlVXJsKG1vZCwgIndvcmtlciIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHZhciBub3JtYWxpemVQYXRoID0gdGhpcy4kbm9ybWFsaXplUGF0aDsKKyAgICAgICAgaWYg
KHR5cGVvZiByZXF1aXJlLnN1cHBvcnRzICE9PSAidW5kZWZpbmVkIiAmJiByZXF1aXJlLnN1cHBv
cnRzLmluZGV4T2YoInVjanMyLXBpbmYtMCIpID49IDApIHsKKyAgICAgICAgICAgIHdvcmtlclVy
bCA9IHJlcXVpcmUubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlcl9zb3VyY2VtaW50Iik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocmVxdWlyZS5uYW1lVG9VcmwgJiYgIXJl
cXVpcmUudG9VcmwpCisgICAgICAgICAgICAgICAgcmVxdWlyZS50b1VybCA9IHJlcXVpcmUubmFt
ZVRvVXJsOworICAgICAgICAgICAgd29ya2VyVXJsID0gbm9ybWFsaXplUGF0aChyZXF1aXJlLnRv
VXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsIG51bGwsICJfIikpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHRsbnMgPSB7fTsKKyAgICAgICAgdG9wTGV2ZWxOYW1lc3BhY2VzLmZvckVhY2goZnVu
Y3Rpb24obnMpIHsKKyAgICAgICAgICAgIHRsbnNbbnNdID0gbm9ybWFsaXplUGF0aChyZXF1aXJl
LnRvVXJsKG5zLCBudWxsLCAiXyIpLnJlcGxhY2UoLy5qcyhcPy4qKT8kLywgIiIpKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgdGhpcy4kd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwp
OworICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7CisgICAgICAgIGluaXQgOiB0cnVlLAor
ICAgICAgICB0bG5zOiB0bG5zLAorICAgICAgICBtb2R1bGU6IG1vZCwKKyAgICAgICAgY2xhc3Nu
YW1lOiBjbGFzc25hbWUKKyAgICB9KTsKKworICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7CisgICAg
dGhpcy5jYWxsYmFja3MgPSB7fTsKKworICAgIHRoaXMuJHdvcmtlci5vbmVycm9yID0gdGhpcy5v
bkVycm9yOworICAgIHRoaXMuJHdvcmtlci5vbm1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZTsKK307
CisKKyhmdW5jdGlvbigpeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIp
OworCisgICAgdGhpcy5vbkVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICB3aW5kb3cuY29u
c29sZSAmJiBjb25zb2xlLmxvZyAmJiBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgdGhyb3cgZTsK
KyAgICB9OworCisgICAgdGhpcy5vbk1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZh
ciBtc2cgPSBlLmRhdGE7CisgICAgICAgIHN3aXRjaChtc2cudHlwZSkgeworICAgICAgICAgICAg
Y2FzZSAibG9nIjoKKyAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxv
ZyAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBtc2cuZGF0YSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgImV2ZW50IjoKKyAgICAgICAgICAgICAgICB0
aGlzLl9lbWl0KG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSAiY2FsbCI6CisgICAgICAgICAgICAgICAgdmFyIGNh
bGxiYWNrID0gdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKKyAgICAgICAgICAgICAgICBpZiAoY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobXNnLmRhdGEpOworICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGhpcy4kbm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgICAgICAgaWYgKCFsb2Nh
dGlvbi5ob3N0KSAvLyBuZWVkZWQgZm9yIGZpbGU6Ly8gcHJvdG9jb2wKKyAgICAgICAgICAgIHJl
dHVybiBwYXRoOworICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwv
XSsvLCAiIik7IC8vIFJlbW92ZSBkb21haW4gbmFtZSBhbmQgcmVidWlsZCBpdAorICAgICAgICBw
YXRoID0gbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICsgbG9jYXRpb24uaG9zdAorICAgICAgICAg
ICAgKyAocGF0aC5jaGFyQXQoMCkgPT0gIi8iID8gIiIgOiBsb2NhdGlvbi5wYXRobmFtZS5yZXBs
YWNlKC9cL1teXC9dKiQvLCAiIikpCisgICAgICAgICAgICArICIvIiArIHBhdGgucmVwbGFjZSgv
XltcL10rLywgIiIpOworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9OworCisgICAgdGhpcy50
ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5fZW1pdCgidGVybWluYXRlIiwg
e30pOworICAgICAgICB0aGlzLiR3b3JrZXIudGVybWluYXRlKCk7CisgICAgICAgIHRoaXMuJHdv
cmtlciA9IG51bGw7CisgICAgICAgIHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFu
Z2UiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKKyAgICAgICAgdGhpcy4kZG9jID0gbnVsbDsKKyAg
ICB9OworCisgICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7CisgICAgICAgIHRo
aXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDogY21kLCBhcmdzOiBhcmdzfSk7CisgICAg
fTsKKworICAgIHRoaXMuY2FsbCA9IGZ1bmN0aW9uKGNtZCwgYXJncywgY2FsbGJhY2spIHsKKyAg
ICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmNhbGxiYWNr
SWQrKzsKKyAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrOworICAgICAg
ICAgICAgYXJncy5wdXNoKGlkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNlbmQoY21kLCBh
cmdzKTsKKyAgICB9OworCisgICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24oZXZlbnQsIGRhdGEpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZl
bnQ6IGV2ZW50LCBkYXRhOiB7ZGF0YTogZGF0YS5kYXRhfX0pOworICAgICAgICB9CisgICAgICAg
IGNhdGNoKGV4KSB7fQorICAgIH07CisKKyAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBmdW5j
dGlvbihkb2MpIHsKKyAgICAgICAgaWYodGhpcy4kZG9jKQorICAgICAgICAgICAgdGhpcy50ZXJt
aW5hdGUoKTsKKworICAgICAgICB0aGlzLiRkb2MgPSBkb2M7CisgICAgICAgIHRoaXMuY2FsbCgi
c2V0VmFsdWUiLCBbZG9jLmdldFZhbHVlKCldKTsKKyAgICAgICAgZG9jLm9uKCJjaGFuZ2UiLCB0
aGlzLmNoYW5nZUxpc3RlbmVyKTsKKyAgICB9OworCisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5lciA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5yYW5nZSA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiBl
LmRhdGEucmFuZ2Uuc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGUuZGF0YS5yYW5nZS5lbmQKKyAg
ICAgICAgfTsKKyAgICAgICAgdGhpcy5lbWl0KCJjaGFuZ2UiLCBlKTsKKyAgICB9OworCit9KS5j
YWxsKFdvcmtlckNsaWVudC5wcm90b3R5cGUpOworCisKK3ZhciBVSVdvcmtlckNsaWVudCA9IGZ1
bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKKyAgICB0aGlzLmNo
YW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOworICAgIHRoaXMu
Y2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLm1lc3Nh
Z2VCdWZmZXIgPSBbXTsKKworICAgIHZhciBtYWluID0gbnVsbDsKKyAgICB2YXIgc2VuZGVyID0g
T2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIpOworICAgIHZhciBfc2VsZiA9IHRoaXM7CisKKyAg
ICB0aGlzLiR3b3JrZXIgPSB7fQorICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpOworICAgICAgICBt
YWluICYmIHNldFRpbWVvdXQocHJvY2Vzc05leHQpOworICAgIH07CisKKyAgICB2YXIgcHJvY2Vz
c05leHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG1zZyA9IF9zZWxmLm1lc3NhZ2VCdWZm
ZXIuc2hpZnQoKTsKKyAgICAgICAgaWYgKG1zZy5jb21tYW5kKQorICAgICAgICAgICAgbWFpbltt
c2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOworICAgICAgICBlbHNlIGlmIChtc2cu
ZXZlbnQpCisgICAgICAgICAgICBzZW5kZXIuX2VtaXQobXNnLmV2ZW50LCBtc2cuZGF0YSk7Cisg
ICAgfTsKKworICAgIHNlbmRlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgeworICAgICAg
ICBfc2VsZi5vbk1lc3NhZ2Uoe2RhdGE6IG1zZ30pOworICAgIH07CisgICAgc2VuZGVyLmNhbGxi
YWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgeworICAgICAgICB0aGlzLnBvc3RNZXNz
YWdlKHt0eXBlOiAiY2FsbCIsIGlkOiBjYWxsYmFja0lkLCBkYXRhOiBkYXRhfSk7CisgICAgfTsK
KyAgICBzZW5kZXIuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5w
b3N0TWVzc2FnZSh7dHlwZTogImV2ZW50IiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pOworICAg
IH07CisKKyAgICByZXF1aXJlKFttb2RdLCBmdW5jdGlvbihNYWluKSB7CisgICAgICAgIG1haW4g
PSBuZXcgTWFpbltjbGFzc25hbWVdKHNlbmRlcik7CisgICAgICAgIHdoaWxlIChfc2VsZi5tZXNz
YWdlQnVmZmVyLmxlbmd0aCkKKyAgICAgICAgICAgIHByb2Nlc3NOZXh0KCk7CisgICAgfSk7Cit9
OworCitVSVdvcmtlckNsaWVudC5wcm90b3R5cGUgPSBXb3JrZXJDbGllbnQucHJvdG90eXBlOwor
CitleHBvcnRzLlVJV29ya2VyQ2xpZW50ID0gVUlXb3JrZXJDbGllbnQ7CitleHBvcnRzLldvcmtl
ckNsaWVudCA9IFdvcmtlckNsaWVudDsKKworfSk7CithY2UuZGVmaW5lKCdhY2UvcGxhY2Vob2xk
ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZScsICdhY2Uv
bGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2xpYi9vb3AnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdl
OwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVu
dEVtaXR0ZXI7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CisKK3ZhciBQbGFjZUhv
bGRlciA9IGZ1bmN0aW9uKHNlc3Npb24sIGxlbmd0aCwgcG9zLCBvdGhlcnMsIG1haW5DbGFzcywg
b3RoZXJzQ2xhc3MpIHsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgIHRoaXMubGVuZ3RoID0g
bGVuZ3RoOworICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgdGhpcy5kb2MgPSBzZXNz
aW9uLmdldERvY3VtZW50KCk7CisgICAgdGhpcy5tYWluQ2xhc3MgPSBtYWluQ2xhc3M7CisgICAg
dGhpcy5vdGhlcnNDbGFzcyA9IG90aGVyc0NsYXNzOworICAgIHRoaXMuJG9uVXBkYXRlID0gdGhp
cy5vblVwZGF0ZS5iaW5kKHRoaXMpOworICAgIHRoaXMuZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRv
blVwZGF0ZSk7CisgICAgdGhpcy4kb3RoZXJzID0gb3RoZXJzOworICAgIAorICAgIHRoaXMuJG9u
Q3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBfc2VsZi5vbkN1cnNvckNoYW5nZSgpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIAorICAgIHRoaXMuJHBvcyA9IHBvczsKKyAgICB2YXIgdW5kb1N0YWNrID0gc2Vz
c2lvbi5nZXRVbmRvTWFuYWdlcigpLiR1bmRvU3RhY2sgfHwgc2Vzc2lvbi5nZXRVbmRvTWFuYWdl
cigpLiR1bmRvc3RhY2sgfHwge2xlbmd0aDogLTF9OworICAgIHRoaXMuJHVuZG9TdGFja0RlcHRo
ID0gIHVuZG9TdGFjay5sZW5ndGg7CisgICAgdGhpcy5zZXR1cCgpOworCisgICAgc2Vzc2lvbi5z
ZWxlY3Rpb24ub24oImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKK307CisK
KyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsK
KyAgICB0aGlzLnNldHVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7
CisgICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlz
LnNlc3Npb247CisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRwb3M7CisKKyAgICAgICAgdGhpcy5w
b3MgPSBkb2MuY3JlYXRlQW5jaG9yKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICB0aGlz
Lm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1
bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4gKyB0aGlzLmxlbmd0aCksIHRoaXMubWFpbkNsYXNzLCBu
dWxsLCBmYWxzZSk7CisgICAgICAgIHRoaXMucG9zLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoX3NlbGYubWFya2VySWQpOwor
ICAgICAgICAgICAgX3NlbGYubWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2Uo
ZXZlbnQudmFsdWUucm93LCBldmVudC52YWx1ZS5jb2x1bW4sIGV2ZW50LnZhbHVlLnJvdywgZXZl
bnQudmFsdWUuY29sdW1uK19zZWxmLmxlbmd0aCksIF9zZWxmLm1haW5DbGFzcywgbnVsbCwgZmFs
c2UpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5vdGhlcnMgPSBbXTsKKyAgICAgICAgdGhp
cy4kb3RoZXJzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHsKKyAgICAgICAgICAgIHZhciBhbmNo
b3IgPSBkb2MuY3JlYXRlQW5jaG9yKG90aGVyLnJvdywgb3RoZXIuY29sdW1uKTsKKyAgICAgICAg
ICAgIF9zZWxmLm90aGVycy5wdXNoKGFuY2hvcik7CisgICAgICAgIH0pOworICAgICAgICBzZXNz
aW9uLnNldFVuZG9TZWxlY3QoZmFsc2UpOworICAgIH07CisgICAgdGhpcy5zaG93T3RoZXJNYXJr
ZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmKHRoaXMub3RoZXJzQWN0aXZlKSByZXR1cm47
CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgX3NlbGYg
PSB0aGlzOworICAgICAgICB0aGlzLm90aGVyc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMu
b3RoZXJzLmZvckVhY2goZnVuY3Rpb24oYW5jaG9yKSB7CisgICAgICAgICAgICBhbmNob3IubWFy
a2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UoYW5jaG9yLnJvdywgYW5jaG9yLmNv
bHVtbiwgYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbitfc2VsZi5sZW5ndGgpLCBfc2VsZi5vdGhl
cnNDbGFzcywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgYW5jaG9yLm9uKCJjaGFuZ2UiLCBm
dW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKGFu
Y2hvci5tYXJrZXJJZCk7CisgICAgICAgICAgICAgICAgYW5jaG9yLm1hcmtlcklkID0gc2Vzc2lv
bi5hZGRNYXJrZXIobmV3IFJhbmdlKGV2ZW50LnZhbHVlLnJvdywgZXZlbnQudmFsdWUuY29sdW1u
LCBldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbitfc2VsZi5sZW5ndGgpLCBfc2Vs
Zi5vdGhlcnNDbGFzcywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH07CisgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmKCF0aGlzLm90aGVyc0FjdGl2ZSkgcmV0dXJuOworICAgICAgICB0aGlzLm90aGVyc0Fj
dGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMu
b3RoZXJzW2ldLm1hcmtlcklkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5vblVwZGF0
ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBkZWx0YSA9IGV2ZW50LmRhdGE7Cisg
ICAgICAgIHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICBpZihyYW5nZS5zdGFydC5y
b3cgIT09IHJhbmdlLmVuZC5yb3cpIHJldHVybjsKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQucm93
ICE9PSB0aGlzLnBvcy5yb3cpIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuJHVwZGF0aW5nKSBy
ZXR1cm47CisgICAgICAgIHRoaXMuJHVwZGF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGxlbmd0
aERpZmYgPSBkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IiA/IHJhbmdlLmVuZC5jb2x1bW4g
LSByYW5nZS5zdGFydC5jb2x1bW4gOiByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29s
dW1uOworICAgICAgICAKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID49IHRoaXMucG9z
LmNvbHVtbiAmJiByYW5nZS5zdGFydC5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhpcy5s
ZW5ndGggKyAxKSB7CisgICAgICAgICAgICB2YXIgZGlzdGFuY2VGcm9tU3RhcnQgPSByYW5nZS5z
dGFydC5jb2x1bW4gLSB0aGlzLnBvcy5jb2x1bW47CisgICAgICAgICAgICB0aGlzLmxlbmd0aCAr
PSBsZW5ndGhEaWZmOworICAgICAgICAgICAgaWYoIXRoaXMuc2Vzc2lvbi4kZnJvbVVuZG8pIHsK
KyAgICAgICAgICAgICAgICBpZihkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IikgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclBvcyA9IHRoaXMu
b3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90
aGVyUG9zLnJvdywgY29sdW1uOiBvdGhlclBvcy5jb2x1bW4gKyBkaXN0YW5jZUZyb21TdGFydH07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZihvdGhlclBvcy5yb3cgPT09IHJhbmdlLnN0YXJ0
LnJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBvdGhlclBvcy5jb2x1bW4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3UG9zLmNvbHVtbiArPSBsZW5ndGhEaWZmOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kb2MuaW5zZXJ0KG5ld1BvcywgZGVsdGEudGV4dCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZGVsdGEuYWN0aW9u
ID09PSAicmVtb3ZlVGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRo
aXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgb3RoZXJQb3MgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3MuY29s
dW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9OworICAgICAgICAgICAgICAgICAgICAgICAgaWYob3Ro
ZXJQb3Mucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDwgb3Ro
ZXJQb3MuY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Bvcy5jb2x1bW4g
Kz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92ZShu
ZXcgUmFuZ2UobmV3UG9zLnJvdywgbmV3UG9zLmNvbHVtbiwgbmV3UG9zLnJvdywgbmV3UG9zLmNv
bHVtbiAtIGxlbmd0aERpZmYpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZihyYW5nZS5zdGFydC5jb2x1bW4gPT09IHRoaXMucG9z
LmNvbHVtbiAmJiBkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IikgeworICAgICAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5wb3Muc2V0UG9zaXRpb24odGhpcy5wb3Mucm93LCB0aGlzLnBvcy5jb2x1bW4gLSBsZW5n
dGhEaWZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
b3RoZXIgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bmV3UG9zID0ge3Jvdzogb3RoZXIucm93LCBjb2x1bW46IG90aGVyLmNvbHVtbiAtIGxlbmd0aERp
ZmZ9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyLnJvdyA9PT0gcmFuZ2Uu
c3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyLmNvbHVtbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zLmNvbHVtbiArPSBsZW5ndGhEaWZmOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLnNldFBvc2l0aW9uKG5ld1Bvcy5yb3csIG5l
d1Bvcy5jb2x1bW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5wb3MuY29sdW1uICYmIGRlbHRh
LmFjdGlvbiA9PT0gInJlbW92ZVRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG90aGVyID0gdGhpcy5vdGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYob3RoZXIucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1u
IDwgb3RoZXIuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVy
LnNldFBvc2l0aW9uKG90aGVyLnJvdywgb3RoZXIuY29sdW1uIC0gbGVuZ3RoRGlmZik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucG9zLl9lbWl0KCJjaGFuZ2UiLCB7dmFsdWU6
IHRoaXMucG9zfSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vdGhlcnNbaV0uX2VtaXQoImNo
YW5nZSIsIHt2YWx1ZTogdGhpcy5vdGhlcnNbaV19KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlOworICAgIH07CisKKyAgICB0aGlzLm9u
Q3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuJHVwZGF0
aW5nKSByZXR1cm47CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdl
dEN1cnNvcigpOworICAgICAgICBpZihwb3Mucm93ID09PSB0aGlzLnBvcy5yb3cgJiYgcG9zLmNv
bHVtbiA+PSB0aGlzLnBvcy5jb2x1bW4gJiYgcG9zLmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1bW4g
KyB0aGlzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5zaG93T3RoZXJNYXJrZXJzKCk7Cisg
ICAgICAgICAgICB0aGlzLl9lbWl0KCJjdXJzb3JFbnRlciIsIGV2ZW50KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2VycygpOworICAgICAgICAgICAg
dGhpcy5fZW1pdCgiY3Vyc29yTGVhdmUiLCBldmVudCk7CisgICAgICAgIH0KKyAgICB9OyAgICAK
KyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlTWFya2VyKHRoaXMubWFya2VySWQpOworICAgICAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMo
KTsKKyAgICAgICAgdGhpcy5kb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4k
b25VcGRhdGUpOworICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLnJlbW92ZUV2ZW50TGlz
dGVuZXIoImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKyAgICAgICAgdGhp
cy5wb3MuZGV0YWNoKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vdGhlcnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLmRldGFjaCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KHRydWUpOworICAgIH07
CisgICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYodGhpcy4kdW5kb1N0
YWNrRGVwdGggPT09IC0xKQorICAgICAgICAgICAgdGhyb3cgRXJyb3IoIkNhbmNlbGluZyBwbGFj
ZWhvbGRlcnMgb25seSBzdXBwb3J0ZWQgd2l0aCB1bmRvIG1hbmFnZXIgYXR0YWNoZWQgdG8gc2Vz
c2lvbi4iKTsKKyAgICAgICAgdmFyIHVuZG9NYW5hZ2VyID0gdGhpcy5zZXNzaW9uLmdldFVuZG9N
YW5hZ2VyKCk7CisgICAgICAgIHZhciB1bmRvc1JlcXVpcmVkID0gKHVuZG9NYW5hZ2VyLiR1bmRv
U3RhY2sgfHwgdW5kb01hbmFnZXIuJHVuZG9zdGFjaykubGVuZ3RoIC0gdGhpcy4kdW5kb1N0YWNr
RGVwdGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5kb3NSZXF1aXJlZDsgaSsrKSB7
CisgICAgICAgICAgICB1bmRvTWFuYWdlci51bmRvKHRydWUpOworICAgICAgICB9CisgICAgfTsK
K30pLmNhbGwoUGxhY2VIb2xkZXIucHJvdG90eXBlKTsKKworCitleHBvcnRzLlBsYWNlSG9sZGVy
ID0gUGxhY2VIb2xkZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9mb2xk
X21vZGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1
aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOworCit2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRN
b2RlID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5mb2xkaW5n
U3RhcnRNYXJrZXIgPSBudWxsOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBudWxsOwor
ICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93
KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIGlm
ICh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKQorICAgICAgICAgICAgcmV0dXJu
ICJzdGFydCI7CisgICAgICAgIGlmIChmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIKKyAgICAg
ICAgICAgICAgICAmJiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyCisgICAgICAgICAgICAgICAgJiYg
dGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGxpbmUpKQorICAgICAgICAgICAgcmV0dXJuICJl
bmQiOworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdl
dFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKworICAgIHRoaXMuaW5kZW50YXRpb25CbG9jayA9IGZ1bmN0aW9u
KHNlc3Npb24sIHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciByZSA9IC9cUy87CisgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBzdGFydExldmVs
ID0gbGluZS5zZWFyY2gocmUpOworICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBjb2x1bW4gfHwgbGlu
ZS5sZW5ndGg7CisgICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOworICAg
ICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CisgICAgICAgIHZhciBlbmRSb3cgPSByb3c7CisKKyAg
ICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CisgICAgICAgICAgICB2YXIgbGV2ZWwgPSBz
ZXNzaW9uLmdldExpbmUocm93KS5zZWFyY2gocmUpOworCisgICAgICAgICAgICBpZiAobGV2ZWwg
PT0gLTEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChsZXZl
bCA8PSBzdGFydExldmVsKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBl
bmRSb3cgPSByb3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cp
IHsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5s
ZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVt
biwgZW5kUm93LCBlbmRDb2x1bW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMub3Bl
bmluZ0JyYWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29sdW1u
LCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVt
biArIDF9OworICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi4kZmluZENsb3NpbmdCcmFja2V0KGJy
YWNrZXQsIHN0YXJ0LCB0eXBlUmUpOworICAgICAgICBpZiAoIWVuZCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB2YXIgZncgPSBzZXNzaW9uLmZvbGRXaWRnZXRzW2VuZC5yb3ddOwor
ICAgICAgICBpZiAoZncgPT0gbnVsbCkKKyAgICAgICAgICAgIGZ3ID0gdGhpcy5nZXRGb2xkV2lk
Z2V0KHNlc3Npb24sIGVuZC5yb3cpOworCisgICAgICAgIGlmIChmdyA9PSAic3RhcnQiICYmIGVu
ZC5yb3cgPiBzdGFydC5yb3cpIHsKKyAgICAgICAgICAgIGVuZC5yb3cgLS07CisgICAgICAgICAg
ICBlbmQuY29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZC5yb3cpLmxlbmd0aDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgZW5kKTsKKyAgICB9Owor
CisgICAgdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgYnJhY2tl
dCwgcm93LCBjb2x1bW4sIHR5cGVSZSkgeworICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBj
b2x1bW46IGNvbHVtbn07CisgICAgICAgIHZhciBzdGFydCA9IHNlc3Npb24uJGZpbmRPcGVuaW5n
QnJhY2tldChicmFja2V0LCBlbmQpOworCisgICAgICAgIGlmICghc3RhcnQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgc3RhcnQuY29sdW1uKys7CisgICAgICAgIGVuZC5jb2x1bW4t
LTsKKworICAgICAgICByZXR1cm4gIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIGVuZCk7CisgICAg
fTsKK30pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKKworfSk7Cis7CisgICAgICAgICAgICAo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sIGZ1
bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgYSAmJiBhLmNvbmZpZy5pbml0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmFjZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbmRvdy5hY2UgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICBh
Y2Vba2V5XSA9IGFba2V5XTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKCk7
CisgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZDY1NDYxMzBiNzk1YTc5YjVmYzYwYWRjODQ4MjlkNGUyZGE1MjVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2dG9v
bHMuY3NzCkBAIC0wLDAgKzEsNyBAQAorLmFjZV9lZGl0b3IgKiB7CisgICAgLXdlYmtpdC1ib3gt
c2l6aW5nOiBjb250ZW50LWJveDsKK30KKworLmFjZS1lZGl0b3ItY29udGFpbmVyIHsKKyAgICBo
ZWlnaHQ6IDEwMCU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMmFlMTJlYjk3NDgyNzExZTMwMTY1OTk4MGEzYzgwMjZjYzE1ZDdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMK
QEAgLTAsMCArMSw3NTEgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAq
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9y
IHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5W
LiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3MnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNl
L3Rva2VuaXplcicsICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21h
dGNoaW5nX2JyYWNlX291dGRlbnQnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2FjZS9t
b2RlL2JlaGF2aW91ci9jc3MnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xp
Yi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2YXIgVG9r
ZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIENzc0hpZ2hs
aWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0
UnVsZXM7Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2Jy
YWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKK3ZhciBXb3JrZXJDbGllbnQgPSBy
ZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBDc3NC
ZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7Cit2YXIg
Q1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisK
K3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2Vu
aXplcihuZXcgQ3NzSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpLCAiaSIpOworICAgIHRoaXMu
JG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKKyAgICB0aGlzLiRiZWhhdmlv
dXIgPSBuZXcgQ3NzQmVoYXZpb3VyKCk7CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0
eWxlRm9sZE1vZGUoKTsKK307Citvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOworCisoZnVu
Y3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOworCisgICAgdGhp
cy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAg
ICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICAgICAgdmFyIHRva2Vu
cyA9IHRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7Cisg
ICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUg
PT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CisgICAgICAgIGlm
IChtYXRjaCkgeworICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVu
Y3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50
LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091dGRl
bnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVudC5h
dXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlV29ya2VyID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVu
dChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKKyAgICAgICAgd29y
a2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3
b3JrZXIub24oImNzc2xpbnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZXNzaW9uLnNl
dEFubm90YXRpb25zKGUuZGF0YSk7CisgICAgICAgIH0pOworCisgICAgICAgIHdvcmtlci5vbigi
dGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3Rh
dGlvbnMoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9Owor
Cit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKKworfSk7
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdh
Y2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxh
bmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJl
cXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2YXIg
c3VwcG9ydFR5cGUgPSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFuaW1hdGlvbi1maWxsLW1vZGV8
YWxpZ25tZW50LWFkanVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFuaW1h
dGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24tY291
bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1m
dW5jdGlvbnxhbmltYXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxpdHl8
YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlwfGJh
Y2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3Jv
dW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5k
fGJhc2VsaW5lLXNoaWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmstbGV2
ZWx8Ym9va21hcmstc3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVyLWJv
dHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQt
cmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29s
bGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRl
ci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9y
ZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0
LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRl
ci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRl
ci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVy
LXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxl
fGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdufGJv
eC1kZWNvcmF0aW9uLWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZsZXh8
Ym94LWxpbmVzfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNoYWRv
d3xib3gtc2l6aW5nfGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2FwdGlv
bi1zaWRlfGNsZWFyfGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1u
LWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVs
ZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1u
c3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0ZXJ8
Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2VsaW5l
fGRyb3AtaW5pdGlhbC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRyb3At
aW5pdGlhbC1iZWZvcmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1pbml0
aWFsLXNpemV8ZHJvcC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8Zml0
LXBvc2l0aW9ufGZsb2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1z
aXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWln
aHR8Zm9udHxncmlkLWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0
fGh5cGhlbmF0ZS1hZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8aHlw
aGVuYXRlLWxpbmVzfGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3JpZW50
YXRpb258aW1hZ2UtcmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGlnbnxs
ZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5lLXN0
YWNraW5nLXNoaWZ0fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0LXN0
eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8
bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJnaW58
bWFyay1hZnRlcnxtYXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1hcnF1
ZWUtcGxheS1jb3VudHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxtYXgt
d2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8bmF2
LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRs
aW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvdy1z
dHlsZXxvdmVyZmxvdy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFkZGlu
Zy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVy
fHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8cGF1
c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2
ZXxwaG9uZW1lc3xwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVzZW50
YXRpb24tbGV2ZWx8cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxyZXNp
emV8cmVzdC1hZnRlcnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9uLXBv
aW50fHJvdGF0aW9ufHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1Ynkt
c3BhbnxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNw
ZWFrfHNwZWVjaC1yYXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQtbmFt
ZXx0YXJnZXQtbmV3fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRleHQt
YWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1pbmRl
bnR8dGV4dC1qdXN0aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0
ZXh0LXdyYXB8dG9wfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybXx0
cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0
cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0aWNh
bC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2UtZmFt
aWx5fHZvaWNlLXBpdGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3RyZXNz
fHZvaWNlLXZvbHVtZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8d2lk
b3dzfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKK3Zh
ciBzdXBwb3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdiYXx1
cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIjsKK3ZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBvcnRz
LnN1cHBvcnRDb25zdGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3JvbGx8
YWxsfGFscGhhYmV0aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQtY29s
dW1ufGF2b2lkLXBhZ2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZvcmV8
YmVsb3d8YmlkaS1vdmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRlcnxi
b3JkZXItYm94fGJvdGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXpl
fGNhcHMtaGVpZ2h0fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlkZW9n
cmFwaGljfGNsb25lfGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNvbnNp
ZGVyLXNoaWZ0c3xjb250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1iZXpp
ZXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxk
aXNjfGRpc3JlZ2FyZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0
ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWFz
ZS1pbnxlYXNlLWluLW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1Ynl8
ZmlsbHxmaXhlZHxnZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFuZ2lu
Z3xoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxp
Y29ufGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVz
aXN8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxpbmhl
cml0fGluaXRpYWx8aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0fGlu
bGluZS10YWJsZXxpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3Jk
fGludmVydHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxs
YXN0fGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxpc3Qt
aXRlbXxsb2NhbHxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dl
ci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1heC1z
aXplfG1lZGl1bXxtZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6
ZXxuZXdzcGFwZXJ8bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1xdW90
ZXxuby1yZXBlYXR8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxvYmxp
cXVlfG9wZW4tcXVvdGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFnZXxw
b2ludGVyfHByZS1saW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxhdGl2
ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxyaWdo
dHxyb3VuZHxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRl
fHNsaWNlfHNtYWxsLWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3RhcnR8
c3RhdGljfHN0YXR1cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0cmlj
dHxzdWJ8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1jb2x1
bW4tZ3JvdXB8dGFibGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3Jv
dXB8dGFibGUtcm93LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVkZ2V8
dGV4dC1iZWZvcmUtZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0aGlj
a3x0aGlufHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBl
ci1yb21hbnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNh
bC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyI7Cit2
YXIgc3VwcG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9yID0g
ImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2
ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciOwordmFyIHN1cHBv
cnRDb25zdGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlhbHxj
ZW50dXJ5fGNvbWljfGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1
Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8
d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOworCit2YXIgbnVtUmUgPSBleHBv
cnRzLm51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKK3Zh
ciBwc2V1ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxiKGFm
dGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVjdGlv
bilcXGIiOwordmFyIHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0gICIo
OilcXGIoYWN0aXZlfGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGlsZHxm
aXJzdC1vZi10eXBlfGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNoaWxk
fGxhc3Qtb2YtdHlwZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxhc3Qt
b2YtdHlwZXxudGgtb2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxyb290
fHRhcmdldHx2YWxpZHx2aXNpdGVkKVxcYiI7CisKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9IGZ1
bmN0aW9uKCkgeworCisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRN
YXBwZXIoeworICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKKyAg
ICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCisgICAgICAgICJzdXBw
b3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3Ii
OiBzdXBwb3J0Q29uc3RhbnRDb2xvciwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9udHMi
OiBzdXBwb3J0Q29uc3RhbnRGb250cworICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CisKKyAgICB2YXIg
YmFzZV9ydWxlc2V0ID0gWworICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50
IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAor
ICAgICAgICAgICAgbmV4dCA6ICJydWxlc2V0X2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAgICByZWdl
eCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJworICAgICAgICB9LCB7Cisg
ICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAg
cmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKKyAgICAgICAgfSwg
eworICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAor
ICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxmcnxn
ZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2d3wl
KSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIs
CisgICAgICAgICAgICByZWdleCA6IG51bVJlCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRv
a2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgorICAgICAgICAgICAgcmVn
ZXggOiAiI1thLWYwLTldezZ9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJj
b25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAiI1th
LWYwLTldezN9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRp
b24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAor
ICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cworICAgICAgICB9LCB7CisgICAgICAg
ICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1l
LnBzZXVkby1jbGFzcy5jc3MiXSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3Nlcwor
ICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCisgICAgICAg
ICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKKyAgICAgICAgfQor
ICAgICAgXTsKKworICAgIHZhciBydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9ydWxlc2V0
KTsKKyAgICBydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4i
LAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJzdGFydCIKKyAgICB9
KTsKKworICAgIHZhciBtZWRpYV9ydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoIGJhc2VfcnVsZXNl
dCApOworICAgIG1lZGlhX3J1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBhcmVu
LnJwYXJlbiIsCisgICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgIm1lZGlh
IgorICAgIH0pOworCisgICAgdmFyIGJhc2VfY29tbWVudCA9IFt7CisgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQorICAgICAgICAgIHJl
Z2V4IDogIi4rIgorICAgIH1dOworCisgICAgdmFyIGNvbW1lbnQgPSBsYW5nLmNvcHlBcnJheShi
YXNlX2NvbW1lbnQpOworICAgIGNvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4gOiAi
Y29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxc
LyIsCisgICAgICAgICAgbmV4dCA6ICJzdGFydCIKKyAgICB9KTsKKworICAgIHZhciBtZWRpYV9j
b21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKKyAgICBtZWRpYV9jb21tZW50
LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1l
bnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAibWVk
aWEiCisgICAgfSk7CisKKyAgICB2YXIgcnVsZXNldF9jb21tZW50ID0gbGFuZy5jb3B5QXJyYXko
YmFzZV9jb21tZW50KTsKKyAgICBydWxlc2V0X2NvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAg
dG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDog
Ii4qP1xcKlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJydWxlc2V0IgorICAgIH0pOworCisgICAg
dGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAi
XFwvXFwqIiwKKyAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJcXHsi
LAorICAgICAgICAgICAgbmV4dDogICJydWxlc2V0IgorICAgICAgICB9LCB7CisgICAgICAgICAg
ICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIkAuKj97IiwKKyAgICAgICAg
ICAgIG5leHQ6ICAibWVkaWEiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJrZXl3
b3JkIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9LHsKKyAg
ICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16
MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAg
ICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0
b2tlbjogImNvbnN0YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCisgICAg
ICAgIH1dLAorCisgICAgICAgICJtZWRpYSIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xc
KiIsCisgICAgICAgICAgICBuZXh0IDogIm1lZGlhX2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7
IiwKKyAgICAgICAgICAgIG5leHQ6ICAibWVkaWFfcnVsZXNldCIKKyAgICAgICAgfSx7CisgICAg
ICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIlxcfSIsCisgICAg
ICAgICAgICBuZXh0OiAgInN0YXJ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAi
a2V5d29yZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7
CisgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwu
W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAor
ICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAg
ICAgdG9rZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgor
ICAgICAgICB9XSwKKworICAgICAgICAiY29tbWVudCIgOiBjb21tZW50LAorCisgICAgICAgICJy
dWxlc2V0IiA6IHJ1bGVzZXQsCisgICAgICAgICJydWxlc2V0X2NvbW1lbnQiIDogcnVsZXNldF9j
b21tZW50LAorCisgICAgICAgICJtZWRpYV9ydWxlc2V0IiA6IG1lZGlhX3J1bGVzZXQsCisgICAg
ICAgICJtZWRpYV9jb21tZW50IiA6IG1lZGlhX2NvbW1lbnQKKyAgICB9OworfTsKKworb29wLmlu
aGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRz
LkNzc0hpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwor
dmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkg
eworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAg
ICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0
aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUg
PSBkb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxz
Klx9KS8pOworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBj
b2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2Mu
ZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAg
ICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAw
OworCisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3Bl
bkJyYWNlUG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCBy
b3csIGNvbHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0g
ZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykv
KTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGlu
Z0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50
ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVo
YXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCAn
YWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZpb3Vy
ID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91
ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0
b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisKK3Zh
ciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmluaGVyaXQoQ3N0eWxl
QmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlv
biAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0
ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9y
KHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgdmFyIHRv
a2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4g
JiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBp
dGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAgICAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAg
ICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29y
LmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6Jykgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxp
bmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCisg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwg
YWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9
IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNN
dWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9
IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciBy
aWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29s
dW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAg
ICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5n
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInNl
bWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBz
ZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsKKyAgICAgICAgICAg
IHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZh
ciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1u
ICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENz
dHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91
cicsICdhY2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIv
b29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3Vy
OwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRv
a2VuSXRlcmF0b3I7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3Zh
ciBTQUZFX0lOU0VSVF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0K
KyAgICBbInRleHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNv
bW1lbnQiXTsKKworCit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNl
cnRlZFJvdyA9IC0xOwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUlu
c2VydGVkQnJhY2tldHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXli
ZUluc2VydGVkTGluZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsK
KwordmFyIENzdHlsZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVC
ZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7Cisg
ICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAg
dmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vy
c29yLmNvbHVtbik7CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3Iu
Z2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7Cisg
ICAgICAgICAgICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vy
c29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRj
aFRva2VuVHlwZShpdGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lO
U0VSVF9JTl9UT0tFTlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0
b3IuZ2V0Q3VycmVudFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRo
aXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0Iiwg
U0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhh
dmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAg
IHJldHVybiB0eXBlcy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsK
KyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVk
aXRvciwgc2Vzc2lvbiwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdl
dEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGlu
ZShjdXJzb3Iucm93KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhj
dXJzb3IsIGxpbmUsIGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0lu
c2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93
OworICAgICAgICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1
cnNvci5jb2x1bW4pOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07Cisg
ICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRp
dG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5l
KGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhj
dXJzb3IsIGxpbmUpKQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAg
ICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0
ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7Cisg
ICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7
CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0
eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGlu
ZSwgYnJhY2tldCkgeworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYm
CisgICAgICAgICAgICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAg
ICAgIGJyYWNrZXQgPT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxp
bmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07
CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5j
dGlvbihjdXJzb3IsIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0
cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYK
KyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVk
TGluZUVuZCAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0g
bWF5YmVJbnNlcnRlZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91
ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNl
cnRlZExpbmVFbmQgPSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0
b0luc2VydGVkQnJhY2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5j
bGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5z
ZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9
OworCisgICAgdGhpcy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUs
IGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRv
Yy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24p
OworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYm
IGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAor
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihl
ZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChs
aW5lW2N1cnNvci5jb2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlv
dXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5
bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDog
J3snLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAg
ICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGlu
ZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1
bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcg
IT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3Is
IGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BB
dXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0
ID09ICJcclxuIikgeworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAg
IGlmIChDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUp
KSB7CisgICAgICAgICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5
YmVJbnNlcnRlZEJyYWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xl
YXJNYXliZUluc2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4g
KyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIi
KSB7CisgICAgICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNo
aW5nQnJhY2tldCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScp
OworICAgICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXRO
ZXh0TGluZUluZGVudChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNl
c3Npb24uZ2V0VGFiU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9
IHRoaXMuJGdldEluZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQg
KyBjbG9zaW5nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVu
Z3RoLCAxLCBpbmRlbnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAg
ICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsK
KyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29s
dW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
ICd9JykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSk7CisKKyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0g
JygnKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJh
bmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFu
Z2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9y
LmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwg
c2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0lu
c2VydChlZGl0b3IsIHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHRleHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9y
LmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5z
dWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAg
aWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBz
ZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsg
MSwgcm93OiBjdXJzb3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBu
dWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5l
LCB0ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0lu
c2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIs
ICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJh
bmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShy
YW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAn
KCcpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5z
dGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJh
bmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAg
ICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29s
dW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwg
ZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAg
ICBpZiAodGV4dCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iu
Z2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24u
ZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9
PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCAr
ICddJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNl
cnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91
ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdo
dENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7
CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZh
ciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1
cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2lu
ZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlz
LmFkZCgiYnJhY2tldHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRp
dG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRv
Yy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkg
JiYgc2VsZWN0ZWQgPT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4g
KyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAg
ICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19k
cXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNl
c3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7
CisgICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlv
biA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAo
c2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYm
IGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90
ZSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRD
aGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRv
a2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAg
ICAgICAgIHZhciBjb2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3Mg
PSAtMTsgLy8gVHJhY2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAg
ICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1
b3RlcG9zID0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9m
KHF1b3RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
KHRva2VuLnZhbHVlLmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYm
IHRva2VuLnR5cGUgIT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwg
KChzZWxlY3Rpb24uc3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYm
IHRva2VuLnZhbHVlLmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEp
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5z
ZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0OiBxdW90ZSArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBb
MSwxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
dG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsx
LCAxXQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisg
ICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRl
LCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5p
c011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewor
ICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJv
dyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3Rh
cnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVt
bisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhh
dmlvdXIpOworCitleHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2Rl
L2ZvbGRpbmcvZm9sZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSBy
ZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUo
Ii4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1v
ZGUgPSBmdW5jdGlvbigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUp
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8
XFspW15cfVxdXSokfF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAv
XlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRn
ZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUu
bWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAg
ICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsx
XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Np
b24sIG1hdGNoWzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRD
b21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0
b3BNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0
Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24s
IG1hdGNoWzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21t
ZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChG
b2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzgzYWFmYzA3ZWQ5
YjI4MTg0MTY2NjRkMDg1MzM5ZDA1NmVlOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCkBAIC0wLDAgKzEsMTg4
NiBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5v
cmcgQi5WLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCisgKiAgICAg
ICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICov
CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL21vZGUvamF2YXNj
cmlwdCcsICdhY2UvbW9kZS9jc3MnLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9odG1sX2hp
Z2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsICdhY2UvbW9kZS9mb2xk
aW5nL2h0bWwnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4v
dGV4dCIpLk1vZGU7Cit2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQi
KS5Nb2RlOwordmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7Cit2YXIgVG9rZW5p
emVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIEh0bWxIaWdobGln
aHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0
UnVsZXM7Cit2YXIgSHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2h0bWwiKS5I
dG1sQmVoYXZpb3VyOwordmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1s
IikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGhpZ2hsaWdo
dGVyID0gbmV3IEh0bWxIaWdobGlnaHRSdWxlcygpOworICAgIHRoaXMuJHRva2VuaXplciA9IG5l
dyBUb2tlbml6ZXIoaGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kYmVoYXZpb3Vy
ID0gbmV3IEh0bWxCZWhhdmlvdXIoKTsKKyAgICAKKyAgICB0aGlzLiRlbWJlZHMgPSBoaWdobGln
aHRlci5nZXRFbWJlZHMoKTsKKyAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeworICAgICAg
ICAianMtIjogSmF2YVNjcmlwdE1vZGUsCisgICAgICAgICJjc3MtIjogQ3NzTW9kZQorICAgIH0p
OworICAgIAorICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOworfTsK
K29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIAor
ICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRS
b3csIGVuZFJvdykgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworCisgICAgdGhpcy5nZXRO
ZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRl
bnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBN
b2RlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAn
YWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdh
Y2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScsICdhY2Uvd29ya2Vy
L3dvcmtlcl9jbGllbnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvbW9kZS9m
b2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
Cit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVxdWly
ZSgiLi90ZXh0IikuTW9kZTsKK3ZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIi
KS5Ub2tlbml6ZXI7Cit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9q
YXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3Zh
ciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVu
dCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2Ui
KS5SYW5nZTsKK3ZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2Ns
aWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2Jl
aGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgQ1N0eWxlRm9sZE1vZGUgPSBy
ZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgSmF2YVNjcmlw
dEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBN
YXRjaGluZ0JyYWNlT3V0ZGVudCgpOworICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVC
ZWhhdmlvdXIoKTsKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgp
OworfTsKK29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKwor
CisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFy
dFJvdywgZW5kUm93KSB7CisgICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKKyAgICAgICAgdmFy
IHJlID0gL14oXHMqKVwvXC8vOworCisgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBl
bmRSb3c7IGkrKykgeworICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5nZXRMaW5lKGkpKSkg
eworICAgICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRkZW50KSB7Cisg
ICAgICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAg
ICAgICAgICBmb3IgKHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2gocmUpOworICAgICAgICAgICAgICAgIGRlbGV0ZVJh
bmdlLnN0YXJ0LnJvdyA9IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9
IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IG1bMF0ubGVuZ3Ro
OworICAgICAgICAgICAgICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBtWzFdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvYy5pbmRl
bnRSb3dzKHN0YXJ0Um93LCBlbmRSb3csICIvLyIpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7Cisg
ICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisKKyAgICAgICAgdmFy
IHRva2VuaXplZExpbmUgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0
ZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKKyAgICAgICAg
dmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKKworICAgICAgICBpZiAodG9rZW5z
Lmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50Iikgewor
ICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7CisgICAg
ICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChc
W10pXHMqJC8pOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaW5k
ZW50ICs9IHRhYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAi
ZG9jLXN0YXJ0IikgeworICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgc3Rh
dGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8p
XCovKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRj
aFsxXSkgeworICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hl
Y2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVy
biB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAg
IHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAg
dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtl
ciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2Vy
IiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQo
c2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIub24oImpzbGludCIsIGZ1
bmN0aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVz
dWx0cy5kYXRhKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3b3JrZXIub24oInRl
cm1pbmF0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRp
b25zKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAg
ICB9OworCit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsK
K30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21v
ZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0
X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBv
b3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVz
ID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGln
aGxpZ2h0UnVsZXM7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hp
Z2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIEphdmFTY3JpcHRIaWdo
bGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5j
cmVhdGVLZXl3b3JkTWFwcGVyKHsKKyAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKKyAgICAg
ICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVj
dHxSZWdFeHB8U3RyaW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCisgICAgICAgICAgICAi
TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArIC8vIEU0WAorICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0
MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAg
KworICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhD
bGFtcGVkQXJyYXl8IiAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkVycm9yfEV2
YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJh
dGlvbnwiICAgKyAvLyBFcnJvcnMKKyAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8
VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg
ICAgICAgICAgICJkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVV
UklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9u
cworICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkpTT058TWF0
aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKyAvLyBPdGhlcgorICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3RvdHlw
ZXx3aW5kb3d8ZG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAvLyBQ
c2V1ZG8KKyAgICAgICAgImtleXdvcmQiOgorICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9y
dHxnZXR8c2V0fCIgKworICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVm
YXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKKyAgICAgICAgICAg
ICJpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0
fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKworICAgICAgICAgICAgIl9fcGFyZW50X198X19j
b3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKKyAgICAgICAgICAgICJj
bGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8
aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCisgICAgICAgICJzdG9yYWdlLnR5
cGUiOgorICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAorICAgICAgICAiY29u
c3RhbnQubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5l
ZCIsCisgICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKKyAgICAgICAgICAgICJhbGVydCIsCisg
ICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCisgICAgfSwg
ImlkZW50aWZpZXIiKTsKKyAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8ZmluYWxs
eXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOworICAg
IHZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRc
XCRfXHUwMGExLVx1ZmZmZl0qXFxiIjsKKworICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/Onhb
MC05YS1mQS1GXXsyfXwiICsgLy8gaGV4CisgICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8v
IHVuaWNvZGUKKyAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CisgICAgICAgICIz
WzAtNl1bMC03XT98IiArIC8vIG9jdAorICAgICAgICAiMzdbMC03XT98IiArIC8vIG9jdAorICAg
ICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CisgICAgICAgICIuKSI7CisKKyAgICB0aGlzLiRy
dWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6ICJjb21tZW50IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wvLiok
LworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5n
ZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAg
ICByZWdleCA6IC9cL1wqLywKKyAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICAgICByZWdleCA6ICInKD89LikiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJp
bmciCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAorICAgICAgICAgICAgICAgIG5leHQg
IDogInFxc3RyaW5nIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDog
ImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKKyAgICAgICAgICAgICAgICByZWdleCA6IC8wW3hY
XVswLTlhLWZBLUZdK1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
L1srLV0/XGQrKD86KD86XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8KKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0
b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIiwK
KyAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1l
LmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKHBy
b3RvdHlwZSkoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCisgICAgICAgICAg
ICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIs
ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwK
KyAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdl
LnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50
aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAg
ICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFt
ZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdl
LnR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJS
ZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAgICAg
ICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCisg
ICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAorICAgICAgICAg
ICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24i
LCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJS
ZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAor
ICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9y
YWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVu
LmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIihm
dW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAorICAgICAg
ICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFt
ZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAg
ICAgICAgICAgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgor
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlm
aWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAg
ICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4
dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyop
KFxcKCkiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCisgICAgICAg
ICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCisgICAgICAgICAg
ICAgICAgbmV4dCA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9u
Il0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/OmlmdHxvdyg/Ok1vZCg/
OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMp
P3xZfFRvKT98dCg/Om9wenp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRleHQp
fG9ydHx1KD86cHxiKD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpSZSg/
OnNpemFibGV8cXVlc3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vj
b25kc3xIbyg/OnRLZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFsfFpP
cHRpb25zfERhdGV8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRz
fEhvdXJzfERhdGV8RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8YXZl
UHJlZmVyZW5jZXN8bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFyKD86
Q29kZUF0fEF0KXxvKD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFyKD86
VGltZW91dHxJbnRlcnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNoZWV0
fFBvcHVwfEV2ZW50T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNlKXxV
KD86VENTdHJpbmd8cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEoPzpu
fGludCg/OkVuYWJsZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8ZCg/
OmlzYWJsZUV4dGVybmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0YWlu
dHxlc2NhcGV8d2F0Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/Om8o
PzpwfHcpfHVzaHxsdWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/KXxy
KD86aW50fG9tcHR8ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8dmFs
fGxlbWVudEZyb21Qb2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9mfFVU
Q3xxdWVyeUNvbW1hbmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/Om5k
fGxlKD86TW9kaWZpZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8byg/
Om50KD86c2l6ZXxjb2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzppbmt8
byg/OmFkfGcpfGFzdEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8b2J8
YW4oPzoyKT8pfHBwbHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8ZSg/
OnNpemUoPzpCeXxUbyl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNlKD86
Q2FwdHVyZXxFdmVudHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/Omko
PzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFllYXJ8
VGltZSg/OnpvbmVPZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vj
b25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVhcnxB
KD86dHRlbnRpb258bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVsb3cp
fFRvKD86QWJzb2x1dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4KSl8
Yig/OnRvYXxpZ3xvKD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLworICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsICJzdXBwb3J0LmZ1bmN0aW9uLmRvbSJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhc
Likocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0
dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJ
dGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNl
Y3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJv
Y2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkp
fHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVs
ZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0
ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hp
bGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0
KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJpYnV0
ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5jb25zdGFudCJd
LAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzpp
cHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMo
PzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3Vy
aXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFz
KD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpz
cGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJT
ZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpv
bmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudElu
Zm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxw
KXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFf
MnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRl
eHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRo
KXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZ
fGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJl
Y3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxW
aWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmlu
ZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8
a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxU
b3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZz
ZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlv
dXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxt
YmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVk
fFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5
fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxs
KD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpi
YXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpv
ZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1p
bm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRv
cHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdo
dCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8
bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVm
dCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRo
fFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8
dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5jdHVh
dGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKKyAgICAgICAgICAg
ICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0aW1l
RW5kfGFzc2VydClcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
IGtleXdvcmRNYXBwZXIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9y
IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitcLX5dfD09PXw9PXw9
fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwlPXxc
Kz18XC09fCY9fFxePS8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5v
cGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8XDt8XC4vLAorICAg
ICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IC9bXFsoe10vLAorICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQi
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVu
IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAgICAg
ICAgcmVnZXggOiAvXC89Py8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dl
ZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAor
ICAgICAgICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLworICAgICAgICAgICAgfQorICAgICAgICBd
LAorICAgICAgICAicmVnZXhfYWxsb3dlZCI6IFsKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdo
bGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAg
ICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAgICAgICAgICAgIG5leHQgOiAi
Y29tbWVudF9yZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogImNvbW1lbnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAi
LAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAi
cmVnZXgiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQi
LAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIiLAor
ICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwK
KyAgICAgICAgInJlZ2V4IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2Vu
OiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxc
XCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKKyAgICAgICAgICAgICAg
ICByZWdleDogIi9cXHcqIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiLAorICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4OiAvXHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxc
P3szLH0vCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3Rh
bnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxc
KXx7XGQrLD8oPzpcZCspP318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVy
IiwKKyAgICAgICAgICAgICAgICByZWdleDogL1x8LworICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAg
ICAgICByZWdleDogL1xbXF4/LywKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hhcmFj
dGVyX2NsYXNzIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVt
cHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgICAgIG5leHQ6
ICJzdGFydCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46
ICJzdHJpbmcucmVnZXhwIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVn
ZXhfY2hhcmFjdGVyX2NsYXNzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRv
a2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAi
XFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAor
ICAgICAgICAgICAgICAgIHJlZ2V4OiAiXSIsCisgICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4
IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxh
bmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICItIgorICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAgIHJl
Z2V4OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRl
cmNsYXNzIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiZnVuY3Rpb25fYXJn
dW1lbnRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFi
bGUucGFyYW1ldGVyIiwKKyAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIsCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAgICAg
ICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
bjogImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAg
bmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiY29tbWVu
dF9yZWdleF9hbGxvd2VkIiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVn
ZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCisgICAgICAgICAgICB7ZGVm
YXVsdFRva2VuIDogImNvbW1lbnQifQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudCIgOiBb
CisgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQg
OiAic3RhcnQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CisgICAg
ICAgIF0sCisgICAgICAgICJxcXN0cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAg
ICByZWdleCA6IGVzY2FwZWRSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAg
ICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcs
CisgICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgXSwKKyAgICAgICAgInFzdHJpbmciIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAg
cmVnZXggOiBlc2NhcGVkUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKKyAgICAgICAg
ICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCisg
ICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
XQorICAgIH07CisKKyAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVz
LCAiZG9jLSIsCisgICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUo
InN0YXJ0IikgXSk7Cit9OworCitvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVz
LCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxl
cyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9k
ZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1
aXJlKCIuLi9saWIvb29wIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90
ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIERvY0NvbW1l
bnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcnVsZXMgPSB7Cisg
ICAgICAgICJzdGFydCIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRh
ZyIsCisgICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWls
IGFkZHJlc3NlcworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRv
Yy50YWciLAorICAgICAgICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgorICAgICAgICB9XQorICAg
IH07Cit9OworCitvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGln
aGxpZ2h0UnVsZXMpOworCitEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0g
ZnVuY3Rpb24oc3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50
LmRvYyIsIC8vIGRvYyBjb21tZW50CisgICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAor
ICAgICAgICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKK0RvY0NvbW1lbnRIaWdobGlnaHRS
dWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgcmVn
ZXggOiAiXFwqXFwvIiwKKyAgICAgICAgbmV4dCAgOiBzdGFydAorICAgIH07Cit9OworCisKK2V4
cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVz
OworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4u
L3JhbmdlIikuUmFuZ2U7CisKK3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkg
e307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24o
bGluZSwgaW5wdXQpIHsKKyAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0
KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7
CisgICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1hdGNo
ID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKKworICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4g
MDsKKworICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOworICAgICAgICB2YXIg
b3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46
IGNvbHVtbn0pOworCisgICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5y
b3cgPT0gcm93KSByZXR1cm4gMDsKKworICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5k
ZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKKyAgICAgICAgZG9jLnJlcGxhY2Uo
bmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CisgICAgfTsKKworICAg
IHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIG1hdGNoID0g
bGluZS5tYXRjaCgvXihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAg
cmV0dXJuIG1hdGNoWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07
CisKK30pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKKworZXhwb3J0cy5N
YXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50OworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdG9r
ZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIg
QmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIFRva2Vu
SXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7
Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZFX0lOU0VS
VF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24u
b3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBbInRleHQi
LCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsKKwor
Cit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJvdyA9IC0x
OwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkQnJhY2tl
dHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2VydGVkTGlu
ZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFyIENzdHls
ZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNT
YW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9y
ID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7
CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAgICAgICB2
YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vy
c29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShp
dGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tF
TlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
dGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVu
dFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1hdGNoVG9r
ZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRf
QkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuJG1hdGNo
VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVybiB0eXBl
cy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAKKyAgICBD
c3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lv
biwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0
aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93
KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUs
IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVkQnJhY2tl
dHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAgICAgICBh
dXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4p
OworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0
eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9u
LCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRp
b24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cp
OworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUp
KQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJ
bnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQg
PSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAgIG1heWJl
SW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIG1h
eWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3Vy
LmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkg
eworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAgICAg
ICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJyYWNrZXQg
PT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1
cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAgCisgICAg
Q3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3Is
IGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAg
ICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAg
IGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAmJgor
ICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNlcnRl
ZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5z
ZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQg
PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2VydGVkQnJh
Y2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5z
ZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0
cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisgICAgdGhp
cy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRp
dG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1
cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBz
ZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBz
ZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5nZXRX
cmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Np
b24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNvci5j
b2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0
b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIu
cmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
dGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmln
aHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24u
JGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6
IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYg
Q3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQp
KSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRD
bG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEs
IDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxuIikg
eworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChDc3R5bGVC
ZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CisgICAgICAg
ICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRlZEJy
YWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2Vy
dGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9
IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7
cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAgICAgICAg
ICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUluZGVu
dChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFi
U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdldElu
ZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLAor
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRl
bnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAo
c3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2Vs
ZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJh
bmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAg
IHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5l
bmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAg
ICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJlSW5zZXJ0
ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7CisgICAg
ICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAg
ICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9u
KTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhh
dmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNl
IGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsK
KyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3Is
IHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0K
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRl
eHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBv
c2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vy
c29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hh
ciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5k
T3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJz
b3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHls
ZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgewor
ICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2lu
ZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIs
IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAg
ICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAg
ICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKKyAgICAg
ICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwor
ICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNv
bHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0
Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9
PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0
b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9y
LCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRv
SW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5k
b2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5l
LnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAg
ICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9
IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4g
KyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09
IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRv
SW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tl
dHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFu
Z2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQg
PT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFu
Z2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImlu
c2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQp
IHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAgICAgICAg
ICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5n
ZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09
ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRX
cmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdl
dExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGluZS5z
dWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Np
b24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAgIHZhciBj
b2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8gVHJh
Y2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAgICAgICAg
IGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0gLTE7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZhbHVl
Lmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5cGUg
IT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rpb24u
c3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZhbHVl
Lmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRv
ciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSAr
IHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdG9r
ZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hh
ciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAn
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQo
InN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVk
aXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgp
ICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAg
ICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsg
MSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAg
ICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p
OworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOworCitl
eHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9s
ZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBv
b3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8u
Li9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2Rl
IikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlv
bigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVuY3Rp
b24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxdXSok
fF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10qKFx9
fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1
bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vz
c2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5m
b2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZh
ciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFd
LCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJh
bmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwor
ICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBt
YXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCBy
b3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdl
KHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90
b3R5cGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzJywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS90ZXh0JywgJ2Fj
ZS90b2tlbml6ZXInLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9t
YXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2Uv
bW9kZS9iZWhhdmlvdXIvY3NzJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9s
aWIvb29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFyIFRv
a2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBDc3NIaWdo
bGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdo
dFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19i
cmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgV29ya2VyQ2xpZW50ID0g
cmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7Cit2YXIgQ3Nz
QmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwordmFy
IENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwor
Cit2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tl
bml6ZXIobmV3IENzc0hpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSwgImkiKTsKKyAgICB0aGlz
LiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4kYmVoYXZp
b3VyID0gbmV3IENzc0JlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENT
dHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKworKGZ1
bmN0aW9uKCkgeworCisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKKworICAgIHRo
aXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CisgICAg
ICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisgICAgICAgIHZhciB0b2tl
bnMgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwor
ICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBl
ID09ICJjb21tZW50IikgeworICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOworICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIGluZGVudCArPSB0YWI7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gaW5kZW50OworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1
bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVu
dC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9PdXRk
ZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgICAgIHRoaXMuJG91dGRlbnQu
YXV0b091dGRlbnQoZG9jLCByb3cpOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZVdvcmtlciA9
IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGll
bnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CisgICAgICAgIHdv
cmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAgICAg
d29ya2VyLm9uKCJjc3NsaW50IiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgc2Vzc2lvbi5z
ZXRBbm5vdGF0aW9ucyhlLmRhdGEpOworICAgICAgICB9KTsKKworICAgICAgICB3b3JrZXIub24o
InRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90
YXRpb25zKCk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB3b3JrZXI7CisgICAgfTsK
KworfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAn
YWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBs
YW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBy
ZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwordmFy
IHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbmltYXRpb24tZmlsbC1tb2Rl
fGFsaWdubWVudC1hZGp1c3R8YWxpZ25tZW50LWJhc2VsaW5lfGFuaW1hdGlvbi1kZWxheXxhbmlt
YXRpb24tZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24taXRlcmF0aW9uLWNv
dW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmct
ZnVuY3Rpb258YW5pbWF0aW9ufGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZmFjZS12aXNpYmlsaXR5
fGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJyZWFrfGJhY2tncm91bmQtY2xpcHxi
YWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dy
b3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3Vu
ZHxiYXNlbGluZS1zaGlmdHxiaW5kaW5nfGJsZWVkfGJvb2ttYXJrLWxhYmVsfGJvb2ttYXJrLWxl
dmVsfGJvb2ttYXJrLXN0YXRlfGJvb2ttYXJrLXRhcmdldHxib3JkZXItYm90dG9tfGJvcmRlci1i
b3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJpZ2h0
LXJhZGl1c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWNv
bGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxib3Jk
ZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNlfGJv
cmRlci1pbWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVm
dC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxib3Jk
ZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3Jk
ZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJvcmRl
ci10b3AtbGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1zdHls
ZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1hbGlnbnxi
b3gtZGVjb3JhdGlvbi1icmVha3xib3gtZGlyZWN0aW9ufGJveC1mbGV4LWdyb3VwfGJveC1mbGV4
fGJveC1saW5lc3xib3gtb3JkaW5hbC1ncm91cHxib3gtb3JpZW50fGJveC1wYWNrfGJveC1zaGFk
b3d8Ym94LXNpemluZ3xicmVhay1hZnRlcnxicmVhay1iZWZvcmV8YnJlYWstaW5zaWRlfGNhcHRp
b24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yLXByb2ZpbGV8Y29sb3J8Y29sdW1uLWNvdW50fGNvbHVt
bi1maWxsfGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1
bGUtc3R5bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNvbHVt
bnN8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGNyb3B8Y3VlLWFmdGVy
fGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxkb21pbmFudC1iYXNlbGlu
ZXxkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0fGRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbnxkcm9w
LWluaXRpYWwtYmVmb3JlLWFkanVzdHxkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWdufGRyb3AtaW5p
dGlhbC1zaXplfGRyb3AtaW5pdGlhbC12YWx1ZXxlbGV2YXRpb258ZW1wdHktY2VsbHN8Zml0fGZp
dC1wb3NpdGlvbnxmbG9hdC1vZmZzZXR8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZvbnQt
c2l6ZS1hZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2Vp
Z2h0fGZvbnR8Z3JpZC1jb2x1bW5zfGdyaWQtcm93c3xoYW5naW5nLXB1bmN0dWF0aW9ufGhlaWdo
dHxoeXBoZW5hdGUtYWZ0ZXJ8aHlwaGVuYXRlLWJlZm9yZXxoeXBoZW5hdGUtY2hhcmFjdGVyfGh5
cGhlbmF0ZS1saW5lc3xoeXBoZW5hdGUtcmVzb3VyY2V8aHlwaGVuc3xpY29ufGltYWdlLW9yaWVu
dGF0aW9ufGltYWdlLXJlbmRlcmluZ3xpbWFnZS1yZXNvbHV0aW9ufGlubGluZS1ib3gtYWxpZ258
bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaW5lLXN0YWNraW5nLXJ1Ynl8bGluZS1z
dGFja2luZy1zaGlmdHxsaW5lLXN0YWNraW5nLXN0cmF0ZWd5fGxpbmUtc3RhY2tpbmd8bGlzdC1z
dHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxl
fG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFyZ2lu
fG1hcmstYWZ0ZXJ8bWFyay1iZWZvcmV8bWFya3xtYXJrc3xtYXJxdWVlLWRpcmVjdGlvbnxtYXJx
dWVlLXBsYXktY291bnR8bWFycXVlZS1zcGVlZHxtYXJxdWVlLXN0eWxlfG1heC1oZWlnaHR8bWF4
LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofG1vdmUtdG98bmF2LWRvd258bmF2LWluZGV4fG5h
di1sZWZ0fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8b3V0
bGluZS1vZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZsb3ct
c3R5bGV8b3ZlcmZsb3cteHxvdmVyZmxvdy15fG92ZXJmbG93fHBhZGRpbmctYm90dG9tfHBhZGRp
bmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1hZnRl
cnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLXBvbGljeXxwYWdlfHBh
dXNlLWFmdGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3Rp
dmV8cGhvbmVtZXN8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9zaXRpb258cHJlc2Vu
dGF0aW9uLWxldmVsfHB1bmN0dWF0aW9uLXRyaW18cXVvdGVzfHJlbmRlcmluZy1pbnRlbnR8cmVz
aXplfHJlc3QtYWZ0ZXJ8cmVzdC1iZWZvcmV8cmVzdHxyaWNobmVzc3xyaWdodHxyb3RhdGlvbi1w
b2ludHxyb3RhdGlvbnxydWJ5LWFsaWdufHJ1Ynktb3Zlcmhhbmd8cnVieS1wb3NpdGlvbnxydWJ5
LXNwYW58c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlvbnxz
cGVha3xzcGVlY2gtcmF0ZXxzdHJlc3N8c3RyaW5nLXNldHx0YWJsZS1sYXlvdXR8dGFyZ2V0LW5h
bWV8dGFyZ2V0LW5ld3x0YXJnZXQtcG9zaXRpb258dGFyZ2V0fHRleHQtYWxpZ24tbGFzdHx0ZXh0
LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWVtcGhhc2lzfHRleHQtaGVpZ2h0fHRleHQtaW5k
ZW50fHRleHQtanVzdGlmeXx0ZXh0LW91dGxpbmV8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18
dGV4dC13cmFwfHRvcHx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm18
dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8
dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dHJhbnNpdGlvbnx1bmljb2RlLWJpZGl8dmVydGlj
YWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1iYWxhbmNlfHZvaWNlLWR1cmF0aW9ufHZvaWNlLWZh
bWlseXx2b2ljZS1waXRjaC1yYW5nZXx2b2ljZS1waXRjaHx2b2ljZS1yYXRlfHZvaWNlLXN0cmVz
c3x2b2ljZS12b2x1bWV8dm9sdW1lfHdoaXRlLXNwYWNlLWNvbGxhcHNlfHdoaXRlLXNwYWNlfHdp
ZG93c3x3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7Cit2
YXIgc3VwcG9ydEZ1bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24gPSAicmdifHJnYmF8
dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyI7Cit2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0
cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xs
fGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNv
bHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3Jl
fGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8
Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6
ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVv
Z3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25z
aWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6
aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8
ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0
dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVh
c2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5
fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdp
bmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8
aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhl
c2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5o
ZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxp
bmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29y
ZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8
bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0
LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93
ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgt
c2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNp
emV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVv
dGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2Js
aXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8
cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRp
dmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmln
aHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0
ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0
fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJp
Y3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29s
dW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdy
b3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdl
fHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhp
Y2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBw
ZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGlj
YWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm8iOwor
dmFyIHN1cHBvcnRDb25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRDb2xvciA9
ICJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xp
dmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93IjsKK3ZhciBzdXBw
b3J0Q29uc3RhbnRGb250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9udHMgPSAiYXJpYWx8
Y2VudHVyeXxjb21pY3xjb3VyaWVyfGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFjdHxs
dWNpZGF8c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJkYW5h
fHdlYmRpbmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKKwordmFyIG51bVJlID0gZXhw
b3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7Cit2
YXIgcHNldWRvRWxlbWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0gIihcXDorKVxcYihh
ZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxlY3Rp
b24pXFxiIjsKK3ZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAi
KDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8
Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGls
ZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0
LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9v
dHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOworCit2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSBm
dW5jdGlvbigpIHsKKworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3Jk
TWFwcGVyKHsKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb24sCisg
ICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAorICAgICAgICAic3Vw
cG9ydC50eXBlIjogc3VwcG9ydFR5cGUsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmNvbG9y
Ijogc3VwcG9ydENvbnN0YW50Q29sb3IsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRz
Ijogc3VwcG9ydENvbnN0YW50Rm9udHMKKyAgICB9LCAidGV4dCIsIHRydWUpOworCisgICAgdmFy
IGJhc2VfcnVsZXNldCA9IFsKKyAgICAgICAgeworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVu
dCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwK
KyAgICAgICAgICAgIG5leHQgOiAicnVsZXNldF9jb21tZW50IgorICAgICAgICB9LCB7CisgICAg
ICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgcmVn
ZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAg
IHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwgImtleXdvcmQiXSwK
KyAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8
Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18dnd8
JSkiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMi
LAorICAgICAgICAgICAgcmVnZXggOiBudW1SZQorICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKKyAgICAgICAgICAgIHJl
Z2V4IDogIiNbYS1mMC05XXs2fSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAi
Y29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDogIiNb
YS1mMC05XXszfSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0
aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3MiXSwK
KyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvRWxlbWVudHMKKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFt
ZS5wc2V1ZG8tY2xhc3MuY3NzIl0sCisgICAgICAgICAgICByZWdleCA6IHBzZXVkb0NsYXNzZXMK
KyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAorICAgICAg
ICAgICAgcmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCisgICAgICAgIH0K
KyAgICAgIF07CisKKyAgICB2YXIgcnVsZXNldCA9IGxhbmcuY29weUFycmF5KGJhc2VfcnVsZXNl
dCk7CisgICAgcnVsZXNldC51bnNoaWZ0KHsKKyAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVu
IiwKKyAgICAgICAgcmVnZXggOiAiXFx9IiwKKyAgICAgICAgbmV4dDogICAic3RhcnQiCisgICAg
fSk7CisKKyAgICB2YXIgbWVkaWFfcnVsZXNldCA9IGxhbmcuY29weUFycmF5KCBiYXNlX3J1bGVz
ZXQgKTsKKyAgICBtZWRpYV9ydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJl
bi5ycGFyZW4iLAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJtZWRp
YSIKKyAgICB9KTsKKworICAgIHZhciBiYXNlX2NvbW1lbnQgPSBbeworICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKKyAgICAgICAgICBy
ZWdleCA6ICIuKyIKKyAgICB9XTsKKworICAgIHZhciBjb21tZW50ID0gbGFuZy5jb3B5QXJyYXko
YmFzZV9jb21tZW50KTsKKyAgICBjb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDog
ImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpc
XC8iLAorICAgICAgICAgIG5leHQgOiAic3RhcnQiCisgICAgfSk7CisKKyAgICB2YXIgbWVkaWFf
Y29tbWVudCA9IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7CisgICAgbWVkaWFfY29tbWVu
dC51bnNoaWZ0KHsKKyAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21t
ZW50CisgICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKKyAgICAgICAgICBuZXh0IDogIm1l
ZGlhIgorICAgIH0pOworCisgICAgdmFyIHJ1bGVzZXRfY29tbWVudCA9IGxhbmcuY29weUFycmF5
KGJhc2VfY29tbWVudCk7CisgICAgcnVsZXNldF9jb21tZW50LnVuc2hpZnQoeworICAgICAgICAg
IHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6
ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAicnVsZXNldCIKKyAgICB9KTsKKworICAg
IHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDog
IlxcL1xcKiIsCisgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFx7
IiwKKyAgICAgICAgICAgIG5leHQ6ICAicnVsZXNldCIKKyAgICAgICAgfSwgeworICAgICAgICAg
ICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJALio/eyIsCisgICAgICAg
ICAgICBuZXh0OiAgIm1lZGlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAia2V5
d29yZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7Cisg
ICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2Et
ejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAg
ICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAg
dG9rZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgorICAg
ICAgICB9XSwKKworICAgICAgICAibWVkaWEiIDogWyB7CisgICAgICAgICAgICB0b2tlbiA6ICJj
b21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9c
XCoiLAorICAgICAgICAgICAgbmV4dCA6ICJtZWRpYV9jb21tZW50IgorICAgICAgICB9LCB7Cisg
ICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICByZWdleDogIlxc
eyIsCisgICAgICAgICAgICBuZXh0OiAgIm1lZGlhX3J1bGVzZXQiCisgICAgICAgIH0seworICAg
ICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAorICAg
ICAgICAgICAgbmV4dDogICJzdGFydCIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjog
ImtleXdvcmQiLAorICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCisgICAgICAgIH0s
eworICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCisgICAgICAgICAgICByZWdleDogIlxc
LlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwK
KyAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAg
ICAgIHRva2VuOiAiY29uc3RhbnQiLAorICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIK
KyAgICAgICAgfV0sCisKKyAgICAgICAgImNvbW1lbnQiIDogY29tbWVudCwKKworICAgICAgICAi
cnVsZXNldCIgOiBydWxlc2V0LAorICAgICAgICAicnVsZXNldF9jb21tZW50IiA6IHJ1bGVzZXRf
Y29tbWVudCwKKworICAgICAgICAibWVkaWFfcnVsZXNldCIgOiBtZWRpYV9ydWxlc2V0LAorICAg
ICAgICAibWVkaWFfY29tbWVudCIgOiBtZWRpYV9jb21tZW50CisgICAgfTsKK307CisKK29vcC5p
bmhlcml0cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKKworZXhwb3J0
cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOworCit9KTsKKworYWNlLmRl
ZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2Jl
aGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29w
Iik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwor
dmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3Vy
OwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRv
a2VuSXRlcmF0b3I7CisKK3ZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0
aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJp
bnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0
KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9
IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwor
ICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAg
ICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykg
eworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iu
cm93KTsKKyAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdo
dENoYXIgPT09ICc6JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9u
OiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMq
Oy8pKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICc6OycsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFd
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIs
IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAg
ICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAg
ICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsK
KyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29s
dW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
PSAnOycpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAg
ICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwor
CisgICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUs
IGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAn
OycpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24o
KTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93
KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29s
dW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAn
OycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6
ICcnLAorICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0
cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3Vy
ID0gQ3NzQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWxfaGlnaGxp
Z2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2Uv
bW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS94bWxfdXRpbCcsICdh
Y2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIGxh
bmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVx
dWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7Cit2YXIgSmF2
YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9y
dWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciB4bWxVdGlsID0gcmVxdWlyZSgi
Li94bWxfdXRpbCIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9o
aWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciB0YWdNYXAgPSBsYW5n
LmNyZWF0ZU1hcCh7CisgICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKKyAgICBidXR0b24gICAg
ICA6ICdmb3JtJywKKyAgICBmb3JtICAgICAgICA6ICdmb3JtJywKKyAgICBpbWcgICAgICAgICA6
ICdpbWFnZScsCisgICAgaW5wdXQgICAgICAgOiAnZm9ybScsCisgICAgbGFiZWwgICAgICAgOiAn
Zm9ybScsCisgICAgc2NyaXB0ICAgICAgOiAnc2NyaXB0JywKKyAgICBzZWxlY3QgICAgICA6ICdm
b3JtJywKKyAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKKyAgICBzdHlsZSAgICAgICA6ICdzdHls
ZScsCisgICAgdGFibGUgICAgICAgOiAndGFibGUnLAorICAgIHRib2R5ICAgICAgIDogJ3RhYmxl
JywKKyAgICB0ZCAgICAgICAgICA6ICd0YWJsZScsCisgICAgdGZvb3QgICAgICAgOiAndGFibGUn
LAorICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKKyAgICB0ciAgICAgICAgICA6ICd0YWJsZScK
K30pOworCit2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4k
cnVsZXMgPSB7CisgICAgICAgIHN0YXJ0IDogW3sKKyAgICAgICAgICAgIHRva2VuIDogInRleHQi
LAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwKKyAgICAgICAgICAgIG5l
eHQgOiAiY2RhdGEiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogInhtbC1wZSIs
CisgICAgICAgICAgICByZWdleCA6ICI8XFw/Lio/XFw/PiIKKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgdG9rZW4gOiAiY29tbWVudCIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhLS0iLAor
ICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0
b2tlbiA6ICJ4bWwtcGUiLAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIS4qPz4iCisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4
IDogIjwoPz1zY3JpcHRcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic2NyaXB0IgorICAgICAg
ICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsCisgICAgICAgICAgICByZWdl
eCA6ICI8KD89c3R5bGVcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic3R5bGUiCisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwgLy8gb3BlbmluZyB0YWcKKyAg
ICAgICAgICAgIHJlZ2V4IDogIjxcXC8/IiwKKyAgICAgICAgICAgIG5leHQgOiAidGFnIgorICAg
ICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJlZ2V4
IDogIlxccysiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNo
YXJhY3Rlci5lbnRpdHkiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzom
I3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCisgICAgICAgIH1dLAor
ICAgIAorICAgICAgICBjZGF0YSA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisg
ICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IiwKKyAgICAgICAgICAgIG5leHQgOiAic3RhcnQi
CisgICAgICAgIH0gXSwKKworICAgICAgICBjb21tZW50IDogWyB7CisgICAgICAgICAgICB0b2tl
biA6ICJjb21tZW50IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4qPy0tPiIsCisgICAgICAgICAg
ICBuZXh0IDogInN0YXJ0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9rZW4g
OiAiY29tbWVudCIKKyAgICAgICAgfSBdCisgICAgfTsKKyAgICAKKyAgICB4bWxVdGlsLnRhZyh0
aGlzLiRydWxlcywgInRhZyIsICJzdGFydCIsIHRhZ01hcCk7CisgICAgeG1sVXRpbC50YWcodGhp
cy4kcnVsZXMsICJzdHlsZSIsICJjc3Mtc3RhcnQiLCB0YWdNYXApOworICAgIHhtbFV0aWwudGFn
KHRoaXMuJHJ1bGVzLCAic2NyaXB0IiwgImpzLXN0YXJ0IiwgdGFnTWFwKTsKKyAgICAKKyAgICB0
aGlzLmVtYmVkUnVsZXMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCAianMtIiwgW3sKKyAgICAg
ICAgdG9rZW46ICJjb21tZW50IiwKKyAgICAgICAgcmVnZXg6ICJcXC9cXC8uKig/PTxcXC9zY3Jp
cHQ+KSIsCisgICAgICAgIG5leHQ6ICJ0YWciCisgICAgfSwgeworICAgICAgICB0b2tlbjogIm1l
dGEudGFnIiwKKyAgICAgICAgcmVnZXg6ICI8XFwvKD89c2NyaXB0KSIsCisgICAgICAgIG5leHQ6
ICJ0YWciCisgICAgfV0pOworICAgIAorICAgIHRoaXMuZW1iZWRSdWxlcyhDc3NIaWdobGlnaHRS
dWxlcywgImNzcy0iLCBbeworICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwKKyAgICAgICAgcmVn
ZXg6ICI8XFwvKD89c3R5bGUpIiwKKyAgICAgICAgbmV4dDogInRhZyIKKyAgICB9XSk7Cit9Owor
Citvb3AuaW5oZXJpdHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwor
CitleHBvcnRzLkh0bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbW9kZS94bWxfdXRpbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKworZnVu
Y3Rpb24gc3RyaW5nKHN0YXRlKSB7CisgICAgcmV0dXJuIFt7CisgICAgICAgIHRva2VuIDogInN0
cmluZyIsCisgICAgICAgIHJlZ2V4IDogJyInLAorICAgICAgICBuZXh0IDogc3RhdGUgKyAiX3Fx
c3RyaW5nIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAgcmVn
ZXggOiAiJyIsCisgICAgICAgIG5leHQgOiBzdGF0ZSArICJfcXN0cmluZyIKKyAgICB9XTsKK30K
KworZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKHF1b3RlLCBzdGF0ZSkgeworICAgIHJldHVybiBb
CisgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IHF1b3RlLCBuZXh0IDogc3RhdGV9
LAorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2Nh
cGUiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1G
XSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiIAorICAgICAgICB9LAorICAgICAgICB7ZGVm
YXVsdFRva2VuIDogInN0cmluZyJ9CisgICAgXTsKK30KKworZXhwb3J0cy50YWcgPSBmdW5jdGlv
bihzdGF0ZXMsIG5hbWUsIG5leHRTdGF0ZSwgdGFnTWFwKSB7CisgICAgc3RhdGVzW25hbWVdID0g
W3sKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAg
fSwgeworICAgICAgICAKKyAgICB0b2tlbiA6ICF0YWdNYXAgPyAibWV0YS50YWcudGFnLW5hbWUi
IDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0YWdNYXBbdmFsdWVdKQorICAg
ICAgICAgICAgICAgIHJldHVybiAibWV0YS50YWcudGFnLW5hbWUuIiArIHRhZ01hcFt2YWx1ZV07
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRhLnRhZy50YWct
bmFtZSI7CisgICAgICAgIH0sCisgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyIsCisg
ICAgICAgIG5leHQgOiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIgCisgICAgfSwgewor
ICAgICAgICB0b2tlbjogImVtcHR5IiwKKyAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICBuZXh0
IDogbmFtZSArICJfZW1iZWRfYXR0cmlidXRlX2xpc3QiCisgICAgfV07CisKKyAgICBzdGF0ZXNb
bmFtZSArICJfcXN0cmluZyJdID0gbXVsdGlMaW5lU3RyaW5nKCInIiwgbmFtZSArICJfZW1iZWRf
YXR0cmlidXRlX2xpc3QiKTsKKyAgICBzdGF0ZXNbbmFtZSArICJfcXFzdHJpbmciXSA9IG11bHRp
TGluZVN0cmluZygiXCIiLCBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIpOworICAgIAor
ICAgIHN0YXRlc1tuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCJdID0gW3sKKyAgICAgICAg
dG9rZW4gOiAibWV0YS50YWcuciIsCisgICAgICAgIHJlZ2V4IDogIi8/PiIsCisgICAgICAgIG5l
eHQgOiBuZXh0U3RhdGUKKyAgICB9LCB7CisgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0
b3IiLAorICAgICAgICByZWdleCA6ICI9IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiZW50
aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIiwKKyAgICAgICAgcmVnZXggOiAiWy1fYS16QS1aMC05
Ol0rIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZs
b2F0CisgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1d
P1xcZCspPyk/XFxiIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAg
IHJlZ2V4IDogIlxccysiCisgICAgfV0uY29uY2F0KHN0cmluZyhuYW1lKSk7Cit9OworCit9KTsK
KworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwn
LCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUo
Ii4uLy4uL2xpYi9vb3AiKTsKK3ZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlv
dXIveG1sIikuWG1sQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4v
Y3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIu
Li8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgdm9pZEVsZW1lbnRzID0g
WydhcmVhJywgJ2Jhc2UnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1iZWQnLCAnaHInLCAn
aW1nJywgJ2lucHV0JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nLCAnc291cmNl
JywgJ3RyYWNrJywgJ3diciddOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7Cisg
ICAgdmFyIGhhc1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3Bs
aXQoJy4nKTsKKyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVk
bGVMaXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0Lmlu
ZGV4T2YobmVlZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhh
c1R5cGU7Cit9CisKK3ZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworCisgICAgdGhp
cy5pbmhlcml0KFhtbEJlaGF2aW91cik7IC8vIEdldCB4bWwgYmVoYXZpb3VyCisgICAgCisgICAg
dGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0
aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7
CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBv
c2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0
ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgdmFyIGF0Q3Vyc29yID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWcn
KSAmJiAhKGhhc1R5cGUodG9rZW4sICd0ZXh0JykgJiYgdG9rZW4udmFsdWUubWF0Y2goJy8nKSkp
eworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVy
YXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAo
aGFzVHlwZSh0b2tlbiwgJ3N0cmluZycpIHx8IGhhc1R5cGUodG9rZW4sICdrZXl3b3JkLm9wZXJh
dG9yJykgfHwgaGFzVHlwZSh0b2tlbiwgJ2VudGl0eS5hdHRyaWJ1dGUtbmFtZScpIHx8IGhhc1R5
cGUodG9rZW4sICd0ZXh0JykpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0b2tl
biB8fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnLW5hbWUnKSB8fCBpdGVyYXRvci5zdGVwQmFj
a3dhcmQoKS52YWx1ZS5tYXRjaCgnLycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOworICAgICAg
ICAgICAgaWYgKGF0Q3Vyc29yKXsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1l
bnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuLnN0YXJ0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2b2lkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAhPT0g
LTEpeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICB0ZXh0OiAnPicgKyAnPC8nICsgZWxlbWVudCArICc+
JywKKyAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKK30KK29vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3VyLCBYbWxCZWhhdmlv
dXIpOworCitleHBvcnRzLkh0bWxCZWhhdmlvdXIgPSBIdG1sQmVoYXZpb3VyOworfSk7CisKK2Fj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvbW9k
ZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGli
L29vcCIpOwordmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91
cjsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2
aW91cjsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3Ii
KS5Ub2tlbkl0ZXJhdG9yOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7CisgICAg
dmFyIGhhc1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQo
Jy4nKTsKKyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVkbGVM
aXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4
T2YobmVlZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhhc1R5
cGU7Cit9CisKK3ZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisgICAgCisgICAgdGhp
cy5pbmhlcml0KENzdHlsZUJlaGF2aW91ciwgWyJzdHJpbmdfZHF1b3RlcyJdKTsgLy8gR2V0IHN0
cmluZyBiZWhhdmlvdXIKKyAgICAKKyAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0
aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewor
ICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVk
aXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3
IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwor
ICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAg
ICAgICAgICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghdG9rZW4gfHwg
IWhhc1R5cGUodG9rZW4sICdtZXRhLnRhZycpICYmICEoaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSAm
JiB0b2tlbi52YWx1ZS5tYXRjaCgnLycpKSl7CisgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKHRva2VuICYmIChoYXNUeXBlKHRva2VuLCAnc3RyaW5nJykgfHwgaGFz
VHlwZSh0b2tlbiwgJ2tleXdvcmQub3BlcmF0b3InKSB8fCBoYXNUeXBlKHRva2VuLCAnZW50aXR5
LmF0dHJpYnV0ZS1uYW1lJykgfHwgaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50YWct
bmFtZScpIHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLnZhbHVlLm1hdGNoKCcvJykpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0YWcg
PSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CisgICAgICAgICAgICAg
ICAgdmFyIHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW4uc3Rh
cnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgdGV4dDogJz4nICsgJzwvJyArIHRhZyArICc+JywKKyAgICAgICAgICAgICAgIHNlbGVjdGlv
bjogWzEsIDFdCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMu
YWRkKCdhdXRvaW5kZW50JywgJ2luc2VydGlvbicsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBl
ZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgeworICAg
ICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAg
ICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAg
ICAgICAgdmFyIHJpZ2h0Q2hhcnMgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJz
b3IuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFycyA9PSAnPC8nKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChzZXNzaW9uLmRvYy5n
ZXRMaW5lKGN1cnNvci5yb3cpKSArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CisgICAgICAgICAg
ICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZG9jLmdldExp
bmUoY3Vyc29yLnJvdykpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCwKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxl
bmd0aF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKKyAgICAKK30KK29vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4
cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9tb2RlL2ZvbGRpbmcvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAn
YWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsICdhY2UvbW9kZS9mb2xkaW5n
L3htbCcsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwor
dmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7Cit2YXIgWG1s
Rm9sZE1vZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwordmFyIENTdHlsZUZvbGRNb2Rl
ID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhwb3J0
cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBu
ZXcgWG1sRm9sZE1vZGUoeworICAgICAgICAiYXJlYSI6IDEsCisgICAgICAgICJiYXNlIjogMSwK
KyAgICAgICAgImJyIjogMSwKKyAgICAgICAgImNvbCI6IDEsCisgICAgICAgICJjb21tYW5kIjog
MSwKKyAgICAgICAgImVtYmVkIjogMSwKKyAgICAgICAgImhyIjogMSwKKyAgICAgICAgImltZyI6
IDEsCisgICAgICAgICJpbnB1dCI6IDEsCisgICAgICAgICJrZXlnZW4iOiAxLAorICAgICAgICAi
bGluayI6IDEsCisgICAgICAgICJtZXRhIjogMSwKKyAgICAgICAgInBhcmFtIjogMSwKKyAgICAg
ICAgInNvdXJjZSI6IDEsCisgICAgICAgICJ0cmFjayI6IDEsCisgICAgICAgICJ3YnIiOiAxLAor
ICAgICAgICAibGkiOiAxLAorICAgICAgICAiZHQiOiAxLAorICAgICAgICAiZGQiOiAxLAorICAg
ICAgICAicCI6IDEsCisgICAgICAgICJydCI6IDEsCisgICAgICAgICJycCI6IDEsCisgICAgICAg
ICJvcHRncm91cCI6IDEsCisgICAgICAgICJvcHRpb24iOiAxLAorICAgICAgICAiY29sZ3JvdXAi
OiAxLAorICAgICAgICAidGQiOiAxLAorICAgICAgICAidGgiOiAxCisgICAgfSksIHsKKyAgICAg
ICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAorICAgICAgICAiY3NzLSI6IG5ldyBDU3R5
bGVGb2xkTW9kZSgpCisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1peGVk
Rm9sZE1vZGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9taXhlZCcs
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21v
ZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCYXNlRm9s
ZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOworCit2YXIgRm9sZE1vZGUg
PSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1Yk1vZGVzKSB7Cisg
ICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOworICAgIHRoaXMuc3ViTW9kZXMgPSBz
dWJNb2RlczsKK307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhm
dW5jdGlvbigpIHsKKworCisgICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9uKHN0YXRlKSB7Cisg
ICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CisgICAgICAgICAgICBpZiAo
c3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1
Yk1vZGVzW2tleV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAg
ICAKKyAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHls
ZSwgcm93KSB7CisgICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzdGF0ZSk7CisgICAg
ICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUs
IHJvdykgOiAiIik7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9u
KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAg
ICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNzaW9uLCBmb2xkU3R5
bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShy
b3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuZGVmYXVs
dE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKKyAgICAgICAgKTsK
KyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9u
LCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vz
c2lvbi5nZXRTdGF0ZShyb3ctMSkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtb2RlIHx8ICFt
b2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQorICAgICAgICAgICAg
bW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHls
ZSwgcm93KSkKKyAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sIGZvbGRTdHls
ZSwgcm93KTsKKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL3htbCcsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9yYW5nZScs
ICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUo
Ii4uLy4uL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsK
K3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZvbGRN
b2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKK3ZhciBUb2tlbkl0ZXJhdG9y
ID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOworCit2YXIg
Rm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzKSB7Cisg
ICAgQmFzZUZvbGRNb2RlLmNhbGwodGhpcyk7CisgICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lk
RWxlbWVudHMgfHwge307Cit9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUp
OworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihz
ZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmly
c3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKKworICAgICAgICBpZiAodGFnLmNsb3NpbmcpCisg
ICAgICAgICAgICByZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiID8gImVuZCIgOiAi
IjsKKworICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRoaXMudm9pZEVsZW1lbnRzW3RhZy50
YWdOYW1lLnRvTG93ZXJDYXNlKCldKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAg
IGlmICh0YWcuc2VsZkNsb3NpbmcpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAg
aWYgKHRhZy52YWx1ZS5pbmRleE9mKCIvIiArIHRhZy50YWdOYW1lKSAhPT0gLTEpCisgICAgICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgfTsKKyAgICAK
KyAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewor
ICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFy
IHZhbHVlID0gIiI7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICBp
ZiAodG9rZW4udHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpID09PSAwKQorICAgICAgICAgICAgICAg
IHZhbHVlICs9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHZhbHVlICs9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgdG9rZW4udmFsdWUubGVuZ3RoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsK
KyAgICB9OworCisgICAgdGhpcy50YWdSZSA9IC9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVowLTk6
IV0qKVxzKihcLz8pPj8pLzsKKyAgICB0aGlzLl9wYXJzZVRhZyA9IGZ1bmN0aW9uKHRhZykgewor
ICAgICAgICAKKyAgICAgICAgdmFyIG1hdGNoID0gdGhpcy50YWdSZS5leGVjKHRhZyk7CisgICAg
ICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhZ1JlLmxhc3RJbmRleCB8fCAwOworICAgICAgICB0aGlz
LnRhZ1JlLmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZh
bHVlOiB0YWcsCisgICAgICAgICAgICBtYXRjaDogbWF0Y2ggPyBtYXRjaFsyXSA6ICIiLAorICAg
ICAgICAgICAgY2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzNdIDogZmFsc2UsCisgICAgICAgICAg
ICBzZWxmQ2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzVdIHx8IG1hdGNoWzJdID09ICIvPiIgOiBm
YWxzZSwKKyAgICAgICAgICAgIHRhZ05hbWU6IG1hdGNoID8gbWF0Y2hbNF0gOiAiIiwKKyAgICAg
ICAgICAgIGNvbHVtbjogbWF0Y2hbMV0gPyBjb2x1bW4gKyBtYXRjaFsxXS5sZW5ndGggOiBjb2x1
bW4KKyAgICAgICAgfTsKKyAgICB9OworICAgIHRoaXMuX3JlYWRUYWdGb3J3YXJkID0gZnVuY3Rp
b24oaXRlcmF0b3IpIHsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgIAorICAgICAgICB2YXIgdmFsdWUgPSAiIjsKKyAgICAgICAgdmFyIHN0YXJ0Owor
ICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhP
ZigibWV0YS50YWciKSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghc3RhcnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgICAgICAgICAg
cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0g
dG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIj4iKSAhPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICAg
ICAgICAgIHRhZy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9y
LmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBp
dGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAorICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9y
d2FyZCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBG
b3J3YXJkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAK
KyAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgeworICAgICAg
ICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgaWYgKCF0
b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgCisgICAgICAgIHZh
ciB2YWx1ZSA9ICIiOworICAgICAgICB2YXIgZW5kOworCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWVuZCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1
bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlICsgdmFsdWU7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKSAhPT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGFnLmVuZCA9IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9r
ZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3Vy
cmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0YWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxl
KHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLl9wb3AgPSBmdW5jdGlvbihzdGFjaywg
dGFnKSB7CisgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdmFyIHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKKyAgICAgICAgICAgIGlm
ICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YWNrLnBvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
dGhpcy52b2lkRWxlbWVudHNbdGFnLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52b2lkRWxlbWVudHNb
dG9wLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0
aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93
KSB7CisgICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Np
b24sIHJvdyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0VGFnLm1hdGNoKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZp
cnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CisgICAgICAgIHZhciBzdGFj
ayA9IFtdOworICAgICAgICB2YXIgdGFnOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0JhY2t3
YXJkKSB7CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNz
aW9uLCByb3csIGZpcnN0VGFnLmNvbHVtbik7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7Cisg
ICAgICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRh
Zy5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQoaXRlcmF0b3IpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0
YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2lu
ZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Y2sucHVzaCh0YWcpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRl
cmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRhZy5tYXRjaC5sZW5n
dGgpOworICAgICAgICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IHJvdywK
KyAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLmNvbHVtbgorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNr
d2FyZChpdGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKCF0YWcuY2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3Rh
Y2ssIHRhZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5s
ZW5ndGggKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2lu
dHModGFnLnN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5w
dXNoKHRhZykKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfamF2
YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVf
amF2YXNjcmlwdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTVlODRkNmQxOTljN2E0NjU3OGE5MTllYWNmNjY0
Zjg0YTk4YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzCkBAIC0wLDAgKzEsODk2IEBACisvKiAqKioq
KiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNE
IGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
CisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworYWNlLmRlZmlu
ZSgnYWNlL21vZGUvamF2YXNjcmlwdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9t
b2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNl
X291dGRlbnQnLCAnYWNlL3JhbmdlJywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2Uv
bW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIu
Li9saWIvb29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFy
IFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBKYXZh
U2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1
bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50
ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRl
bnQ7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIFdvcmtlckNs
aWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owor
dmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHls
ZUJlaGF2aW91cjsKK3ZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5
bGUiKS5Gb2xkTW9kZTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiR0b2tl
bml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoKS5nZXRS
dWxlcygpKTsKKyAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7
CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOworICAgIHRoaXMu
Zm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1v
ZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLnRvZ2dsZUNvbW1l
bnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAg
ICAgdmFyIG91dGRlbnQgPSB0cnVlOworICAgICAgICB2YXIgcmUgPSAvXihccyopXC9cLy87CisK
KyAgICAgICAgZm9yICh2YXIgaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoIXJlLnRlc3QoZG9jLmdldExpbmUoaSkpKSB7CisgICAgICAgICAgICAgICAgb3V0
ZGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG91dGRlbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVS
YW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIGk9c3Rh
cnRSb3c7IGk8PSBlbmRSb3c7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2
YXIgbGluZSA9IGRvYy5nZXRMaW5lKGkpOworICAgICAgICAgICAgICAgIHZhciBtID0gbGluZS5t
YXRjaChyZSk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAg
ICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgICAgICBk
ZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgZG9j
LnJlcGxhY2UoZGVsZXRlUmFuZ2UsIG1bMV0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9jLmluZGVudFJvd3Moc3RhcnRSb3csIGVuZFJv
dywgIi8vIik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVu
dCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFyIGluZGVudCA9IHRo
aXMuJGdldEluZGVudChsaW5lKTsKKworICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMu
JHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgdmFyIHRva2Vu
cyA9IHRva2VuaXplZExpbmUudG9rZW5zOworICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6
ZWRMaW5lLnN0YXRlOworCisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tl
bnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5k
ZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8
fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGxp
bmUubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7CisgICAgICAgICAg
ICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CisgICAgICAg
ICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOworICAgICAgICAgICAgaWYg
KG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CisgICAgICAgICAgICAg
ICAgICAgIGluZGVudCArPSAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluZGVudCArPSAiKiAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGluZGVudDsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihz
dGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tP
dXRkZW50KGxpbmUsIGlucHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1
bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgeworICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRk
ZW50KGRvYywgcm93KTsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVu
Y3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChb
ImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIp
OworICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkp
OworCisgICAgICAgIHdvcmtlci5vbigianNsaW50IiwgZnVuY3Rpb24ocmVzdWx0cykgeworICAg
ICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOworICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gd29ya2VyOworICAgIH07CisKK30pLmNhbGwoTW9kZS5w
cm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGln
aHRfcnVsZXMnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9v
b3AiKTsKK3ZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21t
ZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKK3ZhciBUZXh0
SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhp
Z2hsaWdodFJ1bGVzOworCit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24o
KSB7CisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewor
ICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58
RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8
IiAgKyAvLyBDb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgICJOYW1lc3BhY2V8UU5hbWV8WE1MfFhN
TExpc3R8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8g
RTRYCisgICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJ
bnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCisgICAgICAgICAgICAiVWludDE2
QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAg
ICAgICAgICAgICArCisgICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8
UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgICArIC8vIEVycm9ycwor
ICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgImRlY29kZVVSSXxk
ZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmlu
aXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgICAgICAiaXNOYU58
cGFyc2VGbG9hdHxwYXJzZUludHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArCisgICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCisg
ICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbworICAgICAgICAia2V5d29y
ZCI6CisgICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8IiArCisgICAgICAg
ICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZp
bmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKworICAgICAgICAgICAgImlmfGlufGluc3RhbmNlb2Z8bmV3
fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdn
ZXJ8IiArCisgICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBl
fHdpdGh8X19wcm90b19ffCIgKworICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBl
cnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90
ZWN0ZWR8c3RhdGljIiwKKyAgICAgICAgInN0b3JhZ2UudHlwZSI6CisgICAgICAgICAgICAiY29u
c3R8bGV0fHZhcnxmdW5jdGlvbiIsCisgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CisgICAg
ICAgICAgICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwKKyAgICAgICAgInN1cHBvcnQu
ZnVuY3Rpb24iOgorICAgICAgICAgICAgImFsZXJ0IiwKKyAgICAgICAgImNvbnN0YW50Lmxhbmd1
YWdlLmJvb2xlYW4iOiAidHJ1ZXxmYWxzZSIKKyAgICB9LCAiaWRlbnRpZmllciIpOworICAgIHZh
ciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJu
fHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CisgICAgdmFyIGlkZW50aWZpZXJSZSA9ICJb
YS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSpcXGIi
OworCisgICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBo
ZXgKKyAgICAgICAgInVbMC05YS1mQS1GXXs0fXwiICsgLy8gdW5pY29kZQorICAgICAgICAiWzAt
Ml1bMC03XXswLDJ9fCIgKyAvLyBvY3QKKyAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8gb2N0
CisgICAgICAgICIzN1swLTddP3wiICsgLy8gb2N0CisgICAgICAgICJbNC03XVswLTddP3wiICsg
Ly9vY3QKKyAgICAgICAgIi4pIjsKKworICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3Rh
cnQiIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQi
LAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0
IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8v
IG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAorICAg
ICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIicoPz0u
KSIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4
IDogJyIoPz0uKScsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8v
IGhleAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLzBbeFhdWzAtOWEtZkEtRl0rXGIvCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIs
IC8vIGZsb2F0CisgICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZCsoPzooPzpcLlxkKik/
KD86W2VFXVsrLV0/XGQrKT8pP1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0
aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsImtl
eXdvcmQub3BlcmF0b3IiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdl
eCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVu
dGlmaWVyUmUgKyIpKFxccyopKD0pIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25f
YXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWwor
ICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9y
IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAgICAi
a2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVu
LmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigi
ICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShc
XHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0
aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAi
a2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCisgICAgICAgICAgICAg
ICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShm
dW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2Fy
Z3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAg
ICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIs
ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgImtl
eXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5
cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJl
biIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRl
bnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShm
dW5jdGlvbikoXFxzKykoXFx3KykoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDog
ImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVu
dGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKGZ1bmN0aW9uKShcXHMrKSgiICsgaWRl
bnRpZmllclJlICsgIikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0
aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9y
YWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxc
cyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rp
b25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDog
WworICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0
ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
IHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAg
ICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoi
ICsga3dCZWZvcmVSZSArICIpXFxiIiwKKyAgICAgICAgICAgICAgICBuZXh0IDogInJlZ2V4X2Fs
bG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0
dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6IC8oXC4pKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cp
fEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B6enp6fHJp
a2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzpp
bmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8
TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZ
ZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86
aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8
RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86
b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpj
YXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/
OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0
KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8
TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/
OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJl
fHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVD
b21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZy
ZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkp
fGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpw
fGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRl
fEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6
ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2Fy
ZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8
YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIo
PzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1
cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRv
bSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9u
dGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERh
KD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhv
dXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNl
SGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3Zl
KXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVy
V2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24u
ZG9tIl0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86dWIoPzpzdHJpbmdEYXRh
fG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0
KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNl
fG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFk
fGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/
Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86
Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRp
b24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQo
PzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJ
dGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/
OnNCeSg/Ok5hbWV8VGFnTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89
XCgpLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVh
dGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmNvbnN0YW50Il0sCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAvKFwuKShzKD86eXN0ZW1MYW5ndWFnZXxjcig/OmlwdHN8b2xsYmFyc3xlZW4oPzpYfFl8
VG9wfExlZnQpKXx0KD86eWxlKD86U2hlZXRzKT98YXR1cyg/OlRleHR8YmFyKT8pfGlibGluZyg/
OkJlbG93fEFib3ZlKXxvdXJjZXx1ZmZpeGVzfGUoPzpjdXJpdHkoPzpQb2xpY3kpP3xsKD86ZWN0
aW9ufGYpKSl8aCg/OmlzdG9yeXxvc3QoPzpuYW1lKT98YXMoPzpofEZvY3VzKSl8eXxYKD86TUxE
b2N1bWVudHxTTERvY3VtZW50KXxuKD86ZXh0fGFtZSg/OnNwYWNlKD86c3xVUkkpfFByb3ApKXxN
KD86SU5fVkFMVUV8QVhfVkFMVUUpfGMoPzpoYXJhY3RlclNldHxvKD86big/OnN0cnVjdG9yfHRy
b2xsZXJzKXxva2llRW5hYmxlZHxsb3JEZXB0aHxtcCg/Om9uZW50c3xsZXRlKSl8dXJyZW50fHB1
Q2xhc3N8bCg/OmkoPzpwKD86Ym9hcmREYXRhKT98ZW50SW5mb3JtYXRpb24pfG9zZWR8YXNzZXMp
fGFsbGUoPzplfHIpfHJ5cHRvKXx0KD86byg/Om9sYmFyfHApfGV4dCg/OlRyYW5zZm9ybXxJbmRl
bnR8RGVjb3JhdGlvbnxBbGlnbil8YWdzKXxTUVJUKD86MV8yfDIpfGkoPzpuKD86bmVyKD86SGVp
Z2h0fFdpZHRoKXxwdXQpfGRzfGdub3JlQ2FzZSl8ekluZGV4fG8oPzpzY3B1fG4oPzpyZWFkeXN0
YXRlY2hhbmdlfExpbmUpfHV0ZXIoPzpIZWlnaHR8V2lkdGgpfHAoPzpzUHJvZmlsZXxlbmVyKXxm
ZnNjcmVlbkJ1ZmZlcmluZyl8TkVHQVRJVkVfSU5GSU5JVFl8ZCg/OmkoPzpzcGxheXxhbG9nKD86
SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0fEFyZ3VtZW50cyl8cmVjdG9yaWVzKXxlKD86c2NyaXB0aW9u
fGZhdWx0KD86U3RhdHVzfENoKD86ZWNrZWR8YXJzZXQpfFZpZXcpKSl8dSg/OnNlcig/OlByb2Zp
bGV8TGFuZ3VhZ2V8QWdlbnQpfG4oPzppcXVlSUR8ZGVmaW5lZCl8cGRhdGVJbnRlcnZhbCl8X2Nv
bnRlbnR8cCg/Oml4ZWxEZXB0aHxvcnR8ZXJzb25hbGJhcnxrY3MxMXxsKD86dWdpbnN8YXRmb3Jt
KXxhKD86dGhuYW1lfGRkaW5nKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KXxyZW50KD86V2luZG93
fExheWVyKT98Z2UoPzpYKD86T2Zmc2V0KT98WSg/Ok9mZnNldCk/KSl8cig/Om8oPzp0byg/OmNv
bHx0eXBlKXxkdWN0KD86U3ViKT98bXB0ZXIpfGUoPzp2aW91c3xmaXgpKSl8ZSg/Om4oPzpjb2Rp
bmd8YWJsZWRQbHVnaW4pfHgoPzp0ZXJuYWx8cGFuZG8pfG1iZWRzKXx2KD86aXNpYmlsaXR5fGVu
ZG9yKD86U3ViKT98TGlua2NvbG9yKXxVUkxVbmVuY29kZWR8UCg/Okl8T1NJVElWRV9JTkZJTklU
WSl8Zig/OmlsZW5hbWV8byg/Om50KD86U2l6ZXxGYW1pbHl8V2VpZ2h0KXxybU5hbWUpfHJhbWUo
PzpzfEVsZW1lbnQpfGdDb2xvcil8RXx3aGl0ZVNwYWNlfGwoPzppKD86c3RTdHlsZVR5cGV8big/
OmVIZWlnaHR8a0NvbG9yKSl8byg/OmNhKD86dGlvbig/OmJhcik/fGxOYW1lKXx3c3JjKXxlKD86
bmd0aHxmdCg/OkNvbnRleHQpPyl8YSg/OnN0KD86TSg/Om9kaWZpZWR8YXRjaCl8SW5kZXh8UGFy
ZW4pfHllcig/OnN8WCl8bmd1YWdlKSl8YSg/OnBwKD86TWlub3JWZXJzaW9ufE5hbWV8Q28oPzpk
ZU5hbWV8cmUpfFZlcnNpb24pfHZhaWwoPzpIZWlnaHR8VG9wfFdpZHRofExlZnQpfGxsfHIoPzpp
dHl8Z3VtZW50cyl8TGlua2NvbG9yfGJvdmUpfHIoPzppZ2h0KD86Q29udGV4dCk/fGUoPzpzcG9u
c2UoPzpYTUx8VGV4dCl8YWR5U3RhdGUpKXxnbG9iYWx8eHxtKD86aW1lVHlwZXN8dWx0aWxpbmV8
ZW51YmFyfGFyZ2luKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KSl8TCg/Ok4oPzoxMHwyKXxPRyg/
OjEwRXwyRSkpfGIoPzpvKD86dHRvbXxyZGVyKD86V2lkdGh8UmlnaHRXaWR0aHxCb3R0b21XaWR0
aHxTdHlsZXxDb2xvcnxUb3BXaWR0aHxMZWZ0V2lkdGgpKXx1ZmZlckRlcHRofGVsb3d8YWNrZ3Jv
dW5kKD86Q29sb3J8SW1hZ2UpKSlcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBv
cnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhjb25zb2xl
KShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRpbWVFbmR8YXNzZXJ0KVxiLworICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKKyAgICAg
ICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXJSZQorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJl
Z2V4IDogLy0tfFwrXCt8WyEkJSYqK1wtfl18PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18
Pj4+PXw8Pnw8fD58IXwmJnxcfFx8fFw/XDp8XCo9fCU9fFwrPXxcLT18Jj18XF49LywKKyAgICAg
ICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAg
ICAgICByZWdleCA6IC9cP3xcOnxcLHxcO3xcLi8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAi
cmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8sCisgICAg
ICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAgICAgICAgICAgICAgIHJl
Z2V4IDogL1tcXSl9XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6
ICJrZXl3b3JkLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cLz0/LywKKyAg
ICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCisgICAgICAgICAgICAgICAgcmVnZXg6
IC9eIyEuKiQvCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9hbGxv
d2VkIjogWworICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVs
ZSgiZG9jLXN0YXJ0IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAi
Y29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
IlxcL1xcKiIsCisgICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50X3JlZ2V4X2FsbG93ZWQi
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCisg
ICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCisgICAgICAgICAgICAgICAgcmVn
ZXg6ICJcXC8iLAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIsCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICAgICAgcmVn
ZXggOiAiXFxzKyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImVt
cHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4dDog
InN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXgiOiBbCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVy
YXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhb
XFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
bjogInN0cmluZy5yZWdleHAiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1xcdyoiLAorICAg
ICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgdG9rZW4gOiAiaW52YWxpZCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkKyw/
KD86XGQrKT99WysqXXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KKyAgICAgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAor
ICAgICAgICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfHtcZCssPyg/OlxkKyk/fXx7LFxk
K318WysqXVw/fFsoKSReKyo/XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5kZWxpbWl0ZXIiLAorICAgICAgICAgICAgICAgIHJl
Z2V4OiAvXHwvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25z
dGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAor
ICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLAorICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAiCisgICAg
ICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5v
cGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9
fHhbXFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6
ICJdIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiLAorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAg
ICAgICAgICAgICByZWdleDogIi0iCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
dG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAg
ICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVm
YXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCisgICAgICAgICAgICB9
CisgICAgICAgIF0sCisgICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICBy
ZWdleDogIlssIF0rIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjog
InB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAg
ICAgICAgIHJlZ2V4OiAiIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAg
ICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiIDogWwor
ICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDog
InJlZ2V4X2FsbG93ZWQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9
CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50IiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6
ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJzdGFydCJ9LAorICAgICAgICAg
ICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50In0KKyAgICAgICAgXSwKKyAgICAgICAgInFxc3Ry
aW5nIiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFu
dC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFz
dHJpbmciLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmlu
ZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKKyAgICAgICAgICAgICAgICBuZXh0
ICA6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRv
a2VuOiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicXN0cmlu
ZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQu
bGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAgICAg
ICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJp
bmciLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIs
CisgICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKKyAgICAgICAgICAgICAgICBuZXh0ICA6
ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRva2Vu
OiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIHRoaXMu
ZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKKyAgICAgICAgWyBE
b2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKK307CisKK29v
cC5pbmhlcml0cyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7
CisKK2V4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdo
dFJ1bGVzOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdo
dF9ydWxlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3An
LCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3Zh
ciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiku
VGV4dEhpZ2hsaWdodFJ1bGVzOworCit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gZnVu
Y3Rpb24oKSB7CisKKyAgICB0aGlzLiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsgewor
ICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKKyAgICAgICAgICAgIHJlZ2V4
IDogIkBbXFx3XFxkX10rIiAvLyBUT0RPOiBmaXggZW1haWwgYWRkcmVzc2VzCisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisgICAgICAgICAgICBy
ZWdleCA6ICJcXGJUT0RPXFxiIgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9r
ZW4gOiAiY29tbWVudC5kb2MiCisgICAgICAgIH1dCisgICAgfTsKK307CisKK29vcC5pbmhlcml0
cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK0RvY0Nv
bW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgeworICAg
IHJldHVybiB7CisgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gZG9jIGNvbW1lbnQK
KyAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCisgICAgICAgIG5leHQgIDogc3RhcnQK
KyAgICB9OworfTsKKworRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUgPSBmdW5j
dGlvbiAoc3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRv
YyIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICByZWdleCA6ICJcXCpcXC8iLAorICAgICAg
ICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKKworZXhwb3J0cy5Eb2NDb21tZW50SGlnaGxp
Z2h0UnVsZXMgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVmaW5l
KCdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwordmFy
IE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgewor
CisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAgICAg
ICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0aGlz
LmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBk
b2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9
KS8pOworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBjb2x1
bW4gPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmlu
ZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAgICAg
aWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwor
CisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJy
YWNlUG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3cs
IGNvbHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVu
Y3Rpb24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsK
KyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGluZ0Jy
YWNlT3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0g
TWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZp
b3VyL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvbGli
L2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9v
cCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIu
Li9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4u
Ly4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBsYW5nID0gcmVxdWlyZSgi
Li4vLi4vbGliL2xhbmciKTsKKwordmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CisgICAgWyJ0
ZXh0IiwgInBhcmVuLnJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwordmFyIFNBRkVf
SU5TRVJUX0JFRk9SRV9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVu
Y3R1YXRpb24ub3BlcmF0b3IiLCAiY29tbWVudCJdOworCisKK3ZhciBhdXRvSW5zZXJ0ZWRCcmFj
a2V0cyA9IDA7Cit2YXIgYXV0b0luc2VydGVkUm93ID0gLTE7Cit2YXIgYXV0b0luc2VydGVkTGlu
ZUVuZCA9ICIiOwordmFyIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgbWF5YmVJbnNl
cnRlZFJvdyA9IC0xOwordmFyIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKK3ZhciBtYXli
ZUluc2VydGVkTGluZUVuZCA9ICIiOworCit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24g
KCkgeworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5jdGlv
bihlZGl0b3IsIHNlc3Npb24pIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJz
b3JQb3NpdGlvbigpOworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihz
ZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgaWYgKCF0aGlzLiRt
YXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVf
SU5TRVJUX0lOX1RPS0VOUykpIHsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9r
ZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9r
ZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7
CisgICAgICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29y
LnJvdyB8fAorICAgICAgICAgICAgdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3Vy
cmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKKyAgICB9
OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0
b2tlbiwgdHlwZXMpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8
fCB0b2tlbikgPiAtMTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRB
dXRvSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAg
IHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxp
bmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMu
aXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVuZFsw
XSkpCisgICAgICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIGF1dG9J
bnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBi
cmFja2V0ICsgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIGF1dG9JbnNlcnRl
ZEJyYWNrZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5
YmVJbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAgICAg
dmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgbGlu
ZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhpcy5p
c01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpCisgICAgICAgICAgICBtYXliZUlu
c2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29yLnJv
dzsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNv
ci5jb2x1bW4pICsgYnJhY2tldDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5l
LnN1YnN0cihjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7
CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5n
ID0gZnVuY3Rpb24oY3Vyc29yLCBsaW5lLCBicmFja2V0KSB7CisgICAgICAgIHJldHVybiBhdXRv
SW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1dG9J
bnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGluZUVu
ZFswXSAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1dG9J
bnNlcnRlZExpbmVFbmQ7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNNYXli
ZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkgeworICAgICAgICByZXR1
cm4gbWF5YmVJbnNlcnRlZEJyYWNrZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJvdyA9
PT0gbWF5YmVJbnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNv
bHVtbikgPT09IG1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmCisgICAgICAgICAgICBsaW5lLnN1YnN0
cigwLCBjdXJzb3IuY29sdW1uKSA9PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OworICAgIH07Cisg
ICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgYXV0b0luc2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQu
c3Vic3RyKDEpOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgIH07CisgICAg
CisgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5YmVJ
bnNlcnRlZFJvdyA9IC0xOworICAgIH07CisKKyAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2Vy
dGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsK
KyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAg
ICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlm
ICh0ZXh0ID09ICd7JykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRT
ZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2Mu
Z2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIi
ICYmIHNlbGVjdGVkICE9PSAieyIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDog
J3snICsgc2VsZWN0ZWQgKyAnfScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFs
c2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhh
dmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoL1tcXVx9XCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lv
biwgIn0iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQ6ICd7fScsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsx
LCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChlZGl0
b3IsIHNlc3Npb24sICJ7Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAneycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgeworICAgICAg
ICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNv
ci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9
Jywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAgICAg
ICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRv
SW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAodGV4dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7CisgICAgICAgICAgICB2YXIgY2xv
c2luZyA9ICIiOworICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0
ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpIHsKKyAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFu
Zy5zdHJpbmdSZXBlYXQoIn0iLCBtYXliZUluc2VydGVkQnJhY2tldHMpOworICAgICAgICAgICAg
ICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29y
LmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9
PSAnfScgfHwgY2xvc2luZyAhPT0gIiIpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbkJyYWNl
UG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVt
bjogY3Vyc29yLmNvbHVtbn0sICd9Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJhY2VQ
b3MpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgICAg
IHZhciBpbmRlbnQgPSB0aGlzLmdldE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0cmlu
ZygwLCBjdXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVu
dCArICdcbicgKyBuZXh0X2luZGVudCArIGNsb3NpbmcsCisgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5h
ZGQoImJyYWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdl
dFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBz
ZWxlY3RlZCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0
TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUu
c3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAgICAg
ICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5z
ZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkg
eworICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24g
PSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9
IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNl
bGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcgKyBz
ZWxlY3RlZCArICcpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5p
c1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHls
ZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAorICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKKyAgICAgICAg
ICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAg
IHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29s
dW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAgICAg
ICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtj
b2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2Vy
dGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rp
b24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vz
c2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRp
TGluZSgpICYmIHNlbGVjdGVkID09ICcoJykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNz
aW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRD
aGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQu
Y29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFu
Z2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJi
cmFja2V0cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBz
ZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09ICdbJykgeworICAgICAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAg
dmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAg
ICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0Vu
YWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IHRleHQ6ICdbJyArIHNlbGVjdGVkICsgJ10nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0
eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAg
ICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9u
LCAiXSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICdbXScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICdd
JykgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigp
OworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cp
OworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1
bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10n
KSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdC
cmFja2V0KCddJywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30p
OworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlv
dXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6
ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZh
ciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlm
ICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAg
ICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiAr
IDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9
PSAnXScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9
PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7Cisg
ICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Cisg
ICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICIn
IiAmJiBzZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDog
cXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAg
ICAgICAgICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1u
LTEsIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwn
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9u
LnN0YXJ0LnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOworICAgICAg
ICAgICAgICAgIHZhciBxdW90ZXBvcyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGluc2lk
ZSBhbiBvcGVuIHF1b3RlLgorCisgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0
b2tlbnMubGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNb
eF07CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChxdW90ZXBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBv
cyA9IHRva2VuLnZhbHVlLmluZGV4T2YocXVvdGUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNlbGVj
dGlvbi5zdGFydC5jb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNbeF0u
dmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRv
a2VuIHx8IChxdW90ZXBvcyA8IDAgJiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0b2tl
bi50eXBlICE9PSAic3RyaW5nIiB8fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRva2Vu
LnZhbHVlLmxlbmd0aCtjb2wtMSkgJiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUpID09
PSB0b2tlbi52YWx1ZS5sZW5ndGgtMSkpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNz
dHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IFsxLDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5nIikg
eworICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVs
ZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkg
eworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2Up
OworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8
fCBzZWxlY3RlZCA9PSAiJyIpKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4g
KyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKKyAgICAgICAg
ICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK307CisKK29vcC5pbmhlcml0
cyhDc3R5bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3N0eWxlQmVoYXZpb3Vy
ID0gQ3N0eWxlQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcv
Y3N0eWxlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcs
ICdhY2UvcmFuZ2UnLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xp
Yi9vb3AiKTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIg
QmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKKwordmFyIEZv
bGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Citvb3AuaW5oZXJpdHMo
Rm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuZm9s
ZGluZ1N0YXJ0TWFya2VyID0gLyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87CisgICAgdGhp
cy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLzsK
KworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0
eWxlLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAg
ICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7Cisg
ICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKKwor
ICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9w
ZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0u
bGVuZ3RoLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJtYXJr
YmVnaW5lbmQiKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9IGxp
bmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkgewor
ICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKworICAg
ICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3Np
bmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAgICAg
IHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CisgICAgICAg
IH0KKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVfdGV4dG1h
dGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0
bWF0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mZGY2N2ZhNDExNzBiMWU5M2IzNWM2MmQ1YWJiNDg0MTE2MjFh
MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qICoqKioqIEJFR0lO
IExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5z
ZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAg
ICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
CisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdhY2Uv
dGhlbWUvdGV4dG1hdGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9s
aWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9y
dHMuaXNEYXJrID0gZmFsc2U7CitleHBvcnRzLmNzc0NsYXNzID0gImFjZS10bSI7CitleHBvcnRz
LmNzc1RleHQgPSAiLmFjZS10bSAuYWNlX2d1dHRlciB7XAorYmFja2dyb3VuZDogI2YwZjBmMDtc
Citjb2xvcjogIzMzMztcCit9XAorLmFjZS10bSAuYWNlX3ByaW50LW1hcmdpbiB7XAord2lkdGg6
IDFweDtcCitiYWNrZ3JvdW5kOiAjZThlOGU4O1wKK31cCisuYWNlLXRtIC5hY2VfZm9sZCB7XAor
YmFja2dyb3VuZC1jb2xvcjogIzZCNzJFNjtcCit9XAorLmFjZS10bSAuYWNlX3Njcm9sbGVyIHtc
CitiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKK31cCisuYWNlLXRtIC5hY2VfY3Vyc29yIHtc
Citib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2Vfb3Zlcndy
aXRlLWN1cnNvcnMgLmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0OiAwcHg7XAorYm9yZGVyLWJv
dHRvbTogMXB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtcCitj
b2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RvcmFnZSxcCisu
YWNlLXRtIC5hY2Vfa2V5d29yZCB7XAorY29sb3I6IGJsdWU7XAorfVwKKy5hY2UtdG0gLmFjZV9j
b25zdGFudCB7XAorY29sb3I6IHJnYigxOTcsIDYsIDExKTtcCit9XAorLmFjZS10bSAuYWNlX2Nv
bnN0YW50LmFjZV9idWlsZGluIHtcCitjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCit9XAorLmFj
ZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XAorY29sb3I6IHJnYig4OCwgOTIsIDI0
Nik7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XAorY29sb3I6IHJn
Yig2LCAxNTAsIDE0KTtcCit9XAorLmFjZS10bSAuYWNlX2ludmFsaWQge1wKK2JhY2tncm91bmQt
Y29sb3I6IHJnYmEoMjU1LCAwLCAwLCAwLjEpO1wKK2NvbG9yOiByZWQ7XAorfVwKKy5hY2UtdG0g
LmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XAorY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAor
fVwKKy5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XAorY29sb3I6IHJnYig2LCAx
NTAsIDE0KTtcCit9XAorLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsXAorLmFjZS10bSAu
YWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtcCitjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wKK31c
CisuYWNlLXRtIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKK2NvbG9yOiByZ2IoMTA0LCAx
MTgsIDEzNSk7XAorfVwKKy5hY2UtdG0gLmFjZV9zdHJpbmcge1wKK2NvbG9yOiByZ2IoMywgMTA2
LCA3KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQge1wKK2NvbG9yOiByZ2IoNzYsIDEzNiwg
MTA3KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XAorY29sb3I6IHJnYigw
LCAxMDIsIDI1NSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7
XAorY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0YW50
LmFjZV9udW1lcmljIHtcCitjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAorfVwKKy5hY2UtdG0gLmFj
ZV92YXJpYWJsZSB7XAorY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKK31cCisuYWNlLXRtIC5h
Y2VfeG1sLXBlIHtcCitjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAorfVwKKy5hY2UtdG0gLmFj
ZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHtcCitjb2xvcjogIzAwMDBBMjtcCit9XAor
LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7XAorY29sb3I6IHJnYigxMiwgNywgMjU1
KTtcCit9XAorLmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7XAorY29sb3I6cmdiKDE4NSwg
NiwgMTQ0KTtcCit9XAorLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XAorY29sb3I6cmdiKDAs
IDIyLCAxNDIpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XAorY29sb3I6
IHJnYigyNTUsIDAsIDApXAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxl
Y3Rpb24ge1wKK2JhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCit9XAorLmFjZS10bS5h
Y2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCitib3gtc2hhZG93OiAw
IDAgM3B4IDBweCB3aGl0ZTtcCitib3JkZXItcmFkaXVzOiAycHg7XAorfVwKKy5hY2UtdG0gLmFj
ZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDAp
O1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKK2JhY2tncm91
bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAu
YWNlX2JyYWNrZXQge1wKK21hcmdpbjogLTFweCAwIDAgLTFweDtcCitib3JkZXI6IDFweCBzb2xp
ZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFj
ZV9hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCit9XAor
LmFjZS10bSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZC1jb2xvciA6ICNk
Y2RjZGM7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3Jk
IHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XAorYm9yZGVyOiAxcHggc29saWQg
cmdiKDIwMCwgMjAwLCAyNTApO1wKK31cCisuYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtcCiti
YWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndB
bVZnZDEvdzExL2dBQUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAorfVwKKyI7
CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Citkb20uaW1wb3J0Q3NzU3RyaW5n
KGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cit9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAppbmRleCBlNDFlZTQxMTM1ZTAwZmY3NDBlYjYzZjUyYTY0NTNiMGMzMTA4MzQ3
Li4xMDVhOTJjNTg5OWFjODAyZjg2M2FhMmFhNjUzM2YwZDdiNTllNzc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCkBAIC04NDcsNiArODQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xz
X2F1ZGl0c19qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNh
dGVuYXRlZF9kZXZ0b29sc19jb2RlbWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFw
c2hvdF93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdj
b25jYXRlbmF0ZWRfc2NyaXB0X2Zvcm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05
MzUsNiArOTM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29u
Y2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0c19qcycsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19jb2Rl
bWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0
ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93b3JrZXJfanMnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfc2NyaXB0X2Zv
cm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05NTIsNiArOTU0LDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rv
ci9Qcm9maWxlc1BhbmVsLmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9E
VUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvQ29k
ZU1pcnJvclRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBS
T0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0FjZVRleHRFZGl0b3IuanMnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9y
L0hlYXBTbmFwc2hvdFdvcmtlci5qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2Vz
L2luc3BlY3Rvci9kZXZUb29scy5jc3MnLApAQCAtMTE4OCw2ICsxMTkxLDIyIEBACiAgICAgICAg
ICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29uY2F0ZW5hdGVkX2RldnRvb2xz
X2FjZV9lZGl0b3JfanMnLAorICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKKyAg
ICAgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAgICAgICAgICAgICAgICAg
J2FjdGlvbl9uYW1lJzogJ2NvbmNhdGVuYXRlX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ3NjcmlwdF9uYW1lJzogJ3NjcmlwdHMvaW5saW5lX2pzX2lt
cG9ydHMucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0X2ZpbGUnOiAnLi4vLi4v
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
PEAoX3NjcmlwdF9uYW1lKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHdlYmlu
c3BlY3Rvcl9hY2VfZWRpdG9yX2pzX2ZpbGVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9wYXRoJzogJy4uLy4uL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6
IFsnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BY2VUZXh0RWRpdG9yLmpzJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWydweXRob24nLCAnPEAoX3Njcmlw
dF9uYW1lKScsICc8QChfaW5wdXRfZmlsZSknLCAnPEAoX3NlYXJjaF9wYXRoKScsICc8QChfb3V0
cHV0cyknLCAndHJ1ZSddLAorICAgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1l
JzogJ2NvbmNhdGVuYXRlZF9oZWFwX3NuYXBzaG90X3dvcmtlcl9qcycsCiAgICAgICAgICAgICAg
ICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191176</attachid>
            <date>2013-03-04 01:48:54 -0800</date>
            <delta_ts>2013-03-04 03:47:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111191-20130304134501.patch</filename>
            <type>text/plain</type>
            <size>700306</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkwMzkxMjQxNWM5ZjMw
YzhjMzA4YTkwMDcyZWVjNGNlZWE1MDU3MC4uNjM4Nzc0N2ZhYWQyMTJkNGRiMTM1ZTFkYTM3NjYx
NzI4ZmJjYjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTAxICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhZGQgQWNlIGVkaXRvciBleHBlcmltZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkIEFj
ZSB0ZXh0IGVkaXRvciBleHBlcmltZW50LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qczogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeHBlcmltZW50c1NldHRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzczogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanM6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qczogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qczogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvTElDRU5TRS50eHQ6IEFkZGVkLgorCiAy
MDEzLTAzLTA0ICBBbmRyZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgcnVudGltZSBmbGFnIHRvIGRldGVybWluZSBpZiBp
bnNwZWN0b3IncyBzb3VyY2UgZmlsZXMgd2VyZSBmbGF0dGVuZWQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDdiYjg3MWI5YzNkZGYwMzUzYzA2MjAxYTA0NDhhODJkOTA1MDliMGEuLjcz
NWIyMGY2NjNkOTg5Nzg2NjRhYWFlMTQyZjExZjcxMTU2MzhhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMDEgIEFuZHJleSBMdXNobmlrb3Yg
IDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBB
Y2UgZWRpdG9yIGV4cGVyaW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMTE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCB0YXJnZXQgdG8gY29uY2F0ZW5hdGUganMgZmlsZXMgZm9yIEFjZSBU
ZXh0IEVkaXRvci4KKworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTMtMDMtMDQgIEFuZHJl
eSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGFkZCBydW50aW1lIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIGluc3BlY3RvcidzIHNvdXJj
ZSBmaWxlcyB3ZXJlIGZsYXR0ZW5lZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1MzEyMWRmMGFlMjY4
NDIzMTdkYWE5ZTQ3YzIyMTJiYjE0MWMwNzM1Li5hNzFmZTQ3NGZhMzc0YzI1NDE5MmRlNDI5ZjYx
ODQ3NjgyYTBhMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NDM0LDYgKzU0MzQsMTEgQEAKICAg
ICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3Jfc3RhbmRhbG9uZV9maWxlcyknLAogICAgICAgICBd
LAogICAgICAgICAnd2ViaW5zcGVjdG9yX3N0YW5kYWxvbmVfZmlsZXMnOiBbCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2dG9vbHMuY3NzJywKKyAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcycsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2phdmFzY3JpcHQuanMnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvYWNlL3RoZW1lX3RleHRtYXRlLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL2F1ZGl0c1BhbmVsLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9icmVhZGNydW1iTGlzdC5jc3MnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvYnVpbGRTeXN0ZW1Pbmx5LmpzJywKQEAgLTU1NjYsNiArNTU3MSwxMSBAQAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvY20veG1sLmpzJywKICAgICAgICAgXSwKIAor
ICAgICAgICAnd2ViaW5zcGVjdG9yX2FjZV9lZGl0b3JfanNfZmlsZXMnOiBbCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMnLAorICAgICAgICBdLAorCiAgICAgICAgICd3
ZWJpbnNwZWN0b3JfbW9kdWxlc19qc19maWxlcyc6IFsKICAgICAgICAgICAgICc8QCh3ZWJpbnNw
ZWN0b3JfZWxlbWVudHNfanNfZmlsZXMpJywKICAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3Jf
cmVzb3VyY2VzX2pzX2ZpbGVzKScsCkBAIC01NTc1LDYgKzU1ODUsNyBAQAogICAgICAgICAgICAg
JzxAKHdlYmluc3BlY3Rvcl9wcm9maWxlc19qc19maWxlcyknLAogICAgICAgICAgICAgJzxAKHdl
Ymluc3BlY3Rvcl9hdWRpdHNfanNfZmlsZXMpJywKICAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0
b3JfY29kZW1pcnJvcl9qc19maWxlcyknLAorICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rvcl9h
Y2VfZWRpdG9yX2pzX2ZpbGVzKScsCiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJpbnNwZWN0b3Jf
dWdsaWZ5anNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9VZ2xp
ZnlKUy9wYXJzZS1qcy5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0FjZVRleHRFZGl0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1NDIyZWY3MzYyZDk4ZjEyZmJi
NjgyZTE4NDNmZDRiMjg1YTZmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcwpAQCAtMCwwICsxLDM3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbXBvcnRT
Y3JpcHQoImFjZS9hY2UuanMiKTsKKworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5WaWV3fQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UZXh0
RWRpdG9yfQorICogQHBhcmFtIHs/c3RyaW5nfSB1cmwKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JEZWxlZ2F0ZX0gZGVsZWdhdGUKKyAqLworCitXZWJJbnNwZWN0b3IuQWNlVGV4
dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCit7CisgICAgV2ViSW5zcGVjdG9yLlZp
ZXcuY2FsbCh0aGlzKTsKKyAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIHRoaXMu
X3VybCA9IHVybDsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZS1lZGl0b3ItY29u
dGFpbmVyIjsKKworICAgIHZhciBwcmVmaXggPSB3aW5kb3cuZmxhdHRlbkltcG9ydHMgPyAiIiA6
ICJhY2UvIjsKKyAgICBhY2UuY29uZmlnLnNldE1vZHVsZVVybCgiYWNlL21vZGUvamF2YXNjcmlw
dCIsIHByZWZpeCArICJtb2RlX2phdmFzY3JpcHQuanMiKTsKKyAgICBhY2UuY29uZmlnLnNldE1v
ZHVsZVVybCgiYWNlL21vZGUvamF2YXNjcmlwdCIsIHByZWZpeCArICJtb2RlX2Nzcy5qcyIpOwor
ICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4
ICsgIm1vZGVfaHRtbC5qcyIpOworICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvdGhl
bWUvdGV4dG1hdGUiLCBwcmVmaXggKyAidGhlbWVfdGV4dG1hdGUuanMiKTsKKyAgICB0aGlzLl9h
Y2VFZGl0b3IgPSB3aW5kb3cuYWNlLmVkaXQodGhpcy5lbGVtZW50KTsKKworICAgIHRoaXMuX2Fj
ZUVkaXRvci5zZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOworICAgIHRoaXMuX2FjZUVkaXRvci5v
bigiZ3V0dGVyY2xpY2siLCB0aGlzLl9ndXR0ZXJDbGljay5iaW5kKHRoaXMpKTsKKyAgICB0aGlz
Ll9hY2VFZGl0b3Iub24oImNoYW5nZSIsIHRoaXMuX29uVGV4dENoYW5nZS5iaW5kKHRoaXMpKTsK
KyAgICB0aGlzLl9hY2VFZGl0b3Iuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7CisgICAg
dGhpcy5fYWNlRWRpdG9yLnNlc3Npb24uc2V0VXNlV29ya2VyKGZhbHNlKTsKKyAgICB0aGlzLnJl
Z2lzdGVyUmVxdWlyZWRDU1MoImFjZS9hY2VkZXZ0b29scy5jc3MiKTsKK30KKworV2ViSW5zcGVj
dG9yLkFjZVRleHRFZGl0b3IucHJvdG90eXBlID0geworCisgICAgX29uVGV4dENoYW5nZTogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2Vk
KG51bGwsIG51bGwpOworICAgIH0sCisKKyAgICBfZ3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChldmVudC5kb21FdmVu
dC50YXJnZXQudGV4dENvbnRlbnQpIC0gMTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNrLCB7IGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsIGV2ZW50OiBldmVudC5kb21FdmVudCB9KTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCisgICAgICovCisgICAg
c2V0IG1pbWVUeXBlKG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoKG1pbWVUeXBlKSB7
CisgICAgICAgIGNhc2UgInRleHQvaHRtbCI6CisgICAgICAgICAgICB0aGlzLl9hY2VFZGl0b3Iu
Z2V0U2Vzc2lvbigpLnNldE1vZGUoImFjZS9tb2RlL2h0bWwiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJ0ZXh0L2NzcyI6CisgICAgICAgICAgICB0aGlzLl9hY2VFZGl0b3Iu
Z2V0U2Vzc2lvbigpLnNldE1vZGUoImFjZS9tb2RlL2NzcyIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgInRleHQvamF2YXNjcmlwdCI6CisgICAgICAgICAgICB0aGlzLl9hY2VF
ZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoImFjZS9tb2RlL2phdmFzY3JpcHQiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gcmVhZE9ubHkKKyAgICAgKi8KKyAgICBzZXRSZWFkT25seTogZnVuY3Rpb24o
cmVhZE9ubHkpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2V0UmVhZE9ubHkocmVh
ZE9ubHkpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAg
ICAqLworICAgIHJlYWRPbmx5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fYWNlRWRpdG9yLmdldFJlYWRPbmx5KCk7CisgICAgfSwKKworICAgIGZvY3VzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZm9jdXMoKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHJldHVybiB7RWxlbWVudH0KKyAgICAgKi8KKyAgICBkZWZhdWx0Rm9j
dXNlZEVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnQuZmlyc3RDaGlsZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9
IHJlZ2V4CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCisgICAgICogQHJldHVybiB7
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0KKyAg
ICAgKi8KKyAgICBoaWdobGlnaHRSZWdleDogZnVuY3Rpb24ocmVnZXgsIGNzc0NsYXNzKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRSZWdleCBub3QgaW1w
bGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcworICAg
ICAqLworICAgIGhpZ2hsaWdodFJhbmdlOiBmdW5jdGlvbihyYW5nZSwgY3NzQ2xhc3MpCisgICAg
eworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodFJhbmdlIG5vdCBpbXBs
ZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsLkhpZ2hsaWdodERlc2NyaXB0b3J9IGhpZ2hsaWdodERlc2Ny
aXB0b3IKKyAgICAgKi8KKyAgICByZW1vdmVIaWdobGlnaHQ6IGZ1bmN0aW9uKGhpZ2hsaWdodERl
c2NyaXB0b3IpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnJlbW92ZUhp
Z2hsaWdodCBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICByZXZlYWxMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKSB7CisgICAgICAgIHRoaXMuX2FjZUVkaXRvci5zY3JvbGxUb0xpbmUobGlu
ZU51bWJlciwgZmFsc2UsIHRydWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQKKyAg
ICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbmRpdGlvbmFsCisgICAgICovCisgICAgYWRkQnJlYWtw
b2ludDogZnVuY3Rpb24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQorICAgIHsK
KyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRCcmVha3BvaW50KGxpbmVO
dW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIHJlbW92ZUJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0
U2Vzc2lvbigpLmNsZWFyQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzZXRFeGVj
dXRpb25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5s
b2coImFjZUVkaXRvci5zZXRFeGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdl
CisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIGNvcHlSYW5nZTogZnVuY3Rp
b24ocmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNvcHlSYW5n
ZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0sCisKKyAgICBj
bGVhckV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9n
KCJhY2VFZGl0b3IuY2xlYXJFeGVjdXRpb25MaW5lIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBw
YXJhbSB7RWxlbWVudH0gZWxlbWVudAorICAgICAqLworICAgIGFkZERlY29yYXRpb246IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGVsZW1lbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNl
RWRpdG9yLmFkZERlY29yYXRpb24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtFbGVt
ZW50fSBlbGVtZW50CisgICAgICovCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGlu
ZU51bWJlciwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iu
cmVtb3ZlRGVjb3JhdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqLworICAg
IG1hcmtBbmRSZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBjb25z
b2xlLmxvZygiYWNlRWRpdG9yLm1hcmtBbmRSZXZlYWxSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAg
ICAgKi8KKyAgICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRMaW5lIG5vdCBpbXBsZW1lbnRl
ZCIpOworICAgIH0sCisKKyAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNsZWFyTGluZUhpZ2hsaWdodCBub3QgaW1wbGVt
ZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1l
bnQ+fQorICAgICAqLworICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gW107CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3J9IHRleHRFZGl0b3IKKyAgICAg
Ki8KKyAgICBpbmhlcml0U2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25z
IG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9u
KCkgeyB9LAorCisgICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKSB7IH0sCisKKyAgICBvblJlc2l6
ZTogZnVuY3Rpb24oKSB7IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQorICAgICAqLworICAgIGVkaXRSYW5nZTog
ZnVuY3Rpb24ocmFuZ2UsIHRleHQpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLmVkaXRSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8KKyAgICBzY3JvbGxUb0xpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2Ny
b2xsVG9MaW5lKGxpbmVOdW1iZXIsIGZhbHNlLCB0cnVlKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KKyAgICAgKi8KKyAgICBzZWxl
Y3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iu
c2VsZWN0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlP30KKyAgICAgKi8KKyAgICBsYXN0U2VsZWN0
aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmxh
c3RTZWxlY3Rpb24gbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gdGV4dFJhbmdlCisgICAgICovCisgICAg
c2V0U2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCisgICAgeworICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLnNldFNlbGVjdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAgKi8KKyAgICBzZXRU
ZXh0OiBmdW5jdGlvbih0ZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fYWNlRWRpdG9yLmdldFNl
c3Npb24oKS5zZXRWYWx1ZSh0ZXh0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7c3RyaW5nfQorICAgICAqLworICAgIHRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAg
ICovCisgICAgcmFuZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJh
Y2VFZGl0b3IucmFuZ2Ugbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7c3RyaW5nfQor
ICAgICAqLworICAgIGxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fYWNlRWRpdG9yLmdldFNlc3Npb24oKS5nZXRMaW5lKGxpbmVOdW1iZXIpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAg
Z2V0IGxpbmVzQ291bnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vz
c2lvbigpLmdldExlbmd0aCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHBhcmFtIHtP
YmplY3Q/fSB2YWx1ZQorICAgICAqLworICAgIHNldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwg
bmFtZSwgdmFsdWUpCisgICAgeworICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnNldEF0
dHJpYnV0ZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBy
ZXR1cm4ge09iamVjdHxudWxsfSB2YWx1ZQorICAgICAqLworICAgIGdldEF0dHJpYnV0ZTogZnVu
Y3Rpb24obGluZSwgbmFtZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iu
Z2V0QXR0cmlidXRlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAg
ICovCisgICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lKQorICAgIHsKKyAg
ICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5yZW1vdmVBdHRyaWJ1dGUgbm90IGltcGxlbWVu
dGVkIik7CisgICAgfSwKKworICAgIHdhc1Nob3duOiBmdW5jdGlvbigpIHsgfSwKKworICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBhZDY5ODVkYTMyNmViMTcw
NTEyZTgxM2Q3NDY4ZTA3NWNhNGJlNjRlLi5jNjk0Yjg5ODgyMzk3OGYwZTdlYWY4NjI3YzBhOGEy
MjQ0ZmQ2ZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NldHRpbmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKQEAgLTIxMCw2ICsyMTAsNyBAQCBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0
aW5ncyA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNhbnZhc0luc3BlY3Rpb24gPSB0aGlzLl9jcmVh
dGVFeHBlcmltZW50KCJjYW52YXNJbnNwZWN0aW9uICIsICJDYW52YXMgaW5zcGVjdGlvbiIpOwog
ICAgIHRoaXMuc2FzcyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoInNhc3MiLCAiU3VwcG9ydCBm
b3IgU2FzcyIpOwogICAgIHRoaXMuY29kZW1pcnJvciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQo
ImNvZGVtaXJyb3IiLCAiVXNlIENvZGVNaXJyb3IgZWRpdG9yIik7CisgICAgdGhpcy5hY2VUZXh0
RWRpdG9yID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgiYWNlVGV4dEVkaXRvciIsICJVc2UgQWNl
IGVkaXRvciIpOwogICAgIHRoaXMuY3NzUmVnaW9ucyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQo
ImNzc1JlZ2lvbnMiLCAiQ1NTIFJlZ2lvbnMgU3VwcG9ydCIpOwogICAgIHRoaXMuc2hvd092ZXJy
aWRlc0luRHJhd2VyID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgic2hvd092ZXJyaWRlc0luRHJh
d2VyIiwgIlNob3cgT3ZlcnJpZGVzIGluIGRyYXdlciIpOwogICAgIHRoaXMuZmlsZVN5c3RlbVBy
b2plY3QgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJmaWxlU3lzdGVtUHJvamVjdCIsICJGaWxl
IHN5c3RlbSBmb2xkZXJzIGluIFNvdXJjZXMgUGFuZWwiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IGY5NmYyNzczNTI3YjU0
ZDdhY2YyZmE5ZDJiN2ZjMTZjZDdlNjNkN2IuLjIxYjU0ZTI3NjE3YWZkNzE2ZTZmYTU1NTNmMzNm
YjI1MjYwZDFkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNDYsNiArNDYsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUgPSBmdW5jdGlvbihjb250ZW50UHJvdmlkZXIpCiAgICAgaWYgKFdlYkluc3BlY3Rvci5leHBl
cmltZW50c1NldHRpbmdzLmNvZGVtaXJyb3IuaXNFbmFibGVkKCkpIHsKICAgICAgICAgbG9hZFNj
cmlwdCgiQ29kZU1pcnJvclRleHRFZGl0b3IuanMiKTsKICAgICAgICAgdGhpcy5fdGV4dEVkaXRv
ciA9IG5ldyBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0
RWRpdG9yRGVsZWdhdGUpOworICAgIH0gZWxzZSBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRz
U2V0dGluZ3MuYWNlVGV4dEVkaXRvci5pc0VuYWJsZWQoKSkgeworICAgICAgICBsb2FkU2NyaXB0
KCJBY2VUZXh0RWRpdG9yLmpzIik7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2Vi
SW5zcGVjdG9yLkFjZVRleHRFZGl0b3IodGhpcy5fdXJsLCB0ZXh0RWRpdG9yRGVsZWdhdGUpOwog
ICAgIH0gZWxzZQogICAgICAgICB0aGlzLl90ZXh0RWRpdG9yID0gbmV3IFdlYkluc3BlY3Rvci5E
ZWZhdWx0VGV4dEVkaXRvcih0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL0xJQ0VOU0UudHh0
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvTElDRU5TRS50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDc2MGJlMmE2MjIwY2Y1NDUxMjliMjMzZTIwNTc0ZjJhN2JiNjMwZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL0xJQ0VO
U0UudHh0CkBAIC0wLDAgKzEsMjQgQEAKK0NvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5W
LgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcg
Qi5WLiBub3IgdGhlCisgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBG
T1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE5ZDFiMDAzOWYzMjEzZGY1ZWIxNjA2NDRjMGU2NGI4YTg3MGYxNzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMKQEAg
LTAsMCArMSwxNDQ2OCBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCwgQWpheC5vcmcgQi5WLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3Ig
dGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYu
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJM
T0NLICoqKioqICovCisKKyhmdW5jdGlvbigpIHsKKwordmFyIEFDRV9OQU1FU1BBQ0UgPSAiYWNl
IjsKKwordmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpczsKK30pKCk7
CisKKworaWYgKCFBQ0VfTkFNRVNQQUNFICYmIHR5cGVvZiByZXF1aXJlanMgIT09ICJ1bmRlZmlu
ZWQiKQorICAgIHJldHVybjsKKworCit2YXIgX2RlZmluZSA9IGZ1bmN0aW9uKG1vZHVsZSwgZGVw
cywgcGF5bG9hZCkgeworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAnc3RyaW5nJykgeworICAg
ICAgICBpZiAoX2RlZmluZS5vcmlnaW5hbCkKKyAgICAgICAgICAgIF9kZWZpbmUub3JpZ2luYWwu
YXBwbHkod2luZG93LCBhcmd1bWVudHMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoJ2Ryb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuXCd0IGEgc3Ry
aW5nLicpOworICAgICAgICAgICAgY29uc29sZS50cmFjZSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKQorICAgICAg
ICBwYXlsb2FkID0gZGVwczsKKworICAgIGlmICghX2RlZmluZS5tb2R1bGVzKQorICAgICAgICBf
ZGVmaW5lLm1vZHVsZXMgPSB7fTsKKworICAgIF9kZWZpbmUubW9kdWxlc1ttb2R1bGVdID0gcGF5
bG9hZDsKK307Cit2YXIgX3JlcXVpcmUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlLCBjYWxs
YmFjaykgeworICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobW9kdWxlKSA9
PT0gIltvYmplY3QgQXJyYXldIikgeworICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gbW9kdWxlLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAg
ICAgICAgdmFyIGRlcCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlW2ldKTsKKyAgICAgICAgICAg
IGlmICghZGVwICYmIF9yZXF1aXJlLm9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHJldHVybiBf
cmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBw
YXJhbXMucHVzaChkZXApOworICAgICAgICB9CisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAg
ICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnc3RyaW5nJykgeworICAgICAgICB2YXIg
cGF5bG9hZCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlKTsKKyAgICAgICAgaWYgKCFwYXlsb2Fk
ICYmIF9yZXF1aXJlLm9yaWdpbmFsKQorICAgICAgICAgICAgcmV0dXJuIF9yZXF1aXJlLm9yaWdp
bmFsLmFwcGx5KHdpbmRvdywgYXJndW1lbnRzKTsKKworICAgICAgICBpZiAoY2FsbGJhY2spIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGF5
bG9hZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfcmVxdWlyZS5vcmlnaW5hbCkK
KyAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3Vt
ZW50cyk7CisgICAgfQorfTsKKwordmFyIG5vcm1hbGl6ZU1vZHVsZSA9IGZ1bmN0aW9uKHBhcmVu
dElkLCBtb2R1bGVOYW1lKSB7CisgICAgaWYgKG1vZHVsZU5hbWUuaW5kZXhPZigiISIpICE9PSAt
MSkgeworICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOworICAgICAg
ICByZXR1cm4gbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgbm9y
bWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMV0pOworICAgIH0KKyAgICBpZiAobW9kdWxl
TmFtZS5jaGFyQXQoMCkgPT0gIi4iKSB7CisgICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3Bs
aXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOworICAgICAgICBtb2R1bGVOYW1lID0gYmFz
ZSArICIvIiArIG1vZHVsZU5hbWU7CisKKyAgICAgICAgd2hpbGUobW9kdWxlTmFtZS5pbmRleE9m
KCIuIikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUpIHsKKyAgICAgICAgICAgIHZh
ciBwcmV2aW91cyA9IG1vZHVsZU5hbWU7CisgICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxl
TmFtZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1vZHVsZU5hbWU7Cit9OwordmFyIGxv
b2t1cCA9IGZ1bmN0aW9uKHBhcmVudElkLCBtb2R1bGVOYW1lKSB7CisKKyAgICBtb2R1bGVOYW1l
ID0gbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBtb2R1bGVOYW1lKTsKKworICAgIHZhciBtb2R1
bGUgPSBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV07CisgICAgaWYgKCFtb2R1bGUpIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdm
dW5jdGlvbicpIHsKKyAgICAgICAgdmFyIGV4cG9ydHMgPSB7fTsKKyAgICAgICAgdmFyIG1vZCA9
IHsKKyAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLAorICAgICAgICAgICAgdXJpOiAnJywKKyAg
ICAgICAgICAgIGV4cG9ydHM6IGV4cG9ydHMsCisgICAgICAgICAgICBwYWNrYWdlZDogdHJ1ZQor
ICAgICAgICB9OworCisgICAgICAgIHZhciByZXEgPSBmdW5jdGlvbihtb2R1bGUsIGNhbGxiYWNr
KSB7CisgICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUobW9kdWxlTmFtZSwgbW9kdWxlLCBjYWxs
YmFjayk7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIHJldHVyblZhbHVlID0gbW9kdWxlKHJl
cSwgZXhwb3J0cywgbW9kKTsKKyAgICAgICAgZXhwb3J0cyA9IHJldHVyblZhbHVlIHx8IG1vZC5l
eHBvcnRzOworICAgICAgICBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBleHBvcnRzOwor
ICAgICAgICByZXR1cm4gZXhwb3J0czsKKyAgICB9CisKKyAgICByZXR1cm4gbW9kdWxlOworfTsK
KworZnVuY3Rpb24gZXhwb3J0QWNlKG5zKSB7CisgICAgdmFyIHJlcXVpcmUgPSBmdW5jdGlvbiht
b2R1bGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiBfcmVxdWlyZSgiIiwgbW9kdWxlLCBj
YWxsYmFjayk7CisgICAgfTsgICAgCisKKyAgICB2YXIgcm9vdCA9IGdsb2JhbDsKKyAgICBpZiAo
bnMpIHsKKyAgICAgICAgaWYgKCFnbG9iYWxbbnNdKQorICAgICAgICAgICAgZ2xvYmFsW25zXSA9
IHt9OworICAgICAgICByb290ID0gZ2xvYmFsW25zXTsKKyAgICB9CisKKyAgICBpZiAoIXJvb3Qu
ZGVmaW5lIHx8ICFyb290LmRlZmluZS5wYWNrYWdlZCkgeworICAgICAgICBfZGVmaW5lLm9yaWdp
bmFsID0gcm9vdC5kZWZpbmU7CisgICAgICAgIHJvb3QuZGVmaW5lID0gX2RlZmluZTsKKyAgICAg
ICAgcm9vdC5kZWZpbmUucGFja2FnZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghcm9vdC5y
ZXF1aXJlIHx8ICFyb290LnJlcXVpcmUucGFja2FnZWQpIHsKKyAgICAgICAgX3JlcXVpcmUub3Jp
Z2luYWwgPSByb290LnJlcXVpcmU7CisgICAgICAgIHJvb3QucmVxdWlyZSA9IHJlcXVpcmU7Cisg
ICAgICAgIHJvb3QucmVxdWlyZS5wYWNrYWdlZCA9IHRydWU7CisgICAgfQorfQorCitleHBvcnRB
Y2UoQUNFX05BTUVTUEFDRSk7CisKK30pKCk7CisKK2FjZS5kZWZpbmUoJ2FjZS9hY2UnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZml4b2xkYnJvd3NlcnMnLCAn
YWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvZWRpdG9yJywgJ2FjZS9lZGl0X3Nl
c3Npb24nLCAnYWNlL3VuZG9tYW5hZ2VyJywgJ2FjZS92aXJ0dWFsX3JlbmRlcmVyJywgJ2FjZS9t
dWx0aV9zZWxlY3QnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2FjZS9rZXlib2FyZC9o
YXNoX2hhbmRsZXInLCAnYWNlL3BsYWNlaG9sZGVyJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9t
b2RlJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CisKKworcmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsKKwordmFyIGRvbSA9IHJlcXVp
cmUoIi4vbGliL2RvbSIpOwordmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKKwor
dmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwordmFyIEVkaXRTZXNzaW9u
ID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKK3ZhciBVbmRvTWFuYWdl
ciA9IHJlcXVpcmUoIi4vdW5kb21hbmFnZXIiKS5VbmRvTWFuYWdlcjsKK3ZhciBSZW5kZXJlciA9
IHJlcXVpcmUoIi4vdmlydHVhbF9yZW5kZXJlciIpLlZpcnR1YWxSZW5kZXJlcjsKK3ZhciBNdWx0
aVNlbGVjdCA9IHJlcXVpcmUoIi4vbXVsdGlfc2VsZWN0IikuTXVsdGlTZWxlY3Q7CityZXF1aXJl
KCIuL3dvcmtlci93b3JrZXJfY2xpZW50Iik7CityZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFu
ZGxlciIpOworcmVxdWlyZSgiLi9wbGFjZWhvbGRlciIpOworcmVxdWlyZSgiLi9tb2RlL2ZvbGRp
bmcvZm9sZF9tb2RlIik7CitleHBvcnRzLmNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Citl
eHBvcnRzLnJlcXVpcmUgPSByZXF1aXJlOworZXhwb3J0cy5lZGl0ID0gZnVuY3Rpb24oZWwpIHsK
KyAgICBpZiAodHlwZW9mKGVsKSA9PSAic3RyaW5nIikgeworICAgICAgICB2YXIgX2lkID0gZWw7
CisgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9pZCk7CisgICAgICAg
IGlmICghZWwpCisgICAgICAgICAgICB0aHJvdyAiYWNlLmVkaXQgY2FuJ3QgZmluZCBkaXYgIyIg
KyBfaWQ7CisgICAgfQorCisgICAgaWYgKGVsLmVudiAmJiBlbC5lbnYuZWRpdG9yIGluc3RhbmNl
b2YgRWRpdG9yKQorICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjsKKworICAgIHZhciBkb2Mg
PSBleHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uKGRvbS5nZXRJbm5lclRleHQoZWwpKTsKKyAgICBl
bC5pbm5lckhUTUwgPSAnJzsKKworICAgIHZhciBlZGl0b3IgPSBuZXcgRWRpdG9yKG5ldyBSZW5k
ZXJlcihlbCkpOworICAgIG5ldyBNdWx0aVNlbGVjdChlZGl0b3IpOworICAgIGVkaXRvci5zZXRT
ZXNzaW9uKGRvYyk7CisKKyAgICB2YXIgZW52ID0geworICAgICAgICBkb2N1bWVudDogZG9jLAor
ICAgICAgICBlZGl0b3I6IGVkaXRvciwKKyAgICAgICAgb25SZXNpemU6IGVkaXRvci5yZXNpemUu
YmluZChlZGl0b3IpCisgICAgfTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcih3aW5kb3csICJyZXNp
emUiLCBlbnYub25SZXNpemUpOworICAgIGVsLmVudiA9IGVkaXRvci5lbnYgPSBlbnY7CisgICAg
cmV0dXJuIGVkaXRvcjsKK307CitleHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uID0gZnVuY3Rpb24o
dGV4dCwgbW9kZSkgeworICAgIHZhciBkb2MgPSBuZXcgRWRpdFNlc3Npb24odGV4dCwgZG9jKTsK
KyAgICBkb2Muc2V0VW5kb01hbmFnZXIobmV3IFVuZG9NYW5hZ2VyKCkpOworICAgIHJldHVybiBk
b2M7Cit9CitleHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247CitleHBvcnRzLlVuZG9N
YW5hZ2VyID0gVW5kb01hbmFnZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9maXhvbGRi
cm93c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9yZWdl
eHAnLCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKKworCityZXF1aXJlKCIuL3JlZ2V4cCIpOworcmVxdWlyZSgiLi9lczUtc2hpbSIpOwor
Cit9KTsKKyAKK2FjZS5kZWZpbmUoJ2FjZS9saWIvcmVnZXhwJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
ICAgIHZhciByZWFsID0geworICAgICAgICAgICAgZXhlYzogUmVnRXhwLnByb3RvdHlwZS5leGVj
LAorICAgICAgICAgICAgdGVzdDogUmVnRXhwLnByb3RvdHlwZS50ZXN0LAorICAgICAgICAgICAg
bWF0Y2g6IFN0cmluZy5wcm90b3R5cGUubWF0Y2gsCisgICAgICAgICAgICByZXBsYWNlOiBTdHJp
bmcucHJvdG90eXBlLnJlcGxhY2UsCisgICAgICAgICAgICBzcGxpdDogU3RyaW5nLnByb3RvdHlw
ZS5zcGxpdAorICAgICAgICB9LAorICAgICAgICBjb21wbGlhbnRFeGVjTnBjZyA9IHJlYWwuZXhl
Yy5jYWxsKC8oKT8/LywgIiIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5k
bGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHMKKyAgICAgICAgY29tcGxp
YW50TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHgg
PSAvXi9nOworICAgICAgICAgICAgcmVhbC50ZXN0LmNhbGwoeCwgIiIpOworICAgICAgICAgICAg
cmV0dXJuICF4Lmxhc3RJbmRleDsKKyAgICAgICAgfSgpOworCisgICAgaWYgKGNvbXBsaWFudExh
c3RJbmRleEluY3JlbWVudCAmJiBjb21wbGlhbnRFeGVjTnBjZykKKyAgICAgICAgcmV0dXJuOwor
ICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHsKKyAgICAgICAgdmFy
IG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCisgICAgICAgICAgICBu
YW1lLCByMjsKKyAgICAgICAgaWYgKCB0eXBlb2Yoc3RyKSA9PSAnc3RyaW5nJyAmJiBtYXRjaCkg
eworICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAx
ICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgcjIgPSBSZWdF
eHAodGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5hdGl2ZUZsYWdzKHRoaXMpLCAi
ZyIsICIiKSk7CisgICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNlLmNhbGwoc3RyLnNsaWNlKG1h
dGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbaSAtIDFdOworICAg
ICAgICAgICAgICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hb
bmFtZV0gPSBtYXRjaFtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiB0aGlzLmdsb2JhbCAm
JiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA+IG1hdGNoLmluZGV4KSkKKyAg
ICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtYXRjaDsKKyAgICB9OworICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50KSB7
CisgICAgICAgIFJlZ0V4cC5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uIChzdHIpIHsKKyAgICAg
ICAgICAgIHZhciBtYXRjaCA9IHJlYWwuZXhlYy5jYWxsKHRoaXMsIHN0cik7CisgICAgICAgICAg
ICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5s
YXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCisgICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgt
LTsKKyAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOworICAgICAgICB9OworICAgIH0KKworICAg
IGZ1bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgeworICAgICAgICByZXR1cm4gKHJlZ2V4
Lmdsb2JhbCAgICAgPyAiZyIgOiAiIikgKworICAgICAgICAgICAgICAgKHJlZ2V4Lmlnbm9yZUNh
c2UgPyAiaSIgOiAiIikgKworICAgICAgICAgICAgICAgKHJlZ2V4Lm11bHRpbGluZSAgPyAibSIg
OiAiIikgKworICAgICAgICAgICAgICAgKHJlZ2V4LmV4dGVuZGVkICAgPyAieCIgOiAiIikgKyAv
LyBQcm9wb3NlZCBmb3IgRVM0OyBpbmNsdWRlZCBpbiBBUzMKKyAgICAgICAgICAgICAgIChyZWdl
eC5zdGlja3kgICAgID8gInkiIDogIiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluZGV4T2Yg
KGFycmF5LCBpdGVtLCBmcm9tKSB7CisgICAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhP
ZikgLy8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2YWlsYWJsZQorICAgICAgICAg
ICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSwgZnJvbSk7CisgICAgICAgIGZvciAodmFyIGkg
PSBmcm9tIHx8IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGFy
cmF5W2ldID09PSBpdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvbGliL2Vz
NS1zaGltJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworZnVuY3Rpb24gRW1wdHkoKSB7fQorCitpZiAoIUZ1
bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CisgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBm
dW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCisgICAgICAgIHZhciB0YXJnZXQg
PSB0aGlzOworICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxs
ZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOworICAgICAgICB9CisgICAgICAgIHZhciBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKKyAgICAg
ICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBpZiAodGhpcyBpbnN0
YW5jZW9mIGJvdW5kKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFw
cGx5KAorICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICBhcmdz
LmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICB0aGF0LAorICAgICAgICAg
ICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAg
ICAgICAgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgIH07CisgICAgICAgIGlmKHRhcmdl
dC5wcm90b3R5cGUpIHsKKyAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90
b3R5cGU7CisgICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKKyAgICAg
ICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGJvdW5kOworICAgIH07Cit9Cit2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwor
dmFyIHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5wcm90b3R5cGU7Cit2YXIgcHJvdG90eXBlT2ZP
YmplY3QgPSBPYmplY3QucHJvdG90eXBlOwordmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5z
bGljZTsKK3ZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJp
bmcpOwordmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVy
dHkpOwordmFyIGRlZmluZUdldHRlcjsKK3ZhciBkZWZpbmVTZXR0ZXI7Cit2YXIgbG9va3VwR2V0
dGVyOwordmFyIGxvb2t1cFNldHRlcjsKK3ZhciBzdXBwb3J0c0FjY2Vzc29yczsKK2lmICgoc3Vw
cG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJf
XyIpKSkgeworICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5f
X2RlZmluZUdldHRlcl9fKTsKKyAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBl
T2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CisgICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5k
KHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOworICAgIGxvb2t1cFNldHRlciA9
IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKK30KK2lmIChb
MSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKKyAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVz
dCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CisgICAgICAgIGZ1bmN0aW9u
IG1ha2VBcnJheShsKSB7CisgICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOworICAg
ICAgICAgICAgYVswXSA9IGFbMV0gPSAwOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKKyAgICAgICAgCisgICAg
ICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CisgICAgICAgIGFy
cmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CisKKyAgICAgICAgbGVuZ3Ro
QmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CisgICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAi
WFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAorCisgICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0g
YXJyYXkubGVuZ3RoCisKKyAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVu
Z3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxl
bWVudGF0aW9uIHdpdGhvdXQgYnVncworICAgICAgICB9CisgICAgfSgpKSB7Ly9JRSA2LzcKKyAg
ICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CisgICAgICAg
IEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsK
KyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBbXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFy
cmF5X3NwbGljZS5hcHBseSh0aGlzLCBbCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2
b2lkIDAgPyAwIDogc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2
b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAorICAgICAgICAgICAg
ICAgIF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSkpCisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgfSBlbHNlIHsvL0lFOAorICAgICAgICBBcnJheS5wcm90b3R5cGUuc3Bs
aWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CisgICAgICAgICAgICB2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGg7CisgICAgICAgICAgICBpZiAocG9zID4gMCkgeworICAgICAgICAgICAg
ICAgIGlmIChwb3MgPiBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID09IHZvaWQgMCkgeworICAgICAgICAgICAgICAg
IHBvcyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgICAg
ICAgICBwb3MgPSBNYXRoLm1heChsZW5ndGggKyBwb3MsIDApOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIShwb3MrcmVtb3ZlQ291bnQgPCBsZW5ndGgpKQorICAgICAgICAgICAg
ICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOworCisgICAgICAgICAgICB2YXIgcmVtb3Zl
ZCA9IHRoaXMuc2xpY2UocG9zLCBwb3MrcmVtb3ZlQ291bnQpOworICAgICAgICAgICAgdmFyIGlu
c2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKKyAgICAgICAgICAgIHZhciBhZGQgPSBp
bnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBvcyA9PT0gbGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgaWYgKGFkZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
LnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVD
b3VudCwgbGVuZ3RoIC0gcG9zKTsKKyAgICAgICAgICAgICAgICB2YXIgdGFpbE9sZFBvcyA9IHBv
cyArIHJlbW92ZTsKKyAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3Mg
KyBhZGQgLSByZW1vdmU7CisgICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAt
IHRhaWxPbGRQb3M7CisgICAgICAgICAgICAgICAgdmFyIGxlbmd0aEFmdGVyUmVtb3ZlID0gbGVu
Z3RoIC0gcmVtb3ZlOworCisgICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xk
UG9zKSB7IC8vIGNhc2UgQQorICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRhaWxDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQ
b3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxOZXdQb3MgPiB0YWlsT2xkUG9zKSB7IC8vIGNhc2Ug
QgorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3Mr
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFk
ZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCisKKyAgICAgICAgICAgICAgICBpZiAoYWRkICYm
IHBvcyA9PT0gbGVuZ3RoQWZ0ZXJSZW1vdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5s
ZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJl
bW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGFkZDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Bvcytp
XSA9IGluc2VydFtpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW1vdmVkOworICAgICAgICB9Owor
ICAgIH0KK30KK2lmICghQXJyYXkuaXNBcnJheSkgeworICAgIEFycmF5LmlzQXJyYXkgPSBmdW5j
dGlvbiBpc0FycmF5KG9iaikgeworICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltv
YmplY3QgQXJyYXldIjsKKyAgICB9OworfQordmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiks
CisgICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVk
U3RyaW5nKTsKKworaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgeworICAgIEFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKKyAg
ICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9IHNw
bGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAg
ICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAg
ICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAorICAgICAgICAgICAgaSA9IC0xLAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisgICAgICAgIGlmIChfdG9TdHJp
bmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUg
KCsraSA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAg
ICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLm1hcCkgeworICAg
IEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7Cisg
ICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBz
cGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAg
ICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisg
ICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEFycmF5KGxlbmd0aCksCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKyAg
ICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBm
dW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsK
KyAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGZ1biAvKiwgdGhp
c3AgKi8pIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAg
ICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJp
bmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAg
ICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFtdLAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICB0
aGlzcCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2Jq
ZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsg
IiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAg
ICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKKyAgICAgICAgICAgICAgICBpZiAoZnVuLmNh
bGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5
cGUuZXZlcnkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShm
dW4gLyosIHRoaXNwICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwK
KyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltv
YmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAg
ICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MCwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworICAgICAgICBpZiAoX3RvU3Ry
aW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
aSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworfQoraWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkg
eworICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNw
ICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAg
IHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5n
XSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBv
YmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAg
ICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0g
IltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihm
dW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYm
IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKKyAgICBBcnJh
eS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7
CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYg
PSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwor
ICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3Qs
CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKyAgICAgICAgaWYgKF90
b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5p
dGlhbCB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2
YXIgcmVzdWx0OworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmW2krK107CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJy
YXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07
Cit9CitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgeworICAgIEFycmF5LnByb3Rv
dHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCov
KSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNl
bGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIg
PworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKyAgICAgICAgaWYg
KF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9
CisgICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0
aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmVzdWx0LCBp
ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAg
ICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkg
YXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAg
ICAgICBpZiAoaSBpbiB0aGlzKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwo
dm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKGktLSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQor
aWYgKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCAoWzAsIDFdLmluZGV4T2YoMSwgMikgIT0g
LTEpKSB7CisgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNv
dWdodCAvKiwgZnJvbUluZGV4ICovICkgeworICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5n
ICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAg
ICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5n
dGgpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBp
ID0gMDsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBp
ID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CisgICAgICAgIH0KKyAgICAgICAgaSA9IGkgPj0g
MCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3Vn
aHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KK2lmICghQXJyYXkucHJvdG90eXBlLmxh
c3RJbmRleE9mIHx8IChbMCwgMV0ubGFzdEluZGV4T2YoMCwgLTMpICE9IC0xKSkgeworICAgIEFy
cmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAv
KiwgZnJvbUluZGV4ICovKSB7CisgICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3Rv
U3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlz
LnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCisgICAgICAgICAg
ICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAgICAgICBpZiAoIWxlbmd0aCkgewor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHZhciBpID0gbGVuZ3Ro
IC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBp
ID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpOworICAgICAgICB9CisgICAg
ICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CisgICAgICAgIGZvciAo
OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09
IHNlbGZbaV0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmdldFBy
b3RvdHlwZU9mKSB7CisgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJv
dG90eXBlT2Yob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgK
KyAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CisgICAgICAgICAgICBvYmplY3QuY29u
c3RydWN0b3IucHJvdG90eXBlIDoKKyAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CisgICAg
ICAgICk7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikg
eworICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yIGNhbGxlZCBvbiBhICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0
OiAiOworICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgeworICAgICAgICBpZiAoKHR5
cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8
fCBvYmplY3QgPT09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9O
T05fT0JKRUNUICsgb2JqZWN0KTsKKyAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIs
IHNldHRlcjsKKyAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZp
Z3VyYWJsZTogdHJ1ZSB9OworICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKKyAgICAg
ICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOworICAgICAgICAgICAgb2Jq
ZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OworCisgICAgICAgICAgICB2YXIgZ2V0
dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOworICAgICAgICAgICAgdmFyIHNl
dHRlciA9IGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG9iamVj
dC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CisKKyAgICAgICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0
dGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0
ZXI7CisgICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07CisgICAg
ICAgIHJldHVybiBkZXNjcmlwdG9yOworICAgIH07Cit9CitpZiAoIU9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKSB7CisgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgeworICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMo
b2JqZWN0KTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuY3JlYXRlKSB7CisgICAgdmFyIGNyZWF0
ZUVtcHR5OworICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgewor
ICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7
ICJfX3Byb3RvX18iOiBudWxsIH07CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZW1wdHkpCisgICAgICAgICAgICAgICAgZW1wdHlb
aV0gPSBudWxsOworICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQorICAgICAgICAgICAg
ZW1wdHkuaGFzT3duUHJvcGVydHkgPQorICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1l
cmFibGUgPQorICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CisgICAgICAgICAgICBl
bXB0eS50b0xvY2FsZVN0cmluZyA9CisgICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CisgICAg
ICAgICAgICBlbXB0eS52YWx1ZU9mID0KKyAgICAgICAgICAgIGVtcHR5Ll9fcHJvdG9fXyA9IG51
bGw7CisgICAgICAgICAgICByZXR1cm4gZW1wdHk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBP
YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgewor
ICAgICAgICB2YXIgb2JqZWN0OworICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7Cisg
ICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCisgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90
eXBlKSsiXSAhPSAnb2JqZWN0JyIpOworICAgICAgICAgICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAo
KSB7fTsKKyAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICAg
ICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBw
cm90b3R5cGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkK
KyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcyk7
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworZnVuY3Rpb24gZG9lc0RlZmlu
ZVByb3BlcnR5V29yayhvYmplY3QpIHsKKyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGlu
ZWwiIGluIG9iamVjdDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICB9Cit9CitpZiAo
T2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9i
amVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOworICAgIHZhciBkZWZpbmVQcm9wZXJ0
eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKKyAgICAgICAg
ZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Cisg
ICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29y
a3NPbkRvbSkgeworICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eTsKKyAgICB9Cit9CisKK2lmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8
IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJ
UFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKKyAgICB2
YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQg
b24gbm9uLW9iamVjdDogIgorICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAi
Z2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CisKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3Qs
IHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7CisgICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAi
b2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVs
bCkKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VU
ICsgb2JqZWN0KTsKKyAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAm
JiB0eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxs
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQ
VE9SICsgZGVzY3JpcHRvcik7CisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0
eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CisKKyAgICAgICAgICAg
IGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihv
YmplY3QsIHByb3BlcnR5KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHBy
b3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJv
dG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OworICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3Rb
cHJvcGVydHldOworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9y
LnZhbHVlOworICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBk
ZXNjcmlwdG9yLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CisgICAgICAgICAgICBpZiAo
b3ducyhkZXNjcmlwdG9yLCAiZ2V0IikpCisgICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9i
amVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKKyAgICAgICAgICAgIGlmIChvd25zKGRl
c2NyaXB0b3IsICJzZXQiKSkKKyAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBw
cm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICB9OworfQoraWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgeworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3Qs
IHByb3BlcnRpZXMpIHsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykg
eworICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQorICAgICAgICAg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVz
W3Byb3BlcnR5XSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Owor
fQoraWYgKCFPYmplY3Quc2VhbCkgeworICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChv
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQoraWYgKCFPYmplY3Qu
ZnJlZXplKSB7CisgICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQordHJ5IHsKKyAgICBPYmplY3QuZnJl
ZXplKGZ1bmN0aW9uICgpIHt9KTsKK30gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgIE9iamVjdC5m
cmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgeworICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Qg
PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9KShPYmplY3QuZnJlZXplKTsKK30K
K2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRl
bnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgfTsKK30KK2lmICghT2JqZWN0LmlzU2VhbGVkKSB7CisgICAgT2Jq
ZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworfQoraWYgKCFPYmplY3QuaXNGcm96ZW4pIHsKKyAgICBPYmplY3Qu
aXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07Cit9CitpZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKKyAgICBPYmplY3Qu
aXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkgeworICAgICAgICBp
ZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKKyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZSA9
ICcnOworICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CisgICAgICAgICAgICBu
YW1lICs9ICc/JzsKKyAgICAgICAgfQorICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOworICAg
ICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7CisgICAgICAgIGRlbGV0
ZSBvYmplY3RbbmFtZV07CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9OworfQor
aWYgKCFPYmplY3Qua2V5cykgeworICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsCisgICAg
ICAgIGRvbnRFbnVtcyA9IFsKKyAgICAgICAgICAgICJ0b1N0cmluZyIsCisgICAgICAgICAgICAi
dG9Mb2NhbGVTdHJpbmciLAorICAgICAgICAgICAgInZhbHVlT2YiLAorICAgICAgICAgICAgImhh
c093blByb3BlcnR5IiwKKyAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCisgICAgICAgICAgICAiY29uc3RydWN0b3IiCisgICAg
ICAgIF0sCisgICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CisKKyAg
ICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7CisgICAgICAgIGhhc0RvbnRF
bnVtQnVnID0gZmFsc2U7CisgICAgfQorCisgICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlz
KG9iamVjdCkgeworCisgICAgICAgIGlmICgKKyAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9
ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKKyAgICAgICAgICAg
IG9iamVjdCA9PT0gbnVsbAorICAgICAgICApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBrZXlzID0gW107CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0
KSB7CisgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUpKSB7CisgICAgICAgICAgICAg
ICAga2V5cy5wdXNoKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGhhc0RvbnRFbnVtQnVnKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBk
b250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRvbnRF
bnVtID0gZG9udEVudW1zW2ldOworICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9u
dEVudW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkb250RW51bSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBr
ZXlzOworICAgIH07CisKK30KK2lmICghRGF0ZS5ub3cpIHsKKyAgICBEYXRlLm5vdyA9IGZ1bmN0
aW9uIG5vdygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgIH07
Cit9CitpZigiMCIuc3BsaXQodm9pZCAwLCAwKS5sZW5ndGgpIHsKKyAgICB2YXIgc3RyaW5nX3Nw
bGl0ID0gU3RyaW5nLnByb3RvdHlwZS5zcGxpdDsKKyAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0
ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCkgeworICAgICAgICBpZihzZXBhcmF0b3IgPT09
IHZvaWQgMCAmJiBsaW1pdCA9PT0gMClyZXR1cm4gW107CisgICAgICAgIHJldHVybiBzdHJpbmdf
c3BsaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9Cit9CitpZigiIi5zdWJzdHIgJiYg
IjBiIi5zdWJzdHIoLTEpICE9PSAiYiIpIHsKKyAgICB2YXIgc3RyaW5nX3N1YnN0ciA9IFN0cmlu
Zy5wcm90b3R5cGUuc3Vic3RyOworICAgIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyID0gZnVuY3Rp
b24oc3RhcnQsIGxlbmd0aCkgeworICAgICAgICByZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKAor
ICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgIHN0YXJ0IDwgMCA/IChzdGFydCA9IHRoaXMu
bGVuZ3RoICsgc3RhcnQpIDwgMCA/IDAgOiBzdGFydCA6IHN0YXJ0LAorICAgICAgICAgICAgbGVu
Z3RoCisgICAgICAgICk7CisgICAgfQorfQordmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBE
XHgyMFx4QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKKyAgICAiXHUy
MDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAw
XHUyMDI4IiArCisgICAgIlx1MjAyOVx1RkVGRiI7CitpZiAoIVN0cmluZy5wcm90b3R5cGUudHJp
bSB8fCB3cy50cmltKCkpIHsKKyAgICB3cyA9ICJbIiArIHdzICsgIl0iOworICAgIHZhciB0cmlt
QmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAorICAgICAgICB0
cmltRW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7CisgICAgU3RyaW5nLnBy
b3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKKyAgICAgICAgaWYgKHRoaXMgPT09IHVu
ZGVmaW5lZCB8fCB0aGlzID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJjYW4ndCBjb252ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTdHJpbmcodGhpcykKKyAgICAgICAgICAgIC5yZXBsYWNlKHRyaW1CZWdpblJl
Z2V4cCwgIiIpCisgICAgICAgICAgICAucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAg
fTsKK30KKworZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4g
IT09IG4pIHsgLy8gaXNOYU4KKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAw
ICYmIG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8
IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK30K
KworZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKKyAgICB2YXIgdHlwZSA9IHR5cGVvZiBp
bnB1dDsKKyAgICByZXR1cm4gKAorICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAorICAgICAgICB0
eXBlID09PSAidW5kZWZpbmVkIiB8fAorICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKKyAg
ICAgICAgdHlwZSA9PT0gIm51bWJlciIgfHwKKyAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKKyAg
ICApOworfQorCitmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZhciB2YWwsIHZh
bHVlT2YsIHRvU3RyaW5nOworICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKKyAgICAgICAg
cmV0dXJuIGlucHV0OworICAgIH0KKyAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKKyAgICBp
ZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgdmFsID0gdmFsdWVP
Zi5jYWxsKGlucHV0KTsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9TdHJpbmcgPSBpbnB1dC50
b1N0cmluZzsKKyAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CisgICAg
ICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUo
dmFsKSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCk7Cit9Cit2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewor
ICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZp
bmVkCisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8g
b2JqZWN0Iik7CisgICAgfQorICAgIHJldHVybiBPYmplY3Qobyk7Cit9OworCit9KTsKKworYWNl
LmRlZmluZSgnYWNlL2xpYi9kb20nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBYSFRNTF9OUyA9
ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKKworZXhwb3J0cy5jcmVhdGVFbGVtZW50
ID0gZnVuY3Rpb24odGFnLCBucykgeworICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50
TlMgPworICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMgfHwgWEhUTUxfTlMs
IHRhZykgOgorICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7Cit9OworCitl
eHBvcnRzLnNldFRleHQgPSBmdW5jdGlvbihlbGVtLCB0ZXh0KSB7CisgICAgaWYgKGVsZW0uaW5u
ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgZWxlbS5pbm5lclRleHQgPSB0ZXh0Owor
ICAgIH0KKyAgICBpZiAoZWxlbS50ZXh0Q29udGVudCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
IGVsZW0udGV4dENvbnRlbnQgPSB0ZXh0OworICAgIH0KK307CisKK2V4cG9ydHMuaGFzQ3NzQ2xh
c3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1l
LnNwbGl0KC9ccysvZyk7CisgICAgcmV0dXJuIGNsYXNzZXMuaW5kZXhPZihuYW1lKSAhPT0gLTE7
Cit9OworZXhwb3J0cy5hZGRDc3NDbGFzcyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7CisgICAgaWYg
KCFleHBvcnRzLmhhc0Nzc0NsYXNzKGVsLCBuYW1lKSkgeworICAgICAgICBlbC5jbGFzc05hbWUg
Kz0gIiAiICsgbmFtZTsKKyAgICB9Cit9OworZXhwb3J0cy5yZW1vdmVDc3NDbGFzcyA9IGZ1bmN0
aW9uKGVsLCBuYW1lKSB7CisgICAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUuc3BsaXQoL1xz
Ky9nKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB2YXIgaW5kZXggPSBjbGFzc2VzLmlu
ZGV4T2YobmFtZSk7CisgICAgICAgIGlmIChpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0K
KyAgICBlbC5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oIiAiKTsKK307CisKK2V4cG9ydHMudG9n
Z2xlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgeworICAgIHZhciBjbGFzc2VzID0gZWwu
Y2xhc3NOYW1lLnNwbGl0KC9ccysvZyksIGFkZCA9IHRydWU7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5hbWUpOworICAgICAgICBpZiAo
aW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFk
ZCA9IGZhbHNlOworICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRleCwgMSk7CisgICAgfQorICAg
IGlmKGFkZCkKKyAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpOworCisgICAgZWwuY2xhc3NOYW1l
ID0gY2xhc3Nlcy5qb2luKCIgIik7CisgICAgcmV0dXJuIGFkZDsKK307CitleHBvcnRzLnNldENz
c0NsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CisgICAgaWYgKGlu
Y2x1ZGUpIHsKKyAgICAgICAgZXhwb3J0cy5hZGRDc3NDbGFzcyhub2RlLCBjbGFzc05hbWUpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3Mobm9kZSwgY2xhc3NO
YW1lKTsKKyAgICB9Cit9OworCitleHBvcnRzLmhhc0Nzc1N0cmluZyA9IGZ1bmN0aW9uKGlkLCBk
b2MpIHsKKyAgICB2YXIgaW5kZXggPSAwLCBzaGVldHM7CisgICAgZG9jID0gZG9jIHx8IGRvY3Vt
ZW50OworCisgICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0ICYmIChzaGVldHMgPSBkb2Muc3R5
bGVTaGVldHMpKSB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IHNoZWV0cy5sZW5ndGgpCisgICAg
ICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLm93bmluZ0VsZW1lbnQuaWQgPT09IGlkKSByZXR1
cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKChzaGVldHMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoInN0eWxlIikpKSB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IHNoZWV0cy5sZW5ndGgpCisg
ICAgICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLmlkID09PSBpZCkgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfTsKKworZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcg
PSBmdW5jdGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQsIGRvYykgeworICAgIGRvYyA9
IGRvYyB8fCBkb2N1bWVudDsKKyAgICBpZiAoaWQgJiYgZXhwb3J0cy5oYXNDc3NTdHJpbmcoaWQs
IGRvYykpCisgICAgICAgIHJldHVybiBudWxsOworICAgIAorICAgIHZhciBzdHlsZTsKKyAgICAK
KyAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKKyAgICAgICAgc3R5bGUgPSBkb2MuY3Jl
YXRlU3R5bGVTaGVldCgpOworICAgICAgICBzdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKKyAgICAg
ICAgaWYgKGlkKQorICAgICAgICAgICAgc3R5bGUub3duaW5nRWxlbWVudC5pZCA9IGlkOworICAg
IH0gZWxzZSB7CisgICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnROUworICAgICAgICAg
ICAgPyBkb2MuY3JlYXRlRWxlbWVudE5TKFhIVE1MX05TLCAic3R5bGUiKQorICAgICAgICAgICAg
OiBkb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKKworICAgICAgICBzdHlsZS5hcHBlbmRDaGls
ZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzVGV4dCkpOworICAgICAgICBpZiAoaWQpCisgICAgICAg
ICAgICBzdHlsZS5pZCA9IGlkOworCisgICAgICAgIHZhciBoZWFkID0gZG9jLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgaGVh
ZC5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgfQorfTsKKworZXhwb3J0cy5pbXBvcnRDc3NTdHls
c2hlZXQgPSBmdW5jdGlvbih1cmksIGRvYykgeworICAgIGlmIChkb2MuY3JlYXRlU3R5bGVTaGVl
dCkgeworICAgICAgICBkb2MuY3JlYXRlU3R5bGVTaGVldCh1cmkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBsaW5rID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CisgICAgICAg
IGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnOworICAgICAgICBsaW5rLmhyZWYgPSB1cmk7CisKKyAg
ICAgICAgdmFyIGhlYWQgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSB8fCBk
b2MuZG9jdW1lbnRFbGVtZW50OworICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspOworICAg
IH0KK307CisKK2V4cG9ydHMuZ2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAg
ICByZXR1cm4gKAorICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVu
dCwgInBhZGRpbmdMZWZ0IiksIDEwKSArCisgICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0
ZWRTdHlsZShlbGVtZW50LCAicGFkZGluZ1JpZ2h0IiksIDEwKSArIAorICAgICAgICBlbGVtZW50
LmNsaWVudFdpZHRoCisgICAgKTsKK307CisKK2V4cG9ydHMuZ2V0SW5uZXJIZWlnaHQgPSBmdW5j
dGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICgKKyAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5j
b21wdXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nVG9wIiksIDEwKSArCisgICAgICAgIHBhcnNl
SW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCAicGFkZGluZ0JvdHRvbSIpLCAxMCkg
KworICAgICAgICBlbGVtZW50LmNsaWVudEhlaWdodAorICAgICk7Cit9OworCitpZiAod2luZG93
LnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHsKKyAgICBleHBvcnRzLmdldFBhZ2VTY3JvbGxU
b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDsKKyAg
ICB9OworCisgICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0OworICAgIH07Cit9CitlbHNlIHsKKyAgICBl
eHBvcnRzLmdldFBhZ2VTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50LmJvZHkuc2Nyb2xsVG9wOworICAgIH07CisKKyAgICBleHBvcnRzLmdldFBhZ2VTY3Jv
bGxMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9s
bExlZnQ7CisgICAgfTsKK30KKworaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKQorICAgIGV4
cG9ydHMuY29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CisgICAgICAg
IGlmIChzdHlsZSkKKyAgICAgICAgICAgIHJldHVybiAod2luZG93LmdldENvbXB1dGVkU3R5bGUo
ZWxlbWVudCwgIiIpIHx8IHt9KVtzdHlsZV0gfHwgIiI7CisgICAgICAgIHJldHVybiB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIikgfHwge307CisgICAgfTsKK2Vsc2UKKyAgICBl
eHBvcnRzLmNvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgICAg
ICBpZiAoc3R5bGUpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5jdXJyZW50U3R5bGVbc3R5
bGVdOworICAgICAgICByZXR1cm4gZWxlbWVudC5jdXJyZW50U3R5bGU7CisgICAgfTsKKworZXhw
b3J0cy5zY3JvbGxiYXJXaWR0aCA9IGZ1bmN0aW9uKGRvY3VtZW50KSB7CisgICAgdmFyIGlubmVy
ID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJhY2VfaW5uZXIiKTsKKyAgICBpbm5lci5zdHlsZS53
aWR0aCA9ICIxMDAlIjsKKyAgICBpbm5lci5zdHlsZS5taW5XaWR0aCA9ICIwcHgiOworICAgIGlu
bmVyLnN0eWxlLmhlaWdodCA9ICIyMDBweCI7CisgICAgaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJi
bG9jayI7CisKKyAgICB2YXIgb3V0ZXIgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoImFjZV9vdXRl
ciIpOworICAgIHZhciBzdHlsZSA9IG91dGVyLnN0eWxlOworCisgICAgc3R5bGUucG9zaXRpb24g
PSAiYWJzb2x1dGUiOworICAgIHN0eWxlLmxlZnQgPSAiLTEwMDAwcHgiOworICAgIHN0eWxlLm92
ZXJmbG93ID0gImhpZGRlbiI7CisgICAgc3R5bGUud2lkdGggPSAiMjAwcHgiOworICAgIHN0eWxl
Lm1pbldpZHRoID0gIjBweCI7CisgICAgc3R5bGUuaGVpZ2h0ID0gIjE1MHB4IjsKKyAgICBzdHls
ZS5kaXNwbGF5ID0gImJsb2NrIjsKKworICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTsKKwor
ICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIGJvZHkuYXBwZW5k
Q2hpbGQob3V0ZXIpOworCisgICAgdmFyIG5vU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7
CisKKyAgICBzdHlsZS5vdmVyZmxvdyA9ICJzY3JvbGwiOworICAgIHZhciB3aXRoU2Nyb2xsYmFy
ID0gaW5uZXIub2Zmc2V0V2lkdGg7CisKKyAgICBpZiAobm9TY3JvbGxiYXIgPT0gd2l0aFNjcm9s
bGJhcikgeworICAgICAgICB3aXRoU2Nyb2xsYmFyID0gb3V0ZXIuY2xpZW50V2lkdGg7CisgICAg
fQorCisgICAgYm9keS5yZW1vdmVDaGlsZChvdXRlcik7CisKKyAgICByZXR1cm4gbm9TY3JvbGxi
YXItd2l0aFNjcm9sbGJhcjsKK307CitleHBvcnRzLnNldElubmVySHRtbCA9IGZ1bmN0aW9uKGVs
LCBpbm5lckh0bWwpIHsKKyAgICB2YXIgZWxlbWVudCA9IGVsLmNsb25lTm9kZShmYWxzZSk7Ly9k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBlbGVtZW50LmlubmVySFRNTCA9IGlu
bmVySHRtbDsKKyAgICBlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGVtZW50LCBlbCk7Cisg
ICAgcmV0dXJuIGVsZW1lbnQ7Cit9OworCitleHBvcnRzLnNldElubmVyVGV4dCA9IGZ1bmN0aW9u
KGVsLCBpbm5lclRleHQpIHsKKyAgICB2YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50Owor
ICAgIGlmIChkb2N1bWVudC5ib2R5ICYmICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkK
KyAgICAgICAgZWwudGV4dENvbnRlbnQgPSBpbm5lclRleHQ7CisgICAgZWxzZQorICAgICAgICBl
bC5pbm5lclRleHQgPSBpbm5lclRleHQ7CisKK307CisKK2V4cG9ydHMuZ2V0SW5uZXJUZXh0ID0g
ZnVuY3Rpb24oZWwpIHsKKyAgICB2YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50OworICAg
IGlmIChkb2N1bWVudC5ib2R5ICYmICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkKKyAg
ICAgICAgcmV0dXJuIGVsLnRleHRDb250ZW50OworICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBl
bC5pbm5lclRleHQgfHwgZWwudGV4dENvbnRlbnQgfHwgIiI7Cit9OworCitleHBvcnRzLmdldFBh
cmVudFdpbmRvdyA9IGZ1bmN0aW9uKGRvY3VtZW50KSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmRl
ZmF1bHRWaWV3IHx8IGRvY3VtZW50LnBhcmVudFdpbmRvdzsKK307CisKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbGliL2V2ZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdh
Y2UvbGliL2tleXMnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9kb20nXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGtleXMgPSByZXF1aXJlKCIu
L2tleXMiKTsKK3ZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL3VzZXJhZ2VudCIpOwordmFyIGRv
bSA9IHJlcXVpcmUoIi4vZG9tIik7CisKK2V4cG9ydHMuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihl
bGVtLCB0eXBlLCBjYWxsYmFjaykgeworICAgIGlmIChlbGVtLmFkZEV2ZW50TGlzdGVuZXIpIHsK
KyAgICAgICAgcmV0dXJuIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFs
c2UpOworICAgIH0KKyAgICBpZiAoZWxlbS5hdHRhY2hFdmVudCkgeworICAgICAgICB2YXIgd3Jh
cHBlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2FsbGJhY2sod2luZG93LmV2ZW50KTsK
KyAgICAgICAgfTsKKyAgICAgICAgY2FsbGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyOworICAgICAg
ICBlbGVtLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwcGVyKTsKKyAgICB9Cit9OworCitl
eHBvcnRzLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHsK
KyAgICBpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBlbGVt
LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9CisgICAg
aWYgKGVsZW0uZGV0YWNoRXZlbnQpIHsKKyAgICAgICAgZWxlbS5kZXRhY2hFdmVudCgib24iICsg
dHlwZSwgY2FsbGJhY2suX3dyYXBwZXIgfHwgY2FsbGJhY2spOworICAgIH0KK307CitleHBvcnRz
LnN0b3BFdmVudCA9IGZ1bmN0aW9uKGUpIHsKKyAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihl
KTsKKyAgICBleHBvcnRzLnByZXZlbnREZWZhdWx0KGUpOworICAgIHJldHVybiBmYWxzZTsKK307
CisKK2V4cG9ydHMuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oZSkgeworICAgIGlmIChlLnN0
b3BQcm9wYWdhdGlvbikKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICBlbHNlCisg
ICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKK307CisKK2V4cG9ydHMucHJldmVudERlZmF1
bHQgPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUucHJldmVudERlZmF1bHQpCisgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICBlbHNlCisgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxz
ZTsKK307CitleHBvcnRzLmdldEJ1dHRvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS50eXBl
ID09ICJkYmxjbGljayIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChlLnR5cGUgPT0gImNv
bnRleHRtZW51IiB8fCAoZS5jdHJsS2V5ICYmIHVzZXJhZ2VudC5pc01hYykpCisgICAgICAgIHJl
dHVybiAyOworICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHJldHVybiBlLmJ1
dHRvbjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiB7MTowLCAyOjIsIDQ6MX1b
ZS5idXR0b25dOworICAgIH0KK307CisKK2lmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0
Q2FwdHVyZSkgeworICAgIGV4cG9ydHMuY2FwdHVyZSA9IGZ1bmN0aW9uKGVsLCBldmVudEhhbmRs
ZXIsIHJlbGVhc2VDYXB0dXJlSGFuZGxlcikgeworICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIGZ1bmN0aW9uIG9uUmVsZWFzZUNhcHR1cmUoZSkgeworICAgICAgICAgICAgZXZl
bnRIYW5kbGVyKGUpOworCisgICAgICAgICAgICBpZiAoIWNhbGxlZCkgeworICAgICAgICAgICAg
ICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVy
KGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVy
KGVsLCAibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgICAgIGV4cG9ydHMucmVt
b3ZlTGlzdGVuZXIoZWwsICJtb3VzZXVwIiwgb25SZWxlYXNlQ2FwdHVyZSk7CisgICAgICAgICAg
ICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVsLCAibG9zZWNhcHR1cmUiLCBvblJlbGVhc2VDYXB0
dXJlKTsKKworICAgICAgICAgICAgZWwucmVsZWFzZUNhcHR1cmUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIp
OworICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibW91c2V1cCIsIG9uUmVsZWFzZUNh
cHR1cmUpOworICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAibG9zZWNhcHR1cmUiLCBv
blJlbGVhc2VDYXB0dXJlKTsKKyAgICAgICAgZWwuc2V0Q2FwdHVyZSgpOworICAgIH07Cit9Citl
bHNlIHsKKyAgICBleHBvcnRzLmNhcHR1cmUgPSBmdW5jdGlvbihlbCwgZXZlbnRIYW5kbGVyLCBy
ZWxlYXNlQ2FwdHVyZUhhbmRsZXIpIHsKKyAgICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHsK
KyAgICAgICAgICAgIGV2ZW50SGFuZGxlciAmJiBldmVudEhhbmRsZXIoZSk7CisgICAgICAgICAg
ICByZWxlYXNlQ2FwdHVyZUhhbmRsZXIgJiYgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKGUpOworCisg
ICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBldmVu
dEhhbmRsZXIsIHRydWUpOworICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigibW91c2V1cCIsIG9uTW91c2VVcCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIsIHRydWUpOworICAgICAgICBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZXVwIiwgb25Nb3VzZVVwLCB0cnVlKTsKKyAgICB9OworfQorCitl
eHBvcnRzLmFkZE1vdXNlV2hlZWxMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykgewor
ICAgIHZhciBmYWN0b3IgPSA4OworICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgaWYgKGUud2hlZWxEZWx0YSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpZiAo
ZS53aGVlbERlbHRhWCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZS53aGVlbFgg
PSAtZS53aGVlbERlbHRhWCAvIGZhY3RvcjsKKyAgICAgICAgICAgICAgICBlLndoZWVsWSA9IC1l
LndoZWVsRGVsdGFZIC8gZmFjdG9yOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlLndoZWVsWCA9IDA7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERl
bHRhIC8gZmFjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGUuYXhpcyAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsK
KyAgICAgICAgICAgICAgICBlLndoZWVsWCA9IChlLmRldGFpbCB8fCAwKSAqIDU7CisgICAgICAg
ICAgICAgICAgZS53aGVlbFkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlLndoZWVsWCA9IDA7CisgICAgICAgICAgICAgICAgZS53aGVlbFkgPSAoZS5kZXRhaWwg
fHwgMCkgKiA1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKGUp
OworICAgIH07CisgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgIkRPTU1vdXNlU2Nyb2xsIiwg
bGlzdGVuZXIpOworICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZXdoZWVsIiwgbGlz
dGVuZXIpOworfTsKKworZXhwb3J0cy5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyID0gZnVuY3Rp
b24oZWwsIHRpbWVvdXRzLCBldmVudEhhbmRsZXIsIGNhbGxiYWNrTmFtZSkgeworICAgIHZhciBj
bGlja3MgPSAwOworICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgdGltZXI7CisgICAgdmFyIGV2ZW50
TmFtZXMgPSB7CisgICAgICAgIDI6ICJkYmxjbGljayIsCisgICAgICAgIDM6ICJ0cmlwbGVjbGlj
ayIsCisgICAgICAgIDQ6ICJxdWFkY2xpY2siCisgICAgfTsKKworICAgIGV4cG9ydHMuYWRkTGlz
dGVuZXIoZWwsICJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChleHBvcnRz
LmdldEJ1dHRvbihlKSAhPSAwKSB7CisgICAgICAgICAgICBjbGlja3MgPSAwOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFyIGlzTmV3Q2xpY2sgPSBNYXRoLmFicyhlLmNsaWVudFgg
LSBzdGFydFgpID4gNSB8fCBNYXRoLmFicyhlLmNsaWVudFkgLSBzdGFydFkpID4gNTsKKworICAg
ICAgICAgICAgaWYgKCF0aW1lciB8fCBpc05ld0NsaWNrKQorICAgICAgICAgICAgICAgIGNsaWNr
cyA9IDA7CisKKyAgICAgICAgICAgIGNsaWNrcyArPSAxOworCisgICAgICAgICAgICBpZiAodGlt
ZXIpCisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKQorICAgICAgICAgICAgdGlt
ZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3RpbWVyID0gbnVsbH0sIHRpbWVvdXRzW2NsaWNr
cyAtIDFdIHx8IDYwMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsaWNrcyA9PSAxKSB7Cisg
ICAgICAgICAgICBzdGFydFggPSBlLmNsaWVudFg7CisgICAgICAgICAgICBzdGFydFkgPSBlLmNs
aWVudFk7CisgICAgICAgIH0KKworICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgi
bW91c2Vkb3duIiwgZSk7CisKKyAgICAgICAgaWYgKGNsaWNrcyA+IDQpCisgICAgICAgICAgICBj
bGlja3MgPSAwOworICAgICAgICBlbHNlIGlmIChjbGlja3MgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7Cisg
ICAgfSk7CisKKyAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUpIHsKKyAgICAgICAgZXhwb3J0cy5h
ZGRMaXN0ZW5lcihlbCwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgY2xp
Y2tzID0gMjsKKyAgICAgICAgICAgIGlmICh0aW1lcikKKyAgICAgICAgICAgICAgICBjbGVhclRp
bWVvdXQodGltZXIpOworICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
e3RpbWVyID0gbnVsbH0sIHRpbWVvdXRzW2NsaWNrcyAtIDFdIHx8IDYwMCk7CisgICAgICAgICAg
ICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgibW91c2Vkb3duIiwgZSk7CisgICAgICAgICAg
ICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpOworICAg
ICAgICB9KTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxs
YmFjaywgZSwga2V5Q29kZSkgeworICAgIHZhciBoYXNoSWQgPSAwOworICAgIGlmICgodXNlcmFn
ZW50LmlzT3BlcmEgJiYgISgiS2V5Ym9hcmRFdmVudCIgaW4gd2luZG93KSkgJiYgdXNlcmFnZW50
LmlzTWFjKSB7CisgICAgICAgIGhhc2hJZCA9IDAgfCAoZS5tZXRhS2V5ID8gMSA6IDApIHwgKGUu
YWx0S2V5ID8gMiA6IDApCisgICAgICAgICAgICB8IChlLnNoaWZ0S2V5ID8gNCA6IDApIHwgKGUu
Y3RybEtleSA/IDggOiAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBoYXNoSWQgPSAwIHwgKGUu
Y3RybEtleSA/IDEgOiAwKSB8IChlLmFsdEtleSA/IDIgOiAwKQorICAgICAgICAgICAgfCAoZS5z
aGlmdEtleSA/IDQgOiAwKSB8IChlLm1ldGFLZXkgPyA4IDogMCk7CisgICAgfQorCisgICAgaWYg
KGtleUNvZGUgaW4ga2V5cy5NT0RJRklFUl9LRVlTKSB7CisgICAgICAgIHN3aXRjaCAoa2V5cy5N
T0RJRklFUl9LRVlTW2tleUNvZGVdKSB7CisgICAgICAgICAgICBjYXNlICJBbHQiOgorICAgICAg
ICAgICAgICAgIGhhc2hJZCA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJTaGlmdCI6CisgICAgICAgICAgICAgICAgaGFzaElkID0gNDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkN0cmwiOgorICAgICAgICAgICAgICAgIGhh
c2hJZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGhhc2hJZCA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAga2V5Q29kZSA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc2hJZCAmIDgg
JiYgKGtleUNvZGUgPT0gOTEgfHwga2V5Q29kZSA9PSA5MykpIHsKKyAgICAgICAga2V5Q29kZSA9
IDA7CisgICAgfQorICAgIGlmICghaGFzaElkICYmICEoa2V5Q29kZSBpbiBrZXlzLkZVTkNUSU9O
X0tFWVMpICYmICEoa2V5Q29kZSBpbiBrZXlzLlBSSU5UQUJMRV9LRVlTKSkgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBjYWxsYmFjayhlLCBoYXNoSWQsIGtleUNv
ZGUpOworfQorCitleHBvcnRzLmFkZENvbW1hbmRLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBj
YWxsYmFjaykgeworICAgIHZhciBhZGRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkTGlzdGVuZXI7Cisg
ICAgaWYgKHVzZXJhZ2VudC5pc09sZEdlY2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKCJL
ZXlib2FyZEV2ZW50IiBpbiB3aW5kb3cpKSkgeworICAgICAgICB2YXIgbGFzdEtleURvd25LZXlD
b2RlID0gbnVsbDsKKyAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24o
ZSkgeworICAgICAgICAgICAgbGFzdEtleURvd25LZXlDb2RlID0gZS5rZXlDb2RlOworICAgICAg
ICB9KTsKKyAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlwcmVzcyIsIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFz
dEtleURvd25LZXlDb2RlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFy
IGxhc3REb3duID0gbnVsbDsKKworICAgICAgICBhZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBm
dW5jdGlvbihlKSB7CisgICAgICAgICAgICBsYXN0RG93biA9IGUua2V5SWRlbnRpZmllciB8fCBl
LmtleUNvZGU7CisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJh
Y2ssIGUsIGUua2V5Q29kZSk7CisgICAgICAgIH0pOworICAgIH0KK307CisKK2lmICh3aW5kb3cu
cG9zdE1lc3NhZ2UgJiYgIXVzZXJhZ2VudC5pc09sZElFKSB7CisgICAgdmFyIHBvc3RNZXNzYWdl
SWQgPSAxOworICAgIGV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7
CisgICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7CisgICAgICAgIHZhciBtZXNzYWdlTmFtZSA9
ICJ6ZXJvLXRpbWVvdXQtbWVzc2FnZS0iICsgcG9zdE1lc3NhZ2VJZDsKKyAgICAgICAgZXhwb3J0
cy5hZGRMaXN0ZW5lcih3aW4sICJtZXNzYWdlIiwgZnVuY3Rpb24gbGlzdGVuZXIoZSkgeworICAg
ICAgICAgICAgaWYgKGUuZGF0YSA9PSBtZXNzYWdlTmFtZSkgeworICAgICAgICAgICAgICAgIGV4
cG9ydHMuc3RvcFByb3BhZ2F0aW9uKGUpOworICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3Zl
TGlzdGVuZXIod2luLCAibWVzc2FnZSIsIGxpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgd2luLnBvc3RNZXNz
YWdlKG1lc3NhZ2VOYW1lLCAiKiIpOworICAgIH07Cit9CisKKworZXhwb3J0cy5uZXh0RnJhbWUg
PSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93Lm9SZXF1ZXN0QW5p
bWF0aW9uRnJhbWUgfHwKKyAgICB3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAg
ICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgd2luZG93LndlYmtpdFJl
cXVlc3RBbmltYXRpb25GcmFtZTsKKworaWYgKGV4cG9ydHMubmV4dEZyYW1lKQorICAgIGV4cG9y
dHMubmV4dEZyYW1lID0gZXhwb3J0cy5uZXh0RnJhbWUuYmluZCh3aW5kb3cpOworZWxzZQorICAg
IGV4cG9ydHMubmV4dEZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgc2V0VGlt
ZW91dChjYWxsYmFjaywgMTcpOworICAgIH07Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xpYi9r
ZXlzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWly
ZSgiLi9vb3AiKTsKK3ZhciBLZXlzID0gKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXQgPSB7Cisg
ICAgICAgIE1PRElGSUVSX0tFWVM6IHsKKyAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0
cmwnLCAxODogJ0FsdCcsIDIyNDogJ01ldGEnCisgICAgICAgIH0sCisKKyAgICAgICAgS0VZX01P
RFM6IHsKKyAgICAgICAgICAgICJjdHJsIjogMSwgImFsdCI6IDIsICJvcHRpb24iIDogMiwKKyAg
ICAgICAgICAgICJzaGlmdCI6IDQsICJtZXRhIjogOCwgImNvbW1hbmQiOiA4CisgICAgICAgIH0s
CisKKyAgICAgICAgRlVOQ1RJT05fS0VZUyA6IHsKKyAgICAgICAgICAgIDggIDogIkJhY2tzcGFj
ZSIsCisgICAgICAgICAgICA5ICA6ICJUYWIiLAorICAgICAgICAgICAgMTMgOiAiUmV0dXJuIiwK
KyAgICAgICAgICAgIDE5IDogIlBhdXNlIiwKKyAgICAgICAgICAgIDI3IDogIkVzYyIsCisgICAg
ICAgICAgICAzMiA6ICJTcGFjZSIsCisgICAgICAgICAgICAzMyA6ICJQYWdlVXAiLAorICAgICAg
ICAgICAgMzQgOiAiUGFnZURvd24iLAorICAgICAgICAgICAgMzUgOiAiRW5kIiwKKyAgICAgICAg
ICAgIDM2IDogIkhvbWUiLAorICAgICAgICAgICAgMzcgOiAiTGVmdCIsCisgICAgICAgICAgICAz
OCA6ICJVcCIsCisgICAgICAgICAgICAzOSA6ICJSaWdodCIsCisgICAgICAgICAgICA0MCA6ICJE
b3duIiwKKyAgICAgICAgICAgIDQ0IDogIlByaW50IiwKKyAgICAgICAgICAgIDQ1IDogIkluc2Vy
dCIsCisgICAgICAgICAgICA0NiA6ICJEZWxldGUiLAorICAgICAgICAgICAgOTYgOiAiTnVtcGFk
MCIsCisgICAgICAgICAgICA5NyA6ICJOdW1wYWQxIiwKKyAgICAgICAgICAgIDk4IDogIk51bXBh
ZDIiLAorICAgICAgICAgICAgOTkgOiAiTnVtcGFkMyIsCisgICAgICAgICAgICAxMDA6ICJOdW1w
YWQ0IiwKKyAgICAgICAgICAgIDEwMTogIk51bXBhZDUiLAorICAgICAgICAgICAgMTAyOiAiTnVt
cGFkNiIsCisgICAgICAgICAgICAxMDM6ICJOdW1wYWQ3IiwKKyAgICAgICAgICAgIDEwNDogIk51
bXBhZDgiLAorICAgICAgICAgICAgMTA1OiAiTnVtcGFkOSIsCisgICAgICAgICAgICAxMTI6ICJG
MSIsCisgICAgICAgICAgICAxMTM6ICJGMiIsCisgICAgICAgICAgICAxMTQ6ICJGMyIsCisgICAg
ICAgICAgICAxMTU6ICJGNCIsCisgICAgICAgICAgICAxMTY6ICJGNSIsCisgICAgICAgICAgICAx
MTc6ICJGNiIsCisgICAgICAgICAgICAxMTg6ICJGNyIsCisgICAgICAgICAgICAxMTk6ICJGOCIs
CisgICAgICAgICAgICAxMjA6ICJGOSIsCisgICAgICAgICAgICAxMjE6ICJGMTAiLAorICAgICAg
ICAgICAgMTIyOiAiRjExIiwKKyAgICAgICAgICAgIDEyMzogIkYxMiIsCisgICAgICAgICAgICAx
NDQ6ICJOdW1sb2NrIiwKKyAgICAgICAgICAgIDE0NTogIlNjcm9sbGxvY2siCisgICAgICAgIH0s
CisKKyAgICAgICAgUFJJTlRBQkxFX0tFWVM6IHsKKyAgICAgICAgICAgMzI6ICcgJywgIDQ4OiAn
MCcsICA0OTogJzEnLCAgNTA6ICcyJywgIDUxOiAnMycsICA1MjogJzQnLCA1MzogICc1JywKKyAg
ICAgICAgICAgNTQ6ICc2JywgIDU1OiAnNycsICA1NjogJzgnLCAgNTc6ICc5JywgIDU5OiAnOycs
ICA2MTogJz0nLCA2NTogICdhJywKKyAgICAgICAgICAgNjY6ICdiJywgIDY3OiAnYycsICA2ODog
J2QnLCAgNjk6ICdlJywgIDcwOiAnZicsICA3MTogJ2cnLCA3MjogICdoJywKKyAgICAgICAgICAg
NzM6ICdpJywgIDc0OiAnaicsICA3NTogJ2snLCAgNzY6ICdsJywgIDc3OiAnbScsICA3ODogJ24n
LCA3OTogICdvJywKKyAgICAgICAgICAgODA6ICdwJywgIDgxOiAncScsICA4MjogJ3InLCAgODM6
ICdzJywgIDg0OiAndCcsICA4NTogJ3UnLCA4NjogICd2JywKKyAgICAgICAgICAgODc6ICd3Jywg
IDg4OiAneCcsICA4OTogJ3knLCAgOTA6ICd6JywgMTA3OiAnKycsIDEwOTogJy0nLCAxMTA6ICcu
JywKKyAgICAgICAgICAxODg6ICcsJywgMTkwOiAnLicsIDE5MTogJy8nLCAxOTI6ICdgJywgMjE5
OiAnWycsIDIyMDogJ1xcJywKKyAgICAgICAgICAyMjE6ICddJywgMjIyOiAnXCcnCisgICAgICAg
IH0KKyAgICB9OworICAgIGZvciAodmFyIGkgaW4gcmV0LkZVTkNUSU9OX0tFWVMpIHsKKyAgICAg
ICAgdmFyIG5hbWUgPSByZXQuRlVOQ1RJT05fS0VZU1tpXS50b0xvd2VyQ2FzZSgpOworICAgICAg
ICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7CisgICAgfQorICAgIG9vcC5taXhpbihyZXQs
IHJldC5NT0RJRklFUl9LRVlTKTsKKyAgICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tF
WVMpOworICAgIG9vcC5taXhpbihyZXQsIHJldC5GVU5DVElPTl9LRVlTKTsKKyAgICByZXQuZW50
ZXIgPSByZXRbInJldHVybiJdOworICAgIHJldC5lc2NhcGUgPSByZXQuZXNjOworICAgIHJldC5k
ZWwgPSByZXRbImRlbGV0ZSJdOworICAgIHJldFsxNzNdID0gJy0nOworCisgICAgcmV0dXJuIHJl
dDsKK30pKCk7Citvb3AubWl4aW4oZXhwb3J0cywgS2V5cyk7CisKK2V4cG9ydHMua2V5Q29kZVRv
U3RyaW5nID0gZnVuY3Rpb24oa2V5Q29kZSkgeworICAgIHJldHVybiAoS2V5c1trZXlDb2RlXSB8
fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGtleUNvZGUpKS50b0xvd2VyQ2FzZSgpOworfQorCit9KTsK
KworYWNlLmRlZmluZSgnYWNlL2xpYi9vb3AnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4cG9ydHMu
aW5oZXJpdHMgPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRlbXBDdG9yID0gZnVuY3Rpb24oKSB7
fTsKKyAgICByZXR1cm4gZnVuY3Rpb24oY3Rvciwgc3VwZXJDdG9yKSB7CisgICAgICAgIHRlbXBD
dG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7CisgICAgICAgIGN0b3Iuc3VwZXJf
ID0gc3VwZXJDdG9yLnByb3RvdHlwZTsKKyAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgdGVt
cEN0b3IoKTsKKyAgICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yOworICAg
IH07Cit9KCkpOworCitleHBvcnRzLm1peGluID0gZnVuY3Rpb24ob2JqLCBtaXhpbikgeworICAg
IGZvciAodmFyIGtleSBpbiBtaXhpbikgeworICAgICAgICBvYmpba2V5XSA9IG1peGluW2tleV07
CisgICAgfQorfTsKKworZXhwb3J0cy5pbXBsZW1lbnQgPSBmdW5jdGlvbihwcm90bywgbWl4aW4p
IHsKKyAgICBleHBvcnRzLm1peGluKHByb3RvLCBtaXhpbik7Cit9OworCit9KTsKKworYWNlLmRl
ZmluZSgnYWNlL2xpYi91c2VyYWdlbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
IF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworZXhwb3J0cy5PUyA9IHsK
KyAgICBMSU5VWDogIkxJTlVYIiwKKyAgICBNQUM6ICJNQUMiLAorICAgIFdJTkRPV1M6ICJXSU5E
T1dTIgorfTsKK2V4cG9ydHMuZ2V0T1MgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXhwb3J0cy5p
c01hYykgeworICAgICAgICByZXR1cm4gZXhwb3J0cy5PUy5NQUM7CisgICAgfSBlbHNlIGlmIChl
eHBvcnRzLmlzTGludXgpIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuTElOVVg7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuV0lORE9XUzsKKyAgICB9Cit9Owor
aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0gIm9iamVjdCIpCisgICAgcmV0dXJuOworCit2YXIgb3Mg
PSAobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFsib3RoZXIi
XSlbMF0udG9Mb3dlckNhc2UoKTsKK3ZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CitleHBv
cnRzLmlzV2luID0gKG9zID09ICJ3aW4iKTsKK2V4cG9ydHMuaXNNYWMgPSAob3MgPT0gIm1hYyIp
OworZXhwb3J0cy5pc0xpbnV4ID0gKG9zID09ICJsaW51eCIpOworZXhwb3J0cy5pc0lFID0gCisg
ICAgKG5hdmlnYXRvci5hcHBOYW1lID09ICJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiIHx8
IG5hdmlnYXRvci5hcHBOYW1lLmluZGV4T2YoIk1TQXBwSG9zdCIpID49IDApCisgICAgJiYgcGFy
c2VGbG9hdChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFIChbMC05XStbXC4wLTldKykv
KVsxXSk7CisgICAgCitleHBvcnRzLmlzT2xkSUUgPSBleHBvcnRzLmlzSUUgJiYgZXhwb3J0cy5p
c0lFIDwgOTsKK2V4cG9ydHMuaXNHZWNrbyA9IGV4cG9ydHMuaXNNb3ppbGxhID0gd2luZG93LmNv
bnRyb2xsZXJzICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gIkdlY2tvIjsKK2V4cG9y
dHMuaXNPbGRHZWNrbyA9IGV4cG9ydHMuaXNHZWNrbyAmJiBwYXJzZUludCgobmF2aWdhdG9yLnVz
ZXJBZ2VudC5tYXRjaCgvcnZcOihcZCspLyl8fFtdKVsxXSwgMTApIDwgNDsKK2V4cG9ydHMuaXNP
cGVyYSA9IHdpbmRvdy5vcGVyYSAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2lu
ZG93Lm9wZXJhKSA9PSAiW29iamVjdCBPcGVyYV0iOworZXhwb3J0cy5pc1dlYktpdCA9IHBhcnNl
RmxvYXQodWEuc3BsaXQoIldlYktpdC8iKVsxXSkgfHwgdW5kZWZpbmVkOworCitleHBvcnRzLmlz
Q2hyb21lID0gcGFyc2VGbG9hdCh1YS5zcGxpdCgiIENocm9tZS8iKVsxXSkgfHwgdW5kZWZpbmVk
OworCitleHBvcnRzLmlzQUlSID0gdWEuaW5kZXhPZigiQWRvYmVBSVIiKSA+PSAwOworCitleHBv
cnRzLmlzSVBhZCA9IHVhLmluZGV4T2YoImlQYWQiKSA+PSAwOworCitleHBvcnRzLmlzVG91Y2hQ
YWQgPSB1YS5pbmRleE9mKCJUb3VjaFBhZCIpID49IDA7CisKK30pOworCithY2UuZGVmaW5lKCdh
Y2UvZWRpdG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2Zp
eG9sZGJyb3dzZXJzJywgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL3Vz
ZXJhZ2VudCcsICdhY2Uva2V5Ym9hcmQvdGV4dGlucHV0JywgJ2FjZS9tb3VzZS9tb3VzZV9oYW5k
bGVyJywgJ2FjZS9tb3VzZS9mb2xkX2hhbmRsZXInLCAnYWNlL2tleWJvYXJkL2tleWJpbmRpbmcn
LCAnYWNlL2VkaXRfc2Vzc2lvbicsICdhY2Uvc2VhcmNoJywgJ2FjZS9yYW5nZScsICdhY2UvbGli
L2V2ZW50X2VtaXR0ZXInLCAnYWNlL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlcicsICdhY2UvY29t
bWFuZHMvZGVmYXVsdF9jb21tYW5kcycsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3JlcXVpcmUoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7
CisKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgi
Li9saWIvbGFuZyIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2VudCIp
OwordmFyIFRleHRJbnB1dCA9IHJlcXVpcmUoIi4va2V5Ym9hcmQvdGV4dGlucHV0IikuVGV4dElu
cHV0OwordmFyIE1vdXNlSGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvbW91c2VfaGFuZGxlciIp
Lk1vdXNlSGFuZGxlcjsKK3ZhciBGb2xkSGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvZm9sZF9o
YW5kbGVyIikuRm9sZEhhbmRsZXI7Cit2YXIgS2V5QmluZGluZyA9IHJlcXVpcmUoIi4va2V5Ym9h
cmQva2V5YmluZGluZyIpLktleUJpbmRpbmc7Cit2YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIu
L2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uOwordmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2Vh
cmNoIikuU2VhcmNoOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFy
IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0
ZXI7Cit2YXIgQ29tbWFuZE1hbmFnZXIgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFu
YWdlciIpLkNvbW1hbmRNYW5hZ2VyOwordmFyIGRlZmF1bHRDb21tYW5kcyA9IHJlcXVpcmUoIi4v
Y29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIpLmNvbW1hbmRzOwordmFyIGNvbmZpZyA9IHJlcXVp
cmUoIi4vY29uZmlnIik7Cit2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24p
IHsKKyAgICB2YXIgY29udGFpbmVyID0gcmVuZGVyZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpOwor
ICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOworICAgIHRoaXMucmVuZGVyZXIgPSByZW5k
ZXJlcjsKKworICAgIHRoaXMuY29tbWFuZHMgPSBuZXcgQ29tbWFuZE1hbmFnZXIodXNlcmFnZW50
LmlzTWFjID8gIm1hYyIgOiAid2luIiwgZGVmYXVsdENvbW1hbmRzKTsKKyAgICB0aGlzLnRleHRJ
bnB1dCAgPSBuZXcgVGV4dElucHV0KHJlbmRlcmVyLmdldFRleHRBcmVhQ29udGFpbmVyKCksIHRo
aXMpOworICAgIHRoaXMucmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5nZXRFbGVt
ZW50KCk7CisgICAgdGhpcy5rZXlCaW5kaW5nID0gbmV3IEtleUJpbmRpbmcodGhpcyk7CisgICAg
dGhpcy4kbW91c2VIYW5kbGVyID0gbmV3IE1vdXNlSGFuZGxlcih0aGlzKTsKKyAgICBuZXcgRm9s
ZEhhbmRsZXIodGhpcyk7CisKKyAgICB0aGlzLiRibG9ja1Njcm9sbGluZyA9IDA7CisgICAgdGhp
cy4kc2VhcmNoID0gbmV3IFNlYXJjaCgpLnNldCh7CisgICAgICAgIHdyYXA6IHRydWUKKyAgICB9
KTsKKworICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbigiIikp
OworfTsKKworKGZ1bmN0aW9uKCl7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1p
dHRlcik7CisgICAgdGhpcy5zZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrZXlib2FyZEhh
bmRsZXIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBrZXlib2FyZEhhbmRsZXIgPT0gInN0cmluZyIg
JiYga2V5Ym9hcmRIYW5kbGVyKSB7CisgICAgICAgICAgICB0aGlzLiRrZXliaW5kaW5nSWQgPSBr
ZXlib2FyZEhhbmRsZXI7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICAg
ICAgY29uZmlnLmxvYWRNb2R1bGUoWyJrZXliaW5kaW5nIiwga2V5Ym9hcmRIYW5kbGVyXSwgZnVu
Y3Rpb24obW9kdWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKF9zZWxmLiRrZXliaW5kaW5nSWQg
PT0ga2V5Ym9hcmRIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICBfc2VsZi5rZXlCaW5kaW5n
LnNldEtleWJvYXJkSGFuZGxlcihtb2R1bGUgJiYgbW9kdWxlLmhhbmRsZXIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy4ka2V5Ymlu
ZGluZ0lkOworICAgICAgICAgICAgdGhpcy5rZXlCaW5kaW5nLnNldEtleWJvYXJkSGFuZGxlcihr
ZXlib2FyZEhhbmRsZXIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldEtleWJvYXJk
SGFuZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdl
dEtleWJvYXJkSGFuZGxlcigpOworICAgIH07CisgICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rp
b24oc2Vzc2lvbikgeworICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09IHNlc3Npb24pCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikgeworICAgICAgICAg
ICAgdmFyIG9sZFNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgICAgICB0aGlzLnNlc3Np
b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7
CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlTW9k
ZSIsIHRoaXMuJG9uQ2hhbmdlTW9kZSk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3Zl
RXZlbnRMaXN0ZW5lcigidG9rZW5pemVyVXBkYXRlIiwgdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUp
OworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVRh
YlNpemUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9u
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBMaW1pdCIsIHRoaXMuJG9uQ2hhbmdlV3Jh
cExpbWl0KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2VXcmFwTW9kZSIsIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOworICAgICAgICAgICAgdGhp
cy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9uQ2hhbmdlRm9sZCIsIHRoaXMuJG9uQ2hh
bmdlRm9sZCk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
Y2hhbmdlRnJvbnRNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKTsKKyAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VCYWNrTWFya2VyIiwg
dGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1v
dmVFdmVudExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3Bv
aW50KTsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFu
Z2VBbm5vdGF0aW9uIiwgdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKTsKKyAgICAgICAgICAgIHRo
aXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUiLCB0aGlzLiRv
bkN1cnNvckNoYW5nZSk7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0
ZW5lcigiY2hhbmdlU2Nyb2xsVG9wIiwgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpOworICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUxlZnRUb3AiLCB0
aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpOworCisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0g
dGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKyAg
ICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24i
LCB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNl
c3Npb24gPSBzZXNzaW9uOworCisgICAgICAgIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UgPSB0aGlz
Lm9uRG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExp
c3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKTsKKyAgICAgICAgdGhpcy5y
ZW5kZXJlci5zZXRTZXNzaW9uKHNlc3Npb24pOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9k
ZSA9IHRoaXMub25DaGFuZ2VNb2RlLmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZl
bnRMaXN0ZW5lcigiY2hhbmdlTW9kZSIsIHRoaXMuJG9uQ2hhbmdlTW9kZSk7CisKKyAgICAgICAg
dGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUgPSB0aGlzLm9uVG9rZW5pemVyVXBkYXRlLmJpbmQodGhp
cyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigidG9rZW5pemVyVXBkYXRlIiwg
dGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlVGFiU2l6
ZSA9IHRoaXMucmVuZGVyZXIub25DaGFuZ2VUYWJTaXplLmJpbmQodGhpcy5yZW5kZXJlcik7Cisg
ICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlVGFiU2l6ZSIsIHRoaXMuJG9u
Q2hhbmdlVGFiU2l6ZSk7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQgPSB0aGlz
Lm9uQ2hhbmdlV3JhcExpbWl0LmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZlbnRM
aXN0ZW5lcigiY2hhbmdlV3JhcExpbWl0IiwgdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpOworCisg
ICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUgPSB0aGlzLm9uQ2hhbmdlV3JhcE1vZGUuYmlu
ZCh0aGlzKTsKKyAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VXcmFwTW9k
ZSIsIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlRm9s
ZCA9IHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyk7CisgICAgICAgIHNlc3Npb24uYWRkRXZl
bnRMaXN0ZW5lcigiY2hhbmdlRm9sZCIsIHRoaXMuJG9uQ2hhbmdlRm9sZCk7CisKKyAgICAgICAg
dGhpcy4kb25DaGFuZ2VGcm9udE1hcmtlciA9IHRoaXMub25DaGFuZ2VGcm9udE1hcmtlci5iaW5k
KHRoaXMpOworICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlRnJv
bnRNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKTsKKworICAgICAgICB0aGlzLiRv
bkNoYW5nZUJhY2tNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlQmFja01hcmtlci5iaW5kKHRoaXMpOwor
ICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIs
IHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcik7CisKKyAgICAgICAgdGhpcy4kb25DaGFuZ2VCcmVh
a3BvaW50ID0gdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKTsKKyAgICAgICAgdGhp
cy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUJyZWFrcG9pbnQiLCB0aGlzLiRvbkNo
YW5nZUJyZWFrcG9pbnQpOworCisgICAgICAgIHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbiA9IHRo
aXMub25DaGFuZ2VBbm5vdGF0aW9uLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5h
ZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VBbm5vdGF0aW9uIiwgdGhpcy4kb25DaGFuZ2VBbm5vdGF0
aW9uKTsKKworICAgICAgICB0aGlzLiRvbkN1cnNvckNoYW5nZSA9IHRoaXMub25DdXJzb3JDaGFu
Z2UuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNo
YW5nZU92ZXJ3cml0ZSIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKworICAgICAgICB0aGlzLiRv
blNjcm9sbFRvcENoYW5nZSA9IHRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKTsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9sbFRvcCIsIHRo
aXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTsKKworICAgICAgICB0aGlzLiRvblNjcm9sbExlZnRDaGFu
Z2UgPSB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLnNl
c3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsTGVmdCIsIHRoaXMuJG9uU2Nyb2xs
TGVmdENoYW5nZSk7CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLmdldFNlbGVj
dGlvbigpOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VD
dXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CisKKyAgICAgICAgdGhpcy4kb25TZWxlY3Rp
b25DaGFuZ2UgPSB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRo
aXMuc2VsZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMuJG9u
U2VsZWN0aW9uQ2hhbmdlKTsKKworICAgICAgICB0aGlzLm9uQ2hhbmdlTW9kZSgpOworCisgICAg
ICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7CisgICAgICAgIHRoaXMub25DdXJzb3JDaGFu
Z2UoKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKworICAgICAgICB0aGlz
Lm9uU2Nyb2xsVG9wQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlKCk7
CisgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgdGhpcy5vbkNoYW5n
ZUZyb250TWFya2VyKCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VCYWNrTWFya2VyKCk7CisgICAg
ICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCk7CisgICAgICAgIHRoaXMub25DaGFuZ2VBbm5v
dGF0aW9uKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMu
cmVuZGVyZXIuYWRqdXN0V3JhcExpbWl0KCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRl
RnVsbCgpOworCisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlc3Npb24iLCB7CisgICAgICAg
ICAgICBzZXNzaW9uOiBzZXNzaW9uLAorICAgICAgICAgICAgb2xkU2Vzc2lvbjogb2xkU2Vzc2lv
bgorICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uOworICAgIH07CisgICAgdGhpcy5zZXRWYWx1
ZSA9IGZ1bmN0aW9uKHZhbCwgY3Vyc29yUG9zKSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5kb2Mu
c2V0VmFsdWUodmFsKTsKKworICAgICAgICBpZiAoIWN1cnNvclBvcykKKyAgICAgICAgICAgIHRo
aXMuc2VsZWN0QWxsKCk7CisgICAgICAgIGVsc2UgaWYgKGN1cnNvclBvcyA9PSAxKQorICAgICAg
ICAgICAgdGhpcy5uYXZpZ2F0ZUZpbGVFbmQoKTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9z
ID09IC0xKQorICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydCgpOworCisgICAgICAg
IHJldHVybiB2YWw7CisgICAgfTsKKyAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0VmFsdWUoKTsKKyAgICB9OworICAgIHRoaXMu
Z2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlv
bjsKKyAgICB9OworICAgIHRoaXMucmVzaXplID0gZnVuY3Rpb24oZm9yY2UpIHsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci5vblJlc2l6ZShmb3JjZSk7CisgICAgfTsKKyAgICB0aGlzLnNldFRoZW1l
ID0gZnVuY3Rpb24odGhlbWUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRUaGVtZSh0aGVt
ZSk7CisgICAgfTsKKyAgICB0aGlzLmdldFRoZW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnJlbmRlcmVyLmdldFRoZW1lKCk7CisgICAgfTsKKyAgICB0aGlzLnNldFN0eWxl
ID0gZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdHls
ZSk7CisgICAgfTsKKyAgICB0aGlzLnVuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgeworICAg
ICAgICB0aGlzLnJlbmRlcmVyLnVuc2V0U3R5bGUoc3R5bGUpOworICAgIH07CisgICAgdGhpcy5z
ZXRGb250U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBzaXplID09
ICJudW1iZXIiKQorICAgICAgICAgICAgc2l6ZSA9IHNpemUgKyAicHgiOworICAgICAgICB0aGlz
LmNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IHNpemU7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
dXBkYXRlRm9udFNpemUoKTsKKyAgICB9OworCisgICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdo
dCkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlc3Npb24u
JGJyYWNrZXRIaWdobGlnaHQpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRicmFja2V0SGln
aGxpZ2h0ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRQ
ZW5kaW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOworICAgICAgICB0aGlzLiRoaWdobGlnaHRQZW5kaW5nID0gdHJ1ZTsKKyAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFBl
bmRpbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIHBvcyA9IHNlbGYuc2Vzc2lvbi5maW5k
TWF0Y2hpbmdCcmFja2V0KHNlbGYuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7CisgICAgICAgICAgICBp
ZiAocG9zKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHBvcy5yb3cs
IHBvcy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4rMSk7CisgICAgICAgICAgICAgICAgc2Vs
Zi5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gc2VsZi5zZXNzaW9uLmFkZE1hcmtlcihyYW5n
ZSwgImFjZV9icmFja2V0IiwgInRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgNTAp
OworICAgIH07CisgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgX3Nl
bGYgPSB0aGlzOworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
X3NlbGYudGV4dElucHV0LmZvY3VzKCk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLnRleHRJ
bnB1dC5mb2N1cygpOworICAgIH07CisgICAgdGhpcy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCgpOworICAgIH07CisgICAg
dGhpcy5ibHVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMudGV4dElucHV0LmJsdXIoKTsK
KyAgICB9OworICAgIHRoaXMub25Gb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhp
cy4kaXNGb2N1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRpc0ZvY3Vz
ZWQgPSB0cnVlOworICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTsKKyAgICAgICAg
dGhpcy5yZW5kZXJlci52aXN1YWxpemVGb2N1cygpOworICAgICAgICB0aGlzLl9lbWl0KCJmb2N1
cyIpOworICAgIH07CisgICAgdGhpcy5vbkJsdXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYg
KCF0aGlzLiRpc0ZvY3VzZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGlz
Rm9jdXNlZCA9IGZhbHNlOworICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDdXJzb3IoKTsKKyAg
ICAgICAgdGhpcy5yZW5kZXJlci52aXN1YWxpemVCbHVyKCk7CisgICAgICAgIHRoaXMuX2VtaXQo
ImJsdXIiKTsKKyAgICB9OworCisgICAgdGhpcy4kY3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgfTsKKyAgICB0aGlz
Lm9uRG9jdW1lbnRDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkZWx0YSA9IGUu
ZGF0YTsKKyAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAgIHZhciBsYXN0
Um93OworCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJiBk
ZWx0YS5hY3Rpb24gIT0gImluc2VydExpbmVzIiAmJiBkZWx0YS5hY3Rpb24gIT0gInJlbW92ZUxp
bmVzIikKKyAgICAgICAgICAgIGxhc3RSb3cgPSByYW5nZS5lbmQucm93OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsYXN0Um93ID0gSW5maW5pdHk7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
dXBkYXRlTGluZXMocmFuZ2Uuc3RhcnQucm93LCBsYXN0Um93KTsKKworICAgICAgICB0aGlzLl9l
bWl0KCJjaGFuZ2UiLCBlKTsKKyAgICAgICAgdGhpcy4kY3Vyc29yQ2hhbmdlKCk7CisgICAgfTsK
KworICAgIHRoaXMub25Ub2tlbml6ZXJVcGRhdGUgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZh
ciByb3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJvd3Mu
Zmlyc3QsIHJvd3MubGFzdCk7CisgICAgfTsKKworCisgICAgdGhpcy5vblNjcm9sbFRvcENoYW5n
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWSh0aGlzLnNl
c3Npb24uZ2V0U2Nyb2xsVG9wKCkpOworICAgIH07CisgICAgCisgICAgdGhpcy5vblNjcm9sbExl
ZnRDaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1go
dGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSk7CisgICAgfTsKKyAgICB0aGlzLm9uQ3Vyc29y
Q2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOworCisg
ICAgICAgIGlmICghdGhpcy4kYmxvY2tTY3JvbGxpbmcpIHsKKyAgICAgICAgICAgIHRoaXMucmVu
ZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
JGhpZ2hsaWdodEJyYWNrZXRzKCk7CisgICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2
ZUxpbmUoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgfTsK
KworICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oKTsKKworICAgICAgICB2YXIgaGln
aGxpZ2h0OworICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSkgeworICAgICAg
ICAgICAgaWYgKCh0aGlzLiRzZWxlY3Rpb25TdHlsZSAhPSAibGluZSIgfHwgIXRoaXMuc2VsZWN0
aW9uLmlzTXVsdGlMaW5lKCkpKQorICAgICAgICAgICAgICAgIGhpZ2hsaWdodCA9IHRoaXMuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXNzaW9uLiRoaWdo
bGlnaHRMaW5lTWFya2VyICYmICFoaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHNlc3Npb24ucmVt
b3ZlTWFya2VyKHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpOworICAgICAgICAgICAg
c2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAo
IXNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7CisgICAgICAgICAg
ICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gc2Vzc2lvbi5oaWdobGlnaHRMaW5lcyho
aWdobGlnaHQucm93LCBoaWdobGlnaHQucm93LCAiYWNlX2FjdGl2ZS1saW5lIik7CisgICAgICAg
IH0gZWxzZSBpZiAoaGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRM
aW5lTWFya2VyLnN0YXJ0LnJvdyA9IGhpZ2hsaWdodC5yb3c7CisgICAgICAgICAgICBzZXNzaW9u
LiRoaWdobGlnaHRMaW5lTWFya2VyLmVuZC5yb3cgPSBoaWdobGlnaHQucm93OworICAgICAgICAg
ICAgc2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZh
ciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIGlmIChzZXNzaW9uLiRzZWxlY3Rp
b25NYXJrZXIpIHsKKyAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJHNl
bGVjdGlvbk1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFy
a2VyID0gbnVsbDsKKworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICAg
ICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUoKTsKKyAgICAgICAgICAg
IHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlciA9IHNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNl
X3NlbGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
JHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBy
ZSA9IHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCAmJiB0aGlzLiRnZXRTZWxlY3Rpb25IaWdo
TGlnaHRSZWdleHAoKQorICAgICAgICB0aGlzLnNlc3Npb24uaGlnaGxpZ2h0KHJlKTsKKyAgICAg
ICAgCisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOworICAgIH07CisKKyAg
ICB0aGlzLiRnZXRTZWxlY3Rpb25IaWdoTGlnaHRSZWdleHAgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0VtcHR5
KCkgfHwgc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIHN0YXJ0T3V0ZXIgPSBzZWxlY3Rpb24uc3RhcnQuY29sdW1uIC0gMTsKKyAgICAg
ICAgdmFyIGVuZE91dGVyID0gc2VsZWN0aW9uLmVuZC5jb2x1bW4gKyAxOworICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZ2V0TGluZShzZWxlY3Rpb24uc3RhcnQucm93KTsKKyAgICAgICAgdmFy
IGxpbmVDb2xzID0gbGluZS5sZW5ndGg7CisgICAgICAgIHZhciBuZWVkbGUgPSBsaW5lLnN1YnN0
cmluZyhNYXRoLm1heChzdGFydE91dGVyLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hdGgubWluKGVuZE91dGVyLCBsaW5lQ29scykpOworICAgICAgICBpZiAoKHN0
YXJ0T3V0ZXIgPj0gMCAmJiAvXltcd1xkXS8udGVzdChuZWVkbGUpKSB8fAorICAgICAgICAgICAg
KGVuZE91dGVyIDw9IGxpbmVDb2xzICYmIC9bXHdcZF0kLy50ZXN0KG5lZWRsZSkpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG5lZWRsZSA9IGxpbmUuc3Vic3RyaW5nKHNlbGVjdGlv
bi5zdGFydC5jb2x1bW4sIHNlbGVjdGlvbi5lbmQuY29sdW1uKTsKKyAgICAgICAgaWYgKCEvXltc
d1xkXSskLy50ZXN0KG5lZWRsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IHJlID0gdGhpcy4kc2VhcmNoLiRhc3NlbWJsZVJlZ0V4cCh7CisgICAgICAgICAgICB3aG9sZVdv
cmQ6IHRydWUsCisgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0cnVlLAorICAgICAgICAgICAg
bmVlZGxlOiBuZWVkbGUKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlOworICAgIH07
CisKKworICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZyb250TWFya2VycygpOworICAgIH07CisKKyAgICB0aGlz
Lm9uQ2hhbmdlQmFja01hcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVy
LnVwZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKworCisgICAgdGhpcy5vbkNoYW5nZUJyZWFr
cG9pbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCcmVha3Bv
aW50cygpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEFubm90YXRpb25zKHRoaXMuc2Vzc2lvbi5n
ZXRBbm5vdGF0aW9ucygpKTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdlTW9kZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKTsKKyAgICB9Owor
CisKKyAgICB0aGlzLm9uQ2hhbmdlV3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlRnVsbCgpOworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlV3Jh
cE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5vblJlc2l6ZSh0cnVl
KTsKKyAgICB9OworCisKKyAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CisgICAgICAgIHRoaXMucmVu
ZGVyZXIudXBkYXRlRnVsbCgpOworICAgIH07CisKKyAgICB0aGlzLmdldENvcHlUZXh0ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciB0ZXh0ID0gIiI7CisgICAgICAgIGlmICghdGhpcy5zZWxl
Y3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0
UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKKworICAgICAgICB0aGlzLl9lbWl0KCJj
b3B5IiwgdGV4dCk7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisgICAgdGhpcy5vbkNv
cHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jb21tYW5kcy5leGVjKCJjb3B5IiwgdGhp
cyk7CisgICAgfTsKKyAgICB0aGlzLm9uQ3V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
Y29tbWFuZHMuZXhlYygiY3V0IiwgdGhpcyk7CisgICAgfTsKKyAgICB0aGlzLm9uUGFzdGUgPSBm
dW5jdGlvbih0ZXh0KSB7CisgICAgICAgIGlmICh0aGlzLiRyZWFkT25seSkgCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHRoaXMuX2VtaXQoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIHRo
aXMuaW5zZXJ0KHRleHQpOworICAgIH07CisKKworICAgIHRoaXMuZXhlY0NvbW1hbmQgPSBmdW5j
dGlvbihjb21tYW5kLCBhcmdzKSB7CisgICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhjb21tYW5k
LCB0aGlzLCBhcmdzKTsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24odGV4dCkg
eworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIG1vZGUg
PSBzZXNzaW9uLmdldE1vZGUoKTsKKyAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKKworICAgICAgICBpZiAodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpKSB7
CisgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbW9kZS50cmFuc2Zvcm1BY3Rpb24oc2Vzc2lv
bi5nZXRTdGF0ZShjdXJzb3Iucm93KSwgJ2luc2VydGlvbicsIHRoaXMsIHNlc3Npb24sIHRleHQp
OworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdHJh
bnNmb3JtLnRleHQ7CisgICAgICAgIH0KKworICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJc
dCIsIHRoaXMuc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAgIGlmICghdGhpcy5zZWxl
Y3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjdXJzb3IgPSB0aGlzLnNlc3Npb24ucmVt
b3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgICAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5zZXNzaW9uLmdldE92
ZXJ3cml0ZSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UuZnJvbVBvaW50
cyhjdXJzb3IsIGN1cnNvcik7CisgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICs9IHRleHQu
bGVuZ3RoOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAgICAgdmFyIHN0YXJ0
ID0gY3Vyc29yLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmVTdGF0ZSA9IHNlc3Npb24uZ2V0U3Rh
dGUoY3Vyc29yLnJvdyk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNv
ci5yb3cpOworICAgICAgICB2YXIgc2hvdWxkT3V0ZGVudCA9IG1vZGUuY2hlY2tPdXRkZW50KGxp
bmVTdGF0ZSwgbGluZSwgdGV4dCk7CisgICAgICAgIHZhciBlbmQgPSBzZXNzaW9uLmluc2VydChj
dXJzb3IsIHRleHQpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtLnNlbGVj
dGlvbikgeworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybS5zZWxlY3Rpb24ubGVuZ3RoID09IDIp
IHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGNvbHVtbgorICAgICAgICAg
ICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKAorICAgICAgICAgICAgICAg
ICAgICBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgc3RhcnQgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLnJvdywgc3RhcnQgKyB0cmFu
c2Zvcm0uc2VsZWN0aW9uWzFdKSk7CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBUcmFuc2Zvcm0g
cmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcm93LgorICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0
aW9uLnNldFNlbGVjdGlvblJhbmdlKAorICAgICAgICAgICAgICAgICAgICBuZXcgUmFuZ2UoY3Vy
c29yLnJvdyArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0uc2VsZWN0aW9uWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3Vyc29yLnJvdyArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMl0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2VsZWN0aW9uWzNdKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlc3Npb24uZ2V0RG9jdW1lbnQoKS5pc05ld0xpbmUo
dGV4dCkpIHsKKyAgICAgICAgICAgIHZhciBsaW5lSW5kZW50ID0gbW9kZS5nZXROZXh0TGluZUlu
ZGVudChsaW5lU3RhdGUsIGxpbmUuc2xpY2UoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0
VGFiU3RyaW5nKCkpOworCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhjdXJzb3Iucm93
KzEsIDApOworCisgICAgICAgICAgICB2YXIgc2l6ZSA9IHNlc3Npb24uZ2V0VGFiU2l6ZSgpOwor
ICAgICAgICAgICAgdmFyIG1pbkluZGVudCA9IE51bWJlci5NQVhfVkFMVUU7CisKKyAgICAgICAg
ICAgIGZvciAodmFyIHJvdyA9IGN1cnNvci5yb3cgKyAxOyByb3cgPD0gZW5kLnJvdzsgKytyb3cp
IHsKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gMDsKKworICAgICAgICAgICAgICAgIGxp
bmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxpbmUubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLmNo
YXJBdChpKSA9PSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9IHNpemU7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUuY2hhckF0KGkpID09ICcgJykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAxOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAo
L1teXHNdLy50ZXN0KGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBtaW5JbmRlbnQgPSBNYXRo
Lm1pbihpbmRlbnQsIG1pbkluZGVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAodmFyIHJvdyA9IGN1cnNvci5yb3cgKyAxOyByb3cgPD0gZW5kLnJvdzsgKytyb3cpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgb3V0ZGVudCA9IG1pbkluZGVudDsKKworICAgICAgICAgICAgICAg
IGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxpbmUubGVuZ3RoICYmIG91dGRlbnQgPiAwOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChsaW5lLmNoYXJBdChpKSA9PSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0ZGVudCAtPSBzaXplOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsaW5lLmNo
YXJBdChpKSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkZW50IC09IDE7Cisg
ICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHJvdywgMCwgcm93LCBpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3MoY3Vyc29yLnJv
dyArIDEsIGVuZC5yb3csIGxpbmVJbmRlbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChzaG91
bGRPdXRkZW50KQorICAgICAgICAgICAgbW9kZS5hdXRvT3V0ZGVudChsaW5lU3RhdGUsIHNlc3Np
b24sIGN1cnNvci5yb3cpOworICAgIH07CisKKyAgICB0aGlzLm9uVGV4dElucHV0ID0gZnVuY3Rp
b24odGV4dCkgeworICAgICAgICB0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQodGV4dCk7Cisg
ICAgfTsKKworICAgIHRoaXMub25Db21tYW5kS2V5ID0gZnVuY3Rpb24oZSwgaGFzaElkLCBrZXlD
b2RlKSB7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoZSwgaGFzaElkLCBr
ZXlDb2RlKTsKKyAgICB9OworICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3Zlcndy
aXRlKSB7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRPdmVyd3JpdGUob3ZlcndyaXRlKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7CisgICAgfTsKKyAgICB0aGlzLnRvZ2dsZU92
ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlc3Npb24udG9nZ2xlT3Zlcndy
aXRlKCk7CisgICAgfTsKKyAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3BlZWQp
IHsKKyAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyLnNldFNjcm9sbFNwZWVkKHNwZWVkKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJG1vdXNlSGFuZGxlci5nZXRTY3JvbGxTcGVlZCgpOworICAgIH07CisgICAgdGhp
cy5zZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVsYXkpIHsKKyAgICAgICAgdGhpcy4kbW91
c2VIYW5kbGVyLnNldERyYWdEZWxheShkcmFnRGVsYXkpOworICAgIH07CisgICAgdGhpcy5nZXRE
cmFnRGVsYXkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG1vdXNlSGFuZGxl
ci5nZXREcmFnRGVsYXkoKTsKKyAgICB9OworCisgICAgdGhpcy4kc2VsZWN0aW9uU3R5bGUgPSAi
bGluZSI7CisgICAgdGhpcy5zZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7Cisg
ICAgICAgIGlmICh0aGlzLiRzZWxlY3Rpb25TdHlsZSA9PSBzdHlsZSkgcmV0dXJuOworCisgICAg
ICAgIHRoaXMuJHNlbGVjdGlvblN0eWxlID0gc3R5bGU7CisgICAgICAgIHRoaXMub25TZWxlY3Rp
b25DaGFuZ2UoKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uU3R5bGUiLCB7
ZGF0YTogc3R5bGV9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvblN0eWxlOworICAgIH07CisK
KyAgICB0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lID0gdHJ1ZTsKKyAgICB0aGlzLnNldEhpZ2hs
aWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAgICAgICAgaWYg
KHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBzaG91bGRI
aWdobGlnaHQ7CisgICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKKyAg
ICB9OworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZTsKKyAgICB9OworCisgICAgdGhp
cy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IHRydWU7CisgICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0
ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CisgICAgICAgIGlmICh0aGlzLiRo
aWdobGlnaHRHdXR0ZXJMaW5lID09IHNob3VsZEhpZ2hsaWdodCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEhpZ2hsaWdodEd1dHRlckxpbmUoc2hvdWxk
SGlnaGxpZ2h0KTsKKyAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IHNob3VsZEhp
Z2hsaWdodDsKKyAgICB9OworCisgICAgdGhpcy5nZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lOworICAg
IH07CisKKyAgICB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPSB0cnVlOworICAgIHRoaXMu
c2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7Cisg
ICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgPT0gc2hvdWxkSGlnaGxpZ2h0
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVk
V29yZCA9IHNob3VsZEhpZ2hsaWdodDsKKyAgICAgICAgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2Uo
KTsKKyAgICB9OworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ7CisgICAgfTsK
KworICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbihzaG91bGRBbmltYXRlKXsK
KyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRlZFNjcm9sbChzaG91bGRBbmltYXRlKTsK
KyAgICB9OworCisgICAgdGhpcy5nZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKCl7CisgICAg
ICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEFuaW1hdGVkU2Nyb2xsKCk7CisgICAgfTsKKyAg
ICB0aGlzLnNldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oc2hvd0ludmlzaWJsZXMpIHsKKyAg
ICAgICAgdGhpcy5yZW5kZXJlci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcyk7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dJbnZpc2libGVzKCk7CisgICAgfTsKKworICAg
IHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHsKKyAgICAg
ICAgdGhpcy5yZW5kZXJlci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKGRpc3BsYXkpOworICAgIH07
CisKKyAgICB0aGlzLmdldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RGlzcGxheUluZGVudEd1aWRlcygpOworICAgIH07
CisgICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4p
IHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTaG93UHJpbnRNYXJnaW4oc2hvd1ByaW50TWFy
Z2luKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dQcmludE1hcmdpbigpOworICAg
IH07CisgICAgdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKHNob3dQcmludE1h
cmdpbikgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByaW50TWFyZ2luQ29sdW1uKHNob3dQ
cmludE1hcmdpbik7CisgICAgfTsKKyAgICB0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFByaW50TWFyZ2luQ29s
dW1uKCk7CisgICAgfTsKKworICAgIHRoaXMuJHJlYWRPbmx5ID0gZmFsc2U7CisgICAgdGhpcy5z
ZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAgICAgIHRoaXMuJHJlYWRPbmx5
ID0gcmVhZE9ubHk7CisgICAgICAgIHRoaXMudGV4dElucHV0LnNldFJlYWRPbmx5KHJlYWRPbmx5
KTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoIXJlYWRP
bmx5KTsKKyAgICB9OworICAgIHRoaXMuZ2V0UmVhZE9ubHkgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJHJlYWRPbmx5OworICAgIH07CisKKyAgICB0aGlzLiRtb2RlQmVoYXZp
b3VycyA9IHRydWU7CisgICAgdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChl
bmFibGVkKSB7CisgICAgICAgIHRoaXMuJG1vZGVCZWhhdmlvdXJzID0gZW5hYmxlZDsKKyAgICB9
OworICAgIHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLiRtb2RlQmVoYXZpb3VyczsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZVdy
YXBCZWhhdmlvdXJzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9
IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9
IGVuYWJsZWQ7CisgICAgfTsKKyAgICB0aGlzLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VyczsKKyAg
ICB9OworICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgeworICAg
ICAgICB2YXIgZ3V0dGVyID0gdGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXI7CisgICAgICAgIGlm
IChndXR0ZXIuZ2V0U2hvd0ZvbGRXaWRnZXRzKCkgPT0gc2hvdykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5zZXRTaG93Rm9sZFdpZGdl
dHMoc2hvdyk7CisgICAgICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9IHNob3c7CisgICAgICAg
IHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpOworICAgIH07CisgICAgdGhpcy5nZXRTaG93Rm9s
ZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuJGd1
dHRlckxheWVyLmdldFNob3dGb2xkV2lkZ2V0cygpOworICAgIH07CisKKyAgICB0aGlzLnNldEZh
ZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5z
ZXRGYWRlRm9sZFdpZGdldHMoc2hvdyk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0RmFkZUZvbGRX
aWRnZXRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZh
ZGVGb2xkV2lkZ2V0cygpOworICAgIH07CisgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihkaXIp
IHsKKyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSl7CisgICAgICAgICAgICBp
ZiAoZGlyID09ICJsZWZ0IikKKyAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RM
ZWZ0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24u
c2VsZWN0UmlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0
U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQo
KSkgeworICAgICAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CisgICAgICAgICAg
ICB2YXIgc3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAg
ICAgICB2YXIgbmV3X3JhbmdlID0gc2Vzc2lvbi5nZXRNb2RlKCkudHJhbnNmb3JtQWN0aW9uKHN0
YXRlLCAnZGVsZXRpb24nLCB0aGlzLCBzZXNzaW9uLCByYW5nZSk7CisgICAgICAgICAgICBpZiAo
bmV3X3JhbmdlKQorICAgICAgICAgICAgICAgIHJhbmdlID0gbmV3X3JhbmdlOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAgIHRoaXMuY2xl
YXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlV29yZFJpZ2h0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkUmlnaHQoKTsKKworICAgICAgICB0aGlzLnNlc3Np
b24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIHRoaXMuY2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlV29yZExlZnQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRo
aXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KCk7CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJl
bW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0
aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZVRvTGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlz
LnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQoKTsKKworICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rp
b24oKTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlVG9MaW5lRW5kID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aGlzLnNl
bGVjdGlvbi5zZWxlY3RMaW5lRW5kKCk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRT
ZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uID09IHJhbmdl
LmVuZC5jb2x1bW4gJiYgcmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpIHsKKyAgICAg
ICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSAwOworICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdysr
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAg
ICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMuc3BsaXRMaW5lID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7
CisgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB0aGlzLmlu
c2VydCgiXG4iKTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihjdXJzb3IpOwor
ICAgIH07CisgICAgdGhpcy50cmFuc3Bvc2VMZXR0ZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigp
OworICAgICAgICB2YXIgY29sdW1uID0gY3Vyc29yLmNvbHVtbjsKKyAgICAgICAgaWYgKGNvbHVt
biA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMu
c2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICB2YXIgc3dhcCwgcmFuZ2U7Cisg
ICAgICAgIGlmIChjb2x1bW4gPCBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgc3dhcCA9IGxp
bmUuY2hhckF0KGNvbHVtbikgKyBsaW5lLmNoYXJBdChjb2x1bW4tMSk7CisgICAgICAgICAgICBy
YW5nZSA9IG5ldyBSYW5nZShjdXJzb3Iucm93LCBjb2x1bW4tMSwgY3Vyc29yLnJvdywgY29sdW1u
KzEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3dhcCA9IGxpbmUu
Y2hhckF0KGNvbHVtbi0xKSArIGxpbmUuY2hhckF0KGNvbHVtbi0yKTsKKyAgICAgICAgICAgIHJh
bmdlID0gbmV3IFJhbmdlKGN1cnNvci5yb3csIGNvbHVtbi0yLCBjdXJzb3Iucm93LCBjb2x1bW4p
OworICAgICAgICB9CisgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCBzd2FwKTsK
KyAgICB9OworICAgIHRoaXMudG9Mb3dlckNhc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IG9yaWdpbmFsUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIGlmICh0
aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNl
bGVjdFdvcmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJh
bmdlKHJhbmdlKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9M
b3dlckNhc2UoKSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9y
aWdpbmFsUmFuZ2UpOworICAgIH07CisgICAgdGhpcy50b1VwcGVyQ2FzZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsK
KyAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJhbmdl
ID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vz
c2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShy
YW5nZSwgdGV4dC50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uUmFuZ2Uob3JpZ2luYWxSYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLmluZGVudCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAg
dmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOworCisgICAgICAgIGlmIChyYW5n
ZS5zdGFydC5yb3cgPCByYW5nZS5lbmQucm93IHx8IHJhbmdlLnN0YXJ0LmNvbHVtbiA8IHJhbmdl
LmVuZC5jb2x1bW4pIHsKKyAgICAgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRS
b3dzKCk7CisgICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJzdCwgcm93cy5s
YXN0LCAiXHQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBpbmRlbnRTdHJp
bmc7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSkgewor
ICAgICAgICAgICAgICAgIHZhciBzaXplICAgICAgICA9IHNlc3Npb24uZ2V0VGFiU2l6ZSgpLAor
ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24o
KSwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uICAgICAgPSBzZXNzaW9uLmRvY3VtZW50VG9T
Y3JlZW5Db2x1bW4ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pLAorICAgICAgICAgICAg
ICAgICAgICBjb3VudCAgICAgICA9IChzaXplIC0gY29sdW1uICUgc2l6ZSk7CisKKyAgICAgICAg
ICAgICAgICBpbmRlbnRTdHJpbmcgPSBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIGNvdW50KTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGluZGVudFN0cmluZyA9ICJcdCI7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZW50U3RyaW5nKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdGhpcy5ibG9ja0luZGVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
cm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOworICAgICAgICB0aGlzLnNlc3Npb24uaW5k
ZW50Um93cyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsICJcdCIpOworICAgIH07CisgICAgdGhpcy5i
bG9ja091dGRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMu
c2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLm91dGRlbnRSb3dz
KHNlbGVjdGlvbi5nZXRSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMuc29ydExpbmVzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7Cisg
ICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworCisgICAgICAgIHZhciBsaW5lcyA9
IFtdOworICAgICAgICBmb3IgKGkgPSByb3dzLmZpcnN0OyBpIDw9IHJvd3MubGFzdDsgaSsrKQor
ICAgICAgICAgICAgbGluZXMucHVzaChzZXNzaW9uLmdldExpbmUoaSkpOworCisgICAgICAgIGxp
bmVzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2Uo
KSA8IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGEudG9Mb3dl
ckNhc2UoKSA+IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAs
IDAsIDAsIDApOworICAgICAgICBmb3IgKHZhciBpID0gcm93cy5maXJzdDsgaSA8PSByb3dzLmxh
c3Q7IGkrKykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoaSk7Cisg
ICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5yb3cgPSBpOworICAgICAgICAgICAgZGVsZXRl
UmFuZ2UuZW5kLnJvdyA9IGk7CisgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0g
bGluZS5sZW5ndGg7CisgICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIGxp
bmVzW2ktcm93cy5maXJzdF0pOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnRvZ2dsZUNv
bW1lbnRMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNlc3Np
b24uZ2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyk7CisgICAgICAgIHZhciBy
b3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRN
b2RlKCkudG9nZ2xlQ29tbWVudExpbmVzKHN0YXRlLCB0aGlzLnNlc3Npb24sIHJvd3MuZmlyc3Qs
IHJvd3MubGFzdCk7CisgICAgfTsKKyAgICB0aGlzLmdldE51bWJlckF0ID0gZnVuY3Rpb24oIHJv
dywgY29sdW1uICkgeworICAgICAgICB2YXIgX251bWJlclJ4ID0gL1tcLV0/WzAtOV0rKD86XC5b
MC05XSspPy9nCisgICAgICAgIF9udW1iZXJSeC5sYXN0SW5kZXggPSAwCisKKyAgICAgICAgdmFy
IHMgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpCisgICAgICAgIHdoaWxlKF9udW1iZXJSeC5s
YXN0SW5kZXggPCBjb2x1bW4gLSAxICl7CisgICAgICAgICAgICB2YXIgbSA9IF9udW1iZXJSeC5l
eGVjKHMpCisgICAgICAgICAgICBpZihtLmluZGV4IDw9IGNvbHVtbiAmJiBtLmluZGV4K21bMF0u
bGVuZ3RoID49IGNvbHVtbil7CisgICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IG1bMF0sCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBt
LmluZGV4LAorICAgICAgICAgICAgICAgICAgICBlbmQ6IG0uaW5kZXgrbVswXS5sZW5ndGgKKwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICB0aGlz
Lm1vZGlmeU51bWJlciA9IGZ1bmN0aW9uKGFtb3VudCkgeworICAgICAgICB2YXIgcm93ID0gdGhp
cy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5z
ZWxlY3Rpb24uZ2V0Q3Vyc29yKCkuY29sdW1uOworICAgICAgICB2YXIgY2hhclJhbmdlID0gbmV3
IFJhbmdlKHJvdywgY29sdW1uLTEsIHJvdywgY29sdW1uKTsKKworICAgICAgICB2YXIgYyA9IHRo
aXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoY2hhclJhbmdlKTsKKyAgICAgICAgaWYgKCFpc05hTihw
YXJzZUZsb2F0KGMpKSAmJiBpc0Zpbml0ZShjKSkgeworICAgICAgICAgICAgdmFyIG5yID0gdGhp
cy5nZXROdW1iZXJBdChyb3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAobnIpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZnAgPSBuci52YWx1ZS5pbmRleE9mKCIuIikgPj0gMCA/IG5yLnN0YXJ0
ICsgbnIudmFsdWUuaW5kZXhPZigiLiIpICsgMSA6IG5yLmVuZDsKKyAgICAgICAgICAgICAgICB2
YXIgZGVjaW1hbHMgPSBuci5zdGFydCArIG5yLnZhbHVlLmxlbmd0aCAtIGZwOworCisgICAgICAg
ICAgICAgICAgdmFyIHQgPSBwYXJzZUZsb2F0KG5yLnZhbHVlKTsKKyAgICAgICAgICAgICAgICB0
ICo9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7CisgICAgICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgICAgICBpZihmcCAhPT0gbnIuZW5kICYmIGNvbHVtbiA8IGZwKXsKKyAgICAgICAgICAgICAg
ICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4gLSAxKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhbW91bnQgKj0gTWF0aC5w
b3coMTAsIG5yLmVuZCAtIGNvbHVtbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHQgKz0gYW1vdW50OworICAgICAgICAgICAgICAgIHQgLz0g
TWF0aC5wb3coMTAsIGRlY2ltYWxzKTsKKyAgICAgICAgICAgICAgICB2YXIgbm5yID0gdC50b0Zp
eGVkKGRlY2ltYWxzKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJhbmdlID0gbmV3IFJh
bmdlKHJvdywgbnIuc3RhcnQsIHJvdywgbnIuZW5kKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNl
c3Npb24ucmVwbGFjZShyZXBsYWNlUmFuZ2UsIG5ucik7CisgICAgICAgICAgICAgICAgdGhpcy5t
b3ZlQ3Vyc29yVG8ocm93LCBNYXRoLm1heChuci5zdGFydCArMSwgY29sdW1uICsgbm5yLmxlbmd0
aCAtIG5yLnZhbHVlLmxlbmd0aCkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvd3Mg
PSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdmFyIHJhbmdlOworICAgICAgICBp
ZiAocm93cy5maXJzdCA9PT0gMCB8fCByb3dzLmxhc3QrMSA8IHRoaXMuc2Vzc2lvbi5nZXRMZW5n
dGgoKSkKKyAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKHJvd3MuZmlyc3QsIDAsIHJvd3Mu
bGFzdCsxLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2Uo
CisgICAgICAgICAgICAgICAgcm93cy5maXJzdC0xLCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dz
LmZpcnN0LTEpLmxlbmd0aCwKKyAgICAgICAgICAgICAgICByb3dzLmxhc3QsIHRoaXMuc2Vzc2lv
bi5nZXRMaW5lKHJvd3MubGFzdCkubGVuZ3RoCisgICAgICAgICAgICApOworICAgICAgICB0aGlz
LnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwor
ICAgIH07CisKKyAgICB0aGlzLmR1cGxpY2F0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgc2VsID0gdGhpcy5zZWxlY3Rpb247CisgICAgICAgIHZhciBkb2MgPSB0aGlzLnNl
c3Npb247CisgICAgICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZSgpOworICAgICAgICBpZiAo
cmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93
OworICAgICAgICAgICAgZG9jLmR1cGxpY2F0ZUxpbmVzKHJvdywgcm93KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhciByZXZlcnNlID0gc2VsLmlzQmFja3dhcmRzKCkKKyAgICAg
ICAgICAgIHZhciBwb2ludCA9IHNlbC5pc0JhY2t3YXJkcygpID8gcmFuZ2Uuc3RhcnQgOiByYW5n
ZS5lbmQ7CisgICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBkb2MuaW5zZXJ0KHBvaW50LCBkb2Mu
Z2V0VGV4dFJhbmdlKHJhbmdlKSwgZmFsc2UpOworICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBw
b2ludDsKKyAgICAgICAgICAgIHJhbmdlLmVuZCA9IGVuZFBvaW50OworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzZWwuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJldmVyc2UpCisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLnNlc3Npb24ubW92ZUxpbmVzRG93bihmaXJzdFJvdywgbGFzdFJvdyk7
CisgICAgICAgIH0pOworICAgIH07CisgICAgdGhpcy5tb3ZlTGluZXNVcCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ubW92ZUxpbmVzVXAoZmlyc3RSb3csIGxh
c3RSb3cpOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMubW92ZVRleHQgPSBmdW5jdGlv
bihyYW5nZSwgdG9Qb3NpdGlvbikgeworICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLm1vdmVU
ZXh0KHJhbmdlLCB0b1Bvc2l0aW9uKTsKKyAgICB9OworICAgIHRoaXMuY29weUxpbmVzVXAgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUxpbmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBs
YXN0Um93KSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24uZHVwbGljYXRlTGluZXMoZmlyc3RS
b3csIGxhc3RSb3cpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgIH07
CisgICAgdGhpcy5jb3B5TGluZXNEb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1v
dmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2Vzc2lvbi5kdXBsaWNhdGVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgdGhpcy4kbW92ZUxpbmVzID0gZnVuY3Rpb24obW92ZXIpIHsKKyAg
ICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKKyAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uOworICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc011bHRp
TGluZSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2UoKTsK
KyAgICAgICAgICAgIHZhciByZXZlcnNlID0gc2VsZWN0aW9uLmlzQmFja3dhcmRzKCk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgbGluZXNNb3ZlZCA9IG1vdmVyLmNhbGwodGhpcywgcm93cy5m
aXJzdCwgcm93cy5sYXN0KTsKKworICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHJh
bmdlLnN0YXJ0LnJvdyArPSBsaW5lc01vdmVkOworICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyAr
PSBsaW5lc01vdmVkOworICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJh
bmdlLCByZXZlcnNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNl
bGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3Iocm93cy5sYXN0K2xpbmVzTW92ZWQrMSwgMCk7Cisg
ICAgICAgICAgICBzZWxlY3Rpb24uJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhyb3dzLmZpcnN0K2xpbmVzTW92ZWQsIDAp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuJGdldFNlbGVj
dGVkUm93cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVj
dGlvblJhbmdlKCkuY29sbGFwc2VSb3dzKCk7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIGZpcnN0OiByYW5nZS5zdGFydC5yb3csCisgICAgICAgICAgICBsYXN0OiByYW5nZS5lbmQu
cm93CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMub25Db21wb3NpdGlvblN0YXJ0ID0g
ZnVuY3Rpb24odGV4dCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbih0
aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpOworICAgIH07CisKKyAgICB0aGlzLm9uQ29tcG9zaXRp
b25VcGRhdGUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29t
cG9zaXRpb25UZXh0KHRleHQpOworICAgIH07CisKKyAgICB0aGlzLm9uQ29tcG9zaXRpb25FbmQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKTsK
KyAgICB9OworICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpcnN0VmlzaWJsZVJvdygpOworICAgIH07Cisg
ICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpOworICAgIH07CisgICAgdGhpcy5pc1Jv
d1Zpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5n
ZXRGaXJzdFZpc2libGVSb3coKSAmJiByb3cgPD0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpKTsK
KyAgICB9OworICAgIHRoaXMuaXNSb3dGdWxseVZpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKKyAg
ICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5yZW5kZXJlci5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJv
dygpICYmIHJvdyA8PSB0aGlzLnJlbmRlcmVyLmdldExhc3RGdWxseVZpc2libGVSb3coKSk7Cisg
ICAgfTsKKyAgICB0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCkgLSB0aGlzLnJlbmRl
cmVyLmdldFNjcm9sbFRvcFJvdygpICsgMTsKKyAgICB9OworCisgICAgdGhpcy4kbW92ZUJ5UGFn
ZSA9IGZ1bmN0aW9uKGRpciwgc2VsZWN0KSB7CisgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMu
cmVuZGVyZXI7CisgICAgICAgIHZhciBjb25maWcgPSB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmln
OworICAgICAgICB2YXIgcm93cyA9IGRpciAqIE1hdGguZmxvb3IoY29uZmlnLmhlaWdodCAvIGNv
bmZpZy5saW5lSGVpZ2h0KTsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrOworICAg
ICAgICBpZiAoc2VsZWN0ID09IHRydWUpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLiRt
b3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29y
Qnkocm93cywgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Qg
PT0gZmFsc2UpIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShyb3dz
LCAwKTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmctLTsKKworICAgICAgICB2YXIgc2Ny
b2xsVG9wID0gcmVuZGVyZXIuc2Nyb2xsVG9wOworCisgICAgICAgIHJlbmRlcmVyLnNjcm9sbEJ5
KDAsIHJvd3MgKiBjb25maWcubGluZUhlaWdodCk7CisgICAgICAgIGlmIChzZWxlY3QgIT0gbnVs
bCkKKyAgICAgICAgICAgIHJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7
CisKKyAgICAgICAgcmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOworICAgIH07
CisgICAgdGhpcy5zZWxlY3RQYWdlRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRt
b3ZlQnlQYWdlKDEsIHRydWUpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RQYWdlVXAgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgdHJ1ZSk7CisgICAgfTsKKyAg
ICB0aGlzLmdvdG9QYWdlRG93biA9IGZ1bmN0aW9uKCkgeworICAgICAgIHRoaXMuJG1vdmVCeVBh
Z2UoMSwgZmFsc2UpOworICAgIH07CisgICAgdGhpcy5nb3RvUGFnZVVwID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoLTEsIGZhbHNlKTsKKyAgICB9OworICAgIHRoaXMu
c2Nyb2xsUGFnZURvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgx
KTsKKyAgICB9OworICAgIHRoaXMuc2Nyb2xsUGFnZVVwID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJG1vdmVCeVBhZ2UoLTEpOworICAgIH07CisgICAgdGhpcy5zY3JvbGxUb1JvdyA9IGZ1
bmN0aW9uKHJvdykgeworICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvUm93KHJvdyk7Cisg
ICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGNlbnRlciwgYW5p
bWF0ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb0xpbmUobGlu
ZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjayk7CisgICAgfTsKKyAgICB0aGlzLmNlbnRlclNl
bGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVj
dGlvblJhbmdlKCk7CisgICAgICAgIHZhciBwb3MgPSB7CisgICAgICAgICAgICByb3c6IE1hdGgu
Zmxvb3IocmFuZ2Uuc3RhcnQucm93ICsgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cp
IC8gMiksCisgICAgICAgICAgICBjb2x1bW46IE1hdGguZmxvb3IocmFuZ2Uuc3RhcnQuY29sdW1u
ICsgKHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4pIC8gMikKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnJlbmRlcmVyLmFsaWduQ3Vyc29yKHBvcywgMC41KTsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgIH07CisgICAgdGhpcy5nZXRDdXJzb3JQ
b3NpdGlvblNjcmVlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9u
LmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpOworICAg
IH07CisgICAgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0
QWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7Cisg
ICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpOworICAgICAgICB0aGlzLiRibG9ja1Nj
cm9sbGluZyAtPSAxOworICAgIH07CisgICAgdGhpcy5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgIH07Cisg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0
aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOworICAgIH07CisgICAgdGhp
cy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICB0aGlzLnNl
bGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgIH07CisgICAgdGhpcy5qdW1w
VG9NYXRjaGluZyA9IGZ1bmN0aW9uKHNlbGVjdCkgeworICAgICAgICB2YXIgY3Vyc29yID0gdGhp
cy5nZXRDdXJzb3JQb3NpdGlvbigpOworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2Vzc2lv
bi5nZXRCcmFja2V0UmFuZ2UoY3Vyc29yKTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAgICAg
ICAgICAgcmFuZ2UgPSB0aGlzLmZpbmQoeworICAgICAgICAgICAgICAgIG5lZWRsZTogL1t7fSgp
XFtcXV0vZywKKyAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOnRydWUsCisgICAgICAgICAg
ICAgICAgc3RhcnQ6IHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbiAtIDF9
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIHBvcyA9IHJhbmdlLnN0YXJ0OworICAgICAgICAg
ICAgaWYgKHBvcy5yb3cgPT0gY3Vyc29yLnJvdyAmJiBNYXRoLmFicyhwb3MuY29sdW1uIC0gY3Vy
c29yLmNvbHVtbikgPCAyKQorICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdl
dEJyYWNrZXRSYW5nZShwb3MpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwb3MgPSBy
YW5nZSAmJiByYW5nZS5jdXJzb3IgfHwgcG9zOworICAgICAgICBpZiAocG9zKSB7CisgICAgICAg
ICAgICBpZiAoc2VsZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLmlz
RXF1YWwodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0VG8ocG9zLnJvdywgcG9zLmNvbHVtbik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsK
KyAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3Mucm93LCBwb3MuY29sdW1uKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nb3RvTGluZSA9IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbiwgYW5pbWF0ZSkgeworICAgICAgICB0aGlzLnNlbGVj
dGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xkKHtyb3c6
IGxpbmVOdW1iZXIgLSAxLCBjb2x1bW46IGNvbHVtbiB8fCAwfSk7CisKKyAgICAgICAgdGhpcy4k
YmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGluZU51bWJl
ciAtIDEsIGNvbHVtbiB8fCAwKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsK
KworICAgICAgICBpZiAoIXRoaXMuaXNSb3dGdWxseVZpc2libGUobGluZU51bWJlciAtIDEpKQor
ICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0xpbmUobGluZU51bWJlciAtIDEsIHRydWUsIGFuaW1h
dGUpOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB0aGlzLm1vdmVDdXJz
b3JUbyhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlVXAgPSBmdW5jdGlv
bih0aW1lcykgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAg
ICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJz
b3JCeSgtdGltZXMsIDApOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZURvd24gPSBmdW5jdGlv
bih0aW1lcykgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAg
ICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJz
b3JCeSh0aW1lcywgMCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGVmdCA9IGZ1bmN0aW9u
KHRpbWVzKSB7CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3Rh
cnQ7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpbWVzID0gdGltZXMg
fHwgMTsKKyAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRl
UmlnaHQgPSBmdW5jdGlvbih0aW1lcykgeworICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuZ2V0U2VsZWN0
aW9uUmFuZ2UoKS5lbmQ7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aW1l
cyA9IHRpbWVzIHx8IDE7CisgICAgICAgICAgICB3aGlsZSAodGltZXMtLSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRo
aXMubmF2aWdhdGVMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3Rp
b24ubW92ZUN1cnNvckxpbmVTdGFydCgpOworICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlTGluZUVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpOworICAgICAgICB0aGlzLmNsZWFy
U2VsZWN0aW9uKCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7Cisg
ICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlRW5kKCk7CisgICAgICAgIHRoaXMu
Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5n
KHNjcm9sbFRvcCk7CisgICAgfTsKKyAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDsK
KyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVTdGFydCgpOworICAgICAgICB0
aGlzLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9s
bGluZyhzY3JvbGxUb3ApOworICAgIH07CisgICAgdGhpcy5uYXZpZ2F0ZVdvcmRSaWdodCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7
CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9OworICAgIHRoaXMubmF2aWdh
dGVXb3JkTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vy
c29yV29yZExlZnQoKTsKKyAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOworICAgIH07Cisg
ICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHsKKyAgICAg
ICAgaWYgKG9wdGlvbnMpCisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOwor
CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7Cisg
ICAgICAgIHZhciByZXBsYWNlZCA9IDA7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4gcmVwbGFjZWQ7CisKKyAgICAgICAgaWYgKHRoaXMuJHRyeVJlcGxhY2UocmFuZ2Us
IHJlcGxhY2VtZW50KSkgeworICAgICAgICAgICAgcmVwbGFjZWQgPSAxOworICAgICAgICB9Cisg
ICAgICAgIGlmIChyYW5nZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24u
c2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3Jv
bGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXBsYWNlZDsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZUFsbCA9
IGZ1bmN0aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zKSB7
CisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7Cisg
ICAgICAgIHZhciByZXBsYWNlZCA9IDA7CisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGlu
ZyArPSAxOworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdl
KCk7CisgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rp
b24ubW92ZUN1cnNvclRvKDAsIDApOworCisgICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVu
Z3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmKHRoaXMuJHRyeVJlcGxhY2Uo
cmFuZ2VzW2ldLCByZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlZCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0g
MTsKKworICAgICAgICByZXR1cm4gcmVwbGFjZWQ7CisgICAgfTsKKworICAgIHRoaXMuJHRyeVJl
cGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgcmVwbGFjZW1lbnQpIHsKKyAgICAgICAgdmFyIGlucHV0
ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIHJlcGxhY2VtZW50
ID0gdGhpcy4kc2VhcmNoLnJlcGxhY2UoaW5wdXQsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYg
KHJlcGxhY2VtZW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICByYW5nZS5lbmQgPSB0aGlzLnNl
c3Npb24ucmVwbGFjZShyYW5nZSwgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIHJh
bmdlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdFNlYXJjaE9wdGlvbnMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJHNlYXJjaC5nZXRPcHRpb25zKCk7CisgICAgfTsKKyAgICB0
aGlzLmZpbmQgPSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFuaW1hdGUpIHsKKyAgICAgICAg
aWYgKCFvcHRpb25zKQorICAgICAgICAgICAgb3B0aW9ucyA9IHt9OworCisgICAgICAgIGlmICh0
eXBlb2YgbmVlZGxlID09ICJzdHJpbmciIHx8IG5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cCkKKyAg
ICAgICAgICAgIG9wdGlvbnMubmVlZGxlID0gbmVlZGxlOworICAgICAgICBlbHNlIGlmICh0eXBl
b2YgbmVlZGxlID09ICJvYmplY3QiKQorICAgICAgICAgICAgb29wLm1peGluKG9wdGlvbnMsIG5l
ZWRsZSk7CisKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsK
KyAgICAgICAgaWYgKG9wdGlvbnMubmVlZGxlID09IG51bGwpIHsKKyAgICAgICAgICAgIG5lZWRs
ZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpCisgICAgICAgICAgICAgICAgfHwg
dGhpcy4kc2VhcmNoLiRvcHRpb25zLm5lZWRsZTsKKyAgICAgICAgICAgIGlmICghbmVlZGxlKSB7
CisgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdl
LnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBuZWVkbGUg
PSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe25lZWRsZTogbmVlZGxlfSk7CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOworICAgICAgICBpZiAoIW9wdGlvbnMu
c3RhcnQpCisgICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KHtzdGFydDogcmFuZ2V9KTsKKwor
ICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOwor
ICAgICAgICBpZiAob3B0aW9ucy5wcmV2ZW50U2Nyb2xsKQorICAgICAgICAgICAgcmV0dXJuIG5l
d1JhbmdlOworICAgICAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMucmV2ZWFs
UmFuZ2UobmV3UmFuZ2UsIGFuaW1hdGUpOworICAgICAgICAgICAgcmV0dXJuIG5ld1JhbmdlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLmJhY2t3YXJkcykKKyAgICAgICAgICAgIHJh
bmdlLnN0YXJ0ID0gcmFuZ2UuZW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICByYW5nZS5l
bmQgPSByYW5nZS5zdGFydDsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2Up
OworICAgIH07CisgICAgdGhpcy5maW5kTmV4dCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUp
IHsKKyAgICAgICAgdGhpcy5maW5kKHtza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiBmYWxz
ZX0sIG9wdGlvbnMsIGFuaW1hdGUpOworICAgIH07CisgICAgdGhpcy5maW5kUHJldmlvdXMgPSBm
dW5jdGlvbihvcHRpb25zLCBhbmltYXRlKSB7CisgICAgICAgIHRoaXMuZmluZChvcHRpb25zLCB7
c2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogdHJ1ZX0sIGFuaW1hdGUpOworICAgIH07CisK
KyAgICB0aGlzLnJldmVhbFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsIGFuaW1hdGUpIHsKKyAgICAg
ICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgKz0gMTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9s
ZChyYW5nZSk7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdl
KTsKKyAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKKworICAgICAgICB2YXIgc2Ny
b2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMucmVuZGVyZXIu
c2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTsKKyAg
ICAgICAgaWYgKGFuaW1hdGUgIT0gZmFsc2UpCisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFu
aW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKKyAgICB9OworICAgIHRoaXMudW5kbyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrOworICAgICAgICB0aGlzLnNl
c3Npb24uZ2V0VW5kb01hbmFnZXIoKS51bmRvKCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xs
aW5nLS07CisgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwg
MC41KTsKKyAgICB9OworICAgIHRoaXMucmVkbyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LiRibG9ja1Njcm9sbGluZysrOworICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIo
KS5yZWRvKCk7CisgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07CisgICAgICAgIHRoaXMu
cmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsKKyAgICB9OworICAgIHRo
aXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3ko
KTsKKyAgICB9OworCit9KS5jYWxsKEVkaXRvci5wcm90b3R5cGUpOworCisKK2V4cG9ydHMuRWRp
dG9yID0gRWRpdG9yOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvbGFuZycsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKworZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7Cisg
ICAgcmV0dXJuIHN0cmluZy5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpOworfTsKKworZXhw
b3J0cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkgeworICAgIHZhciBy
ZXN1bHQgPSAnJzsKKyAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgIGlmIChjb3VudCAm
IDEpCisgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nOworCisgICAgICAgIGlmIChjb3VudCA+
Pj0gMSkKKyAgICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9OworCit2YXIgdHJpbUJlZ2luUmVnZXhwID0gL15cc1xzKi87Cit2YXIgdHJpbUVu
ZFJlZ2V4cCA9IC9cc1xzKiQvOworCitleHBvcnRzLnN0cmluZ1RyaW1MZWZ0ID0gZnVuY3Rpb24g
KHN0cmluZykgeworICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICcn
KTsKK307CisKK2V4cG9ydHMuc3RyaW5nVHJpbVJpZ2h0ID0gZnVuY3Rpb24gKHN0cmluZykgewor
ICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cit9OworCitleHBv
cnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgY29weSA9IHt9OworICAg
IGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07Cisg
ICAgfQorICAgIHJldHVybiBjb3B5OworfTsKKworZXhwb3J0cy5jb3B5QXJyYXkgPSBmdW5jdGlv
bihhcnJheSl7CisgICAgdmFyIGNvcHkgPSBbXTsKKyAgICBmb3IgKHZhciBpPTAsIGw9YXJyYXku
bGVuZ3RoOyBpPGw7IGkrKykgeworICAgICAgICBpZiAoYXJyYXlbaV0gJiYgdHlwZW9mIGFycmF5
W2ldID09ICJvYmplY3QiKQorICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdCgg
YXJyYXlbaV0gKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGNvcHlbaV0gPSBhcnJheVtp
XTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHk7Cit9OworCitleHBvcnRzLmRlZXBDb3B5ID0gZnVu
Y3Rpb24gKG9iaikgeworICAgIGlmICh0eXBlb2Ygb2JqICE9ICJvYmplY3QiKSB7CisgICAgICAg
IHJldHVybiBvYmo7CisgICAgfQorICAgIAorICAgIHZhciBjb3B5ID0gb2JqLmNvbnN0cnVjdG9y
KCk7CisgICAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAgICAgICBpZiAodHlwZW9mIG9ialtr
ZXldID09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBjb3B5W2tleV0gPSB0aGlzLmRlZXBDb3B5
KG9ialtrZXldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvcHlba2V5XSA9IG9i
altrZXldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3B5OworfTsKKworZXhwb3J0
cy5hcnJheVRvTWFwID0gZnVuY3Rpb24oYXJyKSB7CisgICAgdmFyIG1hcCA9IHt9OworICAgIGZv
ciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbWFwW2FycltpXV0gPSAx
OworICAgIH0KKyAgICByZXR1cm4gbWFwOworCit9OworCitleHBvcnRzLmNyZWF0ZU1hcCA9IGZ1
bmN0aW9uKHByb3BzKSB7CisgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAg
Zm9yICh2YXIgaSBpbiBwcm9wcykgeworICAgICAgICBtYXBbaV0gPSBwcm9wc1tpXTsKKyAgICB9
CisgICAgcmV0dXJuIG1hcDsKK307CitleHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJy
YXksIHZhbHVlKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7
CisgICAgaWYgKHZhbHVlID09PSBhcnJheVtpXSkgeworICAgICAgYXJyYXkuc3BsaWNlKGksIDEp
OworICAgIH0KKyAgfQorfTsKKworZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHIp
IHsKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xc
JDEnKTsKK307CisKK2V4cG9ydHMuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHN0cikgeworICAgIHJl
dHVybiBzdHIucmVwbGFjZSgvJi9nLCAiJiMzODsiKS5yZXBsYWNlKC8iL2csICImIzM0OyIpLnJl
cGxhY2UoLycvZywgIiYjMzk7IikucmVwbGFjZSgvPC9nLCAiJiM2MDsiKTsKK307CisKK2V4cG9y
dHMuZ2V0TWF0Y2hPZmZzZXRzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdFeHApIHsKKyAgICB2YXIg
bWF0Y2hlcyA9IFtdOworCisgICAgc3RyaW5nLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihzdHIp
IHsKKyAgICAgICAgbWF0Y2hlcy5wdXNoKHsKKyAgICAgICAgICAgIG9mZnNldDogYXJndW1lbnRz
W2FyZ3VtZW50cy5sZW5ndGgtMl0sCisgICAgICAgICAgICBsZW5ndGg6IHN0ci5sZW5ndGgKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gbWF0Y2hlczsKK307CitleHBvcnRzLmRl
ZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikgeworCisgICAgdmFyIHRpbWVyID0gbnVsbDsKKyAg
ICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGltZXIgPSBudWxsOworICAg
ICAgICBmY24oKTsKKyAgICB9OworCisgICAgdmFyIGRlZmVycmVkID0gZnVuY3Rpb24odGltZW91
dCkgeworICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKKyAgICAgICAgdGltZXIgPSBzZXRUaW1l
b3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IDApOworICAgICAgICByZXR1cm4gZGVmZXJyZWQ7Cisg
ICAgfTsKKworICAgIGRlZmVycmVkLnNjaGVkdWxlID0gZGVmZXJyZWQ7CisKKyAgICBkZWZlcnJl
ZC5jYWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY2FuY2VsKCk7CisgICAgICAgIGZj
bigpOworICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfTsKKworICAgIGRlZmVycmVkLmNh
bmNlbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOworICAgICAg
ICB0aW1lciA9IG51bGw7CisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9OworCisgICAg
cmV0dXJuIGRlZmVycmVkOworfTsKKworCitleHBvcnRzLmRlbGF5ZWRDYWxsID0gZnVuY3Rpb24o
ZmNuLCBkZWZhdWx0VGltZW91dCkgeworICAgIHZhciB0aW1lciA9IG51bGw7CisgICAgdmFyIGNh
bGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRpbWVyID0gbnVsbDsKKyAgICAgICAgZmNu
KCk7CisgICAgfTsKKworICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKKyAgICAg
ICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAgdGltZXIgPSBzZXRUaW1l
b3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKKyAgICB9OworCisgICAg
X3NlbGYuZGVsYXkgPSBfc2VsZjsKKyAgICBfc2VsZi5zY2hlZHVsZSA9IGZ1bmN0aW9uKHRpbWVv
dXQpIHsKKyAgICAgICAgaWYgKHRpbWVyID09IG51bGwpCisgICAgICAgICAgICB0aW1lciA9IHNl
dFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CisgICAgfTsKKworICAgIF9zZWxmLmNh
bGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jYW5jZWwoKTsKKyAgICAgICAgZmNuKCk7
CisgICAgfTsKKworICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aW1l
ciAmJiBjbGVhclRpbWVvdXQodGltZXIpOworICAgICAgICB0aW1lciA9IG51bGw7CisgICAgfTsK
KworICAgIF9zZWxmLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGlt
ZXI7CisgICAgfTsKKworICAgIHJldHVybiBfc2VsZjsKK307Cit9KTsKKworYWNlLmRlZmluZSgn
YWNlL2tleWJvYXJkL3RleHRpbnB1dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbGliL2RvbScsICdh
Y2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0gcmVx
dWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20i
KTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBCUk9LRU5fU0VUREFU
QSA9IHVzZXJhZ2VudC5pc0Nocm9tZSA8IDE4OworCit2YXIgVGV4dElucHV0ID0gZnVuY3Rpb24o
cGFyZW50Tm9kZSwgaG9zdCkgeworICAgIHZhciB0ZXh0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoInRl
eHRhcmVhIik7CisgICAgdGV4dC5jbGFzc05hbWUgPSAiYWNlX3RleHQtaW5wdXQiOworICAgIGlm
ICh1c2VyYWdlbnQuaXNUb3VjaFBhZCkKKyAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoIngtcGFs
bS1kaXNhYmxlLWF1dG8tY2FwIiwgdHJ1ZSk7CisKKyAgICB0ZXh0LndyYXAgPSAib2ZmIjsKKyAg
ICB0ZXh0LmF1dG9jb3JyZWN0ID0gIm9mZiI7CisgICAgdGV4dC5hdXRvY2FwaXRhbGl6ZSA9ICJv
ZmYiOworICAgIHRleHQuc3BlbGxjaGVjayA9IGZhbHNlOworCisgICAgdGV4dC5zdHlsZS5ib3R0
b20gPSAiMjAwMGVtIjsKKyAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnRO
b2RlLmZpcnN0Q2hpbGQpOworCisgICAgdmFyIFBMQUNFSE9MREVSID0gIlx4MDFceDAxIjsKKwor
ICAgIHZhciBjdXQgPSBmYWxzZTsKKyAgICB2YXIgY29waWVkID0gZmFsc2U7CisgICAgdmFyIHBh
c3RlZCA9IGZhbHNlOworICAgIHZhciBpbkNvbXBvc3Rpb24gPSBmYWxzZTsKKyAgICB2YXIgdGVt
cFN0eWxlID0gJyc7CisgICAgdmFyIGlzU2VsZWN0aW9uRW1wdHkgPSB0cnVlOworICAgIHRyeSB7
IHZhciBpc0ZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0ZXh0OyB9IGNhdGNo
KGUpIHt9CisgICAgCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImJsdXIiLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgaG9zdC5vbkJsdXIoKTsKKyAgICAgICAgaXNGb2N1c2VkID0gZmFsc2U7
CisgICAgfSk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImZvY3VzIiwgZnVuY3Rpb24o
KSB7CisgICAgICAgIGlzRm9jdXNlZCA9IHRydWU7CisgICAgICAgIGhvc3Qub25Gb2N1cygpOwor
ICAgICAgICByZXNldFNlbGVjdGlvbigpOworICAgIH0pOworICAgIHRoaXMuZm9jdXMgPSBmdW5j
dGlvbigpIHsgdGV4dC5mb2N1cygpOyB9OworICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkgeyB0
ZXh0LmJsdXIoKTsgfTsKKyAgICB0aGlzLmlzRm9jdXNlZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gaXNGb2N1c2VkOworICAgIH07CisgICAgdmFyIHN5bmNTZWxlY3Rpb24gPSBsYW5n
LmRlbGF5ZWRDYWxsKGZ1bmN0aW9uKCkgeworICAgICAgICBpc0ZvY3VzZWQgJiYgcmVzZXRTZWxl
Y3Rpb24oaXNTZWxlY3Rpb25FbXB0eSk7CisgICAgfSk7CisgICAgdmFyIHN5bmNWYWx1ZSA9IGxh
bmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7CisgICAgICAgICBpZiAoIWluQ29tcG9zdGlvbikg
eworICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFBMQUNFSE9MREVSOworICAgICAgICAgICAgaXNG
b2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKCk7CisgICAgICAgICB9CisgICAgfSk7CisKKyAgICBm
dW5jdGlvbiByZXNldFNlbGVjdGlvbihpc0VtcHR5KSB7CisgICAgICAgIGlmIChpbkNvbXBvc3Rp
b24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IGlz
RW1wdHkgPyAyIDogMTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IDI7CisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25FbmQpOworICAgICAgICB9IGNhdGNoKGUpe30KKyAgICB9CisKKyAgICBmdW5jdGlv
biByZXNldFZhbHVlKCkgeworICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7CisgICAgICAgIGlmICh1
c2VyYWdlbnQuaXNXZWJLaXQpCisgICAgICAgICAgICBzeW5jVmFsdWUuc2NoZWR1bGUoKTsKKyAg
ICB9CisKKyAgICB1c2VyYWdlbnQuaXNXZWJLaXQgfHwgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdj
aGFuZ2VTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGhvc3Quc2VsZWN0aW9u
LmlzRW1wdHkoKSAhPSBpc1NlbGVjdGlvbkVtcHR5KSB7CisgICAgICAgICAgICBpc1NlbGVjdGlv
bkVtcHR5ID0gIWlzU2VsZWN0aW9uRW1wdHk7CisgICAgICAgICAgICBzeW5jU2VsZWN0aW9uLnNj
aGVkdWxlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHJlc2V0VmFsdWUoKTsKKyAgICBp
ZiAoaXNGb2N1c2VkKQorICAgICAgICBob3N0Lm9uRm9jdXMoKTsKKworCisgICAgdmFyIGlzQWxs
U2VsZWN0ZWQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHJldHVybiB0ZXh0LnNlbGVjdGlv
blN0YXJ0ID09PSAwICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSB0ZXh0LnZhbHVlLmxlbmd0aDsK
KyAgICB9OworICAgIGlmICghdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSAmJiB0ZXh0LmNyZWF0ZVRl
eHRSYW5nZSkgeworICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vs
ZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhp
cy5jcmVhdGVUZXh0UmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOwor
ICAgICAgICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzZWxlY3Rpb25TdGFydCk7
CisgICAgICAgICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBzZWxlY3Rpb25FbmQpOwor
ICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7CisgICAgICAgIH07CisgICAgICAgIGlzQWxsU2Vs
ZWN0ZWQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIHZhciByYW5nZSA9IHRleHQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Uo
KTsKKyAgICAgICAgICAgIH1jYXRjaChlKSB7fQorICAgICAgICAgICAgaWYgKCFyYW5nZSB8fCBy
YW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGV4dCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiByYW5nZS50ZXh0ID09IHRleHQudmFsdWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKHVzZXJhZ2VudC5pc09sZElFKSB7CisgICAgICAgIHZhciBpblByb3BlcnR5Q2hhbmdl
ID0gZmFsc2U7CisgICAgICAgIHZhciBvblByb3BlcnR5Q2hhbmdlID0gZnVuY3Rpb24oZSl7Cisg
ICAgICAgICAgICBpZiAoaW5Qcm9wZXJ0eUNoYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB2YXIgZGF0YSA9IHRleHQudmFsdWU7CisgICAgICAgICAgICBpZiAoaW5D
b21wb3N0aW9uIHx8ICFkYXRhIHx8IGRhdGEgPT0gUExBQ0VIT0xERVIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGUgJiYgZGF0YSA9PSBQTEFDRUhPTERFUlswXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3luY1Byb3BlcnR5LnNjaGVkdWxlKCk7CisKKyAgICAg
ICAgICAgIHNlbmRUZXh0KGRhdGEpOworICAgICAgICAgICAgaW5Qcm9wZXJ0eUNoYW5nZSA9IHRy
dWU7CisgICAgICAgICAgICByZXNldFZhbHVlKCk7CisgICAgICAgICAgICBpblByb3BlcnR5Q2hh
bmdlID0gZmFsc2U7CisgICAgICAgIH07CisgICAgICAgIHZhciBzeW5jUHJvcGVydHkgPSBsYW5n
LmRlbGF5ZWRDYWxsKG9uUHJvcGVydHlDaGFuZ2UpOworICAgICAgICBldmVudC5hZGRMaXN0ZW5l
cih0ZXh0LCAicHJvcGVydHljaGFuZ2UiLCBvblByb3BlcnR5Q2hhbmdlKTsKKworICAgICAgICB2
YXIga2V5dGFibGUgPSB7IDEzOjEsIDI3OjEgfTsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIo
dGV4dCwgImtleXVwIiwgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChpbkNvbXBvc3Rp
b24gJiYgKCF0ZXh0LnZhbHVlIHx8IGtleXRhYmxlW2Uua2V5Q29kZV0pKQorICAgICAgICAgICAg
ICAgIHNldFRpbWVvdXQob25Db21wb3NpdGlvbkVuZCwgMCk7CisgICAgICAgICAgICBpZiAoKHRl
eHQudmFsdWUuY2hhckNvZGVBdCgwKXx8MCkgPCAxMjkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbkNvbXBvc3Rpb24gPyBvbkNvbXBvc2l0
aW9uVXBkYXRlKCkgOiBvbkNvbXBvc2l0aW9uU3RhcnQoKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgdmFyIG9uU2VsZWN0ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoY3V0KSB7Cisg
ICAgICAgICAgICBjdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY29waWVkKSB7CisgICAgICAgICAgICBjb3BpZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNBbGxTZWxlY3RlZCh0ZXh0
KSkgeworICAgICAgICAgICAgaG9zdC5zZWxlY3RBbGwoKTsKKyAgICAgICAgICAgIHJlc2V0U2Vs
ZWN0aW9uKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIHNlbmRUZXh0ID0gZnVuY3Rp
b24oZGF0YSkgeworICAgICAgICBpZiAocGFzdGVkKSB7CisgICAgICAgICAgICByZXNldFNlbGVj
dGlvbigpOworICAgICAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblBh
c3RlKGRhdGEpOworICAgICAgICAgICAgcGFzdGVkID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBp
ZiAoZGF0YSA9PSBQTEFDRUhPTERFUlswXSkgeworICAgICAgICAgICAgaG9zdC5leGVjQ29tbWFu
ZCgiZGVsIiwge3NvdXJjZTogImFjZSJ9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChkYXRhLnN1YnN0cmluZygwLCAyKSA9PSBQTEFDRUhPTERFUikKKyAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YS5zdWJzdHIoMik7CisgICAgICAgICAgICBlbHNlIGlmIChkYXRhWzBdID09
IFBMQUNFSE9MREVSWzBdKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cigxKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PSBQTEFDRUhPTERF
UlswXSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCAtMSk7CisgICAgICAg
ICAgICBpZiAoZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09IFBMQUNFSE9MREVSWzBdKQorICAgICAg
ICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdmFyIG9uSW5wdXQgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGlmIChpbkNvbXBvc3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBk
YXRhID0gdGV4dC52YWx1ZTsKKyAgICAgICAgcmVzZXRWYWx1ZSgpOworCisgICAgICAgIHNlbmRU
ZXh0KGRhdGEpOworICAgIH07CisKKyAgICB2YXIgb25DdXQgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIHZhciBkYXRhID0gaG9zdC5nZXRDb3B5VGV4dCgpOworICAgICAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERh
dGEgfHwgd2luZG93LmNsaXBib2FyZERhdGE7CisKKyAgICAgICAgaWYgKGNsaXBib2FyZERhdGEg
JiYgIUJST0tFTl9TRVREQVRBKSB7CisgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gY2xpcGJv
YXJkRGF0YS5zZXREYXRhKCJUZXh0IiwgZGF0YSk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydGVk
KSB7CisgICAgICAgICAgICAgICAgaG9zdC5vbkN1dCgpOworICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIGN1dCA9IHRydWU7CisgICAgICAgICAgICB0
ZXh0LnZhbHVlID0gZGF0YTsKKyAgICAgICAgICAgIHRleHQuc2VsZWN0KCk7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgY3V0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0
aW9uKCk7CisgICAgICAgICAgICAgICAgaG9zdC5vbkN1dCgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIG9uQ29weSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgdmFyIGRhdGEgPSBob3N0LmdldENvcHlUZXh0KCk7CisgICAgICAgIGlmICghZGF0YSkgewor
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0
YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKKyAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgJiYg
IUJST0tFTl9TRVREQVRBKSB7CisgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gY2xpcGJvYXJk
RGF0YS5zZXREYXRhKCJUZXh0IiwgZGF0YSk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydGVkKSB7
CisgICAgICAgICAgICAgICAgaG9zdC5vbkNvcHkoKTsKKyAgICAgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
IXN1cHBvcnRlZCkgeworICAgICAgICAgICAgY29waWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRl
eHQudmFsdWUgPSBkYXRhOworICAgICAgICAgICAgdGV4dC5zZWxlY3QoKTsKKyAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBjb3BpZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICByZXNldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgcmVzZXRTZWxl
Y3Rpb24oKTsKKyAgICAgICAgICAgICAgICBob3N0Lm9uQ29weSgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIG9uUGFzdGUgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIHZhciBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlw
Ym9hcmREYXRhOworCisgICAgICAgIGlmIChjbGlwYm9hcmREYXRhKSB7CisgICAgICAgICAgICB2
YXIgZGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpOworICAgICAgICAgICAgaWYg
KGRhdGEpCisgICAgICAgICAgICAgICAgaG9zdC5vblBhc3RlKGRhdGEpOworICAgICAgICAgICAg
aWYgKHVzZXJhZ2VudC5pc0lFKQorICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzZXRTZWxl
Y3Rpb24pOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0LnZhbHVlID0gIiI7CisgICAgICAgICAg
ICBwYXN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAgIGV2ZW50LmFkZENvbW1h
bmRLZXlMaXN0ZW5lcih0ZXh0LCBob3N0Lm9uQ29tbWFuZEtleS5iaW5kKGhvc3QpKTsKKworICAg
IGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJzZWxlY3QiLCBvblNlbGVjdCk7CisKKyAgICBldmVu
dC5hZGRMaXN0ZW5lcih0ZXh0LCAiaW5wdXQiLCBvbklucHV0KTsKKworICAgIGV2ZW50LmFkZExp
c3RlbmVyKHRleHQsICJjdXQiLCBvbkN1dCk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwg
ImNvcHkiLCBvbkNvcHkpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJwYXN0ZSIsIG9u
UGFzdGUpOworICAgIGlmICghKCdvbmN1dCcgaW4gdGV4dCkgfHwgISgnb25jb3B5JyBpbiB0ZXh0
KSB8fCAhKCdvbnBhc3RlJyBpbiB0ZXh0KSl7CisgICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHBh
cmVudE5vZGUsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgaWYgKCh1c2Vy
YWdlbnQuaXNNYWMgJiYgIWUubWV0YUtleSkgfHwgIWUuY3RybEtleSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIDY3OgorICAgICAgICAgICAgICAgICAgICBvbkNvcHkoZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgODY6CisgICAgICAgICAgICAgICAg
ICAgIG9uUGFzdGUoZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgODg6CisgICAgICAgICAgICAgICAgICAgIG9uQ3V0KGUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIHZh
ciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGluQ29tcG9zdGlv
biA9IHRydWU7CisgICAgICAgIGhvc3Qub25Db21wb3NpdGlvblN0YXJ0KCk7CisgICAgICAgIHNl
dFRpbWVvdXQob25Db21wb3NpdGlvblVwZGF0ZSwgMCk7CisgICAgfTsKKworICAgIHZhciBvbkNv
bXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghaW5Db21wb3N0aW9u
KSByZXR1cm47CisgICAgICAgIGhvc3Qub25Db21wb3NpdGlvblVwZGF0ZSh0ZXh0LnZhbHVlKTsK
KyAgICB9OworCisgICAgdmFyIG9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGluQ29tcG9zdGlvbiA9IGZhbHNlOworICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25FbmQo
KTsKKyAgICB9OworCisgICAgdmFyIHN5bmNDb21wb3NpdGlvbiA9IGxhbmcuZGVsYXllZENhbGwo
b25Db21wb3NpdGlvblVwZGF0ZSwgNTApOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwg
ImNvbXBvc2l0aW9uc3RhcnQiLCBvbkNvbXBvc2l0aW9uU3RhcnQpOworICAgIGV2ZW50LmFkZExp
c3RlbmVyKHRleHQsIHVzZXJhZ2VudC5pc0dlY2tvID8gInRleHQiIDogImtleXVwIiwgZnVuY3Rp
b24oKXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKX0pOworICAgIGV2ZW50LmFkZExpc3RlbmVy
KHRleHQsICJjb21wb3NpdGlvbmVuZCIsIG9uQ29tcG9zaXRpb25FbmQpOworCisgICAgdGhpcy5n
ZXRFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisK
KyAgICB0aGlzLnNldFJlYWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKKyAgICAgICB0ZXh0
LnJlYWRPbmx5ID0gcmVhZE9ubHk7CisgICAgfTsKKworICAgIHRoaXMub25Db250ZXh0TWVudSA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCF0ZW1wU3R5bGUpCisgICAgICAgICAgICB0ZW1w
U3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7CisKKyAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0
ID0gInotaW5kZXg6MTAwMDAwOyIgKyAodXNlcmFnZW50LmlzSUUgPyAib3BhY2l0eTowLjE7IiA6
ICIiKTsKKworICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkp
OworICAgICAgICBob3N0Ll9lbWl0KCJuYXRpdmVjb250ZXh0bWVudSIsIHt0YXJnZXQ6IGhvc3R9
KTsKKyAgICAgICAgdmFyIHJlY3QgPSBob3N0LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKKyAgICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICB0ZXh0
LnN0eWxlLmxlZnQgPSBlLmNsaWVudFggLSByZWN0LmxlZnQgLSAyICsgInB4IjsKKyAgICAgICAg
ICAgIHRleHQuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gcmVjdC50b3AgLSAyICsgInB4IjsKKyAg
ICAgICAgfTsKKyAgICAgICAgbW92ZShlKTsKKworICAgICAgICBpZiAoZS50eXBlICE9ICJtb3Vz
ZWRvd24iKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChob3N0LnJlbmRlcmVy
LiRrZWVwVGV4dEFyZWFBdEN1cnNvcikKKyAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJGtlZXBU
ZXh0QXJlYUF0Q3Vyc29yID0gbnVsbDsKKyAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dpbikKKyAg
ICAgICAgICAgIGV2ZW50LmNhcHR1cmUoaG9zdC5jb250YWluZXIsIG1vdmUsIG9uQ29udGV4dE1l
bnVDbG9zZSk7CisgICAgfTsKKworICAgIHRoaXMub25Db250ZXh0TWVudUNsb3NlID0gb25Db250
ZXh0TWVudUNsb3NlOworICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnVDbG9zZSgpIHsKKyAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGVtcFN0eWxlKSB7
CisgICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gdGVtcFN0eWxlOworICAgICAg
ICAgICAgICAgIHRlbXBTdHlsZSA9ICcnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7CisgICAg
ICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwgMCk7CisgICAgfQorICAgIGlmICghdXNlcmFnZW50LmlzR2Vj
a28pIHsKKyAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImNvbnRleHRtZW51IiwgZnVu
Y3Rpb24oZSkgeworICAgICAgICAgICAgaG9zdC50ZXh0SW5wdXQub25Db250ZXh0TWVudShlKTsK
KyAgICAgICAgICAgIG9uQ29udGV4dE1lbnVDbG9zZSgpOworICAgICAgICB9KTsKKyAgICB9Cit9
OworCitleHBvcnRzLlRleHRJbnB1dCA9IFRleHRJbnB1dDsKK30pOworCithY2UuZGVmaW5lKCdh
Y2UvbW91c2UvbW91c2VfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbW91c2UvZGVmYXVs
dF9oYW5kbGVycycsICdhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsICdhY2UvbW91
c2UvbW91c2VfZXZlbnQnLCAnYWNlL21vdXNlL2RyYWdkcm9wJ10sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVu
dCIpOwordmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKK3ZhciBE
ZWZhdWx0SGFuZGxlcnMgPSByZXF1aXJlKCIuL2RlZmF1bHRfaGFuZGxlcnMiKS5EZWZhdWx0SGFu
ZGxlcnM7Cit2YXIgRGVmYXVsdEd1dHRlckhhbmRsZXIgPSByZXF1aXJlKCIuL2RlZmF1bHRfZ3V0
dGVyX2hhbmRsZXIiKS5HdXR0ZXJIYW5kbGVyOwordmFyIE1vdXNlRXZlbnQgPSByZXF1aXJlKCIu
L21vdXNlX2V2ZW50IikuTW91c2VFdmVudDsKK3ZhciBEcmFnZHJvcEhhbmRsZXIgPSByZXF1aXJl
KCIuL2RyYWdkcm9wIikuRHJhZ2Ryb3BIYW5kbGVyOworCit2YXIgTW91c2VIYW5kbGVyID0gZnVu
Y3Rpb24oZWRpdG9yKSB7CisgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKyAgICBuZXcgRGVm
YXVsdEhhbmRsZXJzKHRoaXMpOworICAgIG5ldyBEZWZhdWx0R3V0dGVySGFuZGxlcih0aGlzKTsK
KyAgICBuZXcgRHJhZ2Ryb3BIYW5kbGVyKHRoaXMpOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIo
ZWRpdG9yLmNvbnRhaW5lciwgIm1vdXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZWRp
dG9yLmZvY3VzKCk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAg
ICB9KTsKKworICAgIHZhciBtb3VzZVRhcmdldCA9IGVkaXRvci5yZW5kZXJlci5nZXRNb3VzZUV2
ZW50VGFyZ2V0KCk7CisgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJjbGljayIs
IHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImNsaWNrIikpOworICAgIGV2ZW50LmFkZExp
c3RlbmVyKG1vdXNlVGFyZ2V0LCAibW91c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRo
aXMsICJtb3VzZW1vdmUiKSk7CisgICAgZXZlbnQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lciht
b3VzZVRhcmdldCwgWzMwMCwgMzAwLCAyNTBdLCB0aGlzLCAib25Nb3VzZUV2ZW50Iik7CisgICAg
ZXZlbnQuYWRkTW91c2VXaGVlbExpc3RlbmVyKGVkaXRvci5jb250YWluZXIsIHRoaXMub25Nb3Vz
ZVdoZWVsLmJpbmQodGhpcywgIm1vdXNld2hlZWwiKSk7CisKKyAgICB2YXIgZ3V0dGVyRWwgPSBl
ZGl0b3IucmVuZGVyZXIuJGd1dHRlcjsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwg
Im1vdXNlZG93biIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcm1vdXNlZG93
biIpKTsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgImNsaWNrIiwgdGhpcy5vbk1v
dXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVyY2xpY2siKSk7CisgICAgZXZlbnQuYWRkTGlzdGVu
ZXIoZ3V0dGVyRWwsICJkYmxjbGljayIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1
dHRlcmRibGNsaWNrIikpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAibW91c2Vt
b3ZlIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVybW91c2Vtb3ZlIikpOwor
fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSAxOworICAgIHRo
aXMuc2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbihzcGVlZCkgeworICAgICAgICB0aGlzLiRzY3Jv
bGxTcGVlZCA9IHNwZWVkOworICAgIH07CisKKyAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxTcGVlZDsKKyAgICB9OworCisg
ICAgdGhpcy5vbk1vdXNlRXZlbnQgPSBmdW5jdGlvbihuYW1lLCBlKSB7CisgICAgICAgIHRoaXMu
ZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7CisgICAg
fTsKKworICAgIHRoaXMuJGRyYWdEZWxheSA9IDI1MDsKKyAgICB0aGlzLnNldERyYWdEZWxheSA9
IGZ1bmN0aW9uKGRyYWdEZWxheSkgeworICAgICAgICB0aGlzLiRkcmFnRGVsYXkgPSBkcmFnRGVs
YXk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLiRkcmFnRGVsYXk7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZU1v
dmUgPSBmdW5jdGlvbihuYW1lLCBlKSB7CisgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVk
aXRvci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1v
dmU7CisgICAgICAgIGlmICghbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3Vz
ZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZVdoZWVs
ID0gZnVuY3Rpb24obmFtZSwgZSkgeworICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3Vz
ZUV2ZW50KGUsIHRoaXMuZWRpdG9yKTsKKyAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IHRoaXMu
JHNjcm9sbFNwZWVkICogMjsKKyAgICAgICAgbW91c2VFdmVudC53aGVlbFggPSBlLndoZWVsWDsK
KyAgICAgICAgbW91c2VFdmVudC53aGVlbFkgPSBlLndoZWVsWTsKKworICAgICAgICB0aGlzLmVk
aXRvci5fZW1pdChuYW1lLCBtb3VzZUV2ZW50KTsKKyAgICB9OworCisgICAgdGhpcy5zZXRTdGF0
ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICB9
OworCisgICAgdGhpcy5jYXB0dXJlTW91c2UgPSBmdW5jdGlvbihldiwgc3RhdGUpIHsKKyAgICAg
ICAgaWYgKHN0YXRlKQorICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7CisKKyAgICAg
ICAgdGhpcy54ID0gZXYueDsKKyAgICAgICAgdGhpcy55ID0gZXYueTsKKyAgICAgICAgCisgICAg
ICAgIHRoaXMuaXNNb3VzZVByZXNzZWQgPSB0cnVlOworICAgICAgICB2YXIgcmVuZGVyZXIgPSB0
aGlzLmVkaXRvci5yZW5kZXJlcjsKKyAgICAgICAgaWYgKHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFB
dEN1cnNvcikKKyAgICAgICAgICAgIHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IG51
bGw7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgb25Nb3VzZU1vdmUg
PSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZWxmLnggPSBlLmNsaWVudFg7CisgICAgICAg
ICAgICBzZWxmLnkgPSBlLmNsaWVudFk7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIG9uQ2Fw
dHVyZUVuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJ
ZCk7CisgICAgICAgICAgICBzZWxmW3NlbGYuc3RhdGUgKyAiRW5kIl0gJiYgc2VsZltzZWxmLnN0
YXRlICsgIkVuZCJdKGUpOworICAgICAgICAgICAgc2VsZi4kY2xpY2tTZWxlY3Rpb24gPSBudWxs
OworICAgICAgICAgICAgaWYgKHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxs
KSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYuaXNNb3VzZVByZXNzZWQgPSBmYWxzZTsKKyAg
ICAgICAgfTsKKworICAgICAgICB2YXIgb25DYXB0dXJlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZV0gJiYgc2VsZltzZWxmLnN0YXRlXSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUgJiYgZXYuZG9t
RXZlbnQudHlwZSA9PSAiZGJsY2xpY2siKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIG9uQ2FwdHVyZUludGVydmFsKCk7CisgICAgICAgICAg
ICAgICAgb25DYXB0dXJlRW5kKGV2LmRvbUV2ZW50KTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnQuY2FwdHVyZSh0aGlzLmVk
aXRvci5jb250YWluZXIsIG9uTW91c2VNb3ZlLCBvbkNhcHR1cmVFbmQpOworICAgICAgICB2YXIg
dGltZXJJZCA9IHNldEludGVydmFsKG9uQ2FwdHVyZUludGVydmFsLCAyMCk7CisgICAgfTsKK30p
LmNhbGwoTW91c2VIYW5kbGVyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW91c2VIYW5kbGVyID0g
TW91c2VIYW5kbGVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9kZWZhdWx0X2hhbmRs
ZXJzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdh
Y2UvbGliL3VzZXJhZ2VudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwordmFyIHVzZXJhZ2VudCA9IHJl
cXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKKwordmFyIERSQUdfT0ZGU0VUID0gNTsgLy8gcGl4
ZWxzCisKK2Z1bmN0aW9uIERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHsKKyAgICBtb3Vz
ZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDsKKworICAgIHZhciBlZGl0b3IgPSBtb3Vz
ZUhhbmRsZXIuZWRpdG9yOworICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigibW91c2Vkb3du
IiwgdGhpcy5vbk1vdXNlRG93bi5iaW5kKG1vdXNlSGFuZGxlcikpOworICAgIGVkaXRvci5zZXRE
ZWZhdWx0SGFuZGxlcigiZGJsY2xpY2siLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZChtb3VzZUhh
bmRsZXIpKTsKKyAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoInRyaXBsZWNsaWNrIiwgdGhp
cy5vblRyaXBsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7CisgICAgZWRpdG9yLnNldERlZmF1
bHRIYW5kbGVyKCJxdWFkY2xpY2siLCB0aGlzLm9uUXVhZENsaWNrLmJpbmQobW91c2VIYW5kbGVy
KSk7CisgICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZXdoZWVsIiwgdGhpcy5vbk1v
dXNlV2hlZWwuYmluZChtb3VzZUhhbmRsZXIpKTsKKworICAgIHZhciBleHBvcnRzID0gWyJzZWxl
Y3QiLCAic3RhcnRTZWxlY3QiLCAiZHJhZyIsICJkcmFnRW5kIiwgImRyYWdXYWl0IiwKKyAgICAg
ICAgImRyYWdXYWl0RW5kIiwgInN0YXJ0RHJhZyIsICJmb2N1c1dhaXQiXTsKKworICAgIGV4cG9y
dHMuZm9yRWFjaChmdW5jdGlvbih4KSB7CisgICAgICAgIG1vdXNlSGFuZGxlclt4XSA9IHRoaXNb
eF07CisgICAgfSwgdGhpcyk7CisKKyAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlMaW5lcyA9IHRo
aXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRMaW5lUmFuZ2UiKTsK
KyAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnku
YmluZChtb3VzZUhhbmRsZXIsICJnZXRXb3JkUmFuZ2UiKTsKKworICAgIG1vdXNlSGFuZGxlci4k
Zm9jdXNXYWl0VGltb3V0ID0gMjUwOworfQorCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLm9u
TW91c2VEb3duID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgdmFyIGluU2VsZWN0aW9uID0gZXYu
aW5TZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24o
KTsKKyAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGV2OworICAgICAgICB2YXIgZWRpdG9y
ID0gdGhpcy5lZGl0b3I7CisKKyAgICAgICAgdmFyIGJ1dHRvbiA9IGV2LmdldEJ1dHRvbigpOwor
ICAgICAgICBpZiAoYnV0dG9uICE9PSAwKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFu
Z2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rp
b25FbXB0eSA9IHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKTsKKworICAgICAgICAgICAgaWYgKHNl
bGVjdGlvbkVtcHR5KSB7CisgICAgICAgICAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0
aW9uKHBvcyk7CisgICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWRpdG9yLnRleHRJbnB1dC5vbkNvbnRl
eHRNZW51KGV2LmRvbUV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsgLy8gc3RvcHBpbmcgZXZl
bnQgaGVyZSBicmVha3MgY29udGV4dG1lbnUgb24gZmYgbWFjCisgICAgICAgIH0KKyAgICAgICAg
aWYgKGluU2VsZWN0aW9uICYmICFlZGl0b3IuaXNGb2N1c2VkKCkpIHsKKyAgICAgICAgICAgIGVk
aXRvci5mb2N1cygpOworICAgICAgICAgICAgaWYgKHRoaXMuJGZvY3VzV2FpdFRpbW91dCAmJiAh
dGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJm
b2N1c1dhaXQiKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWluU2VsZWN0aW9uIHx8IHRoaXMuJGNsaWNrU2VsZWN0
aW9uIHx8IGV2LmdldFNoaWZ0S2V5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3Qo
cG9zKTsKKyAgICAgICAgfSBlbHNlIGlmIChpblNlbGVjdGlvbikgeworICAgICAgICAgICAgdGhp
cy5tb3VzZWRvd25FdmVudC50aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKyAgICAgICAg
ICAgIHRoaXMuc2V0U3RhdGUoImRyYWdXYWl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
LmNhcHR1cmVNb3VzZShldik7CisgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgIH07CisKKyAgICB0aGlzLnN0YXJ0U2VsZWN0ID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAg
IHBvcyA9IHBvcyB8fCB0aGlzLmVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRl
cyh0aGlzLngsIHRoaXMueSk7CisgICAgICAgIGlmICh0aGlzLm1vdXNlZG93bkV2ZW50LmdldFNo
aWZ0S2V5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bv
c2l0aW9uKHBvcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXRoaXMuJGNsaWNrU2Vs
ZWN0aW9uKSB7CisgICAgICAgICAgICB0aGlzLmVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihw
b3MpOworICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7CisgICAgfTsKKwor
ICAgIHRoaXMuc2VsZWN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhbmNob3IsIGVkaXRv
ciA9IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNj
cmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKKworICAgICAgICBpZiAodGhp
cy4kY2xpY2tTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLiRjbGlja1Nl
bGVjdGlvbi5jb21wYXJlUG9pbnQoY3Vyc29yKTsKKworICAgICAgICAgICAgaWYgKGNtcCA9PSAt
MSkgeworICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHsKKyAgICAgICAgICAgICAgICBhbmNo
b3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0
aGlzLiRjbGlja1NlbGVjdGlvbiwgY3Vyc29yKTsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBv
cmllbnRlZFJhbmdlLmN1cnNvcjsKKyAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJh
bmdlLmFuY2hvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24u
c2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOworICAgICAgICB9
CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpOworCisg
ICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOworICAgIH07CisK
KyAgICB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5ID0gZnVuY3Rpb24odW5pdE5hbWUpIHsKKyAgICAg
ICAgdmFyIGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkp
OworICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uW3VuaXROYW1lXShjdXJzb3Iu
cm93LCBjdXJzb3IuY29sdW1uKTsKKworICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24p
IHsKKyAgICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBh
cmVQb2ludChyYW5nZS5zdGFydCk7CisgICAgICAgICAgICB2YXIgY21wRW5kID0gdGhpcy4kY2xp
Y2tTZWxlY3Rpb24uY29tcGFyZVBvaW50KHJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChj
bXBTdGFydCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkgeworICAgICAgICAgICAgICAgIGFuY2hvciA9
IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5k
LnJvdyAhPSBjdXJzb3Iucm93IHx8IHJhbmdlLmVuZC5jb2x1bW4gIT0gY3Vyc29yLmNvbHVtbikK
KyAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGNtcEVuZCA9PSAxICYmIGNtcFN0YXJ0ID49IDApIHsKKyAgICAgICAgICAgICAg
ICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKKyAgICAgICAgICAgICAgICBp
ZiAocmFuZ2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9
IGN1cnNvci5jb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5kID09IDEpIHsK
KyAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICAgICAgYW5j
aG9yID0gcmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxl
Y3Rpb24sIGN1cnNvcik7CisgICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5j
dXJzb3I7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFu
Y2hvcihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBlZGl0
b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKKworICAgICAgICBlZGl0b3Iu
cmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworCisgICAgdGhpcy5zdGFy
dERyYWcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwor
ICAgICAgICB0aGlzLnNldFN0YXRlKCJkcmFnIik7CisgICAgICAgIHRoaXMuZHJhZ1JhbmdlID0g
ZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIHZhciBzdHlsZSA9IGVkaXRvci5n
ZXRTZWxlY3Rpb25TdHlsZSgpOworICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25NYXJrZXIgPSBl
ZGl0b3Iuc2Vzc2lvbi5hZGRNYXJrZXIodGhpcy5kcmFnUmFuZ2UsICJhY2Vfc2VsZWN0aW9uIiwg
c3R5bGUpOworICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgZG9tLmFk
ZENzc0NsYXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dpbmciKTsKKyAgICAgICAgaWYg
KCF0aGlzLiRkcmFnS2V5YmluZGluZykgeworICAgICAgICAgICAgdGhpcy4kZHJhZ0tleWJpbmRp
bmcgPSB7CisgICAgICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmQ6IGZ1bmN0aW9uKGRhdGEsIGhh
c2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXlT
dHJpbmcgPT0gImVzYyIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2NvbW1hbmQ6
IHRoaXMuY29tbWFuZH07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjb21t
YW5kOiB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBlZGl0b3IuJG1vdXNlSGFuZGxlcjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0N1cnNvciA9IG51bGw7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmRyYWdFbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuc3RhcnRTZWxlY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVkaXRvci5rZXlCaW5kaW5n
LmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLiRkcmFnS2V5YmluZGluZyk7CisgICAgfTsKKworICAg
IHRoaXMuZm9jdXNXYWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBkaXN0YW5jZSA9IGNh
bGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwg
dGhpcy54LCB0aGlzLnkpOworICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1l
KCk7CisKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHx0aW1lIC0gdGhpcy5t
b3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNXYWl0VGltb3V0KQorICAgICAgICAgICAg
dGhpcy5zdGFydFNlbGVjdCgpOworICAgIH07CisKKyAgICB0aGlzLmRyYWdXYWl0ID0gZnVuY3Rp
b24oZSkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5tb3VzZWRv
d25FdmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTsKKyAgICAg
ICAgdmFyIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgZWRpdG9y
ID0gdGhpcy5lZGl0b3I7CisKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQpIHsK
KyAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1
bWVudFBvc2l0aW9uKCkpOworICAgICAgICB9IGVsc2UgaWYgKHRpbWUgLSB0aGlzLm1vdXNlZG93
bkV2ZW50LnRpbWUgPiBlZGl0b3IuZ2V0RHJhZ0RlbGF5KCkpIHsKKyAgICAgICAgICAgIHRoaXMu
c3RhcnREcmFnKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5kcmFnV2FpdEVuZCA9
IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudC5kb21FdmVudCA9IGU7
CisgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QoKTsKKyAgICB9OworCisgICAgdGhpcy5kcmFnID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAg
dGhpcy5kcmFnQ3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVz
KHRoaXMueCwgdGhpcy55KTsKKyAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHRo
aXMuZHJhZ0N1cnNvcik7CisgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRv
VmlldygpOworICAgIH07CisKKyAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgICAgdmFyIGRyYWdDdXJzb3IgPSB0
aGlzLmRyYWdDdXJzb3I7CisgICAgICAgIHZhciBkcmFnUmFuZ2UgPSB0aGlzLmRyYWdSYW5nZTsK
KyAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dp
bmciKTsKKyAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuZHJhZ1NlbGVj
dGlvbk1hcmtlcik7CisgICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFu
ZGxlcih0aGlzLiRkcmFnS2V5YmluZGluZyk7CisKKyAgICAgICAgaWYgKCFkcmFnQ3Vyc29yKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwor
ICAgICAgICBpZiAoZSAmJiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5KSkgeworICAgICAgICAgICAg
dmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9
IGRyYWdSYW5nZTsKKyAgICAgICAgICAgIG5ld1JhbmdlLmVuZCA9IHNlc3Npb24uaW5zZXJ0KGRy
YWdDdXJzb3IsIHNlc3Npb24uZ2V0VGV4dFJhbmdlKGRyYWdSYW5nZSkpOworICAgICAgICAgICAg
bmV3UmFuZ2Uuc3RhcnQgPSBkcmFnQ3Vyc29yOworICAgICAgICB9IGVsc2UgaWYgKGRyYWdSYW5n
ZS5jb250YWlucyhkcmFnQ3Vyc29yLnJvdywgZHJhZ0N1cnNvci5jb2x1bW4pKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2Ug
PSBlZGl0b3IubW92ZVRleHQoZHJhZ1JhbmdlLCBkcmFnQ3Vyc29yKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbmV3UmFuZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZWRp
dG9yLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXdSYW5nZSk7CisgICAgfTsKKworICAg
IHRoaXMub25Eb3VibGVDbGljayA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgIHZhciBwb3MgPSBl
di5nZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRv
cjsKKyAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKworICAgICAgICB2YXIg
cmFuZ2UgPSBzZXNzaW9uLmdldEJyYWNrZXRSYW5nZShwb3MpOworICAgICAgICBpZiAocmFuZ2Up
IHsKKyAgICAgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBy
YW5nZS5zdGFydC5jb2x1bW4tLTsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IHJhbmdl
OworICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5z
ZWxlY3Rpb24uZ2V0V29yZFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICB0aGlz
LnNldFN0YXRlKCJzZWxlY3RCeVdvcmRzIik7CisgICAgfTsKKworICAgIHRoaXMub25UcmlwbGVD
bGljayA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBv
c2l0aW9uKCk7CisgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworICAgICAgICB0
aGlzLnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIik7CisgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0
aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocG9zLnJvdyk7CisgICAgfTsKKwor
ICAgIHRoaXMub25RdWFkQ2xpY2sgPSBmdW5jdGlvbihldikgeworICAgICAgICB2YXIgZWRpdG9y
ID0gdGhpcy5lZGl0b3I7CisKKyAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpOworICAgICAgICB0
aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAg
ICB0aGlzLnNldFN0YXRlKCJudWxsIik7CisgICAgfTsKKworICAgIHRoaXMub25Nb3VzZVdoZWVs
ID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgaWYgKGV2LmdldFNoaWZ0S2V5KCkgfHwgZXYuZ2V0
QWNjZWxLZXkoKSl7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgICB2YXIgaXNTY3JvbGFibGUgPSBlZGl0b3Iu
cmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoZXYud2hlZWxYICogZXYuc3BlZWQsIGV2LndoZWVsWSAq
IGV2LnNwZWVkKTsKKyAgICAgICAgaWYgKGlzU2Nyb2xhYmxlKSB7CisgICAgICAgICAgICB0aGlz
LiRwYXNzU2Nyb2xsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLiRwYXNzU2Nyb2xsRXZlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBpZiAoIXRoaXMuJHNjcm9sbFN0b3BUaW1lb3V0KSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMuJHNjcm9sbFN0b3BUaW1l
b3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4k
cGFzc1Njcm9sbEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4kc2Nyb2xs
U3RvcFRpbWVvdXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0sIDIwMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQnkoZXYud2hl
ZWxYICogZXYuc3BlZWQsIGV2LndoZWVsWSAqIGV2LnNwZWVkKTsKKyAgICAgICAgcmV0dXJuIGV2
LnByZXZlbnREZWZhdWx0KCk7CisgICAgfTsKKworfSkuY2FsbChEZWZhdWx0SGFuZGxlcnMucHJv
dG90eXBlKTsKKworZXhwb3J0cy5EZWZhdWx0SGFuZGxlcnMgPSBEZWZhdWx0SGFuZGxlcnM7CisK
K2Z1bmN0aW9uIGNhbGNEaXN0YW5jZShheCwgYXksIGJ4LCBieSkgeworICAgIHJldHVybiBNYXRo
LnNxcnQoTWF0aC5wb3coYnggLSBheCwgMikgKyBNYXRoLnBvdyhieSAtIGF5LCAyKSk7Cit9CisK
K2Z1bmN0aW9uIGNhbGNSYW5nZU9yaWVudGF0aW9uKHJhbmdlLCBjdXJzb3IpIHsKKyAgICBpZiAo
cmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpCisgICAgICAgIHZhciBjbXAgPSAyICog
Y3Vyc29yLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW47Cisg
ICAgZWxzZQorICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5yb3cgLSByYW5nZS5zdGFydC5y
b3cgLSByYW5nZS5lbmQucm93OworCisgICAgaWYgKGNtcCA8IDApCisgICAgICAgIHJldHVybiB7
Y3Vyc29yOiByYW5nZS5zdGFydCwgYW5jaG9yOiByYW5nZS5lbmR9OworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIHtjdXJzb3I6IHJhbmdlLmVuZCwgYW5jaG9yOiByYW5nZS5zdGFydH07Cit9CisK
K30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9l
dmVudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwordmFyIGRvbSA9
IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVu
dCIpOworCitmdW5jdGlvbiBHdXR0ZXJIYW5kbGVyKG1vdXNlSGFuZGxlcikgeworICAgIHZhciBl
ZGl0b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9yOworICAgIHZhciBndXR0ZXIgPSBlZGl0b3IucmVu
ZGVyZXIuJGd1dHRlckxheWVyOworCisgICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0
SGFuZGxlcigiZ3V0dGVybW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIWVk
aXRvci5pc0ZvY3VzZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGd1dHRl
clJlZ2lvbiA9IGd1dHRlci5nZXRSZWdpb24oZSk7CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lv
biA9PSAiZm9sZFdpZGdldHMiKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBy
b3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgIHZhciBzZWxlY3Rpb24g
PSBlZGl0b3Iuc2Vzc2lvbi5zZWxlY3Rpb247CisKKyAgICAgICAgaWYgKGUuZ2V0U2hpZnRLZXko
KSkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RUbyhyb3csIDApOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChlLmRvbUV2ZW50LmRldGFpbCA9PSAyKSB7CisgICAgICAgICAg
ICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpOworICAgICAgICAgICAgICAgIHJldHVybiBlLnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3VzZUhhbmRsZXIuJGNs
aWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uocm93KTsKKyAgICAg
ICAgfQorICAgICAgICBtb3VzZUhhbmRsZXIuY2FwdHVyZU1vdXNlKGUsICJzZWxlY3RCeUxpbmVz
Iik7CisgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfSk7CisKKworICAg
IHZhciB0b29sdGlwVGltZW91dCwgbW91c2VFdmVudCwgdG9vbHRpcCwgdG9vbHRpcEFubm90YXRp
b247CisgICAgZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCgpIHsKKyAgICAgICAgdG9vbHRpcCA9IGRv
bS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAiYWNl
X2d1dHRlci10b29sdGlwIjsKKyAgICAgICAgdG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi
OworICAgICAgICBlZGl0b3IuY29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNob3dUb29sdGlwKCkgeworICAgICAgICBpZiAoIXRvb2x0aXApIHsK
KyAgICAgICAgICAgIGNyZWF0ZVRvb2x0aXAoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm93
ID0gbW91c2VFdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OworICAgICAgICB2YXIgYW5u
b3RhdGlvbiA9IGd1dHRlci4kYW5ub3RhdGlvbnNbcm93XTsKKyAgICAgICAgaWYgKCFhbm5vdGF0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CisKKyAgICAgICAgdmFyIG1h
eFJvdyA9IGVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpOworICAgICAgICBpZiAocm93ID09IG1h
eFJvdykgeworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IGVkaXRvci5yZW5kZXJlci5waXhl
bFRvU2NyZWVuQ29vcmRpbmF0ZXMoMCwgbW91c2VFdmVudC55KS5yb3c7CisgICAgICAgICAgICB2
YXIgcG9zID0gbW91c2VFdmVudC4kcG9zOworICAgICAgICAgICAgaWYgKHNjcmVlblJvdyA+IGVk
aXRvci5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cocG9zLnJvdywgcG9zLmNvbHVtbikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodG9vbHRpcEFubm90YXRpb24gPT0gYW5ub3RhdGlvbikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdG9vbHRpcEFubm90YXRpb24gPSBhbm5vdGF0aW9uLnRleHQuam9pbigiPGJy
Lz4iKTsKKworICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAg
ICB0b29sdGlwLmlubmVySFRNTCA9IHRvb2x0aXBBbm5vdGF0aW9uOworICAgICAgICBlZGl0b3Iu
b24oIm1vdXNld2hlZWwiLCBoaWRlVG9vbHRpcCk7CisKKyAgICAgICAgbW92ZVRvb2x0aXAobW91
c2VFdmVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaGlkZVRvb2x0aXAoKSB7CisgICAgICAg
IGlmICh0b29sdGlwVGltZW91dCkKKyAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gY2xlYXJU
aW1lb3V0KHRvb2x0aXBUaW1lb3V0KTsKKyAgICAgICAgaWYgKHRvb2x0aXBBbm5vdGF0aW9uKSB7
CisgICAgICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAg
ICB0b29sdGlwQW5ub3RhdGlvbiA9IG51bGw7CisgICAgICAgICAgICBlZGl0b3IucmVtb3ZlRXZl
bnRMaXN0ZW5lcigibW91c2V3aGVlbCIsIGhpZGVUb29sdGlwKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIG1vdmVUb29sdGlwKGUpIHsKKyAgICAgICAgdmFyIHJlY3QgPSBlZGl0
b3IucmVuZGVyZXIuJGd1dHRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgdG9v
bHRpcC5zdHlsZS5sZWZ0ID0gZS54ICsgMTUgKyAicHgiOworICAgICAgICBpZiAoZS55ICsgMyAq
IGVkaXRvci5yZW5kZXJlci5saW5lSGVpZ2h0ICsgMTUgPCByZWN0LmJvdHRvbSkgeworICAgICAg
ICAgICAgdG9vbHRpcC5zdHlsZS5ib3R0b20gPSAgIiI7CisgICAgICAgICAgICB0b29sdGlwLnN0
eWxlLnRvcCA9ICBlLnkgKyAxNSArICJweCI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB0b29sdGlwLnN0eWxlLnRvcCA9ICAiIjsKKyAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUuYm90
dG9tID0gcmVjdC5ib3R0b20gLSBlLnkgKyA1ICsgInB4IjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoImd1dHRlcm1vdXNlbW92
ZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IGUuZG9tRXZlbnQudGFyZ2V0
IHx8IGUuZG9tRXZlbnQuc3JjRWxlbWVudDsKKyAgICAgICAgaWYgKGRvbS5oYXNDc3NDbGFzcyh0
YXJnZXQsICJhY2VfZm9sZC13aWRnZXQiKSkKKyAgICAgICAgICAgIHJldHVybiBoaWRlVG9vbHRp
cCgpOworCisgICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikKKyAgICAgICAgICAgIG1vdmVU
b29sdGlwKGUpOworCisgICAgICAgIG1vdXNlRXZlbnQgPSBlOworICAgICAgICBpZiAodG9vbHRp
cFRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0g
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gbnVs
bDsKKyAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50ICYmICFtb3VzZUhhbmRsZXIuaXNNb3VzZVBy
ZXNzZWQpCisgICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXAoKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBoaWRlVG9vbHRpcCgpOworICAgICAgICB9LCA1MCk7CisgICAgfSk7
CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihlZGl0b3IucmVuZGVyZXIuJGd1dHRlciwgIm1vdXNl
b3V0IiwgZnVuY3Rpb24oZSkgeworICAgICAgICBtb3VzZUV2ZW50ID0gbnVsbDsKKyAgICAgICAg
aWYgKCF0b29sdGlwQW5ub3RhdGlvbiB8fCB0b29sdGlwVGltZW91dCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBoaWRlVG9v
bHRpcCgpOworICAgICAgICB9LCA1MCk7CisgICAgfSk7CisKK30KKworZXhwb3J0cy5HdXR0ZXJI
YW5kbGVyID0gR3V0dGVySGFuZGxlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9t
b3VzZV9ldmVudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9l
dmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKKworCit2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKK3ZhciB1
c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgTW91c2VFdmVudCA9
IGV4cG9ydHMuTW91c2VFdmVudCA9IGZ1bmN0aW9uKGRvbUV2ZW50LCBlZGl0b3IpIHsKKyAgICB0
aGlzLmRvbUV2ZW50ID0gZG9tRXZlbnQ7CisgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgICAg
CisgICAgdGhpcy54ID0gdGhpcy5jbGllbnRYID0gZG9tRXZlbnQuY2xpZW50WDsKKyAgICB0aGlz
LnkgPSB0aGlzLmNsaWVudFkgPSBkb21FdmVudC5jbGllbnRZOworCisgICAgdGhpcy4kcG9zID0g
bnVsbDsKKyAgICB0aGlzLiRpblNlbGVjdGlvbiA9IG51bGw7CisgICAgCisgICAgdGhpcy5wcm9w
YWdhdGlvblN0b3BwZWQgPSBmYWxzZTsKKyAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxz
ZTsKK307CisKKyhmdW5jdGlvbigpIHsgIAorICAgIAorICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9u
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbih0aGlzLmRvbUV2
ZW50KTsKKyAgICAgICAgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOworICAgIH07Cisg
ICAgCisgICAgdGhpcy5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KTsKKyAgICAgICAgdGhpcy5kZWZhdWx0UHJl
dmVudGVkID0gdHJ1ZTsKKyAgICB9OworICAgIAorICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB0aGlzLnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgfTsKKyAgICB0aGlzLmdldERvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHRoaXMuJHBvcykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiRw
b3M7CisgICAgICAgIAorICAgICAgICB0aGlzLiRwb3MgPSB0aGlzLmVkaXRvci5yZW5kZXJlci5z
Y3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLmNsaWVudFgsIHRoaXMuY2xpZW50WSk7CisgICAg
ICAgIHJldHVybiB0aGlzLiRwb3M7CisgICAgfTsKKyAgICB0aGlzLmluU2VsZWN0aW9uID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLiRpblNlbGVjdGlvbiAhPT0gbnVsbCkKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLiRpblNlbGVjdGlvbjsKKyAgICAgICAgICAgIAorICAgICAgICB2
YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgICAgIAorICAgICAgICBpZiAoZWRpdG9yLmdl
dFJlYWRPbmx5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2Ug
PSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25S
YW5nZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmdl
dERvY3VtZW50UG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9
IHNlbGVjdGlvblJhbmdlLmNvbnRhaW5zKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLiRpblNlbGVjdGlvbjsKKyAgICB9
OworICAgIHRoaXMuZ2V0QnV0dG9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBldmVu
dC5nZXRCdXR0b24odGhpcy5kb21FdmVudCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNoaWZ0S2V5
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvbUV2ZW50LnNoaWZ0S2V5Owor
ICAgIH07CisgICAgCisgICAgdGhpcy5nZXRBY2NlbEtleSA9IHVzZXJhZ2VudC5pc01hYworICAg
ICAgICA/IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FdmVudC5tZXRhS2V5OyB9CisgICAg
ICAgIDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUV2ZW50LmN0cmxLZXk7IH07CisgICAg
Cit9KS5jYWxsKE1vdXNlRXZlbnQucHJvdG90eXBlKTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9tb3VzZS9kcmFnZHJvcCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9ldmVudCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKKwordmFyIERyYWdkcm9wSGFuZGxl
ciA9IGZ1bmN0aW9uKG1vdXNlSGFuZGxlcikgeworICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRs
ZXIuZWRpdG9yOworICAgIHZhciBkcmFnU2VsZWN0aW9uTWFya2VyLCB4LCB5OworICAgIHZhciB0
aW1lcklkLCByYW5nZSwgaXNCYWNrd2FyZHM7CisgICAgdmFyIGRyYWdDdXJzb3IsIGNvdW50ZXIg
PSAwOworCisgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjsKKyAgICBldmVu
dC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdlbnRlciIsIGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjb3VudGVyKys7CisgICAgICAgIGlmICghZHJhZ1NlbGVjdGlvbk1hcmtlcikgeworICAg
ICAgICAgICAgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAg
IGlzQmFja3dhcmRzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpOworICAgICAgICAg
ICAgdmFyIHN0eWxlID0gZWRpdG9yLmdldFNlbGVjdGlvblN0eWxlKCk7CisgICAgICAgICAgICBk
cmFnU2VsZWN0aW9uTWFya2VyID0gZWRpdG9yLnNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNl
X3NlbGVjdGlvbiIsIHN0eWxlKTsKKyAgICAgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigp
OworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsKKyAgICAgICAgICAgIHRpbWVy
SWQgPSBzZXRJbnRlcnZhbChvbkRyYWdJbnRlcnZhbCwgMjApOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAgICB9KTsKKworICAgIGV2ZW50LmFk
ZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ292ZXIiLCBmdW5jdGlvbihlKSB7CisgICAgICAg
IGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
eCA9IGUuY2xpZW50WDsKKyAgICAgICAgeSA9IGUuY2xpZW50WTsKKyAgICAgICAgcmV0dXJuIGV2
ZW50LnByZXZlbnREZWZhdWx0KGUpOworICAgIH0pOworICAgIAorICAgIHZhciBvbkRyYWdJbnRl
cnZhbCA9ICBmdW5jdGlvbigpIHsKKyAgICAgICAgZHJhZ0N1cnNvciA9IGVkaXRvci5yZW5kZXJl
ci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh4LCB5KTsKKyAgICAgICAgZWRpdG9yLm1vdmVDdXJz
b3JUb1Bvc2l0aW9uKGRyYWdDdXJzb3IpOworICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xs
Q3Vyc29ySW50b1ZpZXcoKTsKKyAgICB9OworICAgIAorICAgIGV2ZW50LmFkZExpc3RlbmVyKG1v
dXNlVGFyZ2V0LCAiZHJhZ2xlYXZlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZWRpdG9y
LmdldFJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvdW50ZXItLTsK
KyAgICAgICAgaWYgKGNvdW50ZXIgPiAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
bGVhckludGVydmFsKHRpbWVySWQpOworICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJr
ZXIoZHJhZ1NlbGVjdGlvbk1hcmtlcik7CisgICAgICAgIGRyYWdTZWxlY3Rpb25NYXJrZXIgPSBu
dWxsOworICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBp
c0JhY2t3YXJkcyk7CisgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKKyAg
ICB9KTsKKyAgICAKKyAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyb3AiLCBm
dW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY291bnRlciA9IDA7CisgICAgICAgIGNsZWFySW50ZXJ2YWwo
dGltZXJJZCk7CisgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZU1hcmtlcihkcmFnU2VsZWN0
aW9uTWFya2VyKTsKKyAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IG51bGw7CisKKyAgICAg
ICAgcmFuZ2UuZW5kID0gZWRpdG9yLnNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIGUuZGF0YVRy
YW5zZmVyLmdldERhdGEoJ1RleHQnKSk7CisgICAgICAgIHJhbmdlLnN0YXJ0ID0gZHJhZ0N1cnNv
cjsKKyAgICAgICAgZWRpdG9yLmZvY3VzKCk7CisgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0
U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1
bHQoZSk7CisgICAgfSk7CisKK307CisKK2V4cG9ydHMuRHJhZ2Ryb3BIYW5kbGVyID0gRHJhZ2Ry
b3BIYW5kbGVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb3VzZS9mb2xkX2hhbmRsZXInLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK2Z1bmN0aW9uIEZvbGRIYW5kbGVyKGVkaXRvcikgeworCisgICAg
ZWRpdG9yLm9uKCJjbGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0g
ZS5nZXREb2N1bWVudFBvc2l0aW9uKCk7CisgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNl
c3Npb247CisgICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93
LCBwb3NpdGlvbi5jb2x1bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAg
aWYgKGUuZ2V0QWNjZWxLZXkoKSkKKyAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQo
Zm9sZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRG
b2xkKGZvbGQpOworCisgICAgICAgICAgICBlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0pOwor
CisgICAgZWRpdG9yLm9uKCJndXR0ZXJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAgICAg
IGlmICghZWRpdG9yLmlzRm9jdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2
YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdpb24o
ZSk7CisKKyAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSAiZm9sZFdpZGdldHMiKSB7CisgICAg
ICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OworICAgICAgICAg
ICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgICAgIGlmIChzZXNzaW9u
LmZvbGRXaWRnZXRzICYmIHNlc3Npb24uZm9sZFdpZGdldHNbcm93XSkKKyAgICAgICAgICAgICAg
ICBlZGl0b3Iuc2Vzc2lvbi5vbkZvbGRXaWRnZXRDbGljayhyb3csIGUpOworICAgICAgICAgICAg
ZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGVkaXRvci5vbigiZ3V0dGVyZGJs
Y2xpY2siLCBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBlZGl0b3Iu
cmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihlKTsKKworICAgICAgICBpZiAoZ3V0dGVy
UmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERv
Y3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5z
ZXNzaW9uOworICAgICAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0czsKKyAgICAg
ICAgICAgIGlmICghZncgfHwgZndbcm93XSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIHZhciBpID0gcm93IC0gMSwgZmlyc3RSYW5nZTsKKyAgICAgICAgICAgIHdoaWxl
IChpID49IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgYyA9IGZ3W2ldOworICAgICAgICAgICAg
ICAgIGlmIChjID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGMgPSBmd1tpXSA9IHNlc3Np
b24uZ2V0Rm9sZFdpZGdldCgpOworCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gInN0YXJ0Iikg
eworICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldEZvbGRXaWRnZXRS
YW5nZShpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJhbmdlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlOworICAgICAgICAgICAgICAgICAgICBp
ZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA+PSByb3cpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaS0tOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmFuZ2Ug
PSBmaXJzdFJhbmdlOworCisgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAgIHZhciBmb2xkID0g
c2Vzc2lvbi5nZXRGb2xkQXQocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIDEpOwor
CisgICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lv
bi5yZW1vdmVGb2xkKGZvbGQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOworICAgICAgICAgICAgICAg
ICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uuc3Rh
cnQucm93LCBjb2x1bW46IDB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitleHBvcnRzLkZv
bGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uva2V5Ym9h
cmQva2V5YmluZGluZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9rZXlzJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIGtleVV0aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKK3ZhciBl
dmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworCit2YXIgS2V5QmluZGluZyA9IGZ1bmN0
aW9uKGVkaXRvcikgeworICAgIHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKKyAgICB0aGlzLiRkYXRh
ID0geyB9OworICAgIHRoaXMuJGhhbmRsZXJzID0gW107CisgICAgdGhpcy5zZXREZWZhdWx0SGFu
ZGxlcihlZGl0b3IuY29tbWFuZHMpOworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2V0
RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICB0aGlzLnJlbW92ZUtleWJv
YXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7CisgICAgICAgIHRoaXMuJGRlZmF1bHRI
YW5kbGVyID0ga2I7CisgICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAwKTsKKyAg
ICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRoaXMuJGVkaXRvcn07CisgICAgfTsKKworICAg
IHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKKyAgICAgICAgaWYgKHRo
aXMuJGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxlbmd0aCAtIDFdID09IGtiKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHdoaWxlICh0aGlzLiRoYW5kbGVyc1sxXSkKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGhhbmRsZXJzWzFdKTsKKworICAg
ICAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihrYiwgMSk7CisgICAgfTsKKworICAgIHRoaXMu
YWRkS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IsIHBvcykgeworICAgICAgICBpZiAoIWti
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmlu
ZGV4T2Yoa2IpOworICAgICAgICBpZiAoaSAhPSAtMSkKKyAgICAgICAgICAgIHRoaXMuJGhhbmRs
ZXJzLnNwbGljZShpLCAxKTsKKworICAgICAgICBpZiAocG9zID09IHVuZGVmaW5lZCkKKyAgICAg
ICAgICAgIHRoaXMuJGhhbmRsZXJzLnB1c2goa2IpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLiRoYW5kbGVycy5zcGxpY2UocG9zLCAwLCBrYik7CisKKyAgICAgICAgaWYgKGkgPT0g
LTEgJiYga2IuYXR0YWNoKQorICAgICAgICAgICAga2IuYXR0YWNoKHRoaXMuJGVkaXRvcik7Cisg
ICAgfTsKKworICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsK
KyAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKKyAgICAgICAgaWYg
KGkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRoaXMuJGhhbmRs
ZXJzLnNwbGljZShpLCAxKTsKKyAgICAgICAga2IuZGV0YWNoICYmIGtiLmRldGFjaCh0aGlzLiRl
ZGl0b3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5nZXRLZXli
b2FyZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZXJz
W3RoaXMuJGhhbmRsZXJzLmxlbmd0aCAtIDFdOworICAgIH07CisKKyAgICB0aGlzLiRjYWxsS2V5
Ym9hcmRIYW5kbGVycyA9IGZ1bmN0aW9uIChoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSkg
eworICAgICAgICB2YXIgdG9FeGVjdXRlOworICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlOwor
ICAgICAgICB2YXIgY29tbWFuZHMgPSB0aGlzLiRlZGl0b3IuY29tbWFuZHM7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAg
dG9FeGVjdXRlID0gdGhpcy4kaGFuZGxlcnNbaV0uaGFuZGxlS2V5Ym9hcmQoCisgICAgICAgICAg
ICAgICAgdGhpcy4kZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUKKyAgICAgICAg
ICAgICk7CisgICAgICAgICAgICBpZiAoIXRvRXhlY3V0ZSB8fCAhdG9FeGVjdXRlLmNvbW1hbmQp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodG9FeGVjdXRlLmNv
bW1hbmQgPT0gIm51bGwiKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRvRXhlY3V0ZS5w
YXNzRXZlbnQgIT0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IGNvbW1hbmRzLmV4ZWModG9FeGVjdXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwg
dG9FeGVjdXRlLmFyZ3MsIGUpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xKQorICAgICAgICAgICAgICAg
IGV2ZW50LnN0b3BFdmVudChlKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH07
CisKKyAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkg
eworICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29k
ZSk7CisgICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5n
LCBrZXlDb2RlLCBlKTsKKyAgICB9OworCisgICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9u
KHRleHQpIHsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVy
cygtMSwgdGV4dCk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHRoaXMuJGVk
aXRvci5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLiRlZGl0b3IsIHRleHQpOwor
ICAgIH07CisKK30pLmNhbGwoS2V5QmluZGluZy5wcm90b3R5cGUpOworCitleHBvcnRzLktleUJp
bmRpbmcgPSBLZXlCaW5kaW5nOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24n
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9jb25maWcnLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9saWIvZXZlbnRfZW1p
dHRlcicsICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3JhbmdlJywgJ2Fj
ZS9kb2N1bWVudCcsICdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCAnYWNlL3NlYXJjaF9oaWdo
bGlnaHQnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgJ2FjZS9lZGl0X3Nlc3Npb24vYnJh
Y2tldF9tYXRjaCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xp
Yi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwordmFyIG5ldCA9IHJl
cXVpcmUoIi4vbGliL25ldCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2
ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cit2YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgiLi9z
ZWxlY3Rpb24iKS5TZWxlY3Rpb247Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL21vZGUvdGV4
dCIpLk1vZGU7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgRG9j
dW1lbnQgPSByZXF1aXJlKCIuL2RvY3VtZW50IikuRG9jdW1lbnQ7Cit2YXIgQmFja2dyb3VuZFRv
a2VuaXplciA9IHJlcXVpcmUoIi4vYmFja2dyb3VuZF90b2tlbml6ZXIiKS5CYWNrZ3JvdW5kVG9r
ZW5pemVyOwordmFyIFNlYXJjaEhpZ2hsaWdodCA9IHJlcXVpcmUoIi4vc2VhcmNoX2hpZ2hsaWdo
dCIpLlNlYXJjaEhpZ2hsaWdodDsKKwordmFyIEVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwg
bW9kZSkgeworICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgdGhpcy4kZGVjb3JhdGlv
bnMgPSBbXTsKKyAgICB0aGlzLiRmcm9udE1hcmtlcnMgPSB7fTsKKyAgICB0aGlzLiRiYWNrTWFy
a2VycyA9IHt9OworICAgIHRoaXMuJG1hcmtlcklkID0gMTsKKyAgICB0aGlzLiR1bmRvU2VsZWN0
ID0gdHJ1ZTsKKyAgICAKKyAgICB0aGlzLiRmb2xkRGF0YSA9IFtdOworICAgIHRoaXMuJGZvbGRE
YXRhLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdHIgPSAiIjsKKyAgICAg
ICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGRMaW5lKSB7CisgICAgICAgICAgICBzdHIgKz0g
IlxuIiArIGZvbGRMaW5lLnRvU3RyaW5nKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
c3RyOworICAgIH0KKyAgICB0aGlzLm9uKCJjaGFuZ2VGb2xkIiwgdGhpcy5vbkNoYW5nZUZvbGQu
YmluZCh0aGlzKSk7CisgICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhp
cyk7CisgICAgCisgICAgaWYgKHR5cGVvZiB0ZXh0ICE9ICJvYmplY3QiIHx8ICF0ZXh0LmdldExp
bmUpCisgICAgICAgIHRleHQgPSBuZXcgRG9jdW1lbnQodGV4dCk7CisKKyAgICB0aGlzLnNldERv
Y3VtZW50KHRleHQpOworCisgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMp
OworICAgIHRoaXMuc2V0TW9kZShtb2RlKTsKK307CisKKworKGZ1bmN0aW9uKCkgeworCisgICAg
b29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0RG9jdW1lbnQg
PSBmdW5jdGlvbihkb2MpIHsKKyAgICAgICAgaWYgKHRoaXMuZG9jKQorICAgICAgICAgICAgdGhp
cy5kb2MucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKKworICAgICAg
ICB0aGlzLmRvYyA9IGRvYzsKKyAgICAgICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5n
ZSk7CisKKyAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCisgICAgICAgICAgICB0aGlzLmJn
VG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAgICAgdGhp
cy5yZXNldENhY2hlcygpOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2M7CisgICAgfTsKKyAgICB0aGlzLiRyZXNldFJv
d0NhY2hlID0gZnVuY3Rpb24oZG9jUm93KSB7CisgICAgICAgIGlmICghZG9jUm93KSB7CisgICAg
ICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtdOworICAgICAgICAgICAgdGhpcy4kc2NyZWVu
Um93Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9jUm93
KSArIDE7CisgICAgICAgIHZhciBsID0gdGhpcy4kZG9jUm93Q2FjaGUubGVuZ3RoOworICAgICAg
ICB0aGlzLiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7CisgICAgICAgIHRoaXMuJHNjcmVlblJv
d0NhY2hlLnNwbGljZShpLCBsKTsKKworICAgIH07CisKKyAgICB0aGlzLiRnZXRSb3dDYWNoZUlu
ZGV4ID0gZnVuY3Rpb24oY2FjaGVBcnJheSwgdmFsKSB7CisgICAgICAgIHZhciBsb3cgPSAwOwor
ICAgICAgICB2YXIgaGkgPSBjYWNoZUFycmF5Lmxlbmd0aCAtIDE7CisKKyAgICAgICAgd2hpbGUg
KGxvdyA8PSBoaSkgeworICAgICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaSkgPj4gMTsKKyAg
ICAgICAgICAgIHZhciBjID0gY2FjaGVBcnJheVttaWRdOworCisgICAgICAgICAgICBpZiAodmFs
ID4gYykKKyAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICAgICAgZWxzZSBp
ZiAodmFsIDwgYykKKyAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDE7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBsb3cgLTE7CisgICAgfTsKKworICAgIHRoaXMucmVzZXRDYWNoZXMgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICB0aGlzLiR3cmFwRGF0
YSA9IFtdOworICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZSA9IFtdOworICAgICAgICB0aGlz
LiRyZXNldFJvd0NhY2hlKDApOworICAgICAgICBpZiAodGhpcy5iZ1Rva2VuaXplcikKKyAgICAg
ICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7CisgICAgfTsKKworICAgIHRoaXMub25D
aGFuZ2VGb2xkID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZm9sZCA9IGUuZGF0YTsKKyAg
ICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZShmb2xkLnN0YXJ0LnJvdyk7CisgICAgfTsKKworICAg
IHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBkZWx0YSA9IGUuZGF0
YTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworCisgICAgICAgIHRoaXMuJHJlc2V0
Um93Q2FjaGUoZGVsdGEucmFuZ2Uuc3RhcnQucm93KTsKKworICAgICAgICB2YXIgcmVtb3ZlZEZv
bGRzID0gdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7CisgICAgICAgIGlmICgh
dGhpcy4kZnJvbVVuZG8gJiYgdGhpcy4kdW5kb01hbmFnZXIgJiYgIWRlbHRhLmlnbm9yZSkgewor
ICAgICAgICAgICAgdGhpcy4kZGVsdGFzRG9jLnB1c2goZGVsdGEpOworICAgICAgICAgICAgaWYg
KHJlbW92ZWRGb2xkcyAmJiByZW1vdmVkRm9sZHMubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLiRkZWx0YXNGb2xkLnB1c2goeworICAgICAgICAgICAgICAgICAgICBhY3Rpb246
ICJyZW1vdmVGb2xkcyIsCisgICAgICAgICAgICAgICAgICAgIGZvbGRzOiAgcmVtb3ZlZEZvbGRz
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMu
JGluZm9ybVVuZG9NYW5hZ2VyLnNjaGVkdWxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
LmJnVG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShkZWx0YSk7CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZSIsIGUpOworICAgIH07CisgICAgdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHRleHQp
IHsKKyAgICAgICAgdGhpcy5kb2Muc2V0VmFsdWUodGV4dCk7CisgICAgICAgIHRoaXMuc2VsZWN0
aW9uLm1vdmVDdXJzb3JUbygwLCAwKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxl
Y3Rpb24oKTsKKworICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOworICAgICAgICB0aGlz
LiRkZWx0YXMgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107CisgICAgICAgIHRo
aXMuJGRlbHRhc0ZvbGQgPSBbXTsKKyAgICAgICAgdGhpcy5nZXRVbmRvTWFuYWdlcigpLnJlc2V0
KCk7CisgICAgfTsKKyAgICB0aGlzLmdldFZhbHVlID0KKyAgICB0aGlzLnRvU3RyaW5nID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpOworICAgIH07Cisg
ICAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
c2VsZWN0aW9uOworICAgIH07CisgICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgewor
ICAgICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpOworICAgIH07Cisg
ICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
YmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldFRva2VuQXQg
PSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rv
a2VuaXplci5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFyIHRva2VuLCBjID0gMDsKKyAgICAg
ICAgaWYgKGNvbHVtbiA9PSBudWxsKSB7CisgICAgICAgICAgICBpID0gdG9rZW5zLmxlbmd0aCAt
IDE7CisgICAgICAgICAgICBjID0gdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBjICs9IHRva2Vuc1tpXS52YWx1ZS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgaWYgKGMgPj0gY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKyAg
ICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB0b2tl
bi5pbmRleCA9IGk7CisgICAgICAgIHRva2VuLnN0YXJ0ID0gYyAtIHRva2VuLnZhbHVlLmxlbmd0
aDsKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH07CisgICAgdGhpcy5zZXRVbmRvTWFuYWdl
ciA9IGZ1bmN0aW9uKHVuZG9NYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuJHVuZG9NYW5hZ2VyID0g
dW5kb01hbmFnZXI7CisgICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdOworICAgICAgICB0aGlzLiRk
ZWx0YXNEb2MgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdOworCisgICAgICAg
IGlmICh0aGlzLiRpbmZvcm1VbmRvTWFuYWdlcikKKyAgICAgICAgICAgIHRoaXMuJGluZm9ybVVu
ZG9NYW5hZ2VyLmNhbmNlbCgpOworCisgICAgICAgIGlmICh1bmRvTWFuYWdlcikgeworICAgICAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgICB0aGlzLiRzeW5jSW5mb3JtVW5k
b01hbmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzZWxmLiRpbmZvcm1VbmRv
TWFuYWdlci5jYW5jZWwoKTsKKworICAgICAgICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXNGb2xk
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXMucHVzaCh7CisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cDogImZvbGQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsdGFzOiBzZWxmLiRkZWx0YXNGb2xkCisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNGb2xkID0gW107CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0RvYy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JvdXA6ICJkb2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFzOiBzZWxmLiRk
ZWx0YXNEb2MKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuJGRlbHRhc0RvYyA9IFtdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICB1bmRv
TWFuYWdlci5leGVjdXRlKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogImFjZXVw
ZGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbc2VsZi4kZGVsdGFzLCBzZWxm
XQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBzZWxmLiRkZWx0YXMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuJGluZm9ybVVuZG9NYW5hZ2VyID0KKyAgICAgICAgICAgICAgICBsYW5nLmRlZmVycmVkQ2Fs
bCh0aGlzLiRzeW5jSW5mb3JtVW5kb01hbmFnZXIpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlciA9IHsKKyAgICAgICAgdW5kbzogZnVuY3Rpb24oKSB7
fSwKKyAgICAgICAgcmVkbzogZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgcmVzZXQ6IGZ1bmN0aW9u
KCkge30KKyAgICB9OworICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJHVuZG9NYW5hZ2VyIHx8IHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdl
cjsKKyAgICB9OworICAgIHRoaXMuZ2V0VGFiU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh0aGlzLmdldFVzZVNvZnRUYWJzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBsYW5nLnN0
cmluZ1JlcGVhdCgiICIsIHRoaXMuZ2V0VGFiU2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiAiXHQiOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuJHVz
ZVNvZnRUYWJzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24odXNl
U29mdFRhYnMpIHsKKyAgICAgICAgaWYgKHRoaXMuJHVzZVNvZnRUYWJzID09PSB1c2VTb2Z0VGFi
cykgcmV0dXJuOworCisgICAgICAgIHRoaXMuJHVzZVNvZnRUYWJzID0gdXNlU29mdFRhYnM7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLiR1c2VTb2Z0VGFiczsKKyAgICB9OworCisgICAgdGhpcy4kdGFiU2l6ZSA9IDQ7
CisgICAgdGhpcy5zZXRUYWJTaXplID0gZnVuY3Rpb24odGFiU2l6ZSkgeworICAgICAgICBpZiAo
aXNOYU4odGFiU2l6ZSkgfHwgdGhpcy4kdGFiU2l6ZSA9PT0gdGFiU2l6ZSkgcmV0dXJuOworCisg
ICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2Fj
aGUgPSBbXTsKKyAgICAgICAgdGhpcy4kdGFiU2l6ZSA9IHRhYlNpemU7CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZVRhYlNpemUiKTsKKyAgICB9OworICAgIHRoaXMuZ2V0VGFiU2l6ZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kdGFiU2l6ZTsKKyAgICB9OworICAgIHRo
aXMuaXNUYWJTdG9wID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHVzZVNvZnRUYWJzICYmIChwb3NpdGlvbi5jb2x1bW4gJSB0aGlzLiR0YWJTaXplID09IDApOwor
ICAgIH07CisKKyAgICB0aGlzLiRvdmVyd3JpdGUgPSBmYWxzZTsKKyAgICB0aGlzLnNldE92ZXJ3
cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgeworICAgICAgICBpZiAodGhpcy4kb3ZlcndyaXRl
ID09IG92ZXJ3cml0ZSkgcmV0dXJuOworCisgICAgICAgIHRoaXMuJG92ZXJ3cml0ZSA9IG92ZXJ3
cml0ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlT3ZlcndyaXRlIik7CisgICAgfTsKKyAg
ICB0aGlzLmdldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
b3ZlcndyaXRlOworICAgIH07CisgICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSk7CisgICAgfTsK
KyAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkg
eworICAgICAgICBpZiAoIXRoaXMuJGRlY29yYXRpb25zW3Jvd10pCisgICAgICAgICAgICB0aGlz
LiRkZWNvcmF0aW9uc1tyb3ddID0gIiI7CisgICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10g
Kz0gIiAiICsgY2xhc3NOYW1lOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50
Iiwge30pOworICAgIH07CisgICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rp
b24ocm93LCBjbGFzc05hbWUpIHsKKyAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICh0
aGlzLiRkZWNvcmF0aW9uc1tyb3ddIHx8ICIiKS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZSwgIiIp
OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07Cisg
ICAgdGhpcy5nZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy4kYnJlYWtwb2ludHM7CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFrcG9pbnRzID0gZnVuY3Rp
b24ocm93cykgeworICAgICAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3Ig
KHZhciBpPTA7IGk8cm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy4kYnJlYWtw
b2ludHNbcm93c1tpXV0gPSAiYWNlX2JyZWFrcG9pbnQiOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmNsZWFy
QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBb
XTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9Owor
ICAgIHRoaXMuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7CisgICAg
ICAgIGlmIChjbGFzc05hbWUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9
ICJhY2VfYnJlYWtwb2ludCI7CisgICAgICAgIGlmIChjbGFzc05hbWUpCisgICAgICAgICAgICB0
aGlzLiRicmVha3BvaW50c1tyb3ddID0gY2xhc3NOYW1lOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuY2xlYXJCcmVha3BvaW50
ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGRlbGV0ZSB0aGlzLiRicmVha3BvaW50c1tyb3dd
OworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworICAgIH07Cisg
ICAgdGhpcy5hZGRNYXJrZXIgPSBmdW5jdGlvbihyYW5nZSwgY2xhenosIHR5cGUsIGluRnJvbnQp
IHsKKyAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKzsKKworICAgICAgICB2YXIgbWFy
a2VyID0geworICAgICAgICAgICAgcmFuZ2UgOiByYW5nZSwKKyAgICAgICAgICAgIHR5cGUgOiB0
eXBlIHx8ICJsaW5lIiwKKyAgICAgICAgICAgIHJlbmRlcmVyOiB0eXBlb2YgdHlwZSA9PSAiZnVu
Y3Rpb24iID8gdHlwZSA6IG51bGwsCisgICAgICAgICAgICBjbGF6eiA6IGNsYXp6LAorICAgICAg
ICAgICAgaW5Gcm9udDogISFpbkZyb250LAorICAgICAgICAgICAgaWQ6IGlkCisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW5Gcm9udCkgeworICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJz
W2lkXSA9IG1hcmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2Vy
IikKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9
IG1hcmtlcjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH07CisgICAgdGhpcy5hZGREeW5hbWlj
TWFya2VyID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7CisgICAgICAgIGlmICghbWFya2Vy
LnVwZGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFy
a2VySWQrKzsKKyAgICAgICAgbWFya2VyLmlkID0gaWQ7CisgICAgICAgIG1hcmtlci5pbkZyb250
ID0gISFpbkZyb250OworCisgICAgICAgIGlmIChpbkZyb250KSB7CisgICAgICAgICAgICB0aGlz
LiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hh
bmdlRnJvbnRNYXJrZXIiKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy4kYmFj
a01hcmtlcnNbaWRdID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQmFj
a01hcmtlciIpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWFya2VyOworICAgIH07Cisg
ICAgdGhpcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJJZCkgeworICAgICAgICB2YXIg
bWFya2VyID0gdGhpcy4kZnJvbnRNYXJrZXJzW21hcmtlcklkXSB8fCB0aGlzLiRiYWNrTWFya2Vy
c1ttYXJrZXJJZF07CisgICAgICAgIGlmICghbWFya2VyKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBtYXJrZXJzID0gbWFya2VyLmluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtl
cnMgOiB0aGlzLiRiYWNrTWFya2VyczsKKyAgICAgICAgaWYgKG1hcmtlcikgeworICAgICAgICAg
ICAgZGVsZXRlIChtYXJrZXJzW21hcmtlcklkXSk7CisgICAgICAgICAgICB0aGlzLl9lbWl0KG1h
cmtlci5pbkZyb250ID8gImNoYW5nZUZyb250TWFya2VyIiA6ICJjaGFuZ2VCYWNrTWFya2VyIik7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJv
bnQpIHsKKyAgICAgICAgcmV0dXJuIGluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlz
LiRiYWNrTWFya2VyczsKKyAgICB9OworCisgICAgdGhpcy5oaWdobGlnaHQgPSBmdW5jdGlvbihy
ZSkgeworICAgICAgICBpZiAoIXRoaXMuJHNlYXJjaEhpZ2hsaWdodCkgeworICAgICAgICAgICAg
dmFyIGhpZ2hsaWdodCA9IG5ldyBTZWFyY2hIaWdobGlnaHQobnVsbCwgImFjZV9zZWxlY3RlZC13
b3JkIiwgInRleHQiKTsKKyAgICAgICAgICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodCA9IHRoaXMu
YWRkRHluYW1pY01hcmtlcihoaWdobGlnaHQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuJHNl
YXJjaEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOworICAgIH0KKyAgICB0aGlzLmhpZ2hsaWdodExp
bmVzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgY2xhenosIGluRnJvbnQpIHsKKyAgICAg
ICAgaWYgKHR5cGVvZiBlbmRSb3cgIT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIGNsYXp6ID0g
ZW5kUm93OworICAgICAgICAgICAgZW5kUm93ID0gc3RhcnRSb3c7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFjbGF6eikKKyAgICAgICAgICAgIGNsYXp6ID0gImFjZV9zdGVwIjsKKyAgICAgICAg
CisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgMCwgZW5kUm93LCBJbmZp
bml0eSk7CisgICAgICAgIAorICAgICAgICB2YXIgaWQgPSB0aGlzLmFkZE1hcmtlcihyYW5nZSwg
Y2xhenosICJmdWxsTGluZSIsIGluRnJvbnQpOworICAgICAgICByYW5nZS5pZCA9IGlkOworICAg
ICAgICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVu
Y3Rpb24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBhbm5vdGF0
aW9uczsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIsIHt9KTsKKyAgICB9
OworICAgIHRoaXMuZ2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJGFubm90YXRpb25zIHx8IFtdOworICAgIH07CisgICAgdGhpcy5jbGVhckFubm90YXRp
b25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGFubm90YXRpb25zID0ge307CisgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLCB7fSk7CisgICAgfTsKKyAgICB0aGlz
LiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICB2YXIgbWF0Y2ggPSB0
ZXh0Lm1hdGNoKC9eLio/KFxyP1xuKS9tKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAg
ICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiXG4iOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZh
ciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CisKKyAgICAgICAgdmFyIGluVG9rZW4gPSBmYWxz
ZTsKKyAgICAgICAgaWYgKGNvbHVtbiA+IDApCisgICAgICAgICAgICBpblRva2VuID0gISFsaW5l
LmNoYXJBdChjb2x1bW4gLSAxKS5tYXRjaCh0aGlzLnRva2VuUmUpOworCisgICAgICAgIGlmICgh
aW5Ub2tlbikKKyAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0
Y2godGhpcy50b2tlblJlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpblRva2VuKQorICAgICAg
ICAgICAgdmFyIHJlID0gdGhpcy50b2tlblJlOworICAgICAgICBlbHNlIGlmICgvXlxzKyQvLnRl
c3QobGluZS5zbGljZShjb2x1bW4tMSwgY29sdW1uKzEpKSkKKyAgICAgICAgICAgIHZhciByZSA9
IC9ccy87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhciByZSA9IHRoaXMubm9uVG9rZW5S
ZTsKKworICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47CisgICAgICAgIGlmIChzdGFydCA+IDAp
IHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzdGFydC0tOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQp
Lm1hdGNoKHJlKSk7CisgICAgICAgICAgICBzdGFydCsrOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGVuZCA9IGNvbHVtbjsKKyAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxp
bmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7CisgICAgICAgICAgICBlbmQrKzsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpOworICAg
IH07CisgICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAg
ICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTsKKyAg
ICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpOworCisgICAg
ICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFuZ2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXHRd
LykpIHsKKyAgICAgICAgICAgIHdvcmRSYW5nZS5lbmQuY29sdW1uICs9IDE7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHdvcmRSYW5nZTsKKyAgICB9OworICAgIHRoaXMuc2V0TmV3TGluZU1v
ZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgeworICAgICAgICB0aGlzLmRvYy5zZXROZXdMaW5l
TW9kZShuZXdMaW5lTW9kZSk7CisgICAgfTsKKyAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXROZXdMaW5lTW9kZSgpOworICAg
IH07CisKKyAgICB0aGlzLiR1c2VXb3JrZXIgPSB0cnVlOworICAgIHRoaXMuc2V0VXNlV29ya2Vy
ID0gZnVuY3Rpb24odXNlV29ya2VyKSB7CisgICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIgPT0g
dXNlV29ya2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuJHVzZVdvcmtl
ciA9IHVzZVdvcmtlcjsKKworICAgICAgICB0aGlzLiRzdG9wV29ya2VyKCk7CisgICAgICAgIGlm
ICh1c2VXb3JrZXIpCisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOworICAgIH07Cisg
ICAgdGhpcy5nZXRVc2VXb3JrZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHVzZVdvcmtlcjsKKyAgICB9OworICAgIHRoaXMub25SZWxvYWRUb2tlbml6ZXIgPSBmdW5jdGlv
bihlKSB7CisgICAgICAgIHZhciByb3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLmJnVG9rZW5p
emVyLnN0YXJ0KHJvd3MuZmlyc3QpOworICAgICAgICB0aGlzLl9lbWl0KCJ0b2tlbml6ZXJVcGRh
dGUiLCBlKTsKKyAgICB9OworCisgICAgdGhpcy4kbW9kZXMgPSB7fTsKKyAgICB0aGlzLiRtb2Rl
ID0gbnVsbDsKKyAgICB0aGlzLiRtb2RlSWQgPSBudWxsOworICAgIHRoaXMuc2V0TW9kZSA9IGZ1
bmN0aW9uKG1vZGUpIHsKKyAgICAgICAgaWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09ICJvYmpl
Y3QiKSB7CisgICAgICAgICAgICBpZiAobW9kZS5nZXRUb2tlbml6ZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZShtb2RlKTsKKyAgICAgICAgICAgIHZhciBvcHRp
b25zID0gbW9kZTsKKyAgICAgICAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcGF0aCA9IG1vZGUgfHwgImFjZS9tb2RlL3RleHQiOwor
ICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSkKKyAg
ICAgICAgICAgIHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0gPSBuZXcgVGV4dE1vZGUoKTsK
KworICAgICAgICBpZiAodGhpcy4kbW9kZXNbcGF0aF0gJiYgIW9wdGlvbnMpCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhdKTsKKyAgICAgICAg
dGhpcy4kbW9kZUlkID0gcGF0aDsKKyAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWyJtb2RlIiwg
cGF0aF0sIGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2RlSWQgIT09IHBh
dGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVz
W3BhdGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvbkNoYW5n
ZU1vZGUodGhpcy4kbW9kZXNbcGF0aF0pOworICAgICAgICAgICAgaWYgKG0gJiYgbS5Nb2RlKSB7
CisgICAgICAgICAgICAgICAgbSA9IG5ldyBtLk1vZGUob3B0aW9ucyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFvcHRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3BhdGhd
ID0gbTsKKyAgICAgICAgICAgICAgICAgICAgbS4kaWQgPSBwYXRoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUobSkKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKCF0aGlzLiRtb2RlKQorICAgICAg
ICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0sIHRy
dWUpOworICAgIH07CisKKyAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihtb2RlLCAk
aXNQbGFjZWhvbGRlcikgeworICAgICAgICBpZiAodGhpcy4kbW9kZSA9PT0gbW9kZSkgcmV0dXJu
OworICAgICAgICB0aGlzLiRtb2RlID0gbW9kZTsKKworICAgICAgICB0aGlzLiRzdG9wV29ya2Vy
KCk7CisKKyAgICAgICAgaWYgKHRoaXMuJHVzZVdvcmtlcikKKyAgICAgICAgICAgIHRoaXMuJHN0
YXJ0V29ya2VyKCk7CisKKyAgICAgICAgdmFyIHRva2VuaXplciA9IG1vZGUuZ2V0VG9rZW5pemVy
KCk7CisKKyAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgdmFyIG9uUmVsb2FkVG9rZW5pemVyID0gdGhpcy5vblJlbG9hZFRv
a2VuaXplci5iaW5kKHRoaXMpOworICAgICAgICAgICAgdG9rZW5pemVyLmFkZEV2ZW50TGlzdGVu
ZXIoInVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghdGhpcy5iZ1Rva2VuaXplcikgeworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG5l
dyBCYWNrZ3JvdW5kVG9rZW5pemVyKHRva2VuaXplcik7CisgICAgICAgICAgICB2YXIgX3NlbGYg
PSB0aGlzOworICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1
cGRhdGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgX3NlbGYuX2VtaXQoInRva2Vu
aXplclVwZGF0ZSIsIGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldFRva2VuaXplcih0b2tlbml6ZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3Vt
ZW50KCkpOworCisgICAgICAgIHRoaXMudG9rZW5SZSA9IG1vZGUudG9rZW5SZTsKKyAgICAgICAg
dGhpcy5ub25Ub2tlblJlID0gbW9kZS5ub25Ub2tlblJlOworCisKKyAgICAgICAgaWYgKCEkaXNQ
bGFjZWhvbGRlcikgeworICAgICAgICAgICAgdGhpcy4kbW9kZUlkID0gbW9kZS4kaWQ7CisgICAg
ICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1bGVzKTsKKyAgICAgICAgICAg
IHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIu
c3RhcnQoMCk7CisgICAgICAgIH0KKyAgICB9OworCisKKyAgICB0aGlzLiRzdG9wV29ya2VyID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLiR3b3JrZXIpCisgICAgICAgICAgICB0aGlz
LiR3b3JrZXIudGVybWluYXRlKCk7CisKKyAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKKyAg
ICB9OworCisKKyAgICB0aGlzLiRzdGFydFdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAodHlwZW9mIFdvcmtlciAhPT0gInVuZGVmaW5lZCIgJiYgIXJlcXVpcmUubm9Xb3JrZXIpIHsK
KyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4k
bW9kZS5jcmVhdGVXb3JrZXIodGhpcyk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkNvdWxkIG5vdCBsb2FkIHdvcmtlciIpOworICAgICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9
IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGhpcy4kd29ya2VyID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTsKKyAgICB9OworCisgICAgdGhpcy4k
c2Nyb2xsVG9wID0gMDsKKyAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRv
cCkgeworICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbFRv
cCkpOworICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTY3JvbGxUb3AiLCBzY3JvbGxUb3ApOworICAgIH07Cisg
ICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHNjcm9sbFRvcDsKKyAgICB9OworCisgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IDA7CisgICAgdGhp
cy5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkgeworICAgICAgICBzY3JvbGxM
ZWZ0ID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KSk7CisgICAgICAgIGlmICh0
aGlzLiRzY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHRoaXMuJHNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgICAgICB0aGlzLl9lbWl0
KCJjaGFuZ2VTY3JvbGxMZWZ0Iiwgc2Nyb2xsTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNj
cm9sbExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbExlZnQ7
CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVlbldpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuJGNvbXB1dGVXaWR0aCgpOworICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5XaWR0aDsK
KyAgICB9OworCisgICAgdGhpcy4kY29tcHV0ZVdpZHRoID0gZnVuY3Rpb24oZm9yY2UpIHsKKyAg
ICAgICAgaWYgKHRoaXMuJG1vZGlmaWVkIHx8IGZvcmNlKSB7CisgICAgICAgICAgICB0aGlzLiRt
b2RpZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPSB0aGlzLiR3cmFwTGltaXQ7
CisKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7CisgICAg
ICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLiRyb3dMZW5ndGhDYWNoZTsKKyAgICAgICAgICAgIHZh
ciBsb25nZXN0U2NyZWVuTGluZSA9IDA7CisgICAgICAgICAgICB2YXIgZm9sZEluZGV4ID0gMDsK
KyAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuJGZvbGREYXRhW2ZvbGRJbmRleF07Cisg
ICAgICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cg
OiBJbmZpbml0eTsKKyAgICAgICAgICAgIHZhciBsZW4gPSBsaW5lcy5sZW5ndGg7CisKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaSA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgICAgICBpID0gZm9sZExpbmUuZW5k
LnJvdyArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IGxlbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMu
JGZvbGREYXRhW2ZvbGRJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0g
Zm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPT0gbnVsbCkKKyAgICAgICAgICAg
ICAgICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5lc1tpXSlb
MF07CisKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPiBsb25nZXN0U2NyZWVuTGluZSkK
KyAgICAgICAgICAgICAgICAgICAgbG9uZ2VzdFNjcmVlbkxpbmUgPSBjYWNoZVtpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2NyZWVuV2lkdGggPSBsb25nZXN0U2NyZWVuTGlu
ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7
CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgfTsKKyAgICB0aGlz
LmdldExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuZG9jLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICB9OworICAgIHRoaXMu
Z2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMZW5n
dGgoKTsKKyAgICB9OworICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFRleHRSYW5nZShyYW5nZSB8fCB0aGlzLnNlbGVj
dGlvbi5nZXRSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24ocG9z
aXRpb24sIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmluc2VydChwb3NpdGlvbiwg
dGV4dCk7CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOworICAgIH07CisgICAgdGhpcy51bmRv
Q2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgeworICAgICAgICBpZiAoIWRl
bHRhcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy4kZnJvbVVu
ZG8gPSB0cnVlOworICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7CisgICAgICAgIGZv
ciAodmFyIGkgPSBkZWx0YXMubGVuZ3RoIC0gMTsgaSAhPSAtMTsgaS0tKSB7CisgICAgICAgICAg
ICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3JvdXAgPT0g
ImRvYyIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZXZlcnREZWx0YXMoZGVsdGEuZGVs
dGFzKTsKKyAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID0KKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIHRydWUsIGxhc3RVbmRvUmFu
Z2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWx0YS5kZWx0YXMu
Zm9yRWFjaChmdW5jdGlvbihmb2xkRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5h
ZGRGb2xkcyhmb2xkRGVsdGEuZm9sZHMpOworICAgICAgICAgICAgICAgIH0sIHRoaXMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7Cisg
ICAgICAgIGxhc3RVbmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgJiYK
KyAgICAgICAgICAgICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgcmV0dXJuIGxhc3RVbmRv
UmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBk
b250U2VsZWN0KSB7CisgICAgICAgIGlmICghZGVsdGFzLmxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7CisgICAgICAgIHZhciBsYXN0
VW5kb1JhbmdlID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKKyAgICAgICAg
ICAgIGlmIChkZWx0YS5ncm91cCA9PSAiZG9jIikgeworICAgICAgICAgICAgICAgIHRoaXMuZG9j
LmFwcGx5RGVsdGFzKGRlbHRhLmRlbHRhcyk7CisgICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5n
ZSA9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZGVsdGEuZGVs
dGFzLCBmYWxzZSwgbGFzdFVuZG9SYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKKyAgICAgICAgbGFzdFVuZG9SYW5nZSAmJgor
ICAgICAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCAmJgorICAgICAgICAgICAgIWRvbnRTZWxlY3Qg
JiYKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGxhc3RVbmRv
UmFuZ2UpOworICAgICAgICByZXR1cm4gbGFzdFVuZG9SYW5nZTsKKyAgICB9OworICAgIHRoaXMu
c2V0VW5kb1NlbGVjdCA9IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAgICB0aGlzLiR1bmRvU2Vs
ZWN0ID0gZW5hYmxlOworICAgIH07CisKKyAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uID0gZnVu
Y3Rpb24oZGVsdGFzLCBpc1VuZG8sIGxhc3RVbmRvUmFuZ2UpIHsKKyAgICAgICAgZnVuY3Rpb24g
aXNJbnNlcnQoZGVsdGEpIHsKKyAgICAgICAgICAgIHZhciBpbnNlcnQgPQorICAgICAgICAgICAg
ICAgIGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJpbnNl
cnRMaW5lcyI7CisgICAgICAgICAgICByZXR1cm4gaXNVbmRvID8gIWluc2VydCA6IGluc2VydDsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1swXTsKKyAgICAgICAgdmFy
IHJhbmdlLCBwb2ludDsKKyAgICAgICAgdmFyIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7Cisg
ICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gZGVsdGEu
cmFuZ2UuY2xvbmUoKTsKKyAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0
YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgbGFzdERlbHRh
SXNJbnNlcnQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTsK
KyAgICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKKyAgICAgICAgICAgICAgICBwb2lu
dCA9IGRlbHRhLnJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJl
KHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBy
YW5nZS5zZXRTdGFydChkZWx0YS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2UuZW5kOworICAgICAgICAgICAgICAgIGlm
IChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLnNldEVuZChkZWx0YS5yYW5nZS5lbmQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7
CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1
bW4pID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdl
LnN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJ
bnNlcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGFz
dFVuZG9SYW5nZSAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgY21wID0gbGFzdFVuZG9SYW5n
ZS5jb21wYXJlUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobGFzdFVuZG9SYW5nZS5zdGFydCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnNldEVu
ZChsYXN0VW5kb1JhbmdlLmVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5n
ZSwgdGV4dCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVwbGFjZShyYW5nZSwgdGV4dCk7
CisgICAgfTsKKyAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24oZnJvbVJhbmdlLCB0b1Bvc2l0
aW9uKSB7CisgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRUZXh0UmFuZ2UoZnJvbVJhbmdlKTsK
KyAgICAgICAgdGhpcy5yZW1vdmUoZnJvbVJhbmdlKTsKKworICAgICAgICB2YXIgdG9Sb3cgPSB0
b1Bvc2l0aW9uLnJvdzsKKyAgICAgICAgdmFyIHRvQ29sdW1uID0gdG9Qb3NpdGlvbi5jb2x1bW47
CisgICAgICAgIGlmICghZnJvbVJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgZnJvbVJhbmdlLnN0YXJ0
LnJvdyA9PSB0b1JvdyAmJgorICAgICAgICAgICAgZnJvbVJhbmdlLmVuZC5jb2x1bW4gPCB0b0Nv
bHVtbikKKyAgICAgICAgICAgIHRvQ29sdW1uIC09IHRleHQubGVuZ3RoOworCisgICAgICAgIGlm
IChmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBmcm9tUmFuZ2UuZW5kLnJvdyA8IHRvUm93KSB7
CisgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy4kc3BsaXQodGV4dCk7CisgICAgICAg
ICAgICB0b1JvdyAtPSBsaW5lcy5sZW5ndGggLSAxOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGVuZFJvdyA9IHRvUm93ICsgZnJvbVJhbmdlLmVuZC5yb3cgLSBmcm9tUmFuZ2Uuc3RhcnQucm93
OworICAgICAgICB2YXIgZW5kQ29sdW1uID0gZnJvbVJhbmdlLmlzTXVsdGlMaW5lKCkgPworICAg
ICAgICAgICAgICAgICAgICAgICAgZnJvbVJhbmdlLmVuZC5jb2x1bW4gOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdG9Db2x1bW4gKyBmcm9tUmFuZ2UuZW5kLmNvbHVtbiAtIGZyb21SYW5nZS5z
dGFydC5jb2x1bW47CisKKyAgICAgICAgdmFyIHRvUmFuZ2UgPSBuZXcgUmFuZ2UodG9Sb3csIHRv
Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CisKKyAgICAgICAgdGhpcy5pbnNlcnQodG9SYW5n
ZS5zdGFydCwgdGV4dCk7CisKKyAgICAgICAgcmV0dXJuIHRvUmFuZ2U7CisgICAgfTsKKyAgICB0
aGlzLmluZGVudFJvd3MgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBpbmRlbnRTdHJpbmcp
IHsKKyAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnJlcGxhY2UoL1x0L2csIHRo
aXMuZ2V0VGFiU3RyaW5nKCkpOworICAgICAgICBmb3IgKHZhciByb3c9c3RhcnRSb3c7IHJvdzw9
ZW5kUm93OyByb3crKykKKyAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IHJvdywgY29sdW1u
OjB9LCBpbmRlbnRTdHJpbmcpOworICAgIH07CisgICAgdGhpcy5vdXRkZW50Um93cyA9IGZ1bmN0
aW9uIChyYW5nZSkgeworICAgICAgICB2YXIgcm93UmFuZ2UgPSByYW5nZS5jb2xsYXBzZVJvd3Mo
KTsKKyAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApOworICAg
ICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpOworCisgICAgICAgIGZvciAodmFyIGkg
PSByb3dSYW5nZS5zdGFydC5yb3c7IGkgPD0gcm93UmFuZ2UuZW5kLnJvdzsgKytpKSB7CisgICAg
ICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShpKTsKKworICAgICAgICAgICAgZGVsZXRl
UmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBp
OworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opCisgICAgICAgICAg
ICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0gJ1x0Jykg
eworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IGo7CisgICAgICAg
ICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGogKyAxOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSAwOworICAg
ICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZGVsZXRlUmFuZ2UpOworICAgICAgICB9CisgICAgfTsK
KyAgICB0aGlzLm1vdmVMaW5lc1VwID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAg
ICAgICAgaWYgKGZpcnN0Um93IDw9IDApIHJldHVybiAwOworCisgICAgICAgIHZhciByZW1vdmVk
ID0gdGhpcy5kb2MucmVtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB0aGlz
LmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdyAtIDEsIHJlbW92ZWQpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfTsKKyAgICB0aGlzLm1vdmVMaW5lc0Rvd24gPSBmdW5jdGlvbihmaXJzdFJvdywg
bGFzdFJvdykgeworICAgICAgICBpZiAobGFzdFJvdyA+PSB0aGlzLmRvYy5nZXRMZW5ndGgoKS0x
KSByZXR1cm4gMDsKKworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuZG9jLnJlbW92ZUxpbmVz
KGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TGluZXMoZmlyc3RS
b3crMSwgcmVtb3ZlZCk7CisgICAgICAgIHJldHVybiAxOworICAgIH07CisgICAgdGhpcy5kdXBs
aWNhdGVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBm
aXJzdFJvdyA9IHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50KGZpcnN0Um93KTsKKyAgICAgICAgdmFy
IGxhc3RSb3cgPSB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudChsYXN0Um93KTsKKworICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKKyAgICAgICAgdGhp
cy5kb2MuaW5zZXJ0TGluZXMoZmlyc3RSb3csIGxpbmVzKTsKKworICAgICAgICB2YXIgYWRkZWRS
b3dzID0gbGFzdFJvdyAtIGZpcnN0Um93ICsgMTsKKyAgICAgICAgcmV0dXJuIGFkZGVkUm93czsK
KyAgICB9OworCisKKyAgICB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdykg
eworICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93LCB0aGlzLmRvYy5nZXRM
ZW5ndGgoKS0xKSk7CisgICAgfTsKKworICAgIHRoaXMuJGNsaXBDb2x1bW5Ub1JvdyA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmIChjb2x1bW4gPCAwKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKHJvdyku
bGVuZ3RoLCBjb2x1bW4pOworICAgIH07CisKKworICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9j
dW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBjb2x1bW4gPSBNYXRoLm1h
eCgwLCBjb2x1bW4pOworCisgICAgICAgIGlmIChyb3cgPCAwKSB7CisgICAgICAgICAgICByb3cg
PSAwOworICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChyb3cg
Pj0gbGVuKSB7CisgICAgICAgICAgICAgICAgcm93ID0gbGVuIC0gMTsKKyAgICAgICAgICAgICAg
ICBjb2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKGxlbi0xKS5sZW5ndGg7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jLmdldExp
bmUocm93KS5sZW5ndGgsIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICBjb2x1bW46
IGNvbHVtbgorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLiRjbGlwUmFuZ2VUb0RvY3Vt
ZW50ID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8IDAp
IHsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IDA7CisgICAgICAgICAgICByYW5nZS5z
dGFydC5jb2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KAorICAgICAgICAgICAgICAgIHJhbmdl
LnN0YXJ0LnJvdywKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4KKyAgICAgICAg
ICAgICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbGVuID0gdGhpcy5kb2MuZ2V0TGVuZ3Ro
KCkgLSAxOworICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA+IGxlbikgeworICAgICAgICAgICAg
cmFuZ2UuZW5kLnJvdyA9IGxlbjsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlz
LmRvYy5nZXRMaW5lKGxlbikubGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmQucm93LAorICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4KKyAgICAg
ICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIH07CisgICAg
dGhpcy4kd3JhcExpbWl0ID0gODA7CisgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSBmYWxzZTsKKyAg
ICB0aGlzLiR3cmFwTGltaXRSYW5nZSA9IHsKKyAgICAgICAgbWluIDogbnVsbCwKKyAgICAgICAg
bWF4IDogbnVsbAorICAgIH07CisgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKHVz
ZVdyYXBNb2RlKSB7CisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAhPSB0aGlzLiR1c2VXcmFwTW9k
ZSkgeworICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSB1c2VXcmFwTW9kZTsKKyAgICAg
ICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuJHJlc2V0Um93
Q2FjaGUoMCk7CisgICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLiR3cmFw
RGF0YSA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEucHVzaChbXSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIGxlbiAt
IDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFw
TW9kZSIpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFVzZVdyYXBNb2RlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR1c2VXcmFwTW9kZTsKKyAgICB9OworICAg
IHRoaXMuc2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbihtaW4sIG1heCkgeworICAgICAgICBp
ZiAodGhpcy4kd3JhcExpbWl0UmFuZ2UubWluICE9PSBtaW4gfHwgdGhpcy4kd3JhcExpbWl0UmFu
Z2UubWF4ICE9PSBtYXgpIHsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiA9
IG1pbjsKKyAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCA9IG1heDsKKyAgICAg
ICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZVdyYXBNb2RlIik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuYWRqdXN0V3JhcExp
bWl0ID0gZnVuY3Rpb24oZGVzaXJlZExpbWl0KSB7CisgICAgICAgIHZhciB3cmFwTGltaXQgPSB0
aGlzLiRjb25zdHJhaW5XcmFwTGltaXQoZGVzaXJlZExpbWl0KTsKKyAgICAgICAgaWYgKHdyYXBM
aW1pdCAhPSB0aGlzLiR3cmFwTGltaXQgJiYgd3JhcExpbWl0ID4gMCkgeworICAgICAgICAgICAg
dGhpcy4kd3JhcExpbWl0ID0gd3JhcExpbWl0OworICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQg
PSB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoMCwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpOworICAg
ICAgICAgICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7CisgICAgICAgICAgICAgICAgdGhp
cy5fZW1pdCgiY2hhbmdlV3JhcExpbWl0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwor
ICAgIHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdCA9IGZ1bmN0aW9uKHdyYXBMaW1pdCkgeworICAg
ICAgICB2YXIgbWluID0gdGhpcy4kd3JhcExpbWl0UmFuZ2UubWluOworICAgICAgICBpZiAobWlu
KQorICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpOworCisg
ICAgICAgIHZhciBtYXggPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXg7CisgICAgICAgIGlmICht
YXgpCisgICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1pbihtYXgsIHdyYXBMaW1pdCk7Cisg
ICAgICAgIHJldHVybiBNYXRoLm1heCgxLCB3cmFwTGltaXQpOworICAgIH07CisgICAgdGhpcy5n
ZXRXcmFwTGltaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXBMaW1p
dDsKKyAgICB9OworICAgIHRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIG1pbiA6IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1p
biwKKyAgICAgICAgICAgIG1heCA6IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heAorICAgICAgICB9
OworICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZSA9IGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgdmFyIHVzZVdyYXBNb2RlID0gdGhpcy4kdXNlV3JhcE1vZGU7Cisg
ICAgICAgIHZhciBsZW47CisgICAgICAgIHZhciBhY3Rpb24gPSBlLmRhdGEuYWN0aW9uOworICAg
ICAgICB2YXIgZmlyc3RSb3cgPSBlLmRhdGEucmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIg
bGFzdFJvdyA9IGUuZGF0YS5yYW5nZS5lbmQucm93OworICAgICAgICB2YXIgc3RhcnQgPSBlLmRh
dGEucmFuZ2Uuc3RhcnQ7CisgICAgICAgIHZhciBlbmQgPSBlLmRhdGEucmFuZ2UuZW5kOworICAg
ICAgICB2YXIgcmVtb3ZlZEZvbGRzID0gbnVsbDsKKworICAgICAgICBpZiAoYWN0aW9uLmluZGV4
T2YoIkxpbmVzIikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImluc2VydExp
bmVzIikgeworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdyArIChlLmRhdGEubGlu
ZXMubGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdFJv
dyA9IGZpcnN0Um93OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gZS5kYXRhLmxp
bmVzID8gZS5kYXRhLmxpbmVzLmxlbmd0aCA6IGxhc3RSb3cgLSBmaXJzdFJvdzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGxlbiA9IGxhc3RSb3cgLSBmaXJzdFJvdzsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsZW4gIT0gMCkgeworICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRl
eE9mKCJyZW1vdmUiKSAhPSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXNbdXNlV3JhcE1vZGUg
PyAiJHdyYXBEYXRhIiA6ICIkcm93TGVuZ3RoQ2FjaGUiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7
CisKKyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZS5kYXRhLnJh
bmdlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xkcyk7CisK
KyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGVuZC5yb3cp
OworICAgICAgICAgICAgICAgIHZhciBpZHggPSAwOworICAgICAgICAgICAgICAgIGlmIChmb2xk
TGluZSkgeworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhlbmQu
cm93LCBlbmQuY29sdW1uLCBzdGFydC5jb2x1bW4gLSBlbmQuY29sdW1uKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3coLWxlbik7CisKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGZvbGRMaW5lQmVmb3JlID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChmb2xkTGluZUJlZm9yZSAmJiBmb2xkTGluZUJlZm9yZSAhPT0gZm9s
ZExpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lQmVmb3JlLm1lcmdlKGZv
bGRMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmVCZWZv
cmU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gZm9s
ZExpbmVzLmluZGV4T2YoZm9sZExpbmUpICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBmb3IgKGlkeDsgaWR4IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZExpbmVzW2lkeF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPj0gZW5kLnJvdykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3coLWxlbik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsYXN0Um93ID0g
Zmlyc3RSb3c7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBhcmdz
OworICAgICAgICAgICAgICAgIGlmICh1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgICAgICAg
ICBhcmdzID0gW2ZpcnN0Um93LCAwXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKFtdKTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy4kd3JhcERhdGEuc3BsaWNlLmFwcGx5KHRoaXMuJHdyYXBEYXRhLCBhcmdzKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuKTsK
KyAgICAgICAgICAgICAgICAgICAgYXJncy51bnNoaWZ0KGZpcnN0Um93LCAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUuc3BsaWNlLmFwcGx5KHRoaXMuJHJvd0xl
bmd0aENhY2hlLCBhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAgICAgICAgIHZhciBmb2xkTGlu
ZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAgICAgICAgIHZhciBpZHgg
PSAwOworICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgY21wID0gZm9sZExpbmUucmFuZ2UuY29tcGFyZUluc2lkZShzdGFydC5yb3csIHN0YXJ0
LmNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb2xkTGluZSA9IGZvbGRMaW5lLnNwbGl0KHN0YXJ0LnJvdywgc3RhcnQu
Y29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0Um93LCAwLCBlbmQuY29sdW1uIC0gc3RhcnQuY29s
dW1uKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlm
IChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92
ZUNoYXJzKGZpcnN0Um93LCAwLCBlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1uKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gZm9sZExpbmVzLmluZGV4T2YoZm9sZExp
bmUpICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGlkeDsg
aWR4IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lID0gZm9sZExpbmVzW2lkeF07CisgICAgICAgICAgICAgICAgICAgIGlmIChmb2xk
TGluZS5zdGFydC5yb3cgPj0gZmlyc3RSb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
bGRMaW5lLnNoaWZ0Um93KGxlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW4g
PSBNYXRoLmFicyhlLmRhdGEucmFuZ2Uuc3RhcnQuY29sdW1uIC0gZS5kYXRhLnJhbmdlLmVuZC5j
b2x1bW4pOworICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJyZW1vdmUiKSAhPSAtMSkg
eworICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUu
ZGF0YS5yYW5nZSk7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9s
ZHMpOworCisgICAgICAgICAgICAgICAgbGVuID0gLWxlbjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAg
ICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3Zl
Q2hhcnMoZmlyc3RSb3csIHN0YXJ0LmNvbHVtbiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAmJiB0aGlzLiR3cmFwRGF0YS5sZW5ndGgg
IT0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImRv
Yy5nZXRMZW5ndGgoKSBhbmQgJHdyYXBEYXRhLmxlbmd0aCBoYXZlIHRvIGJlIHRoZSBzYW1lISIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgdGhp
cy4kdXBkYXRlV3JhcERhdGEoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShmaXJzdFJvdywgbGFzdFJvdyk7CisK
KyAgICAgICAgcmV0dXJuIHJlbW92ZWRGb2xkczsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRl
Um93TGVuZ3RoQ2FjaGUgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgYikgeworICAgICAg
ICB0aGlzLiRyb3dMZW5ndGhDYWNoZVtmaXJzdFJvd10gPSBudWxsOworICAgICAgICB0aGlzLiRy
b3dMZW5ndGhDYWNoZVtsYXN0Um93XSA9IG51bGw7CisgICAgfTsKKworICAgIHRoaXMuJHVwZGF0
ZVdyYXBEYXRhID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgdmFyIGxp
bmVzID0gdGhpcy5kb2MuZ2V0QWxsTGluZXMoKTsKKyAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlz
LmdldFRhYlNpemUoKTsKKyAgICAgICAgdmFyIHdyYXBEYXRhID0gdGhpcy4kd3JhcERhdGE7Cisg
ICAgICAgIHZhciB3cmFwTGltaXQgPSB0aGlzLiR3cmFwTGltaXQ7CisgICAgICAgIHZhciB0b2tl
bnM7CisgICAgICAgIHZhciBmb2xkTGluZTsKKworICAgICAgICB2YXIgcm93ID0gZmlyc3RSb3c7
CisgICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihsYXN0Um93LCBsaW5lcy5sZW5ndGggLSAxKTsK
KyAgICAgICAgd2hpbGUgKHJvdyA8PSBsYXN0Um93KSB7CisgICAgICAgICAgICBmb2xkTGluZSA9
IHRoaXMuZ2V0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7CisgICAgICAgICAgICBpZiAoIWZvbGRM
aW5lKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2Vucyhs
YW5nLnN0cmluZ1RyaW1SaWdodChsaW5lc1tyb3ddKSk7CisgICAgICAgICAgICAgICAgd3JhcERh
dGFbcm93XSA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJT
aXplKTsKKyAgICAgICAgICAgICAgICByb3cgKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHRva2VucyA9IFtdOworICAgICAgICAgICAgICAgIGZvbGRMaW5lLndhbGso
ZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgd2Fsa1Rva2VuczsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLCB0b2tlbnMubGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zWzBdID0gUExBQ0VIT0xERVJfU1RB
UlQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YWxr
VG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdh
bGtUb2tlbnNbaV0gPSBQTEFDRUhPTERFUl9CT0RZOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW3Jvd10uc3Vic3RyaW5nKGxhc3RDb2x1bW4s
IGNvbHVtbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5sZW5ndGgp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW5zID0gdG9rZW5zLmNvbmNhdCh3YWxrVG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfS5i
aW5kKHRoaXMpLAorICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5lbmQucm93LAorICAgICAg
ICAgICAgICAgICAgICBsaW5lc1tmb2xkTGluZS5lbmQucm93XS5sZW5ndGggKyAxCisgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCAhPSAwICYm
IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPj0gU1BBQ0UpCisgICAgICAgICAgICAgICAgICAg
IHRva2Vucy5wb3AoKTsKKworICAgICAgICAgICAgICAgIHdyYXBEYXRhW2ZvbGRMaW5lLnN0YXJ0
LnJvd10KKyAgICAgICAgICAgICAgICAgICAgPSB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyh0b2tl
bnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSk7CisgICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUu
ZW5kLnJvdyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHZhciBD
SEFSID0gMSwKKyAgICAgICAgQ0hBUl9FWFQgPSAyLAorICAgICAgICBQTEFDRUhPTERFUl9TVEFS
VCA9IDMsCisgICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCwKKyAgICAgICAgUFVOQ1RVQVRJ
T04gPSA5LAorICAgICAgICBTUEFDRSA9IDEwLAorICAgICAgICBUQUIgPSAxMSwKKyAgICAgICAg
VEFCX1NQQUNFID0gMTI7CisKKworICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVuY3Rp
b24odG9rZW5zLCB3cmFwTGltaXQpIHsKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMCkg
eworICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNwbGl0
cyA9IFtdOworICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7CisgICAg
ICAgIHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwOworCisgICAgICAgIGZ1bmN0
aW9uIGFkZFNwbGl0KHNjcmVlblBvcykgeworICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9IHRv
a2Vucy5zbGljZShsYXN0U3BsaXQsIHNjcmVlblBvcyk7CisgICAgICAgICAgICB2YXIgbGVuID0g
ZGlzcGxheWVkLmxlbmd0aDsKKyAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKCIiKS4KKyAgICAg
ICAgICAgICAgICByZXBsYWNlKC8xMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGVuIC09IDE7CisgICAgICAgICAgICAgICAgfSkuCisgICAgICAgICAgICAgICAgcmVwbGFj
ZSgvMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDE7CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGxhc3REb2NTcGxpdCArPSBsZW47CisgICAg
ICAgICAgICBzcGxpdHMucHVzaChsYXN0RG9jU3BsaXQpOworICAgICAgICAgICAgbGFzdFNwbGl0
ID0gc2NyZWVuUG9zOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5ndGgg
LSBsYXN0U3BsaXQgPiB3cmFwTGltaXQpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RT
cGxpdCArIHdyYXBMaW1pdDsKKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID49IFNQQUNF
KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3BsaXQgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NU
QVJUCisgICAgICAgICAgICAgICAgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9CT0RZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0ICE9IGxh
c3RTcGxpdCAtIDE7IHNwbGl0LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tz
cGxpdF0gPT0gUExBQ0VIT0xERVJfU1RBUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChzcGxpdCA+IGxhc3RTcGxpdCkgeworICAgICAgICAgICAgICAgICAgICBhZGRT
cGxpdChzcGxpdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNwbGl0OyBzcGxpdCA8IHRva2Vucy5sZW5ndGg7IHNwbGl0Kysp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gIT0gUExBQ0VIT0xERVJf
Qk9EWSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHNwbGl0ID09IHRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7ICAvLyBCcmVha3MgdGhlIHdoaWxlLWxvb3AuCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBtaW5TcGxpdCA9IE1hdGgubWF4KHNwbGl0
IC0gMTAsIGxhc3RTcGxpdCAtIDEpOworICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3Bs
aXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7CisgICAgICAgICAgICAg
ICAgc3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBt
aW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7CisgICAgICAgICAgICAg
ICAgc3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BsaXQgPiBtaW5T
cGxpdCkgeworICAgICAgICAgICAgICAgIGFkZFNwbGl0KCsrc3BsaXQpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3BsaXQgPSBsYXN0U3Bs
aXQgKyB3cmFwTGltaXQ7CisgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNwbGl0czsKKyAgICB9OworICAgIHRoaXMuJGdldERpc3BsYXlUb2tl
bnMgPSBmdW5jdGlvbihzdHIsIG9mZnNldCkgeworICAgICAgICB2YXIgYXJyID0gW107CisgICAg
ICAgIHZhciB0YWJTaXplOworICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IGMgPSBzdHIuY2hhckNvZGVBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09IDkpIHsKKyAgICAg
ICAgICAgICAgICB0YWJTaXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGggKyBv
ZmZzZXQpOworICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgbiA9IDE7IG4gPCB0YWJTaXplOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
YXJyLnB1c2goVEFCX1NQQUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChjID09IDMyKSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2go
U1BBQ0UpOworICAgICAgICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAoYyA+
IDU3ICYmIGMgPCA2NCkpIHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1
bGxXaWR0aChjKSkgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhUKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjsKKyAgICB9OworICAg
IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1
bW4sIHNjcmVlbkNvbHVtbikgeworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDApCisg
ICAgICAgICAgICByZXR1cm4gWzAsIDBdOworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09
IG51bGwpCisgICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTsKKyAgICAgICAg
c2NyZWVuQ29sdW1uID0gc2NyZWVuQ29sdW1uIHx8IDA7CisKKyAgICAgICAgdmFyIGMsIGNvbHVt
bjsKKyAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4r
KykgeworICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7CisgICAgICAgICAg
ICBpZiAoYyA9PSA5KSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0
U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAgICAgICAgICAgICAg
ICBzY3JlZW5Db2x1bW4gKz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NyZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2Ny
ZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwg
Y29sdW1uXTsKKyAgICB9OworICAgIHRoaXMuZ2V0Um93TGVuZ3RoID0gZnVuY3Rpb24ocm93KSB7
CisgICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUgfHwgIXRoaXMuJHdyYXBEYXRhW3Jvd10p
IHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgfQorICAgIH07
CisgICAgdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7
CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5S
b3csIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2Ny
ZWVuQ29sdW1uKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgIH07CisgICAgdGhpcy5nZXREb2N1
bWVudExhc3RSb3dDb2x1bW4gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAgICAg
ICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29s
dW1uKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5S
b3cpOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbiA9
IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0
aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1bW4pOworICAgICAgICByZXR1
cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZB
TFVFIC8gMTApOworICAgIH07CisgICAgdGhpcy5nZXRSb3dTcGxpdERhdGEgPSBmdW5jdGlvbihy
b3cpIHsKKyAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LiR3cmFwRGF0YVtyb3ddOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVlblRh
YlNpemUgPSBmdW5jdGlvbihzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRh
YlNpemUgLSBzY3JlZW5Db2x1bW4gJSB0aGlzLiR0YWJTaXplOworICAgIH07CisKKworICAgIHRo
aXMuc2NyZWVuVG9Eb2N1bWVudFJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1u
KSB7CisgICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5S
b3csIHNjcmVlbkNvbHVtbikucm93OworICAgIH07CisKKworICAgIHRoaXMuc2NyZWVuVG9Eb2N1
bWVudENvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNv
bHVtbikuY29sdW1uOworICAgIH07CisgICAgdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24g
PSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICBpZiAoc2NyZWVu
Um93IDwgMCkKKyAgICAgICAgICAgIHJldHVybiB7cm93OiAwLCBjb2x1bW46IDB9OworCisgICAg
ICAgIHZhciBsaW5lOworICAgICAgICB2YXIgZG9jUm93ID0gMDsKKyAgICAgICAgdmFyIGRvY0Nv
bHVtbiA9IDA7CisgICAgICAgIHZhciBjb2x1bW47CisgICAgICAgIHZhciByb3cgPSAwOworICAg
ICAgICB2YXIgcm93TGVuZ3RoID0gMDsKKworICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRz
Y3JlZW5Sb3dDYWNoZTsKKyAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHJv
d0NhY2hlLCBzY3JlZW5Sb3cpOworICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKKyAg
ICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVb
aV07CisgICAgICAgICAgICB2YXIgZG9jUm93ID0gdGhpcy4kZG9jUm93Q2FjaGVbaV07CisgICAg
ICAgICAgICB2YXIgZG9DYWNoZSA9IHNjcmVlblJvdyA+IHJvd0NhY2hlW2wgLSAxXTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkb0NhY2hlID0gIWw7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgbWF4Um93ID0gdGhpcy5nZXRMZW5ndGgoKSAtIDE7CisgICAgICAgIHZhciBm
b2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1Jvdyk7CisgICAgICAgIHZhciBmb2xk
U3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAg
ICAgIHdoaWxlIChyb3cgPD0gc2NyZWVuUm93KSB7CisgICAgICAgICAgICByb3dMZW5ndGggPSB0
aGlzLmdldFJvd0xlbmd0aChkb2NSb3cpOworICAgICAgICAgICAgaWYgKHJvdyArIHJvd0xlbmd0
aCAtIDEgPj0gc2NyZWVuUm93IHx8IGRvY1JvdyA+PSBtYXhSb3cpIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcm93ICs9IHJv
d0xlbmd0aDsKKyAgICAgICAgICAgICAgICBkb2NSb3crKzsKKyAgICAgICAgICAgICAgICBpZiAo
ZG9jUm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGRvY1JvdyA9IGZvbGRM
aW5lLmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldE5l
eHRGb2xkTGluZShkb2NSb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFN0
YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChk
b0NhY2hlKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUucHVzaChkb2NSb3cp
OworICAgICAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2gocm93KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkTGluZSAmJiBmb2xkTGluZS5z
dGFydC5yb3cgPD0gZG9jUm93KSB7CisgICAgICAgICAgICBsaW5lID0gdGhpcy5nZXRGb2xkRGlz
cGxheUxpbmUoZm9sZExpbmUpOworICAgICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuc3RhcnQu
cm93OworICAgICAgICB9IGVsc2UgaWYgKHJvdyArIHJvd0xlbmd0aCA8PSBzY3JlZW5Sb3cgfHwg
ZG9jUm93ID4gbWF4Um93KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHJvdzogbWF4Um93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRMaW5lKG1heFJv
dykubGVuZ3RoCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
aW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdyk7CisgICAgICAgICAgICBmb2xkTGluZSA9IG51bGw7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAg
ICAgIHZhciBzcGxpdHMgPSB0aGlzLiR3cmFwRGF0YVtkb2NSb3ddOworICAgICAgICAgICAgaWYg
KHNwbGl0cykgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNwbGl0c1tzY3JlZW5Sb3cgLSBy
b3ddOworICAgICAgICAgICAgICAgIGlmKHNjcmVlblJvdyA+IHJvdyAmJiBzcGxpdHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgICAgIGRvY0NvbHVtbiA9IHNwbGl0c1tzY3JlZW5Sb3cgLSBy
b3cgLSAxXSB8fCBzcGxpdHNbc3BsaXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgICAg
ICBsaW5lID0gbGluZS5zdWJzdHJpbmcoZG9jQ29sdW1uKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkb2NDb2x1bW4gKz0gdGhpcy4kZ2V0
U3RyaW5nU2NyZWVuV2lkdGgobGluZSwgc2NyZWVuQ29sdW1uKVsxXTsKKyAgICAgICAgaWYgKHRo
aXMuJHVzZVdyYXBNb2RlICYmIGRvY0NvbHVtbiA+PSBjb2x1bW4pCisgICAgICAgICAgICBkb2ND
b2x1bW4gPSBjb2x1bW4gLSAxOworCisgICAgICAgIGlmIChmb2xkTGluZSkKKyAgICAgICAgICAg
IHJldHVybiBmb2xkTGluZS5pZHhUb1Bvc2l0aW9uKGRvY0NvbHVtbik7CisKKyAgICAgICAgcmV0
dXJuIHtyb3c6IGRvY1JvdywgY29sdW1uOiBkb2NDb2x1bW59OworICAgIH07CisgICAgdGhpcy5k
b2N1bWVudFRvU2NyZWVuUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewor
ICAgICAgICBpZiAodHlwZW9mIGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAg
ICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NS
b3cuY29sdW1uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBv
c2l0aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7CisKKyAgICAgICAgZG9jUm93ID0g
cG9zLnJvdzsKKyAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjsKKworICAgICAgICB2YXIg
c2NyZWVuUm93ID0gMDsKKyAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7CisgICAgICAg
IHZhciBmb2xkID0gbnVsbDsKKyAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1Jvdywg
ZG9jQ29sdW1uLCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGRvY1JvdyA9
IGZvbGQuc3RhcnQucm93OworICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1
bW47CisgICAgICAgIH0KKworICAgICAgICB2YXIgcm93RW5kLCByb3cgPSAwOworCisKKyAgICAg
ICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kZG9jUm93Q2FjaGU7CisgICAgICAgIHZhciBpID0gdGhp
cy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgZG9jUm93KTsKKyAgICAgICAgdmFyIGwgPSBy
b3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkgeworICAgICAgICAgICAg
dmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMu
JHNjcmVlblJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cgPiBy
b3dDYWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9DYWNo
ZSA9ICFsOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0
Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGlu
ZS5zdGFydC5yb3cgOkluZmluaXR5OworCisgICAgICAgIHdoaWxlIChyb3cgPCBkb2NSb3cpIHsK
KyAgICAgICAgICAgIGlmIChyb3cgPj0gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93
RW5kID0gZm9sZExpbmUuZW5kLnJvdyArIDE7CisgICAgICAgICAgICAgICAgaWYgKHJvd0VuZCA+
IGRvY1JvdykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9s
ZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShyb3dFbmQsIGZvbGRMaW5lKTsKKyAgICAgICAg
ICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0
eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJv
d0VuZCA9IHJvdyArIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjcmVlblJvdyAr
PSB0aGlzLmdldFJvd0xlbmd0aChyb3cpOworICAgICAgICAgICAgcm93ID0gcm93RW5kOworCisg
ICAgICAgICAgICBpZiAoZG9DYWNoZSkgeworICAgICAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0Nh
Y2hlLnB1c2gocm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNo
KHNjcmVlblJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRleHRM
aW5lID0gIiI7CisgICAgICAgIGlmIChmb2xkTGluZSAmJiByb3cgPj0gZm9sZFN0YXJ0KSB7Cisg
ICAgICAgICAgICB0ZXh0TGluZSA9IHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGZvbGRMaW5lLCBk
b2NSb3csIGRvY0NvbHVtbik7CisgICAgICAgICAgICBmb2xkU3RhcnRSb3cgPSBmb2xkTGluZS5z
dGFydC5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRoaXMu
Z2V0TGluZShkb2NSb3cpLnN1YnN0cmluZygwLCBkb2NDb2x1bW4pOworICAgICAgICAgICAgZm9s
ZFN0YXJ0Um93ID0gZG9jUm93OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFw
TW9kZSkgeworICAgICAgICAgICAgdmFyIHdyYXBSb3cgPSB0aGlzLiR3cmFwRGF0YVtmb2xkU3Rh
cnRSb3ddOworICAgICAgICAgICAgdmFyIHNjcmVlblJvd09mZnNldCA9IDA7CisgICAgICAgICAg
ICB3aGlsZSAodGV4dExpbmUubGVuZ3RoID49IHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0XSkgewor
ICAgICAgICAgICAgICAgIHNjcmVlblJvdyArKzsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dP
ZmZzZXQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRMaW5lID0gdGV4dExpbmUu
c3Vic3RyaW5nKAorICAgICAgICAgICAgICAgIHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0IC0gMV0g
fHwgMCwgdGV4dExpbmUubGVuZ3RoCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHJvdzogc2NyZWVuUm93LAorICAgICAgICAgICAgY29s
dW1uOiB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0ZXh0TGluZSlbMF0KKyAgICAgICAgfTsK
KyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbiA9IGZ1bmN0aW9uKHJvdywg
ZG9jQ29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlv
bihyb3csIGRvY0NvbHVtbikuY29sdW1uOworICAgIH07CisgICAgdGhpcy5kb2N1bWVudFRvU2Ny
ZWVuUm93ID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGRvY1JvdywgZG9jQ29sdW1uKS5yb3c7CisgICAg
fTsKKyAgICB0aGlzLmdldFNjcmVlbkxlbmd0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
c2NyZWVuUm93cyA9IDA7CisgICAgICAgIHZhciBmb2xkID0gbnVsbDsKKyAgICAgICAgaWYgKCF0
aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgc2NyZWVuUm93cyA9IHRoaXMuZ2V0TGVu
Z3RoKCk7CisgICAgICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmb2xkID0gZm9sZERhdGFbaV07CisgICAgICAgICAgICAgICAgc2NyZWVuUm93
cyAtPSBmb2xkLmVuZC5yb3cgLSBmb2xkLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kd3JhcERhdGEubGVu
Z3RoOworICAgICAgICAgICAgdmFyIHJvdyA9IDAsIGkgPSAwOworICAgICAgICAgICAgdmFyIGZv
bGQgPSB0aGlzLiRmb2xkRGF0YVtpKytdOworICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZv
bGQgPyBmb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisKKyAgICAgICAgICAgIHdoaWxlIChyb3cg
PCBsYXN0Um93KSB7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93cyArPSB0aGlzLiR3cmFwRGF0
YVtyb3ddLmxlbmd0aCArIDE7CisgICAgICAgICAgICAgICAgcm93ICsrOworICAgICAgICAgICAg
ICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gZm9s
ZC5lbmQucm93KzE7CisgICAgICAgICAgICAgICAgICAgIGZvbGQgPSB0aGlzLiRmb2xkRGF0YVtp
KytdOworICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkID9mb2xkLnN0YXJ0LnJv
dyA6SW5maW5pdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHNjcmVlblJvd3M7CisgICAgfTsKKyAgICBmdW5jdGlvbiBpc0Z1
bGxXaWR0aChjKSB7CisgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gYyA+PSAweDExMDAgJiYgYyA8PSAweDExNUYgfHwKKyAg
ICAgICAgICAgICAgIGMgPj0gMHgxMUEzICYmIGMgPD0gMHgxMUE3IHx8CisgICAgICAgICAgICAg
ICBjID49IDB4MTFGQSAmJiBjIDw9IDB4MTFGRiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDIz
MjkgJiYgYyA8PSAweDIzMkEgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyRTgwICYmIGMgPD0g
MHgyRTk5IHx8CisgICAgICAgICAgICAgICBjID49IDB4MkU5QiAmJiBjIDw9IDB4MkVGMyB8fAor
ICAgICAgICAgICAgICAgYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGRDUgfHwKKyAgICAgICAgICAg
ICAgIGMgPj0gMHgyRkYwICYmIGMgPD0gMHgyRkZCIHx8CisgICAgICAgICAgICAgICBjID49IDB4
MzAwMCAmJiBjIDw9IDB4MzAzRSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMwNDEgJiYgYyA8
PSAweDMwOTYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMDk5ICYmIGMgPD0gMHgzMEZGIHx8
CisgICAgICAgICAgICAgICBjID49IDB4MzEwNSAmJiBjIDw9IDB4MzEyRCB8fAorICAgICAgICAg
ICAgICAgYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxOEUgfHwKKyAgICAgICAgICAgICAgIGMgPj0g
MHgzMTkwICYmIGMgPD0gMHgzMUJBIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzFDMCAmJiBj
IDw9IDB4MzFFMyB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMxRjAgJiYgYyA8PSAweDMyMUUg
fHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMjIwICYmIGMgPD0gMHgzMjQ3IHx8CisgICAgICAg
ICAgICAgICBjID49IDB4MzI1MCAmJiBjIDw9IDB4MzJGRSB8fAorICAgICAgICAgICAgICAgYyA+
PSAweDMzMDAgJiYgYyA8PSAweDREQkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHg0RTAwICYm
IGMgPD0gMHhBNDhDIHx8CisgICAgICAgICAgICAgICBjID49IDB4QTQ5MCAmJiBjIDw9IDB4QTRD
NiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEE5NjAgJiYgYyA8PSAweEE5N0MgfHwKKyAgICAg
ICAgICAgICAgIGMgPj0gMHhBQzAwICYmIGMgPD0gMHhEN0EzIHx8CisgICAgICAgICAgICAgICBj
ID49IDB4RDdCMCAmJiBjIDw9IDB4RDdDNiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEQ3Q0Ig
JiYgYyA8PSAweEQ3RkIgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGIHx8CisgICAgICAgICAgICAgICBjID49IDB4RkUxMCAmJiBjIDw9IDB4RkUxOSB8fAorICAg
ICAgICAgICAgICAgYyA+PSAweEZFMzAgJiYgYyA8PSAweEZFNTIgfHwKKyAgICAgICAgICAgICAg
IGMgPj0gMHhGRTU0ICYmIGMgPD0gMHhGRTY2IHx8CisgICAgICAgICAgICAgICBjID49IDB4RkU2
OCAmJiBjIDw9IDB4RkU2QiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZGMDEgJiYgYyA8PSAw
eEZGNjAgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRkUwICYmIGMgPD0gMHhGRkU2OworICAg
IH07CisKK30pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKKworcmVxdWlyZSgiLi9lZGl0
X3Nlc3Npb24vZm9sZGluZyIpLkZvbGRpbmcuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwor
cmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIpLkJyYWNrZXRNYXRjaC5jYWxs
KEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuRWRpdFNlc3Npb24gPSBFZGl0U2Vz
c2lvbjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvY29uZmlnJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9u
ZXQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworIm5vIHVzZSBzdHJpY3QiOworCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGli
L2xhbmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBuZXQgPSByZXF1
aXJlKCIuL2xpYi9uZXQiKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVu
dF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzOworfSkoKTsKKwordmFyIG9wdGlvbnMgPSB7CisgICAgcGFja2FnZWQ6
IGZhbHNlLAorICAgIHdvcmtlclBhdGg6IG51bGwsCisgICAgbW9kZVBhdGg6IG51bGwsCisgICAg
dGhlbWVQYXRoOiBudWxsLAorICAgIGJhc2VQYXRoOiAiIiwKKyAgICBzdWZmaXg6ICIuanMiLAor
ICAgICRtb2R1bGVVcmxzOiB7fQorfTsKKworZXhwb3J0cy5nZXQgPSBmdW5jdGlvbihrZXkpIHsK
KyAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkpOworCisgICAgcmV0dXJuIG9wdGlv
bnNba2V5XTsKK307CisKK2V4cG9ydHMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAg
IGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIlVua25vd24gY29uZmlnIGtleTogIiArIGtleSk7CisKKyAgICBvcHRpb25zW2tleV0gPSB2
YWx1ZTsKK307CisKK2V4cG9ydHMuYWxsID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGxhbmcu
Y29weU9iamVjdChvcHRpb25zKTsKK307Citvb3AuaW1wbGVtZW50KGV4cG9ydHMsIEV2ZW50RW1p
dHRlcik7CisKK2V4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7
CisgICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0pCisgICAgICAgIHJldHVybiBvcHRp
b25zLiRtb2R1bGVVcmxzW25hbWVdOworCisgICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgiLyIp
OworICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudCB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSB8
fCAiIjsKKyAgICB2YXIgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnJlcGxhY2UoY29t
cG9uZW50LCAiIikucmVwbGFjZSgvKF5bXC1fXSl8KFtcLV9dJCkvLCAiIik7CisKKyAgICBpZiAo
IWJhc2UgJiYgcGFydHMubGVuZ3RoID4gMSkKKyAgICAgICAgYmFzZSA9IHBhcnRzW3BhcnRzLmxl
bmd0aCAtIDJdOworICAgIHZhciBwYXRoID0gb3B0aW9uc1tjb21wb25lbnQgKyAiUGF0aCJdOwor
ICAgIGlmIChwYXRoID09IG51bGwpCisgICAgICAgIHBhdGggPSBvcHRpb25zLmJhc2VQYXRoOwor
ICAgIGlmIChwYXRoICYmIHBhdGguc2xpY2UoLTEpICE9ICIvIikKKyAgICAgICAgcGF0aCArPSAi
LyI7CisgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQgKyAiLSIgKyBiYXNlICsgdGhpcy5nZXQo
InN1ZmZpeCIpOworfTsKKworZXhwb3J0cy5zZXRNb2R1bGVVcmwgPSBmdW5jdGlvbihuYW1lLCBz
dWJzdCkgeworICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdID0gc3Vic3Q7Cit9
OworCitleHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5jdGlvbihtb2R1bGVOYW1lLCBvbkxvYWQpIHsK
KyAgICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOworICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVs
ZU5hbWUpKSB7CisgICAgICAgIG1vZHVsZVR5cGUgPSBtb2R1bGVOYW1lWzBdOworICAgICAgICBt
b2R1bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgbW9k
dWxlID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKKyAgICB9IGNhdGNoIChlKSB7fTsKKyAgICBpZiAo
bW9kdWxlKQorICAgICAgICByZXR1cm4gb25Mb2FkKG1vZHVsZSk7CisKKyAgICB2YXIgYWZ0ZXJM
b2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlcXVpcmUoW21vZHVsZU5hbWVdLCBmdW5jdGlv
bihtb2R1bGUpIHsKKyAgICAgICAgICAgIGV4cG9ydHMuX2VtaXQoImxvYWQubW9kdWxlIiwge25h
bWU6IG1vZHVsZU5hbWUsIG1vZHVsZTogbW9kdWxlfSk7CisgICAgICAgICAgICBvbkxvYWQobW9k
dWxlKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGlmICghZXhwb3J0cy5nZXQoInBhY2th
Z2VkIikpCisgICAgICAgIHJldHVybiBhZnRlckxvYWQoKTsKKyAgICBuZXQubG9hZFNjcmlwdChl
eHBvcnRzLm1vZHVsZVVybChtb2R1bGVOYW1lLCBtb2R1bGVUeXBlKSwgYWZ0ZXJMb2FkKTsKK307
CitleHBvcnRzLmluaXQgPSBmdW5jdGlvbigpIHsKKyAgICBvcHRpb25zLnBhY2thZ2VkID0gcmVx
dWlyZS5wYWNrYWdlZCB8fCBtb2R1bGUucGFja2FnZWQgfHwgKGdsb2JhbC5kZWZpbmUgJiYgZGVm
aW5lLnBhY2thZ2VkKTsKKworICAgIGlmICghZ2xvYmFsLmRvY3VtZW50KQorICAgICAgICByZXR1
cm4gIiI7CisKKyAgICB2YXIgc2NyaXB0T3B0aW9ucyA9IHt9OworICAgIHZhciBzY3JpcHRVcmwg
PSAiIjsKKworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InNjcmlwdCIpOworICAgIGZvciAodmFyIGk9MDsgaTxzY3JpcHRzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworCisgICAgICAgIHZhciBzcmMgPSBzY3Jp
cHQuc3JjIHx8IHNjcmlwdC5nZXRBdHRyaWJ1dGUoInNyYyIpOworICAgICAgICBpZiAoIXNyYykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gc2NyaXB0
LmF0dHJpYnV0ZXM7CisgICAgICAgIGZvciAodmFyIGo9MCwgbD1hdHRyaWJ1dGVzLmxlbmd0aDsg
aiA8IGw7IGorKykgeworICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2pdOworICAg
ICAgICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKCJkYXRhLWFjZS0iKSA9PT0gMCkgeworICAg
ICAgICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2Uo
L15kYXRhLWFjZS0vLCAiIikpXSA9IGF0dHIudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2YXIgbSA9IHNyYy5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhc
P3wkKS8pOworICAgICAgICBpZiAobSkKKyAgICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07Cisg
ICAgfQorCisgICAgaWYgKHNjcmlwdFVybCkgeworICAgICAgICBzY3JpcHRPcHRpb25zLmJhc2Ug
PSBzY3JpcHRPcHRpb25zLmJhc2UgfHwgc2NyaXB0VXJsOworICAgICAgICBzY3JpcHRPcHRpb25z
LnBhY2thZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzY3JpcHRPcHRpb25zLmJhc2VQYXRoID0g
c2NyaXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCA9IHNjcmlw
dE9wdGlvbnMud29ya2VyUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CisgICAgc2NyaXB0T3B0
aW9ucy5tb2RlUGF0aCA9IHNjcmlwdE9wdGlvbnMubW9kZVBhdGggfHwgc2NyaXB0T3B0aW9ucy5i
YXNlOworICAgIHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoID0gc2NyaXB0T3B0aW9ucy50aGVtZVBh
dGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIGRlbGV0ZSBzY3JpcHRPcHRpb25zLmJhc2U7
CisKKyAgICBmb3IgKHZhciBrZXkgaW4gc2NyaXB0T3B0aW9ucykKKyAgICAgICAgaWYgKHR5cGVv
ZiBzY3JpcHRPcHRpb25zW2tleV0gIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgZXhwb3J0
cy5zZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pOworfTsKKworZnVuY3Rpb24gZGVIeXBoZW5h
dGUoc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8tKC4pL2csIGZ1bmN0aW9uKG0sIG0x
KSB7IHJldHVybiBtMS50b1VwcGVyQ2FzZSgpOyB9KTsKK30KKworfSk7CithY2UuZGVmaW5lKCdh
Y2UvbGliL25ldCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi91
c2VyYWdlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vdXNlcmFnZW50Iik7CisKK2V4cG9ydHMuZ2V0ID0gZnVu
Y3Rpb24gKHVybCwgY2FsbGJhY2spIHsKKyAgICB2YXIgeGhyID0gZXhwb3J0cy5jcmVhdGVYaHIo
KTsKKyAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09
IDQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICB9
CisgICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsKK307CisKK3ZhciBwcm9nSWRzID0gWydNc3ht
bDIuWE1MSFRUUCcsICdNaWNyb3NvZnQuWE1MSFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXTsK
KworZXhwb3J0cy5jcmVhdGVYaHIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgeGhyLCBpLCBwcm9n
SWQ7CisgICAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNb
aV07CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVY
T2JqZWN0KHByb2dJZCk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorCisgICAgICAgICAg
ICBpZiAoeGhyKSB7CisgICAgICAgICAgICAgICAgcHJvZ0lkcyA9IFtwcm9nSWRdOyAgLy8gc28g
ZmFzdGVyIG5leHQgdGltZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4aHIpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJjcmVhdGVYaHIoKTogWE1MSHR0cFJlcXVlc3Qgbm90IGF2YWlsYWJsZSIpOworICAgIH0K
KworICAgIHJldHVybiB4aHI7Cit9OworCitleHBvcnRzLmxvYWRTY3JpcHQgPSBmdW5jdGlvbihw
YXRoLCBjYWxsYmFjaykgeworICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ2hlYWQnKVswXTsKKyAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Nj
cmlwdCcpOworCisgICAgcy5zcmMgPSBwYXRoOworICAgIGhlYWQuYXBwZW5kQ2hpbGQocyk7CisK
KyAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUpCisgICAgICAgIHMub25yZWFkeXN0YXRlY2hhbmdl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09ICdsb2FkZWQn
ICYmIGNhbGxiYWNrKCk7CisgICAgICAgIH07CisgICAgZWxzZQorICAgICAgICBzLm9ubG9hZCA9
IGNhbGxiYWNrOworfTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRl
cicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIEV2ZW50RW1pdHRlciA9IHt9OworCitFdmVudEVt
aXR0ZXIuX2VtaXQgPQorRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZl
bnROYW1lLCBlKSB7CisgICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0
cnkgfHwge307CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRs
ZXJzIHx8IHt9OworCisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZl
bnROYW1lXSB8fCBbXTsKKyAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFu
ZGxlcnNbZXZlbnROYW1lXTsKKyAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRI
YW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZW9mIGUgIT0gIm9iamVjdCIg
fHwgIWUpCisgICAgICAgIGUgPSB7fTsKKworICAgIGlmICghZS50eXBlKQorICAgICAgICBlLnR5
cGUgPSBldmVudE5hbWU7CisgICAgCisgICAgaWYgKCFlLnN0b3BQcm9wYWdhdGlvbikgeworICAg
ICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5w
cm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOworICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBp
ZiAoIWUucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGxpc3RlbmVyc1tpXShlKTsKKyAgICAgICAgaWYgKGUucHJvcGFnYXRpb25T
dG9wcGVkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChkZWZhdWx0
SGFuZGxlciAmJiAhZS5kZWZhdWx0UHJldmVudGVkKQorICAgICAgICByZXR1cm4gZGVmYXVsdEhh
bmRsZXIoZSk7Cit9OworCitFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlv
bihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhp
cy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9OworICAgIAorICAgIGlmICh0aGlzLl9kZWZhdWx0SGFu
ZGxlcnNbZXZlbnROYW1lXSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBo
YW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7CisgICAgICAg
IAorICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7Cit9Owor
CitFdmVudEVtaXR0ZXIub24gPQorRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5j
dGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRo
aXMuX2V2ZW50UmVnaXN0cnkgfHwge307CisKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZl
bnRSZWdpc3RyeVtldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzKQorICAgICAgICBsaXN0
ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKKworICAgIGlmIChs
aXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjaykgPT0gLTEpCisgICAgICAgIGxpc3RlbmVycy5wdXNo
KGNhbGxiYWNrKTsKK307CisKK0V2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9CitFdmVudEVt
aXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp
IHsKKyAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTsK
KworICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07Cisg
ICAgaWYgKCFsaXN0ZW5lcnMpCisgICAgICAgIHJldHVybjsKKworICAgIHZhciBpbmRleCA9IGxp
c3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTsKKyAgICBpZiAoaW5kZXggIT09IC0xKQorICAgICAg
ICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKK307CisKK0V2ZW50RW1pdHRlci5yZW1vdmVB
bGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKKyAgICBpZiAodGhpcy5fZXZlbnRS
ZWdpc3RyeSkgdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107Cit9OworCitleHBv
cnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9zZWxlY3Rpb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
b29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3Jhbmdl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSBy
ZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwor
dmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVt
aXR0ZXI7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cit2YXIgU2VsZWN0
aW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Cisg
ICAgdGhpcy5kb2MgPSBzZXNzaW9uLmdldERvY3VtZW50KCk7CisKKyAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgdGhpcy5sZWFkID0gdGhpcy5zZWxlY3Rpb25MZWFkID0gdGhpcy5kb2Mu
Y3JlYXRlQW5jaG9yKDAsIDApOworICAgIHRoaXMuYW5jaG9yID0gdGhpcy5zZWxlY3Rpb25BbmNo
b3IgPSB0aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwgMCk7CisKKyAgICB2YXIgc2VsZiA9IHRoaXM7
CisgICAgdGhpcy5sZWFkLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIHNlbGYu
X2VtaXQoImNoYW5nZUN1cnNvciIpOworICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpCisgICAg
ICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKKyAgICAgICAgaWYgKCFzZWxm
LiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdlICYmIGUub2xkLmNvbHVtbiAhPSBlLnZhbHVlLmNv
bHVtbikKKyAgICAgICAgICAgIHNlbGYuJGRlc2lyZWRDb2x1bW4gPSBudWxsOworICAgIH0pOwor
CisgICAgdGhpcy5zZWxlY3Rpb25BbmNob3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpCisgICAgICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VT
ZWxlY3Rpb24iKTsKKyAgICB9KTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBs
ZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKyAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuICh0aGlzLiRpc0VtcHR5IHx8ICgKKyAgICAgICAgICAgIHRoaXMu
YW5jaG9yLnJvdyA9PSB0aGlzLmxlYWQucm93ICYmCisgICAgICAgICAgICB0aGlzLmFuY2hvci5j
b2x1bW4gPT0gdGhpcy5sZWFkLmNvbHVtbgorICAgICAgICApKTsKKyAgICB9OworICAgIHRoaXMu
aXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dGhpcy5nZXRSYW5nZSgpLmlzTXVsdGlMaW5lKCk7CisgICAgfTsKKyAgICB0aGlzLmdldEN1cnNv
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7
CisgICAgfTsKKyAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7CisgICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKKwor
ICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkgeworICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9
IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIHRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0
U2VsZWN0aW9uTGVhZCgpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmFu
Y2hvci5nZXRQb3NpdGlvbigpOworICAgIH07CisgICAgdGhpcy5nZXRTZWxlY3Rpb25MZWFkID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsKKyAg
ICB9OworICAgIHRoaXMuc2hpZnRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb2x1bW5zKSB7CisgICAg
ICAgIGlmICh0aGlzLiRpc0VtcHR5KSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyh0
aGlzLmxlYWQucm93LCB0aGlzLmxlYWQuY29sdW1uICsgY29sdW1ucyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0
aW9uQW5jaG9yKCk7CisgICAgICAgIHZhciBsZWFkID0gdGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk7
CisKKyAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gdGhpcy5pc0JhY2t3YXJkcygpOworCisgICAg
ICAgIGlmICghaXNCYWNrd2FyZHMgfHwgYW5jaG9yLmNvbHVtbiAhPT0gMCkKKyAgICAgICAgICAg
IHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4gKyBjb2x1
bW5zKTsKKworICAgICAgICBpZiAoaXNCYWNrd2FyZHMgfHwgbGVhZC5jb2x1bW4gIT09IDApIHsK
KyAgICAgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGVhZC5yb3csIGxlYWQuY29sdW1uICsgY29sdW1ucyk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5pc0JhY2t3YXJk
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7CisgICAg
ICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICByZXR1cm4gKGFuY2hvci5yb3cgPiBs
ZWFkLnJvdyB8fCAoYW5jaG9yLnJvdyA9PSBsZWFkLnJvdyAmJiBhbmNob3IuY29sdW1uID4gbGVh
ZC5jb2x1bW4pKTsKKyAgICB9OworICAgIHRoaXMuZ2V0UmFuZ2UgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGFuY2hvciA9IHRoaXMuYW5jaG9yOworICAgICAgICB2YXIgbGVhZCA9IHRoaXMu
bGVhZDsKKworICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
UmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBsZWFkKTsKKworICAgICAgICBpZiAodGhpcy5pc0JhY2t3
YXJkcygpKSB7CisgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBhbmNo
b3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFJhbmdl
LmZyb21Qb2ludHMoYW5jaG9yLCBsZWFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5j
bGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJGlzRW1wdHkp
IHsKKyAgICAgICAgICAgIHRoaXMuJGlzRW1wdHkgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMuc2Vs
ZWN0QWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy5kb2MuZ2V0
TGVuZ3RoKCkgLSAxOworICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcigwLCAwKTsKKyAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGFzdFJvdywgdGhpcy5kb2MuZ2V0TGluZShsYXN0Um93
KS5sZW5ndGgpOworICAgIH07CisgICAgdGhpcy5zZXRSYW5nZSA9CisgICAgdGhpcy5zZXRTZWxl
Y3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCByZXZlcnNlKSB7CisgICAgICAgIGlmIChyZXZl
cnNlKSB7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihyYW5nZS5lbmQucm93
LCByYW5nZS5lbmQuY29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2Uuc3Rh
cnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5j
b2x1bW4pOworICAgICAgICAgICAgdGhpcy5zZWxlY3RUbyhyYW5nZS5lbmQucm93LCByYW5nZS5l
bmQuY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gbnVs
bDsKKyAgICB9OworCisgICAgdGhpcy4kbW92ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKG1vdmVyKSB7
CisgICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOworICAgICAgICBpZiAodGhpcy4kaXNFbXB0
eSkKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGxlYWQucm93LCBsZWFkLmNv
bHVtbik7CisKKyAgICAgICAgbW92ZXIuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIHRoaXMuc2Vs
ZWN0VG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0
aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1
bW4pOworICAgICAgICB9KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0VG9Qb3NpdGlvbiA9IGZ1
bmN0aW9uKHBvcykgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICB9KTsK
KyAgICB9OworICAgIHRoaXMuc2VsZWN0VXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4k
bW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCk7CisgICAgfTsKKyAgICB0aGlzLnNlbGVj
dERvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1v
dmVDdXJzb3JEb3duKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0UmlnaHQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCk7Cisg
ICAgfTsKKyAgICB0aGlzLnNlbGVjdExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4k
bW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KTsKKyAgICB9OworICAgIHRoaXMuc2Vs
ZWN0TGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24o
dGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0KTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0TGluZUVu
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1
cnNvckxpbmVFbmQpOworICAgIH07CisgICAgdGhpcy5zZWxlY3RGaWxlRW5kID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCk7
CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdEZpbGVTdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVTdGFydCk7CisgICAgfTsK
KyAgICB0aGlzLnNlbGVjdFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRt
b3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCk7CisgICAgfTsKKyAgICB0aGlz
LnNlbGVjdFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rp
b24odGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpOworICAgIH07CisgICAgdGhpcy5nZXRXb3JkUmFu
Z2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9
PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJvdyB8fCB0aGlzLmxl
YWQ7CisgICAgICAgICAgICByb3cgPSBjdXJzb3Iucm93OworICAgICAgICAgICAgY29sdW1uID0g
Y3Vyc29yLmNvbHVtbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdl
dFdvcmRSYW5nZShyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLnNlbGVjdFdvcmQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldFdvcmRS
YW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMuc2VsZWN0QVdvcmQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yKCk7CisgICAgICAgIHZhciByYW5nZSA9
IHRoaXMuc2Vzc2lvbi5nZXRBV29yZFJhbmdlKGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwor
ICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsKKyAgICB9OworCisgICAgdGhp
cy5nZXRMaW5lUmFuZ2UgPSBmdW5jdGlvbihyb3csIGV4Y2x1ZGVMYXN0Q2hhcikgeworICAgICAg
ICB2YXIgcm93U3RhcnQgPSB0eXBlb2Ygcm93ID09ICJudW1iZXIiID8gcm93IDogdGhpcy5sZWFk
LnJvdzsKKyAgICAgICAgdmFyIHJvd0VuZDsKKworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlz
LnNlc3Npb24uZ2V0Rm9sZExpbmUocm93U3RhcnQpOworICAgICAgICBpZiAoZm9sZExpbmUpIHsK
KyAgICAgICAgICAgIHJvd1N0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICAgICAg
cm93RW5kID0gZm9sZExpbmUuZW5kLnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJvd0VuZCA9IHJvd1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGlmIChleGNsdWRlTGFzdENo
YXIpCisgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJvd1N0YXJ0LCAwLCByb3dFbmQsIHRo
aXMuc2Vzc2lvbi5nZXRMaW5lKHJvd0VuZCkubGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kICsgMSwgMCk7CisgICAg
fTsKKyAgICB0aGlzLnNlbGVjdExpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXRT
ZWxlY3Rpb25SYW5nZSh0aGlzLmdldExpbmVSYW5nZSgpKTsKKyAgICB9OworICAgIHRoaXMubW92
ZUN1cnNvclVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KC0xLCAw
KTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckRvd24gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMSwgMCk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JM
ZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQuZ2V0UG9z
aXRpb24oKSwKKyAgICAgICAgICAgIGZvbGQ7CisKKyAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNl
c3Npb24uZ2V0Rm9sZEF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4sIC0xKSkgeworICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1u
KTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJzb3IuY29sdW1uID09IDApIHsKKyAgICAgICAgICAg
IGlmIChjdXJzb3Iucm93ID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRv
KGN1cnNvci5yb3cgLSAxLCB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cgLSAxKS5sZW5ndGgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
dmFyIHRhYlNpemUgPSB0aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOworICAgICAgICAgICAgaWYg
KHRoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoY3Vyc29yKSAmJiB0aGlzLmRvYy5nZXRMaW5lKGN1cnNv
ci5yb3cpLnNsaWNlKGN1cnNvci5jb2x1bW4tdGFiU2l6ZSwgY3Vyc29yLmNvbHVtbikuc3BsaXQo
IiAiKS5sZW5ndGgtMSA9PSB0YWJTaXplKQorICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNv
ckJ5KDAsIC10YWJTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlz
Lm1vdmVDdXJzb3JCeSgwLCAtMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUN1
cnNvclJpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQu
Z2V0UG9zaXRpb24oKSwKKyAgICAgICAgICAgIGZvbGQ7CisgICAgICAgIGlmIChmb2xkID0gdGhp
cy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAxKSkgeworICAg
ICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4p
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMubGVhZC5jb2x1bW4gPT0gdGhpcy5k
b2MuZ2V0TGluZSh0aGlzLmxlYWQucm93KS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
LmxlYWQucm93IDwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5tb3ZlQ3Vyc29yVG8odGhpcy5sZWFkLnJvdyArIDEsIDApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlz
LnNlc3Npb24uZ2V0VGFiU2l6ZSgpOworICAgICAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVh
ZDsKKyAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uaXNUYWJTdG9wKGN1cnNvcikgJiYgdGhp
cy5kb2MuZ2V0TGluZShjdXJzb3Iucm93KS5zbGljZShjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29s
dW1uK3RhYlNpemUpLnNwbGl0KCIgIikubGVuZ3RoLTEgPT0gdGFiU2l6ZSkKKyAgICAgICAgICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCB0YWJTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCAxKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgdGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNv
bHVtbjsKKyAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2Ny
ZWVuUm93KHJvdywgY29sdW1uKTsKKyAgICAgICAgdmFyIGZpcnN0Q29sdW1uUG9zaXRpb24gPSB0
aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgMCk7CisgICAg
ICAgIHZhciBiZWZvcmVDdXJzb3IgPSB0aGlzLnNlc3Npb24uZ2V0RGlzcGxheUxpbmUoCisgICAg
ICAgICAgICByb3csIG51bGwsIGZpcnN0Q29sdW1uUG9zaXRpb24ucm93LAorICAgICAgICAgICAg
Zmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4KKyAgICAgICAgKTsKKworICAgICAgICB2YXIgbGVh
ZGluZ1NwYWNlID0gYmVmb3JlQ3Vyc29yLm1hdGNoKC9eXHMqLyk7CisgICAgICAgIGlmIChsZWFk
aW5nU3BhY2VbMF0ubGVuZ3RoICE9IGNvbHVtbiAmJiAhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0
eWxlTGluZVN0YXJ0KQorICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4gKz0g
bGVhZGluZ1NwYWNlWzBdLmxlbmd0aDsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlv
bihmaXJzdENvbHVtblBvc2l0aW9uKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvckxpbmVF
bmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CisgICAgICAg
IHZhciBsaW5lRW5kID0gdGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0
aW9uKGxlYWQucm93LCBsZWFkLmNvbHVtbik7CisgICAgICAgIGlmICh0aGlzLmxlYWQuY29sdW1u
ID09IGxpbmVFbmQuY29sdW1uKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lv
bi5nZXRMaW5lKGxpbmVFbmQucm93KTsKKyAgICAgICAgICAgIGlmIChsaW5lRW5kLmNvbHVtbiA9
PSBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gbGluZS5zZWFy
Y2goL1xzKyQvKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dEVuZCA+IDApCisgICAgICAgICAg
ICAgICAgICAgIGxpbmVFbmQuY29sdW1uID0gdGV4dEVuZDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxpbmVFbmQucm93LCBsaW5lRW5kLmNv
bHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JGaWxlRW5kID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciByb3cgPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDE7CisgICAgICAgIHZh
ciBjb2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAgICB0aGlzLm1v
dmVDdXJzb3JUbyhyb3csIGNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JGaWxl
U3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oMCwgMCk7Cisg
ICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhp
cy5sZWFkLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7
CisgICAgICAgIHZhciByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1uKTsKKwor
ICAgICAgICB2YXIgbWF0Y2g7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJ
bmRleCA9IDA7CisgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7Cisg
ICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7
CisgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xk
LmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1hdGNoID0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhyaWdo
dE9mQ3Vyc29yKSkgeworICAgICAgICAgICAgY29sdW1uICs9IHRoaXMuc2Vzc2lvbi5ub25Ub2tl
blJlLmxhc3RJbmRleDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJ
bmRleCA9IDA7CisgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29s
dW1uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29sdW1uID49IGxpbmUubGVuZ3RoKSB7Cisg
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGxpbmUubGVuZ3RoKTsKKyAgICAgICAg
ICAgIHRoaXMubW92ZUN1cnNvclJpZ2h0KCk7CisgICAgICAgICAgICBpZiAocm93IDwgdGhpcy5k
b2MuZ2V0TGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcldvcmRS
aWdodCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRj
aCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKKyAgICAgICAg
ICAgIGNvbHVtbiArPSB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg7CisgICAgICAgICAg
ICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOworICAgIH07CisgICAgdGhpcy5tb3Zl
Q3Vyc29yTG9uZ1dvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByb3cgPSB0aGlz
LmxlYWQucm93OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKKyAgICAg
ICAgdmFyIGZvbGQ7CisgICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChy
b3csIGNvbHVtbiwgLTEpKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0
YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHN0ciA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkU3RyaW5nQXQocm93
LCBjb2x1bW4sIC0xKTsKKyAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7CisgICAgICAgICAgICBz
dHIgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykuc3Vic3RyaW5nKDAsIGNvbHVtbikKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2Uoc3RyKTsK
KyAgICAgICAgdmFyIG1hdGNoOworICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0
SW5kZXggPSAwOworICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOwor
ICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKGxlZnRPZkN1
cnNvcikpIHsKKyAgICAgICAgICAgIGNvbHVtbiAtPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5s
YXN0SW5kZXg7CisgICAgICAgICAgICBsZWZ0T2ZDdXJzb3IgPSBsZWZ0T2ZDdXJzb3Iuc2xpY2Uo
dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4KTsKKyAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bHVtbiA8PSAwKSB7CisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIDApOworICAg
ICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCgpOworICAgICAgICAgICAgaWYgKHJvdyA+IDAp
CisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9r
ZW5SZS5leGVjKGxlZnRPZkN1cnNvcikpIHsKKyAgICAgICAgICAgIGNvbHVtbiAtPSB0aGlzLnNl
c3Npb24udG9rZW5SZS5sYXN0SW5kZXg7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5S
ZS5sYXN0SW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
cm93LCBjb2x1bW4pOworICAgIH07CisKKyAgICB0aGlzLiRzaG9ydFdvcmRFbmRJbmRleCA9IGZ1
bmN0aW9uKHJpZ2h0T2ZDdXJzb3IpIHsKKyAgICAgICAgdmFyIG1hdGNoLCBpbmRleCA9IDAsIGNo
OworICAgICAgICB2YXIgd2hpdGVzcGFjZVJlID0gL1xzLzsKKyAgICAgICAgdmFyIHRva2VuUmUg
PSB0aGlzLnNlc3Npb24udG9rZW5SZTsKKworICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7
CisgICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1
cnNvcikpIHsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdElu
ZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZD
dXJzb3JbaW5kZXhdKSAmJiB3aGl0ZXNwYWNlUmUudGVzdChjaCkpCisgICAgICAgICAgICAgICAg
aW5kZXggKys7CisKKyAgICAgICAgICAgIGlmIChpbmRleCA8PSAxKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0g
cmlnaHRPZkN1cnNvcltpbmRleF0pICYmICF0b2tlblJlLnRlc3QoY2gpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaW5k
ZXggKys7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlUmUudGVzdChjaCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleC0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJl
LnRlc3QoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArKzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsKKworICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OworICAgICAgICB2YXIgY29s
dW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRM
aW5lKHJvdyk7CisgICAgICAgIHZhciByaWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29s
dW1uKTsKKworICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBj
b2x1bW4sIDEpOworICAgICAgICBpZiAoZm9sZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1v
dmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CisKKyAgICAgICAgaWYg
KGNvbHVtbiA9PSBsaW5lLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmRvYy5n
ZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGRvIHsgICAgCisgICAgICAgICAgICAgICAgcm93Kys7
CisgICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IHRoaXMuZG9jLmdldExpbmUocm93KQor
ICAgICAgICAgICAgfSB3aGlsZSAocm93IDwgbCAmJiAvXlxzKiQvLnRlc3QocmlnaHRPZkN1cnNv
cikpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghL15ccysvLnRlc3QocmlnaHRPZkN1
cnNvcikpCisgICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9ICIiCisgICAgICAgICAgICBj
b2x1bW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRX
b3JkRW5kSW5kZXgocmlnaHRPZkN1cnNvcik7CisKKyAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
cm93LCBjb2x1bW4gKyBpbmRleCk7CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNvclNob3J0
V29yZExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7
CisgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uOworCisgICAgICAgIHZhciBm
b2xkOworICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1
bW4sIC0xKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0
LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pOworCisgICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNz
aW9uLmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKTsKKyAgICAgICAgaWYgKGNvbHVt
biA9PSAwKSB7CisgICAgICAgICAgICBkbyB7ICAgIAorICAgICAgICAgICAgICAgIHJvdy0tOwor
ICAgICAgICAgICAgICAgIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgICAg
ICB9IHdoaWxlIChyb3cgPiAwICYmIC9eXHMqJC8udGVzdChsaW5lKSkKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CisgICAgICAgICAgICBpZiAoIS9ccysk
Ly50ZXN0KGxpbmUpKQorICAgICAgICAgICAgICAgIGxpbmUgPSAiIgorICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGxlZnRPZkN1cnNvciA9IGxhbmcuc3RyaW5nUmV2ZXJzZShsaW5lKTsKKyAgICAg
ICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgobGVmdE9mQ3Vyc29yKTsKKwor
ICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4gLSBpbmRleCk7Cisg
ICAgfTsKKworICAgIHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpCisgICAgICAgICAgICB0aGlz
Lm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRo
aXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0KCk7CisgICAgfTsKKworICAgIHRoaXMubW92ZUN1
cnNvcldvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHNl
bGVjdExvbmdXb3JkcykKKyAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0
KCk7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JCeSA9IGZ1bmN0aW9uKHJvd3MsIGNoYXJz
KSB7CisgICAgICAgIHZhciBzY3JlZW5Qb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKAorICAgICAgICAgICAgdGhpcy5sZWFkLnJvdywKKyAgICAgICAgICAgIHRoaXMu
bGVhZC5jb2x1bW4KKyAgICAgICAgKTsKKworICAgICAgICBpZiAoY2hhcnMgPT09IDApIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLiRkZXNpcmVkQ29sdW1uKQorICAgICAgICAgICAgICAgIHNjcmVl
blBvcy5jb2x1bW4gPSB0aGlzLiRkZXNpcmVkQ29sdW1uOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBzY3JlZW5Qb3MuY29sdW1uOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGRvY1BvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3Vt
ZW50UG9zaXRpb24oc2NyZWVuUG9zLnJvdyArIHJvd3MsIHNjcmVlblBvcy5jb2x1bW4pOworICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JUbyhkb2NQb3Mucm93LCBkb2NQb3MuY29sdW1uICsgY2hhcnMs
IGNoYXJzID09PSAwKTsKKyAgICB9OworICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24gPSBm
dW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3NpdGlvbi5y
b3csIHBvc2l0aW9uLmNvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1
bmN0aW9uKHJvdywgY29sdW1uLCBrZWVwRGVzaXJlZENvbHVtbikgeworICAgICAgICB2YXIgZm9s
ZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpOworICAgICAgICBpZiAo
Zm9sZCkgeworICAgICAgICAgICAgcm93ID0gZm9sZC5zdGFydC5yb3c7CisgICAgICAgICAgICBj
b2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuJGtl
ZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UgPSB0cnVlOworICAgICAgICB0aGlzLmxlYWQuc2V0UG9z
aXRpb24ocm93LCBjb2x1bW4pOworICAgICAgICB0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hh
bmdlID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFrZWVwRGVzaXJlZENvbHVtbikKKyAgICAgICAg
ICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBudWxsOworICAgIH07CisgICAgdGhpcy5tb3ZlQ3Vy
c29yVG9TY3JlZW4gPSBmdW5jdGlvbihyb3csIGNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pIHsK
KyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24o
cm93LCBjb2x1bW4pOworICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3Mucm93LCBwb3MuY29s
dW1uLCBrZWVwRGVzaXJlZENvbHVtbik7CisgICAgfTsKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLmxlYWQuZGV0YWNoKCk7CisgICAgICAgIHRoaXMuYW5jaG9y
LmRldGFjaCgpOworICAgICAgICB0aGlzLnNlc3Npb24gPSB0aGlzLmRvYyA9IG51bGw7CisgICAg
fQorCisgICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJhbmdlLmN1cnNvciA9PSByYW5nZS5z
dGFydCk7CisgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSByYW5nZS5kZXNpcmVkQ29sdW1u
IHx8IHRoaXMuJGRlc2lyZWRDb2x1bW47CisgICAgfQorCisgICAgdGhpcy50b09yaWVudGVkUmFu
Z2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgciA9IHRoaXMuZ2V0UmFuZ2UoKTsK
KyAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSBy
LnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHIuc3RhcnQucm93
OworICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHIuZW5kLmNvbHVtbjsKKyAgICAgICAg
ICAgIHJhbmdlLmVuZC5yb3cgPSByLmVuZC5yb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByYW5nZSA9IHI7CisgICAgICAgIH0KKworICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlz
LmlzQmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKKyAgICAgICAgcmFuZ2Uu
ZGVzaXJlZENvbHVtbiA9IHRoaXMuJGRlc2lyZWRDb2x1bW47CisgICAgICAgIHJldHVybiByYW5n
ZTsKKyAgICB9CisKK30pLmNhbGwoU2VsZWN0aW9uLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuU2Vs
ZWN0aW9uID0gU2VsZWN0aW9uOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9yYW5nZScsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7Cit2YXIgUmFuZ2UgPSBmdW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVu
ZFJvdywgZW5kQ29sdW1uKSB7CisgICAgdGhpcy5zdGFydCA9IHsKKyAgICAgICAgcm93OiBzdGFy
dFJvdywKKyAgICAgICAgY29sdW1uOiBzdGFydENvbHVtbgorICAgIH07CisKKyAgICB0aGlzLmVu
ZCA9IHsKKyAgICAgICAgcm93OiBlbmRSb3csCisgICAgICAgIGNvbHVtbjogZW5kQ29sdW1uCisg
ICAgfTsKK307CisKKyhmdW5jdGlvbigpIHsgCisgICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24o
cmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJhbmdlLnN0YXJ0LnJv
dyAmJgorICAgICAgICAgICAgdGhpcy5lbmQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYKKyAgICAg
ICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID09IHJhbmdlLnN0YXJ0LmNvbHVtbiAmJgorICAgICAg
ICAgICAgdGhpcy5lbmQuY29sdW1uID09IHJhbmdlLmVuZC5jb2x1bW4KKyAgICB9OyAKKyAgICB0
aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiAr
IHRoaXMuc3RhcnQucm93ICsgIi8iICsgdGhpcy5zdGFydC5jb2x1bW4gKworICAgICAgICAgICAg
Il0gLT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOwor
ICAgIH07IAorCisgICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7CisgICAgfTsgCisg
ICAgdGhpcy5jb21wYXJlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgY21w
LAorICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAorICAgICAgICAgICAgc3RhcnQgPSByYW5n
ZS5zdGFydDsKKworICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVt
bik7CisgICAgICAgIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgY21wID0gdGhpcy5jb21w
YXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gMSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAg
PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVt
bik7CisgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAg
IHJldHVybiA0MjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OyAKKyAgICB0aGlzLmNvbXBhcmVQ
b2ludCA9IGZ1bmN0aW9uKHApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywg
cC5jb2x1bW4pOworICAgIH07IAorICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJh
bmdlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0g
MCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7CisgICAgfTsKKyAgICB0aGlz
LmludGVyc2VjdHMgPSBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgY21wID0gdGhpcy5j
b21wYXJlUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0g
MCB8fCBjbXAgPT0gMSk7CisgICAgfTsKKyAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQu
Y29sdW1uID09IGNvbHVtbjsKKyAgICB9OyAKKyAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRo
aXMuc3RhcnQuY29sdW1uID09IGNvbHVtbjsKKyAgICB9OyAKKyAgICB0aGlzLnNldFN0YXJ0ID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVj
dCIpIHsKKyAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKKyAgICAg
ICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OworICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1
bW4gPSBjb2x1bW47CisgICAgICAgIH0KKyAgICB9OyAKKyAgICB0aGlzLnNldEVuZCA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7
CisgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSByb3cuY29sdW1uOworICAgICAgICAgICAg
dGhpcy5lbmQucm93ID0gcm93LnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRo
aXMuZW5kLnJvdyA9IHJvdzsKKyAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsK
KyAgICAgICAgfQorICAgIH07IAorICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3cs
IGNvbHVtbikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OyAKKyAgICB0aGlzLmluc2lkZVN0
YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcGFyZShy
b3csIGNvbHVtbikgPT0gMCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1
bW4pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsgCisgICAgdGhpcy5pbnNpZGVFbmQgPSBm
dW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29s
dW1uKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgdGhpcy5jb21wYXJlID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyb3cgPT09IHRoaXMuc3RhcnQucm93KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uID8gLTEgOiAoY29sdW1uID4gdGhpcy5lbmQu
Y29sdW1uID8gMSA6IDApOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChyb3cgPCB0aGlzLnN0YXJ0LnJvdykKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAg
ICBpZiAocm93ID4gdGhpcy5lbmQucm93KQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAg
ICAgaWYgKHRoaXMuc3RhcnQucm93ID09PSByb3cpCisgICAgICAgICAgICByZXR1cm4gY29sdW1u
ID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xOworCisgICAgICAgIGlmICh0aGlzLmVuZC5y
b3cgPT09IHJvdykKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1u
ID8gMCA6IDE7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgICB0aGlzLmNvbXBhcmVT
dGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIGlmICh0aGlzLnN0YXJ0LnJv
dyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21w
YXJlKHJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5jb21wYXJlRW5k
ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSBy
b3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywg
Y29sdW1uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVu
Y3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYg
dGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1u
ID09IGNvbHVtbikgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CisgICAgICAgIH0K
KyAgICB9OworICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykg
eworICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykgeworICAgICAgICAgICAgdmFy
IGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IGxhc3RSb3crMSwKKyAgICAgICAgICAgICAg
ICBjb2x1bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhp
cy5zdGFydC5yb3cgPiBsYXN0Um93KSB7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7CisgICAg
ICAgICAgICAgICAgcm93OiBsYXN0Um93KzEsCisgICAgICAgICAgICAgICAgY29sdW1uOiAwCisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93IDwg
Zmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IHsKKyAgICAgICAgICAgICAgICBy
b3c6IGZpcnN0Um93LAorICAgICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykgeworICAg
ICAgICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LAorICAg
ICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhp
cy5lbmQpOworICAgIH07CisgICAgdGhpcy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
eworICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKKworICAgICAg
ICBpZiAoY21wID09IDApCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgZWxzZSBp
ZiAoY21wID09IC0xKQorICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46
IGNvbHVtbn07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3cs
IGNvbHVtbjogY29sdW1ufTsKKworICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFy
dCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOworICAgIH07CisKKyAgICB0aGlzLmlz
RW1wdHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PSB0
aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gdGhpcy5lbmQuY29sdW1uKTsKKyAg
ICB9OworICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
ICh0aGlzLnN0YXJ0LnJvdyAhPT0gdGhpcy5lbmQucm93KTsKKyAgICB9OworICAgIHRoaXMuY2xv
bmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5z
dGFydCwgdGhpcy5lbmQpOworICAgIH07CisgICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKQorICAgICAgICAgICAgcmV0
dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3cs
IHRoaXMuZW5kLnJvdy0xKSwgMCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG5l
dyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgdGhpcy5lbmQucm93LCAwKQorICAgIH07CisgICAg
dGhpcy50b1NjcmVlblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgc2Ny
ZWVuUG9zU3RhcnQgPQorICAgICAgICAgICAgc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRp
b24odGhpcy5zdGFydCk7CisgICAgICAgIHZhciBzY3JlZW5Qb3NFbmQgPQorICAgICAgICAgICAg
c2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOworCisgICAgICAgIHJl
dHVybiBuZXcgUmFuZ2UoCisgICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBv
c1N0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0Vu
ZC5jb2x1bW4KKyAgICAgICAgKTsKKyAgICB9OworCit9KS5jYWxsKFJhbmdlLnByb3RvdHlwZSk7
CitSYW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgeworICAgIHJldHVybiBu
ZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwor
fTsKKworZXhwb3J0cy5SYW5nZSA9IFJhbmdlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2Rl
L3RleHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS90b2tlbml6ZXIn
LCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywg
J2FjZS91bmljb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisK
K3ZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Cit2YXIg
VGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRl
eHRIaWdobGlnaHRSdWxlczsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ciIp
LkJlaGF2aW91cjsKK3ZhciB1bmljb2RlID0gcmVxdWlyZSgiLi4vdW5pY29kZSIpOworCit2YXIg
TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIo
bmV3IFRleHRIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCkpOworICAgIHRoaXMuJGJlaGF2aW91
ciA9IG5ldyBCZWhhdmlvdXIoKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMudG9r
ZW5SZSA9IG5ldyBSZWdFeHAoIl5bIgorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTAorICAg
ICAgICArIHVuaWNvZGUucGFja2FnZXMuTW4gKyB1bmljb2RlLnBhY2thZ2VzLk1jCisgICAgICAg
ICsgdW5pY29kZS5wYWNrYWdlcy5OZAorICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuUGMgKyAi
XFwkX10rIiwgImciCisgICAgKTsKKyAgICAKKyAgICB0aGlzLm5vblRva2VuUmUgPSBuZXcgUmVn
RXhwKCJeKD86W14iCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MCisgICAgICAgICsgdW5p
Y29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWMKKyAgICAgICAgKyB1bmljb2Rl
LnBhY2thZ2VzLk5kCisgICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArICJcXCRfXXxcc10p
KyIsICJnIgorICAgICk7CisKKyAgICB0aGlzLmdldFRva2VuaXplciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kdG9rZW5pemVyOworICAgIH07CisKKyAgICB0aGlzLnRvZ2ds
ZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsK
KyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBs
aW5lLCB0YWIpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisKKyAgICB0aGlzLmNoZWNr
T3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwg
ZG9jLCByb3cpIHsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGlu
ZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykvKTsKKyAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNyZWF0ZVdvcmtlciA9
IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAg
IHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7CisgICAgICAg
IGlmICghdGhpcy4kZW1iZWRzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy4kbW9kZXMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LiRlbWJlZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYXBwaW5nW3RoaXMuJGVt
YmVkc1tpXV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1d
ID0gbmV3IG1hcHBpbmdbdGhpcy4kZW1iZWRzW2ldXSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2YXIgZGVsZWdhdGlvbnMgPSBbJ3RvZ2dsZUNvbW1lbnRM
aW5lcycsICdnZXROZXh0TGluZUluZGVudCcsICdjaGVja091dGRlbnQnLCAnYXV0b091dGRlbnQn
LCAndHJhbnNmb3JtQWN0aW9uJ107CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxl
Z2F0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgKGZ1bmN0aW9uKHNjb3BlKSB7Cisg
ICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBkZWxlZ2F0aW9uc1tpXTsKKyAgICAgICAg
ICAgICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gc2NvcGVbZnVuY3Rpb25OYW1lXTsKKyAgICAgICAg
ICAgICAgc2NvcGVbZGVsZWdhdGlvbnNbaV1dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBkZWZh
dWx0SGFuZGxlcik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKHRoaXMpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLiRkZWxlZ2F0b3IgPSBmdW5jdGlvbihtZXRo
b2QsIGFyZ3MsIGRlZmF1bHRIYW5kbGVyKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IGFyZ3NbMF07
CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGVtYmVkcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1d
KSBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHNwbGl0ID0gc3RhdGUu
c3BsaXQodGhpcy4kZW1iZWRzW2ldKTsKKyAgICAgICAgICAgIGlmICghc3BsaXRbMF0gJiYgc3Bs
aXRbMV0pIHsKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gc3BsaXRbMV07CisgICAgICAgICAg
ICAgICAgdmFyIG1vZGUgPSB0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1dOworICAgICAgICAg
ICAgICAgIHJldHVybiBtb2RlW21ldGhvZF0uYXBwbHkobW9kZSwgYXJncyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldCA9IGRlZmF1bHRIYW5kbGVyLmFwcGx5KHRo
aXMsIGFyZ3MpOworICAgICAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXIgPyByZXQgOiB1bmRlZmlu
ZWQ7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnRyYW5zZm9ybUFjdGlvbiA9IGZ1bmN0aW9uKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcGFyYW0pIHsKKyAgICAgICAgaWYgKHRoaXMu
JGJlaGF2aW91cikgeworICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSB0aGlzLiRiZWhhdmlv
dXIuZ2V0QmVoYXZpb3VycygpOworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91
cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGJlaGF2aW91cnNba2V5XVthY3Rpb25dLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCit9
KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvdG9rZW5pemVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK3ZhciBUb2tlbml6ZXIg
PSBmdW5jdGlvbihydWxlcywgZmxhZykgeworICAgIGZsYWcgPSBmbGFnID8gImciICsgZmxhZyA6
ICJnIjsKKyAgICB0aGlzLnN0YXRlcyA9IHJ1bGVzOworCisgICAgdGhpcy5yZWdFeHBzID0ge307
CisgICAgdGhpcy5tYXRjaE1hcHBpbmdzID0ge307CisgICAgZm9yICh2YXIga2V5IGluIHRoaXMu
c3RhdGVzKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW2tleV07CisgICAgICAg
IHZhciBydWxlUmVnRXhwcyA9IFtdOworICAgICAgICB2YXIgbWF0Y2hUb3RhbCA9IDA7CisgICAg
ICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2tleV0gPSB7ZGVmYXVsdFRva2Vu
OiAidGV4dCJ9OworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVbaV07CisgICAgICAgICAgICBpZiAo
cnVsZS5kZWZhdWx0VG9rZW4pIHsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmRlZmF1bHRUb2tl
biA9IHJ1bGUuZGVmYXVsdFRva2VuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApCisg
ICAgICAgICAgICAgICAgcnVsZS5yZWdleCA9IHJ1bGUucmVnZXgudG9TdHJpbmcoKS5zbGljZSgx
LCAtMSk7CisgICAgICAgICAgICB2YXIgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXg7CisgICAg
ICAgICAgICB2YXIgbWF0Y2hjb3VudCA9IG5ldyBSZWdFeHAoIig/OigiICsgYWRqdXN0ZWRyZWdl
eCArICIpfCguKSkiKS5leGVjKCJhIikubGVuZ3RoIC0gMjsKKyAgICAgICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KHJ1bGUudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUudG9rZW4u
bGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9r
ZW5bMF07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcnVs
ZS50b2tlbkFycmF5ID0gcnVsZS50b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tl
biA9IHRoaXMuJGFycmF5VG9rZW5zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG1hdGNoY291bnQgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KC9cXFxkLy50ZXN0KHJ1bGUucmVnZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdGVk
cmVnZXggPSBydWxlLnJlZ2V4LnJlcGxhY2UoL1xcKFswLTldKykvZywgZnVuY3Rpb24gKG1hdGNo
LCBkaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyAocGFyc2VJ
bnQoZGlnaXQsIDEwKSArIG1hdGNoVG90YWwgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3Vu
dCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkcmVnZXggPSB0aGlzLnJlbW92ZUNh
cHR1cmluZ0dyb3VwcyhydWxlLnJlZ2V4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFydWxlLnNwbGl0UmVnZXgpCisgICAgICAgICAgICAgICAgICAgIHJ1bGUuc3Bs
aXRSZWdleCA9IHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAocnVsZS5yZWdleCwgZmxhZyk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1hcHBpbmdbbWF0Y2hUb3RhbF0gPSBpOworICAg
ICAgICAgICAgbWF0Y2hUb3RhbCArPSBtYXRjaGNvdW50OworCisgICAgICAgICAgICBydWxlUmVn
RXhwcy5wdXNoKGFkanVzdGVkcmVnZXgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZWdF
eHBzW2tleV0gPSBuZXcgUmVnRXhwKCIoIiArIHJ1bGVSZWdFeHBzLmpvaW4oIil8KCIpICsgIil8
KCQpIiwgZmxhZyk7CisgICAgfQorfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGFycmF5
VG9rZW5zID0gZnVuY3Rpb24oc3RyKSB7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAg
cmV0dXJuIFtdOworICAgICAgICB2YXIgdmFsdWVzID0gc3RyLnNwbGl0KHRoaXMuc3BsaXRSZWdl
eCkKKyAgICAgICAgdmFyIHRva2VucyA9IFtdOworICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLnRv
a2VuQXJyYXk7CisgICAgICAgIGlmICh0eXBlcy5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCAtIDIp
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cuY29uc29sZSkKKyAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKHR5cGVzLmxlbmd0aCAsIHZhbHVlcy5sZW5ndGggLSAyLCBzdHIsIHRoaXMuc3Bs
aXRSZWdleCk7CisgICAgICAgICAgICByZXR1cm4gW3t0eXBlOiAiZXJyb3IuaW52YWxpZCIsIHZh
bHVlOiBzdHJ9XTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2kgKyAxXSkgeworICAgICAg
ICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoXSA9IHsKKyAgICAgICAgICAgICAgICAgICAg
dHlwZTogdHlwZXNbaV0sCisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaSArIDFd
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9rZW5zOworICAgIH07CisgICAgCisgICAgdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91
cHMgPSBmdW5jdGlvbihzcmMpIHsKKyAgICAgICAgdmFyIHIgPSBzcmMucmVwbGFjZSgKKyAgICAg
ICAgICAgIC9cWyg/OlxcLnxbXlxdXSkqP1xdfFxcLnxcKFw/Wzo9IV18KFwoKS9nLAorICAgICAg
ICAgICAgZnVuY3Rpb24oeCwgeSkge3JldHVybiB5ID8gIig/OiIgOiB4O30KKyAgICAgICAgKTsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLmNyZWF0ZVNwbGl0dGVy
UmVnZXhwID0gZnVuY3Rpb24oc3JjLCBmbGFnKSB7CisgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNl
KC9cKFw/PShbXigpXXxcXC4pKj9cKSQvLCAiIik7CisgICAgICAgIHJldHVybiBuZXcgUmVnRXhw
KHNyYywgZmxhZyk7CisgICAgfTsKKyAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihs
aW5lLCBzdGFydFN0YXRlKSB7CisgICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBzdGFy
dFN0YXRlICE9ICJzdHJpbmciKSB7CisgICAgICAgICAgICB2YXIgc3RhY2sgPSBzdGFydFN0YXRl
LnNsaWNlKDApOworICAgICAgICAgICAgc3RhcnRTdGF0ZSA9IHN0YWNrWzBdOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHZhciBzdGFjayA9IFtdOworCisgICAgICAgIHZhciBjdXJyZW50
U3RhdGUgPSBzdGFydFN0YXRlIHx8ICJzdGFydCI7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMu
c3RhdGVzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1h
cHBpbmdzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgIHZhciByZSA9IHRoaXMucmVnRXhwc1tjdXJy
ZW50U3RhdGVdOworICAgICAgICByZS5sYXN0SW5kZXggPSAwOworCisgICAgICAgIHZhciBtYXRj
aCwgdG9rZW5zID0gW107CisgICAgICAgIHZhciBsYXN0SW5kZXggPSAwOworCisgICAgICAgIHZh
ciB0b2tlbiA9IHt0eXBlOiBudWxsLCB2YWx1ZTogIiJ9OworCisgICAgICAgIHdoaWxlIChtYXRj
aCA9IHJlLmV4ZWMobGluZSkpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gbWFwcGluZy5kZWZh
dWx0VG9rZW47CisgICAgICAgICAgICB2YXIgcnVsZSA9IG51bGw7CisgICAgICAgICAgICB2YXIg
dmFsdWUgPSBtYXRjaFswXTsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IHJlLmxhc3RJbmRleDsK
KworICAgICAgICAgICAgaWYgKGluZGV4IC0gdmFsdWUubGVuZ3RoID4gbGFzdEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHNraXBwZWQgPSBsaW5lLnN1YnN0cmluZyhsYXN0SW5kZXgsIGlu
ZGV4IC0gdmFsdWUubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSB0
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHNraXBwZWQ7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUp
CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiBza2lwcGVkfTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbWF0Y2gubGVuZ3RoLTI7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFtpICsg
MV0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICBydWxlID0gc3RhdGVbbWFwcGluZ1tpXV07CisgICAgICAgICAgICAgICAgdHlw
ZSA9IHR5cGVvZiBydWxlLnRva2VuID09ICJmdW5jdGlvbiIKKyAgICAgICAgICAgICAgICAgICAg
PyBydWxlLnRva2VuKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKQorICAgICAgICAgICAgICAg
ICAgICA6IHJ1bGUudG9rZW47CisKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY29u
c29sZSAmJiBjb25zb2xlLmVycm9yICYmIGNvbnNvbGUuZXJyb3IoY3VycmVudFN0YXRlLCAiZG9l
c24ndCBleGlzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gInN0
YXJ0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVu
dFN0YXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYXBw
aW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07CisgICAgICAgICAgICAgICAg
ICAgIGxhc3RJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICByZSA9IHRoaXMucmVn
RXhwc1tjdXJyZW50U3RhdGVdOworICAgICAgICAgICAgICAgICAgICByZS5sYXN0SW5kZXggPSBp
bmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgdHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCFydWxl
IHx8IHJ1bGUubWVyZ2UgIT09IGZhbHNlKSAmJiB0b2tlbi50eXBlID09PSB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiB2YWx1ZX07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5w
dXNoKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogbnVsbCwgdmFs
dWU6ICIifTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxl
bmd0aDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godHlwZVtpXSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGFz
dEluZGV4ID09IGxpbmUubGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBsYXN0SW5kZXggPSBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50
eXBlKQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworCisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICB0b2tlbnMgOiB0b2tlbnMsCisgICAgICAgICAgICBzdGF0ZSA6IHN0YWNr
Lmxlbmd0aCA/IHN0YWNrIDogY3VycmVudFN0YXRlCisgICAgICAgIH07CisgICAgfTsKKworfSku
Y2FsbChUb2tlbml6ZXIucHJvdG90eXBlKTsKKworZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6
ZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZyddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4u
L2xpYi9sYW5nIik7CisKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKKwor
ICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRv
a2VuIDogImVtcHR5X2xpbmUiLAorICAgICAgICAgICAgcmVnZXggOiAnXiQnCisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgIHRva2VuIDogInRleHQiLAorICAgICAgICAgICAgcmVnZXggOiAiLisi
CisgICAgICAgIH1dCisgICAgfTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuYWRk
UnVsZXMgPSBmdW5jdGlvbihydWxlcywgcHJlZml4KSB7CisgICAgICAgIGZvciAodmFyIGtleSBp
biBydWxlcykgeworICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNba2V5XTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcnVsZSA9IHN0YXRlW2ldOworICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcHJlZml4ICsgcnVsZS5uZXh0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuJHJ1bGVz
W3ByZWZpeCArIGtleV0gPSBzdGF0ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLmdl
dFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRydWxlczsKKyAgICB9
OworCisgICAgdGhpcy5lbWJlZFJ1bGVzID0gZnVuY3Rpb24gKEhpZ2hsaWdodFJ1bGVzLCBwcmVm
aXgsIGVzY2FwZVJ1bGVzLCBzdGF0ZXMsIGFwcGVuZCkgeworICAgICAgICB2YXIgZW1iZWRSdWxl
cyA9IG5ldyBIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCk7CisgICAgICAgIGlmIChzdGF0ZXMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgICAgIHN0YXRlc1tpXSA9IHByZWZpeCArIHN0YXRlc1tpXTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg
a2V5IGluIGVtYmVkUnVsZXMpCisgICAgICAgICAgICAgICAgc3RhdGVzLnB1c2gocHJlZml4ICsg
a2V5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5hZGRSdWxlcyhlbWJlZFJ1
bGVzLCBwcmVmaXgpOworCisgICAgICAgIGlmIChlc2NhcGVSdWxlcykgeworICAgICAgICAgICAg
dmFyIGFkZFJ1bGVzID0gQXJyYXkucHJvdG90eXBlW2FwcGVuZCA/ICJwdXNoIiA6ICJ1bnNoaWZ0
Il07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBhZGRSdWxlcy5hcHBseSh0aGlzLiRydWxlc1tzdGF0ZXNbaV1dLCBs
YW5nLmRlZXBDb3B5KGVzY2FwZVJ1bGVzKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRo
aXMuJGVtYmVkcykKKyAgICAgICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdOworICAgICAgICB0aGlz
LiRlbWJlZHMucHVzaChwcmVmaXgpOworICAgIH0KKworICAgIHRoaXMuZ2V0RW1iZWRzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRlbWJlZHM7CisgICAgfTsKKyAgICAKKyAg
ICB0aGlzLm5vcm1hbGl6ZVJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZCA9IDA7
CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRydWxlcykgeworICAgICAgICAgICAgdmFy
IHN0YXRlID0gdGhpcy4kcnVsZXNba2V5XTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3RhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0YXRl
W2ldOworICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQgJiYgQXJyYXkuaXNBcnJheShydWxl
Lm5leHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZU5hbWUgPSBydWxlLnN0YXRl
TmFtZSB8fCAoInN0YXRlIiArIGlkKyspOworICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxl
c1tzdGF0ZU5hbWVdID0gcnVsZS5uZXh0OworICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQg
PSBzdGF0ZU5hbWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydWxl
LnJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXS5wdXNoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tyXS5wdXNoLmFwcGx5KHRoaXMuJHJ1
bGVzW3JdLCBydWxlLnJ1bGVzW3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNbcl0gPSBydWxlLnJ1bGVz
W3JdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydWxlLmluY2x1ZGUgfHwgdHlw
ZW9mIHJ1bGUgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBb
aSwgMV0uY29uY2F0KHRoaXMuJHJ1bGVzW3J1bGUuaW5jbHVkZSB8fCBydWxlXSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChydWxlLm5vRXNjYXBlKQorICAgICAgICAgICAgICAgICAgICAgICAg
YXJncyA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uKHgpIHtyZXR1cm4gIXgubmV4dDt9KTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlLmFwcGx5KHN0YXRlLCBhcmdzKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5j
cmVhdGVLZXl3b3JkTWFwcGVyID0gZnVuY3Rpb24obWFwLCBkZWZhdWx0VG9rZW4sIGlnbm9yZUNh
c2UsIHNwbGl0Q2hhcikgeworICAgICAgICB2YXIga2V5d29yZHMgPSBPYmplY3QuY3JlYXRlKG51
bGwpOworICAgICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1l
KSB7CisgICAgICAgICAgICB2YXIgYSA9IG1hcFtjbGFzc05hbWVdOworICAgICAgICAgICAgaWYg
KGlnbm9yZUNhc2UpCisgICAgICAgICAgICAgICAgYSA9IGEudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgICAgIHZhciBsaXN0ID0gYS5zcGxpdChzcGxpdENoYXIgfHwgInwiKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOyApCisgICAgICAgICAgICAgICAga2V5d29y
ZHNbbGlzdFtpXV0gPSBjbGFzc05hbWU7CisgICAgICAgIH0pOworICAgICAgICBtYXAgPSBudWxs
OworICAgICAgICByZXR1cm4gaWdub3JlQ2FzZQorICAgICAgICAgICAgPyBmdW5jdGlvbih2YWx1
ZSkge3JldHVybiBrZXl3b3Jkc1t2YWx1ZS50b0xvd2VyQ2FzZSgpXSB8fCBkZWZhdWx0VG9rZW4g
fQorICAgICAgICAgICAgOiBmdW5jdGlvbih2YWx1ZSkge3JldHVybiBrZXl3b3Jkc1t2YWx1ZV0g
fHwgZGVmYXVsdFRva2VuIH07CisgICAgfQorCisgICAgdGhpcy5nZXRLZXl3b3JkcyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4ka2V5d29yZHM7CisgICAgfTsKKworfSkuY2Fs
bChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKKworZXhwb3J0cy5UZXh0SGlnaGxpZ2h0
UnVsZXMgPSBUZXh0SGlnaGxpZ2h0UnVsZXM7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUv
YmVoYXZpb3VyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgQmVoYXZpb3VyID0gZnVuY3Rpb24o
KSB7CisgICB0aGlzLiRiZWhhdmlvdXJzID0ge307Cit9OworCisoZnVuY3Rpb24gKCkgeworCisg
ICAgdGhpcy5hZGQgPSBmdW5jdGlvbiAobmFtZSwgYWN0aW9uLCBjYWxsYmFjaykgeworICAgICAg
ICBzd2l0Y2ggKHVuZGVmaW5lZCkgeworICAgICAgICAgIGNhc2UgdGhpcy4kYmVoYXZpb3VyczoK
KyAgICAgICAgICAgICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9OworICAgICAgICAgIGNhc2UgdGhp
cy4kYmVoYXZpb3Vyc1tuYW1lXToKKyAgICAgICAgICAgICAgdGhpcy4kYmVoYXZpb3Vyc1tuYW1l
XSA9IHt9OworICAgICAgICB9CisgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV1bYWN0aW9u
XSA9IGNhbGxiYWNrOworICAgIH0KKyAgICAKKyAgICB0aGlzLmFkZEJlaGF2aW91cnMgPSBmdW5j
dGlvbiAoYmVoYXZpb3VycykgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gYmVoYXZpb3Vycykg
eworICAgICAgICAgICAgZm9yICh2YXIgYWN0aW9uIGluIGJlaGF2aW91cnNba2V5XSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgYWN0aW9uLCBiZWhhdmlvdXJzW2tleV1bYWN0aW9u
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGhpcy5yZW1v
dmUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3VycyAmJiB0
aGlzLiRiZWhhdmlvdXJzW25hbWVdKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy4kYmVoYXZp
b3Vyc1tuYW1lXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLmluaGVyaXQgPSBm
dW5jdGlvbiAobW9kZSwgZmlsdGVyKSB7CisgICAgICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gImZ1
bmN0aW9uIikgeworICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSBuZXcgbW9kZSgpLmdldEJl
aGF2aW91cnMoZmlsdGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBiZWhh
dmlvdXJzID0gbW9kZS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5hZGRCZWhhdmlvdXJzKGJlaGF2aW91cnMpOworICAgIH0KKyAgICAKKyAgICB0aGlzLmdl
dEJlaGF2aW91cnMgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgICAgIGlmICghZmlsdGVyKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy4kYmVoYXZpb3VyczsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhciByZXQgPSB7fQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmaWx0ZXIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy4kYmVoYXZp
b3Vyc1tmaWx0ZXJbaV1dKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFtmaWx0ZXJbaV1dID0g
dGhpcy4kYmVoYXZpb3Vyc1tmaWx0ZXJbaV1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKK30pLmNh
bGwoQmVoYXZpb3VyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuQmVoYXZpb3VyID0gQmVoYXZpb3Vy
OworfSk7CithY2UuZGVmaW5lKCdhY2UvdW5pY29kZScsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CitleHBvcnRz
LnBhY2thZ2VzID0ge307CisKK2FkZFVuaWNvZGVQYWNrYWdlKHsKKyAgICBMOiAgIjAwNDEtMDA1
QTAwNjEtMDA3QTAwQUEwMEI1MDBCQTAwQzAtMDBENjAwRDgtMDBGNjAwRjgtMDJDMTAyQzYtMDJE
MTAyRTAtMDJFNDAyRUMwMkVFMDM3MC0wMzc0MDM3NjAzNzcwMzdBLTAzN0QwMzg2MDM4OC0wMzhB
MDM4QzAzOEUtMDNBMTAzQTMtMDNGNTAzRjctMDQ4MTA0OEEtMDUyNTA1MzEtMDU1NjA1NTkwNTYx
LTA1ODcwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkU1
MDZFNjA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3MkYwNzRELTA3QTUwN0IxMDdDQS0w
N0VBMDdGNDA3RjUwN0ZBMDgwMC0wODE1MDgxQTA4MjQwODI4MDkwNC0wOTM5MDkzRDA5NTAwOTU4
LTA5NjEwOTcxMDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIw
MDlCMjA5QjYtMDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBB
MEYwQTEwMEExMy0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVD
MEE1RTBBNzItMEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIz
MEFCNS0wQUI5MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0w
QjMwMEIzMjBCMzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4
QTBCOEUtMEI5MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEw
QkFFLTBCQjkwQkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5
MEMzRDBDNTgwQzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMw
Q0I1LTBDQjkwQ0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0w
RDM5MEQzRDBENjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBE
QzAtMERDNjBFMDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ2MEU4MTBFODIwRTg0MEU4NzBFODgwRThB
MEU4RDBFOTQtMEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAw
RUIyMEVCMzBFQkQwRUMwLTBFQzQwRUM2MEVEQzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4
OC0wRjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3
MDEwNzUtMTA4MTEwOEUxMEEwLTEwQzUxMEQwLTEwRkExMEZDMTEwMC0xMjQ4MTI0QS0xMjREMTI1
MC0xMjU2MTI1ODEyNUEtMTI1RDEyNjAtMTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEy
QjgtMTJCRTEyQzAxMkMyLTEyQzUxMkM4LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUEx
MzgwLTEzOEYxM0EwLTEzRjQxNDAxLTE2NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAw
LTE3MEMxNzBFLTE3MTExNzIwLTE3MzExNzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3
QjMxN0Q3MTdEQzE4MjAtMTg3NzE4ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5
NkQxOTcwLTE5NzQxOTgwLTE5QUIxOUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQUE3MUIwNS0x
QjMzMUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFDNEYxQzVBLTFDN0Qx
Q0U5LTFDRUMxQ0VFLTFDRjExRDAwLTFEQkYxRTAwLTFGMTUxRjE4LTFGMUQxRjIwLTFGNDUxRjQ4
LTFGNEQxRjUwLTFGNTcxRjU5MUY1QjFGNUQxRjVGLTFGN0QxRjgwLTFGQjQxRkI2LTFGQkMxRkJF
MUZDMi0xRkM0MUZDNi0xRkNDMUZEMC0xRkQzMUZENi0xRkRCMUZFMC0xRkVDMUZGMi0xRkY0MUZG
Ni0xRkZDMjA3MTIwN0YyMDkwLTIwOTQyMTAyMjEwNzIxMEEtMjExMzIxMTUyMTE5LTIxMUQyMTI0
MjEyNjIxMjgyMTJBLTIxMkQyMTJGLTIxMzkyMTNDLTIxM0YyMTQ1LTIxNDkyMTRFMjE4MzIxODQy
QzAwLTJDMkUyQzMwLTJDNUUyQzYwLTJDRTQyQ0VCLTJDRUUyRDAwLTJEMjUyRDMwLTJENjUyRDZG
MkQ4MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJFMkRDMC0yREM2MkRD
OC0yRENFMkREMC0yREQ2MkREOC0yRERFMkUyRjMwMDUzMDA2MzAzMS0zMDM1MzAzQjMwM0MzMDQx
LTMwOTYzMDlELTMwOUYzMEExLTMwRkEzMEZDLTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMx
QjczMUYwLTMxRkYzNDAwLTREQjU0RTAwLTlGQ0JBMDAwLUE0OENBNEQwLUE0RkRBNTAwLUE2MENB
NjEwLUE2MUZBNjJBQTYyQkE2NDAtQTY1RkE2NjItQTY2RUE2N0YtQTY5N0E2QTAtQTZFNUE3MTct
QTcxRkE3MjItQTc4OEE3OEJBNzhDQTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIy
QTg0MC1BODczQTg4Mi1BOEIzQThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3
Q0E5ODQtQTlCMkE5Q0ZBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNzZBQTdBQUE4
MC1BQUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCLUFBRERBQkMwLUFCRTJBQzAw
LUQ3QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjAwLUZC
MDZGQjEzLUZCMTdGQjFERkIxRi1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0
M0ZCNDRGQjQ2LUZCQjFGQkQzLUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZF
NzRGRTc2LUZFRkNGRjIxLUZGM0FGRjQxLUZGNUFGRjY2LUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZG
RkQyLUZGRDdGRkRBLUZGREMiLAorICAgIExsOiAiMDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBERi0w
MEY2MDBGOC0wMEZGMDEwMTAxMDMwMTA1MDEwNzAxMDkwMTBCMDEwRDAxMEYwMTExMDExMzAxMTUw
MTE3MDExOTAxMUIwMTFEMDExRjAxMjEwMTIzMDEyNTAxMjcwMTI5MDEyQjAxMkQwMTJGMDEzMTAx
MzMwMTM1MDEzNzAxMzgwMTNBMDEzQzAxM0UwMTQwMDE0MjAxNDQwMTQ2MDE0ODAxNDkwMTRCMDE0
RDAxNEYwMTUxMDE1MzAxNTUwMTU3MDE1OTAxNUIwMTVEMDE1RjAxNjEwMTYzMDE2NTAxNjcwMTY5
MDE2QjAxNkQwMTZGMDE3MTAxNzMwMTc1MDE3NzAxN0EwMTdDMDE3RS0wMTgwMDE4MzAxODUwMTg4
MDE4QzAxOEQwMTkyMDE5NTAxOTktMDE5QjAxOUUwMUExMDFBMzAxQTUwMUE4MDFBQTAxQUIwMUFE
MDFCMDAxQjQwMUI2MDFCOTAxQkEwMUJELTAxQkYwMUM2MDFDOTAxQ0MwMUNFMDFEMDAxRDIwMUQ0
MDFENjAxRDgwMURBMDFEQzAxREQwMURGMDFFMTAxRTMwMUU1MDFFNzAxRTkwMUVCMDFFRDAxRUYw
MUYwMDFGMzAxRjUwMUY5MDFGQjAxRkQwMUZGMDIwMTAyMDMwMjA1MDIwNzAyMDkwMjBCMDIwRDAy
MEYwMjExMDIxMzAyMTUwMjE3MDIxOTAyMUIwMjFEMDIxRjAyMjEwMjIzMDIyNTAyMjcwMjI5MDIy
QjAyMkQwMjJGMDIzMTAyMzMtMDIzOTAyM0MwMjNGMDI0MDAyNDIwMjQ3MDI0OTAyNEIwMjREMDI0
Ri0wMjkzMDI5NS0wMkFGMDM3MTAzNzMwMzc3MDM3Qi0wMzdEMDM5MDAzQUMtMDNDRTAzRDAwM0Qx
MDNENS0wM0Q3MDNEOTAzREIwM0REMDNERjAzRTEwM0UzMDNFNTAzRTcwM0U5MDNFQjAzRUQwM0VG
LTAzRjMwM0Y1MDNGODAzRkIwM0ZDMDQzMC0wNDVGMDQ2MTA0NjMwNDY1MDQ2NzA0NjkwNDZCMDQ2
RDA0NkYwNDcxMDQ3MzA0NzUwNDc3MDQ3OTA0N0IwNDdEMDQ3RjA0ODEwNDhCMDQ4RDA0OEYwNDkx
MDQ5MzA0OTUwNDk3MDQ5OTA0OUIwNDlEMDQ5RjA0QTEwNEEzMDRBNTA0QTcwNEE5MDRBQjA0QUQw
NEFGMDRCMTA0QjMwNEI1MDRCNzA0QjkwNEJCMDRCRDA0QkYwNEMyMDRDNDA0QzYwNEM4MDRDQTA0
Q0MwNENFMDRDRjA0RDEwNEQzMDRENTA0RDcwNEQ5MDREQjA0REQwNERGMDRFMTA0RTMwNEU1MDRF
NzA0RTkwNEVCMDRFRDA0RUYwNEYxMDRGMzA0RjUwNEY3MDRGOTA0RkIwNEZEMDRGRjA1MDEwNTAz
MDUwNTA1MDcwNTA5MDUwQjA1MEQwNTBGMDUxMTA1MTMwNTE1MDUxNzA1MTkwNTFCMDUxRDA1MUYw
NTIxMDUyMzA1MjUwNTYxLTA1ODcxRDAwLTFEMkIxRDYyLTFENzcxRDc5LTFEOUExRTAxMUUwMzFF
MDUxRTA3MUUwOTFFMEIxRTBEMUUwRjFFMTExRTEzMUUxNTFFMTcxRTE5MUUxQjFFMUQxRTFGMUUy
MTFFMjMxRTI1MUUyNzFFMjkxRTJCMUUyRDFFMkYxRTMxMUUzMzFFMzUxRTM3MUUzOTFFM0IxRTNE
MUUzRjFFNDExRTQzMUU0NTFFNDcxRTQ5MUU0QjFFNEQxRTRGMUU1MTFFNTMxRTU1MUU1NzFFNTkx
RTVCMUU1RDFFNUYxRTYxMUU2MzFFNjUxRTY3MUU2OTFFNkIxRTZEMUU2RjFFNzExRTczMUU3NTFF
NzcxRTc5MUU3QjFFN0QxRTdGMUU4MTFFODMxRTg1MUU4NzFFODkxRThCMUU4RDFFOEYxRTkxMUU5
MzFFOTUtMUU5RDFFOUYxRUExMUVBMzFFQTUxRUE3MUVBOTFFQUIxRUFEMUVBRjFFQjExRUIzMUVC
NTFFQjcxRUI5MUVCQjFFQkQxRUJGMUVDMTFFQzMxRUM1MUVDNzFFQzkxRUNCMUVDRDFFQ0YxRUQx
MUVEMzFFRDUxRUQ3MUVEOTFFREIxRUREMUVERjFFRTExRUUzMUVFNTFFRTcxRUU5MUVFQjFFRUQx
RUVGMUVGMTFFRjMxRUY1MUVGNzFFRjkxRUZCMUVGRDFFRkYtMUYwNzFGMTAtMUYxNTFGMjAtMUYy
NzFGMzAtMUYzNzFGNDAtMUY0NTFGNTAtMUY1NzFGNjAtMUY2NzFGNzAtMUY3RDFGODAtMUY4NzFG
OTAtMUY5NzFGQTAtMUZBNzFGQjAtMUZCNDFGQjYxRkI3MUZCRTFGQzItMUZDNDFGQzYxRkM3MUZE
MC0xRkQzMUZENjFGRDcxRkUwLTFGRTcxRkYyLTFGRjQxRkY2MUZGNzIxMEEyMTBFMjEwRjIxMTMy
MTJGMjEzNDIxMzkyMTNDMjEzRDIxNDYtMjE0OTIxNEUyMTg0MkMzMC0yQzVFMkM2MTJDNjUyQzY2
MkM2ODJDNkEyQzZDMkM3MTJDNzMyQzc0MkM3Ni0yQzdDMkM4MTJDODMyQzg1MkM4NzJDODkyQzhC
MkM4RDJDOEYyQzkxMkM5MzJDOTUyQzk3MkM5OTJDOUIyQzlEMkM5RjJDQTEyQ0EzMkNBNTJDQTcy
Q0E5MkNBQjJDQUQyQ0FGMkNCMTJDQjMyQ0I1MkNCNzJDQjkyQ0JCMkNCRDJDQkYyQ0MxMkNDMzJD
QzUyQ0M3MkNDOTJDQ0IyQ0NEMkNDRjJDRDEyQ0QzMkNENTJDRDcyQ0Q5MkNEQjJDREQyQ0RGMkNF
MTJDRTMyQ0U0MkNFQzJDRUUyRDAwLTJEMjVBNjQxQTY0M0E2NDVBNjQ3QTY0OUE2NEJBNjREQTY0
RkE2NTFBNjUzQTY1NUE2NTdBNjU5QTY1QkE2NURBNjVGQTY2M0E2NjVBNjY3QTY2OUE2NkJBNjZE
QTY4MUE2ODNBNjg1QTY4N0E2ODlBNjhCQTY4REE2OEZBNjkxQTY5M0E2OTVBNjk3QTcyM0E3MjVB
NzI3QTcyOUE3MkJBNzJEQTcyRi1BNzMxQTczM0E3MzVBNzM3QTczOUE3M0JBNzNEQTczRkE3NDFB
NzQzQTc0NUE3NDdBNzQ5QTc0QkE3NERBNzRGQTc1MUE3NTNBNzU1QTc1N0E3NTlBNzVCQTc1REE3
NUZBNzYxQTc2M0E3NjVBNzY3QTc2OUE3NkJBNzZEQTc2RkE3NzEtQTc3OEE3N0FBNzdDQTc3RkE3
ODFBNzgzQTc4NUE3ODdBNzhDRkIwMC1GQjA2RkIxMy1GQjE3RkY0MS1GRjVBIiwKKyAgICBMdTog
IjAwNDEtMDA1QTAwQzAtMDBENjAwRDgtMDBERTAxMDAwMTAyMDEwNDAxMDYwMTA4MDEwQTAxMEMw
MTBFMDExMDAxMTIwMTE0MDExNjAxMTgwMTFBMDExQzAxMUUwMTIwMDEyMjAxMjQwMTI2MDEyODAx
MkEwMTJDMDEyRTAxMzAwMTMyMDEzNDAxMzYwMTM5MDEzQjAxM0QwMTNGMDE0MTAxNDMwMTQ1MDE0
NzAxNEEwMTRDMDE0RTAxNTAwMTUyMDE1NDAxNTYwMTU4MDE1QTAxNUMwMTVFMDE2MDAxNjIwMTY0
MDE2NjAxNjgwMTZBMDE2QzAxNkUwMTcwMDE3MjAxNzQwMTc2MDE3ODAxNzkwMTdCMDE3RDAxODEw
MTgyMDE4NDAxODYwMTg3MDE4OS0wMThCMDE4RS0wMTkxMDE5MzAxOTQwMTk2LTAxOTgwMTlDMDE5
RDAxOUYwMUEwMDFBMjAxQTQwMUE2MDFBNzAxQTkwMUFDMDFBRTAxQUYwMUIxLTAxQjMwMUI1MDFC
NzAxQjgwMUJDMDFDNDAxQzcwMUNBMDFDRDAxQ0YwMUQxMDFEMzAxRDUwMUQ3MDFEOTAxREIwMURF
MDFFMDAxRTIwMUU0MDFFNjAxRTgwMUVBMDFFQzAxRUUwMUYxMDFGNDAxRjYtMDFGODAxRkEwMUZD
MDFGRTAyMDAwMjAyMDIwNDAyMDYwMjA4MDIwQTAyMEMwMjBFMDIxMDAyMTIwMjE0MDIxNjAyMTgw
MjFBMDIxQzAyMUUwMjIwMDIyMjAyMjQwMjI2MDIyODAyMkEwMjJDMDIyRTAyMzAwMjMyMDIzQTAy
M0IwMjNEMDIzRTAyNDEwMjQzLTAyNDYwMjQ4MDI0QTAyNEMwMjRFMDM3MDAzNzIwMzc2MDM4NjAz
ODgtMDM4QTAzOEMwMzhFMDM4RjAzOTEtMDNBMTAzQTMtMDNBQjAzQ0YwM0QyLTAzRDQwM0Q4MDNE
QTAzREMwM0RFMDNFMDAzRTIwM0U0MDNFNjAzRTgwM0VBMDNFQzAzRUUwM0Y0MDNGNzAzRjkwM0ZB
MDNGRC0wNDJGMDQ2MDA0NjIwNDY0MDQ2NjA0NjgwNDZBMDQ2QzA0NkUwNDcwMDQ3MjA0NzQwNDc2
MDQ3ODA0N0EwNDdDMDQ3RTA0ODAwNDhBMDQ4QzA0OEUwNDkwMDQ5MjA0OTQwNDk2MDQ5ODA0OUEw
NDlDMDQ5RTA0QTAwNEEyMDRBNDA0QTYwNEE4MDRBQTA0QUMwNEFFMDRCMDA0QjIwNEI0MDRCNjA0
QjgwNEJBMDRCQzA0QkUwNEMwMDRDMTA0QzMwNEM1MDRDNzA0QzkwNENCMDRDRDA0RDAwNEQyMDRE
NDA0RDYwNEQ4MDREQTA0REMwNERFMDRFMDA0RTIwNEU0MDRFNjA0RTgwNEVBMDRFQzA0RUUwNEYw
MDRGMjA0RjQwNEY2MDRGODA0RkEwNEZDMDRGRTA1MDAwNTAyMDUwNDA1MDYwNTA4MDUwQTA1MEMw
NTBFMDUxMDA1MTIwNTE0MDUxNjA1MTgwNTFBMDUxQzA1MUUwNTIwMDUyMjA1MjQwNTMxLTA1NTYx
MEEwLTEwQzUxRTAwMUUwMjFFMDQxRTA2MUUwODFFMEExRTBDMUUwRTFFMTAxRTEyMUUxNDFFMTYx
RTE4MUUxQTFFMUMxRTFFMUUyMDFFMjIxRTI0MUUyNjFFMjgxRTJBMUUyQzFFMkUxRTMwMUUzMjFF
MzQxRTM2MUUzODFFM0ExRTNDMUUzRTFFNDAxRTQyMUU0NDFFNDYxRTQ4MUU0QTFFNEMxRTRFMUU1
MDFFNTIxRTU0MUU1NjFFNTgxRTVBMUU1QzFFNUUxRTYwMUU2MjFFNjQxRTY2MUU2ODFFNkExRTZD
MUU2RTFFNzAxRTcyMUU3NDFFNzYxRTc4MUU3QTFFN0MxRTdFMUU4MDFFODIxRTg0MUU4NjFFODgx
RThBMUU4QzFFOEUxRTkwMUU5MjFFOTQxRTlFMUVBMDFFQTIxRUE0MUVBNjFFQTgxRUFBMUVBQzFF
QUUxRUIwMUVCMjFFQjQxRUI2MUVCODFFQkExRUJDMUVCRTFFQzAxRUMyMUVDNDFFQzYxRUM4MUVD
QTFFQ0MxRUNFMUVEMDFFRDIxRUQ0MUVENjFFRDgxRURBMUVEQzFFREUxRUUwMUVFMjFFRTQxRUU2
MUVFODFFRUExRUVDMUVFRTFFRjAxRUYyMUVGNDFFRjYxRUY4MUVGQTFFRkMxRUZFMUYwOC0xRjBG
MUYxOC0xRjFEMUYyOC0xRjJGMUYzOC0xRjNGMUY0OC0xRjREMUY1OTFGNUIxRjVEMUY1RjFGNjgt
MUY2RjFGQjgtMUZCQjFGQzgtMUZDQjFGRDgtMUZEQjFGRTgtMUZFQzFGRjgtMUZGQjIxMDIyMTA3
MjEwQi0yMTBEMjExMC0yMTEyMjExNTIxMTktMjExRDIxMjQyMTI2MjEyODIxMkEtMjEyRDIxMzAt
MjEzMzIxM0UyMTNGMjE0NTIxODMyQzAwLTJDMkUyQzYwMkM2Mi0yQzY0MkM2NzJDNjkyQzZCMkM2
RC0yQzcwMkM3MjJDNzUyQzdFLTJDODAyQzgyMkM4NDJDODYyQzg4MkM4QTJDOEMyQzhFMkM5MDJD
OTIyQzk0MkM5NjJDOTgyQzlBMkM5QzJDOUUyQ0EwMkNBMjJDQTQyQ0E2MkNBODJDQUEyQ0FDMkNB
RTJDQjAyQ0IyMkNCNDJDQjYyQ0I4MkNCQTJDQkMyQ0JFMkNDMDJDQzIyQ0M0MkNDNjJDQzgyQ0NB
MkNDQzJDQ0UyQ0QwMkNEMjJDRDQyQ0Q2MkNEODJDREEyQ0RDMkNERTJDRTAyQ0UyMkNFQjJDRURB
NjQwQTY0MkE2NDRBNjQ2QTY0OEE2NEFBNjRDQTY0RUE2NTBBNjUyQTY1NEE2NTZBNjU4QTY1QUE2
NUNBNjVFQTY2MkE2NjRBNjY2QTY2OEE2NkFBNjZDQTY4MEE2ODJBNjg0QTY4NkE2ODhBNjhBQTY4
Q0E2OEVBNjkwQTY5MkE2OTRBNjk2QTcyMkE3MjRBNzI2QTcyOEE3MkFBNzJDQTcyRUE3MzJBNzM0
QTczNkE3MzhBNzNBQTczQ0E3M0VBNzQwQTc0MkE3NDRBNzQ2QTc0OEE3NEFBNzRDQTc0RUE3NTBB
NzUyQTc1NEE3NTZBNzU4QTc1QUE3NUNBNzVFQTc2MEE3NjJBNzY0QTc2NkE3NjhBNzZBQTc2Q0E3
NkVBNzc5QTc3QkE3N0RBNzdFQTc4MEE3ODJBNzg0QTc4NkE3OEJGRjIxLUZGM0EiLAorICAgIEx0
OiAiMDFDNTAxQzgwMUNCMDFGMjFGODgtMUY4RjFGOTgtMUY5RjFGQTgtMUZBRjFGQkMxRkNDMUZG
QyIsCisgICAgTG06ICIwMkIwLTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzQwMzdB
MDU1OTA2NDAwNkU1MDZFNjA3RjQwN0Y1MDdGQTA4MUEwODI0MDgyODA5NzEwRTQ2MEVDNjEwRkMx
N0Q3MTg0MzFBQTcxQzc4LTFDN0QxRDJDLTFENjExRDc4MUQ5Qi0xREJGMjA3MTIwN0YyMDkwLTIw
OTQyQzdEMkQ2RjJFMkYzMDA1MzAzMS0zMDM1MzAzQjMwOUQzMDlFMzBGQy0zMEZFQTAxNUE0Rjgt
QTRGREE2MENBNjdGQTcxNy1BNzFGQTc3MEE3ODhBOUNGQUE3MEFBRERGRjcwRkY5RUZGOUYiLAor
ICAgIExvOiAiMDFCQjAxQzAtMDFDMzAyOTQwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2M0YwNjQx
LTA2NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0w
NzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA4MDAtMDgxNTA5MDQtMDkzOTA5M0QwOTUwMDk1OC0w
OTYxMDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIwMDlCMjA5
QjYtMDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBBMEYwQTEw
MEExMy0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVDMEE1RTBB
NzItMEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIzMEFCNS0w
QUI5MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0wQjMwMEIz
MjBCMzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4QTBCOEUt
MEI5MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEwQkFFLTBC
QjkwQkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5MEMzRDBD
NTgwQzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMwQ0I1LTBD
QjkwQ0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0wRDM5MEQz
RDBENjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBEQzAtMERD
NjBFMDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ1MEU4MTBFODIwRTg0MEU4NzBFODgwRThBMEU4RDBF
OTQtMEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAwRUIyMEVC
MzBFQkQwRUMwLTBFQzQwRURDMEVERDBGMDAwRjQwLTBGNDcwRjQ5LTBGNkMwRjg4LTBGOEIxMDAw
LTEwMkExMDNGMTA1MC0xMDU1MTA1QS0xMDVEMTA2MTEwNjUxMDY2MTA2RS0xMDcwMTA3NS0xMDgx
MTA4RTEwRDAtMTBGQTExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYw
LTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJD
OC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0x
NjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMx
MTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdEQzE4MjAtMTg0MjE4NDQtMTg3
NzE4ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5NkQxOTcwLTE5NzQxOTgwLTE5
QUIxOUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQjA1LTFCMzMxQjQ1LTFCNEIxQjgzLTFCQTAx
QkFFMUJBRjFDMDAtMUMyMzFDNEQtMUM0RjFDNUEtMUM3NzFDRTktMUNFQzFDRUUtMUNGMTIxMzUt
MjEzODJEMzAtMkQ2NTJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRC
RTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTMwMDYzMDNDMzA0MS0zMDk2MzA5
RjMwQTEtMzBGQTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMxQjczMUYwLTMxRkYzNDAwLTRE
QjU0RTAwLTlGQ0JBMDAwLUEwMTRBMDE2LUE0OENBNEQwLUE0RjdBNTAwLUE2MEJBNjEwLUE2MUZB
NjJBQTYyQkE2NkVBNkEwLUE2RTVBN0ZCLUE4MDFBODAzLUE4MDVBODA3LUE4MEFBODBDLUE4MjJB
ODQwLUE4NzNBODgyLUE4QjNBOEYyLUE4RjdBOEZCQTkwQS1BOTI1QTkzMC1BOTQ2QTk2MC1BOTdD
QTk4NC1BOUIyQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTZGQUE3MS1BQTc2QUE3
QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQkFBRENBQkMwLUFCRTJB
QzAwLUQ3QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjFE
RkIxRi1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0M0ZCNDRGQjQ2LUZCQjFG
QkQzLUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZFNzRGRTc2LUZFRkNGRjY2
LUZGNkZGRjcxLUZGOURGRkEwLUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZGRkQyLUZGRDdGRkRBLUZG
REMiLAorICAgIE06ICAiMDMwMC0wMzZGMDQ4My0wNDg5MDU5MS0wNUJEMDVCRjA1QzEwNUMyMDVD
NDA1QzUwNUM3MDYxMC0wNjFBMDY0Qi0wNjVFMDY3MDA2RDYtMDZEQzA2REUtMDZFNDA2RTcwNkU4
MDZFQS0wNkVEMDcxMTA3MzAtMDc0QTA3QTYtMDdCMDA3RUItMDdGMzA4MTYtMDgxOTA4MUItMDgy
MzA4MjUtMDgyNzA4MjktMDgyRDA5MDAtMDkwMzA5M0MwOTNFLTA5NEUwOTUxLTA5NTUwOTYyMDk2
MzA5ODEtMDk4MzA5QkMwOUJFLTA5QzQwOUM3MDlDODA5Q0ItMDlDRDA5RDcwOUUyMDlFMzBBMDEt
MEEwMzBBM0MwQTNFLTBBNDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3MTBBNzUwQTgxLTBB
ODMwQUJDMEFCRS0wQUM1MEFDNy0wQUM5MEFDQi0wQUNEMEFFMjBBRTMwQjAxLTBCMDMwQjNDMEIz
RS0wQjQ0MEI0NzBCNDgwQjRCLTBCNEQwQjU2MEI1NzBCNjIwQjYzMEI4MjBCQkUtMEJDMjBCQzYt
MEJDODBCQ0EtMEJDRDBCRDcwQzAxLTBDMDMwQzNFLTBDNDQwQzQ2LTBDNDgwQzRBLTBDNEQwQzU1
MEM1NjBDNjIwQzYzMEM4MjBDODMwQ0JDMENCRS0wQ0M0MENDNi0wQ0M4MENDQS0wQ0NEMENENTBD
RDYwQ0UyMENFMzBEMDIwRDAzMEQzRS0wRDQ0MEQ0Ni0wRDQ4MEQ0QS0wRDREMEQ1NzBENjIwRDYz
MEQ4MjBEODMwRENBMERDRi0wREQ0MERENjBERDgtMERERjBERjIwREYzMEUzMTBFMzQtMEUzQTBF
NDctMEU0RTBFQjEwRUI0LTBFQjkwRUJCMEVCQzBFQzgtMEVDRDBGMTgwRjE5MEYzNTBGMzcwRjM5
MEYzRTBGM0YwRjcxLTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJCLTEwM0Ux
MDU2LTEwNTkxMDVFLTEwNjAxMDYyLTEwNjQxMDY3LTEwNkQxMDcxLTEwNzQxMDgyLTEwOEQxMDhG
MTA5QS0xMDlEMTM1RjE3MTItMTcxNDE3MzItMTczNDE3NTIxNzUzMTc3MjE3NzMxN0I2LTE3RDMx
N0REMTgwQi0xODBEMThBOTE5MjAtMTkyQjE5MzAtMTkzQjE5QjAtMTlDMDE5QzgxOUM5MUExNy0x
QTFCMUE1NS0xQTVFMUE2MC0xQTdDMUE3RjFCMDAtMUIwNDFCMzQtMUI0NDFCNkItMUI3MzFCODAt
MUI4MjFCQTEtMUJBQTFDMjQtMUMzNzFDRDAtMUNEMjFDRDQtMUNFODFDRUQxQ0YyMURDMC0xREU2
MURGRC0xREZGMjBEMC0yMEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJGMzA5OTMwOUFBNjZG
LUE2NzJBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyMy1BODI3QTg4MEE4ODFBOEI0LUE4
QzRBOEUwLUE4RjFBOTI2LUE5MkRBOTQ3LUE5NTNBOTgwLUE5ODNBOUIzLUE5QzBBQTI5LUFBMzZB
QTQzQUE0Q0FBNERBQTdCQUFCMEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMxQUJFMy1BQkVB
QUJFQ0FCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2IiwKKyAgICBNbjogIjAzMDAtMDM2RjA0ODMt
MDQ4NzA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2
NzAwNkQ2LTA2REMwNkRGLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3
QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDIw
OTNDMDk0MS0wOTQ4MDk0RDA5NTEtMDk1NTA5NjIwOTYzMDk4MTA5QkMwOUMxLTA5QzQwOUNEMDlF
MjA5RTMwQTAxMEEwMjBBM0MwQTQxMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3
NTBBODEwQTgyMEFCQzBBQzEtMEFDNTBBQzcwQUM4MEFDRDBBRTIwQUUzMEIwMTBCM0MwQjNGMEI0
MS0wQjQ0MEI0RDBCNTYwQjYyMEI2MzBCODIwQkMwMEJDRDBDM0UtMEM0MDBDNDYtMEM0ODBDNEEt
MEM0RDBDNTUwQzU2MEM2MjBDNjMwQ0JDMENCRjBDQzYwQ0NDMENDRDBDRTIwQ0UzMEQ0MS0wRDQ0
MEQ0RDBENjIwRDYzMERDQTBERDItMERENDBERDYwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBF
QjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjcxLTBGN0UwRjgw
LTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJELTEwMzAxMDMyLTEwMzcxMDM5
MTAzQTEwM0QxMDNFMTA1ODEwNTkxMDVFLTEwNjAxMDcxLTEwNzQxMDgyMTA4NTEwODYxMDhEMTA5
RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNy0xN0JEMTdDNjE3Qzkt
MTdEMzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTIyMTkyNzE5MjgxOTMyMTkzOS0xOTNCMUExNzFB
MTgxQTU2MUE1OC0xQTVFMUE2MDFBNjIxQTY1LTFBNkMxQTczLTFBN0MxQTdGMUIwMC0xQjAzMUIz
NDFCMzYtMUIzQTFCM0MxQjQyMUI2Qi0xQjczMUI4MDFCODExQkEyLTFCQTUxQkE4MUJBOTFDMkMt
MUMzMzFDMzYxQzM3MUNEMC0xQ0QyMUNENC0xQ0UwMUNFMi0xQ0U4MUNFRDFEQzAtMURFNjFERkQt
MURGRjIwRDAtMjBEQzIwRTEyMEU1LTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5
MzA5QUE2NkZBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyNUE4MjZBOEM0QThFMC1BOEYx
QTkyNi1BOTJEQTk0Ny1BOTUxQTk4MC1BOTgyQTlCM0E5QjYtQTlCOUE5QkNBQTI5LUFBMkVBQTMx
QUEzMkFBMzVBQTM2QUE0M0FBNENBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkU1
QUJFOEFCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2IiwKKyAgICBNYzogIjA5MDMwOTNFLTA5NDAw
OTQ5LTA5NEMwOTRFMDk4MjA5ODMwOUJFLTA5QzAwOUM3MDlDODA5Q0IwOUNDMDlENzBBMDMwQTNF
LTBBNDAwQTgzMEFCRS0wQUMwMEFDOTBBQ0IwQUNDMEIwMjBCMDMwQjNFMEI0MDBCNDcwQjQ4MEI0
QjBCNEMwQjU3MEJCRTBCQkYwQkMxMEJDMjBCQzYtMEJDODBCQ0EtMEJDQzBCRDcwQzAxLTBDMDMw
QzQxLTBDNDQwQzgyMEM4MzBDQkUwQ0MwLTBDQzQwQ0M3MENDODBDQ0EwQ0NCMENENTBDRDYwRDAy
MEQwMzBEM0UtMEQ0MDBENDYtMEQ0ODBENEEtMEQ0QzBENTcwRDgyMEQ4MzBEQ0YtMEREMTBERDgt
MERERjBERjIwREYzMEYzRTBGM0YwRjdGMTAyQjEwMkMxMDMxMTAzODEwM0IxMDNDMTA1NjEwNTcx
MDYyLTEwNjQxMDY3LTEwNkQxMDgzMTA4NDEwODctMTA4QzEwOEYxMDlBLTEwOUMxN0I2MTdCRS0x
N0M1MTdDNzE3QzgxOTIzLTE5MjYxOTI5LTE5MkIxOTMwMTkzMTE5MzMtMTkzODE5QjAtMTlDMDE5
QzgxOUM5MUExOS0xQTFCMUE1NTFBNTcxQTYxMUE2MzFBNjQxQTZELTFBNzIxQjA0MUIzNTFCM0Ix
QjNELTFCNDExQjQzMUI0NDFCODIxQkExMUJBNjFCQTcxQkFBMUMyNC0xQzJCMUMzNDFDMzUxQ0Ux
MUNGMkE4MjNBODI0QTgyN0E4ODBBODgxQThCNC1BOEMzQTk1MkE5NTNBOTgzQTlCNEE5QjVBOUJB
QTlCQkE5QkQtQTlDMEFBMkZBQTMwQUEzM0FBMzRBQTREQUE3QkFCRTNBQkU0QUJFNkFCRTdBQkU5
QUJFQUFCRUMiLAorICAgIE1lOiAiMDQ4ODA0ODkwNkRFMjBERC0yMEUwMjBFMi0yMEU0QTY3MC1B
NjcyIiwKKyAgICBOOiAgIjAwMzAtMDAzOTAwQjIwMEIzMDBCOTAwQkMtMDBCRTA2NjAtMDY2OTA2
RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjA5RjQtMDlGOTBBNjYtMEE2RjBBRTYt
MEFFRjBCNjYtMEI2RjBCRTYtMEJGMjBDNjYtMEM2RjBDNzgtMEM3RTBDRTYtMENFRjBENjYtMEQ3
NTBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYzMzEwNDAtMTA0OTEwOTAtMTA5OTEzNjktMTM3QzE2
RUUtMTZGMDE3RTAtMTdFOTE3RjAtMTdGOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAt
MUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OTIwNzAyMDc0
LTIwNzkyMDgwLTIwODkyMTUwLTIxODIyMTg1LTIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3
OTMyQ0ZEMzAwNzMwMjEtMzAyOTMwMzgtMzAzQTMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMy
ODAtMzI4OTMyQjEtMzJCRkE2MjAtQTYyOUE2RTYtQTZFRkE4MzAtQTgzNUE4RDAtQThEOUE5MDAt
QTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOSIsCisgICAgTmQ6ICIwMDMw
LTAwMzkwNjYwLTA2NjkwNkYwLTA2RjkwN0MwLTA3QzkwOTY2LTA5NkYwOUU2LTA5RUYwQTY2LTBB
NkYwQUU2LTBBRUYwQjY2LTBCNkYwQkU2LTBCRUYwQzY2LTBDNkYwQ0U2LTBDRUYwRDY2LTBENkYw
RTUwLTBFNTkwRUQwLTBFRDkwRjIwLTBGMjkxMDQwLTEwNDkxMDkwLTEwOTkxN0UwLTE3RTkxODEw
LTE4MTkxOTQ2LTE5NEYxOUQwLTE5REExQTgwLTFBODkxQTkwLTFBOTkxQjUwLTFCNTkxQkIwLTFC
QjkxQzQwLTFDNDkxQzUwLTFDNTlBNjIwLUE2MjlBOEQwLUE4RDlBOTAwLUE5MDlBOUQwLUE5RDlB
QTUwLUFBNTlBQkYwLUFCRjlGRjEwLUZGMTkiLAorICAgIE5sOiAiMTZFRS0xNkYwMjE2MC0yMTgy
MjE4NS0yMTg4MzAwNzMwMjEtMzAyOTMwMzgtMzAzQUE2RTYtQTZFRiIsCisgICAgTm86ICIwMEIy
MDBCMzAwQjkwMEJDLTAwQkUwOUY0LTA5RjkwQkYwLTBCRjIwQzc4LTBDN0UwRDcwLTBENzUwRjJB
LTBGMzMxMzY5LTEzN0MxN0YwLTE3RjkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTVGMjE4
OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMy
NUYzMjgwLTMyODkzMkIxLTMyQkZBODMwLUE4MzUiLAorICAgIFA6ICAiMDAyMS0wMDIzMDAyNS0w
MDJBMDAyQy0wMDJGMDAzQTAwM0IwMDNGMDA0MDAwNUItMDA1RDAwNUYwMDdCMDA3RDAwQTEwMEFC
MDBCNzAwQkIwMEJGMDM3RTAzODcwNTVBLTA1NUYwNTg5MDU4QTA1QkUwNUMwMDVDMzA1QzYwNUYz
MDVGNDA2MDkwNjBBMDYwQzA2MEQwNjFCMDYxRTA2MUYwNjZBLTA2NkQwNkQ0MDcwMC0wNzBEMDdG
Ny0wN0Y5MDgzMC0wODNFMDk2NDA5NjUwOTcwMERGNDBFNEYwRTVBMEU1QjBGMDQtMEYxMjBGM0Et
MEYzRDBGODUwRkQwLTBGRDQxMDRBLTEwNEYxMEZCMTM2MS0xMzY4MTQwMDE2NkQxNjZFMTY5QjE2
OUMxNkVCLTE2RUQxNzM1MTczNjE3RDQtMTdENjE3RDgtMTdEQTE4MDAtMTgwQTE5NDQxOTQ1MTlE
RTE5REYxQTFFMUExRjFBQTAtMUFBNjFBQTgtMUFBRDFCNUEtMUI2MDFDM0ItMUMzRjFDN0UxQzdG
MUNEMzIwMTAtMjAyNzIwMzAtMjA0MzIwNDUtMjA1MTIwNTMtMjA1RTIwN0QyMDdFMjA4RDIwOEUy
MzI5MjMyQTI3NjgtMjc3NTI3QzUyN0M2MjdFNi0yN0VGMjk4My0yOTk4MjlEOC0yOURCMjlGQzI5
RkQyQ0Y5LTJDRkMyQ0ZFMkNGRjJFMDAtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAwOC0zMDExMzAx
NC0zMDFGMzAzMDMwM0QzMEEwMzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdB
ODc0LUE4NzdBOENFQThDRkE4RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1
Qy1BQTVGQUFERUFBREZBQkVCRkQzRUZEM0ZGRTEwLUZFMTlGRTMwLUZFNTJGRTU0LUZFNjFGRTYz
RkU2OEZFNkFGRTZCRkYwMS1GRjAzRkYwNS1GRjBBRkYwQy1GRjBGRkYxQUZGMUJGRjFGRkYyMEZG
M0ItRkYzREZGM0ZGRjVCRkY1REZGNUYtRkY2NSIsCisgICAgUGQ6ICIwMDJEMDU4QTA1QkUxNDAw
MTgwNjIwMTAtMjAxNTJFMTcyRTFBMzAxQzMwMzAzMEEwRkUzMUZFMzJGRTU4RkU2M0ZGMEQiLAor
ICAgIFBzOiAiMDAyODAwNUIwMDdCMEYzQTBGM0MxNjlCMjAxQTIwMUUyMDQ1MjA3RDIwOEQyMzI5
Mjc2ODI3NkEyNzZDMjc2RTI3NzAyNzcyMjc3NDI3QzUyN0U2MjdFODI3RUEyN0VDMjdFRTI5ODMy
OTg1Mjk4NzI5ODkyOThCMjk4RDI5OEYyOTkxMjk5MzI5OTUyOTk3MjlEODI5REEyOUZDMkUyMjJF
MjQyRTI2MkUyODMwMDgzMDBBMzAwQzMwMEUzMDEwMzAxNDMwMTYzMDE4MzAxQTMwMURGRDNFRkUx
N0ZFMzVGRTM3RkUzOUZFM0JGRTNERkUzRkZFNDFGRTQzRkU0N0ZFNTlGRTVCRkU1REZGMDhGRjNC
RkY1QkZGNUZGRjYyIiwKKyAgICBQZTogIjAwMjkwMDVEMDA3RDBGM0IwRjNEMTY5QzIwNDYyMDdF
MjA4RTIzMkEyNzY5Mjc2QjI3NkQyNzZGMjc3MTI3NzMyNzc1MjdDNjI3RTcyN0U5MjdFQjI3RUQy
N0VGMjk4NDI5ODYyOTg4Mjk4QTI5OEMyOThFMjk5MDI5OTIyOTk0Mjk5NjI5OTgyOUQ5MjlEQjI5
RkQyRTIzMkUyNTJFMjcyRTI5MzAwOTMwMEIzMDBEMzAwRjMwMTEzMDE1MzAxNzMwMTkzMDFCMzAx
RTMwMUZGRDNGRkUxOEZFMzZGRTM4RkUzQUZFM0NGRTNFRkU0MEZFNDJGRTQ0RkU0OEZFNUFGRTVD
RkU1RUZGMDlGRjNERkY1REZGNjBGRjYzIiwKKyAgICBQaTogIjAwQUIyMDE4MjAxQjIwMUMyMDFG
MjAzOTJFMDIyRTA0MkUwOTJFMEMyRTFDMkUyMCIsCisgICAgUGY6ICIwMEJCMjAxOTIwMUQyMDNB
MkUwMzJFMDUyRTBBMkUwRDJFMUQyRTIxIiwKKyAgICBQYzogIjAwNUYyMDNGMjA0MDIwNTRGRTMz
RkUzNEZFNEQtRkU0RkZGM0YiLAorICAgIFBvOiAiMDAyMS0wMDIzMDAyNS0wMDI3MDAyQTAwMkMw
MDJFMDAyRjAwM0EwMDNCMDAzRjAwNDAwMDVDMDBBMTAwQjcwMEJGMDM3RTAzODcwNTVBLTA1NUYw
NTg5MDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYxQjA2MUUwNjFGMDY2QS0w
NjZEMDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1MDk3MDBERjQwRTRGMEU1
QTBFNUIwRjA0LTBGMTIwRjg1MEZEMC0wRkQ0MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE2NkQxNjZF
MTZFQi0xNkVEMTczNTE3MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MDUxODA3LTE4MEExOTQ0
MTk0NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0Yx
QzdFMUM3RjFDRDMyMDE2MjAxNzIwMjAtMjAyNzIwMzAtMjAzODIwM0ItMjAzRTIwNDEtMjA0MzIw
NDctMjA1MTIwNTMyMDU1LTIwNUUyQ0Y5LTJDRkMyQ0ZFMkNGRjJFMDAyRTAxMkUwNi0yRTA4MkUw
QjJFMEUtMkUxNjJFMTgyRTE5MkUxQjJFMUUyRTFGMkUyQS0yRTJFMkUzMDJFMzEzMDAxLTMwMDMz
MDNEMzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdBODc0LUE4NzdBOENFQThD
RkE4RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1Qy1BQTVGQUFERUFBREZB
QkVCRkUxMC1GRTE2RkUxOUZFMzBGRTQ1RkU0NkZFNDktRkU0Q0ZFNTAtRkU1MkZFNTQtRkU1N0ZF
NUYtRkU2MUZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZGMDUtRkYwN0ZGMEFGRjBDRkYwRUZGMEZGRjFB
RkYxQkZGMUZGRjIwRkYzQ0ZGNjFGRjY0RkY2NSIsCisgICAgUzogICIwMDI0MDAyQjAwM0MtMDAz
RTAwNUUwMDYwMDA3QzAwN0UwMEEyLTAwQTkwMEFDMDBBRS0wMEIxMDBCNDAwQjYwMEI4MDBENzAw
RjcwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MDNG
NjA0ODIwNjA2LTA2MDgwNjBCMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGMjA5RjMwOUZBMDlG
QjBBRjEwQjcwMEJGMy0wQkZBMEM3RjBDRjEwQ0YyMEQ3OTBFM0YwRjAxLTBGMDMwRjEzLTBGMTcw
RjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEw
OUUxMDlGMTM2MDEzOTAtMTM5OTE3REIxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMUZC
RDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMjA0NDIwNTIyMDdB
LTIwN0MyMDhBLTIwOEMyMEEwLTIwQjgyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYt
MjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNDAtMjE0NDIxNEEtMjE0RDIx
NEYyMTkwLTIzMjgyMzJCLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI2Q0Qy
NkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRC
Mjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyN0Mw
LTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlG
RS0yQjRDMkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0y
RkZCMzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMDlCMzA5QzMxOTAzMTkxMzE5Ni0z
MTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZF
MzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUE4Mjgt
QTgyQkE4MzYtQTgzOUFBNzctQUE3OUZCMjlGREZDRkRGREZFNjJGRTY0LUZFNjZGRTY5RkYwNEZG
MEJGRjFDLUZGMUVGRjNFRkY0MEZGNUNGRjVFRkZFMC1GRkU2RkZFOC1GRkVFRkZGQ0ZGRkQiLAor
ICAgIFNtOiAiMDAyQjAwM0MtMDAzRTAwN0MwMDdFMDBBQzAwQjEwMEQ3MDBGNzAzRjYwNjA2LTA2
MDgyMDQ0MjA1MjIwN0EtMjA3QzIwOEEtMjA4QzIxNDAtMjE0NDIxNEIyMTkwLTIxOTQyMTlBMjE5
QjIxQTAyMUEzMjFBNjIxQUUyMUNFMjFDRjIxRDIyMUQ0MjFGNC0yMkZGMjMwOC0yMzBCMjMyMDIz
MjEyMzdDMjM5Qi0yM0IzMjNEQy0yM0UxMjVCNzI1QzEyNUY4LTI1RkYyNjZGMjdDMC0yN0M0MjdD
Ny0yN0NBMjdDQzI3RDAtMjdFNTI3RjAtMjdGRjI5MDAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5
RkUtMkFGRjJCMzAtMkI0NDJCNDctMkI0Q0ZCMjlGRTYyRkU2NC1GRTY2RkYwQkZGMUMtRkYxRUZG
NUNGRjVFRkZFMkZGRTktRkZFQyIsCisgICAgU2M6ICIwMDI0MDBBMi0wMEE1MDYwQjA5RjIwOUYz
MDlGQjBBRjEwQkY5MEUzRjE3REIyMEEwLTIwQjhBODM4RkRGQ0ZFNjlGRjA0RkZFMEZGRTFGRkU1
RkZFNiIsCisgICAgU2s6ICIwMDVFMDA2MDAwQTgwMEFGMDBCNDAwQjgwMkMyLTAyQzUwMkQyLTAy
REYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MUZCRDFGQkYtMUZDMTFGQ0QtMUZD
RjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMzA5QjMwOUNBNzAwLUE3MTZBNzIwQTcyMUE3ODlB
NzhBRkYzRUZGNDBGRkUzIiwKKyAgICBTbzogIjAwQTYwMEE3MDBBOTAwQUUwMEIwMDBCNjA0ODIw
NjBFMDYwRjA2RTkwNkZEMDZGRTA3RjYwOUZBMEI3MDBCRjMtMEJGODBCRkEwQzdGMENGMTBDRjIw
RDc5MEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZCRS0wRkM1MEZDNy0w
RkNDMEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxOTQwMTlFMC0xOUZGMUI2
MS0xQjZBMUI3NC0xQjdDMjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFF
LTIxMjMyMTI1MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTRBMjE0QzIxNEQyMTRGMjE5NS0yMTk5MjE5
Qy0yMTlGMjFBMTIxQTIyMUE0MjFBNTIxQTctMjFBRDIxQUYtMjFDRDIxRDAyMUQxMjFEMzIxRDUt
MjFGMzIzMDAtMjMwNzIzMEMtMjMxRjIzMjItMjMyODIzMkItMjM3QjIzN0QtMjM5QTIzQjQtMjNE
QjIzRTItMjNFODI0MDAtMjQyNjI0NDAtMjQ0QTI0OUMtMjRFOTI1MDAtMjVCNjI1QjgtMjVDMDI1
QzItMjVGNzI2MDAtMjY2RTI2NzAtMjZDRDI2Q0YtMjZFMTI2RTMyNkU4LTI2RkYyNzAxLTI3MDQy
NzA2LTI3MDkyNzBDLTI3MjcyNzI5LTI3NEIyNzREMjc0Ri0yNzUyMjc1Ni0yNzVFMjc2MS0yNzY3
Mjc5NDI3OTgtMjdBRjI3QjEtMjdCRTI4MDAtMjhGRjJCMDAtMkIyRjJCNDUyQjQ2MkI1MC0yQjU5
MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEz
MzAyMDMwMzYzMDM3MzAzRTMwM0YzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMy
MkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAt
QTRDNkE4MjgtQTgyQkE4MzZBODM3QTgzOUFBNzctQUE3OUZERkRGRkU0RkZFOEZGRURGRkVFRkZG
Q0ZGRkQiLAorICAgIFo6ICAiMDAyMDAwQTAxNjgwMTgwRTIwMDAtMjAwQTIwMjgyMDI5MjAyRjIw
NUYzMDAwIiwKKyAgICBaczogIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDJGMjA1RjMwMDAi
LAorICAgIFpsOiAiMjAyOCIsCisgICAgWnA6ICIyMDI5IiwKKyAgICBDOiAgIjAwMDAtMDAxRjAw
N0YtMDA5RjAwQUQwMzc4MDM3OTAzN0YtMDM4MzAzOEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4
MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1RUYwNUY1LTA2MDUwNjFDMDYxRDA2MjAw
NjVGMDZERDA3MEUwNzBGMDc0QjA3NEMwN0IyLTA3QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhG
RjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlB
OTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIw
OURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3
MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0w
QTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0Uw
QUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5
MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2
NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEy
MEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2
MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBD
NEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkx
MENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENG
MDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgt
MEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERC
RjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1
Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBF
QTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBG
NDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEw
RkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJC
RjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYx
M0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVG
MTc2RDE3NzExNzc0LTE3N0YxN0I0MTdCNTE3REUxN0RGMTdFQS0xN0VGMTdGQS0xN0ZGMTgwRjE4
MUEtMTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQtMTkxRjE5MkMtMTkyRjE5M0Mt
MTkzRjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFGMTlDQS0xOUNGMTlEQi0xOURE
MUExQzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYxQUFFLTFBRkYxQjRDLTFCNEYx
QjdELTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRBLTFDNEMxQzgwLTFDQ0YxQ0Yz
LTFDRkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcxRjRFMUY0RjFGNTgxRjVBMUY1
QzFGNUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFGRjExRkY1MUZGRjIwMEItMjAw
RjIwMkEtMjAyRTIwNjAtMjA2RjIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBG
RjIxOEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3Mjcw
MDI3MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3
QkYyN0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJE
MkYyRDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3
MkRERjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgz
MTAwLTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5
RkNDLTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgt
QTY5RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThD
REE4REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5
RkZBQTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJF
RUFCRUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUY4RkZGQTJFRkEyRkZBNkVGQTZG
RkFEQS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJG
RDQwLUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZF
NjdGRTZDLUZFNkZGRTc1RkVGRC1GRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhGRkQ5
RkZERC1GRkRGRkZFN0ZGRUYtRkZGQkZGRkVGRkZGIiwKKyAgICBDYzogIjAwMDAtMDAxRjAwN0Yt
MDA5RiIsCisgICAgQ2Y6ICIwMEFEMDYwMC0wNjAzMDZERDA3MEYxN0I0MTdCNTIwMEItMjAwRjIw
MkEtMjAyRTIwNjAtMjA2NDIwNkEtMjA2RkZFRkZGRkY5LUZGRkIiLAorICAgIENvOiAiRTAwMC1G
OEZGIiwKKyAgICBDczogIkQ4MDAtREZGRiIsCisgICAgQ246ICIwMzc4MDM3OTAzN0YtMDM4MzAz
OEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVC
LTA1RUYwNUY1LTA1RkYwNjA0MDYwNTA2MUMwNjFEMDYyMDA2NUYwNzBFMDc0QjA3NEMwN0IyLTA3
QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4
MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2
MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0w
QTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEw
QTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBB
QjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0w
QjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBC
NEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5
MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJD
My0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzEx
MEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBD
NzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0w
Q0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNB
LTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEw
RDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERF
MC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThD
MEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3
MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBG
Q0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVG
MTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcx
MzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBE
MTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2RDE3NzExNzc0LTE3N0YxN0RFMTdERjE3RUEt
MTdFRjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4QUYxOEY2LTE4RkYxOTFE
LTE5MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5NzUtMTk3RjE5QUMtMTlB
RjE5Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4QS0xQThGMUE5QS0xQTlG
MUFBRS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0xQkZGMUMzOC0xQzNBMUM0
QS0xQzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcxRjFFMUYxRjFGNDYxRjQ3
MUY0RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFGRDQxRkQ1MUZEQzFGRjAx
RkYxMUZGNTFGRkYyMDY1LTIwNjkyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIw
RkYyMThBLTIxOEYyM0U5LTIzRkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3
MDAyNzA1MjcwQTI3MEIyNzI4Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAy
N0JGMjdDQjI3Q0QtMjdDRjJCNEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0y
RDJGMkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRE
NzJEREYyRTMyLTJFN0YyRTlBMkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4
MzEwMC0zMTA0MzEyRS0zMTMwMzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJG
OUZDQy05RkZGQTQ4RC1BNDhGQTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4
LUE2OUZBNkY4LUE2RkZBNzhELUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4
Q0RBOERBLUE4REZBOEZDLUE4RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1B
OUZGQUEzNy1BQTNGQUE0RUFBNEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFC
RUVBQkVGQUJGQS1BQkZGRDdBNC1EN0FGRDdDNy1EN0NBRDdGQy1EN0ZGRkEyRUZBMkZGQTZFRkE2
RkZBREEtRkFGRkZCMDctRkIxMkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQy
RkQ0MC1GRDRGRkQ5MEZEOTFGREM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNG
RTY3RkU2Qy1GRTZGRkU3NUZFRkRGRUZFRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4
RkZEOUZGREQtRkZERkZGRTdGRkVGLUZGRjhGRkZFRkZGRiIKK30pOworCitmdW5jdGlvbiBhZGRV
bmljb2RlUGFja2FnZSAocGFjaykgeworICAgIHZhciBjb2RlUG9pbnQgPSAvXHd7NH0vZzsKKyAg
ICBmb3IgKHZhciBuYW1lIGluIHBhY2spCisgICAgICAgIGV4cG9ydHMucGFja2FnZXNbbmFtZV0g
PSBwYWNrW25hbWVdLnJlcGxhY2UoY29kZVBvaW50LCAiXFx1JCYiKTsKK307CisKK30pOworCith
Y2UuZGVmaW5lKCdhY2UvZG9jdW1lbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvcmFuZ2UnLCAn
YWNlL2FuY2hvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2
YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWly
ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKK3ZhciBSYW5nZSA9IHJlcXVp
cmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFu
Y2hvcjsKKwordmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dCkgeworICAgIHRoaXMuJGxpbmVz
ID0gW107CisgICAgaWYgKHRleHQubGVuZ3RoID09IDApIHsKKyAgICAgICAgdGhpcy4kbGluZXMg
PSBbIiJdOworICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkgeworICAgICAgICB0
aGlzLmluc2VydExpbmVzKDAsIHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuaW5z
ZXJ0KHtyb3c6IDAsIGNvbHVtbjowfSwgdGV4dCk7CisgICAgfQorfTsKKworKGZ1bmN0aW9uKCkg
eworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0
VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0
aCgpOworICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExp
bmUobGVuLTEpLmxlbmd0aCkpOworICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46
MH0sIHRleHQpOworICAgIH07CisgICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFj
dGVyKCkpOworICAgIH07CisgICAgdGhpcy5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbihyb3csIGNv
bHVtbikgeworICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7Cisg
ICAgfTsKKyAgICBpZiAoImFhYSIuc3BsaXQoL2EvKS5sZW5ndGggPT0gMCkKKyAgICAgICAgdGhp
cy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBs
YWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOworICAgICAgICB9CisgICAgZWxzZQor
ICAgICAgICB0aGlzLiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7CisgICAgICAgIH07CisKKworIAorICAgIHRoaXMu
JGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBtYXRjaCA9IHRl
eHQubWF0Y2goL14uKj8oXHJcbnxccnxcbikvbSk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAg
ICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBtYXRjaFsxXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsKKyAgICAgICAgfQorICAgIH07
CisgICAgdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHN3
aXRjaCAodGhpcy4kbmV3TGluZU1vZGUpIHsKKyAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKKyAg
ICAgICAgICAgIHJldHVybiAiXHJcbiI7CisKKyAgICAgICAgICBjYXNlICJ1bml4IjoKKyAgICAg
ICAgICAgIHJldHVybiAiXG4iOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLiRhdXRvTmV3TGluZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRh
dXRvTmV3TGluZSA9ICJcbiI7CisgICAgdGhpcy4kbmV3TGluZU1vZGUgPSAiYXV0byI7CisgICAg
dGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CisgICAgICAgIGlm
ICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTsKKyAgICB9OworICAg
IHRoaXMuZ2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JG5ld0xpbmVNb2RlOworICAgIH07CisgICAgdGhpcy5pc05ld0xpbmUgPSBmdW5jdGlvbih0ZXh0
KSB7CisgICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRl
eHQgPT0gIlxuIik7CisgICAgfTsKKyAgICB0aGlzLmdldExpbmUgPSBmdW5jdGlvbihyb3cpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CisgICAgfTsKKyAgICB0aGlz
LmdldExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CisgICAgfTsKKyAgICB0
aGlzLmdldEFsbExpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdldExp
bmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOworICAgIH07CisgICAgdGhpcy5nZXRMZW5ndGggPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgaWYgKHJh
bmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy4kbGluZXNbcmFuZ2Uuc3RhcnQucm93XS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UuZW5kLmNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YXIgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdysxLCByYW5nZS5lbmQu
cm93LTEpOworICAgICAgICAgICAgbGluZXMudW5zaGlmdCgodGhpcy4kbGluZXNbcmFuZ2Uuc3Rh
cnQucm93XSB8fCAiIikuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbikpOworICAgICAgICAg
ICAgbGluZXMucHVzaCgodGhpcy4kbGluZXNbcmFuZ2UuZW5kLnJvd10gfHwgIiIpLnN1YnN0cmlu
ZygwLCByYW5nZS5lbmQuY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gbGluZXMuam9pbih0
aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhp
cy4kY2xpcFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAgICAgICAgdmFyIGxlbmd0
aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3Ro
KSB7CisgICAgICAgICAgICBwb3NpdGlvbi5yb3cgPSBNYXRoLm1heCgwLCBsZW5ndGggLSAxKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IHRoaXMuZ2V0TGluZShsZW5ndGgtMSkubGVu
Z3RoOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB9OworICAgIHRo
aXMuaW5zZXJ0ID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHsKKyAgICAgICAgaWYgKCF0ZXh0
IHx8IHRleHQubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisg
ICAgICAgIHBvc2l0aW9uID0gdGhpcy4kY2xpcFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAg
aWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkKKyAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xp
bmUodGV4dCk7CisKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kc3BsaXQodGV4dCk7CisgICAg
ICAgIHZhciBmaXJzdExpbmUgPSBsaW5lcy5zcGxpY2UoMCwgMSlbMF07CisgICAgICAgIHZhciBs
YXN0TGluZSA9IGxpbmVzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGxpbmVzLnNwbGljZShsaW5lcy5s
ZW5ndGggLSAxLCAxKVswXTsKKworICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5l
KHBvc2l0aW9uLCBmaXJzdExpbmUpOworICAgICAgICBpZiAobGFzdExpbmUgIT09IG51bGwpIHsK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnROZXdMaW5lKHBvc2l0aW9uKTsgLy8g
dGVybWluYXRlIGZpcnN0IGxpbmUKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRM
aW5lcyhwb3NpdGlvbi5yb3csIGxpbmVzKTsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5p
bnNlcnRJbkxpbmUocG9zaXRpb24sIGxhc3RMaW5lIHx8ICIiKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisgICAgfTsKKyAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rp
b24ocm93LCBsaW5lcykgeworICAgICAgICBpZiAobGluZXMubGVuZ3RoID09IDApCisgICAgICAg
ICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IDB9OworICAgICAgICBpZiAobGluZXMubGVu
Z3RoID4gMHhGRkZGKSB7CisgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnRMaW5lcyhy
b3csIGxpbmVzLnNsaWNlKDB4RkZGRikpOworICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGlj
ZSgwLCAweEZGRkYpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFyZ3MgPSBbcm93LCAwXTsK
KyAgICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIGxpbmVzKTsKKyAgICAgICAgdGhpcy4kbGlu
ZXMuc3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLCBhcmdzKTsKKworICAgICAgICB2YXIgcmFuZ2Ug
PSBuZXcgUmFuZ2Uocm93LCAwLCByb3cgKyBsaW5lcy5sZW5ndGgsIDApOworICAgICAgICB2YXIg
ZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRMaW5lcyIsCisgICAgICAgICAg
ICByYW5nZTogcmFuZ2UsCisgICAgICAgICAgICBsaW5lczogbGluZXMKKyAgICAgICAgfTsKKyAg
ICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICAgICAgcmV0
dXJuIGVuZCB8fCByYW5nZS5lbmQ7CisgICAgfTsKKyAgICB0aGlzLmluc2VydE5ld0xpbmUgPSBm
dW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlv
bihwb3NpdGlvbik7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy4kbGluZXNbcG9zaXRpb24ucm93
XSB8fCAiIjsKKworICAgICAgICB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddID0gbGluZS5zdWJz
dHJpbmcoMCwgcG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHBv
c2l0aW9uLnJvdyArIDEsIDAsIGxpbmUuc3Vic3RyaW5nKHBvc2l0aW9uLmNvbHVtbiwgbGluZS5s
ZW5ndGgpKTsKKworICAgICAgICB2YXIgZW5kID0geworICAgICAgICAgICAgcm93IDogcG9zaXRp
b24ucm93ICsgMSwKKyAgICAgICAgICAgIGNvbHVtbiA6IDAKKyAgICAgICAgfTsKKworICAgICAg
ICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRUZXh0IiwKKyAgICAg
ICAgICAgIHJhbmdlOiBSYW5nZS5mcm9tUG9pbnRzKHBvc2l0aW9uLCBlbmQpLAorICAgICAgICAg
ICAgdGV4dDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkKKyAgICAgICAgfTsKKyAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKworICAgICAgICByZXR1cm4g
ZW5kOworICAgIH07CisgICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwg
dGV4dCkgeworICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHJldHVy
biBwb3NpdGlvbjsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJv
d10gfHwgIiI7CisKKyAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vi
c3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbikgKyB0ZXh0CisgICAgICAgICAgICAgICAgKyBsaW5l
LnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4pOworCisgICAgICAgIHZhciBlbmQgPSB7CisgICAg
ICAgICAgICByb3cgOiBwb3NpdGlvbi5yb3csCisgICAgICAgICAgICBjb2x1bW4gOiBwb3NpdGlv
bi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aAorICAgICAgICB9OworCisgICAgICAgIHZhciBkZWx0YSA9
IHsKKyAgICAgICAgICAgIGFjdGlvbjogImluc2VydFRleHQiLAorICAgICAgICAgICAgcmFuZ2U6
IFJhbmdlLmZyb21Qb2ludHMocG9zaXRpb24sIGVuZCksCisgICAgICAgICAgICB0ZXh0OiB0ZXh0
CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEg
fSk7CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlID0gZnVu
Y3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmFuZ2Uuc3RhcnQgPSB0aGlzLiRjbGlwUG9zaXRpb24o
cmFuZ2Uuc3RhcnQpOworICAgICAgICByYW5nZS5lbmQgPSB0aGlzLiRjbGlwUG9zaXRpb24ocmFu
Z2UuZW5kKTsKKworICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHJhbmdlLnN0YXJ0OworCisgICAgICAgIHZhciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJv
dzsKKyAgICAgICAgdmFyIGxhc3RSb3cgPSByYW5nZS5lbmQucm93OworCisgICAgICAgIGlmIChy
YW5nZS5pc011bHRpTGluZSgpKSB7CisgICAgICAgICAgICB2YXIgZmlyc3RGdWxsUm93ID0gcmFu
Z2Uuc3RhcnQuY29sdW1uID09IDAgPyBmaXJzdFJvdyA6IGZpcnN0Um93ICsgMTsKKyAgICAgICAg
ICAgIHZhciBsYXN0RnVsbFJvdyA9IGxhc3RSb3cgLSAxOworCisgICAgICAgICAgICBpZiAocmFu
Z2UuZW5kLmNvbHVtbiA+IDApCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbkxpbmUobGFz
dFJvdywgMCwgcmFuZ2UuZW5kLmNvbHVtbik7CisKKyAgICAgICAgICAgIGlmIChsYXN0RnVsbFJv
dyA+PSBmaXJzdEZ1bGxSb3cpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhmaXJz
dEZ1bGxSb3csIGxhc3RGdWxsUm93KTsKKworICAgICAgICAgICAgaWYgKGZpcnN0RnVsbFJvdyAh
PSBmaXJzdFJvdykgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGZpcnN0Um93
LCByYW5nZS5zdGFydC5jb2x1bW4sIHRoaXMuZ2V0TGluZShmaXJzdFJvdykubGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLnJlbW92ZU5ld0xpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucmVt
b3ZlSW5MaW5lKGZpcnN0Um93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKKyAgICB9OworICAgIHRo
aXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7
CisgICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgc3RhcnRDb2x1bW4sIHJv
dywgZW5kQ29sdW1uKTsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAg
ICAgICAgdmFyIHJlbW92ZWQgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1u
KTsKKyAgICAgICAgdmFyIG5ld0xpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikg
KyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4sIGxpbmUubGVuZ3RoKTsKKyAgICAgICAgdGhpcy4k
bGluZXMuc3BsaWNlKHJvdywgMSwgbmV3TGluZSk7CisKKyAgICAgICAgdmFyIGRlbHRhID0gewor
ICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlVGV4dCIsCisgICAgICAgICAgICByYW5nZTogcmFu
Z2UsCisgICAgICAgICAgICB0ZXh0OiByZW1vdmVkCisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiByYW5nZS5z
dGFydDsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywg
bGFzdFJvdykgeworICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoZmlyc3RSb3csIDAsIGxh
c3RSb3cgKyAxLCAwKTsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLiRsaW5lcy5zcGxpY2Uo
Zmlyc3RSb3csIGxhc3RSb3cgLSBmaXJzdFJvdyArIDEpOworCisgICAgICAgIHZhciBkZWx0YSA9
IHsKKyAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZUxpbmVzIiwKKyAgICAgICAgICAgIHJhbmdl
OiByYW5nZSwKKyAgICAgICAgICAgIG5sOiB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSwKKyAg
ICAgICAgICAgIGxpbmVzOiByZW1vdmVkCisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7CisgICAgICAgIHJldHVybiByZW1vdmVkOworICAg
IH07CisgICAgdGhpcy5yZW1vdmVOZXdMaW5lID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHZh
ciBmaXJzdExpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIHNlY29uZExpbmUg
PSB0aGlzLmdldExpbmUocm93KzEpOworCisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShy
b3csIGZpcnN0TGluZS5sZW5ndGgsIHJvdysxLCAwKTsKKyAgICAgICAgdmFyIGxpbmUgPSBmaXJz
dExpbmUgKyBzZWNvbmRMaW5lOworCisgICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShyb3csIDIs
IGxpbmUpOworCisgICAgICAgIHZhciBkZWx0YSA9IHsKKyAgICAgICAgICAgIGFjdGlvbjogInJl
bW92ZVRleHQiLAorICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAgICAgICAgdGV4dDog
dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1p
dCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsKKyAgICB9OworICAgIHRoaXMucmVwbGFjZSA9
IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwICYm
IHJhbmdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKKyAgICAg
ICAgaWYgKHRleHQgPT0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKQorICAgICAgICAgICAgcmV0
dXJuIHJhbmdlLmVuZDsKKworICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7CisgICAgICAgIGlm
ICh0ZXh0KSB7CisgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQs
IHRleHQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5kID0gcmFu
Z2Uuc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZW5kOworICAgIH07CisgICAg
dGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgeworICAgICAgICBmb3IgKHZhciBp
PTA7IGk8ZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0
YXNbaV07CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnJh
bmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOworCisgICAgICAgICAgICBpZiAoZGVsdGEuYWN0
aW9uID09ICJpbnNlcnRMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhy
YW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRh
LmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFu
Z2Uuc3RhcnQsIGRlbHRhLnRleHQpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9u
ID09ICJyZW1vdmVMaW5lcyIpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5n
ZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRl
bHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUo
cmFuZ2UpOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnJldmVydERlbHRhcyA9IGZ1bmN0
aW9uKGRlbHRhcykgeworICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsg
aS0tKSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CisKKyAgICAgICAgICAg
IHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJh
bmdlLmVuZCk7CisKKyAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydExpbmVz
IikKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFu
Z2UuZW5kLnJvdyAtIDEpOworICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJp
bnNlcnRUZXh0IikKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikKKyAgICAgICAgICAg
ICAgICB0aGlzLmluc2VydExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOworICAg
ICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikKKyAgICAgICAg
ICAgICAgICB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgZGVsdGEudGV4dCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0
Um93KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGlu
ZXMoKTsKKyAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0
ZXIoKS5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGlu
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBpbmRleCAtPSBsaW5lc1tpXS5s
ZW5ndGggKyBuZXdsaW5lTGVuZ3RoOworICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0
aCArIG5ld2xpbmVMZW5ndGh9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7cm93OiBsLTEs
IGNvbHVtbjogbGluZXNbbC0xXS5sZW5ndGh9OworICAgIH07CisgICAgdGhpcy5wb3NpdGlvblRv
SW5kZXggPSBmdW5jdGlvbihwb3MsIHN0YXJ0Um93KSB7CisgICAgICAgIHZhciBsaW5lcyA9IHRo
aXMuJGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGluZXMoKTsKKyAgICAgICAgdmFyIG5ld2xpbmVMZW5n
dGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CisgICAgICAgIHZhciBpbmRl
eCA9IDA7CisgICAgICAgIHZhciByb3cgPSBNYXRoLm1pbihwb3Mucm93LCBsaW5lcy5sZW5ndGgp
OworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQorICAg
ICAgICAgICAgaW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoOworCisgICAgICAgIHJldHVybiBpbmRl
eCArIG5ld2xpbmVMZW5ndGggKiBpICsgcG9zLmNvbHVtbjsKKyAgICB9OworCit9KS5jYWxsKERv
Y3VtZW50LnByb3RvdHlwZSk7CisKK2V4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKK30pOwor
CithY2UuZGVmaW5lKCdhY2UvYW5jaG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29v
cCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5F
dmVudEVtaXR0ZXI7CisKK3ZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRv
Yywgcm93LCBjb2x1bW4pIHsKKyAgICB0aGlzLmRvY3VtZW50ID0gZG9jOworICAgIAorICAgIGlm
ICh0eXBlb2YgY29sdW1uID09ICJ1bmRlZmluZWQiKQorICAgICAgICB0aGlzLnNldFBvc2l0aW9u
KHJvdy5yb3csIHJvdy5jb2x1bW4pOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5zZXRQb3NpdGlv
bihyb3csIGNvbHVtbik7CisKKyAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmlu
ZCh0aGlzKTsKKyAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKK307CisKKyhm
dW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKKwor
ICAgIHRoaXMuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKKyAgICB9Owor
ICAgICAgICAKKyAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLmRvY3VtZW50OworICAgIH07CisKKyAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rp
b24oZSkgeworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZhciByYW5nZSA9
IGRlbHRhLnJhbmdlOworICAgICAgICAgICAgCisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cg
PT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA+
IHRoaXMucm93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGlm
IChyYW5nZS5zdGFydC5yb3cgPT0gdGhpcy5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uID4gdGhp
cy5jb2x1bW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgCisgICAgICAgIHZhciByb3cgPSB0
aGlzLnJvdzsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uOworICAgICAgICAKKyAg
ICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7CisgICAgICAgICAgICBp
ZiAocmFuZ2Uuc3RhcnQucm93ID09PSByb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDw9IGNvbHVt
bikgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT09IHJhbmdlLmVuZC5y
b3cpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uICs9IHJhbmdlLmVuZC5jb2x1bW4gLSBy
YW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gLT0gcmFuZ2Uuc3RhcnQuY29sdW1uOwor
ICAgICAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJv
dzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChyYW5nZS5zdGFydC5yb3cgIT09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93IDwg
cm93KSB7CisgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFy
dC5yb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09
PSAiaW5zZXJ0TGluZXMiKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJv
dykgeworICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQu
cm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFj
dGlvbiA9PSAicmVtb3ZlVGV4dCIpIHsKKyAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cg
PT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IGNvbHVtbikgeworICAgICAgICAgICAgICAg
IGlmIChyYW5nZS5lbmQuY29sdW1uID49IGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgY29s
dW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gKHJhbmdlLmVuZC5jb2x1
bW4gLSByYW5nZS5zdGFydC5jb2x1bW4pKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0
YXJ0LnJvdyA8IHJvdykgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93ID09IHJv
dykgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4gLSBy
YW5nZS5lbmQuY29sdW1uKSArIHJhbmdlLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcm93IC09IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmVuZC5yb3cgPT0g
cm93KSB7CisgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFy
dC5yb3c7CisgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFu
Z2UuZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKKyAgICAgICAg
ICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPD0gcm93KSB7CisgICAgICAgICAgICAgICAgaWYgKHJh
bmdlLmVuZC5yb3cgPD0gcm93KQorICAgICAgICAgICAgICAgICAgICByb3cgLT0gcmFuZ2UuZW5k
LnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICAgICAgICAgICAgICBj
b2x1bW4gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4sIHRydWUpOworICAgIH07CisK
KyAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewor
ICAgICAgICB2YXIgcG9zOworICAgICAgICBpZiAobm9DbGlwKSB7CisgICAgICAgICAgICBwb3Mg
PSB7CisgICAgICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBj
b2x1bW4KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBwb3MgPSB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHJvdywgY29sdW1uKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMucm93ID09IHBvcy5yb3cgJiYgdGhp
cy5jb2x1bW4gPT0gcG9zLmNvbHVtbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICB2YXIgb2xkID0geworICAgICAgICAgICAgcm93OiB0aGlzLnJvdywKKyAgICAg
ICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IHRoaXMucm93ID0gcG9zLnJvdzsKKyAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwor
ICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7CisgICAgICAgICAgICBvbGQ6IG9sZCwKKyAg
ICAgICAgICAgIHZhbHVlOiBwb3MKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIHRoaXMuZGV0
YWNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0
ZW5lcigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOworICAgIH07CisgICAgdGhpcy4kY2xpcFBv
c2l0aW9uVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciBw
b3MgPSB7fTsKKyAgICAKKyAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0
aCgpKSB7CisgICAgICAgICAgICBwb3Mucm93ID0gTWF0aC5tYXgoMCwgdGhpcy5kb2N1bWVudC5n
ZXRMZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgcG9zLmNvbHVtbiA9IHRoaXMuZG9jdW1lbnQu
Z2V0TGluZShwb3Mucm93KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocm93
IDwgMCkgeworICAgICAgICAgICAgcG9zLnJvdyA9IDA7CisgICAgICAgICAgICBwb3MuY29sdW1u
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvcy5yb3cgPSBy
b3c7CisgICAgICAgICAgICBwb3MuY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRM
aW5lKHBvcy5yb3cpLmxlbmd0aCwgTWF0aC5tYXgoMCwgY29sdW1uKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChjb2x1bW4gPCAwKQorICAgICAgICAgICAgcG9zLmNvbHVtbiA9
IDA7CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIAorfSku
Y2FsbChBbmNob3IucHJvdG90eXBlKTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9iYWNrZ3Jv
dW5kX3Rva2VuaXplcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBF
dmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVy
OwordmFyIE1BWF9MSU5FX0xFTkdUSCA9IDUwMDA7CisKK3ZhciBCYWNrZ3JvdW5kVG9rZW5pemVy
ID0gZnVuY3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHsKKyAgICB0aGlzLnJ1bm5pbmcgPSBmYWxz
ZTsKKyAgICB0aGlzLmxpbmVzID0gW107CisgICAgdGhpcy5zdGF0ZXMgPSBbXTsKKyAgICB0aGlz
LmN1cnJlbnRMaW5lID0gMDsKKyAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjsKKworICAg
IHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuJHdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXNlbGYucnVubmluZykgeyByZXR1cm47IH0KKworICAgICAgICB2YXIgd29ya2Vy
U3RhcnQgPSBuZXcgRGF0ZSgpOworICAgICAgICB2YXIgc3RhcnRMaW5lID0gc2VsZi5jdXJyZW50
TGluZTsKKyAgICAgICAgdmFyIGRvYyA9IHNlbGYuZG9jOworCisgICAgICAgIHZhciBwcm9jZXNz
ZWRMaW5lcyA9IDA7CisKKyAgICAgICAgdmFyIGxlbiA9IGRvYy5nZXRMZW5ndGgoKTsKKyAgICAg
ICAgd2hpbGUgKHNlbGYuY3VycmVudExpbmUgPCBsZW4pIHsKKyAgICAgICAgICAgIHNlbGYuJHRv
a2VuaXplUm93KHNlbGYuY3VycmVudExpbmUpOworICAgICAgICAgICAgd2hpbGUgKHNlbGYubGlu
ZXNbc2VsZi5jdXJyZW50TGluZV0pCisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TGluZSsr
OworICAgICAgICAgICAgcHJvY2Vzc2VkTGluZXMgKys7CisgICAgICAgICAgICBpZiAoKHByb2Nl
c3NlZExpbmVzICUgNSA9PSAwKSAmJiAobmV3IERhdGUoKSAtIHdvcmtlclN0YXJ0KSA+IDIwKSB7
CisgICAgICAgICAgICAgICAgc2VsZi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBzZWxmLmN1
cnJlbnRMaW5lLTEpOworICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IHNldFRpbWVvdXQo
c2VsZi4kd29ya2VyLCAyMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gZmFsc2U7CisKKyAgICAgICAg
c2VsZi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBsZW4gLSAxKTsKKyAgICB9OworfTsKKwor
KGZ1bmN0aW9uKCl7CisKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7Cisg
ICAgdGhpcy5zZXRUb2tlbml6ZXIgPSBmdW5jdGlvbih0b2tlbml6ZXIpIHsKKyAgICAgICAgdGhp
cy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7CisgICAgICAgIHRoaXMubGluZXMgPSBbXTsKKyAgICAg
ICAgdGhpcy5zdGF0ZXMgPSBbXTsKKworICAgICAgICB0aGlzLnN0YXJ0KDApOworICAgIH07Cisg
ICAgdGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykgeworICAgICAgICB0aGlzLmRvYyA9
IGRvYzsKKyAgICAgICAgdGhpcy5saW5lcyA9IFtdOworICAgICAgICB0aGlzLnN0YXRlcyA9IFtd
OworCisgICAgICAgIHRoaXMuc3RvcCgpOworICAgIH07CisgICAgdGhpcy5maXJlVXBkYXRlRXZl
bnQgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgZGF0YSA9IHsK
KyAgICAgICAgICAgIGZpcnN0OiBmaXJzdFJvdywKKyAgICAgICAgICAgIGxhc3Q6IGxhc3RSb3cK
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fZW1pdCgidXBkYXRlIiwge2RhdGE6IGRhdGF9KTsK
KyAgICB9OworICAgIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihzdGFydFJvdykgeworICAgICAgICB0
aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3cgfHwgMCwgdGhpcy5jdXJyZW50TGlu
ZSwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpOworICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSh0aGlz
LmN1cnJlbnRMaW5lLCB0aGlzLmxpbmVzLmxlbmd0aCk7CisgICAgICAgIHRoaXMuc3RhdGVzLnNw
bGljZSh0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLnN0YXRlcy5sZW5ndGgpOworCisgICAgICAgIHRo
aXMuc3RvcCgpOworICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtl
ciwgNzAwKTsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihk
ZWx0YSkgeworICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKKyAgICAgICAgdmFyIHN0
YXJ0Um93ID0gcmFuZ2Uuc3RhcnQucm93OworICAgICAgICB2YXIgbGVuID0gcmFuZ2UuZW5kLnJv
dyAtIHN0YXJ0Um93OworCisgICAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgICAgIHRo
aXMubGluZXNbc3RhcnRSb3ddID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rp
b24gPT0gInJlbW92ZVRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7Cisg
ICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7Cisg
ICAgICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTsK
KyAgICAgICAgICAgIGFyZ3MudW5zaGlmdChzdGFydFJvdywgMSk7CisgICAgICAgICAgICB0aGlz
LmxpbmVzLnNwbGljZS5hcHBseSh0aGlzLmxpbmVzLCBhcmdzKTsKKyAgICAgICAgICAgIHRoaXMu
c3RhdGVzLnNwbGljZS5hcHBseSh0aGlzLnN0YXRlcywgYXJncyk7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3csIHRoaXMuY3VycmVudExp
bmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTsKKworICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAg
ICAgdGhpcy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7CisgICAgfTsK
KyAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucnVubmluZykK
KyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJ1bm5pbmcpOworICAgICAgICB0aGlzLnJ1
bm5pbmcgPSBmYWxzZTsKKyAgICB9OworICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmxpbmVzW3Jvd10gfHwgdGhpcy4kdG9rZW5pemVSb3co
cm93KTsKKyAgICB9OworICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAg
ICAgaWYgKHRoaXMuY3VycmVudExpbmUgPT0gcm93KQorICAgICAgICAgICAgdGhpcy4kdG9rZW5p
emVSb3cocm93KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzW3Jvd10gfHwgInN0YXJ0IjsK
KyAgICB9OworCisgICAgdGhpcy4kdG9rZW5pemVSb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBzdGF0ZSA9
IHRoaXMuc3RhdGVzW3JvdyAtIDFdOworCisgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IE1BWF9M
SU5FX0xFTkdUSCkgeworICAgICAgICAgICAgdmFyIG92ZXJmbG93ID0ge3ZhbHVlOiBsaW5lLnN1
YnN0cihNQVhfTElORV9MRU5HVEgpLCB0eXBlOiAidGV4dCJ9OworICAgICAgICAgICAgbGluZSA9
IGxpbmUuc2xpY2UoMCwgTUFYX0xJTkVfTEVOR1RIKTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZGF0YSA9IHRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOworICAgICAg
ICBpZiAob3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIGRhdGEudG9rZW5zLnB1c2gob3ZlcmZsb3cp
OworICAgICAgICAgICAgZGF0YS5zdGF0ZSA9ICJzdGFydCI7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodGhpcy5zdGF0ZXNbcm93XSArICIiICE9PSBkYXRhLnN0YXRlICsgIiIpIHsKKyAgICAg
ICAgICAgIHRoaXMuc3RhdGVzW3Jvd10gPSBkYXRhLnN0YXRlOworICAgICAgICAgICAgdGhpcy5s
aW5lc1tyb3cgKyAxXSA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TGluZSA+
IHJvdyArIDEpCisgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7Cisg
ICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpIHsKKyAgICAgICAgICAg
IHRoaXMuY3VycmVudExpbmUgPSByb3cgKyAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRoaXMubGluZXNbcm93XSA9IGRhdGEudG9rZW5zOworICAgIH07CisKK30pLmNhbGwoQmFja2dy
b3VuZFRva2VuaXplci5wcm90b3R5cGUpOworCitleHBvcnRzLkJhY2tncm91bmRUb2tlbml6ZXIg
PSBCYWNrZ3JvdW5kVG9rZW5pemVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9zZWFyY2hfaGln
aGxpZ2h0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcn
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwordmFyIG9v
cCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIp
LlJhbmdlOworCit2YXIgU2VhcmNoSGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmVnRXhwLCBjbGF6eiwg
dHlwZSkgeworICAgIHRoaXMuc2V0UmVnZXhwKHJlZ0V4cCk7CisgICAgdGhpcy5jbGF6eiA9IGNs
YXp6OworICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgInRleHQiOworfTsKKworKGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuTUFYX1JBTkdFUyA9IDUwMDsKKyAgICAKKyAgICB0aGlzLnNldFJlZ2V4cCA9
IGZ1bmN0aW9uKHJlZ0V4cCkgeworICAgICAgICBpZiAodGhpcy5yZWdFeHArIiIgPT0gcmVnRXhw
KyIiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnJlZ0V4cCA9IHJlZ0V4cDsK
KyAgICAgICAgdGhpcy5jYWNoZSA9IFtdOworICAgIH07CisKKyAgICB0aGlzLnVwZGF0ZSA9IGZ1
bmN0aW9uKGh0bWwsIG1hcmtlckxheWVyLCBzZXNzaW9uLCBjb25maWcpIHsKKyAgICAgICAgaWYg
KCF0aGlzLnJlZ0V4cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHN0YXJ0ID0g
Y29uZmlnLmZpcnN0Um93LCBlbmQgPSBjb25maWcubGFzdFJvdzsKKworICAgICAgICBmb3IgKHZh
ciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0
aGlzLmNhY2hlW2ldOworICAgICAgICAgICAgaWYgKHJhbmdlcyA9PSBudWxsKSB7CisgICAgICAg
ICAgICAgICAgcmFuZ2VzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMoc2Vzc2lvbi5nZXRMaW5lKGkp
LCB0aGlzLnJlZ0V4cCk7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPiB0aGlz
Lk1BWF9SQU5HRVMpCisgICAgICAgICAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zbGljZSgw
LCB0aGlzLk1BWF9SQU5HRVMpOworICAgICAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5tYXAo
ZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShp
LCBtYXRjaC5vZmZzZXQsIGksIG1hdGNoLm9mZnNldCArIG1hdGNoLmxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtpXSA9IHJhbmdlcy5sZW5n
dGggPyByYW5nZXMgOiAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh2YXIg
aiA9IHJhbmdlcy5sZW5ndGg7IGogLS07ICkgeworICAgICAgICAgICAgICAgIG1hcmtlckxheWVy
LmRyYXdTaW5nbGVMaW5lTWFya2VyKAorICAgICAgICAgICAgICAgICAgICBodG1sLCByYW5nZXNb
al0udG9TY3JlZW5SYW5nZShzZXNzaW9uKSwgdGhpcy5jbGF6eiwgY29uZmlnLAorICAgICAgICAg
ICAgICAgICAgICBudWxsLCB0aGlzLnR5cGUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChTZWFyY2hIaWdobGlnaHQucHJvdG90
eXBlKTsKKworZXhwb3J0cy5TZWFyY2hIaWdobGlnaHQgPSBTZWFyY2hIaWdobGlnaHQ7Cit9KTsK
KworYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xp
bmUnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5j
dGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJl
KCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIEZvbGRMaW5lID0gcmVxdWlyZSgiLi9mb2xkX2xpbmUi
KS5Gb2xkTGluZTsKK3ZhciBGb2xkID0gcmVxdWlyZSgiLi9mb2xkIikuRm9sZDsKK3ZhciBUb2tl
bkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwor
CitmdW5jdGlvbiBGb2xkaW5nKCkgeworICAgIHRoaXMuZ2V0Rm9sZEF0ID0gZnVuY3Rpb24ocm93
LCBjb2x1bW4sIHNpZGUpIHsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGlu
ZShyb3cpOworICAgICAgICBpZiAoIWZvbGRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHM7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xkID0g
Zm9sZHNbaV07CisgICAgICAgICAgICBpZiAoZm9sZC5yYW5nZS5jb250YWlucyhyb3csIGNvbHVt
bikpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lkZSA9PSAxICYmIGZvbGQucmFuZ2UuaXNFbmQo
cm93LCBjb2x1bW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2lkZSA9PSAtMSAmJiBmb2xkLnJhbmdlLmlzU3RhcnQocm93LCBj
b2x1bW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgdGhpcy5nZXRGb2xkc0luUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewor
ICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgIHZhciBzdGFydCA9IHJhbmdl
LnN0YXJ0OworICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kOworICAgICAgICB2YXIgZm9sZExp
bmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIHZhciBmb3VuZEZvbGRzID0gW107CisKKyAg
ICAgICAgc3RhcnQuY29sdW1uICs9IDE7CisgICAgICAgIGVuZC5jb2x1bW4gLT0gMTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgdmFyIGNtcCA9IGZvbGRMaW5lc1tpXS5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOwor
ICAgICAgICAgICAgaWYgKGNtcCA9PSAyKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTIpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZvbGRzID0g
Zm9sZExpbmVzW2ldLmZvbGRzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xk
cy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZm9sZHNbal07Cisg
ICAgICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOworICAg
ICAgICAgICAgICAgIGlmIChjbXAgPT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBp
ZiAoY21wID09IDQyKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvdW5kRm9sZHM7CisgICAgfTsKKyAgICB0
aGlzLmdldEFsbEZvbGRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmb2xkcyA9IFtdOwor
ICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgIAorICAgICAg
ICBmdW5jdGlvbiBhZGRGb2xkKGZvbGQpIHsKKyAgICAgICAgICAgIGZvbGRzLnB1c2goZm9sZCk7
CisgICAgICAgICAgICBpZiAoIWZvbGQuc3ViRm9sZHMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xk
LnN1YkZvbGRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGFkZEZvbGQoZm9sZC5zdWJG
b2xkc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZm9sZExpbmVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBmb2xkTGluZXNbaV0uZm9sZHMubGVuZ3RoOyBqKyspCisgICAgICAgICAgICAgICAgYWRkRm9s
ZChmb2xkTGluZXNbaV0uZm9sZHNbal0pOworCisgICAgICAgIHJldHVybiBmb2xkczsKKyAgICB9
OworICAgIHRoaXMuZ2V0Rm9sZFN0cmluZ0F0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHRyaW0s
IGZvbGRMaW5lKSB7CisgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUgfHwgdGhpcy5nZXRGb2xk
TGluZShyb3cpOworICAgICAgICBpZiAoIWZvbGRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgdmFyIGxhc3RGb2xkID0geworICAgICAgICAgICAgZW5kOiB7IGNvbHVt
bjogMCB9CisgICAgICAgIH07CisgICAgICAgIHZhciBzdHIsIGZvbGQ7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZm9sZExpbmUuZm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGZvbGQgPSBmb2xkTGluZS5mb2xkc1tpXTsKKyAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkLnJh
bmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkg
eworICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLmdldExp
bmUoZm9sZC5zdGFydC5yb3cpCisgICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcobGFzdEZv
bGQuZW5kLmNvbHVtbiwgZm9sZC5zdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY21wID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0
Rm9sZCA9IGZvbGQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICBz
dHIgPSB0aGlzLmdldExpbmUoZm9sZC5zdGFydC5yb3cpLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQu
Y29sdW1uKTsKKworICAgICAgICBpZiAodHJpbSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBz
dHIuc3Vic3RyaW5nKDAsIGNvbHVtbiAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pOworICAgICAgICBl
bHNlIGlmICh0cmltID09IDEpCisgICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZyhjb2x1
bW4gLSBsYXN0Rm9sZC5lbmQuY29sdW1uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIHN0cjsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGRvY1Jv
dywgc3RhcnRGb2xkTGluZSkgeworICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0
YTsKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICBpZiAoc3RhcnRGb2xkTGluZSkKKyAgICAg
ICAgICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpOworICAgICAgICBpZiAo
aSA9PSAtMSkKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0
YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07
CisgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdyAmJiBmb2xkTGlu
ZS5lbmQucm93ID49IGRvY1JvdykgeworICAgICAgICAgICAgICAgIHJldHVybiBmb2xkTGluZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZExpbmUuZW5kLnJvdyA+IGRvY1JvdykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgdGhpcy5nZXROZXh0Rm9sZExpbmUgPSBmdW5j
dGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhp
cy4kZm9sZERhdGE7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgaWYgKHN0YXJ0Rm9sZExp
bmUpCisgICAgICAgICAgICBpID0gZm9sZERhdGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTsKKyAg
ICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgZm9yIChpOyBp
IDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZv
bGREYXRhW2ldOworICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICB0aGlzLmdldEZvbGRlZFJv
d0NvdW50ID0gZnVuY3Rpb24oZmlyc3QsIGxhc3QpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0g
dGhpcy4kZm9sZERhdGEsIHJvd0NvdW50ID0gbGFzdC1maXJzdCsxOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9s
ZExpbmUgPSBmb2xkRGF0YVtpXSwKKyAgICAgICAgICAgICAgICBlbmQgPSBmb2xkTGluZS5lbmQu
cm93LAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAg
ICAgICAgaWYgKGVuZCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgaWYoc3RhcnQgPCBsYXN0
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0ID49IGZpcnN0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcm93Q291bnQgLT0gbGFzdC1zdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSAwOy8vaW4gb25lIGZvbGQK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
IGVsc2UgaWYoZW5kID49IGZpcnN0KXsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmly
c3QpIC8vZm9sZCBpbnNpZGUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0g
IGVuZC1zdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJv
d0NvdW50IC09ICBlbmQtZmlyc3QrMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcm93Q291bnQ7CisgICAgfTsKKworICAgIHRoaXMuJGFkZEZvbGRMaW5lID0gZnVu
Y3Rpb24oZm9sZExpbmUpIHsKKyAgICAgICAgdGhpcy4kZm9sZERhdGEucHVzaChmb2xkTGluZSk7
CisgICAgICAgIHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAg
ICAgcmV0dXJuIGEuc3RhcnQucm93IC0gYi5zdGFydC5yb3c7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gZm9sZExpbmU7CisgICAgfTsKKyAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihw
bGFjZWhvbGRlciwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERh
dGE7CisgICAgICAgIHZhciBhZGRlZCA9IGZhbHNlOworICAgICAgICB2YXIgZm9sZDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChwbGFjZWhvbGRlciBpbnN0YW5jZW9mIEZvbGQpCisgICAgICAgICAg
ICBmb2xkID0gcGxhY2Vob2xkZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbGQgPSBu
ZXcgRm9sZChyYW5nZSwgcGxhY2Vob2xkZXIpOworCisgICAgICAgIHRoaXMuJGNsaXBSYW5nZVRv
RG9jdW1lbnQoZm9sZC5yYW5nZSk7CisKKyAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZC5zdGFy
dC5yb3c7CisgICAgICAgIHZhciBzdGFydENvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOworICAg
ICAgICB2YXIgZW5kUm93ID0gZm9sZC5lbmQucm93OworICAgICAgICB2YXIgZW5kQ29sdW1uID0g
Zm9sZC5lbmQuY29sdW1uOworICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93ICYmIGVuZENv
bHVtbiAtIHN0YXJ0Q29sdW1uIDwgMikKKyAgICAgICAgICAgIHRocm93ICJUaGUgcmFuZ2UgaGFz
IHRvIGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyB3aWR0aCI7CisKKyAgICAgICAgdmFyIHN0YXJ0
Rm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHN0YXJ0Um93LCBzdGFydENvbHVtbiwgMSk7CisgICAgICAg
IHZhciBlbmRGb2xkID0gdGhpcy5nZXRGb2xkQXQoZW5kUm93LCBlbmRDb2x1bW4sIC0xKTsKKyAg
ICAgICAgaWYgKHN0YXJ0Rm9sZCAmJiBlbmRGb2xkID09IHN0YXJ0Rm9sZCkKKyAgICAgICAgICAg
IHJldHVybiBzdGFydEZvbGQuYWRkU3ViRm9sZChmb2xkKTsKKworICAgICAgICBpZiAoCisgICAg
ICAgICAgICAoc3RhcnRGb2xkICYmICFzdGFydEZvbGQucmFuZ2UuaXNTdGFydChzdGFydFJvdywg
c3RhcnRDb2x1bW4pKQorICAgICAgICAgICAgfHwgKGVuZEZvbGQgJiYgIWVuZEZvbGQucmFuZ2Uu
aXNFbmQoZW5kUm93LCBlbmRDb2x1bW4pKQorICAgICAgICApIHsKKyAgICAgICAgICAgIHRocm93
ICJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZCIgKyBmb2xkLnJh
bmdlICsgc3RhcnRGb2xkLnJhbmdlOworICAgICAgICB9CisgICAgICAgIHZhciBmb2xkcyA9IHRo
aXMuZ2V0Rm9sZHNJblJhbmdlKGZvbGQucmFuZ2UpOworICAgICAgICBpZiAoZm9sZHMubGVuZ3Ro
ID4gMCkgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhmb2xkcyk7CisgICAgICAgICAg
ICBmb2xkLnN1YkZvbGRzID0gZm9sZHM7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZm9sZExp
bmUgPSBmb2xkRGF0YVtpXTsKKyAgICAgICAgICAgIGlmIChlbmRSb3cgPT0gZm9sZExpbmUuc3Rh
cnQucm93KSB7CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTsKKyAgICAg
ICAgICAgICAgICBhZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGFydFJvdyA9PSBmb2xkTGluZS5lbmQucm93
KSB7CisgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTsKKyAgICAgICAgICAg
ICAgICBhZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFmb2xkLnNhbWVSb3cpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lTmV4dCA9IGZvbGREYXRhW2kgKyAxXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lTmV4dCAmJiBmb2xkTGluZU5leHQuc3Rh
cnQucm93ID09IGVuZFJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUubWVy
Z2UoZm9sZExpbmVOZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZW5kUm93IDw9IGZvbGRMaW5l
LnN0YXJ0LnJvdykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFhZGRlZCkKKyAgICAgICAgICAgIGZvbGRMaW5lID0gdGhp
cy4kYWRkRm9sZExpbmUobmV3IEZvbGRMaW5lKHRoaXMuJGZvbGREYXRhLCBmb2xkKSk7CisKKyAg
ICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3Jh
cERhdGEoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShmb2xkTGluZS5zdGFy
dC5yb3csIGZvbGRMaW5lLnN0YXJ0LnJvdyk7CisgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIsIHsgZGF0YTogZm9sZCB9KTsKKwor
ICAgICAgICByZXR1cm4gZm9sZDsKKyAgICB9OworCisgICAgdGhpcy5hZGRGb2xkcyA9IGZ1bmN0
aW9uKGZvbGRzKSB7CisgICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAg
ICAgICAgICAgdGhpcy5hZGRGb2xkKGZvbGQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9Owor
CisgICAgdGhpcy5yZW1vdmVGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAgICB2YXIgZm9s
ZExpbmUgPSBmb2xkLmZvbGRMaW5lOworICAgICAgICB2YXIgc3RhcnRSb3cgPSBmb2xkTGluZS5z
dGFydC5yb3c7CisgICAgICAgIHZhciBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93OworCisgICAg
ICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKKyAgICAgICAgdmFyIGZvbGRzID0g
Zm9sZExpbmUuZm9sZHM7CisgICAgICAgIGlmIChmb2xkcy5sZW5ndGggPT0gMSkgeworICAgICAg
ICAgICAgZm9sZExpbmVzLnNwbGljZShmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSksIDEpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZvbGRMaW5lLnJhbmdlLmlzRW5kKGZvbGQuZW5k
LnJvdywgZm9sZC5lbmQuY29sdW1uKSkgeworICAgICAgICAgICAgZm9sZHMucG9wKCk7CisgICAg
ICAgICAgICBmb2xkTGluZS5lbmQucm93ID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLnJv
dzsKKyAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5jb2x1bW4gPSBmb2xkc1tmb2xkcy5sZW5ndGgg
LSAxXS5lbmQuY29sdW1uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZvbGRMaW5lLnJh
bmdlLmlzU3RhcnQoZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKSkgeworICAgICAg
ICAgICAgZm9sZHMuc2hpZnQoKTsKKyAgICAgICAgICAgIGZvbGRMaW5lLnN0YXJ0LnJvdyA9IGZv
bGRzWzBdLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIGZvbGRMaW5lLnN0YXJ0LmNvbHVtbiA9IGZv
bGRzWzBdLnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChmb2xkLnNh
bWVSb3cpIHsKKyAgICAgICAgICAgIGZvbGRzLnNwbGljZShmb2xkcy5pbmRleE9mKGZvbGQpLCAx
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBuZXdGb2xkTGlu
ZSA9IGZvbGRMaW5lLnNwbGl0KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7Cisg
ICAgICAgICAgICBmb2xkcyA9IG5ld0ZvbGRMaW5lLmZvbGRzOworICAgICAgICAgICAgZm9sZHMu
c2hpZnQoKTsKKyAgICAgICAgICAgIG5ld0ZvbGRMaW5lLnN0YXJ0LnJvdyA9IGZvbGRzWzBdLnN0
YXJ0LnJvdzsKKyAgICAgICAgICAgIG5ld0ZvbGRMaW5lLnN0YXJ0LmNvbHVtbiA9IGZvbGRzWzBd
LnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9k
ZSkKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKHN0YXJ0Um93LCBlbmRSb3cpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShzdGFy
dFJvdywgZW5kUm93KTsKKyAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2VGb2xkIiwgeyBkYXRhOiBmb2xkIH0pOworICAgIH07CisKKyAgICB0
aGlzLnJlbW92ZUZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsKKyAgICAgICAgdmFyIGNsb25lRm9s
ZHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgY2xvbmVGb2xkcy5wdXNoKGZvbGRzW2ldKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb25lRm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICB0
aGlzLnJlbW92ZUZvbGQoZm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICB0aGlzLiRt
b2RpZmllZCA9IHRydWU7CisgICAgfTsKKworICAgIHRoaXMuZXhwYW5kRm9sZCA9IGZ1bmN0aW9u
KGZvbGQpIHsKKyAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpOworICAgICAgICBmb2xkLnN1
YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgdGhpcy5hZGRGb2xk
KGZvbGQpOworICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgZm9sZC5zdWJGb2xkcyA9IFtdOwor
ICAgIH07CisKKyAgICB0aGlzLmV4cGFuZEZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsKKyAgICAg
ICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICB0aGlzLmV4cGFu
ZEZvbGQoZm9sZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAgICB0aGlzLnVuZm9s
ZCA9IGZ1bmN0aW9uKGxvY2F0aW9uLCBleHBhbmRJbm5lcikgeworICAgICAgICB2YXIgcmFuZ2Us
IGZvbGRzOworICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkKKyAgICAgICAgICAgIHJhbmdl
ID0gbmV3IFJhbmdlKDAsIDAsIHRoaXMuZ2V0TGVuZ3RoKCksIDApOworICAgICAgICBlbHNlIGlm
ICh0eXBlb2YgbG9jYXRpb24gPT0gIm51bWJlciIpCisgICAgICAgICAgICByYW5nZSA9IG5ldyBS
YW5nZShsb2NhdGlvbiwgMCwgbG9jYXRpb24sIHRoaXMuZ2V0TGluZShsb2NhdGlvbikubGVuZ3Ro
KTsKKyAgICAgICAgZWxzZSBpZiAoInJvdyIgaW4gbG9jYXRpb24pCisgICAgICAgICAgICByYW5n
ZSA9IFJhbmdlLmZyb21Qb2ludHMobG9jYXRpb24sIGxvY2F0aW9uKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmFuZ2UgPSBsb2NhdGlvbjsKKworICAgICAgICBmb2xkcyA9IHRoaXMuZ2V0
Rm9sZHNJblJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKGV4cGFuZElubmVyKSB7CisgICAgICAg
ICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHdoaWxlIChmb2xkcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZv
bGRzKGZvbGRzKTsKKyAgICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdl
KHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5pc1Jv
d0ZvbGRlZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7CisgICAgICAgIHJldHVy
biAhIXRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRSb3cpOworICAgIH07CisKKyAg
ICB0aGlzLmdldFJvd0ZvbGRFbmQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykgewor
ICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xk
Um93KTsKKyAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuZW5kLnJvdyA6IGRvY1Jv
dzsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUgPSBmdW5jdGlvbihmb2xk
TGluZSwgZW5kUm93LCBlbmRDb2x1bW4sIHN0YXJ0Um93LCBzdGFydENvbHVtbikgeworICAgICAg
ICBpZiAoc3RhcnRSb3cgPT0gbnVsbCkgeworICAgICAgICAgICAgc3RhcnRSb3cgPSBmb2xkTGlu
ZS5zdGFydC5yb3c7CisgICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZW5kUm93ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVuZFJvdyA9IGZvbGRM
aW5lLmVuZC5yb3c7CisgICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmdldExpbmUoZW5kUm93
KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOworICAgICAg
ICB2YXIgdGV4dExpbmUgPSAiIjsKKworICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBs
YWNlaG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikgeworICAgICAgICAgICAgaWYgKHJv
dyA8IHN0YXJ0Um93KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBl
bHNlIGlmIChyb3cgPT0gc3RhcnRSb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDwg
c3RhcnRDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0Q29sdW1uID0gTWF0aC5tYXgoc3RhcnRDb2x1bW4s
IGxhc3RDb2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVy
ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBwbGFjZWhvbGRlcjsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dExpbmUgKz0gZG9jLmdldExp
bmUocm93KS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfS5iaW5kKHRoaXMpLCBlbmRSb3csIGVuZENvbHVtbik7CisgICAgICAgIHJldHVybiB0
ZXh0TGluZTsKKyAgICB9OworCisgICAgdGhpcy5nZXREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKHJv
dywgZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGRM
aW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3cpOworCisgICAgICAgIGlmICghZm9sZExpbmUpIHsK
KyAgICAgICAgICAgIHZhciBsaW5lOworICAgICAgICAgICAgbGluZSA9IHRoaXMuZG9jLmdldExp
bmUocm93KTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiB8
fCAwLCBlbmRDb2x1bW4gfHwgbGluZS5sZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKAorICAgICAgICAgICAgICAgIGZv
bGRMaW5lLCByb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0aGlzLiRjbG9uZUZvbGREYXRhID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBmZCA9IFtdOworICAgICAgICBmZCA9IHRoaXMuJGZvbGREYXRhLm1hcChmdW5jdGlv
bihmb2xkTGluZSkgeworICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHMubWFw
KGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5jbG9uZSgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRMaW5lKGZkLCBmb2xk
cyk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBmZDsKKyAgICB9OworCisgICAgdGhp
cy50b2dnbGVGb2xkID0gZnVuY3Rpb24odHJ5VG9VbmZvbGQpIHsKKyAgICAgICAgdmFyIHNlbGVj
dGlvbiA9IHRoaXMuc2VsZWN0aW9uOworICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0
UmFuZ2UoKTsKKyAgICAgICAgdmFyIGZvbGQ7CisgICAgICAgIHZhciBicmFja2V0UG9zOworCisg
ICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBy
YW5nZS5zdGFydDsKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChjdXJzb3Iucm93
LCBjdXJzb3IuY29sdW1uKTsKKworICAgICAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYnJhY2tldFBvcyA9IHRoaXMuZmluZE1h
dGNoaW5nQnJhY2tldChjdXJzb3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBh
cmVQb2ludChicmFja2V0UG9zKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVu
ZCA9IGJyYWNrZXRQb3M7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOworICAgICAg
ICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICAgICAg
cmFuZ2UuZW5kLmNvbHVtbi0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKGJyYWNrZXRQb3MgPSB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQo
e3JvdzogY3Vyc29yLnJvdywgY29sdW1uOiBjdXJzb3IuY29sdW1uICsgMX0pKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmVQb2ludChicmFja2V0UG9zKSA9PSAxKQorICAgICAg
ICAgICAgICAgICAgICByYW5nZS5lbmQgPSBicmFja2V0UG9zOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOworCisgICAg
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uKys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0Q29tbWVudEZvbGRS
YW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKSB8fCByYW5nZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJ
blJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmICh0cnlUb1VuZm9sZCAmJiBmb2xkcy5sZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGRzKGZvbGRzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZm9s
ZHMubGVuZ3RoID09IDEgKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzWzBdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb2xkKQorICAgICAgICAgICAg
Zm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1u
KTsKKworICAgICAgICBpZiAoZm9sZCAmJiBmb2xkLnJhbmdlLnRvU3RyaW5nKCkgPT0gcmFuZ2Uu
dG9TdHJpbmcoKSkgeworICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gIi4u
LiI7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkgeworICAgICAgICAgICAgcGxh
Y2Vob2xkZXIgPSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBpZihwbGFj
ZWhvbGRlci5sZW5ndGggPCA0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIudHJpbSgpLnN1YnN0cmluZygwLCAyKSArICIuLiI7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmFkZEZvbGQocGxhY2Vob2xkZXIsIHJhbmdlKTsK
KyAgICB9OworCisgICAgdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4sIGRpcikgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0
aGlzLCByb3csIGNvbHVtbik7CisgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJl
bnRUb2tlbigpOworICAgICAgICBpZiAodG9rZW4gJiYgL15jb21tZW50fHN0cmluZy8udGVzdCh0
b2tlbi50eXBlKSkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKCk7CisgICAg
ICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRva2VuLnR5cGUucmVwbGFjZSgvXC4uKi8sICJc
XC4iKSk7CisgICAgICAgICAgICBpZiAoZGlyICE9IDEpIHsKKyAgICAgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7Cisg
ICAgICAgICAgICAgICAgfSB3aGlsZSh0b2tlbiAmJiByZS50ZXN0KHRva2VuLnR5cGUpKTsKKyAg
ICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSBpdGVyYXRvci5nZXRDdXJy
ZW50VG9rZW5Sb3coKTsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9y
LmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgMjsKKworICAgICAgICAgICAgaXRlcmF0b3IgPSBu
ZXcgVG9rZW5JdGVyYXRvcih0aGlzLCByb3csIGNvbHVtbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChkaXIgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKKyAgICAgICAgICAgICAg
ICB9IHdoaWxlKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpOworICAgICAgICAgICAgICAg
IHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworCisgICAg
ICAgICAgICByYW5nZS5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7Cisg
ICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29s
dW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGggLSAyOworICAgICAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZm9sZEFsbCA9IGZ1bmN0aW9uKHN0YXJ0
Um93LCBlbmRSb3cpIHsKKyAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy5mb2xkV2lkZ2V0
czsKKyAgICAgICAgZW5kUm93ID0gZW5kUm93IHx8IHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAg
IGZvciAodmFyIHJvdyA9IHN0YXJ0Um93IHx8IDA7IHJvdyA8IGVuZFJvdzsgcm93KyspIHsKKyAg
ICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddID09IG51bGwpCisgICAgICAgICAgICAgICAg
Zm9sZFdpZGdldHNbcm93XSA9IHRoaXMuZ2V0Rm9sZFdpZGdldChyb3cpOworICAgICAgICAgICAg
aWYgKGZvbGRXaWRnZXRzW3Jvd10gIT0gInN0YXJ0IikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93
KTsKKyAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93IDw9IGVuZFJvdykgdHJ5
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2goZSkge30KKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdGhpcy4kZm9s
ZFN0eWxlcyA9IHsKKyAgICAgICAgIm1hbnVhbCI6IDEsCisgICAgICAgICJtYXJrYmVnaW4iOiAx
LAorICAgICAgICAibWFya2JlZ2luZW5kIjogMQorICAgIH07CisgICAgdGhpcy4kZm9sZFN0eWxl
ID0gIm1hcmtiZWdpbiI7CisgICAgdGhpcy5zZXRGb2xkU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkg
eworICAgICAgICBpZiAoIXRoaXMuJGZvbGRTdHlsZXNbc3R5bGVdKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvbGQgc3R5bGU6ICIgKyBzdHlsZSArICJbIiArIE9iamVj
dC5rZXlzKHRoaXMuJGZvbGRTdHlsZXMpLmpvaW4oIiwgIikgKyAiXSIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHRoaXMuJGZvbGRTdHlsZSA9PSBzdHlsZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB0aGlzLiRmb2xkU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzdHlsZSA9PSAibWFudWFsIikKKyAgICAgICAgICAgIHRoaXMudW5mb2xkKCk7CisgICAgICAg
IHZhciBtb2RlID0gdGhpcy4kZm9sZE1vZGU7CisgICAgICAgIHRoaXMuJHNldEZvbGRpbmcobnVs
bCk7CisgICAgICAgIHRoaXMuJHNldEZvbGRpbmcobW9kZSk7CisgICAgfTsKKyAgICB0aGlzLiRz
ZXRGb2xkaW5nID0gZnVuY3Rpb24oZm9sZE1vZGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJGZvbGRN
b2RlID09IGZvbGRNb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgIHRoaXMuJGZvbGRNb2RlID0gZm9sZE1vZGU7CisgICAgICAgIAorICAgICAgICB0aGlzLnJl
bW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7CisgICAgICAg
IHRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
Zm9sZE1vZGUgfHwgdGhpcy4kZm9sZFN0eWxlID09ICJtYW51YWwiKSB7CisgICAgICAgICAgICB0
aGlzLmZvbGRXaWRnZXRzID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9IFtdOworICAgICAgICB0aGlzLmdl
dEZvbGRXaWRnZXQgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0LmJpbmQoZm9sZE1vZGUsIHRoaXMs
IHRoaXMuJGZvbGRTdHlsZSk7CisgICAgICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZm9s
ZE1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRT
dHlsZSk7CisgICAgICAgIAorICAgICAgICB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMu
dXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbignY2hhbmdlJywg
dGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpOworICAgICAgICAKKyAgICB9OworCisgICAgdGhpcy5v
bkZvbGRXaWRnZXRDbGljayA9IGZ1bmN0aW9uKHJvdywgZSkgeworICAgICAgICBlID0gZS5kb21F
dmVudDsKKyAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTsKKyAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG9ubHlTdWJmb2xk
cyA9IGUuc2hpZnRLZXk7CisgICAgICAgIHZhciBhZGRTdWJmb2xkcyA9IG9ubHlTdWJmb2xkcyB8
fCBlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5OworICAgICAgICB2YXIgZm9sZDsK
KworICAgICAgICBpZiAodHlwZSA9PSAiZW5kIikKKyAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdl
dEZvbGRBdChyb3csIDAsIC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9sZCA9IHRo
aXMuZ2V0Rm9sZEF0KHJvdywgbGluZS5sZW5ndGgsIDEpOworCisgICAgICAgIGlmIChmb2xkKSB7
CisgICAgICAgICAgICBpZiAoYWRkU3ViZm9sZHMpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1v
dmVGb2xkKGZvbGQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuZXhw
YW5kRm9sZChmb2xkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdyk7CisgICAgICAgIGlmIChy
YW5nZSkgeworICAgICAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpKSB7CisgICAgICAg
ICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3Rh
cnQuY29sdW1uLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZCAmJiByYW5nZS5pc0VxdWFs
KGZvbGQucmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xk
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFvbmx5U3ViZm9sZHMpCisg
ICAgICAgICAgICAgICAgdGhpcy5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisKKyAgICAgICAgICAg
IGlmIChhZGRTdWJmb2xkcykKKyAgICAgICAgICAgICAgICB0aGlzLmZvbGRBbGwocmFuZ2Uuc3Rh
cnQucm93ICsgMSwgcmFuZ2UuZW5kLnJvdyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoYWRkU3ViZm9sZHMpCisgICAgICAgICAgICAgICAgdGhpcy5mb2xkQWxsKHJvdyArIDEs
IHRoaXMuZ2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgKGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVu
dCkuY2xhc3NOYW1lICs9ICIgYWNlX2ludmFsaWQiCisgICAgICAgIH0KKyAgICB9OworICAgIAor
ICAgIHRoaXMudXBkYXRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBk
ZWx0YSA9IGUuZGF0YTsKKyAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7CisgICAgICAg
IHZhciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgdmFyIGxlbiA9IHJhbmdl
LmVuZC5yb3cgLSBmaXJzdFJvdzsKKworICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAg
ICAgICB0aGlzLmZvbGRXaWRnZXRzW2ZpcnN0Um93XSA9IG51bGw7CisgICAgICAgIH0gZWxzZSBp
ZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IiB8fCBkZWx0YS5hY3Rpb24gPT0gInJlbW92
ZUxpbmVzIikgeworICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZmlyc3RSb3cs
IGxlbiArIDEsIG51bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBBcnJheShsZW4gKyAxKTsKKyAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7
CisgICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZS5hcHBseSh0aGlzLmZvbGRXaWRn
ZXRzLCBhcmdzKTsKKyAgICAgICAgfQorICAgIH07CisKK30KKworZXhwb3J0cy5Gb2xkaW5nID0g
Rm9sZGluZzsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5l
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgi
Li4vcmFuZ2UiKS5SYW5nZTsKK2Z1bmN0aW9uIEZvbGRMaW5lKGZvbGREYXRhLCBmb2xkcykgewor
ICAgIHRoaXMuZm9sZERhdGEgPSBmb2xkRGF0YTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShmb2xk
cykpIHsKKyAgICAgICAgdGhpcy5mb2xkcyA9IGZvbGRzOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZvbGRzID0gdGhpcy5mb2xkcyA9IFsgZm9sZHMgXTsKKyAgICB9CisKKyAgICB2YXIgbGFzdCA9
IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdCisgICAgdGhpcy5yYW5nZSA9IG5ldyBSYW5nZShmb2xk
c1swXS5zdGFydC5yb3csIGZvbGRzWzBdLnN0YXJ0LmNvbHVtbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3QuZW5kLnJvdywgbGFzdC5lbmQuY29sdW1uKTsKKyAgICB0aGlzLnN0YXJ0
ID0gdGhpcy5yYW5nZS5zdGFydDsKKyAgICB0aGlzLmVuZCAgID0gdGhpcy5yYW5nZS5lbmQ7CisK
KyAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICBmb2xkLnNl
dEZvbGRMaW5lKHRoaXMpOworICAgIH0sIHRoaXMpOworfQorCisoZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5zaGlmdFJvdyA9IGZ1bmN0aW9uKHNoaWZ0KSB7CisgICAgICAgIHRoaXMuc3RhcnQucm93
ICs9IHNoaWZ0OworICAgICAgICB0aGlzLmVuZC5yb3cgKz0gc2hpZnQ7CisgICAgICAgIHRoaXMu
Zm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CisgICAgICAgICAgICBmb2xkLnN0YXJ0LnJv
dyArPSBzaGlmdDsKKyAgICAgICAgICAgIGZvbGQuZW5kLnJvdyArPSBzaGlmdDsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgdGhpcy5hZGRGb2xkID0gZnVuY3Rpb24oZm9sZCkgeworICAgICAg
ICBpZiAoZm9sZC5zYW1lUm93KSB7CisgICAgICAgICAgICBpZiAoZm9sZC5zdGFydC5yb3cgPCB0
aGlzLnN0YXJ0Um93IHx8IGZvbGQuZW5kUm93ID4gdGhpcy5lbmRSb3cpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyAiQ2FuJ3QgYWRkIGEgZm9sZCB0byB0aGlzIEZvbGRMaW5lIGFzIGl0IGhhcyBu
byBjb25uZWN0aW9uIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZm9sZHMucHVz
aChmb2xkKTsKKyAgICAgICAgICAgIHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLCBiKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC1hLnJhbmdlLmNvbXBhcmVFbmQoYi5zdGFydC5yb3csIGIu
c3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHRoaXMucmFu
Z2UuY29tcGFyZUVuZChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pID4gMCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGQuZW5kLnJvdzsKKyAgICAgICAgICAg
ICAgICB0aGlzLmVuZC5jb2x1bW4gPSAgZm9sZC5lbmQuY29sdW1uOworICAgICAgICAgICAgfSBl
bHNlIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVTdGFydChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNv
bHVtbikgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0
LnJvdzsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29s
dW1uOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3RhcnQucm93ID09
IHRoaXMuZW5kLnJvdykgeworICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNoKGZvbGQpOworICAg
ICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OworICAgICAgICAgICAgdGhpcy5l
bmQuY29sdW1uID0gZm9sZC5lbmQuY29sdW1uOworICAgICAgICB9IGVsc2UgaWYgKGZvbGQuZW5k
LnJvdyA9PSB0aGlzLnN0YXJ0LnJvdykgeworICAgICAgICAgICAgdGhpcy5mb2xkcy51bnNoaWZ0
KGZvbGQpOworICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdzsKKyAg
ICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyAiVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRS
b3cgdGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciOworICAgICAgICB9CisgICAgICAg
IGZvbGQuZm9sZExpbmUgPSB0aGlzOworICAgIH0KKworICAgIHRoaXMuY29udGFpbnNSb3cgPSBm
dW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHJvdyA+PSB0aGlzLnN0YXJ0LnJvdyAmJiBy
b3cgPD0gdGhpcy5lbmQucm93OworICAgIH0KKworICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKGNh
bGxiYWNrLCBlbmRSb3csIGVuZENvbHVtbikgeworICAgICAgICB2YXIgbGFzdEVuZCA9IDAsCisg
ICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHMsCisgICAgICAgICAgICBmb2xkLAorICAgICAg
ICAgICAgY29tcCwgc3RvcCwgaXNOZXdSb3cgPSB0cnVlOworCisgICAgICAgIGlmIChlbmRSb3cg
PT0gbnVsbCkgeworICAgICAgICAgICAgZW5kUm93ID0gdGhpcy5lbmQucm93OworICAgICAgICAg
ICAgZW5kQ29sdW1uID0gdGhpcy5lbmQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9sZCA9
IGZvbGRzW2ldOworCisgICAgICAgICAgICBjb21wID0gZm9sZC5yYW5nZS5jb21wYXJlU3RhcnQo
ZW5kUm93LCBlbmRDb2x1bW4pOworICAgICAgICAgICAgaWYgKGNvbXAgPT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNO
ZXdSb3cpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3RvcCA9IGNhbGxiYWNrKG51bGwsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNv
bHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpOworICAgICAgICAgICAgc3RvcCA9ICFzdG9wICYmIGNh
bGxiYWNrKGZvbGQucGxhY2Vob2xkZXIsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVt
biwgbGFzdEVuZCk7CisgICAgICAgICAgICBpZiAoc3RvcCB8fCBjb21wID09IDApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc05ld1JvdyA9
ICFmb2xkLnNhbWVSb3c7CisgICAgICAgICAgICBsYXN0RW5kID0gZm9sZC5lbmQuY29sdW1uOwor
ICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0
RW5kLCBpc05ld1Jvdyk7CisgICAgfQorCisgICAgdGhpcy5nZXROZXh0Rm9sZFRvID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFyIGZvbGQsIGNtcDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLmZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb2xk
ID0gdGhpcy5mb2xkc1tpXTsKKyAgICAgICAgICAgIGNtcCA9IGZvbGQucmFuZ2UuY29tcGFyZUVu
ZChyb3csIGNvbHVtbik7CisgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgZm9sZDogZm9sZCwKKyAgICAgICAg
ICAgICAgICAgICAga2luZDogImFmdGVyIgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNtcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9sZDogZm9sZCwKKyAgICAgICAgICAgICAgICAgICAga2luZDogImlu
c2lkZSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdGhpcy5hZGRSZW1vdmVDaGFycyA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uLCBsZW4pIHsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMuZ2V0TmV4dEZv
bGRUbyhyb3csIGNvbHVtbiksCisgICAgICAgICAgICBmb2xkLCBmb2xkczsKKyAgICAgICAgaWYg
KHJldCkgeworICAgICAgICAgICAgZm9sZCA9IHJldC5mb2xkOworICAgICAgICAgICAgaWYgKHJl
dC5raW5kID09ICJpbnNpZGUiCisgICAgICAgICAgICAgICAgJiYgZm9sZC5zdGFydC5jb2x1bW4g
IT0gY29sdW1uCisgICAgICAgICAgICAgICAgJiYgZm9sZC5zdGFydC5yb3cgIT0gcm93KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25z
b2xlLmxvZyhyb3csIGNvbHVtbiwgZm9sZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGQu
c3RhcnQucm93ID09IHJvdykgeworICAgICAgICAgICAgICAgIGZvbGRzID0gdGhpcy5mb2xkczsK
KyAgICAgICAgICAgICAgICB2YXIgaSA9IGZvbGRzLmluZGV4T2YoZm9sZCk7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVt
biArPSBsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaTsgaSA8
IGZvbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZC5zdGFydC5jb2x1bW4gKz0gbGVuOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZv
bGQuZW5kLmNvbHVtbiArPSBsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuZW5kLmNvbHVtbiArPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0aGlzLnNwbGl0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICAgICAgdmFy
IGZvbGQgPSB0aGlzLmdldE5leHRGb2xkVG8ocm93LCBjb2x1bW4pLmZvbGQsCisgICAgICAgICAg
ICBmb2xkcyA9IHRoaXMuZm9sZHM7CisgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuZm9sZERh
dGE7CisKKyAgICAgICAgaWYgKCFmb2xkKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaSA9IGZvbGRzLmluZGV4T2YoZm9sZCk7CisgICAgICAgIHZh
ciBmb2xkQmVmb3JlID0gZm9sZHNbaSAtIDFdOworICAgICAgICB0aGlzLmVuZC5yb3cgPSBmb2xk
QmVmb3JlLmVuZC5yb3c7CisgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGZvbGRCZWZvcmUuZW5k
LmNvbHVtbjsKKyAgICAgICAgZm9sZHMgPSBmb2xkcy5zcGxpY2UoaSwgZm9sZHMubGVuZ3RoIC0g
aSk7CisKKyAgICAgICAgdmFyIG5ld0ZvbGRMaW5lID0gbmV3IEZvbGRMaW5lKGZvbGREYXRhLCBm
b2xkcyk7CisgICAgICAgIGZvbGREYXRhLnNwbGljZShmb2xkRGF0YS5pbmRleE9mKHRoaXMpICsg
MSwgMCwgbmV3Rm9sZExpbmUpOworICAgICAgICByZXR1cm4gbmV3Rm9sZExpbmU7CisgICAgfQor
CisgICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKGZvbGRMaW5lTmV4dCkgeworICAgICAgICB2YXIg
Zm9sZHMgPSBmb2xkTGluZU5leHQuZm9sZHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Zm9sZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkc1tpXSk7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTsKKyAgICAg
ICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YoZm9sZExpbmVOZXh0KSwgMSk7Cisg
ICAgfQorCisgICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmV0
ID0gW3RoaXMucmFuZ2UudG9TdHJpbmcoKSArICI6IFsiIF07CisKKyAgICAgICAgdGhpcy5mb2xk
cy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKKyAgICAgICAgICAgIHJldC5wdXNoKCIgICIgKyBm
b2xkLnRvU3RyaW5nKCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0LnB1c2goIl0iKQorICAg
ICAgICByZXR1cm4gcmV0LmpvaW4oIlxuIik7CisgICAgfQorCisgICAgdGhpcy5pZHhUb1Bvc2l0
aW9uID0gZnVuY3Rpb24oaWR4KSB7CisgICAgICAgIHZhciBsYXN0Rm9sZEVuZENvbHVtbiA9IDA7
CisgICAgICAgIHZhciBmb2xkOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5m
b2xkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmZvbGRzW2ld
OworCisgICAgICAgICAgICBpZHggLT0gZm9sZC5zdGFydC5jb2x1bW4gLSBsYXN0Rm9sZEVuZENv
bHVtbjsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICAgICAgcm93OiBmb2xkLnN0YXJ0LnJvdywKKyAgICAgICAgICAg
ICAgICAgICAgY29sdW1uOiBmb2xkLnN0YXJ0LmNvbHVtbiArIGlkeAorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlkeCAtPSBmb2xkLnBsYWNlaG9sZGVy
Lmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZvbGQuc3RhcnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3RGb2xkRW5k
Q29sdW1uID0gZm9sZC5lbmQuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHJvdzogdGhpcy5lbmQucm93LAorICAgICAgICAgICAgY29sdW1uOiB0aGlz
LmVuZC5jb2x1bW4gKyBpZHgKKyAgICAgICAgfTsKKyAgICB9Cit9KS5jYWxsKEZvbGRMaW5lLnBy
b3RvdHlwZSk7CisKK2V4cG9ydHMuRm9sZExpbmUgPSBGb2xkTGluZTsKK30pOworCithY2UuZGVm
aW5lKCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewordmFyIEZvbGQgPSBl
eHBvcnRzLkZvbGQgPSBmdW5jdGlvbihyYW5nZSwgcGxhY2Vob2xkZXIpIHsKKyAgICB0aGlzLmZv
bGRMaW5lID0gbnVsbDsKKyAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7CisgICAg
dGhpcy5yYW5nZSA9IHJhbmdlOworICAgIHRoaXMuc3RhcnQgPSByYW5nZS5zdGFydDsKKyAgICB0
aGlzLmVuZCA9IHJhbmdlLmVuZDsKKworICAgIHRoaXMuc2FtZVJvdyA9IHJhbmdlLnN0YXJ0LnJv
dyA9PSByYW5nZS5lbmQucm93OworICAgIHRoaXMuc3ViRm9sZHMgPSBbXTsKK307CisKKyhmdW5j
dGlvbigpIHsKKworICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuICciJyArIHRoaXMucGxhY2Vob2xkZXIgKyAnIiAnICsgdGhpcy5yYW5nZS50b1N0cmluZygp
OworICAgIH07CisKKyAgICB0aGlzLnNldEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHsK
KyAgICAgICAgdGhpcy5mb2xkTGluZSA9IGZvbGRMaW5lOworICAgICAgICB0aGlzLnN1YkZvbGRz
LmZvckVhY2goZnVuY3Rpb24oZm9sZCkgeworICAgICAgICAgICAgZm9sZC5zZXRGb2xkTGluZShm
b2xkTGluZSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICB0aGlzLmNsb25lID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2UuY2xvbmUoKTsKKyAgICAgICAg
dmFyIGZvbGQgPSBuZXcgRm9sZChyYW5nZSwgdGhpcy5wbGFjZWhvbGRlcik7CisgICAgICAgIHRo
aXMuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7CisgICAgICAgICAgICBmb2xk
LnN1YkZvbGRzLnB1c2goc3ViRm9sZC5jbG9uZSgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBmb2xkOworICAgIH07CisKKyAgICB0aGlzLmFkZFN1YkZvbGQgPSBmdW5jdGlvbihmb2xk
KSB7CisgICAgICAgIGlmICh0aGlzLnJhbmdlLmlzRXF1YWwoZm9sZCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKworICAgICAgICBpZiAoIXRoaXMucmFuZ2UuY29udGFpbnNSYW5nZShmb2xk
KSkKKyAgICAgICAgICAgIHRocm93ICJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhp
c3RpbmcgZm9sZCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZTsKKworICAgICAgICB2YXIgcm93
ID0gZm9sZC5yYW5nZS5zdGFydC5yb3csIGNvbHVtbiA9IGZvbGQucmFuZ2Uuc3RhcnQuY29sdW1u
OworICAgICAgICBmb3IgKHZhciBpID0gMCwgY21wID0gLTE7IGkgPCB0aGlzLnN1YkZvbGRzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBjbXAgPSB0aGlzLnN1YkZvbGRzW2ldLnJhbmdlLmNv
bXBhcmUocm93LCBjb2x1bW4pOworICAgICAgICAgICAgaWYgKGNtcCAhPSAxKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciBhZnRlclN0YXJ0ID0gdGhpcy5z
dWJGb2xkc1tpXTsKKworICAgICAgICBpZiAoY21wID09IDApCisgICAgICAgICAgICByZXR1cm4g
YWZ0ZXJTdGFydC5hZGRTdWJGb2xkKGZvbGQpOworICAgICAgICB2YXIgcm93ID0gZm9sZC5yYW5n
ZS5lbmQucm93LCBjb2x1bW4gPSBmb2xkLnJhbmdlLmVuZC5jb2x1bW47CisgICAgICAgIGZvciAo
dmFyIGogPSBpLCBjbXAgPSAtMTsgaiA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBqKyspIHsKKyAg
ICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbal0ucmFuZ2UuY29tcGFyZShyb3csIGNvbHVt
bik7CisgICAgICAgICAgICBpZiAoY21wICE9IDEpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGFmdGVyRW5kID0gdGhpcy5zdWJGb2xkc1tqXTsKKworICAg
ICAgICBpZiAoY21wID09IDApCisgICAgICAgICAgICB0aHJvdyAiQSBmb2xkIGNhbid0IGludGVy
c2VjdCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiICsgZm9sZC5yYW5nZSArIHRoaXMucmFuZ2U7CisK
KyAgICAgICAgdmFyIGNvbnN1bWVkRm9sZHMgPSB0aGlzLnN1YkZvbGRzLnNwbGljZShpLCBqIC0g
aSwgZm9sZCk7CisgICAgICAgIGZvbGQuc2V0Rm9sZExpbmUodGhpcy5mb2xkTGluZSk7CisKKyAg
ICAgICAgcmV0dXJuIGZvbGQ7CisgICAgfTsKKworfSkuY2FsbChGb2xkLnByb3RvdHlwZSk7CisK
K30pOworCithY2UuZGVmaW5lKCdhY2UvdG9rZW5faXRlcmF0b3InLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
dmFyIFRva2VuSXRlcmF0b3IgPSBmdW5jdGlvbihzZXNzaW9uLCBpbml0aWFsUm93LCBpbml0aWFs
Q29sdW1uKSB7CisgICAgdGhpcy4kc2Vzc2lvbiA9IHNlc3Npb247CisgICAgdGhpcy4kcm93ID0g
aW5pdGlhbFJvdzsKKyAgICB0aGlzLiRyb3dUb2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhpbml0
aWFsUm93KTsKKworICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChpbml0aWFsUm93
LCBpbml0aWFsQ29sdW1uKTsKKyAgICB0aGlzLiR0b2tlbkluZGV4ID0gdG9rZW4gPyB0b2tlbi5p
bmRleCA6IC0xOworfTsKKworKGZ1bmN0aW9uKCkgeyAKKyAgICB0aGlzLnN0ZXBCYWNrd2FyZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiR0b2tlbkluZGV4IC09IDE7CisgICAgICAgIAor
ICAgICAgICB3aGlsZSAodGhpcy4kdG9rZW5JbmRleCA8IDApIHsKKyAgICAgICAgICAgIHRoaXMu
JHJvdyAtPSAxOworICAgICAgICAgICAgaWYgKHRoaXMuJHJvdyA8IDApIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLiRyb3cgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0g
dGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKKyAgICAgICAgICAgIHRoaXMuJHRv
a2VuSW5kZXggPSB0aGlzLiRyb3dUb2tlbnMubGVuZ3RoIC0gMTsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07
CisgICAgfTsgICAKKyAgICB0aGlzLnN0ZXBGb3J3YXJkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciByb3dDb3VudCA9IHRoaXMuJHNlc3Npb24uZ2V0TGVuZ3RoKCk7CisgICAgICAgIHRoaXMu
JHRva2VuSW5kZXggKz0gMTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0aGlzLiR0b2tlbklu
ZGV4ID49IHRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuJHJvdyAr
PSAxOworICAgICAgICAgICAgaWYgKHRoaXMuJHJvdyA+PSByb3dDb3VudCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuJHJvdyA9IHJvd0NvdW50IC0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0gdGhp
cy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKKyAgICAgICAgICAgIHRoaXMuJHRva2Vu
SW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsKKyAgICB9OyAgICAgIAorICAgIHRoaXMuZ2V0
Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9r
ZW5zW3RoaXMuJHRva2VuSW5kZXhdOworICAgIH07ICAgICAgCisgICAgdGhpcy5nZXRDdXJyZW50
VG9rZW5Sb3cgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyb3c7CisgICAg
fTsgICAgIAorICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByb3dUb2tlbnMgPSB0aGlzLiRyb3dUb2tlbnM7CisgICAgICAgIHZhciB0b2tl
bkluZGV4ID0gdGhpcy4kdG9rZW5JbmRleDsKKyAgICAgICAgdmFyIGNvbHVtbiA9IHJvd1Rva2Vu
c1t0b2tlbkluZGV4XS5zdGFydDsKKyAgICAgICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjsKKyAgICAgICAgICAgIAorICAgICAgICBjb2x1bW4g
PSAwOworICAgICAgICB3aGlsZSAodG9rZW5JbmRleCA+IDApIHsKKyAgICAgICAgICAgIHRva2Vu
SW5kZXggLT0gMTsKKyAgICAgICAgICAgIGNvbHVtbiArPSByb3dUb2tlbnNbdG9rZW5JbmRleF0u
dmFsdWUubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY29sdW1u
OyAgCisgICAgfTsKKyAgICAgICAgICAgIAorfSkuY2FsbChUb2tlbkl0ZXJhdG9yLnByb3RvdHlw
ZSk7CisKK2V4cG9ydHMuVG9rZW5JdGVyYXRvciA9IFRva2VuSXRlcmF0b3I7Cit9KTsKKworYWNl
LmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoJywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL3JhbmdlJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBUb2tlbkl0ZXJhdG9y
ID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwordmFyIFJhbmdl
ID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKworCitmdW5jdGlvbiBCcmFja2V0TWF0Y2go
KSB7CisKKyAgICB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQgPSBmdW5jdGlvbihwb3NpdGlvbiwg
Y2hhcikgeworICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IDApIHJldHVybiBudWxsOwor
CisgICAgICAgIHZhciBjaGFyQmVmb3JlQ3Vyc29yID0gY2hhciB8fCB0aGlzLmdldExpbmUocG9z
aXRpb24ucm93KS5jaGFyQXQocG9zaXRpb24uY29sdW1uLTEpOworICAgICAgICBpZiAoY2hhckJl
Zm9yZUN1cnNvciA9PSAiIikgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIG1hdGNoID0gY2hh
ckJlZm9yZUN1cnNvci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7CisgICAgICAgIGlm
ICghbWF0Y2gpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAobWF0Y2hb
MV0pCisgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG1hdGNoWzFd
LCBwb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiRmaW5k
T3BlbmluZ0JyYWNrZXQobWF0Y2hbMl0sIHBvc2l0aW9uKTsKKyAgICB9OworICAgIAorICAgIHRo
aXMuZ2V0QnJhY2tldFJhbmdlID0gZnVuY3Rpb24ocG9zKSB7CisgICAgICAgIHZhciBsaW5lID0g
dGhpcy5nZXRMaW5lKHBvcy5yb3cpOworICAgICAgICB2YXIgYmVmb3JlID0gdHJ1ZSwgcmFuZ2U7
CisKKyAgICAgICAgdmFyIGNociA9IGxpbmUuY2hhckF0KHBvcy5jb2x1bW4tMSk7CisgICAgICAg
IHZhciBtYXRjaCA9IGNociAmJiBjaHIubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pOwor
ICAgICAgICBpZiAoIW1hdGNoKSB7CisgICAgICAgICAgICBjaHIgPSBsaW5lLmNoYXJBdChwb3Mu
Y29sdW1uKTsKKyAgICAgICAgICAgIHBvcyA9IHtyb3c6IHBvcy5yb3csIGNvbHVtbjogcG9zLmNv
bHVtbiArIDF9OworICAgICAgICAgICAgbWF0Y2ggPSBjaHIgJiYgY2hyLm1hdGNoKC8oW1woXFtc
e10pfChbXClcXVx9XSkvKTsKKyAgICAgICAgICAgIGJlZm9yZSA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAg
ICBpZiAobWF0Y2hbMV0pIHsKKyAgICAgICAgICAgIHZhciBicmFja2V0UG9zID0gdGhpcy4kZmlu
ZENsb3NpbmdCcmFja2V0KG1hdGNoWzFdLCBwb3MpOworICAgICAgICAgICAgaWYgKCFicmFja2V0
UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmFuZ2UgPSBS
YW5nZS5mcm9tUG9pbnRzKHBvcywgYnJhY2tldFBvcyk7CisgICAgICAgICAgICBpZiAoIWJlZm9y
ZSkgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydC5jb2x1bW4tLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJhbmdl
LmN1cnNvciA9IHJhbmdlLmVuZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBi
cmFja2V0UG9zID0gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3MpOworICAg
ICAgICAgICAgaWYgKCFicmFja2V0UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGJyYWNrZXRQb3MsIHBvcyk7Cisg
ICAgICAgICAgICBpZiAoIWJlZm9yZSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNv
bHVtbisrOworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4tLTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdlLnN0YXJ0OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfTsKKworICAgIHRoaXMuJGJyYWNr
ZXRzID0geworICAgICAgICAiKSI6ICIoIiwKKyAgICAgICAgIigiOiAiKSIsCisgICAgICAgICJd
IjogIlsiLAorICAgICAgICAiWyI6ICJdIiwKKyAgICAgICAgInsiOiAifSIsCisgICAgICAgICJ9
IjogInsiCisgICAgfTsKKworICAgIHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldCA9IGZ1bmN0aW9u
KGJyYWNrZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIG9wZW5CcmFja2V0ID0g
dGhpcy4kYnJhY2tldHNbYnJhY2tldF07CisgICAgICAgIHZhciBkZXB0aCA9IDE7CisKKyAgICAg
ICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBw
b3NpdGlvbi5jb2x1bW4pOworICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW4oKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHRva2VuID0gaXRlcmF0
b3Iuc3RlcEZvcndhcmQoKTsKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgICBpZiAoIXR5cGVSZSl7CisgICAgICAgICAgICB0eXBlUmUg
PSBuZXcgUmVnRXhwKAorICAgICAgICAgICAgICAgICIoXFwuPyIgKworICAgICAgICAgICAgICAg
IHRva2VuLnR5cGUucmVwbGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCJycGFyZW4iLCAiLnBhcmVu
IikKKyAgICAgICAgICAgICAgICArICIpKyIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHZhbHVlSW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJy
ZW50VG9rZW5Db2x1bW4oKSAtIDI7CisgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwor
ICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgCisgICAgICAgICAgICB3
aGlsZSAodmFsdWVJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIGNociA9IHZhbHVl
LmNoYXJBdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hyID09IG9wZW5CcmFj
a2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoIC09IDE7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Jv
dzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uOiB2YWx1ZUluZGV4ICsgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1u
KCl9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNociA9PSBicmFja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRl
cHRoICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgg
LT0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAgICAgICAgfSB3aGlsZSAodG9r
ZW4gJiYgIXR5cGVSZS50ZXN0KHRva2VuLnR5cGUpKTsKKworICAgICAgICAgICAgaWYgKHRva2Vu
ID09IG51bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgdmFsdWVJbmRleCA9IHZh
bHVlLmxlbmd0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxs
OworICAgIH07CisKKyAgICB0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFj
a2V0LCBwb3NpdGlvbiwgdHlwZVJlKSB7CisgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldCA9IHRo
aXMuJGJyYWNrZXRzW2JyYWNrZXRdOworICAgICAgICB2YXIgZGVwdGggPSAxOworCisgICAgICAg
IHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9z
aXRpb24uY29sdW1uKTsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9y
LnN0ZXBGb3J3YXJkKCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCF0eXBlUmUpeworICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4
cCgKKyAgICAgICAgICAgICAgICAiKFxcLj8iICsKKyAgICAgICAgICAgICAgICB0b2tlbi50eXBl
LnJlcGxhY2UoIi4iLCAiXFwuIikucmVwbGFjZSgibHBhcmVuIiwgIi5wYXJlbiIpCisgICAgICAg
ICAgICAgICAgKyAiKSsiCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHZhciB2
YWx1ZUluZGV4ID0gcG9zaXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29s
dW1uKCk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKworICAgICAgICAgICAgdmFyIHZhbHVl
ID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5n
dGg7CisgICAgICAgICAgICB3aGlsZSAodmFsdWVJbmRleCA8IHZhbHVlTGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGNociA9IHZhbHVlLmNoYXJBdCh2YWx1ZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2hyID09IGNsb3NpbmdCcmFja2V0KSB7CisgICAgICAgICAgICAgICAgICAg
IGRlcHRoIC09IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2Vu
Um93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB2YWx1ZUluZGV4ICsg
aXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PSBicmFj
a2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoICs9IDE7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHZhbHVlSW5kZXggKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJk
KCk7CisgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlw
ZSkpOworCisgICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgdmFsdWVJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07Cit9CitleHBvcnRzLkJyYWNrZXRNYXRjaCA9
IEJyYWNrZXRNYXRjaDsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9zZWFyY2gnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL29vcCcs
ICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9s
aWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CisKK3ZhciBT
ZWFyY2ggPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRvcHRpb25zID0ge307Cit9OworCisoZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5zZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgIG9v
cC5taXhpbih0aGlzLiRvcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICB0aGlzLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IGxhbmcuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKTsKKyAgICB9OworICAgIHRoaXMuc2V0T3B0
aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlv
bnM7CisgICAgfTsKKyAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAg
IHZhciBpdGVyYXRvciA9IHRoaXMuJG1hdGNoSXRlcmF0b3Ioc2Vzc2lvbiwgdGhpcy4kb3B0aW9u
cyk7CisKKyAgICAgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICB2YXIgZmlyc3RSYW5nZSA9IG51bGw7CisgICAgICAgIGl0ZXJhdG9yLmZvckVh
Y2goZnVuY3Rpb24ocmFuZ2UsIHJvdywgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoIXJhbmdl
LnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHJhbmdlLm9mZnNldCArIChv
ZmZzZXQgfHwgMCk7CisgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG5ldyBSYW5nZShyb3cs
IGNvbHVtbiwgcm93LCBjb2x1bW4rcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSByYW5nZTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTsKKyAgICB9Owor
ICAgIHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIG9wdGlv
bnMgPSB0aGlzLiRvcHRpb25zOworICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKQorICAgICAg
ICAgICAgcmV0dXJuIFtdOworICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTsK
KworICAgICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlOworICAgICAgICB2YXIgbGluZXMg
PSByYW5nZQorICAgICAgICAgICAgPyBzZXNzaW9uLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywg
cmFuZ2UuZW5kLnJvdykKKyAgICAgICAgICAgIDogc2Vzc2lvbi5kb2MuZ2V0QWxsTGluZXMoKTsK
KworICAgICAgICB2YXIgcmFuZ2VzID0gW107CisgICAgICAgIHZhciByZSA9IG9wdGlvbnMucmU7
CisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkgeworICAgICAgICAgICAgdmFyIGxl
biA9IHJlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBtYXhSb3cgPSBsaW5lcy5sZW5ndGggLSBs
ZW47CisgICAgICAgICAgICBmb3IgKHZhciByb3cgPSByZS5vZmZzZXQgfHwgMDsgcm93IDw9IG1h
eFJvdzsgcm93KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsg
aisrKQorICAgICAgICAgICAgICAgICAgICBpZiAobGluZXNbcm93ICsgal0uc2VhcmNoKHJlW2pd
KSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHZhciBzdGFydExpbmUgPSBsaW5lc1tyb3ddOworICAgICAgICAg
ICAgICAgIHZhciBsaW5lID0gbGluZXNbcm93ICsgbGVuIC0gMV07CisgICAgICAgICAgICAgICAg
dmFyIHN0YXJ0SW5kZXggPSBzdGFydExpbmUubWF0Y2gocmVbMF0pWzBdLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5n
dGg7CisKKyAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoCisgICAgICAgICAg
ICAgICAgICAgIHJvdywgc3RhcnRMaW5lLmxlbmd0aCAtIHN0YXJ0SW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4CisgICAgICAgICAgICAgICAgKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMg
PSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lc1tpXSwgcmUpOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzW2pdOworICAgICAgICAgICAgICAgICAgICByYW5nZXMu
cHVzaChuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5s
ZW5ndGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdl
LnN0YXJ0LmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSByYW5nZS5zdGFydC5j
b2x1bW47CisgICAgICAgICAgICB2YXIgaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoIC0gMTsKKyAg
ICAgICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRD
b2x1bW4gJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpCisgICAgICAg
ICAgICAgICAgaSsrOworCisgICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVu
ZC5jb2x1bW4gPiBlbmRDb2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJv
dykKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VzLnNsaWNl
KGksIGogKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByYW5nZXM7CisgICAgfTsK
KyAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHsKKyAgICAg
ICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zOworCisgICAgICAgIHZhciByZSA9IHRoaXMu
JGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpOworICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxp
bmUpCisgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisKKyAgICAgICAgaWYgKCFyZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGlucHV0
KTsKKyAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaFswXS5sZW5ndGggIT0gaW5wdXQubGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICByZXBsYWNlbWVu
dCA9IGlucHV0LnJlcGxhY2UocmUsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYgKG9wdGlvbnMu
cHJlc2VydmVDYXNlKSB7CisgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnNw
bGl0KCIiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgs
IGlucHV0Lmxlbmd0aCk7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoID0gaW5wdXRb
aV07CisgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoLnRvTG93ZXJDYXNlKCkgIT0gY2gpCisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2ldID0gcmVwbGFjZW1lbnRbaV0udG9VcHBl
ckNhc2UoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50W2ldID0gcmVwbGFjZW1lbnRbaV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuam9pbigiIik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICB9OworCisgICAg
dGhpcy4kbWF0Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKKyAgICAg
ICAgdmFyIHJlID0gdGhpcy4kYXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7CisgICAgICAgIGlmICgh
cmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
LCBjYWxsYmFjaywgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHM7CisKKyAgICAgICAgaWYg
KG9wdGlvbnMuJGlzTXVsdGlMaW5lKSB7CisgICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3Ro
OworICAgICAgICAgICAgdmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlvbihsaW5lLCByb3csIG9m
ZnNldCkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbGluZS5zZWFyY2gocmVb
MF0pOworICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID09IC0xKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAr
IGkpOworICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5zZWFyY2gocmVbaV0pID09IC0xKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IGxpbmUubWF0Y2gocmVbbGVuIC0gMV0pWzBdLmxl
bmd0aDsKKworICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0
SW5kZXgsIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmUu
b2Zmc2V0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LS07Cisg
ICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICAgICAgICAg
IHJhbmdlLnN0YXJ0LmNvbHVtbiArPSBvZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoY2Fs
bGJhY2socmFuZ2UpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0gZWxzZSBpZiAoYmFja3dhcmRzKSB7CisgICAgICAgICAgICB2YXIg
bWF0Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKGxpbmUsIHJvdywgc3RhcnRJbmRleCkgeworICAgICAg
ICAgICAgICAgIHZhciBtYXRjaGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtYXRjaGVzLmxlbmd0aC0xOyBpID49IDA7IGkt
LSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG1hdGNoZXNbaV0sIHJvdywgc3Rh
cnRJbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbWF0Y2hJdGVyYXRvciA9
IGZ1bmN0aW9uKGxpbmUsIHJvdywgc3RhcnRJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBt
YXRjaGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxiYWNrKG1hdGNoZXNbaV0sIHJvdywgc3RhcnRJbmRleCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oX2NhbGxi
YWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7CisgICAgICAgICAg
ICAgICAgc2VsZi4kbGluZUl0ZXJhdG9yKHNlc3Npb24sIG9wdGlvbnMpLmZvckVhY2gobWF0Y2hJ
dGVyYXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMu
JGFzc2VtYmxlUmVnRXhwID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9u
cy5uZWVkbGUgaW5zdGFuY2VvZiBSZWdFeHApCisgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5y
ZSA9IG9wdGlvbnMubmVlZGxlOworCisgICAgICAgIHZhciBuZWVkbGUgPSBvcHRpb25zLm5lZWRs
ZTsKKworICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKQorICAgICAgICAgICAgcmV0dXJuIG9w
dGlvbnMucmUgPSBmYWxzZTsKKworICAgICAgICBpZiAoIW9wdGlvbnMucmVnRXhwKQorICAgICAg
ICAgICAgbmVlZGxlID0gbGFuZy5lc2NhcGVSZWdFeHAobmVlZGxlKTsKKworICAgICAgICBpZiAo
b3B0aW9ucy53aG9sZVdvcmQpCisgICAgICAgICAgICBuZWVkbGUgPSAiXFxiIiArIG5lZWRsZSAr
ICJcXGIiOworCisgICAgICAgIHZhciBtb2RpZmllciA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/
ICJnIiA6ICJnaSI7CisKKyAgICAgICAgb3B0aW9ucy4kaXNNdWx0aUxpbmUgPSAvW1xuXHJdLy50
ZXN0KG5lZWRsZSk7CisgICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkKKyAgICAgICAg
ICAgIHJldHVybiBvcHRpb25zLnJlID0gdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAobmVl
ZGxlLCBtb2RpZmllcik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciByZSA9IG5l
dyBSZWdFeHAobmVlZGxlLCBtb2RpZmllcik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICAgICAgcmUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9
IHJlOworICAgIH07CisKKyAgICB0aGlzLiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cCA9IGZ1bmN0
aW9uKG5lZWRsZSwgbW9kaWZpZXIpIHsKKyAgICAgICAgdmFyIHBhcnRzID0gbmVlZGxlLnJlcGxh
Y2UoL1xyXG58XHJ8XG4vZywgIiRcbl4iKS5zcGxpdCgiXG4iKTsKKyAgICAgICAgdmFyIHJlID0g
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHRyeSB7
CisgICAgICAgICAgICByZS5wdXNoKG5ldyBSZWdFeHAocGFydHNbaV0sIG1vZGlmaWVyKSk7Cisg
ICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChwYXJ0c1swXSA9PSAiIikgeworICAgICAgICAgICAgcmUuc2hpZnQoKTsK
KyAgICAgICAgICAgIHJlLm9mZnNldCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZS5vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZTsKKyAgICB9Owor
CisgICAgdGhpcy4kbGluZUl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgewor
ICAgICAgICB2YXIgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHMgPT0gdHJ1ZTsKKyAgICAg
ICAgdmFyIHNraXBDdXJyZW50ID0gb3B0aW9ucy5za2lwQ3VycmVudCAhPSBmYWxzZTsKKworICAg
ICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlOworICAgICAgICB2YXIgc3RhcnQgPSBvcHRp
b25zLnN0YXJ0OworICAgICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgc3RhcnQgPSByYW5n
ZSA/IHJhbmdlW2JhY2t3YXJkcyA/ICJlbmQiIDogInN0YXJ0Il0gOiBzZXNzaW9uLnNlbGVjdGlv
bi5nZXRSYW5nZSgpOworICAgICAgICAgCisgICAgICAgIGlmIChzdGFydC5zdGFydCkKKyAgICAg
ICAgICAgIHN0YXJ0ID0gc3RhcnRbc2tpcEN1cnJlbnQgIT0gYmFja3dhcmRzID8gImVuZCIgOiAi
c3RhcnQiXTsKKworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZSA/IHJhbmdlLnN0YXJ0LnJv
dyA6IDA7CisgICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vz
c2lvbi5nZXRMZW5ndGgoKSAtIDE7CisKKyAgICAgICAgdmFyIGZvckVhY2ggPSBiYWNrd2FyZHMg
PyBmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5y
b3c7CisKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpLnN1
YnN0cmluZygwLCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhs
aW5lLCByb3cpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICBmb3IgKHJvdy0tOyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09
IGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBm
b3IgKHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnQucm93OyByb3cgPj0gZmlyc3RSb3c7
IHJvdy0tKQorICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5l
KHJvdyksIHJvdykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9IDogZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3Rh
cnQucm93OworCisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93
KS5zdWJzdHIoc3RhcnQuY29sdW1uKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGlu
ZSwgcm93LCBzdGFydC5jb2x1bW4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICBmb3IgKHJvdyA9IHJvdysxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUocm93KSwgcm93
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLndyYXAgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgIGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydC5yb3c7
IHJvdyA8PSBsYXN0Um93OyByb3crKykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNr
KHNlc3Npb24uZ2V0TGluZShyb3cpLCByb3cpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB7Zm9yRWFjaDog
Zm9yRWFjaH07CisgICAgfTsKKworfSkuY2FsbChTZWFyY2gucHJvdG90eXBlKTsKKworZXhwb3J0
cy5TZWFyY2ggPSBTZWFyY2g7Cit9KTsKK2FjZS5kZWZpbmUoJ2FjZS9jb21tYW5kcy9jb21tYW5k
X21hbmFnZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29w
JywgJ2FjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1
aXJlKCIuLi9saWIvb29wIik7Cit2YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuLi9rZXlib2Fy
ZC9oYXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxlcjsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJl
KCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKKwordmFyIENvbW1hbmRNYW5h
Z2VyID0gZnVuY3Rpb24ocGxhdGZvcm0sIGNvbW1hbmRzKSB7CisgICAgdGhpcy5wbGF0Zm9ybSA9
IHBsYXRmb3JtOworICAgIHRoaXMuY29tbWFuZHMgPSB0aGlzLmJ5TmFtZSA9IHt9OworICAgIHRo
aXMuY29tbW1hbmRLZXlCaW5kaW5nID0ge307CisKKyAgICB0aGlzLmFkZENvbW1hbmRzKGNvbW1h
bmRzKTsKKyAgICAKKyAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIiwgZnVuY3Rpb24o
ZSkgeworICAgICAgICByZXR1cm4gZS5jb21tYW5kLmV4ZWMoZS5lZGl0b3IsIGUuYXJncyB8fCB7
fSk7CisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoQ29tbWFuZE1hbmFnZXIsIEhhc2hIYW5k
bGVyKTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVt
aXR0ZXIpOworCisgICAgdGhpcy5leGVjID0gZnVuY3Rpb24oY29tbWFuZCwgZWRpdG9yLCBhcmdz
KSB7CisgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpCisgICAgICAgICAg
ICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXTsKKworICAgICAgICBpZiAoIWNvbW1h
bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVkaXRvciAmJiBl
ZGl0b3IuJHJlYWRPbmx5ICYmICFjb21tYW5kLnJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHZhciByZXR2YWx1ZSA9IHRoaXMuX2VtaXQoImV4ZWMiLCB7Cisg
ICAgICAgICAgICBlZGl0b3I6IGVkaXRvciwKKyAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQs
CisgICAgICAgICAgICBhcmdzOiBhcmdzCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBy
ZXR2YWx1ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisgICAgfTsKKworICAgIHRoaXMudG9n
Z2xlUmVjb3JkaW5nID0gZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgIGlmICh0aGlzLiRpblJl
cGxheSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlZGl0b3IgJiYgZWRpdG9yLl9l
bWl0KCJjaGFuZ2VTdGF0dXMiKTsKKyAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKSB7CisgICAg
ICAgICAgICB0aGlzLm1hY3JvLnBvcCgpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExp
c3RlbmVyKCJleGVjIiwgdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pOworCisgICAgICAgICAgICBp
ZiAoIXRoaXMubWFjcm8ubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMubWFjcm8gPSB0aGlz
Lm9sZE1hY3JvOworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuJGFkZENvbW1hbmRUb01hY3JvKSB7CisgICAg
ICAgICAgICB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLm1hY3JvLnB1c2goW2UuY29tbWFuZCwgZS5hcmdzXSk7CisgICAgICAgICAg
ICB9LmJpbmQodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm9sZE1hY3JvID0gdGhp
cy5tYWNybzsKKyAgICAgICAgdGhpcy5tYWNybyA9IFtdOworICAgICAgICB0aGlzLm9uKCJleGVj
IiwgdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pOworICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRp
bmcgPSB0cnVlOworICAgIH07CisKKyAgICB0aGlzLnJlcGxheSA9IGZ1bmN0aW9uKGVkaXRvcikg
eworICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkgfHwgIXRoaXMubWFjcm8pCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMudG9nZ2xlUmVjb3JkaW5nKGVkaXRvcik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMuJGluUmVwbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMubWFjcm8uZm9y
RWFjaChmdW5jdGlvbih4KSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09ICJzdHJp
bmciKQorICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMoeCwgZWRpdG9yKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4WzBdLCBlZGl0b3Is
IHhbMV0pOworICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAg
ICAgICAgICB0aGlzLiRpblJlcGxheSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRoaXMudHJpbU1hY3JvID0gZnVuY3Rpb24obSkgeworICAgICAgICByZXR1cm4gbS5tYXAoZnVu
Y3Rpb24oeCl7CisgICAgICAgICAgICBpZiAodHlwZW9mIHhbMF0gIT0gInN0cmluZyIpCisgICAg
ICAgICAgICAgICAgeFswXSA9IHhbMF0ubmFtZTsKKyAgICAgICAgICAgIGlmICgheFsxXSkKKyAg
ICAgICAgICAgICAgICB4ID0geFswXTsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9
KTsKKyAgICB9OworCit9KS5jYWxsKENvbW1hbmRNYW5hZ2VyLnByb3RvdHlwZSk7CisKK2V4cG9y
dHMuQ29tbWFuZE1hbmFnZXIgPSBDb21tYW5kTWFuYWdlcjsKKworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9saWIva2V5cyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCit2YXIga2V5VXRpbCAgPSByZXF1aXJlKCIuLi9saWIva2V5cyIpOworCitmdW5jdGlv
biBIYXNoSGFuZGxlcihjb25maWcsIHBsYXRmb3JtKSB7CisgICAgdGhpcy5wbGF0Zm9ybSA9IHBs
YXRmb3JtOworICAgIHRoaXMuY29tbWFuZHMgPSB7fTsKKyAgICB0aGlzLmNvbW1tYW5kS2V5Qmlu
ZGluZyA9IHt9OworCisgICAgdGhpcy5hZGRDb21tYW5kcyhjb25maWcpOworfTsKKworKGZ1bmN0
aW9uKCkgeworCisgICAgdGhpcy5hZGRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgeworICAg
ICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kLm5hbWVdKQorICAgICAgICAgICAgdGhpcy5y
ZW1vdmVDb21tYW5kKGNvbW1hbmQpOworCisgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZC5u
YW1lXSA9IGNvbW1hbmQ7CisKKyAgICAgICAgaWYgKGNvbW1hbmQuYmluZEtleSkKKyAgICAgICAg
ICAgIHRoaXMuX2J1aWxkS2V5SGFzaChjb21tYW5kKTsKKyAgICB9OworCisgICAgdGhpcy5yZW1v
dmVDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgeworICAgICAgICB2YXIgbmFtZSA9ICh0eXBl
b2YgY29tbWFuZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kIDogY29tbWFuZC5uYW1lKTsKKyAgICAg
ICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbbmFtZV07CisgICAgICAgIGRlbGV0ZSB0aGlzLmNv
bW1hbmRzW25hbWVdOworICAgICAgICB2YXIgY2tiID0gdGhpcy5jb21tbWFuZEtleUJpbmRpbmc7
CisgICAgICAgIGZvciAodmFyIGhhc2hJZCBpbiBja2IpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGtleSBpbiBja2JbaGFzaElkXSkgeworICAgICAgICAgICAgICAgIGlmIChja2JbaGFzaElkXVtr
ZXldID09IGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBja2JbaGFzaElkXVtr
ZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuYmluZEtl
eSA9IGZ1bmN0aW9uKGtleSwgY29tbWFuZCkgeworICAgICAgICBpZigha2V5KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT0gImZ1bmN0aW9uIikgewor
ICAgICAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtleGVjOiBjb21tYW5kLCBiaW5kS2V5OiBrZXks
IG5hbWU6IGtleX0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGNrYiA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOworICAgICAgICBrZXkuc3BsaXQoInwi
KS5mb3JFYWNoKGZ1bmN0aW9uKGtleVBhcnQpIHsKKyAgICAgICAgICAgIHZhciBiaW5kaW5nID0g
dGhpcy5wYXJzZUtleXMoa2V5UGFydCwgY29tbWFuZCk7CisgICAgICAgICAgICB2YXIgaGFzaElk
ID0gYmluZGluZy5oYXNoSWQ7CisgICAgICAgICAgICAoY2tiW2hhc2hJZF0gfHwgKGNrYltoYXNo
SWRdID0ge30pKVtiaW5kaW5nLmtleV0gPSBjb21tYW5kOworICAgICAgICB9LCB0aGlzKTsKKyAg
ICB9OworCisgICAgdGhpcy5hZGRDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7CisgICAg
ICAgIGNvbW1hbmRzICYmIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5h
bWUpIHsKKyAgICAgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHNbbmFtZV07CisgICAgICAg
ICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJzdHJpbmciKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmJpbmRLZXkoY29tbWFuZCwgbmFtZSk7CisKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgY29tbWFuZCA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICBjb21tYW5kID0geyBl
eGVjOiBjb21tYW5kIH07CisKKyAgICAgICAgICAgIGlmICghY29tbWFuZC5uYW1lKQorICAgICAg
ICAgICAgICAgIGNvbW1hbmQubmFtZSA9IG5hbWU7CisKKyAgICAgICAgICAgIHRoaXMuYWRkQ29t
bWFuZChjb21tYW5kKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAgIHRoaXMucmVt
b3ZlQ29tbWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgeworICAgICAgICBPYmplY3Qua2V5cyhj
b21tYW5kcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgICAgICB0aGlzLnJlbW92
ZUNvbW1hbmQoY29tbWFuZHNbbmFtZV0pOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisg
ICAgdGhpcy5iaW5kS2V5cyA9IGZ1bmN0aW9uKGtleUxpc3QpIHsKKyAgICAgICAgT2JqZWN0Lmtl
eXMoa2V5TGlzdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIHRoaXMuYmlu
ZEtleShrZXksIGtleUxpc3Rba2V5XSk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisKKyAg
ICB0aGlzLl9idWlsZEtleUhhc2ggPSBmdW5jdGlvbihjb21tYW5kKSB7CisgICAgICAgIHZhciBi
aW5kaW5nID0gY29tbWFuZC5iaW5kS2V5OworICAgICAgICBpZiAoIWJpbmRpbmcpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBiaW5kaW5nID09ICJzdHJp
bmciID8gYmluZGluZzogYmluZGluZ1t0aGlzLnBsYXRmb3JtXTsKKyAgICAgICAgdGhpcy5iaW5k
S2V5KGtleSwgY29tbWFuZCk7CisgICAgfTsKKyAgICB0aGlzLnBhcnNlS2V5cyA9IGZ1bmN0aW9u
KGtleXMpIHsKKyAgICAgICAgdmFyIHBhcnRzID0ga2V5cy50b0xvd2VyQ2FzZSgpLnNwbGl0KC9b
XC1cK10oW1wtXCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHh9KTsKKyAgICAgICAg
dmFyIGtleSA9IHBhcnRzLnBvcCgpOworCisgICAgICAgIHZhciBrZXlDb2RlID0ga2V5VXRpbFtr
ZXldOworICAgICAgICBpZiAoa2V5VXRpbC5GVU5DVElPTl9LRVlTW2tleUNvZGVdKQorICAgICAg
ICAgICAga2V5ID0ga2V5VXRpbC5GVU5DVElPTl9LRVlTW2tleUNvZGVdLnRvTG93ZXJDYXNlKCk7
CisgICAgICAgIGVsc2UgaWYgKCFwYXJ0cy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4ge2tl
eToga2V5LCBoYXNoSWQ6IC0xfTsKKyAgICAgICAgZWxzZSBpZiAocGFydHMubGVuZ3RoID09IDEg
JiYgcGFydHNbMF0gPT0gInNoaWZ0IikKKyAgICAgICAgICAgIHJldHVybiB7a2V5OiBrZXkudG9V
cHBlckNhc2UoKSwgaGFzaElkOiAtMX07CisKKyAgICAgICAgdmFyIGhhc2hJZCA9IDA7CisgICAg
ICAgIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgIHZhciBt
b2RpZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dOworICAgICAgICAgICAgaWYgKG1v
ZGlmaWVyID09IG51bGwpCisgICAgICAgICAgICAgICAgdGhyb3cgImludmFsaWQgbW9kaWZpZXIg
IiArIHBhcnRzW2ldICsgIiBpbiAiICsga2V5czsKKyAgICAgICAgICAgIGhhc2hJZCB8PSBtb2Rp
ZmllcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2tleToga2V5LCBoYXNoSWQ6IGhhc2hJ
ZH07CisgICAgfTsKKworICAgIHRoaXMuZmluZEtleUNvbW1hbmQgPSBmdW5jdGlvbiBmaW5kS2V5
Q29tbWFuZChoYXNoSWQsIGtleVN0cmluZykgeworICAgICAgICB2YXIgY2ticiA9IHRoaXMuY29t
bW1hbmRLZXlCaW5kaW5nOworICAgICAgICByZXR1cm4gY2ticltoYXNoSWRdICYmIGNrYnJbaGFz
aElkXVtrZXlTdHJpbmddOworICAgIH07CisKKyAgICB0aGlzLmhhbmRsZUtleWJvYXJkID0gZnVu
Y3Rpb24oZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHsKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIGNvbW1hbmQ6IHRoaXMuZmluZEtleUNvbW1hbmQoaGFzaElkLCBrZXlT
dHJpbmcpCisgICAgICAgIH07CisgICAgfTsKKworfSkuY2FsbChIYXNoSGFuZGxlci5wcm90b3R5
cGUpCisKK2V4cG9ydHMuSGFzaEhhbmRsZXIgPSBIYXNoSGFuZGxlcjsKK30pOworCithY2UuZGVm
aW5lKCdhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcycsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIv
bGFuZyIpOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOworCitmdW5jdGlvbiBi
aW5kS2V5KHdpbiwgbWFjKSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgd2luOiB3aW4sCisgICAg
ICAgIG1hYzogbWFjCisgICAgfTsKK30KKworZXhwb3J0cy5jb21tYW5kcyA9IFt7CisgICAgbmFt
ZTogInNlbGVjdGFsbCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BIiwgIkNvbW1hbmQt
QSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0QWxsKCk7IH0s
CisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiY2VudGVyc2VsZWN0aW9uIiwK
KyAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJDdHJsLUwiKSwKKyAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LAorICAgIHJlYWRPbmx5OiB0
cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9saW5lIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLUwiLCAiQ29tbWFuZC1MIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAg
ICAgIHZhciBsaW5lID0gcGFyc2VJbnQocHJvbXB0KCJFbnRlciBsaW5lIG51bWJlcjoiKSwgMTAp
OworICAgICAgICBpZiAoIWlzTmFOKGxpbmUpKSB7CisgICAgICAgICAgICBlZGl0b3IuZ290b0xp
bmUobGluZSk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7Cisg
ICAgbmFtZTogImZvbGQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1MfEN0cmwtRjEiLCAi
Q29tbWFuZC1BbHQtTHxDb21tYW5kLUYxIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQoZmFsc2UpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVl
Cit9LCB7CisgICAgbmFtZTogInVuZm9sZCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVNo
aWZ0LUx8Q3RybC1TaGlmdC1GMSIsICJDb21tYW5kLUFsdC1TaGlmdC1MfENvbW1hbmQtU2hpZnQt
RjEiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xl
Rm9sZCh0cnVlKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJmb2xk
YWxsIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtMCIsICJDb21tYW5kLU9wdGlvbi0wIiks
CisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLmZvbGRBbGwoKTsg
fSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJ1bmZvbGRhbGwiLAorICAg
IGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC0wIiwgIkNvbW1hbmQtT3B0aW9uLVNoaWZ0LTAi
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udW5mb2xkKCk7
IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZmluZG5leHQiLAorICAg
IGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtSyIsICJDb21tYW5kLUciKSwKKyAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLmZpbmROZXh0KCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUK
K30sIHsKKyAgICBuYW1lOiAiZmluZHByZXZpb3VzIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLVNoaWZ0LUsiLCAiQ29tbWFuZC1TaGlmdC1HIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5maW5kUHJldmlvdXMoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwg
eworICAgIG5hbWU6ICJmaW5kIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUYiLCAiQ29t
bWFuZC1GIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgIGNvbmZpZy5s
b2FkTW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsIGZ1bmN0aW9uKGUpIHtlLlNlYXJjaChlZGl0
b3IpfSk7CisgICAgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJvdmVy
d3JpdGUiLAorICAgIGJpbmRLZXk6ICJJbnNlcnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30s
IHsKKyAgICBuYW1lOiAic2VsZWN0dG9zdGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3Ry
bC1TaGlmdC1Ib21lIiwgIkNvbW1hbmQtU2hpZnQtVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVTdGFydCgpOyB9LAorICAg
IG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsK
KyAgICBuYW1lOiAiZ290b3N0YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUhvbWUi
LCAiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Ip
IHsgZWRpdG9yLm5hdmlnYXRlRmlsZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3R1
cCIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVXAiLCAiU2hpZnQtVXAiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFVwKCk7
IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1
ZQorfSwgeworICAgIG5hbWU6ICJnb2xpbmV1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiVXAi
LCAiVXB8Q3RybC1QIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRv
ci5uYXZpZ2F0ZVVwKGFyZ3MudGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9y
RWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0dG9lbmQi
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRW5kIiwgIkNvbW1hbmQtU2hpZnQt
RG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9u
KCkuc2VsZWN0RmlsZUVuZCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIs
CisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ290b2VuZCIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1FbmQiLCAiQ29tbWFuZC1FbmR8Q29tbWFuZC1Eb3duIiksCisg
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVFbmQoKTsgfSwK
KyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9
LCB7CisgICAgbmFtZTogInNlbGVjdGRvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0
LURvd24iLCAiU2hpZnQtRG93biIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RG93bigpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAiZ29saW5l
ZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiRG93biIsICJEb3dufEN0cmwtTiIpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVEb3duKGFyZ3Mu
dGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9u
bHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0d29yZGxlZnQiLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkN0cmwtU2hpZnQtTGVmdCIsICJPcHRpb24tU2hpZnQtTGVmdCIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZExl
ZnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5
OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG93b3JkbGVmdCIsCisgICAgYmluZEtleTogYmlu
ZEtleSgiQ3RybC1MZWZ0IiwgIk9wdGlvbi1MZWZ0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5uYXZpZ2F0ZVdvcmRMZWZ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxl
Y3R0b2xpbmVzdGFydCIsCisgICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LUxlZnQiLCAi
Q29tbWFuZC1TaGlmdC1MZWZ0IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFj
dGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdv
dG9saW5lc3RhcnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1MZWZ0fEhvbWUiLCAiQ29t
bWFuZC1MZWZ0fEhvbWV8Q3RybC1BIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5uYXZpZ2F0ZUxpbmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9y
RWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2VsZWN0bGVmdCIs
CisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtTGVmdCIsICJTaGlmdC1MZWZ0IiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0
KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTog
dHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvbGVmdCIsCisgICAgYmluZEtleTogYmluZEtleSgi
TGVmdCIsICJMZWZ0fEN0cmwtQiIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykg
eyBlZGl0b3IubmF2aWdhdGVMZWZ0KGFyZ3MudGltZXMpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIsCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAic2Vs
ZWN0d29yZHJpZ2h0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVJpZ2h0Iiwg
Ik9wdGlvbi1TaGlmdC1SaWdodCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZFJpZ2h0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RB
Y3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJn
b3Rvd29yZHJpZ2h0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVJpZ2h0IiwgIk9wdGlv
bi1SaWdodCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVX
b3JkUmlnaHQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJl
YWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHRvbGluZWVuZCIsCisgICAgYmlu
ZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LVJpZ2h0IiwgIkNvbW1hbmQtU2hpZnQtUmlnaHQiKSwK
KyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVj
dExpbmVFbmQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJl
YWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9saW5lZW5kIiwKKyAgICBiaW5kS2V5
OiBiaW5kS2V5KCJBbHQtUmlnaHR8RW5kIiwgIkNvbW1hbmQtUmlnaHR8RW5kfEN0cmwtRSIpLAor
ICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lRW5kKCk7IH0s
CisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQor
fSwgeworICAgIG5hbWU6ICJzZWxlY3RyaWdodCIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hp
ZnQtUmlnaHQiLCAiU2hpZnQtUmlnaHQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsg
ZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFJpZ2h0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RB
Y3Rpb246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJn
b3RvcmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlJpZ2h0IiwgIlJpZ2h0fEN0cmwtRiIp
LAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVSaWdo
dChhcmdzLnRpbWVzKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAg
IHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdHBhZ2Vkb3duIiwKKyAgICBi
aW5kS2V5OiAiU2hpZnQtUGFnZURvd24iLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3Iuc2VsZWN0UGFnZURvd24oKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJwYWdlZG93biIsCisgICAgYmluZEtleTogYmluZEtleShudWxsLCAiT3B0aW9uLVBh
Z2VEb3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zY3JvbGxQYWdl
RG93bigpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImdvdG9wYWdl
ZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiUGFnZURvd24iLCAiUGFnZURvd258Q3RybC1W
IiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nb3RvUGFnZURvd24oKTsg
fSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RwYWdldXAiLAor
ICAgIGJpbmRLZXk6ICJTaGlmdC1QYWdlVXAiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikg
eyBlZGl0b3Iuc2VsZWN0UGFnZVVwKCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsKKyAg
ICBuYW1lOiAicGFnZXVwIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJPcHRpb24tUGFn
ZVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zY3JvbGxQYWdlVXAo
KTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJnb3RvcGFnZXVwIiwK
KyAgICBiaW5kS2V5OiAiUGFnZVVwIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLmdvdG9QYWdlVXAoKTsgfSwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6
ICJzY3JvbGx1cCIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1VcCIsIG51bGwpLAorICAg
IGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAtMiAqIGUucmVuZGVy
ZXIubGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sCisgICAgcmVhZE9ubHk6IHRydWUKK30sIHsK
KyAgICBuYW1lOiAic2Nyb2xsZG93biIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1Eb3du
IiwgbnVsbCksCisgICAgZXhlYzogZnVuY3Rpb24oZSkgeyBlLnJlbmRlcmVyLnNjcm9sbEJ5KDAs
IDIgKiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpOyB9LAorICAgIHJlYWRPbmx5
OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdGxpbmVzdGFydCIsCisgICAgYmluZEtleTog
IlNoaWZ0LUhvbWUiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxlY3RsaW5l
ZW5kIiwKKyAgICBiaW5kS2V5OiAiU2hpZnQtRW5kIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKTsgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCB7CisgICAg
bmFtZTogInRvZ2dsZXJlY29yZGluZyIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BbHQt
RSIsICJDb21tYW5kLU9wdGlvbi1FIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5jb21tYW5kcy50b2dnbGVSZWNvcmRpbmcoZWRpdG9yKTsgfSwKKyAgICByZWFkT25seTog
dHJ1ZQorfSwgeworICAgIG5hbWU6ICJyZXBsYXltYWNybyIsCisgICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1TaGlmdC1FIiwgIkNvbW1hbmQtU2hpZnQtRSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMucmVwbGF5KGVkaXRvcik7IH0sCisgICAgcmVhZE9u
bHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAianVtcHRvbWF0Y2hpbmciLAorICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkN0cmwtUCIsICJDdHJsLVNoaWZ0LVAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLmp1bXBUb01hdGNoaW5nKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIiwKKyAgICByZWFkT25seTogdHJ1ZQorfSwgeworICAgIG5hbWU6ICJzZWxl
Y3R0b21hdGNoaW5nIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVAiLCBudWxs
KSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmp1bXBUb01hdGNoaW5nKHRy
dWUpOyB9LAorICAgIHJlYWRPbmx5OiB0cnVlCit9LCAKK3sKKyAgICBuYW1lOiAiY3V0IiwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmdl
dFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIGVkaXRvci5fZW1pdCgiY3V0IiwgcmFuZ2UpOwor
CisgICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CisgICAgICAgICAgICBlZGl0b3IuY2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJm
b3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmVsaW5lIiwKKyAgICBiaW5kS2V5OiBiaW5k
S2V5KCJDdHJsLUQiLCAiQ29tbWFuZC1EIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7
IGVkaXRvci5yZW1vdmVMaW5lcygpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFj
aCIKK30sIHsKKyAgICBuYW1lOiAiZHVwbGljYXRlU2VsZWN0aW9uIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLVNoaWZ0LUQiLCAiQ29tbWFuZC1TaGlmdC1EIiksCisgICAgZXhlYzogZnVu
Y3Rpb24oZWRpdG9yKSB7IGVkaXRvci5kdXBsaWNhdGVTZWxlY3Rpb24oKTsgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInNvcnRsaW5lcyIsCisg
ICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BbHQtUyIsICJDb21tYW5kLUFsdC1TIiksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsgfSwKKyAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInRvZ2dsZWNvbW1lbnQi
LAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtLyIsICJDb21tYW5kLS8iKSwKKyAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZUNvbW1lbnRMaW5lcygpOyB9LAorICAg
IG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAibW9kaWZ5TnVt
YmVyVXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVXAiLCAiQWx0LVNoaWZ0
LVVwIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIo
MSk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6
ICJtb2RpZnlOdW1iZXJEb3duIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LURv
d24iLCAiQWx0LVNoaWZ0LURvd24iKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLm1vZGlmeU51bWJlcigtMSk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNo
IgorfSwgeworICAgIG5hbWU6ICJyZXBsYWNlIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJs
LUgiLCAiQ29tbWFuZC1PcHRpb24tRiIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewor
ICAgICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFyY2hib3giLCBmdW5jdGlvbihl
KSB7ZS5TZWFyY2goZWRpdG9yLCB0cnVlKX0pOworICAgIH0KK30sIHsKKyAgICBuYW1lOiAidW5k
byIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1aIiwgIkNvbW1hbmQtWiIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9Cit9LCB7CisgICAgbmFtZTog
InJlZG8iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtWnxDdHJsLVkiLCAiQ29t
bWFuZC1TaGlmdC1afENvbW1hbmQtWSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3IucmVkbygpOyB9Cit9LCB7CisgICAgbmFtZTogImNvcHlsaW5lc3VwIiwKKyAgICBiaW5k
S2V5OiBiaW5kS2V5KCJBbHQtU2hpZnQtVXAiLCAiQ29tbWFuZC1PcHRpb24tVXAiKSwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7IH0KK30sIHsKKyAg
ICBuYW1lOiAibW92ZWxpbmVzdXAiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1VcCIsICJP
cHRpb24tVXAiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vdmVMaW5l
c1VwKCk7IH0KK30sIHsKKyAgICBuYW1lOiAiY29weWxpbmVzZG93biIsCisgICAgYmluZEtleTog
YmluZEtleSgiQWx0LVNoaWZ0LURvd24iLCAiQ29tbWFuZC1PcHRpb24tRG93biIpLAorICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzRG93bigpOyB9Cit9LCB7Cisg
ICAgbmFtZTogIm1vdmVsaW5lc2Rvd24iLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1Eb3du
IiwgIk9wdGlvbi1Eb3duIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5t
b3ZlTGluZXNEb3duKCk7IH0KK30sIHsKKyAgICBuYW1lOiAiZGVsIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KCJEZWxldGUiLCAiRGVsZXRlfEN0cmwtRCIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IucmVtb3ZlKCJyaWdodCIpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiYmFja3NwYWNlIiwKKyAgICBiaW5kS2V5OiBi
aW5kS2V5KAorICAgICAgICAiQ29tbWFuZC1CYWNrc3BhY2V8T3B0aW9uLUJhY2tzcGFjZXxTaGlm
dC1CYWNrc3BhY2V8QmFja3NwYWNlIiwKKyAgICAgICAgIkN0cmwtQmFja3NwYWNlfENvbW1hbmQt
QmFja3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2V8Q3RybC1IIgorICAgICksCisgICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoImxlZnQiKTsgfSwKKyAgICBt
dWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInJlbW92ZXRvbGlu
ZXN0YXJ0IiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtQmFja3NwYWNlIiwgIkNvbW1hbmQt
QmFja3NwYWNlIiksCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVU
b0xpbmVTdGFydCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsK
KyAgICBuYW1lOiAicmVtb3ZldG9saW5lZW5kIiwKKyAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQt
RGVsZXRlIiwgIkN0cmwtSyIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
cmVtb3ZlVG9MaW5lRW5kKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgor
fSwgeworICAgIG5hbWU6ICJyZW1vdmV3b3JkbGVmdCIsCisgICAgYmluZEtleTogYmluZEtleSgi
Q3RybC1CYWNrc3BhY2UiLCAiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSwKKyAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRMZWZ0KCk7IH0sCisg
ICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJyZW1vdmV3
b3JkcmlnaHQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRGVsZXRlIiwgIkFsdC1EZWxl
dGUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRSaWdo
dCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1l
OiAib3V0ZGVudCIsCisgICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVGFiIiwgIlNoaWZ0LVRh
YiIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuYmxvY2tPdXRkZW50KCk7
IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgeworICAgIG5hbWU6ICJp
bmRlbnQiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIlRhYiIsICJUYWIiKSwKKyAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmluZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIKK30seworICAgIG5hbWU6ICJibG9ja291dGRlbnQiLAorICAgIGJpbmRL
ZXk6IGJpbmRLZXkoIkN0cmwtWyIsICJDdHJsLVsiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9uOiAi
Zm9yRWFjaCIKK30seworICAgIG5hbWU6ICJibG9ja2luZGVudCIsCisgICAgYmluZEtleTogYmlu
ZEtleSgiQ3RybC1dIiwgIkN0cmwtXSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3IuYmxvY2tJbmRlbnQoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2gi
Cit9LCB7CisgICAgbmFtZTogImluc2VydHN0cmluZyIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yLCBzdHIpIHsgZWRpdG9yLmluc2VydChzdHIpOyB9LAorICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIKK30sIHsKKyAgICBuYW1lOiAiaW5zZXJ0dGV4dCIsCisgICAgZXhlYzogZnVu
Y3Rpb24oZWRpdG9yLCBhcmdzKSB7CisgICAgICAgIGVkaXRvci5pbnNlcnQobGFuZy5zdHJpbmdS
ZXBlYXQoYXJncy50ZXh0ICB8fCAiIiwgYXJncy50aW1lcyB8fCAxKSk7CisgICAgfSwKKyAgICBt
dWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInNwbGl0bGluZSIs
CisgICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1PIiksCisgICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5zcGxpdExpbmUoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giCit9LCB7CisgICAgbmFtZTogInRyYW5zcG9zZWxldHRlcnMiLAorICAgIGJp
bmRLZXk6IGJpbmRLZXkoIkN0cmwtVCIsICJDdHJsLVQiKSwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLnRyYW5zcG9zZUxldHRlcnMoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFj
dGlvbjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVjdGlvbnMoMSk7IH0K
K30sIHsKKyAgICBuYW1lOiAidG91cHBlcmNhc2UiLAorICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0
cmwtVSIsICJDdHJsLVUiKSwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRv
VXBwZXJDYXNlKCk7IH0sCisgICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgorfSwgewor
ICAgIG5hbWU6ICJ0b2xvd2VyY2FzZSIsCisgICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlm
dC1VIiwgIkN0cmwtU2hpZnQtVSIpLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IudG9Mb3dlckNhc2UoKTsgfSwKKyAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCit9
XTsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS91bmRvbWFuYWdlcicsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
Cit2YXIgVW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnJlc2V0KCk7Cit9Owor
CisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5leGVjdXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewor
ICAgICAgICB2YXIgZGVsdGFzID0gb3B0aW9ucy5hcmdzWzBdOworICAgICAgICB0aGlzLiRkb2Mg
ID0gb3B0aW9ucy5hcmdzWzFdOworICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YXMp
OworICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTsKKyAgICB9OworICAgIHRoaXMudW5kbyA9
IGZ1bmN0aW9uKGRvbnRTZWxlY3QpIHsKKyAgICAgICAgdmFyIGRlbHRhcyA9IHRoaXMuJHVuZG9T
dGFjay5wb3AoKTsKKyAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7CisgICAg
ICAgIGlmIChkZWx0YXMpIHsKKyAgICAgICAgICAgIHVuZG9TZWxlY3Rpb25SYW5nZSA9CisgICAg
ICAgICAgICAgICAgdGhpcy4kZG9jLnVuZG9DaGFuZ2VzKGRlbHRhcywgZG9udFNlbGVjdCk7Cisg
ICAgICAgICAgICB0aGlzLiRyZWRvU3RhY2sucHVzaChkZWx0YXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB1bmRvU2VsZWN0aW9uUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnJlZG8gPSBm
dW5jdGlvbihkb250U2VsZWN0KSB7CisgICAgICAgIHZhciBkZWx0YXMgPSB0aGlzLiRyZWRvU3Rh
Y2sucG9wKCk7CisgICAgICAgIHZhciByZWRvU2VsZWN0aW9uUmFuZ2UgPSBudWxsOworICAgICAg
ICBpZiAoZGVsdGFzKSB7CisgICAgICAgICAgICByZWRvU2VsZWN0aW9uUmFuZ2UgPQorICAgICAg
ICAgICAgICAgIHRoaXMuJGRvYy5yZWRvQ2hhbmdlcyhkZWx0YXMsIGRvbnRTZWxlY3QpOworICAg
ICAgICAgICAgdGhpcy4kdW5kb1N0YWNrLnB1c2goZGVsdGFzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlOworICAgIH07CisgICAgdGhpcy5yZXNldCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLiR1bmRvU3RhY2sgPSBbXTsKKyAgICAgICAgdGhpcy4k
cmVkb1N0YWNrID0gW107CisgICAgfTsKKyAgICB0aGlzLmhhc1VuZG8gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJHVuZG9TdGFjay5sZW5ndGggPiAwOworICAgIH07CisgICAg
dGhpcy5oYXNSZWRvID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRyZWRvU3Rh
Y2subGVuZ3RoID4gMDsKKyAgICB9OworCit9KS5jYWxsKFVuZG9NYW5hZ2VyLnByb3RvdHlwZSk7
CisKK2V4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjsKK30pOworCithY2UuZGVmaW5l
KCdhY2UvdmlydHVhbF9yZW5kZXJlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGli
L3VzZXJhZ2VudCcsICdhY2UvY29uZmlnJywgJ2FjZS9saWIvbmV0JywgJ2FjZS9sYXllci9ndXR0
ZXInLCAnYWNlL2xheWVyL21hcmtlcicsICdhY2UvbGF5ZXIvdGV4dCcsICdhY2UvbGF5ZXIvY3Vy
c29yJywgJ2FjZS9zY3JvbGxiYXInLCAnYWNlL3JlbmRlcmxvb3AnLCAnYWNlL2xpYi9ldmVudF9l
bWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBv
b3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20i
KTsKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Cit2YXIgdXNlcmFnZW50ID0g
cmVxdWlyZSgiLi9saWIvdXNlcmFnZW50Iik7Cit2YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25m
aWciKTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQiKTsKK3ZhciBHdXR0ZXJMYXllciA9
IHJlcXVpcmUoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyOwordmFyIE1hcmtlckxheWVyID0gcmVx
dWlyZSgiLi9sYXllci9tYXJrZXIiKS5NYXJrZXI7Cit2YXIgVGV4dExheWVyID0gcmVxdWlyZSgi
Li9sYXllci90ZXh0IikuVGV4dDsKK3ZhciBDdXJzb3JMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIv
Y3Vyc29yIikuQ3Vyc29yOwordmFyIFNjcm9sbEJhciA9IHJlcXVpcmUoIi4vc2Nyb2xsYmFyIiku
U2Nyb2xsQmFyOwordmFyIFJlbmRlckxvb3AgPSByZXF1aXJlKCIuL3JlbmRlcmxvb3AiKS5SZW5k
ZXJMb29wOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIi
KS5FdmVudEVtaXR0ZXI7Cit2YXIgZWRpdG9yQ3NzID0gIi5hY2VfZWRpdG9yIHtcCitwb3NpdGlv
bjogcmVsYXRpdmU7XAorb3ZlcmZsb3c6IGhpZGRlbjtcCitmb250LWZhbWlseTogJ01vbmFjbycs
ICdNZW5sbycsICdVYnVudHUgTW9ubycsICdDb25zb2xhcycsICdzb3VyY2UtY29kZS1wcm8nLCBt
b25vc3BhY2U7XAorZm9udC1zaXplOiAxMnB4O1wKK2xpbmUtaGVpZ2h0OiBub3JtYWw7XAorfVwK
Ky5hY2Vfc2Nyb2xsZXIge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCitvdmVyZmxvdzogaGlkZGVu
O1wKK3RvcDogMDtcCitib3R0b206IDA7XAorfVwKKy5hY2VfY29udGVudCB7XAorcG9zaXRpb246
IGFic29sdXRlO1wKKy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCistd2Via2l0LWJveC1z
aXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzogYm9yZGVyLWJveDtcCitjdXJzb3I6IHRl
eHQ7XAorfVwKKy5hY2VfZ3V0dGVyIHtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorb3ZlcmZsb3cg
OiBoaWRkZW47XAord2lkdGg6IGF1dG87XAordG9wOiAwO1wKK2JvdHRvbTogMDtcCitsZWZ0OiAw
O1wKK2N1cnNvcjogZGVmYXVsdDtcCit6LWluZGV4OiA0O1wKK31cCisuYWNlX2d1dHRlci1hY3Rp
dmUtbGluZSB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK2xlZnQ6IDA7XAorcmlnaHQ6IDA7XAor
fVwKKy5hY2Vfc2Nyb2xsZXIuYWNlX3Njcm9sbC1sZWZ0IHtcCitib3gtc2hhZG93OiAxN3B4IDAg
MTZweCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7XAorfVwKKy5hY2VfZ3V0dGVyLWNl
bGwge1wKK3BhZGRpbmctbGVmdDogMTlweDtcCitwYWRkaW5nLXJpZ2h0OiA2cHg7XAorYmFja2dy
b3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCit9XAorLmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ig
e1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncw
S0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFHWFJGV0hSVGIyWjBkMkZ5
WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWla
UzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1Ey
Vm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdS
dlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFq
TURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJ
ajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9U
azVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlC
eVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0
TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZi
Uzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpT
NWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5
eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFO
T2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFVTTJPRVpEUVRRNFJUVTBNVEZGTVVFek0wVkZS
VE0yUlVZMU0wUkJNallpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UVVNMk9F
WkRRVFU0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBSQk1qWWlQaUE4ZUcxd1RVMDZSR1Z5YVha
bFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBCUXpZNFJrTkJNamhG
TlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGll
RzF3TG1ScFpEcEJRelk0UmtOQk16aEZOVFF4TVVVeFFUTXpSVVZGTXpaRlJqVXpSRUV5TmlJdlBp
QThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0
Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BrZ1h4YkFBQUFKYlNVUkJWSGphcEZOTmFCTkJGSDR6
czV2ZFpMUDVzUW1OcFQ4MlFZMjA5aGVoMWlvV2lzYURSY1NLRjBXS0owR1FucnpyeGFzSHNSNkVu
bHJ3RDBUYWd4SmFiYVZFcEZZeExXbExTUzgyMnRyODdtNjZjY2ZkMkdLeVZoQTZNTXliZ2ZlOTcv
dm1QVVFwaGQwc1pqdG85WEluOU9Pc3ZsdTJua3FSelZVKzZ2dmx6UGY4VzZiazhkeFEwTlBieEFB
TGdDZ2cySmthUXVoelFhdS9FbDB6Ym1VQTdVMEVzOHYyQ2lZbUtRSkhHTzFRSUNDTG9xaWxNaGtt
dXJEQXlhcEtncUl0ZXppL1VTUmRKcUVZWTRENWpDeTAzaHQyeU1ra3ZMOTFqVFRYMTBxenl5dTJo
cnVQUk43amdiSCtFT3NYY01MZ1lpVGhFZ0FNaEFCVzg1b3F5MURYZFJJZHZQMUFISjJhY1FYdkRJ
clZIY2RRTnJFS05ZU1ZNU1pHTWpFeklJQXdEWElvKzZHL0Z4Y0duemtDM1Qyb01oTGpyZTQ5c0JC
K1JSY0hMcWRhZks2c1lkRS9HR0J3VTFWcEZOajBhTjhwSmJlK0JrWnlldlVydkxsNlhtbTBXOUl1
VGMwRHhyRE5BSmQ1b0V2SS9LUnNOQzNiUXlOalBPOXlRMVlIY2ZqMlF2ZlFjLzVUVWhKVEJjMmlN
MFU3QVdEUXRjMW5KSHZEL2NmTzJzN2phR2tpVEVmYS9FcDhjb0x1N3ptTm1oOCtkYzVsWkR1VWVG
QUdVTkEvT1k2SlZheXBRMHZqcjdYWWpVdkpNMzd2dCtqMXZ1VEs1RGdWZlZVb1RqVmUreTMvTHhN
eFkyR2dVK0NTTHk0Y3Bmc1lvclJYdVhJT2kwVnQ0MGg2N3VaRlRkSW82bkxhWmN3VUpXQXp3TlMw
dEJucXFLelFEbmpkRy9pUHlaeG80NkhhS1VwYnZZa2o4cVlSVFpzQmhnZStKSGhaeWgweDliOTVK
cWpWSmtUMDg0a1pJUHd1L21QV3FQZ2ZRNWpYaDIrOTJBeTdIZWRmQWd3QTZLRFdhZmI0dzNjQUFB
QUFTVVZPUks1Q1lJST1cIik7XAorYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCitiYWNr
Z3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKK31cCisuYWNlX2d1dHRlci1jZWxsLmFjZV93
YXJuaW5nIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQs
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBR1hSRldIUlRi
MlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJT
NWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpW
Tk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02
ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJ
RFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lD
QWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05
eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3
ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZ
bVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2Iy
SmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1
aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBE
Y21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJ
SGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZRVU0yT0VaRFFUZzRSVFUwTVRGRk1V
RXpNMFZGUlRNMlJVWTFNMFJCTWpZaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdR
NlFVTTJPRVpEUVRrNFJUVTBNVEZGTVVFek0wVkZSVE0yUlVZMU0wUkJNallpUGlBOGVHMXdUVTA2
UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwQlF6WTRS
a05CTmpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlOaUlnYzNSU1pXWTZaRzlqZFcxbGJu
UkpSRDBpZUcxd0xtUnBaRHBCUXpZNFJrTkJOemhGTlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVF
eU5pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3
YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2Q3UGZJQUFBR21TVVJCVkhqYVl2ci8v
ejhESlppSmdVSUFOb0NSa1JFYjlnTGlTVkFhUXg0T1FNN0FBa3dkN1hVMi92Kysvck90dGRZR0VC
OWRBU0V2T015ZEdLZkg4R3YvcDRYVGt2UkJmTHhlUUFQKzFjVWhYb3B5dnpoUDdQL0lvU2o3ZzdN
dzA5Y05LTzZKMVFRMEw0Z0lDUEl2L3ZlZy84VytKZEZ2UU5MSFZzVzkvbm1uOXprN0IrY0NrRHdo
TDdndDZrblNabng5L0x1Q0VPY3ZrSUFNUCtjdnRvOW5mcXlabW1VQWtzZm5CVXRiTTYwZ1gvMy9r
Z3l2My94U0ZPTDVEWlQrTDh2UCtZZmg1Y3ZmUHZwL3hVSHlRSFhHeUFZd2dwd0JqWllGVDNZMU9F
bC9PZkNINGZmdjN3emM0aXdNdk5Jc0RKK2YvbUg0K3ZJUEF4c2I2MzFXVzBZbG42WnBRTFhkTUsv
RFhHRGZsaCtzSXYzN0VpdkQ1eC8vR2I3K1lXVDR5ODZzbDdCQ0NrU0QrWisrLzFka3ZzRlJsK0hu
RDFSdmplNEY4d2hqTVhtR2o1OFlHZjV6c0RNd2NuQXdmUHZLY21sNjJEc1FEZWFEeE4rL1kwcXds
cEVIcXJkQjk0SVJOSURVZ2ZnZktKQ2hHSzRPaWtFVzNnVGlYVUI5NTBBU0xGQUY1NEFDOTRBMEc5
UUFmT25tRjlEQ0R6QUJGcVMwOElIWURJU2NkaWpPalFBQkJnQysvOWF3Qkg5Nmp3QUFBQUJKUlU1
RXJrSmdnZz09XCIpO1wKK2JhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XAorfVwKKy5h
Y2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6
aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFBQUFBQUFFRkJRVkpTVWw1ZVhtUmtaR3Ry
YTM5L2Y0V0ZoWW1KaVpHUmthYW1wcnk4dk1QRHc4ek16TlhWMWR6YzNPVGs1T3JxNnZEdzhQLy8v
d0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFrQUFC
UUFMQUFBQUFBUUFCQUFBQVV1SUNXT1pHbWVhQm1sNVhHd0ZDUVNCR3lYUlNBd3RxUUlpUnVpd0lN
NUJvWVZiRUZJeUdDUW9lSkdyVnB0SVFBN1wiKTtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHgg
Y2VudGVyO1wKK31cCisuYWNlX2RhcmsgLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XAorYmFj
a2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5
aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5UnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFB
QUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZj
bVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJu
TTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU15MWpNREV4SURZ
MkxqRTBOVFkyTVN3Z01qQXhNaTh3TWk4d05pMHhORG8xTmpveU55QWdJQ0FnSUNBZ0lqNGdQSEpr
WmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlM
ekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllX
SnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4
eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2
TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZl
R0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJE
MGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROaUFvVFdGamFXNTBiM05vS1NJZ2VHMXdUVTA2U1c1
emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR1JUazVNVFZHUkVJeE5Ea3hNVVV4T1RjNVEwRkZSRVF5
TVROR01qQkZReUlnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHUlRrNU1UVkdS
VUl4TkRreE1VVXhPVGM1UTBGRlJFUXlNVE5HTWpCRlF5SStJRHg0YlhCTlRUcEVaWEpwZG1Wa1Ju
SnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPa1pGT1RreE5VWkNRakUwT1RF
eFJURTVOemxEUVVWRVJESXhNMFl5TUVWRElpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1
Wkdsa09rWkZPVGt4TlVaRFFqRTBPVEV4UlRFNU56bERRVVZFUkRJeE0wWXlNRVZESWk4K0lEd3Zj
bVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAz
aHdZV05yWlhRZ1pXNWtQU0p5SWo4K1NJRGtqQUFBQUoxSlJFRlVlTnBpL1AvL1B3TWxnSW1CUWtC
N0E2cXJxLytETUM1NUZrSUdLQ29xNHBWbnBGa2dUcDA2OWYvKy9mdi9yMXUzN3IrdHJlMS9rZzBB
K3B0bjl1elpZTGFSa1JIcEx2anc0Y05YV1ZsWmh1ZlBuek9jTzNlT2RBTzB0YlZQQWpIRG16ZHZH
QTRmUHN4SXNnR1NrcEptdjM3OVluajM3aDJEakl5TUNNa0czTGh4US9UMjdkc01hbXBxREhaMmRx
L3BINDFEeHdDQUFBTUFGZGM2OGRVc0ZaZ0FBQUFBU1VWT1JLNUNZSUk9XCIpO1wKK31cCisuYWNl
X3Njcm9sbGJhciB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK292ZXJmbG93LXg6IGhpZGRlbjtc
CitvdmVyZmxvdy15OiBzY3JvbGw7XAorcmlnaHQ6IDA7XAordG9wOiAwO1wKK2JvdHRvbTogMDtc
Cit9XAorLmFjZV9zY3JvbGxiYXItaW5uZXIge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit3aWR0
aDogMXB4O1wKK2xlZnQ6IDA7XAorfVwKKy5hY2VfcHJpbnQtbWFyZ2luIHtcCitwb3NpdGlvbjog
YWJzb2x1dGU7XAoraGVpZ2h0OiAxMDAlO1wKK31cCisuYWNlX3RleHQtaW5wdXQge1wKK3Bvc2l0
aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4OiAwO1wKK3dpZHRoOiAwLjVlbTtcCitoZWlnaHQ6IDFl
bTtcCitvcGFjaXR5OiAwO1wKK2JhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wKKy1tb3otYXBwZWFy
YW5jZTogbm9uZTtcCithcHBlYXJhbmNlOiBub25lO1wKK2JvcmRlcjogbm9uZTtcCityZXNpemU6
IG5vbmU7XAorb3V0bGluZTogbm9uZTtcCitvdmVyZmxvdzogaGlkZGVuO1wKK2ZvbnQ6IGluaGVy
aXQ7XAorfVwKKy5hY2VfdGV4dC1pbnB1dC5hY2VfY29tcG9zaXRpb24ge1wKK2JhY2tncm91bmQ6
ICNmOGY4Zjg7XAorY29sb3I6ICMxMTE7XAorei1pbmRleDogMTAwMDtcCitvcGFjaXR5OiAxO1wK
K2JvcmRlcjogc29saWQgbGlnaHRncmF5IDFweDtcCittYXJnaW46IC0xcHg7XAorcGFkZGluZzog
MCAxcHg7XAorfVwKKy5hY2VfbGF5ZXIge1wKK3otaW5kZXg6IDE7XAorcG9zaXRpb246IGFic29s
dXRlO1wKK292ZXJmbG93OiBoaWRkZW47XAord2hpdGUtc3BhY2U6IG5vd3JhcDtcCitoZWlnaHQ6
IDEwMCU7XAord2lkdGg6IDEwMCU7XAorLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13
ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wK
Ky8qIHNldHRpbmcgcG9pbnRlci1ldmVudHM6IGF1dG87IG9uIG5vZGUgdW5kZXIgdGhlIG1vdXNl
LCB3aGljaCBjaGFuZ2VzXAorZHVyaW5nIHNjcm9sbCwgd2lsbCBicmVhayBtb3VzZSB3aGVlbCBz
Y3JvbGxpbmcgaW4gU2FmYXJpICovXAorcG9pbnRlci1ldmVudHM6IG5vbmU7XAorfVwKKy5hY2Vf
Z3V0dGVyLWxheWVyIHtcCitwb3NpdGlvbjogcmVsYXRpdmU7XAord2lkdGg6IGF1dG87XAordGV4
dC1hbGlnbjogcmlnaHQ7XAorcG9pbnRlci1ldmVudHM6IGF1dG87XAorfVwKKy5hY2VfdGV4dC1s
YXllciB7XAorY29sb3I6IGJsYWNrO1wKK2ZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcCit9XAor
LmFjZV9jamsge1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCit0ZXh0LWFsaWduOiBjZW50ZXI7
XAorfVwKKy5hY2VfY3Vyc29yLWxheWVyIHtcCit6LWluZGV4OiA0O1wKK31cCisuYWNlX2N1cnNv
ciB7XAorei1pbmRleDogNDtcCitwb3NpdGlvbjogYWJzb2x1dGU7XAorLW1vei1ib3gtc2l6aW5n
OiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6
aW5nOiBib3JkZXItYm94O1wKK31cCisuYWNlX2hpZGRlbi1jdXJzb3JzIC5hY2VfY3Vyc29yIHtc
CitvcGFjaXR5OiAwLjI7XAorfVwKKy5hY2Vfc21vb3RoLWJsaW5raW5nIC5hY2VfY3Vyc29yIHtc
CistbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorLXdlYmtpdC10cmFuc2l0aW9uOiBv
cGFjaXR5IDAuMThzO1wKKy1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAorLW1zLXRyYW5z
aXRpb246IG9wYWNpdHkgMC4xOHM7XAordHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcCit9XAor
LmFjZV9jdXJzb3Jbc3R5bGUqPVwib3BhY2l0eTogMFwiXXtcCistbXMtZmlsdGVyOiBcInByb2dp
ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTApXCI7XAorfVwKKy5h
Y2VfZWRpdG9yLmFjZV9tdWx0aXNlbGVjdCAuYWNlX2N1cnNvciB7XAorYm9yZGVyLWxlZnQtd2lk
dGg6IDFweDtcCit9XAorLmFjZV9saW5lIHtcCit3aGl0ZS1zcGFjZTogbm93cmFwO1wKK31cCisu
YWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6LWlu
ZGV4OiAzO1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XAorcG9zaXRp
b246IGFic29sdXRlO1wKK3otaW5kZXg6IDU7XAorfVwKKy5hY2VfbWFya2VyLWxheWVyIC5hY2Vf
YnJhY2tldCB7XAorcG9zaXRpb246IGFic29sdXRlO1wKK3otaW5kZXg6IDY7XAorfVwKKy5hY2Vf
bWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKK3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6
LWluZGV4OiAyO1wKK31cCisuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wK
K3Bvc2l0aW9uOiBhYnNvbHV0ZTtcCit6LWluZGV4OiA0O1wKKy1tb3otYm94LXNpemluZzogYm9y
ZGVyLWJveDtcCistd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorYm94LXNpemluZzog
Ym9yZGVyLWJveDtcCit9XAorLmFjZV9saW5lIC5hY2VfZm9sZCB7XAorLW1vei1ib3gtc2l6aW5n
OiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCitib3gtc2l6
aW5nOiBib3JkZXItYm94O1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCitoZWlnaHQ6IDExcHg7
XAorbWFyZ2luLXRvcDogLTJweDtcCit2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wKK2JhY2tncm91
bmQtaW1hZ2U6XAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAw
JTAwJTBESUhEUiUwMCUwMCUwMCUxMSUwMCUwMCUwMCUwOSUwOCUwNiUwMCUwMCUwMCVENCVFOCVD
NyUwQyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQcm9maWxlJTAwJTAweCUwMSU4NVQlREZrJUQzUCUx
NCVGRSVEQWUlOUQlQjAlRTElOEIlM0FnJTExJTA5JTNFaCU5MW5kU3RDJTlDJUI2a1clQkElQ0Ra
JUVBNiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUyNCVFRH4lQjAlMDclRDklOEJvJTNBJUM1dyVGMSUw
NyUzRSVGOSUwNyUwQyVEOSU4M28lN0IlOTIlMEQlQzYlMTRhJUY4JUFDJTg4JTIyTCVGNiUyMiVC
MyU5RSU5QjRNJ1MlMDMlQjklRjclQkIlREYlRjklRUU5JyVFNyVFNCU1RSVBMCVGOXFaJUQzJTE0
JTJGJTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0JTE0JURGJUYyJTAxJTVFJTFDQyUyQiVGQ2hNJThC
JTg2JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVGJUIzJUYzJTBFJTFFJUM2bHQlRUVvJURGJUFCJUZF
YyVENSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVCRSU5NDUlQzQlMjIlRTFZJUEwaSU1QyVENHQlMTMl
RTAlRDYlODklRUYlOUQxNSVDMiVDRExzWCVBNyUwNCUwOSUxRmc4b2MlODElRTElOEMlOEQlMjMl
OTZmNDUlNDAlOUElMDklQzIlMDclQzVCJTNBSyVCOCU0MDglOThpJUUwJUYzJTBEJUQ4JUNFJTgx
JTE0JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJFUiUyRiVFNWRFJUIyJTBDJUY2JUYwJTFGcyU4MyVG
Ml8lQjAlQTglOTQlRTklOUIlQUQlRTclMTAlOERtJTlBJTE5TiVEMSU3QyU4QSVERSUxRjklN0Rw
JThDJUU2JTAwJUQ1JUMxJTNGXyUxOCVCREElQjglOURwWDYlRTMlQTM1fkIlQ0QlMjQlQUUlMTEl
MjYlQkQlRTclRUV0aSU5OCVFRGUlOUElOTdZKSUxMiUyNSUxQyUyNCVCQ2JUJUFFM2xpJUU2JTBC
JTAzJTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVCMCU5RjQlQkY0M1klRjMlRTMlRURQJTk1JTA0JUVC
MSVDNSVGNSVGNktGJUY0JUJBJUJEJUQ3JURCJTkxJTkzJTA3JUUzNSUzRSVBNyklRDYlN0YlNDAl
RkUlQkQlRjclRjVyJThBJUU1eSU5MiVGMCVFQiVCNCUxRSU4RCVENSVGNCU1QiU5MiUzQVYlREIl
REIlRTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUwM0hCJTgyJThFJTFDZCglRTAlOTFCJTBDYSU5QWMl
QzQlQUElRjhMJTE2JTE5JTIySiVBNCVEMml0VHklQjI4JUQ2JTNCKCU5MyU5NiVFRCUxQ0d4JUM5
XyUwRSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVGNiVFMCVGQiU5RSVERCUyNSVENyU4RSVCQyUxNSU4
NSVDNSVCNyVBMyVEOFElRUQlQjUlODElRTklQkElQjIlMTMlOUElMUIlN0Z1YSVBNSVBM24lRTE3
JUI5JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUlOEElRTUlQjFIJTVFZSVDQU8lODJRJUQ3dTYlRTYl
OTBTJTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2JTEyWCUwQyVCQSVBQyVGMCU1RSVGOCpsJTBBTyU4
NSUxNyVDMiU5NyVCRiVENCVDOCVDRSVERSVBRCUxMSVDQiU4MHElMkMlM0UlQUIlOUVTJUNEJUM2
JUVDJTI1JUQyTCVEMiVFQmQlQjglQkYlOEElRjVCJUM2JTE4JUY5JTkwMUNaJTlEJUJFJTI0TSU5
QyU4QTklRjIlREFQJTBCJyUwNnclODIlRUIlRTYlRTIlNUMlMkYlRDclMDclOUUlQkIlQ0MlNUQl
RTElRkElQjklMDglQUQuciUyMyU4RSVDMiUxNyVGNUUlN0MhJUYwJUJFMyVCRSUzRV8lQjdvJTg4
YSVBNyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVCQiVEMyU5MSVCQSVBMiVCMXolOTQlOEYlREInJUY2
JTNEJThFJUFBJTEzJTE5JUIyJUIxJUJFJUIxflYlMDglMkIlQjQlQTJjakolQjN0TyUwMCUwMyUy
NW1OJTk3JUYzJTA1JTkzJUVGJTExJTg0JTBCJTdDJTg4JUFFLSU4OSU4RiVBQmJXJTkwTyUyQiUw
QW8lOTklMEMlNUUlOTclMENJJUFGSCVEOS4lQjAlM0IlOEYlRUQlMDMlQjZTJUQ2JTVEJUU2aV9z
OSVGMypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2JTVFJTE5JUMwJUQxcy4lMTclQTAzdSVFNCUwOSVC
MCU3QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5RSVCNyU4MCU5MSUzQiVEQmMlQUQlM0RtYSVCQSU4
QiUzRVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUwRiVBQiVENSU5RiVDRiVBQSVENSVERCVFNyVFNCU3
RiUwQnglQTMlRkMlMDYlQTklMjMlMEElRDYlQzIlQTFfMiUwMCUwMCUwMCUwOXBIWXMlMDAlMDAl
MEIlMTMlMDAlMDAlMEIlMTMlMDElMDAlOUElOUMlMTglMDAlMDAlMDAlQjVJREFUKCUxNSVBNSU5
MSUzRCUwRSUwMiElMTAlODVhYyVFMSUwNSVENiVDRSVENiVDNiVDRSVEMiVFOCVFRCVDRCVERSVD
MCVDNiVENk4uJUUwViVGOCUzRCU5Q2ElODkxWEglQzIlQkUlRDl5JTNGJTkwISVFNiU5QyVDMyVC
RmslRTUlMDExJUM2LSVGNSVDOE4lMDQlREYlQkQlRkYlODklREZ0JTgzRE4lNjAlM0UlRjMlQUIl
QTAlREUlMUElNURnJUJFJTEwUSU5NyUxQiU0MCU5QyVBOG8lMTAlOEYlNUUlODI4JUI0JTFCJTYw
JTg3JUY2JTAyJTI2JTg1JTFDaCUxRSVDMSUyQiU1QmslRkYlODYlRUUlQjdqJTA5JTlBJURBJTlC
JUFDZSVBMyVGOSVFQyVEQSE5JUI0JUQ1JUE2JTgxJTg2JTg2JTk4JUNDJTNDJTVCJTQwJUZBJTgx
JUIzJUU5JUNCJTIzJTk0JUMxNkF6byUwNSVENCVFMSVDMSU5NWElM0IlOEEnJUEwJUU4JUNDJTE3
JTIyJTg1JTFEJUJBJTAwJUEyJUZBJURDJTBBJTk0JUQxJUQxJThEJThCJTNBJTg0JTE3QiVDNyU2
MCUxQSUyNVolRkMlOEQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKSxcCit1cmwoXCJkYXRh
OmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1
JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIw
UHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUx
MSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYl
MjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTky
JTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURG
JUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVF
NCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVF
RiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAl
QkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1gl
QTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUz
QUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFC
RVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEw
JThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRB
JUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3
WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIl
QjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVE
QiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAl
RUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0Yl
MDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJp
dFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjgl
RjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5
JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZF
JThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1
diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUl
QUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThB
JUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVC
JUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIl
MTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIl
QkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVC
MX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUw
QiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDku
JUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUw
NiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0Ml
OUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIl
MEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2
JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlB
JTlDJTE4JTAwJTAwJTAwJTNBSURBVDglMTFjJUZDJUZGJUZGJTdGJTE4JTAzJTFBJTYwJTAxJUYy
JTNGJUEwJTg5MSU4MCUwNCVGRiUxMS0lRjglMTclOUJKJUUyJTA1JUIxWkQlODF2JTI2dCVFNyU4
MCVGOCVBMyU4MmglQTEyJTFBJTIwJUEzJTAxJTAyJTBGJTAxJUJBJTI1JTA2JTAwJTE5JUMwJTBE
JUFFRiVENSUzRVMlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCitiYWNrZ3JvdW5kLXJl
cGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIg
Y2VudGVyLCB0b3AgbGVmdDtcCitjb2xvcjogdHJhbnNwYXJlbnQ7XAorYm9yZGVyOiAxcHggc29s
aWQgYmxhY2s7XAorLW1vei1ib3JkZXItcmFkaXVzOiAycHg7XAorLXdlYmtpdC1ib3JkZXItcmFk
aXVzOiAycHg7XAorYm9yZGVyLXJhZGl1czogMnB4O1wKK2N1cnNvcjogcG9pbnRlcjtcCitwb2lu
dGVyLWV2ZW50czogYXV0bztcCit9XAorLmFjZV9kYXJrIC5hY2VfZm9sZCB7XAorfVwKKy5hY2Vf
Zm9sZDpob3ZlcntcCitiYWNrZ3JvdW5kLWltYWdlOlwKK3VybChcImRhdGE6aW1hZ2UvcG5nLCU4
OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMTElMDAlMDAlMDAlMDkl
MDglMDYlMDAlMDAlMDAlRDQlRTglQzclMEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUw
MCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWgl
OTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIw
JTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0
YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOScl
RTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVG
MiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUw
RSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0
JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDkl
MUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4
JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVk
RSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUx
OU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2
JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUl
MUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJG
NDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUw
NyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUl
OEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4
RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVE
NiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIl
OUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEz
JTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIx
SCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMl
QkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0Il
ODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUx
OCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVD
JTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdD
ISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTEl
QkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJC
JUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVB
RS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThG
JUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVD
MCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAl
OTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUl
OUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIl
MDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAw
JTAwJTAwJUI1SURBVCglMTUlQTUlOTElM0QlMEUlMDIhJTEwJTg1YWMlRTElMDUlRDYlQ0UlRDYl
QzYlQ0UlRDIlRTglRUQlQ0QlREUlQzAlQzYlRDZOLiVFMFYlRjglM0QlOUNhJTg5MVhIJUMyJUJF
JUQ5eSUzRiU5MCElRTYlOUMlQzMlQkZrJUU1JTAxMSVDNi0lRjUlQzhOJTA0JURGJUJEJUZGJTg5
JURGdCU4M0ROJTYwJTNFJUYzJUFCJUEwJURFJTFBJTVEZyVCRSUxMFElOTclMUIlNDAlOUMlQThv
JTEwJThGJTVFJTgyOCVCNCUxQiU2MCU4NyVGNiUwMiUyNiU4NSUxQ2glMUUlQzElMkIlNUJrJUZG
JTg2JUVFJUI3aiUwOSU5QSVEQSU5QiVBQ2UlQTMlRjklRUMlREEhOSVCNCVENSVBNiU4MSU4NiU4
NiU5OCVDQyUzQyU1QiU0MCVGQSU4MSVCMyVFOSVDQiUyMyU5NCVDMTZBem8lMDUlRDQlRTElQzEl
OTVhJTNCJThBJyVBMCVFOCVDQyUxNyUyMiU4NSUxRCVCQSUwMCVBMiVGQSVEQyUwQSU5NCVEMSVE
MSU4RCU4QiUzQSU4NCUxN0IlQzclNjAlMUElMjVaJUZDJThEJTAwJTAwJTAwJTAwSUVORCVBRUIl
NjAlODJcIiksXAordXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAw
JTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUwMDclMDglMDYlMDAlMDAlMDAlQzQlREQlODBD
JTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZF
JURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2
JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNF
JUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlF
JTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYl
MEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYl
MTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1
JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVE
NiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0
NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQl
RTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVC
MCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMl
RTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVC
RCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMl
ODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1
JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVC
RCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVF
NCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVB
QSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBF
JUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1
JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjkl
RTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMl
OTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3
JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMl
MjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThB
OSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVG
QSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3
JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0Ql
OEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4l
OTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5
OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYz
KnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdD
JTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNF
ViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBC
eCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUx
MyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMDNJREFUOCUxMWMlRkMlRkYlRkYl
N0YlM0UlMDMlMUElNjAlMDElRjIlM0YlQTMlODkxJTgwJTA0JUZGUSUyNiVGOHclQzAlQjQzJUEx
JURCJTBDJUUyJThGJTBBJUEyJTg1JUNBaCU4MCU4QyUwNiUwOCUzQyUwNCVFOCU5NiUxOCUwMCVB
M1MlMEQlQ0QlQ0YlRDglQzElOUQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcCitiYWNr
Z3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9u
OiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcCit9XAorLmFjZV9lZGl0b3IuYWNlX2RyYWdnaW5n
IC5hY2VfY29udGVudCB7XAorY3Vyc29yOiBtb3ZlO1wKK31cCisuYWNlX2d1dHRlci10b29sdGlw
IHtcCitiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1wKK2JhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQt
bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4x
KSk7XAorYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNw
YXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAorYm9yZGVyOiAxcHggc29saWQgZ3JheTtcCiti
b3JkZXItcmFkaXVzOiAxcHg7XAorYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwg
MC4zKTtcCitjb2xvcjogYmxhY2s7XAorZGlzcGxheTogaW5saW5lLWJsb2NrO1wKK21heC13aWR0
aDogNTAwcHg7XAorcGFkZGluZzogNHB4O1wKK3Bvc2l0aW9uOiBmaXhlZDtcCit6LWluZGV4OiAz
MDA7XAorLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKKy13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDtcCitib3gtc2l6aW5nOiBib3JkZXItYm94O1wKK2N1cnNvcjogZGVmYXVsdDtc
Cit3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XAord29yZC13cmFwOiBicmVhay13b3JkO1wKK2xpbmUt
aGVpZ2h0OiBub3JtYWw7XAorZm9udC1zdHlsZTogbm9ybWFsO1wKK2ZvbnQtd2VpZ2h0OiBub3Jt
YWw7XAorbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcCit9XAorLmFjZV9mb2xkaW5nLWVuYWJsZWQg
PiAuYWNlX2d1dHRlci1jZWxsIHtcCitwYWRkaW5nLXJpZ2h0OiAxM3B4O1wKK31cCisuYWNlX2Zv
bGQtd2lkZ2V0IHtcCistbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAorLXdlYmtpdC1ib3gt
c2l6aW5nOiBib3JkZXItYm94O1wKK2JveC1zaXppbmc6IGJvcmRlci1ib3g7XAorbWFyZ2luOiAw
IC0xMnB4IDAgMXB4O1wKK2Rpc3BsYXk6IGlubGluZS1ibG9jaztcCit3aWR0aDogMTFweDtcCit2
ZXJ0aWNhbC1hbGlnbjogdG9wO1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uv
cG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAl
MDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBZSU4QSVCMSUw
RCUwMDAlMEMlQzIlRjIlMkNLJTk2JUJDJUQwJThGOSU4MSU4OEglRTklRDAlMEUlOTYlQzAlMTAl
OTIlM0UlMDIlODAlNUUlODIlRTQlQTkqLSVFRXN3JUM4JUNDJTExJUVFJTk2dyVEOCVEQyVFOSpF
aCUwQyUxNTEoJTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorYmFja2dyb3VuZC1yZXBl
YXQ6IG5vLXJlcGVhdDtcCitiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XAorYm9yZGVyLXJh
ZGl1czogM3B4O1wKK2JvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1wKK31cCisuYWNlX2Zv
bGQtd2lkZ2V0LmFjZV9lbmQge1wKK2JhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uv
cG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAl
MDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBbSVDNyVDMSUw
OSUwMDAlMDhDJUQxJThDJUVDRSVDOEUoJThFJUVDJTAyKSUxRVpKJUYxJUMxJyUwNCUwN0klRTEl
RTUlRUUlQ0FMJUY1JUEyJTk5JTk5JTIyJUUyJUQ2JTFGVSVCNSVGRTAlRDl4JUE3JTI2V3o1JTBF
JUQ1JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorfVwKKy5hY2VfZm9sZC13aWRnZXQu
YWNlX2Nsb3NlZCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5
UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwMyUwMCUwMCUwMCUwNiUw
OCUwNiUwMCUwMCUwMCUwNiVFNSUyNCUwQyUwMCUwMCUwMDlJREFUeCVEQTUlQ0ElQzElMDklMDAw
JTA4JTAzJUMwJUFDKiglM0UlMDQlQzElMEQlQkElQjElMjMlQTRVaCVFMCUyMCU4MSVDMCVDQyVG
OCU4MiU4MSVBQSVBMiVBQXJHZnIlODglMDglMTElMTElMUMlREQlN0QlRTAlRUUlNUIlRjYlRjYl
Q0IlQjglMDVRJTJGJUU5dGFpJUQ5JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAorfVwK
Ky5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1wKK2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwg
MCwgMC4zKTtcCitiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAor
LW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKKy13
ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcCiti
b3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKK31cCisuYWNl
X2ZvbGQtd2lkZ2V0OmFjdGl2ZSB7XAorYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAw
LjQpO1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XAorLW1vei1ib3gt
c2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKKy13ZWJraXQtYm94
LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcCitib3gtc2hhZG93
OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKK31cCisvKipcCisqIERhcmsg
dmVyc2lvbiBmb3IgZm9sZCB3aWRnZXRzXAorKi9cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdl
dCB7XAorYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQUhrbEVRVlFJVzJQNC8v
OC9Bem9HRVE3b0dDYUxMQWhXaVN3QjE0NkJBUUNTVFBZb2NxVDBBQUFBQUVsRlRrU3VRbUNDXCIp
O1wKK31cCisuYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcCitiYWNrZ3JvdW5k
LWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdD
NEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09XCIpO1wKK31cCisuYWNl
X2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcCitiYWNrZ3JvdW5kLWltYWdlOiB1
cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFB
QUZDQVlBQUFDQWNWYWlBQUFBSEVsRVFWUUlXMlA0Ly8rL0F4QXpnREFEbE9PQXpuSEFLZ1BXQXdB
UmppOFVJRFRmUVFBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XAorfVwKKy5hY2VfZGFyayAuYWNlX2Zv
bGQtd2lkZ2V0OmhvdmVyIHtcCitib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjIpO1wKK2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtc
Cit9XAorLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcCistbW96LWJveC1zaGFk
b3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorLXdlYmtpdC1ib3gtc2hh
ZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKK2JveC1zaGFkb3c6IDAg
MXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAorfVwKKy5hY2VfZm9sZC13aWRnZXQu
YWNlX2ludmFsaWQge1wKK2JhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7XAorYm9yZGVyLWNvbG9y
OiAjREU1NTU1O1wKK31cCisuYWNlX2ZhZGUtZm9sZC13aWRnZXRzIC5hY2VfZm9sZC13aWRnZXQg
e1wKKy1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XAorLXdlYmtpdC10
cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCistby10cmFuc2l0aW9uOiBvcGFj
aXR5IDAuNHMgZWFzZSAwLjA1cztcCistbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2Ug
MC4wNXM7XAordHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XAorb3BhY2l0eTog
MDtcCit9XAorLmFjZV9mYWRlLWZvbGQtd2lkZ2V0czpob3ZlciAuYWNlX2ZvbGQtd2lkZ2V0IHtc
CistbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCistd2Via2l0LXRy
YW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCistby10cmFuc2l0aW9uOiBvcGFj
aXR5IDAuMDVzIGVhc2UgMC4wNXM7XAorLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFz
ZSAwLjA1cztcCit0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAorb3BhY2l0
eToxO1wKK31cCisuYWNlX3VuZGVybGluZSB7XAordGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7
XAorfVwKKy5hY2VfYm9sZCB7XAorZm9udC13ZWlnaHQ6IGJvbGQ7XAorfVwKKy5hY2Vfbm9ib2xk
IC5hY2VfYm9sZCB7XAorZm9udC13ZWlnaHQ6IG5vcm1hbDtcCit9XAorLmFjZV9pdGFsaWMge1wK
K2ZvbnQtc3R5bGU6IGl0YWxpYztcCit9XAorIjsKKworZG9tLmltcG9ydENzc1N0cmluZyhlZGl0
b3JDc3MsICJhY2VfZWRpdG9yIik7CisKK3ZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihj
b250YWluZXIsIHRoZW1lKSB7CisgICAgdmFyIF9zZWxmID0gdGhpczsKKworICAgIHRoaXMuY29u
dGFpbmVyID0gY29udGFpbmVyIHx8IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlz
LiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9ICF1c2VyYWdlbnQuaXNJRTsKKworICAgIGRvbS5hZGRD
c3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9lZGl0b3IiKTsKKworICAgIHRoaXMuc2V0VGhl
bWUodGhlbWUpOworCisgICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgIHRoaXMuJGd1dHRlci5jbGFzc05hbWUgPSAiYWNlX2d1dHRlciI7CisgICAgdGhpcy5j
b250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyKTsKKworICAgIHRoaXMuc2Nyb2xsZXIg
PSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUg
PSAiYWNlX3Njcm9sbGVyIjsKKyAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNj
cm9sbGVyKTsKKworICAgIHRoaXMuY29udGVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gImFjZV9jb250ZW50IjsKKyAgICB0aGlzLnNj
cm9sbGVyLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7CisKKyAgICB0aGlzLnNldEhpZ2hsaWdo
dEd1dHRlckxpbmUodHJ1ZSk7CisgICAgdGhpcy4kZ3V0dGVyTGF5ZXIgPSBuZXcgR3V0dGVyTGF5
ZXIodGhpcy4kZ3V0dGVyKTsKKyAgICB0aGlzLiRndXR0ZXJMYXllci5vbigiY2hhbmdlR3V0dGVy
V2lkdGgiLCB0aGlzLm9uR3V0dGVyUmVzaXplLmJpbmQodGhpcykpOworCisgICAgdGhpcy4kbWFy
a2VyQmFjayA9IG5ldyBNYXJrZXJMYXllcih0aGlzLmNvbnRlbnQpOworCisgICAgdmFyIHRleHRM
YXllciA9IHRoaXMuJHRleHRMYXllciA9IG5ldyBUZXh0TGF5ZXIodGhpcy5jb250ZW50KTsKKyAg
ICB0aGlzLmNhbnZhcyA9IHRleHRMYXllci5lbGVtZW50OworCisgICAgdGhpcy4kbWFya2VyRnJv
bnQgPSBuZXcgTWFya2VyTGF5ZXIodGhpcy5jb250ZW50KTsKKworICAgIHRoaXMuJGN1cnNvckxh
eWVyID0gbmV3IEN1cnNvckxheWVyKHRoaXMuY29udGVudCk7CisgICAgdGhpcy4kaG9yaXpTY3Jv
bGwgPSBmYWxzZTsKKyAgICB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgPSBmYWxzZTsK
KworICAgIHRoaXMuJGFuaW1hdGVkU2Nyb2xsID0gZmFsc2U7CisKKyAgICB0aGlzLnNjcm9sbEJh
ciA9IG5ldyBTY3JvbGxCYXIodGhpcy5jb250YWluZXIpOworICAgIHRoaXMuc2Nyb2xsQmFyLmFk
ZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKCFfc2Vs
Zi4kaW5TY3JvbGxBbmltYXRpb24pCisgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9s
bFRvcChlLmRhdGEpOworICAgIH0pOworCisgICAgdGhpcy5zY3JvbGxUb3AgPSAwOworICAgIHRo
aXMuc2Nyb2xsTGVmdCA9IDA7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcih0aGlzLnNjcm9sbGVy
LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gX3NlbGYu
c2Nyb2xsZXIuc2Nyb2xsTGVmdDsKKyAgICAgICAgX3NlbGYuc2Nyb2xsTGVmdCA9IHNjcm9sbExl
ZnQ7CisgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTsKKyAg
ICB9KTsKKworICAgIHRoaXMuY3Vyc29yUG9zID0geworICAgICAgICByb3cgOiAwLAorICAgICAg
ICBjb2x1bW4gOiAwCisgICAgfTsKKworICAgIHRoaXMuJHRleHRMYXllci5hZGRFdmVudExpc3Rl
bmVyKCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIF9zZWxmLnVw
ZGF0ZUNoYXJhY3RlclNpemUoKTsKKyAgICAgICAgX3NlbGYub25SZXNpemUodHJ1ZSk7CisgICAg
fSk7CisKKyAgICB0aGlzLiRzaXplID0geworICAgICAgICB3aWR0aDogMCwKKyAgICAgICAgaGVp
Z2h0OiAwLAorICAgICAgICBzY3JvbGxlckhlaWdodDogMCwKKyAgICAgICAgc2Nyb2xsZXJXaWR0
aDogMAorICAgIH07CisKKyAgICB0aGlzLmxheWVyQ29uZmlnID0geworICAgICAgICB3aWR0aCA6
IDEsCisgICAgICAgIHBhZGRpbmcgOiAwLAorICAgICAgICBmaXJzdFJvdyA6IDAsCisgICAgICAg
IGZpcnN0Um93U2NyZWVuOiAwLAorICAgICAgICBsYXN0Um93IDogMCwKKyAgICAgICAgbGluZUhl
aWdodCA6IDEsCisgICAgICAgIGNoYXJhY3RlcldpZHRoIDogMSwKKyAgICAgICAgbWluSGVpZ2h0
IDogMSwKKyAgICAgICAgbWF4SGVpZ2h0IDogMSwKKyAgICAgICAgb2Zmc2V0IDogMCwKKyAgICAg
ICAgaGVpZ2h0IDogMQorICAgIH07CisKKyAgICB0aGlzLiRsb29wID0gbmV3IFJlbmRlckxvb3Ao
CisgICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMuYmluZCh0aGlzKSwKKyAgICAgICAgdGhpcy5j
b250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldworICAgICk7CisgICAgdGhpcy4kbG9v
cC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKworICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVy
U2l6ZSgpOworICAgIHRoaXMuc2V0UGFkZGluZyg0KTsKK307CisKKyhmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLnNob3dHdXR0ZXIgPSB0cnVlOworCisgICAgdGhpcy5DSEFOR0VfQ1VSU09SID0gMTsK
KyAgICB0aGlzLkNIQU5HRV9NQVJLRVIgPSAyOworICAgIHRoaXMuQ0hBTkdFX0dVVFRFUiA9IDQ7
CisgICAgdGhpcy5DSEFOR0VfU0NST0xMID0gODsKKyAgICB0aGlzLkNIQU5HRV9MSU5FUyA9IDE2
OworICAgIHRoaXMuQ0hBTkdFX1RFWFQgPSAzMjsKKyAgICB0aGlzLkNIQU5HRV9TSVpFID0gNjQ7
CisgICAgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0sgPSAxMjg7CisgICAgdGhpcy5DSEFOR0VfTUFS
S0VSX0ZST05UID0gMjU2OworICAgIHRoaXMuQ0hBTkdFX0ZVTEwgPSA1MTI7CisgICAgdGhpcy5D
SEFOR0VfSF9TQ1JPTEwgPSAxMDI0OworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVt
aXR0ZXIpOworICAgIAorICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6ZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLmFsbG93Qm9sZEZvbnRzICE9IHRoaXMuJGFs
bG93Qm9sZEZvbnRzKSB7CisgICAgICAgICAgICB0aGlzLiRhbGxvd0JvbGRGb250cyA9IHRoaXMu
JHRleHRMYXllci5hbGxvd0JvbGRGb250czsKKyAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoImFj
ZV9ub2JvbGQiLCAhdGhpcy4kYWxsb3dCb2xkRm9udHMpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENoYXJhY3Rl
cldpZHRoKCk7CisgICAgICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuJHRleHRMYXllci5nZXRM
aW5lSGVpZ2h0KCk7CisgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7CisgICAgfTsK
KyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHRoaXMu
c2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgIAorICAgICAgICB0aGlzLnNjcm9sbGVyLmNsYXNz
TmFtZSA9ICJhY2Vfc2Nyb2xsZXIiOworICAgICAgICAKKyAgICAgICAgdGhpcy4kY3Vyc29yTGF5
ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRTZXNz
aW9uKHNlc3Npb24pOworICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRTZXNzaW9uKHNlc3Np
b24pOworICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5zZXRTZXNzaW9uKHNlc3Npb24pOworICAg
ICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKKyAgICAgICAgdGhpcy4k
bG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKKyAgICAgICAgCisgICAgfTsKKyAgICB0
aGlzLnVwZGF0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAg
aWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGxhc3RSb3cgPSBJbmZpbml0
eTsKKworICAgICAgICBpZiAoIXRoaXMuJGNoYW5nZWRMaW5lcykgeworICAgICAgICAgICAgdGhp
cy4kY2hhbmdlZExpbmVzID0geworICAgICAgICAgICAgICAgIGZpcnN0Um93OiBmaXJzdFJvdywK
KyAgICAgICAgICAgICAgICBsYXN0Um93OiBsYXN0Um93CisgICAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5m
aXJzdFJvdyA+IGZpcnN0Um93KQorICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5m
aXJzdFJvdyA9IGZpcnN0Um93OworCisgICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVz
Lmxhc3RSb3cgPCBsYXN0Um93KQorICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5s
YXN0Um93ID0gbGFzdFJvdzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMu
JGNoYW5nZWRMaW5lcy5maXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcubGFzdFJvdyB8fAorICAg
ICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmZp
cnN0Um93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxl
KHRoaXMuQ0hBTkdFX0xJTkVTKTsKKyAgICB9OworCisgICAgdGhpcy5vbkNoYW5nZVRhYlNpemUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9U
RVhUIHwgdGhpcy5DSEFOR0VfTUFSS0VSKTsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLm9uQ2hh
bmdlVGFiU2l6ZSgpOworICAgIH07CisgICAgdGhpcy51cGRhdGVUZXh0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgfTsK
KyAgICB0aGlzLnVwZGF0ZUZ1bGwgPSBmdW5jdGlvbihmb3JjZSkgeworICAgICAgICBpZiAoZm9y
Y2UpeworICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyh0aGlzLkNIQU5HRV9GVUxMLCB0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGxvb3Au
c2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMu
dXBkYXRlRm9udFNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLmNo
ZWNrRm9yU2l6ZUNoYW5nZXMoKTsKKyAgICB9OworICAgIHRoaXMub25SZXNpemUgPSBmdW5jdGlv
bihmb3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIGNoYW5n
ZXMgPSB0aGlzLkNIQU5HRV9TSVpFOworICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJHNpemU7CisK
KyAgICAgICAgaWYgKHRoaXMucmVzaXppbmcgPiAyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBlbHNlIGlmICh0aGlzLnJlc2l6aW5nID4gMSkKKyAgICAgICAgICAgIHRoaXMucmVzaXpp
bmcrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5yZXNpemluZyA9IGZvcmNlID8g
MSA6IDA7CisgICAgICAgIGlmICghaGVpZ2h0KQorICAgICAgICAgICAgaGVpZ2h0ID0gZG9tLmdl
dElubmVySGVpZ2h0KHRoaXMuY29udGFpbmVyKTsKKworICAgICAgICBpZiAoaGVpZ2h0ICYmIChm
b3JjZSB8fCBzaXplLmhlaWdodCAhPSBoZWlnaHQpKSB7CisgICAgICAgICAgICBzaXplLmhlaWdo
dCA9IGhlaWdodDsKKworICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCA9IHRoaXMuc2Ny
b2xsZXIuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0SGVpZ2h0
KHNpemUuc2Nyb2xsZXJIZWlnaHQpOworCisgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLmdldFNjcm9s
bFRvcCgpKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdF
X0ZVTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdpZHRoKQor
ICAgICAgICAgICAgd2lkdGggPSBkb20uZ2V0SW5uZXJXaWR0aCh0aGlzLmNvbnRhaW5lcik7CisK
KyAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnJlc2l6aW5nID4gMSB8fCBzaXpl
LndpZHRoICE9IHdpZHRoKSkgeworICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHdpZHRoOworCisg
ICAgICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlzLnNob3dHdXR0ZXIgPyB0aGlzLiRndXR0
ZXIub2Zmc2V0V2lkdGggOiAwOworICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5sZWZ0
ID0gZ3V0dGVyV2lkdGggKyAicHgiOworICAgICAgICAgICAgc2l6ZS5zY3JvbGxlcldpZHRoID0g
TWF0aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJXaWR0aCAtIHRoaXMuc2Nyb2xsQmFyLmdldFdpZHRo
KCkpOworICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5yaWdodCA9IHRoaXMuc2Nyb2xs
QmFyLmdldFdpZHRoKCkgKyAicHgiOworCisgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdl
dFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1c3RXcmFwTGltaXQoKSB8fCBmb3JjZSkKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX0ZVTEw7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZm9yY2UpCisgICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2Vz
KGNoYW5nZXMsIHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLiRsb29wLnNj
aGVkdWxlKGNoYW5nZXMpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvcmNlKQorICAgICAgICAg
ICAgZGVsZXRlIHRoaXMucmVzaXppbmc7CisgICAgfTsKKworICAgIHRoaXMub25HdXR0ZXJSZXNp
emUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHdpZHRoID0gdGhpcy4kc2l6ZS53aWR0aDsK
KyAgICAgICAgdmFyIGd1dHRlcldpZHRoID0gdGhpcy5zaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVy
Lm9mZnNldFdpZHRoIDogMDsKKyAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5sZWZ0ID0gZ3V0
dGVyV2lkdGggKyAicHgiOworICAgICAgICB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggPSBNYXRo
Lm1heCgwLCB3aWR0aCAtIGd1dHRlcldpZHRoIC0gdGhpcy5zY3JvbGxCYXIuZ2V0V2lkdGgoKSk7
CisKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRq
dXN0V3JhcExpbWl0KCkpCisgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0ZVTEwpOworICAgIH07CisgICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGF2YWlsYWJsZVdpZHRoID0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRo
IC0gdGhpcy4kcGFkZGluZyAqIDI7CisgICAgICAgIHZhciBsaW1pdCA9IE1hdGguZmxvb3IoYXZh
aWxhYmxlV2lkdGggLyB0aGlzLmNoYXJhY3RlcldpZHRoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
c2Vzc2lvbi5hZGp1c3RXcmFwTGltaXQobGltaXQpOworICAgIH07CisgICAgdGhpcy5zZXRBbmlt
YXRlZFNjcm9sbCA9IGZ1bmN0aW9uKHNob3VsZEFuaW1hdGUpeworICAgICAgICB0aGlzLiRhbmlt
YXRlZFNjcm9sbCA9IHNob3VsZEFuaW1hdGU7CisgICAgfTsKKyAgICB0aGlzLmdldEFuaW1hdGVk
U2Nyb2xsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRhbmltYXRlZFNjcm9s
bDsKKyAgICB9OworICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52
aXNpYmxlcykgeworICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLnNldFNob3dJbnZpc2libGVz
KHNob3dJbnZpc2libGVzKSkKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5D
SEFOR0VfVEVYVCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0ZXh0TGF5ZXIuc2hvd0ludmlzaWJsZXM7Cisg
ICAgfTsKKworICAgIHRoaXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kdGV4dExheWVyLmRpc3BsYXlJbmRlbnRHdWlkZXM7CisgICAg
fTsKKyAgICAKKyAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNw
bGF5KSB7CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0RGlzcGxheUluZGVudEd1aWRl
cyhkaXNwbGF5KSkKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0Vf
VEVYVCk7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSB0cnVlOwor
ICAgIHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7
CisgICAgICAgIHRoaXMuJHNob3dQcmludE1hcmdpbiA9IHNob3dQcmludE1hcmdpbjsKKyAgICAg
ICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0U2hvd1By
aW50TWFyZ2luID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzaG93UHJpbnRN
YXJnaW47CisgICAgfTsKKworICAgIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uID0gODA7CisgICAg
dGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikgewor
ICAgICAgICB0aGlzLiRwcmludE1hcmdpbkNvbHVtbiA9IHNob3dQcmludE1hcmdpbjsKKyAgICAg
ICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICB9OworICAgIHRoaXMuZ2V0UHJpbnRN
YXJnaW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHByaW50TWFy
Z2luQ29sdW1uOworICAgIH07CisgICAgdGhpcy5nZXRTaG93R3V0dGVyID0gZnVuY3Rpb24oKXsK
KyAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0d1dHRlcjsKKyAgICB9OworICAgIHRoaXMuc2V0U2hv
d0d1dHRlciA9IGZ1bmN0aW9uKHNob3cpeworICAgICAgICBpZih0aGlzLnNob3dHdXR0ZXIgPT09
IHNob3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuJGd1dHRlci5zdHlsZS5k
aXNwbGF5ID0gc2hvdyA/ICJibG9jayIgOiAibm9uZSI7CisgICAgICAgIHRoaXMuc2hvd0d1dHRl
ciA9IHNob3c7CisgICAgICAgIHRoaXMub25SZXNpemUodHJ1ZSk7CisgICAgfTsKKworICAgIHRo
aXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKXsKKyAgICAgICAgcmV0dXJuIGRvbS5o
YXNDc3NDbGFzcyh0aGlzLiRndXR0ZXIsICJhY2VfZmFkZS1mb2xkLXdpZGdldHMiKTsKKyAgICB9
OworCisgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7CisgICAg
ICAgIGlmIChzaG93KQorICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuJGd1dHRlciwg
ImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb20u
cmVtb3ZlQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7Cisg
ICAgfTsKKworICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBmYWxzZTsKKyAgICB0aGlz
LnNldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKKyAg
ICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0g
c2hvdWxkSGlnaGxpZ2h0OworCisgICAgICAgIGlmICghdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdo
dCkgeworICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCA9IGRvbS5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuY2xh
c3NOYW1lID0gImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUiOworICAgICAgICAgICAgdGhpcy4kZ3V0
dGVyLmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5z
dHlsZS5kaXNwbGF5ID0gc2hvdWxkSGlnaGxpZ2h0ID8gIiIgOiAibm9uZSI7CisgICAgICAgIGlm
ICh0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVH
dXR0ZXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgfTsKKworICAgIHRoaXMuZ2V0SGlnaGxpZ2h0R3V0
dGVyTGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0R3V0
dGVyTGluZTsKKyAgICB9OworCisgICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLnRv
cCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3AgLSB0aGlzLmxheWVyQ29uZmlnLm9m
ZnNldCArICJweCI7CisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUuaGVp
Z2h0ID0gdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIAor
ICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgh
dGhpcy4kc2hvd1ByaW50TWFyZ2luICYmICF0aGlzLiRwcmludE1hcmdpbkVsKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy4kcHJpbnRNYXJnaW5FbCkgeworICAgICAg
ICAgICAgdmFyIGNvbnRhaW5lckVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAg
ICAgICAgY29udGFpbmVyRWwuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfcHJpbnQtbWFyZ2lu
LWxheWVyIjsKKyAgICAgICAgICAgIHRoaXMuJHByaW50TWFyZ2luRWwgPSBkb20uY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZSA9
ICJhY2VfcHJpbnQtbWFyZ2luIjsKKyAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxk
KHRoaXMuJHByaW50TWFyZ2luRWwpOworICAgICAgICAgICAgdGhpcy5jb250ZW50Lmluc2VydEJl
Zm9yZShjb250YWluZXJFbCwgdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy4kcHJpbnRNYXJnaW5FbC5zdHlsZTsKKyAgICAgICAg
c3R5bGUubGVmdCA9ICgodGhpcy5jaGFyYWN0ZXJXaWR0aCAqIHRoaXMuJHByaW50TWFyZ2luQ29s
dW1uKSArIHRoaXMuJHBhZGRpbmcpICsgInB4IjsKKyAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9
IHRoaXMuJHNob3dQcmludE1hcmdpbiA/ICJ2aXNpYmxlIiA6ICJoaWRkZW4iOworICAgIH07Cisg
ICAgdGhpcy5nZXRDb250YWluZXJFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmNvbnRhaW5lcjsKKyAgICB9OworICAgIHRoaXMuZ2V0TW91c2VFdmVudFRhcmdldCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50OworICAgIH07CisgICAg
dGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5jb250YWluZXI7CisgICAgfTsKKyAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZp
ZzsKKyAgICAgICAgdmFyIHBvc1RvcCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3A7
CisgICAgICAgIHZhciBwb3NMZWZ0ID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLmxlZnQ7
CisgICAgICAgIHBvc1RvcCAtPSBjb25maWcub2Zmc2V0OworCisgICAgICAgIGlmIChwb3NUb3Ag
PCAwIHx8IHBvc1RvcCA+IGNvbmZpZy5oZWlnaHQgLSB0aGlzLmxpbmVIZWlnaHQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHcgPSB0aGlzLmNoYXJhY3RlcldpZHRoOworICAg
ICAgICBpZiAodGhpcy4kY29tcG9zaXRpb24pIHsKKyAgICAgICAgICAgIHZhciB2YWwgPSB0aGlz
LnRleHRhcmVhLnZhbHVlLnJlcGxhY2UoL15ceDAxKy8sICIiKTsKKyAgICAgICAgICAgIHcgKj0g
dGhpcy5zZXNzaW9uLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh2YWwpWzBdOworICAgICAgICB9Cisg
ICAgICAgIHBvc0xlZnQgLT0gdGhpcy5zY3JvbGxMZWZ0OworICAgICAgICBpZiAocG9zTGVmdCA+
IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHcpCisgICAgICAgICAgICBwb3NMZWZ0ID0gdGhp
cy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gdzsKKworICAgICAgICBwb3NMZWZ0IC09IHRoaXMuc2Ny
b2xsQmFyLndpZHRoOworCisgICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gdGhp
cy5saW5lSGVpZ2h0ICsgInB4IjsKKyAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS53aWR0aCA9
IHcgKyAicHgiOworICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLnJpZ2h0ID0gdGhpcy4kc2l6
ZS5zY3JvbGxlcldpZHRoIC0gcG9zTGVmdCAtIHcgKyAicHgiOworICAgICAgICB0aGlzLnRleHRh
cmVhLnN0eWxlLmJvdHRvbSA9IHRoaXMuJHNpemUuaGVpZ2h0IC0gcG9zVG9wIC0gdGhpcy5saW5l
SGVpZ2h0ICsgInB4IjsKKyAgICB9OworICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93OworICAg
IH07CisgICAgdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyArICh0aGlzLmxheWVyQ29uZmln
Lm9mZnNldCA9PT0gMCA/IDAgOiAxKTsKKyAgICB9OworICAgIHRoaXMuZ2V0TGFzdEZ1bGx5Vmlz
aWJsZVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZmxpbnQgPSBNYXRoLmZsb29yKCh0
aGlzLmxheWVyQ29uZmlnLmhlaWdodCArIHRoaXMubGF5ZXJDb25maWcub2Zmc2V0KSAvIHRoaXMu
bGF5ZXJDb25maWcubGluZUhlaWdodCk7CisgICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmln
LmZpcnN0Um93IC0gMSArIGZsaW50OworICAgIH07CisgICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJv
dyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5sYXN0Um93
OworICAgIH07CisKKyAgICB0aGlzLiRwYWRkaW5nID0gbnVsbDsKKyAgICB0aGlzLnNldFBhZGRp
bmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5n
OworICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAg
dGhpcy4kY3Vyc29yTGF5ZXIuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAgdGhpcy4kbWFy
a2VyRnJvbnQuc2V0UGFkZGluZyhwYWRkaW5nKTsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5z
ZXRQYWRkaW5nKHBhZGRpbmcpOworICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0ZVTEwpOworICAgICAgICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOworICAgIH07Cisg
ICAgdGhpcy5nZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlOworICAgIH07CisgICAgdGhp
cy5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHsK
KyAgICAgICAgaWYgKHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSAhPSBhbHdheXNWaXNp
YmxlKSB7CisgICAgICAgICAgICB0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgPSBhbHdh
eXNWaXNpYmxlOworICAgICAgICAgICAgaWYgKCF0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2li
bGUgfHwgIXRoaXMuJGhvcml6U2Nyb2xsKQorICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlz
LiR1cGRhdGVTY3JvbGxCYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zY3JvbGxCYXIu
c2V0SW5uZXJIZWlnaHQodGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQpOworICAgICAgICB0aGlz
LnNjcm9sbEJhci5zZXRTY3JvbGxUb3AodGhpcy5zY3JvbGxUb3ApOworICAgIH07CisKKyAgICB0
aGlzLiRyZW5kZXJDaGFuZ2VzID0gZnVuY3Rpb24oY2hhbmdlcywgZm9yY2UpIHsKKyAgICAgICAg
aWYgKCFmb3JjZSAmJiAoIWNoYW5nZXMgfHwgIXRoaXMuc2Vzc2lvbiB8fCAhdGhpcy5jb250YWlu
ZXIub2Zmc2V0V2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoY2hhbmdl
cyAmIHRoaXMuQ0hBTkdFX0ZVTEwgfHwKKyAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5H
RV9TSVpFIHx8CisgICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fAorICAg
ICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8CisgICAgICAgICAgICBjaGFu
Z2VzICYgdGhpcy5DSEFOR0VfU0NST0xMCisgICAgICAgICkKKyAgICAgICAgICAgIHRoaXMuJGNv
bXB1dGVMYXllckNvbmZpZygpOworICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0hf
U0NST0xMKSB7CisgICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQgPSB0aGlzLnNj
cm9sbExlZnQ7CisgICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsZXIuc2Ny
b2xsTGVmdDsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAg
ICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTsKKworICAgICAg
ICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPT0gMCA/ICJh
Y2Vfc2Nyb2xsZXIiIDogImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnQiOworICAgICAgICB9
CisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfRlVMTCkgeworICAgICAgICAgICAg
dGhpcy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKKyAgICAgICAgICAgIHRoaXMu
JHVwZGF0ZVNjcm9sbEJhcigpOworICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0
aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAg
ICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwor
ICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Cisg
ICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Cisg
ICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Cisg
ICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgICAgICAgICAgdGhp
cy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZXMg
JiB0aGlzLkNIQU5HRV9TQ1JPTEwpIHsKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVNjcm9sbEJh
cigpOworICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5n
ZXMgJiB0aGlzLkNIQU5HRV9MSU5FUykKKyAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIu
dXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHRoaXMuJHRleHRMYXllci5zY3JvbGxMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTsKKworICAg
ICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0
ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgICAgICB0aGlzLiRtYXJr
ZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1hcmtl
ckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJGN1cnNv
ckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgICAgIHRoaXMuJG1vdmVU
ZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5l
ICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCkg
eworICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsK
KyAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICAgICAgdGhpcy4k
Z3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9MSU5FUykgeworICAgICAgICAgICAgaWYg
KHRoaXMuJHVwZGF0ZUxpbmVzKCkgfHwgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpICYm
IHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRh
dGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2hhbmdl
cyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikgewor
ICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRn
dXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0NVUlNPUikgeworICAgICAgICAgICAgdGhpcy4k
Y3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOworICAgICAgICAgICAgdGhpcy4k
bW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKKyAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRl
ckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0Vf
TUFSS0VSX0ZST05UKSkgeworICAgICAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRo
aXMubGF5ZXJDb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhp
cy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spKSB7CisgICAgICAgICAg
ICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0laRSkKKyAgICAgICAgICAgIHRo
aXMuJHVwZGF0ZVNjcm9sbEJhcigpOworICAgIH07CisKKyAgICB0aGlzLiRjb21wdXRlTGF5ZXJD
b25maWcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247
CisKKyAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuc2Nyb2xsVG9wICUgdGhpcy5saW5lSGVpZ2h0
OworICAgICAgICB2YXIgbWluSGVpZ2h0ID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCArIHRo
aXMubGluZUhlaWdodDsKKworICAgICAgICB2YXIgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25n
ZXN0TGluZSgpOworCisgICAgICAgIHZhciBob3JpelNjcm9sbCA9IHRoaXMuJGhvcml6U2Nyb2xs
QWx3YXlzVmlzaWJsZSB8fCB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSBsb25nZXN0TGluZSA8
IDA7CisgICAgICAgIHZhciBob3JpelNjcm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAh
PT0gaG9yaXpTY3JvbGw7CisgICAgICAgIHRoaXMuJGhvcml6U2Nyb2xsID0gaG9yaXpTY3JvbGw7
CisgICAgICAgIGlmIChob3JpelNjcm9sbENoYW5nZWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2Ny
b2xsZXIuc3R5bGUub3ZlcmZsb3dYID0gaG9yaXpTY3JvbGwgPyAic2Nyb2xsIiA6ICJoaWRkZW4i
OworICAgICAgICAgICAgaWYgKCFob3JpelNjcm9sbCkKKyAgICAgICAgICAgICAgICB0aGlzLnNl
c3Npb24uc2V0U2Nyb2xsTGVmdCgwKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbWF4SGVpZ2h0
ID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpICogdGhpcy5saW5lSGVpZ2h0OworICAg
ICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMu
c2Nyb2xsVG9wLCBtYXhIZWlnaHQgLSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSkpOworCisg
ICAgICAgIHZhciBsaW5lQ291bnQgPSBNYXRoLmNlaWwobWluSGVpZ2h0IC8gdGhpcy5saW5lSGVp
Z2h0KSAtIDE7CisgICAgICAgIHZhciBmaXJzdFJvdyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQo
KHRoaXMuc2Nyb2xsVG9wIC0gb2Zmc2V0KSAvIHRoaXMubGluZUhlaWdodCkpOworICAgICAgICB2
YXIgbGFzdFJvdyA9IGZpcnN0Um93ICsgbGluZUNvdW50OworICAgICAgICB2YXIgZmlyc3RSb3dT
Y3JlZW4sIGZpcnN0Um93SGVpZ2h0OworICAgICAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMubGlu
ZUhlaWdodDsKKyAgICAgICAgZmlyc3RSb3cgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3co
Zmlyc3RSb3csIDApOworICAgICAgICB2YXIgZm9sZExpbmUgPSBzZXNzaW9uLmdldEZvbGRMaW5l
KGZpcnN0Um93KTsKKyAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICBmaXJzdFJv
dyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Um93U2Ny
ZWVuID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KGZpcnN0Um93LCAwKTsKKyAgICAgICAg
Zmlyc3RSb3dIZWlnaHQgPSBzZXNzaW9uLmdldFJvd0xlbmd0aChmaXJzdFJvdykgKiBsaW5lSGVp
Z2h0OworCisgICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihzZXNzaW9uLnNjcmVlblRvRG9jdW1l
bnRSb3cobGFzdFJvdywgMCksIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgbWlu
SGVpZ2h0ID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCArIHNlc3Npb24uZ2V0Um93TGVuZ3Ro
KGxhc3RSb3cpICogbGluZUhlaWdodCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdFJvd0hlaWdodDsKKworICAgICAgICBvZmZzZXQgPSB0aGlz
LnNjcm9sbFRvcCAtIGZpcnN0Um93U2NyZWVuICogbGluZUhlaWdodDsKKworICAgICAgICB0aGlz
LmxheWVyQ29uZmlnID0geworICAgICAgICAgICAgd2lkdGggOiBsb25nZXN0TGluZSwKKyAgICAg
ICAgICAgIHBhZGRpbmcgOiB0aGlzLiRwYWRkaW5nLAorICAgICAgICAgICAgZmlyc3RSb3cgOiBm
aXJzdFJvdywKKyAgICAgICAgICAgIGZpcnN0Um93U2NyZWVuOiBmaXJzdFJvd1NjcmVlbiwKKyAg
ICAgICAgICAgIGxhc3RSb3cgOiBsYXN0Um93LAorICAgICAgICAgICAgbGluZUhlaWdodCA6IGxp
bmVIZWlnaHQsCisgICAgICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IHRoaXMuY2hhcmFjdGVyV2lk
dGgsCisgICAgICAgICAgICBtaW5IZWlnaHQgOiBtaW5IZWlnaHQsCisgICAgICAgICAgICBtYXhI
ZWlnaHQgOiBtYXhIZWlnaHQsCisgICAgICAgICAgICBvZmZzZXQgOiBvZmZzZXQsCisgICAgICAg
ICAgICBoZWlnaHQgOiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0CisgICAgICAgIH07CisKKyAg
ICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSAoLW9mZnNl
dCkgKyAicHgiOworICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wID0gKC1vZmZz
ZXQpICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gbG9uZ2VzdExp
bmUgKyAyICogdGhpcy4kcGFkZGluZyArICJweCI7CisgICAgICAgIHRoaXMuY29udGVudC5zdHls
ZS5oZWlnaHQgPSBtaW5IZWlnaHQgKyAicHgiOworICAgICAgICBpZiAoaG9yaXpTY3JvbGxDaGFu
Z2VkKQorICAgICAgICAgICAgdGhpcy5vblJlc2l6ZSh0cnVlKTsKKyAgICB9OworCisgICAgdGhp
cy4kdXBkYXRlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhp
cy4kY2hhbmdlZExpbmVzLmZpcnN0Um93OworICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNo
YW5nZWRMaW5lcy5sYXN0Um93OworICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsOwor
CisgICAgICAgIHZhciBsYXllckNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7CisKKyAgICAgICAg
aWYgKGZpcnN0Um93ID4gbGF5ZXJDb25maWcubGFzdFJvdyArIDEpIHsgcmV0dXJuOyB9CisgICAg
ICAgIGlmIChsYXN0Um93IDwgbGF5ZXJDb25maWcuZmlyc3RSb3cpIHsgcmV0dXJuOyB9CisgICAg
ICAgIGlmIChsYXN0Um93ID09PSBJbmZpbml0eSkgeworICAgICAgICAgICAgaWYgKHRoaXMuc2hv
d0d1dHRlcikKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUobGF5ZXJD
b25maWcpOworICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShsYXllckNvbmZpZyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kdGV4dExheWVy
LnVwZGF0ZUxpbmVzKGxheWVyQ29uZmlnLCBmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLiRnZXRMb25nZXN0TGluZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY2hhckNvdW50ID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbldpZHRo
KCk7CisgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2hvd0ludmlzaWJsZXMpCisgICAgICAg
ICAgICBjaGFyQ291bnQgKz0gMTsKKworICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy4kc2l6
ZS5zY3JvbGxlcldpZHRoIC0gMiAqIHRoaXMuJHBhZGRpbmcsIE1hdGgucm91bmQoY2hhckNvdW50
ICogdGhpcy5jaGFyYWN0ZXJXaWR0aCkpOworICAgIH07CisgICAgdGhpcy51cGRhdGVGcm9udE1h
cmtlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0TWFya2Vy
cyh0aGlzLnNlc3Npb24uZ2V0TWFya2Vycyh0cnVlKSk7CisgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKTsKKyAgICB9OworICAgIHRoaXMudXBkYXRl
QmFja01hcmtlcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRN
YXJrZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKCkpOworICAgICAgICB0aGlzLiRsb29wLnNj
aGVkdWxlKHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKTsKKyAgICB9OworICAgIHRoaXMuYWRkR3V0
dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXsKKyAgICAgICAgdGhpcy4k
Z3V0dGVyTGF5ZXIuYWRkR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7CisgICAgfTsK
KyAgICB0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFt
ZSl7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93
LCBjbGFzc05hbWUpOworICAgIH07CisgICAgdGhpcy51cGRhdGVCcmVha3BvaW50cyA9IGZ1bmN0
aW9uKHJvd3MpIHsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRU
RVIpOworICAgIH07CisgICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRp
b25zKSB7CisgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnNldEFubm90YXRpb25zKGFubm90YXRp
b25zKTsKKyAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpOwor
ICAgIH07CisgICAgdGhpcy51cGRhdGVDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9DVVJTT1IpOworICAgIH07CisgICAgdGhpcy5o
aWRlQ3Vyc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmhpZGVD
dXJzb3IoKTsKKyAgICB9OworICAgIHRoaXMuc2hvd0N1cnNvciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLiRjdXJzb3JMYXllci5zaG93Q3Vyc29yKCk7CisgICAgfTsKKworICAgIHRoaXMu
c2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcgPSBmdW5jdGlvbihhbmNob3IsIGxlYWQsIG9mZnNldCkg
eworICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGFuY2hvciwgb2Zmc2V0KTsKKyAg
ICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyhsZWFkLCBvZmZzZXQpOworICAgIH07Cisg
ICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyA9IGZ1bmN0aW9uKGN1cnNvciwgb2Zmc2V0KSB7
CisgICAgICAgIGlmICh0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ID09PSAwKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhl
bFBvc2l0aW9uKGN1cnNvcik7CisKKyAgICAgICAgdmFyIGxlZnQgPSBwb3MubGVmdDsKKyAgICAg
ICAgdmFyIHRvcCA9IHBvcy50b3A7CisKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wID4gdG9w
KSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0KQorICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZz
ZXQgKiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0OworICAgICAgICAgICAgdGhpcy5zZXNzaW9u
LnNldFNjcm9sbFRvcCh0b3ApOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsVG9wICsg
dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCA8IHRvcCArIHRoaXMubGluZUhlaWdodCkgeworICAg
ICAgICAgICAgaWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICB0b3AgKz0gb2Zmc2V0ICogdGhp
cy4kc2l6ZS5zY3JvbGxlckhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3Jv
bGxUb3AodG9wICsgdGhpcy5saW5lSGVpZ2h0IC0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsK
KworICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+IGxlZnQpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0
IDwgdGhpcy4kcGFkZGluZyArIDIgKiB0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoKQor
ICAgICAgICAgICAgICAgIGxlZnQgPSAwOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbExlZnQobGVmdCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCArIHRoaXMuJHNp
emUuc2Nyb2xsZXJXaWR0aCA8IGxlZnQgKyB0aGlzLmNoYXJhY3RlcldpZHRoKSB7CisgICAgICAg
ICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLnJvdW5kKGxlZnQgKyB0aGlzLmNo
YXJhY3RlcldpZHRoIC0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoKSk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuZ2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9s
bExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3Jv
bGxMZWZ0KCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9sbFRvcFJvdyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5zY3JvbGxUb3AgLyB0aGlzLmxpbmVIZWlnaHQ7CisgICAg
fTsKKyAgICB0aGlzLmdldFNjcm9sbEJvdHRvbVJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGhpcy5zY3JvbGxUb3AgKyB0aGlzLiRzaXpl
LnNjcm9sbGVySGVpZ2h0KSAvIHRoaXMubGluZUhlaWdodCkgLSAxKTsKKyAgICB9OworICAgIHRo
aXMuc2Nyb2xsVG9Sb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uLnNl
dFNjcm9sbFRvcChyb3cgKiB0aGlzLmxpbmVIZWlnaHQpOworICAgIH07CisKKyAgICB0aGlzLmFs
aWduQ3Vyc29yID0gZnVuY3Rpb24oY3Vyc29yLCBhbGlnbm1lbnQpIHsKKyAgICAgICAgaWYgKHR5
cGVvZiBjdXJzb3IgPT0gIm51bWJlciIpCisgICAgICAgICAgICBjdXJzb3IgPSB7cm93OiBjdXJz
b3IsIGNvbHVtbjogMH07CisKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGN1cnNvckxheWVyLmdl
dFBpeGVsUG9zaXRpb24oY3Vyc29yKTsKKyAgICAgICAgdmFyIGggPSB0aGlzLiRzaXplLnNjcm9s
bGVySGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0OworICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zLnRv
cCAtIGggKiAoYWxpZ25tZW50IHx8IDApOworCisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3Jv
bGxUb3Aob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICB9OworCisgICAgdGhp
cy5TVEVQUyA9IDg7CisgICAgdGhpcy4kY2FsY1N0ZXBzID0gZnVuY3Rpb24oZnJvbVZhbHVlLCB0
b1ZhbHVlKXsKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgbCA9IHRoaXMuU1RFUFM7
CisgICAgICAgIHZhciBzdGVwcyA9IFtdOworCisgICAgICAgIHZhciBmdW5jICA9IGZ1bmN0aW9u
KHQsIHhfbWluLCBkeCkgeworICAgICAgICAgICAgcmV0dXJuIGR4ICogKE1hdGgucG93KHQgLSAx
LCAzKSArIDEpICsgeF9taW47CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8
IGw7ICsraSkKKyAgICAgICAgICAgIHN0ZXBzLnB1c2goZnVuYyhpIC8gdGhpcy5TVEVQUywgZnJv
bVZhbHVlLCB0b1ZhbHVlIC0gZnJvbVZhbHVlKSk7CisKKyAgICAgICAgcmV0dXJuIHN0ZXBzOwor
ICAgIH07CisgICAgdGhpcy5zY3JvbGxUb0xpbmUgPSBmdW5jdGlvbihsaW5lLCBjZW50ZXIsIGFu
aW1hdGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5n
ZXRQaXhlbFBvc2l0aW9uKHtyb3c6IGxpbmUsIGNvbHVtbjogMH0pOworICAgICAgICB2YXIgb2Zm
c2V0ID0gcG9zLnRvcDsKKyAgICAgICAgaWYgKGNlbnRlcikKKyAgICAgICAgICAgIG9mZnNldCAt
PSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IC8gMjsKKworICAgICAgICB2YXIgaW5pdGlhbFNj
cm9sbCA9IHRoaXMuc2Nyb2xsVG9wOworICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9w
KG9mZnNldCk7CisgICAgICAgIGlmIChhbmltYXRlICE9PSBmYWxzZSkKKyAgICAgICAgICAgIHRo
aXMuYW5pbWF0ZVNjcm9sbGluZyhpbml0aWFsU2Nyb2xsLCBjYWxsYmFjayk7CisgICAgfTsKKwor
ICAgIHRoaXMuYW5pbWF0ZVNjcm9sbGluZyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgY2FsbGJhY2sp
IHsKKyAgICAgICAgdmFyIHRvVmFsdWUgPSB0aGlzLnNjcm9sbFRvcDsKKyAgICAgICAgaWYgKHRo
aXMuJGFuaW1hdGVkU2Nyb2xsICYmIE1hdGguYWJzKGZyb21WYWx1ZSAtIHRvVmFsdWUpIDwgMTAw
MDAwKSB7CisgICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgICAgICAgICAgdmFyIHN0
ZXBzID0gX3NlbGYuJGNhbGNTdGVwcyhmcm9tVmFsdWUsIHRvVmFsdWUpOworICAgICAgICAgICAg
dGhpcy4kaW5TY3JvbGxBbmltYXRpb24gPSB0cnVlOworCisgICAgICAgICAgICBjbGVhckludGVy
dmFsKHRoaXMuJHRpbWVyKTsKKworICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxU
b3Aoc3RlcHMuc2hpZnQoKSk7CisgICAgICAgICAgICB0aGlzLiR0aW1lciA9IHNldEludGVydmFs
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmIChzdGVwcy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7
CisgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uJHNjcm9sbFRvcCA9IHRvVmFsdWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b1ZhbHVlICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gLTE7CisgICAgICAgICAgICAg
ICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvVmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICB0b1ZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBfc2VsZi4kdGltZXIgPSBjbGVhckludGVydmFsKF9zZWxmLiR0aW1lcik7
CisgICAgICAgICAgICAgICAgICAgIF9zZWxmLiRpblNjcm9sbEFuaW1hdGlvbiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5z
Y3JvbGxUb1kgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xs
VG9wICE9PSBzY3JvbGxUb3ApIHsKKyAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhp
cy5DSEFOR0VfU0NST0xMKTsKKyAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gc2Nyb2xsVG9w
OworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLnNjcm9sbFRvWCA9IGZ1bmN0aW9uKHNjcm9s
bExlZnQpIHsKKyAgICAgICAgaWYgKHNjcm9sbExlZnQgPCAwKQorICAgICAgICAgICAgc2Nyb2xs
TGVmdCA9IDA7CisKKyAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkK
KyAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgICAgIHRoaXMu
JGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfSF9TQ1JPTEwpOworICAgIH07CisgICAgdGhpcy5z
Y3JvbGxCeSA9IGZ1bmN0aW9uKGRlbHRhWCwgZGVsdGFZKSB7CisgICAgICAgIGRlbHRhWSAmJiB0
aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIGRl
bHRhWSk7CisgICAgICAgIGRlbHRhWCAmJiB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh0aGlz
LnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpICsgZGVsdGFYKTsKKyAgICB9OworICAgIHRoaXMuaXNT
Y3JvbGxhYmxlQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkgeworICAgICAgICBpZiAoZGVs
dGFZIDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgPiAwKQorICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNj
cm9sbFRvcCgpICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCA8IHRoaXMubGF5ZXJDb25maWcu
bWF4SGVpZ2h0KQorICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5w
aXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBj
YW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAg
ICAgIHZhciBvZmZzZXQgPSAoeCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0g
dGhpcy4kcGFkZGluZykgLyB0aGlzLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgcm93ID0g
TWF0aC5mbG9vcigoeSArIHRoaXMuc2Nyb2xsVG9wIC0gY2FudmFzUG9zLnRvcCkgLyB0aGlzLmxp
bmVIZWlnaHQpOworICAgICAgICB2YXIgY29sID0gTWF0aC5yb3VuZChvZmZzZXQpOworCisgICAg
ICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sLCBzaWRlOiBvZmZzZXQgLSBjb2wgPiAw
ID8gMSA6IC0xfTsKKyAgICB9OworCisgICAgdGhpcy5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyA9
IGZ1bmN0aW9uKHgsIHkpIHsKKyAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAgICAgdmFyIGNvbCA9IE1hdGgucm91bmQo
CisgICAgICAgICAgICAoeCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhp
cy4kcGFkZGluZykgLyB0aGlzLmNoYXJhY3RlcldpZHRoCisgICAgICAgICk7CisgICAgICAgIHZh
ciByb3cgPSBNYXRoLmZsb29yKAorICAgICAgICAgICAgKHkgKyB0aGlzLnNjcm9sbFRvcCAtIGNh
bnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0CisgICAgICAgICk7CisKKyAgICAgICAgcmV0
dXJuIHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBNYXRoLm1heChj
b2wsIDApKTsKKyAgICB9OworICAgIHRoaXMudGV4dFRvU2NyZWVuQ29vcmRpbmF0ZXMgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5zY3JvbGxl
ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lv
bi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBjb2x1bW4pOworCisgICAgICAgIHZhciB4
ID0gdGhpcy4kcGFkZGluZyArIE1hdGgucm91bmQocG9zLmNvbHVtbiAqIHRoaXMuY2hhcmFjdGVy
V2lkdGgpOworICAgICAgICB2YXIgeSA9IHBvcy5yb3cgKiB0aGlzLmxpbmVIZWlnaHQ7CisKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHBhZ2VYOiBjYW52YXNQb3MubGVmdCArIHggLSB0
aGlzLnNjcm9sbExlZnQsCisgICAgICAgICAgICBwYWdlWTogY2FudmFzUG9zLnRvcCArIHkgLSB0
aGlzLnNjcm9sbFRvcAorICAgICAgICB9OworICAgIH07CisgICAgdGhpcy52aXN1YWxpemVGb2N1
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIs
ICJhY2VfZm9jdXMiKTsKKyAgICB9OworICAgIHRoaXMudmlzdWFsaXplQmx1ciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsICJhY2VfZm9j
dXMiKTsKKyAgICB9OworICAgIHRoaXMuc2hvd0NvbXBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRp
b24pIHsKKyAgICAgICAgaWYgKCF0aGlzLiRjb21wb3NpdGlvbikKKyAgICAgICAgICAgIHRoaXMu
JGNvbXBvc2l0aW9uID0geworICAgICAgICAgICAgICAgIGtlZXBUZXh0QXJlYUF0Q3Vyc29yOiB0
aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciwKKyAgICAgICAgICAgICAgICBjc3NUZXh0OiB0aGlz
LnRleHRhcmVhLnN0eWxlLmNzc1RleHQKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgdGhpcy4k
a2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOworICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhp
cy50ZXh0YXJlYSwgImFjZV9jb21wb3NpdGlvbiIpOworICAgICAgICB0aGlzLnRleHRhcmVhLnN0
eWxlLmNzc1RleHQgPSAiIjsKKyAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsK
KyAgICB9OworICAgIHRoaXMuc2V0Q29tcG9zaXRpb25UZXh0ID0gZnVuY3Rpb24odGV4dCkgewor
ICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOworICAgIH07CisgICAgdGhpcy5o
aWRlQ29tcG9zaXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRjb21wb3Np
dGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3Mo
dGhpcy50ZXh0YXJlYSwgImFjZV9jb21wb3NpdGlvbiIpOworICAgICAgICB0aGlzLiRrZWVwVGV4
dEFyZWFBdEN1cnNvciA9IHRoaXMuJGNvbXBvc2l0aW9uLmtlZXBUZXh0QXJlYUF0Q3Vyc29yOwor
ICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5j
c3NUZXh0OworICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7CisgICAgfTsKKworICAg
IHRoaXMuX2xvYWRUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7CisgICAgICAgIAor
ICAgIH07CisgICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7CisgICAgICAgIHZh
ciBfc2VsZiA9IHRoaXM7CisgICAgICAgIHRoaXMuJHRoZW1lVmFsdWUgPSB0aGVtZTsKKyAgICAg
ICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghdGhlbWUgfHwgdHlwZW9mIHRoZW1lID09ICJzdHJpbmciKSB7
CisgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoZW1lIHx8ICJhY2UvdGhlbWUvdGV4dG1h
dGUiOworICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWyJ0aGVtZSIsIG1vZHVsZU5hbWVd
LCBhZnRlckxvYWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWZ0ZXJMb2FkKHRo
ZW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZCh0aGVtZSkgewor
ICAgICAgICAgICAgZG9tLmltcG9ydENzc1N0cmluZygKKyAgICAgICAgICAgICAgICB0aGVtZS5j
c3NUZXh0LAorICAgICAgICAgICAgICAgIHRoZW1lLmNzc0NsYXNzLAorICAgICAgICAgICAgICAg
IF9zZWxmLmNvbnRhaW5lci5vd25lckRvY3VtZW50CisgICAgICAgICAgICApOworCisgICAgICAg
ICAgICBpZiAoX3NlbGYudGhlbWUpCisgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNz
KF9zZWxmLmNvbnRhaW5lciwgX3NlbGYudGhlbWUuY3NzQ2xhc3MpOworICAgICAgICAgICAgX3Nl
bGYuJHRoZW1lID0gdGhlbWUuY3NzQ2xhc3M7CisKKyAgICAgICAgICAgIF9zZWxmLnRoZW1lID0g
dGhlbWU7CisgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCB0aGVt
ZS5jc3NDbGFzcyk7CisgICAgICAgICAgICBkb20uc2V0Q3NzQ2xhc3MoX3NlbGYuY29udGFpbmVy
LCAiYWNlX2RhcmsiLCB0aGVtZS5pc0RhcmspOworCisgICAgICAgICAgICB2YXIgcGFkZGluZyA9
IHRoZW1lLnBhZGRpbmcgfHwgNDsKKyAgICAgICAgICAgIGlmIChfc2VsZi4kcGFkZGluZyAmJiBw
YWRkaW5nICE9IF9zZWxmLiRwYWRkaW5nKQorICAgICAgICAgICAgICAgIF9zZWxmLnNldFBhZGRp
bmcocGFkZGluZyk7CisgICAgICAgICAgICBpZiAoX3NlbGYuJHNpemUpIHsKKyAgICAgICAgICAg
ICAgICBfc2VsZi4kc2l6ZS53aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgX3NlbGYub25SZXNp
emUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgX3NlbGYuX2Rp
c3BhdGNoRXZlbnQoJ3RoZW1lTG9hZGVkJyx7dGhlbWU6dGhlbWV9KTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy4kdGhlbWVWYWx1ZTsKKyAgICB9OworICAgIHRoaXMuc2V0U3R5bGUgPSBmdW5jdGlvbiBzZXRT
dHlsZShzdHlsZSwgaW5jbHVkZSkgeworICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5jb250
YWluZXIsIHN0eWxlLCBpbmNsdWRlICE9IGZhbHNlKTsKKyAgICB9OworICAgIHRoaXMudW5zZXRT
dHlsZSA9IGZ1bmN0aW9uIHVuc2V0U3R5bGUoc3R5bGUpIHsKKyAgICAgICAgZG9tLnJlbW92ZUNz
c0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSk7CisgICAgfTsKKyAgICB0aGlzLmRlc3Ryb3kg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kdGV4dExheWVyLmRlc3Ryb3koKTsKKyAgICAg
ICAgdGhpcy4kY3Vyc29yTGF5ZXIuZGVzdHJveSgpOworICAgIH07CisKK30pLmNhbGwoVmlydHVh
bFJlbmRlcmVyLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuVmlydHVhbFJlbmRlcmVyID0gVmlydHVh
bFJlbmRlcmVyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9sYXllci9ndXR0ZXInLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZG9tJywgJ2FjZS9saWIvb29wJywg
J2FjZS9saWIvbGFuZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20i
KTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUo
Ii4uL2xpYi9sYW5nIik7Cit2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50
X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisKK3ZhciBHdXR0ZXIgPSBmdW5jdGlvbihwYXJlbnRF
bCkgeworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfZ3V0dGVyLWxheWVyIjsKKyAg
ICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgIHRoaXMuc2V0U2hvd0Zv
bGRXaWRnZXRzKHRoaXMuJHNob3dGb2xkV2lkZ2V0cyk7CisgICAgCisgICAgdGhpcy5ndXR0ZXJX
aWR0aCA9IDA7CisKKyAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdOworICAgIHRoaXMuJHVwZGF0
ZUFubm90YXRpb25zID0gdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMuYmluZCh0aGlzKTsKK307CisK
KyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsK
KworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgaWYg
KHRoaXMuc2Vzc2lvbikKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3Rl
bmVyKCJjaGFuZ2UiLCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7CisgICAgICAgIHRoaXMuc2Vz
c2lvbiA9IHNlc3Npb247CisgICAgICAgIHNlc3Npb24ub24oImNoYW5nZSIsIHRoaXMuJHVwZGF0
ZUFubm90YXRpb25zKTsKKyAgICB9OworCisgICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0g
ZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpeworICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpCisg
ICAgICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVzZSBz
ZXNzaW9uLmFkZEd1dHRlckRlY29yYXRpb24iKTsKKyAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEd1
dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOworICAgIH07CisKKyAgICB0aGlzLnJlbW92
ZUd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSl7CisgICAgICAgIGlm
ICh3aW5kb3cuY29uc29sZSkKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiAmJiBjb25zb2xlLndh
cm4oImRlcHJlY2F0ZWQgdXNlIHNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiIpOworICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7
CisgICAgfTsKKworICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9u
cykgeworICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdCisgICAgICAgIHZhciByb3dJbmZv
LCByb3c7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07CisgICAg
ICAgICAgICB2YXIgcm93ID0gYW5ub3RhdGlvbi5yb3c7CisgICAgICAgICAgICB2YXIgcm93SW5m
byA9IHRoaXMuJGFubm90YXRpb25zW3Jvd107CisgICAgICAgICAgICBpZiAoIXJvd0luZm8pCisg
ICAgICAgICAgICAgICAgcm93SW5mbyA9IHRoaXMuJGFubm90YXRpb25zW3Jvd10gPSB7dGV4dDog
W119OworICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBhbm5vVGV4dCA9IGFubm90YXRpb24u
dGV4dDsKKyAgICAgICAgICAgIGFubm9UZXh0ID0gYW5ub1RleHQgPyBsYW5nLmVzY2FwZUhUTUwo
YW5ub1RleHQpIDogYW5ub3RhdGlvbi5odG1sIHx8ICIiOworCisgICAgICAgICAgICBpZiAocm93
SW5mby50ZXh0LmluZGV4T2YoYW5ub1RleHQpID09PSAtMSkKKyAgICAgICAgICAgICAgICByb3dJ
bmZvLnRleHQucHVzaChhbm5vVGV4dCk7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0gYW5ub3Rh
dGlvbi50eXBlOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gImVycm9yIikKKyAgICAgICAgICAg
ICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX2Vycm9yIjsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gIndhcm5pbmciICYmIHJvd0luZm8uY2xhc3NOYW1lICE9ICIgYWNlX2Vycm9y
IikKKyAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX3dhcm5pbmciOwor
ICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW5mbyIgJiYgKCFyb3dJbmZvLmNsYXNzTmFt
ZSkpCisgICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFjZV9pbmZvIjsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IGZ1bmN0aW9u
IChlKSB7CisgICAgICAgIGlmICghdGhpcy4kYW5ub3RhdGlvbnMubGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7CisgICAgICAgIHZhciByYW5n
ZSA9IGRlbHRhLnJhbmdlOworICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7
CisgICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93IC0gZmlyc3RSb3c7CisgICAgICAgIGlm
IChsZW4gPT09IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92
ZVRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7CisgICAgICAgICAgICB0
aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTsKKyAgICAg
ICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7CisgICAgICAgICAgICB0aGlzLiRhbm5v
dGF0aW9ucy5zcGxpY2UuYXBwbHkodGhpcy4kYW5ub3RhdGlvbnMsIGFyZ3MpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAg
IHZhciBlbXB0eUFubm8gPSB7Y2xhc3NOYW1lOiAiIn07CisgICAgICAgIHZhciBodG1sID0gW107
CisgICAgICAgIHZhciBpID0gY29uZmlnLmZpcnN0Um93OworICAgICAgICB2YXIgbGFzdFJvdyA9
IGNvbmZpZy5sYXN0Um93OworICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0
Rm9sZExpbmUoaSk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5y
b3cgOiBJbmZpbml0eTsKKyAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy4kc2hvd0ZvbGRX
aWRnZXRzICYmIHRoaXMuc2Vzc2lvbi5mb2xkV2lkZ2V0czsKKyAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5zZXNzaW9uLiRicmVha3BvaW50czsKKyAgICAgICAgdmFyIGRlY29yYXRpb25z
ID0gdGhpcy5zZXNzaW9uLiRkZWNvcmF0aW9uczsKKyAgICAgICAgdmFyIGxhc3RMaW5lTnVtYmVy
ID0gMDsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYoaSA+IGZvbGRT
dGFydCkgeworICAgICAgICAgICAgICAgIGkgPSBmb2xkLmVuZC5yb3cgKyAxOworICAgICAgICAg
ICAgICAgIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGksIGZvbGQpOworICAg
ICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93IDpJbmZpbml0eTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGkgPiBsYXN0Um93KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IHRoaXMuJGFubm90YXRp
b25zW2ldIHx8IGVtcHR5QW5ubzsKKyAgICAgICAgICAgIGh0bWwucHVzaCgKKyAgICAgICAgICAg
ICAgICAiPGRpdiBjbGFzcz0nYWNlX2d1dHRlci1jZWxsICIsCisgICAgICAgICAgICAgICAgYnJl
YWtwb2ludHNbaV0gfHwgIiIsIGRlY29yYXRpb25zW2ldIHx8ICIiLCBhbm5vdGF0aW9uLmNsYXNz
TmFtZSwKKyAgICAgICAgICAgICAgICAiJyBzdHlsZT0naGVpZ2h0OiIsIHRoaXMuc2Vzc2lvbi5n
ZXRSb3dMZW5ndGgoaSkgKiBjb25maWcubGluZUhlaWdodCwgInB4Oyc+IiwgCisgICAgICAgICAg
ICAgICAgbGFzdExpbmVOdW1iZXIgPSBpICsgMQorICAgICAgICAgICAgKTsKKworICAgICAgICAg
ICAgaWYgKGZvbGRXaWRnZXRzKSB7CisgICAgICAgICAgICAgICAgdmFyIGMgPSBmb2xkV2lkZ2V0
c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKQorICAgICAgICAgICAgICAgICAg
ICBjID0gZm9sZFdpZGdldHNbaV0gPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFdpZGdldChpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYykKKyAgICAgICAgICAgICAgICAgICAgaHRtbC5wdXNoKAorICAg
ICAgICAgICAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPSdhY2VfZm9sZC13aWRnZXQgYWNlXyIs
IGMsCisgICAgICAgICAgICAgICAgICAgICAgICBjID09ICJzdGFydCIgJiYgaSA9PSBmb2xkU3Rh
cnQgJiYgaSA8IGZvbGQuZW5kLnJvdyA/ICIgYWNlX2Nsb3NlZCIgOiAiIGFjZV9vcGVuIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICInIHN0eWxlPSdoZWlnaHQ6IiwgY29uZmlnLmxpbmVIZWln
aHQsICJweCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJz48L3NwYW4+IgorICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBodG1sLnB1c2goIjwv
ZGl2PiIpOworCisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmVs
ZW1lbnQgPSBkb20uc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCwgaHRtbC5qb2luKCIiKSk7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBjb25maWcubWluSGVpZ2h0ICsgInB4
IjsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlKQorICAg
ICAgICAgICAgbGFzdExpbmVOdW1iZXIgPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CisgICAg
ICAgIAorICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSAoIiIgKyBsYXN0TGluZU51bWJlcikubGVu
Z3RoICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMu
JHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsKKyAgICAgICAgZ3V0dGVyV2lkdGgg
Kz0gcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKKyAgICAgICAgaWYgKGd1dHRlcldpZHRo
ICE9PSB0aGlzLmd1dHRlcldpZHRoKSB7CisgICAgICAgICAgICB0aGlzLmd1dHRlcldpZHRoID0g
Z3V0dGVyV2lkdGg7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBNYXRo
LmNlaWwodGhpcy5ndXR0ZXJXaWR0aCkgKyAicHgiOworICAgICAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlR3V0dGVyV2lkdGgiLCBndXR0ZXJXaWR0aCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gdHJ1ZTsKKyAgICB0aGlzLnNldFNob3dGb2xkV2lk
Z2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKKyAgICAgICAgaWYgKHNob3cpCisgICAgICAgICAgICBk
b20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2ZvbGRpbmctZW5hYmxlZCIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAi
YWNlX2ZvbGRpbmctZW5hYmxlZCIpOworCisgICAgICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9
IHNob3c7CisgICAgICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsOworICAgIH07CisgICAgCisgICAg
dGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJHNob3dGb2xkV2lkZ2V0czsKKyAgICB9OworCisgICAgdGhpcy4kY29tcHV0ZVBhZGRpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCkKKyAg
ICAgICAgICAgIHJldHVybiB7bGVmdDogMCwgcmlnaHQ6IDB9OworICAgICAgICB2YXIgc3R5bGUg
PSBkb20uY29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgICAgIHRo
aXMuJHBhZGRpbmcgPSB7fQorICAgICAgICB0aGlzLiRwYWRkaW5nLmxlZnQgPSBwYXJzZUludChz
dHlsZS5wYWRkaW5nTGVmdCkgKyAxOworICAgICAgICB0aGlzLiRwYWRkaW5nLnJpZ2h0ID0gcGFy
c2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KTsgIAorICAgICAgICByZXR1cm4gdGhpcy4kcGFkZGlu
ZzsKKyAgICB9OworCisgICAgdGhpcy5nZXRSZWdpb24gPSBmdW5jdGlvbihwb2ludCkgeworICAg
ICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmco
KTsKKyAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7CisgICAgICAgIGlmIChwb2ludC54IDwgcGFkZGluZy5sZWZ0ICsgcmVjdC5sZWZ0KQorICAg
ICAgICAgICAgcmV0dXJuICJtYXJrZXJzIjsKKyAgICAgICAgaWYgKHRoaXMuJHNob3dGb2xkV2lk
Z2V0cyAmJiBwb2ludC54ID4gcmVjdC5yaWdodCAtIHBhZGRpbmcucmlnaHQpCisgICAgICAgICAg
ICByZXR1cm4gImZvbGRXaWRnZXRzIjsKKyAgICB9OworCit9KS5jYWxsKEd1dHRlci5wcm90b3R5
cGUpOworCitleHBvcnRzLkd1dHRlciA9IEd1dHRlcjsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2Fj
ZS9sYXllci9tYXJrZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9y
YW5nZScsICdhY2UvbGliL2RvbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKKworCit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIGRvbSA9
IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKKwordmFyIE1hcmtlciA9IGZ1bmN0aW9uKHBhcmVudEVs
KSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9tYXJrZXItbGF5ZXIiOworICAg
IHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7Cit9OworCisoZnVuY3Rpb24oKSB7
CisKKyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKworICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0
aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7CisgICAgfTsK
KyAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CisgICAgICAgIHRoaXMu
c2Vzc2lvbiA9IHNlc3Npb247CisgICAgfTsKKyAgICAKKyAgICB0aGlzLnNldE1hcmtlcnMgPSBm
dW5jdGlvbihtYXJrZXJzKSB7CisgICAgICAgIHRoaXMubWFya2VycyA9IG1hcmtlcnM7CisgICAg
fTsKKworICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICAgIHZhciBj
b25maWcgPSBjb25maWcgfHwgdGhpcy5jb25maWc7CisgICAgICAgIGlmICghY29uZmlnKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisKKyAg
ICAgICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubWFya2Vy
cykgeworICAgICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vyc1trZXldOworCisgICAg
ICAgICAgICBpZiAoIW1hcmtlci5yYW5nZSkgeworICAgICAgICAgICAgICAgIG1hcmtlci51cGRh
dGUoaHRtbCwgdGhpcywgdGhpcy5zZXNzaW9uLCBjb25maWcpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBtYXJrZXIu
cmFuZ2UuY2xpcFJvd3MoY29uZmlnLmZpcnN0Um93LCBjb25maWcubGFzdFJvdyk7CisgICAgICAg
ICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSBjb250aW51ZTsKKworICAgICAgICAgICAgcmFuZ2Ug
PSByYW5nZS50b1NjcmVlblJhbmdlKHRoaXMuc2Vzc2lvbik7CisgICAgICAgICAgICBpZiAobWFy
a2VyLnJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChy
YW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlz
LiRwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoOwor
ICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXJlcihodG1sLCByYW5nZSwgbGVmdCwgdG9wLCBj
b25maWcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSAiZnVsbExpbmUi
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5kcmF3RnVsbExpbmVNYXJrZXIoaHRtbCwgcmFuZ2Us
IG1hcmtlci5jbGF6eiwgY29uZmlnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNN
dWx0aUxpbmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSAidGV4dCIp
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1RleHRNYXJrZXIoaHRtbCwgcmFuZ2UsIG1h
cmtlci5jbGF6eiwgY29uZmlnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6
LCBjb25maWcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRy
YXdTaW5nbGVMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenogKyAiIGFjZV9zdGFy
dCIsIGNvbmZpZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5lbGVt
ZW50ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOworICAg
IH07CisKKyAgICB0aGlzLiRnZXRUb3AgPSBmdW5jdGlvbihyb3csIGxheWVyQ29uZmlnKSB7Cisg
ICAgICAgIHJldHVybiAocm93IC0gbGF5ZXJDb25maWcuZmlyc3RSb3dTY3JlZW4pICogbGF5ZXJD
b25maWcubGluZUhlaWdodDsKKyAgICB9OworICAgIHRoaXMuZHJhd1RleHRNYXJrZXIgPSBmdW5j
dGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGxheWVyQ29uZmlnKSB7CisgICAgICAg
IHZhciByb3cgPSByYW5nZS5zdGFydC5yb3c7CisKKyAgICAgICAgdmFyIGxpbmVSYW5nZSA9IG5l
dyBSYW5nZSgKKyAgICAgICAgICAgIHJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLAorICAgICAgICAg
ICAgcm93LCB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihyb3cpCisgICAgICAg
ICk7CisgICAgICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGlu
ZVJhbmdlLCBjbGF6eiArICIgYWNlX3N0YXJ0IiwgbGF5ZXJDb25maWcsIDEsICJ0ZXh0Iik7Cisg
ICAgICAgIHJvdyA9IHJhbmdlLmVuZC5yb3c7CisgICAgICAgIGxpbmVSYW5nZSA9IG5ldyBSYW5n
ZShyb3csIDAsIHJvdywgcmFuZ2UuZW5kLmNvbHVtbik7CisgICAgICAgIHRoaXMuZHJhd1Npbmds
ZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgbGluZVJhbmdlLCBjbGF6eiwgbGF5ZXJDb25maWcs
IDAsICJ0ZXh0Iik7CisKKyAgICAgICAgZm9yIChyb3cgPSByYW5nZS5zdGFydC5yb3cgKyAxOyBy
b3cgPCByYW5nZS5lbmQucm93OyByb3crKykgeworICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0
LnJvdyA9IHJvdzsKKyAgICAgICAgICAgIGxpbmVSYW5nZS5lbmQucm93ID0gcm93OworICAgICAg
ICAgICAgbGluZVJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJv
d0NvbHVtbihyb3cpOworICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihzdHJp
bmdCdWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZywgMSwgInRleHQiKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyID0gZnVuY3Rpb24o
c3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIHR5cGUpIHsKKyAgICAgICAgdmFy
IHBhZGRpbmcgPSB0aGlzLiRwYWRkaW5nOworICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxp
bmVIZWlnaHQ7CisgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93
LCBjb25maWcpOworICAgICAgICB2YXIgbGVmdCA9IHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1
bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNo
KAorICAgICAgICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiIGFjZV9zdGFydCcgc3R5bGU9
JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAgICAi
cmlnaHQ6MDsiLAorICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsiLAorICAgICAgICAgICAg
ImxlZnQ6IiwgbGVmdCwgInB4Oyc+PC9kaXY+IgorICAgICAgICApOworICAgICAgICB0b3AgPSB0
aGlzLiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFyIHdpZHRoID0g
cmFuZ2UuZW5kLmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKKworICAgICAgICBzdHJp
bmdCdWlsZGVyLnB1c2goCisgICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0
eWxlPSciLAorICAgICAgICAgICAgImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAorICAgICAgICAg
ICAgIndpZHRoOiIsIHdpZHRoLCAicHg7IiwKKyAgICAgICAgICAgICJ0b3A6IiwgdG9wLCAicHg7
IiwKKyAgICAgICAgICAgICJsZWZ0OiIsIHBhZGRpbmcsICJweDsnPjwvZGl2PiIKKyAgICAgICAg
KTsKKyAgICAgICAgaGVpZ2h0ID0gKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSAx
KSAqIGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBpZiAoaGVpZ2h0IDwgMCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdyAr
IDEsIGNvbmZpZyk7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAgICAgICAg
IjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAgICAgICJoZWlnaHQ6
IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJyaWdodDowOyIsCisgICAgICAgICAgICAi
dG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDoiLCBwYWRkaW5nLCAicHg7Jz48
L2Rpdj4iCisgICAgICAgICk7CisgICAgfTsKKyAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2Vy
ID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVu
Z3RoKSB7CisgICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDsKKyAgICAgICAg
dmFyIHdpZHRoID0gKHJhbmdlLmVuZC5jb2x1bW4gKyAoZXh0cmFMZW5ndGggfHwgMCkgLSByYW5n
ZS5zdGFydC5jb2x1bW4pICogY29uZmlnLmNoYXJhY3RlcldpZHRoOworCisgICAgICAgIHZhciB0
b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOworICAgICAgICB2YXIg
bGVmdCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFj
dGVyV2lkdGg7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAgICAgICAgICAgIjxk
aXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKKyAgICAgICAgICAgICJoZWlnaHQ6Iiwg
aGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAgICJ3aWR0aDoiLCB3aWR0aCwgInB4OyIsCisgICAg
ICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDoiLCBsZWZ0LCJw
eDsnPjwvZGl2PiIKKyAgICAgICAgKTsKKyAgICB9OworCisgICAgdGhpcy5kcmF3RnVsbExpbmVN
YXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZykgewor
ICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsK
KyAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBpZiAocmFu
Z2Uuc3RhcnQucm93ICE9IHJhbmdlLmVuZC5yb3cpCisgICAgICAgICAgICBoZWlnaHQgKz0gdGhp
cy4kZ2V0VG9wKHJhbmdlLmVuZC5yb3csIGNvbmZpZykgLSB0b3A7CisKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5wdXNoKAorICAgICAgICAgICAgIjxkaXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHls
ZT0nIiwKKyAgICAgICAgICAgICJoZWlnaHQ6IiwgaGVpZ2h0LCAicHg7IiwKKyAgICAgICAgICAg
ICJ0b3A6IiwgdG9wLCAicHg7IiwKKyAgICAgICAgICAgICJsZWZ0OjA7cmlnaHQ6MDsnPjwvZGl2
PiIKKyAgICAgICAgKTsKKyAgICB9CisKK30pLmNhbGwoTWFya2VyLnByb3RvdHlwZSk7CisKK2V4
cG9ydHMuTWFya2VyID0gTWFya2VyOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL2xheWVyL3Rl
eHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2Fj
ZS9saWIvZG9tJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbGli
L2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisK
KwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBkb20gPSByZXF1aXJlKCIu
Li9saWIvZG9tIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Cit2YXIgdXNl
cmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwordmFyIEV2ZW50RW1pdHRlciA9
IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOworCit2YXIgVGV4
dCA9IGZ1bmN0aW9uKHBhcmVudEVsKSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFj
ZV90ZXh0LWxheWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwor
CisgICAgdGhpcy4kY2hhcmFjdGVyU2l6ZSA9IHt3aWR0aDogMCwgaGVpZ2h0OiAwfTsKKyAgICB0
aGlzLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKKyAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMoKTsK
K307CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0
dGVyKTsKKworICAgIHRoaXMuRU9GX0NIQVIgPSAiXHhCNiI7IC8vIiZwYXJhOyI7CisgICAgdGhp
cy5FT0xfQ0hBUiA9ICJceEFDIjsgLy8iJm5vdDsiOworICAgIHRoaXMuVEFCX0NIQVIgPSAiXHUy
MTkyIjsgLy8iJnJhcnI7IiAiXHUyMUU1IjsKKyAgICB0aGlzLlNQQUNFX0NIQVIgPSAiXHhCNyI7
IC8vIiZtaWRkb3Q7IjsKKyAgICB0aGlzLiRwYWRkaW5nID0gMDsKKworICAgIHRoaXMuc2V0UGFk
ZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRp
bmc7CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wYWRkaW5nID0gIjAgIiArIHBhZGRpbmcg
KyAicHgiOworICAgIH07CisKKyAgICB0aGlzLmdldExpbmVIZWlnaHQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJGNoYXJhY3RlclNpemUuaGVpZ2h0IHx8IDE7CisgICAgfTsK
KworICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJGNoYXJhY3RlclNpemUud2lkdGggfHwgMTsKKyAgICB9OworCisgICAgdGhpcy5j
aGVja0ZvclNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzaXplID0gdGhp
cy4kbWVhc3VyZVNpemVzKCk7CisgICAgICAgIGlmIChzaXplICYmICh0aGlzLiRjaGFyYWN0ZXJT
aXplLndpZHRoICE9PSBzaXplLndpZHRoIHx8IHRoaXMuJGNoYXJhY3RlclNpemUuaGVpZ2h0ICE9
PSBzaXplLmhlaWdodCkpIHsKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZv
bnRXZWlnaHQgPSAiYm9sZCI7CisgICAgICAgICAgICB2YXIgYm9sZFNpemUgPSB0aGlzLiRtZWFz
dXJlU2l6ZXMoKTsKKyAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWln
aHQgPSAiIjsKKyAgICAgICAgICAgIHRoaXMuJGNoYXJhY3RlclNpemUgPSBzaXplOworICAgICAg
ICAgICAgdGhpcy5hbGxvd0JvbGRGb250cyA9IGJvbGRTaXplICYmIGJvbGRTaXplLndpZHRoID09
PSBzaXplLndpZHRoICYmIGJvbGRTaXplLmhlaWdodCA9PT0gc2l6ZS5oZWlnaHQ7CisgICAgICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwge2RhdGE6IHNpemV9KTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB0aGlzLiRwb2xsU2l6ZUNoYW5n
ZXNUaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi5jaGVj
a0ZvclNpemVDaGFuZ2VzKCk7CisgICAgICAgIH0sIDUwMCk7CisgICAgfTsKKworICAgIHRoaXMu
JGZvbnRTdHlsZXMgPSB7CisgICAgICAgIGZvbnRGYW1pbHkgOiAxLAorICAgICAgICBmb250U2l6
ZSA6IDEsCisgICAgICAgIGZvbnRXZWlnaHQgOiAxLAorICAgICAgICBmb250U3R5bGUgOiAxLAor
ICAgICAgICBsaW5lSGVpZ2h0IDogMQorICAgIH07CisKKyAgICB0aGlzLiRtZWFzdXJlU2l6ZXMg
PSB1c2VyYWdlbnQuaXNJRSB8fCB1c2VyYWdlbnQuaXNPbGRHZWNrbyA/IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbiA9IDEwMDA7CisgICAgICAgIGlmICghdGhpcy4kbWVhc3VyZU5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBtZWFzdXJlTm9kZSA9IHRoaXMuJG1lYXN1cmVOb2RlID0gZG9tLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdmFyIHN0eWxlID0gbWVhc3VyZU5vZGUu
c3R5bGU7CisKKyAgICAgICAgICAgIHN0eWxlLndpZHRoID0gc3R5bGUuaGVpZ2h0ID0gImF1dG8i
OworICAgICAgICAgICAgc3R5bGUubGVmdCA9IHN0eWxlLnRvcCA9ICgtbiAqIDQwKSAgKyAicHgi
OworCisgICAgICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgICAgICAg
ICBzdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvdyA9
ICJ2aXNpYmxlIjsKKyAgICAgICAgICAgIHN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsKKyAg
ICAgICAgICAgIG1lYXN1cmVOb2RlLmlubmVySFRNTCA9IGxhbmcuc3RyaW5nUmVwZWF0KCJYeSIs
IG4pOworCisgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keSkg
eworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQobWVhc3VyZU5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB2YXIgY29udGFpbmVyID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGU7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKCFkb20uaGFzQ3NzQ2xhc3MoY29udGFpbmVyLCAiYWNlX2VkaXRvciIpKQorICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTsKKyAgICAg
ICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobWVhc3VyZU5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy4kbWVh
c3VyZU5vZGUuc3R5bGU7CisgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZG9tLmNvbXB1dGVk
U3R5bGUodGhpcy5lbGVtZW50KTsKKyAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLiRmb250
U3R5bGVzKQorICAgICAgICAgICAgc3R5bGVbcHJvcF0gPSBjb21wdXRlZFN0eWxlW3Byb3BdOwor
CisgICAgICAgIHZhciBzaXplID0geworICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLiRtZWFzdXJl
Tm9kZS5vZmZzZXRIZWlnaHQsCisgICAgICAgICAgICB3aWR0aDogdGhpcy4kbWVhc3VyZU5vZGUu
b2Zmc2V0V2lkdGggLyAobiAqIDIpCisgICAgICAgIH07CisgICAgICAgIGlmIChzaXplLndpZHRo
ID09IDAgfHwgc2l6ZS5oZWlnaHQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisg
ICAgICAgIHJldHVybiBzaXplOworICAgIH0KKyAgICA6IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAoIXRoaXMuJG1lYXN1cmVOb2RlKSB7CisgICAgICAgICAgICB2YXIgbWVhc3VyZU5vZGUgPSB0
aGlzLiRtZWFzdXJlTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAg
IHZhciBzdHlsZSA9IG1lYXN1cmVOb2RlLnN0eWxlOworCisgICAgICAgICAgICBzdHlsZS53aWR0
aCA9IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKKyAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBzdHls
ZS50b3AgPSAtMTAwICsgInB4IjsKKworICAgICAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9ICJo
aWRkZW4iOworICAgICAgICAgICAgc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOworICAgICAgICAg
ICAgc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAgICAgICAgICBzdHlsZS53aGl0ZVNw
YWNlID0gIm5vd3JhcCI7CisKKyAgICAgICAgICAgIG1lYXN1cmVOb2RlLmlubmVySFRNTCA9ICJY
IjsKKworICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuZWxlbWVudC5wYXJlbnROb2Rl
OworICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAmJiAhZG9tLmhhc0Nzc0NsYXNzKGNvbnRh
aW5lciwgImFjZV9lZGl0b3IiKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWlu
ZXIucGFyZW50Tm9kZTsKKworICAgICAgICAgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuJG1lYXN1cmVOb2RlID0gbnVsbDsKKworICAgICAgICAgICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciByZWN0ID0gdGhpcy4kbWVhc3VyZU5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAg
ICAgICAgdmFyIHNpemUgPSB7CisgICAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LAorICAg
ICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHNpemUu
d2lkdGggPT0gMCB8fCBzaXplLmhlaWdodCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfTsKKworICAgIHRoaXMuc2V0U2Vzc2lvbiA9
IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAg
ICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpOworICAgIH07CisKKyAgICB0aGlzLnNob3dJ
bnZpc2libGVzID0gZmFsc2U7CisgICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9u
KHNob3dJbnZpc2libGVzKSB7CisgICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzID09IHNo
b3dJbnZpc2libGVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMu
c2hvd0ludmlzaWJsZXMgPSBzaG93SW52aXNpYmxlczsKKyAgICAgICAgdGhpcy4kY29tcHV0ZVRh
YlN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgdGhpcy5kaXNw
bGF5SW5kZW50R3VpZGVzID0gdHJ1ZTsKKyAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMg
PSBmdW5jdGlvbihkaXNwbGF5KSB7CisgICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlk
ZXMgPT0gZGlzcGxheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlz
LmRpc3BsYXlJbmRlbnRHdWlkZXMgPSBkaXNwbGF5OworICAgICAgICB0aGlzLiRjb21wdXRlVGFi
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICB0aGlzLiR0YWJT
dHJpbmdzID0gW107CisgICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPQorICAgIHRoaXMuJGNvbXB1
dGVUYWJTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNl
c3Npb24uZ2V0VGFiU2l6ZSgpOworICAgICAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplOworICAg
ICAgICB2YXIgdGFiU3RyID0gdGhpcy4kdGFiU3RyaW5ncyA9IFswXTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCB0YWJTaXplICsgMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5z
aG93SW52aXNpYmxlcykgeworICAgICAgICAgICAgICAgIHRhYlN0ci5wdXNoKCI8c3BhbiBjbGFz
cz0nYWNlX2ludmlzaWJsZSc+IgorICAgICAgICAgICAgICAgICAgICArIHRoaXMuVEFCX0NIQVIK
KyAgICAgICAgICAgICAgICAgICAgKyBsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGkgLSAxKQor
ICAgICAgICAgICAgICAgICAgICArICI8L3NwYW4+Iik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRhYlN0ci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KCJceGEwIiwgaSkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRl
bnRHdWlkZXMpIHsKKyAgICAgICAgICAgIHRoaXMuJGluZGVudEd1aWRlUmUgPSAgL1xzXFN8IFx0
fFx0IHxccyQvOworICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICJhY2VfaW5kZW50LWd1aWRl
IjsKKyAgICAgICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzKSB7CisgICAgICAgICAgICAg
ICAgY2xhc3NOYW1lICs9ICIgYWNlX2ludmlzaWJsZSI7CisgICAgICAgICAgICAgICAgdmFyIHNw
YWNlQ29udGVudCA9IGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuU1BBQ0VfQ0hBUiwgdGhpcy50YWJT
aXplKTsKKyAgICAgICAgICAgICAgICB2YXIgdGFiQ29udGVudCA9IHRoaXMuVEFCX0NIQVIgKyBs
YW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIHRoaXMudGFiU2l6ZSAtIDEpOworICAgICAgICAgICAg
fSBlbHNleworICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1Jl
cGVhdCgiXHhhMCIsIHRoaXMudGFiU2l6ZSk7CisgICAgICAgICAgICAgICAgdmFyIHRhYkNvbnRl
bnQgPSBzcGFjZUNvbnRlbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJHRh
YlN0cmluZ3NbIiAiXSA9ICI8c3BhbiBjbGFzcz0nIiArIGNsYXNzTmFtZSArICInPiIgKyBzcGFj
ZUNvbnRlbnQgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyJcdCJd
ID0gIjxzcGFuIGNsYXNzPSciICsgY2xhc3NOYW1lICsgIic+IiArIHRhYkNvbnRlbnQgKyAiPC9z
cGFuPiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy51cGRhdGVMaW5lcyA9IGZ1bmN0
aW9uKGNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAgaWYgKHRoaXMuY29uZmln
Lmxhc3RSb3cgIT0gY29uZmlnLmxhc3RSb3cgfHwKKyAgICAgICAgICAgIHRoaXMuY29uZmlnLmZp
cnN0Um93ICE9IGNvbmZpZy5maXJzdFJvdykgeworICAgICAgICAgICAgdGhpcy5zY3JvbGxMaW5l
cyhjb25maWcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOworCisg
ICAgICAgIHZhciBmaXJzdCA9IE1hdGgubWF4KGZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cpOwor
ICAgICAgICB2YXIgbGFzdCA9IE1hdGgubWluKGxhc3RSb3csIGNvbmZpZy5sYXN0Um93KTsKKwor
ICAgICAgICB2YXIgbGluZUVsZW1lbnRzID0gdGhpcy5lbGVtZW50LmNoaWxkTm9kZXM7CisgICAg
ICAgIHZhciBsaW5lRWxlbWVudHNJZHggPSAwOworCisgICAgICAgIGZvciAodmFyIHJvdyA9IGNv
bmZpZy5maXJzdFJvdzsgcm93IDwgZmlyc3Q7IHJvdysrKSB7CisgICAgICAgICAgICB2YXIgZm9s
ZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUocm93KTsKKyAgICAgICAgICAgIGlmIChm
b2xkTGluZSkgeworICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZS5jb250YWluc1JvdyhmaXJz
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmb2xkTGluZS5zdGFydC5yb3c7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZUVsZW1lbnRzSWR4ICsrOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHJvdyA9IGZpcnN0OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0
aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQg
PSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAg
ICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRM
aW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAg
ICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5m
aW5pdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocm93ID4gbGFzdCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgdmFyIGxpbmVFbGVtZW50ID0gbGluZUVs
ZW1lbnRzW2xpbmVFbGVtZW50c0lkeCsrXTsKKyAgICAgICAgICAgIGlmIChsaW5lRWxlbWVudCkg
eworICAgICAgICAgICAgICAgIHZhciBodG1sID0gW107CisgICAgICAgICAgICAgICAgdGhpcy4k
cmVuZGVyTGluZSgKKyAgICAgICAgICAgICAgICAgICAgaHRtbCwgcm93LCAhdGhpcy4kdXNlTGlu
ZUdyb3VwcygpLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZQorICAgICAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgZG9tLnNldElubmVySHRtbChsaW5lRWxlbWVudCwg
aHRtbC5qb2luKCIiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3crKzsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0aGlzLnNjcm9sbExpbmVzID0gZnVuY3Rpb24oY29uZmlnKSB7
CisgICAgICAgIHZhciBvbGRDb25maWcgPSB0aGlzLmNvbmZpZzsKKyAgICAgICAgdGhpcy5jb25m
aWcgPSBjb25maWc7CisKKyAgICAgICAgaWYgKCFvbGRDb25maWcgfHwgb2xkQ29uZmlnLmxhc3RS
b3cgPCBjb25maWcuZmlyc3RSb3cpCisgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29u
ZmlnKTsKKworICAgICAgICBpZiAoY29uZmlnLmxhc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29uZmlnKTsKKworICAgICAgICB2YXIg
ZWwgPSB0aGlzLmVsZW1lbnQ7CisgICAgICAgIGlmIChvbGRDb25maWcuZmlyc3RSb3cgPCBjb25m
aWcuZmlyc3RSb3cpCisgICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5zZXNzaW9uLmdldEZv
bGRlZFJvd0NvdW50KG9sZENvbmZpZy5maXJzdFJvdywgY29uZmlnLmZpcnN0Um93IC0gMSk7IHJv
dz4wOyByb3ctLSkKKyAgICAgICAgICAgICAgICBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxk
KTsKKworICAgICAgICBpZiAob2xkQ29uZmlnLmxhc3RSb3cgPiBjb25maWcubGFzdFJvdykKKyAg
ICAgICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQoY29u
ZmlnLmxhc3RSb3cgKyAxLCBvbGRDb25maWcubGFzdFJvdyk7IHJvdz4wOyByb3ctLSkKKyAgICAg
ICAgICAgICAgICBlbC5yZW1vdmVDaGlsZChlbC5sYXN0Q2hpbGQpOworCisgICAgICAgIGlmIChj
b25maWcuZmlyc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cpIHsKKyAgICAgICAgICAgIHZhciBm
cmFnbWVudCA9IHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29uZmlnLCBjb25maWcuZmlyc3RS
b3csIG9sZENvbmZpZy5maXJzdFJvdyAtIDEpOworICAgICAgICAgICAgaWYgKGVsLmZpcnN0Q2hp
bGQpCisgICAgICAgICAgICAgICAgZWwuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBlbC5maXJzdENo
aWxkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChm
cmFnbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLmxhc3RSb3cgPiBvbGRD
b25maWcubGFzdFJvdykgeworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy4kcmVuZGVy
TGluZXNGcmFnbWVudChjb25maWcsIG9sZENvbmZpZy5sYXN0Um93ICsgMSwgY29uZmlnLmxhc3RS
b3cpOworICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQgPSBmdW5jdGlvbihjb25maWcs
IGZpcnN0Um93LCBsYXN0Um93KSB7CisgICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZWxlbWVu
dC5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgdmFyIHJv
dyA9IGZpcnN0Um93OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4
dEZvbGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRM
aW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93ID0gZm9s
ZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9u
LmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICBmb2xkU3Rh
cnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3RSb3cpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisKKyAgICAgICAgICAgIHZhciBodG1sID0gW107CisgICAgICAgICAgICB0aGlzLiRyZW5k
ZXJMaW5lKGh0bWwsIHJvdywgZmFsc2UsIHJvdyA9PSBmb2xkU3RhcnQgPyBmb2xkTGluZSA6IGZh
bHNlKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOwor
ICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkgeworICAgICAgICAgICAgICAg
IGNvbnRhaW5lci5jbGFzc05hbWUgPSAnYWNlX2xpbmVfZ3JvdXAnOworICAgICAgICAgICAgICAg
IGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzCisgICAgICAg
ICAgICAgICAgd2hpbGUobGluZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBmcmFnbWVu
dC5hcHBlbmRDaGlsZChsaW5lc1swXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJv
dysrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9OworCisgICAg
dGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdGhpcy5jb25maWcgPSBj
b25maWc7CisKKyAgICAgICAgdmFyIGh0bWwgPSBbXTsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0g
Y29uZmlnLmZpcnN0Um93LCBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7CisKKyAgICAgICAgdmFy
IHJvdyA9IGZpcnN0Um93OworICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0
TmV4dEZvbGRMaW5lKHJvdyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZv
bGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworCisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcm93ID0g
Zm9sZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNz
aW9uLmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgICAgICBmb2xk
U3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkKKyAgICAgICAg
ICAgICAgICBodG1sLnB1c2goIjxkaXYgY2xhc3M9J2FjZV9saW5lX2dyb3VwJz4iKQorCisgICAg
ICAgICAgICB0aGlzLiRyZW5kZXJMaW5lKGh0bWwsIHJvdywgZmFsc2UsIHJvdyA9PSBmb2xkU3Rh
cnQgPyBmb2xkTGluZSA6IGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVH
cm91cHMoKSkKKyAgICAgICAgICAgICAgICBodG1sLnB1c2goIjwvZGl2PiIpOyAvLyBlbmQgdGhl
IGxpbmUgZ3JvdXAKKworICAgICAgICAgICAgcm93Kys7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5lbGVtZW50ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikp
OworICAgIH07CisKKyAgICB0aGlzLiR0ZXh0VG9rZW4gPSB7CisgICAgICAgICJ0ZXh0IjogdHJ1
ZSwKKyAgICAgICAgInJwYXJlbiI6IHRydWUsCisgICAgICAgICJscGFyZW4iOiB0cnVlCisgICAg
fTsKKworICAgIHRoaXMuJHJlbmRlclRva2VuID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgc2Ny
ZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgICB2YXIgcmVwbGFjZVJlZyA9IC9cdHwmfDx8KCArKXwoW1x4MDAtXHgxZlx4ODAtXHhhMFx1
MTY4MFx1MTgwRVx1MjAwMC1cdTIwMGZcdTIwMjhcdTIwMjlcdTIwMkZcdTIwNUZcdTMwMDBcdUZF
RkZdKXxbXHUxMTAwLVx1MTE1Rlx1MTFBMy1cdTExQTdcdTExRkEtXHUxMUZGXHUyMzI5LVx1MjMy
QVx1MkU4MC1cdTJFOTlcdTJFOUItXHUyRUYzXHUyRjAwLVx1MkZENVx1MkZGMC1cdTJGRkJcdTMw
MDAtXHUzMDNFXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1
MzE4RVx1MzE5MC1cdTMxQkFcdTMxQzAtXHUzMUUzXHUzMUYwLVx1MzIxRVx1MzIyMC1cdTMyNDdc
dTMyNTAtXHUzMkZFXHUzMzAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0OTAtXHVBNEM2XHVBOTYw
LVx1QTk3Q1x1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZB
RkZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjZcdUZFNjgtXHVGRTZCXHVG
RjAxLVx1RkY2MFx1RkZFMC1cdUZGRTZdL2c7CisgICAgICAgIHZhciByZXBsYWNlRnVuYyA9IGZ1
bmN0aW9uKGMsIGEsIGIsIHRhYklkeCwgaWR4NCkgeworICAgICAgICAgICAgaWYgKGEpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaG93SW52aXNpYmxlcyA/CisgICAgICAgICAgICAg
ICAgICAgICI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+IiArIGxhbmcuc3RyaW5nUmVwZWF0
KHNlbGYuU1BBQ0VfQ0hBUiwgYy5sZW5ndGgpICsgIjwvc3Bhbj4iIDoKKyAgICAgICAgICAgICAg
ICAgICAgbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCBjLmxlbmd0aCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICImIzM4OyI7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIjwiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICImIzYwOyI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIlx0IikgeworICAgICAgICAg
ICAgICAgIHZhciB0YWJTaXplID0gc2VsZi5zZXNzaW9uLmdldFNjcmVlblRhYlNpemUoc2NyZWVu
Q29sdW1uICsgdGFiSWR4KTsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gdGFiU2l6
ZSAtIDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuJHRhYlN0cmluZ3NbdGFiU2l6ZV07
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIlx1MzAwMCIpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgY2xhc3NUb1VzZSA9IHNlbGYuc2hvd0ludmlzaWJsZXMgPyAiYWNlX2NqayBhY2VfaW52
aXNpYmxlIiA6ICJhY2VfY2prIjsKKyAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBzZWxmLnNo
b3dJbnZpc2libGVzID8gc2VsZi5TUEFDRV9DSEFSIDogIiI7CisgICAgICAgICAgICAgICAgc2Ny
ZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0nIiAr
IGNsYXNzVG9Vc2UgKyAiJyBzdHlsZT0nd2lkdGg6IiArCisgICAgICAgICAgICAgICAgICAgIChz
ZWxmLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCAqIDIpICsKKyAgICAgICAgICAgICAgICAgICAgInB4
Jz4iICsgc3BhY2UgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlIGFjZV9pbnZh
bGlkJz4iICsgc2VsZi5TUEFDRV9DSEFSICsgIjwvc3Bhbj4iOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIjxzcGFuIGNsYXNzPSdhY2VfY2prJyBzdHlsZT0nd2lkdGg6IiArCisgICAgICAgICAg
ICAgICAgICAgIChzZWxmLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCAqIDIpICsKKyAgICAgICAgICAg
ICAgICAgICAgInB4Jz4iICsgYyArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICB2YXIgb3V0cHV0ID0gdmFsdWUucmVwbGFjZShyZXBsYWNlUmVnLCByZXBs
YWNlRnVuYyk7CisKKyAgICAgICAgaWYgKCF0aGlzLiR0ZXh0VG9rZW5bdG9rZW4udHlwZV0pIHsK
KyAgICAgICAgICAgIHZhciBjbGFzc2VzID0gImFjZV8iICsgdG9rZW4udHlwZS5yZXBsYWNlKC9c
Li9nLCAiIGFjZV8iKTsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9ICIiOworICAgICAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT0gImZvbGQiKQorICAgICAgICAgICAgICAgIHN0eWxlID0gIiBzdHls
ZT0nd2lkdGg6IiArICh0b2tlbi52YWx1ZS5sZW5ndGggKiB0aGlzLmNvbmZpZy5jaGFyYWN0ZXJX
aWR0aCkgKyAicHg7JyAiOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCI8c3BhbiBj
bGFzcz0nIiwgY2xhc3NlcywgIiciLCBzdHlsZSwgIj4iLCBvdXRwdXQsICI8L3NwYW4+Iik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2go
b3V0cHV0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2NyZWVuQ29sdW1uICsgdmFsdWUu
bGVuZ3RoOworICAgIH07CisKKyAgICB0aGlzLnJlbmRlckluZGVudEd1aWRlID0gZnVuY3Rpb24o
c3RyaW5nQnVpbGRlciwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGNvbHMgPSB2YWx1ZS5zZWFyY2go
dGhpcy4kaW5kZW50R3VpZGVSZSk7CisgICAgICAgIGlmIChjb2xzIDw9IDApCisgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZVswXSA9PSAiICIpIHsKKyAgICAgICAg
ICAgIGNvbHMgLT0gY29scyAlIHRoaXMudGFiU2l6ZTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzWyIgIl0sIGNvbHMvdGhp
cy50YWJTaXplKSk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpOworICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09ICJcdCIpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzWyJcdCJdLCBjb2xz
KSk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyV3JhcHBlZExp
bmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRz
KSB7CisgICAgICAgIHZhciBjaGFycyA9IDA7CisgICAgICAgIHZhciBzcGxpdCA9IDA7CisgICAg
ICAgIHZhciBzcGxpdENoYXJzID0gc3BsaXRzWzBdOworICAgICAgICB2YXIgc2NyZWVuQ29sdW1u
ID0gMDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOworICAgICAgICAgICAgdmFyIHZh
bHVlID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBpZiAoaSA9PSAwICYmIHRoaXMuZGlzcGxh
eUluZGVudEd1aWRlcykgeworICAgICAgICAgICAgICAgIGNoYXJzID0gdmFsdWUubGVuZ3RoOwor
ICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWls
ZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhcnMgLT0gdmFsdWUubGVuZ3RoOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hhcnMgKyB2YWx1ZS5sZW5ndGggPCBz
cGxpdENoYXJzKSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVy
VG9rZW4oc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIGNoYXJzICs9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzICsgdmFsdWUubGVuZ3RoID49IHNwbGl0Q2hhcnMp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4o
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgdmFsdWUuc3Vic3RyaW5nKDAsIHNwbGl0Q2hh
cnMgLSBjaGFycykKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3BsaXRDaGFycyAtIGNoYXJzKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2hhcnMgPSBzcGxpdENoYXJzOworCisgICAgICAgICAgICAgICAgICAgIGlmICgh
b25seUNvbnRlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1
c2goIjwvZGl2PiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2Fj
ZV9saW5lJyBzdHlsZT0naGVpZ2h0OiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb25maWcubGluZUhlaWdodCwgInB4Jz4iCisgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgKys7Cisg
ICAgICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IDA7CisgICAgICAgICAgICAgICAgICAg
IHNwbGl0Q2hhcnMgPSBzcGxpdHNbc3BsaXRdIHx8IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICBjaGFycyArPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUKKyAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGhpcy4kcmVuZGVyU2ltcGxlTGluZSA9IGZ1bmN0aW9uKHN0cmlu
Z0J1aWxkZXIsIHRva2VucykgeworICAgICAgICB2YXIgc2NyZWVuQ29sdW1uID0gMDsKKyAgICAg
ICAgdmFyIHRva2VuID0gdG9rZW5zWzBdOworICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1
ZTsKKyAgICAgICAgaWYgKHRoaXMuZGlzcGxheUluZGVudEd1aWRlcykKKyAgICAgICAgICAgIHZh
bHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWlsZGVyLCB2YWx1ZSk7CisgICAg
ICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRv
a2VuKHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRv
a2VuID0gdG9rZW5zW2ldOworICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsKKyAgICAg
ICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHN0cmluZ0J1aWxkZXIsIHNj
cmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy4k
cmVuZGVyTGluZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJvdywgb25seUNvbnRlbnRzLCBm
b2xkTGluZSkgeworICAgICAgICBpZiAoIWZvbGRMaW5lICYmIGZvbGRMaW5lICE9IGZhbHNlKQor
ICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUocm93KTsKKwor
ICAgICAgICBpZiAoZm9sZExpbmUpCisgICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy4kZ2V0
Rm9sZExpbmVUb2tlbnMocm93LCBmb2xkTGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZhciB0b2tlbnMgPSB0aGlzLnNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CisKKworICAgICAgICBp
ZiAoIW9ubHlDb250ZW50cykgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAg
ICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hlaWdodDoiLCB0aGlz
LmNvbmZpZy5saW5lSGVpZ2h0LCAicHgnPiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRo
aXMuc2Vzc2lvbi5nZXRSb3dTcGxpdERhdGEocm93KTsKKyAgICAgICAgICAgIGlmIChzcGxpdHMg
JiYgc3BsaXRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aGlzLiRyZW5kZXJXcmFwcGVkTGlu
ZShzdHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRzKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLiRyZW5kZXJTaW1wbGVMaW5lKHN0cmluZ0J1
aWxkZXIsIHRva2Vucyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5zaG93SW52aXNp
YmxlcykgeworICAgICAgICAgICAgaWYgKGZvbGRMaW5lKQorICAgICAgICAgICAgICAgIHJvdyA9
IGZvbGRMaW5lLmVuZC5yb3cKKworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAorICAg
ICAgICAgICAgICAgICI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+IiwKKyAgICAgICAgICAg
ICAgICByb3cgPT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSA/IHRoaXMuRU9GX0NIQVIg
OiB0aGlzLkVPTF9DSEFSLAorICAgICAgICAgICAgICAgICI8L3NwYW4+IgorICAgICAgICAgICAg
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9ubHlDb250ZW50cykKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIucHVzaCgiPC9kaXY+Iik7CisgICAgfTsKKworICAgIHRoaXMuJGdldEZvbGRM
aW5lVG9rZW5zID0gZnVuY3Rpb24ocm93LCBmb2xkTGluZSkgeworICAgICAgICB2YXIgc2Vzc2lv
biA9IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHJlbmRlclRva2VucyA9IFtdOworCisgICAg
ICAgIGZ1bmN0aW9uIGFkZFRva2Vucyh0b2tlbnMsIGZyb20sIHRvKSB7CisgICAgICAgICAgICB2
YXIgaWR4ID0gMCwgY29sID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY29sICsgdG9rZW5zW2lk
eF0udmFsdWUubGVuZ3RoKSA8IGZyb20pIHsKKyAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5z
W2lkeF0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAg
ICAgICAgaWYgKGlkeCA9PSB0b2tlbnMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sICE9IGZyb20pIHsKKyAgICAg
ICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnNbaWR4XS52YWx1ZS5zdWJzdHJpbmcoZnJvbSAt
IGNvbCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+ICh0byAtIGZyb20pKQor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGZyb20p
OworCisgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAg
ICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGNvbCA9IGZyb20g
KyB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWR4ICs9IDE7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHdoaWxlIChjb2wgPCB0byAmJiBpZHggPCB0b2tlbnMubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2lkeF0udmFsdWU7CisgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCArIGNvbCA+IHRvKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlbmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRv
a2Vuc1tpZHhdLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuc3Vi
c3RyaW5nKDAsIHRvIC0gY29sKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2godG9rZW5z
W2lkeF0pOworICAgICAgICAgICAgICAgIGNvbCArPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgaWR4ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIg
dG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgZm9sZExpbmUud2Fsayhm
dW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4sIGlzTmV3Um93KSB7
CisgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IHJlbmRlclRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogImZvbGQiLAor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGxhY2Vob2xkZXIKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTmV3Um93KQor
ICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOworCisg
ICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGFk
ZFRva2Vucyh0b2tlbnMsIGxhc3RDb2x1bW4sIGNvbHVtbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sIGZvbGRMaW5lLmVuZC5yb3csIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZvbGRMaW5lLmVu
ZC5yb3cpLmxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIHJlbmRlclRva2VuczsKKyAgICB9Owor
CisgICAgdGhpcy4kdXNlTGluZUdyb3VwcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCk7CisgICAgfTsKKworICAgIHRoaXMuZGVzdHJv
eSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjbGVhckludGVydmFsKHRoaXMuJHBvbGxTaXplQ2hh
bmdlc1RpbWVyKTsKKyAgICAgICAgaWYgKHRoaXMuJG1lYXN1cmVOb2RlKQorICAgICAgICAgICAg
dGhpcy4kbWVhc3VyZU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRtZWFzdXJlTm9k
ZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzLiRtZWFzdXJlTm9kZTsKKyAgICB9OworCit9KS5jYWxs
KFRleHQucHJvdG90eXBlKTsKKworZXhwb3J0cy5UZXh0ID0gVGV4dDsKKworfSk7CisKK2FjZS5k
ZWZpbmUoJ2FjZS9sYXllci9jdXJzb3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewor
CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CisKK3ZhciBDdXJzb3IgPSBmdW5j
dGlvbihwYXJlbnRFbCkgeworICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfY3Vyc29y
LWxheWVyIjsKKyAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworCisgICAg
dGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICB0aGlzLmlzQmxpbmtpbmcgPSB0cnVlOworICAg
IHRoaXMuYmxpbmtJbnRlcnZhbCA9IDEwMDA7CisgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IGZh
bHNlOworCisgICAgdGhpcy5jdXJzb3JzID0gW107CisgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmFk
ZEN1cnNvcigpOworICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfaGlkZGVu
LWN1cnNvcnMiKTsKK307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuJHBhZGRpbmcgPSAw
OworICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKKyAgICAgICAgdGhp
cy4kcGFkZGluZyA9IHBhZGRpbmc7CisgICAgfTsKKworICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1
bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgICB9
OworCisgICAgdGhpcy5zZXRCbGlua2luZyA9IGZ1bmN0aW9uKGJsaW5raW5nKSB7CisgICAgICAg
IGlmIChibGlua2luZyAhPSB0aGlzLmlzQmxpbmtpbmcpeworICAgICAgICAgICAgdGhpcy5pc0Js
aW5raW5nID0gYmxpbmtpbmc7CisgICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRoaXMuc2V0QmxpbmtJbnRlcnZhbCA9IGZ1bmN0aW9uKGJs
aW5rSW50ZXJ2YWwpIHsKKyAgICAgICAgaWYgKGJsaW5rSW50ZXJ2YWwgIT0gdGhpcy5ibGlua0lu
dGVydmFsKXsKKyAgICAgICAgICAgIHRoaXMuYmxpbmtJbnRlcnZhbCA9IGJsaW5rSW50ZXJ2YWw7
CisgICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRoaXMuc2V0U21vb3RoQmxpbmtpbmcgPSBmdW5jdGlvbihzbW9vdGhCbGlua2luZykgewor
ICAgICAgICBpZiAoc21vb3RoQmxpbmtpbmcgIT0gdGhpcy5zbW9vdGhCbGlua2luZykgeworICAg
ICAgICAgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IHNtb290aEJsaW5raW5nOworICAgICAgICAg
ICAgaWYgKHNtb290aEJsaW5raW5nKQorICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0
aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9zbW9v
dGgtYmxpbmtpbmciKTsKKyAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGhpcy5hZGRDdXJzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbC5jbGFzc05hbWUg
PSAiYWNlX2N1cnNvciI7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7Cisg
ICAgICAgIHRoaXMuY3Vyc29ycy5wdXNoKGVsKTsKKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07
CisKKyAgICB0aGlzLnJlbW92ZUN1cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhp
cy5jdXJzb3JzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuY3Vyc29y
cy5wb3AoKTsKKyAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOworICAg
ICAgICAgICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuaGlkZUN1
cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOworICAg
ICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7
CisgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CisgICAgfTsKKworICAgIHRoaXMuc2hvd0N1
cnNvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7CisgICAg
ICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfaGlkZGVuLWN1cnNvcnMi
KTsKKyAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKKyAgICB9OworCisgICAgdGhpcy5yZXN0
YXJ0VGltZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVy
dmFsSWQpOworICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpOworICAgICAgICBp
ZiAodGhpcy5zbW9vdGhCbGlua2luZykKKyAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0
aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CisgICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tp
XS5zdHlsZS5vcGFjaXR5ID0gIiI7CisKKyAgICAgICAgaWYgKCF0aGlzLmlzQmxpbmtpbmcgfHwg
IXRoaXMuYmxpbmtJbnRlcnZhbCB8fCAhdGhpcy5pc1Zpc2libGUpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcpCisgICAgICAgICAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMu
ZWxlbWVudCwgImFjZV9zbW9vdGgtYmxpbmtpbmciKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlz
KSk7CisKKyAgICAgICAgdmFyIGJsaW5rID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIHRoaXMu
dGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gdGhpcy5jdXJzb3JzLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jdXJzb3JzW2ldLnN0eWxlLm9wYWNpdHkgPSAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMC42ICogdGhpcy5ibGlua0ludGVydmFsKTsKKyAg
ICAgICAgfS5iaW5kKHRoaXMpOworCisgICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVy
dmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY3Vyc29ycy5s
ZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JzW2ldLnN0eWxlLm9w
YWNpdHkgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsaW5rKCk7CisgICAgICAg
IH0uYmluZCh0aGlzKSwgdGhpcy5ibGlua0ludGVydmFsKTsKKworICAgICAgICBibGluaygpOwor
ICAgIH07CisKKyAgICB0aGlzLmdldFBpeGVsUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbiwg
b25TY3JlZW4pIHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhdGhpcy5zZXNzaW9uKQor
ICAgICAgICAgICAgcmV0dXJuIHtsZWZ0IDogMCwgdG9wIDogMH07CisKKyAgICAgICAgaWYgKCFw
b3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5n
ZXRDdXJzb3IoKTsKKyAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2Ny
ZWVuUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICB2YXIgY3Vyc29yTGVmdCA9IHRoaXMuJHBh
ZGRpbmcgKyBwb3MuY29sdW1uICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGg7CisgICAgICAg
IHZhciBjdXJzb3JUb3AgPSAocG9zLnJvdyAtIChvblNjcmVlbiA/IHRoaXMuY29uZmlnLmZpcnN0
Um93U2NyZWVuIDogMCkpICoKKyAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQ7CisK
KyAgICAgICAgcmV0dXJuIHtsZWZ0IDogY3Vyc29yTGVmdCwgdG9wIDogY3Vyc29yVG9wfTsKKyAg
ICB9OworCisgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdGhp
cy5jb25maWcgPSBjb25maWc7CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSB0aGlzLnNlc3Np
b24uJHNlbGVjdGlvbk1hcmtlcnM7CisgICAgICAgIHZhciBpID0gMCwgY3Vyc29ySW5kZXggPSAw
OworCisgICAgICAgIGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5s
ZW5ndGggPT09IDApeworICAgICAgICAgICAgc2VsZWN0aW9ucyA9IFt7Y3Vyc29yOiBudWxsfV07
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0aW9ucy5sZW5ndGg7IGkt
LTsgKSB7CisgICAgICAgICAgICB2YXIgcGl4ZWxQb3MgPSB0aGlzLmdldFBpeGVsUG9zaXRpb24o
c2VsZWN0aW9uc1tpXS5jdXJzb3IsIHRydWUpOworICAgICAgICAgICAgaWYgKChwaXhlbFBvcy50
b3AgPiBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm9mZnNldCB8fAorICAgICAgICAgICAgICAgICBw
aXhlbFBvcy50b3AgPCAtY29uZmlnLm9mZnNldCkgJiYgaSA+IDEpIHsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHN0eWxlID0gKHRo
aXMuY3Vyc29yc1tjdXJzb3JJbmRleCsrXSB8fCB0aGlzLmFkZEN1cnNvcigpKS5zdHlsZTsKKwor
ICAgICAgICAgICAgc3R5bGUubGVmdCA9IHBpeGVsUG9zLmxlZnQgKyAicHgiOworICAgICAgICAg
ICAgc3R5bGUudG9wID0gcGl4ZWxQb3MudG9wICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLndp
ZHRoID0gY29uZmlnLmNoYXJhY3RlcldpZHRoICsgInB4IjsKKyAgICAgICAgICAgIHN0eWxlLmhl
aWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKKyAgICAgICAgfQorICAgICAgICB3aGls
ZSAodGhpcy5jdXJzb3JzLmxlbmd0aCA+IGN1cnNvckluZGV4KQorICAgICAgICAgICAgdGhpcy5y
ZW1vdmVDdXJzb3IoKTsKKworICAgICAgICB2YXIgb3ZlcndyaXRlID0gdGhpcy5zZXNzaW9uLmdl
dE92ZXJ3cml0ZSgpOworICAgICAgICB0aGlzLiRzZXRPdmVyd3JpdGUob3ZlcndyaXRlKTsKKyAg
ICAgICAgdGhpcy4kcGl4ZWxQb3MgPSBwaXhlbFBvczsKKyAgICAgICAgdGhpcy5yZXN0YXJ0VGlt
ZXIoKTsKKyAgICB9OworCisgICAgdGhpcy4kc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3Zlcndy
aXRlKSB7CisgICAgICAgIGlmIChvdmVyd3JpdGUgIT0gdGhpcy5vdmVyd3JpdGUpIHsKKyAgICAg
ICAgICAgIHRoaXMub3ZlcndyaXRlID0gb3ZlcndyaXRlOworICAgICAgICAgICAgaWYgKG92ZXJ3
cml0ZSkKKyAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNl
X292ZXJ3cml0ZS1jdXJzb3JzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9vdmVyd3JpdGUtY3Vyc29ycyIp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7CisgICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLnRpbWVvdXRJZCk7CisgICAgfTsKKworfSkuY2FsbChDdXJzb3IucHJvdG90eXBl
KTsKKworZXhwb3J0cy5DdXJzb3IgPSBDdXJzb3I7CisKK30pOworCithY2UuZGVmaW5lKCdhY2Uv
c2Nyb2xsYmFyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvZXZlbnRfZW1pdHRl
ciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0g
cmVxdWlyZSgiLi9saWIvb29wIik7Cit2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7Cit2
YXIgZXZlbnQgPSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJl
cXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cit2YXIgU2Nyb2xsQmFy
ID0gZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGJhciI7
CisKKyAgICB0aGlzLmlubmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMu
aW5uZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxiYXItaW5uZXIiOworICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTsKKworICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlz
LmVsZW1lbnQpOworICAgIHRoaXMud2lkdGggPSBkb20uc2Nyb2xsYmFyV2lkdGgocGFyZW50Lm93
bmVyRG9jdW1lbnQpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9ICh0aGlzLndpZHRo
IHx8IDE1KSArIDUgKyAicHgiOworCisgICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5lbGVtZW50
LCAic2Nyb2xsIiwgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTsKK307CisKKyhmdW5jdGlvbigp
IHsKKyAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CisgICAgdGhpcy5vblNj
cm9sbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuc2tpcEV2ZW50KSB7CisgICAg
ICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAg
ICAgICB0aGlzLl9lbWl0KCJzY3JvbGwiLCB7ZGF0YTogdGhpcy5zY3JvbGxUb3B9KTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlOworICAgIH07CisgICAgdGhpcy5n
ZXRXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy53aWR0aDsKKyAgICB9
OworICAgIHRoaXMuc2V0SGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH07CisgICAgdGhpcy5z
ZXRJbm5lckhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgeworICAgICAgICB0aGlzLmlubmVyLnN0
eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfTsKKyAgICB0aGlzLnNldFNjcm9sbFRv
cCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkgeworICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT0g
c2Nyb2xsVG9wKSB7CisgICAgICAgICAgICB0aGlzLnNraXBFdmVudCA9IHRydWU7CisgICAgICAg
ICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7
CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKFNjcm9sbEJhci5wcm90b3R5cGUpOworCitl
eHBvcnRzLlNjcm9sbEJhciA9IFNjcm9sbEJhcjsKK30pOworCithY2UuZGVmaW5lKCdhY2UvcmVu
ZGVybG9vcCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9ldmVu
dCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgZXZlbnQg
PSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOworCisKK3ZhciBSZW5kZXJMb29wID0gZnVuY3Rpb24o
b25SZW5kZXIsIHdpbikgeworICAgIHRoaXMub25SZW5kZXIgPSBvblJlbmRlcjsKKyAgICB0aGlz
LnBlbmRpbmcgPSBmYWxzZTsKKyAgICB0aGlzLmNoYW5nZXMgPSAwOworICAgIHRoaXMud2luZG93
ID0gd2luIHx8IHdpbmRvdzsKK307CisKKyhmdW5jdGlvbigpIHsKKworCisgICAgdGhpcy5zY2hl
ZHVsZSA9IGZ1bmN0aW9uKGNoYW5nZSkgeworICAgICAgICB0aGlzLmNoYW5nZXMgPSB0aGlzLmNo
YW5nZXMgfCBjaGFuZ2U7CisgICAgICAgIGlmICghdGhpcy5wZW5kaW5nKSB7CisgICAgICAgICAg
ICB0aGlzLnBlbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAg
ICAgICAgICAgIGV2ZW50Lm5leHRGcmFtZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBf
c2VsZi5wZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmFyIGNoYW5nZXM7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGNoYW5nZXMgPSBfc2VsZi5jaGFuZ2VzKSB7CisgICAgICAgICAg
ICAgICAgICAgIF9zZWxmLmNoYW5nZXMgPSAwOworICAgICAgICAgICAgICAgICAgICBfc2VsZi5v
blJlbmRlcihjaGFuZ2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCB0aGlz
LndpbmRvdyk7CisgICAgICAgIH0KKyAgICB9OworCit9KS5jYWxsKFJlbmRlckxvb3AucHJvdG90
eXBlKTsKKworZXhwb3J0cy5SZW5kZXJMb29wID0gUmVuZGVyTG9vcDsKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbXVsdGlfc2VsZWN0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvcmFuZ2VfbGlzdCcsICdhY2UvcmFuZ2UnLCAnYWNlL3NlbGVjdGlvbicsICdhY2UvbW91
c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXInLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL2xhbmcn
LCAnYWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcycsICdhY2Uvc2VhcmNoJywgJ2Fj
ZS9lZGl0X3Nlc3Npb24nLCAnYWNlL2VkaXRvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKKwordmFyIFJhbmdlTGlzdCA9IHJlcXVpcmUoIi4vcmFuZ2VfbGlzdCIpLlJh
bmdlTGlzdDsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKK3ZhciBTZWxl
Y3Rpb24gPSByZXF1aXJlKCIuL3NlbGVjdGlvbiIpLlNlbGVjdGlvbjsKK3ZhciBvbk1vdXNlRG93
biA9IHJlcXVpcmUoIi4vbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXIiKS5vbk1vdXNlRG93bjsK
K3ZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Cit2YXIgbGFuZyA9IHJlcXVpcmUo
Ii4vbGliL2xhbmciKTsKK3ZhciBjb21tYW5kcyA9IHJlcXVpcmUoIi4vY29tbWFuZHMvbXVsdGlf
c2VsZWN0X2NvbW1hbmRzIik7CitleHBvcnRzLmNvbW1hbmRzID0gY29tbWFuZHMuZGVmYXVsdENv
bW1hbmRzLmNvbmNhdChjb21tYW5kcy5tdWx0aVNlbGVjdENvbW1hbmRzKTsKK3ZhciBTZWFyY2gg
PSByZXF1aXJlKCIuL3NlYXJjaCIpLlNlYXJjaDsKK3ZhciBzZWFyY2ggPSBuZXcgU2VhcmNoKCk7
CisKK2Z1bmN0aW9uIGZpbmQoc2Vzc2lvbiwgbmVlZGxlLCBkaXIpIHsKKyAgICBzZWFyY2guJG9w
dGlvbnMud3JhcCA9IHRydWU7CisgICAgc2VhcmNoLiRvcHRpb25zLm5lZWRsZSA9IG5lZWRsZTsK
KyAgICBzZWFyY2guJG9wdGlvbnMuYmFja3dhcmRzID0gZGlyID09IC0xOworICAgIHJldHVybiBz
ZWFyY2guZmluZChzZXNzaW9uKTsKK30KK3ZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRp
dF9zZXNzaW9uIikuRWRpdFNlc3Npb247CisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy5nZXRTZWxl
Y3Rpb25NYXJrZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRzZWxlY3Rp
b25NYXJrZXJzOworICAgIH07Cit9KS5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CisoZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5yYW5nZXMgPSBudWxsOworICAgIHRoaXMucmFuZ2VMaXN0ID0g
bnVsbDsKKyAgICB0aGlzLmFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsICRibG9ja0NoYW5nZUV2
ZW50cykgeworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICghdGhpcy5pbk11bHRpU2VsZWN0TW9kZSAmJiB0aGlzLnJhbmdlQ291bnQgPT0gMCkg
eworICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy50b09yaWVudGVkUmFuZ2UoKTsKKyAg
ICAgICAgICAgIGlmIChyYW5nZS5pbnRlcnNlY3RzKG9sZFJhbmdlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJGJsb2NrQ2hhbmdlRXZlbnRzIHx8IHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UocmFu
Z2UpOworCisgICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hZGQob2xkUmFuZ2UpOworICAgICAg
ICAgICAgdGhpcy4kb25BZGRSYW5nZShvbGRSYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJhbmdlLmN1cnNvcikKKyAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdlLmVuZDsK
KworICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LmFkZChyYW5nZSk7CisKKyAg
ICAgICAgdGhpcy4kb25BZGRSYW5nZShyYW5nZSk7CisKKyAgICAgICAgaWYgKHJlbW92ZWQubGVu
Z3RoKQorICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTsKKworICAgICAg
ICBpZiAodGhpcy5yYW5nZUNvdW50ID4gMSAmJiAhdGhpcy5pbk11bHRpU2VsZWN0TW9kZSkgewor
ICAgICAgICAgICAgdGhpcy5fZW1pdCgibXVsdGlTZWxlY3QiKTsKKyAgICAgICAgICAgIHRoaXMu
aW5NdWx0aVNlbGVjdE1vZGUgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRv
U2VsZWN0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hdHRhY2godGhpcy5z
ZXNzaW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMg
fHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMudG9T
aW5nbGVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJhbmdlID0gcmFuZ2UgfHwg
dGhpcy5yYW5nZXNbMF07CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QucmVt
b3ZlQWxsKCk7CisgICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMu
JG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisKKyAgICAgICAgcmFuZ2UgJiYgdGhpcy5mcm9tT3Jp
ZW50ZWRSYW5nZShyYW5nZSk7CisgICAgfTsKKyAgICB0aGlzLnN1YnN0cmFjdFBvaW50ID0gZnVu
Y3Rpb24ocG9zKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3Quc3Vic3Ry
YWN0UG9pbnQocG9zKTsKKyAgICAgICAgaWYgKHJlbW92ZWQpIHsKKyAgICAgICAgICAgIHRoaXMu
JG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CisgICAgICAgICAgICByZXR1cm4gcmVtb3ZlZFswXTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QubWVyZ2UoKTsK
KyAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVS
YW5nZShyZW1vdmVkKTsKKyAgICAgICAgZWxzZSBpZih0aGlzLnJhbmdlc1swXSkKKyAgICAgICAg
ICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UodGhpcy5yYW5nZXNbMF0pOworICAgIH07CisKKyAg
ICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdGhpcy5yYW5n
ZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5yYW5n
ZXMudW5zaGlmdChyYW5nZSk7CisgICAgICAgIHRoaXMuX2VtaXQoImFkZFJhbmdlIiwge3Jhbmdl
OiByYW5nZX0pOworICAgIH07CisKKyAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24o
cmVtb3ZlZCkgeworICAgICAgICB0aGlzLnJhbmdlQ291bnQgPSB0aGlzLnJhbmdlTGlzdC5yYW5n
ZXMubGVuZ3RoOworICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09IDEgJiYgdGhpcy5pbk11
bHRpU2VsZWN0TW9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHRoaXMucmFuZ2VM
aXN0LnJhbmdlcy5wb3AoKTsKKyAgICAgICAgICAgIHJlbW92ZWQucHVzaChsYXN0UmFuZ2UpOwor
ICAgICAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAodmFyIGkgPSByZW1vdmVkLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciBpbmRl
eCA9IHRoaXMucmFuZ2VzLmluZGV4T2YocmVtb3ZlZFtpXSk7CisgICAgICAgICAgICB0aGlzLnJh
bmdlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZW1pdCgi
cmVtb3ZlUmFuZ2UiLCB7cmFuZ2VzOiByZW1vdmVkfSk7CisKKyAgICAgICAgaWYgKHRoaXMucmFu
Z2VDb3VudCA9PSAwICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKKyAgICAgICAgICAgIHRo
aXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoInNp
bmdsZVNlbGVjdCIpOworICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pOworICAg
ICAgICB9CisKKyAgICAgICAgbGFzdFJhbmdlID0gbGFzdFJhbmdlIHx8IHRoaXMucmFuZ2VzWzBd
OworICAgICAgICBpZiAobGFzdFJhbmdlICYmICFsYXN0UmFuZ2UuaXNFcXVhbCh0aGlzLmdldFJh
bmdlKCkpKQorICAgICAgICAgICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShsYXN0UmFuZ2UpOwor
ICAgIH07CisgICAgdGhpcy4kaW5pdFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAodGhpcy5yYW5nZUxpc3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5y
YW5nZUxpc3QgPSBuZXcgUmFuZ2VMaXN0KCk7CisgICAgICAgIHRoaXMucmFuZ2VzID0gW107Cisg
ICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7CisgICAgfTsKKyAgICB0aGlzLmdldEFsbFJhbmdl
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmNv
bmNhdCgpOworICAgIH07CisKKyAgICB0aGlzLnNwbGl0SW50b0xpbmVzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID4gMSkgeworICAgICAgICAgICAgdmFyIHJh
bmdlcyA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlczsKKyAgICAgICAgICAgIHZhciBsYXN0UmFuZ2Ug
PSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFu
Z2UuZnJvbVBvaW50cyhyYW5nZXNbMF0uc3RhcnQsIGxhc3RSYW5nZS5lbmQpOworCisgICAgICAg
ICAgICB0aGlzLnRvU2luZ2xlUmFuZ2UoKTsKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9u
UmFuZ2UocmFuZ2UsIGxhc3RSYW5nZS5jdXJzb3IgPT0gbGFzdFJhbmdlLnN0YXJ0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTsKKyAg
ICAgICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTsKKyAgICAgICAg
ICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHZhciBlbmRS
b3cgPSByYW5nZS5lbmQucm93OworICAgICAgICAgICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdykg
eworICAgICAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkcykKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXJ0ID0gcmFuZ2UuZW5kLCBlbmQgPSByYW5nZS5zdGFydDsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LCBlbmQg
PSByYW5nZS5lbmQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdGhpcy5hZGRS
YW5nZShSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKSk7CisgICAgICAgICAgICAgICAgdGhpcy5h
ZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBzdGFydCkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTsK
KyAgICAgICAgICAgIHZhciByID0gdGhpcy5nZXRMaW5lUmFuZ2Uoc3RhcnRSb3csIHRydWUpOwor
ICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47CisgICAgICAg
ICAgICByZWN0U2VsLnB1c2gocik7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJv
dyArIDE7IGkgPCBlbmRSb3c7IGkrKykKKyAgICAgICAgICAgICAgICByZWN0U2VsLnB1c2godGhp
cy5nZXRMaW5lUmFuZ2UoaSwgdHJ1ZSkpOworCisgICAgICAgICAgICByID0gdGhpcy5nZXRMaW5l
UmFuZ2UoZW5kUm93LCB0cnVlKTsKKyAgICAgICAgICAgIHIuZW5kLmNvbHVtbiA9IHJhbmdlLmVu
ZC5jb2x1bW47CisgICAgICAgICAgICByZWN0U2VsLnB1c2gocik7CisKKyAgICAgICAgICAgIHJl
Y3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdGhpcy50b2dnbGVCbG9ja1NlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMucmFuZ2VDb3VudCA+IDEpIHsKKyAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJh
bmdlTGlzdC5yYW5nZXM7CisgICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdl
cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMo
cmFuZ2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgdGhpcy50b1Np
bmdsZVJhbmdlKCk7CisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBs
YXN0UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3Np
dGlvbih0aGlzLnNlbGVjdGlvbkxlYWQpOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMu
c2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25BbmNob3IpOwor
CisgICAgICAgICAgICB2YXIgcmVjdFNlbCA9IHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKGN1
cnNvciwgYW5jaG9yKTsKKyAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdl
LCB0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxv
Y2sgPSBmdW5jdGlvbihzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvciwgaW5jbHVkZUVtcHR5TGlu
ZXMpIHsKKyAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTsKKworICAgICAgICB2YXIgeEJhY2t3YXJk
cyA9IHNjcmVlbkN1cnNvci5jb2x1bW4gPCBzY3JlZW5BbmNob3IuY29sdW1uOworICAgICAgICBp
ZiAoeEJhY2t3YXJkcykgeworICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVuQ3Vy
c29yLmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5BbmNob3IuY29s
dW1uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2Ny
ZWVuQW5jaG9yLmNvbHVtbjsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5DdXJz
b3IuY29sdW1uOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHlCYWNrd2FyZHMgPSBzY3JlZW5D
dXJzb3Iucm93IDwgc2NyZWVuQW5jaG9yLnJvdzsKKyAgICAgICAgaWYgKHlCYWNrd2FyZHMpIHsK
KyAgICAgICAgICAgIHZhciBzdGFydFJvdyA9IHNjcmVlbkN1cnNvci5yb3c7CisgICAgICAgICAg
ICB2YXIgZW5kUm93ID0gc2NyZWVuQW5jaG9yLnJvdzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBzdGFydFJvdyA9IHNjcmVlbkFuY2hvci5yb3c7CisgICAgICAgICAgICB2YXIg
ZW5kUm93ID0gc2NyZWVuQ3Vyc29yLnJvdzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGFy
dENvbHVtbiA8IDApCisgICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CisgICAgICAgIGlmIChz
dGFydFJvdyA8IDApCisgICAgICAgICAgICBzdGFydFJvdyA9IDA7CisKKyAgICAgICAgaWYgKHN0
YXJ0Um93ID09IGVuZFJvdykKKyAgICAgICAgICAgIGluY2x1ZGVFbXB0eUxpbmVzID0gdHJ1ZTsK
KworICAgICAgICBmb3IgKHZhciByb3cgPSBzdGFydFJvdzsgcm93IDw9IGVuZFJvdzsgcm93Kysp
IHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoCisgICAgICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIHN0YXJ0Q29s
dW1uKSwKKyAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0
aW9uKHJvdywgZW5kQ29sdW1uKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmIChyYW5n
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG9jRW5kICYmIGlzU2FtZVBvaW50
KHJhbmdlLmVuZCwgZG9jRW5kKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgdmFyIGRvY0VuZCA9IHJhbmdlLmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJhbmdlLmN1cnNvciA9IHhCYWNrd2FyZHMgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsK
KyAgICAgICAgICAgIHJlY3RTZWwucHVzaChyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoeUJhY2t3YXJkcykKKyAgICAgICAgICAgIHJlY3RTZWwucmV2ZXJzZSgpOworCisgICAgICAg
IGlmICghaW5jbHVkZUVtcHR5TGluZXMpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSByZWN0U2Vs
Lmxlbmd0aCAtIDE7CisgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtlbmRdLmlzRW1wdHkoKSAm
JiBlbmQgPiAwKQorICAgICAgICAgICAgICAgIGVuZC0tOworICAgICAgICAgICAgaWYgKGVuZCA+
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHdo
aWxlIChyZWN0U2VsW3N0YXJ0XS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBpID0gZW5kOyBpID49IHN0
YXJ0OyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAocmVjdFNlbFtpXS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJlY3RTZWwuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlY3RTZWw7CisgICAgfTsKK30pLmNhbGwoU2Vs
ZWN0aW9uLnByb3RvdHlwZSk7Cit2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0
b3I7CisoZnVuY3Rpb24oKSB7CisgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25NYXJrZXJzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAg
IHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworICAgIHRoaXMuYWRk
U2VsZWN0aW9uTWFya2VyID0gZnVuY3Rpb24ob3JpZW50ZWRSYW5nZSkgeworICAgICAgICBpZiAo
IW9yaWVudGVkUmFuZ2UuY3Vyc29yKQorICAgICAgICAgICAgb3JpZW50ZWRSYW5nZS5jdXJzb3Ig
PSBvcmllbnRlZFJhbmdlLmVuZDsKKworICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmdldFNlbGVj
dGlvblN0eWxlKCk7CisgICAgICAgIG9yaWVudGVkUmFuZ2UubWFya2VyID0gdGhpcy5zZXNzaW9u
LmFkZE1hcmtlcihvcmllbnRlZFJhbmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKKworICAg
ICAgICB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMucHVzaChvcmllbnRlZFJhbmdlKTsK
KyAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50ID0gdGhpcy5zZXNzaW9u
LiRzZWxlY3Rpb25NYXJrZXJzLmxlbmd0aDsKKyAgICAgICAgcmV0dXJuIG9yaWVudGVkUmFuZ2U7
CisgICAgfTsKKyAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKHJhbmdl
KSB7CisgICAgICAgIGlmICghcmFuZ2UubWFya2VyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcik7CisgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5pbmRleE9mKHJhbmdlKTsK
KyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRzZWxl
Y3Rpb25NYXJrZXJzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxl
Y3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7
CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKHJh
bmdlcykgeworICAgICAgICB2YXIgbWFya2VyTGlzdCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9u
TWFya2VyczsKKyAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKSB7Cisg
ICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CisgICAgICAgICAgICBpZiAoIXJhbmdl
Lm1hcmtlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTsKKyAgICAgICAgICAgIHZhciBpbmRleCA9
IG1hcmtlckxpc3QuaW5kZXhPZihyYW5nZSk7CisgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEp
CisgICAgICAgICAgICAgICAgbWFya2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IG1hcmtlckxpc3Qu
bGVuZ3RoOworICAgIH07CisKKyAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKTsKKyAgICAgICAgdGhpcy5y
ZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNr
TWFya2VycygpOworICAgIH07CisKKyAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpOworICAg
ICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOworICAgICAgICB0aGlzLnJlbmRlcmVy
LnVwZGF0ZUJhY2tNYXJrZXJzKCk7CisgICAgfTsKKworICAgIHRoaXMuJG9uTXVsdGlTZWxlY3Qg
PSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0gdHJ1ZTsK
KworICAgICAgICB0aGlzLnNldFN0eWxlKCJhY2VfbXVsdGlzZWxlY3QiKTsKKyAgICAgICAgdGhp
cy5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcihjb21tYW5kcy5rZXlib2FyZEhhbmRsZXIp
OworICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4
ZWMpOworCisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRo
aXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy4kb25T
aW5nbGVTZWxlY3QgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24ubXVs
dGlTZWxlY3QuaW5WaXJ0dWFsTW9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy5pbk11bHRpU2VsZWN0TW9kZSA9IGZhbHNlOworCisgICAgICAgIHRoaXMudW5zZXRTdHlsZSgi
YWNlX211bHRpc2VsZWN0Iik7CisgICAgICAgIHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2Fy
ZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKKworICAgICAgICB0aGlzLmNvbW1h
bmRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImV4ZWMiLCB0aGlzLiRvbk11bHRpU2VsZWN0RXhlYyk7
CisgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CisgICAgICAgIHRoaXMucmVu
ZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICB9OworCisgICAgdGhpcy4kb25NdWx0aVNl
bGVjdEV4ZWMgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gZS5jb21tYW5k
OworICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CisgICAgICAgIGlmICghZWRpdG9yLm11
bHRpU2VsZWN0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWNvbW1hbmQubXVs
dGlTZWxlY3RBY3Rpb24pIHsKKyAgICAgICAgICAgIGNvbW1hbmQuZXhlYyhlZGl0b3IsIGUuYXJn
cyB8fCB7fSk7CisgICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QuYWRkUmFuZ2UoZWRpdG9y
Lm11bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTsKKyAgICAgICAgICAgIGVkaXRvci5tdWx0
aVNlbGVjdC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29t
bWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSAiZm9yRWFjaCIpIHsKKyAgICAgICAgICAgIGVkaXRv
ci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncyk7CisgICAgICAgIH0gZWxzZSBpZiAo
Y29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSAic2luZ2xlIikgeworICAgICAgICAgICAgZWRp
dG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKKyAgICAgICAgICAgIGNvbW1hbmQuZXhlYyhlZGl0
b3IsIGUuYXJncyB8fCB7fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb21tYW5k
Lm11bHRpU2VsZWN0QWN0aW9uKGVkaXRvciwgZS5hcmdzIHx8IHt9KTsKKyAgICAgICAgfQorICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfTsgCisgICAgdGhpcy5mb3JFYWNoU2VsZWN0
aW9uID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7CisgICAgICAgIGlmICh0aGlzLmluVmlydHVhbFNl
bGVjdGlvbk1vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlc3Npb24g
PSB0aGlzLnNlc3Npb247CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbjsK
KyAgICAgICAgdmFyIHJhbmdlTGlzdCA9IHNlbGVjdGlvbi5yYW5nZUxpc3Q7CisKKyAgICAgICAg
dmFyIHJlZyA9IHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeTsKKyAgICAgICAgc2VsZWN0aW9uLl9l
dmVudFJlZ2lzdHJ5ID0ge307CisKKyAgICAgICAgdmFyIHRtcFNlbCA9IG5ldyBTZWxlY3Rpb24o
c2Vzc2lvbik7CisgICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7Cisg
ICAgICAgIGZvciAodmFyIGkgPSByYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsgaS0tOykgeworICAg
ICAgICAgICAgdG1wU2VsLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlTGlzdC5yYW5nZXNbaV0pOwor
ICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLnNlbGVjdGlvbiA9IHRtcFNlbDsK
KyAgICAgICAgICAgIGNtZC5leGVjKHRoaXMsIGFyZ3MgfHwge30pOworICAgICAgICAgICAgdG1w
U2VsLnRvT3JpZW50ZWRSYW5nZShyYW5nZUxpc3QucmFuZ2VzW2ldKTsKKyAgICAgICAgfQorICAg
ICAgICB0bXBTZWwuZGV0YWNoKCk7CisKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9u
LnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKyAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25N
b2RlID0gZmFsc2U7CisgICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHJlZzsKKyAg
ICAgICAgc2VsZWN0aW9uLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKKworICAgICAgICB0aGlz
Lm9uQ3Vyc29yQ2hhbmdlKCk7CisgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAg
ICB9OworICAgIHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnRvU2luZ2xlUmFuZ2UoKTsKKyAgICB9OworCisgICAg
dGhpcy5nZXRDb3B5VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGV4dCA9ICIiOwor
ICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSkgeworICAgICAgICAgICAgdmFyIHJh
bmdlcyA9IHRoaXMubXVsdGlTZWxlY3QucmFuZ2VMaXN0LnJhbmdlczsKKyAgICAgICAgICAgIHRl
eHQgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdGV4dC5wdXNoKHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFu
Z2UocmFuZ2VzW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5q
b2luKHRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5n
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH07CisgICAgdGhp
cy5vblBhc3RlID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZW1pdCgicGFzdGUiLCB0ZXh0
KTsKKyAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuaW5zZXJ0KHRleHQpOworCisgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQo
L1xyXG58XHJ8XG4vKTsKKyAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsZWN0aW9uLnJhbmdl
TGlzdC5yYW5nZXM7CisKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IHJhbmdlcy5sZW5ndGgg
fHwgKGxpbmVzLmxlbmd0aCA8PSAyIHx8ICFsaW5lc1sxXSkpCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLCB0ZXh0KTsKKworICAgICAg
ICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgICAgIHZhciBy
YW5nZSA9IHJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOworCisgICAgICAgICAgICB0
aGlzLnNlc3Npb24uaW5zZXJ0KHJhbmdlLnN0YXJ0LCBsaW5lc1tpXSk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKG5lZWRsZSwgb3B0aW9ucywgYWRkaXRp
dmUpIHsKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgICAgICAgIG9wdGlvbnMu
bmVlZGxlID0gbmVlZGxlIHx8IG9wdGlvbnMubmVlZGxlOworICAgICAgICB0aGlzLiRzZWFyY2gu
c2V0KG9wdGlvbnMpOworCisgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLiRzZWFyY2guZmluZEFs
bCh0aGlzLnNlc3Npb24pOworICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOworICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5tdWx0aVNlbGVjdDsKKworICAgICAgICBpZiAoIWFkZGl0
aXZlKQorICAgICAgICAgICAgc2VsZWN0aW9uLnRvU2luZ2xlUmFuZ2UocmFuZ2VzWzBdKTsKKwor
ICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOyApCisgICAgICAgICAgICBz
ZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2VzW2ldLCB0cnVlKTsKKworICAgICAgICB0aGlzLiRibG9j
a1Njcm9sbGluZyAtPSAxOworCisgICAgICAgIHJldHVybiByYW5nZXMubGVuZ3RoOworICAgIH07
CisgICAgdGhpcy5zZWxlY3RNb3JlTGluZXMgPSBmdW5jdGlvbihkaXIsIHNraXApIHsKKyAgICAg
ICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CisgICAgICAg
IHZhciBpc0JhY2t3YXJkcyA9IHJhbmdlLmN1cnNvciA9PSByYW5nZS5lbmQ7CisKKyAgICAgICAg
dmFyIHNjcmVlbkxlYWQgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHJh
bmdlLmN1cnNvcik7CisgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbikK
KyAgICAgICAgICAgIHNjcmVlbkxlYWQuY29sdW1uID0gdGhpcy5zZWxlY3Rpb24uJGRlc2lyZWRD
b2x1bW47CisKKyAgICAgICAgdmFyIGxlYWQgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVu
dFBvc2l0aW9uKHNjcmVlbkxlYWQucm93ICsgZGlyLCBzY3JlZW5MZWFkLmNvbHVtbik7CisKKyAg
ICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhciBzY3JlZW5BbmNo
b3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGlzQmFja3dhcmRzID8g
cmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMu
c2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuQW5jaG9yLnJvdyArIGRpciwg
c2NyZWVuQW5jaG9yLmNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIg
YW5jaG9yID0gbGVhZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0JhY2t3YXJkcykgewor
ICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBhbmNob3Ip
OworICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gbmV3UmFuZ2Uuc3RhcnQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGFu
Y2hvciwgbGVhZCk7CisgICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBuZXdSYW5nZS5lbmQ7
CisgICAgICAgIH0KKworICAgICAgICBuZXdSYW5nZS5kZXNpcmVkQ29sdW1uID0gc2NyZWVuTGVh
ZC5jb2x1bW47CisgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUp
IHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChza2lwKQorICAgICAgICAgICAgICAgIHZhciB0b1Jl
bW92ZSA9IHJhbmdlLmN1cnNvcjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc2VsZWN0aW9u
LmFkZFJhbmdlKG5ld1JhbmdlKTsKKyAgICAgICAgaWYgKHRvUmVtb3ZlKQorICAgICAgICAgICAg
dGhpcy5zZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG9SZW1vdmUpOworICAgIH07CisgICAgdGhp
cy50cmFuc3Bvc2VTZWxlY3Rpb25zID0gZnVuY3Rpb24oZGlyKSB7CisgICAgICAgIHZhciBzZXNz
aW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgc2VsID0gc2Vzc2lvbi5tdWx0aVNlbGVj
dDsKKyAgICAgICAgdmFyIGFsbCA9IHNlbC5yYW5nZXM7CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IGFsbC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBhbGxbaV07Cisg
ICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRt
cCA9IHNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29s
dW1uKTsKKyAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93Owor
ICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRtcC5zdGFydC5jb2x1bW47Cisg
ICAgICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IHRtcC5lbmQucm93OworICAgICAgICAgICAg
ICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0bXAuZW5kLmNvbHVtbjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzZWwubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpOworCisgICAgICAg
IHZhciB3b3JkcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyAp
IHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTsKKyAgICAgICAgICAgIHdvcmRzLnVu
c2hpZnQoc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkaXIgPCAwKQorICAgICAgICAgICAgd29yZHMudW5zaGlmdCh3b3Jkcy5wb3AoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdvcmRzLnB1c2god29yZHMuc2hpZnQoKSk7CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICB2YXIg
cmFuZ2UgPSBhbGxbaV07CisgICAgICAgICAgICB2YXIgdG1wID0gcmFuZ2UuY2xvbmUoKTsKKyAg
ICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShyYW5nZSwgd29yZHNbaV0pOworICAgICAgICAgICAg
cmFuZ2Uuc3RhcnQucm93ID0gdG1wLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0
LmNvbHVtbiA9IHRtcC5zdGFydC5jb2x1bW47CisgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMu
c2VsZWN0TW9yZSA9IGZ1bmN0aW9uKGRpciwgc2tpcCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9
IHRoaXMuc2Vzc2lvbjsKKyAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisK
KyAgICAgICAgdmFyIHJhbmdlID0gc2VsLnRvT3JpZW50ZWRSYW5nZSgpOworICAgICAgICBpZiAo
cmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldFdv
cmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CisgICAgICAgICAg
ICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7CisgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0
LmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmVlZGxlID0gc2Vzc2lv
bi5nZXRUZXh0UmFuZ2UocmFuZ2UpOworCisgICAgICAgIHZhciBuZXdSYW5nZSA9IGZpbmQoc2Vz
c2lvbiwgbmVlZGxlLCBkaXIpOworICAgICAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgICAg
IG5ld1JhbmdlLmN1cnNvciA9IGRpciA9PSAtMSA/IG5ld1JhbmdlLnN0YXJ0IDogbmV3UmFuZ2Uu
ZW5kOworICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShuZXdSYW5nZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHNraXApCisgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0
LnN1YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7CisgICAgfTsKKyAgICB0aGlzLmFsaWduQ3Vy
c29ycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsK
KyAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7CisgICAgICAgIHZhciByYW5n
ZXMgPSBzZWwucmFuZ2VzOworCisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeworICAgICAg
ICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKKyAgICAgICAgICAg
IHZhciBmciA9IHJhbmdlLnN0YXJ0LnJvdywgbHIgPSByYW5nZS5lbmQucm93OworICAgICAgICAg
ICAgdmFyIGxpbmVzID0gdGhpcy5zZXNzaW9uLmRvYy5yZW1vdmVMaW5lcyhmciwgbHIpOworICAg
ICAgICAgICAgbGluZXMgPSB0aGlzLiRyZUFsaWduVGV4dChsaW5lcyk7CisgICAgICAgICAgICB0
aGlzLnNlc3Npb24uZG9jLmluc2VydExpbmVzKGZyLCBsaW5lcyk7CisgICAgICAgICAgICByYW5n
ZS5zdGFydC5jb2x1bW4gPSAwOworICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmVz
W2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNl
dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciByb3cgPSAt
MTsKKyAgICAgICAgICAgIHZhciBzYW1lUm93UmFuZ2VzID0gcmFuZ2VzLmZpbHRlcihmdW5jdGlv
bihyKSB7CisgICAgICAgICAgICAgICAgaWYgKHIuY3Vyc29yLnJvdyA9PSByb3cpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJvdyA9IHIuY3Vyc29y
LnJvdzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2VsLiRvblJlbW92ZVJhbmdlKHNh
bWVSb3dSYW5nZXMpOworCisgICAgICAgICAgICB2YXIgbWF4Q29sID0gMDsKKyAgICAgICAgICAg
IHZhciBtaW5TcGFjZSA9IEluZmluaXR5OworICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0cyA9
IHJhbmdlcy5tYXAoZnVuY3Rpb24ocikgeworICAgICAgICAgICAgICAgIHZhciBwID0gci5jdXJz
b3I7CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocC5yb3cpOwor
ICAgICAgICAgICAgICAgIHZhciBzcGFjZU9mZnNldCA9IGxpbmUuc3Vic3RyKHAuY29sdW1uKS5z
ZWFyY2goL1xTL2cpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA9PSAtMSkKKyAg
ICAgICAgICAgICAgICAgICAgc3BhY2VPZmZzZXQgPSAwOworCisgICAgICAgICAgICAgICAgaWYg
KHAuY29sdW1uID4gbWF4Q29sKQorICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBwLmNvbHVt
bjsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPCBtaW5TcGFjZSkKKyAgICAgICAg
ICAgICAgICAgICAgbWluU3BhY2UgPSBzcGFjZU9mZnNldDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3BhY2VPZmZzZXQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJhbmdlcy5mb3JF
YWNoKGZ1bmN0aW9uKHIsIGkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOwor
ICAgICAgICAgICAgICAgIHZhciBsID0gbWF4Q29sIC0gcC5jb2x1bW47CisgICAgICAgICAgICAg
ICAgdmFyIGQgPSBzcGFjZU9mZnNldHNbaV0gLSBtaW5TcGFjZTsKKyAgICAgICAgICAgICAgICBp
ZiAobCA+IGQpCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uaW5zZXJ0KHAsIGxhbmcuc3Ry
aW5nUmVwZWF0KCIgIiwgbCAtIGQpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShwLnJvdywgcC5jb2x1bW4sIHAucm93
LCBwLmNvbHVtbiAtIGwgKyBkKSk7CisKKyAgICAgICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiA9
IHIuZW5kLmNvbHVtbiA9IG1heENvbDsKKyAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyA9IHIu
ZW5kLnJvdyA9IHAucm93OworICAgICAgICAgICAgICAgIHIuY3Vyc29yID0gci5lbmQ7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbMF0p
OworICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTsKKyAgICAgICAgICAg
IHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0aGlzLiRyZUFsaWduVGV4dCA9IGZ1bmN0aW9uKGxpbmVzKSB7CisgICAgICAgIHZhciBp
c0xlZnRBbGlnbmVkID0gdHJ1ZSwgaXNSaWdodEFsaWduZWQgPSB0cnVlOworICAgICAgICB2YXIg
c3RhcnRXLCB0ZXh0VywgZW5kVzsKKworICAgICAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9u
KGxpbmUpIHsKKyAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaCgvKFxzKikoLio/KShccyop
KFs9Ol0uKikvKTsKKyAgICAgICAgICAgIGlmICghbSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
W2xpbmVdOworCisgICAgICAgICAgICBpZiAoc3RhcnRXID09IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICBzdGFydFcgPSBtWzFdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0u
bGVuZ3RoOworICAgICAgICAgICAgICAgIGVuZFcgPSBtWzNdLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXJ0VyAr
IHRleHRXICsgZW5kVyAhPSBtWzFdLmxlbmd0aCArIG1bMl0ubGVuZ3RoICsgbVszXS5sZW5ndGgp
CisgICAgICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChzdGFydFcgIT0gbVsxXS5sZW5ndGgpCisgICAgICAgICAgICAgICAgaXNMZWZ0QWxpZ25lZCA9
IGZhbHNlOworCisgICAgICAgICAgICBpZiAoc3RhcnRXID4gbVsxXS5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7CisgICAgICAgICAgICBpZiAodGV4dFcgPCBt
WzJdLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoOworICAgICAg
ICAgICAgaWYgKGVuZFcgPiBtWzNdLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBlbmRXID0gbVsz
XS5sZW5ndGg7CisKKyAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICB9KS5tYXAoaXNMZWZ0
QWxpZ25lZCA/IGlzUmlnaHRBbGlnbmVkID8gYWxpZ25SaWdodCA6IGFsaWduTGVmdCA6IHVuQWxp
Z24pOworCisgICAgICAgIGZ1bmN0aW9uIHNwYWNlcyhuKSB7CisgICAgICAgICAgICByZXR1cm4g
bGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBuKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGFsaWduTGVmdChtKSB7CisgICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2Vz
KHN0YXJ0VykgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBzcGFjZXModGV4dFcgLSBtWzJdLmxl
bmd0aCArIGVuZFcpCisgICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysv
LCAiJDEgIikKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBhbGlnblJpZ2h0KG0pIHsKKyAg
ICAgICAgICAgIHJldHVybiAhbVsyXSA/IG1bMF0gOiBzcGFjZXMoc3RhcnRXICsgdGV4dFcgLSBt
WzJdLmxlbmd0aCkgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBzcGFjZXMoZW5kVywgIiAiKQor
ICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpCisgICAg
ICAgIH0KKyAgICAgICAgZnVuY3Rpb24gdW5BbGlnbihtKSB7CisgICAgICAgICAgICByZXR1cm4g
IW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VykgKyBtWzJdCisgICAgICAgICAgICAgICAgKyBz
cGFjZXMoZW5kVykKKyAgICAgICAgICAgICAgICArIG1bNF0ucmVwbGFjZSgvXihbPTpdKVxzKy8s
ICIkMSAiKQorICAgICAgICB9CisgICAgfQorfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKKwor
CitmdW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIpIHsKKyAgICByZXR1cm4gcDEucm93ID09IHAy
LnJvdyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1uOworfQorZXhwb3J0cy5vblNlc3Npb25DaGFu
Z2UgPSBmdW5jdGlvbihlKSB7CisgICAgdmFyIHNlc3Npb24gPSBlLnNlc3Npb247CisgICAgaWYg
KCFzZXNzaW9uLm11bHRpU2VsZWN0KSB7CisgICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtl
cnMgPSBbXTsKKyAgICAgICAgc2Vzc2lvbi5zZWxlY3Rpb24uJGluaXRSYW5nZUxpc3QoKTsKKyAg
ICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdCA9IHNlc3Npb24uc2VsZWN0aW9uOworICAgIH0KKyAg
ICB0aGlzLm11bHRpU2VsZWN0ID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsKKworICAgIHZhciBvbGRT
ZXNzaW9uID0gZS5vbGRTZXNzaW9uOworICAgIGlmIChvbGRTZXNzaW9uKSB7CisgICAgICAgIGlm
IChvbGRTZXNzaW9uLm11bHRpU2VsZWN0ICYmIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QuZWRpdG9y
ID09IHRoaXMpCisgICAgICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0LmVkaXRvciA9IG51
bGw7CisKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJh
ZGRSYW5nZSIsIHRoaXMuJG9uQWRkUmFuZ2UpOworICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlbW92ZVJhbmdlIiwgdGhpcy4kb25SZW1vdmVSYW5nZSk7
CisgICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibXVsdGlT
ZWxlY3QiLCB0aGlzLiRvbk11bHRpU2VsZWN0KTsKKyAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVj
dC5yZW1vdmVFdmVudExpc3RlbmVyKCJzaW5nbGVTZWxlY3QiLCB0aGlzLiRvblNpbmdsZVNlbGVj
dCk7CisgICAgfQorCisgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigiYWRkUmFuZ2UiLCB0aGlz
LiRvbkFkZFJhbmdlKTsKKyAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJyZW1vdmVSYW5nZSIs
IHRoaXMuJG9uUmVtb3ZlUmFuZ2UpOworICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oIm11bHRp
U2VsZWN0IiwgdGhpcy4kb25NdWx0aVNlbGVjdCk7CisgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5v
bigic2luZ2xlU2VsZWN0IiwgdGhpcy4kb25TaW5nbGVTZWxlY3QpOworCisgICAgaWYgKHRoaXMu
aW5NdWx0aVNlbGVjdE1vZGUgIT0gc2Vzc2lvbi5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUp
IHsKKyAgICAgICAgaWYgKHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKQorICAg
ICAgICAgICAgdGhpcy4kb25NdWx0aVNlbGVjdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLiRvblNpbmdsZVNlbGVjdCgpOworICAgIH0KK307CitmdW5jdGlvbiBNdWx0aVNlbGVj
dChlZGl0b3IpIHsKKyAgICBlZGl0b3IuJG9uQWRkUmFuZ2UgPSBlZGl0b3IuJG9uQWRkUmFuZ2Uu
YmluZChlZGl0b3IpOworICAgIGVkaXRvci4kb25SZW1vdmVSYW5nZSA9IGVkaXRvci4kb25SZW1v
dmVSYW5nZS5iaW5kKGVkaXRvcik7CisgICAgZWRpdG9yLiRvbk11bHRpU2VsZWN0ID0gZWRpdG9y
LiRvbk11bHRpU2VsZWN0LmJpbmQoZWRpdG9yKTsKKyAgICBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0
ID0gZWRpdG9yLiRvblNpbmdsZVNlbGVjdC5iaW5kKGVkaXRvcik7CisKKyAgICBleHBvcnRzLm9u
U2Vzc2lvbkNoYW5nZS5jYWxsKGVkaXRvciwgZWRpdG9yKTsKKyAgICBlZGl0b3Iub24oImNoYW5n
ZVNlc3Npb24iLCBleHBvcnRzLm9uU2Vzc2lvbkNoYW5nZS5iaW5kKGVkaXRvcikpOworCisgICAg
ZWRpdG9yLm9uKCJtb3VzZWRvd24iLCBvbk1vdXNlRG93bik7CisgICAgZWRpdG9yLmNvbW1hbmRz
LmFkZENvbW1hbmRzKGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcyk7CisKKyAgICBhZGRBbHRDdXJz
b3JMaXN0ZW5lcnMoZWRpdG9yKTsKK30KKworZnVuY3Rpb24gYWRkQWx0Q3Vyc29yTGlzdGVuZXJz
KGVkaXRvcil7CisgICAgdmFyIGVsID0gZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCk7Cisg
ICAgdmFyIGFsdEN1cnNvciA9IGZhbHNlOworICAgIHZhciBjb250ZW50RWwgPSBlZGl0b3IucmVu
ZGVyZXIuY29udGVudDsKKyAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBmdW5j
dGlvbihlKSB7CisgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTggJiYgIShlLmN0cmxLZXkgfHwg
ZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkpKSB7CisgICAgICAgICAgICBpZiAoIWFsdEN1cnNvcikg
eworICAgICAgICAgICAgICAgIGNvbnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiY3Jvc3NoYWlyIjsK
KyAgICAgICAgICAgICAgICBhbHRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKGFsdEN1cnNvcikgeworICAgICAgICAgICAgY29udGVudEVsLnN0eWxlLmN1
cnNvciA9ICIiOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBldmVudC5hZGRMaXN0ZW5lcihl
bCwgImtleXVwIiwgcmVzZXQpOworICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCAiYmx1ciIsIHJl
c2V0KTsKKyAgICBmdW5jdGlvbiByZXNldCgpIHsKKyAgICAgICAgaWYgKGFsdEN1cnNvcikgewor
ICAgICAgICAgICAgY29udGVudEVsLnN0eWxlLmN1cnNvciA9ICIiOworICAgICAgICAgICAgYWx0
Q3Vyc29yID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2V4cG9ydHMuTXVsdGlTZWxl
Y3QgPSBNdWx0aVNlbGVjdDsKKworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9yYW5nZV9saXN0Jywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCisKK3ZhciBSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnJhbmdlcyA9IFtdOworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29tcGFyZVBv
aW50cyA9IGZ1bmN0aW9uKHAxLCBwMikgeworICAgICAgICByZXR1cm4gcDEucm93IC0gcDIucm93
IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKKyAgICB9OworCisgICAgdGhpcy5wb2ludEluZGV4
ID0gZnVuY3Rpb24ocG9zLCBzdGFydEluZGV4KSB7CisgICAgICAgIHZhciBsaXN0ID0gdGhpcy5y
YW5nZXM7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMDsgaSA8IGxpc3Qu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IGxpc3RbaV07CisgICAgICAg
ICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlUG9pbnRzKHBvcywgcmFuZ2UuZW5kKTsKKworICAg
ICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoY21wID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAg
ICBjbXAgPSB0aGlzLmNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5zdGFydCk7CisgICAgICAgICAg
ICBpZiAoY21wID49IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICAgICAgICAg
IHJldHVybiAtaS0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtaSAtIDE7CisgICAgfTsK
KworICAgIHRoaXMuYWRkID0gZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHN0YXJ0SW5k
ZXggPSB0aGlzLnBvaW50SW5kZXgocmFuZ2Uuc3RhcnQpOworICAgICAgICBpZiAoc3RhcnRJbmRl
eCA8IDApCisgICAgICAgICAgICBzdGFydEluZGV4ID0gLXN0YXJ0SW5kZXggLSAxOworCisgICAg
ICAgIHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleChyYW5nZS5lbmQsIHN0YXJ0SW5kZXgp
OworCisgICAgICAgIGlmIChlbmRJbmRleCA8IDApCisgICAgICAgICAgICBlbmRJbmRleCA9IC1l
bmRJbmRleCAtIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZEluZGV4Kys7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShzdGFydEluZGV4LCBlbmRJbmRleCAtIHN0
YXJ0SW5kZXgsIHJhbmdlKTsKKyAgICB9OworCisgICAgdGhpcy5hZGRMaXN0ID0gZnVuY3Rpb24o
bGlzdCkgeworICAgICAgICB2YXIgcmVtb3ZlZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0g
bGlzdC5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgICAgICByZW1vdmVkLnB1c2guY2FsbChyZW1v
dmVkLCB0aGlzLmFkZChsaXN0W2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbW92
ZWQ7CisgICAgfTsKKworICAgIHRoaXMuc3Vic3RyYWN0UG9pbnQgPSBmdW5jdGlvbihwb3MpIHsK
KyAgICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9zKTsKKworICAgICAgICBpZiAoaSA+
PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShpLCAxKTsKKyAgICB9
OworICAgIHRoaXMubWVyZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSBb
XTsKKyAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlczsKKyAgICAgICAgdmFyIG5leHQgPSBs
aXN0WzBdLCByYW5nZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICByYW5nZSA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gbGlz
dFtpXTsKKyAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmVQb2ludHMocmFuZ2UuZW5k
LCBuZXh0LnN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoY21wID09IDAgJiYgIShyYW5nZS5pc0VtcHR5
KCkgfHwgbmV4dC5pc0VtcHR5KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAodGhpcy5jb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5lbmQpIDwgMCkg
eworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBuZXh0LmVuZC5yb3c7CisgICAgICAg
ICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IG5leHQuZW5kLmNvbHVtbjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICByZW1vdmVk
LnB1c2gobmV4dCk7CisgICAgICAgICAgICBuZXh0ID0gcmFuZ2U7CisgICAgICAgICAgICBpLS07
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKyAgICB9OworCisgICAgdGhp
cy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlz
LnBvaW50SW5kZXgoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pID49IDA7CisgICAgfTsKKwor
ICAgIHRoaXMuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKHBvcykgeworICAgICAgICByZXR1cm4g
dGhpcy5wb2ludEluZGV4KHBvcykgPj0gMDsKKyAgICB9OworCisgICAgdGhpcy5yYW5nZUF0UG9p
bnQgPSBmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9z
KTsKKyAgICAgICAgaWYgKGkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlc1tp
XTsKKyAgICB9OworCisKKyAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVu
ZFJvdykgeworICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOworICAgICAgICBpZiAobGlz
dFswXS5zdGFydC5yb3cgPiBlbmRSb3cgfHwgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLnN0YXJ0LnJv
dyA8IHN0YXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIHZhciBzdGFy
dEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHtyb3c6IHN0YXJ0Um93LCBjb2x1bW46IDB9KTsKKyAg
ICAgICAgaWYgKHN0YXJ0SW5kZXggPCAwKQorICAgICAgICAgICAgc3RhcnRJbmRleCA9IC1zdGFy
dEluZGV4IC0gMTsKKyAgICAgICAgdmFyIGVuZEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHtyb3c6
IGVuZFJvdywgY29sdW1uOiAwfSwgc3RhcnRJbmRleCk7CisgICAgICAgIGlmIChlbmRJbmRleCA8
IDApCisgICAgICAgICAgICBlbmRJbmRleCA9IC1lbmRJbmRleCAtIDE7CisKKyAgICAgICAgdmFy
IGNsaXBwZWQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJ
bmRleDsgaSsrKSB7CisgICAgICAgICAgICBjbGlwcGVkLnB1c2gobGlzdFtpXSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGNsaXBwZWQ7CisgICAgfTsKKworICAgIHRoaXMucmVtb3ZlQWxs
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2UoMCwgdGhp
cy5yYW5nZXMubGVuZ3RoKTsKKyAgICB9OworCisgICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihz
ZXNzaW9uKSB7CisgICAgICAgIGlmICh0aGlzLnNlc3Npb24pCisgICAgICAgICAgICB0aGlzLmRl
dGFjaCgpOworCisgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgIHRoaXMu
b25DaGFuZ2UgPSB0aGlzLiRvbkNoYW5nZS5iaW5kKHRoaXMpOworCisgICAgICAgIHRoaXMuc2Vz
c2lvbi5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSk7CisgICAgfTsKKworICAgIHRoaXMuZGV0
YWNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5zZXNzaW9uKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTGlzdGVuZXIoJ2NoYW5nZScs
IHRoaXMub25DaGFuZ2UpOworICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsOworICAgIH07CisK
KyAgICB0aGlzLiRvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGNoYW5nZVJh
bmdlID0gZS5kYXRhLnJhbmdlOworICAgICAgICBpZiAoZS5kYXRhLmFjdGlvblswXSA9PSAiaSIp
eworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY2hhbmdlUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAg
ICB2YXIgZW5kID0gY2hhbmdlUmFuZ2UuZW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIGVuZCA9IGNoYW5nZVJhbmdlLnN0YXJ0OworICAgICAgICAgICAgdmFyIHN0YXJ0ID0g
Y2hhbmdlUmFuZ2UuZW5kOworICAgICAgICB9CisgICAgICAgIHZhciBzdGFydFJvdyA9IHN0YXJ0
LnJvdzsKKyAgICAgICAgdmFyIGVuZFJvdyA9IGVuZC5yb3c7CisgICAgICAgIHZhciBsaW5lRGlm
ID0gZW5kUm93IC0gc3RhcnRSb3c7CisKKyAgICAgICAgdmFyIGNvbERpZmYgPSAtc3RhcnQuY29s
dW1uICsgZW5kLmNvbHVtbjsKKyAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzOworCisg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IG47IGkrKykgewor
ICAgICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07CisgICAgICAgICAgICBpZiAoci5lbmQucm93
IDwgc3RhcnRSb3cpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
ci5zdGFydC5yb3cgPiBzdGFydFJvdykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgaWYgKHIuc3RhcnQucm93ID09IHN0YXJ0Um93ICYmIHIuc3RhcnQuY29sdW1uID49IHN0
YXJ0LmNvbHVtbiApIHsKKyAgICAgICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiArPSBjb2xEaWZm
OworICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoci5lbmQucm93ID09IHN0YXJ0Um93ICYmIHIuZW5kLmNvbHVtbiA+
PSAgc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgci5lbmQuY29sdW1uICs9IGNvbERp
ZmY7CisgICAgICAgICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluZURpZiAhPSAwICYmIGkgPCBuKSB7CisgICAg
ICAgICAgICBmb3IgKDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgICAgIHZhciByID0gcmFu
Z2VzW2ldOworICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CisgICAgICAg
ICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9KS5jYWxsKFJhbmdlTGlzdC5wcm90b3R5cGUpOworCitleHBvcnRzLlJhbmdl
TGlzdCA9IFJhbmdlTGlzdDsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW91c2UvbXVsdGlfc2Vs
ZWN0X2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
ZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKK3ZhciBldmVu
dCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworZnVuY3Rpb24gaXNTYW1lUG9pbnQocDEsIHAy
KSB7CisgICAgcmV0dXJuIHAxLnJvdyA9PSBwMi5yb3cgJiYgcDEuY29sdW1uID09IHAyLmNvbHVt
bjsKK30KKworZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgeworICAgIHZhciBldiA9IGUuZG9tRXZl
bnQ7CisgICAgdmFyIGFsdCA9IGV2LmFsdEtleTsKKyAgICB2YXIgc2hpZnQgPSBldi5zaGlmdEtl
eTsKKyAgICB2YXIgY3RybCA9IGUuZ2V0QWNjZWxLZXkoKTsKKyAgICB2YXIgYnV0dG9uID0gZS5n
ZXRCdXR0b24oKTsKKworICAgIGlmIChlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSAmJiBidXR0
b24gPT0gMikgeworICAgICAgICBlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRv
bUV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWN0cmwgJiYg
IWFsdCkgeworICAgICAgICBpZiAoYnV0dG9uID09IDAgJiYgZS5lZGl0b3IuaW5NdWx0aVNlbGVj
dE1vZGUpCisgICAgICAgICAgICBlLmVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CisgICAgdmFy
IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247CisgICAgdmFyIGlzTXVsdGlTZWxlY3QgPSBl
ZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7CisgICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3Np
dGlvbigpOworICAgIHZhciBjdXJzb3IgPSBzZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CisgICAgdmFy
IGluU2VsZWN0aW9uID0gZS5pblNlbGVjdGlvbigpIHx8IChzZWxlY3Rpb24uaXNFbXB0eSgpICYm
IGlzU2FtZVBvaW50KHBvcywgY3Vyc29yKSk7CisKKworICAgIHZhciBtb3VzZVggPSBlLngsIG1v
dXNlWSA9IGUueTsKKyAgICB2YXIgb25Nb3VzZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgbW91c2VYID0gZS5jbGllbnRYOworICAgICAgICBtb3VzZVkgPSBlLmNsaWVudFk7Cisg
ICAgfTsKKworICAgIHZhciBibG9ja1NlbGVjdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
bmV3Q3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3Vz
ZVgsIG1vdXNlWSk7CisgICAgICAgIHZhciBjdXJzb3IgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1l
bnRQb3NpdGlvbihuZXdDdXJzb3Iucm93LCBuZXdDdXJzb3IuY29sdW1uKTsKKworICAgICAgICBp
ZiAoaXNTYW1lUG9pbnQoc2NyZWVuQ3Vyc29yLCBuZXdDdXJzb3IpCisgICAgICAgICAgICAmJiBp
c1NhbWVQb2ludChjdXJzb3IsIHNlbGVjdGlvbi5zZWxlY3Rpb25MZWFkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgc2NyZWVuQ3Vyc29yID0gbmV3Q3Vyc29yOworCisgICAgICAgIGVk
aXRvci5zZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTsKKyAgICAgICAgZWRp
dG9yLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOworICAgICAgICBlZGl0b3IucmVuZGVyZXIu
c2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKKworICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9u
TWFya2VycyhyZWN0U2VsKTsKKyAgICAgICAgcmVjdFNlbCA9IHNlbGVjdGlvbi5yZWN0YW5ndWxh
clJhbmdlQmxvY2soc2NyZWVuQ3Vyc29yLCBzY3JlZW5BbmNob3IpOworICAgICAgICByZWN0U2Vs
LmZvckVhY2goZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlciwgZWRpdG9yKTsKKyAgICAgICAgZWRp
dG9yLnVwZGF0ZVNlbGVjdGlvbk1hcmtlcnMoKTsKKyAgICB9OworICAgIAorICAgIHZhciBzZXNz
aW9uID0gZWRpdG9yLnNlc3Npb247CisgICAgdmFyIHNjcmVlbkFuY2hvciA9IGVkaXRvci5yZW5k
ZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpOworICAgIHZhciBz
Y3JlZW5DdXJzb3IgPSBzY3JlZW5BbmNob3I7CisKKyAgICAKKworICAgIGlmIChjdHJsICYmICFz
aGlmdCAmJiAhYWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgICAgIGlmICghaXNNdWx0aVNlbGVj
dCAmJiBpblNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsgLy8gZHJhZ2dpbmcKKworICAg
ICAgICBpZiAoIWlzTXVsdGlTZWxlY3QpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVj
dGlvbi50b09yaWVudGVkUmFuZ2UoKTsKKyAgICAgICAgICAgIGVkaXRvci5hZGRTZWxlY3Rpb25N
YXJrZXIocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG9sZFJhbmdlID0gc2VsZWN0
aW9uLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocG9zKTsKKworICAgICAgICBldmVudC5jYXB0dXJl
KGVkaXRvci5jb250YWluZXIsIGZ1bmN0aW9uKCl7fSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB2YXIgdG1wU2VsID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpOworCisgICAgICAgICAg
ICBpZiAob2xkUmFuZ2UgJiYgdG1wU2VsLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChvbGRSYW5n
ZS5jdXJzb3IsIHRtcFNlbC5jdXJzb3IpKQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zdWJz
dHJhY3RQb2ludCh0bXBTZWwuY3Vyc29yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2Vs
ZWN0aW9uTWFya2VyKHJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJh
bmdlKHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsZWN0aW9u
LmFkZFJhbmdlKHRtcFNlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgfSBl
bHNlIGlmICghc2hpZnQgJiYgYWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgICAgIGUuc3RvcCgp
OworCisgICAgICAgIGlmIChpc011bHRpU2VsZWN0ICYmICFjdHJsKQorICAgICAgICAgICAgc2Vs
ZWN0aW9uLnRvU2luZ2xlUmFuZ2UoKTsKKyAgICAgICAgZWxzZSBpZiAoIWlzTXVsdGlTZWxlY3Qg
JiYgY3RybCkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSgpOworCisgICAgICAgIHNl
bGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICBzZWxlY3Rpb24uY2xl
YXJTZWxlY3Rpb24oKTsKKworICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOworCisgICAgICAgIHZh
ciBvbk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgY2xlYXJJ
bnRlcnZhbCh0aW1lcklkKTsKKyAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJr
ZXJzKHJlY3RTZWwpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0U2VsLmxl
bmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyZWN0U2VsW2ld
KTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgb25TZWxlY3Rpb25JbnRlcnZhbCA9IGJsb2Nr
U2VsZWN0OworCisgICAgICAgIGV2ZW50LmNhcHR1cmUoZWRpdG9yLmNvbnRhaW5lciwgb25Nb3Vz
ZVNlbGVjdGlvbiwgb25Nb3VzZVNlbGVjdGlvbkVuZCk7CisgICAgICAgIHZhciB0aW1lcklkID0g
c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7b25TZWxlY3Rpb25JbnRlcnZhbCgpO30sIDIwKTsKKwor
ICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK30KKworCitleHBvcnRz
Lm9uTW91c2VEb3duID0gb25Nb3VzZURvd247CisKK30pOworCithY2UuZGVmaW5lKCdhY2UvY29t
bWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgeworZXhwb3J0cy5kZWZhdWx0Q29tbWFuZHMgPSBbeworICAgIG5hbWU6
ICJhZGRDdXJzb3JBYm92ZSIsCisgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5z
ZWxlY3RNb3JlTGluZXMoLTEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1VcCIs
IG1hYzogIkN0cmwtQWx0LVVwIn0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1l
OiAiYWRkQ3Vyc29yQmVsb3ciLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
c2VsZWN0TW9yZUxpbmVzKDEpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1Eb3du
IiwgbWFjOiAiQ3RybC1BbHQtRG93biJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAg
bmFtZTogImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xLCB0cnVlKTsgfSwKKyAgICBiaW5kS2V5
OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtVXAiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1VcCJ9LAor
ICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogImFkZEN1cnNvckJlbG93U2tpcEN1
cnJlbnQiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxp
bmVzKDEsIHRydWUpOyB9LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1Eb3du
IiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtRG93biJ9LAorICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7
CisgICAgbmFtZTogInNlbGVjdE1vcmVCZWZvcmUiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgtMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwt
QWx0LUxlZnQiLCBtYWM6ICJDdHJsLUFsdC1MZWZ0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30s
IHsKKyAgICBuYW1lOiAic2VsZWN0TW9yZUFmdGVyIiwKKyAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoMSk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwt
QWx0LVJpZ2h0IiwgbWFjOiAiQ3RybC1BbHQtUmlnaHQifSwKKyAgICByZWFkb25seTogdHJ1ZQor
fSwgeworICAgIG5hbWU6ICJzZWxlY3ROZXh0QmVmb3JlIiwKKyAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEsIHRydWUpOyB9LAorICAgIGJpbmRLZXk6IHt3
aW46ICJDdHJsLUFsdC1TaGlmdC1MZWZ0IiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtTGVmdCJ9LAor
ICAgIHJlYWRvbmx5OiB0cnVlCit9LCB7CisgICAgbmFtZTogInNlbGVjdE5leHRBZnRlciIsCisg
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEsIHRydWUpOyB9
LAorICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1SaWdodCIsIG1hYzogIkN0cmwt
QWx0LVNoaWZ0LVJpZ2h0In0sCisgICAgcmVhZG9ubHk6IHRydWUKK30sIHsKKyAgICBuYW1lOiAi
c3BsaXRJbnRvTGluZXMiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubXVs
dGlTZWxlY3Quc3BsaXRJbnRvTGluZXMoKTsgfSwKKyAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1B
bHQtTCIsIG1hYzogIkN0cmwtQWx0LUwifSwKKyAgICByZWFkb25seTogdHJ1ZQorfSwgeworICAg
IG5hbWU6ICJhbGlnbkN1cnNvcnMiLAorICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuYWxpZ25DdXJzb3JzKCk7IH0sCisgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUEiLCBt
YWM6ICJDdHJsLUFsdC1BIn0KK31dOworZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzID0gW3sK
KyAgICBuYW1lOiAic2luZ2xlU2VsZWN0aW9uIiwKKyAgICBiaW5kS2V5OiAiZXNjIiwKKyAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsgfSwK
KyAgICByZWFkb25seTogdHJ1ZSwKKyAgICBpc0F2YWlsYWJsZTogZnVuY3Rpb24oZWRpdG9yKSB7
cmV0dXJuIGVkaXRvciAmJiBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGV9Cit9XTsKKwordmFyIEhh
c2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRs
ZXI7CitleHBvcnRzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcihleHBvcnRzLm11
bHRpU2VsZWN0Q29tbWFuZHMpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL3dvcmtlci93b3Jr
ZXJfY2xpZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29v
cCIpOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIiku
RXZlbnRFbWl0dGVyOwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOworCit2YXIg
V29ya2VyQ2xpZW50ID0gZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNsYXNzbmFt
ZSkgeworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQo
dGhpcyk7CisgICAgdGhpcy5vbk1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpOwor
ICAgIHRoaXMub25FcnJvciA9IHRoaXMub25FcnJvci5iaW5kKHRoaXMpOworCisgICAgdmFyIHdv
cmtlclVybDsKKyAgICBpZiAoY29uZmlnLmdldCgicGFja2FnZWQiKSkgeworICAgICAgICB3b3Jr
ZXJVcmwgPSBjb25maWcubW9kdWxlVXJsKG1vZCwgIndvcmtlciIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBub3JtYWxpemVQYXRoID0gdGhpcy4kbm9ybWFsaXplUGF0aDsKKyAgICAgICAg
aWYgKHR5cGVvZiByZXF1aXJlLnN1cHBvcnRzICE9PSAidW5kZWZpbmVkIiAmJiByZXF1aXJlLnN1
cHBvcnRzLmluZGV4T2YoInVjanMyLXBpbmYtMCIpID49IDApIHsKKyAgICAgICAgICAgIHdvcmtl
clVybCA9IHJlcXVpcmUubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlcl9zb3VyY2VtaW50Iik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocmVxdWlyZS5uYW1lVG9VcmwgJiYg
IXJlcXVpcmUudG9VcmwpCisgICAgICAgICAgICAgICAgcmVxdWlyZS50b1VybCA9IHJlcXVpcmUu
bmFtZVRvVXJsOworICAgICAgICAgICAgd29ya2VyVXJsID0gbm9ybWFsaXplUGF0aChyZXF1aXJl
LnRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsIG51bGwsICJfIikpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHRsbnMgPSB7fTsKKyAgICAgICAgdG9wTGV2ZWxOYW1lc3BhY2VzLmZvckVhY2go
ZnVuY3Rpb24obnMpIHsKKyAgICAgICAgICAgIHRsbnNbbnNdID0gbm9ybWFsaXplUGF0aChyZXF1
aXJlLnRvVXJsKG5zLCBudWxsLCAiXyIpLnJlcGxhY2UoLy5qcyhcPy4qKT8kLywgIiIpKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy4kd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJV
cmwpOworICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7CisgICAgICAgIGluaXQgOiB0cnVl
LAorICAgICAgICB0bG5zOiB0bG5zLAorICAgICAgICBtb2R1bGU6IG1vZCwKKyAgICAgICAgY2xh
c3NuYW1lOiBjbGFzc25hbWUKKyAgICB9KTsKKworICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7Cisg
ICAgdGhpcy5jYWxsYmFja3MgPSB7fTsKKworICAgIHRoaXMuJHdvcmtlci5vbmVycm9yID0gdGhp
cy5vbkVycm9yOworICAgIHRoaXMuJHdvcmtlci5vbm1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZTsK
K307CisKKyhmdW5jdGlvbigpeworCisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOworCisgICAgdGhpcy5vbkVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICB3aW5kb3cu
Y29uc29sZSAmJiBjb25zb2xlLmxvZyAmJiBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgdGhyb3cg
ZTsKKyAgICB9OworCisgICAgdGhpcy5vbk1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
IHZhciBtc2cgPSBlLmRhdGE7CisgICAgICAgIHN3aXRjaChtc2cudHlwZSkgeworICAgICAgICAg
ICAgY2FzZSAibG9nIjoKKyAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xl
LmxvZyAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBtc2cuZGF0YSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgImV2ZW50IjoKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lbWl0KG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAiY2FsbCI6CisgICAgICAgICAgICAgICAgdmFy
IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobXNnLmRhdGEpOworICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGhpcy4kbm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbi5ob3N0KSAvLyBuZWVkZWQgZm9yIGZpbGU6Ly8gcHJvdG9jb2wKKyAgICAgICAgICAg
IHJldHVybiBwYXRoOworICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eW2Etel0rOlwvXC9b
XlwvXSsvLCAiIik7IC8vIFJlbW92ZSBkb21haW4gbmFtZSBhbmQgcmVidWlsZCBpdAorICAgICAg
ICBwYXRoID0gbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICsgbG9jYXRpb24uaG9zdAorICAgICAg
ICAgICAgKyAocGF0aC5jaGFyQXQoMCkgPT0gIi8iID8gIiIgOiBsb2NhdGlvbi5wYXRobmFtZS5y
ZXBsYWNlKC9cL1teXC9dKiQvLCAiIikpCisgICAgICAgICAgICArICIvIiArIHBhdGgucmVwbGFj
ZSgvXltcL10rLywgIiIpOworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9OworCisgICAgdGhp
cy50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5fZW1pdCgidGVybWluYXRl
Iiwge30pOworICAgICAgICB0aGlzLiR3b3JrZXIudGVybWluYXRlKCk7CisgICAgICAgIHRoaXMu
JHdvcmtlciA9IG51bGw7CisgICAgICAgIHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2UiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKKyAgICAgICAgdGhpcy4kZG9jID0gbnVsbDsK
KyAgICB9OworCisgICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7CisgICAgICAg
IHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDogY21kLCBhcmdzOiBhcmdzfSk7Cisg
ICAgfTsKKworICAgIHRoaXMuY2FsbCA9IGZ1bmN0aW9uKGNtZCwgYXJncywgY2FsbGJhY2spIHsK
KyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmNhbGxi
YWNrSWQrKzsKKyAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrOworICAg
ICAgICAgICAgYXJncy5wdXNoKGlkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNlbmQoY21k
LCBhcmdzKTsKKyAgICB9OworCisgICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24oZXZlbnQsIGRhdGEp
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7
ZXZlbnQ6IGV2ZW50LCBkYXRhOiB7ZGF0YTogZGF0YS5kYXRhfX0pOworICAgICAgICB9CisgICAg
ICAgIGNhdGNoKGV4KSB7fQorICAgIH07CisKKyAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBm
dW5jdGlvbihkb2MpIHsKKyAgICAgICAgaWYodGhpcy4kZG9jKQorICAgICAgICAgICAgdGhpcy50
ZXJtaW5hdGUoKTsKKworICAgICAgICB0aGlzLiRkb2MgPSBkb2M7CisgICAgICAgIHRoaXMuY2Fs
bCgic2V0VmFsdWUiLCBbZG9jLmdldFZhbHVlKCldKTsKKyAgICAgICAgZG9jLm9uKCJjaGFuZ2Ui
LCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKKyAgICB9OworCisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5l
ciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5yYW5nZSA9IHsKKyAgICAgICAgICAgIHN0YXJ0
OiBlLmRhdGEucmFuZ2Uuc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGUuZGF0YS5yYW5nZS5lbmQK
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5lbWl0KCJjaGFuZ2UiLCBlKTsKKyAgICB9OworCit9
KS5jYWxsKFdvcmtlckNsaWVudC5wcm90b3R5cGUpOworCisKK3ZhciBVSVdvcmtlckNsaWVudCA9
IGZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKKyAgICB0aGlz
LmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOworICAgIHRo
aXMuY2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLm1l
c3NhZ2VCdWZmZXIgPSBbXTsKKworICAgIHZhciBtYWluID0gbnVsbDsKKyAgICB2YXIgc2VuZGVy
ID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIpOworICAgIHZhciBfc2VsZiA9IHRoaXM7CisK
KyAgICB0aGlzLiR3b3JrZXIgPSB7fQorICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpOworICAgICAg
ICBtYWluICYmIHNldFRpbWVvdXQocHJvY2Vzc05leHQpOworICAgIH07CisKKyAgICB2YXIgcHJv
Y2Vzc05leHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG1zZyA9IF9zZWxmLm1lc3NhZ2VC
dWZmZXIuc2hpZnQoKTsKKyAgICAgICAgaWYgKG1zZy5jb21tYW5kKQorICAgICAgICAgICAgbWFp
blttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOworICAgICAgICBlbHNlIGlmICht
c2cuZXZlbnQpCisgICAgICAgICAgICBzZW5kZXIuX2VtaXQobXNnLmV2ZW50LCBtc2cuZGF0YSk7
CisgICAgfTsKKworICAgIHNlbmRlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgeworICAg
ICAgICBfc2VsZi5vbk1lc3NhZ2Uoe2RhdGE6IG1zZ30pOworICAgIH07CisgICAgc2VuZGVyLmNh
bGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgeworICAgICAgICB0aGlzLnBvc3RN
ZXNzYWdlKHt0eXBlOiAiY2FsbCIsIGlkOiBjYWxsYmFja0lkLCBkYXRhOiBkYXRhfSk7CisgICAg
fTsKKyAgICBzZW5kZXIuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKKyAgICAgICAgdGhp
cy5wb3N0TWVzc2FnZSh7dHlwZTogImV2ZW50IiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pOwor
ICAgIH07CisKKyAgICByZXF1aXJlKFttb2RdLCBmdW5jdGlvbihNYWluKSB7CisgICAgICAgIG1h
aW4gPSBuZXcgTWFpbltjbGFzc25hbWVdKHNlbmRlcik7CisgICAgICAgIHdoaWxlIChfc2VsZi5t
ZXNzYWdlQnVmZmVyLmxlbmd0aCkKKyAgICAgICAgICAgIHByb2Nlc3NOZXh0KCk7CisgICAgfSk7
Cit9OworCitVSVdvcmtlckNsaWVudC5wcm90b3R5cGUgPSBXb3JrZXJDbGllbnQucHJvdG90eXBl
OworCitleHBvcnRzLlVJV29ya2VyQ2xpZW50ID0gVUlXb3JrZXJDbGllbnQ7CitleHBvcnRzLldv
cmtlckNsaWVudCA9IFdvcmtlckNsaWVudDsKKworfSk7CithY2UuZGVmaW5lKCdhY2UvcGxhY2Vo
b2xkZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZScsICdh
Y2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2xpYi9vb3AnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJh
bmdlOwordmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5F
dmVudEVtaXR0ZXI7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CisKK3ZhciBQbGFj
ZUhvbGRlciA9IGZ1bmN0aW9uKHNlc3Npb24sIGxlbmd0aCwgcG9zLCBvdGhlcnMsIG1haW5DbGFz
cywgb3RoZXJzQ2xhc3MpIHsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOworICAgIHRoaXMubGVuZ3Ro
ID0gbGVuZ3RoOworICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CisgICAgdGhpcy5kb2MgPSBz
ZXNzaW9uLmdldERvY3VtZW50KCk7CisgICAgdGhpcy5tYWluQ2xhc3MgPSBtYWluQ2xhc3M7Cisg
ICAgdGhpcy5vdGhlcnNDbGFzcyA9IG90aGVyc0NsYXNzOworICAgIHRoaXMuJG9uVXBkYXRlID0g
dGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpOworICAgIHRoaXMuZG9jLm9uKCJjaGFuZ2UiLCB0aGlz
LiRvblVwZGF0ZSk7CisgICAgdGhpcy4kb3RoZXJzID0gb3RoZXJzOworICAgIAorICAgIHRoaXMu
JG9uQ3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBfc2VsZi5vbkN1cnNvckNoYW5nZSgpOworICAgICAgICB9KTsK
KyAgICB9OworICAgIAorICAgIHRoaXMuJHBvcyA9IHBvczsKKyAgICB2YXIgdW5kb1N0YWNrID0g
c2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLiR1bmRvU3RhY2sgfHwgc2Vzc2lvbi5nZXRVbmRvTWFu
YWdlcigpLiR1bmRvc3RhY2sgfHwge2xlbmd0aDogLTF9OworICAgIHRoaXMuJHVuZG9TdGFja0Rl
cHRoID0gIHVuZG9TdGFjay5sZW5ndGg7CisgICAgdGhpcy5zZXR1cCgpOworCisgICAgc2Vzc2lv
bi5zZWxlY3Rpb24ub24oImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKK307
CisKKyhmdW5jdGlvbigpIHsKKworICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVy
KTsKKyAgICB0aGlzLnNldHVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBfc2VsZiA9IHRo
aXM7CisgICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKKyAgICAgICAgdmFyIHNlc3Npb24gPSB0
aGlzLnNlc3Npb247CisgICAgICAgIHZhciBwb3MgPSB0aGlzLiRwb3M7CisKKyAgICAgICAgdGhp
cy5wb3MgPSBkb2MuY3JlYXRlQW5jaG9yKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgICAgICB0
aGlzLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKHBvcy5yb3csIHBvcy5j
b2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4gKyB0aGlzLmxlbmd0aCksIHRoaXMubWFpbkNsYXNz
LCBudWxsLCBmYWxzZSk7CisgICAgICAgIHRoaXMucG9zLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoX3NlbGYubWFya2VySWQp
OworICAgICAgICAgICAgX3NlbGYubWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFu
Z2UoZXZlbnQudmFsdWUucm93LCBldmVudC52YWx1ZS5jb2x1bW4sIGV2ZW50LnZhbHVlLnJvdywg
ZXZlbnQudmFsdWUuY29sdW1uK19zZWxmLmxlbmd0aCksIF9zZWxmLm1haW5DbGFzcywgbnVsbCwg
ZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5vdGhlcnMgPSBbXTsKKyAgICAgICAg
dGhpcy4kb3RoZXJzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHsKKyAgICAgICAgICAgIHZhciBh
bmNob3IgPSBkb2MuY3JlYXRlQW5jaG9yKG90aGVyLnJvdywgb3RoZXIuY29sdW1uKTsKKyAgICAg
ICAgICAgIF9zZWxmLm90aGVycy5wdXNoKGFuY2hvcik7CisgICAgICAgIH0pOworICAgICAgICBz
ZXNzaW9uLnNldFVuZG9TZWxlY3QoZmFsc2UpOworICAgIH07CisgICAgdGhpcy5zaG93T3RoZXJN
YXJrZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmKHRoaXMub3RoZXJzQWN0aXZlKSByZXR1
cm47CisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOworICAgICAgICB2YXIgX3Nl
bGYgPSB0aGlzOworICAgICAgICB0aGlzLm90aGVyc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRo
aXMub3RoZXJzLmZvckVhY2goZnVuY3Rpb24oYW5jaG9yKSB7CisgICAgICAgICAgICBhbmNob3Iu
bWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UoYW5jaG9yLnJvdywgYW5jaG9y
LmNvbHVtbiwgYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbitfc2VsZi5sZW5ndGgpLCBfc2VsZi5v
dGhlcnNDbGFzcywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgYW5jaG9yLm9uKCJjaGFuZ2Ui
LCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2Vy
KGFuY2hvci5tYXJrZXJJZCk7CisgICAgICAgICAgICAgICAgYW5jaG9yLm1hcmtlcklkID0gc2Vz
c2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKGV2ZW50LnZhbHVlLnJvdywgZXZlbnQudmFsdWUuY29s
dW1uLCBldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbitfc2VsZi5sZW5ndGgpLCBf
c2VsZi5vdGhlcnNDbGFzcywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmKCF0aGlzLm90aGVyc0FjdGl2ZSkgcmV0dXJuOworICAgICAgICB0aGlzLm90aGVy
c0FjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRo
aXMub3RoZXJzW2ldLm1hcmtlcklkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5vblVw
ZGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBkZWx0YSA9IGV2ZW50LmRhdGE7
CisgICAgICAgIHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOworICAgICAgICBpZihyYW5nZS5zdGFy
dC5yb3cgIT09IHJhbmdlLmVuZC5yb3cpIHJldHVybjsKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQu
cm93ICE9PSB0aGlzLnBvcy5yb3cpIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuJHVwZGF0aW5n
KSByZXR1cm47CisgICAgICAgIHRoaXMuJHVwZGF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGxl
bmd0aERpZmYgPSBkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IiA/IHJhbmdlLmVuZC5jb2x1
bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gOiByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQu
Y29sdW1uOworICAgICAgICAKKyAgICAgICAgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID49IHRoaXMu
cG9zLmNvbHVtbiAmJiByYW5nZS5zdGFydC5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhp
cy5sZW5ndGggKyAxKSB7CisgICAgICAgICAgICB2YXIgZGlzdGFuY2VGcm9tU3RhcnQgPSByYW5n
ZS5zdGFydC5jb2x1bW4gLSB0aGlzLnBvcy5jb2x1bW47CisgICAgICAgICAgICB0aGlzLmxlbmd0
aCArPSBsZW5ndGhEaWZmOworICAgICAgICAgICAgaWYoIXRoaXMuc2Vzc2lvbi4kZnJvbVVuZG8p
IHsKKyAgICAgICAgICAgICAgICBpZihkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0Iikgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsg
aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclBvcyA9IHRo
aXMub3RoZXJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6
IG90aGVyUG9zLnJvdywgY29sdW1uOiBvdGhlclBvcy5jb2x1bW4gKyBkaXN0YW5jZUZyb21TdGFy
dH07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihvdGhlclBvcy5yb3cgPT09IHJhbmdlLnN0
YXJ0LnJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBvdGhlclBvcy5jb2x1bW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3UG9zLmNvbHVtbiArPSBsZW5ndGhEaWZmOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kb2MuaW5zZXJ0KG5ld1BvcywgZGVsdGEudGV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZGVsdGEuYWN0
aW9uID09PSAicmVtb3ZlVGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgb3RoZXJQb3MgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3Mu
Y29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9OworICAgICAgICAgICAgICAgICAgICAgICAgaWYo
b3RoZXJQb3Mucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDwg
b3RoZXJQb3MuY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Bvcy5jb2x1
bW4gKz0gbGVuZ3RoRGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92
ZShuZXcgUmFuZ2UobmV3UG9zLnJvdywgbmV3UG9zLmNvbHVtbiwgbmV3UG9zLnJvdywgbmV3UG9z
LmNvbHVtbiAtIGxlbmd0aERpZmYpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihyYW5nZS5zdGFydC5jb2x1bW4gPT09IHRoaXMu
cG9zLmNvbHVtbiAmJiBkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IikgeworICAgICAgICAg
ICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5wb3Muc2V0UG9zaXRpb24odGhpcy5wb3Mucm93LCB0aGlzLnBvcy5jb2x1bW4gLSBs
ZW5ndGhEaWZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3RoZXIgPSB0aGlzLm90aGVyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3UG9zID0ge3Jvdzogb3RoZXIucm93LCBjb2x1bW46IG90aGVyLmNvbHVtbiAtIGxlbmd0
aERpZmZ9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyLnJvdyA9PT0gcmFu
Z2Uuc3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyLmNvbHVtbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zLmNvbHVtbiArPSBsZW5ndGhEaWZmOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLnNldFBvc2l0aW9uKG5ld1Bvcy5yb3cs
IG5ld1Bvcy5jb2x1bW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5wb3MuY29sdW1uICYmIGRl
bHRhLmFjdGlvbiA9PT0gInJlbW92ZVRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG90aGVyID0gdGhpcy5vdGhlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYob3RoZXIucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29s
dW1uIDwgb3RoZXIuY29sdW1uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90
aGVyLnNldFBvc2l0aW9uKG90aGVyLnJvdywgb3RoZXIuY29sdW1uIC0gbGVuZ3RoRGlmZik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucG9zLl9lbWl0KCJjaGFuZ2UiLCB7dmFs
dWU6IHRoaXMucG9zfSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3Ro
ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vdGhlcnNbaV0uX2VtaXQo
ImNoYW5nZSIsIHt2YWx1ZTogdGhpcy5vdGhlcnNbaV19KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlOworICAgIH07CisKKyAgICB0aGlz
Lm9uQ3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuJHVw
ZGF0aW5nKSByZXR1cm47CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9u
LmdldEN1cnNvcigpOworICAgICAgICBpZihwb3Mucm93ID09PSB0aGlzLnBvcy5yb3cgJiYgcG9z
LmNvbHVtbiA+PSB0aGlzLnBvcy5jb2x1bW4gJiYgcG9zLmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1
bW4gKyB0aGlzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5zaG93T3RoZXJNYXJrZXJzKCk7
CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjdXJzb3JFbnRlciIsIGV2ZW50KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2VycygpOworICAgICAgICAg
ICAgdGhpcy5fZW1pdCgiY3Vyc29yTGVhdmUiLCBldmVudCk7CisgICAgICAgIH0KKyAgICB9OyAg
ICAKKyAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlc3Npb24u
cmVtb3ZlTWFya2VyKHRoaXMubWFya2VySWQpOworICAgICAgICB0aGlzLmhpZGVPdGhlck1hcmtl
cnMoKTsKKyAgICAgICAgdGhpcy5kb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhp
cy4kb25VcGRhdGUpOworICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLnJlbW92ZUV2ZW50
TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKKyAgICAgICAg
dGhpcy5wb3MuZGV0YWNoKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vdGhl
cnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLmRldGFjaCgpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KHRydWUpOworICAg
IH07CisgICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYodGhpcy4kdW5k
b1N0YWNrRGVwdGggPT09IC0xKQorICAgICAgICAgICAgdGhyb3cgRXJyb3IoIkNhbmNlbGluZyBw
bGFjZWhvbGRlcnMgb25seSBzdXBwb3J0ZWQgd2l0aCB1bmRvIG1hbmFnZXIgYXR0YWNoZWQgdG8g
c2Vzc2lvbi4iKTsKKyAgICAgICAgdmFyIHVuZG9NYW5hZ2VyID0gdGhpcy5zZXNzaW9uLmdldFVu
ZG9NYW5hZ2VyKCk7CisgICAgICAgIHZhciB1bmRvc1JlcXVpcmVkID0gKHVuZG9NYW5hZ2VyLiR1
bmRvU3RhY2sgfHwgdW5kb01hbmFnZXIuJHVuZG9zdGFjaykubGVuZ3RoIC0gdGhpcy4kdW5kb1N0
YWNrRGVwdGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5kb3NSZXF1aXJlZDsgaSsr
KSB7CisgICAgICAgICAgICB1bmRvTWFuYWdlci51bmRvKHRydWUpOworICAgICAgICB9CisgICAg
fTsKK30pLmNhbGwoUGxhY2VIb2xkZXIucHJvdG90eXBlKTsKKworCitleHBvcnRzLlBsYWNlSG9s
ZGVyID0gUGxhY2VIb2xkZXI7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9m
b2xkX21vZGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSdd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgUmFuZ2UgPSBy
ZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOworCit2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZv
bGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5mb2xk
aW5nU3RhcnRNYXJrZXIgPSBudWxsOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBudWxs
OworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwg
cm93KSB7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAg
IGlmICh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKQorICAgICAgICAgICAgcmV0
dXJuICJzdGFydCI7CisgICAgICAgIGlmIChmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIKKyAg
ICAgICAgICAgICAgICAmJiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyCisgICAgICAgICAgICAgICAg
JiYgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGxpbmUpKQorICAgICAgICAgICAgcmV0dXJu
ICJlbmQiOworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdp
ZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIHRoaXMuaW5kZW50YXRpb25CbG9jayA9IGZ1bmN0
aW9uKHNlc3Npb24sIHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciByZSA9IC9cUy87CisgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBzdGFydExl
dmVsID0gbGluZS5zZWFyY2gocmUpOworICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBjb2x1bW4gfHwg
bGluZS5sZW5ndGg7CisgICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwor
ICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CisgICAgICAgIHZhciBlbmRSb3cgPSByb3c7CisK
KyAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CisgICAgICAgICAgICB2YXIgbGV2ZWwg
PSBzZXNzaW9uLmdldExpbmUocm93KS5zZWFyY2gocmUpOworCisgICAgICAgICAgICBpZiAobGV2
ZWwgPT0gLTEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChs
ZXZlbCA8PSBzdGFydExldmVsKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBlbmRSb3cgPSByb3c7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRS
b3cpIHsKKyAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93
KS5sZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENv
bHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIHRoaXMu
b3BlbmluZ0JyYWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29s
dW1uLCB0eXBlUmUpIHsKKyAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNv
bHVtbiArIDF9OworICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi4kZmluZENsb3NpbmdCcmFja2V0
KGJyYWNrZXQsIHN0YXJ0LCB0eXBlUmUpOworICAgICAgICBpZiAoIWVuZCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgZncgPSBzZXNzaW9uLmZvbGRXaWRnZXRzW2VuZC5yb3dd
OworICAgICAgICBpZiAoZncgPT0gbnVsbCkKKyAgICAgICAgICAgIGZ3ID0gdGhpcy5nZXRGb2xk
V2lkZ2V0KHNlc3Npb24sIGVuZC5yb3cpOworCisgICAgICAgIGlmIChmdyA9PSAic3RhcnQiICYm
IGVuZC5yb3cgPiBzdGFydC5yb3cpIHsKKyAgICAgICAgICAgIGVuZC5yb3cgLS07CisgICAgICAg
ICAgICBlbmQuY29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZC5yb3cpLmxlbmd0aDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgZW5kKTsKKyAgICB9
OworCisgICAgdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgYnJh
Y2tldCwgcm93LCBjb2x1bW4sIHR5cGVSZSkgeworICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93
LCBjb2x1bW46IGNvbHVtbn07CisgICAgICAgIHZhciBzdGFydCA9IHNlc3Npb24uJGZpbmRPcGVu
aW5nQnJhY2tldChicmFja2V0LCBlbmQpOworCisgICAgICAgIGlmICghc3RhcnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc3RhcnQuY29sdW1uKys7CisgICAgICAgIGVuZC5jb2x1
bW4tLTsKKworICAgICAgICByZXR1cm4gIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIGVuZCk7Cisg
ICAgfTsKK30pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKKworfSk7Cis7CisgICAgICAgICAg
ICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0s
IGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgYSAmJiBhLmNvbmZpZy5pbml0KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmFjZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5hY2UgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBhY2Vba2V5XSA9IGFba2V5XTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
KCk7CisgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRvb2xzLmNzcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZDY1NDYxMzBiNzk1YTc5YjVmYzYwYWRjODQ4MjlkNGUyZGE1MjVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlZGV2
dG9vbHMuY3NzCkBAIC0wLDAgKzEsNyBAQAorLmFjZV9lZGl0b3IgKiB7CisgICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBjb250ZW50LWJveDsKK30KKworLmFjZS1lZGl0b3ItY29udGFpbmVyIHsKKyAg
ICBoZWlnaHQ6IDEwMCU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3MuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9tb2RlX2Nzcy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMmFlMTJlYjk3NDgyNzExZTMwMTY1OTk4MGEzYzgwMjZjYzE1ZDdkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3Mu
anMKQEAgLTAsMCArMSw3NTEgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioK
KyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4g
bm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcg
Qi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3MnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAn
YWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2Rl
L21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50JywgJ2Fj
ZS9tb2RlL2JlaGF2aW91ci9jc3MnLCAnYWNlL21vZGUvZm9sZGluZy9jc3R5bGUnXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4u
L2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Cit2YXIg
VG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIENzc0hp
Z2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxp
Z2h0UnVsZXM7Cit2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5n
X2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKK3ZhciBXb3JrZXJDbGllbnQg
PSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBD
c3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7Cit2
YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7
CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRv
a2VuaXplcihuZXcgQ3NzSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpLCAiaSIpOworICAgIHRo
aXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKKyAgICB0aGlzLiRiZWhh
dmlvdXIgPSBuZXcgQ3NzQmVoYXZpb3VyKCk7CisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcg
Q1N0eWxlRm9sZE1vZGUoKTsKK307Citvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOworCiso
ZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOworCisgICAg
dGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAg
ICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICAgICAgdmFyIHRv
a2VucyA9IHRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7
CisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5
cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZW50OworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CisgICAgICAg
IGlmIChtYXRjaCkgeworICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0g
ZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRvdXRk
ZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKworICAgIHRoaXMuYXV0b091
dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAgICAgdGhpcy4kb3V0ZGVu
dC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlV29ya2Vy
ID0gZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNs
aWVudChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKKyAgICAgICAg
d29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAg
ICB3b3JrZXIub24oImNzc2xpbnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzZXNzaW9u
LnNldEFubm90YXRpb25zKGUuZGF0YSk7CisgICAgICAgIH0pOworCisgICAgICAgIHdvcmtlci5v
bigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsKKyAgICB9
OworCit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9kZTsKKwor
fSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycs
ICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFy
IGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9
IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cit2
YXIgc3VwcG9ydFR5cGUgPSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFuaW1hdGlvbi1maWxsLW1v
ZGV8YWxpZ25tZW50LWFkanVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFu
aW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24t
Y291bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWlu
Zy1mdW5jdGlvbnxhbmltYXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxp
dHl8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlw
fGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNr
Z3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3Jv
dW5kfGJhc2VsaW5lLXNoaWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmst
bGV2ZWx8Ym9va21hcmstc3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVy
LWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmln
aHQtcmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXIt
Y29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJv
cmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8
Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1s
ZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJv
cmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJv
cmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9y
ZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0
eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdu
fGJveC1kZWNvcmF0aW9uLWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZs
ZXh8Ym94LWxpbmVzfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNo
YWRvd3xib3gtc2l6aW5nfGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2Fw
dGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29s
dW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4t
cnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29s
dW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0
ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2Vs
aW5lfGRyb3AtaW5pdGlhbC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRy
b3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1p
bml0aWFsLXNpemV8ZHJvcC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8
Zml0LXBvc2l0aW9ufGZsb2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9u
dC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13
ZWlnaHR8Zm9udHxncmlkLWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVp
Z2h0fGh5cGhlbmF0ZS1hZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8
aHlwaGVuYXRlLWxpbmVzfGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3Jp
ZW50YXRpb258aW1hZ2UtcmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGln
bnxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5l
LXN0YWNraW5nLXNoaWZ0fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0
LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5
bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJn
aW58bWFyay1hZnRlcnxtYXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1h
cnF1ZWUtcGxheS1jb3VudHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxt
YXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8
bmF2LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxv
dXRsaW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxv
dy1zdHlsZXxvdmVyZmxvdy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFk
ZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFm
dGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8
cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVj
dGl2ZXxwaG9uZW1lc3xwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVz
ZW50YXRpb24tbGV2ZWx8cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxy
ZXNpemV8cmVzdC1hZnRlcnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9u
LXBvaW50fHJvdGF0aW9ufHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1
Ynktc3BhbnxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9u
fHNwZWFrfHNwZWVjaC1yYXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQt
bmFtZXx0YXJnZXQtbmV3fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRl
eHQtYWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1p
bmRlbnR8dGV4dC1qdXN0aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9y
bXx0ZXh0LXdyYXB8dG9wfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9y
bXx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0
eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0
aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2Ut
ZmFtaWx5fHZvaWNlLXBpdGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3Ry
ZXNzfHZvaWNlLXZvbHVtZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8
d2lkb3dzfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsK
K3ZhciBzdXBwb3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdi
YXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIjsKK3ZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBv
cnRzLnN1cHBvcnRDb25zdGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3Jv
bGx8YWxsfGFscGhhYmV0aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQt
Y29sdW1ufGF2b2lkLXBhZ2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZv
cmV8YmVsb3d8YmlkaS1vdmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRl
cnxib3JkZXItYm94fGJvdGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFs
aXplfGNhcHMtaGVpZ2h0fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlk
ZW9ncmFwaGljfGNsb25lfGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNv
bnNpZGVyLXNoaWZ0c3xjb250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1i
ZXppZXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxl
ZHxkaXNjfGRpc3JlZ2FyZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1s
ZXR0ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8
ZWFzZS1pbnxlYXNlLWluLW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1
Ynl8ZmlsbHxmaXhlZHxnZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFu
Z2luZ3xoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRh
bHxpY29ufGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50
aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxp
bmhlcml0fGluaXRpYWx8aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0
fGlubGluZS10YWJsZXxpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13
b3JkfGludmVydHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFs
bHxsYXN0fGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxp
c3QtaXRlbXxsb2NhbHxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxs
b3dlci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1h
eC1zaXplfG1lZGl1bXxtZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJl
c2l6ZXxuZXdzcGFwZXJ8bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1x
dW90ZXxuby1yZXBlYXR8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxv
YmxpcXVlfG9wZW4tcXVvdGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFn
ZXxwb2ludGVyfHByZS1saW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxh
dGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxy
aWdodHxyb3VuZHxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFy
YXRlfHNsaWNlfHNtYWxsLWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3Rh
cnR8c3RhdGljfHN0YXR1cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0
cmljdHxzdWJ8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1j
b2x1bW4tZ3JvdXB8dGFibGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXIt
Z3JvdXB8dGFibGUtcm93LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVk
Z2V8dGV4dC1iZWZvcmUtZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0
aGlja3x0aGlufHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1
cHBlci1yb21hbnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0
aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyI7
Cit2YXIgc3VwcG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9y
ID0gImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxv
bGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciOwordmFyIHN1
cHBvcnRDb25zdGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlh
bHxjZW50dXJ5fGNvbWljfGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0
fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRh
bmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOworCit2YXIgbnVtUmUgPSBl
eHBvcnRzLm51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsK
K3ZhciBwc2V1ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxi
KGFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVj
dGlvbilcXGIiOwordmFyIHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0g
ICIoOilcXGIoYWN0aXZlfGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGls
ZHxmaXJzdC1vZi10eXBlfGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNo
aWxkfGxhc3Qtb2YtdHlwZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxh
c3Qtb2YtdHlwZXxudGgtb2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxy
b290fHRhcmdldHx2YWxpZHx2aXNpdGVkKVxcYiI7CisKK3ZhciBDc3NIaWdobGlnaHRSdWxlcyA9
IGZ1bmN0aW9uKCkgeworCisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdv
cmRNYXBwZXIoeworICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwK
KyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCisgICAgICAgICJz
dXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29s
b3IiOiBzdXBwb3J0Q29uc3RhbnRDb2xvciwKKyAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9u
dHMiOiBzdXBwb3J0Q29uc3RhbnRGb250cworICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CisKKyAgICB2
YXIgYmFzZV9ydWxlc2V0ID0gWworICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21t
ZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoi
LAorICAgICAgICAgICAgbmV4dCA6ICJydWxlc2V0X2NvbW1lbnQiCisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCisgICAgICAgICAgICBy
ZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJworICAgICAgICB9LCB7
CisgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAg
ICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKKyAgICAgICAg
fSwgeworICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJd
LAorICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxm
cnxnZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2
d3wlKSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJp
YyIsCisgICAgICAgICAgICByZWdleCA6IG51bVJlCisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
IHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgorICAgICAgICAgICAg
cmVnZXggOiAiI1thLWYwLTldezZ9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6
ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgorICAgICAgICAgICAgcmVnZXggOiAi
I1thLWYwLTldezN9IgorICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1
YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJd
LAorICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cworICAgICAgICB9LCB7CisgICAg
ICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1u
YW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3Nl
cworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCisgICAg
ICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKKyAgICAgICAg
fQorICAgICAgXTsKKworICAgIHZhciBydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9ydWxl
c2V0KTsKKyAgICBydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFy
ZW4iLAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJzdGFydCIKKyAg
ICB9KTsKKworICAgIHZhciBtZWRpYV9ydWxlc2V0ID0gbGFuZy5jb3B5QXJyYXkoIGJhc2VfcnVs
ZXNldCApOworICAgIG1lZGlhX3J1bGVzZXQudW5zaGlmdCh7CisgICAgICAgIHRva2VuIDogInBh
cmVuLnJwYXJlbiIsCisgICAgICAgIHJlZ2V4IDogIlxcfSIsCisgICAgICAgIG5leHQ6ICAgIm1l
ZGlhIgorICAgIH0pOworCisgICAgdmFyIGJhc2VfY29tbWVudCA9IFt7CisgICAgICAgICAgdG9r
ZW4gOiAiY29tbWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQorICAgICAgICAg
IHJlZ2V4IDogIi4rIgorICAgIH1dOworCisgICAgdmFyIGNvbW1lbnQgPSBsYW5nLmNvcHlBcnJh
eShiYXNlX2NvbW1lbnQpOworICAgIGNvbW1lbnQudW5zaGlmdCh7CisgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4IDogIi4qP1xc
KlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJzdGFydCIKKyAgICB9KTsKKworICAgIHZhciBtZWRp
YV9jb21tZW50ID0gbGFuZy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKKyAgICBtZWRpYV9jb21t
ZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNv
bW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAi
bWVkaWEiCisgICAgfSk7CisKKyAgICB2YXIgcnVsZXNldF9jb21tZW50ID0gbGFuZy5jb3B5QXJy
YXkoYmFzZV9jb21tZW50KTsKKyAgICBydWxlc2V0X2NvbW1lbnQudW5zaGlmdCh7CisgICAgICAg
ICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICAgIHJlZ2V4
IDogIi4qP1xcKlxcLyIsCisgICAgICAgICAgbmV4dCA6ICJydWxlc2V0IgorICAgIH0pOworCisg
ICAgdGhpcy4kcnVsZXMgPSB7CisgICAgICAgICJzdGFydCIgOiBbeworICAgICAgICAgICAgdG9r
ZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXgg
OiAiXFwvXFwqIiwKKyAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgcmVnZXg6ICJc
XHsiLAorICAgICAgICAgICAgbmV4dDogICJydWxlc2V0IgorICAgICAgICB9LCB7CisgICAgICAg
ICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIkAuKj97IiwKKyAgICAg
ICAgICAgIG5leHQ6ICAibWVkaWEiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJr
ZXl3b3JkIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgorICAgICAgICB9LHsK
KyAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAorICAgICAgICAgICAgcmVnZXg6ICJcXC5b
YS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisg
ICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKKyAgICAgICAgfSx7CisgICAgICAgICAg
ICB0b2tlbjogImNvbnN0YW50IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCisg
ICAgICAgIH1dLAorCisgICAgICAgICJtZWRpYSIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDog
ImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4IDogIlxc
L1xcKiIsCisgICAgICAgICAgICBuZXh0IDogIm1lZGlhX2NvbW1lbnQiCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAi
XFx7IiwKKyAgICAgICAgICAgIG5leHQ6ICAibWVkaWFfcnVsZXNldCIKKyAgICAgICAgfSx7Cisg
ICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCisgICAgICAgICAgICByZWdleDogIlxcfSIsCisg
ICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2Vu
OiAia2V5d29yZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAg
fSx7CisgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAi
XFwuW2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmci
LAorICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAg
ICAgICAgdG9rZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10r
IgorICAgICAgICB9XSwKKworICAgICAgICAiY29tbWVudCIgOiBjb21tZW50LAorCisgICAgICAg
ICJydWxlc2V0IiA6IHJ1bGVzZXQsCisgICAgICAgICJydWxlc2V0X2NvbW1lbnQiIDogcnVsZXNl
dF9jb21tZW50LAorCisgICAgICAgICJtZWRpYV9ydWxlc2V0IiA6IG1lZGlhX3J1bGVzZXQsCisg
ICAgICAgICJtZWRpYV9jb21tZW50IiA6IG1lZGlhX2NvbW1lbnQKKyAgICB9OworfTsKKworb29w
LmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBv
cnRzLkNzc0hpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4
cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsK
KwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9u
KCkgeworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewor
ICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAg
ICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxp
bmUgPSBkb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9e
KFxzKlx9KS8pOworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZh
ciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBk
b2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAg
ICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVy
biAwOworCisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUo
b3BlbkJyYWNlUG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAw
LCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50
ID0gZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxz
KykvKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRj
aGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRk
ZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUv
YmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUn
LCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgQmVoYXZp
b3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2
aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRl
cmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CisK
K3ZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICB0aGlzLmluaGVyaXQoQ3N0
eWxlQmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5j
dGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlm
ICh0ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJh
dG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgdmFy
IHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9r
ZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAgICAgICAgICAgICAgdG9rZW4g
PSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgeworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vy
c29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6Jykg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6Oycs
CisgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3Rl
ZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2Uu
aXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CisgICAgICAgICAgICB2YXIgbGlu
ZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZh
ciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQu
Y29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAg
ICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAgICAgICAgICAgIHJldHVybiBy
YW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQo
InNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9y
LCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOycpIHsKKyAgICAgICAg
ICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAg
IHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29s
dW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIs
IENzdHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3Vy
OworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2
aW91cicsICdhY2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9s
aWIvb29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZp
b3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIp
LlRva2VuSXRlcmF0b3I7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisK
K3ZhciBTQUZFX0lOU0VSVF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4i
LCAicHVuY3R1YXRpb24ub3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5T
ID0KKyAgICBbInRleHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwg
ImNvbW1lbnQiXTsKKworCit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9J
bnNlcnRlZFJvdyA9IC0xOwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXli
ZUluc2VydGVkQnJhY2tldHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBt
YXliZUluc2VydGVkTGluZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAi
IjsKKwordmFyIENzdHlsZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5
bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7
CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAg
ICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywg
Y3Vyc29yLmNvbHVtbik7CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0
b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7
CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwg
Y3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRt
YXRjaFRva2VuVHlwZShpdGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZF
X0lOU0VSVF9JTl9UT0tFTlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRl
cmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAg
IHRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0
IiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVC
ZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAg
ICAgIHJldHVybiB0eXBlcy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAg
fTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9u
KGVkaXRvciwgc2Vzc2lvbiwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9y
LmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0
TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2lu
ZyhjdXJzb3IsIGxpbmUsIGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0
b0luc2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iu
cm93OworICAgICAgICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3Ry
KGN1cnNvci5jb2x1bW4pOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07
CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24o
ZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3Iu
Z2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRM
aW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2lu
ZyhjdXJzb3IsIGxpbmUpKQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsK
KyAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5z
ZXJ0ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7
CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVt
bik7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAg
Q3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwg
bGluZSwgYnJhY2tldCkgeworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAw
ICYmCisgICAgICAgICAgICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAg
ICAgICAgIGJyYWNrZXQgPT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAg
IGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAg
IH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBm
dW5jdGlvbihjdXJzb3IsIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFj
a2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cg
JiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2Vy
dGVkTGluZUVuZCAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikg
PT0gbWF5YmVJbnNlcnRlZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2
aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9J
bnNlcnRlZExpbmVFbmQgPSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAg
YXV0b0luc2VydGVkQnJhY2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91
ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJl
SW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAg
ICB9OworCisgICAgdGhpcy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3Rh
dGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9u
LmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rp
b24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsi
ICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30n
LAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlv
bihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVz
dChsaW5lW2N1cnNvci5jb2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhh
dmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBD
c3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dDogJ3snLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAg
ICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRj
aGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5j
b2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hp
bmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJz
b3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5w
b3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0
ZXh0ID09ICJcclxuIikgeworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAg
ICAgIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUpKSB7CisgICAgICAgICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9Iiwg
bWF5YmVJbnNlcnRlZEJyYWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIu
Y2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09
ICIiKSB7CisgICAgICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1h
dGNoaW5nQnJhY2tldCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAn
fScpOworICAgICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5n
ZXROZXh0TGluZUluZGVudChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiks
IHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVu
dCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRl
bnQgKyBjbG9zaW5nLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQu
bGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRp
b24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewor
ICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwor
ICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7Cisg
ICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93
KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQu
Y29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09ICd9JykgeworICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChz
dGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQg
PT0gJygnKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlv
blJhbmdlKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0
UmFuZ2Uoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRp
dG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRv
ciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0
b0luc2VydChlZGl0b3IsIHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHRleHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRp
dG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGlu
ZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAg
ICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcg
PSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1u
ICsgMSwgcm93OiBjdXJzb3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9
PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBs
aW5lLCB0ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0
b0luc2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVu
cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24s
IHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5n
ZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9
PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5n
ZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5n
KHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAg
ICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQu
Y29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9u
IiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAg
ICAgICBpZiAodGV4dCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0
b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Np
b24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVk
ICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3Rl
ZCArICddJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJ
bnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZh
ciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciBy
aWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsg
MSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAg
IHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46
IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xv
c2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJl
aGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0
aGlzLmFkZCgiYnJhY2tldHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwg
ZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9u
LmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5l
KCkgJiYgc2VsZWN0ZWQgPT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1
bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAg
ICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmlu
Z19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3Is
IHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIici
KSB7CisgICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVj
dGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVj
dGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBp
ZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyIn
ICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBx
dW90ZSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3Ig
PSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9
IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxl
ZnRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsK
KyAgICAgICAgICAgICAgICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAg
ICAgICAgICAgIHZhciBjb2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVw
b3MgPSAtMTsgLy8gVHJhY2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7
CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAg
IHF1b3RlcG9zID0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3Mg
PCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRl
eE9mKHF1b3RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoKHRva2VuLnZhbHVlLmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAw
ICYmIHRva2VuLnR5cGUgIT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIg
fHwgKChzZWxlY3Rpb24uc3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEp
ICYmIHRva2VuLnZhbHVlLmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3Ro
LTEpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5l
SW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0OiBxdW90ZSArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9u
OiBbMSwxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5j
b2x1bW4gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwor
CisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0
YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVj
dGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5n
ZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkg
eworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0
LnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uu
c3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBp
ZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNv
bHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0pOworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBC
ZWhhdmlvdXIpOworCitleHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsK
K30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9t
b2RlL2ZvbGRpbmcvZm9sZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2Ug
PSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVp
cmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9s
ZE1vZGUgPSBmdW5jdGlvbigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1v
ZGUpOworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8o
XHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIg
PSAvXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRX
aWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxp
bmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRj
aFsxXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNl
c3Npb24sIG1hdGNoWzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5n
ZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGlu
Z1N0b3BNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0g
bWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsx
XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Np
b24sIG1hdGNoWzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRD
b21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2Fs
bChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzgzYWFmYzA3
ZWQ5YjI4MTg0MTY2NjRkMDg1MzM5ZDA1NmVlOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCkBAIC0wLDAgKzEs
MTg4NiBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogRGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWph
eC5vcmcgQi5WLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCisgKiAg
ICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioq
ICovCisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL21vZGUvamF2
YXNjcmlwdCcsICdhY2UvbW9kZS9jc3MnLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9odG1s
X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsICdhY2UvbW9kZS9m
b2xkaW5nL2h0bWwnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
dmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3ZhciBUZXh0TW9kZSA9IHJlcXVpcmUo
Ii4vdGV4dCIpLk1vZGU7Cit2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3Jp
cHQiKS5Nb2RlOwordmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7Cit2YXIgVG9r
ZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwordmFyIEh0bWxIaWdo
bGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxp
Z2h0UnVsZXM7Cit2YXIgSHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2h0bWwi
KS5IdG1sQmVoYXZpb3VyOwordmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9o
dG1sIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGhpZ2hs
aWdodGVyID0gbmV3IEh0bWxIaWdobGlnaHRSdWxlcygpOworICAgIHRoaXMuJHRva2VuaXplciA9
IG5ldyBUb2tlbml6ZXIoaGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kYmVoYXZp
b3VyID0gbmV3IEh0bWxCZWhhdmlvdXIoKTsKKyAgICAKKyAgICB0aGlzLiRlbWJlZHMgPSBoaWdo
bGlnaHRlci5nZXRFbWJlZHMoKTsKKyAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeworICAg
ICAgICAianMtIjogSmF2YVNjcmlwdE1vZGUsCisgICAgICAgICJjc3MtIjogQ3NzTW9kZQorICAg
IH0pOworICAgIAorICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOwor
fTsKK29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAg
IAorICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3Rh
cnRSb3csIGVuZFJvdykgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworCisgICAgdGhpcy5n
ZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091
dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07CisKK30pLmNhbGwoTW9kZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUg
PSBNb2RlOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQn
LCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycs
ICdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScsICdhY2Uvd29y
a2VyL3dvcmtlcl9jbGllbnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvbW9k
ZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsK
KworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFyIFRleHRNb2RlID0gcmVx
dWlyZSgiLi90ZXh0IikuTW9kZTsKK3ZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6
ZXIiKS5Ub2tlbml6ZXI7Cit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgi
Li9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsK
K3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0
ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFu
Z2UiKS5SYW5nZTsKK3ZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2Vy
X2NsaWVudCIpLldvcmtlckNsaWVudDsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIu
L2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cit2YXIgQ1N0eWxlRm9sZE1vZGUg
PSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CisKK3ZhciBNb2RlID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgSmF2YVNj
cmlwdEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSk7CisgICAgdGhpcy4kb3V0ZGVudCA9IG5l
dyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOworICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5
bGVCZWhhdmlvdXIoKTsKKyAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9k
ZSgpOworfTsKK29vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CisKKyhmdW5jdGlvbigpIHsK
KworCisgICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBz
dGFydFJvdywgZW5kUm93KSB7CisgICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKKyAgICAgICAg
dmFyIHJlID0gL14oXHMqKVwvXC8vOworCisgICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8
PSBlbmRSb3c7IGkrKykgeworICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5nZXRMaW5lKGkp
KSkgeworICAgICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRkZW50KSB7
CisgICAgICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKKyAgICAg
ICAgICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2gocmUpOworICAgICAgICAgICAgICAgIGRlbGV0
ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJv
dyA9IGk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IG1bMF0ubGVu
Z3RoOworICAgICAgICAgICAgICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBtWzFdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvYy5p
bmRlbnRSb3dzKHN0YXJ0Um93LCBlbmRSb3csICIvLyIpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7
CisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisKKyAgICAgICAg
dmFyIHRva2VuaXplZExpbmUgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBz
dGF0ZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKKyAgICAg
ICAgdmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKKworICAgICAgICBpZiAodG9r
ZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50Iikg
eworICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7Cisg
ICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7
XChcW10pXHMqJC8pOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAg
aW5kZW50ICs9IHRhYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9
PSAiZG9jLXN0YXJ0IikgeworICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwg
c3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihc
Lz8pXCovKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmICht
YXRjaFsxXSkgeworICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpbmRlbnQ7CisgICAgfTsKKworICAgIHRoaXMu
Y2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CisgICAgICAgIHJl
dHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CisgICAgfTsKKwor
ICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKKyAgICAg
ICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CisgICAgfTsKKyAgICAKKyAg
ICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdv
cmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29y
a2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKKyAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1l
bnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKKworICAgICAgICB3b3JrZXIub24oImpzbGludCIs
IGZ1bmN0aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMo
cmVzdWx0cy5kYXRhKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3b3JrZXIub24o
InRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90
YXRpb25zKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdvcmtlcjsK
KyAgICB9OworCit9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKKworZXhwb3J0cy5Nb2RlID0gTW9k
ZTsKK30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxl
cycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxp
Z2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1
bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50
SGlnaGxpZ2h0UnVsZXM7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0
X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIEphdmFTY3JpcHRI
aWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhp
cy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKKyAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKKyAg
ICAgICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9i
amVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCisgICAgICAgICAg
ICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAorICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZs
b2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwi
ICAgKworICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWlu
dDhDbGFtcGVkQXJyYXl8IiAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkVycm9y
fEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0
ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKKyAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJy
b3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK
KyAgICAgICAgICAgICJkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNv
ZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0
aW9ucworICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIkpTT058
TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyAvLyBPdGhlcgorICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3Rv
dHlwZXx3aW5kb3d8ZG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAv
LyBQc2V1ZG8KKyAgICAgICAgImtleXdvcmQiOgorICAgICAgICAgICAgImNvbnN0fHlpZWxkfGlt
cG9ydHxnZXR8c2V0fCIgKworICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8
ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKKyAgICAgICAg
ICAgICJpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8
bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKworICAgICAgICAgICAgIl9fcGFyZW50X198
X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKKyAgICAgICAgICAg
ICJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJs
aWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCisgICAgICAgICJzdG9yYWdl
LnR5cGUiOgorICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAorICAgICAgICAi
Y29uc3RhbnQubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVm
aW5lZCIsCisgICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKKyAgICAgICAgICAgICJhbGVydCIs
CisgICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCisgICAg
fSwgImlkZW50aWZpZXIiKTsKKyAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8Zmlu
YWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOwor
ICAgIHZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpc
XGRcXCRfXHUwMGExLVx1ZmZmZl0qXFxiIjsKKworICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/
OnhbMC05YS1mQS1GXXsyfXwiICsgLy8gaGV4CisgICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiAr
IC8vIHVuaWNvZGUKKyAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CisgICAgICAg
ICIzWzAtNl1bMC03XT98IiArIC8vIG9jdAorICAgICAgICAiMzdbMC03XT98IiArIC8vIG9jdAor
ICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CisgICAgICAgICIuKSI7CisKKyAgICB0aGlz
LiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wv
LiokLworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxl
cy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAg
ICAgICByZWdleCA6IC9cL1wqLywKKyAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICAgICByZWdleCA6ICInKD89LikiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFz
dHJpbmciCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAorICAgICAgICAgICAgICAgIG5l
eHQgIDogInFxc3RyaW5nIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKKyAgICAgICAgICAgICAgICByZWdleCA6IC8w
W3hYXVswLTlhLWZBLUZdK1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRv
a2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAorICAgICAgICAgICAgICAgIHJlZ2V4
IDogL1srLV0/XGQrKD86KD86XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8KKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAg
InN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9u
IiwKKyAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5u
YW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4p
KHByb3RvdHlwZSkoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCisgICAgICAg
ICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlw
ZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0
IiwKKyAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9y
YWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlk
ZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAg
ICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHku
bmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9y
YWdlLnR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZp
ZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAorICAgICAgICAg
ICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUi
LCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIs
CisgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAorICAgICAg
ICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rp
b24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZp
ZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCki
LAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJz
dG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBh
cmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
IihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAorICAg
ICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbCisgICAgICAgICAgICAgICAgICAgICJlbnRpdHku
bmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAg
ICAgICAgICAgICAgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVu
IgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVu
dGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAg
ICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInRleHQiLCAi
dGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxc
cyopKFxcKCkiLAorICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCisgICAgICAg
ICAgICAgICAgbmV4dCA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0
aW9uIl0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/OmlmdHxvdyg/Ok1v
ZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGlu
ZXMpP3xZfFRvKT98dCg/Om9wenp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRl
eHQpfG9ydHx1KD86cHxiKD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpS
ZSg/OnNpemFibGV8cXVlc3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8
U2Vjb25kc3xIbyg/OnRLZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFs
fFpPcHRpb25zfERhdGV8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNv
bmRzfEhvdXJzfERhdGV8RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8
YXZlUHJlZmVyZW5jZXN8bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFy
KD86Q29kZUF0fEF0KXxvKD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFy
KD86VGltZW91dHxJbnRlcnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNo
ZWV0fFBvcHVwfEV2ZW50T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNl
KXxVKD86VENTdHJpbmd8cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEo
PzpufGludCg/OkVuYWJsZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8
ZCg/OmlzYWJsZUV4dGVybmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0
YWludHxlc2NhcGV8d2F0Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/
Om8oPzpwfHcpfHVzaHxsdWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/
KXxyKD86aW50fG9tcHR8ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8
dmFsfGxlbWVudEZyb21Qb2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9m
fFVUQ3xxdWVyeUNvbW1hbmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/
Om5kfGxlKD86TW9kaWZpZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8
byg/Om50KD86c2l6ZXxjb2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzpp
bmt8byg/OmFkfGcpfGFzdEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8
b2J8YW4oPzoyKT8pfHBwbHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8
ZSg/OnNpemUoPzpCeXxUbyl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNl
KD86Q2FwdHVyZXxFdmVudHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/
OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFll
YXJ8VGltZSg/OnpvbmVPZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxp
c2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVh
cnxBKD86dHRlbnRpb258bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVs
b3cpfFRvKD86QWJzb2x1dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4
KSl8Yig/OnRvYXxpZ3xvKD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLworICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVy
YXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmRvbSJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
LyhcLikocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVt
fEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFt
ZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFU
QVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8
UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0
ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58
ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3
cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86
Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8
Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJp
YnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5jb25zdGFu
dCJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFuZ3VhZ2V8Y3Io
PzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0
dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86
Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/
fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUo
PzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0
ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAo
PzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVu
dEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJh
cnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/
OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJ
bmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdp
ZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklO
SVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMp
fHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0
KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRl
ZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxi
YXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRv
bXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpP
ZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86
dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRv
KXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNv
ZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFt
aWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFj
ZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24o
PzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0o
PzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/
Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0
fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86
aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFs
fHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8
TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/Oldp
ZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRo
KSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5j
dHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKKyAgICAgICAg
ICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0
aW1lRW5kfGFzc2VydClcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6IGtleXdvcmRNYXBwZXIsCisgICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUK
KyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJh
dG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitcLX5dfD09PXw9
PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwl
PXxcKz18XC09fCY9fFxePS8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dl
ZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlv
bi5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8XDt8XC4vLAor
ICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgICAg
ICByZWdleCA6IC9bXFsoe10vLAorICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93
ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBh
cmVuIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCisgICAgICAgICAg
ICAgICAgcmVnZXggOiAvXC89Py8sCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxs
b3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQi
LAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLworICAgICAgICAgICAgfQorICAgICAg
ICBdLAorICAgICAgICAicmVnZXhfYWxsb3dlZCI6IFsKKyAgICAgICAgICAgIERvY0NvbW1lbnRI
aWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQK
KyAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAorICAgICAgICAgICAgICAgIG5leHQg
OiAiY29tbWVudF9yZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogImNvbW1lbnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4q
JCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdl
eHAiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKKyAgICAgICAgICAgICAgICBuZXh0
OiAicmVnZXgiLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInRl
eHQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCisgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIi
LAorICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
XSwKKyAgICAgICAgInJlZ2V4IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRv
a2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAi
XFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKKyAgICAgICAgICAg
ICAgICByZWdleDogIi9cXHcqIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiLAorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiAvXHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsrKl18WyReXVs/
XXxcP3szLH0vCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29u
c3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0h
XXxcKXx7XGQrLD8oPzpcZCspP318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1p
dGVyIiwKKyAgICAgICAgICAgICAgICByZWdleDogL1x8LworICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAg
ICAgICAgICByZWdleDogL1xbXF4/LywKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hh
cmFjdGVyX2NsYXNzIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjog
ImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAorICAgICAgICAgICAgICAgIG5l
eHQ6ICJzdGFydCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0VG9r
ZW46ICJzdHJpbmcucmVnZXhwIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAi
cmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgIHJlZ2V4
OiAiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUi
LAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiXSIsCisgICAgICAgICAgICAgICAgbmV4dDogInJl
Z2V4IiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50
Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICItIgorICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFj
aHRlcmNsYXNzIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiZnVuY3Rpb25f
YXJndW1lbnRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuOiAidmFy
aWFibGUucGFyYW1ldGVyIiwKKyAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVy
YXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIsCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCisgICAgICAg
ICAgICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbjogImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAg
ICAgbmV4dDogInN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiY29t
bWVudF9yZWdleF9hbGxvd2VkIiA6IFsKKyAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50Iiwg
cmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCisgICAgICAgICAgICB7
ZGVmYXVsdFRva2VuIDogImNvbW1lbnQifQorICAgICAgICBdLAorICAgICAgICAiY29tbWVudCIg
OiBbCisgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5l
eHQgOiAic3RhcnQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9Cisg
ICAgICAgIF0sCisgICAgICAgICJxcXN0cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAg
ICAgICByZWdleCA6IGVzY2FwZWRSZQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAg
IHRva2VuIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAg
ICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8
JCcsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgXSwKKyAgICAgICAgInFzdHJpbmciIDogWworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAg
ICAgcmVnZXggOiBlc2NhcGVkUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKKyAgICAg
ICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIs
CisgICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgXQorICAgIH07CisKKyAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1
bGVzLCAiZG9jLSIsCisgICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1
bGUoInN0YXJ0IikgXSk7Cit9OworCitvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1
bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOworCitleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRS
dWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK30pOworCithY2UuZGVmaW5lKCdhY2Uv
bW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVz
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSBy
ZXF1aXJlKCIuLi9saWIvb29wIik7Cit2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgi
Li90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKKwordmFyIERvY0Nv
bW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy4kcnVsZXMgPSB7
CisgICAgICAgICJzdGFydCIgOiBbIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9j
LnRhZyIsCisgICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVt
YWlsIGFkZHJlc3NlcworICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50
LmRvYy50YWciLAorICAgICAgICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKKyAgICAgICAgfSwg
eworICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgorICAgICAgICB9XQor
ICAgIH07Cit9OworCitvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0
SGlnaGxpZ2h0UnVsZXMpOworCitEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxl
ID0gZnVuY3Rpb24oc3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21t
ZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CisgICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKiki
LAorICAgICAgICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKK0RvY0NvbW1lbnRIaWdobGln
aHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAg
cmVnZXggOiAiXFwqXFwvIiwKKyAgICAgICAgbmV4dCAgOiBzdGFydAorICAgIH07Cit9OworCisK
K2V4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1
bGVzOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVu
dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBSYW5nZSA9IHJlcXVpcmUo
Ii4uL3JhbmdlIikuUmFuZ2U7CisKK3ZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9u
KCkge307CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rp
b24obGluZSwgaW5wdXQpIHsKKyAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlu
cHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93
KSB7CisgICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKKyAgICAgICAgdmFyIG1h
dGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKKworICAgICAgICBpZiAoIW1hdGNoKSByZXR1
cm4gMDsKKworICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOworICAgICAgICB2
YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1
bW46IGNvbHVtbn0pOworCisgICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBv
cy5yb3cgPT0gcm93KSByZXR1cm4gMDsKKworICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0
SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKKyAgICAgICAgZG9jLnJlcGxh
Y2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CisgICAgfTsKKwor
ICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIG1hdGNo
ID0gbGluZS5tYXRjaCgvXihccyspLyk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH07CisKK30pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKKworZXhwb3J0
cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50OworfSk7CisKK2Fj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2Uv
dG9rZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2
YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwordmFyIFRv
a2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0
b3I7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CisKK3ZhciBTQUZFX0lO
U0VSVF9JTl9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRp
b24ub3BlcmF0b3IiXTsKK3ZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KKyAgICBbInRl
eHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsK
KworCit2YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwordmFyIGF1dG9JbnNlcnRlZFJvdyA9
IC0xOwordmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKK3ZhciBtYXliZUluc2VydGVkQnJh
Y2tldHMgPSAwOwordmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKK3ZhciBtYXliZUluc2VydGVk
TGluZVN0YXJ0ID0gIiI7Cit2YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKKwordmFyIENz
dHlsZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIu
aXNTYW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7CisgICAgICAgIHZh
ciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGl0ZXJh
dG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVt
bik7CisgICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVu
dFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7CisgICAgICAgICAg
ICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywg
Y3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlw
ZShpdGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9U
T0tFTlMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3Vy
cmVudFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKKyAgICAgICAgICAgIHRoaXMuJG1hdGNo
VG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNF
UlRfQkVGT1JFX1RPS0VOUyk7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuJG1h
dGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CisgICAgICAgIHJldHVybiB0
eXBlcy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7CisgICAgfTsKKyAgICAKKyAg
ICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vz
c2lvbiwgYnJhY2tldCkgeworICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBv
c2l0aW9uKCk7CisgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iu
cm93KTsKKyAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUsIGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQorICAgICAgICAgICAgYXV0b0luc2VydGVkQnJh
Y2tldHMgPSAwOworICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OworICAgICAg
ICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1
bW4pOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAg
Q3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNz
aW9uLCBicmFja2V0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxp
bmUpKQorICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5
YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3Rh
cnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CisgICAgICAgIG1h
eWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAg
IG1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOworICAgIH07CisgICAgCisgICAgQ3N0eWxlQmVoYXZp
b3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tl
dCkgeworICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCisgICAgICAg
ICAgICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAgICAgIGJyYWNr
ZXQgPT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKKyAgICAgICAgICAgIGxpbmUuc3Vic3Ry
KGN1cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOworICAgIH07CisgICAgCisg
ICAgQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJz
b3IsIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYK
KyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKKyAgICAgICAg
ICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAm
JgorICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNl
cnRlZExpbmVTdGFydDsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRv
SW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVF
bmQgPSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKKyAgICAgICAgYXV0b0luc2VydGVk
QnJhY2tldHMtLTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJl
SW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFj
a2V0cyA9IDA7CisgICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKKyAgICB9OworCisgICAg
dGhpcy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwg
ZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5l
KGN1cnNvci5yb3cpOworICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKKyAgICAgICAgICAgIHZh
ciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZh
ciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAg
ICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5n
ZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAorICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNl
c3Npb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNv
ci5jb2x1bW5dKSkgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3Jk
QXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlv
dXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAodGV4dCA9PSAnfScpIHsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0
cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09ICd9JykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Np
b24uJGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCBy
b3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwg
JiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRl
eHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0
ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
WzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxu
IikgeworICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKKyAgICAgICAgICAgIGlmIChDc3R5
bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CisgICAg
ICAgICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRl
ZEJyYWNrZXRzKTsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUlu
c2VydGVkQ2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2hh
ciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAg
ICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tl
dCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOworICAgICAg
ICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUlu
ZGVudChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0
VGFiU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdl
dEluZGVudChsaW5lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5n
LAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBp
bmRlbnQubGVuZ3RoXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlv
biAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgeworICAgICAgICB2YXIg
c2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAo
IXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7CisgICAgICAgICAgICB2
YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAg
ICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5n
ZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9Jykgewor
ICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heWJlSW5z
ZXJ0ZWRCcmFja2V0cy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAg
ICB0aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9u
LCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7Cisg
ICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Cisg
ICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBC
ZWhhdmlvdXJzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCisgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbjogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBl
bHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikp
IHsKKyAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0
b3IsIHNlc3Npb24sICIpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dDogJygpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwg
MV0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHRleHQgPT0gJyknKSB7CisgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNv
clBvc2l0aW9uKCk7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUo
Y3Vyc29yLnJvdyk7CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmco
Y3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0
Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRm
aW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBj
dXJzb3Iucm93fSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENz
dHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkg
eworICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xv
c2luZygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAx
XQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlv
biIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7Cisg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7Cisg
ICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cp
OworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0
LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJp
Z2h0Q2hhciA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24g
KHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4
dCA9PSAnWycpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0
aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRl
eHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBl
ZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRp
dG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRB
dXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAorICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lv
bi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAg
ICAgICBpZiAocmlnaHRDaGFyID09ICddJykgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGlu
ZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1
bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcg
IT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3Is
IGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BB
dXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgiYnJh
Y2tldHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNz
aW9uLCByYW5nZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0
UmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0
ZWQgPT0gJ1snKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUo
cmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0
cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKKyAg
ICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uu
ZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwg
Imluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRl
eHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CisgICAgICAg
ICAgICB2YXIgcXVvdGUgPSB0ZXh0OworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRv
ci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lv
bi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQg
IT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5n
ZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGlu
ZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgICAg
ICAgICBpZiAobGVmdENoYXIgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNl
c3Npb24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOworICAgICAgICAgICAgICAgIHZh
ciBjb2wgPSAwLCB0b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8g
VHJhY2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KKworICAgICAgICAgICAg
ICAgIGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0gdG9rZW5zW3hdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9r
ZW4udHlwZSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0g
LTE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZh
bHVlLmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5
cGUgIT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rp
b24uc3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZh
bHVlLmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVk
aXRvciwgc2Vzc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90
ZSArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQorICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYg
dG9rZW4udHlwZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0
Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5h
ZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24s
IGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lv
bi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGlu
ZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgeworICAgICAgICAg
ICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1u
ICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09IHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOworICAg
ICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOworCit9OworCitvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwor
CitleHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKK30pOworCithY2Uu
ZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcv
Zm9sZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3Zh
ciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIu
Li8uLi9yYW5nZSIpLlJhbmdlOwordmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9t
b2RlIikuRm9sZE1vZGU7CisKK3ZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5j
dGlvbigpIHt9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOworCisoZnVu
Y3Rpb24oKSB7CisKKyAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxd
XSokfF5ccyooXC9cKikvOworICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10q
KFx9fFxdKXxeW1xzXCpdKihcKlwvKS87CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9
IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHZhciBsaW5lID0g
c2Vzc2lvbi5nZXRMaW5lKHJvdyk7CisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhp
cy5mb2xkaW5nU3RhcnRNYXJrZXIpOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAg
IHZhciBpID0gbWF0Y2guaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNo
WzFdLCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9s
ZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIp
OworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXgg
KyBtYXRjaFswXS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFd
LCByb3csIGkpOworCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJh
bmdlKHJvdywgaSwgLTEpOworICAgICAgICB9CisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5w
cm90b3R5cGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS90ZXh0Jywg
J2FjZS90b2tlbml6ZXInLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9k
ZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdh
Y2UvbW9kZS9iZWhhdmlvdXIvY3NzJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIu
Li9saWIvb29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwordmFy
IFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBDc3NI
aWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hs
aWdodFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGlu
Z19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit2YXIgV29ya2VyQ2xpZW50
ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7Cit2YXIg
Q3NzQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwor
dmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2Rl
OworCit2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBU
b2tlbml6ZXIobmV3IENzc0hpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSwgImkiKTsKKyAgICB0
aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CisgICAgdGhpcy4kYmVo
YXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOworICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3
IENTdHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKKwor
KGZ1bmN0aW9uKCkgeworCisgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKKworICAg
IHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7Cisg
ICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CisgICAgICAgIHZhciB0
b2tlbnMgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5z
OworICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50
eXBlID09ICJjb21tZW50IikgeworICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOworICAgICAg
ICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIGluZGVudCArPSB0YWI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gaW5kZW50OworICAgIH07CisKKyAgICB0aGlzLmNoZWNrT3V0ZGVudCA9
IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgeworICAgICAgICByZXR1cm4gdGhpcy4kb3V0
ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOworICAgIH07CisKKyAgICB0aGlzLmF1dG9P
dXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CisgICAgICAgIHRoaXMuJG91dGRl
bnQuYXV0b091dGRlbnQoZG9jLCByb3cpOworICAgIH07CisKKyAgICB0aGlzLmNyZWF0ZVdvcmtl
ciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJD
bGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CisgICAgICAg
IHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CisKKyAgICAg
ICAgd29ya2VyLm9uKCJjc3NsaW50IiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgc2Vzc2lv
bi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOworICAgICAgICB9KTsKKworICAgICAgICB3b3JrZXIu
b24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFu
bm90YXRpb25zKCk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB3b3JrZXI7CisgICAg
fTsKKworfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CisKK2V4cG9ydHMuTW9kZSA9IE1vZGU7CisK
K30pOworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcn
LCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKK3Zh
ciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKK3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMg
PSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwor
dmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbmltYXRpb24tZmlsbC1t
b2RlfGFsaWdubWVudC1hZGp1c3R8YWxpZ25tZW50LWJhc2VsaW5lfGFuaW1hdGlvbi1kZWxheXxh
bmltYXRpb24tZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24taXRlcmF0aW9u
LWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1p
bmctZnVuY3Rpb258YW5pbWF0aW9ufGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZmFjZS12aXNpYmls
aXR5fGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJyZWFrfGJhY2tncm91bmQtY2xp
cHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFj
a2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8YmFja2dy
b3VuZHxiYXNlbGluZS1zaGlmdHxiaW5kaW5nfGJsZWVkfGJvb2ttYXJrLWxhYmVsfGJvb2ttYXJr
LWxldmVsfGJvb2ttYXJrLXN0YXRlfGJvb2ttYXJrLXRhcmdldHxib3JkZXItYm90dG9tfGJvcmRl
ci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJp
Z2h0LXJhZGl1c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVy
LWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxi
b3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNl
fGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXIt
bGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxi
b3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxi
b3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJv
cmRlci10b3AtbGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1z
dHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1hbGln
bnxib3gtZGVjb3JhdGlvbi1icmVha3xib3gtZGlyZWN0aW9ufGJveC1mbGV4LWdyb3VwfGJveC1m
bGV4fGJveC1saW5lc3xib3gtb3JkaW5hbC1ncm91cHxib3gtb3JpZW50fGJveC1wYWNrfGJveC1z
aGFkb3d8Ym94LXNpemluZ3xicmVhay1hZnRlcnxicmVhay1iZWZvcmV8YnJlYWstaW5zaWRlfGNh
cHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yLXByb2ZpbGV8Y29sb3J8Y29sdW1uLWNvdW50fGNv
bHVtbi1maWxsfGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1u
LXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNv
bHVtbnN8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGNyb3B8Y3VlLWFm
dGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxkb21pbmFudC1iYXNl
bGluZXxkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0fGRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbnxk
cm9wLWluaXRpYWwtYmVmb3JlLWFkanVzdHxkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWdufGRyb3At
aW5pdGlhbC1zaXplfGRyb3AtaW5pdGlhbC12YWx1ZXxlbGV2YXRpb258ZW1wdHktY2VsbHN8Zml0
fGZpdC1wb3NpdGlvbnxmbG9hdC1vZmZzZXR8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZv
bnQtc2l6ZS1hZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQt
d2VpZ2h0fGZvbnR8Z3JpZC1jb2x1bW5zfGdyaWQtcm93c3xoYW5naW5nLXB1bmN0dWF0aW9ufGhl
aWdodHxoeXBoZW5hdGUtYWZ0ZXJ8aHlwaGVuYXRlLWJlZm9yZXxoeXBoZW5hdGUtY2hhcmFjdGVy
fGh5cGhlbmF0ZS1saW5lc3xoeXBoZW5hdGUtcmVzb3VyY2V8aHlwaGVuc3xpY29ufGltYWdlLW9y
aWVudGF0aW9ufGltYWdlLXJlbmRlcmluZ3xpbWFnZS1yZXNvbHV0aW9ufGlubGluZS1ib3gtYWxp
Z258bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaW5lLXN0YWNraW5nLXJ1Ynl8bGlu
ZS1zdGFja2luZy1zaGlmdHxsaW5lLXN0YWNraW5nLXN0cmF0ZWd5fGxpbmUtc3RhY2tpbmd8bGlz
dC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0
eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFy
Z2lufG1hcmstYWZ0ZXJ8bWFyay1iZWZvcmV8bWFya3xtYXJrc3xtYXJxdWVlLWRpcmVjdGlvbnxt
YXJxdWVlLXBsYXktY291bnR8bWFycXVlZS1zcGVlZHxtYXJxdWVlLXN0eWxlfG1heC1oZWlnaHR8
bWF4LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofG1vdmUtdG98bmF2LWRvd258bmF2LWluZGV4
fG5hdi1sZWZ0fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8
b3V0bGluZS1vZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZs
b3ctc3R5bGV8b3ZlcmZsb3cteHxvdmVyZmxvdy15fG92ZXJmbG93fHBhZGRpbmctYm90dG9tfHBh
ZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1h
ZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLXBvbGljeXxwYWdl
fHBhdXNlLWFmdGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3Bl
Y3RpdmV8cGhvbmVtZXN8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9zaXRpb258cHJl
c2VudGF0aW9uLWxldmVsfHB1bmN0dWF0aW9uLXRyaW18cXVvdGVzfHJlbmRlcmluZy1pbnRlbnR8
cmVzaXplfHJlc3QtYWZ0ZXJ8cmVzdC1iZWZvcmV8cmVzdHxyaWNobmVzc3xyaWdodHxyb3RhdGlv
bi1wb2ludHxyb3RhdGlvbnxydWJ5LWFsaWdufHJ1Ynktb3Zlcmhhbmd8cnVieS1wb3NpdGlvbnxy
dWJ5LXNwYW58c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlv
bnxzcGVha3xzcGVlY2gtcmF0ZXxzdHJlc3N8c3RyaW5nLXNldHx0YWJsZS1sYXlvdXR8dGFyZ2V0
LW5hbWV8dGFyZ2V0LW5ld3x0YXJnZXQtcG9zaXRpb258dGFyZ2V0fHRleHQtYWxpZ24tbGFzdHx0
ZXh0LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWVtcGhhc2lzfHRleHQtaGVpZ2h0fHRleHQt
aW5kZW50fHRleHQtanVzdGlmeXx0ZXh0LW91dGxpbmV8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zv
cm18dGV4dC13cmFwfHRvcHx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zv
cm18dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVy
dHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dHJhbnNpdGlvbnx1bmljb2RlLWJpZGl8dmVy
dGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1iYWxhbmNlfHZvaWNlLWR1cmF0aW9ufHZvaWNl
LWZhbWlseXx2b2ljZS1waXRjaC1yYW5nZXx2b2ljZS1waXRjaHx2b2ljZS1yYXRlfHZvaWNlLXN0
cmVzc3x2b2ljZS12b2x1bWV8dm9sdW1lfHdoaXRlLXNwYWNlLWNvbGxhcHNlfHdoaXRlLXNwYWNl
fHdpZG93c3x3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7
Cit2YXIgc3VwcG9ydEZ1bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24gPSAicmdifHJn
YmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyI7Cit2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhw
b3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Ny
b2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lk
LWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVm
b3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xk
ZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRh
bGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1p
ZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxj
b25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMt
YmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJs
ZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUt
bGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXpl
fGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1y
dWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhh
bmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250
YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVu
dGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8
aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdo
dHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXIt
d29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1h
bGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxs
aXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58
bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxt
YXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1y
ZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4t
cXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8
b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBh
Z2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVs
YXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8
cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBh
cmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0
YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxz
dHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUt
Y29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVy
LWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1l
ZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8
dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58
dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVy
dGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm8i
OwordmFyIHN1cHBvcnRDb25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRDb2xv
ciA9ICJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8
b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93IjsKK3ZhciBz
dXBwb3J0Q29uc3RhbnRGb250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9udHMgPSAiYXJp
YWx8Y2VudHVyeXxjb21pY3xjb3VyaWVyfGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFj
dHxsdWNpZGF8c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJk
YW5hfHdlYmRpbmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKKwordmFyIG51bVJlID0g
ZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7
Cit2YXIgcHNldWRvRWxlbWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0gIihcXDorKVxc
YihhZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxl
Y3Rpb24pXFxiIjsKK3ZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9
ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hp
bGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1j
aGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1s
YXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8
cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOworCit2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMg
PSBmdW5jdGlvbigpIHsKKworICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3
b3JkTWFwcGVyKHsKKyAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb24s
CisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAorICAgICAgICAi
c3VwcG9ydC50eXBlIjogc3VwcG9ydFR5cGUsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmNv
bG9yIjogc3VwcG9ydENvbnN0YW50Q29sb3IsCisgICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZv
bnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKKyAgICB9LCAidGV4dCIsIHRydWUpOworCisgICAg
dmFyIGJhc2VfcnVsZXNldCA9IFsKKyAgICAgICAgeworICAgICAgICAgICAgdG9rZW4gOiAiY29t
bWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwq
IiwKKyAgICAgICAgICAgIG5leHQgOiAicnVsZXNldF9jb21tZW50IgorICAgICAgICB9LCB7Cisg
ICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAg
cmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKKyAgICAgICAgfSwg
eworICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAg
ICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwgImtleXdvcmQi
XSwKKyAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8
ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18
dnd8JSkiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVy
aWMiLAorICAgICAgICAgICAgcmVnZXggOiBudW1SZQorICAgICAgICB9LCB7CisgICAgICAgICAg
ICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKKyAgICAgICAgICAg
IHJlZ2V4IDogIiNbYS1mMC05XXs2fSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4g
OiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKKyAgICAgICAgICAgIHJlZ2V4IDog
IiNbYS1mMC05XXszfSIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0
dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3Mi
XSwKKyAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvRWxlbWVudHMKKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUt
bmFtZS5wc2V1ZG8tY2xhc3MuY3NzIl0sCisgICAgICAgICAgICByZWdleCA6IHBzZXVkb0NsYXNz
ZXMKKyAgICAgICAgfSwgeworICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAorICAg
ICAgICAgICAgcmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCisgICAgICAg
IH0KKyAgICAgIF07CisKKyAgICB2YXIgcnVsZXNldCA9IGxhbmcuY29weUFycmF5KGJhc2VfcnVs
ZXNldCk7CisgICAgcnVsZXNldC51bnNoaWZ0KHsKKyAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBh
cmVuIiwKKyAgICAgICAgcmVnZXggOiAiXFx9IiwKKyAgICAgICAgbmV4dDogICAic3RhcnQiCisg
ICAgfSk7CisKKyAgICB2YXIgbWVkaWFfcnVsZXNldCA9IGxhbmcuY29weUFycmF5KCBiYXNlX3J1
bGVzZXQgKTsKKyAgICBtZWRpYV9ydWxlc2V0LnVuc2hpZnQoeworICAgICAgICB0b2tlbiA6ICJw
YXJlbi5ycGFyZW4iLAorICAgICAgICByZWdleCA6ICJcXH0iLAorICAgICAgICBuZXh0OiAgICJt
ZWRpYSIKKyAgICB9KTsKKworICAgIHZhciBiYXNlX2NvbW1lbnQgPSBbeworICAgICAgICAgIHRv
a2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKKyAgICAgICAg
ICByZWdleCA6ICIuKyIKKyAgICB9XTsKKworICAgIHZhciBjb21tZW50ID0gbGFuZy5jb3B5QXJy
YXkoYmFzZV9jb21tZW50KTsKKyAgICBjb21tZW50LnVuc2hpZnQoeworICAgICAgICAgIHRva2Vu
IDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdleCA6ICIuKj9c
XCpcXC8iLAorICAgICAgICAgIG5leHQgOiAic3RhcnQiCisgICAgfSk7CisKKyAgICB2YXIgbWVk
aWFfY29tbWVudCA9IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7CisgICAgbWVkaWFfY29t
bWVudC51bnNoaWZ0KHsKKyAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBj
b21tZW50CisgICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKKyAgICAgICAgICBuZXh0IDog
Im1lZGlhIgorICAgIH0pOworCisgICAgdmFyIHJ1bGVzZXRfY29tbWVudCA9IGxhbmcuY29weUFy
cmF5KGJhc2VfY29tbWVudCk7CisgICAgcnVsZXNldF9jb21tZW50LnVuc2hpZnQoeworICAgICAg
ICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKKyAgICAgICAgICByZWdl
eCA6ICIuKj9cXCpcXC8iLAorICAgICAgICAgIG5leHQgOiAicnVsZXNldCIKKyAgICB9KTsKKwor
ICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAic3RhcnQiIDogW3sKKyAgICAgICAgICAgIHRv
a2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICAgIHJlZ2V4
IDogIlxcL1xcKiIsCisgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKKyAgICAgICAgICAgIHJlZ2V4OiAi
XFx7IiwKKyAgICAgICAgICAgIG5leHQ6ICAicnVsZXNldCIKKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJALio/eyIsCisgICAg
ICAgICAgICBuZXh0OiAgIm1lZGlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAi
a2V5d29yZCIsCisgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKKyAgICAgICAgfSx7
CisgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKKyAgICAgICAgICAgIHJlZ2V4OiAiXFwu
W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAor
ICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCisgICAgICAgIH0seworICAgICAgICAg
ICAgdG9rZW46ICJjb25zdGFudCIsCisgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgor
ICAgICAgICB9XSwKKworICAgICAgICAibWVkaWEiIDogWyB7CisgICAgICAgICAgICB0b2tlbiA6
ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CisgICAgICAgICAgICByZWdleCA6ICJc
XC9cXCoiLAorICAgICAgICAgICAgbmV4dCA6ICJtZWRpYV9jb21tZW50IgorICAgICAgICB9LCB7
CisgICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCisgICAgICAgICAgICByZWdleDog
IlxceyIsCisgICAgICAgICAgICBuZXh0OiAgIm1lZGlhX3J1bGVzZXQiCisgICAgICAgIH0sewor
ICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAorICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAor
ICAgICAgICAgICAgbmV4dDogICJzdGFydCIKKyAgICAgICAgfSx7CisgICAgICAgICAgICB0b2tl
bjogImtleXdvcmQiLAorICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCisgICAgICAg
IH0seworICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCisgICAgICAgICAgICByZWdleDog
IlxcLlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAgICAgICAgIHRva2VuOiAic3RyaW5n
IiwKKyAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgorICAgICAgICB9LHsKKyAgICAg
ICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAorICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9d
KyIKKyAgICAgICAgfV0sCisKKyAgICAgICAgImNvbW1lbnQiIDogY29tbWVudCwKKworICAgICAg
ICAicnVsZXNldCIgOiBydWxlc2V0LAorICAgICAgICAicnVsZXNldF9jb21tZW50IiA6IHJ1bGVz
ZXRfY29tbWVudCwKKworICAgICAgICAibWVkaWFfcnVsZXNldCIgOiBtZWRpYV9ydWxlc2V0LAor
ICAgICAgICAibWVkaWFfY29tbWVudCIgOiBtZWRpYV9jb21tZW50CisgICAgfTsKK307CisKK29v
cC5pbmhlcml0cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKKworZXhw
b3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOworCit9KTsKKworYWNl
LmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS9tb2Rl
L2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIv
b29wIik7Cit2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3Vy
OwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZp
b3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIp
LlRva2VuSXRlcmF0b3I7CisKK3ZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisKKyAg
ICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIs
ICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0
ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09PSAnOicpIHsKKyAgICAgICAgICAgIHZhciBjdXJz
b3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRv
ciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4p
OworICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7Cisg
ICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CisgICAg
ICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBl
JykgeworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJz
b3Iucm93KTsKKyAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmco
Y3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChy
aWdodENoYXIgPT09ICc6JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pLm1hdGNoKC9e
XHMqOy8pKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQ6ICc6OycsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEs
IDFdCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlv
biIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7Cisg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7Cisg
ICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7Cisg
ICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93
KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQu
Y29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09PSAnOycpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOworICAgICAg
ICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p
OworCisgICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3Rh
dGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09
PSAnOycpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRp
b24oKTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iu
cm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3Iu
Y29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
PSAnOycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICcnLAorICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK30KK29vcC5pbmhl
cml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3NzQmVoYXZp
b3VyID0gQ3NzQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWxfaGln
aGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGli
L29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycsICdh
Y2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS94bWxfdXRpbCcs
ICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwordmFy
IGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwordmFyIENzc0hpZ2hsaWdodFJ1bGVzID0g
cmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7Cit2YXIg
SmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdo
dF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKK3ZhciB4bWxVdGlsID0gcmVxdWly
ZSgiLi94bWxfdXRpbCIpOwordmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4
dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CisKK3ZhciB0YWdNYXAgPSBs
YW5nLmNyZWF0ZU1hcCh7CisgICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKKyAgICBidXR0b24g
ICAgICA6ICdmb3JtJywKKyAgICBmb3JtICAgICAgICA6ICdmb3JtJywKKyAgICBpbWcgICAgICAg
ICA6ICdpbWFnZScsCisgICAgaW5wdXQgICAgICAgOiAnZm9ybScsCisgICAgbGFiZWwgICAgICAg
OiAnZm9ybScsCisgICAgc2NyaXB0ICAgICAgOiAnc2NyaXB0JywKKyAgICBzZWxlY3QgICAgICA6
ICdmb3JtJywKKyAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKKyAgICBzdHlsZSAgICAgICA6ICdz
dHlsZScsCisgICAgdGFibGUgICAgICAgOiAndGFibGUnLAorICAgIHRib2R5ICAgICAgIDogJ3Rh
YmxlJywKKyAgICB0ZCAgICAgICAgICA6ICd0YWJsZScsCisgICAgdGZvb3QgICAgICAgOiAndGFi
bGUnLAorICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKKyAgICB0ciAgICAgICAgICA6ICd0YWJs
ZScKK30pOworCit2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy4kcnVsZXMgPSB7CisgICAgICAgIHN0YXJ0IDogW3sKKyAgICAgICAgICAgIHRva2VuIDogInRl
eHQiLAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwKKyAgICAgICAgICAg
IG5leHQgOiAiY2RhdGEiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogInhtbC1w
ZSIsCisgICAgICAgICAgICByZWdleCA6ICI8XFw/Lio/XFw/PiIKKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCisgICAgICAgICAgICByZWdleCA6ICI8XFwhLS0i
LAorICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgorICAgICAgICB9LCB7CisgICAgICAgICAg
ICB0b2tlbiA6ICJ4bWwtcGUiLAorICAgICAgICAgICAgcmVnZXggOiAiPFxcIS4qPz4iCisgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKKyAgICAgICAgICAgIHJl
Z2V4IDogIjwoPz1zY3JpcHRcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic2NyaXB0IgorICAg
ICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsCisgICAgICAgICAgICBy
ZWdleCA6ICI8KD89c3R5bGVcXGIpIiwKKyAgICAgICAgICAgIG5leHQgOiAic3R5bGUiCisgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwgLy8gb3BlbmluZyB0YWcK
KyAgICAgICAgICAgIHJlZ2V4IDogIjxcXC8/IiwKKyAgICAgICAgICAgIG5leHQgOiAidGFnIgor
ICAgICAgICB9LCB7CisgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKKyAgICAgICAgICAgIHJl
Z2V4IDogIlxccysiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50
LmNoYXJhY3Rlci5lbnRpdHkiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwo
PzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCisgICAgICAgIH1d
LAorICAgIAorICAgICAgICBjZGF0YSA6IFsgeworICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIs
CisgICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IiwKKyAgICAgICAgICAgIG5leHQgOiAic3Rh
cnQiCisgICAgICAgIH0gXSwKKworICAgICAgICBjb21tZW50IDogWyB7CisgICAgICAgICAgICB0
b2tlbiA6ICJjb21tZW50IiwKKyAgICAgICAgICAgIHJlZ2V4IDogIi4qPy0tPiIsCisgICAgICAg
ICAgICBuZXh0IDogInN0YXJ0IgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0VG9r
ZW4gOiAiY29tbWVudCIKKyAgICAgICAgfSBdCisgICAgfTsKKyAgICAKKyAgICB4bWxVdGlsLnRh
Zyh0aGlzLiRydWxlcywgInRhZyIsICJzdGFydCIsIHRhZ01hcCk7CisgICAgeG1sVXRpbC50YWco
dGhpcy4kcnVsZXMsICJzdHlsZSIsICJjc3Mtc3RhcnQiLCB0YWdNYXApOworICAgIHhtbFV0aWwu
dGFnKHRoaXMuJHJ1bGVzLCAic2NyaXB0IiwgImpzLXN0YXJ0IiwgdGFnTWFwKTsKKyAgICAKKyAg
ICB0aGlzLmVtYmVkUnVsZXMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCAianMtIiwgW3sKKyAg
ICAgICAgdG9rZW46ICJjb21tZW50IiwKKyAgICAgICAgcmVnZXg6ICJcXC9cXC8uKig/PTxcXC9z
Y3JpcHQ+KSIsCisgICAgICAgIG5leHQ6ICJ0YWciCisgICAgfSwgeworICAgICAgICB0b2tlbjog
Im1ldGEudGFnIiwKKyAgICAgICAgcmVnZXg6ICI8XFwvKD89c2NyaXB0KSIsCisgICAgICAgIG5l
eHQ6ICJ0YWciCisgICAgfV0pOworICAgIAorICAgIHRoaXMuZW1iZWRSdWxlcyhDc3NIaWdobGln
aHRSdWxlcywgImNzcy0iLCBbeworICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwKKyAgICAgICAg
cmVnZXg6ICI8XFwvKD89c3R5bGUpIiwKKyAgICAgICAgbmV4dDogInRhZyIKKyAgICB9XSk7Cit9
OworCitvb3AuaW5oZXJpdHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMp
OworCitleHBvcnRzLkh0bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW9kZS94bWxfdXRpbCcsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwor
ZnVuY3Rpb24gc3RyaW5nKHN0YXRlKSB7CisgICAgcmV0dXJuIFt7CisgICAgICAgIHRva2VuIDog
InN0cmluZyIsCisgICAgICAgIHJlZ2V4IDogJyInLAorICAgICAgICBuZXh0IDogc3RhdGUgKyAi
X3Fxc3RyaW5nIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAgICAgICAg
cmVnZXggOiAiJyIsCisgICAgICAgIG5leHQgOiBzdGF0ZSArICJfcXN0cmluZyIKKyAgICB9XTsK
K30KKworZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKHF1b3RlLCBzdGF0ZSkgeworICAgIHJldHVy
biBbCisgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IHF1b3RlLCBuZXh0IDogc3Rh
dGV9LAorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5l
c2NhcGUiLAorICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1m
QS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiIAorICAgICAgICB9LAorICAgICAgICB7
ZGVmYXVsdFRva2VuIDogInN0cmluZyJ9CisgICAgXTsKK30KKworZXhwb3J0cy50YWcgPSBmdW5j
dGlvbihzdGF0ZXMsIG5hbWUsIG5leHRTdGF0ZSwgdGFnTWFwKSB7CisgICAgc3RhdGVzW25hbWVd
ID0gW3sKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgIHJlZ2V4IDogIlxccysiCisg
ICAgfSwgeworICAgICAgICAKKyAgICB0b2tlbiA6ICF0YWdNYXAgPyAibWV0YS50YWcudGFnLW5h
bWUiIDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0YWdNYXBbdmFsdWVdKQor
ICAgICAgICAgICAgICAgIHJldHVybiAibWV0YS50YWcudGFnLW5hbWUuIiArIHRhZ01hcFt2YWx1
ZV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRhLnRhZy50
YWctbmFtZSI7CisgICAgICAgIH0sCisgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyIs
CisgICAgICAgIG5leHQgOiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIgCisgICAgfSwg
eworICAgICAgICB0b2tlbjogImVtcHR5IiwKKyAgICAgICAgcmVnZXg6ICIiLAorICAgICAgICBu
ZXh0IDogbmFtZSArICJfZW1iZWRfYXR0cmlidXRlX2xpc3QiCisgICAgfV07CisKKyAgICBzdGF0
ZXNbbmFtZSArICJfcXN0cmluZyJdID0gbXVsdGlMaW5lU3RyaW5nKCInIiwgbmFtZSArICJfZW1i
ZWRfYXR0cmlidXRlX2xpc3QiKTsKKyAgICBzdGF0ZXNbbmFtZSArICJfcXFzdHJpbmciXSA9IG11
bHRpTGluZVN0cmluZygiXCIiLCBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIpOworICAg
IAorICAgIHN0YXRlc1tuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCJdID0gW3sKKyAgICAg
ICAgdG9rZW4gOiAibWV0YS50YWcuciIsCisgICAgICAgIHJlZ2V4IDogIi8/PiIsCisgICAgICAg
IG5leHQgOiBuZXh0U3RhdGUKKyAgICB9LCB7CisgICAgICAgIHRva2VuIDogImtleXdvcmQub3Bl
cmF0b3IiLAorICAgICAgICByZWdleCA6ICI9IgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAi
ZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIiwKKyAgICAgICAgcmVnZXggOiAiWy1fYS16QS1a
MC05Ol0rIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8v
IGZsb2F0CisgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1b
Ky1dP1xcZCspPyk/XFxiIgorICAgIH0sIHsKKyAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAg
ICAgIHJlZ2V4IDogIlxccysiCisgICAgfV0uY29uY2F0KHN0cmluZyhuYW1lKSk7Cit9OworCit9
KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2h0bWwnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91ci94
bWwnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVp
cmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhh
dmlvdXIveG1sIikuWG1sQmVoYXZpb3VyOwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUo
Ii4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwordmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJl
KCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cit2YXIgdm9pZEVsZW1lbnRz
ID0gWydhcmVhJywgJ2Jhc2UnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1iZWQnLCAnaHIn
LCAnaW1nJywgJ2lucHV0JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nLCAnc291
cmNlJywgJ3RyYWNrJywgJ3diciddOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7
CisgICAgdmFyIGhhc1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUu
c3BsaXQoJy4nKTsKKyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBu
ZWVkbGVMaXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0
LmluZGV4T2YobmVlZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJu
IGhhc1R5cGU7Cit9CisKK3ZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgeworCisgICAg
dGhpcy5pbmhlcml0KFhtbEJlaGF2aW91cik7IC8vIEdldCB4bWwgYmVoYXZpb3VyCisgICAgCisg
ICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwg
YWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gJz4n
KSB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24o
KTsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24s
IHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9
IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgdmFyIGF0Q3Vyc29yID0g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50
YWcnKSAmJiAhKGhhc1R5cGUodG9rZW4sICd0ZXh0JykgJiYgdG9rZW4udmFsdWUubWF0Y2goJy8n
KSkpeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBp
dGVyYXRvci5zdGVwQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAm
JiAoaGFzVHlwZSh0b2tlbiwgJ3N0cmluZycpIHx8IGhhc1R5cGUodG9rZW4sICdrZXl3b3JkLm9w
ZXJhdG9yJykgfHwgaGFzVHlwZSh0b2tlbiwgJ2VudGl0eS5hdHRyaWJ1dGUtbmFtZScpIHx8IGhh
c1R5cGUodG9rZW4sICd0ZXh0JykpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYXRDdXJzb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0
b2tlbiB8fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnLW5hbWUnKSB8fCBpdGVyYXRvci5zdGVw
QmFja3dhcmQoKS52YWx1ZS5tYXRjaCgnLycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOworICAg
ICAgICAgICAgaWYgKGF0Q3Vyc29yKXsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVs
ZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuLnN0YXJ0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2b2lkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAh
PT0gLTEpeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICB0ZXh0OiAnPicgKyAnPC8nICsgZWxlbWVudCAr
ICc+JywKKyAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KK29vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3VyLCBYbWxCZWhh
dmlvdXIpOworCitleHBvcnRzLkh0bWxCZWhhdmlvdXIgPSBIdG1sQmVoYXZpb3VyOworfSk7CisK
K2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2Uv
bW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4v
bGliL29vcCIpOwordmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2
aW91cjsKK3ZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJl
aGF2aW91cjsKK3ZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0
b3IiKS5Ub2tlbkl0ZXJhdG9yOworCitmdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0eXBlKSB7Cisg
ICAgdmFyIGhhc1R5cGUgPSB0cnVlOworICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3Bs
aXQoJy4nKTsKKyAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsKKyAgICBuZWVk
bGVMaXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKKyAgICAgICAgaWYgKHR5cGVMaXN0Lmlu
ZGV4T2YobmVlZGxlKSA9PSAtMSkgeworICAgICAgICAgICAgaGFzVHlwZSA9IGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGhh
c1R5cGU7Cit9CisKK3ZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CisgICAgCisgICAg
dGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91ciwgWyJzdHJpbmdfZHF1b3RlcyJdKTsgLy8gR2V0
IHN0cmluZyBiZWhhdmlvdXIKKyAgICAKKyAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5z
ZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkg
eworICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9
IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0g
bmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4p
OworICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7Cisg
ICAgICAgICAgICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghdG9rZW4g
fHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRhZycpICYmICEoaGFzVHlwZSh0b2tlbiwgJ3RleHQn
KSAmJiB0b2tlbi52YWx1ZS5tYXRjaCgnLycpKSl7CisgICAgICAgICAgICAgICAgZG8geworICAg
ICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOworICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIChoYXNUeXBlKHRva2VuLCAnc3RyaW5nJykgfHwg
aGFzVHlwZSh0b2tlbiwgJ2tleXdvcmQub3BlcmF0b3InKSB8fCBoYXNUeXBlKHRva2VuLCAnZW50
aXR5LmF0dHJpYnV0ZS1uYW1lJykgfHwgaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2VuLCAnbWV0YS50
YWctbmFtZScpIHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLnZhbHVlLm1hdGNoKCcvJykpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0
YWcgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CisgICAgICAgICAg
ICAgICAgdmFyIHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW4u
c3RhcnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgdGV4dDogJz4nICsgJzwvJyArIHRhZyArICc+JywKKyAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRo
aXMuYWRkKCdhdXRvaW5kZW50JywgJ2luc2VydGlvbicsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9u
LCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewor
ICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAg
ICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAg
ICAgICAgICAgdmFyIHJpZ2h0Q2hhcnMgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBj
dXJzb3IuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFycyA9PSAnPC8nKSB7
CisgICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChzZXNzaW9uLmRv
Yy5nZXRMaW5lKGN1cnNvci5yb3cpKSArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CisgICAgICAg
ICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZG9jLmdl
dExpbmUoY3Vyc29yLnJvdykpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCwKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50
Lmxlbmd0aF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKKyAgICAKK30KK29vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CisK
K2V4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS9tb2RlL2ZvbGRpbmcvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsICdhY2UvbW9kZS9mb2xk
aW5nL3htbCcsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKKworCit2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIp
OwordmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7Cit2YXIg
WG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwordmFyIENTdHlsZUZvbGRN
b2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIEZvbGRNb2RlID0gZXhw
b3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkgeworICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlz
LCBuZXcgWG1sRm9sZE1vZGUoeworICAgICAgICAiYXJlYSI6IDEsCisgICAgICAgICJiYXNlIjog
MSwKKyAgICAgICAgImJyIjogMSwKKyAgICAgICAgImNvbCI6IDEsCisgICAgICAgICJjb21tYW5k
IjogMSwKKyAgICAgICAgImVtYmVkIjogMSwKKyAgICAgICAgImhyIjogMSwKKyAgICAgICAgImlt
ZyI6IDEsCisgICAgICAgICJpbnB1dCI6IDEsCisgICAgICAgICJrZXlnZW4iOiAxLAorICAgICAg
ICAibGluayI6IDEsCisgICAgICAgICJtZXRhIjogMSwKKyAgICAgICAgInBhcmFtIjogMSwKKyAg
ICAgICAgInNvdXJjZSI6IDEsCisgICAgICAgICJ0cmFjayI6IDEsCisgICAgICAgICJ3YnIiOiAx
LAorICAgICAgICAibGkiOiAxLAorICAgICAgICAiZHQiOiAxLAorICAgICAgICAiZGQiOiAxLAor
ICAgICAgICAicCI6IDEsCisgICAgICAgICJydCI6IDEsCisgICAgICAgICJycCI6IDEsCisgICAg
ICAgICJvcHRncm91cCI6IDEsCisgICAgICAgICJvcHRpb24iOiAxLAorICAgICAgICAiY29sZ3Jv
dXAiOiAxLAorICAgICAgICAidGQiOiAxLAorICAgICAgICAidGgiOiAxCisgICAgfSksIHsKKyAg
ICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAorICAgICAgICAiY3NzLSI6IG5ldyBD
U3R5bGVGb2xkTW9kZSgpCisgICAgfSk7Cit9OworCitvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1p
eGVkRm9sZE1vZGUpOworCit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvZm9sZGluZy9taXhl
ZCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCYXNl
Rm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOworCit2YXIgRm9sZE1v
ZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1Yk1vZGVzKSB7
CisgICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOworICAgIHRoaXMuc3ViTW9kZXMg
PSBzdWJNb2RlczsKK307Citvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisK
KyhmdW5jdGlvbigpIHsKKworCisgICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9uKHN0YXRlKSB7
CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CisgICAgICAgICAgICBp
ZiAoc3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LnN1Yk1vZGVzW2tleV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAKKyAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRT
dHlsZSwgcm93KSB7CisgICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzdGF0ZSk7Cisg
ICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5
bGUsIHJvdykgOiAiIik7CisgICAgfTsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0
aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CisgICAgICAgIHJldHVybiAoCisgICAgICAg
ICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNzaW9uLCBmb2xk
U3R5bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0
ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKKyAgICAgICAgICAgIHRoaXMuZGVm
YXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKKyAgICAgICAg
KTsKKyAgICB9OworCisgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNz
aW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUo
c2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtb2RlIHx8
ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQorICAgICAgICAg
ICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRT
dHlsZSwgcm93KSkKKyAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sIGZvbGRT
dHlsZSwgcm93KTsKKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30p
OworCithY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL3htbCcsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9yYW5n
ZScsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVp
cmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmci
KTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2YXIgQmFzZUZv
bGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKK3ZhciBUb2tlbkl0ZXJh
dG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOworCit2
YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzKSB7
CisgICAgQmFzZUZvbGRNb2RlLmNhbGwodGhpcyk7CisgICAgdGhpcy52b2lkRWxlbWVudHMgPSB2
b2lkRWxlbWVudHMgfHwge307Cit9Oworb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1v
ZGUpOworCisoZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlv
bihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgeworICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0
Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKKworICAgICAgICBpZiAodGFnLmNsb3Npbmcp
CisgICAgICAgICAgICByZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiID8gImVuZCIg
OiAiIjsKKworICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRoaXMudm9pZEVsZW1lbnRzW3Rh
Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCldKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAg
ICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAg
ICAgaWYgKHRhZy52YWx1ZS5pbmRleE9mKCIvIiArIHRhZy50YWdOYW1lKSAhPT0gLTEpCisgICAg
ICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgfTsKKyAg
ICAKKyAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykg
eworICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKKyAgICAgICAg
dmFyIHZhbHVlID0gIiI7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpID09PSAwKQorICAgICAgICAgICAg
ICAgIHZhbHVlICs9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHZhbHVlICs9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgdG9rZW4udmFsdWUubGVuZ3RoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVGFnKHZhbHVl
KTsKKyAgICB9OworCisgICAgdGhpcy50YWdSZSA9IC9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVow
LTk6IV0qKVxzKihcLz8pPj8pLzsKKyAgICB0aGlzLl9wYXJzZVRhZyA9IGZ1bmN0aW9uKHRhZykg
eworICAgICAgICAKKyAgICAgICAgdmFyIG1hdGNoID0gdGhpcy50YWdSZS5leGVjKHRhZyk7Cisg
ICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhZ1JlLmxhc3RJbmRleCB8fCAwOworICAgICAgICB0
aGlzLnRhZ1JlLmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHZhbHVlOiB0YWcsCisgICAgICAgICAgICBtYXRjaDogbWF0Y2ggPyBtYXRjaFsyXSA6ICIiLAor
ICAgICAgICAgICAgY2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzNdIDogZmFsc2UsCisgICAgICAg
ICAgICBzZWxmQ2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzVdIHx8IG1hdGNoWzJdID09ICIvPiIg
OiBmYWxzZSwKKyAgICAgICAgICAgIHRhZ05hbWU6IG1hdGNoID8gbWF0Y2hbNF0gOiAiIiwKKyAg
ICAgICAgICAgIGNvbHVtbjogbWF0Y2hbMV0gPyBjb2x1bW4gKyBtYXRjaFsxXS5sZW5ndGggOiBj
b2x1bW4KKyAgICAgICAgfTsKKyAgICB9OworICAgIHRoaXMuX3JlYWRUYWdGb3J3YXJkID0gZnVu
Y3Rpb24oaXRlcmF0b3IpIHsKKyAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVu
dFRva2VuKCk7CisgICAgICAgIGlmICghdG9rZW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgICAgIAorICAgICAgICB2YXIgdmFsdWUgPSAiIjsKKyAgICAgICAgdmFyIHN0YXJ0
OworICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5k
ZXhPZigibWV0YS50YWciKSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghc3RhcnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0geworICAgICAgICAgICAgICAgICAgICAg
ICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUg
Kz0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIj4iKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAg
ICAgICAgICAgIHRhZy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJh
dG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u
OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVw
Rm9yd2FyZCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0
ZXBGb3J3YXJkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAg
ICAKKyAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgeworICAg
ICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKKyAgICAgICAgaWYg
KCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgCisgICAgICAg
IHZhciB2YWx1ZSA9ICIiOworICAgICAgICB2YXIgZW5kOworCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWVuZCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5D
b2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlICsgdmFs
dWU7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGFnLmVuZCA9IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgdGFnLnN0
YXJ0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50
VG9rZW5Sb3coKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0
Q3VycmVudFRva2VuQ29sdW1uKCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0YWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdo
aWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICB0aGlzLl9wb3AgPSBmdW5jdGlvbihzdGFj
aywgdGFnKSB7CisgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdmFyIHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKKyAgICAgICAgICAg
IGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YWNrLnBvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAodGhpcy52b2lkRWxlbWVudHNbdGFnLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52b2lkRWxlbWVu
dHNbdG9wLnRhZ05hbWVdKSB7CisgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAg
ICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwg
cm93KSB7CisgICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNl
c3Npb24sIHJvdyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0VGFnLm1hdGNoKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICB2YXIgaXNCYWNrd2FyZCA9
IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CisgICAgICAgIHZhciBz
dGFjayA9IFtdOworICAgICAgICB2YXIgdGFnOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0Jh
Y2t3YXJkKSB7CisgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihz
ZXNzaW9uLCByb3csIGZpcnN0VGFnLmNvbHVtbik7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7
CisgICAgICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICAgICAgY29sdW1uOiBmaXJz
dFRhZy5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQoaXRlcmF0b3Ip
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFn
LnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YWcuY2xv
c2luZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RhY2sucHVzaCh0YWcpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2Vu
SXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRhZy5tYXRjaC5s
ZW5ndGgpOworICAgICAgICAgICAgdmFyIGVuZCA9IHsKKyAgICAgICAgICAgICAgICByb3c6IHJv
dywKKyAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLmNvbHVtbgorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdC
YWNrd2FyZChpdGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5n
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKCF0YWcuY2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Ao
c3RhY2ssIHRhZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFt
ZS5sZW5ndGggKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Q
b2ludHModGFnLnN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGFj
ay5wdXNoKHRhZykKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgfTsKKworfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOworCit9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVf
amF2YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21v
ZGVfamF2YXNjcmlwdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTVlODRkNmQxOTljN2E0NjU3OGE5MTllYWNm
NjY0Zjg0YTk4YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2NyaXB0LmpzCkBAIC0wLDAgKzEsODk2IEBACisvKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUg
QlNEIGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworYWNlLmRl
ZmluZSgnYWNlL21vZGUvamF2YXNjcmlwdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvdGV4dCcsICdhY2UvdG9rZW5pemVyJywgJ2Fj
ZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL21hdGNoaW5nX2Jy
YWNlX291dGRlbnQnLCAnYWNlL3JhbmdlJywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdh
Y2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK3ZhciBvb3AgPSByZXF1aXJl
KCIuLi9saWIvb29wIik7Cit2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwor
dmFyIFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsKK3ZhciBK
YXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0
X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwordmFyIE1hdGNoaW5nQnJhY2VPdXRk
ZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91
dGRlbnQ7Cit2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwordmFyIFdvcmtl
ckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50
OwordmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNz
dHlsZUJlaGF2aW91cjsKK3ZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9j
c3R5bGUiKS5Gb2xkTW9kZTsKKwordmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiR0
b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoKS5n
ZXRSdWxlcygpKTsKKyAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50
KCk7CisgICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOworICAgIHRo
aXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cit9Oworb29wLmluaGVyaXRz
KE1vZGUsIFRleHRNb2RlKTsKKworKGZ1bmN0aW9uKCkgeworCisKKyAgICB0aGlzLnRvZ2dsZUNv
bW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAg
ICAgICAgdmFyIG91dGRlbnQgPSB0cnVlOworICAgICAgICB2YXIgcmUgPSAvXihccyopXC9cLy87
CisKKyAgICAgICAgZm9yICh2YXIgaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoIXJlLnRlc3QoZG9jLmdldExpbmUoaSkpKSB7CisgICAgICAgICAgICAgICAg
b3V0ZGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG91dGRlbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxl
dGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIGk9
c3RhcnRSb3c7IGk8PSBlbmRSb3c7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKGkpOworICAgICAgICAgICAgICAgIHZhciBtID0gbGlu
ZS5tYXRjaChyZSk7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsK
KyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKKyAgICAgICAgICAgICAg
ICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ZG9jLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIG1bMV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9jLmluZGVudFJvd3Moc3RhcnRSb3csIGVu
ZFJvdywgIi8vIik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5nZXROZXh0TGluZUlu
ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKKyAgICAgICAgdmFyIGluZGVudCA9
IHRoaXMuJGdldEluZGVudChsaW5lKTsKKworICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRo
aXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKKyAgICAgICAgdmFyIHRv
a2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOworICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tl
bml6ZWRMaW5lLnN0YXRlOworCisgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0
b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CisgICAgICAgICAgICByZXR1cm4g
aW5kZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0
IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dlZCIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9
IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7CisgICAgICAg
ICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CisgICAg
ICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAicmVnZXhfYWxsb3dl
ZCIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOworICAgICAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZGVudCArPSAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGluZGVudCArPSAiKiAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGluZGVudDsKKyAgICB9OworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlv
bihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hl
Y2tPdXRkZW50KGxpbmUsIGlucHV0KTsKKyAgICB9OworCisgICAgdGhpcy5hdXRvT3V0ZGVudCA9
IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgeworICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9P
dXRkZW50KGRvYywgcm93KTsKKyAgICB9OworICAgIAorICAgIHRoaXMuY3JlYXRlV29ya2VyID0g
ZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVu
dChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtl
ciIpOworICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50
KCkpOworCisgICAgICAgIHdvcmtlci5vbigianNsaW50IiwgZnVuY3Rpb24ocmVzdWx0cykgewor
ICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOworICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gd29ya2VyOworICAgIH07CisKK30pLmNhbGwoTW9k
ZS5wcm90b3R5cGUpOworCitleHBvcnRzLk1vZGUgPSBNb2RlOworfSk7CisKK2FjZS5kZWZpbmUo
J2FjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdo
bGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xp
Yi9vb3AiKTsKK3ZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19j
b21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKK3ZhciBU
ZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4
dEhpZ2hsaWdodFJ1bGVzOworCit2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIo
eworICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgorICAgICAgICAgICAgIkFycmF5fEJvb2xl
YW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJv
eHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgICJOYW1lc3BhY2V8UU5hbWV8WE1M
fFhNTExpc3R8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg
Ly8gRTRYCisgICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJh
eXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCisgICAgICAgICAgICAiVWlu
dDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAg
ICAgICAgICAgICAgICArCisgICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJy
b3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgICArIC8vIEVycm9y
cworICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgImRlY29kZVVS
SXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlz
RmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgICAgICAiaXNO
YU58cGFyc2VGbG9hdHxwYXJzZUludHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArCisgICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVy
CisgICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbworICAgICAgICAia2V5
d29yZCI6CisgICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8IiArCisgICAg
ICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNl
fGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKworICAgICAgICAgICAgImlmfGlufGluc3RhbmNlb2Z8
bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVi
dWdnZXJ8IiArCisgICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNj
YXBlfHdpdGh8X19wcm90b19ffCIgKworICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xz
dXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxw
cm90ZWN0ZWR8c3RhdGljIiwKKyAgICAgICAgInN0b3JhZ2UudHlwZSI6CisgICAgICAgICAgICAi
Y29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCisgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6Cisg
ICAgICAgICAgICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwKKyAgICAgICAgInN1cHBv
cnQuZnVuY3Rpb24iOgorICAgICAgICAgICAgImFsZXJ0IiwKKyAgICAgICAgImNvbnN0YW50Lmxh
bmd1YWdlLmJvb2xlYW4iOiAidHJ1ZXxmYWxzZSIKKyAgICB9LCAiaWRlbnRpZmllciIpOworICAg
IHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0
dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CisgICAgdmFyIGlkZW50aWZpZXJSZSA9
ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSpc
XGIiOworCisgICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAv
LyBoZXgKKyAgICAgICAgInVbMC05YS1mQS1GXXs0fXwiICsgLy8gdW5pY29kZQorICAgICAgICAi
WzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKKyAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8g
b2N0CisgICAgICAgICIzN1swLTddP3wiICsgLy8gb2N0CisgICAgICAgICJbNC03XVswLTddP3wi
ICsgLy9vY3QKKyAgICAgICAgIi4pIjsKKworICAgIHRoaXMuJHJ1bGVzID0geworICAgICAgICAi
c3RhcnQiIDogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1l
bnQiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0
YXJ0IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIs
IC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAor
ICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIico
Pz0uKSIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKKyAgICAgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgIHJl
Z2V4IDogJyIoPz0uKScsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIs
IC8vIGhleAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLzBbeFhdWzAtOWEtZkEtRl0rXGIvCisg
ICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJp
YyIsIC8vIGZsb2F0CisgICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZCsoPzooPzpcLlxk
Kik/KD86W2VFXVsrLV0/XGQrKT8pP1xiLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIHRva2VuIDogWworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0
dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAorICAgICAgICAgICAgICAgICAg
ICAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIs
ImtleXdvcmQub3BlcmF0b3IiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBy
ZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBp
ZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rp
b25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDog
WworICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJh
dG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAorICAgICAgICAgICAgICAgICAg
ICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBh
cmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDog
IigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9
KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1
bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQi
LCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCisgICAgICAgICAg
ICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMq
KShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9u
X2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6IFsK
KyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRv
ciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAg
ImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdl
LnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxw
YXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsg
aWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMq
KShmdW5jdGlvbikoXFxzKykoXFx3KykoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4
dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6IFsKKyAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0Iiwg
ImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgorICAgICAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAiKGZ1bmN0aW9uKShcXHMrKSgiICsg
aWRlbnRpZmllclJlICsgIikoXFxzKikoXFwoKSIsCisgICAgICAgICAgICAgICAgbmV4dDogImZ1
bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6IFsKKyAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQi
LCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAorICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJz
dG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCisgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDop
KFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAiZnVu
Y3Rpb25fYXJndW1lbnRzIgorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2Vu
IDogWworICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIs
ICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
ICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCisgICAgICAgICAg
ICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICByZWdleCA6ICIo
PzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKKyAgICAgICAgICAgICAgICBuZXh0IDogInJlZ2V4
X2FsbG93ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1
bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKKyAgICAgICAgICAgICAg
ICByZWdleCA6IC8oXC4pKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFs
b2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B6enp6
fHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIo
PzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRl
cil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJz
KXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpN
KD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVh
cil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxo
KD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4o
PzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98
YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3Qp
KXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2Fz
ZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8
aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0
dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRh
dGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5y
ZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5j
ZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgo
PzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0
YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8
U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxy
d2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhP
Zil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0
fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxj
fHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxh
bmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMp
fG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/
fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRz
fEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3Bv
bnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFi
b3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxy
ZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rp
b24uZG9tIl0sCisgICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86dWIoPzpzdHJpbmdE
YXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxs
ZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/
OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpI
ZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258
RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0
KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxh
cHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBl
bmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFt
ZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVu
dCg/OnNCeSg/Ok5hbWV8VGFnTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxi
KD89XCgpLworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5j
dHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmNvbnN0YW50Il0sCisgICAgICAgICAgICAgICAg
cmVnZXggOiAvKFwuKShzKD86eXN0ZW1MYW5ndWFnZXxjcig/OmlwdHN8b2xsYmFyc3xlZW4oPzpY
fFl8VG9wfExlZnQpKXx0KD86eWxlKD86U2hlZXRzKT98YXR1cyg/OlRleHR8YmFyKT8pfGlibGlu
Zyg/OkJlbG93fEFib3ZlKXxvdXJjZXx1ZmZpeGVzfGUoPzpjdXJpdHkoPzpQb2xpY3kpP3xsKD86
ZWN0aW9ufGYpKSl8aCg/OmlzdG9yeXxvc3QoPzpuYW1lKT98YXMoPzpofEZvY3VzKSl8eXxYKD86
TUxEb2N1bWVudHxTTERvY3VtZW50KXxuKD86ZXh0fGFtZSg/OnNwYWNlKD86c3xVUkkpfFByb3Ap
KXxNKD86SU5fVkFMVUV8QVhfVkFMVUUpfGMoPzpoYXJhY3RlclNldHxvKD86big/OnN0cnVjdG9y
fHRyb2xsZXJzKXxva2llRW5hYmxlZHxsb3JEZXB0aHxtcCg/Om9uZW50c3xsZXRlKSl8dXJyZW50
fHB1Q2xhc3N8bCg/OmkoPzpwKD86Ym9hcmREYXRhKT98ZW50SW5mb3JtYXRpb24pfG9zZWR8YXNz
ZXMpfGFsbGUoPzplfHIpfHJ5cHRvKXx0KD86byg/Om9sYmFyfHApfGV4dCg/OlRyYW5zZm9ybXxJ
bmRlbnR8RGVjb3JhdGlvbnxBbGlnbil8YWdzKXxTUVJUKD86MV8yfDIpfGkoPzpuKD86bmVyKD86
SGVpZ2h0fFdpZHRoKXxwdXQpfGRzfGdub3JlQ2FzZSl8ekluZGV4fG8oPzpzY3B1fG4oPzpyZWFk
eXN0YXRlY2hhbmdlfExpbmUpfHV0ZXIoPzpIZWlnaHR8V2lkdGgpfHAoPzpzUHJvZmlsZXxlbmVy
KXxmZnNjcmVlbkJ1ZmZlcmluZyl8TkVHQVRJVkVfSU5GSU5JVFl8ZCg/OmkoPzpzcGxheXxhbG9n
KD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0fEFyZ3VtZW50cyl8cmVjdG9yaWVzKXxlKD86c2NyaXB0
aW9ufGZhdWx0KD86U3RhdHVzfENoKD86ZWNrZWR8YXJzZXQpfFZpZXcpKSl8dSg/OnNlcig/OlBy
b2ZpbGV8TGFuZ3VhZ2V8QWdlbnQpfG4oPzppcXVlSUR8ZGVmaW5lZCl8cGRhdGVJbnRlcnZhbCl8
X2NvbnRlbnR8cCg/Oml4ZWxEZXB0aHxvcnR8ZXJzb25hbGJhcnxrY3MxMXxsKD86dWdpbnN8YXRm
b3JtKXxhKD86dGhuYW1lfGRkaW5nKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KXxyZW50KD86V2lu
ZG93fExheWVyKT98Z2UoPzpYKD86T2Zmc2V0KT98WSg/Ok9mZnNldCk/KSl8cig/Om8oPzp0byg/
OmNvbHx0eXBlKXxkdWN0KD86U3ViKT98bXB0ZXIpfGUoPzp2aW91c3xmaXgpKSl8ZSg/Om4oPzpj
b2Rpbmd8YWJsZWRQbHVnaW4pfHgoPzp0ZXJuYWx8cGFuZG8pfG1iZWRzKXx2KD86aXNpYmlsaXR5
fGVuZG9yKD86U3ViKT98TGlua2NvbG9yKXxVUkxVbmVuY29kZWR8UCg/Okl8T1NJVElWRV9JTkZJ
TklUWSl8Zig/OmlsZW5hbWV8byg/Om50KD86U2l6ZXxGYW1pbHl8V2VpZ2h0KXxybU5hbWUpfHJh
bWUoPzpzfEVsZW1lbnQpfGdDb2xvcil8RXx3aGl0ZVNwYWNlfGwoPzppKD86c3RTdHlsZVR5cGV8
big/OmVIZWlnaHR8a0NvbG9yKSl8byg/OmNhKD86dGlvbig/OmJhcik/fGxOYW1lKXx3c3JjKXxl
KD86bmd0aHxmdCg/OkNvbnRleHQpPyl8YSg/OnN0KD86TSg/Om9kaWZpZWR8YXRjaCl8SW5kZXh8
UGFyZW4pfHllcig/OnN8WCl8bmd1YWdlKSl8YSg/OnBwKD86TWlub3JWZXJzaW9ufE5hbWV8Q28o
PzpkZU5hbWV8cmUpfFZlcnNpb24pfHZhaWwoPzpIZWlnaHR8VG9wfFdpZHRofExlZnQpfGxsfHIo
PzppdHl8Z3VtZW50cyl8TGlua2NvbG9yfGJvdmUpfHIoPzppZ2h0KD86Q29udGV4dCk/fGUoPzpz
cG9uc2UoPzpYTUx8VGV4dCl8YWR5U3RhdGUpKXxnbG9iYWx8eHxtKD86aW1lVHlwZXN8dWx0aWxp
bmV8ZW51YmFyfGFyZ2luKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KSl8TCg/Ok4oPzoxMHwyKXxP
Ryg/OjEwRXwyRSkpfGIoPzpvKD86dHRvbXxyZGVyKD86V2lkdGh8UmlnaHRXaWR0aHxCb3R0b21X
aWR0aHxTdHlsZXxDb2xvcnxUb3BXaWR0aHxMZWZ0V2lkdGgpKXx1ZmZlckRlcHRofGVsb3d8YWNr
Z3JvdW5kKD86Q29sb3J8SW1hZ2UpKSlcYi8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1
cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhjb25z
b2xlKShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRpbWVFbmR8YXNzZXJ0KVxiLworICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKKyAg
ICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXJSZQorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAorICAgICAgICAgICAgICAg
IHJlZ2V4IDogLy0tfFwrXCt8WyEkJSYqK1wtfl18PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+
Pj18Pj4+PXw8Pnw8fD58IXwmJnxcfFx8fFw/XDp8XCo9fCU9fFwrPXxcLT18Jj18XF49LywKKyAg
ICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAg
ICAgICAgICByZWdleCA6IC9cP3xcOnxcLHxcO3xcLi8sCisgICAgICAgICAgICAgICAgbmV4dCAg
OiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJwYXJlbi5scGFyZW4iLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8sCisg
ICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKKyAgICAgICAgICAgIH0sIHsK
KyAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAorICAgICAgICAgICAgICAg
IHJlZ2V4IDogL1tcXSl9XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IC9cLz0/LywK
KyAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZWdleF9hbGxvd2VkIgorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCisgICAgICAgICAgICAgICAgcmVn
ZXg6IC9eIyEuKiQvCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9h
bGxvd2VkIjogWworICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0
UnVsZSgiZG9jLXN0YXJ0IiksCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4g
OiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgIHJlZ2V4
IDogIlxcL1xcKiIsCisgICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50X3JlZ2V4X2FsbG93
ZWQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIs
CisgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCisgICAgICAgICAgICAgICAg
cmVnZXg6ICJcXC8iLAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIsCisgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCisgICAgICAgICAgICAgICAg
cmVnZXggOiAiXFxzKyIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbjog
ImVtcHR5IiwKKyAgICAgICAgICAgICAgICByZWdleDogIiIsCisgICAgICAgICAgICAgICAgbmV4
dDogInN0YXJ0IgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicmVnZXgiOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5v
cGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9
fHhbXFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0
b2tlbjogInN0cmluZy5yZWdleHAiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1xcdyoiLAor
ICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gOiAiaW52YWxpZCIsCisgICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xk
Kyw/KD86XGQrKT99WysqXXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KKyAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUi
LAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfHtcZCssPyg/OlxkKyk/fXx7
LFxkK318WysqXVw/fFsoKSReKyo/XS8KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5kZWxpbWl0ZXIiLAorICAgICAgICAgICAgICAg
IHJlZ2V4OiAvXHwvCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJj
b25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8v
LAorICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLAorICAgICAg
ICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAgICAgICAg
ICAgIHJlZ2V4OiAiJCIsCisgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgorICAgICAgICAg
ICAgfSwgeworICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAiCisg
ICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJyZWdleF9jaGFyYWN0ZXJfY2xhc3Mi
OiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29y
ZC5vcGVyYXRvciIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZd
ezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCisgICAgICAgICAgICAgICAgcmVn
ZXg6ICJdIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiLAorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAg
ICAgICAgICAgICAgICByZWdleDogIi0iCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgdG9rZW46ICJlbXB0eSIsCisgICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKKyAgICAgICAg
ICAgICAgICBuZXh0OiAic3RhcnQiCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCisgICAgICAgICAg
ICB9CisgICAgICAgIF0sCisgICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAorICAg
ICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKKyAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAg
ICByZWdleDogIlssIF0rIiwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB0b2tl
bjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKKyAgICAgICAgICAgICAgICByZWdleDogIiQiLAor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAorICAgICAg
ICAgICAgICAgIHJlZ2V4OiAiIiwKKyAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCisgICAg
ICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50X3JlZ2V4X2FsbG93ZWQiIDog
WworICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0
IDogInJlZ2V4X2FsbG93ZWQifSwKKyAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVu
dCJ9CisgICAgICAgIF0sCisgICAgICAgICJjb21tZW50IiA6IFsKKyAgICAgICAgICAgIHt0b2tl
biA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJzdGFydCJ9LAorICAgICAg
ICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50In0KKyAgICAgICAgXSwKKyAgICAgICAgInFx
c3RyaW5nIiA6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25z
dGFudC5sYW5ndWFnZS5lc2NhcGUiLAorICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJl
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCisgICAgICAgICAgICAgICAgbmV4dCAgOiAi
cXFzdHJpbmciLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0
cmluZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKKyAgICAgICAgICAgICAgICBu
ZXh0ICA6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVs
dFRva2VuOiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAicXN0
cmluZyIgOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3Rh
bnQubGFuZ3VhZ2UuZXNjYXBlIiwKKyAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQor
ICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCisgICAg
ICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAorICAgICAgICAgICAgICAgIG5leHQgIDogInFz
dHJpbmciLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmlu
ZyIsCisgICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKKyAgICAgICAgICAgICAgICBuZXh0
ICA6ICJzdGFydCIsCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRv
a2VuOiAic3RyaW5nIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIHRo
aXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKKyAgICAgICAg
WyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKK307CisK
K29vcC5pbmhlcml0cyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxl
cyk7CisKK2V4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hs
aWdodFJ1bGVzOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hs
aWdodF9ydWxlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsK
K3ZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVz
IikuVGV4dEhpZ2hsaWdodFJ1bGVzOworCit2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0g
ZnVuY3Rpb24oKSB7CisKKyAgICB0aGlzLiRydWxlcyA9IHsKKyAgICAgICAgInN0YXJ0IiA6IFsg
eworICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKKyAgICAgICAgICAgIHJl
Z2V4IDogIkBbXFx3XFxkX10rIiAvLyBUT0RPOiBmaXggZW1haWwgYWRkcmVzc2VzCisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCisgICAgICAgICAg
ICByZWdleCA6ICJcXGJUT0RPXFxiIgorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZWZhdWx0
VG9rZW4gOiAiY29tbWVudC5kb2MiCisgICAgICAgIH1dCisgICAgfTsKK307CisKK29vcC5pbmhl
cml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CisKK0Rv
Y0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewor
ICAgIHJldHVybiB7CisgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gZG9jIGNvbW1l
bnQKKyAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCisgICAgICAgIG5leHQgIDogc3Rh
cnQKKyAgICB9OworfTsKKworRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUgPSBm
dW5jdGlvbiAoc3RhcnQpIHsKKyAgICByZXR1cm4geworICAgICAgICB0b2tlbiA6ICJjb21tZW50
LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAorICAgICAgICByZWdleCA6ICJcXCpcXC8iLAorICAg
ICAgICBuZXh0ICA6IHN0YXJ0CisgICAgfTsKK307CisKKworZXhwb3J0cy5Eb2NDb21tZW50SGln
aGxpZ2h0UnVsZXMgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CisKK30pOworCithY2UuZGVm
aW5lKCdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7CisKKwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKKwor
dmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKKworKGZ1bmN0aW9uKCkg
eworCisgICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgeworICAg
ICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOworICAgIH07CisKKyAgICB0
aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUg
PSBkb2MuZ2V0TGluZShyb3cpOworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxz
Klx9KS8pOworCisgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOworCisgICAgICAgIHZhciBj
b2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2Mu
ZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CisKKyAgICAg
ICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAw
OworCisgICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3Bl
bkJyYWNlUG9zLnJvdykpOworICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCBy
b3csIGNvbHVtbi0xKSwgaW5kZW50KTsKKyAgICB9OworCisgICAgdGhpcy4kZ2V0SW5kZW50ID0g
ZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKykv
KTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gIiI7CisgICAgfTsKKworfSkuY2FsbChNYXRjaGlu
Z0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOworCitleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50
ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cit9KTsKKworYWNlLmRlZmluZSgnYWNlL21vZGUvYmVo
YXZpb3VyL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2Uv
bGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFy
IG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKK3ZhciBCZWhhdmlvdXIgPSByZXF1aXJl
KCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cit2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUo
Ii4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKK3ZhciBsYW5nID0gcmVxdWly
ZSgiLi4vLi4vbGliL2xhbmciKTsKKwordmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CisgICAg
WyJ0ZXh0IiwgInBhcmVuLnJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwordmFyIFNB
RkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMgPQorICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiY29tbWVudCJdOworCisKK3ZhciBhdXRvSW5zZXJ0ZWRC
cmFja2V0cyA9IDA7Cit2YXIgYXV0b0luc2VydGVkUm93ID0gLTE7Cit2YXIgYXV0b0luc2VydGVk
TGluZUVuZCA9ICIiOwordmFyIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Cit2YXIgbWF5YmVJ
bnNlcnRlZFJvdyA9IC0xOwordmFyIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKK3ZhciBt
YXliZUluc2VydGVkTGluZUVuZCA9ICIiOworCit2YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rp
b24gKCkgeworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5j
dGlvbihlZGl0b3IsIHNlc3Npb24pIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRD
dXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRv
cihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgaWYgKCF0aGlz
LiRtYXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNB
RkVfSU5TRVJUX0lOX1RPS0VOUykpIHsKKyAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcg
VG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50
VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJk
KCk7CisgICAgICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vy
c29yLnJvdyB8fAorICAgICAgICAgICAgdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0
Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKKyAg
ICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlv
bih0b2tlbiwgdHlwZXMpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlw
ZSB8fCB0b2tlbikgPiAtMTsKKyAgICB9OworICAgIAorICAgIENzdHlsZUJlaGF2aW91ci5yZWNv
cmRBdXRvSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CisgICAg
ICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAgdmFy
IGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOworICAgICAgICBpZiAoIXRo
aXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVu
ZFswXSkpCisgICAgICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7CisgICAgICAgIGF1
dG9JbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CisgICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQg
PSBicmFja2V0ICsgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CisgICAgICAgIGF1dG9JbnNl
cnRlZEJyYWNrZXRzKys7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3Jk
TWF5YmVJbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKKyAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAgIGlmICghdGhp
cy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpCisgICAgICAgICAgICBtYXli
ZUluc2VydGVkQnJhY2tldHMgPSAwOworICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29y
LnJvdzsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1
cnNvci5jb2x1bW4pICsgYnJhY2tldDsKKyAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBs
aW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKTsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRz
Kys7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9z
aW5nID0gZnVuY3Rpb24oY3Vyc29yLCBsaW5lLCBicmFja2V0KSB7CisgICAgICAgIHJldHVybiBh
dXRvSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKKyAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1
dG9JbnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGlu
ZUVuZFswXSAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1
dG9JbnNlcnRlZExpbmVFbmQ7CisgICAgfTsKKyAgICAKKyAgICBDc3R5bGVCZWhhdmlvdXIuaXNN
YXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkgeworICAgICAgICBy
ZXR1cm4gbWF5YmVJbnNlcnRlZEJyYWNrZXRzID4gMCAmJgorICAgICAgICAgICAgY3Vyc29yLnJv
dyA9PT0gbWF5YmVJbnNlcnRlZFJvdyAmJgorICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29y
LmNvbHVtbikgPT09IG1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmCisgICAgICAgICAgICBsaW5lLnN1
YnN0cigwLCBjdXJzb3IuY29sdW1uKSA9PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OworICAgIH07
CisgICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgYXV0b0luc2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVF
bmQuc3Vic3RyKDEpOworICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOworICAgIH07Cisg
ICAgCisgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKKyAgICAgICAgbWF5
YmVJbnNlcnRlZFJvdyA9IC0xOworICAgIH07CisKKyAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImlu
c2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQp
IHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAg
ICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CisgICAgICAg
IGlmICh0ZXh0ID09ICd7JykgeworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5n
ZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09
ICIiICYmIHNlbGVjdGVkICE9PSAieyIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dDogJ3snICsgc2VsZWN0ZWQgKyAnfScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjog
ZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVC
ZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoL1tcXVx9XCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7CisgICAgICAg
ICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vz
c2lvbiwgIn0iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQ6ICd7fScsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChl
ZGl0b3IsIHNlc3Npb24sICJ7Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAneycsCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgeworICAg
ICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1
cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0
KCd9Jywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNB
dXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAodGV4dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7CisgICAgICAgICAgICB2YXIg
Y2xvc2luZyA9ICIiOworICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5z
ZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpIHsKKyAgICAgICAgICAgICAgICBjbG9zaW5nID0g
bGFuZy5zdHJpbmdSZXBlYXQoIn0iLCBtYXliZUluc2VydGVkQnJhY2tldHMpOworICAgICAgICAg
ICAgICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vy
c29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hh
ciA9PSAnfScgfHwgY2xvc2luZyAhPT0gIiIpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbkJy
YWNlUG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNv
bHVtbjogY3Vyc29yLmNvbHVtbn0sICd9Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJh
Y2VQb3MpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAg
ICAgIHZhciBpbmRlbnQgPSB0aGlzLmdldE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0
cmluZygwLCBjdXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7CisgICAgICAg
ICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGlu
ZGVudCArICdcbicgKyBuZXh0X2luZGVudCArIGNsb3NpbmcsCisgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhp
cy5hZGQoImJyYWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0
b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9j
LmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAm
JiBzZWxlY3RlZCA9PSAneycpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2Mu
Z2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxp
bmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKKyAg
ICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgcmFuZ2Uu
ZW5kLmNvbHVtbisrOworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAi
aW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4
dCkgeworICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rp
b24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rl
ZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYg
KHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcg
KyBzZWxlY3RlZCArICcpJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91
ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAor
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKKyAgICAg
ICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKKyAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKKyAgICAgICAg
ICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3Iu
Y29sdW1uICsgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAgICAg
ICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScs
IHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0lu
c2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAg
IENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7
CisKKyAgICB0aGlzLmFkZCgicGFyZW5zIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBh
Y3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0g
c2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc011
bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICcoJykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBz
ZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICB2YXIgcmln
aHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3Rh
cnQuY29sdW1uICsgMik7CisgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgeworICAg
ICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRk
KCJicmFja2V0cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9y
LCBzZXNzaW9uLCB0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09ICdbJykgeworICAgICAgICAg
ICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICAg
ICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7Cisg
ICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vy
c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICdbJyArIHNlbGVjdGVkICsgJ10nLAorICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Q3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7CisgICAg
ICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNz
aW9uLCAiXSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IHRleHQ6ICdbXScsCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09
ICddJykgeworICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlv
bigpOworICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOworICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5j
b2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0g
J10nKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5p
bmdCcmFja2V0KCddJywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJv
d30pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhh
dmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1
bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CisgICAgICAg
IHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CisgICAgICAg
IGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKKyAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOworICAg
ICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVt
biArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOworICAgICAgICAgICAgaWYgKHJpZ2h0Q2hh
ciA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7
CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24g
KHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgeworICAgICAgICBpZiAodGV4
dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7
CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7
CisgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09
ICInIiAmJiBzZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOworICAg
ICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsK
KyAgICAgICAgICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29s
dW1uLTEsIGN1cnNvci5jb2x1bW4pOworICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAn
XFwnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0
aW9uLnN0YXJ0LnJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOworICAg
ICAgICAgICAgICAgIHZhciBxdW90ZXBvcyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGlu
c2lkZSBhbiBvcGVuIHF1b3RlLgorCisgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHgg
PCB0b2tlbnMubGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tl
bnNbeF07CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7
CisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChxdW90ZXBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBxdW90
ZXBvcyA9IHRva2VuLnZhbHVlLmluZGV4T2YocXVvdGUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNl
bGVjdGlvbi5zdGFydC5jb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNb
eF0udmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IXRva2VuIHx8IChxdW90ZXBvcyA8IDAgJiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0
b2tlbi50eXBlICE9PSAic3RyaW5nIiB8fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRv
a2VuLnZhbHVlLmxlbmd0aCtjb2wtMSkgJiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUp
ID09PSB0b2tlbi52YWx1ZS5sZW5ndGgtMSkpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IUNzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLDFdCisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5n
IikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmco
Y3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOworICAgICAgICAgICAgICAgICAgICBp
ZiAocmlnaHRDaGFyID09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCisgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAi
ZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5n
ZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFu
Z2UpOworICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICci
JyB8fCBzZWxlY3RlZCA9PSAiJyIpKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKKyAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1
bW4gKyAyKTsKKyAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKKyAgICAg
ICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJh
bmdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKK307CisKK29vcC5pbmhl
cml0cyhDc3R5bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7CisKK2V4cG9ydHMuQ3N0eWxlQmVoYXZp
b3VyID0gQ3N0eWxlQmVoYXZpb3VyOworfSk7CisKK2FjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRp
bmcvY3N0eWxlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvcmFuZ2UnLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24o
cmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKwordmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4u
L2xpYi9vb3AiKTsKK3ZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cit2
YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKKwordmFy
IEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Citvb3AuaW5oZXJp
dHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CisKKyhmdW5jdGlvbigpIHsKKworICAgIHRoaXMu
Zm9sZGluZ1N0YXJ0TWFya2VyID0gLyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87CisgICAg
dGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8p
LzsKKworICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9s
ZFN0eWxlLCByb3cpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsK
KyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7
CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsK
KworICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Lm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAg
ICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hb
MF0ubGVuZ3RoLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJt
YXJrYmVnaW5lbmQiKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYXRjaCA9
IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CisgICAgICAgIGlmIChtYXRjaCkg
eworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKwor
ICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNs
b3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CisgICAg
ICAgIH0KKyAgICB9OworCit9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7CisKK30pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVfdGV4
dG1hdGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90
ZXh0bWF0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGY2N2ZhNDExNzBiMWU5M2IzNWM2MmQ1YWJiNDg0MTE2
MjFhMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qICoqKioqIEJF
R0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGlj
ZW5zZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFqYXgub3JnIEIuVi4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAq
ICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQUpBWC5PUkcgQi5WLiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCithY2UuZGVmaW5lKCdh
Y2UvdGhlbWUvdGV4dG1hdGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvZG9tJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisKK2V4
cG9ydHMuaXNEYXJrID0gZmFsc2U7CitleHBvcnRzLmNzc0NsYXNzID0gImFjZS10bSI7CitleHBv
cnRzLmNzc1RleHQgPSAiLmFjZS10bSAuYWNlX2d1dHRlciB7XAorYmFja2dyb3VuZDogI2YwZjBm
MDtcCitjb2xvcjogIzMzMztcCit9XAorLmFjZS10bSAuYWNlX3ByaW50LW1hcmdpbiB7XAord2lk
dGg6IDFweDtcCitiYWNrZ3JvdW5kOiAjZThlOGU4O1wKK31cCisuYWNlLXRtIC5hY2VfZm9sZCB7
XAorYmFja2dyb3VuZC1jb2xvcjogIzZCNzJFNjtcCit9XAorLmFjZS10bSAuYWNlX3Njcm9sbGVy
IHtcCitiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKK31cCisuYWNlLXRtIC5hY2VfY3Vyc29y
IHtcCitib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2Vfb3Zl
cndyaXRlLWN1cnNvcnMgLmFjZV9jdXJzb3Ige1wKK2JvcmRlci1sZWZ0OiAwcHg7XAorYm9yZGVy
LWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1wKK31cCisuYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtc
Citjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RvcmFnZSxc
CisuYWNlLXRtIC5hY2Vfa2V5d29yZCB7XAorY29sb3I6IGJsdWU7XAorfVwKKy5hY2UtdG0gLmFj
ZV9jb25zdGFudCB7XAorY29sb3I6IHJnYigxOTcsIDYsIDExKTtcCit9XAorLmFjZS10bSAuYWNl
X2NvbnN0YW50LmFjZV9idWlsZGluIHtcCitjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCit9XAor
LmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XAorY29sb3I6IHJnYig4OCwgOTIs
IDI0Nik7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XAorY29sb3I6
IHJnYig2LCAxNTAsIDE0KTtcCit9XAorLmFjZS10bSAuYWNlX2ludmFsaWQge1wKK2JhY2tncm91
bmQtY29sb3I6IHJnYmEoMjU1LCAwLCAwLCAwLjEpO1wKK2NvbG9yOiByZWQ7XAorfVwKKy5hY2Ut
dG0gLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XAorY29sb3I6IHJnYig2MCwgNzYsIDExNCk7
XAorfVwKKy5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XAorY29sb3I6IHJnYig2
LCAxNTAsIDE0KTtcCit9XAorLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsXAorLmFjZS10
bSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtcCitjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wK
K31cCisuYWNlLXRtIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKK2NvbG9yOiByZ2IoMTA0
LCAxMTgsIDEzNSk7XAorfVwKKy5hY2UtdG0gLmFjZV9zdHJpbmcge1wKK2NvbG9yOiByZ2IoMywg
MTA2LCA3KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQge1wKK2NvbG9yOiByZ2IoNzYsIDEz
NiwgMTA3KTtcCit9XAorLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XAorY29sb3I6IHJn
YigwLCAxMDIsIDI1NSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3Rh
ZyB7XAorY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX2NvbnN0
YW50LmFjZV9udW1lcmljIHtcCitjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAorfVwKKy5hY2UtdG0g
LmFjZV92YXJpYWJsZSB7XAorY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKK31cCisuYWNlLXRt
IC5hY2VfeG1sLXBlIHtcCitjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAorfVwKKy5hY2UtdG0g
LmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHtcCitjb2xvcjogIzAwMDBBMjtcCit9
XAorLmFjZS10bSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7XAorY29sb3I6IHJnYigxMiwgNywg
MjU1KTtcCit9XAorLmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7XAorY29sb3I6cmdiKDE4
NSwgNiwgMTQ0KTtcCit9XAorLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XAorY29sb3I6cmdi
KDAsIDIyLCAxNDIpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XAorY29s
b3I6IHJnYigyNTUsIDAsIDApXAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9z
ZWxlY3Rpb24ge1wKK2JhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCit9XAorLmFjZS10
bS5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCitib3gtc2hhZG93
OiAwIDAgM3B4IDBweCB3aGl0ZTtcCitib3JkZXItcmFkaXVzOiAycHg7XAorfVwKKy5hY2UtdG0g
LmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUs
IDApO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKK2JhY2tn
cm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXll
ciAuYWNlX2JyYWNrZXQge1wKK21hcmdpbjogLTFweCAwIDAgLTFweDtcCitib3JkZXI6IDFweCBz
b2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIg
LmFjZV9hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCit9
XAorLmFjZS10bSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XAorYmFja2dyb3VuZC1jb2xvciA6
ICNkY2RjZGM7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13
b3JkIHtcCitiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XAorYm9yZGVyOiAxcHggc29s
aWQgcmdiKDIwMCwgMjAwLCAyNTApO1wKK31cCisuYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtc
CitiYWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8v
QndBbVZnZDEvdzExL2dBQUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAorfVwK
KyI7CisKK3ZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Citkb20uaW1wb3J0Q3NzU3Ry
aW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cit9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBlNDFlZTQxMTM1ZTAwZmY3NDBlYjYzZjUyYTY0NTNiMGMzMTA4
MzQ3Li4xMDVhOTJjNTg5OWFjODAyZjg2M2FhMmFhNjUzM2YwZDdiNTllNzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04NDcsNiArODQ3LDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRv
b2xzX2F1ZGl0c19qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nv
bmNhdGVuYXRlZF9kZXZ0b29sc19jb2RlbWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9z
bmFwc2hvdF93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdjb25jYXRlbmF0ZWRfc2NyaXB0X2Zvcm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBA
IC05MzUsNiArOTM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Y29uY2F0ZW5hdGVkX2RldnRvb2xzX3Byb2ZpbGVzX2pzJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnY29uY2F0ZW5hdGVkX2RldnRvb2xzX2F1ZGl0c19qcycsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmNhdGVuYXRlZF9kZXZ0b29sc19j
b2RlbWlycm9yX2pzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29u
Y2F0ZW5hdGVkX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfaGVhcF9zbmFwc2hvdF93b3JrZXJfanMnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jYXRlbmF0ZWRfc2NyaXB0
X2Zvcm1hdHRlcl93b3JrZXJfanMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdjb25jYXRlbmF0ZWRfZGV2dG9vbHNfY3NzJ10sCkBAIC05NTIsNiArOTU0LDcgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3Bl
Y3Rvci9Qcm9maWxlc1BhbmVsLmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQ
Uk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3Iv
Q29kZU1pcnJvclRleHRFZGl0b3IuanMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0FjZVRleHRFZGl0b3IuanMnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVj
dG9yL0hlYXBTbmFwc2hvdFdvcmtlci5qcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzwoUFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3IvU2NyaXB0Rm9ybWF0dGVyV29ya2Vy
LmpzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3Vy
Y2VzL2luc3BlY3Rvci9kZXZUb29scy5jc3MnLApAQCAtMTE4OCw2ICsxMTkxLDIyIEBACiAgICAg
ICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29uY2F0ZW5hdGVkX2RldnRv
b2xzX2FjZV9lZGl0b3JfanMnLAorICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywK
KyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAgICAgICAgICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2NvbmNhdGVuYXRlX2RldnRvb2xzX2FjZV9lZGl0b3JfanMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmlwdF9uYW1lJzogJ3NjcmlwdHMvaW5saW5lX2pz
X2ltcG9ydHMucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0X2ZpbGUnOiAnLi4v
Li4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnPEAoX3NjcmlwdF9uYW1lKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHdl
Ymluc3BlY3Rvcl9hY2VfZWRpdG9yX2pzX2ZpbGVzKScsCisgICAgICAgICAgICAgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9wYXRoJzogJy4uLy4uL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0
cyc6IFsnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9BY2VUZXh0RWRpdG9yLmpz
J10sCisgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWydweXRob24nLCAnPEAoX3Nj
cmlwdF9uYW1lKScsICc8QChfaW5wdXRfZmlsZSknLCAnPEAoX3NlYXJjaF9wYXRoKScsICc8QChf
b3V0cHV0cyknLCAndHJ1ZSddLAorICAgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9u
YW1lJzogJ2NvbmNhdGVuYXRlZF9oZWFwX3NuYXBzaG90X3dvcmtlcl9qcycsCiAgICAgICAgICAg
ICAgICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6
IFt7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>